/* valaccodebasemodule.c generated by valac, the Vala compiler
 * generated from valaccodebasemodule.vala, do not modify */

/* valaccodebasemodule.vala
 *
 * Copyright (C) 2006-2012  Jürg Billeter
 * Copyright (C) 2006-2008  Raffaele Sandrini
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 * Author:
 * 	Jürg Billeter <j@bitron.ch>
 * 	Raffaele Sandrini <raffaele@sandrini.ch>
 */

#include "valacodegen.h"
#include <vala.h>
#include <valagee.h>
#include <glib-object.h>
#include <valaccode.h>
#include <glib.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <glib/gstdio.h>
#include <float.h>
#include <math.h>
#include <gobject/gvaluecollector.h>

#define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _vala_ccode_base_module_emit_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_base_module_emit_context_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_ccode_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_file_unref (var), NULL)))
#define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
#define _vala_source_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_file_unref (var), NULL)))
#define _fclose0(var) ((var == NULL) ? NULL : (var = (fclose (var), NULL)))
#define _vala_comment_unref0(var) ((var == NULL) ? NULL : (var = (vala_comment_unref (var), NULL)))
#define _vala_ccode_declarator_suffix_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_declarator_suffix_unref (var), NULL)))
#define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))
#define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))
#define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
typedef struct _ValaCCodeBaseModuleParamSpecEmitContext ValaCCodeBaseModuleParamSpecEmitContext;
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#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; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);

struct _ValaCCodeBaseModulePrivate {
	ValaCodeContext* _context;
	ValaList* emit_context_stack;
	ValaList* line_directive_stack;
	gint next_block_id;
	ValaMap* block_map;
	ValaMap* method_inner_error_var_count;
	ValaDelegate* destroy_notify;
	ValaClass* gerror;
	ValaSet* generated_external_symbols;
	gint next_variant_function_id;
};

struct _ValaCCodeBaseModuleParamSpecEmitContext {
	GParamSpec parent_instance;
};

static gint ValaCCodeBaseModule_private_offset;
static gpointer vala_ccode_base_module_parent_class = NULL;
ValaSet* vala_ccode_base_module_reserved_identifiers = NULL;
ValaSet* vala_ccode_base_module_reserved_vala_identifiers = NULL;
gint vala_ccode_base_module_ccode_attribute_cache_index = 0;
static gpointer vala_ccode_base_module_emit_context_parent_class = NULL;

static void vala_ccode_base_module_real_emit (ValaCodeGenerator* base,
                                       ValaCodeContext* context);
static void vala_ccode_base_module_real_append_vala_array_free (ValaCCodeBaseModule* self);
static void vala_ccode_base_module_real_append_vala_array_move (ValaCCodeBaseModule* self);
static void vala_ccode_base_module_real_append_vala_array_length (ValaCCodeBaseModule* self);
static void vala_ccode_base_module_real_append_params_array (ValaCCodeBaseModule* self,
                                                      ValaMethod* m);
static void vala_ccode_base_module_append_vala_memdup2 (ValaCCodeBaseModule* self);
static void vala_ccode_base_module_append_vala_extern_define (ValaCCodeBaseModule* self,
                                                       ValaCCodeFile* decl_space);
static void vala_ccode_base_module_real_visit_source_file (ValaCodeVisitor* base,
                                                    ValaSourceFile* source_file);
static gboolean vala_ccode_base_module_real_generate_enum_declaration (ValaCCodeBaseModule* self,
                                                                ValaEnum* en,
                                                                ValaCCodeFile* decl_space);
static void vala_ccode_base_module_real_visit_enum (ValaCodeVisitor* base,
                                             ValaEnum* en);
static void vala_ccode_base_module_constant_array_ranks_sizes (ValaInitializerList* initializer_list,
                                                        gint* sizes,
                                                        gint sizes_length1,
                                                        gint rank);
static ValaCCodeDeclaratorSuffix* vala_ccode_base_module_get_constant_declarator_suffix (ValaCCodeBaseModule* self,
                                                                                  ValaConstant* c);
static void vala_ccode_base_module_real_visit_constant (ValaCodeVisitor* base,
                                                 ValaConstant* c);
static void vala_ccode_base_module_real_visit_field (ValaCodeVisitor* base,
                                              ValaField* f);
static void vala_ccode_base_module_real_visit_property (ValaCodeVisitor* base,
                                                 ValaProperty* prop);
static void vala_ccode_base_module_real_generate_class_struct_declaration (ValaCCodeBaseModule* self,
                                                                    ValaClass* cl,
                                                                    ValaCCodeFile* decl_space);
static void vala_ccode_base_module_real_generate_struct_declaration (ValaCCodeBaseModule* self,
                                                              ValaStruct* st,
                                                              ValaCCodeFile* decl_space);
static void vala_ccode_base_module_real_generate_delegate_declaration (ValaCCodeBaseModule* self,
                                                                ValaDelegate* d,
                                                                ValaCCodeFile* decl_space);
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);
static void vala_ccode_base_module_real_visit_property_accessor (ValaCodeVisitor* base,
                                                          ValaPropertyAccessor* acc);
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);
static gchar* vala_ccode_base_module_generate_cmp_wrapper (ValaCCodeBaseModule* self,
                                                    ValaCCodeIdentifier* cmpid);
static gchar* vala_ccode_base_module_generate_struct_equal_function (ValaCCodeBaseModule* self,
                                                              ValaStruct* st);
static void vala_ccode_base_module_real_visit_destructor (ValaCodeVisitor* base,
                                                   ValaDestructor* d);
static void vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self,
                                               ValaParameter* param,
                                               ValaCCodeStruct* data,
                                               gint block_id);
static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base,
                                              ValaBlock* b);
static void vala_ccode_base_module_real_visit_declaration_statement (ValaCodeVisitor* base,
                                                              ValaDeclarationStatement* stmt);
static gboolean vala_ccode_base_module_is_foreach_element_variable (ValaLocalVariable* local);
static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* base,
                                                       ValaLocalVariable* local);
static void vala_ccode_base_module_real_visit_initializer_list (ValaCodeVisitor* base,
                                                         ValaInitializerList* list);
static gboolean vala_ccode_base_module_is_in_generic_type (ValaCCodeBaseModule* self,
                                                    ValaGenericType* type);
static void vala_ccode_base_module_require_generic_accessors (ValaCCodeBaseModule* self,
                                                       ValaInterface* iface);
static ValaCCodeExpression* vala_ccode_base_module_get_generic_type_expression (ValaCCodeBaseModule* self,
                                                                         const gchar* identifier,
                                                                         ValaGenericType* type,
                                                                         gboolean is_chainup);
static ValaCCodeExpression* vala_ccode_base_module_real_get_dup_func_expression (ValaCCodeBaseModule* self,
                                                                          ValaDataType* type,
                                                                          ValaSourceReference* source_reference,
                                                                          gboolean is_chainup);
static gchar* vala_ccode_base_module_generate_struct_dup_wrapper (ValaCCodeBaseModule* self,
                                                           ValaValueType* value_type);
static void vala_ccode_base_module_make_comparable_cexpression (ValaCCodeBaseModule* self,
                                                         ValaDataType** left_type,
                                                         ValaCCodeExpression** cleft,
                                                         ValaDataType** right_type,
                                                         ValaCCodeExpression** cright);
static gchar* vala_ccode_base_module_generate_numeric_equal_function (ValaCCodeBaseModule* self,
                                                               ValaTypeSymbol* sym);
static void vala_ccode_base_module_generate_struct_copy_function (ValaCCodeBaseModule* self,
                                                           ValaStruct* st);
static void vala_ccode_base_module_generate_struct_destroy_function (ValaCCodeBaseModule* self,
                                                              ValaStruct* st);
static gchar* vala_ccode_base_module_generate_collection_free_wrapper (ValaCCodeBaseModule* self,
                                                                ValaDataType* collection_type,
                                                                ValaCCodeIdentifier* element_destroy_func_expression);
static gchar* vala_ccode_base_module_real_append_struct_array_destroy (ValaCCodeBaseModule* self,
                                                                ValaStruct* st);
static gchar* vala_ccode_base_module_real_append_struct_array_free (ValaCCodeBaseModule* self,
                                                             ValaStruct* st);
static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCodeBaseModule* self,
                                                                ValaTargetValue* value,
                                                                gboolean is_macro_definition);
static void vala_ccode_base_module_real_visit_end_full_expression (ValaCodeVisitor* base,
                                                            ValaExpression* expr);
static void vala_ccode_base_module_real_visit_expression_statement (ValaCodeVisitor* base,
                                                             ValaExpressionStatement* stmt);
static void vala_ccode_base_module_real_append_scope_free (ValaCCodeBaseModule* self,
                                                    ValaSymbol* sym,
                                                    ValaCodeNode* stop_at);
static void vala_ccode_base_module_append_param_free (ValaCCodeBaseModule* self,
                                               ValaMethod* m);
static void vala_ccode_base_module_real_visit_return_statement (ValaCodeVisitor* base,
                                                         ValaReturnStatement* stmt);
static ValaCCodeExpression* vala_ccode_base_module_get_lock_expression (ValaCCodeBaseModule* self,
                                                                 ValaStatement* stmt,
                                                                 ValaExpression* resource);
static void vala_ccode_base_module_real_visit_lock_statement (ValaCodeVisitor* base,
                                                       ValaLockStatement* stmt);
static void vala_ccode_base_module_real_visit_unlock_statement (ValaCodeVisitor* base,
                                                         ValaUnlockStatement* stmt);
static void vala_ccode_base_module_real_visit_delete_statement (ValaCodeVisitor* base,
                                                         ValaDeleteStatement* stmt);
static gboolean vala_ccode_base_module_is_compact_class_destructor_call (ValaExpression* expr);
static void vala_ccode_base_module_real_visit_expression (ValaCodeVisitor* base,
                                                   ValaExpression* expr);
static void vala_ccode_base_module_real_visit_boolean_literal (ValaCodeVisitor* base,
                                                        ValaBooleanLiteral* expr);
static void vala_ccode_base_module_real_visit_character_literal (ValaCodeVisitor* base,
                                                          ValaCharacterLiteral* expr);
static void vala_ccode_base_module_real_visit_integer_literal (ValaCodeVisitor* base,
                                                        ValaIntegerLiteral* expr);
static void vala_ccode_base_module_real_visit_real_literal (ValaCodeVisitor* base,
                                                     ValaRealLiteral* expr);
static void vala_ccode_base_module_real_visit_string_literal (ValaCodeVisitor* base,
                                                       ValaStringLiteral* expr);
static void vala_ccode_base_module_real_visit_regex_literal (ValaCodeVisitor* base,
                                                      ValaRegexLiteral* expr);
static void vala_ccode_base_module_real_visit_null_literal (ValaCodeVisitor* base,
                                                     ValaNullLiteral* expr);
static ValaTargetValue* vala_ccode_base_module_real_get_local_cvalue (ValaCCodeBaseModule* self,
                                                               ValaLocalVariable* local);
static ValaTargetValue* vala_ccode_base_module_real_get_parameter_cvalue (ValaCCodeBaseModule* self,
                                                                   ValaParameter* param);
static ValaTargetValue* vala_ccode_base_module_real_get_field_cvalue (ValaCCodeBaseModule* self,
                                                               ValaField* field,
                                                               ValaTargetValue* instance);
static ValaTargetValue* vala_ccode_base_module_real_load_variable (ValaCCodeBaseModule* self,
                                                            ValaVariable* variable,
                                                            ValaTargetValue* value,
                                                            ValaExpression* expr);
static ValaTargetValue* vala_ccode_base_module_real_load_this_parameter (ValaCCodeBaseModule* self,
                                                                  ValaTypeSymbol* sym);
static void vala_ccode_base_module_real_store_value (ValaCCodeBaseModule* self,
                                              ValaTargetValue* lvalue,
                                              ValaTargetValue* value,
                                              ValaSourceReference* source_reference);
static gchar* vala_ccode_base_module_real_get_delegate_target_cname (ValaCCodeBaseModule* self,
                                                              const gchar* delegate_cname);
static ValaCCodeExpression* vala_ccode_base_module_real_get_delegate_target_cexpression (ValaCCodeBaseModule* self,
                                                                                  ValaExpression* delegate_expr,
                                                                                  ValaCCodeExpression** delegate_target_destroy_notify);
static ValaCCodeExpression* vala_ccode_base_module_real_get_delegate_target_cvalue (ValaCCodeBaseModule* self,
                                                                             ValaTargetValue* value);
static ValaCCodeExpression* vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue (ValaCCodeBaseModule* self,
                                                                                            ValaTargetValue* value);
static gchar* vala_ccode_base_module_real_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self,
                                                                             const gchar* delegate_cname);
static void vala_ccode_base_module_real_visit_base_access (ValaCodeVisitor* base,
                                                    ValaBaseAccess* expr);
static void vala_ccode_base_module_real_visit_postfix_expression (ValaCodeVisitor* base,
                                                           ValaPostfixExpression* expr);
static ValaMemberAccess* vala_ccode_base_module_find_property_access (ValaCCodeBaseModule* self,
                                                               ValaExpression* expr);
static gboolean vala_ccode_base_module_is_limited_generic_type (ValaGenericType* type);
static ValaTargetValue* vala_ccode_base_module_real_copy_value (ValaCCodeBaseModule* self,
                                                         ValaTargetValue* value,
                                                         ValaCodeNode* node);
static void vala_ccode_base_module_real_generate_class_declaration (ValaCCodeBaseModule* self,
                                                             ValaClass* cl,
                                                             ValaCCodeFile* decl_space);
static void vala_ccode_base_module_real_generate_interface_declaration (ValaCCodeBaseModule* self,
                                                                 ValaInterface* iface,
                                                                 ValaCCodeFile* decl_space);
static gboolean vala_ccode_base_module_real_generate_method_declaration (ValaCCodeBaseModule* self,
                                                                  ValaMethod* m,
                                                                  ValaCCodeFile* decl_space);
static void vala_ccode_base_module_real_generate_error_domain_declaration (ValaCCodeBaseModule* self,
                                                                    ValaErrorDomain* edomain,
                                                                    ValaCCodeFile* decl_space);
static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCodeVisitor* base,
                                                                   ValaObjectCreationExpression* expr);
static void vala_ccode_base_module_real_visit_sizeof_expression (ValaCodeVisitor* base,
                                                          ValaSizeofExpression* expr);
static void vala_ccode_base_module_real_visit_typeof_expression (ValaCodeVisitor* base,
                                                          ValaTypeofExpression* expr);
static void vala_ccode_base_module_real_visit_unary_expression (ValaCodeVisitor* base,
                                                         ValaUnaryExpression* expr);
static ValaCCodeExpression* vala_ccode_base_module_real_deserialize_expression (ValaCCodeBaseModule* self,
                                                                         ValaDataType* type,
                                                                         ValaCCodeExpression* variant_expr,
                                                                         ValaCCodeExpression* expr,
                                                                         ValaCCodeExpression* error_expr,
                                                                         gboolean* may_fail);
static ValaCCodeExpression* vala_ccode_base_module_real_serialize_expression (ValaCCodeBaseModule* self,
                                                                       ValaDataType* type,
                                                                       ValaCCodeExpression* expr);
static void vala_ccode_base_module_real_visit_cast_expression (ValaCodeVisitor* base,
                                                        ValaCastExpression* expr);
static void vala_ccode_base_module_real_visit_named_argument (ValaCodeVisitor* base,
                                                       ValaNamedArgument* expr);
static void vala_ccode_base_module_real_visit_pointer_indirection (ValaCodeVisitor* base,
                                                            ValaPointerIndirection* expr);
static void vala_ccode_base_module_real_visit_addressof_expression (ValaCodeVisitor* base,
                                                             ValaAddressofExpression* expr);
static void vala_ccode_base_module_real_visit_reference_transfer_expression (ValaCodeVisitor* base,
                                                                      ValaReferenceTransferExpression* expr);
static void vala_ccode_base_module_real_visit_binary_expression (ValaCodeVisitor* base,
                                                          ValaBinaryExpression* expr);
static gchar* vala_ccode_base_module_generate_array_contains_wrapper (ValaCCodeBaseModule* self,
                                                               ValaArrayType* array_type);
static void vala_ccode_base_module_real_visit_type_check (ValaCodeVisitor* base,
                                                   ValaTypeCheck* expr);
static void vala_ccode_base_module_real_visit_lambda_expression (ValaCodeVisitor* base,
                                                          ValaLambdaExpression* lambda);
static ValaCCodeExpression* vala_ccode_base_module_real_get_implicit_cast_expression (ValaCCodeBaseModule* self,
                                                                               ValaCCodeExpression* source_cexpr,
                                                                               ValaDataType* expression_type,
                                                                               ValaDataType* target_type,
                                                                               ValaCodeNode* node);
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);
static void vala_ccode_base_module_real_visit_class (ValaCodeVisitor* base,
                                              ValaClass* cl);
static void vala_ccode_base_module_real_generate_dynamic_method_wrapper (ValaCCodeBaseModule* self,
                                                                  ValaDynamicMethod* method);
static ValaCCodeExpression* vala_ccode_base_module_real_get_param_spec_cexpression (ValaCCodeBaseModule* self,
                                                                             ValaProperty* prop);
static ValaCCodeExpression* vala_ccode_base_module_real_get_param_spec (ValaCCodeBaseModule* self,
                                                                 ValaProperty* prop);
static ValaCCodeExpression* vala_ccode_base_module_real_get_signal_creation (ValaCCodeBaseModule* self,
                                                                      ValaSignal* sig,
                                                                      ValaObjectTypeSymbol* type);
static ValaCCodeExpression* vala_ccode_base_module_real_get_value_getter_function (ValaCCodeBaseModule* self,
                                                                            ValaDataType* type_reference);
static ValaCCodeExpression* vala_ccode_base_module_real_get_value_setter_function (ValaCCodeBaseModule* self,
                                                                            ValaDataType* type_reference);
static ValaCCodeExpression* vala_ccode_base_module_real_get_value_taker_function (ValaCCodeBaseModule* self,
                                                                           ValaDataType* type_reference);
static void vala_ccode_base_module_real_register_dbus_info (ValaCCodeBaseModule* self,
                                                     ValaCCodeBlock* block,
                                                     ValaObjectTypeSymbol* bindable);
static gchar* vala_ccode_base_module_real_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
                                                             ValaDynamicSignal* node);
static gchar* vala_ccode_base_module_real_get_array_length_cname (ValaCCodeBaseModule* self,
                                                           const gchar* array_cname,
                                                           gint dim);
static gchar* vala_ccode_base_module_real_get_variable_array_length_cname (ValaCCodeBaseModule* self,
                                                                    ValaVariable* variable,
                                                                    gint dim);
static ValaCCodeExpression* vala_ccode_base_module_real_get_array_length_cexpression (ValaCCodeBaseModule* self,
                                                                               ValaExpression* array_expr,
                                                                               gint dim);
static ValaCCodeExpression* vala_ccode_base_module_real_get_array_length_cvalue (ValaCCodeBaseModule* self,
                                                                          ValaTargetValue* value,
                                                                          gint dim);
static gchar* vala_ccode_base_module_real_get_array_size_cname (ValaCCodeBaseModule* self,
                                                         const gchar* array_cname);
static void vala_ccode_base_module_real_add_simple_check (ValaCCodeBaseModule* self,
                                                   ValaCodeNode* node,
                                                   gboolean always_fails);
static gchar* vala_ccode_base_module_real_generate_ready_function (ValaCCodeBaseModule* self,
                                                            ValaMethod* m);
static void vala_ccode_base_module_emit_context_finalize (ValaCCodeBaseModuleEmitContext * obj);
static GType vala_ccode_base_module_emit_context_get_type_once (void);
static void vala_ccode_base_module_finalize (ValaCodeVisitor * obj);
static GType vala_ccode_base_module_get_type_once (void);
static void _vala_array_destroy (gpointer array,
                          gssize array_length,
                          GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array,
                       gssize array_length,
                       GDestroyNotify destroy_func);
static gssize _vala_array_length (gpointer array);

static inline gpointer
vala_ccode_base_module_get_instance_private (ValaCCodeBaseModule* self)
{
	return G_STRUCT_MEMBER_P (self, ValaCCodeBaseModule_private_offset);
}

ValaCodeContext*
vala_ccode_base_module_get_context (ValaCCodeBaseModule* self)
{
	ValaCodeContext* result;
	ValaCodeContext* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_context;
	result = _tmp0_;
	return result;
}

static gpointer
_vala_code_context_ref0 (gpointer self)
{
	return self ? vala_code_context_ref (self) : NULL;
}

void
vala_ccode_base_module_set_context (ValaCCodeBaseModule* self,
                                    ValaCodeContext* value)
{
	ValaCodeContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _vala_code_context_ref0 (value);
	_vala_code_context_unref0 (self->priv->_context);
	self->priv->_context = _tmp0_;
}

ValaSymbol*
vala_ccode_base_module_get_current_symbol (ValaCCodeBaseModule* self)
{
	ValaSymbol* result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaSymbol* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _tmp0_->current_symbol;
	result = _tmp1_;
	return result;
}

ValaTryStatement*
vala_ccode_base_module_get_current_try (ValaCCodeBaseModule* self)
{
	ValaTryStatement* result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaTryStatement* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _tmp0_->current_try;
	result = _tmp1_;
	return result;
}

static gpointer
_vala_code_node_ref0 (gpointer self)
{
	return self ? vala_code_node_ref (self) : NULL;
}

void
vala_ccode_base_module_set_current_try (ValaCCodeBaseModule* self,
                                        ValaTryStatement* value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaTryStatement* _tmp1_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _vala_code_node_ref0 (value);
	_vala_code_node_unref0 (_tmp0_->current_try);
	_tmp0_->current_try = _tmp1_;
}

gint
vala_ccode_base_module_get_current_try_id (ValaCCodeBaseModule* self)
{
	gint result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->emit_context;
	result = _tmp0_->current_try_id;
	return result;
}

void
vala_ccode_base_module_set_current_try_id (ValaCCodeBaseModule* self,
                                           gint value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp0_->current_try_id = value;
}

gint
vala_ccode_base_module_get_next_try_id (ValaCCodeBaseModule* self)
{
	gint result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->emit_context;
	result = _tmp0_->next_try_id;
	return result;
}

void
vala_ccode_base_module_set_next_try_id (ValaCCodeBaseModule* self,
                                        gint value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp0_->next_try_id = value;
}

ValaCatchClause*
vala_ccode_base_module_get_current_catch (ValaCCodeBaseModule* self)
{
	ValaCatchClause* result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCatchClause* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _tmp0_->current_catch;
	result = _tmp1_;
	return result;
}

void
vala_ccode_base_module_set_current_catch (ValaCCodeBaseModule* self,
                                          ValaCatchClause* value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCatchClause* _tmp1_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _vala_code_node_ref0 (value);
	_vala_code_node_unref0 (_tmp0_->current_catch);
	_tmp0_->current_catch = _tmp1_;
}

gint
vala_ccode_base_module_get_current_inner_error_id (ValaCCodeBaseModule* self)
{
	gint result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->emit_context;
	result = _tmp0_->current_inner_error_id;
	return result;
}

void
vala_ccode_base_module_set_current_inner_error_id (ValaCCodeBaseModule* self,
                                                   gint value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp0_->current_inner_error_id = value;
}

gboolean
vala_ccode_base_module_get_is_in_method_precondition (ValaCCodeBaseModule* self)
{
	gboolean result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->emit_context;
	result = _tmp0_->is_in_method_precondition;
	return result;
}

void
vala_ccode_base_module_set_is_in_method_precondition (ValaCCodeBaseModule* self,
                                                      gboolean value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp0_->is_in_method_precondition = value;
}

ValaTypeSymbol*
vala_ccode_base_module_get_current_type_symbol (ValaCCodeBaseModule* self)
{
	ValaTypeSymbol* result;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	sym = _tmp2_;
	while (TRUE) {
		ValaSymbol* _tmp3_;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		ValaSymbol* _tmp8_;
		ValaSymbol* _tmp9_;
		_tmp3_ = sym;
		if (!(_tmp3_ != NULL)) {
			break;
		}
		_tmp4_ = sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_TYPESYMBOL)) {
			ValaSymbol* _tmp5_;
			_tmp5_ = sym;
			result = G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
			_vala_code_node_unref0 (sym);
			return result;
		}
		_tmp6_ = sym;
		_tmp7_ = vala_symbol_get_parent_symbol (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = _vala_code_node_ref0 (_tmp8_);
		_vala_code_node_unref0 (sym);
		sym = _tmp9_;
	}
	result = NULL;
	_vala_code_node_unref0 (sym);
	return result;
}

ValaClass*
vala_ccode_base_module_get_current_class (ValaCCodeBaseModule* self)
{
	ValaClass* result;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_type_symbol (self);
	_tmp1_ = _tmp0_;
	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL;
	return result;
}

ValaMethod*
vala_ccode_base_module_get_current_method (ValaCCodeBaseModule* self)
{
	ValaMethod* result;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	sym = _tmp2_;
	while (TRUE) {
		ValaSymbol* _tmp3_;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		_tmp3_ = sym;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
			break;
		}
		_tmp4_ = sym;
		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
		_vala_code_node_unref0 (sym);
		sym = _tmp7_;
	}
	_tmp8_ = sym;
	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_METHOD) ? ((ValaMethod*) _tmp8_) : NULL;
	_vala_code_node_unref0 (sym);
	return result;
}

ValaPropertyAccessor*
vala_ccode_base_module_get_current_property_accessor (ValaCCodeBaseModule* self)
{
	ValaPropertyAccessor* result;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	sym = _tmp2_;
	while (TRUE) {
		ValaSymbol* _tmp3_;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		_tmp3_ = sym;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
			break;
		}
		_tmp4_ = sym;
		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
		_vala_code_node_unref0 (sym);
		sym = _tmp7_;
	}
	_tmp8_ = sym;
	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_PROPERTY_ACCESSOR) ? ((ValaPropertyAccessor*) _tmp8_) : NULL;
	_vala_code_node_unref0 (sym);
	return result;
}

ValaConstructor*
vala_ccode_base_module_get_current_constructor (ValaCCodeBaseModule* self)
{
	ValaConstructor* result;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	sym = _tmp2_;
	while (TRUE) {
		ValaSymbol* _tmp3_;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		_tmp3_ = sym;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
			break;
		}
		_tmp4_ = sym;
		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
		_vala_code_node_unref0 (sym);
		sym = _tmp7_;
	}
	_tmp8_ = sym;
	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_CONSTRUCTOR) ? ((ValaConstructor*) _tmp8_) : NULL;
	_vala_code_node_unref0 (sym);
	return result;
}

ValaDestructor*
vala_ccode_base_module_get_current_destructor (ValaCCodeBaseModule* self)
{
	ValaDestructor* result;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	sym = _tmp2_;
	while (TRUE) {
		ValaSymbol* _tmp3_;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		_tmp3_ = sym;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
			break;
		}
		_tmp4_ = sym;
		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
		_vala_code_node_unref0 (sym);
		sym = _tmp7_;
	}
	_tmp8_ = sym;
	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_DESTRUCTOR) ? ((ValaDestructor*) _tmp8_) : NULL;
	_vala_code_node_unref0 (sym);
	return result;
}

ValaDataType*
vala_ccode_base_module_get_current_return_type (ValaCCodeBaseModule* self)
{
	ValaDataType* result;
	ValaMethod* m = NULL;
	ValaMethod* _tmp0_;
	ValaMethod* _tmp1_;
	ValaMethod* _tmp2_;
	ValaMethod* _tmp3_;
	ValaPropertyAccessor* acc = NULL;
	ValaPropertyAccessor* _tmp7_;
	ValaPropertyAccessor* _tmp8_;
	ValaPropertyAccessor* _tmp9_;
	ValaPropertyAccessor* _tmp10_;
	gboolean _tmp18_ = FALSE;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_method (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	m = _tmp2_;
	_tmp3_ = m;
	if (_tmp3_ != NULL) {
		ValaMethod* _tmp4_;
		ValaDataType* _tmp5_;
		ValaDataType* _tmp6_;
		_tmp4_ = m;
		_tmp5_ = vala_callable_get_return_type ((ValaCallable*) _tmp4_);
		_tmp6_ = _tmp5_;
		result = _tmp6_;
		_vala_code_node_unref0 (m);
		return result;
	}
	_tmp7_ = vala_ccode_base_module_get_current_property_accessor (self);
	_tmp8_ = _tmp7_;
	_tmp9_ = _vala_code_node_ref0 (_tmp8_);
	acc = _tmp9_;
	_tmp10_ = acc;
	if (_tmp10_ != NULL) {
		ValaPropertyAccessor* _tmp11_;
		gboolean _tmp12_;
		gboolean _tmp13_;
		_tmp11_ = acc;
		_tmp12_ = vala_property_accessor_get_readable (_tmp11_);
		_tmp13_ = _tmp12_;
		if (_tmp13_) {
			ValaPropertyAccessor* _tmp14_;
			ValaDataType* _tmp15_;
			ValaDataType* _tmp16_;
			_tmp14_ = acc;
			_tmp15_ = vala_property_accessor_get_value_type (_tmp14_);
			_tmp16_ = _tmp15_;
			result = _tmp16_;
			_vala_code_node_unref0 (acc);
			_vala_code_node_unref0 (m);
			return result;
		} else {
			ValaDataType* _tmp17_;
			_tmp17_ = self->void_type;
			result = _tmp17_;
			_vala_code_node_unref0 (acc);
			_vala_code_node_unref0 (m);
			return result;
		}
	}
	if (vala_ccode_base_module_is_in_constructor (self)) {
		_tmp18_ = TRUE;
	} else {
		_tmp18_ = vala_ccode_base_module_is_in_destructor (self);
	}
	if (_tmp18_) {
		ValaDataType* _tmp19_;
		_tmp19_ = self->void_type;
		result = _tmp19_;
		_vala_code_node_unref0 (acc);
		_vala_code_node_unref0 (m);
		return result;
	}
	result = NULL;
	_vala_code_node_unref0 (acc);
	_vala_code_node_unref0 (m);
	return result;
}

gboolean
vala_ccode_base_module_is_in_coroutine (ValaCCodeBaseModule* self)
{
	gboolean _tmp0_ = FALSE;
	ValaMethod* _tmp1_;
	ValaMethod* _tmp2_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp1_ = vala_ccode_base_module_get_current_method (self);
	_tmp2_ = _tmp1_;
	if (_tmp2_ != NULL) {
		ValaMethod* _tmp3_;
		ValaMethod* _tmp4_;
		gboolean _tmp5_;
		gboolean _tmp6_;
		_tmp3_ = vala_ccode_base_module_get_current_method (self);
		_tmp4_ = _tmp3_;
		_tmp5_ = vala_method_get_coroutine (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp0_ = _tmp6_;
	} else {
		_tmp0_ = FALSE;
	}
	result = _tmp0_;
	return result;
}

gboolean
vala_ccode_base_module_is_in_constructor (ValaCCodeBaseModule* self)
{
	ValaMethod* _tmp0_;
	ValaMethod* _tmp1_;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaSymbol* _tmp4_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = vala_ccode_base_module_get_current_method (self);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		result = FALSE;
		return result;
	}
	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_code_node_ref0 (_tmp3_);
	sym = _tmp4_;
	while (TRUE) {
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		ValaSymbol* _tmp8_;
		ValaSymbol* _tmp9_;
		ValaSymbol* _tmp10_;
		_tmp5_ = sym;
		if (!(_tmp5_ != NULL)) {
			break;
		}
		_tmp6_ = sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_CONSTRUCTOR)) {
			result = TRUE;
			_vala_code_node_unref0 (sym);
			return result;
		}
		_tmp7_ = sym;
		_tmp8_ = vala_symbol_get_parent_symbol (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = _vala_code_node_ref0 (_tmp9_);
		_vala_code_node_unref0 (sym);
		sym = _tmp10_;
	}
	result = FALSE;
	_vala_code_node_unref0 (sym);
	return result;
}

gboolean
vala_ccode_base_module_is_in_destructor (ValaCCodeBaseModule* self)
{
	ValaMethod* _tmp0_;
	ValaMethod* _tmp1_;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaSymbol* _tmp4_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = vala_ccode_base_module_get_current_method (self);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		result = FALSE;
		return result;
	}
	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_code_node_ref0 (_tmp3_);
	sym = _tmp4_;
	while (TRUE) {
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		ValaSymbol* _tmp8_;
		ValaSymbol* _tmp9_;
		ValaSymbol* _tmp10_;
		_tmp5_ = sym;
		if (!(_tmp5_ != NULL)) {
			break;
		}
		_tmp6_ = sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_DESTRUCTOR)) {
			result = TRUE;
			_vala_code_node_unref0 (sym);
			return result;
		}
		_tmp7_ = sym;
		_tmp8_ = vala_symbol_get_parent_symbol (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = _vala_code_node_ref0 (_tmp9_);
		_vala_code_node_unref0 (sym);
		sym = _tmp10_;
	}
	result = FALSE;
	_vala_code_node_unref0 (sym);
	return result;
}

ValaBlock*
vala_ccode_base_module_get_current_closure_block (ValaCCodeBaseModule* self)
{
	ValaBlock* result;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaBlock* _tmp2_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_next_closure_block (self, _tmp1_);
	result = _tmp2_;
	return result;
}

ValaBlock*
vala_ccode_base_module_next_closure_block (ValaCCodeBaseModule* self,
                                           ValaSymbol* sym)
{
	ValaBlock* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	while (TRUE) {
		ValaMethod* method = NULL;
		gboolean _tmp0_ = FALSE;
		ValaMethod* _tmp1_;
		ValaBlock* block = NULL;
		gboolean _tmp5_ = FALSE;
		ValaMethod* _tmp6_;
		gboolean _tmp8_ = FALSE;
		ValaBlock* _tmp9_;
		ValaSymbol* _tmp14_;
		ValaSymbol* _tmp15_;
		method = G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_METHOD) ? ((ValaMethod*) sym) : NULL;
		_tmp1_ = method;
		if (_tmp1_ != NULL) {
			ValaMethod* _tmp2_;
			gboolean _tmp3_;
			gboolean _tmp4_;
			_tmp2_ = method;
			_tmp3_ = vala_method_get_closure (_tmp2_);
			_tmp4_ = _tmp3_;
			_tmp0_ = !_tmp4_;
		} else {
			_tmp0_ = FALSE;
		}
		if (_tmp0_) {
			break;
		}
		block = G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_BLOCK) ? ((ValaBlock*) sym) : NULL;
		_tmp6_ = method;
		if (_tmp6_ == NULL) {
			ValaBlock* _tmp7_;
			_tmp7_ = block;
			_tmp5_ = _tmp7_ == NULL;
		} else {
			_tmp5_ = FALSE;
		}
		if (_tmp5_) {
			break;
		}
		_tmp9_ = block;
		if (_tmp9_ != NULL) {
			ValaBlock* _tmp10_;
			gboolean _tmp11_;
			gboolean _tmp12_;
			_tmp10_ = block;
			_tmp11_ = vala_block_get_captured (_tmp10_);
			_tmp12_ = _tmp11_;
			_tmp8_ = _tmp12_;
		} else {
			_tmp8_ = FALSE;
		}
		if (_tmp8_) {
			ValaBlock* _tmp13_;
			_tmp13_ = block;
			result = _tmp13_;
			return result;
		}
		_tmp14_ = vala_symbol_get_parent_symbol (sym);
		_tmp15_ = _tmp14_;
		sym = _tmp15_;
	}
	result = NULL;
	return result;
}

ValaCCodeFunction*
vala_ccode_base_module_get_ccode (ValaCCodeBaseModule* self)
{
	ValaCCodeFunction* result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFunction* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _tmp0_->ccode;
	result = _tmp1_;
	return result;
}

ValaArrayList*
vala_ccode_base_module_get_temp_ref_values (ValaCCodeBaseModule* self)
{
	ValaArrayList* result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaArrayList* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _tmp0_->temp_ref_values;
	result = _tmp1_;
	return result;
}

gint
vala_ccode_base_module_get_next_temp_var_id (ValaCCodeBaseModule* self)
{
	gint result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->emit_context;
	result = _tmp0_->next_temp_var_id;
	return result;
}

void
vala_ccode_base_module_set_next_temp_var_id (ValaCCodeBaseModule* self,
                                             gint value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp0_->next_temp_var_id = value;
}

gboolean
vala_ccode_base_module_get_in_creation_method (ValaCCodeBaseModule* self)
{
	gboolean result;
	ValaMethod* _tmp0_;
	ValaMethod* _tmp1_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = vala_ccode_base_module_get_current_method (self);
	_tmp1_ = _tmp0_;
	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CREATION_METHOD);
	return result;
}

gboolean
vala_ccode_base_module_get_current_method_inner_error (ValaCCodeBaseModule* self)
{
	gboolean result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->emit_context;
	result = _tmp0_->current_method_inner_error;
	return result;
}

void
vala_ccode_base_module_set_current_method_inner_error (ValaCCodeBaseModule* self,
                                                       gboolean value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp0_->current_method_inner_error = value;
}

gboolean
vala_ccode_base_module_get_current_method_return (ValaCCodeBaseModule* self)
{
	gboolean result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->emit_context;
	result = _tmp0_->current_method_return;
	return result;
}

void
vala_ccode_base_module_set_current_method_return (ValaCCodeBaseModule* self,
                                                  gboolean value)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp0_->current_method_return = value;
}

ValaMap*
vala_ccode_base_module_get_variable_name_map (ValaCCodeBaseModule* self)
{
	ValaMap* result;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaMap* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _tmp0_->variable_name_map;
	result = _tmp1_;
	return result;
}

ValaCCodeBaseModule*
vala_ccode_base_module_construct (GType object_type)
{
	ValaCCodeBaseModule* self = NULL;
	const gchar* _tmp0_;
	GHashFunc _tmp4_;
	GEqualFunc _tmp5_;
	ValaHashSet* _tmp6_;
	ValaSet* _tmp7_;
	ValaSet* _tmp8_;
	ValaSet* _tmp9_;
	ValaSet* _tmp10_;
	ValaSet* _tmp11_;
	ValaSet* _tmp12_;
	ValaSet* _tmp13_;
	ValaSet* _tmp14_;
	ValaSet* _tmp15_;
	ValaSet* _tmp16_;
	ValaSet* _tmp17_;
	ValaSet* _tmp18_;
	ValaSet* _tmp19_;
	ValaSet* _tmp20_;
	ValaSet* _tmp21_;
	ValaSet* _tmp22_;
	ValaSet* _tmp23_;
	ValaSet* _tmp24_;
	ValaSet* _tmp25_;
	ValaSet* _tmp26_;
	ValaSet* _tmp27_;
	self = (ValaCCodeBaseModule*) vala_code_generator_construct (object_type);
	_tmp0_ = vala_get_build_version ();
	if (g_strcmp0 (_tmp0_, VALA_BUILD_VERSION) != 0) {
		const gchar* _tmp1_;
		gchar* _tmp2_;
		gchar* _tmp3_;
		_tmp1_ = vala_get_build_version ();
		_tmp2_ = g_strdup_printf ("Integrity check failed (libvala %s doesn't match ccodegen %s)", _tmp1_, VALA_BUILD_VERSION);
		_tmp3_ = _tmp2_;
		vala_report_error (NULL, "%s", _tmp3_);
		_g_free0 (_tmp3_);
	}
	_tmp4_ = g_str_hash;
	_tmp5_ = g_str_equal;
	_tmp6_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp4_, _tmp5_);
	_vala_iterable_unref0 (self->predefined_marshal_set);
	self->predefined_marshal_set = (ValaSet*) _tmp6_;
	_tmp7_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp7_, "VOID:VOID");
	_tmp8_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp8_, "VOID:BOOLEAN");
	_tmp9_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp9_, "VOID:CHAR");
	_tmp10_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp10_, "VOID:UCHAR");
	_tmp11_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp11_, "VOID:INT");
	_tmp12_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp12_, "VOID:UINT");
	_tmp13_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp13_, "VOID:LONG");
	_tmp14_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp14_, "VOID:ULONG");
	_tmp15_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp15_, "VOID:ENUM");
	_tmp16_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp16_, "VOID:FLAGS");
	_tmp17_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp17_, "VOID:FLOAT");
	_tmp18_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp18_, "VOID:DOUBLE");
	_tmp19_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp19_, "VOID:STRING");
	_tmp20_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp20_, "VOID:POINTER");
	_tmp21_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp21_, "VOID:OBJECT");
	_tmp22_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp22_, "STRING:OBJECT,POINTER");
	_tmp23_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp23_, "VOID:UINT,POINTER");
	_tmp24_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp24_, "BOOLEAN:FLAGS");
	_tmp25_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp25_, "VOID:BOXED");
	_tmp26_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp26_, "VOID:VARIANT");
	_tmp27_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp27_, "BOOLEAN:BOXED,BOXED");
	vala_ccode_base_module_init ();
	return self;
}

void
vala_ccode_base_module_init (void)
{
	ValaSet* _tmp0_;
	GHashFunc _tmp1_;
	GEqualFunc _tmp2_;
	ValaHashSet* _tmp3_;
	ValaSet* _tmp4_;
	ValaSet* _tmp5_;
	ValaSet* _tmp6_;
	ValaSet* _tmp7_;
	ValaSet* _tmp8_;
	ValaSet* _tmp9_;
	ValaSet* _tmp10_;
	ValaSet* _tmp11_;
	ValaSet* _tmp12_;
	ValaSet* _tmp13_;
	ValaSet* _tmp14_;
	ValaSet* _tmp15_;
	ValaSet* _tmp16_;
	ValaSet* _tmp17_;
	ValaSet* _tmp18_;
	ValaSet* _tmp19_;
	ValaSet* _tmp20_;
	ValaSet* _tmp21_;
	ValaSet* _tmp22_;
	ValaSet* _tmp23_;
	ValaSet* _tmp24_;
	ValaSet* _tmp25_;
	ValaSet* _tmp26_;
	ValaSet* _tmp27_;
	ValaSet* _tmp28_;
	ValaSet* _tmp29_;
	ValaSet* _tmp30_;
	ValaSet* _tmp31_;
	ValaSet* _tmp32_;
	ValaSet* _tmp33_;
	ValaSet* _tmp34_;
	ValaSet* _tmp35_;
	ValaSet* _tmp36_;
	ValaSet* _tmp37_;
	ValaSet* _tmp38_;
	ValaSet* _tmp39_;
	ValaSet* _tmp40_;
	ValaSet* _tmp41_;
	ValaSet* _tmp42_;
	ValaSet* _tmp43_;
	ValaSet* _tmp44_;
	ValaSet* _tmp45_;
	ValaSet* _tmp46_;
	ValaSet* _tmp47_;
	ValaSet* _tmp48_;
	ValaSet* _tmp49_;
	GHashFunc _tmp50_;
	GEqualFunc _tmp51_;
	ValaHashSet* _tmp52_;
	ValaSet* _tmp53_;
	ValaSet* _tmp54_;
	ValaSet* _tmp55_;
	_tmp0_ = vala_ccode_base_module_reserved_identifiers;
	if (_tmp0_ != NULL) {
		return;
	}
	_tmp1_ = g_str_hash;
	_tmp2_ = g_str_equal;
	_tmp3_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp1_, _tmp2_);
	_vala_iterable_unref0 (vala_ccode_base_module_reserved_identifiers);
	vala_ccode_base_module_reserved_identifiers = (ValaSet*) _tmp3_;
	_tmp4_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp4_, "_Bool");
	_tmp5_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp5_, "_Complex");
	_tmp6_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp6_, "_Imaginary");
	_tmp7_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp7_, "asm");
	_tmp8_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp8_, "auto");
	_tmp9_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp9_, "break");
	_tmp10_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp10_, "case");
	_tmp11_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp11_, "char");
	_tmp12_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp12_, "const");
	_tmp13_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp13_, "continue");
	_tmp14_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp14_, "default");
	_tmp15_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp15_, "do");
	_tmp16_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp16_, "double");
	_tmp17_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp17_, "else");
	_tmp18_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp18_, "enum");
	_tmp19_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp19_, "extern");
	_tmp20_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp20_, "float");
	_tmp21_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp21_, "for");
	_tmp22_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp22_, "goto");
	_tmp23_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp23_, "if");
	_tmp24_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp24_, "inline");
	_tmp25_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp25_, "int");
	_tmp26_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp26_, "long");
	_tmp27_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp27_, "register");
	_tmp28_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp28_, "restrict");
	_tmp29_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp29_, "return");
	_tmp30_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp30_, "short");
	_tmp31_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp31_, "signed");
	_tmp32_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp32_, "sizeof");
	_tmp33_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp33_, "static");
	_tmp34_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp34_, "struct");
	_tmp35_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp35_, "switch");
	_tmp36_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp36_, "typedef");
	_tmp37_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp37_, "union");
	_tmp38_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp38_, "unsigned");
	_tmp39_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp39_, "void");
	_tmp40_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp40_, "volatile");
	_tmp41_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp41_, "while");
	_tmp42_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp42_, "_Alignas");
	_tmp43_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp43_, "_Alignof");
	_tmp44_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp44_, "_Atomic");
	_tmp45_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp45_, "_Generic");
	_tmp46_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp46_, "_Noreturn");
	_tmp47_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp47_, "_Static_assert");
	_tmp48_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp48_, "_Thread_local");
	_tmp49_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp49_, "cdecl");
	_tmp50_ = g_str_hash;
	_tmp51_ = g_str_equal;
	_tmp52_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp50_, _tmp51_);
	_vala_iterable_unref0 (vala_ccode_base_module_reserved_vala_identifiers);
	vala_ccode_base_module_reserved_vala_identifiers = (ValaSet*) _tmp52_;
	_tmp53_ = vala_ccode_base_module_reserved_vala_identifiers;
	vala_collection_add ((ValaCollection*) _tmp53_, "error");
	_tmp54_ = vala_ccode_base_module_reserved_vala_identifiers;
	vala_collection_add ((ValaCollection*) _tmp54_, "result");
	_tmp55_ = vala_ccode_base_module_reserved_vala_identifiers;
	vala_collection_add ((ValaCollection*) _tmp55_, "self");
}

static gpointer
_vala_iterable_ref0 (gpointer self)
{
	return self ? vala_iterable_ref (self) : NULL;
}

static void
vala_ccode_base_module_real_emit (ValaCodeGenerator* base,
                                  ValaCodeContext* context)
{
	ValaCCodeBaseModule * self;
	ValaProfile _tmp0_;
	ValaProfile _tmp1_;
	ValaNamespace* _tmp2_;
	ValaNamespace* _tmp3_;
	ValaSymbol* _tmp4_;
	ValaSymbol* _tmp5_;
	ValaScope* _tmp6_;
	ValaScope* _tmp7_;
	ValaSymbol* _tmp8_;
	ValaStruct* _tmp9_;
	ValaBooleanType* _tmp10_;
	ValaSymbol* _tmp11_;
	ValaScope* _tmp12_;
	ValaScope* _tmp13_;
	ValaSymbol* _tmp14_;
	ValaStruct* _tmp15_;
	ValaIntegerType* _tmp16_;
	ValaSymbol* _tmp17_;
	ValaScope* _tmp18_;
	ValaScope* _tmp19_;
	ValaSymbol* _tmp20_;
	ValaStruct* _tmp21_;
	ValaIntegerType* _tmp22_;
	ValaSymbol* _tmp23_;
	ValaScope* _tmp24_;
	ValaScope* _tmp25_;
	ValaSymbol* _tmp26_;
	ValaStruct* _tmp27_;
	ValaIntegerType* _tmp28_;
	ValaSymbol* _tmp29_;
	ValaScope* _tmp30_;
	ValaScope* _tmp31_;
	ValaSymbol* _tmp32_;
	ValaStruct* _tmp33_;
	ValaIntegerType* _tmp34_;
	ValaSymbol* _tmp35_;
	ValaScope* _tmp36_;
	ValaScope* _tmp37_;
	ValaSymbol* _tmp38_;
	ValaStruct* _tmp39_;
	ValaIntegerType* _tmp40_;
	ValaSymbol* _tmp41_;
	ValaScope* _tmp42_;
	ValaScope* _tmp43_;
	ValaSymbol* _tmp44_;
	ValaStruct* _tmp45_;
	ValaIntegerType* _tmp46_;
	ValaSymbol* _tmp47_;
	ValaScope* _tmp48_;
	ValaScope* _tmp49_;
	ValaSymbol* _tmp50_;
	ValaStruct* _tmp51_;
	ValaIntegerType* _tmp52_;
	ValaSymbol* _tmp53_;
	ValaScope* _tmp54_;
	ValaScope* _tmp55_;
	ValaSymbol* _tmp56_;
	ValaStruct* _tmp57_;
	ValaIntegerType* _tmp58_;
	ValaSymbol* _tmp59_;
	ValaScope* _tmp60_;
	ValaScope* _tmp61_;
	ValaSymbol* _tmp62_;
	ValaStruct* _tmp63_;
	ValaIntegerType* _tmp64_;
	ValaSymbol* _tmp65_;
	ValaScope* _tmp66_;
	ValaScope* _tmp67_;
	ValaSymbol* _tmp68_;
	ValaStruct* _tmp69_;
	ValaIntegerType* _tmp70_;
	ValaSymbol* _tmp71_;
	ValaScope* _tmp72_;
	ValaScope* _tmp73_;
	ValaSymbol* _tmp74_;
	ValaStruct* _tmp75_;
	ValaIntegerType* _tmp76_;
	ValaSymbol* _tmp77_;
	ValaScope* _tmp78_;
	ValaScope* _tmp79_;
	ValaSymbol* _tmp80_;
	ValaStruct* _tmp81_;
	ValaIntegerType* _tmp82_;
	ValaSymbol* _tmp83_;
	ValaScope* _tmp84_;
	ValaScope* _tmp85_;
	ValaSymbol* _tmp86_;
	ValaStruct* _tmp87_;
	ValaIntegerType* _tmp88_;
	ValaSymbol* _tmp89_;
	ValaScope* _tmp90_;
	ValaScope* _tmp91_;
	ValaSymbol* _tmp92_;
	ValaStruct* _tmp93_;
	ValaIntegerType* _tmp94_;
	ValaSymbol* _tmp95_;
	ValaScope* _tmp96_;
	ValaScope* _tmp97_;
	ValaSymbol* _tmp98_;
	ValaStruct* _tmp99_;
	ValaIntegerType* _tmp100_;
	ValaSymbol* _tmp101_;
	ValaScope* _tmp102_;
	ValaScope* _tmp103_;
	ValaSymbol* _tmp104_;
	ValaStruct* _tmp105_;
	ValaIntegerType* _tmp106_;
	ValaSymbol* _tmp107_;
	ValaScope* _tmp108_;
	ValaScope* _tmp109_;
	ValaSymbol* _tmp110_;
	ValaStruct* _tmp111_;
	ValaIntegerType* _tmp112_;
	ValaSymbol* _tmp113_;
	ValaScope* _tmp114_;
	ValaScope* _tmp115_;
	ValaSymbol* _tmp116_;
	ValaStruct* _tmp117_;
	ValaIntegerType* _tmp118_;
	ValaSymbol* _tmp119_;
	ValaScope* _tmp120_;
	ValaScope* _tmp121_;
	ValaSymbol* _tmp122_;
	ValaStruct* _tmp123_;
	ValaFloatingType* _tmp124_;
	ValaSymbol* _tmp125_;
	ValaScope* _tmp126_;
	ValaScope* _tmp127_;
	ValaSymbol* _tmp128_;
	ValaStruct* _tmp129_;
	ValaFloatingType* _tmp130_;
	ValaSymbol* _tmp131_;
	ValaScope* _tmp132_;
	ValaScope* _tmp133_;
	ValaSymbol* _tmp134_;
	ValaClass* _tmp135_;
	ValaObjectType* _tmp136_;
	ValaStruct* unichar_struct = NULL;
	ValaSymbol* _tmp137_;
	ValaScope* _tmp138_;
	ValaScope* _tmp139_;
	ValaSymbol* _tmp140_;
	ValaStruct* _tmp141_;
	ValaProfile _tmp144_;
	ValaProfile _tmp145_;
	ValaSymbol* gtk_ns = NULL;
	ValaSymbol* _tmp327_;
	ValaScope* _tmp328_;
	ValaScope* _tmp329_;
	ValaSymbol* _tmp330_;
	ValaSymbol* _tmp331_;
	ValaCCodeFile* _tmp336_;
	ValaCCodeFile* _tmp337_;
	ValaList* source_files = NULL;
	ValaList* _tmp338_;
	ValaList* _tmp339_;
	const gchar* _tmp359_;
	const gchar* _tmp360_;
	const gchar* _tmp379_;
	const gchar* _tmp380_;
	const gchar* _tmp396_;
	const gchar* _tmp397_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (context != NULL);
	vala_ccode_base_module_set_context (self, context);
	_tmp0_ = vala_code_context_get_profile (context);
	_tmp1_ = _tmp0_;
	vala_ccode_init (_tmp1_);
	_tmp2_ = vala_code_context_get_root (context);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp3_);
	_vala_code_node_unref0 (self->root_symbol);
	self->root_symbol = _tmp4_;
	_tmp5_ = self->root_symbol;
	_tmp6_ = vala_symbol_get_scope (_tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_scope_lookup (_tmp7_, "bool");
	_tmp9_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp10_ = vala_boolean_type_new (_tmp9_, NULL);
	_vala_code_node_unref0 (self->bool_type);
	self->bool_type = (ValaDataType*) _tmp10_;
	_vala_code_node_unref0 (_tmp9_);
	_tmp11_ = self->root_symbol;
	_tmp12_ = vala_symbol_get_scope (_tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_scope_lookup (_tmp13_, "char");
	_tmp15_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp16_ = vala_integer_type_new (_tmp15_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->char_type);
	self->char_type = (ValaDataType*) _tmp16_;
	_vala_code_node_unref0 (_tmp15_);
	_tmp17_ = self->root_symbol;
	_tmp18_ = vala_symbol_get_scope (_tmp17_);
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_scope_lookup (_tmp19_, "uchar");
	_tmp21_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp22_ = vala_integer_type_new (_tmp21_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->uchar_type);
	self->uchar_type = (ValaDataType*) _tmp22_;
	_vala_code_node_unref0 (_tmp21_);
	_tmp23_ = self->root_symbol;
	_tmp24_ = vala_symbol_get_scope (_tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_scope_lookup (_tmp25_, "short");
	_tmp27_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp28_ = vala_integer_type_new (_tmp27_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->short_type);
	self->short_type = (ValaDataType*) _tmp28_;
	_vala_code_node_unref0 (_tmp27_);
	_tmp29_ = self->root_symbol;
	_tmp30_ = vala_symbol_get_scope (_tmp29_);
	_tmp31_ = _tmp30_;
	_tmp32_ = vala_scope_lookup (_tmp31_, "ushort");
	_tmp33_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp34_ = vala_integer_type_new (_tmp33_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->ushort_type);
	self->ushort_type = (ValaDataType*) _tmp34_;
	_vala_code_node_unref0 (_tmp33_);
	_tmp35_ = self->root_symbol;
	_tmp36_ = vala_symbol_get_scope (_tmp35_);
	_tmp37_ = _tmp36_;
	_tmp38_ = vala_scope_lookup (_tmp37_, "int");
	_tmp39_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp38_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp40_ = vala_integer_type_new (_tmp39_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->int_type);
	self->int_type = (ValaDataType*) _tmp40_;
	_vala_code_node_unref0 (_tmp39_);
	_tmp41_ = self->root_symbol;
	_tmp42_ = vala_symbol_get_scope (_tmp41_);
	_tmp43_ = _tmp42_;
	_tmp44_ = vala_scope_lookup (_tmp43_, "uint");
	_tmp45_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp46_ = vala_integer_type_new (_tmp45_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->uint_type);
	self->uint_type = (ValaDataType*) _tmp46_;
	_vala_code_node_unref0 (_tmp45_);
	_tmp47_ = self->root_symbol;
	_tmp48_ = vala_symbol_get_scope (_tmp47_);
	_tmp49_ = _tmp48_;
	_tmp50_ = vala_scope_lookup (_tmp49_, "long");
	_tmp51_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp50_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp52_ = vala_integer_type_new (_tmp51_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->long_type);
	self->long_type = (ValaDataType*) _tmp52_;
	_vala_code_node_unref0 (_tmp51_);
	_tmp53_ = self->root_symbol;
	_tmp54_ = vala_symbol_get_scope (_tmp53_);
	_tmp55_ = _tmp54_;
	_tmp56_ = vala_scope_lookup (_tmp55_, "ulong");
	_tmp57_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp56_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp58_ = vala_integer_type_new (_tmp57_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->ulong_type);
	self->ulong_type = (ValaDataType*) _tmp58_;
	_vala_code_node_unref0 (_tmp57_);
	_tmp59_ = self->root_symbol;
	_tmp60_ = vala_symbol_get_scope (_tmp59_);
	_tmp61_ = _tmp60_;
	_tmp62_ = vala_scope_lookup (_tmp61_, "int8");
	_tmp63_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp62_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp64_ = vala_integer_type_new (_tmp63_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->int8_type);
	self->int8_type = (ValaDataType*) _tmp64_;
	_vala_code_node_unref0 (_tmp63_);
	_tmp65_ = self->root_symbol;
	_tmp66_ = vala_symbol_get_scope (_tmp65_);
	_tmp67_ = _tmp66_;
	_tmp68_ = vala_scope_lookup (_tmp67_, "uint8");
	_tmp69_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp68_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp70_ = vala_integer_type_new (_tmp69_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->uint8_type);
	self->uint8_type = (ValaDataType*) _tmp70_;
	_vala_code_node_unref0 (_tmp69_);
	_tmp71_ = self->root_symbol;
	_tmp72_ = vala_symbol_get_scope (_tmp71_);
	_tmp73_ = _tmp72_;
	_tmp74_ = vala_scope_lookup (_tmp73_, "int16");
	_tmp75_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp74_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp76_ = vala_integer_type_new (_tmp75_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->int16_type);
	self->int16_type = (ValaDataType*) _tmp76_;
	_vala_code_node_unref0 (_tmp75_);
	_tmp77_ = self->root_symbol;
	_tmp78_ = vala_symbol_get_scope (_tmp77_);
	_tmp79_ = _tmp78_;
	_tmp80_ = vala_scope_lookup (_tmp79_, "uint16");
	_tmp81_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp80_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp82_ = vala_integer_type_new (_tmp81_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->uint16_type);
	self->uint16_type = (ValaDataType*) _tmp82_;
	_vala_code_node_unref0 (_tmp81_);
	_tmp83_ = self->root_symbol;
	_tmp84_ = vala_symbol_get_scope (_tmp83_);
	_tmp85_ = _tmp84_;
	_tmp86_ = vala_scope_lookup (_tmp85_, "int32");
	_tmp87_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp88_ = vala_integer_type_new (_tmp87_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->int32_type);
	self->int32_type = (ValaDataType*) _tmp88_;
	_vala_code_node_unref0 (_tmp87_);
	_tmp89_ = self->root_symbol;
	_tmp90_ = vala_symbol_get_scope (_tmp89_);
	_tmp91_ = _tmp90_;
	_tmp92_ = vala_scope_lookup (_tmp91_, "uint32");
	_tmp93_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp94_ = vala_integer_type_new (_tmp93_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->uint32_type);
	self->uint32_type = (ValaDataType*) _tmp94_;
	_vala_code_node_unref0 (_tmp93_);
	_tmp95_ = self->root_symbol;
	_tmp96_ = vala_symbol_get_scope (_tmp95_);
	_tmp97_ = _tmp96_;
	_tmp98_ = vala_scope_lookup (_tmp97_, "int64");
	_tmp99_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp98_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp100_ = vala_integer_type_new (_tmp99_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->int64_type);
	self->int64_type = (ValaDataType*) _tmp100_;
	_vala_code_node_unref0 (_tmp99_);
	_tmp101_ = self->root_symbol;
	_tmp102_ = vala_symbol_get_scope (_tmp101_);
	_tmp103_ = _tmp102_;
	_tmp104_ = vala_scope_lookup (_tmp103_, "uint64");
	_tmp105_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp104_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp106_ = vala_integer_type_new (_tmp105_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->uint64_type);
	self->uint64_type = (ValaDataType*) _tmp106_;
	_vala_code_node_unref0 (_tmp105_);
	_tmp107_ = self->root_symbol;
	_tmp108_ = vala_symbol_get_scope (_tmp107_);
	_tmp109_ = _tmp108_;
	_tmp110_ = vala_scope_lookup (_tmp109_, "size_t");
	_tmp111_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp110_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp112_ = vala_integer_type_new (_tmp111_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->size_t_type);
	self->size_t_type = (ValaDataType*) _tmp112_;
	_vala_code_node_unref0 (_tmp111_);
	_tmp113_ = self->root_symbol;
	_tmp114_ = vala_symbol_get_scope (_tmp113_);
	_tmp115_ = _tmp114_;
	_tmp116_ = vala_scope_lookup (_tmp115_, "ssize_t");
	_tmp117_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp116_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp118_ = vala_integer_type_new (_tmp117_, NULL, NULL, NULL);
	_vala_code_node_unref0 (self->ssize_t_type);
	self->ssize_t_type = (ValaDataType*) _tmp118_;
	_vala_code_node_unref0 (_tmp117_);
	_tmp119_ = self->root_symbol;
	_tmp120_ = vala_symbol_get_scope (_tmp119_);
	_tmp121_ = _tmp120_;
	_tmp122_ = vala_scope_lookup (_tmp121_, "float");
	_tmp123_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp122_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp124_ = vala_floating_type_new (_tmp123_, NULL);
	_vala_code_node_unref0 (self->float_type);
	self->float_type = (ValaDataType*) _tmp124_;
	_vala_code_node_unref0 (_tmp123_);
	_tmp125_ = self->root_symbol;
	_tmp126_ = vala_symbol_get_scope (_tmp125_);
	_tmp127_ = _tmp126_;
	_tmp128_ = vala_scope_lookup (_tmp127_, "double");
	_tmp129_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp128_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp130_ = vala_floating_type_new (_tmp129_, NULL);
	_vala_code_node_unref0 (self->double_type);
	self->double_type = (ValaDataType*) _tmp130_;
	_vala_code_node_unref0 (_tmp129_);
	_tmp131_ = self->root_symbol;
	_tmp132_ = vala_symbol_get_scope (_tmp131_);
	_tmp133_ = _tmp132_;
	_tmp134_ = vala_scope_lookup (_tmp133_, "string");
	_tmp135_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp134_, VALA_TYPE_CLASS, ValaClass);
	_tmp136_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp135_, NULL);
	_vala_code_node_unref0 (self->string_type);
	self->string_type = (ValaDataType*) _tmp136_;
	_vala_code_node_unref0 (_tmp135_);
	_tmp137_ = self->root_symbol;
	_tmp138_ = vala_symbol_get_scope (_tmp137_);
	_tmp139_ = _tmp138_;
	_tmp140_ = vala_scope_lookup (_tmp139_, "unichar");
	unichar_struct = G_TYPE_CHECK_INSTANCE_CAST (_tmp140_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp141_ = unichar_struct;
	if (_tmp141_ != NULL) {
		ValaStruct* _tmp142_;
		ValaIntegerType* _tmp143_;
		_tmp142_ = unichar_struct;
		_tmp143_ = vala_integer_type_new (_tmp142_, NULL, NULL, NULL);
		_vala_code_node_unref0 (self->unichar_type);
		self->unichar_type = (ValaDataType*) _tmp143_;
	}
	_tmp144_ = vala_code_context_get_profile (context);
	_tmp145_ = _tmp144_;
	if (_tmp145_ == VALA_PROFILE_GOBJECT) {
		ValaSymbol* glib_ns = NULL;
		ValaSymbol* _tmp146_;
		ValaScope* _tmp147_;
		ValaScope* _tmp148_;
		ValaSymbol* _tmp149_;
		ValaSymbol* _tmp150_;
		ValaScope* _tmp151_;
		ValaScope* _tmp152_;
		ValaSymbol* _tmp153_;
		ValaSymbol* _tmp154_;
		ValaScope* _tmp155_;
		ValaScope* _tmp156_;
		ValaSymbol* _tmp157_;
		ValaErrorType* _tmp158_;
		ValaSymbol* _tmp159_;
		ValaScope* _tmp160_;
		ValaScope* _tmp161_;
		ValaSymbol* _tmp162_;
		ValaSymbol* _tmp163_;
		ValaScope* _tmp164_;
		ValaScope* _tmp165_;
		ValaSymbol* _tmp166_;
		ValaSymbol* _tmp167_;
		ValaScope* _tmp168_;
		ValaScope* _tmp169_;
		ValaSymbol* _tmp170_;
		ValaSymbol* _tmp171_;
		ValaScope* _tmp172_;
		ValaScope* _tmp173_;
		ValaSymbol* _tmp174_;
		ValaSymbol* _tmp175_;
		ValaScope* _tmp176_;
		ValaScope* _tmp177_;
		ValaSymbol* _tmp178_;
		ValaSymbol* _tmp179_;
		ValaScope* _tmp180_;
		ValaScope* _tmp181_;
		ValaSymbol* _tmp182_;
		ValaSymbol* _tmp183_;
		ValaScope* _tmp184_;
		ValaScope* _tmp185_;
		ValaSymbol* _tmp186_;
		ValaSymbol* _tmp187_;
		ValaScope* _tmp188_;
		ValaScope* _tmp189_;
		ValaSymbol* _tmp190_;
		ValaSymbol* _tmp191_;
		ValaScope* _tmp192_;
		ValaScope* _tmp193_;
		ValaSymbol* _tmp194_;
		ValaSymbol* _tmp195_;
		ValaScope* _tmp196_;
		ValaScope* _tmp197_;
		ValaSymbol* _tmp198_;
		ValaSymbol* _tmp199_;
		ValaScope* _tmp200_;
		ValaScope* _tmp201_;
		ValaSymbol* _tmp202_;
		ValaSymbol* _tmp203_;
		ValaScope* _tmp204_;
		ValaScope* _tmp205_;
		ValaSymbol* _tmp206_;
		ValaSymbol* _tmp207_;
		ValaScope* _tmp208_;
		ValaScope* _tmp209_;
		ValaSymbol* _tmp210_;
		ValaSymbol* _tmp211_;
		ValaScope* _tmp212_;
		ValaScope* _tmp213_;
		ValaSymbol* _tmp214_;
		ValaSymbol* _tmp215_;
		ValaScope* _tmp216_;
		ValaScope* _tmp217_;
		ValaSymbol* _tmp218_;
		ValaStruct* _tmp219_;
		ValaIntegerType* _tmp220_;
		ValaSymbol* _tmp221_;
		ValaScope* _tmp222_;
		ValaScope* _tmp223_;
		ValaSymbol* _tmp224_;
		ValaSymbol* _tmp225_;
		ValaScope* _tmp226_;
		ValaScope* _tmp227_;
		ValaSymbol* _tmp228_;
		ValaSymbol* _tmp229_;
		ValaScope* _tmp230_;
		ValaScope* _tmp231_;
		ValaSymbol* _tmp232_;
		ValaSymbol* _tmp233_;
		ValaScope* _tmp234_;
		ValaScope* _tmp235_;
		ValaSymbol* _tmp236_;
		ValaSymbol* _tmp237_;
		ValaScope* _tmp238_;
		ValaScope* _tmp239_;
		ValaSymbol* _tmp240_;
		ValaSymbol* _tmp241_;
		ValaScope* _tmp242_;
		ValaScope* _tmp243_;
		ValaSymbol* _tmp244_;
		ValaSymbol* _tmp245_;
		ValaScope* _tmp246_;
		ValaScope* _tmp247_;
		ValaSymbol* _tmp248_;
		ValaStruct* _tmp249_;
		ValaStruct* _tmp250_;
		ValaSymbol* _tmp251_;
		ValaScope* _tmp252_;
		ValaScope* _tmp253_;
		ValaSymbol* _tmp254_;
		ValaSymbol* _tmp255_;
		ValaScope* _tmp256_;
		ValaScope* _tmp257_;
		ValaSymbol* _tmp258_;
		ValaSymbol* _tmp259_;
		ValaScope* _tmp260_;
		ValaScope* _tmp261_;
		ValaSymbol* _tmp262_;
		ValaClass* _tmp263_;
		ValaObjectType* _tmp264_;
		ValaMethod* _tmp265_;
		ValaMethod* _tmp266_;
		ValaSymbol* _tmp287_;
		ValaScope* _tmp288_;
		ValaScope* _tmp289_;
		ValaSymbol* _tmp290_;
		ValaSymbol* _tmp291_;
		ValaScope* _tmp292_;
		ValaScope* _tmp293_;
		ValaSymbol* _tmp294_;
		ValaStruct* _tmp295_;
		ValaStructValueType* _tmp296_;
		ValaDataType* _tmp297_;
		ValaDataType* _tmp298_;
		ValaSymbol* _tmp299_;
		ValaScope* _tmp300_;
		ValaScope* _tmp301_;
		ValaSymbol* _tmp302_;
		ValaDelegate* _tmp303_;
		ValaDelegateType* _tmp304_;
		_tmp146_ = self->root_symbol;
		_tmp147_ = vala_symbol_get_scope (_tmp146_);
		_tmp148_ = _tmp147_;
		_tmp149_ = vala_scope_lookup (_tmp148_, "GLib");
		glib_ns = _tmp149_;
		_tmp150_ = glib_ns;
		_tmp151_ = vala_symbol_get_scope (_tmp150_);
		_tmp152_ = _tmp151_;
		_tmp153_ = vala_scope_lookup (_tmp152_, "Type");
		_vala_code_node_unref0 (self->gtype_type);
		self->gtype_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp153_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp154_ = glib_ns;
		_tmp155_ = vala_symbol_get_scope (_tmp154_);
		_tmp156_ = _tmp155_;
		_tmp157_ = vala_scope_lookup (_tmp156_, "Object");
		_vala_code_node_unref0 (self->gobject_type);
		self->gobject_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp157_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp158_ = vala_error_type_new (NULL, NULL, NULL);
		_vala_code_node_unref0 (self->gerror_type);
		self->gerror_type = _tmp158_;
		_tmp159_ = glib_ns;
		_tmp160_ = vala_symbol_get_scope (_tmp159_);
		_tmp161_ = _tmp160_;
		_tmp162_ = vala_scope_lookup (_tmp161_, "List");
		_vala_code_node_unref0 (self->glist_type);
		self->glist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp162_, VALA_TYPE_CLASS, ValaClass);
		_tmp163_ = glib_ns;
		_tmp164_ = vala_symbol_get_scope (_tmp163_);
		_tmp165_ = _tmp164_;
		_tmp166_ = vala_scope_lookup (_tmp165_, "SList");
		_vala_code_node_unref0 (self->gslist_type);
		self->gslist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp166_, VALA_TYPE_CLASS, ValaClass);
		_tmp167_ = glib_ns;
		_tmp168_ = vala_symbol_get_scope (_tmp167_);
		_tmp169_ = _tmp168_;
		_tmp170_ = vala_scope_lookup (_tmp169_, "Node");
		_vala_code_node_unref0 (self->gnode_type);
		self->gnode_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp170_, VALA_TYPE_CLASS, ValaClass);
		_tmp171_ = glib_ns;
		_tmp172_ = vala_symbol_get_scope (_tmp171_);
		_tmp173_ = _tmp172_;
		_tmp174_ = vala_scope_lookup (_tmp173_, "Queue");
		_vala_code_node_unref0 (self->gqueue_type);
		self->gqueue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp174_, VALA_TYPE_CLASS, ValaClass);
		_tmp175_ = glib_ns;
		_tmp176_ = vala_symbol_get_scope (_tmp175_);
		_tmp177_ = _tmp176_;
		_tmp178_ = vala_scope_lookup (_tmp177_, "ValueArray");
		_vala_code_node_unref0 (self->gvaluearray_type);
		self->gvaluearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp178_, VALA_TYPE_CLASS, ValaClass);
		_tmp179_ = glib_ns;
		_tmp180_ = vala_symbol_get_scope (_tmp179_);
		_tmp181_ = _tmp180_;
		_tmp182_ = vala_scope_lookup (_tmp181_, "StringBuilder");
		_vala_code_node_unref0 (self->gstringbuilder_type);
		self->gstringbuilder_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp182_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp183_ = glib_ns;
		_tmp184_ = vala_symbol_get_scope (_tmp183_);
		_tmp185_ = _tmp184_;
		_tmp186_ = vala_scope_lookup (_tmp185_, "Array");
		_vala_code_node_unref0 (self->garray_type);
		self->garray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp186_, VALA_TYPE_CLASS, ValaClass);
		_tmp187_ = glib_ns;
		_tmp188_ = vala_symbol_get_scope (_tmp187_);
		_tmp189_ = _tmp188_;
		_tmp190_ = vala_scope_lookup (_tmp189_, "ByteArray");
		_vala_code_node_unref0 (self->gbytearray_type);
		self->gbytearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp190_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp191_ = glib_ns;
		_tmp192_ = vala_symbol_get_scope (_tmp191_);
		_tmp193_ = _tmp192_;
		_tmp194_ = vala_scope_lookup (_tmp193_, "GenericArray");
		_vala_code_node_unref0 (self->genericarray_type);
		self->genericarray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp194_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp195_ = glib_ns;
		_tmp196_ = vala_symbol_get_scope (_tmp195_);
		_tmp197_ = _tmp196_;
		_tmp198_ = vala_scope_lookup (_tmp197_, "Sequence");
		_vala_code_node_unref0 (self->gsequence_type);
		self->gsequence_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp198_, VALA_TYPE_CLASS, ValaClass);
		_tmp199_ = glib_ns;
		_tmp200_ = vala_symbol_get_scope (_tmp199_);
		_tmp201_ = _tmp200_;
		_tmp202_ = vala_scope_lookup (_tmp201_, "SequenceIter");
		_vala_code_node_unref0 (self->gsequence_iter_type);
		self->gsequence_iter_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp202_, VALA_TYPE_CLASS, ValaClass);
		_tmp203_ = glib_ns;
		_tmp204_ = vala_symbol_get_scope (_tmp203_);
		_tmp205_ = _tmp204_;
		_tmp206_ = vala_scope_lookup (_tmp205_, "ThreadPool");
		_vala_code_node_unref0 (self->gthreadpool_type);
		self->gthreadpool_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp206_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp207_ = self->root_symbol;
		_tmp208_ = vala_symbol_get_scope (_tmp207_);
		_tmp209_ = _tmp208_;
		_tmp210_ = vala_scope_lookup (_tmp209_, "GLib");
		_tmp211_ = _tmp210_;
		_tmp212_ = vala_symbol_get_scope (_tmp211_);
		_tmp213_ = _tmp212_;
		_tmp214_ = vala_scope_lookup (_tmp213_, "Error");
		_vala_code_node_unref0 (self->priv->gerror);
		self->priv->gerror = G_TYPE_CHECK_INSTANCE_CAST (_tmp214_, VALA_TYPE_CLASS, ValaClass);
		_vala_code_node_unref0 (_tmp211_);
		_tmp215_ = glib_ns;
		_tmp216_ = vala_symbol_get_scope (_tmp215_);
		_tmp217_ = _tmp216_;
		_tmp218_ = vala_scope_lookup (_tmp217_, "Quark");
		_tmp219_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp218_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp220_ = vala_integer_type_new (_tmp219_, NULL, NULL, NULL);
		_vala_code_node_unref0 (self->gquark_type);
		self->gquark_type = (ValaDataType*) _tmp220_;
		_vala_code_node_unref0 (_tmp219_);
		_tmp221_ = glib_ns;
		_tmp222_ = vala_symbol_get_scope (_tmp221_);
		_tmp223_ = _tmp222_;
		_tmp224_ = vala_scope_lookup (_tmp223_, "Value");
		_vala_code_node_unref0 (self->gvalue_type);
		self->gvalue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp224_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp225_ = glib_ns;
		_tmp226_ = vala_symbol_get_scope (_tmp225_);
		_tmp227_ = _tmp226_;
		_tmp228_ = vala_scope_lookup (_tmp227_, "Variant");
		_vala_code_node_unref0 (self->gvariant_type);
		self->gvariant_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp228_, VALA_TYPE_CLASS, ValaClass);
		_tmp229_ = glib_ns;
		_tmp230_ = vala_symbol_get_scope (_tmp229_);
		_tmp231_ = _tmp230_;
		_tmp232_ = vala_scope_lookup (_tmp231_, "Source");
		_vala_code_node_unref0 (self->gsource_type);
		self->gsource_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp232_, VALA_TYPE_CLASS, ValaClass);
		_tmp233_ = glib_ns;
		_tmp234_ = vala_symbol_get_scope (_tmp233_);
		_tmp235_ = _tmp234_;
		_tmp236_ = vala_scope_lookup (_tmp235_, "Mutex");
		_vala_code_node_unref0 (self->gmutex_type);
		self->gmutex_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp236_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp237_ = glib_ns;
		_tmp238_ = vala_symbol_get_scope (_tmp237_);
		_tmp239_ = _tmp238_;
		_tmp240_ = vala_scope_lookup (_tmp239_, "RecMutex");
		_vala_code_node_unref0 (self->grecmutex_type);
		self->grecmutex_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp240_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp241_ = glib_ns;
		_tmp242_ = vala_symbol_get_scope (_tmp241_);
		_tmp243_ = _tmp242_;
		_tmp244_ = vala_scope_lookup (_tmp243_, "RWLock");
		_vala_code_node_unref0 (self->grwlock_type);
		self->grwlock_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp244_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp245_ = glib_ns;
		_tmp246_ = vala_symbol_get_scope (_tmp245_);
		_tmp247_ = _tmp246_;
		_tmp248_ = vala_scope_lookup (_tmp247_, "Cond");
		_vala_code_node_unref0 (self->gcond_type);
		self->gcond_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp248_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp249_ = self->grecmutex_type;
		_tmp250_ = _vala_code_node_ref0 (_tmp249_);
		_vala_code_node_unref0 (self->mutex_type);
		self->mutex_type = _tmp250_;
		_tmp251_ = glib_ns;
		_tmp252_ = vala_symbol_get_scope (_tmp251_);
		_tmp253_ = _tmp252_;
		_tmp254_ = vala_scope_lookup (_tmp253_, "TypeModule");
		_vala_code_node_unref0 (self->type_module_type);
		self->type_module_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp254_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp255_ = self->root_symbol;
		_tmp256_ = vala_symbol_get_scope (_tmp255_);
		_tmp257_ = _tmp256_;
		_tmp258_ = vala_scope_lookup (_tmp257_, "GLib");
		_tmp259_ = _tmp258_;
		_tmp260_ = vala_symbol_get_scope (_tmp259_);
		_tmp261_ = _tmp260_;
		_tmp262_ = vala_scope_lookup (_tmp261_, "Regex");
		_tmp263_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp262_, VALA_TYPE_CLASS, ValaClass);
		_tmp264_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp263_, NULL);
		_vala_code_node_unref0 (self->regex_type);
		self->regex_type = (ValaDataType*) _tmp264_;
		_vala_code_node_unref0 (_tmp263_);
		_vala_code_node_unref0 (_tmp259_);
		_tmp265_ = vala_code_context_get_module_init_method (context);
		_tmp266_ = _tmp265_;
		if (_tmp266_ != NULL) {
			{
				ValaList* _parameter_list = NULL;
				ValaMethod* _tmp267_;
				ValaMethod* _tmp268_;
				ValaList* _tmp269_;
				gint _parameter_size = 0;
				ValaList* _tmp270_;
				gint _tmp271_;
				gint _tmp272_;
				gint _parameter_index = 0;
				_tmp267_ = vala_code_context_get_module_init_method (context);
				_tmp268_ = _tmp267_;
				_tmp269_ = vala_callable_get_parameters ((ValaCallable*) _tmp268_);
				_parameter_list = _tmp269_;
				_tmp270_ = _parameter_list;
				_tmp271_ = vala_collection_get_size ((ValaCollection*) _tmp270_);
				_tmp272_ = _tmp271_;
				_parameter_size = _tmp272_;
				_parameter_index = -1;
				while (TRUE) {
					gint _tmp273_;
					gint _tmp274_;
					ValaParameter* parameter = NULL;
					ValaList* _tmp275_;
					gpointer _tmp276_;
					ValaParameter* _tmp277_;
					ValaDataType* _tmp278_;
					ValaDataType* _tmp279_;
					ValaTypeSymbol* _tmp280_;
					ValaTypeSymbol* _tmp281_;
					ValaTypeSymbol* _tmp282_;
					_parameter_index = _parameter_index + 1;
					_tmp273_ = _parameter_index;
					_tmp274_ = _parameter_size;
					if (!(_tmp273_ < _tmp274_)) {
						break;
					}
					_tmp275_ = _parameter_list;
					_tmp276_ = vala_list_get (_tmp275_, _parameter_index);
					parameter = (ValaParameter*) _tmp276_;
					_tmp277_ = parameter;
					_tmp278_ = vala_variable_get_variable_type ((ValaVariable*) _tmp277_);
					_tmp279_ = _tmp278_;
					_tmp280_ = vala_data_type_get_type_symbol (_tmp279_);
					_tmp281_ = _tmp280_;
					_tmp282_ = self->type_module_type;
					if (vala_typesymbol_is_subtype_of (_tmp281_, _tmp282_)) {
						ValaParameter* _tmp283_;
						const gchar* _tmp284_;
						const gchar* _tmp285_;
						gchar* _tmp286_;
						self->in_plugin = TRUE;
						_tmp283_ = parameter;
						_tmp284_ = vala_symbol_get_name ((ValaSymbol*) _tmp283_);
						_tmp285_ = _tmp284_;
						_tmp286_ = g_strdup (_tmp285_);
						_g_free0 (self->module_init_param_name);
						self->module_init_param_name = _tmp286_;
						_vala_code_node_unref0 (parameter);
						break;
					}
					_vala_code_node_unref0 (parameter);
				}
			}
		}
		_tmp287_ = glib_ns;
		_tmp288_ = vala_symbol_get_scope (_tmp287_);
		_tmp289_ = _tmp288_;
		_tmp290_ = vala_scope_lookup (_tmp289_, "DBusProxy");
		_vala_code_node_unref0 (self->dbus_proxy_type);
		self->dbus_proxy_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp290_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp291_ = glib_ns;
		_tmp292_ = vala_symbol_get_scope (_tmp291_);
		_tmp293_ = _tmp292_;
		_tmp294_ = vala_scope_lookup (_tmp293_, "pointer");
		_tmp295_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp294_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp296_ = vala_struct_value_type_new (_tmp295_, NULL);
		_vala_code_node_unref0 (self->pointer_type);
		self->pointer_type = (ValaDataType*) _tmp296_;
		_vala_code_node_unref0 (_tmp295_);
		_tmp297_ = self->pointer_type;
		_tmp298_ = _vala_code_node_ref0 (_tmp297_);
		_vala_code_node_unref0 (self->delegate_target_type);
		self->delegate_target_type = _tmp298_;
		_tmp299_ = glib_ns;
		_tmp300_ = vala_symbol_get_scope (_tmp299_);
		_tmp301_ = _tmp300_;
		_tmp302_ = vala_scope_lookup (_tmp301_, "DestroyNotify");
		_vala_code_node_unref0 (self->priv->destroy_notify);
		self->priv->destroy_notify = G_TYPE_CHECK_INSTANCE_CAST (_tmp302_, VALA_TYPE_DELEGATE, ValaDelegate);
		_tmp303_ = self->priv->destroy_notify;
		_tmp304_ = vala_delegate_type_new (_tmp303_, NULL);
		_vala_code_node_unref0 (self->delegate_target_destroy_type);
		self->delegate_target_destroy_type = _tmp304_;
		_vala_code_node_unref0 (glib_ns);
	} else {
		ValaVoidType* _tmp305_;
		ValaVoidType* _tmp306_;
		ValaPointerType* _tmp307_;
		ValaDataType* _tmp308_;
		ValaDataType* _tmp309_;
		ValaVoidType* _tmp310_;
		ValaVoidType* _tmp311_;
		ValaDelegate* _tmp312_;
		ValaDelegate* _tmp313_;
		ValaVoidType* _tmp314_;
		ValaVoidType* _tmp315_;
		ValaPointerType* _tmp316_;
		ValaPointerType* _tmp317_;
		ValaParameter* _tmp318_;
		ValaParameter* _tmp319_;
		ValaDelegate* _tmp320_;
		ValaDelegate* _tmp321_;
		ValaSymbol* _tmp322_;
		ValaScope* _tmp323_;
		ValaScope* _tmp324_;
		ValaDelegate* _tmp325_;
		ValaDelegateType* _tmp326_;
		_tmp305_ = vala_void_type_new (NULL);
		_tmp306_ = _tmp305_;
		_tmp307_ = vala_pointer_type_new ((ValaDataType*) _tmp306_, NULL);
		_vala_code_node_unref0 (self->pointer_type);
		self->pointer_type = (ValaDataType*) _tmp307_;
		_vala_code_node_unref0 (_tmp306_);
		_tmp308_ = self->pointer_type;
		_tmp309_ = _vala_code_node_ref0 (_tmp308_);
		_vala_code_node_unref0 (self->delegate_target_type);
		self->delegate_target_type = _tmp309_;
		_tmp310_ = vala_void_type_new (NULL);
		_tmp311_ = _tmp310_;
		_tmp312_ = vala_delegate_new ("ValaDestroyNotify", (ValaDataType*) _tmp311_, NULL, NULL);
		_vala_code_node_unref0 (self->priv->destroy_notify);
		self->priv->destroy_notify = _tmp312_;
		_vala_code_node_unref0 (_tmp311_);
		_tmp313_ = self->priv->destroy_notify;
		_tmp314_ = vala_void_type_new (NULL);
		_tmp315_ = _tmp314_;
		_tmp316_ = vala_pointer_type_new ((ValaDataType*) _tmp315_, NULL);
		_tmp317_ = _tmp316_;
		_tmp318_ = vala_parameter_new ("data", (ValaDataType*) _tmp317_, NULL);
		_tmp319_ = _tmp318_;
		vala_callable_add_parameter ((ValaCallable*) _tmp313_, _tmp319_);
		_vala_code_node_unref0 (_tmp319_);
		_vala_code_node_unref0 (_tmp317_);
		_vala_code_node_unref0 (_tmp315_);
		_tmp320_ = self->priv->destroy_notify;
		vala_delegate_set_has_target (_tmp320_, FALSE);
		_tmp321_ = self->priv->destroy_notify;
		_tmp322_ = self->root_symbol;
		_tmp323_ = vala_symbol_get_scope (_tmp322_);
		_tmp324_ = _tmp323_;
		vala_symbol_set_owner ((ValaSymbol*) _tmp321_, _tmp324_);
		_tmp325_ = self->priv->destroy_notify;
		_tmp326_ = vala_delegate_type_new (_tmp325_, NULL);
		_vala_code_node_unref0 (self->delegate_target_destroy_type);
		self->delegate_target_destroy_type = _tmp326_;
	}
	_tmp327_ = self->root_symbol;
	_tmp328_ = vala_symbol_get_scope (_tmp327_);
	_tmp329_ = _tmp328_;
	_tmp330_ = vala_scope_lookup (_tmp329_, "Gtk");
	gtk_ns = _tmp330_;
	_tmp331_ = gtk_ns;
	if (_tmp331_ != NULL) {
		ValaSymbol* _tmp332_;
		ValaScope* _tmp333_;
		ValaScope* _tmp334_;
		ValaSymbol* _tmp335_;
		_tmp332_ = gtk_ns;
		_tmp333_ = vala_symbol_get_scope (_tmp332_);
		_tmp334_ = _tmp333_;
		_tmp335_ = vala_scope_lookup (_tmp334_, "Widget");
		_vala_code_node_unref0 (self->gtk_widget_type);
		self->gtk_widget_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp335_, VALA_TYPE_CLASS, ValaClass);
	}
	_tmp336_ = vala_ccode_file_new (CCODE_FILE_TYPE_PUBLIC_HEADER, NULL);
	_vala_ccode_file_unref0 (self->header_file);
	self->header_file = _tmp336_;
	_tmp337_ = vala_ccode_file_new (CCODE_FILE_TYPE_INTERNAL_HEADER, NULL);
	_vala_ccode_file_unref0 (self->internal_header_file);
	self->internal_header_file = _tmp337_;
	_tmp338_ = vala_code_context_get_source_files (context);
	_tmp339_ = _vala_iterable_ref0 (_tmp338_);
	source_files = _tmp339_;
	{
		ValaList* _file_list = NULL;
		ValaList* _tmp340_;
		gint _file_size = 0;
		ValaList* _tmp341_;
		gint _tmp342_;
		gint _tmp343_;
		gint _file_index = 0;
		_tmp340_ = source_files;
		_file_list = _tmp340_;
		_tmp341_ = _file_list;
		_tmp342_ = vala_collection_get_size ((ValaCollection*) _tmp341_);
		_tmp343_ = _tmp342_;
		_file_size = _tmp343_;
		_file_index = -1;
		while (TRUE) {
			gint _tmp344_;
			gint _tmp345_;
			ValaSourceFile* file = NULL;
			ValaList* _tmp346_;
			gpointer _tmp347_;
			gboolean _tmp348_ = FALSE;
			ValaSourceFile* _tmp349_;
			ValaSourceFileType _tmp350_;
			ValaSourceFileType _tmp351_;
			_file_index = _file_index + 1;
			_tmp344_ = _file_index;
			_tmp345_ = _file_size;
			if (!(_tmp344_ < _tmp345_)) {
				break;
			}
			_tmp346_ = _file_list;
			_tmp347_ = vala_list_get (_tmp346_, _file_index);
			file = (ValaSourceFile*) _tmp347_;
			_tmp349_ = file;
			_tmp350_ = vala_source_file_get_file_type (_tmp349_);
			_tmp351_ = _tmp350_;
			if (_tmp351_ == VALA_SOURCE_FILE_TYPE_SOURCE) {
				_tmp348_ = TRUE;
			} else {
				gboolean _tmp352_ = FALSE;
				const gchar* _tmp353_;
				const gchar* _tmp354_;
				_tmp353_ = vala_code_context_get_header_filename (context);
				_tmp354_ = _tmp353_;
				if (_tmp354_ != NULL) {
					ValaSourceFile* _tmp355_;
					ValaSourceFileType _tmp356_;
					ValaSourceFileType _tmp357_;
					_tmp355_ = file;
					_tmp356_ = vala_source_file_get_file_type (_tmp355_);
					_tmp357_ = _tmp356_;
					_tmp352_ = _tmp357_ == VALA_SOURCE_FILE_TYPE_FAST;
				} else {
					_tmp352_ = FALSE;
				}
				_tmp348_ = _tmp352_;
			}
			if (_tmp348_) {
				ValaSourceFile* _tmp358_;
				_tmp358_ = file;
				vala_source_file_accept (_tmp358_, (ValaCodeVisitor*) self);
			}
			_vala_source_file_unref0 (file);
		}
	}
	_tmp359_ = vala_code_context_get_symbols_filename (context);
	_tmp360_ = _tmp359_;
	if (_tmp360_ != NULL) {
		FILE* stream = NULL;
		const gchar* _tmp361_;
		const gchar* _tmp362_;
		FILE* _tmp363_;
		FILE* _tmp364_;
		_tmp361_ = vala_code_context_get_symbols_filename (context);
		_tmp362_ = _tmp361_;
		_tmp363_ = g_fopen (_tmp362_, "w");
		stream = _tmp363_;
		_tmp364_ = stream;
		if (_tmp364_ == NULL) {
			const gchar* _tmp365_;
			const gchar* _tmp366_;
			_tmp365_ = vala_code_context_get_symbols_filename (context);
			_tmp366_ = _tmp365_;
			vala_report_error (NULL, "unable to open `%s' for writing", _tmp366_);
			vala_ccode_base_module_set_context (self, NULL);
			_fclose0 (stream);
			_vala_iterable_unref0 (source_files);
			_vala_code_node_unref0 (gtk_ns);
			_vala_code_node_unref0 (unichar_struct);
			return;
		}
		{
			ValaList* _symbol_list = NULL;
			ValaCCodeFile* _tmp367_;
			ValaList* _tmp368_;
			gint _symbol_size = 0;
			ValaList* _tmp369_;
			gint _tmp370_;
			gint _tmp371_;
			gint _symbol_index = 0;
			_tmp367_ = self->header_file;
			_tmp368_ = vala_ccode_file_get_symbols (_tmp367_);
			_symbol_list = _tmp368_;
			_tmp369_ = _symbol_list;
			_tmp370_ = vala_collection_get_size ((ValaCollection*) _tmp369_);
			_tmp371_ = _tmp370_;
			_symbol_size = _tmp371_;
			_symbol_index = -1;
			while (TRUE) {
				gint _tmp372_;
				gint _tmp373_;
				gchar* symbol = NULL;
				ValaList* _tmp374_;
				gpointer _tmp375_;
				FILE* _tmp376_;
				const gchar* _tmp377_;
				FILE* _tmp378_;
				_symbol_index = _symbol_index + 1;
				_tmp372_ = _symbol_index;
				_tmp373_ = _symbol_size;
				if (!(_tmp372_ < _tmp373_)) {
					break;
				}
				_tmp374_ = _symbol_list;
				_tmp375_ = vala_list_get (_tmp374_, _symbol_index);
				symbol = (gchar*) _tmp375_;
				_tmp376_ = stream;
				_tmp377_ = symbol;
				fputs (_tmp377_, _tmp376_);
				_tmp378_ = stream;
				fputc ('\n', _tmp378_);
				_g_free0 (symbol);
			}
			_vala_iterable_unref0 (_symbol_list);
		}
		_fclose0 (stream);
		stream = NULL;
		_fclose0 (stream);
	}
	_tmp379_ = vala_code_context_get_header_filename (context);
	_tmp380_ = _tmp379_;
	if (_tmp380_ != NULL) {
		gboolean ret = FALSE;
		ValaProfile _tmp381_;
		ValaProfile _tmp382_;
		_tmp381_ = vala_code_context_get_profile (context);
		_tmp382_ = _tmp381_;
		if (_tmp382_ == VALA_PROFILE_GOBJECT) {
			ValaCCodeFile* _tmp383_;
			ValaCCodeFile* _tmp384_;
			const gchar* _tmp385_;
			const gchar* _tmp386_;
			gboolean _tmp387_;
			gboolean _tmp388_;
			_tmp383_ = self->header_file;
			vala_ccode_file_add_include (_tmp383_, "glib.h", FALSE);
			_tmp384_ = self->header_file;
			_tmp385_ = vala_code_context_get_header_filename (context);
			_tmp386_ = _tmp385_;
			_tmp387_ = vala_code_context_get_version_header (context);
			_tmp388_ = _tmp387_;
			ret = vala_ccode_file_store (_tmp384_, _tmp386_, NULL, _tmp388_, FALSE, "G_BEGIN_DECLS", "G_END_DECLS");
		} else {
			ValaCCodeFile* _tmp389_;
			const gchar* _tmp390_;
			const gchar* _tmp391_;
			gboolean _tmp392_;
			gboolean _tmp393_;
			_tmp389_ = self->header_file;
			_tmp390_ = vala_code_context_get_header_filename (context);
			_tmp391_ = _tmp390_;
			_tmp392_ = vala_code_context_get_version_header (context);
			_tmp393_ = _tmp392_;
			ret = vala_ccode_file_store (_tmp389_, _tmp391_, NULL, _tmp393_, FALSE, "#ifdef  __cplusplus\nextern \"C\" {\n#endif", "#ifdef  __cplusplus\n}\n#endif");
		}
		if (!ret) {
			const gchar* _tmp394_;
			const gchar* _tmp395_;
			_tmp394_ = vala_code_context_get_header_filename (context);
			_tmp395_ = _tmp394_;
			vala_report_error (NULL, "unable to open `%s' for writing", _tmp395_);
		}
	}
	_tmp396_ = vala_code_context_get_internal_header_filename (context);
	_tmp397_ = _tmp396_;
	if (_tmp397_ != NULL) {
		gboolean ret = FALSE;
		ValaProfile _tmp398_;
		ValaProfile _tmp399_;
		_tmp398_ = vala_code_context_get_profile (context);
		_tmp399_ = _tmp398_;
		if (_tmp399_ == VALA_PROFILE_GOBJECT) {
			ValaCCodeFile* _tmp400_;
			ValaCCodeFile* _tmp401_;
			const gchar* _tmp402_;
			const gchar* _tmp403_;
			gboolean _tmp404_;
			gboolean _tmp405_;
			_tmp400_ = self->internal_header_file;
			vala_ccode_file_add_include (_tmp400_, "glib.h", FALSE);
			_tmp401_ = self->internal_header_file;
			_tmp402_ = vala_code_context_get_internal_header_filename (context);
			_tmp403_ = _tmp402_;
			_tmp404_ = vala_code_context_get_version_header (context);
			_tmp405_ = _tmp404_;
			ret = vala_ccode_file_store (_tmp401_, _tmp403_, NULL, _tmp405_, FALSE, "G_BEGIN_DECLS", "G_END_DECLS");
		} else {
			ValaCCodeFile* _tmp406_;
			const gchar* _tmp407_;
			const gchar* _tmp408_;
			gboolean _tmp409_;
			gboolean _tmp410_;
			_tmp406_ = self->internal_header_file;
			_tmp407_ = vala_code_context_get_internal_header_filename (context);
			_tmp408_ = _tmp407_;
			_tmp409_ = vala_code_context_get_version_header (context);
			_tmp410_ = _tmp409_;
			ret = vala_ccode_file_store (_tmp406_, _tmp408_, NULL, _tmp410_, FALSE, "#ifdef  __cplusplus\nextern \"C\" {\n#endif", "#ifdef  __cplusplus\n}\n#endif");
		}
		if (!ret) {
			const gchar* _tmp411_;
			const gchar* _tmp412_;
			_tmp411_ = vala_code_context_get_internal_header_filename (context);
			_tmp412_ = _tmp411_;
			vala_report_error (NULL, "unable to open `%s' for writing", _tmp412_);
		}
	}
	vala_ccode_base_module_set_context (self, NULL);
	_vala_iterable_unref0 (source_files);
	_vala_code_node_unref0 (gtk_ns);
	_vala_code_node_unref0 (unichar_struct);
}

static gpointer
_vala_ccode_base_module_emit_context_ref0 (gpointer self)
{
	return self ? vala_ccode_base_module_emit_context_ref (self) : NULL;
}

void
vala_ccode_base_module_push_context (ValaCCodeBaseModule* self,
                                     ValaCCodeBaseModuleEmitContext* emit_context)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (emit_context != NULL);
	_tmp0_ = self->emit_context;
	if (_tmp0_ != NULL) {
		ValaList* _tmp1_;
		ValaCCodeBaseModuleEmitContext* _tmp2_;
		_tmp1_ = self->priv->emit_context_stack;
		_tmp2_ = self->emit_context;
		vala_collection_add ((ValaCollection*) _tmp1_, _tmp2_);
	}
	_tmp3_ = _vala_ccode_base_module_emit_context_ref0 (emit_context);
	_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
	self->emit_context = _tmp3_;
	_tmp4_ = vala_ccode_base_module_get_ccode (self);
	_tmp5_ = _tmp4_;
	if (_tmp5_ != NULL) {
		ValaCCodeFunction* _tmp6_;
		ValaCCodeFunction* _tmp7_;
		ValaCCodeLineDirective* _tmp8_;
		_tmp6_ = vala_ccode_base_module_get_ccode (self);
		_tmp7_ = _tmp6_;
		_tmp8_ = self->current_line;
		vala_ccode_function_set_current_line (_tmp7_, _tmp8_);
	}
}

void
vala_ccode_base_module_pop_context (ValaCCodeBaseModule* self)
{
	ValaList* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->emit_context_stack;
	_tmp1_ = vala_collection_get_size ((ValaCollection*) _tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_ > 0) {
		ValaList* _tmp3_;
		ValaList* _tmp4_;
		gint _tmp5_;
		gint _tmp6_;
		gpointer _tmp7_;
		ValaCCodeFunction* _tmp8_;
		ValaCCodeFunction* _tmp9_;
		_tmp3_ = self->priv->emit_context_stack;
		_tmp4_ = self->priv->emit_context_stack;
		_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_list_remove_at (_tmp3_, _tmp6_ - 1);
		_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
		self->emit_context = (ValaCCodeBaseModuleEmitContext*) _tmp7_;
		_tmp8_ = vala_ccode_base_module_get_ccode (self);
		_tmp9_ = _tmp8_;
		if (_tmp9_ != NULL) {
			ValaCCodeFunction* _tmp10_;
			ValaCCodeFunction* _tmp11_;
			ValaCCodeLineDirective* _tmp12_;
			_tmp10_ = vala_ccode_base_module_get_ccode (self);
			_tmp11_ = _tmp10_;
			_tmp12_ = self->current_line;
			vala_ccode_function_set_current_line (_tmp11_, _tmp12_);
		}
	} else {
		_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
		self->emit_context = NULL;
	}
}

void
vala_ccode_base_module_push_line (ValaCCodeBaseModule* self,
                                  ValaSourceReference* source_reference)
{
	ValaList* _tmp0_;
	ValaCCodeLineDirective* _tmp1_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->line_directive_stack;
	_tmp1_ = self->current_line;
	vala_collection_add ((ValaCollection*) _tmp0_, _tmp1_);
	if (source_reference != NULL) {
		ValaSourceFile* _tmp2_;
		ValaSourceFile* _tmp3_;
		gchar* _tmp4_;
		gchar* _tmp5_;
		ValaSourceLocation _tmp6_ = {0};
		ValaSourceLocation _tmp7_;
		ValaCCodeLineDirective* _tmp8_;
		ValaCCodeFunction* _tmp9_;
		ValaCCodeFunction* _tmp10_;
		_tmp2_ = vala_source_reference_get_file (source_reference);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_source_file_get_relative_filename (_tmp3_);
		_tmp5_ = _tmp4_;
		vala_source_reference_get_begin (source_reference, &_tmp6_);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_ccode_line_directive_new (_tmp5_, _tmp7_.line);
		_vala_ccode_node_unref0 (self->current_line);
		self->current_line = _tmp8_;
		_g_free0 (_tmp5_);
		_tmp9_ = vala_ccode_base_module_get_ccode (self);
		_tmp10_ = _tmp9_;
		if (_tmp10_ != NULL) {
			ValaCCodeFunction* _tmp11_;
			ValaCCodeFunction* _tmp12_;
			ValaCCodeLineDirective* _tmp13_;
			_tmp11_ = vala_ccode_base_module_get_ccode (self);
			_tmp12_ = _tmp11_;
			_tmp13_ = self->current_line;
			vala_ccode_function_set_current_line (_tmp12_, _tmp13_);
		}
	}
}

void
vala_ccode_base_module_pop_line (ValaCCodeBaseModule* self)
{
	ValaList* _tmp0_;
	ValaList* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	gpointer _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->line_directive_stack;
	_tmp1_ = self->priv->line_directive_stack;
	_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_list_remove_at (_tmp0_, _tmp3_ - 1);
	_vala_ccode_node_unref0 (self->current_line);
	self->current_line = (ValaCCodeLineDirective*) _tmp4_;
	_tmp5_ = vala_ccode_base_module_get_ccode (self);
	_tmp6_ = _tmp5_;
	if (_tmp6_ != NULL) {
		ValaCCodeFunction* _tmp7_;
		ValaCCodeFunction* _tmp8_;
		ValaCCodeLineDirective* _tmp9_;
		_tmp7_ = vala_ccode_base_module_get_ccode (self);
		_tmp8_ = _tmp7_;
		_tmp9_ = self->current_line;
		vala_ccode_function_set_current_line (_tmp8_, _tmp9_);
	}
}

static gpointer
_vala_ccode_node_ref0 (gpointer self)
{
	return self ? vala_ccode_node_ref (self) : NULL;
}

void
vala_ccode_base_module_push_function (ValaCCodeBaseModule* self,
                                      ValaCCodeFunction* func)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaArrayList* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeBaseModuleEmitContext* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeLineDirective* _tmp8_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (func != NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = _tmp0_->ccode_stack;
	_tmp2_ = vala_ccode_base_module_get_ccode (self);
	_tmp3_ = _tmp2_;
	vala_collection_add ((ValaCollection*) _tmp1_, _tmp3_);
	_tmp4_ = self->emit_context;
	_tmp5_ = _vala_ccode_node_ref0 (func);
	_vala_ccode_node_unref0 (_tmp4_->ccode);
	_tmp4_->ccode = _tmp5_;
	_tmp6_ = vala_ccode_base_module_get_ccode (self);
	_tmp7_ = _tmp6_;
	_tmp8_ = self->current_line;
	vala_ccode_function_set_current_line (_tmp7_, _tmp8_);
}

void
vala_ccode_base_module_pop_function (ValaCCodeBaseModule* self)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaArrayList* _tmp2_;
	ValaCCodeBaseModuleEmitContext* _tmp3_;
	ValaArrayList* _tmp4_;
	gint _tmp5_;
	gint _tmp6_;
	gpointer _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->emit_context;
	_tmp1_ = self->emit_context;
	_tmp2_ = _tmp1_->ccode_stack;
	_tmp3_ = self->emit_context;
	_tmp4_ = _tmp3_->ccode_stack;
	_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_list_remove_at ((ValaList*) _tmp2_, _tmp6_ - 1);
	_vala_ccode_node_unref0 (_tmp0_->ccode);
	_tmp0_->ccode = (ValaCCodeFunction*) _tmp7_;
	_tmp8_ = vala_ccode_base_module_get_ccode (self);
	_tmp9_ = _tmp8_;
	if (_tmp9_ != NULL) {
		ValaCCodeFunction* _tmp10_;
		ValaCCodeFunction* _tmp11_;
		ValaCCodeLineDirective* _tmp12_;
		_tmp10_ = vala_ccode_base_module_get_ccode (self);
		_tmp11_ = _tmp10_;
		_tmp12_ = self->current_line;
		vala_ccode_function_set_current_line (_tmp11_, _tmp12_);
	}
}

gboolean
vala_ccode_base_module_add_symbol_declaration (ValaCCodeBaseModule* self,
                                               ValaCCodeFile* decl_space,
                                               ValaSymbol* sym,
                                               const gchar* name)
{
	gboolean _tmp0_ = FALSE;
	ValaCodeContext* _tmp1_;
	const gchar* _tmp2_;
	const gchar* _tmp3_;
	gboolean in_generated_header = FALSE;
	ValaSourceReference* _tmp11_;
	ValaSourceReference* _tmp12_;
	gboolean _tmp17_;
	gboolean _tmp18_;
	gboolean _tmp19_ = FALSE;
	gboolean _tmp22_ = FALSE;
	gboolean _tmp23_ = FALSE;
	gboolean _tmp24_;
	gboolean _tmp25_;
	gboolean _tmp28_ = FALSE;
	gboolean _tmp29_ = FALSE;
	gboolean _tmp30_;
	gboolean _tmp31_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (decl_space != NULL, FALSE);
	g_return_val_if_fail (sym != NULL, FALSE);
	g_return_val_if_fail (name != NULL, FALSE);
	_tmp1_ = self->priv->_context;
	_tmp2_ = vala_code_context_get_header_filename (_tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ != NULL) {
		gboolean _tmp4_ = FALSE;
		gboolean _tmp5_ = FALSE;
		CCodeFileType _tmp6_;
		CCodeFileType _tmp7_;
		_tmp6_ = vala_ccode_file_get_file_type (decl_space);
		_tmp7_ = _tmp6_;
		if (_tmp7_ != CCODE_FILE_TYPE_PUBLIC_HEADER) {
			_tmp5_ = !vala_symbol_is_internal_symbol (sym);
		} else {
			_tmp5_ = FALSE;
		}
		if (_tmp5_) {
			gboolean _tmp8_ = FALSE;
			if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_CLASS)) {
				gboolean _tmp9_;
				gboolean _tmp10_;
				_tmp9_ = vala_class_get_is_opaque (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass));
				_tmp10_ = _tmp9_;
				_tmp8_ = _tmp10_;
			} else {
				_tmp8_ = FALSE;
			}
			_tmp4_ = !_tmp8_;
		} else {
			_tmp4_ = FALSE;
		}
		_tmp0_ = _tmp4_;
	} else {
		_tmp0_ = FALSE;
	}
	in_generated_header = _tmp0_;
	if (vala_ccode_file_add_declaration (decl_space, name)) {
		result = TRUE;
		return result;
	}
	_tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
	_tmp12_ = _tmp11_;
	if (_tmp12_ != NULL) {
		ValaSourceReference* _tmp13_;
		ValaSourceReference* _tmp14_;
		ValaSourceFile* _tmp15_;
		ValaSourceFile* _tmp16_;
		_tmp13_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_source_reference_get_file (_tmp14_);
		_tmp16_ = _tmp15_;
		vala_source_file_set_used (_tmp16_, TRUE);
	}
	_tmp17_ = vala_symbol_get_anonymous (sym);
	_tmp18_ = _tmp17_;
	if (_tmp18_) {
		result = in_generated_header;
		return result;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_CONSTANT)) {
		ValaExpression* _tmp20_;
		ValaExpression* _tmp21_;
		_tmp20_ = vala_constant_get_value (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant));
		_tmp21_ = _tmp20_;
		_tmp19_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_INITIALIZER_LIST);
	} else {
		_tmp19_ = FALSE;
	}
	if (_tmp19_) {
		result = FALSE;
		return result;
	}
	_tmp24_ = vala_symbol_get_external_package (sym);
	_tmp25_ = _tmp24_;
	if (!_tmp25_) {
		_tmp23_ = G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_CLASS);
	} else {
		_tmp23_ = FALSE;
	}
	if (_tmp23_) {
		gboolean _tmp26_;
		gboolean _tmp27_;
		_tmp26_ = vala_class_get_is_sealed (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass));
		_tmp27_ = _tmp26_;
		_tmp22_ = _tmp27_;
	} else {
		_tmp22_ = FALSE;
	}
	if (_tmp22_) {
		result = FALSE;
		return result;
	}
	_tmp30_ = vala_symbol_get_external_package (sym);
	_tmp31_ = _tmp30_;
	if (_tmp31_) {
		_tmp29_ = TRUE;
	} else {
		_tmp29_ = in_generated_header;
	}
	if (_tmp29_) {
		_tmp28_ = TRUE;
	} else {
		gboolean _tmp32_ = FALSE;
		gboolean _tmp33_;
		gboolean _tmp34_;
		_tmp33_ = vala_symbol_get_is_extern (sym);
		_tmp34_ = _tmp33_;
		if (_tmp34_) {
			gchar* _tmp35_;
			gchar* _tmp36_;
			gint _tmp37_;
			gint _tmp38_;
			_tmp35_ = vala_get_ccode_header_filenames (sym);
			_tmp36_ = _tmp35_;
			_tmp37_ = strlen (_tmp36_);
			_tmp38_ = _tmp37_;
			_tmp32_ = _tmp38_ > 0;
			_g_free0 (_tmp36_);
		} else {
			_tmp32_ = FALSE;
		}
		_tmp28_ = _tmp32_;
	}
	if (_tmp28_) {
		gchar* _tmp39_;
		gchar* _tmp40_;
		gchar** _tmp41_;
		gchar** _tmp42_;
		gchar** _tmp43_;
		gint _tmp43__length1;
		gchar* _tmp45_;
		gchar* _tmp46_;
		gchar** _tmp47_;
		gchar** _tmp48_;
		gchar** _tmp49_;
		gint _tmp49__length1;
		_tmp39_ = vala_get_ccode_feature_test_macros (sym);
		_tmp40_ = _tmp39_;
		_tmp42_ = _tmp41_ = g_strsplit (_tmp40_, ",", 0);
		_tmp43_ = _tmp42_;
		_tmp43__length1 = _vala_array_length (_tmp41_);
		_g_free0 (_tmp40_);
		{
			gchar** feature_test_macro_collection = NULL;
			gint feature_test_macro_collection_length1 = 0;
			gint _feature_test_macro_collection_size_ = 0;
			gint feature_test_macro_it = 0;
			feature_test_macro_collection = _tmp43_;
			feature_test_macro_collection_length1 = _tmp43__length1;
			for (feature_test_macro_it = 0; feature_test_macro_it < feature_test_macro_collection_length1; feature_test_macro_it = feature_test_macro_it + 1) {
				const gchar* feature_test_macro = NULL;
				feature_test_macro = feature_test_macro_collection[feature_test_macro_it];
				{
					const gchar* _tmp44_;
					_tmp44_ = feature_test_macro;
					vala_ccode_file_add_feature_test_macro (decl_space, _tmp44_);
				}
			}
			feature_test_macro_collection = (_vala_array_free (feature_test_macro_collection, feature_test_macro_collection_length1, (GDestroyNotify) g_free), NULL);
		}
		_tmp45_ = vala_get_ccode_header_filenames (sym);
		_tmp46_ = _tmp45_;
		_tmp48_ = _tmp47_ = g_strsplit (_tmp46_, ",", 0);
		_tmp49_ = _tmp48_;
		_tmp49__length1 = _vala_array_length (_tmp47_);
		_g_free0 (_tmp46_);
		{
			gchar** header_filename_collection = NULL;
			gint header_filename_collection_length1 = 0;
			gint _header_filename_collection_size_ = 0;
			gint header_filename_it = 0;
			header_filename_collection = _tmp49_;
			header_filename_collection_length1 = _tmp49__length1;
			for (header_filename_it = 0; header_filename_it < header_filename_collection_length1; header_filename_it = header_filename_it + 1) {
				const gchar* header_filename = NULL;
				header_filename = header_filename_collection[header_filename_it];
				{
					gboolean _tmp50_ = FALSE;
					gboolean _tmp51_;
					gboolean _tmp52_;
					const gchar* _tmp61_;
					_tmp51_ = vala_symbol_get_is_extern (sym);
					_tmp52_ = _tmp51_;
					if (!_tmp52_) {
						gboolean _tmp53_ = FALSE;
						gboolean _tmp54_;
						gboolean _tmp55_;
						_tmp54_ = vala_symbol_get_external_package (sym);
						_tmp55_ = _tmp54_;
						if (!_tmp55_) {
							_tmp53_ = TRUE;
						} else {
							gboolean _tmp56_ = FALSE;
							gboolean _tmp57_;
							gboolean _tmp58_;
							_tmp57_ = vala_symbol_get_external_package (sym);
							_tmp58_ = _tmp57_;
							if (_tmp58_) {
								gboolean _tmp59_;
								gboolean _tmp60_;
								_tmp59_ = vala_symbol_get_from_commandline (sym);
								_tmp60_ = _tmp59_;
								_tmp56_ = _tmp60_;
							} else {
								_tmp56_ = FALSE;
							}
							_tmp53_ = _tmp56_;
						}
						_tmp50_ = _tmp53_;
					} else {
						_tmp50_ = FALSE;
					}
					_tmp61_ = header_filename;
					vala_ccode_file_add_include (decl_space, _tmp61_, _tmp50_);
				}
			}
			header_filename_collection = (_vala_array_free (header_filename_collection, header_filename_collection_length1, (GDestroyNotify) g_free), NULL);
		}
		result = TRUE;
		return result;
	} else {
		result = FALSE;
		return result;
	}
}

static void
vala_ccode_base_module_real_append_vala_array_free (ValaCCodeBaseModule* self)
{
}

void
vala_ccode_base_module_append_vala_array_free (ValaCCodeBaseModule* self)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->append_vala_array_free) {
		_klass_->append_vala_array_free (self);
	}
}

static void
vala_ccode_base_module_real_append_vala_array_move (ValaCCodeBaseModule* self)
{
}

void
vala_ccode_base_module_append_vala_array_move (ValaCCodeBaseModule* self)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->append_vala_array_move) {
		_klass_->append_vala_array_move (self);
	}
}

static void
vala_ccode_base_module_real_append_vala_array_length (ValaCCodeBaseModule* self)
{
}

void
vala_ccode_base_module_append_vala_array_length (ValaCCodeBaseModule* self)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->append_vala_array_length) {
		_klass_->append_vala_array_length (self);
	}
}

static void
vala_ccode_base_module_real_append_params_array (ValaCCodeBaseModule* self,
                                                 ValaMethod* m)
{
	g_return_if_fail (m != NULL);
}

void
vala_ccode_base_module_append_params_array (ValaCCodeBaseModule* self,
                                            ValaMethod* m)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->append_params_array) {
		_klass_->append_params_array (self, m);
	}
}

void
vala_ccode_base_module_append_vala_clear_mutex (ValaCCodeBaseModule* self,
                                                const gchar* typename,
                                                const gchar* funcprefix)
{
	ValaCCodeFile* _tmp0_;
	ValaCCodeFunction* fun = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaCCodeConstant* _tmp11_;
	ValaCCodeConstant* _tmp12_;
	ValaCCodeVariableDeclarator* _tmp13_;
	ValaCCodeVariableDeclarator* _tmp14_;
	ValaCCodeFunctionCall* cmp = NULL;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeFunctionCall* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeIdentifier* _tmp20_;
	ValaCCodeIdentifier* _tmp21_;
	ValaCCodeIdentifier* _tmp22_;
	ValaCCodeUnaryExpression* _tmp23_;
	ValaCCodeUnaryExpression* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeFunctionCall* mutex_clear = NULL;
	gchar* _tmp33_;
	gchar* _tmp34_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeIdentifier* _tmp36_;
	ValaCCodeFunctionCall* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	ValaCCodeIdentifier* _tmp39_;
	ValaCCodeIdentifier* _tmp40_;
	ValaCCodeFunction* _tmp41_;
	ValaCCodeFunction* _tmp42_;
	ValaCCodeFunctionCall* mset = NULL;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeFunctionCall* _tmp45_;
	ValaCCodeFunctionCall* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeConstant* _tmp49_;
	ValaCCodeConstant* _tmp50_;
	gchar* _tmp51_;
	gchar* _tmp52_;
	gchar* _tmp53_;
	gchar* _tmp54_;
	ValaCCodeIdentifier* _tmp55_;
	ValaCCodeIdentifier* _tmp56_;
	ValaCCodeFunction* _tmp57_;
	ValaCCodeFunction* _tmp58_;
	ValaCCodeFunction* _tmp59_;
	ValaCCodeFunction* _tmp60_;
	ValaCCodeFile* _tmp61_;
	ValaCCodeFile* _tmp62_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (typename != NULL);
	g_return_if_fail (funcprefix != NULL);
	_tmp0_ = self->cfile;
	vala_ccode_file_add_include (_tmp0_, "string.h", FALSE);
	_tmp1_ = g_strconcat ("_vala_clear_", typename, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_ccode_function_new (_tmp2_, "void");
	_tmp4_ = _tmp3_;
	_g_free0 (_tmp2_);
	fun = _tmp4_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) fun, VALA_CCODE_MODIFIERS_STATIC);
	_tmp5_ = g_strconcat (typename, " *", NULL);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_ccode_parameter_new ("mutex", _tmp6_);
	_tmp8_ = _tmp7_;
	vala_ccode_function_add_parameter (fun, _tmp8_);
	_vala_ccode_node_unref0 (_tmp8_);
	_g_free0 (_tmp6_);
	vala_ccode_base_module_push_function (self, fun);
	_tmp9_ = vala_ccode_base_module_get_ccode (self);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_constant_new ("{ 0 }");
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_variable_declarator_new_zero ("zero_mutex", (ValaCCodeExpression*) _tmp12_, NULL);
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_declaration (_tmp10_, typename, (ValaCCodeDeclarator*) _tmp14_, 0);
	_vala_ccode_node_unref0 (_tmp14_);
	_vala_ccode_node_unref0 (_tmp12_);
	_tmp15_ = vala_ccode_identifier_new ("memcmp");
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp16_);
	_tmp18_ = _tmp17_;
	_vala_ccode_node_unref0 (_tmp16_);
	cmp = _tmp18_;
	_tmp19_ = vala_ccode_identifier_new ("mutex");
	_tmp20_ = _tmp19_;
	vala_ccode_function_call_add_argument (cmp, (ValaCCodeExpression*) _tmp20_);
	_vala_ccode_node_unref0 (_tmp20_);
	_tmp21_ = vala_ccode_identifier_new ("zero_mutex");
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp22_);
	_tmp24_ = _tmp23_;
	vala_ccode_function_call_add_argument (cmp, (ValaCCodeExpression*) _tmp24_);
	_vala_ccode_node_unref0 (_tmp24_);
	_vala_ccode_node_unref0 (_tmp22_);
	_tmp25_ = g_strconcat ("sizeof (", typename, NULL);
	_tmp26_ = _tmp25_;
	_tmp27_ = g_strconcat (_tmp26_, ")", NULL);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_identifier_new (_tmp28_);
	_tmp30_ = _tmp29_;
	vala_ccode_function_call_add_argument (cmp, (ValaCCodeExpression*) _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_g_free0 (_tmp28_);
	_g_free0 (_tmp26_);
	_tmp31_ = vala_ccode_base_module_get_ccode (self);
	_tmp32_ = _tmp31_;
	vala_ccode_function_open_if (_tmp32_, (ValaCCodeExpression*) cmp);
	_tmp33_ = g_strconcat (funcprefix, "_clear", NULL);
	_tmp34_ = _tmp33_;
	_tmp35_ = vala_ccode_identifier_new (_tmp34_);
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp36_);
	_tmp38_ = _tmp37_;
	_vala_ccode_node_unref0 (_tmp36_);
	_g_free0 (_tmp34_);
	mutex_clear = _tmp38_;
	_tmp39_ = vala_ccode_identifier_new ("mutex");
	_tmp40_ = _tmp39_;
	vala_ccode_function_call_add_argument (mutex_clear, (ValaCCodeExpression*) _tmp40_);
	_vala_ccode_node_unref0 (_tmp40_);
	_tmp41_ = vala_ccode_base_module_get_ccode (self);
	_tmp42_ = _tmp41_;
	vala_ccode_function_add_expression (_tmp42_, (ValaCCodeExpression*) mutex_clear);
	_tmp43_ = vala_ccode_identifier_new ("memset");
	_tmp44_ = _tmp43_;
	_tmp45_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp44_);
	_tmp46_ = _tmp45_;
	_vala_ccode_node_unref0 (_tmp44_);
	mset = _tmp46_;
	_tmp47_ = vala_ccode_identifier_new ("mutex");
	_tmp48_ = _tmp47_;
	vala_ccode_function_call_add_argument (mset, (ValaCCodeExpression*) _tmp48_);
	_vala_ccode_node_unref0 (_tmp48_);
	_tmp49_ = vala_ccode_constant_new ("0");
	_tmp50_ = _tmp49_;
	vala_ccode_function_call_add_argument (mset, (ValaCCodeExpression*) _tmp50_);
	_vala_ccode_node_unref0 (_tmp50_);
	_tmp51_ = g_strconcat ("sizeof (", typename, NULL);
	_tmp52_ = _tmp51_;
	_tmp53_ = g_strconcat (_tmp52_, ")", NULL);
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_identifier_new (_tmp54_);
	_tmp56_ = _tmp55_;
	vala_ccode_function_call_add_argument (mset, (ValaCCodeExpression*) _tmp56_);
	_vala_ccode_node_unref0 (_tmp56_);
	_g_free0 (_tmp54_);
	_g_free0 (_tmp52_);
	_tmp57_ = vala_ccode_base_module_get_ccode (self);
	_tmp58_ = _tmp57_;
	vala_ccode_function_add_expression (_tmp58_, (ValaCCodeExpression*) mset);
	_tmp59_ = vala_ccode_base_module_get_ccode (self);
	_tmp60_ = _tmp59_;
	vala_ccode_function_close (_tmp60_);
	vala_ccode_base_module_pop_function (self);
	_tmp61_ = self->cfile;
	vala_ccode_file_add_function_declaration (_tmp61_, fun);
	_tmp62_ = self->cfile;
	vala_ccode_file_add_function (_tmp62_, fun);
	_vala_ccode_node_unref0 (mset);
	_vala_ccode_node_unref0 (mutex_clear);
	_vala_ccode_node_unref0 (cmp);
	_vala_ccode_node_unref0 (fun);
}

static void
vala_ccode_base_module_append_vala_memdup2 (ValaCCodeBaseModule* self)
{
	ValaCCodeFile* _tmp0_;
	ValaCCodeFile* _tmp1_;
	ValaCCodeFunction* fun = NULL;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeParameter* _tmp3_;
	ValaCCodeParameter* _tmp4_;
	ValaCCodeParameter* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeVariableDeclarator* _tmp9_;
	ValaCCodeVariableDeclarator* _tmp10_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeIdentifier* _tmp13_;
	ValaCCodeIdentifier* _tmp14_;
	ValaCCodeFunctionCall* malloc = NULL;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeFunctionCall* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeIdentifier* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaCCodeIdentifier* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	ValaCCodeFunctionCall* mcpy = NULL;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeIdentifier* _tmp26_;
	ValaCCodeFunctionCall* _tmp27_;
	ValaCCodeFunctionCall* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeIdentifier* _tmp31_;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeIdentifier* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeFunction* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	ValaCCodeFunction* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeConstant* _tmp43_;
	ValaCCodeConstant* _tmp44_;
	ValaCCodeFunction* _tmp45_;
	ValaCCodeFunction* _tmp46_;
	ValaCCodeFunction* _tmp47_;
	ValaCCodeFunction* _tmp48_;
	ValaCCodeIdentifier* _tmp49_;
	ValaCCodeIdentifier* _tmp50_;
	ValaCCodeFile* _tmp51_;
	ValaCCodeFile* _tmp52_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->cfile;
	vala_ccode_file_add_include (_tmp0_, "glib.h", FALSE);
	_tmp1_ = self->cfile;
	vala_ccode_file_add_include (_tmp1_, "string.h", FALSE);
	_tmp2_ = vala_ccode_function_new ("_vala_memdup2", "gpointer");
	fun = _tmp2_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) fun, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
	_tmp3_ = vala_ccode_parameter_new ("mem", "gconstpointer");
	_tmp4_ = _tmp3_;
	vala_ccode_function_add_parameter (fun, _tmp4_);
	_vala_ccode_node_unref0 (_tmp4_);
	_tmp5_ = vala_ccode_parameter_new ("byte_size", "gsize");
	_tmp6_ = _tmp5_;
	vala_ccode_function_add_parameter (fun, _tmp6_);
	_vala_ccode_node_unref0 (_tmp6_);
	vala_ccode_base_module_push_function (self, fun);
	_tmp7_ = vala_ccode_base_module_get_ccode (self);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_ccode_variable_declarator_new ("new_mem", NULL, NULL);
	_tmp10_ = _tmp9_;
	vala_ccode_function_add_declaration (_tmp8_, "gpointer", (ValaCCodeDeclarator*) _tmp10_, 0);
	_vala_ccode_node_unref0 (_tmp10_);
	_tmp11_ = vala_ccode_base_module_get_ccode (self);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_identifier_new ("mem && byte_size != 0");
	_tmp14_ = _tmp13_;
	vala_ccode_function_open_if (_tmp12_, (ValaCCodeExpression*) _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_tmp15_ = vala_ccode_identifier_new ("g_malloc");
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp16_);
	_tmp18_ = _tmp17_;
	_vala_ccode_node_unref0 (_tmp16_);
	malloc = _tmp18_;
	_tmp19_ = vala_ccode_identifier_new ("byte_size");
	_tmp20_ = _tmp19_;
	vala_ccode_function_call_add_argument (malloc, (ValaCCodeExpression*) _tmp20_);
	_vala_ccode_node_unref0 (_tmp20_);
	_tmp21_ = vala_ccode_base_module_get_ccode (self);
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_ccode_identifier_new ("new_mem");
	_tmp24_ = _tmp23_;
	vala_ccode_function_add_assignment (_tmp22_, (ValaCCodeExpression*) _tmp24_, (ValaCCodeExpression*) malloc);
	_vala_ccode_node_unref0 (_tmp24_);
	_tmp25_ = vala_ccode_identifier_new ("memcpy");
	_tmp26_ = _tmp25_;
	_tmp27_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp26_);
	_tmp28_ = _tmp27_;
	_vala_ccode_node_unref0 (_tmp26_);
	mcpy = _tmp28_;
	_tmp29_ = vala_ccode_identifier_new ("new_mem");
	_tmp30_ = _tmp29_;
	vala_ccode_function_call_add_argument (mcpy, (ValaCCodeExpression*) _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_tmp31_ = vala_ccode_identifier_new ("mem");
	_tmp32_ = _tmp31_;
	vala_ccode_function_call_add_argument (mcpy, (ValaCCodeExpression*) _tmp32_);
	_vala_ccode_node_unref0 (_tmp32_);
	_tmp33_ = vala_ccode_identifier_new ("byte_size");
	_tmp34_ = _tmp33_;
	vala_ccode_function_call_add_argument (mcpy, (ValaCCodeExpression*) _tmp34_);
	_vala_ccode_node_unref0 (_tmp34_);
	_tmp35_ = vala_ccode_base_module_get_ccode (self);
	_tmp36_ = _tmp35_;
	vala_ccode_function_add_expression (_tmp36_, (ValaCCodeExpression*) mcpy);
	_tmp37_ = vala_ccode_base_module_get_ccode (self);
	_tmp38_ = _tmp37_;
	vala_ccode_function_add_else (_tmp38_);
	_tmp39_ = vala_ccode_base_module_get_ccode (self);
	_tmp40_ = _tmp39_;
	_tmp41_ = vala_ccode_identifier_new ("new_mem");
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_ccode_constant_new ("NULL");
	_tmp44_ = _tmp43_;
	vala_ccode_function_add_assignment (_tmp40_, (ValaCCodeExpression*) _tmp42_, (ValaCCodeExpression*) _tmp44_);
	_vala_ccode_node_unref0 (_tmp44_);
	_vala_ccode_node_unref0 (_tmp42_);
	_tmp45_ = vala_ccode_base_module_get_ccode (self);
	_tmp46_ = _tmp45_;
	vala_ccode_function_close (_tmp46_);
	_tmp47_ = vala_ccode_base_module_get_ccode (self);
	_tmp48_ = _tmp47_;
	_tmp49_ = vala_ccode_identifier_new ("new_mem");
	_tmp50_ = _tmp49_;
	vala_ccode_function_add_return (_tmp48_, (ValaCCodeExpression*) _tmp50_);
	_vala_ccode_node_unref0 (_tmp50_);
	vala_ccode_base_module_pop_function (self);
	_tmp51_ = self->cfile;
	vala_ccode_file_add_function_declaration (_tmp51_, fun);
	_tmp52_ = self->cfile;
	vala_ccode_file_add_function (_tmp52_, fun);
	_vala_ccode_node_unref0 (mcpy);
	_vala_ccode_node_unref0 (malloc);
	_vala_ccode_node_unref0 (fun);
}

/**
 * Define a macro hint for exporting a symbol in a portable way.
 */
static void
vala_ccode_base_module_append_vala_extern_define (ValaCCodeBaseModule* self,
                                                  ValaCCodeFile* decl_space)
{
	ValaCCodeIfSection* extern_define = NULL;
	ValaCCodeIfSection* _tmp0_;
	ValaCCodeIfSection* if_section = NULL;
	ValaCCodeIfSection* _tmp1_;
	ValaCCodeIfSection* _tmp2_;
	ValaCCodeIfSection* _tmp3_;
	ValaCCodeDefine* _tmp4_;
	ValaCCodeDefine* _tmp5_;
	ValaCCodeIfSection* _tmp6_;
	ValaCCodeIfSection* _tmp7_;
	ValaCCodeIfSection* _tmp8_;
	ValaCCodeIfSection* _tmp9_;
	ValaCCodeDefine* _tmp10_;
	ValaCCodeDefine* _tmp11_;
	ValaCCodeIfSection* _tmp12_;
	ValaCCodeIfSection* _tmp13_;
	ValaCCodeIfSection* _tmp14_;
	ValaCCodeIfSection* _tmp15_;
	ValaCCodeDefine* _tmp16_;
	ValaCCodeDefine* _tmp17_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_ccode_if_section_new ("!defined(VALA_EXTERN)");
	extern_define = _tmp0_;
	_tmp1_ = vala_ccode_if_section_new ("defined(_MSC_VER)");
	_vala_ccode_node_unref0 (if_section);
	if_section = _tmp1_;
	_tmp2_ = if_section;
	vala_ccode_fragment_append ((ValaCCodeFragment*) extern_define, (ValaCCodeNode*) _tmp2_);
	_tmp3_ = if_section;
	_tmp4_ = vala_ccode_define_new ("VALA_EXTERN", "__declspec(dllexport) extern");
	_tmp5_ = _tmp4_;
	vala_ccode_fragment_append ((ValaCCodeFragment*) _tmp3_, (ValaCCodeNode*) _tmp5_);
	_vala_ccode_node_unref0 (_tmp5_);
	_tmp6_ = if_section;
	_tmp7_ = vala_ccode_if_section_append_else (_tmp6_, "__GNUC__ >= 4");
	_tmp8_ = _vala_ccode_node_ref0 (_tmp7_);
	_vala_ccode_node_unref0 (if_section);
	if_section = _tmp8_;
	_tmp9_ = if_section;
	_tmp10_ = vala_ccode_define_new ("VALA_EXTERN", "__attribute__((visibility(\"default\"))) extern");
	_tmp11_ = _tmp10_;
	vala_ccode_fragment_append ((ValaCCodeFragment*) _tmp9_, (ValaCCodeNode*) _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_tmp12_ = if_section;
	_tmp13_ = vala_ccode_if_section_append_else (_tmp12_, NULL);
	_tmp14_ = _vala_ccode_node_ref0 (_tmp13_);
	_vala_ccode_node_unref0 (if_section);
	if_section = _tmp14_;
	_tmp15_ = if_section;
	_tmp16_ = vala_ccode_define_new ("VALA_EXTERN", "extern");
	_tmp17_ = _tmp16_;
	vala_ccode_fragment_append ((ValaCCodeFragment*) _tmp15_, (ValaCCodeNode*) _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	vala_ccode_file_add_define (decl_space, (ValaCCodeNode*) extern_define);
	_vala_ccode_node_unref0 (if_section);
	_vala_ccode_node_unref0 (extern_define);
}

static void
vala_ccode_base_module_real_visit_source_file (ValaCodeVisitor* base,
                                               ValaSourceFile* source_file)
{
	ValaCCodeBaseModule * self;
	ValaCCodeFile* _tmp0_;
	GHashFunc _tmp1_;
	GEqualFunc _tmp2_;
	ValaHashSet* _tmp3_;
	GHashFunc _tmp4_;
	GEqualFunc _tmp5_;
	ValaHashSet* _tmp6_;
	GHashFunc _tmp7_;
	GEqualFunc _tmp8_;
	ValaHashSet* _tmp9_;
	ValaCodeContext* _tmp10_;
	ValaReport* _tmp11_;
	ValaReport* _tmp12_;
	ValaSourceFileType _tmp13_;
	ValaSourceFileType _tmp14_;
	ValaList* comments = NULL;
	ValaList* _tmp54_;
	ValaList* _tmp55_;
	ValaList* _tmp56_;
	ValaCCodeFile* _tmp71_;
	gchar* _tmp72_;
	gchar* _tmp73_;
	const gchar* _tmp74_;
	const gchar* _tmp75_;
	ValaCodeContext* _tmp76_;
	gboolean _tmp77_;
	gboolean _tmp78_;
	ValaCodeContext* _tmp79_;
	gboolean _tmp80_;
	gboolean _tmp81_;
	gboolean _tmp82_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (source_file != NULL);
	_tmp0_ = vala_ccode_file_new (CCODE_FILE_TYPE_SOURCE, source_file);
	_vala_ccode_file_unref0 (self->cfile);
	self->cfile = _tmp0_;
	_tmp1_ = g_str_hash;
	_tmp2_ = g_str_equal;
	_tmp3_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp1_, _tmp2_);
	_vala_iterable_unref0 (self->user_marshal_set);
	self->user_marshal_set = (ValaSet*) _tmp3_;
	self->next_regex_id = 0;
	self->requires_assert = FALSE;
	self->requires_array_free = FALSE;
	self->requires_array_move = FALSE;
	self->requires_array_length = FALSE;
	self->requires_array_n_elements = FALSE;
	self->requires_clear_mutex = FALSE;
	self->requires_vala_extern = FALSE;
	_tmp4_ = g_str_hash;
	_tmp5_ = g_str_equal;
	_tmp6_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp4_, _tmp5_);
	_vala_iterable_unref0 (self->wrappers);
	self->wrappers = (ValaSet*) _tmp6_;
	_tmp7_ = g_direct_hash;
	_tmp8_ = g_direct_equal;
	_tmp9_ = vala_hash_set_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp7_, _tmp8_);
	_vala_iterable_unref0 (self->priv->generated_external_symbols);
	self->priv->generated_external_symbols = (ValaSet*) _tmp9_;
	vala_source_file_accept_children (source_file, (ValaCodeVisitor*) self);
	_tmp10_ = self->priv->_context;
	_tmp11_ = vala_code_context_get_report (_tmp10_);
	_tmp12_ = _tmp11_;
	if (vala_report_get_errors (_tmp12_) > 0) {
		return;
	}
	_tmp13_ = vala_source_file_get_file_type (source_file);
	_tmp14_ = _tmp13_;
	if (_tmp14_ == VALA_SOURCE_FILE_TYPE_FAST) {
		return;
	}
	if (self->requires_assert) {
		ValaCCodeFile* _tmp15_;
		ValaCCodeConstant* _tmp16_;
		ValaCCodeConstant* _tmp17_;
		ValaCCodeMacroReplacement* _tmp18_;
		ValaCCodeMacroReplacement* _tmp19_;
		ValaCCodeFile* _tmp20_;
		ValaCCodeConstant* _tmp21_;
		ValaCCodeConstant* _tmp22_;
		ValaCCodeMacroReplacement* _tmp23_;
		ValaCCodeMacroReplacement* _tmp24_;
		ValaCCodeFile* _tmp25_;
		ValaCCodeConstant* _tmp26_;
		ValaCCodeConstant* _tmp27_;
		ValaCCodeMacroReplacement* _tmp28_;
		ValaCCodeMacroReplacement* _tmp29_;
		ValaCCodeFile* _tmp30_;
		ValaCCodeConstant* _tmp31_;
		ValaCCodeConstant* _tmp32_;
		ValaCCodeMacroReplacement* _tmp33_;
		ValaCCodeMacroReplacement* _tmp34_;
		_tmp15_ = self->cfile;
		_tmp16_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FI" \
"LE__, __LINE__, G_STRFUNC, msg);");
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_ccode_macro_replacement_new_with_expression ("_vala_assert(expr, msg)", (ValaCCodeExpression*) _tmp17_);
		_tmp19_ = _tmp18_;
		vala_ccode_file_add_type_declaration (_tmp15_, (ValaCCodeNode*) _tmp19_);
		_vala_ccode_node_unref0 (_tmp19_);
		_vala_ccode_node_unref0 (_tmp17_);
		_tmp20_ = self->cfile;
		_tmp21_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_" \
"STRFUNC, msg); return; }");
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_ccode_macro_replacement_new_with_expression ("_vala_return_if_fail(expr, msg)", (ValaCCodeExpression*) _tmp22_);
		_tmp24_ = _tmp23_;
		vala_ccode_file_add_type_declaration (_tmp20_, (ValaCCodeNode*) _tmp24_);
		_vala_ccode_node_unref0 (_tmp24_);
		_vala_ccode_node_unref0 (_tmp22_);
		_tmp25_ = self->cfile;
		_tmp26_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_" \
"STRFUNC, msg); return val; }");
		_tmp27_ = _tmp26_;
		_tmp28_ = vala_ccode_macro_replacement_new_with_expression ("_vala_return_val_if_fail(expr, msg, val)", (ValaCCodeExpression*) _tmp27_);
		_tmp29_ = _tmp28_;
		vala_ccode_file_add_type_declaration (_tmp25_, (ValaCCodeNode*) _tmp29_);
		_vala_ccode_node_unref0 (_tmp29_);
		_vala_ccode_node_unref0 (_tmp27_);
		_tmp30_ = self->cfile;
		_tmp31_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LI" \
"NE__, G_STRFUNC, msg);");
		_tmp32_ = _tmp31_;
		_tmp33_ = vala_ccode_macro_replacement_new_with_expression ("_vala_warn_if_fail(expr, msg)", (ValaCCodeExpression*) _tmp32_);
		_tmp34_ = _tmp33_;
		vala_ccode_file_add_type_declaration (_tmp30_, (ValaCCodeNode*) _tmp34_);
		_vala_ccode_node_unref0 (_tmp34_);
		_vala_ccode_node_unref0 (_tmp32_);
	}
	if (self->requires_array_free) {
		vala_ccode_base_module_append_vala_array_free (self);
	}
	if (self->requires_array_move) {
		vala_ccode_base_module_append_vala_array_move (self);
	}
	if (self->requires_array_length) {
		vala_ccode_base_module_append_vala_array_length (self);
	}
	if (self->requires_array_n_elements) {
		ValaCCodeFile* _tmp35_;
		ValaCCodeConstant* _tmp36_;
		ValaCCodeConstant* _tmp37_;
		ValaCCodeMacroReplacement* _tmp38_;
		ValaCCodeMacroReplacement* _tmp39_;
		_tmp35_ = self->cfile;
		_tmp36_ = vala_ccode_constant_new ("(sizeof (arr) / sizeof ((arr)[0]))");
		_tmp37_ = _tmp36_;
		_tmp38_ = vala_ccode_macro_replacement_new_with_expression ("VALA_N_ELEMENTS(arr)", (ValaCCodeExpression*) _tmp37_);
		_tmp39_ = _tmp38_;
		vala_ccode_file_add_type_declaration (_tmp35_, (ValaCCodeNode*) _tmp39_);
		_vala_ccode_node_unref0 (_tmp39_);
		_vala_ccode_node_unref0 (_tmp37_);
	}
	if (self->requires_clear_mutex) {
		vala_ccode_base_module_append_vala_clear_mutex (self, "GMutex", "g_mutex");
		vala_ccode_base_module_append_vala_clear_mutex (self, "GRecMutex", "g_rec_mutex");
		vala_ccode_base_module_append_vala_clear_mutex (self, "GRWLock", "g_rw_lock");
		vala_ccode_base_module_append_vala_clear_mutex (self, "GCond", "g_cond");
	}
	if (self->requires_memdup2) {
		vala_ccode_base_module_append_vala_memdup2 (self);
	}
	if (self->requires_vala_extern) {
		ValaCodeContext* _tmp40_;
		const gchar* _tmp41_;
		const gchar* _tmp42_;
		_tmp40_ = self->priv->_context;
		_tmp41_ = vala_code_context_get_header_filename (_tmp40_);
		_tmp42_ = _tmp41_;
		if (_tmp42_ != NULL) {
			ValaCCodeFile* _tmp43_;
			ValaCCodeFile* _tmp45_;
			gchar* _tmp46_;
			gchar* _tmp47_;
			ValaCCodeFile* _tmp48_;
			gchar* _tmp49_;
			gchar* _tmp50_;
			_tmp43_ = self->header_file;
			if (!vala_ccode_file_add_declaration (_tmp43_, "VALA_EXTERN")) {
				ValaCCodeFile* _tmp44_;
				_tmp44_ = self->header_file;
				vala_ccode_base_module_append_vala_extern_define (self, _tmp44_);
			}
			_tmp45_ = self->cfile;
			_tmp46_ = vala_source_file_get_cinclude_filename (source_file);
			_tmp47_ = _tmp46_;
			vala_ccode_file_add_include (_tmp45_, _tmp47_, TRUE);
			_g_free0 (_tmp47_);
			_tmp48_ = self->internal_header_file;
			_tmp49_ = vala_source_file_get_cinclude_filename (source_file);
			_tmp50_ = _tmp49_;
			vala_ccode_file_add_include (_tmp48_, _tmp50_, TRUE);
			_g_free0 (_tmp50_);
		} else {
			ValaCCodeFile* _tmp51_;
			_tmp51_ = self->cfile;
			if (!vala_ccode_file_add_declaration (_tmp51_, "VALA_EXTERN")) {
				ValaCCodeFile* _tmp52_;
				ValaCCodeFile* _tmp53_;
				_tmp52_ = self->cfile;
				vala_ccode_base_module_append_vala_extern_define (self, _tmp52_);
				_tmp53_ = self->internal_header_file;
				vala_ccode_base_module_append_vala_extern_define (self, _tmp53_);
			}
		}
	}
	_tmp54_ = vala_source_file_get_comments (source_file);
	_tmp55_ = _vala_iterable_ref0 (_tmp54_);
	comments = _tmp55_;
	_tmp56_ = comments;
	if (_tmp56_ != NULL) {
		{
			ValaList* _comment_list = NULL;
			ValaList* _tmp57_;
			gint _comment_size = 0;
			ValaList* _tmp58_;
			gint _tmp59_;
			gint _tmp60_;
			gint _comment_index = 0;
			_tmp57_ = comments;
			_comment_list = _tmp57_;
			_tmp58_ = _comment_list;
			_tmp59_ = vala_collection_get_size ((ValaCollection*) _tmp58_);
			_tmp60_ = _tmp59_;
			_comment_size = _tmp60_;
			_comment_index = -1;
			while (TRUE) {
				gint _tmp61_;
				gint _tmp62_;
				ValaComment* comment = NULL;
				ValaList* _tmp63_;
				gpointer _tmp64_;
				ValaCCodeComment* ccomment = NULL;
				ValaComment* _tmp65_;
				const gchar* _tmp66_;
				const gchar* _tmp67_;
				ValaCCodeComment* _tmp68_;
				ValaCCodeFile* _tmp69_;
				ValaCCodeComment* _tmp70_;
				_comment_index = _comment_index + 1;
				_tmp61_ = _comment_index;
				_tmp62_ = _comment_size;
				if (!(_tmp61_ < _tmp62_)) {
					break;
				}
				_tmp63_ = _comment_list;
				_tmp64_ = vala_list_get (_tmp63_, _comment_index);
				comment = (ValaComment*) _tmp64_;
				_tmp65_ = comment;
				_tmp66_ = vala_comment_get_content (_tmp65_);
				_tmp67_ = _tmp66_;
				_tmp68_ = vala_ccode_comment_new (_tmp67_);
				ccomment = _tmp68_;
				_tmp69_ = self->cfile;
				_tmp70_ = ccomment;
				vala_ccode_file_add_comment (_tmp69_, _tmp70_);
				_vala_ccode_node_unref0 (ccomment);
				_vala_comment_unref0 (comment);
			}
		}
	}
	_tmp71_ = self->cfile;
	_tmp72_ = vala_source_file_get_csource_filename (source_file);
	_tmp73_ = _tmp72_;
	_tmp74_ = vala_source_file_get_filename (source_file);
	_tmp75_ = _tmp74_;
	_tmp76_ = self->priv->_context;
	_tmp77_ = vala_code_context_get_version_header (_tmp76_);
	_tmp78_ = _tmp77_;
	_tmp79_ = self->priv->_context;
	_tmp80_ = vala_code_context_get_debug (_tmp79_);
	_tmp81_ = _tmp80_;
	_tmp82_ = !vala_ccode_file_store (_tmp71_, _tmp73_, _tmp75_, _tmp78_, _tmp81_, NULL, NULL);
	_g_free0 (_tmp73_);
	if (_tmp82_) {
		gchar* _tmp83_;
		gchar* _tmp84_;
		_tmp83_ = vala_source_file_get_csource_filename (source_file);
		_tmp84_ = _tmp83_;
		vala_report_error (NULL, "unable to open `%s' for writing", _tmp84_);
		_g_free0 (_tmp84_);
	}
	_vala_ccode_file_unref0 (self->cfile);
	self->cfile = NULL;
	_vala_iterable_unref0 (comments);
}

static gpointer
_vala_ccode_file_ref0 (gpointer self)
{
	return self ? vala_ccode_file_ref (self) : NULL;
}

static gboolean
vala_ccode_base_module_real_generate_enum_declaration (ValaCCodeBaseModule* self,
                                                       ValaEnum* en,
                                                       ValaCCodeFile* decl_space)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gboolean _tmp2_;
	ValaCCodeEnum* cenum = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeEnum* _tmp5_;
	ValaCCodeEnum* _tmp6_;
	ValaVersionAttribute* _tmp7_;
	ValaVersionAttribute* _tmp8_;
	gboolean _tmp9_;
	gboolean _tmp10_;
	ValaCCodeFile* current_cfile = NULL;
	ValaCCodeFile* _tmp18_;
	ValaCCodeFile* _tmp19_;
	ValaCCodeFile* _tmp20_;
	gint flag_shift = 0;
	ValaCCodeFile* _tmp66_;
	ValaCCodeFile* _tmp67_;
	ValaCCodeEnum* _tmp68_;
	ValaCCodeNewline* _tmp69_;
	ValaCCodeNewline* _tmp70_;
	gboolean _tmp71_ = FALSE;
	ValaCodeContext* _tmp72_;
	ValaProfile _tmp73_;
	ValaProfile _tmp74_;
	ValaCCodeNewline* _tmp75_;
	ValaCCodeNewline* _tmp76_;
	gchar* fun_name = NULL;
	gchar* _tmp77_;
	gchar* macro = NULL;
	const gchar* _tmp78_;
	gchar* _tmp79_;
	gchar* _tmp80_;
	gchar* _tmp81_;
	const gchar* _tmp82_;
	ValaCCodeMacroReplacement* _tmp83_;
	ValaCCodeMacroReplacement* _tmp84_;
	ValaCCodeFunction* regfun = NULL;
	const gchar* _tmp85_;
	ValaCCodeFunction* _tmp86_;
	ValaCCodeFunction* _tmp87_;
	ValaCCodeFunction* _tmp104_;
	gboolean result;
	g_return_val_if_fail (en != NULL, FALSE);
	g_return_val_if_fail (decl_space != NULL, FALSE);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) en, _tmp1_);
	_g_free0 (_tmp1_);
	if (_tmp2_) {
		result = FALSE;
		return result;
	}
	_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_enum_new (_tmp4_);
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	cenum = _tmp6_;
	_tmp7_ = vala_symbol_get_version ((ValaSymbol*) en);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_version_attribute_get_deprecated (_tmp8_);
	_tmp10_ = _tmp9_;
	if (_tmp10_) {
		ValaCodeContext* _tmp11_;
		ValaProfile _tmp12_;
		ValaProfile _tmp13_;
		ValaCCodeEnum* _tmp14_;
		ValaCCodeEnum* _tmp15_;
		ValaCCodeModifiers _tmp16_;
		ValaCCodeModifiers _tmp17_;
		_tmp11_ = self->priv->_context;
		_tmp12_ = vala_code_context_get_profile (_tmp11_);
		_tmp13_ = _tmp12_;
		if (_tmp13_ == VALA_PROFILE_GOBJECT) {
			vala_ccode_file_add_include (decl_space, "glib.h", FALSE);
		}
		_tmp14_ = cenum;
		_tmp15_ = cenum;
		_tmp16_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp15_);
		_tmp17_ = _tmp16_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp15_, _tmp17_ | VALA_CCODE_MODIFIERS_DEPRECATED);
	}
	_tmp18_ = self->cfile;
	_tmp19_ = _vala_ccode_file_ref0 (_tmp18_);
	current_cfile = _tmp19_;
	_tmp20_ = _vala_ccode_file_ref0 (decl_space);
	_vala_ccode_file_unref0 (self->cfile);
	self->cfile = _tmp20_;
	flag_shift = 0;
	{
		ValaList* _ev_list = NULL;
		ValaList* _tmp21_;
		gint _ev_size = 0;
		ValaList* _tmp22_;
		gint _tmp23_;
		gint _tmp24_;
		gint _ev_index = 0;
		_tmp21_ = vala_enum_get_values (en);
		_ev_list = _tmp21_;
		_tmp22_ = _ev_list;
		_tmp23_ = vala_collection_get_size ((ValaCollection*) _tmp22_);
		_tmp24_ = _tmp23_;
		_ev_size = _tmp24_;
		_ev_index = -1;
		while (TRUE) {
			gint _tmp25_;
			gint _tmp26_;
			ValaEnumValue* ev = NULL;
			ValaList* _tmp27_;
			gpointer _tmp28_;
			ValaCCodeEnumValue* c_ev = NULL;
			ValaEnumValue* _tmp29_;
			ValaExpression* _tmp30_;
			ValaExpression* _tmp31_;
			ValaCCodeModifiers _tmp54_ = 0U;
			ValaEnumValue* _tmp55_;
			ValaVersionAttribute* _tmp56_;
			ValaVersionAttribute* _tmp57_;
			gboolean _tmp58_;
			gboolean _tmp59_;
			ValaCCodeEnumValue* _tmp60_;
			ValaCCodeEnumValue* _tmp61_;
			ValaCCodeModifiers _tmp62_;
			ValaCCodeModifiers _tmp63_;
			ValaCCodeEnum* _tmp64_;
			ValaCCodeEnumValue* _tmp65_;
			_ev_index = _ev_index + 1;
			_tmp25_ = _ev_index;
			_tmp26_ = _ev_size;
			if (!(_tmp25_ < _tmp26_)) {
				break;
			}
			_tmp27_ = _ev_list;
			_tmp28_ = vala_list_get (_tmp27_, _ev_index);
			ev = (ValaEnumValue*) _tmp28_;
			_tmp29_ = ev;
			_tmp30_ = vala_constant_get_value ((ValaConstant*) _tmp29_);
			_tmp31_ = _tmp30_;
			if (_tmp31_ == NULL) {
				ValaEnumValue* _tmp32_;
				gchar* _tmp33_;
				gchar* _tmp34_;
				ValaCCodeEnumValue* _tmp35_;
				gboolean _tmp36_;
				gboolean _tmp37_;
				_tmp32_ = ev;
				_tmp33_ = vala_get_ccode_name ((ValaCodeNode*) _tmp32_);
				_tmp34_ = _tmp33_;
				_tmp35_ = vala_ccode_enum_value_new (_tmp34_, NULL);
				_vala_ccode_node_unref0 (c_ev);
				c_ev = _tmp35_;
				_g_free0 (_tmp34_);
				_tmp36_ = vala_enum_get_is_flags (en);
				_tmp37_ = _tmp36_;
				if (_tmp37_) {
					ValaCCodeEnumValue* _tmp38_;
					gchar* _tmp39_;
					gchar* _tmp40_;
					ValaCCodeConstant* _tmp41_;
					ValaCCodeConstant* _tmp42_;
					_tmp38_ = c_ev;
					_tmp39_ = g_strdup_printf ("1 << %d", flag_shift);
					_tmp40_ = _tmp39_;
					_tmp41_ = vala_ccode_constant_new (_tmp40_);
					_tmp42_ = _tmp41_;
					vala_ccode_enum_value_set_value (_tmp38_, (ValaCCodeExpression*) _tmp42_);
					_vala_ccode_node_unref0 (_tmp42_);
					_g_free0 (_tmp40_);
					flag_shift += 1;
				}
			} else {
				ValaEnumValue* _tmp43_;
				ValaExpression* _tmp44_;
				ValaExpression* _tmp45_;
				ValaEnumValue* _tmp46_;
				gchar* _tmp47_;
				gchar* _tmp48_;
				ValaEnumValue* _tmp49_;
				ValaExpression* _tmp50_;
				ValaExpression* _tmp51_;
				ValaCCodeExpression* _tmp52_;
				ValaCCodeEnumValue* _tmp53_;
				_tmp43_ = ev;
				_tmp44_ = vala_constant_get_value ((ValaConstant*) _tmp43_);
				_tmp45_ = _tmp44_;
				vala_code_node_emit ((ValaCodeNode*) _tmp45_, (ValaCodeGenerator*) self);
				_tmp46_ = ev;
				_tmp47_ = vala_get_ccode_name ((ValaCodeNode*) _tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = ev;
				_tmp50_ = vala_constant_get_value ((ValaConstant*) _tmp49_);
				_tmp51_ = _tmp50_;
				_tmp52_ = vala_get_cvalue (_tmp51_);
				_tmp53_ = vala_ccode_enum_value_new (_tmp48_, _tmp52_);
				_vala_ccode_node_unref0 (c_ev);
				c_ev = _tmp53_;
				_g_free0 (_tmp48_);
			}
			_tmp55_ = ev;
			_tmp56_ = vala_symbol_get_version ((ValaSymbol*) _tmp55_);
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_version_attribute_get_deprecated (_tmp57_);
			_tmp59_ = _tmp58_;
			if (_tmp59_) {
				_tmp54_ = VALA_CCODE_MODIFIERS_DEPRECATED;
			} else {
				_tmp54_ = 0;
			}
			_tmp60_ = c_ev;
			_tmp61_ = c_ev;
			_tmp62_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp61_);
			_tmp63_ = _tmp62_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp61_, _tmp63_ | _tmp54_);
			_tmp64_ = cenum;
			_tmp65_ = c_ev;
			vala_ccode_enum_add_value (_tmp64_, _tmp65_);
			_vala_ccode_node_unref0 (c_ev);
			_vala_code_node_unref0 (ev);
		}
	}
	_tmp66_ = current_cfile;
	_tmp67_ = _vala_ccode_file_ref0 (_tmp66_);
	_vala_ccode_file_unref0 (self->cfile);
	self->cfile = _tmp67_;
	_tmp68_ = cenum;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp68_);
	_tmp69_ = vala_ccode_newline_new ();
	_tmp70_ = _tmp69_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp70_);
	_vala_ccode_node_unref0 (_tmp70_);
	_tmp72_ = self->priv->_context;
	_tmp73_ = vala_code_context_get_profile (_tmp72_);
	_tmp74_ = _tmp73_;
	if (_tmp74_ != VALA_PROFILE_GOBJECT) {
		_tmp71_ = TRUE;
	} else {
		_tmp71_ = !vala_get_ccode_has_type_id ((ValaTypeSymbol*) en);
	}
	if (_tmp71_) {
		result = TRUE;
		_vala_ccode_file_unref0 (current_cfile);
		_vala_ccode_node_unref0 (cenum);
		return result;
	}
	vala_ccode_file_add_include (decl_space, "glib-object.h", FALSE);
	_tmp75_ = vala_ccode_newline_new ();
	_tmp76_ = _tmp75_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp76_);
	_vala_ccode_node_unref0 (_tmp76_);
	_tmp77_ = vala_get_ccode_type_function ((ValaTypeSymbol*) en);
	fun_name = _tmp77_;
	_tmp78_ = fun_name;
	_tmp79_ = g_strdup_printf ("(%s ())", _tmp78_);
	macro = _tmp79_;
	_tmp80_ = vala_get_ccode_type_id ((ValaCodeNode*) en);
	_tmp81_ = _tmp80_;
	_tmp82_ = macro;
	_tmp83_ = vala_ccode_macro_replacement_new (_tmp81_, _tmp82_);
	_tmp84_ = _tmp83_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp84_);
	_vala_ccode_node_unref0 (_tmp84_);
	_g_free0 (_tmp81_);
	_tmp85_ = fun_name;
	_tmp86_ = vala_ccode_function_new (_tmp85_, "GType");
	regfun = _tmp86_;
	_tmp87_ = regfun;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp87_, VALA_CCODE_MODIFIERS_CONST);
	if (vala_symbol_is_private_symbol ((ValaSymbol*) en)) {
		ValaCCodeFunction* _tmp88_;
		ValaCCodeFunction* _tmp89_;
		ValaCCodeModifiers _tmp90_;
		ValaCCodeModifiers _tmp91_;
		_tmp88_ = regfun;
		_tmp89_ = regfun;
		_tmp90_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp89_);
		_tmp91_ = _tmp90_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp89_, _tmp91_ | (VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_UNUSED));
	} else {
		gboolean _tmp92_ = FALSE;
		ValaCodeContext* _tmp93_;
		gboolean _tmp94_;
		gboolean _tmp95_;
		_tmp93_ = self->priv->_context;
		_tmp94_ = vala_code_context_get_hide_internal (_tmp93_);
		_tmp95_ = _tmp94_;
		if (_tmp95_) {
			_tmp92_ = vala_symbol_is_internal_symbol ((ValaSymbol*) en);
		} else {
			_tmp92_ = FALSE;
		}
		if (_tmp92_) {
			ValaCCodeFunction* _tmp96_;
			ValaCCodeFunction* _tmp97_;
			ValaCCodeModifiers _tmp98_;
			ValaCCodeModifiers _tmp99_;
			_tmp96_ = regfun;
			_tmp97_ = regfun;
			_tmp98_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp97_);
			_tmp99_ = _tmp98_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp97_, _tmp99_ | VALA_CCODE_MODIFIERS_INTERNAL);
		} else {
			ValaCCodeFunction* _tmp100_;
			ValaCCodeFunction* _tmp101_;
			ValaCCodeModifiers _tmp102_;
			ValaCCodeModifiers _tmp103_;
			_tmp100_ = regfun;
			_tmp101_ = regfun;
			_tmp102_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp101_);
			_tmp103_ = _tmp102_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp101_, _tmp103_ | VALA_CCODE_MODIFIERS_EXTERN);
			self->requires_vala_extern = TRUE;
		}
	}
	_tmp104_ = regfun;
	vala_ccode_file_add_function_declaration (decl_space, _tmp104_);
	result = TRUE;
	_vala_ccode_node_unref0 (regfun);
	_g_free0 (macro);
	_g_free0 (fun_name);
	_vala_ccode_file_unref0 (current_cfile);
	_vala_ccode_node_unref0 (cenum);
	return result;
}

gboolean
vala_ccode_base_module_generate_enum_declaration (ValaCCodeBaseModule* self,
                                                  ValaEnum* en,
                                                  ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, FALSE);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_enum_declaration) {
		return _klass_->generate_enum_declaration (self, en, decl_space);
	}
	return FALSE;
}

static void
vala_ccode_base_module_real_visit_enum (ValaCodeVisitor* base,
                                        ValaEnum* en)
{
	ValaCCodeBaseModule * self;
	ValaSourceReference* _tmp0_;
	ValaSourceReference* _tmp1_;
	ValaComment* _tmp2_;
	ValaComment* _tmp3_;
	ValaCCodeFile* _tmp11_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (en != NULL);
	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) en);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_line (self, _tmp1_);
	_tmp2_ = vala_symbol_get_comment ((ValaSymbol*) en);
	_tmp3_ = _tmp2_;
	if (_tmp3_ != NULL) {
		ValaCCodeFile* _tmp4_;
		ValaComment* _tmp5_;
		ValaComment* _tmp6_;
		const gchar* _tmp7_;
		const gchar* _tmp8_;
		ValaCCodeComment* _tmp9_;
		ValaCCodeComment* _tmp10_;
		_tmp4_ = self->cfile;
		_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) en);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_comment_get_content (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_ccode_comment_new (_tmp8_);
		_tmp10_ = _tmp9_;
		vala_ccode_file_add_type_member_definition (_tmp4_, (ValaCCodeNode*) _tmp10_);
		_vala_ccode_node_unref0 (_tmp10_);
	}
	_tmp11_ = self->cfile;
	vala_ccode_base_module_generate_enum_declaration (self, en, _tmp11_);
	if (!vala_symbol_is_internal_symbol ((ValaSymbol*) en)) {
		ValaCCodeFile* _tmp12_;
		_tmp12_ = self->header_file;
		vala_ccode_base_module_generate_enum_declaration (self, en, _tmp12_);
	}
	if (!vala_symbol_is_private_symbol ((ValaSymbol*) en)) {
		ValaCCodeFile* _tmp13_;
		_tmp13_ = self->internal_header_file;
		vala_ccode_base_module_generate_enum_declaration (self, en, _tmp13_);
	}
	vala_code_node_accept_children ((ValaCodeNode*) en, (ValaCodeVisitor*) self);
	vala_ccode_base_module_pop_line (self);
}

void
vala_ccode_base_module_visit_member (ValaCCodeBaseModule* self,
                                     ValaSymbol* m)
{
	gboolean _tmp0_ = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	if (G_TYPE_CHECK_INSTANCE_TYPE (m, VALA_TYPE_LOCKABLE)) {
		gboolean _tmp1_;
		gboolean _tmp2_;
		_tmp1_ = vala_lockable_get_lock_used (G_TYPE_CHECK_INSTANCE_CAST (m, VALA_TYPE_LOCKABLE, ValaLockable));
		_tmp2_ = _tmp1_;
		_tmp0_ = _tmp2_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaCCodeExpression* l = NULL;
		ValaCCodeIdentifier* _tmp3_;
		ValaCCodeBaseModuleEmitContext* init_context = NULL;
		ValaCCodeBaseModuleEmitContext* _tmp4_;
		ValaCCodeBaseModuleEmitContext* _tmp5_;
		ValaCCodeBaseModuleEmitContext* finalize_context = NULL;
		ValaCCodeBaseModuleEmitContext* _tmp6_;
		ValaCCodeBaseModuleEmitContext* _tmp7_;
		ValaCCodeBaseModuleEmitContext* _tmp48_;
		ValaCCodeFunctionCall* initf = NULL;
		ValaStruct* _tmp49_;
		ValaCreationMethod* _tmp50_;
		ValaCreationMethod* _tmp51_;
		gchar* _tmp52_;
		gchar* _tmp53_;
		ValaCCodeIdentifier* _tmp54_;
		ValaCCodeIdentifier* _tmp55_;
		ValaCCodeFunctionCall* _tmp56_;
		ValaCCodeFunctionCall* _tmp57_;
		ValaCCodeFunctionCall* _tmp58_;
		ValaCCodeExpression* _tmp59_;
		ValaCCodeUnaryExpression* _tmp60_;
		ValaCCodeUnaryExpression* _tmp61_;
		ValaCCodeFunction* _tmp62_;
		ValaCCodeFunction* _tmp63_;
		ValaCCodeFunctionCall* _tmp64_;
		ValaCCodeBaseModuleEmitContext* _tmp65_;
		_tmp3_ = vala_ccode_identifier_new ("self");
		l = (ValaCCodeExpression*) _tmp3_;
		_tmp4_ = self->class_init_context;
		_tmp5_ = _vala_ccode_base_module_emit_context_ref0 (_tmp4_);
		init_context = _tmp5_;
		_tmp6_ = self->class_finalize_context;
		_tmp7_ = _vala_ccode_base_module_emit_context_ref0 (_tmp6_);
		finalize_context = _tmp7_;
		if (vala_symbol_is_instance_member (m)) {
			ValaCCodeExpression* _tmp8_;
			ValaCCodeMemberAccess* _tmp9_;
			ValaCCodeMemberAccess* _tmp10_;
			gchar* _tmp11_;
			gchar* _tmp12_;
			gchar* _tmp13_;
			gchar* _tmp14_;
			ValaCCodeMemberAccess* _tmp15_;
			ValaCCodeBaseModuleEmitContext* _tmp16_;
			ValaCCodeBaseModuleEmitContext* _tmp17_;
			ValaCCodeBaseModuleEmitContext* _tmp18_;
			ValaCCodeBaseModuleEmitContext* _tmp19_;
			_tmp8_ = l;
			_tmp9_ = vala_ccode_member_access_new_pointer (_tmp8_, "priv");
			_tmp10_ = _tmp9_;
			_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) m);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp12_);
			_tmp14_ = _tmp13_;
			_tmp15_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp10_, _tmp14_);
			_vala_ccode_node_unref0 (l);
			l = (ValaCCodeExpression*) _tmp15_;
			_g_free0 (_tmp14_);
			_g_free0 (_tmp12_);
			_vala_ccode_node_unref0 (_tmp10_);
			_tmp16_ = self->instance_init_context;
			_tmp17_ = _vala_ccode_base_module_emit_context_ref0 (_tmp16_);
			_vala_ccode_base_module_emit_context_unref0 (init_context);
			init_context = _tmp17_;
			_tmp18_ = self->instance_finalize_context;
			_tmp19_ = _vala_ccode_base_module_emit_context_ref0 (_tmp18_);
			_vala_ccode_base_module_emit_context_unref0 (finalize_context);
			finalize_context = _tmp19_;
		} else {
			if (vala_symbol_is_class_member (m)) {
				ValaCCodeFunctionCall* get_class_private_call = NULL;
				ValaSymbol* _tmp20_;
				ValaSymbol* _tmp21_;
				gchar* _tmp22_;
				gchar* _tmp23_;
				ValaCCodeIdentifier* _tmp24_;
				ValaCCodeIdentifier* _tmp25_;
				ValaCCodeFunctionCall* _tmp26_;
				ValaCCodeFunctionCall* _tmp27_;
				ValaCCodeFunctionCall* _tmp28_;
				ValaCCodeIdentifier* _tmp29_;
				ValaCCodeIdentifier* _tmp30_;
				ValaCCodeFunctionCall* _tmp31_;
				gchar* _tmp32_;
				gchar* _tmp33_;
				gchar* _tmp34_;
				gchar* _tmp35_;
				ValaCCodeMemberAccess* _tmp36_;
				_tmp20_ = vala_symbol_get_parent_symbol (m);
				_tmp21_ = _tmp20_;
				_tmp22_ = vala_get_ccode_class_get_private_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_CLASS, ValaClass));
				_tmp23_ = _tmp22_;
				_tmp24_ = vala_ccode_identifier_new (_tmp23_);
				_tmp25_ = _tmp24_;
				_tmp26_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp25_);
				_tmp27_ = _tmp26_;
				_vala_ccode_node_unref0 (_tmp25_);
				_g_free0 (_tmp23_);
				get_class_private_call = _tmp27_;
				_tmp28_ = get_class_private_call;
				_tmp29_ = vala_ccode_identifier_new ("klass");
				_tmp30_ = _tmp29_;
				vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp30_);
				_vala_ccode_node_unref0 (_tmp30_);
				_tmp31_ = get_class_private_call;
				_tmp32_ = vala_get_ccode_name ((ValaCodeNode*) m);
				_tmp33_ = _tmp32_;
				_tmp34_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp33_);
				_tmp35_ = _tmp34_;
				_tmp36_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp31_, _tmp35_);
				_vala_ccode_node_unref0 (l);
				l = (ValaCCodeExpression*) _tmp36_;
				_g_free0 (_tmp35_);
				_g_free0 (_tmp33_);
				_vala_ccode_node_unref0 (get_class_private_call);
			} else {
				ValaSymbol* _tmp37_;
				ValaSymbol* _tmp38_;
				gchar* _tmp39_;
				gchar* _tmp40_;
				gchar* _tmp41_;
				gchar* _tmp42_;
				gchar* _tmp43_;
				gchar* _tmp44_;
				gchar* _tmp45_;
				gchar* _tmp46_;
				ValaCCodeIdentifier* _tmp47_;
				_tmp37_ = vala_symbol_get_parent_symbol (m);
				_tmp38_ = _tmp37_;
				_tmp39_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp38_, NULL);
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_get_ccode_name ((ValaCodeNode*) m);
				_tmp42_ = _tmp41_;
				_tmp43_ = g_strdup_printf ("%s_%s", _tmp40_, _tmp42_);
				_tmp44_ = _tmp43_;
				_tmp45_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp44_);
				_tmp46_ = _tmp45_;
				_tmp47_ = vala_ccode_identifier_new (_tmp46_);
				_vala_ccode_node_unref0 (l);
				l = (ValaCCodeExpression*) _tmp47_;
				_g_free0 (_tmp46_);
				_g_free0 (_tmp44_);
				_g_free0 (_tmp42_);
				_g_free0 (_tmp40_);
			}
		}
		_tmp48_ = init_context;
		vala_ccode_base_module_push_context (self, _tmp48_);
		_tmp49_ = self->mutex_type;
		_tmp50_ = vala_struct_get_default_construction_method (_tmp49_);
		_tmp51_ = _tmp50_;
		_tmp52_ = vala_get_ccode_name ((ValaCodeNode*) _tmp51_);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_identifier_new (_tmp53_);
		_tmp55_ = _tmp54_;
		_tmp56_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp55_);
		_tmp57_ = _tmp56_;
		_vala_ccode_node_unref0 (_tmp55_);
		_g_free0 (_tmp53_);
		initf = _tmp57_;
		_tmp58_ = initf;
		_tmp59_ = l;
		_tmp60_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp59_);
		_tmp61_ = _tmp60_;
		vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp61_);
		_vala_ccode_node_unref0 (_tmp61_);
		_tmp62_ = vala_ccode_base_module_get_ccode (self);
		_tmp63_ = _tmp62_;
		_tmp64_ = initf;
		vala_ccode_function_add_expression (_tmp63_, (ValaCCodeExpression*) _tmp64_);
		vala_ccode_base_module_pop_context (self);
		_tmp65_ = finalize_context;
		if (_tmp65_ != NULL) {
			ValaCCodeBaseModuleEmitContext* _tmp66_;
			ValaCCodeFunctionCall* fc = NULL;
			ValaCCodeIdentifier* _tmp67_;
			ValaCCodeIdentifier* _tmp68_;
			ValaCCodeFunctionCall* _tmp69_;
			ValaCCodeFunctionCall* _tmp70_;
			ValaCCodeFunctionCall* _tmp71_;
			ValaCCodeExpression* _tmp72_;
			ValaCCodeUnaryExpression* _tmp73_;
			ValaCCodeUnaryExpression* _tmp74_;
			ValaCCodeFunction* _tmp75_;
			ValaCCodeFunction* _tmp76_;
			ValaCCodeFunctionCall* _tmp77_;
			_tmp66_ = finalize_context;
			vala_ccode_base_module_push_context (self, _tmp66_);
			_tmp67_ = vala_ccode_identifier_new ("g_rec_mutex_clear");
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp68_);
			_tmp70_ = _tmp69_;
			_vala_ccode_node_unref0 (_tmp68_);
			fc = _tmp70_;
			_tmp71_ = fc;
			_tmp72_ = l;
			_tmp73_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp72_);
			_tmp74_ = _tmp73_;
			vala_ccode_function_call_add_argument (_tmp71_, (ValaCCodeExpression*) _tmp74_);
			_vala_ccode_node_unref0 (_tmp74_);
			_tmp75_ = vala_ccode_base_module_get_ccode (self);
			_tmp76_ = _tmp75_;
			_tmp77_ = fc;
			vala_ccode_function_add_expression (_tmp76_, (ValaCCodeExpression*) _tmp77_);
			vala_ccode_base_module_pop_context (self);
			_vala_ccode_node_unref0 (fc);
		}
		_vala_ccode_node_unref0 (initf);
		_vala_ccode_base_module_emit_context_unref0 (finalize_context);
		_vala_ccode_base_module_emit_context_unref0 (init_context);
		_vala_ccode_node_unref0 (l);
	}
}

static void
vala_ccode_base_module_constant_array_ranks_sizes (ValaInitializerList* initializer_list,
                                                   gint* sizes,
                                                   gint sizes_length1,
                                                   gint rank)
{
	gint _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	g_return_if_fail (initializer_list != NULL);
	_tmp0_ = sizes[rank];
	_tmp1_ = vala_initializer_list_get_size (initializer_list);
	_tmp2_ = _tmp1_;
	sizes[rank] = MAX (_tmp0_, _tmp2_);
	_tmp3_ = rank;
	rank = _tmp3_ + 1;
	{
		ValaList* _expr_list = NULL;
		ValaList* _tmp4_;
		gint _expr_size = 0;
		ValaList* _tmp5_;
		gint _tmp6_;
		gint _tmp7_;
		gint _expr_index = 0;
		_tmp4_ = vala_initializer_list_get_initializers (initializer_list);
		_expr_list = _tmp4_;
		_tmp5_ = _expr_list;
		_tmp6_ = vala_collection_get_size ((ValaCollection*) _tmp5_);
		_tmp7_ = _tmp6_;
		_expr_size = _tmp7_;
		_expr_index = -1;
		while (TRUE) {
			gint _tmp8_;
			gint _tmp9_;
			ValaExpression* expr = NULL;
			ValaList* _tmp10_;
			gpointer _tmp11_;
			gboolean _tmp12_ = FALSE;
			ValaExpression* _tmp13_;
			_expr_index = _expr_index + 1;
			_tmp8_ = _expr_index;
			_tmp9_ = _expr_size;
			if (!(_tmp8_ < _tmp9_)) {
				break;
			}
			_tmp10_ = _expr_list;
			_tmp11_ = vala_list_get (_tmp10_, _expr_index);
			expr = (ValaExpression*) _tmp11_;
			_tmp13_ = expr;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_INITIALIZER_LIST)) {
				ValaExpression* _tmp14_;
				ValaDataType* _tmp15_;
				ValaDataType* _tmp16_;
				_tmp14_ = expr;
				_tmp15_ = vala_expression_get_target_type ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_INITIALIZER_LIST, ValaInitializerList));
				_tmp16_ = _tmp15_;
				_tmp12_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_ARRAY_TYPE);
			} else {
				_tmp12_ = FALSE;
			}
			if (_tmp12_) {
				ValaExpression* _tmp17_;
				_tmp17_ = expr;
				vala_ccode_base_module_constant_array_ranks_sizes (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_INITIALIZER_LIST, ValaInitializerList), sizes, (gint) sizes_length1, rank);
			}
			_vala_code_node_unref0 (expr);
		}
	}
}

static ValaCCodeDeclaratorSuffix*
vala_ccode_base_module_get_constant_declarator_suffix (ValaCCodeBaseModule* self,
                                                       ValaConstant* c)
{
	ValaArrayType* array = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaInitializerList* initializer_list = NULL;
	ValaExpression* _tmp2_;
	ValaExpression* _tmp3_;
	gboolean _tmp4_ = FALSE;
	ValaArrayType* _tmp5_;
	ValaArrayList* lengths = NULL;
	GEqualFunc _tmp11_;
	ValaArrayList* _tmp12_;
	gint* sizes = NULL;
	ValaArrayType* _tmp13_;
	gint _tmp14_;
	gint _tmp15_;
	gint* _tmp16_;
	gint sizes_length1;
	gint _sizes_size_;
	ValaInitializerList* _tmp17_;
	gint* _tmp18_;
	gint _tmp18__length1;
	ValaArrayList* _tmp31_;
	ValaCCodeDeclaratorSuffix* _tmp32_;
	ValaCCodeDeclaratorSuffix* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (c != NULL, NULL);
	_tmp0_ = vala_constant_get_type_reference (c);
	_tmp1_ = _tmp0_;
	array = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp1_) : NULL;
	_tmp2_ = vala_constant_get_value (c);
	_tmp3_ = _tmp2_;
	initializer_list = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_INITIALIZER_LIST) ? ((ValaInitializerList*) _tmp3_) : NULL;
	_tmp5_ = array;
	if (_tmp5_ == NULL) {
		_tmp4_ = TRUE;
	} else {
		ValaInitializerList* _tmp6_;
		_tmp6_ = initializer_list;
		_tmp4_ = _tmp6_ == NULL;
	}
	if (_tmp4_) {
		ValaDataType* _tmp7_;
		ValaDataType* _tmp8_;
		ValaDataType* _tmp9_;
		_tmp7_ = vala_constant_get_type_reference (c);
		_tmp8_ = _tmp7_;
		_tmp9_ = self->string_type;
		if (vala_data_type_compatible (_tmp8_, _tmp9_)) {
			ValaCCodeDeclaratorSuffix* _tmp10_;
			_tmp10_ = vala_ccode_declarator_suffix_new_with_array (NULL);
			result = _tmp10_;
			return result;
		}
		result = NULL;
		return result;
	}
	_tmp11_ = g_direct_equal;
	_tmp12_ = vala_array_list_new (VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp11_);
	lengths = _tmp12_;
	_tmp13_ = array;
	_tmp14_ = vala_array_type_get_rank (_tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = g_new0 (gint, _tmp15_);
	sizes = _tmp16_;
	sizes_length1 = _tmp15_;
	_sizes_size_ = sizes_length1;
	_tmp17_ = initializer_list;
	_tmp18_ = sizes;
	_tmp18__length1 = sizes_length1;
	vala_ccode_base_module_constant_array_ranks_sizes (_tmp17_, _tmp18_, (gint) _tmp18__length1, 0);
	{
		gint i = 0;
		i = 0;
		{
			gboolean _tmp19_ = FALSE;
			_tmp19_ = TRUE;
			while (TRUE) {
				ValaArrayType* _tmp21_;
				gint _tmp22_;
				gint _tmp23_;
				ValaArrayList* _tmp24_;
				gint* _tmp25_;
				gint _tmp25__length1;
				gint _tmp26_;
				gchar* _tmp27_;
				gchar* _tmp28_;
				ValaCCodeConstant* _tmp29_;
				ValaCCodeConstant* _tmp30_;
				if (!_tmp19_) {
					gint _tmp20_;
					_tmp20_ = i;
					i = _tmp20_ + 1;
				}
				_tmp19_ = FALSE;
				_tmp21_ = array;
				_tmp22_ = vala_array_type_get_rank (_tmp21_);
				_tmp23_ = _tmp22_;
				if (!(i < _tmp23_)) {
					break;
				}
				_tmp24_ = lengths;
				_tmp25_ = sizes;
				_tmp25__length1 = sizes_length1;
				_tmp26_ = _tmp25_[i];
				_tmp27_ = g_strdup_printf ("%d", _tmp26_);
				_tmp28_ = _tmp27_;
				_tmp29_ = vala_ccode_constant_new (_tmp28_);
				_tmp30_ = _tmp29_;
				vala_collection_add ((ValaCollection*) _tmp24_, (ValaCCodeExpression*) _tmp30_);
				_vala_ccode_node_unref0 (_tmp30_);
				_g_free0 (_tmp28_);
			}
		}
	}
	_tmp31_ = lengths;
	_tmp32_ = vala_ccode_declarator_suffix_new_with_multi_array ((ValaList*) _tmp31_);
	result = _tmp32_;
	sizes = (g_free (sizes), NULL);
	_vala_iterable_unref0 (lengths);
	return result;
}

void
vala_ccode_base_module_generate_constant_declaration (ValaCCodeBaseModule* self,
                                                      ValaConstant* c,
                                                      ValaCCodeFile* decl_space,
                                                      gboolean definition)
{
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gboolean _tmp4_;
	gboolean _tmp5_ = FALSE;
	gboolean _tmp6_;
	gboolean _tmp7_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (c != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
	_tmp1_ = _tmp0_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_BLOCK)) {
		return;
	}
	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) c);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) c, _tmp3_);
	_g_free0 (_tmp3_);
	if (_tmp4_) {
		return;
	}
	_tmp6_ = vala_symbol_get_external ((ValaSymbol*) c);
	_tmp7_ = _tmp6_;
	if (!_tmp7_) {
		ValaExpression* _tmp8_;
		ValaExpression* _tmp9_;
		_tmp8_ = vala_constant_get_value (c);
		_tmp9_ = _tmp8_;
		_tmp5_ = _tmp9_ != NULL;
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		ValaDataType* _tmp10_;
		ValaDataType* _tmp11_;
		ValaExpression* _tmp12_;
		ValaExpression* _tmp13_;
		ValaInitializerList* initializer_list = NULL;
		ValaExpression* _tmp14_;
		ValaExpression* _tmp15_;
		ValaInitializerList* _tmp16_;
		ValaInitializerList* _tmp17_;
		_tmp10_ = vala_constant_get_type_reference (c);
		_tmp11_ = _tmp10_;
		vala_ccode_base_module_generate_type_declaration (self, _tmp11_, decl_space);
		_tmp12_ = vala_constant_get_value (c);
		_tmp13_ = _tmp12_;
		vala_code_node_emit ((ValaCodeNode*) _tmp13_, (ValaCodeGenerator*) self);
		_tmp14_ = vala_constant_get_value (c);
		_tmp15_ = _tmp14_;
		_tmp16_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_INITIALIZER_LIST) ? ((ValaInitializerList*) _tmp15_) : NULL);
		initializer_list = _tmp16_;
		_tmp17_ = initializer_list;
		if (_tmp17_ != NULL) {
			ValaCCodeDeclaration* _cdecl_ = NULL;
			ValaDataType* _tmp18_;
			ValaDataType* _tmp19_;
			gchar* _tmp20_;
			gchar* _tmp21_;
			ValaCCodeDeclaration* _tmp22_;
			ValaCCodeDeclaration* _tmp23_;
			ValaCCodeExpression* cinitializer = NULL;
			ValaExpression* _tmp24_;
			ValaExpression* _tmp25_;
			ValaCCodeExpression* _tmp26_;
			ValaCCodeExpression* _tmp27_;
			ValaCCodeDeclaration* _tmp28_;
			gchar* _tmp29_;
			gchar* _tmp30_;
			ValaCCodeExpression* _tmp31_;
			ValaCCodeDeclaratorSuffix* _tmp32_;
			ValaCCodeDeclaratorSuffix* _tmp33_;
			ValaCCodeVariableDeclarator* _tmp34_;
			ValaCCodeVariableDeclarator* _tmp35_;
			ValaCCodeDeclaration* _tmp38_;
			_tmp18_ = vala_constant_get_type_reference (c);
			_tmp19_ = _tmp18_;
			_tmp20_ = vala_get_ccode_const_name ((ValaCodeNode*) _tmp19_);
			_tmp21_ = _tmp20_;
			_tmp22_ = vala_ccode_declaration_new (_tmp21_);
			_tmp23_ = _tmp22_;
			_g_free0 (_tmp21_);
			_cdecl_ = _tmp23_;
			_tmp24_ = vala_constant_get_value (c);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_get_cvalue (_tmp25_);
			_tmp27_ = _vala_ccode_node_ref0 (_tmp26_);
			cinitializer = _tmp27_;
			if (!definition) {
				_vala_ccode_node_unref0 (cinitializer);
				cinitializer = NULL;
			}
			_tmp28_ = _cdecl_;
			_tmp29_ = vala_get_ccode_name ((ValaCodeNode*) c);
			_tmp30_ = _tmp29_;
			_tmp31_ = cinitializer;
			_tmp32_ = vala_ccode_base_module_get_constant_declarator_suffix (self, c);
			_tmp33_ = _tmp32_;
			_tmp34_ = vala_ccode_variable_declarator_new (_tmp30_, _tmp31_, _tmp33_);
			_tmp35_ = _tmp34_;
			vala_ccode_declaration_add_declarator (_tmp28_, (ValaCCodeDeclarator*) _tmp35_);
			_vala_ccode_node_unref0 (_tmp35_);
			_vala_ccode_declarator_suffix_unref0 (_tmp33_);
			_g_free0 (_tmp30_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) c)) {
				ValaCCodeDeclaration* _tmp36_;
				_tmp36_ = _cdecl_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp36_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				ValaCCodeDeclaration* _tmp37_;
				_tmp37_ = _cdecl_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp37_, VALA_CCODE_MODIFIERS_EXTERN);
				self->requires_vala_extern = TRUE;
			}
			_tmp38_ = _cdecl_;
			vala_ccode_file_add_constant_declaration (decl_space, (ValaCCodeNode*) _tmp38_);
			_vala_ccode_node_unref0 (cinitializer);
			_vala_ccode_node_unref0 (_cdecl_);
		} else {
			gboolean _tmp39_ = FALSE;
			ValaExpression* _tmp40_;
			ValaExpression* _tmp41_;
			ValaCCodeDefine* cdefine = NULL;
			gchar* _tmp59_;
			gchar* _tmp60_;
			ValaExpression* _tmp61_;
			ValaExpression* _tmp62_;
			ValaCCodeExpression* _tmp63_;
			ValaCCodeDefine* _tmp64_;
			ValaCCodeDefine* _tmp65_;
			ValaCCodeDefine* _tmp66_;
			_tmp40_ = vala_constant_get_value (c);
			_tmp41_ = _tmp40_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, VALA_TYPE_STRING_LITERAL)) {
				ValaExpression* _tmp42_;
				ValaExpression* _tmp43_;
				gboolean _tmp44_;
				gboolean _tmp45_;
				_tmp42_ = vala_constant_get_value (c);
				_tmp43_ = _tmp42_;
				_tmp44_ = vala_string_literal_get_translate (G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, VALA_TYPE_STRING_LITERAL, ValaStringLiteral));
				_tmp45_ = _tmp44_;
				_tmp39_ = _tmp45_;
			} else {
				_tmp39_ = FALSE;
			}
			if (_tmp39_) {
				ValaMethod* m = NULL;
				ValaSymbol* _tmp46_;
				ValaScope* _tmp47_;
				ValaScope* _tmp48_;
				ValaSymbol* _tmp49_;
				ValaSymbol* _tmp50_;
				ValaScope* _tmp51_;
				ValaScope* _tmp52_;
				ValaSymbol* _tmp53_;
				ValaMethod* _tmp54_;
				ValaMethod* _tmp55_;
				ValaMethod* _tmp56_;
				gchar* _tmp57_;
				gchar* _tmp58_;
				_tmp46_ = self->root_symbol;
				_tmp47_ = vala_symbol_get_scope (_tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = vala_scope_lookup (_tmp48_, "GLib");
				_tmp50_ = _tmp49_;
				_tmp51_ = vala_symbol_get_scope (_tmp50_);
				_tmp52_ = _tmp51_;
				_tmp53_ = vala_scope_lookup (_tmp52_, "_");
				_tmp54_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp53_, VALA_TYPE_METHOD, ValaMethod);
				_vala_code_node_unref0 (_tmp50_);
				m = _tmp54_;
				_tmp55_ = m;
				_tmp56_ = m;
				_tmp57_ = vala_get_ccode_name ((ValaCodeNode*) _tmp56_);
				_tmp58_ = _tmp57_;
				vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) _tmp55_, _tmp58_);
				_g_free0 (_tmp58_);
				_vala_code_node_unref0 (m);
			}
			_tmp59_ = vala_get_ccode_name ((ValaCodeNode*) c);
			_tmp60_ = _tmp59_;
			_tmp61_ = vala_constant_get_value (c);
			_tmp62_ = _tmp61_;
			_tmp63_ = vala_get_cvalue (_tmp62_);
			_tmp64_ = vala_ccode_define_new_with_expression (_tmp60_, _tmp63_);
			_tmp65_ = _tmp64_;
			_g_free0 (_tmp60_);
			cdefine = _tmp65_;
			_tmp66_ = cdefine;
			vala_ccode_file_add_define (decl_space, (ValaCCodeNode*) _tmp66_);
			_vala_ccode_node_unref0 (cdefine);
		}
		_vala_code_node_unref0 (initializer_list);
	}
}

static void
vala_ccode_base_module_real_visit_constant (ValaCodeVisitor* base,
                                            ValaConstant* c)
{
	ValaCCodeBaseModule * self;
	ValaSourceReference* _tmp0_;
	ValaSourceReference* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (c != NULL);
	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) c);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_line (self, _tmp1_);
	_tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
	_tmp3_ = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaCCodeFile* _tmp6_;
		ValaExpression* _tmp7_;
		ValaExpression* _tmp8_;
		gchar* type_name = NULL;
		ValaDataType* _tmp9_;
		ValaDataType* _tmp10_;
		ValaDataType* _tmp11_;
		ValaCCodeExpression* cinitializer = NULL;
		ValaExpression* _tmp16_;
		ValaExpression* _tmp17_;
		ValaCCodeExpression* _tmp18_;
		ValaCCodeExpression* _tmp19_;
		ValaCCodeFunction* _tmp20_;
		ValaCCodeFunction* _tmp21_;
		const gchar* _tmp22_;
		gchar* _tmp23_;
		gchar* _tmp24_;
		ValaCCodeExpression* _tmp25_;
		ValaCCodeDeclaratorSuffix* _tmp26_;
		ValaCCodeDeclaratorSuffix* _tmp27_;
		ValaCCodeVariableDeclarator* _tmp28_;
		ValaCCodeVariableDeclarator* _tmp29_;
		_tmp4_ = vala_constant_get_type_reference (c);
		_tmp5_ = _tmp4_;
		_tmp6_ = self->cfile;
		vala_ccode_base_module_generate_type_declaration (self, _tmp5_, _tmp6_);
		_tmp7_ = vala_constant_get_value (c);
		_tmp8_ = _tmp7_;
		vala_code_node_emit ((ValaCodeNode*) _tmp8_, (ValaCodeGenerator*) self);
		_tmp9_ = vala_constant_get_type_reference (c);
		_tmp10_ = _tmp9_;
		_tmp11_ = self->string_type;
		if (vala_data_type_compatible (_tmp10_, _tmp11_)) {
			gchar* _tmp12_;
			_tmp12_ = g_strdup ("const char");
			_g_free0 (type_name);
			type_name = _tmp12_;
		} else {
			ValaDataType* _tmp13_;
			ValaDataType* _tmp14_;
			gchar* _tmp15_;
			_tmp13_ = vala_constant_get_type_reference (c);
			_tmp14_ = _tmp13_;
			_tmp15_ = vala_get_ccode_const_name ((ValaCodeNode*) _tmp14_);
			_g_free0 (type_name);
			type_name = _tmp15_;
		}
		_tmp16_ = vala_constant_get_value (c);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_get_cvalue (_tmp17_);
		_tmp19_ = _vala_ccode_node_ref0 (_tmp18_);
		cinitializer = _tmp19_;
		_tmp20_ = vala_ccode_base_module_get_ccode (self);
		_tmp21_ = _tmp20_;
		_tmp22_ = type_name;
		_tmp23_ = vala_get_ccode_name ((ValaCodeNode*) c);
		_tmp24_ = _tmp23_;
		_tmp25_ = cinitializer;
		_tmp26_ = vala_ccode_base_module_get_constant_declarator_suffix (self, c);
		_tmp27_ = _tmp26_;
		_tmp28_ = vala_ccode_variable_declarator_new (_tmp24_, _tmp25_, _tmp27_);
		_tmp29_ = _tmp28_;
		vala_ccode_function_add_declaration (_tmp21_, _tmp22_, (ValaCCodeDeclarator*) _tmp29_, VALA_CCODE_MODIFIERS_STATIC);
		_vala_ccode_node_unref0 (_tmp29_);
		_vala_ccode_declarator_suffix_unref0 (_tmp27_);
		_g_free0 (_tmp24_);
		_vala_ccode_node_unref0 (cinitializer);
		_g_free0 (type_name);
	} else {
		ValaCCodeFile* _tmp30_;
		_tmp30_ = self->cfile;
		vala_ccode_base_module_generate_constant_declaration (self, c, _tmp30_, TRUE);
		if (!vala_symbol_is_internal_symbol ((ValaSymbol*) c)) {
			ValaCCodeFile* _tmp31_;
			_tmp31_ = self->header_file;
			vala_ccode_base_module_generate_constant_declaration (self, c, _tmp31_, FALSE);
		}
		if (!vala_symbol_is_private_symbol ((ValaSymbol*) c)) {
			ValaCCodeFile* _tmp32_;
			_tmp32_ = self->internal_header_file;
			vala_ccode_base_module_generate_constant_declaration (self, c, _tmp32_, FALSE);
		}
	}
	vala_ccode_base_module_pop_line (self);
}

void
vala_ccode_base_module_append_field (ValaCCodeBaseModule* self,
                                     ValaCCodeStruct* ccode_struct,
                                     ValaField* f,
                                     ValaCCodeFile* decl_space)
{
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaCCodeModifiers _tmp2_ = 0U;
	gboolean _tmp3_;
	gboolean _tmp4_;
	ValaCCodeModifiers _tmp5_ = 0U;
	ValaVersionAttribute* _tmp6_;
	ValaVersionAttribute* _tmp7_;
	gboolean _tmp8_;
	gboolean _tmp9_;
	ValaCCodeModifiers modifiers = 0U;
	ValaDataType* _tmp10_;
	ValaDataType* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaDataType* _tmp16_;
	ValaDataType* _tmp17_;
	ValaCCodeDeclaratorSuffix* _tmp18_;
	ValaCCodeDeclaratorSuffix* _tmp19_;
	gboolean _tmp20_ = FALSE;
	ValaDataType* _tmp21_;
	ValaDataType* _tmp22_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (ccode_struct != NULL);
	g_return_if_fail (f != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, decl_space);
	_tmp3_ = vala_field_get_is_volatile (f);
	_tmp4_ = _tmp3_;
	if (_tmp4_) {
		_tmp2_ = VALA_CCODE_MODIFIERS_VOLATILE;
	} else {
		_tmp2_ = 0;
	}
	_tmp6_ = vala_symbol_get_version ((ValaSymbol*) f);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_version_attribute_get_deprecated (_tmp7_);
	_tmp9_ = _tmp8_;
	if (_tmp9_) {
		_tmp5_ = VALA_CCODE_MODIFIERS_DEPRECATED;
	} else {
		_tmp5_ = 0;
	}
	modifiers = _tmp2_ | _tmp5_;
	_tmp10_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) f);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp17_);
	_tmp19_ = _tmp18_;
	vala_ccode_struct_add_field (ccode_struct, _tmp13_, _tmp15_, modifiers, _tmp19_);
	_vala_ccode_declarator_suffix_unref0 (_tmp19_);
	_g_free0 (_tmp15_);
	_g_free0 (_tmp13_);
	_tmp21_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp22_ = _tmp21_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_ARRAY_TYPE)) {
		_tmp20_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
	} else {
		_tmp20_ = FALSE;
	}
	if (_tmp20_) {
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp23_;
		ValaDataType* _tmp24_;
		ValaArrayType* _tmp25_;
		ValaArrayType* _tmp26_;
		gboolean _tmp27_;
		gboolean _tmp28_;
		_tmp23_ = vala_variable_get_variable_type ((ValaVariable*) f);
		_tmp24_ = _tmp23_;
		_tmp25_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
		array_type = _tmp25_;
		_tmp26_ = array_type;
		_tmp27_ = vala_array_type_get_fixed_length (_tmp26_);
		_tmp28_ = _tmp27_;
		if (!_tmp28_) {
			gchar* length_ctype = NULL;
			gchar* _tmp29_;
			gboolean _tmp38_ = FALSE;
			ValaArrayType* _tmp39_;
			gint _tmp40_;
			gint _tmp41_;
			_tmp29_ = vala_get_ccode_array_length_type ((ValaCodeNode*) f);
			length_ctype = _tmp29_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp30_ = FALSE;
					_tmp30_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp32_;
						gint _tmp33_;
						gint _tmp34_;
						gchar* length_cname = NULL;
						gchar* _tmp35_;
						const gchar* _tmp36_;
						const gchar* _tmp37_;
						if (!_tmp30_) {
							gint _tmp31_;
							_tmp31_ = dim;
							dim = _tmp31_ + 1;
						}
						_tmp30_ = FALSE;
						_tmp32_ = array_type;
						_tmp33_ = vala_array_type_get_rank (_tmp32_);
						_tmp34_ = _tmp33_;
						if (!(dim <= _tmp34_)) {
							break;
						}
						_tmp35_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) f, dim);
						length_cname = _tmp35_;
						_tmp36_ = length_ctype;
						_tmp37_ = length_cname;
						vala_ccode_struct_add_field (ccode_struct, _tmp36_, _tmp37_, 0, NULL);
						_g_free0 (length_cname);
					}
				}
			}
			_tmp39_ = array_type;
			_tmp40_ = vala_array_type_get_rank (_tmp39_);
			_tmp41_ = _tmp40_;
			if (_tmp41_ == 1) {
				_tmp38_ = vala_symbol_is_internal_symbol ((ValaSymbol*) f);
			} else {
				_tmp38_ = FALSE;
			}
			if (_tmp38_) {
				const gchar* _tmp42_;
				gchar* _tmp43_;
				gchar* _tmp44_;
				gchar* _tmp45_;
				gchar* _tmp46_;
				_tmp42_ = length_ctype;
				_tmp43_ = vala_get_ccode_name ((ValaCodeNode*) f);
				_tmp44_ = _tmp43_;
				_tmp45_ = vala_ccode_base_module_get_array_size_cname (self, _tmp44_);
				_tmp46_ = _tmp45_;
				vala_ccode_struct_add_field (ccode_struct, _tmp42_, _tmp46_, 0, NULL);
				_g_free0 (_tmp46_);
				_g_free0 (_tmp44_);
			}
			_g_free0 (length_ctype);
		}
		_vala_code_node_unref0 (array_type);
	} else {
		if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
			ValaDelegateType* delegate_type = NULL;
			ValaDataType* _tmp47_;
			ValaDataType* _tmp48_;
			ValaDelegateType* _tmp49_;
			ValaDelegateType* _tmp50_;
			ValaDelegate* _tmp51_;
			ValaDelegate* _tmp52_;
			gboolean _tmp53_;
			gboolean _tmp54_;
			_tmp47_ = vala_variable_get_variable_type ((ValaVariable*) f);
			_tmp48_ = _tmp47_;
			_tmp49_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
			delegate_type = _tmp49_;
			_tmp50_ = delegate_type;
			_tmp51_ = vala_delegate_type_get_delegate_symbol (_tmp50_);
			_tmp52_ = _tmp51_;
			_tmp53_ = vala_delegate_get_has_target (_tmp52_);
			_tmp54_ = _tmp53_;
			if (_tmp54_) {
				ValaDataType* _tmp55_;
				gchar* _tmp56_;
				gchar* _tmp57_;
				gchar* _tmp58_;
				gchar* _tmp59_;
				ValaDelegateType* _tmp60_;
				_tmp55_ = self->delegate_target_type;
				_tmp56_ = vala_get_ccode_name ((ValaCodeNode*) _tmp55_);
				_tmp57_ = _tmp56_;
				_tmp58_ = vala_get_ccode_delegate_target_name ((ValaVariable*) f);
				_tmp59_ = _tmp58_;
				vala_ccode_struct_add_field (ccode_struct, _tmp57_, _tmp59_, 0, NULL);
				_g_free0 (_tmp59_);
				_g_free0 (_tmp57_);
				_tmp60_ = delegate_type;
				if (vala_data_type_is_disposable ((ValaDataType*) _tmp60_)) {
					ValaDelegateType* _tmp61_;
					gchar* _tmp62_;
					gchar* _tmp63_;
					gchar* _tmp64_;
					gchar* _tmp65_;
					_tmp61_ = self->delegate_target_destroy_type;
					_tmp62_ = vala_get_ccode_name ((ValaCodeNode*) _tmp61_);
					_tmp63_ = _tmp62_;
					_tmp64_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) f);
					_tmp65_ = _tmp64_;
					vala_ccode_struct_add_field (ccode_struct, _tmp63_, _tmp65_, 0, NULL);
					_g_free0 (_tmp65_);
					_g_free0 (_tmp63_);
				}
			}
			_vala_code_node_unref0 (delegate_type);
		}
	}
}

void
vala_ccode_base_module_generate_field_declaration (ValaCCodeBaseModule* self,
                                                   ValaField* f,
                                                   ValaCCodeFile* decl_space)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gboolean _tmp2_;
	ValaDataType* _tmp3_;
	ValaDataType* _tmp4_;
	ValaCCodeDeclaration* _cdecl_ = NULL;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	ValaCCodeDeclaration* _tmp9_;
	ValaCCodeDeclaration* _tmp10_;
	ValaCCodeDeclaration* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaDataType* _tmp14_;
	ValaDataType* _tmp15_;
	ValaCCodeDeclaratorSuffix* _tmp16_;
	ValaCCodeDeclaratorSuffix* _tmp17_;
	ValaCCodeVariableDeclarator* _tmp18_;
	ValaCCodeVariableDeclarator* _tmp19_;
	ValaVersionAttribute* _tmp22_;
	ValaVersionAttribute* _tmp23_;
	gboolean _tmp24_;
	gboolean _tmp25_;
	gboolean _tmp30_;
	gboolean _tmp31_;
	ValaCCodeDeclaration* _tmp36_;
	gboolean _tmp37_;
	gboolean _tmp38_;
	gboolean _tmp63_ = FALSE;
	ValaDataType* _tmp64_;
	ValaDataType* _tmp65_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (f != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) f);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) f, _tmp1_);
	_g_free0 (_tmp1_);
	if (_tmp2_) {
		return;
	}
	_tmp3_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_generate_type_declaration (self, _tmp4_, decl_space);
	_tmp5_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_get_ccode_name ((ValaCodeNode*) _tmp6_);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_ccode_declaration_new (_tmp8_);
	_tmp10_ = _tmp9_;
	_g_free0 (_tmp8_);
	_cdecl_ = _tmp10_;
	_tmp11_ = _cdecl_;
	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) f);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_variable_declarator_new (_tmp13_, NULL, _tmp17_);
	_tmp19_ = _tmp18_;
	vala_ccode_declaration_add_declarator (_tmp11_, (ValaCCodeDeclarator*) _tmp19_);
	_vala_ccode_node_unref0 (_tmp19_);
	_vala_ccode_declarator_suffix_unref0 (_tmp17_);
	_g_free0 (_tmp13_);
	if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
		ValaCCodeDeclaration* _tmp20_;
		_tmp20_ = _cdecl_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp20_, VALA_CCODE_MODIFIERS_STATIC);
	} else {
		ValaCCodeDeclaration* _tmp21_;
		_tmp21_ = _cdecl_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp21_, VALA_CCODE_MODIFIERS_EXTERN);
		self->requires_vala_extern = TRUE;
	}
	_tmp22_ = vala_symbol_get_version ((ValaSymbol*) f);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_version_attribute_get_deprecated (_tmp23_);
	_tmp25_ = _tmp24_;
	if (_tmp25_) {
		ValaCCodeDeclaration* _tmp26_;
		ValaCCodeDeclaration* _tmp27_;
		ValaCCodeModifiers _tmp28_;
		ValaCCodeModifiers _tmp29_;
		_tmp26_ = _cdecl_;
		_tmp27_ = _cdecl_;
		_tmp28_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp27_);
		_tmp29_ = _tmp28_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp27_, _tmp29_ | VALA_CCODE_MODIFIERS_DEPRECATED);
	}
	_tmp30_ = vala_field_get_is_volatile (f);
	_tmp31_ = _tmp30_;
	if (_tmp31_) {
		ValaCCodeDeclaration* _tmp32_;
		ValaCCodeDeclaration* _tmp33_;
		ValaCCodeModifiers _tmp34_;
		ValaCCodeModifiers _tmp35_;
		_tmp32_ = _cdecl_;
		_tmp33_ = _cdecl_;
		_tmp34_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp33_);
		_tmp35_ = _tmp34_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp33_, _tmp35_ | VALA_CCODE_MODIFIERS_VOLATILE);
	}
	_tmp36_ = _cdecl_;
	vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp36_);
	_tmp37_ = vala_lockable_get_lock_used ((ValaLockable*) f);
	_tmp38_ = _tmp37_;
	if (_tmp38_) {
		ValaCCodeDeclaration* flock = NULL;
		ValaStruct* _tmp39_;
		gchar* _tmp40_;
		gchar* _tmp41_;
		ValaCCodeDeclaration* _tmp42_;
		ValaCCodeDeclaration* _tmp43_;
		ValaCCodeVariableDeclarator* flock_decl = NULL;
		ValaSymbol* _tmp44_;
		ValaSymbol* _tmp45_;
		gchar* _tmp46_;
		gchar* _tmp47_;
		gchar* _tmp48_;
		gchar* _tmp49_;
		gchar* _tmp50_;
		gchar* _tmp51_;
		gchar* _tmp52_;
		gchar* _tmp53_;
		ValaCCodeConstant* _tmp54_;
		ValaCCodeConstant* _tmp55_;
		ValaCCodeVariableDeclarator* _tmp56_;
		ValaCCodeVariableDeclarator* _tmp57_;
		ValaCCodeDeclaration* _tmp58_;
		ValaCCodeVariableDeclarator* _tmp59_;
		ValaCCodeDeclaration* _tmp62_;
		_tmp39_ = self->mutex_type;
		_tmp40_ = vala_get_ccode_name ((ValaCodeNode*) _tmp39_);
		_tmp41_ = _tmp40_;
		_tmp42_ = vala_ccode_declaration_new (_tmp41_);
		_tmp43_ = _tmp42_;
		_g_free0 (_tmp41_);
		flock = _tmp43_;
		_tmp44_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
		_tmp45_ = _tmp44_;
		_tmp46_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp45_, NULL);
		_tmp47_ = _tmp46_;
		_tmp48_ = vala_get_ccode_name ((ValaCodeNode*) f);
		_tmp49_ = _tmp48_;
		_tmp50_ = g_strdup_printf ("%s_%s", _tmp47_, _tmp49_);
		_tmp51_ = _tmp50_;
		_tmp52_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp51_);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_constant_new ("{0}");
		_tmp55_ = _tmp54_;
		_tmp56_ = vala_ccode_variable_declarator_new (_tmp53_, (ValaCCodeExpression*) _tmp55_, NULL);
		_tmp57_ = _tmp56_;
		_vala_ccode_node_unref0 (_tmp55_);
		_g_free0 (_tmp53_);
		_g_free0 (_tmp51_);
		_g_free0 (_tmp49_);
		_g_free0 (_tmp47_);
		flock_decl = _tmp57_;
		_tmp58_ = flock;
		_tmp59_ = flock_decl;
		vala_ccode_declaration_add_declarator (_tmp58_, (ValaCCodeDeclarator*) _tmp59_);
		if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
			ValaCCodeDeclaration* _tmp60_;
			_tmp60_ = flock;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp60_, VALA_CCODE_MODIFIERS_STATIC);
		} else {
			ValaCCodeDeclaration* _tmp61_;
			_tmp61_ = flock;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp61_, VALA_CCODE_MODIFIERS_EXTERN);
			self->requires_vala_extern = TRUE;
		}
		_tmp62_ = flock;
		vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp62_);
		_vala_ccode_node_unref0 (flock_decl);
		_vala_ccode_node_unref0 (flock);
	}
	_tmp64_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp65_ = _tmp64_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp65_, VALA_TYPE_ARRAY_TYPE)) {
		_tmp63_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
	} else {
		_tmp63_ = FALSE;
	}
	if (_tmp63_) {
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp66_;
		ValaDataType* _tmp67_;
		ValaArrayType* _tmp68_;
		ValaArrayType* _tmp69_;
		gboolean _tmp70_;
		gboolean _tmp71_;
		_tmp66_ = vala_variable_get_variable_type ((ValaVariable*) f);
		_tmp67_ = _tmp66_;
		_tmp68_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
		array_type = _tmp68_;
		_tmp69_ = array_type;
		_tmp70_ = vala_array_type_get_fixed_length (_tmp69_);
		_tmp71_ = _tmp70_;
		if (!_tmp71_) {
			gchar* length_ctype = NULL;
			gchar* _tmp72_;
			_tmp72_ = vala_get_ccode_array_length_type ((ValaCodeNode*) f);
			length_ctype = _tmp72_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp73_ = FALSE;
					_tmp73_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp75_;
						gint _tmp76_;
						gint _tmp77_;
						const gchar* _tmp78_;
						ValaCCodeDeclaration* _tmp79_;
						ValaCCodeDeclaration* _tmp80_;
						gchar* _tmp81_;
						gchar* _tmp82_;
						ValaCCodeVariableDeclarator* _tmp83_;
						ValaCCodeVariableDeclarator* _tmp84_;
						ValaCCodeDeclaration* _tmp87_;
						if (!_tmp73_) {
							gint _tmp74_;
							_tmp74_ = dim;
							dim = _tmp74_ + 1;
						}
						_tmp73_ = FALSE;
						_tmp75_ = array_type;
						_tmp76_ = vala_array_type_get_rank (_tmp75_);
						_tmp77_ = _tmp76_;
						if (!(dim <= _tmp77_)) {
							break;
						}
						_tmp78_ = length_ctype;
						_tmp79_ = vala_ccode_declaration_new (_tmp78_);
						_vala_ccode_node_unref0 (_cdecl_);
						_cdecl_ = _tmp79_;
						_tmp80_ = _cdecl_;
						_tmp81_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) f, dim);
						_tmp82_ = _tmp81_;
						_tmp83_ = vala_ccode_variable_declarator_new (_tmp82_, NULL, NULL);
						_tmp84_ = _tmp83_;
						vala_ccode_declaration_add_declarator (_tmp80_, (ValaCCodeDeclarator*) _tmp84_);
						_vala_ccode_node_unref0 (_tmp84_);
						_g_free0 (_tmp82_);
						if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
							ValaCCodeDeclaration* _tmp85_;
							_tmp85_ = _cdecl_;
							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp85_, VALA_CCODE_MODIFIERS_STATIC);
						} else {
							ValaCCodeDeclaration* _tmp86_;
							_tmp86_ = _cdecl_;
							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp86_, VALA_CCODE_MODIFIERS_EXTERN);
							self->requires_vala_extern = TRUE;
						}
						_tmp87_ = _cdecl_;
						vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp87_);
					}
				}
			}
			_g_free0 (length_ctype);
		}
		_vala_code_node_unref0 (array_type);
	} else {
		if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
			ValaDelegateType* delegate_type = NULL;
			ValaDataType* _tmp88_;
			ValaDataType* _tmp89_;
			ValaDelegateType* _tmp90_;
			ValaDelegateType* _tmp91_;
			ValaDelegate* _tmp92_;
			ValaDelegate* _tmp93_;
			gboolean _tmp94_;
			gboolean _tmp95_;
			_tmp88_ = vala_variable_get_variable_type ((ValaVariable*) f);
			_tmp89_ = _tmp88_;
			_tmp90_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp89_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
			delegate_type = _tmp90_;
			_tmp91_ = delegate_type;
			_tmp92_ = vala_delegate_type_get_delegate_symbol (_tmp91_);
			_tmp93_ = _tmp92_;
			_tmp94_ = vala_delegate_get_has_target (_tmp93_);
			_tmp95_ = _tmp94_;
			if (_tmp95_) {
				ValaDataType* _tmp96_;
				gchar* _tmp97_;
				gchar* _tmp98_;
				ValaCCodeDeclaration* _tmp99_;
				ValaCCodeDeclaration* _tmp100_;
				gchar* _tmp101_;
				gchar* _tmp102_;
				ValaCCodeVariableDeclarator* _tmp103_;
				ValaCCodeVariableDeclarator* _tmp104_;
				ValaCCodeDeclaration* _tmp107_;
				ValaDelegateType* _tmp108_;
				_tmp96_ = self->delegate_target_type;
				_tmp97_ = vala_get_ccode_name ((ValaCodeNode*) _tmp96_);
				_tmp98_ = _tmp97_;
				_tmp99_ = vala_ccode_declaration_new (_tmp98_);
				_vala_ccode_node_unref0 (_cdecl_);
				_cdecl_ = _tmp99_;
				_g_free0 (_tmp98_);
				_tmp100_ = _cdecl_;
				_tmp101_ = vala_get_ccode_delegate_target_name ((ValaVariable*) f);
				_tmp102_ = _tmp101_;
				_tmp103_ = vala_ccode_variable_declarator_new (_tmp102_, NULL, NULL);
				_tmp104_ = _tmp103_;
				vala_ccode_declaration_add_declarator (_tmp100_, (ValaCCodeDeclarator*) _tmp104_);
				_vala_ccode_node_unref0 (_tmp104_);
				_g_free0 (_tmp102_);
				if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
					ValaCCodeDeclaration* _tmp105_;
					_tmp105_ = _cdecl_;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp105_, VALA_CCODE_MODIFIERS_STATIC);
				} else {
					ValaCCodeDeclaration* _tmp106_;
					_tmp106_ = _cdecl_;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp106_, VALA_CCODE_MODIFIERS_EXTERN);
					self->requires_vala_extern = TRUE;
				}
				_tmp107_ = _cdecl_;
				vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp107_);
				_tmp108_ = delegate_type;
				if (vala_data_type_is_disposable ((ValaDataType*) _tmp108_)) {
					ValaDelegateType* _tmp109_;
					gchar* _tmp110_;
					gchar* _tmp111_;
					ValaCCodeDeclaration* _tmp112_;
					ValaCCodeDeclaration* _tmp113_;
					gchar* _tmp114_;
					gchar* _tmp115_;
					ValaCCodeVariableDeclarator* _tmp116_;
					ValaCCodeVariableDeclarator* _tmp117_;
					ValaCCodeDeclaration* _tmp120_;
					_tmp109_ = self->delegate_target_destroy_type;
					_tmp110_ = vala_get_ccode_name ((ValaCodeNode*) _tmp109_);
					_tmp111_ = _tmp110_;
					_tmp112_ = vala_ccode_declaration_new (_tmp111_);
					_vala_ccode_node_unref0 (_cdecl_);
					_cdecl_ = _tmp112_;
					_g_free0 (_tmp111_);
					_tmp113_ = _cdecl_;
					_tmp114_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) f);
					_tmp115_ = _tmp114_;
					_tmp116_ = vala_ccode_variable_declarator_new (_tmp115_, NULL, NULL);
					_tmp117_ = _tmp116_;
					vala_ccode_declaration_add_declarator (_tmp113_, (ValaCCodeDeclarator*) _tmp117_);
					_vala_ccode_node_unref0 (_tmp117_);
					_g_free0 (_tmp115_);
					if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
						ValaCCodeDeclaration* _tmp118_;
						_tmp118_ = _cdecl_;
						vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp118_, VALA_CCODE_MODIFIERS_STATIC);
					} else {
						ValaCCodeDeclaration* _tmp119_;
						_tmp119_ = _cdecl_;
						vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp119_, VALA_CCODE_MODIFIERS_EXTERN);
						self->requires_vala_extern = TRUE;
					}
					_tmp120_ = _cdecl_;
					vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp120_);
				}
			}
			_vala_code_node_unref0 (delegate_type);
		}
	}
	_vala_ccode_node_unref0 (_cdecl_);
}

static gpointer
_vala_target_value_ref0 (gpointer self)
{
	return self ? vala_target_value_ref (self) : NULL;
}

static void
vala_ccode_base_module_real_visit_field (ValaCodeVisitor* base,
                                         ValaField* f)
{
	ValaCCodeBaseModule * self;
	ValaSourceReference* _tmp0_;
	ValaSourceReference* _tmp1_;
	ValaClass* cl = NULL;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaClass* _tmp4_;
	gboolean _tmp5_ = FALSE;
	ValaClass* _tmp6_;
	gboolean is_gtypeinstance = FALSE;
	ValaCCodeExpression* lhs = NULL;
	ValaMemberBinding _tmp10_;
	ValaMemberBinding _tmp11_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (f != NULL);
	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) f);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_line (self, _tmp1_);
	vala_ccode_base_module_visit_member (self, (ValaSymbol*) f);
	_tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL);
	cl = _tmp4_;
	_tmp6_ = cl;
	if (_tmp6_ != NULL) {
		ValaClass* _tmp7_;
		gboolean _tmp8_;
		gboolean _tmp9_;
		_tmp7_ = cl;
		_tmp8_ = vala_class_get_is_compact (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp5_ = !_tmp9_;
	} else {
		_tmp5_ = FALSE;
	}
	is_gtypeinstance = _tmp5_;
	lhs = NULL;
	_tmp10_ = vala_field_get_binding (f);
	_tmp11_ = _tmp10_;
	if (_tmp11_ == VALA_MEMBER_BINDING_INSTANCE) {
		gboolean _tmp12_ = FALSE;
		ValaExpression* _tmp27_;
		ValaExpression* _tmp28_;
		gboolean _tmp182_ = FALSE;
		gboolean _tmp183_ = FALSE;
		gboolean _tmp184_ = FALSE;
		ValaDataType* _tmp185_;
		ValaDataType* _tmp186_;
		if (is_gtypeinstance) {
			ValaSymbolAccessibility _tmp13_;
			ValaSymbolAccessibility _tmp14_;
			_tmp13_ = vala_symbol_get_access ((ValaSymbol*) f);
			_tmp14_ = _tmp13_;
			_tmp12_ = _tmp14_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
		} else {
			_tmp12_ = FALSE;
		}
		if (_tmp12_) {
			ValaCCodeIdentifier* _tmp15_;
			ValaCCodeIdentifier* _tmp16_;
			ValaCCodeMemberAccess* _tmp17_;
			ValaCCodeMemberAccess* _tmp18_;
			gchar* _tmp19_;
			gchar* _tmp20_;
			ValaCCodeMemberAccess* _tmp21_;
			_tmp15_ = vala_ccode_identifier_new ("self");
			_tmp16_ = _tmp15_;
			_tmp17_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp16_, "priv");
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) f);
			_tmp20_ = _tmp19_;
			_tmp21_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp18_, _tmp20_);
			_vala_ccode_node_unref0 (lhs);
			lhs = (ValaCCodeExpression*) _tmp21_;
			_g_free0 (_tmp20_);
			_vala_ccode_node_unref0 (_tmp18_);
			_vala_ccode_node_unref0 (_tmp16_);
		} else {
			ValaCCodeIdentifier* _tmp22_;
			ValaCCodeIdentifier* _tmp23_;
			gchar* _tmp24_;
			gchar* _tmp25_;
			ValaCCodeMemberAccess* _tmp26_;
			_tmp22_ = vala_ccode_identifier_new ("self");
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_get_ccode_name ((ValaCodeNode*) f);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp23_, _tmp25_);
			_vala_ccode_node_unref0 (lhs);
			lhs = (ValaCCodeExpression*) _tmp26_;
			_g_free0 (_tmp25_);
			_vala_ccode_node_unref0 (_tmp23_);
		}
		_tmp27_ = vala_variable_get_initializer ((ValaVariable*) f);
		_tmp28_ = _tmp27_;
		if (_tmp28_ != NULL) {
			ValaCCodeBaseModuleEmitContext* _tmp29_;
			ValaExpression* _tmp30_;
			ValaExpression* _tmp31_;
			ValaCCodeExpression* rhs = NULL;
			ValaExpression* _tmp32_;
			ValaExpression* _tmp33_;
			ValaCCodeExpression* _tmp34_;
			ValaCCodeExpression* _tmp35_;
			ValaExpression* _tmp36_;
			ValaExpression* _tmp37_;
			ValaArrayList* _tmp180_;
			ValaArrayList* _tmp181_;
			_tmp29_ = self->instance_init_context;
			vala_ccode_base_module_push_context (self, _tmp29_);
			_tmp30_ = vala_variable_get_initializer ((ValaVariable*) f);
			_tmp31_ = _tmp30_;
			vala_code_node_emit ((ValaCodeNode*) _tmp31_, (ValaCodeGenerator*) self);
			_tmp32_ = vala_variable_get_initializer ((ValaVariable*) f);
			_tmp33_ = _tmp32_;
			_tmp34_ = vala_get_cvalue (_tmp33_);
			_tmp35_ = _vala_ccode_node_ref0 (_tmp34_);
			rhs = _tmp35_;
			_tmp36_ = vala_variable_get_initializer ((ValaVariable*) f);
			_tmp37_ = _tmp36_;
			if (!vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) f, _tmp37_)) {
				ValaCCodeFunction* _tmp38_;
				ValaCCodeFunction* _tmp39_;
				ValaCCodeExpression* _tmp40_;
				ValaCCodeExpression* _tmp41_;
				gboolean _tmp42_ = FALSE;
				ValaDataType* _tmp43_;
				ValaDataType* _tmp44_;
				_tmp38_ = vala_ccode_base_module_get_ccode (self);
				_tmp39_ = _tmp38_;
				_tmp40_ = lhs;
				_tmp41_ = rhs;
				vala_ccode_function_add_assignment (_tmp39_, _tmp40_, _tmp41_);
				_tmp43_ = vala_variable_get_variable_type ((ValaVariable*) f);
				_tmp44_ = _tmp43_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, VALA_TYPE_ARRAY_TYPE)) {
					_tmp42_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
				} else {
					_tmp42_ = FALSE;
				}
				if (_tmp42_) {
					ValaArrayType* array_type = NULL;
					ValaDataType* _tmp45_;
					ValaDataType* _tmp46_;
					ValaArrayType* _tmp47_;
					ValaTargetValue* field_value = NULL;
					ValaSymbol* _tmp48_;
					ValaSymbol* _tmp49_;
					ValaTargetValue* _tmp50_;
					ValaTargetValue* _tmp51_;
					ValaTargetValue* _tmp52_;
					ValaTargetValue* _tmp53_;
					ValaGLibValue* glib_value = NULL;
					ValaExpression* _tmp54_;
					ValaExpression* _tmp55_;
					ValaTargetValue* _tmp56_;
					ValaTargetValue* _tmp57_;
					ValaGLibValue* _tmp58_;
					ValaGLibValue* _tmp59_;
					ValaList* _tmp60_;
					gboolean _tmp100_ = FALSE;
					ValaArrayType* _tmp101_;
					gint _tmp102_;
					gint _tmp103_;
					_tmp45_ = vala_variable_get_variable_type ((ValaVariable*) f);
					_tmp46_ = _tmp45_;
					_tmp47_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
					array_type = _tmp47_;
					_tmp48_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
					_tmp49_ = _tmp48_;
					_tmp50_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
					_tmp51_ = _tmp50_;
					_tmp52_ = vala_ccode_base_module_get_field_cvalue (self, f, _tmp51_);
					_tmp53_ = _tmp52_;
					_vala_target_value_unref0 (_tmp51_);
					field_value = _tmp53_;
					_tmp54_ = vala_variable_get_initializer ((ValaVariable*) f);
					_tmp55_ = _tmp54_;
					_tmp56_ = vala_expression_get_target_value (_tmp55_);
					_tmp57_ = _tmp56_;
					_tmp58_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
					glib_value = _tmp58_;
					_tmp59_ = glib_value;
					_tmp60_ = _tmp59_->array_length_cvalues;
					if (_tmp60_ != NULL) {
						{
							gint dim = 0;
							dim = 1;
							{
								gboolean _tmp61_ = FALSE;
								_tmp61_ = TRUE;
								while (TRUE) {
									ValaArrayType* _tmp63_;
									gint _tmp64_;
									gint _tmp65_;
									ValaCCodeExpression* array_len_lhs = NULL;
									ValaTargetValue* _tmp66_;
									ValaCCodeExpression* _tmp67_;
									ValaCCodeFunction* _tmp68_;
									ValaCCodeFunction* _tmp69_;
									ValaCCodeExpression* _tmp70_;
									ValaGLibValue* _tmp71_;
									ValaCCodeExpression* _tmp72_;
									ValaCCodeExpression* _tmp73_;
									if (!_tmp61_) {
										gint _tmp62_;
										_tmp62_ = dim;
										dim = _tmp62_ + 1;
									}
									_tmp61_ = FALSE;
									_tmp63_ = array_type;
									_tmp64_ = vala_array_type_get_rank (_tmp63_);
									_tmp65_ = _tmp64_;
									if (!(dim <= _tmp65_)) {
										break;
									}
									_tmp66_ = field_value;
									_tmp67_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp66_, dim);
									array_len_lhs = _tmp67_;
									_tmp68_ = vala_ccode_base_module_get_ccode (self);
									_tmp69_ = _tmp68_;
									_tmp70_ = array_len_lhs;
									_tmp71_ = glib_value;
									_tmp72_ = vala_ccode_base_module_get_array_length_cvalue (self, (ValaTargetValue*) _tmp71_, dim);
									_tmp73_ = _tmp72_;
									vala_ccode_function_add_assignment (_tmp69_, _tmp70_, _tmp73_);
									_vala_ccode_node_unref0 (_tmp73_);
									_vala_ccode_node_unref0 (array_len_lhs);
								}
							}
						}
					} else {
						ValaGLibValue* _tmp74_;
						_tmp74_ = glib_value;
						if (_tmp74_->array_null_terminated) {
							ValaCCodeFunctionCall* len_call = NULL;
							ValaCCodeIdentifier* _tmp75_;
							ValaCCodeIdentifier* _tmp76_;
							ValaCCodeFunctionCall* _tmp77_;
							ValaCCodeFunctionCall* _tmp78_;
							ValaCCodeFunctionCall* _tmp79_;
							ValaGLibValue* _tmp80_;
							ValaCCodeExpression* _tmp81_;
							ValaCCodeFunction* _tmp82_;
							ValaCCodeFunction* _tmp83_;
							ValaTargetValue* _tmp84_;
							ValaCCodeExpression* _tmp85_;
							ValaCCodeExpression* _tmp86_;
							ValaCCodeFunctionCall* _tmp87_;
							self->requires_array_length = TRUE;
							_tmp75_ = vala_ccode_identifier_new ("_vala_array_length");
							_tmp76_ = _tmp75_;
							_tmp77_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp76_);
							_tmp78_ = _tmp77_;
							_vala_ccode_node_unref0 (_tmp76_);
							len_call = _tmp78_;
							_tmp79_ = len_call;
							_tmp80_ = glib_value;
							_tmp81_ = vala_get_cvalue_ ((ValaTargetValue*) _tmp80_);
							vala_ccode_function_call_add_argument (_tmp79_, _tmp81_);
							_tmp82_ = vala_ccode_base_module_get_ccode (self);
							_tmp83_ = _tmp82_;
							_tmp84_ = field_value;
							_tmp85_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp84_, 1);
							_tmp86_ = _tmp85_;
							_tmp87_ = len_call;
							vala_ccode_function_add_assignment (_tmp83_, _tmp86_, (ValaCCodeExpression*) _tmp87_);
							_vala_ccode_node_unref0 (_tmp86_);
							_vala_ccode_node_unref0 (len_call);
						} else {
							{
								gint dim = 0;
								dim = 1;
								{
									gboolean _tmp88_ = FALSE;
									_tmp88_ = TRUE;
									while (TRUE) {
										ValaArrayType* _tmp90_;
										gint _tmp91_;
										gint _tmp92_;
										ValaCCodeFunction* _tmp93_;
										ValaCCodeFunction* _tmp94_;
										ValaTargetValue* _tmp95_;
										ValaCCodeExpression* _tmp96_;
										ValaCCodeExpression* _tmp97_;
										ValaCCodeConstant* _tmp98_;
										ValaCCodeConstant* _tmp99_;
										if (!_tmp88_) {
											gint _tmp89_;
											_tmp89_ = dim;
											dim = _tmp89_ + 1;
										}
										_tmp88_ = FALSE;
										_tmp90_ = array_type;
										_tmp91_ = vala_array_type_get_rank (_tmp90_);
										_tmp92_ = _tmp91_;
										if (!(dim <= _tmp92_)) {
											break;
										}
										_tmp93_ = vala_ccode_base_module_get_ccode (self);
										_tmp94_ = _tmp93_;
										_tmp95_ = field_value;
										_tmp96_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp95_, dim);
										_tmp97_ = _tmp96_;
										_tmp98_ = vala_ccode_constant_new ("-1");
										_tmp99_ = _tmp98_;
										vala_ccode_function_add_assignment (_tmp94_, _tmp97_, (ValaCCodeExpression*) _tmp99_);
										_vala_ccode_node_unref0 (_tmp99_);
										_vala_ccode_node_unref0 (_tmp97_);
									}
								}
							}
						}
					}
					_tmp101_ = array_type;
					_tmp102_ = vala_array_type_get_rank (_tmp101_);
					_tmp103_ = _tmp102_;
					if (_tmp103_ == 1) {
						_tmp100_ = vala_symbol_is_internal_symbol ((ValaSymbol*) f);
					} else {
						_tmp100_ = FALSE;
					}
					if (_tmp100_) {
						ValaCCodeExpression* lhs_array_size = NULL;
						ValaTargetValue* _tmp104_;
						ValaCCodeExpression* _tmp105_;
						ValaCCodeExpression* _tmp106_;
						ValaCCodeExpression* rhs_array_len = NULL;
						ValaTargetValue* _tmp107_;
						ValaCCodeExpression* _tmp108_;
						ValaCCodeFunction* _tmp109_;
						ValaCCodeFunction* _tmp110_;
						ValaCCodeExpression* _tmp111_;
						ValaCCodeExpression* _tmp112_;
						_tmp104_ = field_value;
						_tmp105_ = vala_get_array_size_cvalue (_tmp104_);
						_tmp106_ = _vala_ccode_node_ref0 (_tmp105_);
						lhs_array_size = _tmp106_;
						_tmp107_ = field_value;
						_tmp108_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp107_, 1);
						rhs_array_len = _tmp108_;
						_tmp109_ = vala_ccode_base_module_get_ccode (self);
						_tmp110_ = _tmp109_;
						_tmp111_ = lhs_array_size;
						_tmp112_ = rhs_array_len;
						vala_ccode_function_add_assignment (_tmp110_, _tmp111_, _tmp112_);
						_vala_ccode_node_unref0 (rhs_array_len);
						_vala_ccode_node_unref0 (lhs_array_size);
					}
					_vala_target_value_unref0 (glib_value);
					_vala_target_value_unref0 (field_value);
					_vala_code_node_unref0 (array_type);
				} else {
					if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
						ValaDelegateType* delegate_type = NULL;
						ValaDataType* _tmp113_;
						ValaDataType* _tmp114_;
						ValaDelegateType* _tmp115_;
						ValaDelegateType* _tmp116_;
						ValaDelegate* _tmp117_;
						ValaDelegate* _tmp118_;
						gboolean _tmp119_;
						gboolean _tmp120_;
						_tmp113_ = vala_variable_get_variable_type ((ValaVariable*) f);
						_tmp114_ = _tmp113_;
						_tmp115_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
						delegate_type = _tmp115_;
						_tmp116_ = delegate_type;
						_tmp117_ = vala_delegate_type_get_delegate_symbol (_tmp116_);
						_tmp118_ = _tmp117_;
						_tmp119_ = vala_delegate_get_has_target (_tmp118_);
						_tmp120_ = _tmp119_;
						if (_tmp120_) {
							ValaTargetValue* field_value = NULL;
							ValaSymbol* _tmp121_;
							ValaSymbol* _tmp122_;
							ValaTargetValue* _tmp123_;
							ValaTargetValue* _tmp124_;
							ValaTargetValue* _tmp125_;
							ValaTargetValue* _tmp126_;
							ValaCCodeExpression* target_cvalue = NULL;
							ValaExpression* _tmp127_;
							ValaExpression* _tmp128_;
							ValaTargetValue* _tmp129_;
							ValaTargetValue* _tmp130_;
							ValaCCodeExpression* _tmp131_;
							ValaCCodeExpression* _tmp132_;
							ValaDelegateType* _tmp146_;
							_tmp121_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
							_tmp122_ = _tmp121_;
							_tmp123_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp122_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
							_tmp124_ = _tmp123_;
							_tmp125_ = vala_ccode_base_module_get_field_cvalue (self, f, _tmp124_);
							_tmp126_ = _tmp125_;
							_vala_target_value_unref0 (_tmp124_);
							field_value = _tmp126_;
							_tmp127_ = vala_variable_get_initializer ((ValaVariable*) f);
							_tmp128_ = _tmp127_;
							_tmp129_ = vala_expression_get_target_value (_tmp128_);
							_tmp130_ = _tmp129_;
							_tmp131_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp130_);
							target_cvalue = _tmp131_;
							_tmp132_ = target_cvalue;
							if (_tmp132_ != NULL) {
								ValaCCodeFunction* _tmp133_;
								ValaCCodeFunction* _tmp134_;
								ValaTargetValue* _tmp135_;
								ValaCCodeExpression* _tmp136_;
								ValaCCodeExpression* _tmp137_;
								ValaCCodeExpression* _tmp138_;
								_tmp133_ = vala_ccode_base_module_get_ccode (self);
								_tmp134_ = _tmp133_;
								_tmp135_ = field_value;
								_tmp136_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp135_);
								_tmp137_ = _tmp136_;
								_tmp138_ = target_cvalue;
								vala_ccode_function_add_assignment (_tmp134_, _tmp137_, _tmp138_);
								_vala_ccode_node_unref0 (_tmp137_);
							} else {
								ValaCCodeFunction* _tmp139_;
								ValaCCodeFunction* _tmp140_;
								ValaTargetValue* _tmp141_;
								ValaCCodeExpression* _tmp142_;
								ValaCCodeExpression* _tmp143_;
								ValaCCodeIdentifier* _tmp144_;
								ValaCCodeIdentifier* _tmp145_;
								_tmp139_ = vala_ccode_base_module_get_ccode (self);
								_tmp140_ = _tmp139_;
								_tmp141_ = field_value;
								_tmp142_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp141_);
								_tmp143_ = _tmp142_;
								_tmp144_ = vala_ccode_identifier_new ("self");
								_tmp145_ = _tmp144_;
								vala_ccode_function_add_assignment (_tmp140_, _tmp143_, (ValaCCodeExpression*) _tmp145_);
								_vala_ccode_node_unref0 (_tmp145_);
								_vala_ccode_node_unref0 (_tmp143_);
							}
							_tmp146_ = delegate_type;
							if (vala_data_type_is_disposable ((ValaDataType*) _tmp146_)) {
								ValaCCodeExpression* destroy_cvalue = NULL;
								ValaExpression* _tmp147_;
								ValaExpression* _tmp148_;
								ValaTargetValue* _tmp149_;
								ValaTargetValue* _tmp150_;
								ValaCCodeExpression* _tmp151_;
								ValaCCodeExpression* _tmp152_;
								_tmp147_ = vala_variable_get_initializer ((ValaVariable*) f);
								_tmp148_ = _tmp147_;
								_tmp149_ = vala_expression_get_target_value (_tmp148_);
								_tmp150_ = _tmp149_;
								_tmp151_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp150_);
								destroy_cvalue = _tmp151_;
								_tmp152_ = destroy_cvalue;
								if (_tmp152_ != NULL) {
									ValaCCodeFunction* _tmp153_;
									ValaCCodeFunction* _tmp154_;
									ValaTargetValue* _tmp155_;
									ValaCCodeExpression* _tmp156_;
									ValaCCodeExpression* _tmp157_;
									ValaCCodeExpression* _tmp158_;
									_tmp153_ = vala_ccode_base_module_get_ccode (self);
									_tmp154_ = _tmp153_;
									_tmp155_ = field_value;
									_tmp156_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp155_);
									_tmp157_ = _tmp156_;
									_tmp158_ = destroy_cvalue;
									vala_ccode_function_add_assignment (_tmp154_, _tmp157_, _tmp158_);
									_vala_ccode_node_unref0 (_tmp157_);
								} else {
									ValaCCodeFunction* _tmp159_;
									ValaCCodeFunction* _tmp160_;
									ValaTargetValue* _tmp161_;
									ValaCCodeExpression* _tmp162_;
									ValaCCodeExpression* _tmp163_;
									ValaCCodeConstant* _tmp164_;
									ValaCCodeConstant* _tmp165_;
									_tmp159_ = vala_ccode_base_module_get_ccode (self);
									_tmp160_ = _tmp159_;
									_tmp161_ = field_value;
									_tmp162_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp161_);
									_tmp163_ = _tmp162_;
									_tmp164_ = vala_ccode_constant_new ("NULL");
									_tmp165_ = _tmp164_;
									vala_ccode_function_add_assignment (_tmp160_, _tmp163_, (ValaCCodeExpression*) _tmp165_);
									_vala_ccode_node_unref0 (_tmp165_);
									_vala_ccode_node_unref0 (_tmp163_);
								}
								_vala_ccode_node_unref0 (destroy_cvalue);
							}
							_vala_ccode_node_unref0 (target_cvalue);
							_vala_target_value_unref0 (field_value);
						}
						_vala_code_node_unref0 (delegate_type);
					}
				}
			}
			{
				ValaArrayList* _value_list = NULL;
				ValaArrayList* _tmp166_;
				ValaArrayList* _tmp167_;
				gint _value_size = 0;
				ValaArrayList* _tmp168_;
				gint _tmp169_;
				gint _tmp170_;
				gint _value_index = 0;
				_tmp166_ = vala_ccode_base_module_get_temp_ref_values (self);
				_tmp167_ = _tmp166_;
				_value_list = _tmp167_;
				_tmp168_ = _value_list;
				_tmp169_ = vala_collection_get_size ((ValaCollection*) _tmp168_);
				_tmp170_ = _tmp169_;
				_value_size = _tmp170_;
				_value_index = -1;
				while (TRUE) {
					gint _tmp171_;
					gint _tmp172_;
					ValaTargetValue* value = NULL;
					ValaArrayList* _tmp173_;
					gpointer _tmp174_;
					ValaCCodeFunction* _tmp175_;
					ValaCCodeFunction* _tmp176_;
					ValaTargetValue* _tmp177_;
					ValaCCodeExpression* _tmp178_;
					ValaCCodeExpression* _tmp179_;
					_value_index = _value_index + 1;
					_tmp171_ = _value_index;
					_tmp172_ = _value_size;
					if (!(_tmp171_ < _tmp172_)) {
						break;
					}
					_tmp173_ = _value_list;
					_tmp174_ = vala_list_get ((ValaList*) _tmp173_, _value_index);
					value = (ValaTargetValue*) _tmp174_;
					_tmp175_ = vala_ccode_base_module_get_ccode (self);
					_tmp176_ = _tmp175_;
					_tmp177_ = value;
					_tmp178_ = vala_ccode_base_module_destroy_value (self, _tmp177_, FALSE);
					_tmp179_ = _tmp178_;
					vala_ccode_function_add_expression (_tmp176_, _tmp179_);
					_vala_ccode_node_unref0 (_tmp179_);
					_vala_target_value_unref0 (value);
				}
			}
			_tmp180_ = vala_ccode_base_module_get_temp_ref_values (self);
			_tmp181_ = _tmp180_;
			vala_collection_clear ((ValaCollection*) _tmp181_);
			vala_ccode_base_module_pop_context (self);
			_vala_ccode_node_unref0 (rhs);
		}
		_tmp185_ = vala_variable_get_variable_type ((ValaVariable*) f);
		_tmp186_ = _tmp185_;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp186_, VALA_TYPE_DELEGATE_TYPE)) {
			_tmp184_ = TRUE;
		} else {
			_tmp184_ = vala_get_ccode_delegate_target ((ValaCodeNode*) f);
		}
		if (_tmp184_) {
			ValaDataType* _tmp187_;
			ValaDataType* _tmp188_;
			_tmp187_ = vala_variable_get_variable_type ((ValaVariable*) f);
			_tmp188_ = _tmp187_;
			_tmp183_ = vala_ccode_base_module_requires_destroy (_tmp188_);
		} else {
			_tmp183_ = FALSE;
		}
		if (_tmp183_) {
			ValaCCodeBaseModuleEmitContext* _tmp189_;
			_tmp189_ = self->instance_finalize_context;
			_tmp182_ = _tmp189_ != NULL;
		} else {
			_tmp182_ = FALSE;
		}
		if (_tmp182_) {
			ValaCCodeBaseModuleEmitContext* _tmp190_;
			ValaCCodeFunction* _tmp191_;
			ValaCCodeFunction* _tmp192_;
			ValaSymbol* _tmp193_;
			ValaSymbol* _tmp194_;
			ValaTargetValue* _tmp195_;
			ValaTargetValue* _tmp196_;
			ValaCCodeExpression* _tmp197_;
			ValaCCodeExpression* _tmp198_;
			_tmp190_ = self->instance_finalize_context;
			vala_ccode_base_module_push_context (self, _tmp190_);
			_tmp191_ = vala_ccode_base_module_get_ccode (self);
			_tmp192_ = _tmp191_;
			_tmp193_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
			_tmp194_ = _tmp193_;
			_tmp195_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp194_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
			_tmp196_ = _tmp195_;
			_tmp197_ = vala_ccode_base_module_destroy_field (self, f, _tmp196_);
			_tmp198_ = _tmp197_;
			vala_ccode_function_add_expression (_tmp192_, _tmp198_);
			_vala_ccode_node_unref0 (_tmp198_);
			_vala_target_value_unref0 (_tmp196_);
			vala_ccode_base_module_pop_context (self);
		}
	} else {
		ValaMemberBinding _tmp199_;
		ValaMemberBinding _tmp200_;
		_tmp199_ = vala_field_get_binding (f);
		_tmp200_ = _tmp199_;
		if (_tmp200_ == VALA_MEMBER_BINDING_CLASS) {
			ValaSymbolAccessibility _tmp201_;
			ValaSymbolAccessibility _tmp202_;
			ValaExpression* _tmp222_;
			ValaExpression* _tmp223_;
			_tmp201_ = vala_symbol_get_access ((ValaSymbol*) f);
			_tmp202_ = _tmp201_;
			if (_tmp202_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
				ValaCCodeFunctionCall* ccall = NULL;
				ValaClass* _tmp203_;
				gchar* _tmp204_;
				gchar* _tmp205_;
				ValaCCodeIdentifier* _tmp206_;
				ValaCCodeIdentifier* _tmp207_;
				ValaCCodeFunctionCall* _tmp208_;
				ValaCCodeFunctionCall* _tmp209_;
				ValaCCodeFunctionCall* _tmp210_;
				ValaCCodeIdentifier* _tmp211_;
				ValaCCodeIdentifier* _tmp212_;
				ValaCCodeFunctionCall* _tmp213_;
				gchar* _tmp214_;
				gchar* _tmp215_;
				ValaCCodeMemberAccess* _tmp216_;
				_tmp203_ = cl;
				_tmp204_ = vala_get_ccode_class_get_private_function (_tmp203_);
				_tmp205_ = _tmp204_;
				_tmp206_ = vala_ccode_identifier_new (_tmp205_);
				_tmp207_ = _tmp206_;
				_tmp208_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp207_);
				_tmp209_ = _tmp208_;
				_vala_ccode_node_unref0 (_tmp207_);
				_g_free0 (_tmp205_);
				ccall = _tmp209_;
				_tmp210_ = ccall;
				_tmp211_ = vala_ccode_identifier_new ("klass");
				_tmp212_ = _tmp211_;
				vala_ccode_function_call_add_argument (_tmp210_, (ValaCCodeExpression*) _tmp212_);
				_vala_ccode_node_unref0 (_tmp212_);
				_tmp213_ = ccall;
				_tmp214_ = vala_get_ccode_name ((ValaCodeNode*) f);
				_tmp215_ = _tmp214_;
				_tmp216_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp213_, _tmp215_, TRUE);
				_vala_ccode_node_unref0 (lhs);
				lhs = (ValaCCodeExpression*) _tmp216_;
				_g_free0 (_tmp215_);
				_vala_ccode_node_unref0 (ccall);
			} else {
				ValaCCodeIdentifier* _tmp217_;
				ValaCCodeIdentifier* _tmp218_;
				gchar* _tmp219_;
				gchar* _tmp220_;
				ValaCCodeMemberAccess* _tmp221_;
				_tmp217_ = vala_ccode_identifier_new ("klass");
				_tmp218_ = _tmp217_;
				_tmp219_ = vala_get_ccode_name ((ValaCodeNode*) f);
				_tmp220_ = _tmp219_;
				_tmp221_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp218_, _tmp220_, TRUE);
				_vala_ccode_node_unref0 (lhs);
				lhs = (ValaCCodeExpression*) _tmp221_;
				_g_free0 (_tmp220_);
				_vala_ccode_node_unref0 (_tmp218_);
			}
			_tmp222_ = vala_variable_get_initializer ((ValaVariable*) f);
			_tmp223_ = _tmp222_;
			if (_tmp223_ != NULL) {
				ValaCCodeBaseModuleEmitContext* _tmp224_;
				ValaExpression* _tmp225_;
				ValaExpression* _tmp226_;
				ValaCCodeExpression* rhs = NULL;
				ValaExpression* _tmp227_;
				ValaExpression* _tmp228_;
				ValaCCodeExpression* _tmp229_;
				ValaCCodeExpression* _tmp230_;
				ValaCCodeFunction* _tmp231_;
				ValaCCodeFunction* _tmp232_;
				ValaCCodeExpression* _tmp233_;
				ValaCCodeExpression* _tmp234_;
				ValaArrayList* _tmp249_;
				ValaArrayList* _tmp250_;
				_tmp224_ = self->class_init_context;
				vala_ccode_base_module_push_context (self, _tmp224_);
				_tmp225_ = vala_variable_get_initializer ((ValaVariable*) f);
				_tmp226_ = _tmp225_;
				vala_code_node_emit ((ValaCodeNode*) _tmp226_, (ValaCodeGenerator*) self);
				_tmp227_ = vala_variable_get_initializer ((ValaVariable*) f);
				_tmp228_ = _tmp227_;
				_tmp229_ = vala_get_cvalue (_tmp228_);
				_tmp230_ = _vala_ccode_node_ref0 (_tmp229_);
				rhs = _tmp230_;
				_tmp231_ = vala_ccode_base_module_get_ccode (self);
				_tmp232_ = _tmp231_;
				_tmp233_ = lhs;
				_tmp234_ = rhs;
				vala_ccode_function_add_assignment (_tmp232_, _tmp233_, _tmp234_);
				{
					ValaArrayList* _value_list = NULL;
					ValaArrayList* _tmp235_;
					ValaArrayList* _tmp236_;
					gint _value_size = 0;
					ValaArrayList* _tmp237_;
					gint _tmp238_;
					gint _tmp239_;
					gint _value_index = 0;
					_tmp235_ = vala_ccode_base_module_get_temp_ref_values (self);
					_tmp236_ = _tmp235_;
					_value_list = _tmp236_;
					_tmp237_ = _value_list;
					_tmp238_ = vala_collection_get_size ((ValaCollection*) _tmp237_);
					_tmp239_ = _tmp238_;
					_value_size = _tmp239_;
					_value_index = -1;
					while (TRUE) {
						gint _tmp240_;
						gint _tmp241_;
						ValaTargetValue* value = NULL;
						ValaArrayList* _tmp242_;
						gpointer _tmp243_;
						ValaCCodeFunction* _tmp244_;
						ValaCCodeFunction* _tmp245_;
						ValaTargetValue* _tmp246_;
						ValaCCodeExpression* _tmp247_;
						ValaCCodeExpression* _tmp248_;
						_value_index = _value_index + 1;
						_tmp240_ = _value_index;
						_tmp241_ = _value_size;
						if (!(_tmp240_ < _tmp241_)) {
							break;
						}
						_tmp242_ = _value_list;
						_tmp243_ = vala_list_get ((ValaList*) _tmp242_, _value_index);
						value = (ValaTargetValue*) _tmp243_;
						_tmp244_ = vala_ccode_base_module_get_ccode (self);
						_tmp245_ = _tmp244_;
						_tmp246_ = value;
						_tmp247_ = vala_ccode_base_module_destroy_value (self, _tmp246_, FALSE);
						_tmp248_ = _tmp247_;
						vala_ccode_function_add_expression (_tmp245_, _tmp248_);
						_vala_ccode_node_unref0 (_tmp248_);
						_vala_target_value_unref0 (value);
					}
				}
				_tmp249_ = vala_ccode_base_module_get_temp_ref_values (self);
				_tmp250_ = _tmp249_;
				vala_collection_clear ((ValaCollection*) _tmp250_);
				vala_ccode_base_module_pop_context (self);
				_vala_ccode_node_unref0 (rhs);
			}
		} else {
			ValaCCodeFile* _tmp251_;
			gboolean _tmp254_;
			gboolean _tmp255_;
			_tmp251_ = self->cfile;
			vala_ccode_base_module_generate_field_declaration (self, f, _tmp251_);
			if (!vala_symbol_is_internal_symbol ((ValaSymbol*) f)) {
				ValaCCodeFile* _tmp252_;
				_tmp252_ = self->header_file;
				vala_ccode_base_module_generate_field_declaration (self, f, _tmp252_);
			}
			if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
				ValaCCodeFile* _tmp253_;
				_tmp253_ = self->internal_header_file;
				vala_ccode_base_module_generate_field_declaration (self, f, _tmp253_);
			}
			_tmp254_ = vala_symbol_get_external ((ValaSymbol*) f);
			_tmp255_ = _tmp254_;
			if (!_tmp255_) {
				gchar* _tmp256_;
				gchar* _tmp257_;
				ValaCCodeIdentifier* _tmp258_;
				ValaCCodeVariableDeclarator* var_decl = NULL;
				gchar* _tmp259_;
				gchar* _tmp260_;
				ValaDataType* _tmp261_;
				ValaDataType* _tmp262_;
				ValaCCodeDeclaratorSuffix* _tmp263_;
				ValaCCodeDeclaratorSuffix* _tmp264_;
				ValaCCodeVariableDeclarator* _tmp265_;
				ValaCCodeVariableDeclarator* _tmp266_;
				ValaCCodeVariableDeclarator* _tmp267_;
				ValaDataType* _tmp268_;
				ValaDataType* _tmp269_;
				ValaCCodeExpression* _tmp270_;
				ValaCCodeExpression* _tmp271_;
				ValaCCodeBaseModuleEmitContext* _tmp272_;
				ValaExpression* _tmp276_;
				ValaExpression* _tmp277_;
				ValaCCodeDeclaration* var_def = NULL;
				ValaDataType* _tmp287_;
				ValaDataType* _tmp288_;
				gchar* _tmp289_;
				gchar* _tmp290_;
				ValaCCodeDeclaration* _tmp291_;
				ValaCCodeDeclaration* _tmp292_;
				ValaCCodeDeclaration* _tmp293_;
				ValaCCodeVariableDeclarator* _tmp294_;
				ValaVersionAttribute* _tmp297_;
				ValaVersionAttribute* _tmp298_;
				gboolean _tmp299_;
				gboolean _tmp300_;
				gboolean _tmp305_;
				gboolean _tmp306_;
				ValaCCodeFile* _tmp311_;
				ValaCCodeDeclaration* _tmp312_;
				gboolean _tmp313_ = FALSE;
				ValaDataType* _tmp314_;
				ValaDataType* _tmp315_;
				ValaExpression* _tmp400_;
				ValaExpression* _tmp401_;
				_tmp256_ = vala_get_ccode_name ((ValaCodeNode*) f);
				_tmp257_ = _tmp256_;
				_tmp258_ = vala_ccode_identifier_new (_tmp257_);
				_vala_ccode_node_unref0 (lhs);
				lhs = (ValaCCodeExpression*) _tmp258_;
				_g_free0 (_tmp257_);
				_tmp259_ = vala_get_ccode_name ((ValaCodeNode*) f);
				_tmp260_ = _tmp259_;
				_tmp261_ = vala_variable_get_variable_type ((ValaVariable*) f);
				_tmp262_ = _tmp261_;
				_tmp263_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp262_);
				_tmp264_ = _tmp263_;
				_tmp265_ = vala_ccode_variable_declarator_new (_tmp260_, NULL, _tmp264_);
				_tmp266_ = _tmp265_;
				_vala_ccode_declarator_suffix_unref0 (_tmp264_);
				_g_free0 (_tmp260_);
				var_decl = _tmp266_;
				_tmp267_ = var_decl;
				_tmp268_ = vala_variable_get_variable_type ((ValaVariable*) f);
				_tmp269_ = _tmp268_;
				_tmp270_ = vala_ccode_base_module_default_value_for_type (self, _tmp269_, TRUE, FALSE);
				_tmp271_ = _tmp270_;
				vala_ccode_variable_declarator_set_initializer (_tmp267_, _tmp271_);
				_vala_ccode_node_unref0 (_tmp271_);
				_tmp272_ = self->class_init_context;
				if (_tmp272_ != NULL) {
					ValaCCodeBaseModuleEmitContext* _tmp273_;
					_tmp273_ = self->class_init_context;
					vala_ccode_base_module_push_context (self, _tmp273_);
				} else {
					ValaCCodeBaseModuleEmitContext* _tmp274_;
					ValaCCodeBaseModuleEmitContext* _tmp275_;
					_tmp274_ = vala_ccode_base_module_emit_context_new (NULL);
					_tmp275_ = _tmp274_;
					vala_ccode_base_module_push_context (self, _tmp275_);
					_vala_ccode_base_module_emit_context_unref0 (_tmp275_);
				}
				_tmp276_ = vala_variable_get_initializer ((ValaVariable*) f);
				_tmp277_ = _tmp276_;
				if (_tmp277_ != NULL) {
					ValaExpression* _tmp278_;
					ValaExpression* _tmp279_;
					ValaCCodeExpression* init = NULL;
					ValaExpression* _tmp280_;
					ValaExpression* _tmp281_;
					ValaCCodeExpression* _tmp282_;
					ValaCCodeExpression* _tmp283_;
					ValaCCodeExpression* _tmp284_;
					_tmp278_ = vala_variable_get_initializer ((ValaVariable*) f);
					_tmp279_ = _tmp278_;
					vala_code_node_emit ((ValaCodeNode*) _tmp279_, (ValaCodeGenerator*) self);
					_tmp280_ = vala_variable_get_initializer ((ValaVariable*) f);
					_tmp281_ = _tmp280_;
					_tmp282_ = vala_get_cvalue (_tmp281_);
					_tmp283_ = _vala_ccode_node_ref0 (_tmp282_);
					init = _tmp283_;
					_tmp284_ = init;
					if (vala_ccode_base_module_is_constant_ccode_expression (_tmp284_)) {
						ValaCCodeVariableDeclarator* _tmp285_;
						ValaCCodeExpression* _tmp286_;
						_tmp285_ = var_decl;
						_tmp286_ = init;
						vala_ccode_variable_declarator_set_initializer (_tmp285_, _tmp286_);
					}
					_vala_ccode_node_unref0 (init);
				}
				_tmp287_ = vala_variable_get_variable_type ((ValaVariable*) f);
				_tmp288_ = _tmp287_;
				_tmp289_ = vala_get_ccode_name ((ValaCodeNode*) _tmp288_);
				_tmp290_ = _tmp289_;
				_tmp291_ = vala_ccode_declaration_new (_tmp290_);
				_tmp292_ = _tmp291_;
				_g_free0 (_tmp290_);
				var_def = _tmp292_;
				_tmp293_ = var_def;
				_tmp294_ = var_decl;
				vala_ccode_declaration_add_declarator (_tmp293_, (ValaCCodeDeclarator*) _tmp294_);
				if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
					ValaCCodeDeclaration* _tmp295_;
					_tmp295_ = var_def;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp295_, VALA_CCODE_MODIFIERS_EXTERN);
					self->requires_vala_extern = TRUE;
				} else {
					ValaCCodeDeclaration* _tmp296_;
					_tmp296_ = var_def;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp296_, VALA_CCODE_MODIFIERS_STATIC);
				}
				_tmp297_ = vala_symbol_get_version ((ValaSymbol*) f);
				_tmp298_ = _tmp297_;
				_tmp299_ = vala_version_attribute_get_deprecated (_tmp298_);
				_tmp300_ = _tmp299_;
				if (_tmp300_) {
					ValaCCodeDeclaration* _tmp301_;
					ValaCCodeDeclaration* _tmp302_;
					ValaCCodeModifiers _tmp303_;
					ValaCCodeModifiers _tmp304_;
					_tmp301_ = var_def;
					_tmp302_ = var_def;
					_tmp303_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp302_);
					_tmp304_ = _tmp303_;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp302_, _tmp304_ | VALA_CCODE_MODIFIERS_DEPRECATED);
				}
				_tmp305_ = vala_field_get_is_volatile (f);
				_tmp306_ = _tmp305_;
				if (_tmp306_) {
					ValaCCodeDeclaration* _tmp307_;
					ValaCCodeDeclaration* _tmp308_;
					ValaCCodeModifiers _tmp309_;
					ValaCCodeModifiers _tmp310_;
					_tmp307_ = var_def;
					_tmp308_ = var_def;
					_tmp309_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp308_);
					_tmp310_ = _tmp309_;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp308_, _tmp310_ | VALA_CCODE_MODIFIERS_VOLATILE);
				}
				_tmp311_ = self->cfile;
				_tmp312_ = var_def;
				vala_ccode_file_add_type_member_declaration (_tmp311_, (ValaCCodeNode*) _tmp312_);
				_tmp314_ = vala_variable_get_variable_type ((ValaVariable*) f);
				_tmp315_ = _tmp314_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp315_, VALA_TYPE_ARRAY_TYPE)) {
					_tmp313_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
				} else {
					_tmp313_ = FALSE;
				}
				if (_tmp313_) {
					ValaArrayType* array_type = NULL;
					ValaDataType* _tmp316_;
					ValaDataType* _tmp317_;
					ValaArrayType* _tmp318_;
					ValaArrayType* _tmp319_;
					gboolean _tmp320_;
					gboolean _tmp321_;
					_tmp316_ = vala_variable_get_variable_type ((ValaVariable*) f);
					_tmp317_ = _tmp316_;
					_tmp318_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp317_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
					array_type = _tmp318_;
					_tmp319_ = array_type;
					_tmp320_ = vala_array_type_get_fixed_length (_tmp319_);
					_tmp321_ = _tmp320_;
					if (!_tmp321_) {
						gchar* length_ctype = NULL;
						gchar* _tmp322_;
						gboolean _tmp341_ = FALSE;
						ValaArrayType* _tmp342_;
						gint _tmp343_;
						gint _tmp344_;
						_tmp322_ = vala_get_ccode_array_length_type ((ValaCodeNode*) f);
						length_ctype = _tmp322_;
						{
							gint dim = 0;
							dim = 1;
							{
								gboolean _tmp323_ = FALSE;
								_tmp323_ = TRUE;
								while (TRUE) {
									ValaArrayType* _tmp325_;
									gint _tmp326_;
									gint _tmp327_;
									ValaCCodeDeclaration* len_def = NULL;
									const gchar* _tmp328_;
									ValaCCodeDeclaration* _tmp329_;
									ValaCCodeDeclaration* _tmp330_;
									gchar* _tmp331_;
									gchar* _tmp332_;
									ValaCCodeConstant* _tmp333_;
									ValaCCodeConstant* _tmp334_;
									ValaCCodeVariableDeclarator* _tmp335_;
									ValaCCodeVariableDeclarator* _tmp336_;
									ValaCCodeFile* _tmp339_;
									ValaCCodeDeclaration* _tmp340_;
									if (!_tmp323_) {
										gint _tmp324_;
										_tmp324_ = dim;
										dim = _tmp324_ + 1;
									}
									_tmp323_ = FALSE;
									_tmp325_ = array_type;
									_tmp326_ = vala_array_type_get_rank (_tmp325_);
									_tmp327_ = _tmp326_;
									if (!(dim <= _tmp327_)) {
										break;
									}
									_tmp328_ = length_ctype;
									_tmp329_ = vala_ccode_declaration_new (_tmp328_);
									len_def = _tmp329_;
									_tmp330_ = len_def;
									_tmp331_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) f, dim);
									_tmp332_ = _tmp331_;
									_tmp333_ = vala_ccode_constant_new ("0");
									_tmp334_ = _tmp333_;
									_tmp335_ = vala_ccode_variable_declarator_new (_tmp332_, (ValaCCodeExpression*) _tmp334_, NULL);
									_tmp336_ = _tmp335_;
									vala_ccode_declaration_add_declarator (_tmp330_, (ValaCCodeDeclarator*) _tmp336_);
									_vala_ccode_node_unref0 (_tmp336_);
									_vala_ccode_node_unref0 (_tmp334_);
									_g_free0 (_tmp332_);
									if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
										ValaCCodeDeclaration* _tmp337_;
										_tmp337_ = len_def;
										vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp337_, VALA_CCODE_MODIFIERS_EXTERN);
										self->requires_vala_extern = TRUE;
									} else {
										ValaCCodeDeclaration* _tmp338_;
										_tmp338_ = len_def;
										vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp338_, VALA_CCODE_MODIFIERS_STATIC);
									}
									_tmp339_ = self->cfile;
									_tmp340_ = len_def;
									vala_ccode_file_add_type_member_declaration (_tmp339_, (ValaCCodeNode*) _tmp340_);
									_vala_ccode_node_unref0 (len_def);
								}
							}
						}
						_tmp342_ = array_type;
						_tmp343_ = vala_array_type_get_rank (_tmp342_);
						_tmp344_ = _tmp343_;
						if (_tmp344_ == 1) {
							_tmp341_ = vala_symbol_is_internal_symbol ((ValaSymbol*) f);
						} else {
							_tmp341_ = FALSE;
						}
						if (_tmp341_) {
							ValaCCodeDeclaration* _cdecl_ = NULL;
							const gchar* _tmp345_;
							ValaCCodeDeclaration* _tmp346_;
							ValaCCodeDeclaration* _tmp347_;
							gchar* _tmp348_;
							gchar* _tmp349_;
							gchar* _tmp350_;
							gchar* _tmp351_;
							ValaCCodeConstant* _tmp352_;
							ValaCCodeConstant* _tmp353_;
							ValaCCodeVariableDeclarator* _tmp354_;
							ValaCCodeVariableDeclarator* _tmp355_;
							ValaCCodeDeclaration* _tmp356_;
							ValaCCodeFile* _tmp357_;
							ValaCCodeDeclaration* _tmp358_;
							_tmp345_ = length_ctype;
							_tmp346_ = vala_ccode_declaration_new (_tmp345_);
							_cdecl_ = _tmp346_;
							_tmp347_ = _cdecl_;
							_tmp348_ = vala_get_ccode_name ((ValaCodeNode*) f);
							_tmp349_ = _tmp348_;
							_tmp350_ = vala_ccode_base_module_get_array_size_cname (self, _tmp349_);
							_tmp351_ = _tmp350_;
							_tmp352_ = vala_ccode_constant_new ("0");
							_tmp353_ = _tmp352_;
							_tmp354_ = vala_ccode_variable_declarator_new (_tmp351_, (ValaCCodeExpression*) _tmp353_, NULL);
							_tmp355_ = _tmp354_;
							vala_ccode_declaration_add_declarator (_tmp347_, (ValaCCodeDeclarator*) _tmp355_);
							_vala_ccode_node_unref0 (_tmp355_);
							_vala_ccode_node_unref0 (_tmp353_);
							_g_free0 (_tmp351_);
							_g_free0 (_tmp349_);
							_tmp356_ = _cdecl_;
							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp356_, VALA_CCODE_MODIFIERS_STATIC);
							_tmp357_ = self->cfile;
							_tmp358_ = _cdecl_;
							vala_ccode_file_add_type_member_declaration (_tmp357_, (ValaCCodeNode*) _tmp358_);
							_vala_ccode_node_unref0 (_cdecl_);
						}
						_g_free0 (length_ctype);
					}
					_vala_code_node_unref0 (array_type);
				} else {
					if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
						ValaDelegateType* delegate_type = NULL;
						ValaDataType* _tmp359_;
						ValaDataType* _tmp360_;
						ValaDelegateType* _tmp361_;
						ValaDelegateType* _tmp362_;
						ValaDelegate* _tmp363_;
						ValaDelegate* _tmp364_;
						gboolean _tmp365_;
						gboolean _tmp366_;
						_tmp359_ = vala_variable_get_variable_type ((ValaVariable*) f);
						_tmp360_ = _tmp359_;
						_tmp361_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp360_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
						delegate_type = _tmp361_;
						_tmp362_ = delegate_type;
						_tmp363_ = vala_delegate_type_get_delegate_symbol (_tmp362_);
						_tmp364_ = _tmp363_;
						_tmp365_ = vala_delegate_get_has_target (_tmp364_);
						_tmp366_ = _tmp365_;
						if (_tmp366_) {
							ValaCCodeDeclaration* target_def = NULL;
							ValaDataType* _tmp367_;
							gchar* _tmp368_;
							gchar* _tmp369_;
							ValaCCodeDeclaration* _tmp370_;
							ValaCCodeDeclaration* _tmp371_;
							ValaCCodeDeclaration* _tmp372_;
							gchar* _tmp373_;
							gchar* _tmp374_;
							ValaCCodeConstant* _tmp375_;
							ValaCCodeConstant* _tmp376_;
							ValaCCodeVariableDeclarator* _tmp377_;
							ValaCCodeVariableDeclarator* _tmp378_;
							ValaCCodeFile* _tmp381_;
							ValaCCodeDeclaration* _tmp382_;
							ValaDelegateType* _tmp383_;
							_tmp367_ = self->delegate_target_type;
							_tmp368_ = vala_get_ccode_name ((ValaCodeNode*) _tmp367_);
							_tmp369_ = _tmp368_;
							_tmp370_ = vala_ccode_declaration_new (_tmp369_);
							_tmp371_ = _tmp370_;
							_g_free0 (_tmp369_);
							target_def = _tmp371_;
							_tmp372_ = target_def;
							_tmp373_ = vala_get_ccode_delegate_target_name ((ValaVariable*) f);
							_tmp374_ = _tmp373_;
							_tmp375_ = vala_ccode_constant_new ("NULL");
							_tmp376_ = _tmp375_;
							_tmp377_ = vala_ccode_variable_declarator_new (_tmp374_, (ValaCCodeExpression*) _tmp376_, NULL);
							_tmp378_ = _tmp377_;
							vala_ccode_declaration_add_declarator (_tmp372_, (ValaCCodeDeclarator*) _tmp378_);
							_vala_ccode_node_unref0 (_tmp378_);
							_vala_ccode_node_unref0 (_tmp376_);
							_g_free0 (_tmp374_);
							if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
								ValaCCodeDeclaration* _tmp379_;
								_tmp379_ = target_def;
								vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp379_, VALA_CCODE_MODIFIERS_EXTERN);
								self->requires_vala_extern = TRUE;
							} else {
								ValaCCodeDeclaration* _tmp380_;
								_tmp380_ = target_def;
								vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp380_, VALA_CCODE_MODIFIERS_STATIC);
							}
							_tmp381_ = self->cfile;
							_tmp382_ = target_def;
							vala_ccode_file_add_type_member_declaration (_tmp381_, (ValaCCodeNode*) _tmp382_);
							_tmp383_ = delegate_type;
							if (vala_data_type_is_disposable ((ValaDataType*) _tmp383_)) {
								ValaCCodeDeclaration* target_destroy_notify_def = NULL;
								ValaDelegateType* _tmp384_;
								gchar* _tmp385_;
								gchar* _tmp386_;
								ValaCCodeDeclaration* _tmp387_;
								ValaCCodeDeclaration* _tmp388_;
								ValaCCodeDeclaration* _tmp389_;
								gchar* _tmp390_;
								gchar* _tmp391_;
								ValaCCodeConstant* _tmp392_;
								ValaCCodeConstant* _tmp393_;
								ValaCCodeVariableDeclarator* _tmp394_;
								ValaCCodeVariableDeclarator* _tmp395_;
								ValaCCodeFile* _tmp398_;
								ValaCCodeDeclaration* _tmp399_;
								_tmp384_ = self->delegate_target_destroy_type;
								_tmp385_ = vala_get_ccode_name ((ValaCodeNode*) _tmp384_);
								_tmp386_ = _tmp385_;
								_tmp387_ = vala_ccode_declaration_new (_tmp386_);
								_tmp388_ = _tmp387_;
								_g_free0 (_tmp386_);
								target_destroy_notify_def = _tmp388_;
								_tmp389_ = target_destroy_notify_def;
								_tmp390_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) f);
								_tmp391_ = _tmp390_;
								_tmp392_ = vala_ccode_constant_new ("NULL");
								_tmp393_ = _tmp392_;
								_tmp394_ = vala_ccode_variable_declarator_new (_tmp391_, (ValaCCodeExpression*) _tmp393_, NULL);
								_tmp395_ = _tmp394_;
								vala_ccode_declaration_add_declarator (_tmp389_, (ValaCCodeDeclarator*) _tmp395_);
								_vala_ccode_node_unref0 (_tmp395_);
								_vala_ccode_node_unref0 (_tmp393_);
								_g_free0 (_tmp391_);
								if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
									ValaCCodeDeclaration* _tmp396_;
									_tmp396_ = target_destroy_notify_def;
									vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp396_, VALA_CCODE_MODIFIERS_EXTERN);
									self->requires_vala_extern = TRUE;
								} else {
									ValaCCodeDeclaration* _tmp397_;
									_tmp397_ = target_destroy_notify_def;
									vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp397_, VALA_CCODE_MODIFIERS_STATIC);
								}
								_tmp398_ = self->cfile;
								_tmp399_ = target_destroy_notify_def;
								vala_ccode_file_add_type_member_declaration (_tmp398_, (ValaCCodeNode*) _tmp399_);
								_vala_ccode_node_unref0 (target_destroy_notify_def);
							}
							_vala_ccode_node_unref0 (target_def);
						}
						_vala_code_node_unref0 (delegate_type);
					}
				}
				_tmp400_ = vala_variable_get_initializer ((ValaVariable*) f);
				_tmp401_ = _tmp400_;
				if (_tmp401_ != NULL) {
					ValaCCodeExpression* rhs = NULL;
					ValaExpression* _tmp402_;
					ValaExpression* _tmp403_;
					ValaCCodeExpression* _tmp404_;
					ValaCCodeExpression* _tmp405_;
					ValaCCodeExpression* _tmp406_;
					_tmp402_ = vala_variable_get_initializer ((ValaVariable*) f);
					_tmp403_ = _tmp402_;
					_tmp404_ = vala_get_cvalue (_tmp403_);
					_tmp405_ = _vala_ccode_node_ref0 (_tmp404_);
					rhs = _tmp405_;
					_tmp406_ = rhs;
					if (!vala_ccode_base_module_is_constant_ccode_expression (_tmp406_)) {
						if (is_gtypeinstance) {
							ValaExpression* _tmp407_;
							ValaExpression* _tmp408_;
							gboolean _tmp441_ = FALSE;
							ValaDataType* _tmp442_;
							ValaDataType* _tmp443_;
							_tmp407_ = vala_variable_get_initializer ((ValaVariable*) f);
							_tmp408_ = _tmp407_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp408_, VALA_TYPE_INITIALIZER_LIST)) {
								ValaCCodeFunction* _tmp409_;
								ValaCCodeFunction* _tmp410_;
								ValaLocalVariable* temp_decl = NULL;
								ValaDataType* _tmp411_;
								ValaDataType* _tmp412_;
								ValaLocalVariable* _tmp413_;
								ValaCCodeVariableDeclarator* vardecl = NULL;
								ValaLocalVariable* _tmp414_;
								const gchar* _tmp415_;
								const gchar* _tmp416_;
								ValaCCodeExpression* _tmp417_;
								ValaCCodeVariableDeclarator* _tmp418_;
								ValaCCodeFunction* _tmp419_;
								ValaCCodeFunction* _tmp420_;
								ValaLocalVariable* _tmp421_;
								ValaDataType* _tmp422_;
								ValaDataType* _tmp423_;
								gchar* _tmp424_;
								gchar* _tmp425_;
								ValaCCodeVariableDeclarator* _tmp426_;
								ValaCCodeExpression* tmp = NULL;
								ValaLocalVariable* _tmp427_;
								const gchar* _tmp428_;
								const gchar* _tmp429_;
								ValaCCodeExpression* _tmp430_;
								ValaCCodeFunction* _tmp431_;
								ValaCCodeFunction* _tmp432_;
								ValaCCodeExpression* _tmp433_;
								ValaCCodeExpression* _tmp434_;
								ValaCCodeFunction* _tmp435_;
								ValaCCodeFunction* _tmp436_;
								_tmp409_ = vala_ccode_base_module_get_ccode (self);
								_tmp410_ = _tmp409_;
								vala_ccode_function_open_block (_tmp410_);
								_tmp411_ = vala_variable_get_variable_type ((ValaVariable*) f);
								_tmp412_ = _tmp411_;
								_tmp413_ = vala_ccode_base_module_get_temp_variable (self, _tmp412_, TRUE, NULL, FALSE);
								temp_decl = _tmp413_;
								_tmp414_ = temp_decl;
								_tmp415_ = vala_symbol_get_name ((ValaSymbol*) _tmp414_);
								_tmp416_ = _tmp415_;
								_tmp417_ = rhs;
								_tmp418_ = vala_ccode_variable_declarator_new_zero (_tmp416_, _tmp417_, NULL);
								vardecl = _tmp418_;
								_tmp419_ = vala_ccode_base_module_get_ccode (self);
								_tmp420_ = _tmp419_;
								_tmp421_ = temp_decl;
								_tmp422_ = vala_variable_get_variable_type ((ValaVariable*) _tmp421_);
								_tmp423_ = _tmp422_;
								_tmp424_ = vala_get_ccode_name ((ValaCodeNode*) _tmp423_);
								_tmp425_ = _tmp424_;
								_tmp426_ = vardecl;
								vala_ccode_function_add_declaration (_tmp420_, _tmp425_, (ValaCCodeDeclarator*) _tmp426_, 0);
								_g_free0 (_tmp425_);
								_tmp427_ = temp_decl;
								_tmp428_ = vala_symbol_get_name ((ValaSymbol*) _tmp427_);
								_tmp429_ = _tmp428_;
								_tmp430_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp429_);
								tmp = _tmp430_;
								_tmp431_ = vala_ccode_base_module_get_ccode (self);
								_tmp432_ = _tmp431_;
								_tmp433_ = lhs;
								_tmp434_ = tmp;
								vala_ccode_function_add_assignment (_tmp432_, _tmp433_, _tmp434_);
								_tmp435_ = vala_ccode_base_module_get_ccode (self);
								_tmp436_ = _tmp435_;
								vala_ccode_function_close (_tmp436_);
								_vala_ccode_node_unref0 (tmp);
								_vala_ccode_node_unref0 (vardecl);
								_vala_code_node_unref0 (temp_decl);
							} else {
								ValaCCodeFunction* _tmp437_;
								ValaCCodeFunction* _tmp438_;
								ValaCCodeExpression* _tmp439_;
								ValaCCodeExpression* _tmp440_;
								_tmp437_ = vala_ccode_base_module_get_ccode (self);
								_tmp438_ = _tmp437_;
								_tmp439_ = lhs;
								_tmp440_ = rhs;
								vala_ccode_function_add_assignment (_tmp438_, _tmp439_, _tmp440_);
							}
							_tmp442_ = vala_variable_get_variable_type ((ValaVariable*) f);
							_tmp443_ = _tmp442_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp443_, VALA_TYPE_ARRAY_TYPE)) {
								_tmp441_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
							} else {
								_tmp441_ = FALSE;
							}
							if (_tmp441_) {
								ValaArrayType* array_type = NULL;
								ValaDataType* _tmp444_;
								ValaDataType* _tmp445_;
								ValaArrayType* _tmp446_;
								ValaTargetValue* field_value = NULL;
								ValaTargetValue* _tmp447_;
								ValaGLibValue* glib_value = NULL;
								ValaExpression* _tmp448_;
								ValaExpression* _tmp449_;
								ValaTargetValue* _tmp450_;
								ValaTargetValue* _tmp451_;
								ValaGLibValue* _tmp452_;
								ValaGLibValue* _tmp453_;
								ValaList* _tmp454_;
								_tmp444_ = vala_variable_get_variable_type ((ValaVariable*) f);
								_tmp445_ = _tmp444_;
								_tmp446_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp445_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
								array_type = _tmp446_;
								_tmp447_ = vala_ccode_base_module_get_field_cvalue (self, f, NULL);
								field_value = _tmp447_;
								_tmp448_ = vala_variable_get_initializer ((ValaVariable*) f);
								_tmp449_ = _tmp448_;
								_tmp450_ = vala_expression_get_target_value (_tmp449_);
								_tmp451_ = _tmp450_;
								_tmp452_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp451_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
								glib_value = _tmp452_;
								_tmp453_ = glib_value;
								_tmp454_ = _tmp453_->array_length_cvalues;
								if (_tmp454_ != NULL) {
									{
										gint dim = 0;
										dim = 1;
										{
											gboolean _tmp455_ = FALSE;
											_tmp455_ = TRUE;
											while (TRUE) {
												ValaArrayType* _tmp457_;
												gint _tmp458_;
												gint _tmp459_;
												ValaCCodeExpression* array_len_lhs = NULL;
												ValaTargetValue* _tmp460_;
												ValaCCodeExpression* _tmp461_;
												ValaCCodeFunction* _tmp462_;
												ValaCCodeFunction* _tmp463_;
												ValaCCodeExpression* _tmp464_;
												ValaGLibValue* _tmp465_;
												ValaCCodeExpression* _tmp466_;
												ValaCCodeExpression* _tmp467_;
												if (!_tmp455_) {
													gint _tmp456_;
													_tmp456_ = dim;
													dim = _tmp456_ + 1;
												}
												_tmp455_ = FALSE;
												_tmp457_ = array_type;
												_tmp458_ = vala_array_type_get_rank (_tmp457_);
												_tmp459_ = _tmp458_;
												if (!(dim <= _tmp459_)) {
													break;
												}
												_tmp460_ = field_value;
												_tmp461_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp460_, dim);
												array_len_lhs = _tmp461_;
												_tmp462_ = vala_ccode_base_module_get_ccode (self);
												_tmp463_ = _tmp462_;
												_tmp464_ = array_len_lhs;
												_tmp465_ = glib_value;
												_tmp466_ = vala_ccode_base_module_get_array_length_cvalue (self, (ValaTargetValue*) _tmp465_, dim);
												_tmp467_ = _tmp466_;
												vala_ccode_function_add_assignment (_tmp463_, _tmp464_, _tmp467_);
												_vala_ccode_node_unref0 (_tmp467_);
												_vala_ccode_node_unref0 (array_len_lhs);
											}
										}
									}
								} else {
									ValaGLibValue* _tmp468_;
									_tmp468_ = glib_value;
									if (_tmp468_->array_null_terminated) {
										ValaCCodeFunctionCall* len_call = NULL;
										ValaCCodeIdentifier* _tmp469_;
										ValaCCodeIdentifier* _tmp470_;
										ValaCCodeFunctionCall* _tmp471_;
										ValaCCodeFunctionCall* _tmp472_;
										ValaCCodeFunctionCall* _tmp473_;
										ValaGLibValue* _tmp474_;
										ValaCCodeExpression* _tmp475_;
										ValaCCodeFunction* _tmp476_;
										ValaCCodeFunction* _tmp477_;
										ValaTargetValue* _tmp478_;
										ValaCCodeExpression* _tmp479_;
										ValaCCodeExpression* _tmp480_;
										ValaCCodeFunctionCall* _tmp481_;
										self->requires_array_length = TRUE;
										_tmp469_ = vala_ccode_identifier_new ("_vala_array_length");
										_tmp470_ = _tmp469_;
										_tmp471_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp470_);
										_tmp472_ = _tmp471_;
										_vala_ccode_node_unref0 (_tmp470_);
										len_call = _tmp472_;
										_tmp473_ = len_call;
										_tmp474_ = glib_value;
										_tmp475_ = vala_get_cvalue_ ((ValaTargetValue*) _tmp474_);
										vala_ccode_function_call_add_argument (_tmp473_, _tmp475_);
										_tmp476_ = vala_ccode_base_module_get_ccode (self);
										_tmp477_ = _tmp476_;
										_tmp478_ = field_value;
										_tmp479_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp478_, 1);
										_tmp480_ = _tmp479_;
										_tmp481_ = len_call;
										vala_ccode_function_add_assignment (_tmp477_, _tmp480_, (ValaCCodeExpression*) _tmp481_);
										_vala_ccode_node_unref0 (_tmp480_);
										_vala_ccode_node_unref0 (len_call);
									} else {
										{
											gint dim = 0;
											dim = 1;
											{
												gboolean _tmp482_ = FALSE;
												_tmp482_ = TRUE;
												while (TRUE) {
													ValaArrayType* _tmp484_;
													gint _tmp485_;
													gint _tmp486_;
													ValaCCodeFunction* _tmp487_;
													ValaCCodeFunction* _tmp488_;
													ValaTargetValue* _tmp489_;
													ValaCCodeExpression* _tmp490_;
													ValaCCodeExpression* _tmp491_;
													ValaCCodeConstant* _tmp492_;
													ValaCCodeConstant* _tmp493_;
													if (!_tmp482_) {
														gint _tmp483_;
														_tmp483_ = dim;
														dim = _tmp483_ + 1;
													}
													_tmp482_ = FALSE;
													_tmp484_ = array_type;
													_tmp485_ = vala_array_type_get_rank (_tmp484_);
													_tmp486_ = _tmp485_;
													if (!(dim <= _tmp486_)) {
														break;
													}
													_tmp487_ = vala_ccode_base_module_get_ccode (self);
													_tmp488_ = _tmp487_;
													_tmp489_ = field_value;
													_tmp490_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp489_, dim);
													_tmp491_ = _tmp490_;
													_tmp492_ = vala_ccode_constant_new ("-1");
													_tmp493_ = _tmp492_;
													vala_ccode_function_add_assignment (_tmp488_, _tmp491_, (ValaCCodeExpression*) _tmp493_);
													_vala_ccode_node_unref0 (_tmp493_);
													_vala_ccode_node_unref0 (_tmp491_);
												}
											}
										}
									}
								}
								_vala_target_value_unref0 (glib_value);
								_vala_target_value_unref0 (field_value);
								_vala_code_node_unref0 (array_type);
							}
						} else {
							ValaSourceReference* _tmp494_;
							ValaSourceReference* _tmp495_;
							vala_code_node_set_error ((ValaCodeNode*) f, TRUE);
							_tmp494_ = vala_code_node_get_source_reference ((ValaCodeNode*) f);
							_tmp495_ = _tmp494_;
							vala_report_error (_tmp495_, "Non-constant field initializers not supported in this context");
							_vala_ccode_node_unref0 (rhs);
							_vala_ccode_node_unref0 (var_def);
							_vala_ccode_node_unref0 (var_decl);
							_vala_ccode_node_unref0 (lhs);
							_vala_code_node_unref0 (cl);
							return;
						}
					}
					_vala_ccode_node_unref0 (rhs);
				}
				vala_ccode_base_module_pop_context (self);
				_vala_ccode_node_unref0 (var_def);
				_vala_ccode_node_unref0 (var_decl);
			}
		}
	}
	vala_ccode_base_module_pop_line (self);
	_vala_ccode_node_unref0 (lhs);
	_vala_code_node_unref0 (cl);
}

gboolean
vala_ccode_base_module_is_constant_ccode_expression (ValaCCodeExpression* cexpr)
{
	gboolean _tmp0_ = FALSE;
	ValaCCodeParenthesizedExpression* cparenthesized = NULL;
	ValaCCodeParenthesizedExpression* _tmp20_;
	gboolean _tmp21_ = FALSE;
	ValaCCodeParenthesizedExpression* _tmp22_;
	gboolean result;
	g_return_val_if_fail (cexpr != NULL, FALSE);
	if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CONSTANT)) {
		_tmp0_ = TRUE;
	} else {
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CONSTANT_IDENTIFIER);
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
			ValaCCodeCastExpression* ccast = NULL;
			ValaCCodeCastExpression* _tmp1_;
			ValaCCodeCastExpression* _tmp2_;
			ValaCCodeExpression* _tmp3_;
			ValaCCodeExpression* _tmp4_;
			_tmp1_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
			ccast = _tmp1_;
			_tmp2_ = ccast;
			_tmp3_ = vala_ccode_cast_expression_get_inner (_tmp2_);
			_tmp4_ = _tmp3_;
			result = vala_ccode_base_module_is_constant_ccode_expression (_tmp4_);
			_vala_ccode_node_unref0 (ccast);
			return result;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION)) {
				ValaCCodeUnaryExpression* cunary = NULL;
				ValaCCodeUnaryExpression* _tmp5_;
				ValaCCodeUnaryExpression* _tmp6_;
				ValaCCodeUnaryOperator _tmp7_;
				ValaCCodeUnaryOperator _tmp8_;
				ValaCCodeUnaryExpression* _tmp9_;
				ValaCCodeExpression* _tmp10_;
				ValaCCodeExpression* _tmp11_;
				_tmp5_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION, ValaCCodeUnaryExpression));
				cunary = _tmp5_;
				_tmp6_ = cunary;
				_tmp7_ = vala_ccode_unary_expression_get_operator (_tmp6_);
				_tmp8_ = _tmp7_;
				switch (_tmp8_) {
					case VALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT:
					case VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT:
					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT:
					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_DECREMENT:
					{
						result = FALSE;
						_vala_ccode_node_unref0 (cunary);
						return result;
					}
					default:
					{
						break;
					}
				}
				_tmp9_ = cunary;
				_tmp10_ = vala_ccode_unary_expression_get_inner (_tmp9_);
				_tmp11_ = _tmp10_;
				result = vala_ccode_base_module_is_constant_ccode_expression (_tmp11_);
				_vala_ccode_node_unref0 (cunary);
				return result;
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION)) {
					ValaCCodeBinaryExpression* cbinary = NULL;
					ValaCCodeBinaryExpression* _tmp12_;
					gboolean _tmp13_ = FALSE;
					ValaCCodeBinaryExpression* _tmp14_;
					ValaCCodeExpression* _tmp15_;
					ValaCCodeExpression* _tmp16_;
					_tmp12_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
					cbinary = _tmp12_;
					_tmp14_ = cbinary;
					_tmp15_ = vala_ccode_binary_expression_get_left (_tmp14_);
					_tmp16_ = _tmp15_;
					if (vala_ccode_base_module_is_constant_ccode_expression (_tmp16_)) {
						ValaCCodeBinaryExpression* _tmp17_;
						ValaCCodeExpression* _tmp18_;
						ValaCCodeExpression* _tmp19_;
						_tmp17_ = cbinary;
						_tmp18_ = vala_ccode_binary_expression_get_right (_tmp17_);
						_tmp19_ = _tmp18_;
						_tmp13_ = vala_ccode_base_module_is_constant_ccode_expression (_tmp19_);
					} else {
						_tmp13_ = FALSE;
					}
					result = _tmp13_;
					_vala_ccode_node_unref0 (cbinary);
					return result;
				}
			}
		}
	}
	_tmp20_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION) ? ((ValaCCodeParenthesizedExpression*) cexpr) : NULL);
	cparenthesized = _tmp20_;
	_tmp22_ = cparenthesized;
	if (NULL != _tmp22_) {
		ValaCCodeParenthesizedExpression* _tmp23_;
		ValaCCodeExpression* _tmp24_;
		ValaCCodeExpression* _tmp25_;
		_tmp23_ = cparenthesized;
		_tmp24_ = vala_ccode_parenthesized_expression_get_inner (_tmp23_);
		_tmp25_ = _tmp24_;
		_tmp21_ = vala_ccode_base_module_is_constant_ccode_expression (_tmp25_);
	} else {
		_tmp21_ = FALSE;
	}
	result = _tmp21_;
	_vala_ccode_node_unref0 (cparenthesized);
	return result;
}

gboolean
vala_ccode_base_module_is_constant_ccode (ValaCodeNode* expr)
{
	gboolean result;
	g_return_val_if_fail (expr != NULL, FALSE);
	if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_CONSTANT)) {
		ValaSymbol* _tmp0_;
		ValaSymbol* _tmp1_;
		_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_CONSTANT, ValaConstant));
		_tmp1_ = _tmp0_;
		result = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_BLOCK);
		return result;
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_INTEGER_LITERAL)) {
			result = vala_expression_is_constant ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral));
			return result;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_MEMBER_ACCESS)) {
				ValaSymbol* _tmp2_;
				ValaSymbol* _tmp3_;
				_tmp2_ = vala_expression_get_symbol_reference ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
				_tmp3_ = _tmp2_;
				result = vala_ccode_base_module_is_constant_ccode ((ValaCodeNode*) _tmp3_);
				return result;
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_CAST_EXPRESSION)) {
					ValaExpression* _tmp4_;
					ValaExpression* _tmp5_;
					_tmp4_ = vala_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_CAST_EXPRESSION, ValaCastExpression));
					_tmp5_ = _tmp4_;
					result = vala_ccode_base_module_is_constant_ccode ((ValaCodeNode*) _tmp5_);
					return result;
				}
			}
		}
	}
	result = FALSE;
	return result;
}

/**
 * Returns whether the passed cexpr is a pure expression, i.e. an
 * expression without side-effects.
 */
gboolean
vala_ccode_base_module_is_pure_ccode_expression (ValaCCodeExpression* cexpr)
{
	gboolean _tmp0_ = FALSE;
	gboolean result;
	g_return_val_if_fail (cexpr != NULL, FALSE);
	if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CONSTANT)) {
		_tmp0_ = TRUE;
	} else {
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_IDENTIFIER);
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION)) {
			ValaCCodeBinaryExpression* cbinary = NULL;
			ValaCCodeBinaryExpression* _tmp1_;
			gboolean _tmp2_ = FALSE;
			ValaCCodeBinaryExpression* _tmp3_;
			ValaCCodeExpression* _tmp4_;
			ValaCCodeExpression* _tmp5_;
			_tmp1_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
			cbinary = _tmp1_;
			_tmp3_ = cbinary;
			_tmp4_ = vala_ccode_binary_expression_get_left (_tmp3_);
			_tmp5_ = _tmp4_;
			if (vala_ccode_base_module_is_pure_ccode_expression (_tmp5_)) {
				ValaCCodeBinaryExpression* _tmp6_;
				ValaCCodeExpression* _tmp7_;
				ValaCCodeExpression* _tmp8_;
				_tmp6_ = cbinary;
				_tmp7_ = vala_ccode_binary_expression_get_right (_tmp6_);
				_tmp8_ = _tmp7_;
				_tmp2_ = vala_ccode_base_module_is_pure_ccode_expression (_tmp8_);
			} else {
				_tmp2_ = FALSE;
			}
			result = _tmp2_;
			_vala_ccode_node_unref0 (cbinary);
			return result;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION)) {
				ValaCCodeUnaryExpression* cunary = NULL;
				ValaCCodeUnaryExpression* _tmp9_;
				ValaCCodeUnaryExpression* _tmp10_;
				ValaCCodeUnaryOperator _tmp11_;
				ValaCCodeUnaryOperator _tmp12_;
				_tmp9_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION, ValaCCodeUnaryExpression));
				cunary = _tmp9_;
				_tmp10_ = cunary;
				_tmp11_ = vala_ccode_unary_expression_get_operator (_tmp10_);
				_tmp12_ = _tmp11_;
				switch (_tmp12_) {
					case VALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT:
					case VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT:
					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT:
					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_DECREMENT:
					{
						result = FALSE;
						_vala_ccode_node_unref0 (cunary);
						return result;
					}
					default:
					{
						ValaCCodeUnaryExpression* _tmp13_;
						ValaCCodeExpression* _tmp14_;
						ValaCCodeExpression* _tmp15_;
						_tmp13_ = cunary;
						_tmp14_ = vala_ccode_unary_expression_get_inner (_tmp13_);
						_tmp15_ = _tmp14_;
						result = vala_ccode_base_module_is_pure_ccode_expression (_tmp15_);
						_vala_ccode_node_unref0 (cunary);
						return result;
					}
				}
				_vala_ccode_node_unref0 (cunary);
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_MEMBER_ACCESS)) {
					ValaCCodeMemberAccess* cma = NULL;
					ValaCCodeMemberAccess* _tmp16_;
					ValaCCodeMemberAccess* _tmp17_;
					ValaCCodeExpression* _tmp18_;
					ValaCCodeExpression* _tmp19_;
					_tmp16_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_MEMBER_ACCESS, ValaCCodeMemberAccess));
					cma = _tmp16_;
					_tmp17_ = cma;
					_tmp18_ = vala_ccode_member_access_get_inner (_tmp17_);
					_tmp19_ = _tmp18_;
					result = vala_ccode_base_module_is_pure_ccode_expression (_tmp19_);
					_vala_ccode_node_unref0 (cma);
					return result;
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_ELEMENT_ACCESS)) {
						ValaCCodeElementAccess* cea = NULL;
						ValaCCodeElementAccess* _tmp20_;
						gboolean _tmp21_ = FALSE;
						ValaCCodeElementAccess* _tmp22_;
						ValaCCodeExpression* _tmp23_;
						ValaCCodeExpression* _tmp24_;
						_tmp20_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_ELEMENT_ACCESS, ValaCCodeElementAccess));
						cea = _tmp20_;
						_tmp22_ = cea;
						_tmp23_ = vala_ccode_element_access_get_container (_tmp22_);
						_tmp24_ = _tmp23_;
						if (vala_ccode_base_module_is_pure_ccode_expression (_tmp24_)) {
							ValaCCodeElementAccess* _tmp25_;
							ValaList* _tmp26_;
							ValaList* _tmp27_;
							gpointer _tmp28_;
							ValaCCodeExpression* _tmp29_;
							_tmp25_ = cea;
							_tmp26_ = vala_ccode_element_access_get_indices (_tmp25_);
							_tmp27_ = _tmp26_;
							_tmp28_ = vala_list_get (_tmp27_, 0);
							_tmp29_ = (ValaCCodeExpression*) _tmp28_;
							_tmp21_ = vala_ccode_base_module_is_pure_ccode_expression (_tmp29_);
							_vala_ccode_node_unref0 (_tmp29_);
						} else {
							_tmp21_ = FALSE;
						}
						result = _tmp21_;
						_vala_ccode_node_unref0 (cea);
						return result;
					} else {
						if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
							ValaCCodeCastExpression* ccast = NULL;
							ValaCCodeCastExpression* _tmp30_;
							ValaCCodeCastExpression* _tmp31_;
							ValaCCodeExpression* _tmp32_;
							ValaCCodeExpression* _tmp33_;
							_tmp30_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
							ccast = _tmp30_;
							_tmp31_ = ccast;
							_tmp32_ = vala_ccode_cast_expression_get_inner (_tmp31_);
							_tmp33_ = _tmp32_;
							result = vala_ccode_base_module_is_pure_ccode_expression (_tmp33_);
							_vala_ccode_node_unref0 (ccast);
							return result;
						} else {
							if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION)) {
								ValaCCodeParenthesizedExpression* cparenthesized = NULL;
								ValaCCodeParenthesizedExpression* _tmp34_;
								ValaCCodeParenthesizedExpression* _tmp35_;
								ValaCCodeExpression* _tmp36_;
								ValaCCodeExpression* _tmp37_;
								_tmp34_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION, ValaCCodeParenthesizedExpression));
								cparenthesized = _tmp34_;
								_tmp35_ = cparenthesized;
								_tmp36_ = vala_ccode_parenthesized_expression_get_inner (_tmp35_);
								_tmp37_ = _tmp36_;
								result = vala_ccode_base_module_is_pure_ccode_expression (_tmp37_);
								_vala_ccode_node_unref0 (cparenthesized);
								return result;
							}
						}
					}
				}
			}
		}
	}
	result = FALSE;
	return result;
}

static void
vala_ccode_base_module_real_visit_property (ValaCodeVisitor* base,
                                            ValaProperty* prop)
{
	ValaCCodeBaseModule * self;
	ValaPropertyAccessor* _tmp0_;
	ValaPropertyAccessor* _tmp1_;
	ValaPropertyAccessor* _tmp4_;
	ValaPropertyAccessor* _tmp5_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (prop != NULL);
	vala_ccode_base_module_visit_member (self, (ValaSymbol*) prop);
	_tmp0_ = vala_property_get_get_accessor (prop);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		ValaPropertyAccessor* _tmp2_;
		ValaPropertyAccessor* _tmp3_;
		_tmp2_ = vala_property_get_get_accessor (prop);
		_tmp3_ = _tmp2_;
		vala_code_node_accept ((ValaCodeNode*) _tmp3_, (ValaCodeVisitor*) self);
	}
	_tmp4_ = vala_property_get_set_accessor (prop);
	_tmp5_ = _tmp4_;
	if (_tmp5_ != NULL) {
		ValaPropertyAccessor* _tmp6_;
		ValaPropertyAccessor* _tmp7_;
		_tmp6_ = vala_property_get_set_accessor (prop);
		_tmp7_ = _tmp6_;
		vala_code_node_accept ((ValaCodeNode*) _tmp7_, (ValaCodeVisitor*) self);
	}
}

void
vala_ccode_base_module_generate_type_declaration (ValaCCodeBaseModule* self,
                                                  ValaDataType* type,
                                                  ValaCCodeFile* decl_space)
{
	g_return_if_fail (self != NULL);
	g_return_if_fail (type != NULL);
	g_return_if_fail (decl_space != NULL);
	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_OBJECT_TYPE)) {
		ValaObjectType* object_type = NULL;
		ValaObjectType* _tmp0_;
		ValaObjectType* _tmp1_;
		ValaTypeSymbol* _tmp2_;
		ValaTypeSymbol* _tmp3_;
		_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_OBJECT_TYPE, ValaObjectType));
		object_type = _tmp0_;
		_tmp1_ = object_type;
		_tmp2_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp1_);
		_tmp3_ = _tmp2_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS)) {
			ValaClass* cl = NULL;
			ValaObjectType* _tmp4_;
			ValaTypeSymbol* _tmp5_;
			ValaTypeSymbol* _tmp6_;
			ValaClass* _tmp7_;
			ValaClass* _tmp8_;
			gboolean _tmp9_ = FALSE;
			ValaClass* _tmp10_;
			gboolean _tmp11_;
			gboolean _tmp12_;
			_tmp4_ = object_type;
			_tmp5_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp4_);
			_tmp6_ = _tmp5_;
			_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_CLASS, ValaClass));
			cl = _tmp7_;
			_tmp8_ = cl;
			vala_ccode_base_module_generate_class_declaration (self, _tmp8_, decl_space);
			_tmp10_ = cl;
			_tmp11_ = vala_class_get_is_compact (_tmp10_);
			_tmp12_ = _tmp11_;
			if (!_tmp12_) {
				ValaClass* _tmp13_;
				_tmp13_ = cl;
				_tmp9_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) _tmp13_);
			} else {
				_tmp9_ = FALSE;
			}
			if (_tmp9_) {
				ValaTypeSymbol* _tmp14_;
				_tmp14_ = self->gtype_type;
				vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
			}
			_vala_code_node_unref0 (cl);
		} else {
			ValaObjectType* _tmp15_;
			ValaTypeSymbol* _tmp16_;
			ValaTypeSymbol* _tmp17_;
			_tmp15_ = object_type;
			_tmp16_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp15_);
			_tmp17_ = _tmp16_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_INTERFACE)) {
				ValaInterface* iface = NULL;
				ValaObjectType* _tmp18_;
				ValaTypeSymbol* _tmp19_;
				ValaTypeSymbol* _tmp20_;
				ValaInterface* _tmp21_;
				ValaInterface* _tmp22_;
				ValaInterface* _tmp23_;
				_tmp18_ = object_type;
				_tmp19_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp18_);
				_tmp20_ = _tmp19_;
				_tmp21_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_INTERFACE, ValaInterface));
				iface = _tmp21_;
				_tmp22_ = iface;
				vala_ccode_base_module_generate_interface_declaration (self, _tmp22_, decl_space);
				_tmp23_ = iface;
				if (vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) _tmp23_)) {
					ValaTypeSymbol* _tmp24_;
					_tmp24_ = self->gtype_type;
					vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
				}
				_vala_code_node_unref0 (iface);
			}
		}
		_vala_code_node_unref0 (object_type);
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE)) {
			ValaDelegateType* deleg_type = NULL;
			ValaDelegateType* _tmp25_;
			ValaDelegate* d = NULL;
			ValaDelegateType* _tmp26_;
			ValaDelegate* _tmp27_;
			ValaDelegate* _tmp28_;
			ValaDelegate* _tmp29_;
			ValaDelegate* _tmp30_;
			ValaDelegate* _tmp31_;
			gboolean _tmp32_;
			gboolean _tmp33_;
			_tmp25_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
			deleg_type = _tmp25_;
			_tmp26_ = deleg_type;
			_tmp27_ = vala_delegate_type_get_delegate_symbol (_tmp26_);
			_tmp28_ = _tmp27_;
			_tmp29_ = _vala_code_node_ref0 (_tmp28_);
			d = _tmp29_;
			_tmp30_ = d;
			vala_ccode_base_module_generate_delegate_declaration (self, _tmp30_, decl_space);
			_tmp31_ = d;
			_tmp32_ = vala_delegate_get_has_target (_tmp31_);
			_tmp33_ = _tmp32_;
			if (_tmp33_) {
				ValaDataType* _tmp34_;
				ValaDelegateType* _tmp35_;
				_tmp34_ = self->delegate_target_type;
				vala_ccode_base_module_generate_type_declaration (self, _tmp34_, decl_space);
				_tmp35_ = deleg_type;
				if (vala_data_type_is_disposable ((ValaDataType*) _tmp35_)) {
					ValaDelegateType* _tmp36_;
					_tmp36_ = self->delegate_target_destroy_type;
					vala_ccode_base_module_generate_type_declaration (self, (ValaDataType*) _tmp36_, decl_space);
				}
			}
			_vala_code_node_unref0 (d);
			_vala_code_node_unref0 (deleg_type);
		} else {
			ValaTypeSymbol* _tmp37_;
			ValaTypeSymbol* _tmp38_;
			_tmp37_ = vala_data_type_get_type_symbol (type);
			_tmp38_ = _tmp37_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, VALA_TYPE_ENUM)) {
				ValaEnum* en = NULL;
				ValaTypeSymbol* _tmp39_;
				ValaTypeSymbol* _tmp40_;
				ValaEnum* _tmp41_;
				ValaEnum* _tmp42_;
				_tmp39_ = vala_data_type_get_type_symbol (type);
				_tmp40_ = _tmp39_;
				_tmp41_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp40_, VALA_TYPE_ENUM, ValaEnum));
				en = _tmp41_;
				_tmp42_ = en;
				vala_ccode_base_module_generate_enum_declaration (self, _tmp42_, decl_space);
				_vala_code_node_unref0 (en);
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VALUE_TYPE)) {
					ValaValueType* value_type = NULL;
					ValaValueType* _tmp43_;
					ValaValueType* _tmp44_;
					ValaTypeSymbol* _tmp45_;
					ValaTypeSymbol* _tmp46_;
					_tmp43_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_VALUE_TYPE, ValaValueType));
					value_type = _tmp43_;
					_tmp44_ = value_type;
					_tmp45_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp44_);
					_tmp46_ = _tmp45_;
					vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
					_vala_code_node_unref0 (value_type);
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
						ValaArrayType* array_type = NULL;
						ValaArrayType* _tmp47_;
						ValaArrayType* _tmp48_;
						ValaDataType* _tmp49_;
						ValaDataType* _tmp50_;
						ValaArrayType* _tmp51_;
						ValaDataType* _tmp52_;
						ValaDataType* _tmp53_;
						_tmp47_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
						array_type = _tmp47_;
						_tmp48_ = array_type;
						_tmp49_ = vala_array_type_get_element_type (_tmp48_);
						_tmp50_ = _tmp49_;
						vala_ccode_base_module_generate_type_declaration (self, _tmp50_, decl_space);
						_tmp51_ = array_type;
						_tmp52_ = vala_array_type_get_length_type (_tmp51_);
						_tmp53_ = _tmp52_;
						if (_tmp53_ != NULL) {
							ValaArrayType* _tmp54_;
							ValaDataType* _tmp55_;
							ValaDataType* _tmp56_;
							_tmp54_ = array_type;
							_tmp55_ = vala_array_type_get_length_type (_tmp54_);
							_tmp56_ = _tmp55_;
							vala_ccode_base_module_generate_type_declaration (self, _tmp56_, decl_space);
						}
						_vala_code_node_unref0 (array_type);
					} else {
						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
							ValaErrorType* error_type = NULL;
							ValaErrorType* _tmp57_;
							ValaErrorType* _tmp58_;
							ValaErrorDomain* _tmp59_;
							ValaErrorDomain* _tmp60_;
							_tmp57_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ERROR_TYPE, ValaErrorType));
							error_type = _tmp57_;
							_tmp58_ = error_type;
							_tmp59_ = vala_error_type_get_error_domain (_tmp58_);
							_tmp60_ = _tmp59_;
							if (_tmp60_ != NULL) {
								ValaErrorType* _tmp61_;
								ValaErrorDomain* _tmp62_;
								ValaErrorDomain* _tmp63_;
								_tmp61_ = error_type;
								_tmp62_ = vala_error_type_get_error_domain (_tmp61_);
								_tmp63_ = _tmp62_;
								vala_ccode_base_module_generate_error_domain_declaration (self, _tmp63_, decl_space);
							} else {
								ValaClass* _tmp64_;
								_tmp64_ = self->priv->gerror;
								vala_ccode_base_module_generate_class_declaration (self, _tmp64_, decl_space);
							}
							_vala_code_node_unref0 (error_type);
						} else {
							if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
								ValaPointerType* pointer_type = NULL;
								ValaPointerType* _tmp65_;
								ValaPointerType* _tmp66_;
								ValaDataType* _tmp67_;
								ValaDataType* _tmp68_;
								_tmp65_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_POINTER_TYPE, ValaPointerType));
								pointer_type = _tmp65_;
								_tmp66_ = pointer_type;
								_tmp67_ = vala_pointer_type_get_base_type (_tmp66_);
								_tmp68_ = _tmp67_;
								vala_ccode_base_module_generate_type_declaration (self, _tmp68_, decl_space);
								_vala_code_node_unref0 (pointer_type);
							} else {
								if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_METHOD_TYPE)) {
									ValaMethod* method = NULL;
									ValaMethod* _tmp69_;
									ValaMethod* _tmp70_;
									ValaMethod* _tmp71_;
									gboolean _tmp72_ = FALSE;
									ValaMethod* _tmp73_;
									_tmp69_ = vala_method_type_get_method_symbol (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_METHOD_TYPE, ValaMethodType));
									_tmp70_ = _tmp69_;
									_tmp71_ = _vala_code_node_ref0 (_tmp70_);
									method = _tmp71_;
									_tmp73_ = method;
									if (vala_method_has_type_parameters (_tmp73_)) {
										ValaMethod* _tmp74_;
										_tmp74_ = method;
										_tmp72_ = !vala_get_ccode_simple_generics (_tmp74_);
									} else {
										_tmp72_ = FALSE;
									}
									if (_tmp72_) {
										ValaTypeSymbol* _tmp75_;
										_tmp75_ = self->gtype_type;
										vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
									}
									_vala_code_node_unref0 (method);
								}
							}
						}
					}
				}
			}
		}
	}
	{
		ValaList* _type_arg_list = NULL;
		ValaList* _tmp76_;
		gint _type_arg_size = 0;
		ValaList* _tmp77_;
		gint _tmp78_;
		gint _tmp79_;
		gint _type_arg_index = 0;
		_tmp76_ = vala_data_type_get_type_arguments (type);
		_type_arg_list = _tmp76_;
		_tmp77_ = _type_arg_list;
		_tmp78_ = vala_collection_get_size ((ValaCollection*) _tmp77_);
		_tmp79_ = _tmp78_;
		_type_arg_size = _tmp79_;
		_type_arg_index = -1;
		while (TRUE) {
			gint _tmp80_;
			gint _tmp81_;
			ValaDataType* type_arg = NULL;
			ValaList* _tmp82_;
			gpointer _tmp83_;
			ValaDataType* _tmp84_;
			_type_arg_index = _type_arg_index + 1;
			_tmp80_ = _type_arg_index;
			_tmp81_ = _type_arg_size;
			if (!(_tmp80_ < _tmp81_)) {
				break;
			}
			_tmp82_ = _type_arg_list;
			_tmp83_ = vala_list_get (_tmp82_, _type_arg_index);
			type_arg = (ValaDataType*) _tmp83_;
			_tmp84_ = type_arg;
			vala_ccode_base_module_generate_type_declaration (self, _tmp84_, decl_space);
			_vala_code_node_unref0 (type_arg);
		}
	}
}

static void
vala_ccode_base_module_real_generate_class_struct_declaration (ValaCCodeBaseModule* self,
                                                               ValaClass* cl,
                                                               ValaCCodeFile* decl_space)
{
	g_return_if_fail (cl != NULL);
	g_return_if_fail (decl_space != NULL);
}

void
vala_ccode_base_module_generate_class_struct_declaration (ValaCCodeBaseModule* self,
                                                          ValaClass* cl,
                                                          ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_class_struct_declaration) {
		_klass_->generate_class_struct_declaration (self, cl, decl_space);
	}
}

static void
vala_ccode_base_module_real_generate_struct_declaration (ValaCCodeBaseModule* self,
                                                         ValaStruct* st,
                                                         ValaCCodeFile* decl_space)
{
	g_return_if_fail (st != NULL);
	g_return_if_fail (decl_space != NULL);
}

void
vala_ccode_base_module_generate_struct_declaration (ValaCCodeBaseModule* self,
                                                    ValaStruct* st,
                                                    ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_struct_declaration) {
		_klass_->generate_struct_declaration (self, st, decl_space);
	}
}

static void
vala_ccode_base_module_real_generate_delegate_declaration (ValaCCodeBaseModule* self,
                                                           ValaDelegate* d,
                                                           ValaCCodeFile* decl_space)
{
	g_return_if_fail (d != NULL);
	g_return_if_fail (decl_space != NULL);
}

void
vala_ccode_base_module_generate_delegate_declaration (ValaCCodeBaseModule* self,
                                                      ValaDelegate* d,
                                                      ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_delegate_declaration) {
		_klass_->generate_delegate_declaration (self, d, decl_space);
	}
}

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)
{
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	g_return_if_fail (cparam_map != NULL);
	g_return_if_fail (func != NULL);
}

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)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_cparameters) {
		_klass_->generate_cparameters (self, m, decl_space, cparam_map, func, vdeclarator, carg_map, vcall, direction);
	}
}

void
vala_ccode_base_module_generate_property_accessor_declaration (ValaCCodeBaseModule* self,
                                                               ValaPropertyAccessor* acc,
                                                               ValaCCodeFile* decl_space)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gboolean _tmp2_;
	ValaProperty* prop = NULL;
	ValaProperty* _tmp3_;
	ValaProperty* _tmp4_;
	ValaProperty* _tmp5_;
	gboolean _tmp6_ = FALSE;
	gboolean _tmp7_;
	gboolean _tmp8_;
	gboolean returns_real_struct = FALSE;
	ValaCCodeParameter* cvalueparam = NULL;
	ValaDataType* _tmp37_;
	ValaDataType* _tmp38_;
	ValaCCodeFunction* function = NULL;
	gboolean _tmp39_ = FALSE;
	gboolean _tmp40_;
	gboolean _tmp41_;
	ValaProperty* _tmp52_;
	ValaMemberBinding _tmp53_;
	ValaMemberBinding _tmp54_;
	gboolean _tmp78_ = FALSE;
	gboolean _tmp79_ = FALSE;
	gboolean _tmp80_;
	gboolean _tmp81_;
	gboolean _tmp86_ = FALSE;
	ValaDataType* _tmp87_;
	ValaDataType* _tmp88_;
	ValaProperty* _tmp158_;
	ValaVersionAttribute* _tmp159_;
	ValaVersionAttribute* _tmp160_;
	gboolean _tmp161_;
	gboolean _tmp162_;
	gboolean _tmp170_ = FALSE;
	ValaProperty* _tmp171_;
	gboolean _tmp172_;
	gboolean _tmp173_;
	ValaCCodeFunction* _tmp204_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (acc != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) acc);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) acc, _tmp1_);
	_g_free0 (_tmp1_);
	if (_tmp2_) {
		return;
	}
	_tmp3_ = vala_property_accessor_get_prop (acc);
	_tmp4_ = _tmp3_;
	_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, VALA_TYPE_PROPERTY, ValaProperty));
	prop = _tmp5_;
	_tmp7_ = vala_property_accessor_get_readable (acc);
	_tmp8_ = _tmp7_;
	if (_tmp8_) {
		ValaProperty* _tmp9_;
		ValaDataType* _tmp10_;
		ValaDataType* _tmp11_;
		_tmp9_ = prop;
		_tmp10_ = vala_property_get_property_type (_tmp9_);
		_tmp11_ = _tmp10_;
		_tmp6_ = vala_data_type_is_real_non_null_struct_type (_tmp11_);
	} else {
		_tmp6_ = FALSE;
	}
	returns_real_struct = _tmp6_;
	if (returns_real_struct) {
		ValaDataType* _tmp12_;
		ValaDataType* _tmp13_;
		gchar* _tmp14_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		gchar* _tmp17_;
		ValaCCodeParameter* _tmp18_;
		_tmp12_ = vala_property_accessor_get_value_type (acc);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) _tmp13_);
		_tmp15_ = _tmp14_;
		_tmp16_ = g_strdup_printf ("%s *", _tmp15_);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_ccode_parameter_new ("result", _tmp17_);
		_vala_ccode_node_unref0 (cvalueparam);
		cvalueparam = _tmp18_;
		_g_free0 (_tmp17_);
		_g_free0 (_tmp15_);
	} else {
		gboolean _tmp19_ = FALSE;
		gboolean _tmp20_;
		gboolean _tmp21_;
		_tmp20_ = vala_property_accessor_get_readable (acc);
		_tmp21_ = _tmp20_;
		if (!_tmp21_) {
			ValaProperty* _tmp22_;
			ValaDataType* _tmp23_;
			ValaDataType* _tmp24_;
			_tmp22_ = prop;
			_tmp23_ = vala_property_get_property_type (_tmp22_);
			_tmp24_ = _tmp23_;
			_tmp19_ = vala_data_type_is_real_non_null_struct_type (_tmp24_);
		} else {
			_tmp19_ = FALSE;
		}
		if (_tmp19_) {
			ValaDataType* _tmp25_;
			ValaDataType* _tmp26_;
			gchar* _tmp27_;
			gchar* _tmp28_;
			gchar* _tmp29_;
			gchar* _tmp30_;
			ValaCCodeParameter* _tmp31_;
			_tmp25_ = vala_property_accessor_get_value_type (acc);
			_tmp26_ = _tmp25_;
			_tmp27_ = vala_get_ccode_name ((ValaCodeNode*) _tmp26_);
			_tmp28_ = _tmp27_;
			_tmp29_ = g_strdup_printf ("%s *", _tmp28_);
			_tmp30_ = _tmp29_;
			_tmp31_ = vala_ccode_parameter_new ("value", _tmp30_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp31_;
			_g_free0 (_tmp30_);
			_g_free0 (_tmp28_);
		} else {
			ValaDataType* _tmp32_;
			ValaDataType* _tmp33_;
			gchar* _tmp34_;
			gchar* _tmp35_;
			ValaCCodeParameter* _tmp36_;
			_tmp32_ = vala_property_accessor_get_value_type (acc);
			_tmp33_ = _tmp32_;
			_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) _tmp33_);
			_tmp35_ = _tmp34_;
			_tmp36_ = vala_ccode_parameter_new ("value", _tmp35_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp36_;
			_g_free0 (_tmp35_);
		}
	}
	_tmp37_ = vala_property_accessor_get_value_type (acc);
	_tmp38_ = _tmp37_;
	vala_ccode_base_module_generate_type_declaration (self, _tmp38_, decl_space);
	_tmp40_ = vala_property_accessor_get_readable (acc);
	_tmp41_ = _tmp40_;
	if (_tmp41_) {
		_tmp39_ = !returns_real_struct;
	} else {
		_tmp39_ = FALSE;
	}
	if (_tmp39_) {
		gchar* _tmp42_;
		gchar* _tmp43_;
		ValaDataType* _tmp44_;
		ValaDataType* _tmp45_;
		gchar* _tmp46_;
		gchar* _tmp47_;
		ValaCCodeFunction* _tmp48_;
		_tmp42_ = vala_get_ccode_name ((ValaCodeNode*) acc);
		_tmp43_ = _tmp42_;
		_tmp44_ = vala_property_accessor_get_value_type (acc);
		_tmp45_ = _tmp44_;
		_tmp46_ = vala_get_ccode_name ((ValaCodeNode*) _tmp45_);
		_tmp47_ = _tmp46_;
		_tmp48_ = vala_ccode_function_new (_tmp43_, _tmp47_);
		_vala_ccode_node_unref0 (function);
		function = _tmp48_;
		_g_free0 (_tmp47_);
		_g_free0 (_tmp43_);
	} else {
		gchar* _tmp49_;
		gchar* _tmp50_;
		ValaCCodeFunction* _tmp51_;
		_tmp49_ = vala_get_ccode_name ((ValaCodeNode*) acc);
		_tmp50_ = _tmp49_;
		_tmp51_ = vala_ccode_function_new (_tmp50_, "void");
		_vala_ccode_node_unref0 (function);
		function = _tmp51_;
		_g_free0 (_tmp50_);
	}
	_tmp52_ = prop;
	_tmp53_ = vala_property_get_binding (_tmp52_);
	_tmp54_ = _tmp53_;
	if (_tmp54_ == VALA_MEMBER_BINDING_INSTANCE) {
		ValaTypeSymbol* t = NULL;
		ValaProperty* _tmp55_;
		ValaSymbol* _tmp56_;
		ValaSymbol* _tmp57_;
		ValaTypeSymbol* _tmp58_;
		ValaDataType* this_type = NULL;
		ValaTypeSymbol* _tmp59_;
		ValaDataType* _tmp60_;
		ValaDataType* _tmp61_;
		ValaCCodeParameter* cselfparam = NULL;
		ValaDataType* _tmp62_;
		gchar* _tmp63_;
		gchar* _tmp64_;
		ValaCCodeParameter* _tmp65_;
		ValaCCodeParameter* _tmp66_;
		gboolean _tmp67_ = FALSE;
		ValaTypeSymbol* _tmp68_;
		ValaCCodeFunction* _tmp76_;
		ValaCCodeParameter* _tmp77_;
		_tmp55_ = prop;
		_tmp56_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp55_);
		_tmp57_ = _tmp56_;
		_tmp58_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
		t = _tmp58_;
		_tmp59_ = t;
		_tmp60_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) _tmp59_);
		this_type = _tmp60_;
		_tmp61_ = this_type;
		vala_ccode_base_module_generate_type_declaration (self, _tmp61_, decl_space);
		_tmp62_ = this_type;
		_tmp63_ = vala_get_ccode_name ((ValaCodeNode*) _tmp62_);
		_tmp64_ = _tmp63_;
		_tmp65_ = vala_ccode_parameter_new ("self", _tmp64_);
		_tmp66_ = _tmp65_;
		_g_free0 (_tmp64_);
		cselfparam = _tmp66_;
		_tmp68_ = t;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, VALA_TYPE_STRUCT)) {
			ValaTypeSymbol* _tmp69_;
			_tmp69_ = t;
			_tmp67_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_STRUCT, ValaStruct));
		} else {
			_tmp67_ = FALSE;
		}
		if (_tmp67_) {
			ValaCCodeParameter* _tmp70_;
			ValaCCodeParameter* _tmp71_;
			const gchar* _tmp72_;
			const gchar* _tmp73_;
			gchar* _tmp74_;
			gchar* _tmp75_;
			_tmp70_ = cselfparam;
			_tmp71_ = cselfparam;
			_tmp72_ = vala_ccode_parameter_get_type_name (_tmp71_);
			_tmp73_ = _tmp72_;
			_tmp74_ = g_strconcat (_tmp73_, "*", NULL);
			_tmp75_ = _tmp74_;
			vala_ccode_parameter_set_type_name (_tmp71_, _tmp75_);
			_g_free0 (_tmp75_);
		}
		_tmp76_ = function;
		_tmp77_ = cselfparam;
		vala_ccode_function_add_parameter (_tmp76_, _tmp77_);
		_vala_ccode_node_unref0 (cselfparam);
		_vala_code_node_unref0 (this_type);
		_vala_code_node_unref0 (t);
	}
	_tmp80_ = vala_property_accessor_get_writable (acc);
	_tmp81_ = _tmp80_;
	if (_tmp81_) {
		_tmp79_ = TRUE;
	} else {
		gboolean _tmp82_;
		gboolean _tmp83_;
		_tmp82_ = vala_property_accessor_get_construction (acc);
		_tmp83_ = _tmp82_;
		_tmp79_ = _tmp83_;
	}
	if (_tmp79_) {
		_tmp78_ = TRUE;
	} else {
		_tmp78_ = returns_real_struct;
	}
	if (_tmp78_) {
		ValaCCodeFunction* _tmp84_;
		ValaCCodeParameter* _tmp85_;
		_tmp84_ = function;
		_tmp85_ = cvalueparam;
		vala_ccode_function_add_parameter (_tmp84_, _tmp85_);
	}
	_tmp87_ = vala_property_accessor_get_value_type (acc);
	_tmp88_ = _tmp87_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp88_, VALA_TYPE_ARRAY_TYPE)) {
		ValaProperty* _tmp89_;
		_tmp89_ = prop;
		_tmp86_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp89_);
	} else {
		_tmp86_ = FALSE;
	}
	if (_tmp86_) {
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp90_;
		ValaDataType* _tmp91_;
		ValaArrayType* _tmp92_;
		gchar* length_ctype = NULL;
		ValaProperty* _tmp93_;
		gchar* _tmp94_;
		_tmp90_ = vala_property_accessor_get_value_type (acc);
		_tmp91_ = _tmp90_;
		_tmp92_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp91_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
		array_type = _tmp92_;
		_tmp93_ = prop;
		_tmp94_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp93_);
		length_ctype = _tmp94_;
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp95_ = FALSE;
				_tmp95_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp97_;
					gint _tmp98_;
					gint _tmp99_;
					const gchar* _tmp100_ = NULL;
					gboolean _tmp101_;
					gboolean _tmp102_;
					gchar* _tmp103_ = NULL;
					gboolean _tmp104_;
					gboolean _tmp105_;
					ValaCCodeFunction* _tmp110_;
					gchar* _tmp111_;
					gchar* _tmp112_;
					ValaCCodeParameter* _tmp113_;
					ValaCCodeParameter* _tmp114_;
					if (!_tmp95_) {
						gint _tmp96_;
						_tmp96_ = dim;
						dim = _tmp96_ + 1;
					}
					_tmp95_ = FALSE;
					_tmp97_ = array_type;
					_tmp98_ = vala_array_type_get_rank (_tmp97_);
					_tmp99_ = _tmp98_;
					if (!(dim <= _tmp99_)) {
						break;
					}
					_tmp101_ = vala_property_accessor_get_readable (acc);
					_tmp102_ = _tmp101_;
					if (_tmp102_) {
						_tmp100_ = "result";
					} else {
						_tmp100_ = "value";
					}
					_tmp104_ = vala_property_accessor_get_readable (acc);
					_tmp105_ = _tmp104_;
					if (_tmp105_) {
						const gchar* _tmp106_;
						gchar* _tmp107_;
						_tmp106_ = length_ctype;
						_tmp107_ = g_strconcat (_tmp106_, "*", NULL);
						_g_free0 (_tmp103_);
						_tmp103_ = _tmp107_;
					} else {
						const gchar* _tmp108_;
						gchar* _tmp109_;
						_tmp108_ = length_ctype;
						_tmp109_ = g_strdup (_tmp108_);
						_g_free0 (_tmp103_);
						_tmp103_ = _tmp109_;
					}
					_tmp110_ = function;
					_tmp111_ = vala_ccode_base_module_get_array_length_cname (self, _tmp100_, dim);
					_tmp112_ = _tmp111_;
					_tmp113_ = vala_ccode_parameter_new (_tmp112_, _tmp103_);
					_tmp114_ = _tmp113_;
					vala_ccode_function_add_parameter (_tmp110_, _tmp114_);
					_vala_ccode_node_unref0 (_tmp114_);
					_g_free0 (_tmp112_);
					_g_free0 (_tmp103_);
				}
			}
		}
		_g_free0 (length_ctype);
		_vala_code_node_unref0 (array_type);
	} else {
		gboolean _tmp115_ = FALSE;
		gboolean _tmp116_ = FALSE;
		ValaDataType* _tmp117_;
		ValaDataType* _tmp118_;
		_tmp117_ = vala_property_accessor_get_value_type (acc);
		_tmp118_ = _tmp117_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp118_, VALA_TYPE_DELEGATE_TYPE)) {
			ValaProperty* _tmp119_;
			_tmp119_ = prop;
			_tmp116_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp119_);
		} else {
			_tmp116_ = FALSE;
		}
		if (_tmp116_) {
			ValaDataType* _tmp120_;
			ValaDataType* _tmp121_;
			ValaDelegate* _tmp122_;
			ValaDelegate* _tmp123_;
			gboolean _tmp124_;
			gboolean _tmp125_;
			_tmp120_ = vala_property_accessor_get_value_type (acc);
			_tmp121_ = _tmp120_;
			_tmp122_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp121_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
			_tmp123_ = _tmp122_;
			_tmp124_ = vala_delegate_get_has_target (_tmp123_);
			_tmp125_ = _tmp124_;
			_tmp115_ = _tmp125_;
		} else {
			_tmp115_ = FALSE;
		}
		if (_tmp115_) {
			const gchar* _tmp126_ = NULL;
			gboolean _tmp127_;
			gboolean _tmp128_;
			gchar* _tmp129_ = NULL;
			gboolean _tmp130_;
			gboolean _tmp131_;
			ValaCCodeFunction* _tmp138_;
			gchar* _tmp139_;
			gchar* _tmp140_;
			ValaCCodeParameter* _tmp141_;
			ValaCCodeParameter* _tmp142_;
			gboolean _tmp143_ = FALSE;
			gboolean _tmp144_;
			gboolean _tmp145_;
			_tmp127_ = vala_property_accessor_get_readable (acc);
			_tmp128_ = _tmp127_;
			if (_tmp128_) {
				_tmp126_ = "result";
			} else {
				_tmp126_ = "value";
			}
			_tmp130_ = vala_property_accessor_get_readable (acc);
			_tmp131_ = _tmp130_;
			if (_tmp131_) {
				ValaDataType* _tmp132_;
				gchar* _tmp133_;
				gchar* _tmp134_;
				gchar* _tmp135_;
				_tmp132_ = self->delegate_target_type;
				_tmp133_ = vala_get_ccode_name ((ValaCodeNode*) _tmp132_);
				_tmp134_ = _tmp133_;
				_tmp135_ = g_strconcat (_tmp134_, "*", NULL);
				_g_free0 (_tmp129_);
				_tmp129_ = _tmp135_;
				_g_free0 (_tmp134_);
			} else {
				ValaDataType* _tmp136_;
				gchar* _tmp137_;
				_tmp136_ = self->delegate_target_type;
				_tmp137_ = vala_get_ccode_name ((ValaCodeNode*) _tmp136_);
				_g_free0 (_tmp129_);
				_tmp129_ = _tmp137_;
			}
			_tmp138_ = function;
			_tmp139_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp126_);
			_tmp140_ = _tmp139_;
			_tmp141_ = vala_ccode_parameter_new (_tmp140_, _tmp129_);
			_tmp142_ = _tmp141_;
			vala_ccode_function_add_parameter (_tmp138_, _tmp142_);
			_vala_ccode_node_unref0 (_tmp142_);
			_g_free0 (_tmp140_);
			_tmp144_ = vala_property_accessor_get_readable (acc);
			_tmp145_ = _tmp144_;
			if (!_tmp145_) {
				ValaDataType* _tmp146_;
				ValaDataType* _tmp147_;
				gboolean _tmp148_;
				gboolean _tmp149_;
				_tmp146_ = vala_property_accessor_get_value_type (acc);
				_tmp147_ = _tmp146_;
				_tmp148_ = vala_data_type_get_value_owned (_tmp147_);
				_tmp149_ = _tmp148_;
				_tmp143_ = _tmp149_;
			} else {
				_tmp143_ = FALSE;
			}
			if (_tmp143_) {
				ValaCCodeFunction* _tmp150_;
				gchar* _tmp151_;
				gchar* _tmp152_;
				ValaDelegateType* _tmp153_;
				gchar* _tmp154_;
				gchar* _tmp155_;
				ValaCCodeParameter* _tmp156_;
				ValaCCodeParameter* _tmp157_;
				_tmp150_ = function;
				_tmp151_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
				_tmp152_ = _tmp151_;
				_tmp153_ = self->delegate_target_destroy_type;
				_tmp154_ = vala_get_ccode_name ((ValaCodeNode*) _tmp153_);
				_tmp155_ = _tmp154_;
				_tmp156_ = vala_ccode_parameter_new (_tmp152_, _tmp155_);
				_tmp157_ = _tmp156_;
				vala_ccode_function_add_parameter (_tmp150_, _tmp157_);
				_vala_ccode_node_unref0 (_tmp157_);
				_g_free0 (_tmp155_);
				_g_free0 (_tmp152_);
			}
			_g_free0 (_tmp129_);
		}
	}
	_tmp158_ = prop;
	_tmp159_ = vala_symbol_get_version ((ValaSymbol*) _tmp158_);
	_tmp160_ = _tmp159_;
	_tmp161_ = vala_version_attribute_get_deprecated (_tmp160_);
	_tmp162_ = _tmp161_;
	if (_tmp162_) {
		ValaCodeContext* _tmp163_;
		ValaProfile _tmp164_;
		ValaProfile _tmp165_;
		ValaCCodeFunction* _tmp166_;
		ValaCCodeFunction* _tmp167_;
		ValaCCodeModifiers _tmp168_;
		ValaCCodeModifiers _tmp169_;
		_tmp163_ = self->priv->_context;
		_tmp164_ = vala_code_context_get_profile (_tmp163_);
		_tmp165_ = _tmp164_;
		if (_tmp165_ == VALA_PROFILE_GOBJECT) {
			vala_ccode_file_add_include (decl_space, "glib.h", FALSE);
		}
		_tmp166_ = function;
		_tmp167_ = function;
		_tmp168_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp167_);
		_tmp169_ = _tmp168_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp167_, _tmp169_ | VALA_CCODE_MODIFIERS_DEPRECATED);
	}
	_tmp171_ = prop;
	_tmp172_ = vala_property_get_is_abstract (_tmp171_);
	_tmp173_ = _tmp172_;
	if (!_tmp173_) {
		gboolean _tmp174_ = FALSE;
		gboolean _tmp175_ = FALSE;
		ValaProperty* _tmp176_;
		_tmp176_ = prop;
		if (vala_symbol_is_private_symbol ((ValaSymbol*) _tmp176_)) {
			_tmp175_ = TRUE;
		} else {
			gboolean _tmp177_ = FALSE;
			gboolean _tmp178_;
			gboolean _tmp179_;
			_tmp178_ = vala_property_accessor_get_readable (acc);
			_tmp179_ = _tmp178_;
			if (!_tmp179_) {
				gboolean _tmp180_;
				gboolean _tmp181_;
				_tmp180_ = vala_property_accessor_get_writable (acc);
				_tmp181_ = _tmp180_;
				_tmp177_ = !_tmp181_;
			} else {
				_tmp177_ = FALSE;
			}
			_tmp175_ = _tmp177_;
		}
		if (_tmp175_) {
			_tmp174_ = TRUE;
		} else {
			ValaSymbolAccessibility _tmp182_;
			ValaSymbolAccessibility _tmp183_;
			_tmp182_ = vala_symbol_get_access ((ValaSymbol*) acc);
			_tmp183_ = _tmp182_;
			_tmp174_ = _tmp183_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
		}
		_tmp170_ = _tmp174_;
	} else {
		_tmp170_ = FALSE;
	}
	if (_tmp170_) {
		ValaCCodeFunction* _tmp184_;
		ValaCCodeFunction* _tmp185_;
		ValaCCodeModifiers _tmp186_;
		ValaCCodeModifiers _tmp187_;
		_tmp184_ = function;
		_tmp185_ = function;
		_tmp186_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp185_);
		_tmp187_ = _tmp186_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp185_, _tmp187_ | VALA_CCODE_MODIFIERS_STATIC);
	} else {
		gboolean _tmp188_ = FALSE;
		ValaCodeContext* _tmp189_;
		gboolean _tmp190_;
		gboolean _tmp191_;
		_tmp189_ = self->priv->_context;
		_tmp190_ = vala_code_context_get_hide_internal (_tmp189_);
		_tmp191_ = _tmp190_;
		if (_tmp191_) {
			gboolean _tmp192_ = FALSE;
			ValaProperty* _tmp193_;
			_tmp193_ = prop;
			if (vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp193_)) {
				_tmp192_ = TRUE;
			} else {
				ValaSymbolAccessibility _tmp194_;
				ValaSymbolAccessibility _tmp195_;
				_tmp194_ = vala_symbol_get_access ((ValaSymbol*) acc);
				_tmp195_ = _tmp194_;
				_tmp192_ = _tmp195_ == VALA_SYMBOL_ACCESSIBILITY_INTERNAL;
			}
			_tmp188_ = _tmp192_;
		} else {
			_tmp188_ = FALSE;
		}
		if (_tmp188_) {
			ValaCCodeFunction* _tmp196_;
			ValaCCodeFunction* _tmp197_;
			ValaCCodeModifiers _tmp198_;
			ValaCCodeModifiers _tmp199_;
			_tmp196_ = function;
			_tmp197_ = function;
			_tmp198_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp197_);
			_tmp199_ = _tmp198_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp197_, _tmp199_ | VALA_CCODE_MODIFIERS_INTERNAL);
		} else {
			ValaCCodeFunction* _tmp200_;
			ValaCCodeFunction* _tmp201_;
			ValaCCodeModifiers _tmp202_;
			ValaCCodeModifiers _tmp203_;
			_tmp200_ = function;
			_tmp201_ = function;
			_tmp202_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp201_);
			_tmp203_ = _tmp202_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp201_, _tmp203_ | VALA_CCODE_MODIFIERS_EXTERN);
			self->requires_vala_extern = TRUE;
		}
	}
	_tmp204_ = function;
	vala_ccode_file_add_function_declaration (decl_space, _tmp204_);
	_vala_ccode_node_unref0 (function);
	_vala_ccode_node_unref0 (cvalueparam);
	_vala_code_node_unref0 (prop);
}

static void
vala_ccode_base_module_real_visit_property_accessor (ValaCodeVisitor* base,
                                                     ValaPropertyAccessor* acc)
{
	ValaCCodeBaseModule * self;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaSourceReference* _tmp2_;
	ValaSourceReference* _tmp3_;
	ValaProperty* prop = NULL;
	ValaProperty* _tmp4_;
	ValaProperty* _tmp5_;
	ValaProperty* _tmp6_;
	ValaComment* _tmp7_;
	ValaComment* _tmp8_;
	gboolean _tmp16_ = FALSE;
	gboolean _tmp17_;
	gboolean _tmp18_;
	gboolean returns_real_struct = FALSE;
	ValaLocalVariable* _tmp22_;
	ValaLocalVariable* _tmp23_;
	ValaTypeSymbol* t = NULL;
	ValaProperty* _tmp26_;
	ValaSymbol* _tmp27_;
	ValaSymbol* _tmp28_;
	ValaTypeSymbol* _tmp29_;
	gboolean _tmp30_ = FALSE;
	gboolean _tmp31_ = FALSE;
	ValaProperty* _tmp32_;
	gboolean _tmp33_;
	gboolean _tmp34_;
	ValaSourceFileType _tmp64_;
	ValaSourceFileType _tmp65_;
	ValaDataType* this_type = NULL;
	ValaTypeSymbol* _tmp66_;
	ValaDataType* _tmp67_;
	ValaCCodeParameter* cselfparam = NULL;
	ValaDataType* _tmp68_;
	gchar* _tmp69_;
	gchar* _tmp70_;
	ValaCCodeParameter* _tmp71_;
	ValaCCodeParameter* _tmp72_;
	gboolean _tmp73_ = FALSE;
	ValaTypeSymbol* _tmp74_;
	ValaCCodeParameter* cvalueparam = NULL;
	gboolean _tmp107_ = FALSE;
	ValaProperty* _tmp108_;
	gboolean _tmp109_;
	gboolean _tmp110_;
	gboolean _tmp492_ = FALSE;
	ValaProperty* _tmp493_;
	gboolean _tmp494_;
	gboolean _tmp495_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (acc != NULL);
	_tmp0_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) acc);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_context (self, _tmp1_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
	_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) acc);
	_tmp3_ = _tmp2_;
	vala_ccode_base_module_push_line (self, _tmp3_);
	_tmp4_ = vala_property_accessor_get_prop (acc);
	_tmp5_ = _tmp4_;
	_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, VALA_TYPE_PROPERTY, ValaProperty));
	prop = _tmp6_;
	_tmp7_ = vala_symbol_get_comment ((ValaSymbol*) acc);
	_tmp8_ = _tmp7_;
	if (_tmp8_ != NULL) {
		ValaCCodeFile* _tmp9_;
		ValaComment* _tmp10_;
		ValaComment* _tmp11_;
		const gchar* _tmp12_;
		const gchar* _tmp13_;
		ValaCCodeComment* _tmp14_;
		ValaCCodeComment* _tmp15_;
		_tmp9_ = self->cfile;
		_tmp10_ = vala_symbol_get_comment ((ValaSymbol*) acc);
		_tmp11_ = _tmp10_;
		_tmp12_ = vala_comment_get_content (_tmp11_);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_ccode_comment_new (_tmp13_);
		_tmp15_ = _tmp14_;
		vala_ccode_file_add_type_member_definition (_tmp9_, (ValaCCodeNode*) _tmp15_);
		_vala_ccode_node_unref0 (_tmp15_);
	}
	_tmp17_ = vala_property_accessor_get_readable (acc);
	_tmp18_ = _tmp17_;
	if (_tmp18_) {
		ValaProperty* _tmp19_;
		ValaDataType* _tmp20_;
		ValaDataType* _tmp21_;
		_tmp19_ = prop;
		_tmp20_ = vala_property_get_property_type (_tmp19_);
		_tmp21_ = _tmp20_;
		_tmp16_ = vala_data_type_is_real_non_null_struct_type (_tmp21_);
	} else {
		_tmp16_ = FALSE;
	}
	returns_real_struct = _tmp16_;
	_tmp22_ = vala_subroutine_get_result_var ((ValaSubroutine*) acc);
	_tmp23_ = _tmp22_;
	if (_tmp23_ != NULL) {
		ValaLocalVariable* _tmp24_;
		ValaLocalVariable* _tmp25_;
		_tmp24_ = vala_subroutine_get_result_var ((ValaSubroutine*) acc);
		_tmp25_ = _tmp24_;
		vala_code_node_accept ((ValaCodeNode*) _tmp25_, (ValaCodeVisitor*) self);
	}
	_tmp26_ = prop;
	_tmp27_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp26_);
	_tmp28_ = _tmp27_;
	_tmp29_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
	t = _tmp29_;
	_tmp32_ = prop;
	_tmp33_ = vala_property_get_is_abstract (_tmp32_);
	_tmp34_ = _tmp33_;
	if (_tmp34_) {
		_tmp31_ = TRUE;
	} else {
		ValaProperty* _tmp35_;
		gboolean _tmp36_;
		gboolean _tmp37_;
		_tmp35_ = prop;
		_tmp36_ = vala_property_get_is_virtual (_tmp35_);
		_tmp37_ = _tmp36_;
		_tmp31_ = _tmp37_;
	}
	if (_tmp31_) {
		_tmp30_ = TRUE;
	} else {
		gboolean _tmp38_ = FALSE;
		ValaProperty* _tmp39_;
		ValaProperty* _tmp40_;
		ValaProperty* _tmp41_;
		_tmp39_ = prop;
		_tmp40_ = vala_property_get_base_property (_tmp39_);
		_tmp41_ = _tmp40_;
		if (_tmp41_ == NULL) {
			ValaProperty* _tmp42_;
			ValaProperty* _tmp43_;
			ValaProperty* _tmp44_;
			_tmp42_ = prop;
			_tmp43_ = vala_property_get_base_interface_property (_tmp42_);
			_tmp44_ = _tmp43_;
			_tmp38_ = _tmp44_ == NULL;
		} else {
			_tmp38_ = FALSE;
		}
		_tmp30_ = _tmp38_;
	}
	if (_tmp30_) {
		ValaCCodeFile* _tmp45_;
		gboolean _tmp46_ = FALSE;
		gboolean _tmp47_;
		gboolean _tmp48_;
		_tmp45_ = self->cfile;
		vala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp45_);
		_tmp47_ = vala_property_accessor_get_readable (acc);
		_tmp48_ = _tmp47_;
		if (_tmp48_) {
			_tmp46_ = TRUE;
		} else {
			gboolean _tmp49_;
			gboolean _tmp50_;
			_tmp49_ = vala_property_accessor_get_writable (acc);
			_tmp50_ = _tmp49_;
			_tmp46_ = _tmp50_;
		}
		if (_tmp46_) {
			gboolean _tmp51_ = FALSE;
			ValaProperty* _tmp52_;
			gboolean _tmp59_ = FALSE;
			ValaProperty* _tmp60_;
			_tmp52_ = prop;
			if (!vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp52_)) {
				gboolean _tmp53_ = FALSE;
				ValaSymbolAccessibility _tmp54_;
				ValaSymbolAccessibility _tmp55_;
				_tmp54_ = vala_symbol_get_access ((ValaSymbol*) acc);
				_tmp55_ = _tmp54_;
				if (_tmp55_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
					_tmp53_ = TRUE;
				} else {
					ValaSymbolAccessibility _tmp56_;
					ValaSymbolAccessibility _tmp57_;
					_tmp56_ = vala_symbol_get_access ((ValaSymbol*) acc);
					_tmp57_ = _tmp56_;
					_tmp53_ = _tmp57_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED;
				}
				_tmp51_ = _tmp53_;
			} else {
				_tmp51_ = FALSE;
			}
			if (_tmp51_) {
				ValaCCodeFile* _tmp58_;
				_tmp58_ = self->header_file;
				vala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp58_);
			}
			_tmp60_ = prop;
			if (!vala_symbol_is_private_symbol ((ValaSymbol*) _tmp60_)) {
				ValaSymbolAccessibility _tmp61_;
				ValaSymbolAccessibility _tmp62_;
				_tmp61_ = vala_symbol_get_access ((ValaSymbol*) acc);
				_tmp62_ = _tmp61_;
				_tmp59_ = _tmp62_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
			} else {
				_tmp59_ = FALSE;
			}
			if (_tmp59_) {
				ValaCCodeFile* _tmp63_;
				_tmp63_ = self->internal_header_file;
				vala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp63_);
			}
		}
	}
	_tmp64_ = vala_symbol_get_source_type ((ValaSymbol*) acc);
	_tmp65_ = _tmp64_;
	if (_tmp65_ == VALA_SOURCE_FILE_TYPE_FAST) {
		vala_ccode_base_module_pop_line (self);
		vala_ccode_base_module_pop_context (self);
		_vala_code_node_unref0 (t);
		_vala_code_node_unref0 (prop);
		return;
	}
	_tmp66_ = t;
	_tmp67_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) _tmp66_);
	this_type = _tmp67_;
	_tmp68_ = this_type;
	_tmp69_ = vala_get_ccode_name ((ValaCodeNode*) _tmp68_);
	_tmp70_ = _tmp69_;
	_tmp71_ = vala_ccode_parameter_new ("self", _tmp70_);
	_tmp72_ = _tmp71_;
	_g_free0 (_tmp70_);
	cselfparam = _tmp72_;
	_tmp74_ = t;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp74_, VALA_TYPE_STRUCT)) {
		ValaTypeSymbol* _tmp75_;
		_tmp75_ = t;
		_tmp73_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, VALA_TYPE_STRUCT, ValaStruct));
	} else {
		_tmp73_ = FALSE;
	}
	if (_tmp73_) {
		ValaCCodeParameter* _tmp76_;
		ValaCCodeParameter* _tmp77_;
		const gchar* _tmp78_;
		const gchar* _tmp79_;
		gchar* _tmp80_;
		gchar* _tmp81_;
		_tmp76_ = cselfparam;
		_tmp77_ = cselfparam;
		_tmp78_ = vala_ccode_parameter_get_type_name (_tmp77_);
		_tmp79_ = _tmp78_;
		_tmp80_ = g_strconcat (_tmp79_, "*", NULL);
		_tmp81_ = _tmp80_;
		vala_ccode_parameter_set_type_name (_tmp77_, _tmp81_);
		_g_free0 (_tmp81_);
	}
	if (returns_real_struct) {
		ValaDataType* _tmp82_;
		ValaDataType* _tmp83_;
		gchar* _tmp84_;
		gchar* _tmp85_;
		gchar* _tmp86_;
		gchar* _tmp87_;
		ValaCCodeParameter* _tmp88_;
		_tmp82_ = vala_property_accessor_get_value_type (acc);
		_tmp83_ = _tmp82_;
		_tmp84_ = vala_get_ccode_name ((ValaCodeNode*) _tmp83_);
		_tmp85_ = _tmp84_;
		_tmp86_ = g_strdup_printf ("%s *", _tmp85_);
		_tmp87_ = _tmp86_;
		_tmp88_ = vala_ccode_parameter_new ("result", _tmp87_);
		_vala_ccode_node_unref0 (cvalueparam);
		cvalueparam = _tmp88_;
		_g_free0 (_tmp87_);
		_g_free0 (_tmp85_);
	} else {
		gboolean _tmp89_ = FALSE;
		gboolean _tmp90_;
		gboolean _tmp91_;
		_tmp90_ = vala_property_accessor_get_readable (acc);
		_tmp91_ = _tmp90_;
		if (!_tmp91_) {
			ValaProperty* _tmp92_;
			ValaDataType* _tmp93_;
			ValaDataType* _tmp94_;
			_tmp92_ = prop;
			_tmp93_ = vala_property_get_property_type (_tmp92_);
			_tmp94_ = _tmp93_;
			_tmp89_ = vala_data_type_is_real_non_null_struct_type (_tmp94_);
		} else {
			_tmp89_ = FALSE;
		}
		if (_tmp89_) {
			ValaDataType* _tmp95_;
			ValaDataType* _tmp96_;
			gchar* _tmp97_;
			gchar* _tmp98_;
			gchar* _tmp99_;
			gchar* _tmp100_;
			ValaCCodeParameter* _tmp101_;
			_tmp95_ = vala_property_accessor_get_value_type (acc);
			_tmp96_ = _tmp95_;
			_tmp97_ = vala_get_ccode_name ((ValaCodeNode*) _tmp96_);
			_tmp98_ = _tmp97_;
			_tmp99_ = g_strdup_printf ("%s *", _tmp98_);
			_tmp100_ = _tmp99_;
			_tmp101_ = vala_ccode_parameter_new ("value", _tmp100_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp101_;
			_g_free0 (_tmp100_);
			_g_free0 (_tmp98_);
		} else {
			ValaDataType* _tmp102_;
			ValaDataType* _tmp103_;
			gchar* _tmp104_;
			gchar* _tmp105_;
			ValaCCodeParameter* _tmp106_;
			_tmp102_ = vala_property_accessor_get_value_type (acc);
			_tmp103_ = _tmp102_;
			_tmp104_ = vala_get_ccode_name ((ValaCodeNode*) _tmp103_);
			_tmp105_ = _tmp104_;
			_tmp106_ = vala_ccode_parameter_new ("value", _tmp105_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp106_;
			_g_free0 (_tmp105_);
		}
	}
	_tmp108_ = prop;
	_tmp109_ = vala_property_get_is_abstract (_tmp108_);
	_tmp110_ = _tmp109_;
	if (_tmp110_) {
		_tmp107_ = TRUE;
	} else {
		ValaProperty* _tmp111_;
		gboolean _tmp112_;
		gboolean _tmp113_;
		_tmp111_ = prop;
		_tmp112_ = vala_property_get_is_virtual (_tmp111_);
		_tmp113_ = _tmp112_;
		_tmp107_ = _tmp113_;
	}
	if (_tmp107_) {
		ValaCCodeFunction* function = NULL;
		gboolean _tmp114_ = FALSE;
		gboolean _tmp115_;
		gboolean _tmp116_;
		ValaCCodeFunction* _tmp127_;
		ValaCCodeParameter* _tmp128_;
		gboolean _tmp129_ = FALSE;
		gboolean _tmp130_ = FALSE;
		gboolean _tmp131_;
		gboolean _tmp132_;
		gboolean _tmp137_ = FALSE;
		ValaDataType* _tmp138_;
		ValaDataType* _tmp139_;
		gboolean _tmp209_ = FALSE;
		ValaProperty* _tmp210_;
		gboolean _tmp211_;
		gboolean _tmp212_;
		ValaCCodeFunction* _tmp239_;
		gboolean _tmp240_ = FALSE;
		ValaDataType* _tmp241_;
		ValaDataType* _tmp242_;
		ValaProperty* _tmp261_;
		ValaMemberBinding _tmp262_;
		ValaMemberBinding _tmp263_;
		ValaCCodeExpression* vcast = NULL;
		ValaProperty* _tmp271_;
		ValaSymbol* _tmp272_;
		ValaSymbol* _tmp273_;
		gboolean _tmp334_;
		gboolean _tmp335_;
		ValaCCodeFile* _tmp490_;
		ValaCCodeFunction* _tmp491_;
		_tmp115_ = vala_property_accessor_get_readable (acc);
		_tmp116_ = _tmp115_;
		if (_tmp116_) {
			_tmp114_ = !returns_real_struct;
		} else {
			_tmp114_ = FALSE;
		}
		if (_tmp114_) {
			gchar* _tmp117_;
			gchar* _tmp118_;
			ValaDataType* _tmp119_;
			ValaDataType* _tmp120_;
			gchar* _tmp121_;
			gchar* _tmp122_;
			ValaCCodeFunction* _tmp123_;
			_tmp117_ = vala_get_ccode_name ((ValaCodeNode*) acc);
			_tmp118_ = _tmp117_;
			_tmp119_ = vala_ccode_base_module_get_current_return_type (self);
			_tmp120_ = _tmp119_;
			_tmp121_ = vala_get_ccode_name ((ValaCodeNode*) _tmp120_);
			_tmp122_ = _tmp121_;
			_tmp123_ = vala_ccode_function_new (_tmp118_, _tmp122_);
			_vala_ccode_node_unref0 (function);
			function = _tmp123_;
			_g_free0 (_tmp122_);
			_g_free0 (_tmp118_);
		} else {
			gchar* _tmp124_;
			gchar* _tmp125_;
			ValaCCodeFunction* _tmp126_;
			_tmp124_ = vala_get_ccode_name ((ValaCodeNode*) acc);
			_tmp125_ = _tmp124_;
			_tmp126_ = vala_ccode_function_new (_tmp125_, "void");
			_vala_ccode_node_unref0 (function);
			function = _tmp126_;
			_g_free0 (_tmp125_);
		}
		_tmp127_ = function;
		_tmp128_ = cselfparam;
		vala_ccode_function_add_parameter (_tmp127_, _tmp128_);
		_tmp131_ = vala_property_accessor_get_writable (acc);
		_tmp132_ = _tmp131_;
		if (_tmp132_) {
			_tmp130_ = TRUE;
		} else {
			gboolean _tmp133_;
			gboolean _tmp134_;
			_tmp133_ = vala_property_accessor_get_construction (acc);
			_tmp134_ = _tmp133_;
			_tmp130_ = _tmp134_;
		}
		if (_tmp130_) {
			_tmp129_ = TRUE;
		} else {
			_tmp129_ = returns_real_struct;
		}
		if (_tmp129_) {
			ValaCCodeFunction* _tmp135_;
			ValaCCodeParameter* _tmp136_;
			_tmp135_ = function;
			_tmp136_ = cvalueparam;
			vala_ccode_function_add_parameter (_tmp135_, _tmp136_);
		}
		_tmp138_ = vala_property_accessor_get_value_type (acc);
		_tmp139_ = _tmp138_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp139_, VALA_TYPE_ARRAY_TYPE)) {
			ValaProperty* _tmp140_;
			_tmp140_ = prop;
			_tmp137_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp140_);
		} else {
			_tmp137_ = FALSE;
		}
		if (_tmp137_) {
			ValaArrayType* array_type = NULL;
			ValaDataType* _tmp141_;
			ValaDataType* _tmp142_;
			ValaArrayType* _tmp143_;
			gchar* length_ctype = NULL;
			ValaProperty* _tmp144_;
			gchar* _tmp145_;
			_tmp141_ = vala_property_accessor_get_value_type (acc);
			_tmp142_ = _tmp141_;
			_tmp143_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array_type = _tmp143_;
			_tmp144_ = prop;
			_tmp145_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp144_);
			length_ctype = _tmp145_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp146_ = FALSE;
					_tmp146_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp148_;
						gint _tmp149_;
						gint _tmp150_;
						const gchar* _tmp151_ = NULL;
						gboolean _tmp152_;
						gboolean _tmp153_;
						gchar* _tmp154_ = NULL;
						gboolean _tmp155_;
						gboolean _tmp156_;
						ValaCCodeFunction* _tmp161_;
						gchar* _tmp162_;
						gchar* _tmp163_;
						ValaCCodeParameter* _tmp164_;
						ValaCCodeParameter* _tmp165_;
						if (!_tmp146_) {
							gint _tmp147_;
							_tmp147_ = dim;
							dim = _tmp147_ + 1;
						}
						_tmp146_ = FALSE;
						_tmp148_ = array_type;
						_tmp149_ = vala_array_type_get_rank (_tmp148_);
						_tmp150_ = _tmp149_;
						if (!(dim <= _tmp150_)) {
							break;
						}
						_tmp152_ = vala_property_accessor_get_readable (acc);
						_tmp153_ = _tmp152_;
						if (_tmp153_) {
							_tmp151_ = "result";
						} else {
							_tmp151_ = "value";
						}
						_tmp155_ = vala_property_accessor_get_readable (acc);
						_tmp156_ = _tmp155_;
						if (_tmp156_) {
							const gchar* _tmp157_;
							gchar* _tmp158_;
							_tmp157_ = length_ctype;
							_tmp158_ = g_strconcat (_tmp157_, "*", NULL);
							_g_free0 (_tmp154_);
							_tmp154_ = _tmp158_;
						} else {
							const gchar* _tmp159_;
							gchar* _tmp160_;
							_tmp159_ = length_ctype;
							_tmp160_ = g_strdup (_tmp159_);
							_g_free0 (_tmp154_);
							_tmp154_ = _tmp160_;
						}
						_tmp161_ = function;
						_tmp162_ = vala_ccode_base_module_get_array_length_cname (self, _tmp151_, dim);
						_tmp163_ = _tmp162_;
						_tmp164_ = vala_ccode_parameter_new (_tmp163_, _tmp154_);
						_tmp165_ = _tmp164_;
						vala_ccode_function_add_parameter (_tmp161_, _tmp165_);
						_vala_ccode_node_unref0 (_tmp165_);
						_g_free0 (_tmp163_);
						_g_free0 (_tmp154_);
					}
				}
			}
			_g_free0 (length_ctype);
			_vala_code_node_unref0 (array_type);
		} else {
			gboolean _tmp166_ = FALSE;
			gboolean _tmp167_ = FALSE;
			ValaDataType* _tmp168_;
			ValaDataType* _tmp169_;
			_tmp168_ = vala_property_accessor_get_value_type (acc);
			_tmp169_ = _tmp168_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp169_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaProperty* _tmp170_;
				_tmp170_ = prop;
				_tmp167_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp170_);
			} else {
				_tmp167_ = FALSE;
			}
			if (_tmp167_) {
				ValaDataType* _tmp171_;
				ValaDataType* _tmp172_;
				ValaDelegate* _tmp173_;
				ValaDelegate* _tmp174_;
				gboolean _tmp175_;
				gboolean _tmp176_;
				_tmp171_ = vala_property_accessor_get_value_type (acc);
				_tmp172_ = _tmp171_;
				_tmp173_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp172_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				_tmp174_ = _tmp173_;
				_tmp175_ = vala_delegate_get_has_target (_tmp174_);
				_tmp176_ = _tmp175_;
				_tmp166_ = _tmp176_;
			} else {
				_tmp166_ = FALSE;
			}
			if (_tmp166_) {
				const gchar* _tmp177_ = NULL;
				gboolean _tmp178_;
				gboolean _tmp179_;
				gchar* _tmp180_ = NULL;
				gboolean _tmp181_;
				gboolean _tmp182_;
				ValaCCodeFunction* _tmp189_;
				gchar* _tmp190_;
				gchar* _tmp191_;
				ValaCCodeParameter* _tmp192_;
				ValaCCodeParameter* _tmp193_;
				gboolean _tmp194_ = FALSE;
				gboolean _tmp195_;
				gboolean _tmp196_;
				_tmp178_ = vala_property_accessor_get_readable (acc);
				_tmp179_ = _tmp178_;
				if (_tmp179_) {
					_tmp177_ = "result";
				} else {
					_tmp177_ = "value";
				}
				_tmp181_ = vala_property_accessor_get_readable (acc);
				_tmp182_ = _tmp181_;
				if (_tmp182_) {
					ValaDataType* _tmp183_;
					gchar* _tmp184_;
					gchar* _tmp185_;
					gchar* _tmp186_;
					_tmp183_ = self->delegate_target_type;
					_tmp184_ = vala_get_ccode_name ((ValaCodeNode*) _tmp183_);
					_tmp185_ = _tmp184_;
					_tmp186_ = g_strconcat (_tmp185_, "*", NULL);
					_g_free0 (_tmp180_);
					_tmp180_ = _tmp186_;
					_g_free0 (_tmp185_);
				} else {
					ValaDataType* _tmp187_;
					gchar* _tmp188_;
					_tmp187_ = self->delegate_target_type;
					_tmp188_ = vala_get_ccode_name ((ValaCodeNode*) _tmp187_);
					_g_free0 (_tmp180_);
					_tmp180_ = _tmp188_;
				}
				_tmp189_ = function;
				_tmp190_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp177_);
				_tmp191_ = _tmp190_;
				_tmp192_ = vala_ccode_parameter_new (_tmp191_, _tmp180_);
				_tmp193_ = _tmp192_;
				vala_ccode_function_add_parameter (_tmp189_, _tmp193_);
				_vala_ccode_node_unref0 (_tmp193_);
				_g_free0 (_tmp191_);
				_tmp195_ = vala_property_accessor_get_readable (acc);
				_tmp196_ = _tmp195_;
				if (!_tmp196_) {
					ValaDataType* _tmp197_;
					ValaDataType* _tmp198_;
					gboolean _tmp199_;
					gboolean _tmp200_;
					_tmp197_ = vala_property_accessor_get_value_type (acc);
					_tmp198_ = _tmp197_;
					_tmp199_ = vala_data_type_get_value_owned (_tmp198_);
					_tmp200_ = _tmp199_;
					_tmp194_ = _tmp200_;
				} else {
					_tmp194_ = FALSE;
				}
				if (_tmp194_) {
					ValaCCodeFunction* _tmp201_;
					gchar* _tmp202_;
					gchar* _tmp203_;
					ValaDelegateType* _tmp204_;
					gchar* _tmp205_;
					gchar* _tmp206_;
					ValaCCodeParameter* _tmp207_;
					ValaCCodeParameter* _tmp208_;
					_tmp201_ = function;
					_tmp202_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
					_tmp203_ = _tmp202_;
					_tmp204_ = self->delegate_target_destroy_type;
					_tmp205_ = vala_get_ccode_name ((ValaCodeNode*) _tmp204_);
					_tmp206_ = _tmp205_;
					_tmp207_ = vala_ccode_parameter_new (_tmp203_, _tmp206_);
					_tmp208_ = _tmp207_;
					vala_ccode_function_add_parameter (_tmp201_, _tmp208_);
					_vala_ccode_node_unref0 (_tmp208_);
					_g_free0 (_tmp206_);
					_g_free0 (_tmp203_);
				}
				_g_free0 (_tmp180_);
			}
		}
		_tmp210_ = prop;
		_tmp211_ = vala_property_get_is_abstract (_tmp210_);
		_tmp212_ = _tmp211_;
		if (!_tmp212_) {
			gboolean _tmp213_ = FALSE;
			gboolean _tmp214_ = FALSE;
			ValaProperty* _tmp215_;
			_tmp215_ = prop;
			if (vala_symbol_is_private_symbol ((ValaSymbol*) _tmp215_)) {
				_tmp214_ = TRUE;
			} else {
				gboolean _tmp216_ = FALSE;
				gboolean _tmp217_;
				gboolean _tmp218_;
				_tmp217_ = vala_property_accessor_get_readable (acc);
				_tmp218_ = _tmp217_;
				if (_tmp218_) {
					_tmp216_ = TRUE;
				} else {
					gboolean _tmp219_;
					gboolean _tmp220_;
					_tmp219_ = vala_property_accessor_get_writable (acc);
					_tmp220_ = _tmp219_;
					_tmp216_ = _tmp220_;
				}
				_tmp214_ = !_tmp216_;
			}
			if (_tmp214_) {
				_tmp213_ = TRUE;
			} else {
				ValaSymbolAccessibility _tmp221_;
				ValaSymbolAccessibility _tmp222_;
				_tmp221_ = vala_symbol_get_access ((ValaSymbol*) acc);
				_tmp222_ = _tmp221_;
				_tmp213_ = _tmp222_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
			}
			_tmp209_ = _tmp213_;
		} else {
			_tmp209_ = FALSE;
		}
		if (_tmp209_) {
			ValaCCodeFunction* _tmp223_;
			ValaCCodeFunction* _tmp224_;
			ValaCCodeModifiers _tmp225_;
			ValaCCodeModifiers _tmp226_;
			_tmp223_ = function;
			_tmp224_ = function;
			_tmp225_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp224_);
			_tmp226_ = _tmp225_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp224_, _tmp226_ | VALA_CCODE_MODIFIERS_STATIC);
		} else {
			gboolean _tmp227_ = FALSE;
			ValaCodeContext* _tmp228_;
			gboolean _tmp229_;
			gboolean _tmp230_;
			_tmp228_ = self->priv->_context;
			_tmp229_ = vala_code_context_get_hide_internal (_tmp228_);
			_tmp230_ = _tmp229_;
			if (_tmp230_) {
				gboolean _tmp231_ = FALSE;
				ValaProperty* _tmp232_;
				_tmp232_ = prop;
				if (vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp232_)) {
					_tmp231_ = TRUE;
				} else {
					ValaSymbolAccessibility _tmp233_;
					ValaSymbolAccessibility _tmp234_;
					_tmp233_ = vala_symbol_get_access ((ValaSymbol*) acc);
					_tmp234_ = _tmp233_;
					_tmp231_ = _tmp234_ == VALA_SYMBOL_ACCESSIBILITY_INTERNAL;
				}
				_tmp227_ = _tmp231_;
			} else {
				_tmp227_ = FALSE;
			}
			if (_tmp227_) {
				ValaCCodeFunction* _tmp235_;
				ValaCCodeFunction* _tmp236_;
				ValaCCodeModifiers _tmp237_;
				ValaCCodeModifiers _tmp238_;
				_tmp235_ = function;
				_tmp236_ = function;
				_tmp237_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp236_);
				_tmp238_ = _tmp237_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp236_, _tmp238_ | VALA_CCODE_MODIFIERS_INTERNAL);
			}
		}
		_tmp239_ = function;
		vala_ccode_base_module_push_function (self, _tmp239_);
		_tmp241_ = vala_property_accessor_get_value_type (acc);
		_tmp242_ = _tmp241_;
		if (vala_data_type_is_non_null_simple_type (_tmp242_)) {
			ValaDataType* _tmp243_;
			ValaDataType* _tmp244_;
			ValaCCodeExpression* _tmp245_;
			ValaCCodeExpression* _tmp246_;
			_tmp243_ = vala_property_accessor_get_value_type (acc);
			_tmp244_ = _tmp243_;
			_tmp245_ = vala_ccode_base_module_default_value_for_type (self, _tmp244_, FALSE, FALSE);
			_tmp246_ = _tmp245_;
			_tmp240_ = _tmp246_ == NULL;
			_vala_ccode_node_unref0 (_tmp246_);
		} else {
			_tmp240_ = FALSE;
		}
		if (_tmp240_) {
			ValaCCodeVariableDeclarator* vardecl = NULL;
			ValaDataType* _tmp247_;
			ValaDataType* _tmp248_;
			ValaCCodeExpression* _tmp249_;
			ValaCCodeExpression* _tmp250_;
			ValaCCodeVariableDeclarator* _tmp251_;
			ValaCCodeVariableDeclarator* _tmp252_;
			ValaCCodeVariableDeclarator* _tmp253_;
			ValaCCodeFunction* _tmp254_;
			ValaCCodeFunction* _tmp255_;
			ValaDataType* _tmp256_;
			ValaDataType* _tmp257_;
			gchar* _tmp258_;
			gchar* _tmp259_;
			ValaCCodeVariableDeclarator* _tmp260_;
			_tmp247_ = vala_property_accessor_get_value_type (acc);
			_tmp248_ = _tmp247_;
			_tmp249_ = vala_ccode_base_module_default_value_for_type (self, _tmp248_, TRUE, FALSE);
			_tmp250_ = _tmp249_;
			_tmp251_ = vala_ccode_variable_declarator_new ("result", _tmp250_, NULL);
			_tmp252_ = _tmp251_;
			_vala_ccode_node_unref0 (_tmp250_);
			vardecl = _tmp252_;
			_tmp253_ = vardecl;
			vala_ccode_variable_declarator_set_init0 (_tmp253_, TRUE);
			_tmp254_ = vala_ccode_base_module_get_ccode (self);
			_tmp255_ = _tmp254_;
			_tmp256_ = vala_property_accessor_get_value_type (acc);
			_tmp257_ = _tmp256_;
			_tmp258_ = vala_get_ccode_name ((ValaCodeNode*) _tmp257_);
			_tmp259_ = _tmp258_;
			_tmp260_ = vardecl;
			vala_ccode_function_add_declaration (_tmp255_, _tmp259_, (ValaCCodeDeclarator*) _tmp260_, 0);
			_g_free0 (_tmp259_);
			_vala_ccode_node_unref0 (vardecl);
		}
		_tmp261_ = prop;
		_tmp262_ = vala_property_get_binding (_tmp261_);
		_tmp263_ = _tmp262_;
		if (_tmp263_ == VALA_MEMBER_BINDING_INSTANCE) {
			gboolean _tmp264_ = FALSE;
			gboolean _tmp265_;
			gboolean _tmp266_;
			_tmp265_ = vala_property_accessor_get_readable (acc);
			_tmp266_ = _tmp265_;
			if (!_tmp266_) {
				_tmp264_ = TRUE;
			} else {
				_tmp264_ = returns_real_struct;
			}
			if (_tmp264_) {
				ValaProperty* _tmp267_;
				ValaTypeSymbol* _tmp268_;
				_tmp267_ = prop;
				_tmp268_ = t;
				vala_ccode_base_module_create_property_type_check_statement (self, _tmp267_, FALSE, _tmp268_, TRUE, "self");
			} else {
				ValaProperty* _tmp269_;
				ValaTypeSymbol* _tmp270_;
				_tmp269_ = prop;
				_tmp270_ = t;
				vala_ccode_base_module_create_property_type_check_statement (self, _tmp269_, TRUE, _tmp270_, TRUE, "self");
			}
		}
		_tmp271_ = prop;
		_tmp272_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp271_);
		_tmp273_ = _tmp272_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp273_, VALA_TYPE_INTERFACE)) {
			ValaInterface* iface = NULL;
			ValaProperty* _tmp274_;
			ValaSymbol* _tmp275_;
			ValaSymbol* _tmp276_;
			ValaInterface* _tmp277_;
			ValaCCodeIdentifier* _tmp278_;
			ValaCCodeFunctionCall* vcastcall = NULL;
			ValaInterface* _tmp279_;
			gchar* _tmp280_;
			gchar* _tmp281_;
			ValaCCodeIdentifier* _tmp282_;
			ValaCCodeIdentifier* _tmp283_;
			ValaCCodeFunctionCall* _tmp284_;
			ValaCCodeFunctionCall* _tmp285_;
			ValaCCodeFunctionCall* _tmp286_;
			ValaCCodeIdentifier* _tmp287_;
			ValaCCodeIdentifier* _tmp288_;
			ValaCCodeFunction* _tmp289_;
			ValaCCodeFunction* _tmp290_;
			ValaInterface* _tmp291_;
			gchar* _tmp292_;
			gchar* _tmp293_;
			gchar* _tmp294_;
			gchar* _tmp295_;
			ValaCCodeVariableDeclarator* _tmp296_;
			ValaCCodeVariableDeclarator* _tmp297_;
			ValaCCodeFunction* _tmp298_;
			ValaCCodeFunction* _tmp299_;
			ValaCCodeExpression* _tmp300_;
			ValaCCodeFunctionCall* _tmp301_;
			_tmp274_ = prop;
			_tmp275_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp274_);
			_tmp276_ = _tmp275_;
			_tmp277_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp276_, VALA_TYPE_INTERFACE, ValaInterface));
			iface = _tmp277_;
			_tmp278_ = vala_ccode_identifier_new ("_iface_");
			_vala_ccode_node_unref0 (vcast);
			vcast = (ValaCCodeExpression*) _tmp278_;
			_tmp279_ = iface;
			_tmp280_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp279_);
			_tmp281_ = _tmp280_;
			_tmp282_ = vala_ccode_identifier_new (_tmp281_);
			_tmp283_ = _tmp282_;
			_tmp284_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp283_);
			_tmp285_ = _tmp284_;
			_vala_ccode_node_unref0 (_tmp283_);
			_g_free0 (_tmp281_);
			vcastcall = _tmp285_;
			_tmp286_ = vcastcall;
			_tmp287_ = vala_ccode_identifier_new ("self");
			_tmp288_ = _tmp287_;
			vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp286_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp288_);
			_vala_ccode_node_unref0 (_tmp288_);
			_tmp289_ = vala_ccode_base_module_get_ccode (self);
			_tmp290_ = _tmp289_;
			_tmp291_ = iface;
			_tmp292_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) _tmp291_);
			_tmp293_ = _tmp292_;
			_tmp294_ = g_strdup_printf ("%s*", _tmp293_);
			_tmp295_ = _tmp294_;
			_tmp296_ = vala_ccode_variable_declarator_new ("_iface_", NULL, NULL);
			_tmp297_ = _tmp296_;
			vala_ccode_function_add_declaration (_tmp290_, _tmp295_, (ValaCCodeDeclarator*) _tmp297_, 0);
			_vala_ccode_node_unref0 (_tmp297_);
			_g_free0 (_tmp295_);
			_g_free0 (_tmp293_);
			_tmp298_ = vala_ccode_base_module_get_ccode (self);
			_tmp299_ = _tmp298_;
			_tmp300_ = vcast;
			_tmp301_ = vcastcall;
			vala_ccode_function_add_assignment (_tmp299_, _tmp300_, (ValaCCodeExpression*) _tmp301_);
			_vala_ccode_node_unref0 (vcastcall);
			_vala_code_node_unref0 (iface);
		} else {
			ValaClass* cl = NULL;
			ValaProperty* _tmp302_;
			ValaSymbol* _tmp303_;
			ValaSymbol* _tmp304_;
			ValaClass* _tmp305_;
			ValaClass* _tmp306_;
			gboolean _tmp307_;
			gboolean _tmp308_;
			_tmp302_ = prop;
			_tmp303_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp302_);
			_tmp304_ = _tmp303_;
			_tmp305_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp304_, VALA_TYPE_CLASS, ValaClass));
			cl = _tmp305_;
			_tmp306_ = cl;
			_tmp307_ = vala_class_get_is_compact (_tmp306_);
			_tmp308_ = _tmp307_;
			if (!_tmp308_) {
				ValaCCodeIdentifier* _tmp309_;
				ValaCCodeFunctionCall* vcastcall = NULL;
				ValaClass* _tmp310_;
				gchar* _tmp311_;
				gchar* _tmp312_;
				ValaCCodeIdentifier* _tmp313_;
				ValaCCodeIdentifier* _tmp314_;
				ValaCCodeFunctionCall* _tmp315_;
				ValaCCodeFunctionCall* _tmp316_;
				ValaCCodeFunctionCall* _tmp317_;
				ValaCCodeIdentifier* _tmp318_;
				ValaCCodeIdentifier* _tmp319_;
				ValaCCodeFunction* _tmp320_;
				ValaCCodeFunction* _tmp321_;
				ValaClass* _tmp322_;
				gchar* _tmp323_;
				gchar* _tmp324_;
				gchar* _tmp325_;
				gchar* _tmp326_;
				ValaCCodeVariableDeclarator* _tmp327_;
				ValaCCodeVariableDeclarator* _tmp328_;
				ValaCCodeFunction* _tmp329_;
				ValaCCodeFunction* _tmp330_;
				ValaCCodeExpression* _tmp331_;
				ValaCCodeFunctionCall* _tmp332_;
				_tmp309_ = vala_ccode_identifier_new ("_klass_");
				_vala_ccode_node_unref0 (vcast);
				vcast = (ValaCCodeExpression*) _tmp309_;
				_tmp310_ = cl;
				_tmp311_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp310_);
				_tmp312_ = _tmp311_;
				_tmp313_ = vala_ccode_identifier_new (_tmp312_);
				_tmp314_ = _tmp313_;
				_tmp315_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp314_);
				_tmp316_ = _tmp315_;
				_vala_ccode_node_unref0 (_tmp314_);
				_g_free0 (_tmp312_);
				vcastcall = _tmp316_;
				_tmp317_ = vcastcall;
				_tmp318_ = vala_ccode_identifier_new ("self");
				_tmp319_ = _tmp318_;
				vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp317_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp319_);
				_vala_ccode_node_unref0 (_tmp319_);
				_tmp320_ = vala_ccode_base_module_get_ccode (self);
				_tmp321_ = _tmp320_;
				_tmp322_ = cl;
				_tmp323_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) _tmp322_);
				_tmp324_ = _tmp323_;
				_tmp325_ = g_strdup_printf ("%s*", _tmp324_);
				_tmp326_ = _tmp325_;
				_tmp327_ = vala_ccode_variable_declarator_new ("_klass_", NULL, NULL);
				_tmp328_ = _tmp327_;
				vala_ccode_function_add_declaration (_tmp321_, _tmp326_, (ValaCCodeDeclarator*) _tmp328_, 0);
				_vala_ccode_node_unref0 (_tmp328_);
				_g_free0 (_tmp326_);
				_g_free0 (_tmp324_);
				_tmp329_ = vala_ccode_base_module_get_ccode (self);
				_tmp330_ = _tmp329_;
				_tmp331_ = vcast;
				_tmp332_ = vcastcall;
				vala_ccode_function_add_assignment (_tmp330_, _tmp331_, (ValaCCodeExpression*) _tmp332_);
				_vala_ccode_node_unref0 (vcastcall);
			} else {
				ValaCCodeIdentifier* _tmp333_;
				_tmp333_ = vala_ccode_identifier_new ("self");
				_vala_ccode_node_unref0 (vcast);
				vcast = (ValaCCodeExpression*) _tmp333_;
			}
			_vala_code_node_unref0 (cl);
		}
		_tmp334_ = vala_property_accessor_get_readable (acc);
		_tmp335_ = _tmp334_;
		if (_tmp335_) {
			ValaCCodeFunctionCall* vcall = NULL;
			ValaCCodeExpression* _tmp336_;
			ValaProperty* _tmp337_;
			const gchar* _tmp338_;
			const gchar* _tmp339_;
			gchar* _tmp340_;
			gchar* _tmp341_;
			ValaCCodeMemberAccess* _tmp342_;
			ValaCCodeMemberAccess* _tmp343_;
			ValaCCodeFunctionCall* _tmp344_;
			ValaCCodeFunctionCall* _tmp345_;
			ValaCCodeFunctionCall* _tmp346_;
			ValaCCodeIdentifier* _tmp347_;
			ValaCCodeIdentifier* _tmp348_;
			ValaCCodeFunction* _tmp349_;
			ValaCCodeFunction* _tmp350_;
			ValaCCodeFunctionCall* _tmp351_;
			ValaCCodeExpression* _tmp352_;
			ValaCCodeExpression* _tmp353_;
			ValaCCodeFunction* _tmp397_;
			ValaCCodeFunction* _tmp398_;
			gboolean _tmp399_ = FALSE;
			ValaDataType* _tmp400_;
			ValaDataType* _tmp401_;
			_tmp336_ = vcast;
			_tmp337_ = prop;
			_tmp338_ = vala_symbol_get_name ((ValaSymbol*) _tmp337_);
			_tmp339_ = _tmp338_;
			_tmp340_ = g_strdup_printf ("get_%s", _tmp339_);
			_tmp341_ = _tmp340_;
			_tmp342_ = vala_ccode_member_access_new_pointer (_tmp336_, _tmp341_);
			_tmp343_ = _tmp342_;
			_tmp344_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp343_);
			_tmp345_ = _tmp344_;
			_vala_ccode_node_unref0 (_tmp343_);
			_g_free0 (_tmp341_);
			vcall = _tmp345_;
			_tmp346_ = vcall;
			_tmp347_ = vala_ccode_identifier_new ("self");
			_tmp348_ = _tmp347_;
			vala_ccode_function_call_add_argument (_tmp346_, (ValaCCodeExpression*) _tmp348_);
			_vala_ccode_node_unref0 (_tmp348_);
			_tmp349_ = vala_ccode_base_module_get_ccode (self);
			_tmp350_ = _tmp349_;
			_tmp351_ = vcall;
			_tmp352_ = vala_ccode_function_call_get_call (_tmp351_);
			_tmp353_ = _tmp352_;
			vala_ccode_function_open_if (_tmp350_, _tmp353_);
			if (returns_real_struct) {
				ValaCCodeFunctionCall* _tmp354_;
				ValaCCodeIdentifier* _tmp355_;
				ValaCCodeIdentifier* _tmp356_;
				ValaCCodeFunction* _tmp357_;
				ValaCCodeFunction* _tmp358_;
				ValaCCodeFunctionCall* _tmp359_;
				_tmp354_ = vcall;
				_tmp355_ = vala_ccode_identifier_new ("result");
				_tmp356_ = _tmp355_;
				vala_ccode_function_call_add_argument (_tmp354_, (ValaCCodeExpression*) _tmp356_);
				_vala_ccode_node_unref0 (_tmp356_);
				_tmp357_ = vala_ccode_base_module_get_ccode (self);
				_tmp358_ = _tmp357_;
				_tmp359_ = vcall;
				vala_ccode_function_add_expression (_tmp358_, (ValaCCodeExpression*) _tmp359_);
			} else {
				gboolean _tmp360_ = FALSE;
				ValaDataType* _tmp361_;
				ValaDataType* _tmp362_;
				ValaCCodeFunction* _tmp394_;
				ValaCCodeFunction* _tmp395_;
				ValaCCodeFunctionCall* _tmp396_;
				_tmp361_ = vala_property_accessor_get_value_type (acc);
				_tmp362_ = _tmp361_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp362_, VALA_TYPE_ARRAY_TYPE)) {
					ValaProperty* _tmp363_;
					_tmp363_ = prop;
					_tmp360_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp363_);
				} else {
					_tmp360_ = FALSE;
				}
				if (_tmp360_) {
					ValaArrayType* array_type = NULL;
					ValaDataType* _tmp364_;
					ValaDataType* _tmp365_;
					ValaArrayType* _tmp366_;
					_tmp364_ = vala_property_accessor_get_value_type (acc);
					_tmp365_ = _tmp364_;
					_tmp366_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp365_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
					array_type = _tmp366_;
					{
						gint dim = 0;
						dim = 1;
						{
							gboolean _tmp367_ = FALSE;
							_tmp367_ = TRUE;
							while (TRUE) {
								ValaArrayType* _tmp369_;
								gint _tmp370_;
								gint _tmp371_;
								ValaCCodeIdentifier* len_expr = NULL;
								gchar* _tmp372_;
								gchar* _tmp373_;
								ValaCCodeIdentifier* _tmp374_;
								ValaCCodeIdentifier* _tmp375_;
								ValaCCodeFunctionCall* _tmp376_;
								ValaCCodeIdentifier* _tmp377_;
								if (!_tmp367_) {
									gint _tmp368_;
									_tmp368_ = dim;
									dim = _tmp368_ + 1;
								}
								_tmp367_ = FALSE;
								_tmp369_ = array_type;
								_tmp370_ = vala_array_type_get_rank (_tmp369_);
								_tmp371_ = _tmp370_;
								if (!(dim <= _tmp371_)) {
									break;
								}
								_tmp372_ = vala_ccode_base_module_get_array_length_cname (self, "result", dim);
								_tmp373_ = _tmp372_;
								_tmp374_ = vala_ccode_identifier_new (_tmp373_);
								_tmp375_ = _tmp374_;
								_g_free0 (_tmp373_);
								len_expr = _tmp375_;
								_tmp376_ = vcall;
								_tmp377_ = len_expr;
								vala_ccode_function_call_add_argument (_tmp376_, (ValaCCodeExpression*) _tmp377_);
								_vala_ccode_node_unref0 (len_expr);
							}
						}
					}
					_vala_code_node_unref0 (array_type);
				} else {
					gboolean _tmp378_ = FALSE;
					gboolean _tmp379_ = FALSE;
					ValaDataType* _tmp380_;
					ValaDataType* _tmp381_;
					_tmp380_ = vala_property_accessor_get_value_type (acc);
					_tmp381_ = _tmp380_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp381_, VALA_TYPE_DELEGATE_TYPE)) {
						ValaProperty* _tmp382_;
						_tmp382_ = prop;
						_tmp379_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp382_);
					} else {
						_tmp379_ = FALSE;
					}
					if (_tmp379_) {
						ValaDataType* _tmp383_;
						ValaDataType* _tmp384_;
						ValaDelegate* _tmp385_;
						ValaDelegate* _tmp386_;
						gboolean _tmp387_;
						gboolean _tmp388_;
						_tmp383_ = vala_property_accessor_get_value_type (acc);
						_tmp384_ = _tmp383_;
						_tmp385_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp384_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
						_tmp386_ = _tmp385_;
						_tmp387_ = vala_delegate_get_has_target (_tmp386_);
						_tmp388_ = _tmp387_;
						_tmp378_ = _tmp388_;
					} else {
						_tmp378_ = FALSE;
					}
					if (_tmp378_) {
						ValaCCodeFunctionCall* _tmp389_;
						gchar* _tmp390_;
						gchar* _tmp391_;
						ValaCCodeIdentifier* _tmp392_;
						ValaCCodeIdentifier* _tmp393_;
						_tmp389_ = vcall;
						_tmp390_ = vala_ccode_base_module_get_delegate_target_cname (self, "result");
						_tmp391_ = _tmp390_;
						_tmp392_ = vala_ccode_identifier_new (_tmp391_);
						_tmp393_ = _tmp392_;
						vala_ccode_function_call_add_argument (_tmp389_, (ValaCCodeExpression*) _tmp393_);
						_vala_ccode_node_unref0 (_tmp393_);
						_g_free0 (_tmp391_);
					}
				}
				_tmp394_ = vala_ccode_base_module_get_ccode (self);
				_tmp395_ = _tmp394_;
				_tmp396_ = vcall;
				vala_ccode_function_add_return (_tmp395_, (ValaCCodeExpression*) _tmp396_);
			}
			_tmp397_ = vala_ccode_base_module_get_ccode (self);
			_tmp398_ = _tmp397_;
			vala_ccode_function_close (_tmp398_);
			_tmp400_ = vala_property_accessor_get_value_type (acc);
			_tmp401_ = _tmp400_;
			if (vala_data_type_is_non_null_simple_type (_tmp401_)) {
				ValaDataType* _tmp402_;
				ValaDataType* _tmp403_;
				ValaCCodeExpression* _tmp404_;
				ValaCCodeExpression* _tmp405_;
				_tmp402_ = vala_property_accessor_get_value_type (acc);
				_tmp403_ = _tmp402_;
				_tmp404_ = vala_ccode_base_module_default_value_for_type (self, _tmp403_, FALSE, FALSE);
				_tmp405_ = _tmp404_;
				_tmp399_ = _tmp405_ == NULL;
				_vala_ccode_node_unref0 (_tmp405_);
			} else {
				_tmp399_ = FALSE;
			}
			if (_tmp399_) {
				ValaCCodeFunction* _tmp406_;
				ValaCCodeFunction* _tmp407_;
				ValaCCodeIdentifier* _tmp408_;
				ValaCCodeIdentifier* _tmp409_;
				_tmp406_ = vala_ccode_base_module_get_ccode (self);
				_tmp407_ = _tmp406_;
				_tmp408_ = vala_ccode_identifier_new ("result");
				_tmp409_ = _tmp408_;
				vala_ccode_function_add_return (_tmp407_, (ValaCCodeExpression*) _tmp409_);
				_vala_ccode_node_unref0 (_tmp409_);
			} else {
				ValaDataType* _tmp410_;
				ValaDataType* _tmp411_;
				_tmp410_ = vala_property_accessor_get_value_type (acc);
				_tmp411_ = _tmp410_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp411_, VALA_TYPE_VOID_TYPE)) {
					ValaCCodeFunction* _tmp412_;
					ValaCCodeFunction* _tmp413_;
					ValaDataType* _tmp414_;
					ValaDataType* _tmp415_;
					ValaCCodeExpression* _tmp416_;
					ValaCCodeExpression* _tmp417_;
					_tmp412_ = vala_ccode_base_module_get_ccode (self);
					_tmp413_ = _tmp412_;
					_tmp414_ = vala_property_accessor_get_value_type (acc);
					_tmp415_ = _tmp414_;
					_tmp416_ = vala_ccode_base_module_default_value_for_type (self, _tmp415_, FALSE, TRUE);
					_tmp417_ = _tmp416_;
					vala_ccode_function_add_return (_tmp413_, _tmp417_);
					_vala_ccode_node_unref0 (_tmp417_);
				}
			}
			_vala_ccode_node_unref0 (vcall);
		} else {
			ValaCCodeFunctionCall* vcall = NULL;
			ValaCCodeExpression* _tmp418_;
			ValaProperty* _tmp419_;
			const gchar* _tmp420_;
			const gchar* _tmp421_;
			gchar* _tmp422_;
			gchar* _tmp423_;
			ValaCCodeMemberAccess* _tmp424_;
			ValaCCodeMemberAccess* _tmp425_;
			ValaCCodeFunctionCall* _tmp426_;
			ValaCCodeFunctionCall* _tmp427_;
			ValaCCodeFunctionCall* _tmp428_;
			ValaCCodeIdentifier* _tmp429_;
			ValaCCodeIdentifier* _tmp430_;
			ValaCCodeFunctionCall* _tmp431_;
			ValaCCodeIdentifier* _tmp432_;
			ValaCCodeIdentifier* _tmp433_;
			ValaCCodeFunction* _tmp434_;
			ValaCCodeFunction* _tmp435_;
			ValaCCodeFunctionCall* _tmp436_;
			ValaCCodeExpression* _tmp437_;
			ValaCCodeExpression* _tmp438_;
			gboolean _tmp439_ = FALSE;
			ValaDataType* _tmp440_;
			ValaDataType* _tmp441_;
			ValaCCodeFunction* _tmp485_;
			ValaCCodeFunction* _tmp486_;
			ValaCCodeFunctionCall* _tmp487_;
			ValaCCodeFunction* _tmp488_;
			ValaCCodeFunction* _tmp489_;
			_tmp418_ = vcast;
			_tmp419_ = prop;
			_tmp420_ = vala_symbol_get_name ((ValaSymbol*) _tmp419_);
			_tmp421_ = _tmp420_;
			_tmp422_ = g_strdup_printf ("set_%s", _tmp421_);
			_tmp423_ = _tmp422_;
			_tmp424_ = vala_ccode_member_access_new_pointer (_tmp418_, _tmp423_);
			_tmp425_ = _tmp424_;
			_tmp426_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp425_);
			_tmp427_ = _tmp426_;
			_vala_ccode_node_unref0 (_tmp425_);
			_g_free0 (_tmp423_);
			vcall = _tmp427_;
			_tmp428_ = vcall;
			_tmp429_ = vala_ccode_identifier_new ("self");
			_tmp430_ = _tmp429_;
			vala_ccode_function_call_add_argument (_tmp428_, (ValaCCodeExpression*) _tmp430_);
			_vala_ccode_node_unref0 (_tmp430_);
			_tmp431_ = vcall;
			_tmp432_ = vala_ccode_identifier_new ("value");
			_tmp433_ = _tmp432_;
			vala_ccode_function_call_add_argument (_tmp431_, (ValaCCodeExpression*) _tmp433_);
			_vala_ccode_node_unref0 (_tmp433_);
			_tmp434_ = vala_ccode_base_module_get_ccode (self);
			_tmp435_ = _tmp434_;
			_tmp436_ = vcall;
			_tmp437_ = vala_ccode_function_call_get_call (_tmp436_);
			_tmp438_ = _tmp437_;
			vala_ccode_function_open_if (_tmp435_, _tmp438_);
			_tmp440_ = vala_property_accessor_get_value_type (acc);
			_tmp441_ = _tmp440_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp441_, VALA_TYPE_ARRAY_TYPE)) {
				ValaProperty* _tmp442_;
				_tmp442_ = prop;
				_tmp439_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp442_);
			} else {
				_tmp439_ = FALSE;
			}
			if (_tmp439_) {
				ValaArrayType* array_type = NULL;
				ValaDataType* _tmp443_;
				ValaDataType* _tmp444_;
				ValaArrayType* _tmp445_;
				_tmp443_ = vala_property_accessor_get_value_type (acc);
				_tmp444_ = _tmp443_;
				_tmp445_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp444_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				array_type = _tmp445_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp446_ = FALSE;
						_tmp446_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp448_;
							gint _tmp449_;
							gint _tmp450_;
							ValaCCodeIdentifier* len_expr = NULL;
							gchar* _tmp451_;
							gchar* _tmp452_;
							ValaCCodeIdentifier* _tmp453_;
							ValaCCodeIdentifier* _tmp454_;
							ValaCCodeFunctionCall* _tmp455_;
							ValaCCodeIdentifier* _tmp456_;
							if (!_tmp446_) {
								gint _tmp447_;
								_tmp447_ = dim;
								dim = _tmp447_ + 1;
							}
							_tmp446_ = FALSE;
							_tmp448_ = array_type;
							_tmp449_ = vala_array_type_get_rank (_tmp448_);
							_tmp450_ = _tmp449_;
							if (!(dim <= _tmp450_)) {
								break;
							}
							_tmp451_ = vala_ccode_base_module_get_array_length_cname (self, "value", dim);
							_tmp452_ = _tmp451_;
							_tmp453_ = vala_ccode_identifier_new (_tmp452_);
							_tmp454_ = _tmp453_;
							_g_free0 (_tmp452_);
							len_expr = _tmp454_;
							_tmp455_ = vcall;
							_tmp456_ = len_expr;
							vala_ccode_function_call_add_argument (_tmp455_, (ValaCCodeExpression*) _tmp456_);
							_vala_ccode_node_unref0 (len_expr);
						}
					}
				}
				_vala_code_node_unref0 (array_type);
			} else {
				gboolean _tmp457_ = FALSE;
				gboolean _tmp458_ = FALSE;
				ValaDataType* _tmp459_;
				ValaDataType* _tmp460_;
				_tmp459_ = vala_property_accessor_get_value_type (acc);
				_tmp460_ = _tmp459_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp460_, VALA_TYPE_DELEGATE_TYPE)) {
					ValaProperty* _tmp461_;
					_tmp461_ = prop;
					_tmp458_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp461_);
				} else {
					_tmp458_ = FALSE;
				}
				if (_tmp458_) {
					ValaDataType* _tmp462_;
					ValaDataType* _tmp463_;
					ValaDelegate* _tmp464_;
					ValaDelegate* _tmp465_;
					gboolean _tmp466_;
					gboolean _tmp467_;
					_tmp462_ = vala_property_accessor_get_value_type (acc);
					_tmp463_ = _tmp462_;
					_tmp464_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp463_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
					_tmp465_ = _tmp464_;
					_tmp466_ = vala_delegate_get_has_target (_tmp465_);
					_tmp467_ = _tmp466_;
					_tmp457_ = _tmp467_;
				} else {
					_tmp457_ = FALSE;
				}
				if (_tmp457_) {
					ValaCCodeFunctionCall* _tmp468_;
					gchar* _tmp469_;
					gchar* _tmp470_;
					ValaCCodeIdentifier* _tmp471_;
					ValaCCodeIdentifier* _tmp472_;
					gboolean _tmp473_ = FALSE;
					gboolean _tmp474_;
					gboolean _tmp475_;
					_tmp468_ = vcall;
					_tmp469_ = vala_ccode_base_module_get_delegate_target_cname (self, "value");
					_tmp470_ = _tmp469_;
					_tmp471_ = vala_ccode_identifier_new (_tmp470_);
					_tmp472_ = _tmp471_;
					vala_ccode_function_call_add_argument (_tmp468_, (ValaCCodeExpression*) _tmp472_);
					_vala_ccode_node_unref0 (_tmp472_);
					_g_free0 (_tmp470_);
					_tmp474_ = vala_property_accessor_get_readable (acc);
					_tmp475_ = _tmp474_;
					if (!_tmp475_) {
						ValaDataType* _tmp476_;
						ValaDataType* _tmp477_;
						gboolean _tmp478_;
						gboolean _tmp479_;
						_tmp476_ = vala_property_accessor_get_value_type (acc);
						_tmp477_ = _tmp476_;
						_tmp478_ = vala_data_type_get_value_owned (_tmp477_);
						_tmp479_ = _tmp478_;
						_tmp473_ = _tmp479_;
					} else {
						_tmp473_ = FALSE;
					}
					if (_tmp473_) {
						ValaCCodeFunctionCall* _tmp480_;
						gchar* _tmp481_;
						gchar* _tmp482_;
						ValaCCodeIdentifier* _tmp483_;
						ValaCCodeIdentifier* _tmp484_;
						_tmp480_ = vcall;
						_tmp481_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
						_tmp482_ = _tmp481_;
						_tmp483_ = vala_ccode_identifier_new (_tmp482_);
						_tmp484_ = _tmp483_;
						vala_ccode_function_call_add_argument (_tmp480_, (ValaCCodeExpression*) _tmp484_);
						_vala_ccode_node_unref0 (_tmp484_);
						_g_free0 (_tmp482_);
					}
				}
			}
			_tmp485_ = vala_ccode_base_module_get_ccode (self);
			_tmp486_ = _tmp485_;
			_tmp487_ = vcall;
			vala_ccode_function_add_expression (_tmp486_, (ValaCCodeExpression*) _tmp487_);
			_tmp488_ = vala_ccode_base_module_get_ccode (self);
			_tmp489_ = _tmp488_;
			vala_ccode_function_close (_tmp489_);
			_vala_ccode_node_unref0 (vcall);
		}
		vala_ccode_base_module_pop_function (self);
		_tmp490_ = self->cfile;
		_tmp491_ = function;
		vala_ccode_file_add_function (_tmp490_, _tmp491_);
		_vala_ccode_node_unref0 (vcast);
		_vala_ccode_node_unref0 (function);
	}
	_tmp493_ = prop;
	_tmp494_ = vala_property_get_is_abstract (_tmp493_);
	_tmp495_ = _tmp494_;
	if (!_tmp495_) {
		ValaBlock* _tmp496_;
		ValaBlock* _tmp497_;
		_tmp496_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
		_tmp497_ = _tmp496_;
		_tmp492_ = _tmp497_ != NULL;
	} else {
		_tmp492_ = FALSE;
	}
	if (_tmp492_) {
		gboolean _tmp498_ = FALSE;
		ValaProperty* _tmp499_;
		ValaProperty* _tmp500_;
		ValaProperty* _tmp501_;
		gboolean is_virtual = FALSE;
		gchar* cname = NULL;
		gchar* _tmp505_;
		ValaCCodeFunction* function = NULL;
		gboolean _tmp506_ = FALSE;
		gboolean _tmp507_ = FALSE;
		gboolean _tmp508_;
		gboolean _tmp509_;
		ValaObjectType* base_type = NULL;
		ValaProperty* _tmp520_;
		ValaMemberBinding _tmp521_;
		ValaMemberBinding _tmp522_;
		gboolean _tmp553_ = FALSE;
		gboolean _tmp554_ = FALSE;
		gboolean _tmp555_;
		gboolean _tmp556_;
		gboolean _tmp561_ = FALSE;
		ValaDataType* _tmp562_;
		ValaDataType* _tmp563_;
		ValaCCodeFunction* _tmp659_;
		gboolean _tmp660_ = FALSE;
		ValaProperty* _tmp661_;
		ValaMemberBinding _tmp662_;
		ValaMemberBinding _tmp663_;
		gboolean _tmp671_ = FALSE;
		gboolean _tmp672_;
		gboolean _tmp673_;
		gboolean _tmp710_ = FALSE;
		gboolean _tmp711_ = FALSE;
		ValaCodeContext* _tmp712_;
		ValaSemanticAnalyzer* _tmp713_;
		ValaSemanticAnalyzer* _tmp714_;
		ValaProperty* _tmp715_;
		gboolean _tmp950_;
		gboolean _tmp951_;
		ValaCCodeFile* _tmp962_;
		ValaCCodeFunction* _tmp963_;
		_tmp499_ = prop;
		_tmp500_ = vala_property_get_base_property (_tmp499_);
		_tmp501_ = _tmp500_;
		if (_tmp501_ != NULL) {
			_tmp498_ = TRUE;
		} else {
			ValaProperty* _tmp502_;
			ValaProperty* _tmp503_;
			ValaProperty* _tmp504_;
			_tmp502_ = prop;
			_tmp503_ = vala_property_get_base_interface_property (_tmp502_);
			_tmp504_ = _tmp503_;
			_tmp498_ = _tmp504_ != NULL;
		}
		is_virtual = _tmp498_;
		_tmp505_ = vala_get_ccode_real_name ((ValaSymbol*) acc);
		cname = _tmp505_;
		_tmp508_ = vala_property_accessor_get_writable (acc);
		_tmp509_ = _tmp508_;
		if (_tmp509_) {
			_tmp507_ = TRUE;
		} else {
			gboolean _tmp510_;
			gboolean _tmp511_;
			_tmp510_ = vala_property_accessor_get_construction (acc);
			_tmp511_ = _tmp510_;
			_tmp507_ = _tmp511_;
		}
		if (_tmp507_) {
			_tmp506_ = TRUE;
		} else {
			_tmp506_ = returns_real_struct;
		}
		if (_tmp506_) {
			const gchar* _tmp512_;
			ValaCCodeFunction* _tmp513_;
			_tmp512_ = cname;
			_tmp513_ = vala_ccode_function_new (_tmp512_, "void");
			_vala_ccode_node_unref0 (function);
			function = _tmp513_;
		} else {
			const gchar* _tmp514_;
			ValaDataType* _tmp515_;
			ValaDataType* _tmp516_;
			gchar* _tmp517_;
			gchar* _tmp518_;
			ValaCCodeFunction* _tmp519_;
			_tmp514_ = cname;
			_tmp515_ = vala_property_accessor_get_value_type (acc);
			_tmp516_ = _tmp515_;
			_tmp517_ = vala_get_ccode_name ((ValaCodeNode*) _tmp516_);
			_tmp518_ = _tmp517_;
			_tmp519_ = vala_ccode_function_new (_tmp514_, _tmp518_);
			_vala_ccode_node_unref0 (function);
			function = _tmp519_;
			_g_free0 (_tmp518_);
		}
		base_type = NULL;
		_tmp520_ = prop;
		_tmp521_ = vala_property_get_binding (_tmp520_);
		_tmp522_ = _tmp521_;
		if (_tmp522_ == VALA_MEMBER_BINDING_INSTANCE) {
			if (is_virtual) {
				ValaProperty* _tmp523_;
				ValaProperty* _tmp524_;
				ValaProperty* _tmp525_;
				ValaCCodeFunction* _tmp541_;
				ValaCCodeFunction* _tmp542_;
				ValaCCodeModifiers _tmp543_;
				ValaCCodeModifiers _tmp544_;
				ValaCCodeFunction* _tmp545_;
				ValaObjectType* _tmp546_;
				gchar* _tmp547_;
				gchar* _tmp548_;
				ValaCCodeParameter* _tmp549_;
				ValaCCodeParameter* _tmp550_;
				_tmp523_ = prop;
				_tmp524_ = vala_property_get_base_property (_tmp523_);
				_tmp525_ = _tmp524_;
				if (_tmp525_ != NULL) {
					ValaProperty* _tmp526_;
					ValaProperty* _tmp527_;
					ValaProperty* _tmp528_;
					ValaSymbol* _tmp529_;
					ValaSymbol* _tmp530_;
					ValaObjectType* _tmp531_;
					_tmp526_ = prop;
					_tmp527_ = vala_property_get_base_property (_tmp526_);
					_tmp528_ = _tmp527_;
					_tmp529_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp528_);
					_tmp530_ = _tmp529_;
					_tmp531_ = vala_object_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp530_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol), NULL);
					_vala_code_node_unref0 (base_type);
					base_type = _tmp531_;
				} else {
					ValaProperty* _tmp532_;
					ValaProperty* _tmp533_;
					ValaProperty* _tmp534_;
					_tmp532_ = prop;
					_tmp533_ = vala_property_get_base_interface_property (_tmp532_);
					_tmp534_ = _tmp533_;
					if (_tmp534_ != NULL) {
						ValaProperty* _tmp535_;
						ValaProperty* _tmp536_;
						ValaProperty* _tmp537_;
						ValaSymbol* _tmp538_;
						ValaSymbol* _tmp539_;
						ValaObjectType* _tmp540_;
						_tmp535_ = prop;
						_tmp536_ = vala_property_get_base_interface_property (_tmp535_);
						_tmp537_ = _tmp536_;
						_tmp538_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp537_);
						_tmp539_ = _tmp538_;
						_tmp540_ = vala_object_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp539_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol), NULL);
						_vala_code_node_unref0 (base_type);
						base_type = _tmp540_;
					}
				}
				_tmp541_ = function;
				_tmp542_ = function;
				_tmp543_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp542_);
				_tmp544_ = _tmp543_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp542_, _tmp544_ | VALA_CCODE_MODIFIERS_STATIC);
				_tmp545_ = function;
				_tmp546_ = base_type;
				_tmp547_ = vala_get_ccode_name ((ValaCodeNode*) _tmp546_);
				_tmp548_ = _tmp547_;
				_tmp549_ = vala_ccode_parameter_new ("base", _tmp548_);
				_tmp550_ = _tmp549_;
				vala_ccode_function_add_parameter (_tmp545_, _tmp550_);
				_vala_ccode_node_unref0 (_tmp550_);
				_g_free0 (_tmp548_);
			} else {
				ValaCCodeFunction* _tmp551_;
				ValaCCodeParameter* _tmp552_;
				_tmp551_ = function;
				_tmp552_ = cselfparam;
				vala_ccode_function_add_parameter (_tmp551_, _tmp552_);
			}
		}
		_tmp555_ = vala_property_accessor_get_writable (acc);
		_tmp556_ = _tmp555_;
		if (_tmp556_) {
			_tmp554_ = TRUE;
		} else {
			gboolean _tmp557_;
			gboolean _tmp558_;
			_tmp557_ = vala_property_accessor_get_construction (acc);
			_tmp558_ = _tmp557_;
			_tmp554_ = _tmp558_;
		}
		if (_tmp554_) {
			_tmp553_ = TRUE;
		} else {
			_tmp553_ = returns_real_struct;
		}
		if (_tmp553_) {
			ValaCCodeFunction* _tmp559_;
			ValaCCodeParameter* _tmp560_;
			_tmp559_ = function;
			_tmp560_ = cvalueparam;
			vala_ccode_function_add_parameter (_tmp559_, _tmp560_);
		}
		_tmp562_ = vala_property_accessor_get_value_type (acc);
		_tmp563_ = _tmp562_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp563_, VALA_TYPE_ARRAY_TYPE)) {
			ValaProperty* _tmp564_;
			_tmp564_ = prop;
			_tmp561_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp564_);
		} else {
			_tmp561_ = FALSE;
		}
		if (_tmp561_) {
			ValaArrayType* array_type = NULL;
			ValaDataType* _tmp565_;
			ValaDataType* _tmp566_;
			ValaArrayType* _tmp567_;
			gchar* length_ctype = NULL;
			ValaProperty* _tmp568_;
			gchar* _tmp569_;
			_tmp565_ = vala_property_accessor_get_value_type (acc);
			_tmp566_ = _tmp565_;
			_tmp567_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp566_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array_type = _tmp567_;
			_tmp568_ = prop;
			_tmp569_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp568_);
			length_ctype = _tmp569_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp570_ = FALSE;
					_tmp570_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp572_;
						gint _tmp573_;
						gint _tmp574_;
						const gchar* _tmp575_ = NULL;
						gboolean _tmp576_;
						gboolean _tmp577_;
						gchar* _tmp578_ = NULL;
						gboolean _tmp579_;
						gboolean _tmp580_;
						ValaCCodeFunction* _tmp585_;
						gchar* _tmp586_;
						gchar* _tmp587_;
						ValaCCodeParameter* _tmp588_;
						ValaCCodeParameter* _tmp589_;
						if (!_tmp570_) {
							gint _tmp571_;
							_tmp571_ = dim;
							dim = _tmp571_ + 1;
						}
						_tmp570_ = FALSE;
						_tmp572_ = array_type;
						_tmp573_ = vala_array_type_get_rank (_tmp572_);
						_tmp574_ = _tmp573_;
						if (!(dim <= _tmp574_)) {
							break;
						}
						_tmp576_ = vala_property_accessor_get_readable (acc);
						_tmp577_ = _tmp576_;
						if (_tmp577_) {
							_tmp575_ = "result";
						} else {
							_tmp575_ = "value";
						}
						_tmp579_ = vala_property_accessor_get_readable (acc);
						_tmp580_ = _tmp579_;
						if (_tmp580_) {
							const gchar* _tmp581_;
							gchar* _tmp582_;
							_tmp581_ = length_ctype;
							_tmp582_ = g_strconcat (_tmp581_, "*", NULL);
							_g_free0 (_tmp578_);
							_tmp578_ = _tmp582_;
						} else {
							const gchar* _tmp583_;
							gchar* _tmp584_;
							_tmp583_ = length_ctype;
							_tmp584_ = g_strdup (_tmp583_);
							_g_free0 (_tmp578_);
							_tmp578_ = _tmp584_;
						}
						_tmp585_ = function;
						_tmp586_ = vala_ccode_base_module_get_array_length_cname (self, _tmp575_, dim);
						_tmp587_ = _tmp586_;
						_tmp588_ = vala_ccode_parameter_new (_tmp587_, _tmp578_);
						_tmp589_ = _tmp588_;
						vala_ccode_function_add_parameter (_tmp585_, _tmp589_);
						_vala_ccode_node_unref0 (_tmp589_);
						_g_free0 (_tmp587_);
						_g_free0 (_tmp578_);
					}
				}
			}
			_g_free0 (length_ctype);
			_vala_code_node_unref0 (array_type);
		} else {
			gboolean _tmp590_ = FALSE;
			gboolean _tmp591_ = FALSE;
			ValaDataType* _tmp592_;
			ValaDataType* _tmp593_;
			_tmp592_ = vala_property_accessor_get_value_type (acc);
			_tmp593_ = _tmp592_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp593_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaProperty* _tmp594_;
				_tmp594_ = prop;
				_tmp591_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp594_);
			} else {
				_tmp591_ = FALSE;
			}
			if (_tmp591_) {
				ValaDataType* _tmp595_;
				ValaDataType* _tmp596_;
				ValaDelegate* _tmp597_;
				ValaDelegate* _tmp598_;
				gboolean _tmp599_;
				gboolean _tmp600_;
				_tmp595_ = vala_property_accessor_get_value_type (acc);
				_tmp596_ = _tmp595_;
				_tmp597_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp596_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				_tmp598_ = _tmp597_;
				_tmp599_ = vala_delegate_get_has_target (_tmp598_);
				_tmp600_ = _tmp599_;
				_tmp590_ = _tmp600_;
			} else {
				_tmp590_ = FALSE;
			}
			if (_tmp590_) {
				const gchar* _tmp601_ = NULL;
				gboolean _tmp602_;
				gboolean _tmp603_;
				gchar* _tmp604_ = NULL;
				gboolean _tmp605_;
				gboolean _tmp606_;
				ValaCCodeFunction* _tmp613_;
				gchar* _tmp614_;
				gchar* _tmp615_;
				ValaCCodeParameter* _tmp616_;
				ValaCCodeParameter* _tmp617_;
				gboolean _tmp618_ = FALSE;
				gboolean _tmp619_;
				gboolean _tmp620_;
				_tmp602_ = vala_property_accessor_get_readable (acc);
				_tmp603_ = _tmp602_;
				if (_tmp603_) {
					_tmp601_ = "result";
				} else {
					_tmp601_ = "value";
				}
				_tmp605_ = vala_property_accessor_get_readable (acc);
				_tmp606_ = _tmp605_;
				if (_tmp606_) {
					ValaDataType* _tmp607_;
					gchar* _tmp608_;
					gchar* _tmp609_;
					gchar* _tmp610_;
					_tmp607_ = self->delegate_target_type;
					_tmp608_ = vala_get_ccode_name ((ValaCodeNode*) _tmp607_);
					_tmp609_ = _tmp608_;
					_tmp610_ = g_strconcat (_tmp609_, "*", NULL);
					_g_free0 (_tmp604_);
					_tmp604_ = _tmp610_;
					_g_free0 (_tmp609_);
				} else {
					ValaDataType* _tmp611_;
					gchar* _tmp612_;
					_tmp611_ = self->delegate_target_type;
					_tmp612_ = vala_get_ccode_name ((ValaCodeNode*) _tmp611_);
					_g_free0 (_tmp604_);
					_tmp604_ = _tmp612_;
				}
				_tmp613_ = function;
				_tmp614_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp601_);
				_tmp615_ = _tmp614_;
				_tmp616_ = vala_ccode_parameter_new (_tmp615_, _tmp604_);
				_tmp617_ = _tmp616_;
				vala_ccode_function_add_parameter (_tmp613_, _tmp617_);
				_vala_ccode_node_unref0 (_tmp617_);
				_g_free0 (_tmp615_);
				_tmp619_ = vala_property_accessor_get_readable (acc);
				_tmp620_ = _tmp619_;
				if (!_tmp620_) {
					ValaDataType* _tmp621_;
					ValaDataType* _tmp622_;
					gboolean _tmp623_;
					gboolean _tmp624_;
					_tmp621_ = vala_property_accessor_get_value_type (acc);
					_tmp622_ = _tmp621_;
					_tmp623_ = vala_data_type_get_value_owned (_tmp622_);
					_tmp624_ = _tmp623_;
					_tmp618_ = _tmp624_;
				} else {
					_tmp618_ = FALSE;
				}
				if (_tmp618_) {
					ValaCCodeFunction* _tmp625_;
					gchar* _tmp626_;
					gchar* _tmp627_;
					ValaDelegateType* _tmp628_;
					gchar* _tmp629_;
					gchar* _tmp630_;
					ValaCCodeParameter* _tmp631_;
					ValaCCodeParameter* _tmp632_;
					_tmp625_ = function;
					_tmp626_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
					_tmp627_ = _tmp626_;
					_tmp628_ = self->delegate_target_destroy_type;
					_tmp629_ = vala_get_ccode_name ((ValaCodeNode*) _tmp628_);
					_tmp630_ = _tmp629_;
					_tmp631_ = vala_ccode_parameter_new (_tmp627_, _tmp630_);
					_tmp632_ = _tmp631_;
					vala_ccode_function_add_parameter (_tmp625_, _tmp632_);
					_vala_ccode_node_unref0 (_tmp632_);
					_g_free0 (_tmp630_);
					_g_free0 (_tmp627_);
				}
				_g_free0 (_tmp604_);
			}
		}
		if (!is_virtual) {
			gboolean _tmp633_ = FALSE;
			gboolean _tmp634_ = FALSE;
			ValaProperty* _tmp635_;
			_tmp635_ = prop;
			if (vala_symbol_is_private_symbol ((ValaSymbol*) _tmp635_)) {
				_tmp634_ = TRUE;
			} else {
				gboolean _tmp636_ = FALSE;
				gboolean _tmp637_;
				gboolean _tmp638_;
				_tmp637_ = vala_property_accessor_get_readable (acc);
				_tmp638_ = _tmp637_;
				if (_tmp638_) {
					_tmp636_ = TRUE;
				} else {
					gboolean _tmp639_;
					gboolean _tmp640_;
					_tmp639_ = vala_property_accessor_get_writable (acc);
					_tmp640_ = _tmp639_;
					_tmp636_ = _tmp640_;
				}
				_tmp634_ = !_tmp636_;
			}
			if (_tmp634_) {
				_tmp633_ = TRUE;
			} else {
				ValaSymbolAccessibility _tmp641_;
				ValaSymbolAccessibility _tmp642_;
				_tmp641_ = vala_symbol_get_access ((ValaSymbol*) acc);
				_tmp642_ = _tmp641_;
				_tmp633_ = _tmp642_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
			}
			if (_tmp633_) {
				ValaCCodeFunction* _tmp643_;
				ValaCCodeFunction* _tmp644_;
				ValaCCodeModifiers _tmp645_;
				ValaCCodeModifiers _tmp646_;
				_tmp643_ = function;
				_tmp644_ = function;
				_tmp645_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp644_);
				_tmp646_ = _tmp645_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp644_, _tmp646_ | VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp647_ = FALSE;
				ValaCodeContext* _tmp648_;
				gboolean _tmp649_;
				gboolean _tmp650_;
				_tmp648_ = self->priv->_context;
				_tmp649_ = vala_code_context_get_hide_internal (_tmp648_);
				_tmp650_ = _tmp649_;
				if (_tmp650_) {
					gboolean _tmp651_ = FALSE;
					ValaProperty* _tmp652_;
					_tmp652_ = prop;
					if (vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp652_)) {
						_tmp651_ = TRUE;
					} else {
						ValaSymbolAccessibility _tmp653_;
						ValaSymbolAccessibility _tmp654_;
						_tmp653_ = vala_symbol_get_access ((ValaSymbol*) acc);
						_tmp654_ = _tmp653_;
						_tmp651_ = _tmp654_ == VALA_SYMBOL_ACCESSIBILITY_INTERNAL;
					}
					_tmp647_ = _tmp651_;
				} else {
					_tmp647_ = FALSE;
				}
				if (_tmp647_) {
					ValaCCodeFunction* _tmp655_;
					ValaCCodeFunction* _tmp656_;
					ValaCCodeModifiers _tmp657_;
					ValaCCodeModifiers _tmp658_;
					_tmp655_ = function;
					_tmp656_ = function;
					_tmp657_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp656_);
					_tmp658_ = _tmp657_;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp656_, _tmp658_ | VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
		}
		_tmp659_ = function;
		vala_ccode_base_module_push_function (self, _tmp659_);
		_tmp661_ = prop;
		_tmp662_ = vala_property_get_binding (_tmp661_);
		_tmp663_ = _tmp662_;
		if (_tmp663_ == VALA_MEMBER_BINDING_INSTANCE) {
			_tmp660_ = !is_virtual;
		} else {
			_tmp660_ = FALSE;
		}
		if (_tmp660_) {
			gboolean _tmp664_ = FALSE;
			gboolean _tmp665_;
			gboolean _tmp666_;
			_tmp665_ = vala_property_accessor_get_readable (acc);
			_tmp666_ = _tmp665_;
			if (!_tmp666_) {
				_tmp664_ = TRUE;
			} else {
				_tmp664_ = returns_real_struct;
			}
			if (_tmp664_) {
				ValaProperty* _tmp667_;
				ValaTypeSymbol* _tmp668_;
				_tmp667_ = prop;
				_tmp668_ = t;
				vala_ccode_base_module_create_property_type_check_statement (self, _tmp667_, FALSE, _tmp668_, TRUE, "self");
			} else {
				ValaProperty* _tmp669_;
				ValaTypeSymbol* _tmp670_;
				_tmp669_ = prop;
				_tmp670_ = t;
				vala_ccode_base_module_create_property_type_check_statement (self, _tmp669_, TRUE, _tmp670_, TRUE, "self");
			}
		}
		_tmp672_ = vala_property_accessor_get_readable (acc);
		_tmp673_ = _tmp672_;
		if (_tmp673_) {
			_tmp671_ = !returns_real_struct;
		} else {
			_tmp671_ = FALSE;
		}
		if (_tmp671_) {
			gboolean _tmp674_ = FALSE;
			ValaBasicBlock* _tmp675_;
			ValaBasicBlock* _tmp676_;
			_tmp675_ = vala_subroutine_get_return_block ((ValaSubroutine*) acc);
			_tmp676_ = _tmp675_;
			if (_tmp676_ == NULL) {
				_tmp674_ = TRUE;
			} else {
				ValaBasicBlock* _tmp677_;
				ValaBasicBlock* _tmp678_;
				ValaList* _tmp679_;
				gint _tmp680_;
				gint _tmp681_;
				_tmp677_ = vala_subroutine_get_return_block ((ValaSubroutine*) acc);
				_tmp678_ = _tmp677_;
				_tmp679_ = vala_basic_block_get_predecessors (_tmp678_);
				_tmp680_ = vala_collection_get_size ((ValaCollection*) _tmp679_);
				_tmp681_ = _tmp680_;
				_tmp674_ = _tmp681_ > 0;
			}
			if (_tmp674_) {
				ValaCCodeFunction* _tmp682_;
				ValaCCodeFunction* _tmp683_;
				ValaDataType* _tmp684_;
				ValaDataType* _tmp685_;
				gchar* _tmp686_;
				gchar* _tmp687_;
				ValaCCodeVariableDeclarator* _tmp688_;
				ValaCCodeVariableDeclarator* _tmp689_;
				_tmp682_ = vala_ccode_base_module_get_ccode (self);
				_tmp683_ = _tmp682_;
				_tmp684_ = vala_property_accessor_get_value_type (acc);
				_tmp685_ = _tmp684_;
				_tmp686_ = vala_get_ccode_name ((ValaCodeNode*) _tmp685_);
				_tmp687_ = _tmp686_;
				_tmp688_ = vala_ccode_variable_declarator_new ("result", NULL, NULL);
				_tmp689_ = _tmp688_;
				vala_ccode_function_add_declaration (_tmp683_, _tmp687_, (ValaCCodeDeclarator*) _tmp689_, 0);
				_vala_ccode_node_unref0 (_tmp689_);
				_g_free0 (_tmp687_);
			}
		}
		if (is_virtual) {
			ValaCCodeFunction* _tmp690_;
			ValaCCodeFunction* _tmp691_;
			ValaDataType* _tmp692_;
			gchar* _tmp693_;
			gchar* _tmp694_;
			ValaCCodeVariableDeclarator* _tmp695_;
			ValaCCodeVariableDeclarator* _tmp696_;
			ValaCCodeFunction* _tmp697_;
			ValaCCodeFunction* _tmp698_;
			ValaCCodeIdentifier* _tmp699_;
			ValaCCodeIdentifier* _tmp700_;
			ValaObjectType* _tmp701_;
			ValaCCodeIdentifier* _tmp702_;
			ValaCCodeIdentifier* _tmp703_;
			ValaGLibValue* _tmp704_;
			ValaGLibValue* _tmp705_;
			ValaDataType* _tmp706_;
			ValaTargetValue* _tmp707_;
			ValaTargetValue* _tmp708_;
			ValaCCodeExpression* _tmp709_;
			_tmp690_ = vala_ccode_base_module_get_ccode (self);
			_tmp691_ = _tmp690_;
			_tmp692_ = this_type;
			_tmp693_ = vala_get_ccode_name ((ValaCodeNode*) _tmp692_);
			_tmp694_ = _tmp693_;
			_tmp695_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
			_tmp696_ = _tmp695_;
			vala_ccode_function_add_declaration (_tmp691_, _tmp694_, (ValaCCodeDeclarator*) _tmp696_, 0);
			_vala_ccode_node_unref0 (_tmp696_);
			_g_free0 (_tmp694_);
			_tmp697_ = vala_ccode_base_module_get_ccode (self);
			_tmp698_ = _tmp697_;
			_tmp699_ = vala_ccode_identifier_new ("self");
			_tmp700_ = _tmp699_;
			_tmp701_ = base_type;
			_tmp702_ = vala_ccode_identifier_new ("base");
			_tmp703_ = _tmp702_;
			_tmp704_ = vala_glib_value_new ((ValaDataType*) _tmp701_, (ValaCCodeExpression*) _tmp703_, TRUE);
			_tmp705_ = _tmp704_;
			_tmp706_ = this_type;
			_tmp707_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp705_, _tmp706_, (ValaCodeNode*) acc);
			_tmp708_ = _tmp707_;
			_tmp709_ = vala_get_cvalue_ (_tmp708_);
			vala_ccode_function_add_assignment (_tmp698_, (ValaCCodeExpression*) _tmp700_, _tmp709_);
			_vala_target_value_unref0 (_tmp708_);
			_vala_target_value_unref0 (_tmp705_);
			_vala_ccode_node_unref0 (_tmp703_);
			_vala_ccode_node_unref0 (_tmp700_);
		}
		_tmp712_ = self->priv->_context;
		_tmp713_ = vala_code_context_get_analyzer (_tmp712_);
		_tmp714_ = _tmp713_;
		_tmp715_ = prop;
		if (vala_semantic_analyzer_is_gobject_property (_tmp714_, _tmp715_)) {
			ValaProperty* _tmp716_;
			gboolean _tmp717_;
			gboolean _tmp718_;
			_tmp716_ = prop;
			_tmp717_ = vala_property_get_notify (_tmp716_);
			_tmp718_ = _tmp717_;
			_tmp711_ = _tmp718_;
		} else {
			_tmp711_ = FALSE;
		}
		if (_tmp711_) {
			gboolean _tmp719_ = FALSE;
			gboolean _tmp720_;
			gboolean _tmp721_;
			_tmp720_ = vala_property_accessor_get_writable (acc);
			_tmp721_ = _tmp720_;
			if (_tmp721_) {
				_tmp719_ = TRUE;
			} else {
				gboolean _tmp722_;
				gboolean _tmp723_;
				_tmp722_ = vala_property_accessor_get_construction (acc);
				_tmp723_ = _tmp722_;
				_tmp719_ = _tmp723_;
			}
			_tmp710_ = _tmp719_;
		} else {
			_tmp710_ = FALSE;
		}
		if (_tmp710_) {
			ValaCCodeFunctionCall* notify_call = NULL;
			ValaCCodeIdentifier* _tmp724_;
			ValaCCodeIdentifier* _tmp725_;
			ValaCCodeFunctionCall* _tmp726_;
			ValaCCodeFunctionCall* _tmp727_;
			ValaCCodeFunctionCall* _tmp728_;
			ValaCCodeIdentifier* _tmp729_;
			ValaCCodeIdentifier* _tmp730_;
			ValaCCodeCastExpression* _tmp731_;
			ValaCCodeCastExpression* _tmp732_;
			ValaCCodeFunctionCall* _tmp733_;
			ValaProperty* _tmp734_;
			ValaCCodeExpression* _tmp735_;
			ValaCCodeExpression* _tmp736_;
			ValaPropertyAccessor* get_accessor = NULL;
			ValaProperty* _tmp737_;
			ValaPropertyAccessor* _tmp738_;
			ValaPropertyAccessor* _tmp739_;
			ValaPropertyAccessor* _tmp740_;
			gboolean _tmp741_ = FALSE;
			ValaPropertyAccessor* _tmp742_;
			_tmp724_ = vala_ccode_identifier_new ("g_object_notify_by_pspec");
			_tmp725_ = _tmp724_;
			_tmp726_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp725_);
			_tmp727_ = _tmp726_;
			_vala_ccode_node_unref0 (_tmp725_);
			notify_call = _tmp727_;
			_tmp728_ = notify_call;
			_tmp729_ = vala_ccode_identifier_new ("self");
			_tmp730_ = _tmp729_;
			_tmp731_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp730_, "GObject *");
			_tmp732_ = _tmp731_;
			vala_ccode_function_call_add_argument (_tmp728_, (ValaCCodeExpression*) _tmp732_);
			_vala_ccode_node_unref0 (_tmp732_);
			_vala_ccode_node_unref0 (_tmp730_);
			_tmp733_ = notify_call;
			_tmp734_ = prop;
			_tmp735_ = vala_ccode_base_module_get_param_spec_cexpression (self, _tmp734_);
			_tmp736_ = _tmp735_;
			vala_ccode_function_call_add_argument (_tmp733_, _tmp736_);
			_vala_ccode_node_unref0 (_tmp736_);
			_tmp737_ = prop;
			_tmp738_ = vala_property_get_get_accessor (_tmp737_);
			_tmp739_ = _tmp738_;
			_tmp740_ = _vala_code_node_ref0 (_tmp739_);
			get_accessor = _tmp740_;
			_tmp742_ = get_accessor;
			if (_tmp742_ != NULL) {
				ValaPropertyAccessor* _tmp743_;
				gboolean _tmp744_;
				gboolean _tmp745_;
				_tmp743_ = get_accessor;
				_tmp744_ = vala_property_accessor_get_automatic_body (_tmp743_);
				_tmp745_ = _tmp744_;
				_tmp741_ = _tmp745_;
			} else {
				_tmp741_ = FALSE;
			}
			if (_tmp741_) {
				ValaDataType* property_type = NULL;
				ValaProperty* _tmp746_;
				ValaDataType* _tmp747_;
				ValaDataType* _tmp748_;
				ValaDataType* _tmp749_;
				ValaCCodeFunctionCall* get_call = NULL;
				ValaPropertyAccessor* _tmp750_;
				gchar* _tmp751_;
				gchar* _tmp752_;
				ValaCCodeIdentifier* _tmp753_;
				ValaCCodeIdentifier* _tmp754_;
				ValaCCodeFunctionCall* _tmp755_;
				ValaCCodeFunctionCall* _tmp756_;
				const gchar* _tmp757_ = NULL;
				ValaCCodeFunctionCall* _tmp758_;
				ValaCCodeIdentifier* _tmp759_;
				ValaCCodeIdentifier* _tmp760_;
				gboolean _tmp761_ = FALSE;
				ValaDataType* _tmp762_;
				ValaBlock* _tmp911_;
				ValaBlock* _tmp912_;
				ValaCCodeFunction* _tmp913_;
				ValaCCodeFunction* _tmp914_;
				ValaCCodeFunctionCall* _tmp915_;
				ValaCCodeFunction* _tmp916_;
				ValaCCodeFunction* _tmp917_;
				ValaProperty* _tmp918_;
				ValaPropertyAccessor* _tmp919_;
				ValaPropertyAccessor* _tmp920_;
				ValaDataType* _tmp921_;
				ValaDataType* _tmp922_;
				_tmp746_ = prop;
				_tmp747_ = vala_property_get_property_type (_tmp746_);
				_tmp748_ = _tmp747_;
				_tmp749_ = _vala_code_node_ref0 (_tmp748_);
				property_type = _tmp749_;
				_tmp750_ = get_accessor;
				_tmp751_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp750_);
				_tmp752_ = _tmp751_;
				_tmp753_ = vala_ccode_identifier_new (_tmp752_);
				_tmp754_ = _tmp753_;
				_tmp755_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp754_);
				_tmp756_ = _tmp755_;
				_vala_ccode_node_unref0 (_tmp754_);
				_g_free0 (_tmp752_);
				get_call = _tmp756_;
				if (is_virtual) {
					_tmp757_ = "base";
				} else {
					_tmp757_ = "self";
				}
				_tmp758_ = get_call;
				_tmp759_ = vala_ccode_identifier_new (_tmp757_);
				_tmp760_ = _tmp759_;
				vala_ccode_function_call_add_argument (_tmp758_, (ValaCCodeExpression*) _tmp760_);
				_vala_ccode_node_unref0 (_tmp760_);
				_tmp762_ = property_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp762_, VALA_TYPE_ARRAY_TYPE)) {
					ValaProperty* _tmp763_;
					_tmp763_ = prop;
					_tmp761_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp763_);
				} else {
					_tmp761_ = FALSE;
				}
				if (_tmp761_) {
					ValaCCodeFunction* _tmp764_;
					ValaCCodeFunction* _tmp765_;
					ValaDataType* _tmp766_;
					gchar* _tmp767_;
					gchar* _tmp768_;
					ValaCCodeVariableDeclarator* _tmp769_;
					ValaCCodeVariableDeclarator* _tmp770_;
					ValaCCodeFunction* _tmp771_;
					ValaCCodeFunction* _tmp772_;
					ValaProperty* _tmp773_;
					gchar* _tmp774_;
					gchar* _tmp775_;
					ValaCCodeVariableDeclarator* _tmp776_;
					ValaCCodeVariableDeclarator* _tmp777_;
					ValaCCodeFunctionCall* _tmp778_;
					ValaCCodeIdentifier* _tmp779_;
					ValaCCodeIdentifier* _tmp780_;
					ValaCCodeUnaryExpression* _tmp781_;
					ValaCCodeUnaryExpression* _tmp782_;
					ValaCCodeFunction* _tmp783_;
					ValaCCodeFunction* _tmp784_;
					ValaCCodeIdentifier* _tmp785_;
					ValaCCodeIdentifier* _tmp786_;
					ValaCCodeFunctionCall* _tmp787_;
					ValaCCodeFunction* _tmp788_;
					ValaCCodeFunction* _tmp789_;
					ValaCCodeIdentifier* _tmp790_;
					ValaCCodeIdentifier* _tmp791_;
					ValaCCodeIdentifier* _tmp792_;
					ValaCCodeIdentifier* _tmp793_;
					ValaCCodeBinaryExpression* _tmp794_;
					ValaCCodeBinaryExpression* _tmp795_;
					_tmp764_ = vala_ccode_base_module_get_ccode (self);
					_tmp765_ = _tmp764_;
					_tmp766_ = property_type;
					_tmp767_ = vala_get_ccode_name ((ValaCodeNode*) _tmp766_);
					_tmp768_ = _tmp767_;
					_tmp769_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
					_tmp770_ = _tmp769_;
					vala_ccode_function_add_declaration (_tmp765_, _tmp768_, (ValaCCodeDeclarator*) _tmp770_, 0);
					_vala_ccode_node_unref0 (_tmp770_);
					_g_free0 (_tmp768_);
					_tmp771_ = vala_ccode_base_module_get_ccode (self);
					_tmp772_ = _tmp771_;
					_tmp773_ = prop;
					_tmp774_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp773_);
					_tmp775_ = _tmp774_;
					_tmp776_ = vala_ccode_variable_declarator_new ("old_value_length", NULL, NULL);
					_tmp777_ = _tmp776_;
					vala_ccode_function_add_declaration (_tmp772_, _tmp775_, (ValaCCodeDeclarator*) _tmp777_, 0);
					_vala_ccode_node_unref0 (_tmp777_);
					_g_free0 (_tmp775_);
					_tmp778_ = get_call;
					_tmp779_ = vala_ccode_identifier_new ("old_value_length");
					_tmp780_ = _tmp779_;
					_tmp781_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp780_);
					_tmp782_ = _tmp781_;
					vala_ccode_function_call_add_argument (_tmp778_, (ValaCCodeExpression*) _tmp782_);
					_vala_ccode_node_unref0 (_tmp782_);
					_vala_ccode_node_unref0 (_tmp780_);
					_tmp783_ = vala_ccode_base_module_get_ccode (self);
					_tmp784_ = _tmp783_;
					_tmp785_ = vala_ccode_identifier_new ("old_value");
					_tmp786_ = _tmp785_;
					_tmp787_ = get_call;
					vala_ccode_function_add_assignment (_tmp784_, (ValaCCodeExpression*) _tmp786_, (ValaCCodeExpression*) _tmp787_);
					_vala_ccode_node_unref0 (_tmp786_);
					_tmp788_ = vala_ccode_base_module_get_ccode (self);
					_tmp789_ = _tmp788_;
					_tmp790_ = vala_ccode_identifier_new ("old_value");
					_tmp791_ = _tmp790_;
					_tmp792_ = vala_ccode_identifier_new ("value");
					_tmp793_ = _tmp792_;
					_tmp794_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp791_, (ValaCCodeExpression*) _tmp793_);
					_tmp795_ = _tmp794_;
					vala_ccode_function_open_if (_tmp789_, (ValaCCodeExpression*) _tmp795_);
					_vala_ccode_node_unref0 (_tmp795_);
					_vala_ccode_node_unref0 (_tmp793_);
					_vala_ccode_node_unref0 (_tmp791_);
				} else {
					ValaDataType* _tmp796_;
					ValaDataType* _tmp797_;
					_tmp796_ = property_type;
					_tmp797_ = self->string_type;
					if (vala_data_type_compatible (_tmp796_, _tmp797_)) {
						ValaCCodeFunction* _tmp798_;
						ValaCCodeFunction* _tmp799_;
						ValaDataType* _tmp800_;
						gchar* _tmp801_;
						gchar* _tmp802_;
						ValaCCodeVariableDeclarator* _tmp803_;
						ValaCCodeVariableDeclarator* _tmp804_;
						ValaCCodeFunction* _tmp805_;
						ValaCCodeFunction* _tmp806_;
						ValaCCodeIdentifier* _tmp807_;
						ValaCCodeIdentifier* _tmp808_;
						ValaCCodeFunctionCall* _tmp809_;
						ValaCCodeFunctionCall* ccall = NULL;
						ValaCodeContext* _tmp810_;
						ValaProfile _tmp811_;
						ValaProfile _tmp812_;
						ValaCCodeFunctionCall* _tmp824_;
						ValaCCodeIdentifier* _tmp825_;
						ValaCCodeIdentifier* _tmp826_;
						ValaCCodeFunctionCall* _tmp827_;
						ValaCCodeIdentifier* _tmp828_;
						ValaCCodeIdentifier* _tmp829_;
						ValaCCodeFunction* _tmp830_;
						ValaCCodeFunction* _tmp831_;
						ValaCCodeFunctionCall* _tmp832_;
						ValaCCodeConstant* _tmp833_;
						ValaCCodeConstant* _tmp834_;
						ValaCCodeBinaryExpression* _tmp835_;
						ValaCCodeBinaryExpression* _tmp836_;
						_tmp798_ = vala_ccode_base_module_get_ccode (self);
						_tmp799_ = _tmp798_;
						_tmp800_ = property_type;
						_tmp801_ = vala_get_ccode_name ((ValaCodeNode*) _tmp800_);
						_tmp802_ = _tmp801_;
						_tmp803_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
						_tmp804_ = _tmp803_;
						vala_ccode_function_add_declaration (_tmp799_, _tmp802_, (ValaCCodeDeclarator*) _tmp804_, 0);
						_vala_ccode_node_unref0 (_tmp804_);
						_g_free0 (_tmp802_);
						_tmp805_ = vala_ccode_base_module_get_ccode (self);
						_tmp806_ = _tmp805_;
						_tmp807_ = vala_ccode_identifier_new ("old_value");
						_tmp808_ = _tmp807_;
						_tmp809_ = get_call;
						vala_ccode_function_add_assignment (_tmp806_, (ValaCCodeExpression*) _tmp808_, (ValaCCodeExpression*) _tmp809_);
						_vala_ccode_node_unref0 (_tmp808_);
						_tmp810_ = self->priv->_context;
						_tmp811_ = vala_code_context_get_profile (_tmp810_);
						_tmp812_ = _tmp811_;
						if (_tmp812_ == VALA_PROFILE_POSIX) {
							ValaCCodeFile* _tmp813_;
							ValaCCodeIdentifier* _tmp814_;
							ValaCCodeIdentifier* _tmp815_;
							gchar* _tmp816_;
							gchar* _tmp817_;
							ValaCCodeIdentifier* _tmp818_;
							ValaCCodeIdentifier* _tmp819_;
							ValaCCodeFunctionCall* _tmp820_;
							_tmp813_ = self->cfile;
							vala_ccode_file_add_include (_tmp813_, "string.h", FALSE);
							_tmp814_ = vala_ccode_identifier_new ("strcmp");
							_tmp815_ = _tmp814_;
							_tmp816_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp815_);
							_tmp817_ = _tmp816_;
							_tmp818_ = vala_ccode_identifier_new (_tmp817_);
							_tmp819_ = _tmp818_;
							_tmp820_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp819_);
							_vala_ccode_node_unref0 (ccall);
							ccall = _tmp820_;
							_vala_ccode_node_unref0 (_tmp819_);
							_g_free0 (_tmp817_);
							_vala_ccode_node_unref0 (_tmp815_);
						} else {
							ValaCCodeIdentifier* _tmp821_;
							ValaCCodeIdentifier* _tmp822_;
							ValaCCodeFunctionCall* _tmp823_;
							_tmp821_ = vala_ccode_identifier_new ("g_strcmp0");
							_tmp822_ = _tmp821_;
							_tmp823_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp822_);
							_vala_ccode_node_unref0 (ccall);
							ccall = _tmp823_;
							_vala_ccode_node_unref0 (_tmp822_);
						}
						_tmp824_ = ccall;
						_tmp825_ = vala_ccode_identifier_new ("value");
						_tmp826_ = _tmp825_;
						vala_ccode_function_call_add_argument (_tmp824_, (ValaCCodeExpression*) _tmp826_);
						_vala_ccode_node_unref0 (_tmp826_);
						_tmp827_ = ccall;
						_tmp828_ = vala_ccode_identifier_new ("old_value");
						_tmp829_ = _tmp828_;
						vala_ccode_function_call_add_argument (_tmp827_, (ValaCCodeExpression*) _tmp829_);
						_vala_ccode_node_unref0 (_tmp829_);
						_tmp830_ = vala_ccode_base_module_get_ccode (self);
						_tmp831_ = _tmp830_;
						_tmp832_ = ccall;
						_tmp833_ = vala_ccode_constant_new ("0");
						_tmp834_ = _tmp833_;
						_tmp835_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp832_, (ValaCCodeExpression*) _tmp834_);
						_tmp836_ = _tmp835_;
						vala_ccode_function_open_if (_tmp831_, (ValaCCodeExpression*) _tmp836_);
						_vala_ccode_node_unref0 (_tmp836_);
						_vala_ccode_node_unref0 (_tmp834_);
						_vala_ccode_node_unref0 (ccall);
					} else {
						ValaDataType* _tmp837_;
						_tmp837_ = property_type;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp837_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
							ValaCCodeFunction* _tmp838_;
							ValaCCodeFunction* _tmp839_;
							ValaDataType* _tmp840_;
							gchar* _tmp841_;
							gchar* _tmp842_;
							ValaCCodeVariableDeclarator* _tmp843_;
							ValaCCodeVariableDeclarator* _tmp844_;
							ValaDataType* _tmp845_;
							gboolean _tmp846_;
							gboolean _tmp847_;
							gchar* equalfunc = NULL;
							ValaDataType* _tmp861_;
							ValaTypeSymbol* _tmp862_;
							ValaTypeSymbol* _tmp863_;
							gchar* _tmp864_;
							ValaCCodeFunctionCall* ccall = NULL;
							const gchar* _tmp865_;
							ValaCCodeIdentifier* _tmp866_;
							ValaCCodeIdentifier* _tmp867_;
							ValaCCodeFunctionCall* _tmp868_;
							ValaCCodeFunctionCall* _tmp869_;
							ValaCCodeFunctionCall* _tmp870_;
							ValaCCodeIdentifier* _tmp871_;
							ValaCCodeIdentifier* _tmp872_;
							ValaDataType* _tmp873_;
							gboolean _tmp874_;
							gboolean _tmp875_;
							ValaCCodeFunction* _tmp884_;
							ValaCCodeFunction* _tmp885_;
							ValaCCodeFunctionCall* _tmp886_;
							ValaCCodeConstant* _tmp887_;
							ValaCCodeConstant* _tmp888_;
							ValaCCodeBinaryExpression* _tmp889_;
							ValaCCodeBinaryExpression* _tmp890_;
							_tmp838_ = vala_ccode_base_module_get_ccode (self);
							_tmp839_ = _tmp838_;
							_tmp840_ = property_type;
							_tmp841_ = vala_get_ccode_name ((ValaCodeNode*) _tmp840_);
							_tmp842_ = _tmp841_;
							_tmp843_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
							_tmp844_ = _tmp843_;
							vala_ccode_function_add_declaration (_tmp839_, _tmp842_, (ValaCCodeDeclarator*) _tmp844_, 0);
							_vala_ccode_node_unref0 (_tmp844_);
							_g_free0 (_tmp842_);
							_tmp845_ = property_type;
							_tmp846_ = vala_data_type_get_nullable (_tmp845_);
							_tmp847_ = _tmp846_;
							if (_tmp847_) {
								ValaCCodeFunction* _tmp848_;
								ValaCCodeFunction* _tmp849_;
								ValaCCodeIdentifier* _tmp850_;
								ValaCCodeIdentifier* _tmp851_;
								ValaCCodeFunctionCall* _tmp852_;
								_tmp848_ = vala_ccode_base_module_get_ccode (self);
								_tmp849_ = _tmp848_;
								_tmp850_ = vala_ccode_identifier_new ("old_value");
								_tmp851_ = _tmp850_;
								_tmp852_ = get_call;
								vala_ccode_function_add_assignment (_tmp849_, (ValaCCodeExpression*) _tmp851_, (ValaCCodeExpression*) _tmp852_);
								_vala_ccode_node_unref0 (_tmp851_);
							} else {
								ValaCCodeFunctionCall* _tmp853_;
								ValaCCodeIdentifier* _tmp854_;
								ValaCCodeIdentifier* _tmp855_;
								ValaCCodeUnaryExpression* _tmp856_;
								ValaCCodeUnaryExpression* _tmp857_;
								ValaCCodeFunction* _tmp858_;
								ValaCCodeFunction* _tmp859_;
								ValaCCodeFunctionCall* _tmp860_;
								_tmp853_ = get_call;
								_tmp854_ = vala_ccode_identifier_new ("old_value");
								_tmp855_ = _tmp854_;
								_tmp856_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp855_);
								_tmp857_ = _tmp856_;
								vala_ccode_function_call_add_argument (_tmp853_, (ValaCCodeExpression*) _tmp857_);
								_vala_ccode_node_unref0 (_tmp857_);
								_vala_ccode_node_unref0 (_tmp855_);
								_tmp858_ = vala_ccode_base_module_get_ccode (self);
								_tmp859_ = _tmp858_;
								_tmp860_ = get_call;
								vala_ccode_function_add_expression (_tmp859_, (ValaCCodeExpression*) _tmp860_);
							}
							_tmp861_ = property_type;
							_tmp862_ = vala_data_type_get_type_symbol (_tmp861_);
							_tmp863_ = _tmp862_;
							_tmp864_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp863_, VALA_TYPE_STRUCT, ValaStruct));
							equalfunc = _tmp864_;
							_tmp865_ = equalfunc;
							_tmp866_ = vala_ccode_identifier_new (_tmp865_);
							_tmp867_ = _tmp866_;
							_tmp868_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp867_);
							_tmp869_ = _tmp868_;
							_vala_ccode_node_unref0 (_tmp867_);
							ccall = _tmp869_;
							_tmp870_ = ccall;
							_tmp871_ = vala_ccode_identifier_new ("value");
							_tmp872_ = _tmp871_;
							vala_ccode_function_call_add_argument (_tmp870_, (ValaCCodeExpression*) _tmp872_);
							_vala_ccode_node_unref0 (_tmp872_);
							_tmp873_ = property_type;
							_tmp874_ = vala_data_type_get_nullable (_tmp873_);
							_tmp875_ = _tmp874_;
							if (_tmp875_) {
								ValaCCodeFunctionCall* _tmp876_;
								ValaCCodeIdentifier* _tmp877_;
								ValaCCodeIdentifier* _tmp878_;
								_tmp876_ = ccall;
								_tmp877_ = vala_ccode_identifier_new ("old_value");
								_tmp878_ = _tmp877_;
								vala_ccode_function_call_add_argument (_tmp876_, (ValaCCodeExpression*) _tmp878_);
								_vala_ccode_node_unref0 (_tmp878_);
							} else {
								ValaCCodeFunctionCall* _tmp879_;
								ValaCCodeIdentifier* _tmp880_;
								ValaCCodeIdentifier* _tmp881_;
								ValaCCodeUnaryExpression* _tmp882_;
								ValaCCodeUnaryExpression* _tmp883_;
								_tmp879_ = ccall;
								_tmp880_ = vala_ccode_identifier_new ("old_value");
								_tmp881_ = _tmp880_;
								_tmp882_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp881_);
								_tmp883_ = _tmp882_;
								vala_ccode_function_call_add_argument (_tmp879_, (ValaCCodeExpression*) _tmp883_);
								_vala_ccode_node_unref0 (_tmp883_);
								_vala_ccode_node_unref0 (_tmp881_);
							}
							_tmp884_ = vala_ccode_base_module_get_ccode (self);
							_tmp885_ = _tmp884_;
							_tmp886_ = ccall;
							_tmp887_ = vala_ccode_constant_new ("TRUE");
							_tmp888_ = _tmp887_;
							_tmp889_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp886_, (ValaCCodeExpression*) _tmp888_);
							_tmp890_ = _tmp889_;
							vala_ccode_function_open_if (_tmp885_, (ValaCCodeExpression*) _tmp890_);
							_vala_ccode_node_unref0 (_tmp890_);
							_vala_ccode_node_unref0 (_tmp888_);
							_vala_ccode_node_unref0 (ccall);
							_g_free0 (equalfunc);
						} else {
							ValaCCodeFunction* _tmp891_;
							ValaCCodeFunction* _tmp892_;
							ValaDataType* _tmp893_;
							gchar* _tmp894_;
							gchar* _tmp895_;
							ValaCCodeVariableDeclarator* _tmp896_;
							ValaCCodeVariableDeclarator* _tmp897_;
							ValaCCodeFunction* _tmp898_;
							ValaCCodeFunction* _tmp899_;
							ValaCCodeIdentifier* _tmp900_;
							ValaCCodeIdentifier* _tmp901_;
							ValaCCodeFunctionCall* _tmp902_;
							ValaCCodeFunction* _tmp903_;
							ValaCCodeFunction* _tmp904_;
							ValaCCodeIdentifier* _tmp905_;
							ValaCCodeIdentifier* _tmp906_;
							ValaCCodeIdentifier* _tmp907_;
							ValaCCodeIdentifier* _tmp908_;
							ValaCCodeBinaryExpression* _tmp909_;
							ValaCCodeBinaryExpression* _tmp910_;
							_tmp891_ = vala_ccode_base_module_get_ccode (self);
							_tmp892_ = _tmp891_;
							_tmp893_ = property_type;
							_tmp894_ = vala_get_ccode_name ((ValaCodeNode*) _tmp893_);
							_tmp895_ = _tmp894_;
							_tmp896_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
							_tmp897_ = _tmp896_;
							vala_ccode_function_add_declaration (_tmp892_, _tmp895_, (ValaCCodeDeclarator*) _tmp897_, 0);
							_vala_ccode_node_unref0 (_tmp897_);
							_g_free0 (_tmp895_);
							_tmp898_ = vala_ccode_base_module_get_ccode (self);
							_tmp899_ = _tmp898_;
							_tmp900_ = vala_ccode_identifier_new ("old_value");
							_tmp901_ = _tmp900_;
							_tmp902_ = get_call;
							vala_ccode_function_add_assignment (_tmp899_, (ValaCCodeExpression*) _tmp901_, (ValaCCodeExpression*) _tmp902_);
							_vala_ccode_node_unref0 (_tmp901_);
							_tmp903_ = vala_ccode_base_module_get_ccode (self);
							_tmp904_ = _tmp903_;
							_tmp905_ = vala_ccode_identifier_new ("old_value");
							_tmp906_ = _tmp905_;
							_tmp907_ = vala_ccode_identifier_new ("value");
							_tmp908_ = _tmp907_;
							_tmp909_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp906_, (ValaCCodeExpression*) _tmp908_);
							_tmp910_ = _tmp909_;
							vala_ccode_function_open_if (_tmp904_, (ValaCCodeExpression*) _tmp910_);
							_vala_ccode_node_unref0 (_tmp910_);
							_vala_ccode_node_unref0 (_tmp908_);
							_vala_ccode_node_unref0 (_tmp906_);
						}
					}
				}
				_tmp911_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
				_tmp912_ = _tmp911_;
				vala_code_node_emit ((ValaCodeNode*) _tmp912_, (ValaCodeGenerator*) self);
				_tmp913_ = vala_ccode_base_module_get_ccode (self);
				_tmp914_ = _tmp913_;
				_tmp915_ = notify_call;
				vala_ccode_function_add_expression (_tmp914_, (ValaCCodeExpression*) _tmp915_);
				_tmp916_ = vala_ccode_base_module_get_ccode (self);
				_tmp917_ = _tmp916_;
				vala_ccode_function_close (_tmp917_);
				_tmp918_ = prop;
				_tmp919_ = vala_property_get_get_accessor (_tmp918_);
				_tmp920_ = _tmp919_;
				_tmp921_ = vala_property_accessor_get_value_type (_tmp920_);
				_tmp922_ = _tmp921_;
				if (vala_data_type_is_disposable (_tmp922_)) {
					ValaGLibValue* old_value = NULL;
					ValaProperty* _tmp923_;
					ValaPropertyAccessor* _tmp924_;
					ValaPropertyAccessor* _tmp925_;
					ValaDataType* _tmp926_;
					ValaDataType* _tmp927_;
					ValaCCodeIdentifier* _tmp928_;
					ValaCCodeIdentifier* _tmp929_;
					ValaGLibValue* _tmp930_;
					ValaGLibValue* _tmp931_;
					gboolean _tmp932_ = FALSE;
					ValaDataType* _tmp933_;
					ValaCCodeFunction* _tmp938_;
					ValaCCodeFunction* _tmp939_;
					ValaGLibValue* _tmp940_;
					ValaCCodeExpression* _tmp941_;
					ValaCCodeExpression* _tmp942_;
					_tmp923_ = prop;
					_tmp924_ = vala_property_get_get_accessor (_tmp923_);
					_tmp925_ = _tmp924_;
					_tmp926_ = vala_property_accessor_get_value_type (_tmp925_);
					_tmp927_ = _tmp926_;
					_tmp928_ = vala_ccode_identifier_new ("old_value");
					_tmp929_ = _tmp928_;
					_tmp930_ = vala_glib_value_new (_tmp927_, (ValaCCodeExpression*) _tmp929_, TRUE);
					_tmp931_ = _tmp930_;
					_vala_ccode_node_unref0 (_tmp929_);
					old_value = _tmp931_;
					_tmp933_ = property_type;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp933_, VALA_TYPE_ARRAY_TYPE)) {
						ValaProperty* _tmp934_;
						_tmp934_ = prop;
						_tmp932_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp934_);
					} else {
						_tmp932_ = FALSE;
					}
					if (_tmp932_) {
						ValaGLibValue* _tmp935_;
						ValaCCodeIdentifier* _tmp936_;
						ValaCCodeIdentifier* _tmp937_;
						_tmp935_ = old_value;
						_tmp936_ = vala_ccode_identifier_new ("old_value_length");
						_tmp937_ = _tmp936_;
						vala_glib_value_append_array_length_cvalue (_tmp935_, (ValaCCodeExpression*) _tmp937_);
						_vala_ccode_node_unref0 (_tmp937_);
					}
					_tmp938_ = vala_ccode_base_module_get_ccode (self);
					_tmp939_ = _tmp938_;
					_tmp940_ = old_value;
					_tmp941_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp940_, FALSE);
					_tmp942_ = _tmp941_;
					vala_ccode_function_add_expression (_tmp939_, _tmp942_);
					_vala_ccode_node_unref0 (_tmp942_);
					_vala_target_value_unref0 (old_value);
				}
				_vala_ccode_node_unref0 (get_call);
				_vala_code_node_unref0 (property_type);
			} else {
				ValaBlock* _tmp943_;
				ValaBlock* _tmp944_;
				ValaCCodeFunction* _tmp945_;
				ValaCCodeFunction* _tmp946_;
				ValaCCodeFunctionCall* _tmp947_;
				_tmp943_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
				_tmp944_ = _tmp943_;
				vala_code_node_emit ((ValaCodeNode*) _tmp944_, (ValaCodeGenerator*) self);
				_tmp945_ = vala_ccode_base_module_get_ccode (self);
				_tmp946_ = _tmp945_;
				_tmp947_ = notify_call;
				vala_ccode_function_add_expression (_tmp946_, (ValaCCodeExpression*) _tmp947_);
			}
			_vala_code_node_unref0 (get_accessor);
			_vala_ccode_node_unref0 (notify_call);
		} else {
			ValaBlock* _tmp948_;
			ValaBlock* _tmp949_;
			_tmp948_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
			_tmp949_ = _tmp948_;
			vala_code_node_emit ((ValaCodeNode*) _tmp949_, (ValaCodeGenerator*) self);
		}
		_tmp950_ = vala_ccode_base_module_get_current_method_inner_error (self);
		_tmp951_ = _tmp950_;
		if (_tmp951_) {
			ValaCCodeFunction* _tmp952_;
			ValaCCodeFunction* _tmp953_;
			gint _tmp954_;
			gint _tmp955_;
			gchar* _tmp956_;
			gchar* _tmp957_;
			ValaCCodeConstant* _tmp958_;
			ValaCCodeConstant* _tmp959_;
			ValaCCodeVariableDeclarator* _tmp960_;
			ValaCCodeVariableDeclarator* _tmp961_;
			_tmp952_ = vala_ccode_base_module_get_ccode (self);
			_tmp953_ = _tmp952_;
			_tmp954_ = vala_ccode_base_module_get_current_inner_error_id (self);
			_tmp955_ = _tmp954_;
			_tmp956_ = g_strdup_printf ("_inner_error%d_", _tmp955_);
			_tmp957_ = _tmp956_;
			_tmp958_ = vala_ccode_constant_new ("NULL");
			_tmp959_ = _tmp958_;
			_tmp960_ = vala_ccode_variable_declarator_new_zero (_tmp957_, (ValaCCodeExpression*) _tmp959_, NULL);
			_tmp961_ = _tmp960_;
			vala_ccode_function_add_declaration (_tmp953_, "GError*", (ValaCCodeDeclarator*) _tmp961_, 0);
			_vala_ccode_node_unref0 (_tmp961_);
			_vala_ccode_node_unref0 (_tmp959_);
			_g_free0 (_tmp957_);
		}
		vala_ccode_base_module_pop_function (self);
		_tmp962_ = self->cfile;
		_tmp963_ = function;
		vala_ccode_file_add_function (_tmp962_, _tmp963_);
		_vala_code_node_unref0 (base_type);
		_vala_ccode_node_unref0 (function);
		_g_free0 (cname);
	}
	vala_ccode_base_module_pop_line (self);
	vala_ccode_base_module_pop_context (self);
	_vala_ccode_node_unref0 (cvalueparam);
	_vala_ccode_node_unref0 (cselfparam);
	_vala_code_node_unref0 (this_type);
	_vala_code_node_unref0 (t);
	_vala_code_node_unref0 (prop);
}

static void
vala_ccode_base_module_real_visit_destructor (ValaCodeVisitor* base,
                                              ValaDestructor* d)
{
	ValaCCodeBaseModule * self;
	gboolean _tmp0_ = FALSE;
	ValaMemberBinding _tmp1_;
	ValaMemberBinding _tmp2_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (d != NULL);
	_tmp1_ = vala_destructor_get_binding (d);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == VALA_MEMBER_BINDING_STATIC) {
		_tmp0_ = !self->in_plugin;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaSourceReference* _tmp3_;
		ValaSourceReference* _tmp4_;
		_tmp3_ = vala_code_node_get_source_reference ((ValaCodeNode*) d);
		_tmp4_ = _tmp3_;
		vala_report_error (_tmp4_, "static destructors are only supported for dynamic types");
		vala_code_node_set_error ((ValaCodeNode*) d, TRUE);
		return;
	}
}

gint
vala_ccode_base_module_get_block_id (ValaCCodeBaseModule* self,
                                     ValaBlock* b)
{
	gint _result_ = 0;
	ValaMap* _tmp0_;
	gpointer _tmp1_;
	gint result;
	g_return_val_if_fail (self != NULL, 0);
	g_return_val_if_fail (b != NULL, 0);
	_tmp0_ = self->priv->block_map;
	_tmp1_ = vala_map_get (_tmp0_, b);
	_result_ = (gint) ((gintptr) _tmp1_);
	if (_result_ == 0) {
		gint _tmp2_;
		ValaMap* _tmp3_;
		self->priv->next_block_id = self->priv->next_block_id + 1;
		_tmp2_ = self->priv->next_block_id;
		_result_ = _tmp2_;
		_tmp3_ = self->priv->block_map;
		vala_map_set (_tmp3_, b, (gpointer) ((gintptr) _result_));
	}
	result = _result_;
	return result;
}

gboolean
vala_ccode_base_module_no_implicit_copy (ValaCCodeBaseModule* self,
                                         ValaDataType* type)
{
	ValaClass* cl = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (type != NULL, FALSE);
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL;
	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE)) {
		_tmp3_ = TRUE;
	} else {
		_tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		gboolean _tmp4_ = FALSE;
		gboolean _tmp5_ = FALSE;
		gboolean _tmp6_ = FALSE;
		ValaClass* _tmp7_;
		_tmp7_ = cl;
		if (_tmp7_ != NULL) {
			ValaClass* _tmp8_;
			gboolean _tmp9_;
			gboolean _tmp10_;
			_tmp8_ = cl;
			_tmp9_ = vala_class_get_is_immutable (_tmp8_);
			_tmp10_ = _tmp9_;
			_tmp6_ = !_tmp10_;
		} else {
			_tmp6_ = FALSE;
		}
		if (_tmp6_) {
			ValaClass* _tmp11_;
			_tmp11_ = cl;
			_tmp5_ = !vala_is_reference_counting ((ValaTypeSymbol*) _tmp11_);
		} else {
			_tmp5_ = FALSE;
		}
		if (_tmp5_) {
			ValaClass* _tmp12_;
			_tmp12_ = cl;
			_tmp4_ = !vala_get_ccode_is_gboxed ((ValaTypeSymbol*) _tmp12_);
		} else {
			_tmp4_ = FALSE;
		}
		_tmp2_ = _tmp4_;
	}
	result = _tmp2_;
	return result;
}

static void
vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self,
                                          ValaParameter* param,
                                          ValaCCodeStruct* data,
                                          gint block_id)
{
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaCCodeFile* _tmp2_;
	ValaDataType* param_type = NULL;
	ValaDataType* _tmp3_;
	ValaDataType* _tmp4_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	gboolean _tmp8_;
	gboolean _tmp9_;
	ValaDataType* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	ValaDataType* _tmp18_;
	ValaCCodeDeclaratorSuffix* _tmp19_;
	ValaCCodeDeclaratorSuffix* _tmp20_;
	ValaTargetValue* value = NULL;
	ValaTargetValue* _tmp21_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp22_;
	ValaDataType* _tmp23_;
	ValaArrayType* _tmp24_;
	ValaDelegateType* deleg_type = NULL;
	ValaDataType* _tmp25_;
	ValaDataType* _tmp26_;
	ValaDelegateType* _tmp27_;
	gboolean _tmp28_ = FALSE;
	gboolean _tmp29_ = FALSE;
	ValaArrayType* _tmp30_;
	ValaTargetValue* _tmp66_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (param != NULL);
	g_return_if_fail (data != NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp1_ = _tmp0_;
	_tmp2_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
	_tmp3_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_data_type_copy (_tmp4_);
	param_type = _tmp5_;
	_tmp6_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_data_type_get_value_owned (_tmp7_);
	_tmp9_ = _tmp8_;
	if (!_tmp9_) {
		ValaDataType* _tmp10_;
		ValaDataType* _tmp11_;
		ValaDataType* _tmp12_;
		_tmp10_ = param_type;
		_tmp11_ = vala_variable_get_variable_type ((ValaVariable*) param);
		_tmp12_ = _tmp11_;
		vala_data_type_set_value_owned (_tmp10_, !vala_ccode_base_module_no_implicit_copy (self, _tmp12_));
	}
	_tmp13_ = param_type;
	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) param);
	_tmp17_ = _tmp16_;
	_tmp18_ = param_type;
	_tmp19_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp18_);
	_tmp20_ = _tmp19_;
	vala_ccode_struct_add_field (data, _tmp15_, _tmp17_, 0, _tmp20_);
	_vala_ccode_declarator_suffix_unref0 (_tmp20_);
	_g_free0 (_tmp17_);
	_g_free0 (_tmp15_);
	vala_parameter_set_captured (param, FALSE);
	_tmp21_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, param, NULL);
	value = _tmp21_;
	_tmp22_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp23_ = _tmp22_;
	_tmp24_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp23_) : NULL);
	array_type = _tmp24_;
	_tmp25_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp26_ = _tmp25_;
	_tmp27_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp26_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp26_) : NULL);
	deleg_type = _tmp27_;
	_tmp30_ = array_type;
	if (_tmp30_ != NULL) {
		_tmp29_ = vala_get_ccode_array_length ((ValaCodeNode*) param);
	} else {
		_tmp29_ = FALSE;
	}
	if (_tmp29_) {
		ValaArrayType* _tmp31_;
		gboolean _tmp32_;
		gboolean _tmp33_;
		_tmp31_ = array_type;
		_tmp32_ = vala_array_type_get_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
		_tmp33_ = _tmp32_;
		_tmp28_ = !_tmp33_;
	} else {
		_tmp28_ = FALSE;
	}
	if (_tmp28_) {
		gchar* length_ctype = NULL;
		gchar* _tmp34_;
		_tmp34_ = vala_get_ccode_array_length_type ((ValaCodeNode*) param);
		length_ctype = _tmp34_;
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp35_ = FALSE;
				_tmp35_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp37_;
					gint _tmp38_;
					gint _tmp39_;
					const gchar* _tmp40_;
					gchar* _tmp41_;
					gchar* _tmp42_;
					if (!_tmp35_) {
						gint _tmp36_;
						_tmp36_ = dim;
						dim = _tmp36_ + 1;
					}
					_tmp35_ = FALSE;
					_tmp37_ = array_type;
					_tmp38_ = vala_array_type_get_rank (_tmp37_);
					_tmp39_ = _tmp38_;
					if (!(dim <= _tmp39_)) {
						break;
					}
					_tmp40_ = length_ctype;
					_tmp41_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) param, dim);
					_tmp42_ = _tmp41_;
					vala_ccode_struct_add_field (data, _tmp40_, _tmp42_, 0, NULL);
					_g_free0 (_tmp42_);
				}
			}
		}
		_g_free0 (length_ctype);
	} else {
		gboolean _tmp43_ = FALSE;
		ValaDelegateType* _tmp44_;
		_tmp44_ = deleg_type;
		if (_tmp44_ != NULL) {
			ValaDelegateType* _tmp45_;
			ValaDelegate* _tmp46_;
			ValaDelegate* _tmp47_;
			gboolean _tmp48_;
			gboolean _tmp49_;
			_tmp45_ = deleg_type;
			_tmp46_ = vala_delegate_type_get_delegate_symbol (_tmp45_);
			_tmp47_ = _tmp46_;
			_tmp48_ = vala_delegate_get_has_target (_tmp47_);
			_tmp49_ = _tmp48_;
			_tmp43_ = _tmp49_;
		} else {
			_tmp43_ = FALSE;
		}
		if (_tmp43_) {
			ValaDataType* _tmp50_;
			gchar* _tmp51_;
			gchar* _tmp52_;
			gchar* _tmp53_;
			gchar* _tmp54_;
			ValaDataType* _tmp55_;
			ValaDataType* _tmp56_;
			_tmp50_ = self->delegate_target_type;
			_tmp51_ = vala_get_ccode_name ((ValaCodeNode*) _tmp50_);
			_tmp52_ = _tmp51_;
			_tmp53_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
			_tmp54_ = _tmp53_;
			vala_ccode_struct_add_field (data, _tmp52_, _tmp54_, 0, NULL);
			_g_free0 (_tmp54_);
			_g_free0 (_tmp52_);
			_tmp55_ = vala_variable_get_variable_type ((ValaVariable*) param);
			_tmp56_ = _tmp55_;
			if (vala_data_type_is_disposable (_tmp56_)) {
				ValaDelegateType* _tmp57_;
				gchar* _tmp58_;
				gchar* _tmp59_;
				gchar* _tmp60_;
				gchar* _tmp61_;
				ValaTargetValue* lvalue = NULL;
				ValaTargetValue* _tmp62_;
				ValaTargetValue* _tmp63_;
				ValaTargetValue* _tmp64_;
				ValaCCodeExpression* _tmp65_;
				_tmp57_ = self->delegate_target_destroy_type;
				_tmp58_ = vala_get_ccode_name ((ValaCodeNode*) _tmp57_);
				_tmp59_ = _tmp58_;
				_tmp60_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
				_tmp61_ = _tmp60_;
				vala_ccode_struct_add_field (data, _tmp59_, _tmp61_, 0, NULL);
				_g_free0 (_tmp61_);
				_g_free0 (_tmp59_);
				_tmp62_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
				lvalue = _tmp62_;
				_tmp63_ = value;
				_tmp64_ = lvalue;
				_tmp65_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp64_);
				_vala_ccode_node_unref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->delegate_target_destroy_notify_cvalue);
				G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->delegate_target_destroy_notify_cvalue = _tmp65_;
				_vala_target_value_unref0 (lvalue);
			}
		}
	}
	vala_parameter_set_captured (param, TRUE);
	_tmp66_ = value;
	vala_code_generator_store_parameter ((ValaCodeGenerator*) self, param, _tmp66_, TRUE, NULL);
	_vala_code_node_unref0 (deleg_type);
	_vala_code_node_unref0 (array_type);
	_vala_target_value_unref0 (value);
	_vala_code_node_unref0 (param_type);
}

static void
vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base,
                                         ValaBlock* b)
{
	ValaCCodeBaseModule * self;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaList* local_vars = NULL;
	ValaList* _tmp1_;
	ValaList* _tmp2_;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	ValaCodeNode* _tmp5_;
	ValaCodeNode* _tmp6_;
	gboolean _tmp13_ = FALSE;
	ValaCodeNode* _tmp14_;
	ValaCodeNode* _tmp15_;
	gboolean _tmp59_;
	gboolean _tmp60_;
	gboolean _tmp848_;
	gboolean _tmp849_;
	gboolean _tmp985_ = FALSE;
	gboolean _tmp986_ = FALSE;
	ValaCodeNode* _tmp987_;
	ValaCodeNode* _tmp988_;
	ValaCCodeBaseModuleEmitContext* _tmp995_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (b != NULL);
	_tmp0_ = self->emit_context;
	vala_ccode_base_module_emit_context_push_symbol (_tmp0_, (ValaSymbol*) b);
	_tmp1_ = vala_block_get_local_variables (b);
	_tmp2_ = _vala_iterable_ref0 (_tmp1_);
	local_vars = _tmp2_;
	_tmp5_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
	_tmp6_ = _tmp5_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_BLOCK)) {
		_tmp4_ = TRUE;
	} else {
		ValaCodeNode* _tmp7_;
		ValaCodeNode* _tmp8_;
		_tmp7_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
		_tmp8_ = _tmp7_;
		_tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_SWITCH_STATEMENT);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		ValaCodeNode* _tmp9_;
		ValaCodeNode* _tmp10_;
		_tmp9_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
		_tmp10_ = _tmp9_;
		_tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_TRY_STATEMENT);
	}
	if (_tmp3_) {
		ValaCCodeFunction* _tmp11_;
		ValaCCodeFunction* _tmp12_;
		_tmp11_ = vala_ccode_base_module_get_ccode (self);
		_tmp12_ = _tmp11_;
		vala_ccode_function_open_block (_tmp12_);
	}
	_tmp14_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
	_tmp15_ = _tmp14_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_TRY_STATEMENT)) {
		ValaCodeNode* _tmp16_;
		ValaCodeNode* _tmp17_;
		ValaBlock* _tmp18_;
		ValaBlock* _tmp19_;
		_tmp16_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
		_tmp19_ = _tmp18_;
		_tmp13_ = b == _tmp19_;
	} else {
		_tmp13_ = FALSE;
	}
	if (_tmp13_) {
		ValaCodeNode* _tmp20_;
		ValaCodeNode* _tmp21_;
		ValaBlock* _tmp22_;
		ValaBlock* _tmp23_;
		gboolean _tmp24_;
		gboolean _tmp25_;
		_tmp20_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
		_tmp21_ = _tmp20_;
		_tmp22_ = vala_try_statement_get_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
		_tmp23_ = _tmp22_;
		_tmp24_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp23_);
		_tmp25_ = _tmp24_;
		if (_tmp25_) {
			if (vala_ccode_base_module_is_in_coroutine (self)) {
				gboolean _tmp26_ = FALSE;
				gint _tmp27_;
				gint _tmp28_;
				_tmp27_ = vala_ccode_base_module_get_current_inner_error_id (self);
				_tmp28_ = _tmp27_;
				if (_tmp28_ > 0) {
					gboolean _tmp29_ = FALSE;
					ValaMap* _tmp30_;
					ValaMethod* _tmp31_;
					ValaMethod* _tmp32_;
					_tmp30_ = self->priv->method_inner_error_var_count;
					_tmp31_ = vala_ccode_base_module_get_current_method (self);
					_tmp32_ = _tmp31_;
					if (!vala_map_contains (_tmp30_, _tmp32_)) {
						_tmp29_ = TRUE;
					} else {
						ValaMap* _tmp33_;
						ValaMethod* _tmp34_;
						ValaMethod* _tmp35_;
						gpointer _tmp36_;
						gint _tmp37_;
						gint _tmp38_;
						_tmp33_ = self->priv->method_inner_error_var_count;
						_tmp34_ = vala_ccode_base_module_get_current_method (self);
						_tmp35_ = _tmp34_;
						_tmp36_ = vala_map_get (_tmp33_, _tmp35_);
						_tmp37_ = vala_ccode_base_module_get_current_inner_error_id (self);
						_tmp38_ = _tmp37_;
						_tmp29_ = ((gint) ((gintptr) _tmp36_)) < _tmp38_;
					}
					_tmp26_ = _tmp29_;
				} else {
					_tmp26_ = FALSE;
				}
				if (_tmp26_) {
					ValaCCodeStruct* _tmp39_;
					gint _tmp40_;
					gint _tmp41_;
					gchar* _tmp42_;
					gchar* _tmp43_;
					ValaMap* _tmp44_;
					ValaMethod* _tmp45_;
					ValaMethod* _tmp46_;
					gint _tmp47_;
					gint _tmp48_;
					_tmp39_ = self->closure_struct;
					_tmp40_ = vala_ccode_base_module_get_current_inner_error_id (self);
					_tmp41_ = _tmp40_;
					_tmp42_ = g_strdup_printf ("_inner_error%d_", _tmp41_);
					_tmp43_ = _tmp42_;
					vala_ccode_struct_add_field (_tmp39_, "GError*", _tmp43_, 0, NULL);
					_g_free0 (_tmp43_);
					_tmp44_ = self->priv->method_inner_error_var_count;
					_tmp45_ = vala_ccode_base_module_get_current_method (self);
					_tmp46_ = _tmp45_;
					_tmp47_ = vala_ccode_base_module_get_current_inner_error_id (self);
					_tmp48_ = _tmp47_;
					vala_map_set (_tmp44_, _tmp46_, (gpointer) ((gintptr) _tmp48_));
				}
			} else {
				ValaCCodeFunction* _tmp49_;
				ValaCCodeFunction* _tmp50_;
				gint _tmp51_;
				gint _tmp52_;
				gchar* _tmp53_;
				gchar* _tmp54_;
				ValaCCodeConstant* _tmp55_;
				ValaCCodeConstant* _tmp56_;
				ValaCCodeVariableDeclarator* _tmp57_;
				ValaCCodeVariableDeclarator* _tmp58_;
				_tmp49_ = vala_ccode_base_module_get_ccode (self);
				_tmp50_ = _tmp49_;
				_tmp51_ = vala_ccode_base_module_get_current_inner_error_id (self);
				_tmp52_ = _tmp51_;
				_tmp53_ = g_strdup_printf ("_inner_error%d_", _tmp52_);
				_tmp54_ = _tmp53_;
				_tmp55_ = vala_ccode_constant_new ("NULL");
				_tmp56_ = _tmp55_;
				_tmp57_ = vala_ccode_variable_declarator_new_zero (_tmp54_, (ValaCCodeExpression*) _tmp56_, NULL);
				_tmp58_ = _tmp57_;
				vala_ccode_function_add_declaration (_tmp50_, "GError*", (ValaCCodeDeclarator*) _tmp58_, 0);
				_vala_ccode_node_unref0 (_tmp58_);
				_vala_ccode_node_unref0 (_tmp56_);
				_g_free0 (_tmp54_);
			}
		}
	}
	_tmp59_ = vala_block_get_captured (b);
	_tmp60_ = _tmp59_;
	if (_tmp60_) {
		ValaBlock* parent_block = NULL;
		ValaSymbol* _tmp61_;
		ValaSymbol* _tmp62_;
		ValaBlock* _tmp63_;
		ValaBlock* _tmp64_;
		gint block_id = 0;
		gchar* struct_name = NULL;
		gchar* _tmp65_;
		ValaCCodeStruct* data = NULL;
		const gchar* _tmp66_;
		gchar* _tmp67_;
		gchar* _tmp68_;
		ValaCCodeStruct* _tmp69_;
		ValaCCodeStruct* _tmp70_;
		ValaCCodeStruct* _tmp71_;
		ValaBlock* _tmp72_;
		ValaCCodeFunctionCall* data_alloc = NULL;
		ValaCCodeIdentifier* _tmp221_;
		ValaCCodeIdentifier* _tmp222_;
		ValaCCodeFunctionCall* _tmp223_;
		ValaCCodeFunctionCall* _tmp224_;
		ValaCCodeFunctionCall* _tmp225_;
		const gchar* _tmp226_;
		ValaCCodeIdentifier* _tmp227_;
		ValaCCodeIdentifier* _tmp228_;
		ValaCCodeFunction* _tmp244_;
		ValaCCodeFunction* _tmp245_;
		gchar* _tmp246_;
		gchar* _tmp247_;
		ValaCCodeExpression* _tmp248_;
		ValaCCodeExpression* _tmp249_;
		ValaCCodeFunctionCall* _tmp250_;
		ValaCCodeFunction* _tmp251_;
		ValaCCodeFunction* _tmp252_;
		gchar* _tmp253_;
		gchar* _tmp254_;
		ValaCCodeExpression* _tmp255_;
		ValaCCodeExpression* _tmp256_;
		ValaCCodeMemberAccess* _tmp257_;
		ValaCCodeMemberAccess* _tmp258_;
		ValaCCodeIdentifier* _tmp259_;
		ValaCCodeIdentifier* _tmp260_;
		ValaBlock* _tmp261_;
		ValaSymbol* _tmp374_;
		ValaSymbol* _tmp375_;
		ValaCCodeTypeDefinition* _typedef_ = NULL;
		const gchar* _tmp479_;
		gchar* _tmp480_;
		gchar* _tmp481_;
		const gchar* _tmp482_;
		ValaCCodeVariableDeclarator* _tmp483_;
		ValaCCodeVariableDeclarator* _tmp484_;
		ValaCCodeTypeDefinition* _tmp485_;
		ValaCCodeTypeDefinition* _tmp486_;
		ValaCCodeFile* _tmp487_;
		ValaCCodeTypeDefinition* _tmp488_;
		ValaCCodeFile* _tmp489_;
		ValaCCodeStruct* _tmp490_;
		ValaCCodeFunction* ref_fun = NULL;
		gchar* _tmp491_;
		gchar* _tmp492_;
		const gchar* _tmp493_;
		gchar* _tmp494_;
		gchar* _tmp495_;
		ValaCCodeFunction* _tmp496_;
		ValaCCodeFunction* _tmp497_;
		ValaCCodeFunction* _tmp498_;
		gchar* _tmp499_;
		gchar* _tmp500_;
		const gchar* _tmp501_;
		gchar* _tmp502_;
		gchar* _tmp503_;
		ValaCCodeParameter* _tmp504_;
		ValaCCodeParameter* _tmp505_;
		ValaCCodeFunction* _tmp506_;
		ValaCCodeFunction* _tmp507_;
		ValaCCodeFunctionCall* ccall = NULL;
		ValaCCodeIdentifier* _tmp508_;
		ValaCCodeIdentifier* _tmp509_;
		ValaCCodeFunctionCall* _tmp510_;
		ValaCCodeFunctionCall* _tmp511_;
		ValaCCodeFunctionCall* _tmp512_;
		gchar* _tmp513_;
		gchar* _tmp514_;
		ValaCCodeIdentifier* _tmp515_;
		ValaCCodeIdentifier* _tmp516_;
		ValaCCodeMemberAccess* _tmp517_;
		ValaCCodeMemberAccess* _tmp518_;
		ValaCCodeUnaryExpression* _tmp519_;
		ValaCCodeUnaryExpression* _tmp520_;
		ValaCCodeFunction* _tmp521_;
		ValaCCodeFunction* _tmp522_;
		ValaCCodeFunctionCall* _tmp523_;
		ValaCCodeFunction* _tmp524_;
		ValaCCodeFunction* _tmp525_;
		gchar* _tmp526_;
		gchar* _tmp527_;
		ValaCCodeIdentifier* _tmp528_;
		ValaCCodeIdentifier* _tmp529_;
		ValaCCodeFile* _tmp530_;
		ValaCCodeFunction* _tmp531_;
		ValaCCodeFile* _tmp532_;
		ValaCCodeFunction* _tmp533_;
		ValaCCodeFunction* unref_fun = NULL;
		gchar* _tmp534_;
		gchar* _tmp535_;
		ValaCCodeFunction* _tmp536_;
		ValaCCodeFunction* _tmp537_;
		ValaCCodeFunction* _tmp538_;
		ValaCCodeParameter* _tmp539_;
		ValaCCodeParameter* _tmp540_;
		ValaCCodeFunction* _tmp541_;
		ValaCCodeFunction* _tmp542_;
		ValaCCodeFunction* _tmp543_;
		ValaCCodeFunction* _tmp544_;
		const gchar* _tmp545_;
		gchar* _tmp546_;
		gchar* _tmp547_;
		gchar* _tmp548_;
		gchar* _tmp549_;
		ValaCCodeIdentifier* _tmp550_;
		ValaCCodeIdentifier* _tmp551_;
		const gchar* _tmp552_;
		gchar* _tmp553_;
		gchar* _tmp554_;
		ValaCCodeCastExpression* _tmp555_;
		ValaCCodeCastExpression* _tmp556_;
		ValaCCodeVariableDeclarator* _tmp557_;
		ValaCCodeVariableDeclarator* _tmp558_;
		ValaCCodeIdentifier* _tmp559_;
		ValaCCodeIdentifier* _tmp560_;
		ValaCCodeFunctionCall* _tmp561_;
		ValaCCodeFunctionCall* _tmp562_;
		gchar* _tmp563_;
		gchar* _tmp564_;
		ValaCCodeIdentifier* _tmp565_;
		ValaCCodeIdentifier* _tmp566_;
		ValaCCodeMemberAccess* _tmp567_;
		ValaCCodeMemberAccess* _tmp568_;
		ValaCCodeUnaryExpression* _tmp569_;
		ValaCCodeUnaryExpression* _tmp570_;
		ValaCCodeFunction* _tmp571_;
		ValaCCodeFunction* _tmp572_;
		ValaCCodeFunctionCall* _tmp573_;
		ValaCCodeExpression* outer_block = NULL;
		gchar* _tmp574_;
		gchar* _tmp575_;
		ValaCCodeIdentifier* _tmp576_;
		ValaCCodeExpression* _tmp577_;
		ValaBlock* parent_closure_block = NULL;
		ValaDataType* this_type = NULL;
		ValaDataType* _tmp588_;
		ValaDataType* _tmp589_;
		ValaDataType* _tmp590_;
		ValaMethod* _tmp605_;
		ValaMethod* _tmp606_;
		ValaSymbol* _tmp693_;
		ValaSymbol* _tmp694_;
		ValaBlock* _tmp764_;
		ValaCCodeFunctionCall* data_free = NULL;
		ValaCCodeIdentifier* _tmp814_;
		ValaCCodeIdentifier* _tmp815_;
		ValaCCodeFunctionCall* _tmp816_;
		ValaCCodeFunctionCall* _tmp817_;
		ValaCCodeFunctionCall* _tmp818_;
		const gchar* _tmp819_;
		ValaCCodeIdentifier* _tmp820_;
		ValaCCodeIdentifier* _tmp821_;
		ValaCCodeFunctionCall* _tmp822_;
		gchar* _tmp823_;
		gchar* _tmp824_;
		ValaCCodeIdentifier* _tmp825_;
		ValaCCodeIdentifier* _tmp826_;
		ValaCCodeFunction* _tmp827_;
		ValaCCodeFunction* _tmp828_;
		ValaCCodeFunctionCall* _tmp829_;
		ValaCCodeFunction* _tmp830_;
		ValaCCodeFunction* _tmp831_;
		ValaCCodeFile* _tmp832_;
		ValaCCodeFunction* _tmp833_;
		ValaCCodeFile* _tmp834_;
		ValaCCodeFunction* _tmp835_;
		_tmp61_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
		_tmp62_ = _tmp61_;
		_tmp63_ = vala_ccode_base_module_next_closure_block (self, _tmp62_);
		_tmp64_ = _vala_code_node_ref0 (_tmp63_);
		parent_block = _tmp64_;
		block_id = vala_ccode_base_module_get_block_id (self, b);
		_tmp65_ = g_strdup_printf ("Block%dData", block_id);
		struct_name = _tmp65_;
		_tmp66_ = struct_name;
		_tmp67_ = g_strconcat ("_", _tmp66_, NULL);
		_tmp68_ = _tmp67_;
		_tmp69_ = vala_ccode_struct_new (_tmp68_);
		_tmp70_ = _tmp69_;
		_g_free0 (_tmp68_);
		data = _tmp70_;
		_tmp71_ = data;
		vala_ccode_struct_add_field (_tmp71_, "int", "_ref_count_", 0, NULL);
		_tmp72_ = parent_block;
		if (_tmp72_ != NULL) {
			gint parent_block_id = 0;
			ValaBlock* _tmp73_;
			ValaCCodeStruct* _tmp74_;
			gchar* _tmp75_;
			gchar* _tmp76_;
			gchar* _tmp77_;
			gchar* _tmp78_;
			_tmp73_ = parent_block;
			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp73_);
			_tmp74_ = data;
			_tmp75_ = g_strdup_printf ("Block%dData *", parent_block_id);
			_tmp76_ = _tmp75_;
			_tmp77_ = g_strdup_printf ("_data%d_", parent_block_id);
			_tmp78_ = _tmp77_;
			vala_ccode_struct_add_field (_tmp74_, _tmp76_, _tmp78_, 0, NULL);
			_g_free0 (_tmp78_);
			_g_free0 (_tmp76_);
		} else {
			ValaDataType* this_type = NULL;
			ValaDataType* _tmp79_;
			ValaDataType* _tmp80_;
			ValaMethod* _tmp85_;
			ValaMethod* _tmp86_;
			_tmp79_ = vala_ccode_base_module_get_this_type (self);
			this_type = _tmp79_;
			_tmp80_ = this_type;
			if (_tmp80_ != NULL) {
				ValaCCodeStruct* _tmp81_;
				ValaDataType* _tmp82_;
				gchar* _tmp83_;
				gchar* _tmp84_;
				_tmp81_ = data;
				_tmp82_ = this_type;
				_tmp83_ = vala_get_ccode_name ((ValaCodeNode*) _tmp82_);
				_tmp84_ = _tmp83_;
				vala_ccode_struct_add_field (_tmp81_, _tmp84_, "self", 0, NULL);
				_g_free0 (_tmp84_);
			}
			_tmp85_ = vala_ccode_base_module_get_current_method (self);
			_tmp86_ = _tmp85_;
			if (_tmp86_ != NULL) {
				{
					ValaList* _type_param_list = NULL;
					ValaMethod* _tmp87_;
					ValaMethod* _tmp88_;
					ValaList* _tmp89_;
					gint _type_param_size = 0;
					ValaList* _tmp90_;
					gint _tmp91_;
					gint _tmp92_;
					gint _type_param_index = 0;
					_tmp87_ = vala_ccode_base_module_get_current_method (self);
					_tmp88_ = _tmp87_;
					_tmp89_ = vala_method_get_type_parameters (_tmp88_);
					_type_param_list = _tmp89_;
					_tmp90_ = _type_param_list;
					_tmp91_ = vala_collection_get_size ((ValaCollection*) _tmp90_);
					_tmp92_ = _tmp91_;
					_type_param_size = _tmp92_;
					_type_param_index = -1;
					while (TRUE) {
						gint _tmp93_;
						gint _tmp94_;
						ValaTypeParameter* type_param = NULL;
						ValaList* _tmp95_;
						gpointer _tmp96_;
						ValaCCodeStruct* _tmp97_;
						ValaTypeParameter* _tmp98_;
						gchar* _tmp99_;
						gchar* _tmp100_;
						ValaCCodeStruct* _tmp101_;
						ValaTypeParameter* _tmp102_;
						gchar* _tmp103_;
						gchar* _tmp104_;
						ValaCCodeStruct* _tmp105_;
						ValaTypeParameter* _tmp106_;
						gchar* _tmp107_;
						gchar* _tmp108_;
						_type_param_index = _type_param_index + 1;
						_tmp93_ = _type_param_index;
						_tmp94_ = _type_param_size;
						if (!(_tmp93_ < _tmp94_)) {
							break;
						}
						_tmp95_ = _type_param_list;
						_tmp96_ = vala_list_get (_tmp95_, _type_param_index);
						type_param = (ValaTypeParameter*) _tmp96_;
						_tmp97_ = data;
						_tmp98_ = type_param;
						_tmp99_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp98_);
						_tmp100_ = _tmp99_;
						vala_ccode_struct_add_field (_tmp97_, "GType", _tmp100_, 0, NULL);
						_g_free0 (_tmp100_);
						_tmp101_ = data;
						_tmp102_ = type_param;
						_tmp103_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp102_);
						_tmp104_ = _tmp103_;
						vala_ccode_struct_add_field (_tmp101_, "GBoxedCopyFunc", _tmp104_, 0, NULL);
						_g_free0 (_tmp104_);
						_tmp105_ = data;
						_tmp106_ = type_param;
						_tmp107_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp106_);
						_tmp108_ = _tmp107_;
						vala_ccode_struct_add_field (_tmp105_, "GDestroyNotify", _tmp108_, 0, NULL);
						_g_free0 (_tmp108_);
						_vala_code_node_unref0 (type_param);
					}
				}
			}
		}
		{
			ValaList* _local_list = NULL;
			ValaList* _tmp109_;
			gint _local_size = 0;
			ValaList* _tmp110_;
			gint _tmp111_;
			gint _tmp112_;
			gint _local_index = 0;
			_tmp109_ = local_vars;
			_local_list = _tmp109_;
			_tmp110_ = _local_list;
			_tmp111_ = vala_collection_get_size ((ValaCollection*) _tmp110_);
			_tmp112_ = _tmp111_;
			_local_size = _tmp112_;
			_local_index = -1;
			while (TRUE) {
				gint _tmp113_;
				gint _tmp114_;
				ValaLocalVariable* local = NULL;
				ValaList* _tmp115_;
				gpointer _tmp116_;
				ValaLocalVariable* _tmp117_;
				gboolean _tmp118_;
				gboolean _tmp119_;
				_local_index = _local_index + 1;
				_tmp113_ = _local_index;
				_tmp114_ = _local_size;
				if (!(_tmp113_ < _tmp114_)) {
					break;
				}
				_tmp115_ = _local_list;
				_tmp116_ = vala_list_get (_tmp115_, _local_index);
				local = (ValaLocalVariable*) _tmp116_;
				_tmp117_ = local;
				_tmp118_ = vala_local_variable_get_captured (_tmp117_);
				_tmp119_ = _tmp118_;
				if (_tmp119_) {
					ValaLocalVariable* _tmp120_;
					ValaDataType* _tmp121_;
					ValaDataType* _tmp122_;
					ValaCCodeFile* _tmp123_;
					ValaCCodeStruct* _tmp124_;
					ValaLocalVariable* _tmp125_;
					ValaDataType* _tmp126_;
					ValaDataType* _tmp127_;
					gchar* _tmp128_;
					gchar* _tmp129_;
					ValaLocalVariable* _tmp130_;
					gchar* _tmp131_;
					gchar* _tmp132_;
					ValaLocalVariable* _tmp133_;
					ValaDataType* _tmp134_;
					ValaDataType* _tmp135_;
					ValaCCodeDeclaratorSuffix* _tmp136_;
					ValaCCodeDeclaratorSuffix* _tmp137_;
					gboolean _tmp138_ = FALSE;
					ValaLocalVariable* _tmp139_;
					ValaDataType* _tmp140_;
					ValaDataType* _tmp141_;
					_tmp120_ = local;
					_tmp121_ = vala_variable_get_variable_type ((ValaVariable*) _tmp120_);
					_tmp122_ = _tmp121_;
					_tmp123_ = self->cfile;
					vala_ccode_base_module_generate_type_declaration (self, _tmp122_, _tmp123_);
					_tmp124_ = data;
					_tmp125_ = local;
					_tmp126_ = vala_variable_get_variable_type ((ValaVariable*) _tmp125_);
					_tmp127_ = _tmp126_;
					_tmp128_ = vala_get_ccode_name ((ValaCodeNode*) _tmp127_);
					_tmp129_ = _tmp128_;
					_tmp130_ = local;
					_tmp131_ = vala_ccode_base_module_get_local_cname (self, _tmp130_);
					_tmp132_ = _tmp131_;
					_tmp133_ = local;
					_tmp134_ = vala_variable_get_variable_type ((ValaVariable*) _tmp133_);
					_tmp135_ = _tmp134_;
					_tmp136_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp135_);
					_tmp137_ = _tmp136_;
					vala_ccode_struct_add_field (_tmp124_, _tmp129_, _tmp132_, 0, _tmp137_);
					_vala_ccode_declarator_suffix_unref0 (_tmp137_);
					_g_free0 (_tmp132_);
					_g_free0 (_tmp129_);
					_tmp139_ = local;
					_tmp140_ = vala_variable_get_variable_type ((ValaVariable*) _tmp139_);
					_tmp141_ = _tmp140_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp141_, VALA_TYPE_ARRAY_TYPE)) {
						ValaLocalVariable* _tmp142_;
						ValaDataType* _tmp143_;
						ValaDataType* _tmp144_;
						gboolean _tmp145_;
						gboolean _tmp146_;
						_tmp142_ = local;
						_tmp143_ = vala_variable_get_variable_type ((ValaVariable*) _tmp142_);
						_tmp144_ = _tmp143_;
						_tmp145_ = vala_array_type_get_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp144_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
						_tmp146_ = _tmp145_;
						_tmp138_ = !_tmp146_;
					} else {
						_tmp138_ = FALSE;
					}
					if (_tmp138_) {
						ValaArrayType* array_type = NULL;
						ValaLocalVariable* _tmp147_;
						ValaDataType* _tmp148_;
						ValaDataType* _tmp149_;
						ValaArrayType* _tmp150_;
						gchar* length_ctype = NULL;
						ValaArrayType* _tmp151_;
						gchar* _tmp152_;
						ValaCCodeStruct* _tmp165_;
						const gchar* _tmp166_;
						ValaLocalVariable* _tmp167_;
						gchar* _tmp168_;
						gchar* _tmp169_;
						gchar* _tmp170_;
						gchar* _tmp171_;
						_tmp147_ = local;
						_tmp148_ = vala_variable_get_variable_type ((ValaVariable*) _tmp147_);
						_tmp149_ = _tmp148_;
						_tmp150_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp149_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
						array_type = _tmp150_;
						_tmp151_ = array_type;
						_tmp152_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp151_);
						length_ctype = _tmp152_;
						{
							gint dim = 0;
							dim = 1;
							{
								gboolean _tmp153_ = FALSE;
								_tmp153_ = TRUE;
								while (TRUE) {
									ValaArrayType* _tmp155_;
									gint _tmp156_;
									gint _tmp157_;
									ValaCCodeStruct* _tmp158_;
									const gchar* _tmp159_;
									ValaLocalVariable* _tmp160_;
									gchar* _tmp161_;
									gchar* _tmp162_;
									gchar* _tmp163_;
									gchar* _tmp164_;
									if (!_tmp153_) {
										gint _tmp154_;
										_tmp154_ = dim;
										dim = _tmp154_ + 1;
									}
									_tmp153_ = FALSE;
									_tmp155_ = array_type;
									_tmp156_ = vala_array_type_get_rank (_tmp155_);
									_tmp157_ = _tmp156_;
									if (!(dim <= _tmp157_)) {
										break;
									}
									_tmp158_ = data;
									_tmp159_ = length_ctype;
									_tmp160_ = local;
									_tmp161_ = vala_ccode_base_module_get_local_cname (self, _tmp160_);
									_tmp162_ = _tmp161_;
									_tmp163_ = vala_ccode_base_module_get_array_length_cname (self, _tmp162_, dim);
									_tmp164_ = _tmp163_;
									vala_ccode_struct_add_field (_tmp158_, _tmp159_, _tmp164_, 0, NULL);
									_g_free0 (_tmp164_);
									_g_free0 (_tmp162_);
								}
							}
						}
						_tmp165_ = data;
						_tmp166_ = length_ctype;
						_tmp167_ = local;
						_tmp168_ = vala_ccode_base_module_get_local_cname (self, _tmp167_);
						_tmp169_ = _tmp168_;
						_tmp170_ = vala_ccode_base_module_get_array_size_cname (self, _tmp169_);
						_tmp171_ = _tmp170_;
						vala_ccode_struct_add_field (_tmp165_, _tmp166_, _tmp171_, 0, NULL);
						_g_free0 (_tmp171_);
						_g_free0 (_tmp169_);
						_g_free0 (length_ctype);
						_vala_code_node_unref0 (array_type);
					} else {
						gboolean _tmp172_ = FALSE;
						ValaLocalVariable* _tmp173_;
						ValaDataType* _tmp174_;
						ValaDataType* _tmp175_;
						_tmp173_ = local;
						_tmp174_ = vala_variable_get_variable_type ((ValaVariable*) _tmp173_);
						_tmp175_ = _tmp174_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp175_, VALA_TYPE_DELEGATE_TYPE)) {
							ValaLocalVariable* _tmp176_;
							ValaDataType* _tmp177_;
							ValaDataType* _tmp178_;
							ValaDelegate* _tmp179_;
							ValaDelegate* _tmp180_;
							gboolean _tmp181_;
							gboolean _tmp182_;
							_tmp176_ = local;
							_tmp177_ = vala_variable_get_variable_type ((ValaVariable*) _tmp176_);
							_tmp178_ = _tmp177_;
							_tmp179_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp178_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
							_tmp180_ = _tmp179_;
							_tmp181_ = vala_delegate_get_has_target (_tmp180_);
							_tmp182_ = _tmp181_;
							_tmp172_ = _tmp182_;
						} else {
							_tmp172_ = FALSE;
						}
						if (_tmp172_) {
							ValaCCodeStruct* _tmp183_;
							ValaDataType* _tmp184_;
							gchar* _tmp185_;
							gchar* _tmp186_;
							ValaLocalVariable* _tmp187_;
							gchar* _tmp188_;
							gchar* _tmp189_;
							gchar* _tmp190_;
							gchar* _tmp191_;
							ValaLocalVariable* _tmp192_;
							ValaDataType* _tmp193_;
							ValaDataType* _tmp194_;
							_tmp183_ = data;
							_tmp184_ = self->delegate_target_type;
							_tmp185_ = vala_get_ccode_name ((ValaCodeNode*) _tmp184_);
							_tmp186_ = _tmp185_;
							_tmp187_ = local;
							_tmp188_ = vala_ccode_base_module_get_local_cname (self, _tmp187_);
							_tmp189_ = _tmp188_;
							_tmp190_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp189_);
							_tmp191_ = _tmp190_;
							vala_ccode_struct_add_field (_tmp183_, _tmp186_, _tmp191_, 0, NULL);
							_g_free0 (_tmp191_);
							_g_free0 (_tmp189_);
							_g_free0 (_tmp186_);
							_tmp192_ = local;
							_tmp193_ = vala_variable_get_variable_type ((ValaVariable*) _tmp192_);
							_tmp194_ = _tmp193_;
							if (vala_data_type_is_disposable (_tmp194_)) {
								ValaCCodeStruct* _tmp195_;
								ValaDelegateType* _tmp196_;
								gchar* _tmp197_;
								gchar* _tmp198_;
								ValaLocalVariable* _tmp199_;
								gchar* _tmp200_;
								gchar* _tmp201_;
								gchar* _tmp202_;
								gchar* _tmp203_;
								_tmp195_ = data;
								_tmp196_ = self->delegate_target_destroy_type;
								_tmp197_ = vala_get_ccode_name ((ValaCodeNode*) _tmp196_);
								_tmp198_ = _tmp197_;
								_tmp199_ = local;
								_tmp200_ = vala_ccode_base_module_get_local_cname (self, _tmp199_);
								_tmp201_ = _tmp200_;
								_tmp202_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp201_);
								_tmp203_ = _tmp202_;
								vala_ccode_struct_add_field (_tmp195_, _tmp198_, _tmp203_, 0, NULL);
								_g_free0 (_tmp203_);
								_g_free0 (_tmp201_);
								_g_free0 (_tmp198_);
							}
						} else {
							ValaLocalVariable* _tmp204_;
							ValaDataType* _tmp205_;
							ValaDataType* _tmp206_;
							ValaTypeSymbol* _tmp207_;
							ValaTypeSymbol* _tmp208_;
							ValaCodeContext* _tmp209_;
							ValaSemanticAnalyzer* _tmp210_;
							ValaSemanticAnalyzer* _tmp211_;
							ValaDataType* _tmp212_;
							ValaTypeSymbol* _tmp213_;
							ValaTypeSymbol* _tmp214_;
							_tmp204_ = local;
							_tmp205_ = vala_variable_get_variable_type ((ValaVariable*) _tmp204_);
							_tmp206_ = _tmp205_;
							_tmp207_ = vala_data_type_get_type_symbol (_tmp206_);
							_tmp208_ = _tmp207_;
							_tmp209_ = self->priv->_context;
							_tmp210_ = vala_code_context_get_analyzer (_tmp209_);
							_tmp211_ = _tmp210_;
							_tmp212_ = _tmp211_->va_list_type;
							_tmp213_ = vala_data_type_get_type_symbol (_tmp212_);
							_tmp214_ = _tmp213_;
							if (_tmp208_ == _tmp214_) {
								ValaLocalVariable* _tmp215_;
								ValaSourceReference* _tmp216_;
								ValaSourceReference* _tmp217_;
								ValaLocalVariable* _tmp218_;
								gchar* _tmp219_;
								gchar* _tmp220_;
								_tmp215_ = local;
								_tmp216_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp215_);
								_tmp217_ = _tmp216_;
								_tmp218_ = local;
								_tmp219_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp218_);
								_tmp220_ = _tmp219_;
								vala_report_error (_tmp217_, "internal: Capturing `va_list' variable `%s' is not allowed", _tmp220_);
								_g_free0 (_tmp220_);
								vala_code_node_set_error ((ValaCodeNode*) b, TRUE);
							}
						}
					}
				}
				_vala_code_node_unref0 (local);
			}
		}
		_tmp221_ = vala_ccode_identifier_new ("g_slice_new0");
		_tmp222_ = _tmp221_;
		_tmp223_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp222_);
		_tmp224_ = _tmp223_;
		_vala_ccode_node_unref0 (_tmp222_);
		data_alloc = _tmp224_;
		_tmp225_ = data_alloc;
		_tmp226_ = struct_name;
		_tmp227_ = vala_ccode_identifier_new (_tmp226_);
		_tmp228_ = _tmp227_;
		vala_ccode_function_call_add_argument (_tmp225_, (ValaCCodeExpression*) _tmp228_);
		_vala_ccode_node_unref0 (_tmp228_);
		if (vala_ccode_base_module_is_in_coroutine (self)) {
			ValaCCodeStruct* _tmp229_;
			const gchar* _tmp230_;
			gchar* _tmp231_;
			gchar* _tmp232_;
			gchar* _tmp233_;
			gchar* _tmp234_;
			_tmp229_ = self->closure_struct;
			_tmp230_ = struct_name;
			_tmp231_ = g_strconcat (_tmp230_, "*", NULL);
			_tmp232_ = _tmp231_;
			_tmp233_ = g_strdup_printf ("_data%d_", block_id);
			_tmp234_ = _tmp233_;
			vala_ccode_struct_add_field (_tmp229_, _tmp232_, _tmp234_, 0, NULL);
			_g_free0 (_tmp234_);
			_g_free0 (_tmp232_);
		} else {
			ValaCCodeFunction* _tmp235_;
			ValaCCodeFunction* _tmp236_;
			const gchar* _tmp237_;
			gchar* _tmp238_;
			gchar* _tmp239_;
			gchar* _tmp240_;
			gchar* _tmp241_;
			ValaCCodeVariableDeclarator* _tmp242_;
			ValaCCodeVariableDeclarator* _tmp243_;
			_tmp235_ = vala_ccode_base_module_get_ccode (self);
			_tmp236_ = _tmp235_;
			_tmp237_ = struct_name;
			_tmp238_ = g_strconcat (_tmp237_, "*", NULL);
			_tmp239_ = _tmp238_;
			_tmp240_ = g_strdup_printf ("_data%d_", block_id);
			_tmp241_ = _tmp240_;
			_tmp242_ = vala_ccode_variable_declarator_new (_tmp241_, NULL, NULL);
			_tmp243_ = _tmp242_;
			vala_ccode_function_add_declaration (_tmp236_, _tmp239_, (ValaCCodeDeclarator*) _tmp243_, 0);
			_vala_ccode_node_unref0 (_tmp243_);
			_g_free0 (_tmp241_);
			_g_free0 (_tmp239_);
		}
		_tmp244_ = vala_ccode_base_module_get_ccode (self);
		_tmp245_ = _tmp244_;
		_tmp246_ = g_strdup_printf ("_data%d_", block_id);
		_tmp247_ = _tmp246_;
		_tmp248_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp247_);
		_tmp249_ = _tmp248_;
		_tmp250_ = data_alloc;
		vala_ccode_function_add_assignment (_tmp245_, _tmp249_, (ValaCCodeExpression*) _tmp250_);
		_vala_ccode_node_unref0 (_tmp249_);
		_g_free0 (_tmp247_);
		_tmp251_ = vala_ccode_base_module_get_ccode (self);
		_tmp252_ = _tmp251_;
		_tmp253_ = g_strdup_printf ("_data%d_", block_id);
		_tmp254_ = _tmp253_;
		_tmp255_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp254_);
		_tmp256_ = _tmp255_;
		_tmp257_ = vala_ccode_member_access_new_pointer (_tmp256_, "_ref_count_");
		_tmp258_ = _tmp257_;
		_tmp259_ = vala_ccode_identifier_new ("1");
		_tmp260_ = _tmp259_;
		vala_ccode_function_add_assignment (_tmp252_, (ValaCCodeExpression*) _tmp258_, (ValaCCodeExpression*) _tmp260_);
		_vala_ccode_node_unref0 (_tmp260_);
		_vala_ccode_node_unref0 (_tmp258_);
		_vala_ccode_node_unref0 (_tmp256_);
		_g_free0 (_tmp254_);
		_tmp261_ = parent_block;
		if (_tmp261_ != NULL) {
			gint parent_block_id = 0;
			ValaBlock* _tmp262_;
			ValaCCodeFunctionCall* ref_call = NULL;
			gchar* _tmp263_;
			gchar* _tmp264_;
			ValaCCodeIdentifier* _tmp265_;
			ValaCCodeIdentifier* _tmp266_;
			ValaCCodeFunctionCall* _tmp267_;
			ValaCCodeFunctionCall* _tmp268_;
			ValaCCodeFunctionCall* _tmp269_;
			gchar* _tmp270_;
			gchar* _tmp271_;
			ValaCCodeExpression* _tmp272_;
			ValaCCodeExpression* _tmp273_;
			ValaCCodeFunction* _tmp274_;
			ValaCCodeFunction* _tmp275_;
			gchar* _tmp276_;
			gchar* _tmp277_;
			ValaCCodeExpression* _tmp278_;
			ValaCCodeExpression* _tmp279_;
			gchar* _tmp280_;
			gchar* _tmp281_;
			ValaCCodeMemberAccess* _tmp282_;
			ValaCCodeMemberAccess* _tmp283_;
			ValaCCodeFunctionCall* _tmp284_;
			_tmp262_ = parent_block;
			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp262_);
			_tmp263_ = g_strdup_printf ("block%d_data_ref", parent_block_id);
			_tmp264_ = _tmp263_;
			_tmp265_ = vala_ccode_identifier_new (_tmp264_);
			_tmp266_ = _tmp265_;
			_tmp267_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp266_);
			_tmp268_ = _tmp267_;
			_vala_ccode_node_unref0 (_tmp266_);
			_g_free0 (_tmp264_);
			ref_call = _tmp268_;
			_tmp269_ = ref_call;
			_tmp270_ = g_strdup_printf ("_data%d_", parent_block_id);
			_tmp271_ = _tmp270_;
			_tmp272_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp271_);
			_tmp273_ = _tmp272_;
			vala_ccode_function_call_add_argument (_tmp269_, _tmp273_);
			_vala_ccode_node_unref0 (_tmp273_);
			_g_free0 (_tmp271_);
			_tmp274_ = vala_ccode_base_module_get_ccode (self);
			_tmp275_ = _tmp274_;
			_tmp276_ = g_strdup_printf ("_data%d_", block_id);
			_tmp277_ = _tmp276_;
			_tmp278_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp277_);
			_tmp279_ = _tmp278_;
			_tmp280_ = g_strdup_printf ("_data%d_", parent_block_id);
			_tmp281_ = _tmp280_;
			_tmp282_ = vala_ccode_member_access_new_pointer (_tmp279_, _tmp281_);
			_tmp283_ = _tmp282_;
			_tmp284_ = ref_call;
			vala_ccode_function_add_assignment (_tmp275_, (ValaCCodeExpression*) _tmp283_, (ValaCCodeExpression*) _tmp284_);
			_vala_ccode_node_unref0 (_tmp283_);
			_g_free0 (_tmp281_);
			_vala_ccode_node_unref0 (_tmp279_);
			_g_free0 (_tmp277_);
			_vala_ccode_node_unref0 (ref_call);
		} else {
			gboolean _tmp285_ = FALSE;
			gboolean _tmp286_ = FALSE;
			ValaMethod* _tmp287_;
			ValaMethod* _tmp288_;
			gboolean in_creation_method_with_chainup = FALSE;
			ValaDataType* this_type = NULL;
			ValaDataType* _tmp295_;
			gboolean _tmp296_ = FALSE;
			ValaDataType* _tmp297_;
			ValaMethod* _tmp325_;
			ValaMethod* _tmp326_;
			_tmp287_ = vala_ccode_base_module_get_current_method (self);
			_tmp288_ = _tmp287_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp288_, VALA_TYPE_CREATION_METHOD)) {
				ValaClass* _tmp289_;
				ValaClass* _tmp290_;
				_tmp289_ = vala_ccode_base_module_get_current_class (self);
				_tmp290_ = _tmp289_;
				_tmp286_ = _tmp290_ != NULL;
			} else {
				_tmp286_ = FALSE;
			}
			if (_tmp286_) {
				ValaClass* _tmp291_;
				ValaClass* _tmp292_;
				ValaClass* _tmp293_;
				ValaClass* _tmp294_;
				_tmp291_ = vala_ccode_base_module_get_current_class (self);
				_tmp292_ = _tmp291_;
				_tmp293_ = vala_class_get_base_class (_tmp292_);
				_tmp294_ = _tmp293_;
				_tmp285_ = _tmp294_ != NULL;
			} else {
				_tmp285_ = FALSE;
			}
			in_creation_method_with_chainup = _tmp285_;
			_tmp295_ = vala_ccode_base_module_get_this_type (self);
			this_type = _tmp295_;
			_tmp297_ = this_type;
			if (_tmp297_ != NULL) {
				gboolean _tmp298_ = FALSE;
				if (!in_creation_method_with_chainup) {
					_tmp298_ = TRUE;
				} else {
					ValaMethod* _tmp299_;
					ValaMethod* _tmp300_;
					ValaBlock* _tmp301_;
					ValaBlock* _tmp302_;
					_tmp299_ = vala_ccode_base_module_get_current_method (self);
					_tmp300_ = _tmp299_;
					_tmp301_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp300_);
					_tmp302_ = _tmp301_;
					_tmp298_ = _tmp302_ != b;
				}
				_tmp296_ = _tmp298_;
			} else {
				_tmp296_ = FALSE;
			}
			if (_tmp296_) {
				ValaCCodeExpression* instance = NULL;
				ValaCCodeFunction* _tmp316_;
				ValaCCodeFunction* _tmp317_;
				gchar* _tmp318_;
				gchar* _tmp319_;
				ValaCCodeExpression* _tmp320_;
				ValaCCodeExpression* _tmp321_;
				ValaCCodeMemberAccess* _tmp322_;
				ValaCCodeMemberAccess* _tmp323_;
				ValaCCodeExpression* _tmp324_;
				if (vala_ccode_base_module_is_in_destructor (self)) {
					ValaCCodeIdentifier* _tmp303_;
					_tmp303_ = vala_ccode_identifier_new ("self");
					_vala_ccode_node_unref0 (instance);
					instance = (ValaCCodeExpression*) _tmp303_;
				} else {
					ValaCCodeFunctionCall* ref_call = NULL;
					ValaDataType* _tmp304_;
					ValaSourceReference* _tmp305_;
					ValaSourceReference* _tmp306_;
					ValaCCodeExpression* _tmp307_;
					ValaCCodeExpression* _tmp308_;
					ValaCCodeFunctionCall* _tmp309_;
					ValaCCodeFunctionCall* _tmp310_;
					ValaCCodeFunctionCall* _tmp311_;
					ValaCCodeExpression* _tmp312_;
					ValaCCodeExpression* _tmp313_;
					ValaCCodeFunctionCall* _tmp314_;
					ValaCCodeExpression* _tmp315_;
					_tmp304_ = this_type;
					_tmp305_ = vala_code_node_get_source_reference ((ValaCodeNode*) b);
					_tmp306_ = _tmp305_;
					_tmp307_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp304_, _tmp306_, FALSE);
					_tmp308_ = _tmp307_;
					_tmp309_ = vala_ccode_function_call_new (_tmp308_);
					_tmp310_ = _tmp309_;
					_vala_ccode_node_unref0 (_tmp308_);
					ref_call = _tmp310_;
					_tmp311_ = ref_call;
					_tmp312_ = vala_ccode_base_module_get_this_cexpression (self);
					_tmp313_ = _tmp312_;
					vala_ccode_function_call_add_argument (_tmp311_, _tmp313_);
					_vala_ccode_node_unref0 (_tmp313_);
					_tmp314_ = ref_call;
					_tmp315_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp314_);
					_vala_ccode_node_unref0 (instance);
					instance = _tmp315_;
					_vala_ccode_node_unref0 (ref_call);
				}
				_tmp316_ = vala_ccode_base_module_get_ccode (self);
				_tmp317_ = _tmp316_;
				_tmp318_ = g_strdup_printf ("_data%d_", block_id);
				_tmp319_ = _tmp318_;
				_tmp320_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp319_);
				_tmp321_ = _tmp320_;
				_tmp322_ = vala_ccode_member_access_new_pointer (_tmp321_, "self");
				_tmp323_ = _tmp322_;
				_tmp324_ = instance;
				vala_ccode_function_add_assignment (_tmp317_, (ValaCCodeExpression*) _tmp323_, _tmp324_);
				_vala_ccode_node_unref0 (_tmp323_);
				_vala_ccode_node_unref0 (_tmp321_);
				_g_free0 (_tmp319_);
				_vala_ccode_node_unref0 (instance);
			}
			_tmp325_ = vala_ccode_base_module_get_current_method (self);
			_tmp326_ = _tmp325_;
			if (_tmp326_ != NULL) {
				ValaCCodeExpression* data_var = NULL;
				gchar* _tmp327_;
				gchar* _tmp328_;
				ValaCCodeExpression* _tmp329_;
				ValaCCodeExpression* _tmp330_;
				_tmp327_ = g_strdup_printf ("_data%d_", block_id);
				_tmp328_ = _tmp327_;
				_tmp329_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp328_);
				_tmp330_ = _tmp329_;
				_g_free0 (_tmp328_);
				data_var = _tmp330_;
				{
					ValaList* _type_param_list = NULL;
					ValaMethod* _tmp331_;
					ValaMethod* _tmp332_;
					ValaList* _tmp333_;
					gint _type_param_size = 0;
					ValaList* _tmp334_;
					gint _tmp335_;
					gint _tmp336_;
					gint _type_param_index = 0;
					_tmp331_ = vala_ccode_base_module_get_current_method (self);
					_tmp332_ = _tmp331_;
					_tmp333_ = vala_method_get_type_parameters (_tmp332_);
					_type_param_list = _tmp333_;
					_tmp334_ = _type_param_list;
					_tmp335_ = vala_collection_get_size ((ValaCollection*) _tmp334_);
					_tmp336_ = _tmp335_;
					_type_param_size = _tmp336_;
					_type_param_index = -1;
					while (TRUE) {
						gint _tmp337_;
						gint _tmp338_;
						ValaTypeParameter* type_param = NULL;
						ValaList* _tmp339_;
						gpointer _tmp340_;
						gchar* type = NULL;
						ValaTypeParameter* _tmp341_;
						gchar* _tmp342_;
						gchar* dup_func = NULL;
						ValaTypeParameter* _tmp343_;
						gchar* _tmp344_;
						gchar* destroy_func = NULL;
						ValaTypeParameter* _tmp345_;
						gchar* _tmp346_;
						ValaCCodeFunction* _tmp347_;
						ValaCCodeFunction* _tmp348_;
						ValaCCodeExpression* _tmp349_;
						const gchar* _tmp350_;
						ValaCCodeMemberAccess* _tmp351_;
						ValaCCodeMemberAccess* _tmp352_;
						const gchar* _tmp353_;
						ValaCCodeExpression* _tmp354_;
						ValaCCodeExpression* _tmp355_;
						ValaCCodeFunction* _tmp356_;
						ValaCCodeFunction* _tmp357_;
						ValaCCodeExpression* _tmp358_;
						const gchar* _tmp359_;
						ValaCCodeMemberAccess* _tmp360_;
						ValaCCodeMemberAccess* _tmp361_;
						const gchar* _tmp362_;
						ValaCCodeExpression* _tmp363_;
						ValaCCodeExpression* _tmp364_;
						ValaCCodeFunction* _tmp365_;
						ValaCCodeFunction* _tmp366_;
						ValaCCodeExpression* _tmp367_;
						const gchar* _tmp368_;
						ValaCCodeMemberAccess* _tmp369_;
						ValaCCodeMemberAccess* _tmp370_;
						const gchar* _tmp371_;
						ValaCCodeExpression* _tmp372_;
						ValaCCodeExpression* _tmp373_;
						_type_param_index = _type_param_index + 1;
						_tmp337_ = _type_param_index;
						_tmp338_ = _type_param_size;
						if (!(_tmp337_ < _tmp338_)) {
							break;
						}
						_tmp339_ = _type_param_list;
						_tmp340_ = vala_list_get (_tmp339_, _type_param_index);
						type_param = (ValaTypeParameter*) _tmp340_;
						_tmp341_ = type_param;
						_tmp342_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp341_);
						type = _tmp342_;
						_tmp343_ = type_param;
						_tmp344_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp343_);
						dup_func = _tmp344_;
						_tmp345_ = type_param;
						_tmp346_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp345_);
						destroy_func = _tmp346_;
						_tmp347_ = vala_ccode_base_module_get_ccode (self);
						_tmp348_ = _tmp347_;
						_tmp349_ = data_var;
						_tmp350_ = type;
						_tmp351_ = vala_ccode_member_access_new_pointer (_tmp349_, _tmp350_);
						_tmp352_ = _tmp351_;
						_tmp353_ = type;
						_tmp354_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp353_);
						_tmp355_ = _tmp354_;
						vala_ccode_function_add_assignment (_tmp348_, (ValaCCodeExpression*) _tmp352_, _tmp355_);
						_vala_ccode_node_unref0 (_tmp355_);
						_vala_ccode_node_unref0 (_tmp352_);
						_tmp356_ = vala_ccode_base_module_get_ccode (self);
						_tmp357_ = _tmp356_;
						_tmp358_ = data_var;
						_tmp359_ = dup_func;
						_tmp360_ = vala_ccode_member_access_new_pointer (_tmp358_, _tmp359_);
						_tmp361_ = _tmp360_;
						_tmp362_ = dup_func;
						_tmp363_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp362_);
						_tmp364_ = _tmp363_;
						vala_ccode_function_add_assignment (_tmp357_, (ValaCCodeExpression*) _tmp361_, _tmp364_);
						_vala_ccode_node_unref0 (_tmp364_);
						_vala_ccode_node_unref0 (_tmp361_);
						_tmp365_ = vala_ccode_base_module_get_ccode (self);
						_tmp366_ = _tmp365_;
						_tmp367_ = data_var;
						_tmp368_ = destroy_func;
						_tmp369_ = vala_ccode_member_access_new_pointer (_tmp367_, _tmp368_);
						_tmp370_ = _tmp369_;
						_tmp371_ = destroy_func;
						_tmp372_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp371_);
						_tmp373_ = _tmp372_;
						vala_ccode_function_add_assignment (_tmp366_, (ValaCCodeExpression*) _tmp370_, _tmp373_);
						_vala_ccode_node_unref0 (_tmp373_);
						_vala_ccode_node_unref0 (_tmp370_);
						_g_free0 (destroy_func);
						_g_free0 (dup_func);
						_g_free0 (type);
						_vala_code_node_unref0 (type_param);
					}
				}
				_vala_ccode_node_unref0 (data_var);
			}
		}
		_tmp374_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
		_tmp375_ = _tmp374_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp375_, VALA_TYPE_METHOD)) {
			ValaMethod* m = NULL;
			ValaSymbol* _tmp376_;
			ValaSymbol* _tmp377_;
			ValaMethod* _tmp378_;
			ValaMethod* _tmp410_;
			gboolean _tmp411_;
			gboolean _tmp412_;
			_tmp376_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
			_tmp377_ = _tmp376_;
			_tmp378_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp377_, VALA_TYPE_METHOD, ValaMethod));
			m = _tmp378_;
			{
				ValaList* _param_list = NULL;
				ValaMethod* _tmp379_;
				ValaList* _tmp380_;
				gint _param_size = 0;
				ValaList* _tmp381_;
				gint _tmp382_;
				gint _tmp383_;
				gint _param_index = 0;
				_tmp379_ = m;
				_tmp380_ = vala_callable_get_parameters ((ValaCallable*) _tmp379_);
				_param_list = _tmp380_;
				_tmp381_ = _param_list;
				_tmp382_ = vala_collection_get_size ((ValaCollection*) _tmp381_);
				_tmp383_ = _tmp382_;
				_param_size = _tmp383_;
				_param_index = -1;
				while (TRUE) {
					gint _tmp384_;
					gint _tmp385_;
					ValaParameter* param = NULL;
					ValaList* _tmp386_;
					gpointer _tmp387_;
					ValaParameter* _tmp388_;
					gboolean _tmp389_;
					gboolean _tmp390_;
					_param_index = _param_index + 1;
					_tmp384_ = _param_index;
					_tmp385_ = _param_size;
					if (!(_tmp384_ < _tmp385_)) {
						break;
					}
					_tmp386_ = _param_list;
					_tmp387_ = vala_list_get (_tmp386_, _param_index);
					param = (ValaParameter*) _tmp387_;
					_tmp388_ = param;
					_tmp389_ = vala_parameter_get_captured (_tmp388_);
					_tmp390_ = _tmp389_;
					if (_tmp390_) {
						ValaParameter* _tmp391_;
						ValaCCodeStruct* _tmp392_;
						ValaParameter* _tmp393_;
						ValaDataType* _tmp394_;
						ValaDataType* _tmp395_;
						ValaTypeSymbol* _tmp396_;
						ValaTypeSymbol* _tmp397_;
						ValaCodeContext* _tmp398_;
						ValaSemanticAnalyzer* _tmp399_;
						ValaSemanticAnalyzer* _tmp400_;
						ValaDataType* _tmp401_;
						ValaTypeSymbol* _tmp402_;
						ValaTypeSymbol* _tmp403_;
						_tmp391_ = param;
						_tmp392_ = data;
						vala_ccode_base_module_capture_parameter (self, _tmp391_, _tmp392_, block_id);
						_tmp393_ = param;
						_tmp394_ = vala_variable_get_variable_type ((ValaVariable*) _tmp393_);
						_tmp395_ = _tmp394_;
						_tmp396_ = vala_data_type_get_type_symbol (_tmp395_);
						_tmp397_ = _tmp396_;
						_tmp398_ = self->priv->_context;
						_tmp399_ = vala_code_context_get_analyzer (_tmp398_);
						_tmp400_ = _tmp399_;
						_tmp401_ = _tmp400_->va_list_type;
						_tmp402_ = vala_data_type_get_type_symbol (_tmp401_);
						_tmp403_ = _tmp402_;
						if (_tmp397_ == _tmp403_) {
							ValaParameter* _tmp404_;
							ValaSourceReference* _tmp405_;
							ValaSourceReference* _tmp406_;
							ValaParameter* _tmp407_;
							gchar* _tmp408_;
							gchar* _tmp409_;
							_tmp404_ = param;
							_tmp405_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp404_);
							_tmp406_ = _tmp405_;
							_tmp407_ = param;
							_tmp408_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp407_);
							_tmp409_ = _tmp408_;
							vala_report_error (_tmp406_, "internal: Capturing `va_list' parameter `%s' is not allowed", _tmp409_);
							_g_free0 (_tmp409_);
							vala_code_node_set_error ((ValaCodeNode*) b, TRUE);
						}
					}
					_vala_code_node_unref0 (param);
				}
			}
			_tmp410_ = m;
			_tmp411_ = vala_method_get_coroutine (_tmp410_);
			_tmp412_ = _tmp411_;
			if (_tmp412_) {
				ValaCCodeStruct* _tmp413_;
				ValaDataType* _tmp414_;
				gchar* _tmp415_;
				gchar* _tmp416_;
				ValaCCodeFunction* _tmp417_;
				ValaCCodeFunction* _tmp418_;
				gchar* _tmp419_;
				gchar* _tmp420_;
				ValaCCodeExpression* _tmp421_;
				ValaCCodeExpression* _tmp422_;
				ValaCCodeMemberAccess* _tmp423_;
				ValaCCodeMemberAccess* _tmp424_;
				ValaCCodeIdentifier* _tmp425_;
				ValaCCodeIdentifier* _tmp426_;
				_tmp413_ = data;
				_tmp414_ = self->pointer_type;
				_tmp415_ = vala_get_ccode_name ((ValaCodeNode*) _tmp414_);
				_tmp416_ = _tmp415_;
				vala_ccode_struct_add_field (_tmp413_, _tmp416_, "_async_data_", 0, NULL);
				_g_free0 (_tmp416_);
				_tmp417_ = vala_ccode_base_module_get_ccode (self);
				_tmp418_ = _tmp417_;
				_tmp419_ = g_strdup_printf ("_data%d_", block_id);
				_tmp420_ = _tmp419_;
				_tmp421_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp420_);
				_tmp422_ = _tmp421_;
				_tmp423_ = vala_ccode_member_access_new_pointer (_tmp422_, "_async_data_");
				_tmp424_ = _tmp423_;
				_tmp425_ = vala_ccode_identifier_new ("_data_");
				_tmp426_ = _tmp425_;
				vala_ccode_function_add_assignment (_tmp418_, (ValaCCodeExpression*) _tmp424_, (ValaCCodeExpression*) _tmp426_);
				_vala_ccode_node_unref0 (_tmp426_);
				_vala_ccode_node_unref0 (_tmp424_);
				_vala_ccode_node_unref0 (_tmp422_);
				_g_free0 (_tmp420_);
			}
			_vala_code_node_unref0 (m);
		} else {
			ValaSymbol* _tmp427_;
			ValaSymbol* _tmp428_;
			_tmp427_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
			_tmp428_ = _tmp427_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp428_, VALA_TYPE_PROPERTY_ACCESSOR)) {
				ValaPropertyAccessor* acc = NULL;
				ValaSymbol* _tmp429_;
				ValaSymbol* _tmp430_;
				ValaPropertyAccessor* _tmp431_;
				gboolean _tmp432_ = FALSE;
				ValaPropertyAccessor* _tmp433_;
				gboolean _tmp434_;
				gboolean _tmp435_;
				_tmp429_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
				_tmp430_ = _tmp429_;
				_tmp431_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp430_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
				acc = _tmp431_;
				_tmp433_ = acc;
				_tmp434_ = vala_property_accessor_get_readable (_tmp433_);
				_tmp435_ = _tmp434_;
				if (!_tmp435_) {
					ValaPropertyAccessor* _tmp436_;
					ValaParameter* _tmp437_;
					ValaParameter* _tmp438_;
					gboolean _tmp439_;
					gboolean _tmp440_;
					_tmp436_ = acc;
					_tmp437_ = vala_property_accessor_get_value_parameter (_tmp436_);
					_tmp438_ = _tmp437_;
					_tmp439_ = vala_parameter_get_captured (_tmp438_);
					_tmp440_ = _tmp439_;
					_tmp432_ = _tmp440_;
				} else {
					_tmp432_ = FALSE;
				}
				if (_tmp432_) {
					ValaPropertyAccessor* _tmp441_;
					ValaParameter* _tmp442_;
					ValaParameter* _tmp443_;
					ValaCCodeStruct* _tmp444_;
					_tmp441_ = acc;
					_tmp442_ = vala_property_accessor_get_value_parameter (_tmp441_);
					_tmp443_ = _tmp442_;
					_tmp444_ = data;
					vala_ccode_base_module_capture_parameter (self, _tmp443_, _tmp444_, block_id);
				}
				_vala_code_node_unref0 (acc);
			} else {
				ValaSymbol* _tmp445_;
				ValaSymbol* _tmp446_;
				_tmp445_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
				_tmp446_ = _tmp445_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp446_, VALA_TYPE_FOREACH_STATEMENT)) {
					ValaForeachStatement* stmt = NULL;
					ValaSymbol* _tmp447_;
					ValaSymbol* _tmp448_;
					ValaForeachStatement* _tmp449_;
					gboolean _tmp450_ = FALSE;
					ValaForeachStatement* _tmp451_;
					gboolean _tmp452_;
					gboolean _tmp453_;
					_tmp447_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
					_tmp448_ = _tmp447_;
					_tmp449_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp448_, VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatement));
					stmt = _tmp449_;
					_tmp451_ = stmt;
					_tmp452_ = vala_foreach_statement_get_use_iterator (_tmp451_);
					_tmp453_ = _tmp452_;
					if (!_tmp453_) {
						ValaForeachStatement* _tmp454_;
						ValaLocalVariable* _tmp455_;
						ValaLocalVariable* _tmp456_;
						gboolean _tmp457_;
						gboolean _tmp458_;
						_tmp454_ = stmt;
						_tmp455_ = vala_foreach_statement_get_element_variable (_tmp454_);
						_tmp456_ = _tmp455_;
						_tmp457_ = vala_local_variable_get_captured (_tmp456_);
						_tmp458_ = _tmp457_;
						_tmp450_ = _tmp458_;
					} else {
						_tmp450_ = FALSE;
					}
					if (_tmp450_) {
						ValaCCodeFunction* _tmp459_;
						ValaCCodeFunction* _tmp460_;
						gchar* _tmp461_;
						gchar* _tmp462_;
						ValaCCodeExpression* _tmp463_;
						ValaCCodeExpression* _tmp464_;
						ValaForeachStatement* _tmp465_;
						ValaLocalVariable* _tmp466_;
						ValaLocalVariable* _tmp467_;
						gchar* _tmp468_;
						gchar* _tmp469_;
						ValaCCodeMemberAccess* _tmp470_;
						ValaCCodeMemberAccess* _tmp471_;
						ValaForeachStatement* _tmp472_;
						ValaLocalVariable* _tmp473_;
						ValaLocalVariable* _tmp474_;
						gchar* _tmp475_;
						gchar* _tmp476_;
						ValaCCodeExpression* _tmp477_;
						ValaCCodeExpression* _tmp478_;
						_tmp459_ = vala_ccode_base_module_get_ccode (self);
						_tmp460_ = _tmp459_;
						_tmp461_ = g_strdup_printf ("_data%d_", block_id);
						_tmp462_ = _tmp461_;
						_tmp463_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp462_);
						_tmp464_ = _tmp463_;
						_tmp465_ = stmt;
						_tmp466_ = vala_foreach_statement_get_element_variable (_tmp465_);
						_tmp467_ = _tmp466_;
						_tmp468_ = vala_ccode_base_module_get_local_cname (self, _tmp467_);
						_tmp469_ = _tmp468_;
						_tmp470_ = vala_ccode_member_access_new_pointer (_tmp464_, _tmp469_);
						_tmp471_ = _tmp470_;
						_tmp472_ = stmt;
						_tmp473_ = vala_foreach_statement_get_element_variable (_tmp472_);
						_tmp474_ = _tmp473_;
						_tmp475_ = vala_ccode_base_module_get_local_cname (self, _tmp474_);
						_tmp476_ = _tmp475_;
						_tmp477_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp476_);
						_tmp478_ = _tmp477_;
						vala_ccode_function_add_assignment (_tmp460_, (ValaCCodeExpression*) _tmp471_, _tmp478_);
						_vala_ccode_node_unref0 (_tmp478_);
						_g_free0 (_tmp476_);
						_vala_ccode_node_unref0 (_tmp471_);
						_g_free0 (_tmp469_);
						_vala_ccode_node_unref0 (_tmp464_);
						_g_free0 (_tmp462_);
					}
					_vala_code_node_unref0 (stmt);
				}
			}
		}
		_tmp479_ = struct_name;
		_tmp480_ = g_strconcat ("struct _", _tmp479_, NULL);
		_tmp481_ = _tmp480_;
		_tmp482_ = struct_name;
		_tmp483_ = vala_ccode_variable_declarator_new (_tmp482_, NULL, NULL);
		_tmp484_ = _tmp483_;
		_tmp485_ = vala_ccode_type_definition_new (_tmp481_, (ValaCCodeDeclarator*) _tmp484_);
		_tmp486_ = _tmp485_;
		_vala_ccode_node_unref0 (_tmp484_);
		_g_free0 (_tmp481_);
		_typedef_ = _tmp486_;
		_tmp487_ = self->cfile;
		_tmp488_ = _typedef_;
		vala_ccode_file_add_type_declaration (_tmp487_, (ValaCCodeNode*) _tmp488_);
		_tmp489_ = self->cfile;
		_tmp490_ = data;
		vala_ccode_file_add_type_definition (_tmp489_, (ValaCCodeNode*) _tmp490_);
		_tmp491_ = g_strdup_printf ("block%d_data_ref", block_id);
		_tmp492_ = _tmp491_;
		_tmp493_ = struct_name;
		_tmp494_ = g_strconcat (_tmp493_, "*", NULL);
		_tmp495_ = _tmp494_;
		_tmp496_ = vala_ccode_function_new (_tmp492_, _tmp495_);
		_tmp497_ = _tmp496_;
		_g_free0 (_tmp495_);
		_g_free0 (_tmp492_);
		ref_fun = _tmp497_;
		_tmp498_ = ref_fun;
		_tmp499_ = g_strdup_printf ("_data%d_", block_id);
		_tmp500_ = _tmp499_;
		_tmp501_ = struct_name;
		_tmp502_ = g_strconcat (_tmp501_, "*", NULL);
		_tmp503_ = _tmp502_;
		_tmp504_ = vala_ccode_parameter_new (_tmp500_, _tmp503_);
		_tmp505_ = _tmp504_;
		vala_ccode_function_add_parameter (_tmp498_, _tmp505_);
		_vala_ccode_node_unref0 (_tmp505_);
		_g_free0 (_tmp503_);
		_g_free0 (_tmp500_);
		_tmp506_ = ref_fun;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp506_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp507_ = ref_fun;
		vala_ccode_base_module_push_function (self, _tmp507_);
		_tmp508_ = vala_ccode_identifier_new ("g_atomic_int_inc");
		_tmp509_ = _tmp508_;
		_tmp510_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp509_);
		_tmp511_ = _tmp510_;
		_vala_ccode_node_unref0 (_tmp509_);
		ccall = _tmp511_;
		_tmp512_ = ccall;
		_tmp513_ = g_strdup_printf ("_data%d_", block_id);
		_tmp514_ = _tmp513_;
		_tmp515_ = vala_ccode_identifier_new (_tmp514_);
		_tmp516_ = _tmp515_;
		_tmp517_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp516_, "_ref_count_");
		_tmp518_ = _tmp517_;
		_tmp519_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp518_);
		_tmp520_ = _tmp519_;
		vala_ccode_function_call_add_argument (_tmp512_, (ValaCCodeExpression*) _tmp520_);
		_vala_ccode_node_unref0 (_tmp520_);
		_vala_ccode_node_unref0 (_tmp518_);
		_vala_ccode_node_unref0 (_tmp516_);
		_g_free0 (_tmp514_);
		_tmp521_ = vala_ccode_base_module_get_ccode (self);
		_tmp522_ = _tmp521_;
		_tmp523_ = ccall;
		vala_ccode_function_add_expression (_tmp522_, (ValaCCodeExpression*) _tmp523_);
		_tmp524_ = vala_ccode_base_module_get_ccode (self);
		_tmp525_ = _tmp524_;
		_tmp526_ = g_strdup_printf ("_data%d_", block_id);
		_tmp527_ = _tmp526_;
		_tmp528_ = vala_ccode_identifier_new (_tmp527_);
		_tmp529_ = _tmp528_;
		vala_ccode_function_add_return (_tmp525_, (ValaCCodeExpression*) _tmp529_);
		_vala_ccode_node_unref0 (_tmp529_);
		_g_free0 (_tmp527_);
		vala_ccode_base_module_pop_function (self);
		_tmp530_ = self->cfile;
		_tmp531_ = ref_fun;
		vala_ccode_file_add_function_declaration (_tmp530_, _tmp531_);
		_tmp532_ = self->cfile;
		_tmp533_ = ref_fun;
		vala_ccode_file_add_function (_tmp532_, _tmp533_);
		_tmp534_ = g_strdup_printf ("block%d_data_unref", block_id);
		_tmp535_ = _tmp534_;
		_tmp536_ = vala_ccode_function_new (_tmp535_, "void");
		_tmp537_ = _tmp536_;
		_g_free0 (_tmp535_);
		unref_fun = _tmp537_;
		_tmp538_ = unref_fun;
		_tmp539_ = vala_ccode_parameter_new ("_userdata_", "void *");
		_tmp540_ = _tmp539_;
		vala_ccode_function_add_parameter (_tmp538_, _tmp540_);
		_vala_ccode_node_unref0 (_tmp540_);
		_tmp541_ = unref_fun;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp541_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp542_ = unref_fun;
		vala_ccode_base_module_push_function (self, _tmp542_);
		_tmp543_ = vala_ccode_base_module_get_ccode (self);
		_tmp544_ = _tmp543_;
		_tmp545_ = struct_name;
		_tmp546_ = g_strconcat (_tmp545_, "*", NULL);
		_tmp547_ = _tmp546_;
		_tmp548_ = g_strdup_printf ("_data%d_", block_id);
		_tmp549_ = _tmp548_;
		_tmp550_ = vala_ccode_identifier_new ("_userdata_");
		_tmp551_ = _tmp550_;
		_tmp552_ = struct_name;
		_tmp553_ = g_strconcat (_tmp552_, "*", NULL);
		_tmp554_ = _tmp553_;
		_tmp555_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp551_, _tmp554_);
		_tmp556_ = _tmp555_;
		_tmp557_ = vala_ccode_variable_declarator_new (_tmp549_, (ValaCCodeExpression*) _tmp556_, NULL);
		_tmp558_ = _tmp557_;
		vala_ccode_function_add_declaration (_tmp544_, _tmp547_, (ValaCCodeDeclarator*) _tmp558_, 0);
		_vala_ccode_node_unref0 (_tmp558_);
		_vala_ccode_node_unref0 (_tmp556_);
		_g_free0 (_tmp554_);
		_vala_ccode_node_unref0 (_tmp551_);
		_g_free0 (_tmp549_);
		_g_free0 (_tmp547_);
		_tmp559_ = vala_ccode_identifier_new ("g_atomic_int_dec_and_test");
		_tmp560_ = _tmp559_;
		_tmp561_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp560_);
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp561_;
		_vala_ccode_node_unref0 (_tmp560_);
		_tmp562_ = ccall;
		_tmp563_ = g_strdup_printf ("_data%d_", block_id);
		_tmp564_ = _tmp563_;
		_tmp565_ = vala_ccode_identifier_new (_tmp564_);
		_tmp566_ = _tmp565_;
		_tmp567_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp566_, "_ref_count_");
		_tmp568_ = _tmp567_;
		_tmp569_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp568_);
		_tmp570_ = _tmp569_;
		vala_ccode_function_call_add_argument (_tmp562_, (ValaCCodeExpression*) _tmp570_);
		_vala_ccode_node_unref0 (_tmp570_);
		_vala_ccode_node_unref0 (_tmp568_);
		_vala_ccode_node_unref0 (_tmp566_);
		_g_free0 (_tmp564_);
		_tmp571_ = vala_ccode_base_module_get_ccode (self);
		_tmp572_ = _tmp571_;
		_tmp573_ = ccall;
		vala_ccode_function_open_if (_tmp572_, (ValaCCodeExpression*) _tmp573_);
		_tmp574_ = g_strdup_printf ("_data%d_", block_id);
		_tmp575_ = _tmp574_;
		_tmp576_ = vala_ccode_identifier_new (_tmp575_);
		_tmp577_ = (ValaCCodeExpression*) _tmp576_;
		_g_free0 (_tmp575_);
		outer_block = _tmp577_;
		parent_closure_block = b;
		while (TRUE) {
			ValaBlock* _tmp578_;
			ValaSymbol* _tmp579_;
			ValaSymbol* _tmp580_;
			ValaBlock* _tmp581_;
			ValaBlock* _tmp582_;
			gint parent_block_id = 0;
			ValaBlock* _tmp583_;
			ValaCCodeExpression* _tmp584_;
			gchar* _tmp585_;
			gchar* _tmp586_;
			ValaCCodeMemberAccess* _tmp587_;
			_tmp578_ = parent_closure_block;
			_tmp579_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp578_);
			_tmp580_ = _tmp579_;
			_tmp581_ = vala_ccode_base_module_next_closure_block (self, _tmp580_);
			parent_closure_block = _tmp581_;
			_tmp582_ = parent_closure_block;
			if (_tmp582_ == NULL) {
				break;
			}
			_tmp583_ = parent_closure_block;
			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp583_);
			_tmp584_ = outer_block;
			_tmp585_ = g_strdup_printf ("_data%d_", parent_block_id);
			_tmp586_ = _tmp585_;
			_tmp587_ = vala_ccode_member_access_new_pointer (_tmp584_, _tmp586_);
			_vala_ccode_node_unref0 (outer_block);
			outer_block = (ValaCCodeExpression*) _tmp587_;
			_g_free0 (_tmp586_);
		}
		_tmp588_ = vala_ccode_base_module_get_this_type (self);
		_tmp589_ = _vala_code_node_ref0 (_tmp588_);
		this_type = _tmp589_;
		_tmp590_ = this_type;
		if (_tmp590_ != NULL) {
			ValaCCodeFunction* _tmp591_;
			ValaCCodeFunction* _tmp592_;
			ValaDataType* _tmp593_;
			gchar* _tmp594_;
			gchar* _tmp595_;
			ValaCCodeVariableDeclarator* _tmp596_;
			ValaCCodeVariableDeclarator* _tmp597_;
			ValaCCodeFunction* _tmp598_;
			ValaCCodeFunction* _tmp599_;
			ValaCCodeIdentifier* _tmp600_;
			ValaCCodeIdentifier* _tmp601_;
			ValaCCodeExpression* _tmp602_;
			ValaCCodeMemberAccess* _tmp603_;
			ValaCCodeMemberAccess* _tmp604_;
			_tmp591_ = vala_ccode_base_module_get_ccode (self);
			_tmp592_ = _tmp591_;
			_tmp593_ = this_type;
			_tmp594_ = vala_get_ccode_name ((ValaCodeNode*) _tmp593_);
			_tmp595_ = _tmp594_;
			_tmp596_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
			_tmp597_ = _tmp596_;
			vala_ccode_function_add_declaration (_tmp592_, _tmp595_, (ValaCCodeDeclarator*) _tmp597_, 0);
			_vala_ccode_node_unref0 (_tmp597_);
			_g_free0 (_tmp595_);
			_tmp598_ = vala_ccode_base_module_get_ccode (self);
			_tmp599_ = _tmp598_;
			_tmp600_ = vala_ccode_identifier_new ("self");
			_tmp601_ = _tmp600_;
			_tmp602_ = outer_block;
			_tmp603_ = vala_ccode_member_access_new_pointer (_tmp602_, "self");
			_tmp604_ = _tmp603_;
			vala_ccode_function_add_assignment (_tmp599_, (ValaCCodeExpression*) _tmp601_, (ValaCCodeExpression*) _tmp604_);
			_vala_ccode_node_unref0 (_tmp604_);
			_vala_ccode_node_unref0 (_tmp601_);
		}
		_tmp605_ = vala_ccode_base_module_get_current_method (self);
		_tmp606_ = _tmp605_;
		if (_tmp606_ != NULL) {
			{
				ValaList* _type_param_list = NULL;
				ValaMethod* _tmp607_;
				ValaMethod* _tmp608_;
				ValaList* _tmp609_;
				gint _type_param_size = 0;
				ValaList* _tmp610_;
				gint _tmp611_;
				gint _tmp612_;
				gint _type_param_index = 0;
				_tmp607_ = vala_ccode_base_module_get_current_method (self);
				_tmp608_ = _tmp607_;
				_tmp609_ = vala_method_get_type_parameters (_tmp608_);
				_type_param_list = _tmp609_;
				_tmp610_ = _type_param_list;
				_tmp611_ = vala_collection_get_size ((ValaCollection*) _tmp610_);
				_tmp612_ = _tmp611_;
				_type_param_size = _tmp612_;
				_type_param_index = -1;
				while (TRUE) {
					gint _tmp613_;
					gint _tmp614_;
					ValaTypeParameter* type_param = NULL;
					ValaList* _tmp615_;
					gpointer _tmp616_;
					gchar* type = NULL;
					ValaTypeParameter* _tmp617_;
					gchar* _tmp618_;
					gchar* dup_func = NULL;
					ValaTypeParameter* _tmp619_;
					gchar* _tmp620_;
					gchar* destroy_func = NULL;
					ValaTypeParameter* _tmp621_;
					gchar* _tmp622_;
					ValaCCodeFunction* _tmp623_;
					ValaCCodeFunction* _tmp624_;
					const gchar* _tmp625_;
					ValaCCodeVariableDeclarator* _tmp626_;
					ValaCCodeVariableDeclarator* _tmp627_;
					ValaCCodeFunction* _tmp628_;
					ValaCCodeFunction* _tmp629_;
					const gchar* _tmp630_;
					ValaCCodeVariableDeclarator* _tmp631_;
					ValaCCodeVariableDeclarator* _tmp632_;
					ValaCCodeFunction* _tmp633_;
					ValaCCodeFunction* _tmp634_;
					const gchar* _tmp635_;
					ValaCCodeVariableDeclarator* _tmp636_;
					ValaCCodeVariableDeclarator* _tmp637_;
					ValaCCodeFunction* _tmp638_;
					ValaCCodeFunction* _tmp639_;
					const gchar* _tmp640_;
					ValaCCodeIdentifier* _tmp641_;
					ValaCCodeIdentifier* _tmp642_;
					ValaCCodeExpression* _tmp643_;
					const gchar* _tmp644_;
					ValaCCodeMemberAccess* _tmp645_;
					ValaCCodeMemberAccess* _tmp646_;
					ValaCCodeFunction* _tmp647_;
					ValaCCodeFunction* _tmp648_;
					const gchar* _tmp649_;
					ValaCCodeIdentifier* _tmp650_;
					ValaCCodeIdentifier* _tmp651_;
					ValaCCodeExpression* _tmp652_;
					const gchar* _tmp653_;
					ValaCCodeMemberAccess* _tmp654_;
					ValaCCodeMemberAccess* _tmp655_;
					ValaCCodeFunction* _tmp656_;
					ValaCCodeFunction* _tmp657_;
					const gchar* _tmp658_;
					ValaCCodeIdentifier* _tmp659_;
					ValaCCodeIdentifier* _tmp660_;
					ValaCCodeExpression* _tmp661_;
					const gchar* _tmp662_;
					ValaCCodeMemberAccess* _tmp663_;
					ValaCCodeMemberAccess* _tmp664_;
					_type_param_index = _type_param_index + 1;
					_tmp613_ = _type_param_index;
					_tmp614_ = _type_param_size;
					if (!(_tmp613_ < _tmp614_)) {
						break;
					}
					_tmp615_ = _type_param_list;
					_tmp616_ = vala_list_get (_tmp615_, _type_param_index);
					type_param = (ValaTypeParameter*) _tmp616_;
					_tmp617_ = type_param;
					_tmp618_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp617_);
					type = _tmp618_;
					_tmp619_ = type_param;
					_tmp620_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp619_);
					dup_func = _tmp620_;
					_tmp621_ = type_param;
					_tmp622_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp621_);
					destroy_func = _tmp622_;
					_tmp623_ = vala_ccode_base_module_get_ccode (self);
					_tmp624_ = _tmp623_;
					_tmp625_ = type;
					_tmp626_ = vala_ccode_variable_declarator_new (_tmp625_, NULL, NULL);
					_tmp627_ = _tmp626_;
					vala_ccode_function_add_declaration (_tmp624_, "GType", (ValaCCodeDeclarator*) _tmp627_, 0);
					_vala_ccode_node_unref0 (_tmp627_);
					_tmp628_ = vala_ccode_base_module_get_ccode (self);
					_tmp629_ = _tmp628_;
					_tmp630_ = dup_func;
					_tmp631_ = vala_ccode_variable_declarator_new (_tmp630_, NULL, NULL);
					_tmp632_ = _tmp631_;
					vala_ccode_function_add_declaration (_tmp629_, "GBoxedCopyFunc", (ValaCCodeDeclarator*) _tmp632_, 0);
					_vala_ccode_node_unref0 (_tmp632_);
					_tmp633_ = vala_ccode_base_module_get_ccode (self);
					_tmp634_ = _tmp633_;
					_tmp635_ = destroy_func;
					_tmp636_ = vala_ccode_variable_declarator_new (_tmp635_, NULL, NULL);
					_tmp637_ = _tmp636_;
					vala_ccode_function_add_declaration (_tmp634_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp637_, 0);
					_vala_ccode_node_unref0 (_tmp637_);
					_tmp638_ = vala_ccode_base_module_get_ccode (self);
					_tmp639_ = _tmp638_;
					_tmp640_ = type;
					_tmp641_ = vala_ccode_identifier_new (_tmp640_);
					_tmp642_ = _tmp641_;
					_tmp643_ = outer_block;
					_tmp644_ = type;
					_tmp645_ = vala_ccode_member_access_new_pointer (_tmp643_, _tmp644_);
					_tmp646_ = _tmp645_;
					vala_ccode_function_add_assignment (_tmp639_, (ValaCCodeExpression*) _tmp642_, (ValaCCodeExpression*) _tmp646_);
					_vala_ccode_node_unref0 (_tmp646_);
					_vala_ccode_node_unref0 (_tmp642_);
					_tmp647_ = vala_ccode_base_module_get_ccode (self);
					_tmp648_ = _tmp647_;
					_tmp649_ = dup_func;
					_tmp650_ = vala_ccode_identifier_new (_tmp649_);
					_tmp651_ = _tmp650_;
					_tmp652_ = outer_block;
					_tmp653_ = dup_func;
					_tmp654_ = vala_ccode_member_access_new_pointer (_tmp652_, _tmp653_);
					_tmp655_ = _tmp654_;
					vala_ccode_function_add_assignment (_tmp648_, (ValaCCodeExpression*) _tmp651_, (ValaCCodeExpression*) _tmp655_);
					_vala_ccode_node_unref0 (_tmp655_);
					_vala_ccode_node_unref0 (_tmp651_);
					_tmp656_ = vala_ccode_base_module_get_ccode (self);
					_tmp657_ = _tmp656_;
					_tmp658_ = destroy_func;
					_tmp659_ = vala_ccode_identifier_new (_tmp658_);
					_tmp660_ = _tmp659_;
					_tmp661_ = outer_block;
					_tmp662_ = destroy_func;
					_tmp663_ = vala_ccode_member_access_new_pointer (_tmp661_, _tmp662_);
					_tmp664_ = _tmp663_;
					vala_ccode_function_add_assignment (_tmp657_, (ValaCCodeExpression*) _tmp660_, (ValaCCodeExpression*) _tmp664_);
					_vala_ccode_node_unref0 (_tmp664_);
					_vala_ccode_node_unref0 (_tmp660_);
					_g_free0 (destroy_func);
					_g_free0 (dup_func);
					_g_free0 (type);
					_vala_code_node_unref0 (type_param);
				}
			}
		}
		{
			gint i = 0;
			ValaList* _tmp665_;
			gint _tmp666_;
			gint _tmp667_;
			_tmp665_ = local_vars;
			_tmp666_ = vala_collection_get_size ((ValaCollection*) _tmp665_);
			_tmp667_ = _tmp666_;
			i = _tmp667_ - 1;
			{
				gboolean _tmp668_ = FALSE;
				_tmp668_ = TRUE;
				while (TRUE) {
					ValaLocalVariable* local = NULL;
					ValaList* _tmp670_;
					gpointer _tmp671_;
					ValaLocalVariable* _tmp672_;
					gboolean _tmp673_;
					gboolean _tmp674_;
					if (!_tmp668_) {
						gint _tmp669_;
						_tmp669_ = i;
						i = _tmp669_ - 1;
					}
					_tmp668_ = FALSE;
					if (!(i >= 0)) {
						break;
					}
					_tmp670_ = local_vars;
					_tmp671_ = vala_list_get (_tmp670_, i);
					local = (ValaLocalVariable*) _tmp671_;
					_tmp672_ = local;
					_tmp673_ = vala_local_variable_get_captured (_tmp672_);
					_tmp674_ = _tmp673_;
					if (_tmp674_) {
						ValaLocalVariable* _tmp675_;
						ValaDataType* _tmp676_;
						ValaDataType* _tmp677_;
						_tmp675_ = local;
						_tmp676_ = vala_variable_get_variable_type ((ValaVariable*) _tmp675_);
						_tmp677_ = _tmp676_;
						if (vala_ccode_base_module_requires_destroy (_tmp677_)) {
							gboolean old_coroutine = FALSE;
							ValaMethod* _tmp678_;
							ValaMethod* _tmp679_;
							ValaCCodeFunction* _tmp686_;
							ValaCCodeFunction* _tmp687_;
							ValaLocalVariable* _tmp688_;
							ValaCCodeExpression* _tmp689_;
							ValaCCodeExpression* _tmp690_;
							old_coroutine = FALSE;
							_tmp678_ = vala_ccode_base_module_get_current_method (self);
							_tmp679_ = _tmp678_;
							if (_tmp679_ != NULL) {
								ValaMethod* _tmp680_;
								ValaMethod* _tmp681_;
								gboolean _tmp682_;
								gboolean _tmp683_;
								ValaMethod* _tmp684_;
								ValaMethod* _tmp685_;
								_tmp680_ = vala_ccode_base_module_get_current_method (self);
								_tmp681_ = _tmp680_;
								_tmp682_ = vala_method_get_coroutine (_tmp681_);
								_tmp683_ = _tmp682_;
								old_coroutine = _tmp683_;
								_tmp684_ = vala_ccode_base_module_get_current_method (self);
								_tmp685_ = _tmp684_;
								vala_method_set_coroutine (_tmp685_, FALSE);
							}
							_tmp686_ = vala_ccode_base_module_get_ccode (self);
							_tmp687_ = _tmp686_;
							_tmp688_ = local;
							_tmp689_ = vala_ccode_base_module_destroy_local (self, _tmp688_);
							_tmp690_ = _tmp689_;
							vala_ccode_function_add_expression (_tmp687_, _tmp690_);
							_vala_ccode_node_unref0 (_tmp690_);
							if (old_coroutine) {
								ValaMethod* _tmp691_;
								ValaMethod* _tmp692_;
								_tmp691_ = vala_ccode_base_module_get_current_method (self);
								_tmp692_ = _tmp691_;
								vala_method_set_coroutine (_tmp692_, TRUE);
							}
						}
					}
					_vala_code_node_unref0 (local);
				}
			}
		}
		_tmp693_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
		_tmp694_ = _tmp693_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp694_, VALA_TYPE_METHOD)) {
			ValaMethod* m = NULL;
			ValaSymbol* _tmp695_;
			ValaSymbol* _tmp696_;
			ValaMethod* _tmp697_;
			_tmp695_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
			_tmp696_ = _tmp695_;
			_tmp697_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp696_, VALA_TYPE_METHOD, ValaMethod));
			m = _tmp697_;
			{
				ValaList* _param_list = NULL;
				ValaMethod* _tmp698_;
				ValaList* _tmp699_;
				gint _param_size = 0;
				ValaList* _tmp700_;
				gint _tmp701_;
				gint _tmp702_;
				gint _param_index = 0;
				_tmp698_ = m;
				_tmp699_ = vala_callable_get_parameters ((ValaCallable*) _tmp698_);
				_param_list = _tmp699_;
				_tmp700_ = _param_list;
				_tmp701_ = vala_collection_get_size ((ValaCollection*) _tmp700_);
				_tmp702_ = _tmp701_;
				_param_size = _tmp702_;
				_param_index = -1;
				while (TRUE) {
					gint _tmp703_;
					gint _tmp704_;
					ValaParameter* param = NULL;
					ValaList* _tmp705_;
					gpointer _tmp706_;
					ValaParameter* _tmp707_;
					gboolean _tmp708_;
					gboolean _tmp709_;
					_param_index = _param_index + 1;
					_tmp703_ = _param_index;
					_tmp704_ = _param_size;
					if (!(_tmp703_ < _tmp704_)) {
						break;
					}
					_tmp705_ = _param_list;
					_tmp706_ = vala_list_get (_tmp705_, _param_index);
					param = (ValaParameter*) _tmp706_;
					_tmp707_ = param;
					_tmp708_ = vala_parameter_get_captured (_tmp707_);
					_tmp709_ = _tmp708_;
					if (_tmp709_) {
						ValaDataType* param_type = NULL;
						ValaParameter* _tmp710_;
						ValaDataType* _tmp711_;
						ValaDataType* _tmp712_;
						ValaDataType* _tmp713_;
						ValaDataType* _tmp714_;
						gboolean _tmp715_;
						gboolean _tmp716_;
						ValaDataType* _tmp719_;
						_tmp710_ = param;
						_tmp711_ = vala_variable_get_variable_type ((ValaVariable*) _tmp710_);
						_tmp712_ = _tmp711_;
						_tmp713_ = vala_data_type_copy (_tmp712_);
						param_type = _tmp713_;
						_tmp714_ = param_type;
						_tmp715_ = vala_data_type_get_value_owned (_tmp714_);
						_tmp716_ = _tmp715_;
						if (!_tmp716_) {
							ValaDataType* _tmp717_;
							ValaDataType* _tmp718_;
							_tmp717_ = param_type;
							_tmp718_ = param_type;
							vala_data_type_set_value_owned (_tmp717_, !vala_ccode_base_module_no_implicit_copy (self, _tmp718_));
						}
						_tmp719_ = param_type;
						if (vala_ccode_base_module_requires_destroy (_tmp719_)) {
							gboolean old_coroutine = FALSE;
							ValaMethod* _tmp720_;
							ValaCCodeFunction* _tmp725_;
							ValaCCodeFunction* _tmp726_;
							ValaParameter* _tmp727_;
							ValaCCodeExpression* _tmp728_;
							ValaCCodeExpression* _tmp729_;
							old_coroutine = FALSE;
							_tmp720_ = m;
							if (_tmp720_ != NULL) {
								ValaMethod* _tmp721_;
								gboolean _tmp722_;
								gboolean _tmp723_;
								ValaMethod* _tmp724_;
								_tmp721_ = m;
								_tmp722_ = vala_method_get_coroutine (_tmp721_);
								_tmp723_ = _tmp722_;
								old_coroutine = _tmp723_;
								_tmp724_ = m;
								vala_method_set_coroutine (_tmp724_, FALSE);
							}
							_tmp725_ = vala_ccode_base_module_get_ccode (self);
							_tmp726_ = _tmp725_;
							_tmp727_ = param;
							_tmp728_ = vala_ccode_base_module_destroy_parameter (self, _tmp727_);
							_tmp729_ = _tmp728_;
							vala_ccode_function_add_expression (_tmp726_, _tmp729_);
							_vala_ccode_node_unref0 (_tmp729_);
							if (old_coroutine) {
								ValaMethod* _tmp730_;
								_tmp730_ = m;
								vala_method_set_coroutine (_tmp730_, TRUE);
							}
						}
						_vala_code_node_unref0 (param_type);
					}
					_vala_code_node_unref0 (param);
				}
			}
			_vala_code_node_unref0 (m);
		} else {
			ValaSymbol* _tmp731_;
			ValaSymbol* _tmp732_;
			_tmp731_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
			_tmp732_ = _tmp731_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp732_, VALA_TYPE_PROPERTY_ACCESSOR)) {
				ValaPropertyAccessor* acc = NULL;
				ValaSymbol* _tmp733_;
				ValaSymbol* _tmp734_;
				ValaPropertyAccessor* _tmp735_;
				gboolean _tmp736_ = FALSE;
				ValaPropertyAccessor* _tmp737_;
				gboolean _tmp738_;
				gboolean _tmp739_;
				_tmp733_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
				_tmp734_ = _tmp733_;
				_tmp735_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp734_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
				acc = _tmp735_;
				_tmp737_ = acc;
				_tmp738_ = vala_property_accessor_get_readable (_tmp737_);
				_tmp739_ = _tmp738_;
				if (!_tmp739_) {
					ValaPropertyAccessor* _tmp740_;
					ValaParameter* _tmp741_;
					ValaParameter* _tmp742_;
					gboolean _tmp743_;
					gboolean _tmp744_;
					_tmp740_ = acc;
					_tmp741_ = vala_property_accessor_get_value_parameter (_tmp740_);
					_tmp742_ = _tmp741_;
					_tmp743_ = vala_parameter_get_captured (_tmp742_);
					_tmp744_ = _tmp743_;
					_tmp736_ = _tmp744_;
				} else {
					_tmp736_ = FALSE;
				}
				if (_tmp736_) {
					ValaDataType* param_type = NULL;
					ValaPropertyAccessor* _tmp745_;
					ValaParameter* _tmp746_;
					ValaParameter* _tmp747_;
					ValaDataType* _tmp748_;
					ValaDataType* _tmp749_;
					ValaDataType* _tmp750_;
					ValaDataType* _tmp751_;
					gboolean _tmp752_;
					gboolean _tmp753_;
					ValaDataType* _tmp756_;
					_tmp745_ = acc;
					_tmp746_ = vala_property_accessor_get_value_parameter (_tmp745_);
					_tmp747_ = _tmp746_;
					_tmp748_ = vala_variable_get_variable_type ((ValaVariable*) _tmp747_);
					_tmp749_ = _tmp748_;
					_tmp750_ = vala_data_type_copy (_tmp749_);
					param_type = _tmp750_;
					_tmp751_ = param_type;
					_tmp752_ = vala_data_type_get_value_owned (_tmp751_);
					_tmp753_ = _tmp752_;
					if (!_tmp753_) {
						ValaDataType* _tmp754_;
						ValaDataType* _tmp755_;
						_tmp754_ = param_type;
						_tmp755_ = param_type;
						vala_data_type_set_value_owned (_tmp754_, !vala_ccode_base_module_no_implicit_copy (self, _tmp755_));
					}
					_tmp756_ = param_type;
					if (vala_ccode_base_module_requires_destroy (_tmp756_)) {
						ValaCCodeFunction* _tmp757_;
						ValaCCodeFunction* _tmp758_;
						ValaPropertyAccessor* _tmp759_;
						ValaParameter* _tmp760_;
						ValaParameter* _tmp761_;
						ValaCCodeExpression* _tmp762_;
						ValaCCodeExpression* _tmp763_;
						_tmp757_ = vala_ccode_base_module_get_ccode (self);
						_tmp758_ = _tmp757_;
						_tmp759_ = acc;
						_tmp760_ = vala_property_accessor_get_value_parameter (_tmp759_);
						_tmp761_ = _tmp760_;
						_tmp762_ = vala_ccode_base_module_destroy_parameter (self, _tmp761_);
						_tmp763_ = _tmp762_;
						vala_ccode_function_add_expression (_tmp758_, _tmp763_);
						_vala_ccode_node_unref0 (_tmp763_);
					}
					_vala_code_node_unref0 (param_type);
				}
				_vala_code_node_unref0 (acc);
			}
		}
		_tmp764_ = parent_block;
		if (_tmp764_ != NULL) {
			gint parent_block_id = 0;
			ValaBlock* _tmp765_;
			ValaCCodeFunctionCall* unref_call = NULL;
			gchar* _tmp766_;
			gchar* _tmp767_;
			ValaCCodeIdentifier* _tmp768_;
			ValaCCodeIdentifier* _tmp769_;
			ValaCCodeFunctionCall* _tmp770_;
			ValaCCodeFunctionCall* _tmp771_;
			ValaCCodeFunctionCall* _tmp772_;
			gchar* _tmp773_;
			gchar* _tmp774_;
			ValaCCodeIdentifier* _tmp775_;
			ValaCCodeIdentifier* _tmp776_;
			gchar* _tmp777_;
			gchar* _tmp778_;
			ValaCCodeMemberAccess* _tmp779_;
			ValaCCodeMemberAccess* _tmp780_;
			ValaCCodeFunction* _tmp781_;
			ValaCCodeFunction* _tmp782_;
			ValaCCodeFunctionCall* _tmp783_;
			ValaCCodeFunction* _tmp784_;
			ValaCCodeFunction* _tmp785_;
			gchar* _tmp786_;
			gchar* _tmp787_;
			ValaCCodeIdentifier* _tmp788_;
			ValaCCodeIdentifier* _tmp789_;
			gchar* _tmp790_;
			gchar* _tmp791_;
			ValaCCodeMemberAccess* _tmp792_;
			ValaCCodeMemberAccess* _tmp793_;
			ValaCCodeConstant* _tmp794_;
			ValaCCodeConstant* _tmp795_;
			_tmp765_ = parent_block;
			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp765_);
			_tmp766_ = g_strdup_printf ("block%d_data_unref", parent_block_id);
			_tmp767_ = _tmp766_;
			_tmp768_ = vala_ccode_identifier_new (_tmp767_);
			_tmp769_ = _tmp768_;
			_tmp770_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp769_);
			_tmp771_ = _tmp770_;
			_vala_ccode_node_unref0 (_tmp769_);
			_g_free0 (_tmp767_);
			unref_call = _tmp771_;
			_tmp772_ = unref_call;
			_tmp773_ = g_strdup_printf ("_data%d_", block_id);
			_tmp774_ = _tmp773_;
			_tmp775_ = vala_ccode_identifier_new (_tmp774_);
			_tmp776_ = _tmp775_;
			_tmp777_ = g_strdup_printf ("_data%d_", parent_block_id);
			_tmp778_ = _tmp777_;
			_tmp779_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp776_, _tmp778_);
			_tmp780_ = _tmp779_;
			vala_ccode_function_call_add_argument (_tmp772_, (ValaCCodeExpression*) _tmp780_);
			_vala_ccode_node_unref0 (_tmp780_);
			_g_free0 (_tmp778_);
			_vala_ccode_node_unref0 (_tmp776_);
			_g_free0 (_tmp774_);
			_tmp781_ = vala_ccode_base_module_get_ccode (self);
			_tmp782_ = _tmp781_;
			_tmp783_ = unref_call;
			vala_ccode_function_add_expression (_tmp782_, (ValaCCodeExpression*) _tmp783_);
			_tmp784_ = vala_ccode_base_module_get_ccode (self);
			_tmp785_ = _tmp784_;
			_tmp786_ = g_strdup_printf ("_data%d_", block_id);
			_tmp787_ = _tmp786_;
			_tmp788_ = vala_ccode_identifier_new (_tmp787_);
			_tmp789_ = _tmp788_;
			_tmp790_ = g_strdup_printf ("_data%d_", parent_block_id);
			_tmp791_ = _tmp790_;
			_tmp792_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp789_, _tmp791_);
			_tmp793_ = _tmp792_;
			_tmp794_ = vala_ccode_constant_new ("NULL");
			_tmp795_ = _tmp794_;
			vala_ccode_function_add_assignment (_tmp785_, (ValaCCodeExpression*) _tmp793_, (ValaCCodeExpression*) _tmp795_);
			_vala_ccode_node_unref0 (_tmp795_);
			_vala_ccode_node_unref0 (_tmp793_);
			_g_free0 (_tmp791_);
			_vala_ccode_node_unref0 (_tmp789_);
			_g_free0 (_tmp787_);
			_vala_ccode_node_unref0 (unref_call);
		} else {
			ValaDataType* _tmp796_;
			ValaDataType* _tmp797_;
			ValaDataType* _tmp798_;
			_tmp796_ = vala_ccode_base_module_get_this_type (self);
			_tmp797_ = _vala_code_node_ref0 (_tmp796_);
			_vala_code_node_unref0 (this_type);
			this_type = _tmp797_;
			_tmp798_ = this_type;
			if (_tmp798_ != NULL) {
				ValaDataType* _tmp799_;
				ValaDataType* _tmp800_;
				ValaDataType* _tmp801_;
				gboolean _tmp802_ = FALSE;
				ValaDataType* _tmp803_;
				_tmp799_ = this_type;
				_tmp800_ = vala_data_type_copy (_tmp799_);
				_vala_code_node_unref0 (this_type);
				this_type = _tmp800_;
				_tmp801_ = this_type;
				vala_data_type_set_value_owned (_tmp801_, TRUE);
				_tmp803_ = this_type;
				if (vala_data_type_is_disposable (_tmp803_)) {
					_tmp802_ = !vala_ccode_base_module_is_in_destructor (self);
				} else {
					_tmp802_ = FALSE;
				}
				if (_tmp802_) {
					ValaGLibValue* this_value = NULL;
					ValaDataType* _tmp804_;
					ValaCCodeIdentifier* _tmp805_;
					ValaCCodeIdentifier* _tmp806_;
					ValaGLibValue* _tmp807_;
					ValaGLibValue* _tmp808_;
					ValaCCodeFunction* _tmp809_;
					ValaCCodeFunction* _tmp810_;
					ValaGLibValue* _tmp811_;
					ValaCCodeExpression* _tmp812_;
					ValaCCodeExpression* _tmp813_;
					_tmp804_ = this_type;
					_tmp805_ = vala_ccode_identifier_new ("self");
					_tmp806_ = _tmp805_;
					_tmp807_ = vala_glib_value_new (_tmp804_, (ValaCCodeExpression*) _tmp806_, TRUE);
					_tmp808_ = _tmp807_;
					_vala_ccode_node_unref0 (_tmp806_);
					this_value = _tmp808_;
					_tmp809_ = vala_ccode_base_module_get_ccode (self);
					_tmp810_ = _tmp809_;
					_tmp811_ = this_value;
					_tmp812_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp811_, FALSE);
					_tmp813_ = _tmp812_;
					vala_ccode_function_add_expression (_tmp810_, _tmp813_);
					_vala_ccode_node_unref0 (_tmp813_);
					_vala_target_value_unref0 (this_value);
				}
			}
		}
		_tmp814_ = vala_ccode_identifier_new ("g_slice_free");
		_tmp815_ = _tmp814_;
		_tmp816_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp815_);
		_tmp817_ = _tmp816_;
		_vala_ccode_node_unref0 (_tmp815_);
		data_free = _tmp817_;
		_tmp818_ = data_free;
		_tmp819_ = struct_name;
		_tmp820_ = vala_ccode_identifier_new (_tmp819_);
		_tmp821_ = _tmp820_;
		vala_ccode_function_call_add_argument (_tmp818_, (ValaCCodeExpression*) _tmp821_);
		_vala_ccode_node_unref0 (_tmp821_);
		_tmp822_ = data_free;
		_tmp823_ = g_strdup_printf ("_data%d_", block_id);
		_tmp824_ = _tmp823_;
		_tmp825_ = vala_ccode_identifier_new (_tmp824_);
		_tmp826_ = _tmp825_;
		vala_ccode_function_call_add_argument (_tmp822_, (ValaCCodeExpression*) _tmp826_);
		_vala_ccode_node_unref0 (_tmp826_);
		_g_free0 (_tmp824_);
		_tmp827_ = vala_ccode_base_module_get_ccode (self);
		_tmp828_ = _tmp827_;
		_tmp829_ = data_free;
		vala_ccode_function_add_expression (_tmp828_, (ValaCCodeExpression*) _tmp829_);
		_tmp830_ = vala_ccode_base_module_get_ccode (self);
		_tmp831_ = _tmp830_;
		vala_ccode_function_close (_tmp831_);
		vala_ccode_base_module_pop_function (self);
		_tmp832_ = self->cfile;
		_tmp833_ = unref_fun;
		vala_ccode_file_add_function_declaration (_tmp832_, _tmp833_);
		_tmp834_ = self->cfile;
		_tmp835_ = unref_fun;
		vala_ccode_file_add_function (_tmp834_, _tmp835_);
		_vala_ccode_node_unref0 (data_free);
		_vala_code_node_unref0 (this_type);
		_vala_ccode_node_unref0 (outer_block);
		_vala_ccode_node_unref0 (unref_fun);
		_vala_ccode_node_unref0 (ccall);
		_vala_ccode_node_unref0 (ref_fun);
		_vala_ccode_node_unref0 (_typedef_);
		_vala_ccode_node_unref0 (data_alloc);
		_vala_ccode_node_unref0 (data);
		_g_free0 (struct_name);
		_vala_code_node_unref0 (parent_block);
	}
	{
		ValaList* _stmt_list = NULL;
		ValaList* _tmp836_;
		gint _stmt_size = 0;
		ValaList* _tmp837_;
		gint _tmp838_;
		gint _tmp839_;
		gint _stmt_index = 0;
		_tmp836_ = vala_block_get_statements (b);
		_stmt_list = _tmp836_;
		_tmp837_ = _stmt_list;
		_tmp838_ = vala_collection_get_size ((ValaCollection*) _tmp837_);
		_tmp839_ = _tmp838_;
		_stmt_size = _tmp839_;
		_stmt_index = -1;
		while (TRUE) {
			gint _tmp840_;
			gint _tmp841_;
			ValaStatement* stmt = NULL;
			ValaList* _tmp842_;
			gpointer _tmp843_;
			ValaStatement* _tmp844_;
			ValaSourceReference* _tmp845_;
			ValaSourceReference* _tmp846_;
			ValaStatement* _tmp847_;
			_stmt_index = _stmt_index + 1;
			_tmp840_ = _stmt_index;
			_tmp841_ = _stmt_size;
			if (!(_tmp840_ < _tmp841_)) {
				break;
			}
			_tmp842_ = _stmt_list;
			_tmp843_ = vala_list_get (_tmp842_, _stmt_index);
			stmt = (ValaStatement*) _tmp843_;
			_tmp844_ = stmt;
			_tmp845_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp844_);
			_tmp846_ = _tmp845_;
			vala_ccode_base_module_push_line (self, _tmp846_);
			_tmp847_ = stmt;
			vala_code_node_emit ((ValaCodeNode*) _tmp847_, (ValaCodeGenerator*) self);
			vala_ccode_base_module_pop_line (self);
			_vala_code_node_unref0 (stmt);
		}
		_vala_iterable_unref0 (_stmt_list);
	}
	_tmp848_ = vala_block_get_unreachable_exit (b);
	_tmp849_ = _tmp848_;
	if (!_tmp849_) {
		ValaSymbol* _tmp850_;
		ValaSymbol* _tmp851_;
		ValaSymbol* _tmp888_;
		ValaSymbol* _tmp889_;
		gboolean _tmp961_;
		gboolean _tmp962_;
		_tmp850_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
		_tmp851_ = _tmp850_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp851_, VALA_TYPE_METHOD)) {
			ValaMethod* m = NULL;
			ValaSymbol* _tmp852_;
			ValaSymbol* _tmp853_;
			_tmp852_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
			_tmp853_ = _tmp852_;
			m = G_TYPE_CHECK_INSTANCE_CAST (_tmp853_, VALA_TYPE_METHOD, ValaMethod);
			{
				ValaList* _postcondition_list = NULL;
				ValaMethod* _tmp854_;
				ValaList* _tmp855_;
				gint _postcondition_size = 0;
				ValaList* _tmp856_;
				gint _tmp857_;
				gint _tmp858_;
				gint _postcondition_index = 0;
				_tmp854_ = m;
				_tmp855_ = vala_method_get_postconditions (_tmp854_);
				_postcondition_list = _tmp855_;
				_tmp856_ = _postcondition_list;
				_tmp857_ = vala_collection_get_size ((ValaCollection*) _tmp856_);
				_tmp858_ = _tmp857_;
				_postcondition_size = _tmp858_;
				_postcondition_index = -1;
				while (TRUE) {
					gint _tmp859_;
					gint _tmp860_;
					ValaExpression* postcondition = NULL;
					ValaList* _tmp861_;
					gpointer _tmp862_;
					ValaExpression* _tmp863_;
					_postcondition_index = _postcondition_index + 1;
					_tmp859_ = _postcondition_index;
					_tmp860_ = _postcondition_size;
					if (!(_tmp859_ < _tmp860_)) {
						break;
					}
					_tmp861_ = _postcondition_list;
					_tmp862_ = vala_list_get (_tmp861_, _postcondition_index);
					postcondition = (ValaExpression*) _tmp862_;
					_tmp863_ = postcondition;
					vala_ccode_base_module_create_postcondition_statement (self, _tmp863_);
					_vala_code_node_unref0 (postcondition);
				}
			}
		}
		{
			gint i = 0;
			ValaList* _tmp864_;
			gint _tmp865_;
			gint _tmp866_;
			_tmp864_ = local_vars;
			_tmp865_ = vala_collection_get_size ((ValaCollection*) _tmp864_);
			_tmp866_ = _tmp865_;
			i = _tmp866_ - 1;
			{
				gboolean _tmp867_ = FALSE;
				_tmp867_ = TRUE;
				while (TRUE) {
					ValaLocalVariable* local = NULL;
					ValaList* _tmp869_;
					gpointer _tmp870_;
					ValaLocalVariable* _tmp871_;
					gboolean _tmp872_ = FALSE;
					gboolean _tmp873_ = FALSE;
					ValaLocalVariable* _tmp874_;
					gboolean _tmp875_;
					gboolean _tmp876_;
					if (!_tmp867_) {
						gint _tmp868_;
						_tmp868_ = i;
						i = _tmp868_ - 1;
					}
					_tmp867_ = FALSE;
					if (!(i >= 0)) {
						break;
					}
					_tmp869_ = local_vars;
					_tmp870_ = vala_list_get (_tmp869_, i);
					local = (ValaLocalVariable*) _tmp870_;
					_tmp871_ = local;
					vala_symbol_set_active ((ValaSymbol*) _tmp871_, FALSE);
					_tmp874_ = local;
					_tmp875_ = vala_code_node_get_unreachable ((ValaCodeNode*) _tmp874_);
					_tmp876_ = _tmp875_;
					if (!_tmp876_) {
						ValaLocalVariable* _tmp877_;
						gboolean _tmp878_;
						gboolean _tmp879_;
						_tmp877_ = local;
						_tmp878_ = vala_local_variable_get_captured (_tmp877_);
						_tmp879_ = _tmp878_;
						_tmp873_ = !_tmp879_;
					} else {
						_tmp873_ = FALSE;
					}
					if (_tmp873_) {
						ValaLocalVariable* _tmp880_;
						ValaDataType* _tmp881_;
						ValaDataType* _tmp882_;
						_tmp880_ = local;
						_tmp881_ = vala_variable_get_variable_type ((ValaVariable*) _tmp880_);
						_tmp882_ = _tmp881_;
						_tmp872_ = vala_ccode_base_module_requires_destroy (_tmp882_);
					} else {
						_tmp872_ = FALSE;
					}
					if (_tmp872_) {
						ValaCCodeFunction* _tmp883_;
						ValaCCodeFunction* _tmp884_;
						ValaLocalVariable* _tmp885_;
						ValaCCodeExpression* _tmp886_;
						ValaCCodeExpression* _tmp887_;
						_tmp883_ = vala_ccode_base_module_get_ccode (self);
						_tmp884_ = _tmp883_;
						_tmp885_ = local;
						_tmp886_ = vala_ccode_base_module_destroy_local (self, _tmp885_);
						_tmp887_ = _tmp886_;
						vala_ccode_function_add_expression (_tmp884_, _tmp887_);
						_vala_ccode_node_unref0 (_tmp887_);
					}
					_vala_code_node_unref0 (local);
				}
			}
		}
		_tmp888_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
		_tmp889_ = _tmp888_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp889_, VALA_TYPE_METHOD)) {
			ValaMethod* m = NULL;
			ValaSymbol* _tmp890_;
			ValaSymbol* _tmp891_;
			ValaMethod* _tmp892_;
			_tmp890_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
			_tmp891_ = _tmp890_;
			_tmp892_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp891_, VALA_TYPE_METHOD, ValaMethod));
			m = _tmp892_;
			{
				ValaList* _param_list = NULL;
				ValaMethod* _tmp893_;
				ValaList* _tmp894_;
				gint _param_size = 0;
				ValaList* _tmp895_;
				gint _tmp896_;
				gint _tmp897_;
				gint _param_index = 0;
				_tmp893_ = m;
				_tmp894_ = vala_callable_get_parameters ((ValaCallable*) _tmp893_);
				_param_list = _tmp894_;
				_tmp895_ = _param_list;
				_tmp896_ = vala_collection_get_size ((ValaCollection*) _tmp895_);
				_tmp897_ = _tmp896_;
				_param_size = _tmp897_;
				_param_index = -1;
				while (TRUE) {
					gint _tmp898_;
					gint _tmp899_;
					ValaParameter* param = NULL;
					ValaList* _tmp900_;
					gpointer _tmp901_;
					gboolean _tmp902_ = FALSE;
					gboolean _tmp903_ = FALSE;
					gboolean _tmp904_ = FALSE;
					gboolean _tmp905_ = FALSE;
					ValaParameter* _tmp906_;
					gboolean _tmp907_;
					gboolean _tmp908_;
					_param_index = _param_index + 1;
					_tmp898_ = _param_index;
					_tmp899_ = _param_size;
					if (!(_tmp898_ < _tmp899_)) {
						break;
					}
					_tmp900_ = _param_list;
					_tmp901_ = vala_list_get (_tmp900_, _param_index);
					param = (ValaParameter*) _tmp901_;
					_tmp906_ = param;
					_tmp907_ = vala_parameter_get_captured (_tmp906_);
					_tmp908_ = _tmp907_;
					if (!_tmp908_) {
						ValaParameter* _tmp909_;
						gboolean _tmp910_;
						gboolean _tmp911_;
						_tmp909_ = param;
						_tmp910_ = vala_parameter_get_ellipsis (_tmp909_);
						_tmp911_ = _tmp910_;
						_tmp905_ = !_tmp911_;
					} else {
						_tmp905_ = FALSE;
					}
					if (_tmp905_) {
						ValaParameter* _tmp912_;
						gboolean _tmp913_;
						gboolean _tmp914_;
						_tmp912_ = param;
						_tmp913_ = vala_parameter_get_params_array (_tmp912_);
						_tmp914_ = _tmp913_;
						_tmp904_ = !_tmp914_;
					} else {
						_tmp904_ = FALSE;
					}
					if (_tmp904_) {
						ValaParameter* _tmp915_;
						ValaDataType* _tmp916_;
						ValaDataType* _tmp917_;
						_tmp915_ = param;
						_tmp916_ = vala_variable_get_variable_type ((ValaVariable*) _tmp915_);
						_tmp917_ = _tmp916_;
						_tmp903_ = vala_ccode_base_module_requires_destroy (_tmp917_);
					} else {
						_tmp903_ = FALSE;
					}
					if (_tmp903_) {
						ValaParameter* _tmp918_;
						ValaParameterDirection _tmp919_;
						ValaParameterDirection _tmp920_;
						_tmp918_ = param;
						_tmp919_ = vala_parameter_get_direction (_tmp918_);
						_tmp920_ = _tmp919_;
						_tmp902_ = _tmp920_ == VALA_PARAMETER_DIRECTION_IN;
					} else {
						_tmp902_ = FALSE;
					}
					if (_tmp902_) {
						ValaCCodeFunction* _tmp921_;
						ValaCCodeFunction* _tmp922_;
						ValaParameter* _tmp923_;
						ValaCCodeExpression* _tmp924_;
						ValaCCodeExpression* _tmp925_;
						_tmp921_ = vala_ccode_base_module_get_ccode (self);
						_tmp922_ = _tmp921_;
						_tmp923_ = param;
						_tmp924_ = vala_ccode_base_module_destroy_parameter (self, _tmp923_);
						_tmp925_ = _tmp924_;
						vala_ccode_function_add_expression (_tmp922_, _tmp925_);
						_vala_ccode_node_unref0 (_tmp925_);
					} else {
						gboolean _tmp926_ = FALSE;
						ValaParameter* _tmp927_;
						ValaParameterDirection _tmp928_;
						ValaParameterDirection _tmp929_;
						_tmp927_ = param;
						_tmp928_ = vala_parameter_get_direction (_tmp927_);
						_tmp929_ = _tmp928_;
						if (_tmp929_ == VALA_PARAMETER_DIRECTION_OUT) {
							ValaMethod* _tmp930_;
							gboolean _tmp931_;
							gboolean _tmp932_;
							_tmp930_ = m;
							_tmp931_ = vala_method_get_coroutine (_tmp930_);
							_tmp932_ = _tmp931_;
							_tmp926_ = !_tmp932_;
						} else {
							_tmp926_ = FALSE;
						}
						if (_tmp926_) {
							ValaParameter* _tmp933_;
							_tmp933_ = param;
							vala_ccode_base_module_return_out_parameter (self, _tmp933_);
						}
					}
					_vala_code_node_unref0 (param);
				}
			}
			_vala_code_node_unref0 (m);
		} else {
			ValaSymbol* _tmp934_;
			ValaSymbol* _tmp935_;
			_tmp934_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
			_tmp935_ = _tmp934_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp935_, VALA_TYPE_PROPERTY_ACCESSOR)) {
				ValaPropertyAccessor* acc = NULL;
				ValaSymbol* _tmp936_;
				ValaSymbol* _tmp937_;
				ValaPropertyAccessor* _tmp938_;
				gboolean _tmp939_ = FALSE;
				gboolean _tmp940_ = FALSE;
				ValaPropertyAccessor* _tmp941_;
				ValaParameter* _tmp942_;
				ValaParameter* _tmp943_;
				_tmp936_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
				_tmp937_ = _tmp936_;
				_tmp938_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp937_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
				acc = _tmp938_;
				_tmp941_ = acc;
				_tmp942_ = vala_property_accessor_get_value_parameter (_tmp941_);
				_tmp943_ = _tmp942_;
				if (_tmp943_ != NULL) {
					ValaPropertyAccessor* _tmp944_;
					ValaParameter* _tmp945_;
					ValaParameter* _tmp946_;
					gboolean _tmp947_;
					gboolean _tmp948_;
					_tmp944_ = acc;
					_tmp945_ = vala_property_accessor_get_value_parameter (_tmp944_);
					_tmp946_ = _tmp945_;
					_tmp947_ = vala_parameter_get_captured (_tmp946_);
					_tmp948_ = _tmp947_;
					_tmp940_ = !_tmp948_;
				} else {
					_tmp940_ = FALSE;
				}
				if (_tmp940_) {
					ValaPropertyAccessor* _tmp949_;
					ValaParameter* _tmp950_;
					ValaParameter* _tmp951_;
					ValaDataType* _tmp952_;
					ValaDataType* _tmp953_;
					_tmp949_ = acc;
					_tmp950_ = vala_property_accessor_get_value_parameter (_tmp949_);
					_tmp951_ = _tmp950_;
					_tmp952_ = vala_variable_get_variable_type ((ValaVariable*) _tmp951_);
					_tmp953_ = _tmp952_;
					_tmp939_ = vala_ccode_base_module_requires_destroy (_tmp953_);
				} else {
					_tmp939_ = FALSE;
				}
				if (_tmp939_) {
					ValaCCodeFunction* _tmp954_;
					ValaCCodeFunction* _tmp955_;
					ValaPropertyAccessor* _tmp956_;
					ValaParameter* _tmp957_;
					ValaParameter* _tmp958_;
					ValaCCodeExpression* _tmp959_;
					ValaCCodeExpression* _tmp960_;
					_tmp954_ = vala_ccode_base_module_get_ccode (self);
					_tmp955_ = _tmp954_;
					_tmp956_ = acc;
					_tmp957_ = vala_property_accessor_get_value_parameter (_tmp956_);
					_tmp958_ = _tmp957_;
					_tmp959_ = vala_ccode_base_module_destroy_parameter (self, _tmp958_);
					_tmp960_ = _tmp959_;
					vala_ccode_function_add_expression (_tmp955_, _tmp960_);
					_vala_ccode_node_unref0 (_tmp960_);
				}
				_vala_code_node_unref0 (acc);
			}
		}
		_tmp961_ = vala_block_get_captured (b);
		_tmp962_ = _tmp961_;
		if (_tmp962_) {
			gint block_id = 0;
			ValaCCodeFunctionCall* data_unref = NULL;
			gchar* _tmp963_;
			gchar* _tmp964_;
			ValaCCodeIdentifier* _tmp965_;
			ValaCCodeIdentifier* _tmp966_;
			ValaCCodeFunctionCall* _tmp967_;
			ValaCCodeFunctionCall* _tmp968_;
			ValaCCodeFunctionCall* _tmp969_;
			gchar* _tmp970_;
			gchar* _tmp971_;
			ValaCCodeExpression* _tmp972_;
			ValaCCodeExpression* _tmp973_;
			ValaCCodeFunction* _tmp974_;
			ValaCCodeFunction* _tmp975_;
			ValaCCodeFunctionCall* _tmp976_;
			ValaCCodeFunction* _tmp977_;
			ValaCCodeFunction* _tmp978_;
			gchar* _tmp979_;
			gchar* _tmp980_;
			ValaCCodeExpression* _tmp981_;
			ValaCCodeExpression* _tmp982_;
			ValaCCodeConstant* _tmp983_;
			ValaCCodeConstant* _tmp984_;
			block_id = vala_ccode_base_module_get_block_id (self, b);
			_tmp963_ = g_strdup_printf ("block%d_data_unref", block_id);
			_tmp964_ = _tmp963_;
			_tmp965_ = vala_ccode_identifier_new (_tmp964_);
			_tmp966_ = _tmp965_;
			_tmp967_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp966_);
			_tmp968_ = _tmp967_;
			_vala_ccode_node_unref0 (_tmp966_);
			_g_free0 (_tmp964_);
			data_unref = _tmp968_;
			_tmp969_ = data_unref;
			_tmp970_ = g_strdup_printf ("_data%d_", block_id);
			_tmp971_ = _tmp970_;
			_tmp972_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp971_);
			_tmp973_ = _tmp972_;
			vala_ccode_function_call_add_argument (_tmp969_, _tmp973_);
			_vala_ccode_node_unref0 (_tmp973_);
			_g_free0 (_tmp971_);
			_tmp974_ = vala_ccode_base_module_get_ccode (self);
			_tmp975_ = _tmp974_;
			_tmp976_ = data_unref;
			vala_ccode_function_add_expression (_tmp975_, (ValaCCodeExpression*) _tmp976_);
			_tmp977_ = vala_ccode_base_module_get_ccode (self);
			_tmp978_ = _tmp977_;
			_tmp979_ = g_strdup_printf ("_data%d_", block_id);
			_tmp980_ = _tmp979_;
			_tmp981_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp980_);
			_tmp982_ = _tmp981_;
			_tmp983_ = vala_ccode_constant_new ("NULL");
			_tmp984_ = _tmp983_;
			vala_ccode_function_add_assignment (_tmp978_, _tmp982_, (ValaCCodeExpression*) _tmp984_);
			_vala_ccode_node_unref0 (_tmp984_);
			_vala_ccode_node_unref0 (_tmp982_);
			_g_free0 (_tmp980_);
			_vala_ccode_node_unref0 (data_unref);
		}
	}
	_tmp987_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
	_tmp988_ = _tmp987_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp988_, VALA_TYPE_BLOCK)) {
		_tmp986_ = TRUE;
	} else {
		ValaCodeNode* _tmp989_;
		ValaCodeNode* _tmp990_;
		_tmp989_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
		_tmp990_ = _tmp989_;
		_tmp986_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp990_, VALA_TYPE_SWITCH_STATEMENT);
	}
	if (_tmp986_) {
		_tmp985_ = TRUE;
	} else {
		ValaCodeNode* _tmp991_;
		ValaCodeNode* _tmp992_;
		_tmp991_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
		_tmp992_ = _tmp991_;
		_tmp985_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp992_, VALA_TYPE_TRY_STATEMENT);
	}
	if (_tmp985_) {
		ValaCCodeFunction* _tmp993_;
		ValaCCodeFunction* _tmp994_;
		_tmp993_ = vala_ccode_base_module_get_ccode (self);
		_tmp994_ = _tmp993_;
		vala_ccode_function_close (_tmp994_);
	}
	_tmp995_ = self->emit_context;
	vala_ccode_base_module_emit_context_pop_symbol (_tmp995_);
	_vala_iterable_unref0 (local_vars);
}

static void
vala_ccode_base_module_real_visit_declaration_statement (ValaCodeVisitor* base,
                                                         ValaDeclarationStatement* stmt)
{
	ValaCCodeBaseModule * self;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_declaration_statement_get_declaration (stmt);
	_tmp1_ = _tmp0_;
	vala_code_node_accept ((ValaCodeNode*) _tmp1_, (ValaCodeVisitor*) self);
}

ValaCCodeExpression*
vala_ccode_base_module_get_cexpression (ValaCCodeBaseModule* self,
                                        const gchar* name)
{
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	if (vala_ccode_base_module_is_in_coroutine (self)) {
		ValaCCodeIdentifier* _tmp0_;
		ValaCCodeIdentifier* _tmp1_;
		ValaCCodeMemberAccess* _tmp2_;
		ValaCCodeExpression* _tmp3_;
		_tmp0_ = vala_ccode_identifier_new ("_data_");
		_tmp1_ = _tmp0_;
		_tmp2_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1_, name);
		_tmp3_ = (ValaCCodeExpression*) _tmp2_;
		_vala_ccode_node_unref0 (_tmp1_);
		result = _tmp3_;
		return result;
	} else {
		ValaCCodeIdentifier* _tmp4_;
		_tmp4_ = vala_ccode_identifier_new (name);
		result = (ValaCCodeExpression*) _tmp4_;
		return result;
	}
}

ValaCCodeExpression*
vala_ccode_base_module_get_local_cexpression (ValaCCodeBaseModule* self,
                                              ValaLocalVariable* local)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (local != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_local_cname (self, local);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_cexpression (self, _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	result = _tmp3_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_parameter_cexpression (ValaCCodeBaseModule* self,
                                                  ValaParameter* param)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (param != NULL, NULL);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) param);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_cexpression (self, _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	result = _tmp3_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_variable_cexpression (ValaCCodeBaseModule* self,
                                                 const gchar* name)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_variable_cname (self, name);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_cexpression (self, _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	result = _tmp3_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_this_cexpression (ValaCCodeBaseModule* self)
{
	ValaCCodeExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_cexpression (self, "self");
	result = _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_this_class_cexpression (ValaCCodeBaseModule* self,
                                                   ValaClass* cl,
                                                   ValaTargetValue* instance)
{
	ValaCCodeExpression* cast = NULL;
	ValaCCodeFunctionCall* call = NULL;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (cl != NULL, NULL);
	if (instance != NULL) {
		gboolean _tmp0_;
		gboolean _tmp1_;
		ValaCCodeFunctionCall* _tmp24_;
		ValaCCodeExpression* _tmp25_;
		_tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) cl);
		_tmp1_ = _tmp0_;
		if (_tmp1_) {
			ValaCCodeIdentifier* _tmp2_;
			ValaCCodeIdentifier* _tmp3_;
			ValaCCodeFunctionCall* _tmp4_;
			ValaCCodeFunctionCall* _tmp5_;
			ValaCCodeExpression* _tmp6_;
			ValaCCodeFunctionCall* _tmp7_;
			gchar* _tmp8_;
			gchar* _tmp9_;
			ValaCCodeIdentifier* _tmp10_;
			ValaCCodeIdentifier* _tmp11_;
			ValaCCodeFunctionCall* _tmp12_;
			gchar* _tmp13_;
			gchar* _tmp14_;
			ValaCCodeIdentifier* _tmp15_;
			ValaCCodeIdentifier* _tmp16_;
			_tmp2_ = vala_ccode_identifier_new ("G_TYPE_INSTANCE_GET_CLASS");
			_tmp3_ = _tmp2_;
			_tmp4_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp3_);
			_vala_ccode_node_unref0 (call);
			call = _tmp4_;
			_vala_ccode_node_unref0 (_tmp3_);
			_tmp5_ = call;
			_tmp6_ = vala_get_cvalue_ (instance);
			vala_ccode_function_call_add_argument (_tmp5_, _tmp6_);
			_tmp7_ = call;
			_tmp8_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp9_ = _tmp8_;
			_tmp10_ = vala_ccode_identifier_new (_tmp9_);
			_tmp11_ = _tmp10_;
			vala_ccode_function_call_add_argument (_tmp7_, (ValaCCodeExpression*) _tmp11_);
			_vala_ccode_node_unref0 (_tmp11_);
			_g_free0 (_tmp9_);
			_tmp12_ = call;
			_tmp13_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
			_tmp14_ = _tmp13_;
			_tmp15_ = vala_ccode_identifier_new (_tmp14_);
			_tmp16_ = _tmp15_;
			vala_ccode_function_call_add_argument (_tmp12_, (ValaCCodeExpression*) _tmp16_);
			_vala_ccode_node_unref0 (_tmp16_);
			_g_free0 (_tmp14_);
		} else {
			gchar* _tmp17_;
			gchar* _tmp18_;
			ValaCCodeIdentifier* _tmp19_;
			ValaCCodeIdentifier* _tmp20_;
			ValaCCodeFunctionCall* _tmp21_;
			ValaCCodeFunctionCall* _tmp22_;
			ValaCCodeExpression* _tmp23_;
			_tmp17_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) cl);
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_ccode_identifier_new (_tmp18_);
			_tmp20_ = _tmp19_;
			_tmp21_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp20_);
			_vala_ccode_node_unref0 (call);
			call = _tmp21_;
			_vala_ccode_node_unref0 (_tmp20_);
			_g_free0 (_tmp18_);
			_tmp22_ = call;
			_tmp23_ = vala_get_cvalue_ (instance);
			vala_ccode_function_call_add_argument (_tmp22_, _tmp23_);
		}
		_tmp24_ = call;
		_tmp25_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp24_);
		_vala_ccode_node_unref0 (cast);
		cast = _tmp25_;
	} else {
		ValaDataType* _tmp26_;
		_tmp26_ = vala_ccode_base_module_get_this_type (self);
		if (_tmp26_ != NULL) {
			gboolean _tmp27_;
			gboolean _tmp28_;
			ValaCCodeFunctionCall* _tmp53_;
			ValaCCodeExpression* _tmp54_;
			_tmp27_ = vala_symbol_get_external_package ((ValaSymbol*) cl);
			_tmp28_ = _tmp27_;
			if (_tmp28_) {
				ValaCCodeIdentifier* _tmp29_;
				ValaCCodeIdentifier* _tmp30_;
				ValaCCodeFunctionCall* _tmp31_;
				ValaCCodeFunctionCall* _tmp32_;
				ValaCCodeExpression* _tmp33_;
				ValaCCodeExpression* _tmp34_;
				ValaCCodeFunctionCall* _tmp35_;
				gchar* _tmp36_;
				gchar* _tmp37_;
				ValaCCodeIdentifier* _tmp38_;
				ValaCCodeIdentifier* _tmp39_;
				ValaCCodeFunctionCall* _tmp40_;
				gchar* _tmp41_;
				gchar* _tmp42_;
				ValaCCodeIdentifier* _tmp43_;
				ValaCCodeIdentifier* _tmp44_;
				_tmp29_ = vala_ccode_identifier_new ("G_TYPE_INSTANCE_GET_CLASS");
				_tmp30_ = _tmp29_;
				_tmp31_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp30_);
				_vala_ccode_node_unref0 (call);
				call = _tmp31_;
				_vala_ccode_node_unref0 (_tmp30_);
				_tmp32_ = call;
				_tmp33_ = vala_ccode_base_module_get_this_cexpression (self);
				_tmp34_ = _tmp33_;
				vala_ccode_function_call_add_argument (_tmp32_, _tmp34_);
				_vala_ccode_node_unref0 (_tmp34_);
				_tmp35_ = call;
				_tmp36_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
				_tmp37_ = _tmp36_;
				_tmp38_ = vala_ccode_identifier_new (_tmp37_);
				_tmp39_ = _tmp38_;
				vala_ccode_function_call_add_argument (_tmp35_, (ValaCCodeExpression*) _tmp39_);
				_vala_ccode_node_unref0 (_tmp39_);
				_g_free0 (_tmp37_);
				_tmp40_ = call;
				_tmp41_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
				_tmp42_ = _tmp41_;
				_tmp43_ = vala_ccode_identifier_new (_tmp42_);
				_tmp44_ = _tmp43_;
				vala_ccode_function_call_add_argument (_tmp40_, (ValaCCodeExpression*) _tmp44_);
				_vala_ccode_node_unref0 (_tmp44_);
				_g_free0 (_tmp42_);
			} else {
				gchar* _tmp45_;
				gchar* _tmp46_;
				ValaCCodeIdentifier* _tmp47_;
				ValaCCodeIdentifier* _tmp48_;
				ValaCCodeFunctionCall* _tmp49_;
				ValaCCodeFunctionCall* _tmp50_;
				ValaCCodeExpression* _tmp51_;
				ValaCCodeExpression* _tmp52_;
				_tmp45_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) cl);
				_tmp46_ = _tmp45_;
				_tmp47_ = vala_ccode_identifier_new (_tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp48_);
				_vala_ccode_node_unref0 (call);
				call = _tmp49_;
				_vala_ccode_node_unref0 (_tmp48_);
				_g_free0 (_tmp46_);
				_tmp50_ = call;
				_tmp51_ = vala_ccode_base_module_get_this_cexpression (self);
				_tmp52_ = _tmp51_;
				vala_ccode_function_call_add_argument (_tmp50_, _tmp52_);
				_vala_ccode_node_unref0 (_tmp52_);
			}
			_tmp53_ = call;
			_tmp54_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp53_);
			_vala_ccode_node_unref0 (cast);
			cast = _tmp54_;
		} else {
			ValaClass* _tmp55_;
			ValaClass* _tmp56_;
			_tmp55_ = vala_ccode_base_module_get_current_class (self);
			_tmp56_ = _tmp55_;
			if (_tmp56_ == cl) {
				ValaCCodeIdentifier* _tmp57_;
				_tmp57_ = vala_ccode_identifier_new ("klass");
				_vala_ccode_node_unref0 (cast);
				cast = (ValaCCodeExpression*) _tmp57_;
			} else {
				gchar* _tmp58_;
				gchar* _tmp59_;
				ValaCCodeIdentifier* _tmp60_;
				ValaCCodeIdentifier* _tmp61_;
				ValaCCodeFunctionCall* _tmp62_;
				ValaCCodeFunctionCall* _tmp63_;
				ValaCCodeIdentifier* _tmp64_;
				ValaCCodeIdentifier* _tmp65_;
				ValaCCodeFunctionCall* _tmp66_;
				ValaCCodeExpression* _tmp67_;
				_tmp58_ = vala_get_ccode_class_type_function (cl);
				_tmp59_ = _tmp58_;
				_tmp60_ = vala_ccode_identifier_new (_tmp59_);
				_tmp61_ = _tmp60_;
				_tmp62_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp61_);
				_vala_ccode_node_unref0 (call);
				call = _tmp62_;
				_vala_ccode_node_unref0 (_tmp61_);
				_g_free0 (_tmp59_);
				_tmp63_ = call;
				_tmp64_ = vala_ccode_identifier_new ("klass");
				_tmp65_ = _tmp64_;
				vala_ccode_function_call_add_argument (_tmp63_, (ValaCCodeExpression*) _tmp65_);
				_vala_ccode_node_unref0 (_tmp65_);
				_tmp66_ = call;
				_tmp67_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp66_);
				_vala_ccode_node_unref0 (cast);
				cast = _tmp67_;
			}
		}
	}
	result = cast;
	_vala_ccode_node_unref0 (call);
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_this_interface_cexpression (ValaCCodeBaseModule* self,
                                                       ValaInterface* iface,
                                                       ValaTargetValue* instance)
{
	ValaClass* cl = NULL;
	ValaClass* _tmp0_;
	ValaClass* _tmp1_;
	gboolean _tmp2_ = FALSE;
	ValaClass* _tmp3_;
	ValaCCodeExpression* cast = NULL;
	ValaCCodeFunctionCall* call = NULL;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (iface != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_class (self);
	_tmp1_ = _tmp0_;
	cl = _tmp1_;
	_tmp3_ = cl;
	if (_tmp3_ != NULL) {
		ValaClass* _tmp4_;
		_tmp4_ = cl;
		_tmp2_ = vala_class_implements (_tmp4_, iface);
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		ValaClass* _tmp5_;
		gchar* _tmp6_;
		gchar* _tmp7_;
		gchar* _tmp8_;
		gchar* _tmp9_;
		gchar* _tmp10_;
		gchar* _tmp11_;
		ValaCCodeIdentifier* _tmp12_;
		ValaCCodeExpression* _tmp13_;
		_tmp5_ = cl;
		_tmp6_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp5_, NULL);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
		_tmp9_ = _tmp8_;
		_tmp10_ = g_strdup_printf ("%s_%s_parent_iface", _tmp7_, _tmp9_);
		_tmp11_ = _tmp10_;
		_tmp12_ = vala_ccode_identifier_new (_tmp11_);
		_tmp13_ = (ValaCCodeExpression*) _tmp12_;
		_g_free0 (_tmp11_);
		_g_free0 (_tmp9_);
		_g_free0 (_tmp7_);
		result = _tmp13_;
		return result;
	}
	if (instance != NULL) {
		gboolean _tmp14_;
		gboolean _tmp15_;
		ValaCCodeFunctionCall* _tmp38_;
		ValaCCodeExpression* _tmp39_;
		_tmp14_ = vala_symbol_get_external_package ((ValaSymbol*) iface);
		_tmp15_ = _tmp14_;
		if (_tmp15_) {
			ValaCCodeIdentifier* _tmp16_;
			ValaCCodeIdentifier* _tmp17_;
			ValaCCodeFunctionCall* _tmp18_;
			ValaCCodeFunctionCall* _tmp19_;
			ValaCCodeExpression* _tmp20_;
			ValaCCodeFunctionCall* _tmp21_;
			gchar* _tmp22_;
			gchar* _tmp23_;
			ValaCCodeIdentifier* _tmp24_;
			ValaCCodeIdentifier* _tmp25_;
			ValaCCodeFunctionCall* _tmp26_;
			gchar* _tmp27_;
			gchar* _tmp28_;
			ValaCCodeIdentifier* _tmp29_;
			ValaCCodeIdentifier* _tmp30_;
			_tmp16_ = vala_ccode_identifier_new ("G_TYPE_INSTANCE_GET_INTERFACE");
			_tmp17_ = _tmp16_;
			_tmp18_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp17_);
			_vala_ccode_node_unref0 (call);
			call = _tmp18_;
			_vala_ccode_node_unref0 (_tmp17_);
			_tmp19_ = call;
			_tmp20_ = vala_get_cvalue_ (instance);
			vala_ccode_function_call_add_argument (_tmp19_, _tmp20_);
			_tmp21_ = call;
			_tmp22_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_ccode_identifier_new (_tmp23_);
			_tmp25_ = _tmp24_;
			vala_ccode_function_call_add_argument (_tmp21_, (ValaCCodeExpression*) _tmp25_);
			_vala_ccode_node_unref0 (_tmp25_);
			_g_free0 (_tmp23_);
			_tmp26_ = call;
			_tmp27_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
			_tmp28_ = _tmp27_;
			_tmp29_ = vala_ccode_identifier_new (_tmp28_);
			_tmp30_ = _tmp29_;
			vala_ccode_function_call_add_argument (_tmp26_, (ValaCCodeExpression*) _tmp30_);
			_vala_ccode_node_unref0 (_tmp30_);
			_g_free0 (_tmp28_);
		} else {
			gchar* _tmp31_;
			gchar* _tmp32_;
			ValaCCodeIdentifier* _tmp33_;
			ValaCCodeIdentifier* _tmp34_;
			ValaCCodeFunctionCall* _tmp35_;
			ValaCCodeFunctionCall* _tmp36_;
			ValaCCodeExpression* _tmp37_;
			_tmp31_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) iface);
			_tmp32_ = _tmp31_;
			_tmp33_ = vala_ccode_identifier_new (_tmp32_);
			_tmp34_ = _tmp33_;
			_tmp35_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp34_);
			_vala_ccode_node_unref0 (call);
			call = _tmp35_;
			_vala_ccode_node_unref0 (_tmp34_);
			_g_free0 (_tmp32_);
			_tmp36_ = call;
			_tmp37_ = vala_get_cvalue_ (instance);
			vala_ccode_function_call_add_argument (_tmp36_, _tmp37_);
		}
		_tmp38_ = call;
		_tmp39_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp38_);
		_vala_ccode_node_unref0 (cast);
		cast = _tmp39_;
	} else {
		ValaDataType* _tmp40_;
		_tmp40_ = vala_ccode_base_module_get_this_type (self);
		if (_tmp40_ != NULL) {
			gboolean _tmp41_;
			gboolean _tmp42_;
			ValaCCodeFunctionCall* _tmp67_;
			ValaCCodeExpression* _tmp68_;
			_tmp41_ = vala_symbol_get_external_package ((ValaSymbol*) iface);
			_tmp42_ = _tmp41_;
			if (_tmp42_) {
				ValaCCodeIdentifier* _tmp43_;
				ValaCCodeIdentifier* _tmp44_;
				ValaCCodeFunctionCall* _tmp45_;
				ValaCCodeFunctionCall* _tmp46_;
				ValaCCodeExpression* _tmp47_;
				ValaCCodeExpression* _tmp48_;
				ValaCCodeFunctionCall* _tmp49_;
				gchar* _tmp50_;
				gchar* _tmp51_;
				ValaCCodeIdentifier* _tmp52_;
				ValaCCodeIdentifier* _tmp53_;
				ValaCCodeFunctionCall* _tmp54_;
				gchar* _tmp55_;
				gchar* _tmp56_;
				ValaCCodeIdentifier* _tmp57_;
				ValaCCodeIdentifier* _tmp58_;
				_tmp43_ = vala_ccode_identifier_new ("G_TYPE_INSTANCE_GET_INTERFACE");
				_tmp44_ = _tmp43_;
				_tmp45_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp44_);
				_vala_ccode_node_unref0 (call);
				call = _tmp45_;
				_vala_ccode_node_unref0 (_tmp44_);
				_tmp46_ = call;
				_tmp47_ = vala_ccode_base_module_get_this_cexpression (self);
				_tmp48_ = _tmp47_;
				vala_ccode_function_call_add_argument (_tmp46_, _tmp48_);
				_vala_ccode_node_unref0 (_tmp48_);
				_tmp49_ = call;
				_tmp50_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
				_tmp51_ = _tmp50_;
				_tmp52_ = vala_ccode_identifier_new (_tmp51_);
				_tmp53_ = _tmp52_;
				vala_ccode_function_call_add_argument (_tmp49_, (ValaCCodeExpression*) _tmp53_);
				_vala_ccode_node_unref0 (_tmp53_);
				_g_free0 (_tmp51_);
				_tmp54_ = call;
				_tmp55_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
				_tmp56_ = _tmp55_;
				_tmp57_ = vala_ccode_identifier_new (_tmp56_);
				_tmp58_ = _tmp57_;
				vala_ccode_function_call_add_argument (_tmp54_, (ValaCCodeExpression*) _tmp58_);
				_vala_ccode_node_unref0 (_tmp58_);
				_g_free0 (_tmp56_);
			} else {
				gchar* _tmp59_;
				gchar* _tmp60_;
				ValaCCodeIdentifier* _tmp61_;
				ValaCCodeIdentifier* _tmp62_;
				ValaCCodeFunctionCall* _tmp63_;
				ValaCCodeFunctionCall* _tmp64_;
				ValaCCodeExpression* _tmp65_;
				ValaCCodeExpression* _tmp66_;
				_tmp59_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) iface);
				_tmp60_ = _tmp59_;
				_tmp61_ = vala_ccode_identifier_new (_tmp60_);
				_tmp62_ = _tmp61_;
				_tmp63_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp62_);
				_vala_ccode_node_unref0 (call);
				call = _tmp63_;
				_vala_ccode_node_unref0 (_tmp62_);
				_g_free0 (_tmp60_);
				_tmp64_ = call;
				_tmp65_ = vala_ccode_base_module_get_this_cexpression (self);
				_tmp66_ = _tmp65_;
				vala_ccode_function_call_add_argument (_tmp64_, _tmp66_);
				_vala_ccode_node_unref0 (_tmp66_);
			}
			_tmp67_ = call;
			_tmp68_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp67_);
			_vala_ccode_node_unref0 (cast);
			cast = _tmp68_;
		} else {
			vala_report_error (NULL, "internal: missing instance");
			_vala_ccode_node_unref0 (cast);
			cast = NULL;
			g_assert_not_reached ();
		}
	}
	result = cast;
	_vala_ccode_node_unref0 (call);
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_inner_error_cexpression (ValaCCodeBaseModule* self)
{
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeExpression* _tmp4_;
	ValaCCodeExpression* _tmp5_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_current_inner_error_id (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("_inner_error%d_", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_base_module_get_cexpression (self, _tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	result = _tmp5_;
	return result;
}

static gchar
string_get (const gchar* self,
            glong index)
{
	gchar _tmp0_;
	gchar result;
	g_return_val_if_fail (self != NULL, '\0');
	_tmp0_ = ((gchar*) self)[index];
	result = _tmp0_;
	return result;
}

gchar*
vala_ccode_base_module_get_local_cname (ValaCCodeBaseModule* self,
                                        ValaLocalVariable* local)
{
	gchar* cname = NULL;
	const gchar* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	const gchar* _tmp3_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (local != NULL, NULL);
	_tmp0_ = vala_symbol_get_name ((ValaSymbol*) local);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_variable_cname (self, _tmp1_);
	cname = _tmp2_;
	_tmp3_ = cname;
	if (g_ascii_isdigit (string_get (_tmp3_, (glong) 0))) {
		const gchar* _tmp4_;
		gchar* _tmp5_;
		_tmp4_ = cname;
		_tmp5_ = g_strdup_printf ("_%s_", _tmp4_);
		_g_free0 (cname);
		cname = _tmp5_;
	}
	if (vala_ccode_base_module_is_in_coroutine (self)) {
		gint clash_index = 0;
		ValaCCodeBaseModuleEmitContext* _tmp6_;
		ValaMap* _tmp7_;
		gpointer _tmp8_;
		_tmp6_ = self->emit_context;
		_tmp7_ = _tmp6_->closure_variable_clash_map;
		_tmp8_ = vala_map_get (_tmp7_, local);
		clash_index = (gint) ((gintptr) _tmp8_);
		if (clash_index > 0) {
			const gchar* _tmp9_;
			gchar* _tmp10_;
			_tmp9_ = cname;
			_tmp10_ = g_strdup_printf ("_vala%d_%s", clash_index, _tmp9_);
			_g_free0 (cname);
			cname = _tmp10_;
		}
	}
	result = cname;
	return result;
}

gchar*
vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self,
                                           const gchar* name)
{
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	if (string_get (name, (glong) 0) == '.') {
		ValaMap* _tmp1_;
		ValaMap* _tmp2_;
		ValaMap* _tmp11_;
		ValaMap* _tmp12_;
		gpointer _tmp13_;
		if (g_strcmp0 (name, ".result") == 0) {
			gchar* _tmp0_;
			_tmp0_ = g_strdup ("result");
			result = _tmp0_;
			return result;
		}
		_tmp1_ = vala_ccode_base_module_get_variable_name_map (self);
		_tmp2_ = _tmp1_;
		if (!vala_map_contains (_tmp2_, name)) {
			ValaMap* _tmp3_;
			ValaMap* _tmp4_;
			gint _tmp5_;
			gint _tmp6_;
			gchar* _tmp7_;
			gchar* _tmp8_;
			gint _tmp9_;
			gint _tmp10_;
			_tmp3_ = vala_ccode_base_module_get_variable_name_map (self);
			_tmp4_ = _tmp3_;
			_tmp5_ = vala_ccode_base_module_get_next_temp_var_id (self);
			_tmp6_ = _tmp5_;
			_tmp7_ = g_strdup_printf ("_tmp%d_", _tmp6_);
			_tmp8_ = _tmp7_;
			vala_map_set (_tmp4_, name, _tmp8_);
			_g_free0 (_tmp8_);
			_tmp9_ = vala_ccode_base_module_get_next_temp_var_id (self);
			_tmp10_ = _tmp9_;
			vala_ccode_base_module_set_next_temp_var_id (self, _tmp10_ + 1);
		}
		_tmp11_ = vala_ccode_base_module_get_variable_name_map (self);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_map_get (_tmp12_, name);
		result = (gchar*) _tmp13_;
		return result;
	} else {
		gboolean _tmp14_ = FALSE;
		ValaSet* _tmp15_;
		_tmp15_ = vala_ccode_base_module_reserved_identifiers;
		if (vala_collection_contains ((ValaCollection*) _tmp15_, name)) {
			_tmp14_ = TRUE;
		} else {
			ValaSet* _tmp16_;
			_tmp16_ = vala_ccode_base_module_reserved_vala_identifiers;
			_tmp14_ = vala_collection_contains ((ValaCollection*) _tmp16_, name);
		}
		if (_tmp14_) {
			gchar* _tmp17_;
			_tmp17_ = g_strdup_printf ("_%s_", name);
			result = _tmp17_;
			return result;
		} else {
			gchar* _tmp18_;
			_tmp18_ = g_strdup (name);
			result = _tmp18_;
			return result;
		}
	}
}

gboolean
vala_ccode_base_module_is_simple_struct_creation (ValaCCodeBaseModule* self,
                                                  ValaVariable* variable,
                                                  ValaExpression* expr)
{
	ValaStruct* st = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	ValaObjectCreationExpression* creation = NULL;
	ValaObjectCreationExpression* _tmp4_;
	gboolean _tmp5_ = FALSE;
	gboolean _tmp6_ = FALSE;
	gboolean _tmp7_ = FALSE;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	ValaObjectCreationExpression* _tmp10_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (variable != NULL, FALSE);
	g_return_val_if_fail (expr != NULL, FALSE);
	_tmp0_ = vala_variable_get_variable_type (variable);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
	_tmp3_ = _tmp2_;
	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp3_) : NULL;
	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_OBJECT_CREATION_EXPRESSION) ? ((ValaObjectCreationExpression*) expr) : NULL);
	creation = _tmp4_;
	_tmp10_ = creation;
	if (_tmp10_ != NULL) {
		ValaStruct* _tmp11_;
		_tmp11_ = st;
		_tmp9_ = _tmp11_ != NULL;
	} else {
		_tmp9_ = FALSE;
	}
	if (_tmp9_) {
		gboolean _tmp12_ = FALSE;
		ValaStruct* _tmp13_;
		_tmp13_ = st;
		if (!vala_struct_is_simple_type (_tmp13_)) {
			_tmp12_ = TRUE;
		} else {
			ValaStruct* _tmp14_;
			gchar* _tmp15_;
			gchar* _tmp16_;
			_tmp14_ = st;
			_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
			_tmp16_ = _tmp15_;
			_tmp12_ = g_strcmp0 (_tmp16_, "va_list") == 0;
			_g_free0 (_tmp16_);
		}
		_tmp8_ = _tmp12_;
	} else {
		_tmp8_ = FALSE;
	}
	if (_tmp8_) {
		ValaDataType* _tmp17_;
		ValaDataType* _tmp18_;
		gboolean _tmp19_;
		gboolean _tmp20_;
		_tmp17_ = vala_variable_get_variable_type (variable);
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_data_type_get_nullable (_tmp18_);
		_tmp20_ = _tmp19_;
		_tmp7_ = !_tmp20_;
	} else {
		_tmp7_ = FALSE;
	}
	if (_tmp7_) {
		ValaDataType* _tmp21_;
		ValaDataType* _tmp22_;
		ValaTypeSymbol* _tmp23_;
		ValaTypeSymbol* _tmp24_;
		ValaStruct* _tmp25_;
		_tmp21_ = vala_variable_get_variable_type (variable);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_data_type_get_type_symbol (_tmp22_);
		_tmp24_ = _tmp23_;
		_tmp25_ = self->gvalue_type;
		_tmp6_ = _tmp24_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	} else {
		_tmp6_ = FALSE;
	}
	if (_tmp6_) {
		ValaObjectCreationExpression* _tmp26_;
		ValaList* _tmp27_;
		gint _tmp28_;
		gint _tmp29_;
		_tmp26_ = creation;
		_tmp27_ = vala_object_creation_expression_get_object_initializer (_tmp26_);
		_tmp28_ = vala_collection_get_size ((ValaCollection*) _tmp27_);
		_tmp29_ = _tmp28_;
		_tmp5_ = _tmp29_ == 0;
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		result = TRUE;
		_vala_code_node_unref0 (creation);
		return result;
	} else {
		result = FALSE;
		_vala_code_node_unref0 (creation);
		return result;
	}
}

static gboolean
vala_ccode_base_module_is_foreach_element_variable (ValaLocalVariable* local)
{
	ValaSymbol* block = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	gboolean result;
	g_return_val_if_fail (local != NULL, FALSE);
	_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) local);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	block = _tmp2_;
	_tmp3_ = block;
	if (_tmp3_ != NULL) {
		ValaForeachStatement* stmt = NULL;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaForeachStatement* _tmp7_;
		gboolean _tmp8_ = FALSE;
		gboolean _tmp9_ = FALSE;
		ValaForeachStatement* _tmp10_;
		_tmp4_ = block;
		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_FOREACH_STATEMENT) ? ((ValaForeachStatement*) _tmp6_) : NULL);
		stmt = _tmp7_;
		_tmp10_ = stmt;
		if (_tmp10_ != NULL) {
			ValaForeachStatement* _tmp11_;
			gboolean _tmp12_;
			gboolean _tmp13_;
			_tmp11_ = stmt;
			_tmp12_ = vala_foreach_statement_get_use_iterator (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp9_ = !_tmp13_;
		} else {
			_tmp9_ = FALSE;
		}
		if (_tmp9_) {
			ValaForeachStatement* _tmp14_;
			ValaLocalVariable* _tmp15_;
			ValaLocalVariable* _tmp16_;
			_tmp14_ = stmt;
			_tmp15_ = vala_foreach_statement_get_element_variable (_tmp14_);
			_tmp16_ = _tmp15_;
			_tmp8_ = _tmp16_ == local;
		} else {
			_tmp8_ = FALSE;
		}
		if (_tmp8_) {
			result = TRUE;
			_vala_code_node_unref0 (stmt);
			_vala_code_node_unref0 (block);
			return result;
		}
		_vala_code_node_unref0 (stmt);
	}
	result = FALSE;
	_vala_code_node_unref0 (block);
	return result;
}

static void
vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* base,
                                                  ValaLocalVariable* local)
{
	ValaCCodeBaseModule * self;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaCCodeFile* _tmp2_;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_;
	gboolean _tmp5_;
	gboolean declared = FALSE;
	ValaExpression* _tmp73_;
	ValaExpression* _tmp74_;
	ValaCCodeExpression* rhs = NULL;
	gboolean _tmp79_ = FALSE;
	ValaExpression* _tmp80_;
	ValaExpression* _tmp81_;
	ValaCCodeExpression* _tmp172_;
	gboolean _tmp181_ = FALSE;
	ValaExpression* _tmp182_;
	ValaExpression* _tmp183_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (local != NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) local);
	_tmp1_ = _tmp0_;
	_tmp2_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
	_tmp4_ = vala_local_variable_get_captured (local);
	_tmp5_ = _tmp4_;
	if (!_tmp5_) {
		_tmp3_ = TRUE;
	} else {
		_tmp3_ = vala_ccode_base_module_is_foreach_element_variable (local);
	}
	declared = _tmp3_;
	if (declared) {
		if (vala_ccode_base_module_is_in_coroutine (self)) {
			gint count = 0;
			ValaCCodeBaseModuleEmitContext* _tmp6_;
			ValaMap* _tmp7_;
			const gchar* _tmp8_;
			const gchar* _tmp9_;
			gpointer _tmp10_;
			ValaCCodeBaseModuleEmitContext* _tmp13_;
			ValaMap* _tmp14_;
			const gchar* _tmp15_;
			const gchar* _tmp16_;
			ValaCCodeStruct* _tmp17_;
			ValaDataType* _tmp18_;
			ValaDataType* _tmp19_;
			gchar* _tmp20_;
			gchar* _tmp21_;
			gchar* _tmp22_;
			gchar* _tmp23_;
			ValaDataType* _tmp24_;
			ValaDataType* _tmp25_;
			ValaCCodeDeclaratorSuffix* _tmp26_;
			ValaCCodeDeclaratorSuffix* _tmp27_;
			_tmp6_ = self->emit_context;
			_tmp7_ = _tmp6_->closure_variable_count_map;
			_tmp8_ = vala_symbol_get_name ((ValaSymbol*) local);
			_tmp9_ = _tmp8_;
			_tmp10_ = vala_map_get (_tmp7_, _tmp9_);
			count = (gint) ((gintptr) _tmp10_);
			if (count > 0) {
				ValaCCodeBaseModuleEmitContext* _tmp11_;
				ValaMap* _tmp12_;
				_tmp11_ = self->emit_context;
				_tmp12_ = _tmp11_->closure_variable_clash_map;
				vala_map_set (_tmp12_, local, (gpointer) ((gintptr) count));
			}
			_tmp13_ = self->emit_context;
			_tmp14_ = _tmp13_->closure_variable_count_map;
			_tmp15_ = vala_symbol_get_name ((ValaSymbol*) local);
			_tmp16_ = _tmp15_;
			vala_map_set (_tmp14_, _tmp16_, (gpointer) ((gintptr) (count + 1)));
			_tmp17_ = self->closure_struct;
			_tmp18_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp19_ = _tmp18_;
			_tmp20_ = vala_get_ccode_name ((ValaCodeNode*) _tmp19_);
			_tmp21_ = _tmp20_;
			_tmp22_ = vala_ccode_base_module_get_local_cname (self, local);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp25_);
			_tmp27_ = _tmp26_;
			vala_ccode_struct_add_field (_tmp17_, _tmp21_, _tmp23_, 0, _tmp27_);
			_vala_ccode_declarator_suffix_unref0 (_tmp27_);
			_g_free0 (_tmp23_);
			_g_free0 (_tmp21_);
		} else {
			ValaCCodeVariableDeclarator* cvar = NULL;
			gchar* _tmp28_;
			gchar* _tmp29_;
			ValaDataType* _tmp30_;
			ValaDataType* _tmp31_;
			ValaCCodeDeclaratorSuffix* _tmp32_;
			ValaCCodeDeclaratorSuffix* _tmp33_;
			ValaCCodeVariableDeclarator* _tmp34_;
			ValaCCodeVariableDeclarator* _tmp35_;
			ValaCCodeExpression* size = NULL;
			ValaCCodeExpression* _tmp36_ = NULL;
			gboolean _tmp37_;
			ValaCCodeFunction* _tmp66_;
			ValaCCodeFunction* _tmp67_;
			ValaDataType* _tmp68_;
			ValaDataType* _tmp69_;
			gchar* _tmp70_;
			gchar* _tmp71_;
			ValaCCodeVariableDeclarator* _tmp72_;
			_tmp28_ = vala_ccode_base_module_get_local_cname (self, local);
			_tmp29_ = _tmp28_;
			_tmp30_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp31_ = _tmp30_;
			_tmp32_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp31_);
			_tmp33_ = _tmp32_;
			_tmp34_ = vala_ccode_variable_declarator_new (_tmp29_, NULL, _tmp33_);
			_tmp35_ = _tmp34_;
			_vala_ccode_declarator_suffix_unref0 (_tmp33_);
			_g_free0 (_tmp29_);
			cvar = _tmp35_;
			size = NULL;
			_tmp37_ = vala_ccode_base_module_requires_memset_init (self, (ValaVariable*) local, &_tmp36_);
			_vala_ccode_node_unref0 (size);
			size = _tmp36_;
			if (!_tmp37_) {
				ValaCCodeVariableDeclarator* _tmp38_;
				ValaDataType* _tmp39_;
				ValaDataType* _tmp40_;
				ValaCCodeExpression* _tmp41_;
				ValaCCodeExpression* _tmp42_;
				ValaCCodeVariableDeclarator* _tmp43_;
				_tmp38_ = cvar;
				_tmp39_ = vala_variable_get_variable_type ((ValaVariable*) local);
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_ccode_base_module_default_value_for_type (self, _tmp40_, TRUE, FALSE);
				_tmp42_ = _tmp41_;
				vala_ccode_variable_declarator_set_initializer (_tmp38_, _tmp42_);
				_vala_ccode_node_unref0 (_tmp42_);
				_tmp43_ = cvar;
				vala_ccode_variable_declarator_set_init0 (_tmp43_, TRUE);
			} else {
				gboolean _tmp44_ = FALSE;
				ValaCCodeExpression* _tmp45_;
				_tmp45_ = size;
				if (_tmp45_ != NULL) {
					ValaExpression* _tmp46_;
					ValaExpression* _tmp47_;
					_tmp46_ = vala_variable_get_initializer ((ValaVariable*) local);
					_tmp47_ = _tmp46_;
					_tmp44_ = _tmp47_ == NULL;
				} else {
					_tmp44_ = FALSE;
				}
				if (_tmp44_) {
					ValaCCodeFile* _tmp48_;
					ValaCCodeFunctionCall* memset_call = NULL;
					ValaCCodeIdentifier* _tmp49_;
					ValaCCodeIdentifier* _tmp50_;
					ValaCCodeFunctionCall* _tmp51_;
					ValaCCodeFunctionCall* _tmp52_;
					ValaCCodeFunctionCall* _tmp53_;
					const gchar* _tmp54_;
					const gchar* _tmp55_;
					ValaCCodeExpression* _tmp56_;
					ValaCCodeExpression* _tmp57_;
					ValaCCodeFunctionCall* _tmp58_;
					ValaCCodeConstant* _tmp59_;
					ValaCCodeConstant* _tmp60_;
					ValaCCodeFunctionCall* _tmp61_;
					ValaCCodeExpression* _tmp62_;
					ValaCCodeFunction* _tmp63_;
					ValaCCodeFunction* _tmp64_;
					ValaCCodeFunctionCall* _tmp65_;
					_tmp48_ = self->cfile;
					vala_ccode_file_add_include (_tmp48_, "string.h", FALSE);
					_tmp49_ = vala_ccode_identifier_new ("memset");
					_tmp50_ = _tmp49_;
					_tmp51_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp50_);
					_tmp52_ = _tmp51_;
					_vala_ccode_node_unref0 (_tmp50_);
					memset_call = _tmp52_;
					_tmp53_ = memset_call;
					_tmp54_ = vala_symbol_get_name ((ValaSymbol*) local);
					_tmp55_ = _tmp54_;
					_tmp56_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp55_);
					_tmp57_ = _tmp56_;
					vala_ccode_function_call_add_argument (_tmp53_, _tmp57_);
					_vala_ccode_node_unref0 (_tmp57_);
					_tmp58_ = memset_call;
					_tmp59_ = vala_ccode_constant_new ("0");
					_tmp60_ = _tmp59_;
					vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp60_);
					_vala_ccode_node_unref0 (_tmp60_);
					_tmp61_ = memset_call;
					_tmp62_ = size;
					vala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
					_tmp63_ = vala_ccode_base_module_get_ccode (self);
					_tmp64_ = _tmp63_;
					_tmp65_ = memset_call;
					vala_ccode_function_add_expression (_tmp64_, (ValaCCodeExpression*) _tmp65_);
					_vala_ccode_node_unref0 (memset_call);
				}
			}
			_tmp66_ = vala_ccode_base_module_get_ccode (self);
			_tmp67_ = _tmp66_;
			_tmp68_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp69_ = _tmp68_;
			_tmp70_ = vala_get_ccode_name ((ValaCodeNode*) _tmp69_);
			_tmp71_ = _tmp70_;
			_tmp72_ = cvar;
			vala_ccode_function_add_declaration (_tmp67_, _tmp71_, (ValaCCodeDeclarator*) _tmp72_, 0);
			_g_free0 (_tmp71_);
			_vala_ccode_node_unref0 (size);
			_vala_ccode_node_unref0 (cvar);
		}
	}
	_tmp73_ = vala_variable_get_initializer ((ValaVariable*) local);
	_tmp74_ = _tmp73_;
	if (_tmp74_ != NULL) {
		ValaExpression* _tmp75_;
		ValaExpression* _tmp76_;
		ValaExpression* _tmp77_;
		ValaExpression* _tmp78_;
		_tmp75_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp76_ = _tmp75_;
		vala_code_node_emit ((ValaCodeNode*) _tmp76_, (ValaCodeGenerator*) self);
		_tmp77_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp78_ = _tmp77_;
		vala_code_visitor_visit_end_full_expression ((ValaCodeVisitor*) self, _tmp78_);
	}
	rhs = NULL;
	_tmp80_ = vala_variable_get_initializer ((ValaVariable*) local);
	_tmp81_ = _tmp80_;
	if (_tmp81_ != NULL) {
		ValaExpression* _tmp82_;
		ValaExpression* _tmp83_;
		ValaCCodeExpression* _tmp84_;
		_tmp82_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp83_ = _tmp82_;
		_tmp84_ = vala_get_cvalue (_tmp83_);
		_tmp79_ = _tmp84_ != NULL;
	} else {
		_tmp79_ = FALSE;
	}
	if (_tmp79_) {
		ValaExpression* _tmp85_;
		ValaExpression* _tmp86_;
		ValaCCodeExpression* _tmp87_;
		ValaCCodeExpression* _tmp88_;
		_tmp85_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp86_ = _tmp85_;
		_tmp87_ = vala_get_cvalue (_tmp86_);
		_tmp88_ = _vala_ccode_node_ref0 (_tmp87_);
		_vala_ccode_node_unref0 (rhs);
		rhs = _tmp88_;
	}
	if (declared) {
		ValaDataType* _tmp89_;
		ValaDataType* _tmp90_;
		_tmp89_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp90_ = _tmp89_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp90_, VALA_TYPE_ARRAY_TYPE)) {
			ValaArrayType* array_type = NULL;
			ValaDataType* _tmp91_;
			ValaDataType* _tmp92_;
			ValaArrayType* _tmp93_;
			ValaArrayType* _tmp94_;
			gboolean _tmp95_;
			gboolean _tmp96_;
			_tmp91_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp92_ = _tmp91_;
			_tmp93_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array_type = _tmp93_;
			_tmp94_ = array_type;
			_tmp95_ = vala_array_type_get_fixed_length (_tmp94_);
			_tmp96_ = _tmp95_;
			if (!_tmp96_) {
				ValaArrayType* _tmp117_;
				gint _tmp118_;
				gint _tmp119_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp97_ = FALSE;
						_tmp97_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp99_;
							gint _tmp100_;
							gint _tmp101_;
							ValaLocalVariable* len_var = NULL;
							ValaArrayType* _tmp102_;
							ValaDataType* _tmp103_;
							ValaDataType* _tmp104_;
							ValaDataType* _tmp105_;
							ValaDataType* _tmp106_;
							gchar* _tmp107_;
							gchar* _tmp108_;
							gchar* _tmp109_;
							gchar* _tmp110_;
							ValaLocalVariable* _tmp111_;
							ValaLocalVariable* _tmp112_;
							ValaLocalVariable* _tmp113_;
							ValaExpression* _tmp114_;
							ValaExpression* _tmp115_;
							ValaLocalVariable* _tmp116_;
							if (!_tmp97_) {
								gint _tmp98_;
								_tmp98_ = dim;
								dim = _tmp98_ + 1;
							}
							_tmp97_ = FALSE;
							_tmp99_ = array_type;
							_tmp100_ = vala_array_type_get_rank (_tmp99_);
							_tmp101_ = _tmp100_;
							if (!(dim <= _tmp101_)) {
								break;
							}
							_tmp102_ = array_type;
							_tmp103_ = vala_array_type_get_length_type (_tmp102_);
							_tmp104_ = _tmp103_;
							_tmp105_ = vala_data_type_copy (_tmp104_);
							_tmp106_ = _tmp105_;
							_tmp107_ = vala_ccode_base_module_get_local_cname (self, local);
							_tmp108_ = _tmp107_;
							_tmp109_ = vala_ccode_base_module_get_array_length_cname (self, _tmp108_, dim);
							_tmp110_ = _tmp109_;
							_tmp111_ = vala_local_variable_new (_tmp106_, _tmp110_, NULL, NULL);
							_tmp112_ = _tmp111_;
							_g_free0 (_tmp110_);
							_g_free0 (_tmp108_);
							_vala_code_node_unref0 (_tmp106_);
							len_var = _tmp112_;
							_tmp113_ = len_var;
							_tmp114_ = vala_variable_get_initializer ((ValaVariable*) local);
							_tmp115_ = _tmp114_;
							vala_local_variable_set_init (_tmp113_, _tmp115_ == NULL);
							_tmp116_ = len_var;
							vala_ccode_base_module_emit_temp_var (self, _tmp116_, FALSE);
							_vala_code_node_unref0 (len_var);
						}
					}
				}
				_tmp117_ = array_type;
				_tmp118_ = vala_array_type_get_rank (_tmp117_);
				_tmp119_ = _tmp118_;
				if (_tmp119_ == 1) {
					ValaLocalVariable* size_var = NULL;
					ValaArrayType* _tmp120_;
					ValaDataType* _tmp121_;
					ValaDataType* _tmp122_;
					ValaDataType* _tmp123_;
					ValaDataType* _tmp124_;
					gchar* _tmp125_;
					gchar* _tmp126_;
					gchar* _tmp127_;
					gchar* _tmp128_;
					ValaLocalVariable* _tmp129_;
					ValaLocalVariable* _tmp130_;
					ValaLocalVariable* _tmp131_;
					ValaExpression* _tmp132_;
					ValaExpression* _tmp133_;
					ValaLocalVariable* _tmp134_;
					_tmp120_ = array_type;
					_tmp121_ = vala_array_type_get_length_type (_tmp120_);
					_tmp122_ = _tmp121_;
					_tmp123_ = vala_data_type_copy (_tmp122_);
					_tmp124_ = _tmp123_;
					_tmp125_ = vala_ccode_base_module_get_local_cname (self, local);
					_tmp126_ = _tmp125_;
					_tmp127_ = vala_ccode_base_module_get_array_size_cname (self, _tmp126_);
					_tmp128_ = _tmp127_;
					_tmp129_ = vala_local_variable_new (_tmp124_, _tmp128_, NULL, NULL);
					_tmp130_ = _tmp129_;
					_g_free0 (_tmp128_);
					_g_free0 (_tmp126_);
					_vala_code_node_unref0 (_tmp124_);
					size_var = _tmp130_;
					_tmp131_ = size_var;
					_tmp132_ = vala_variable_get_initializer ((ValaVariable*) local);
					_tmp133_ = _tmp132_;
					vala_local_variable_set_init (_tmp131_, _tmp133_ == NULL);
					_tmp134_ = size_var;
					vala_ccode_base_module_emit_temp_var (self, _tmp134_, FALSE);
					_vala_code_node_unref0 (size_var);
				}
			}
			_vala_code_node_unref0 (array_type);
		} else {
			ValaDataType* _tmp135_;
			ValaDataType* _tmp136_;
			_tmp135_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp136_ = _tmp135_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp136_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaDelegateType* deleg_type = NULL;
				ValaDataType* _tmp137_;
				ValaDataType* _tmp138_;
				ValaDelegateType* _tmp139_;
				ValaDelegateType* _tmp140_;
				ValaDelegate* _tmp141_;
				ValaDelegate* _tmp142_;
				gboolean _tmp143_;
				gboolean _tmp144_;
				_tmp137_ = vala_variable_get_variable_type ((ValaVariable*) local);
				_tmp138_ = _tmp137_;
				_tmp139_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp138_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				deleg_type = _tmp139_;
				_tmp140_ = deleg_type;
				_tmp141_ = vala_delegate_type_get_delegate_symbol (_tmp140_);
				_tmp142_ = _tmp141_;
				_tmp143_ = vala_delegate_get_has_target (_tmp142_);
				_tmp144_ = _tmp143_;
				if (_tmp144_) {
					ValaLocalVariable* target_var = NULL;
					ValaDataType* _tmp145_;
					ValaDataType* _tmp146_;
					ValaDataType* _tmp147_;
					gchar* _tmp148_;
					gchar* _tmp149_;
					gchar* _tmp150_;
					gchar* _tmp151_;
					ValaLocalVariable* _tmp152_;
					ValaLocalVariable* _tmp153_;
					ValaLocalVariable* _tmp154_;
					ValaExpression* _tmp155_;
					ValaExpression* _tmp156_;
					ValaLocalVariable* _tmp157_;
					ValaDelegateType* _tmp158_;
					_tmp145_ = self->delegate_target_type;
					_tmp146_ = vala_data_type_copy (_tmp145_);
					_tmp147_ = _tmp146_;
					_tmp148_ = vala_ccode_base_module_get_local_cname (self, local);
					_tmp149_ = _tmp148_;
					_tmp150_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp149_);
					_tmp151_ = _tmp150_;
					_tmp152_ = vala_local_variable_new (_tmp147_, _tmp151_, NULL, NULL);
					_tmp153_ = _tmp152_;
					_g_free0 (_tmp151_);
					_g_free0 (_tmp149_);
					_vala_code_node_unref0 (_tmp147_);
					target_var = _tmp153_;
					_tmp154_ = target_var;
					_tmp155_ = vala_variable_get_initializer ((ValaVariable*) local);
					_tmp156_ = _tmp155_;
					vala_local_variable_set_init (_tmp154_, _tmp156_ == NULL);
					_tmp157_ = target_var;
					vala_ccode_base_module_emit_temp_var (self, _tmp157_, FALSE);
					_tmp158_ = deleg_type;
					if (vala_data_type_is_disposable ((ValaDataType*) _tmp158_)) {
						ValaLocalVariable* target_destroy_notify_var = NULL;
						ValaDelegateType* _tmp159_;
						ValaDataType* _tmp160_;
						ValaDataType* _tmp161_;
						gchar* _tmp162_;
						gchar* _tmp163_;
						gchar* _tmp164_;
						gchar* _tmp165_;
						ValaLocalVariable* _tmp166_;
						ValaLocalVariable* _tmp167_;
						ValaLocalVariable* _tmp168_;
						ValaExpression* _tmp169_;
						ValaExpression* _tmp170_;
						ValaLocalVariable* _tmp171_;
						_tmp159_ = self->delegate_target_destroy_type;
						_tmp160_ = vala_data_type_copy ((ValaDataType*) _tmp159_);
						_tmp161_ = _tmp160_;
						_tmp162_ = vala_ccode_base_module_get_local_cname (self, local);
						_tmp163_ = _tmp162_;
						_tmp164_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp163_);
						_tmp165_ = _tmp164_;
						_tmp166_ = vala_local_variable_new (_tmp161_, _tmp165_, NULL, NULL);
						_tmp167_ = _tmp166_;
						_g_free0 (_tmp165_);
						_g_free0 (_tmp163_);
						_vala_code_node_unref0 (_tmp161_);
						target_destroy_notify_var = _tmp167_;
						_tmp168_ = target_destroy_notify_var;
						_tmp169_ = vala_variable_get_initializer ((ValaVariable*) local);
						_tmp170_ = _tmp169_;
						vala_local_variable_set_init (_tmp168_, _tmp170_ == NULL);
						_tmp171_ = target_destroy_notify_var;
						vala_ccode_base_module_emit_temp_var (self, _tmp171_, FALSE);
						_vala_code_node_unref0 (target_destroy_notify_var);
					}
					_vala_code_node_unref0 (target_var);
				}
				_vala_code_node_unref0 (deleg_type);
			}
		}
	}
	_tmp172_ = rhs;
	if (_tmp172_ != NULL) {
		ValaExpression* _tmp173_;
		ValaExpression* _tmp174_;
		_tmp173_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp174_ = _tmp173_;
		if (!vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) local, _tmp174_)) {
			ValaExpression* _tmp175_;
			ValaExpression* _tmp176_;
			ValaTargetValue* _tmp177_;
			ValaTargetValue* _tmp178_;
			ValaSourceReference* _tmp179_;
			ValaSourceReference* _tmp180_;
			_tmp175_ = vala_variable_get_initializer ((ValaVariable*) local);
			_tmp176_ = _tmp175_;
			_tmp177_ = vala_expression_get_target_value (_tmp176_);
			_tmp178_ = _tmp177_;
			_tmp179_ = vala_code_node_get_source_reference ((ValaCodeNode*) local);
			_tmp180_ = _tmp179_;
			vala_code_generator_store_local ((ValaCodeGenerator*) self, local, _tmp178_, TRUE, _tmp180_);
		}
	}
	_tmp182_ = vala_variable_get_initializer ((ValaVariable*) local);
	_tmp183_ = _tmp182_;
	if (_tmp183_ != NULL) {
		ValaExpression* _tmp184_;
		ValaExpression* _tmp185_;
		gboolean _tmp186_;
		gboolean _tmp187_;
		_tmp184_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp185_ = _tmp184_;
		_tmp186_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp185_);
		_tmp187_ = _tmp186_;
		_tmp181_ = _tmp187_;
	} else {
		_tmp181_ = FALSE;
	}
	if (_tmp181_) {
		ValaExpression* _tmp188_;
		ValaExpression* _tmp189_;
		_tmp188_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp189_ = _tmp188_;
		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp189_, FALSE);
	}
	vala_symbol_set_active ((ValaSymbol*) local, TRUE);
	_vala_ccode_node_unref0 (rhs);
}

/**
 * Create a temporary variable and return lvalue access to it
 */
ValaTargetValue*
vala_ccode_base_module_create_temp_value (ValaCCodeBaseModule* self,
                                          ValaDataType* type,
                                          gboolean init,
                                          ValaCodeNode* node_reference,
                                          gboolean* value_owned)
{
	ValaLocalVariable* local = NULL;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	gint _tmp4_;
	gint _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	ValaSourceReference* _tmp8_;
	ValaSourceReference* _tmp9_;
	ValaLocalVariable* _tmp10_;
	ValaLocalVariable* _tmp11_;
	ValaLocalVariable* _tmp12_;
	ValaArrayType* array_type = NULL;
	ValaLocalVariable* _tmp16_;
	ValaDataType* _tmp17_;
	ValaDataType* _tmp18_;
	ValaArrayType* _tmp19_;
	ValaDelegateType* deleg_type = NULL;
	ValaLocalVariable* _tmp20_;
	ValaDataType* _tmp21_;
	ValaDataType* _tmp22_;
	ValaDelegateType* _tmp23_;
	ValaLocalVariable* _tmp24_;
	ValaArrayType* _tmp25_;
	ValaTargetValue* value = NULL;
	ValaLocalVariable* _tmp83_;
	ValaTargetValue* _tmp84_;
	ValaTargetValue* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (node_reference != NULL, NULL);
	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VOID_TYPE)) {
		ValaSourceReference* _tmp0_;
		ValaSourceReference* _tmp1_;
		_tmp0_ = vala_code_node_get_source_reference (node_reference);
		_tmp1_ = _tmp0_;
		vala_report_error (_tmp1_, "internal: 'void' not supported as variable type");
	}
	_tmp2_ = vala_data_type_copy (type);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_base_module_get_next_temp_var_id (self);
	_tmp5_ = _tmp4_;
	vala_ccode_base_module_set_next_temp_var_id (self, _tmp5_ + 1);
	_tmp6_ = g_strdup_printf ("_tmp%d_", _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_code_node_get_source_reference (node_reference);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_local_variable_new (_tmp3_, _tmp7_, NULL, _tmp9_);
	_tmp11_ = _tmp10_;
	_g_free0 (_tmp7_);
	_vala_code_node_unref0 (_tmp3_);
	local = _tmp11_;
	_tmp12_ = local;
	vala_local_variable_set_init (_tmp12_, init);
	if (value_owned != NULL) {
		ValaLocalVariable* _tmp13_;
		ValaDataType* _tmp14_;
		ValaDataType* _tmp15_;
		_tmp13_ = local;
		_tmp14_ = vala_variable_get_variable_type ((ValaVariable*) _tmp13_);
		_tmp15_ = _tmp14_;
		vala_data_type_set_value_owned (_tmp15_, *value_owned);
	}
	_tmp16_ = local;
	_tmp17_ = vala_variable_get_variable_type ((ValaVariable*) _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp18_) : NULL);
	array_type = _tmp19_;
	_tmp20_ = local;
	_tmp21_ = vala_variable_get_variable_type ((ValaVariable*) _tmp20_);
	_tmp22_ = _tmp21_;
	_tmp23_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp22_) : NULL);
	deleg_type = _tmp23_;
	_tmp24_ = local;
	vala_ccode_base_module_emit_temp_var (self, _tmp24_, FALSE);
	_tmp25_ = array_type;
	if (_tmp25_ != NULL) {
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp26_ = FALSE;
				_tmp26_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp28_;
					gint _tmp29_;
					gint _tmp30_;
					ValaLocalVariable* len_var = NULL;
					ValaArrayType* _tmp31_;
					ValaDataType* _tmp32_;
					ValaDataType* _tmp33_;
					ValaDataType* _tmp34_;
					ValaDataType* _tmp35_;
					ValaLocalVariable* _tmp36_;
					const gchar* _tmp37_;
					const gchar* _tmp38_;
					gchar* _tmp39_;
					gchar* _tmp40_;
					ValaSourceReference* _tmp41_;
					ValaSourceReference* _tmp42_;
					ValaLocalVariable* _tmp43_;
					ValaLocalVariable* _tmp44_;
					ValaLocalVariable* _tmp45_;
					ValaLocalVariable* _tmp46_;
					if (!_tmp26_) {
						gint _tmp27_;
						_tmp27_ = dim;
						dim = _tmp27_ + 1;
					}
					_tmp26_ = FALSE;
					_tmp28_ = array_type;
					_tmp29_ = vala_array_type_get_rank (_tmp28_);
					_tmp30_ = _tmp29_;
					if (!(dim <= _tmp30_)) {
						break;
					}
					_tmp31_ = array_type;
					_tmp32_ = vala_array_type_get_length_type (_tmp31_);
					_tmp33_ = _tmp32_;
					_tmp34_ = vala_data_type_copy (_tmp33_);
					_tmp35_ = _tmp34_;
					_tmp36_ = local;
					_tmp37_ = vala_symbol_get_name ((ValaSymbol*) _tmp36_);
					_tmp38_ = _tmp37_;
					_tmp39_ = vala_ccode_base_module_get_array_length_cname (self, _tmp38_, dim);
					_tmp40_ = _tmp39_;
					_tmp41_ = vala_code_node_get_source_reference (node_reference);
					_tmp42_ = _tmp41_;
					_tmp43_ = vala_local_variable_new (_tmp35_, _tmp40_, NULL, _tmp42_);
					_tmp44_ = _tmp43_;
					_g_free0 (_tmp40_);
					_vala_code_node_unref0 (_tmp35_);
					len_var = _tmp44_;
					_tmp45_ = len_var;
					vala_local_variable_set_init (_tmp45_, init);
					_tmp46_ = len_var;
					vala_ccode_base_module_emit_temp_var (self, _tmp46_, FALSE);
					_vala_code_node_unref0 (len_var);
				}
			}
		}
	} else {
		gboolean _tmp47_ = FALSE;
		ValaDelegateType* _tmp48_;
		_tmp48_ = deleg_type;
		if (_tmp48_ != NULL) {
			ValaDelegateType* _tmp49_;
			ValaDelegate* _tmp50_;
			ValaDelegate* _tmp51_;
			gboolean _tmp52_;
			gboolean _tmp53_;
			_tmp49_ = deleg_type;
			_tmp50_ = vala_delegate_type_get_delegate_symbol (_tmp49_);
			_tmp51_ = _tmp50_;
			_tmp52_ = vala_delegate_get_has_target (_tmp51_);
			_tmp53_ = _tmp52_;
			_tmp47_ = _tmp53_;
		} else {
			_tmp47_ = FALSE;
		}
		if (_tmp47_) {
			ValaLocalVariable* target_var = NULL;
			ValaDataType* _tmp54_;
			ValaDataType* _tmp55_;
			ValaDataType* _tmp56_;
			ValaLocalVariable* _tmp57_;
			const gchar* _tmp58_;
			const gchar* _tmp59_;
			gchar* _tmp60_;
			gchar* _tmp61_;
			ValaSourceReference* _tmp62_;
			ValaSourceReference* _tmp63_;
			ValaLocalVariable* _tmp64_;
			ValaLocalVariable* _tmp65_;
			ValaLocalVariable* _tmp66_;
			ValaLocalVariable* _tmp67_;
			ValaDelegateType* _tmp68_;
			_tmp54_ = self->delegate_target_type;
			_tmp55_ = vala_data_type_copy (_tmp54_);
			_tmp56_ = _tmp55_;
			_tmp57_ = local;
			_tmp58_ = vala_symbol_get_name ((ValaSymbol*) _tmp57_);
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp59_);
			_tmp61_ = _tmp60_;
			_tmp62_ = vala_code_node_get_source_reference (node_reference);
			_tmp63_ = _tmp62_;
			_tmp64_ = vala_local_variable_new (_tmp56_, _tmp61_, NULL, _tmp63_);
			_tmp65_ = _tmp64_;
			_g_free0 (_tmp61_);
			_vala_code_node_unref0 (_tmp56_);
			target_var = _tmp65_;
			_tmp66_ = target_var;
			vala_local_variable_set_init (_tmp66_, init);
			_tmp67_ = target_var;
			vala_ccode_base_module_emit_temp_var (self, _tmp67_, FALSE);
			_tmp68_ = deleg_type;
			if (vala_data_type_is_disposable ((ValaDataType*) _tmp68_)) {
				ValaLocalVariable* target_destroy_notify_var = NULL;
				ValaDelegateType* _tmp69_;
				ValaDataType* _tmp70_;
				ValaDataType* _tmp71_;
				ValaLocalVariable* _tmp72_;
				const gchar* _tmp73_;
				const gchar* _tmp74_;
				gchar* _tmp75_;
				gchar* _tmp76_;
				ValaSourceReference* _tmp77_;
				ValaSourceReference* _tmp78_;
				ValaLocalVariable* _tmp79_;
				ValaLocalVariable* _tmp80_;
				ValaLocalVariable* _tmp81_;
				ValaLocalVariable* _tmp82_;
				_tmp69_ = self->delegate_target_destroy_type;
				_tmp70_ = vala_data_type_copy ((ValaDataType*) _tmp69_);
				_tmp71_ = _tmp70_;
				_tmp72_ = local;
				_tmp73_ = vala_symbol_get_name ((ValaSymbol*) _tmp72_);
				_tmp74_ = _tmp73_;
				_tmp75_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp74_);
				_tmp76_ = _tmp75_;
				_tmp77_ = vala_code_node_get_source_reference (node_reference);
				_tmp78_ = _tmp77_;
				_tmp79_ = vala_local_variable_new (_tmp71_, _tmp76_, NULL, _tmp78_);
				_tmp80_ = _tmp79_;
				_g_free0 (_tmp76_);
				_vala_code_node_unref0 (_tmp71_);
				target_destroy_notify_var = _tmp80_;
				_tmp81_ = target_destroy_notify_var;
				vala_local_variable_set_init (_tmp81_, init);
				_tmp82_ = target_destroy_notify_var;
				vala_ccode_base_module_emit_temp_var (self, _tmp82_, FALSE);
				_vala_code_node_unref0 (target_destroy_notify_var);
			}
			_vala_code_node_unref0 (target_var);
		}
	}
	_tmp83_ = local;
	_tmp84_ = vala_ccode_base_module_get_local_cvalue (self, _tmp83_);
	value = _tmp84_;
	vala_set_array_size_cvalue (value, NULL);
	result = value;
	_vala_code_node_unref0 (deleg_type);
	_vala_code_node_unref0 (array_type);
	_vala_code_node_unref0 (local);
	return result;
}

/**
 * Load a temporary variable returning unowned or owned rvalue access to it, depending on the ownership of the value type.
 */
ValaTargetValue*
vala_ccode_base_module_load_temp_value (ValaCCodeBaseModule* self,
                                        ValaTargetValue* lvalue)
{
	ValaGLibValue* value = NULL;
	ValaGLibValue* _tmp0_;
	ValaDelegateType* deleg_type = NULL;
	ValaGLibValue* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaDelegateType* _tmp4_;
	ValaDelegateType* _tmp5_;
	ValaTargetValue* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (lvalue != NULL, NULL);
	_tmp0_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (lvalue, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	value = _tmp0_;
	_tmp1_ = value;
	_tmp2_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp3_) : NULL);
	deleg_type = _tmp4_;
	_tmp5_ = deleg_type;
	if (_tmp5_ != NULL) {
		ValaDelegateType* _tmp6_;
		ValaDelegate* _tmp7_;
		ValaDelegate* _tmp8_;
		gboolean _tmp9_;
		gboolean _tmp10_;
		_tmp6_ = deleg_type;
		_tmp7_ = vala_delegate_type_get_delegate_symbol (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_delegate_get_has_target (_tmp8_);
		_tmp10_ = _tmp9_;
		if (!_tmp10_) {
			ValaGLibValue* _tmp11_;
			ValaCCodeConstant* _tmp12_;
			ValaGLibValue* _tmp13_;
			_tmp11_ = value;
			_tmp12_ = vala_ccode_constant_new ("NULL");
			_vala_ccode_node_unref0 (_tmp11_->delegate_target_cvalue);
			_tmp11_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp12_;
			_tmp13_ = value;
			G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
		} else {
			ValaDelegateType* _tmp14_;
			_tmp14_ = deleg_type;
			if (!vala_data_type_is_disposable ((ValaDataType*) _tmp14_)) {
				ValaGLibValue* _tmp15_;
				ValaCCodeConstant* _tmp16_;
				ValaGLibValue* _tmp17_;
				_tmp15_ = value;
				_tmp16_ = vala_ccode_constant_new ("NULL");
				_vala_ccode_node_unref0 (_tmp15_->delegate_target_destroy_notify_cvalue);
				_tmp15_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp16_;
				_tmp17_ = value;
				G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
			}
		}
	}
	result = (ValaTargetValue*) value;
	_vala_code_node_unref0 (deleg_type);
	return result;
}

/**
 * Store a value in a temporary variable and return unowned or owned rvalue access to it, depending on the ownership of the given type.
 */
ValaTargetValue*
vala_ccode_base_module_store_temp_value (ValaCCodeBaseModule* self,
                                         ValaTargetValue* initializer,
                                         ValaCodeNode* node_reference,
                                         gboolean* value_owned)
{
	ValaTargetValue* lvalue = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaSourceReference* _tmp3_;
	ValaSourceReference* _tmp4_;
	ValaTargetValue* _tmp5_;
	ValaTargetValue* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (initializer != NULL, NULL);
	g_return_val_if_fail (node_reference != NULL, NULL);
	_tmp0_ = vala_target_value_get_value_type (initializer);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_create_temp_value (self, _tmp1_, FALSE, node_reference, value_owned);
	lvalue = _tmp2_;
	_tmp3_ = vala_code_node_get_source_reference (node_reference);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_store_value (self, lvalue, initializer, _tmp4_);
	_tmp5_ = vala_ccode_base_module_load_temp_value (self, lvalue);
	result = _tmp5_;
	_vala_target_value_unref0 (lvalue);
	return result;
}

static void
vala_ccode_base_module_real_visit_initializer_list (ValaCodeVisitor* base,
                                                    ValaInitializerList* list)
{
	ValaCCodeBaseModule * self;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (list != NULL);
	_tmp0_ = vala_expression_get_target_type ((ValaExpression*) list);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
	_tmp3_ = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT)) {
		ValaStruct* st = NULL;
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaTypeSymbol* _tmp6_;
		ValaTypeSymbol* _tmp7_;
		gboolean _tmp14_ = FALSE;
		gboolean _tmp15_ = FALSE;
		ValaCodeNode* _tmp16_;
		ValaCodeNode* _tmp17_;
		_tmp4_ = vala_expression_get_target_type ((ValaExpression*) list);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_data_type_get_type_symbol (_tmp5_);
		_tmp7_ = _tmp6_;
		st = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_STRUCT, ValaStruct);
		while (TRUE) {
			ValaStruct* _tmp8_;
			ValaStruct* _tmp9_;
			ValaStruct* _tmp10_;
			ValaStruct* _tmp11_;
			ValaStruct* _tmp12_;
			ValaStruct* _tmp13_;
			_tmp8_ = st;
			_tmp9_ = vala_struct_get_base_struct (_tmp8_);
			_tmp10_ = _tmp9_;
			if (!(_tmp10_ != NULL)) {
				break;
			}
			_tmp11_ = st;
			_tmp12_ = vala_struct_get_base_struct (_tmp11_);
			_tmp13_ = _tmp12_;
			st = _tmp13_;
		}
		_tmp16_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
		_tmp17_ = _tmp16_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CONSTANT)) {
			_tmp15_ = TRUE;
		} else {
			ValaCodeNode* _tmp18_;
			ValaCodeNode* _tmp19_;
			_tmp18_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
			_tmp19_ = _tmp18_;
			_tmp15_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_FIELD);
		}
		if (_tmp15_) {
			_tmp14_ = TRUE;
		} else {
			ValaCodeNode* _tmp20_;
			ValaCodeNode* _tmp21_;
			_tmp20_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
			_tmp21_ = _tmp20_;
			_tmp14_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_INITIALIZER_LIST);
		}
		if (_tmp14_) {
			ValaCCodeInitializerList* clist = NULL;
			ValaCCodeInitializerList* _tmp22_;
			ValaIterator* field_it = NULL;
			ValaStruct* _tmp23_;
			ValaList* _tmp24_;
			ValaIterator* _tmp25_;
			gint _tmp87_;
			gint _tmp88_;
			gboolean _tmp92_ = FALSE;
			ValaCodeNode* _tmp93_;
			ValaCodeNode* _tmp94_;
			_tmp22_ = vala_ccode_initializer_list_new ();
			clist = _tmp22_;
			_tmp23_ = st;
			_tmp24_ = vala_struct_get_fields (_tmp23_);
			_tmp25_ = vala_iterable_iterator ((ValaIterable*) _tmp24_);
			field_it = _tmp25_;
			{
				ValaList* _expr_list = NULL;
				ValaList* _tmp26_;
				gint _expr_size = 0;
				ValaList* _tmp27_;
				gint _tmp28_;
				gint _tmp29_;
				gint _expr_index = 0;
				_tmp26_ = vala_initializer_list_get_initializers (list);
				_expr_list = _tmp26_;
				_tmp27_ = _expr_list;
				_tmp28_ = vala_collection_get_size ((ValaCollection*) _tmp27_);
				_tmp29_ = _tmp28_;
				_expr_size = _tmp29_;
				_expr_index = -1;
				while (TRUE) {
					gint _tmp30_;
					gint _tmp31_;
					ValaExpression* expr = NULL;
					ValaList* _tmp32_;
					gpointer _tmp33_;
					ValaField* field = NULL;
					ValaCCodeExpression* cexpr = NULL;
					ValaExpression* _tmp41_;
					ValaCCodeExpression* _tmp42_;
					ValaCCodeExpression* _tmp43_;
					gchar* ctype = NULL;
					ValaField* _tmp44_;
					gchar* _tmp45_;
					const gchar* _tmp46_;
					ValaCCodeInitializerList* _tmp50_;
					ValaCCodeExpression* _tmp51_;
					ValaArrayType* array_type = NULL;
					ValaField* _tmp52_;
					ValaDataType* _tmp53_;
					ValaDataType* _tmp54_;
					ValaArrayType* _tmp55_;
					gboolean _tmp56_ = FALSE;
					gboolean _tmp57_ = FALSE;
					gboolean _tmp58_ = FALSE;
					ValaArrayType* _tmp59_;
					_expr_index = _expr_index + 1;
					_tmp30_ = _expr_index;
					_tmp31_ = _expr_size;
					if (!(_tmp30_ < _tmp31_)) {
						break;
					}
					_tmp32_ = _expr_list;
					_tmp33_ = vala_list_get (_tmp32_, _expr_index);
					expr = (ValaExpression*) _tmp33_;
					field = NULL;
					while (TRUE) {
						ValaField* _tmp34_;
						ValaIterator* _tmp35_;
						ValaIterator* _tmp36_;
						gpointer _tmp37_;
						ValaField* _tmp38_;
						ValaMemberBinding _tmp39_;
						ValaMemberBinding _tmp40_;
						_tmp34_ = field;
						if (!(_tmp34_ == NULL)) {
							break;
						}
						_tmp35_ = field_it;
						vala_iterator_next (_tmp35_);
						_tmp36_ = field_it;
						_tmp37_ = vala_iterator_get (_tmp36_);
						_vala_code_node_unref0 (field);
						field = (ValaField*) _tmp37_;
						_tmp38_ = field;
						_tmp39_ = vala_field_get_binding (_tmp38_);
						_tmp40_ = _tmp39_;
						if (_tmp40_ != VALA_MEMBER_BINDING_INSTANCE) {
							_vala_code_node_unref0 (field);
							field = NULL;
						}
					}
					_tmp41_ = expr;
					_tmp42_ = vala_get_cvalue (_tmp41_);
					_tmp43_ = _vala_ccode_node_ref0 (_tmp42_);
					cexpr = _tmp43_;
					_tmp44_ = field;
					_tmp45_ = vala_get_ccode_type ((ValaCodeNode*) _tmp44_);
					ctype = _tmp45_;
					_tmp46_ = ctype;
					if (_tmp46_ != NULL) {
						ValaCCodeExpression* _tmp47_;
						const gchar* _tmp48_;
						ValaCCodeCastExpression* _tmp49_;
						_tmp47_ = cexpr;
						_tmp48_ = ctype;
						_tmp49_ = vala_ccode_cast_expression_new (_tmp47_, _tmp48_);
						_vala_ccode_node_unref0 (cexpr);
						cexpr = (ValaCCodeExpression*) _tmp49_;
					}
					_tmp50_ = clist;
					_tmp51_ = cexpr;
					vala_ccode_initializer_list_append (_tmp50_, _tmp51_);
					_tmp52_ = field;
					_tmp53_ = vala_variable_get_variable_type ((ValaVariable*) _tmp52_);
					_tmp54_ = _tmp53_;
					_tmp55_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp54_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp54_) : NULL);
					array_type = _tmp55_;
					_tmp59_ = array_type;
					if (_tmp59_ != NULL) {
						ValaArrayType* _tmp60_;
						gboolean _tmp61_;
						gboolean _tmp62_;
						_tmp60_ = array_type;
						_tmp61_ = vala_array_type_get_fixed_length (_tmp60_);
						_tmp62_ = _tmp61_;
						_tmp58_ = !_tmp62_;
					} else {
						_tmp58_ = FALSE;
					}
					if (_tmp58_) {
						ValaField* _tmp63_;
						_tmp63_ = field;
						_tmp57_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp63_);
					} else {
						_tmp57_ = FALSE;
					}
					if (_tmp57_) {
						ValaField* _tmp64_;
						_tmp64_ = field;
						_tmp56_ = !vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp64_);
					} else {
						_tmp56_ = FALSE;
					}
					if (_tmp56_) {
						gboolean _tmp76_ = FALSE;
						ValaArrayType* _tmp77_;
						gint _tmp78_;
						gint _tmp79_;
						{
							gint dim = 0;
							dim = 1;
							{
								gboolean _tmp65_ = FALSE;
								_tmp65_ = TRUE;
								while (TRUE) {
									ValaArrayType* _tmp67_;
									gint _tmp68_;
									gint _tmp69_;
									ValaCCodeInitializerList* _tmp70_;
									ValaExpression* _tmp71_;
									ValaTargetValue* _tmp72_;
									ValaTargetValue* _tmp73_;
									ValaCCodeExpression* _tmp74_;
									ValaCCodeExpression* _tmp75_;
									if (!_tmp65_) {
										gint _tmp66_;
										_tmp66_ = dim;
										dim = _tmp66_ + 1;
									}
									_tmp65_ = FALSE;
									_tmp67_ = array_type;
									_tmp68_ = vala_array_type_get_rank (_tmp67_);
									_tmp69_ = _tmp68_;
									if (!(dim <= _tmp69_)) {
										break;
									}
									_tmp70_ = clist;
									_tmp71_ = expr;
									_tmp72_ = vala_expression_get_target_value (_tmp71_);
									_tmp73_ = _tmp72_;
									_tmp74_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp73_, dim);
									_tmp75_ = _tmp74_;
									vala_ccode_initializer_list_append (_tmp70_, _tmp75_);
									_vala_ccode_node_unref0 (_tmp75_);
								}
							}
						}
						_tmp77_ = array_type;
						_tmp78_ = vala_array_type_get_rank (_tmp77_);
						_tmp79_ = _tmp78_;
						if (_tmp79_ == 1) {
							ValaField* _tmp80_;
							_tmp80_ = field;
							_tmp76_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp80_);
						} else {
							_tmp76_ = FALSE;
						}
						if (_tmp76_) {
							ValaCCodeInitializerList* _tmp81_;
							ValaExpression* _tmp82_;
							ValaTargetValue* _tmp83_;
							ValaTargetValue* _tmp84_;
							ValaCCodeExpression* _tmp85_;
							ValaCCodeExpression* _tmp86_;
							_tmp81_ = clist;
							_tmp82_ = expr;
							_tmp83_ = vala_expression_get_target_value (_tmp82_);
							_tmp84_ = _tmp83_;
							_tmp85_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp84_, 1);
							_tmp86_ = _tmp85_;
							vala_ccode_initializer_list_append (_tmp81_, _tmp86_);
							_vala_ccode_node_unref0 (_tmp86_);
						}
					}
					_vala_code_node_unref0 (array_type);
					_g_free0 (ctype);
					_vala_ccode_node_unref0 (cexpr);
					_vala_code_node_unref0 (field);
					_vala_code_node_unref0 (expr);
				}
			}
			_tmp87_ = vala_initializer_list_get_size (list);
			_tmp88_ = _tmp87_;
			if (_tmp88_ <= 0) {
				ValaCCodeInitializerList* _tmp89_;
				ValaCCodeConstant* _tmp90_;
				ValaCCodeConstant* _tmp91_;
				_tmp89_ = clist;
				_tmp90_ = vala_ccode_constant_new ("0");
				_tmp91_ = _tmp90_;
				vala_ccode_initializer_list_append (_tmp89_, (ValaCCodeExpression*) _tmp91_);
				_vala_ccode_node_unref0 (_tmp91_);
			}
			_tmp93_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
			_tmp94_ = _tmp93_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp94_, VALA_TYPE_CONSTANT)) {
				_tmp92_ = TRUE;
			} else {
				gboolean _tmp95_ = FALSE;
				ValaCodeNode* _tmp96_;
				ValaCodeNode* _tmp97_;
				_tmp96_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
				_tmp97_ = _tmp96_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp97_, VALA_TYPE_EXPRESSION)) {
					ValaCodeNode* _tmp98_;
					ValaCodeNode* _tmp99_;
					ValaDataType* _tmp100_;
					ValaDataType* _tmp101_;
					_tmp98_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
					_tmp99_ = _tmp98_;
					_tmp100_ = vala_expression_get_value_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp99_, VALA_TYPE_EXPRESSION, ValaExpression));
					_tmp101_ = _tmp100_;
					_tmp95_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp101_, VALA_TYPE_ARRAY_TYPE);
				} else {
					_tmp95_ = FALSE;
				}
				_tmp92_ = _tmp95_;
			}
			if (_tmp92_) {
				ValaCCodeInitializerList* _tmp102_;
				_tmp102_ = clist;
				vala_set_cvalue ((ValaExpression*) list, (ValaCCodeExpression*) _tmp102_);
			} else {
				ValaCCodeInitializerList* _tmp103_;
				ValaDataType* _tmp104_;
				ValaDataType* _tmp105_;
				ValaTypeSymbol* _tmp106_;
				ValaTypeSymbol* _tmp107_;
				gchar* _tmp108_;
				gchar* _tmp109_;
				ValaCCodeCastExpression* _tmp110_;
				ValaCCodeCastExpression* _tmp111_;
				_tmp103_ = clist;
				_tmp104_ = vala_expression_get_target_type ((ValaExpression*) list);
				_tmp105_ = _tmp104_;
				_tmp106_ = vala_data_type_get_type_symbol (_tmp105_);
				_tmp107_ = _tmp106_;
				_tmp108_ = vala_get_ccode_name ((ValaCodeNode*) _tmp107_);
				_tmp109_ = _tmp108_;
				_tmp110_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp103_, _tmp109_);
				_tmp111_ = _tmp110_;
				vala_set_cvalue ((ValaExpression*) list, (ValaCCodeExpression*) _tmp111_);
				_vala_ccode_node_unref0 (_tmp111_);
				_g_free0 (_tmp109_);
			}
			_vala_iterator_unref0 (field_it);
			_vala_ccode_node_unref0 (clist);
		} else {
			ValaTargetValue* instance = NULL;
			ValaDataType* _tmp112_;
			ValaDataType* _tmp113_;
			ValaTargetValue* _tmp114_;
			ValaIterator* field_it = NULL;
			ValaStruct* _tmp115_;
			ValaList* _tmp116_;
			ValaIterator* _tmp117_;
			ValaTargetValue* _tmp141_;
			_tmp112_ = vala_expression_get_value_type ((ValaExpression*) list);
			_tmp113_ = _tmp112_;
			_tmp114_ = vala_ccode_base_module_create_temp_value (self, _tmp113_, TRUE, (ValaCodeNode*) list, NULL);
			instance = _tmp114_;
			_tmp115_ = st;
			_tmp116_ = vala_struct_get_fields (_tmp115_);
			_tmp117_ = vala_iterable_iterator ((ValaIterable*) _tmp116_);
			field_it = _tmp117_;
			{
				ValaList* _expr_list = NULL;
				ValaList* _tmp118_;
				gint _expr_size = 0;
				ValaList* _tmp119_;
				gint _tmp120_;
				gint _tmp121_;
				gint _expr_index = 0;
				_tmp118_ = vala_initializer_list_get_initializers (list);
				_expr_list = _tmp118_;
				_tmp119_ = _expr_list;
				_tmp120_ = vala_collection_get_size ((ValaCollection*) _tmp119_);
				_tmp121_ = _tmp120_;
				_expr_size = _tmp121_;
				_expr_index = -1;
				while (TRUE) {
					gint _tmp122_;
					gint _tmp123_;
					ValaExpression* expr = NULL;
					ValaList* _tmp124_;
					gpointer _tmp125_;
					ValaField* field = NULL;
					ValaField* _tmp133_;
					ValaTargetValue* _tmp134_;
					ValaExpression* _tmp135_;
					ValaTargetValue* _tmp136_;
					ValaTargetValue* _tmp137_;
					ValaExpression* _tmp138_;
					ValaSourceReference* _tmp139_;
					ValaSourceReference* _tmp140_;
					_expr_index = _expr_index + 1;
					_tmp122_ = _expr_index;
					_tmp123_ = _expr_size;
					if (!(_tmp122_ < _tmp123_)) {
						break;
					}
					_tmp124_ = _expr_list;
					_tmp125_ = vala_list_get (_tmp124_, _expr_index);
					expr = (ValaExpression*) _tmp125_;
					field = NULL;
					while (TRUE) {
						ValaField* _tmp126_;
						ValaIterator* _tmp127_;
						ValaIterator* _tmp128_;
						gpointer _tmp129_;
						ValaField* _tmp130_;
						ValaMemberBinding _tmp131_;
						ValaMemberBinding _tmp132_;
						_tmp126_ = field;
						if (!(_tmp126_ == NULL)) {
							break;
						}
						_tmp127_ = field_it;
						vala_iterator_next (_tmp127_);
						_tmp128_ = field_it;
						_tmp129_ = vala_iterator_get (_tmp128_);
						_vala_code_node_unref0 (field);
						field = (ValaField*) _tmp129_;
						_tmp130_ = field;
						_tmp131_ = vala_field_get_binding (_tmp130_);
						_tmp132_ = _tmp131_;
						if (_tmp132_ != VALA_MEMBER_BINDING_INSTANCE) {
							_vala_code_node_unref0 (field);
							field = NULL;
						}
					}
					_tmp133_ = field;
					_tmp134_ = instance;
					_tmp135_ = expr;
					_tmp136_ = vala_expression_get_target_value (_tmp135_);
					_tmp137_ = _tmp136_;
					_tmp138_ = expr;
					_tmp139_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp138_);
					_tmp140_ = _tmp139_;
					vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp133_, _tmp134_, _tmp137_, _tmp140_);
					_vala_code_node_unref0 (field);
					_vala_code_node_unref0 (expr);
				}
			}
			_tmp141_ = instance;
			vala_expression_set_target_value ((ValaExpression*) list, _tmp141_);
			_vala_iterator_unref0 (field_it);
			_vala_target_value_unref0 (instance);
		}
	} else {
		ValaCCodeInitializerList* clist = NULL;
		ValaCCodeInitializerList* _tmp142_;
		ValaCCodeInitializerList* _tmp154_;
		_tmp142_ = vala_ccode_initializer_list_new ();
		clist = _tmp142_;
		{
			ValaList* _expr_list = NULL;
			ValaList* _tmp143_;
			gint _expr_size = 0;
			ValaList* _tmp144_;
			gint _tmp145_;
			gint _tmp146_;
			gint _expr_index = 0;
			_tmp143_ = vala_initializer_list_get_initializers (list);
			_expr_list = _tmp143_;
			_tmp144_ = _expr_list;
			_tmp145_ = vala_collection_get_size ((ValaCollection*) _tmp144_);
			_tmp146_ = _tmp145_;
			_expr_size = _tmp146_;
			_expr_index = -1;
			while (TRUE) {
				gint _tmp147_;
				gint _tmp148_;
				ValaExpression* expr = NULL;
				ValaList* _tmp149_;
				gpointer _tmp150_;
				ValaCCodeInitializerList* _tmp151_;
				ValaExpression* _tmp152_;
				ValaCCodeExpression* _tmp153_;
				_expr_index = _expr_index + 1;
				_tmp147_ = _expr_index;
				_tmp148_ = _expr_size;
				if (!(_tmp147_ < _tmp148_)) {
					break;
				}
				_tmp149_ = _expr_list;
				_tmp150_ = vala_list_get (_tmp149_, _expr_index);
				expr = (ValaExpression*) _tmp150_;
				_tmp151_ = clist;
				_tmp152_ = expr;
				_tmp153_ = vala_get_cvalue (_tmp152_);
				vala_ccode_initializer_list_append (_tmp151_, _tmp153_);
				_vala_code_node_unref0 (expr);
			}
		}
		_tmp154_ = clist;
		vala_set_cvalue ((ValaExpression*) list, (ValaCCodeExpression*) _tmp154_);
		_vala_ccode_node_unref0 (clist);
	}
}

ValaLocalVariable*
vala_ccode_base_module_get_temp_variable (ValaCCodeBaseModule* self,
                                          ValaDataType* type,
                                          gboolean value_owned,
                                          ValaCodeNode* node_reference,
                                          gboolean init)
{
	ValaDataType* var_type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaLocalVariable* local = NULL;
	ValaDataType* _tmp2_;
	gint _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaLocalVariable* _tmp7_;
	ValaLocalVariable* _tmp8_;
	ValaLocalVariable* _tmp9_;
	gint _tmp13_;
	gint _tmp14_;
	ValaLocalVariable* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_copy (type);
	var_type = _tmp0_;
	_tmp1_ = var_type;
	vala_data_type_set_value_owned (_tmp1_, value_owned);
	_tmp2_ = var_type;
	_tmp3_ = vala_ccode_base_module_get_next_temp_var_id (self);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_local_variable_new (_tmp2_, _tmp6_, NULL, NULL);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	local = _tmp8_;
	_tmp9_ = local;
	vala_local_variable_set_init (_tmp9_, init);
	if (node_reference != NULL) {
		ValaLocalVariable* _tmp10_;
		ValaSourceReference* _tmp11_;
		ValaSourceReference* _tmp12_;
		_tmp10_ = local;
		_tmp11_ = vala_code_node_get_source_reference (node_reference);
		_tmp12_ = _tmp11_;
		vala_code_node_set_source_reference ((ValaCodeNode*) _tmp10_, _tmp12_);
	}
	_tmp13_ = vala_ccode_base_module_get_next_temp_var_id (self);
	_tmp14_ = _tmp13_;
	vala_ccode_base_module_set_next_temp_var_id (self, _tmp14_ + 1);
	result = local;
	_vala_code_node_unref0 (var_type);
	return result;
}

static gboolean
vala_ccode_base_module_is_in_generic_type (ValaCCodeBaseModule* self,
                                           ValaGenericType* type)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (type != NULL, FALSE);
	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp3_ = _tmp2_;
	if (_tmp3_ != NULL) {
		ValaTypeParameter* _tmp4_;
		ValaTypeParameter* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		_tmp4_ = vala_generic_type_get_type_parameter (type);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp5_);
		_tmp7_ = _tmp6_;
		_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_TYPESYMBOL);
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		gboolean _tmp8_ = FALSE;
		ValaMethod* _tmp9_;
		ValaMethod* _tmp10_;
		_tmp9_ = vala_ccode_base_module_get_current_method (self);
		_tmp10_ = _tmp9_;
		if (_tmp10_ == NULL) {
			_tmp8_ = TRUE;
		} else {
			ValaMethod* _tmp11_;
			ValaMethod* _tmp12_;
			ValaMemberBinding _tmp13_;
			ValaMemberBinding _tmp14_;
			_tmp11_ = vala_ccode_base_module_get_current_method (self);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_method_get_binding (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp8_ = _tmp14_ == VALA_MEMBER_BINDING_INSTANCE;
		}
		_tmp0_ = _tmp8_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	} else {
		result = FALSE;
		return result;
	}
}

static void
vala_ccode_base_module_require_generic_accessors (ValaCCodeBaseModule* self,
                                                  ValaInterface* iface)
{
	ValaAttribute* _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (iface != NULL);
	_tmp0_ = vala_code_node_get_attribute ((ValaCodeNode*) iface, "GenericAccessors");
	if (_tmp0_ == NULL) {
		ValaSourceReference* _tmp1_;
		ValaSourceReference* _tmp2_;
		gchar* _tmp3_;
		gchar* _tmp4_;
		_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) iface);
		_tmp2_ = _tmp1_;
		_tmp3_ = vala_symbol_get_full_name ((ValaSymbol*) iface);
		_tmp4_ = _tmp3_;
		vala_report_error (_tmp2_, "missing generic type for interface `%s', add GenericAccessors attribut" \
"e to interface declaration", _tmp4_);
		_g_free0 (_tmp4_);
	}
}

static ValaCCodeExpression*
vala_ccode_base_module_get_generic_type_expression (ValaCCodeBaseModule* self,
                                                    const gchar* identifier,
                                                    ValaGenericType* type,
                                                    gboolean is_chainup)
{
	ValaTypeParameter* _tmp0_;
	ValaTypeParameter* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	gboolean _tmp29_ = FALSE;
	gboolean _tmp30_ = FALSE;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (identifier != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_generic_type_get_type_parameter (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1_);
	_tmp3_ = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_INTERFACE)) {
		ValaInterface* iface = NULL;
		ValaTypeParameter* _tmp4_;
		ValaTypeParameter* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		ValaInterface* _tmp8_;
		ValaCCodeFunctionCall* cast_self = NULL;
		ValaInterface* _tmp9_;
		gchar* _tmp10_;
		gchar* _tmp11_;
		ValaCCodeIdentifier* _tmp12_;
		ValaCCodeIdentifier* _tmp13_;
		ValaCCodeFunctionCall* _tmp14_;
		ValaCCodeFunctionCall* _tmp15_;
		ValaCCodeFunctionCall* _tmp16_;
		ValaCCodeExpression* _tmp17_;
		ValaCCodeExpression* _tmp18_;
		ValaCCodeFunctionCall* function_call = NULL;
		ValaCCodeFunctionCall* _tmp19_;
		gchar* _tmp20_;
		gchar* _tmp21_;
		ValaCCodeMemberAccess* _tmp22_;
		ValaCCodeMemberAccess* _tmp23_;
		ValaCCodeFunctionCall* _tmp24_;
		ValaCCodeFunctionCall* _tmp25_;
		ValaCCodeFunctionCall* _tmp26_;
		ValaCCodeExpression* _tmp27_;
		ValaCCodeExpression* _tmp28_;
		_tmp4_ = vala_generic_type_get_type_parameter (type);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp5_);
		_tmp7_ = _tmp6_;
		iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_INTERFACE, ValaInterface);
		_tmp8_ = iface;
		vala_ccode_base_module_require_generic_accessors (self, _tmp8_);
		_tmp9_ = iface;
		_tmp10_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp9_);
		_tmp11_ = _tmp10_;
		_tmp12_ = vala_ccode_identifier_new (_tmp11_);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp13_);
		_tmp15_ = _tmp14_;
		_vala_ccode_node_unref0 (_tmp13_);
		_g_free0 (_tmp11_);
		cast_self = _tmp15_;
		_tmp16_ = cast_self;
		_tmp17_ = vala_ccode_base_module_get_this_cexpression (self);
		_tmp18_ = _tmp17_;
		vala_ccode_function_call_add_argument (_tmp16_, _tmp18_);
		_vala_ccode_node_unref0 (_tmp18_);
		_tmp19_ = cast_self;
		_tmp20_ = g_strdup_printf ("get_%s", identifier);
		_tmp21_ = _tmp20_;
		_tmp22_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp19_, _tmp21_);
		_tmp23_ = _tmp22_;
		_tmp24_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp23_);
		_tmp25_ = _tmp24_;
		_vala_ccode_node_unref0 (_tmp23_);
		_g_free0 (_tmp21_);
		function_call = _tmp25_;
		_tmp26_ = function_call;
		_tmp27_ = vala_ccode_base_module_get_this_cexpression (self);
		_tmp28_ = _tmp27_;
		vala_ccode_function_call_add_argument (_tmp26_, _tmp28_);
		_vala_ccode_node_unref0 (_tmp28_);
		result = (ValaCCodeExpression*) function_call;
		_vala_ccode_node_unref0 (cast_self);
		return result;
	}
	if (vala_ccode_base_module_is_in_generic_type (self, type)) {
		_tmp30_ = !is_chainup;
	} else {
		_tmp30_ = FALSE;
	}
	if (_tmp30_) {
		gboolean _tmp31_;
		gboolean _tmp32_;
		_tmp31_ = vala_ccode_base_module_get_in_creation_method (self);
		_tmp32_ = _tmp31_;
		_tmp29_ = !_tmp32_;
	} else {
		_tmp29_ = FALSE;
	}
	if (_tmp29_) {
		ValaCCodeExpression* _tmp33_;
		ValaCCodeExpression* _tmp34_;
		ValaCCodeMemberAccess* _tmp35_;
		ValaCCodeMemberAccess* _tmp36_;
		ValaCCodeMemberAccess* _tmp37_;
		ValaCCodeExpression* _tmp38_;
		_tmp33_ = vala_ccode_base_module_get_this_cexpression (self);
		_tmp34_ = _tmp33_;
		_tmp35_ = vala_ccode_member_access_new_pointer (_tmp34_, "priv");
		_tmp36_ = _tmp35_;
		_tmp37_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp36_, identifier);
		_tmp38_ = (ValaCCodeExpression*) _tmp37_;
		_vala_ccode_node_unref0 (_tmp36_);
		_vala_ccode_node_unref0 (_tmp34_);
		result = _tmp38_;
		return result;
	} else {
		ValaCCodeExpression* _tmp39_;
		_tmp39_ = vala_ccode_base_module_get_variable_cexpression (self, identifier);
		result = _tmp39_;
		return result;
	}
}

ValaCCodeExpression*
vala_ccode_base_module_get_type_id_expression (ValaCCodeBaseModule* self,
                                               ValaDataType* type,
                                               gboolean is_chainup)
{
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
		ValaTypeParameter* type_parameter = NULL;
		ValaTypeParameter* _tmp0_;
		ValaTypeParameter* _tmp1_;
		ValaTypeParameter* _tmp2_;
		ValaSymbol* parent = NULL;
		ValaTypeParameter* _tmp3_;
		ValaScope* _tmp4_;
		ValaScope* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		gboolean _tmp8_ = FALSE;
		ValaSymbol* _tmp9_;
		gchar* identifier = NULL;
		ValaTypeParameter* _tmp20_;
		gchar* _tmp21_;
		const gchar* _tmp22_;
		ValaCCodeExpression* _tmp23_;
		_tmp0_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
		_tmp1_ = _tmp0_;
		_tmp2_ = _vala_code_node_ref0 (_tmp1_);
		type_parameter = _tmp2_;
		_tmp3_ = type_parameter;
		_tmp4_ = vala_symbol_get_owner ((ValaSymbol*) _tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_scope_get_owner (_tmp5_);
		_tmp7_ = _tmp6_;
		parent = _tmp7_;
		_tmp9_ = parent;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, VALA_TYPE_CLASS)) {
			ValaSymbol* _tmp10_;
			gboolean _tmp11_;
			gboolean _tmp12_;
			_tmp10_ = parent;
			_tmp11_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_CLASS, ValaClass));
			_tmp12_ = _tmp11_;
			_tmp8_ = _tmp12_;
		} else {
			_tmp8_ = FALSE;
		}
		if (_tmp8_) {
			ValaSourceReference* _tmp13_;
			ValaSourceReference* _tmp14_;
			ValaTypeSymbol* _tmp15_;
			ValaTypeSymbol* _tmp16_;
			gchar* _tmp17_;
			gchar* _tmp18_;
			ValaCCodeInvalidExpression* _tmp19_;
			_tmp13_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
			_tmp14_ = _tmp13_;
			_tmp15_ = vala_data_type_get_type_symbol (type);
			_tmp16_ = _tmp15_;
			_tmp17_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp16_);
			_tmp18_ = _tmp17_;
			vala_report_error (_tmp14_, "static type-parameter `%s' can not be used in runtime context", _tmp18_);
			_g_free0 (_tmp18_);
			_tmp19_ = vala_ccode_invalid_expression_new ();
			result = (ValaCCodeExpression*) _tmp19_;
			_vala_code_node_unref0 (type_parameter);
			return result;
		}
		_tmp20_ = type_parameter;
		_tmp21_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp20_);
		identifier = _tmp21_;
		_tmp22_ = identifier;
		_tmp23_ = vala_ccode_base_module_get_generic_type_expression (self, _tmp22_, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType), is_chainup);
		result = _tmp23_;
		_g_free0 (identifier);
		_vala_code_node_unref0 (type_parameter);
		return result;
	} else {
		gchar* type_id = NULL;
		gchar* _tmp24_;
		const gchar* _tmp25_;
		const gchar* _tmp28_;
		ValaCCodeIdentifier* _tmp29_;
		_tmp24_ = vala_get_ccode_type_id ((ValaCodeNode*) type);
		type_id = _tmp24_;
		_tmp25_ = type_id;
		if (g_strcmp0 (_tmp25_, "") == 0) {
			gchar* _tmp26_;
			_tmp26_ = g_strdup ("G_TYPE_INVALID");
			_g_free0 (type_id);
			type_id = _tmp26_;
		} else {
			ValaCCodeFile* _tmp27_;
			_tmp27_ = self->cfile;
			vala_ccode_base_module_generate_type_declaration (self, type, _tmp27_);
		}
		_tmp28_ = type_id;
		_tmp29_ = vala_ccode_identifier_new (_tmp28_);
		result = (ValaCCodeExpression*) _tmp29_;
		_g_free0 (type_id);
		return result;
	}
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_dup_func_expression (ValaCCodeBaseModule* self,
                                                     ValaDataType* type,
                                                     ValaSourceReference* source_reference,
                                                     gboolean is_chainup)
{
	ValaCCodeExpression* result;
	g_return_val_if_fail (type != NULL, NULL);
	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
		ValaCCodeIdentifier* _tmp0_;
		_tmp0_ = vala_ccode_identifier_new ("g_error_copy");
		result = (ValaCCodeExpression*) _tmp0_;
		return result;
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
			ValaTypeParameter* type_parameter = NULL;
			ValaTypeParameter* _tmp1_;
			ValaTypeParameter* _tmp2_;
			ValaTypeParameter* _tmp3_;
			gchar* identifier = NULL;
			ValaTypeParameter* _tmp4_;
			gchar* _tmp5_;
			const gchar* _tmp6_;
			ValaCCodeExpression* _tmp7_;
			_tmp1_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
			_tmp2_ = _tmp1_;
			_tmp3_ = _vala_code_node_ref0 (_tmp2_);
			type_parameter = _tmp3_;
			_tmp4_ = type_parameter;
			_tmp5_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp4_);
			identifier = _tmp5_;
			_tmp6_ = identifier;
			_tmp7_ = vala_ccode_base_module_get_generic_type_expression (self, _tmp6_, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType), is_chainup);
			result = _tmp7_;
			_g_free0 (identifier);
			_vala_code_node_unref0 (type_parameter);
			return result;
		} else {
			ValaTypeSymbol* _tmp8_;
			ValaTypeSymbol* _tmp9_;
			_tmp8_ = vala_data_type_get_type_symbol (type);
			_tmp9_ = _tmp8_;
			if (_tmp9_ != NULL) {
				gchar* dup_function = NULL;
				ValaClass* cl = NULL;
				ValaTypeSymbol* _tmp10_;
				ValaTypeSymbol* _tmp11_;
				ValaTypeSymbol* _tmp12_;
				ValaTypeSymbol* _tmp13_;
				const gchar* _tmp56_;
				ValaCCodeIdentifier* _tmp57_;
				_tmp10_ = vala_data_type_get_type_symbol (type);
				_tmp11_ = _tmp10_;
				cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp11_) : NULL;
				_tmp12_ = vala_data_type_get_type_symbol (type);
				_tmp13_ = _tmp12_;
				if (vala_is_reference_counting (_tmp13_)) {
					ValaTypeSymbol* _tmp14_;
					ValaTypeSymbol* _tmp15_;
					gchar* _tmp16_;
					gboolean _tmp17_ = FALSE;
					ValaTypeSymbol* _tmp18_;
					ValaTypeSymbol* _tmp19_;
					_tmp14_ = vala_data_type_get_type_symbol (type);
					_tmp15_ = _tmp14_;
					_tmp16_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
					_g_free0 (dup_function);
					dup_function = _tmp16_;
					_tmp18_ = vala_data_type_get_type_symbol (type);
					_tmp19_ = _tmp18_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_INTERFACE)) {
						const gchar* _tmp20_;
						_tmp20_ = dup_function;
						_tmp17_ = _tmp20_ == NULL;
					} else {
						_tmp17_ = FALSE;
					}
					if (_tmp17_) {
						ValaTypeSymbol* _tmp21_;
						ValaTypeSymbol* _tmp22_;
						gchar* _tmp23_;
						gchar* _tmp24_;
						ValaCCodeInvalidExpression* _tmp25_;
						_tmp21_ = vala_data_type_get_type_symbol (type);
						_tmp22_ = _tmp21_;
						_tmp23_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp22_);
						_tmp24_ = _tmp23_;
						vala_report_error (source_reference, "missing class prerequisite for interface `%s', add GLib.Object to inte" \
"rface declaration if unsure", _tmp24_);
						_g_free0 (_tmp24_);
						_tmp25_ = vala_ccode_invalid_expression_new ();
						result = (ValaCCodeExpression*) _tmp25_;
						_g_free0 (dup_function);
						return result;
					}
				} else {
					gboolean _tmp26_ = FALSE;
					ValaClass* _tmp27_;
					_tmp27_ = cl;
					if (_tmp27_ != NULL) {
						ValaClass* _tmp28_;
						gboolean _tmp29_;
						gboolean _tmp30_;
						_tmp28_ = cl;
						_tmp29_ = vala_class_get_is_immutable (_tmp28_);
						_tmp30_ = _tmp29_;
						_tmp26_ = _tmp30_;
					} else {
						_tmp26_ = FALSE;
					}
					if (_tmp26_) {
						ValaTypeSymbol* _tmp31_;
						ValaTypeSymbol* _tmp32_;
						gchar* _tmp33_;
						const gchar* _tmp34_;
						_tmp31_ = vala_data_type_get_type_symbol (type);
						_tmp32_ = _tmp31_;
						_tmp33_ = vala_get_ccode_dup_function (_tmp32_);
						_g_free0 (dup_function);
						dup_function = _tmp33_;
						_tmp34_ = dup_function;
						if (_tmp34_ == NULL) {
							gchar* _tmp35_;
							_tmp35_ = g_strdup ("");
							_g_free0 (dup_function);
							dup_function = _tmp35_;
						}
					} else {
						ValaTypeSymbol* _tmp36_;
						ValaTypeSymbol* _tmp37_;
						_tmp36_ = vala_data_type_get_type_symbol (type);
						_tmp37_ = _tmp36_;
						if (vala_get_ccode_is_gboxed (_tmp37_)) {
							gchar* _tmp38_;
							const gchar* _tmp39_;
							_tmp38_ = vala_ccode_base_module_generate_dup_func_wrapper (self, type);
							_g_free0 (dup_function);
							dup_function = _tmp38_;
							_tmp39_ = dup_function;
							if (_tmp39_ == NULL) {
								gchar* _tmp40_;
								_tmp40_ = g_strdup ("");
								_g_free0 (dup_function);
								dup_function = _tmp40_;
							}
						} else {
							if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VALUE_TYPE)) {
								ValaTypeSymbol* _tmp41_;
								ValaTypeSymbol* _tmp42_;
								gchar* _tmp43_;
								gboolean _tmp44_ = FALSE;
								const gchar* _tmp45_;
								_tmp41_ = vala_data_type_get_type_symbol (type);
								_tmp42_ = _tmp41_;
								_tmp43_ = vala_get_ccode_dup_function (_tmp42_);
								_g_free0 (dup_function);
								dup_function = _tmp43_;
								_tmp45_ = dup_function;
								if (_tmp45_ == NULL) {
									gboolean _tmp46_;
									gboolean _tmp47_;
									_tmp46_ = vala_data_type_get_nullable (type);
									_tmp47_ = _tmp46_;
									_tmp44_ = _tmp47_;
								} else {
									_tmp44_ = FALSE;
								}
								if (_tmp44_) {
									gchar* _tmp48_;
									_tmp48_ = vala_ccode_base_module_generate_struct_dup_wrapper (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_VALUE_TYPE, ValaValueType));
									_g_free0 (dup_function);
									dup_function = _tmp48_;
								} else {
									const gchar* _tmp49_;
									_tmp49_ = dup_function;
									if (_tmp49_ == NULL) {
										gchar* _tmp50_;
										_tmp50_ = g_strdup ("");
										_g_free0 (dup_function);
										dup_function = _tmp50_;
									}
								}
							} else {
								ValaTypeSymbol* _tmp51_;
								ValaTypeSymbol* _tmp52_;
								const gchar* _tmp53_;
								const gchar* _tmp54_;
								ValaCCodeInvalidExpression* _tmp55_;
								_tmp51_ = vala_data_type_get_type_symbol (type);
								_tmp52_ = _tmp51_;
								_tmp53_ = vala_symbol_get_name ((ValaSymbol*) _tmp52_);
								_tmp54_ = _tmp53_;
								vala_report_error (source_reference, "duplicating `%s' instance, use unowned variable or explicitly invoke c" \
"opy method", _tmp54_);
								_tmp55_ = vala_ccode_invalid_expression_new ();
								result = (ValaCCodeExpression*) _tmp55_;
								_g_free0 (dup_function);
								return result;
							}
						}
					}
				}
				_tmp56_ = dup_function;
				_tmp57_ = vala_ccode_identifier_new (_tmp56_);
				result = (ValaCCodeExpression*) _tmp57_;
				_g_free0 (dup_function);
				return result;
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
					ValaPointerType* pointer_type = NULL;
					ValaPointerType* _tmp58_;
					ValaPointerType* _tmp59_;
					ValaDataType* _tmp60_;
					ValaDataType* _tmp61_;
					ValaCCodeExpression* _tmp62_;
					_tmp58_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_POINTER_TYPE, ValaPointerType));
					pointer_type = _tmp58_;
					_tmp59_ = pointer_type;
					_tmp60_ = vala_pointer_type_get_base_type (_tmp59_);
					_tmp61_ = _tmp60_;
					_tmp62_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp61_, source_reference, FALSE);
					result = _tmp62_;
					_vala_code_node_unref0 (pointer_type);
					return result;
				} else {
					ValaCCodeConstant* _tmp63_;
					_tmp63_ = vala_ccode_constant_new ("NULL");
					result = (ValaCCodeExpression*) _tmp63_;
					return result;
				}
			}
		}
	}
}

ValaCCodeExpression*
vala_ccode_base_module_get_dup_func_expression (ValaCCodeBaseModule* self,
                                                ValaDataType* type,
                                                ValaSourceReference* source_reference,
                                                gboolean is_chainup)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_dup_func_expression) {
		return _klass_->get_dup_func_expression (self, type, source_reference, is_chainup);
	}
	return NULL;
}

static void
vala_ccode_base_module_make_comparable_cexpression (ValaCCodeBaseModule* self,
                                                    ValaDataType** left_type,
                                                    ValaCCodeExpression** cleft,
                                                    ValaDataType** right_type,
                                                    ValaCCodeExpression** cright)
{
	ValaStruct* left_type_as_struct = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaStruct* right_type_as_struct = NULL;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	ValaObjectTypeSymbol* left_type_as_object_type = NULL;
	ValaTypeSymbol* _tmp4_;
	ValaTypeSymbol* _tmp5_;
	ValaObjectTypeSymbol* right_type_as_object_type = NULL;
	ValaTypeSymbol* _tmp6_;
	ValaTypeSymbol* _tmp7_;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	gboolean _tmp10_ = FALSE;
	ValaObjectTypeSymbol* _tmp11_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (*left_type != NULL);
	g_return_if_fail (*cleft != NULL);
	g_return_if_fail (*right_type != NULL);
	g_return_if_fail (*cright != NULL);
	_tmp0_ = vala_data_type_get_type_symbol (*left_type);
	_tmp1_ = _tmp0_;
	left_type_as_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL;
	_tmp2_ = vala_data_type_get_type_symbol (*right_type);
	_tmp3_ = _tmp2_;
	right_type_as_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp3_) : NULL;
	_tmp4_ = vala_data_type_get_type_symbol (*left_type);
	_tmp5_ = _tmp4_;
	left_type_as_object_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp5_) : NULL;
	_tmp6_ = vala_data_type_get_type_symbol (*right_type);
	_tmp7_ = _tmp6_;
	right_type_as_object_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp7_) : NULL;
	_tmp11_ = left_type_as_object_type;
	if (_tmp11_ != NULL) {
		gboolean _tmp12_ = FALSE;
		ValaObjectTypeSymbol* _tmp13_;
		_tmp13_ = left_type_as_object_type;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_CLASS)) {
			_tmp12_ = TRUE;
		} else {
			ValaObjectTypeSymbol* _tmp14_;
			gboolean _tmp15_;
			gboolean _tmp16_;
			_tmp14_ = left_type_as_object_type;
			_tmp15_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_CLASS, ValaClass));
			_tmp16_ = _tmp15_;
			_tmp12_ = !_tmp16_;
		}
		_tmp10_ = _tmp12_;
	} else {
		_tmp10_ = FALSE;
	}
	if (_tmp10_) {
		ValaObjectTypeSymbol* _tmp17_;
		_tmp17_ = right_type_as_object_type;
		_tmp9_ = _tmp17_ != NULL;
	} else {
		_tmp9_ = FALSE;
	}
	if (_tmp9_) {
		gboolean _tmp18_ = FALSE;
		ValaObjectTypeSymbol* _tmp19_;
		_tmp19_ = right_type_as_object_type;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_CLASS)) {
			_tmp18_ = TRUE;
		} else {
			ValaObjectTypeSymbol* _tmp20_;
			gboolean _tmp21_;
			gboolean _tmp22_;
			_tmp20_ = right_type_as_object_type;
			_tmp21_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_CLASS, ValaClass));
			_tmp22_ = _tmp21_;
			_tmp18_ = !_tmp22_;
		}
		_tmp8_ = _tmp18_;
	} else {
		_tmp8_ = FALSE;
	}
	if (_tmp8_) {
		ValaObjectTypeSymbol* _tmp23_;
		ValaObjectTypeSymbol* _tmp24_;
		_tmp23_ = left_type_as_object_type;
		_tmp24_ = right_type_as_object_type;
		if (_tmp23_ != _tmp24_) {
			ValaObjectTypeSymbol* _tmp25_;
			ValaObjectTypeSymbol* _tmp26_;
			_tmp25_ = left_type_as_object_type;
			_tmp26_ = right_type_as_object_type;
			if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp25_, (ValaTypeSymbol*) _tmp26_)) {
				ValaObjectTypeSymbol* _tmp27_;
				ValaCCodeFunctionCall* _tmp28_;
				_tmp27_ = right_type_as_object_type;
				_tmp28_ = vala_ccode_base_module_generate_instance_cast (self, *cleft, (ValaTypeSymbol*) _tmp27_);
				_vala_ccode_node_unref0 (*cleft);
				*cleft = (ValaCCodeExpression*) _tmp28_;
			} else {
				ValaObjectTypeSymbol* _tmp29_;
				ValaObjectTypeSymbol* _tmp30_;
				_tmp29_ = right_type_as_object_type;
				_tmp30_ = left_type_as_object_type;
				if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp29_, (ValaTypeSymbol*) _tmp30_)) {
					ValaObjectTypeSymbol* _tmp31_;
					ValaCCodeFunctionCall* _tmp32_;
					_tmp31_ = left_type_as_object_type;
					_tmp32_ = vala_ccode_base_module_generate_instance_cast (self, *cright, (ValaTypeSymbol*) _tmp31_);
					_vala_ccode_node_unref0 (*cright);
					*cright = (ValaCCodeExpression*) _tmp32_;
				}
			}
		}
	} else {
		gboolean _tmp33_ = FALSE;
		ValaStruct* _tmp34_;
		_tmp34_ = left_type_as_struct;
		if (_tmp34_ != NULL) {
			ValaStruct* _tmp35_;
			_tmp35_ = right_type_as_struct;
			_tmp33_ = _tmp35_ != NULL;
		} else {
			_tmp33_ = FALSE;
		}
		if (_tmp33_) {
			if (G_TYPE_CHECK_INSTANCE_TYPE (*left_type, VALA_TYPE_STRUCT_VALUE_TYPE)) {
				gboolean _tmp36_;
				gboolean _tmp37_;
				gboolean _tmp39_;
				gboolean _tmp40_;
				_tmp36_ = vala_data_type_get_nullable (*left_type);
				_tmp37_ = _tmp36_;
				if (!_tmp37_) {
					ValaCCodeUnaryExpression* _tmp38_;
					_tmp38_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, *cleft);
					_vala_ccode_node_unref0 (*cleft);
					*cleft = (ValaCCodeExpression*) _tmp38_;
				}
				_tmp39_ = vala_data_type_get_nullable (*right_type);
				_tmp40_ = _tmp39_;
				if (!_tmp40_) {
					ValaCCodeUnaryExpression* _tmp41_;
					_tmp41_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, *cright);
					_vala_ccode_node_unref0 (*cright);
					*cright = (ValaCCodeExpression*) _tmp41_;
				}
			} else {
				gboolean _tmp42_ = FALSE;
				gboolean _tmp43_;
				gboolean _tmp44_;
				_tmp43_ = vala_data_type_get_nullable (*left_type);
				_tmp44_ = _tmp43_;
				if (_tmp44_) {
					gboolean _tmp45_;
					gboolean _tmp46_;
					_tmp45_ = vala_data_type_get_nullable (*right_type);
					_tmp46_ = _tmp45_;
					_tmp42_ = _tmp46_;
				} else {
					_tmp42_ = FALSE;
				}
				if (_tmp42_) {
				} else {
					gboolean _tmp47_;
					gboolean _tmp48_;
					_tmp47_ = vala_data_type_get_nullable (*left_type);
					_tmp48_ = _tmp47_;
					if (_tmp48_) {
						ValaCCodeUnaryExpression* _tmp49_;
						_tmp49_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, *cleft);
						_vala_ccode_node_unref0 (*cleft);
						*cleft = (ValaCCodeExpression*) _tmp49_;
					} else {
						gboolean _tmp50_;
						gboolean _tmp51_;
						_tmp50_ = vala_data_type_get_nullable (*right_type);
						_tmp51_ = _tmp50_;
						if (_tmp51_) {
							ValaCCodeUnaryExpression* _tmp52_;
							_tmp52_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, *cright);
							_vala_ccode_node_unref0 (*cright);
							*cright = (ValaCCodeExpression*) _tmp52_;
						}
					}
				}
			}
		}
	}
}

static gchar*
vala_ccode_base_module_generate_struct_equal_function (ValaCCodeBaseModule* self,
                                                       ValaStruct* st)
{
	ValaStruct* _tmp0_;
	ValaStruct* _tmp1_;
	gchar* equal_func = NULL;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	const gchar* _tmp9_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp10_;
	ValaDataType* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	ValaCCodeParameter* _tmp22_;
	ValaCCodeParameter* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	ValaCCodeParameter* _tmp29_;
	ValaCCodeParameter* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	gboolean has_instance_fields = FALSE;
	ValaCCodeFile* _tmp186_;
	ValaCCodeFunction* _tmp187_;
	ValaCCodeFile* _tmp188_;
	ValaCCodeFunction* _tmp189_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (st != NULL, NULL);
	_tmp0_ = vala_struct_get_base_struct (st);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		ValaStruct* _tmp2_;
		ValaStruct* _tmp3_;
		gchar* _tmp4_;
		_tmp2_ = vala_struct_get_base_struct (st);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_ccode_base_module_generate_struct_equal_function (self, _tmp3_);
		result = _tmp4_;
		return result;
	}
	_tmp5_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) st);
	_tmp6_ = _tmp5_;
	_tmp7_ = g_strdup_printf ("_%sequal", _tmp6_);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	equal_func = _tmp8_;
	_tmp9_ = equal_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp9_)) {
		result = equal_func;
		return result;
	}
	_tmp10_ = equal_func;
	_tmp11_ = self->bool_type;
	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_function_new (_tmp10_, _tmp13_);
	_tmp15_ = _tmp14_;
	_g_free0 (_tmp13_);
	function = _tmp15_;
	_tmp16_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp16_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp17_ = function;
	_tmp18_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp19_ = _tmp18_;
	_tmp20_ = g_strdup_printf ("const %s *", _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_ccode_parameter_new ("s1", _tmp21_);
	_tmp23_ = _tmp22_;
	vala_ccode_function_add_parameter (_tmp17_, _tmp23_);
	_vala_ccode_node_unref0 (_tmp23_);
	_g_free0 (_tmp21_);
	_g_free0 (_tmp19_);
	_tmp24_ = function;
	_tmp25_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp26_ = _tmp25_;
	_tmp27_ = g_strdup_printf ("const %s *", _tmp26_);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_parameter_new ("s2", _tmp28_);
	_tmp30_ = _tmp29_;
	vala_ccode_function_add_parameter (_tmp24_, _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_g_free0 (_tmp28_);
	_g_free0 (_tmp26_);
	_tmp31_ = function;
	vala_ccode_base_module_push_function (self, _tmp31_);
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp32_;
		ValaCCodeIdentifier* _tmp33_;
		ValaCCodeIdentifier* _tmp34_;
		ValaCCodeIdentifier* _tmp35_;
		ValaCCodeBinaryExpression* _tmp36_;
		ValaCCodeBinaryExpression* _tmp37_;
		ValaCCodeFunction* _tmp38_;
		ValaCCodeFunction* _tmp39_;
		ValaCCodeBinaryExpression* _tmp40_;
		ValaCCodeFunction* _tmp41_;
		ValaCCodeFunction* _tmp42_;
		ValaCCodeExpression* _tmp43_;
		ValaCCodeExpression* _tmp44_;
		ValaCCodeFunction* _tmp45_;
		ValaCCodeFunction* _tmp46_;
		_tmp32_ = vala_ccode_identifier_new ("s1");
		_tmp33_ = _tmp32_;
		_tmp34_ = vala_ccode_identifier_new ("s2");
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp33_, (ValaCCodeExpression*) _tmp35_);
		_tmp37_ = _tmp36_;
		_vala_ccode_node_unref0 (_tmp35_);
		_vala_ccode_node_unref0 (_tmp33_);
		cexp = _tmp37_;
		_tmp38_ = vala_ccode_base_module_get_ccode (self);
		_tmp39_ = _tmp38_;
		_tmp40_ = cexp;
		vala_ccode_function_open_if (_tmp39_, (ValaCCodeExpression*) _tmp40_);
		_tmp41_ = vala_ccode_base_module_get_ccode (self);
		_tmp42_ = _tmp41_;
		_tmp43_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
		_tmp44_ = _tmp43_;
		vala_ccode_function_add_return (_tmp42_, _tmp44_);
		_vala_ccode_node_unref0 (_tmp44_);
		_tmp45_ = vala_ccode_base_module_get_ccode (self);
		_tmp46_ = _tmp45_;
		vala_ccode_function_close (_tmp46_);
		_vala_ccode_node_unref0 (cexp);
	}
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp47_;
		ValaCCodeIdentifier* _tmp48_;
		ValaCCodeConstant* _tmp49_;
		ValaCCodeConstant* _tmp50_;
		ValaCCodeBinaryExpression* _tmp51_;
		ValaCCodeBinaryExpression* _tmp52_;
		ValaCCodeFunction* _tmp53_;
		ValaCCodeFunction* _tmp54_;
		ValaCCodeBinaryExpression* _tmp55_;
		ValaCCodeFunction* _tmp56_;
		ValaCCodeFunction* _tmp57_;
		ValaCCodeExpression* _tmp58_;
		ValaCCodeExpression* _tmp59_;
		ValaCCodeFunction* _tmp60_;
		ValaCCodeFunction* _tmp61_;
		ValaCCodeIdentifier* _tmp62_;
		ValaCCodeIdentifier* _tmp63_;
		ValaCCodeConstant* _tmp64_;
		ValaCCodeConstant* _tmp65_;
		ValaCCodeBinaryExpression* _tmp66_;
		ValaCCodeFunction* _tmp67_;
		ValaCCodeFunction* _tmp68_;
		ValaCCodeBinaryExpression* _tmp69_;
		ValaCCodeFunction* _tmp70_;
		ValaCCodeFunction* _tmp71_;
		ValaCCodeExpression* _tmp72_;
		ValaCCodeExpression* _tmp73_;
		ValaCCodeFunction* _tmp74_;
		ValaCCodeFunction* _tmp75_;
		_tmp47_ = vala_ccode_identifier_new ("s1");
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_constant_new ("NULL");
		_tmp50_ = _tmp49_;
		_tmp51_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp48_, (ValaCCodeExpression*) _tmp50_);
		_tmp52_ = _tmp51_;
		_vala_ccode_node_unref0 (_tmp50_);
		_vala_ccode_node_unref0 (_tmp48_);
		cexp = _tmp52_;
		_tmp53_ = vala_ccode_base_module_get_ccode (self);
		_tmp54_ = _tmp53_;
		_tmp55_ = cexp;
		vala_ccode_function_open_if (_tmp54_, (ValaCCodeExpression*) _tmp55_);
		_tmp56_ = vala_ccode_base_module_get_ccode (self);
		_tmp57_ = _tmp56_;
		_tmp58_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
		_tmp59_ = _tmp58_;
		vala_ccode_function_add_return (_tmp57_, _tmp59_);
		_vala_ccode_node_unref0 (_tmp59_);
		_tmp60_ = vala_ccode_base_module_get_ccode (self);
		_tmp61_ = _tmp60_;
		vala_ccode_function_close (_tmp61_);
		_tmp62_ = vala_ccode_identifier_new ("s2");
		_tmp63_ = _tmp62_;
		_tmp64_ = vala_ccode_constant_new ("NULL");
		_tmp65_ = _tmp64_;
		_tmp66_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp63_, (ValaCCodeExpression*) _tmp65_);
		_vala_ccode_node_unref0 (cexp);
		cexp = _tmp66_;
		_vala_ccode_node_unref0 (_tmp65_);
		_vala_ccode_node_unref0 (_tmp63_);
		_tmp67_ = vala_ccode_base_module_get_ccode (self);
		_tmp68_ = _tmp67_;
		_tmp69_ = cexp;
		vala_ccode_function_open_if (_tmp68_, (ValaCCodeExpression*) _tmp69_);
		_tmp70_ = vala_ccode_base_module_get_ccode (self);
		_tmp71_ = _tmp70_;
		_tmp72_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
		_tmp73_ = _tmp72_;
		vala_ccode_function_add_return (_tmp71_, _tmp73_);
		_vala_ccode_node_unref0 (_tmp73_);
		_tmp74_ = vala_ccode_base_module_get_ccode (self);
		_tmp75_ = _tmp74_;
		vala_ccode_function_close (_tmp75_);
		_vala_ccode_node_unref0 (cexp);
	}
	has_instance_fields = FALSE;
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp76_;
		gint _f_size = 0;
		ValaList* _tmp77_;
		gint _tmp78_;
		gint _tmp79_;
		gint _f_index = 0;
		_tmp76_ = vala_struct_get_fields (st);
		_f_list = _tmp76_;
		_tmp77_ = _f_list;
		_tmp78_ = vala_collection_get_size ((ValaCollection*) _tmp77_);
		_tmp79_ = _tmp78_;
		_f_size = _tmp79_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp80_;
			gint _tmp81_;
			ValaField* f = NULL;
			ValaList* _tmp82_;
			gpointer _tmp83_;
			ValaField* _tmp84_;
			ValaMemberBinding _tmp85_;
			ValaMemberBinding _tmp86_;
			ValaCCodeExpression* cexp = NULL;
			ValaCCodeExpression* s1 = NULL;
			ValaCCodeIdentifier* _tmp87_;
			ValaCCodeIdentifier* _tmp88_;
			ValaField* _tmp89_;
			gchar* _tmp90_;
			gchar* _tmp91_;
			ValaCCodeMemberAccess* _tmp92_;
			ValaCCodeExpression* _tmp93_;
			ValaCCodeExpression* s2 = NULL;
			ValaCCodeIdentifier* _tmp94_;
			ValaCCodeIdentifier* _tmp95_;
			ValaField* _tmp96_;
			gchar* _tmp97_;
			gchar* _tmp98_;
			ValaCCodeMemberAccess* _tmp99_;
			ValaCCodeExpression* _tmp100_;
			ValaDataType* variable_type = NULL;
			ValaField* _tmp101_;
			ValaDataType* _tmp102_;
			ValaDataType* _tmp103_;
			ValaDataType* _tmp104_;
			gboolean _tmp105_ = FALSE;
			ValaField* _tmp106_;
			ValaDataType* _tmp107_;
			ValaDataType* _tmp108_;
			ValaCCodeFunction* _tmp156_;
			ValaCCodeFunction* _tmp157_;
			ValaCCodeExpression* _tmp158_;
			ValaCCodeFunction* _tmp159_;
			ValaCCodeFunction* _tmp160_;
			ValaCCodeExpression* _tmp161_;
			ValaCCodeExpression* _tmp162_;
			ValaCCodeFunction* _tmp163_;
			ValaCCodeFunction* _tmp164_;
			_f_index = _f_index + 1;
			_tmp80_ = _f_index;
			_tmp81_ = _f_size;
			if (!(_tmp80_ < _tmp81_)) {
				break;
			}
			_tmp82_ = _f_list;
			_tmp83_ = vala_list_get (_tmp82_, _f_index);
			f = (ValaField*) _tmp83_;
			_tmp84_ = f;
			_tmp85_ = vala_field_get_binding (_tmp84_);
			_tmp86_ = _tmp85_;
			if (_tmp86_ != VALA_MEMBER_BINDING_INSTANCE) {
				_vala_code_node_unref0 (f);
				continue;
			}
			has_instance_fields = TRUE;
			_tmp87_ = vala_ccode_identifier_new ("s1");
			_tmp88_ = _tmp87_;
			_tmp89_ = f;
			_tmp90_ = vala_get_ccode_name ((ValaCodeNode*) _tmp89_);
			_tmp91_ = _tmp90_;
			_tmp92_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp88_, _tmp91_);
			_tmp93_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
			_g_free0 (_tmp91_);
			_vala_ccode_node_unref0 (_tmp88_);
			s1 = _tmp93_;
			_tmp94_ = vala_ccode_identifier_new ("s2");
			_tmp95_ = _tmp94_;
			_tmp96_ = f;
			_tmp97_ = vala_get_ccode_name ((ValaCodeNode*) _tmp96_);
			_tmp98_ = _tmp97_;
			_tmp99_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp95_, _tmp98_);
			_tmp100_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp99_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
			_g_free0 (_tmp98_);
			_vala_ccode_node_unref0 (_tmp95_);
			s2 = _tmp100_;
			_tmp101_ = f;
			_tmp102_ = vala_variable_get_variable_type ((ValaVariable*) _tmp101_);
			_tmp103_ = _tmp102_;
			_tmp104_ = vala_data_type_copy (_tmp103_);
			variable_type = _tmp104_;
			vala_ccode_base_module_make_comparable_cexpression (self, &variable_type, &s1, &variable_type, &s2);
			_tmp106_ = f;
			_tmp107_ = vala_variable_get_variable_type ((ValaVariable*) _tmp106_);
			_tmp108_ = _tmp107_;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp108_, VALA_TYPE_NULL_TYPE)) {
				ValaField* _tmp109_;
				ValaDataType* _tmp110_;
				ValaDataType* _tmp111_;
				ValaDataType* _tmp112_;
				_tmp109_ = f;
				_tmp110_ = vala_variable_get_variable_type ((ValaVariable*) _tmp109_);
				_tmp111_ = _tmp110_;
				_tmp112_ = self->string_type;
				_tmp105_ = vala_data_type_compatible (_tmp111_, _tmp112_);
			} else {
				_tmp105_ = FALSE;
			}
			if (_tmp105_) {
				ValaCCodeFunctionCall* ccall = NULL;
				ValaCodeContext* _tmp113_;
				ValaProfile _tmp114_;
				ValaProfile _tmp115_;
				ValaCCodeFunctionCall* _tmp127_;
				ValaCCodeExpression* _tmp128_;
				ValaCCodeFunctionCall* _tmp129_;
				ValaCCodeExpression* _tmp130_;
				ValaCCodeFunctionCall* _tmp131_;
				ValaCCodeExpression* _tmp132_;
				_tmp113_ = self->priv->_context;
				_tmp114_ = vala_code_context_get_profile (_tmp113_);
				_tmp115_ = _tmp114_;
				if (_tmp115_ == VALA_PROFILE_POSIX) {
					ValaCCodeFile* _tmp116_;
					ValaCCodeIdentifier* _tmp117_;
					ValaCCodeIdentifier* _tmp118_;
					gchar* _tmp119_;
					gchar* _tmp120_;
					ValaCCodeIdentifier* _tmp121_;
					ValaCCodeIdentifier* _tmp122_;
					ValaCCodeFunctionCall* _tmp123_;
					_tmp116_ = self->cfile;
					vala_ccode_file_add_include (_tmp116_, "string.h", FALSE);
					_tmp117_ = vala_ccode_identifier_new ("strcmp");
					_tmp118_ = _tmp117_;
					_tmp119_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp118_);
					_tmp120_ = _tmp119_;
					_tmp121_ = vala_ccode_identifier_new (_tmp120_);
					_tmp122_ = _tmp121_;
					_tmp123_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp122_);
					_vala_ccode_node_unref0 (ccall);
					ccall = _tmp123_;
					_vala_ccode_node_unref0 (_tmp122_);
					_g_free0 (_tmp120_);
					_vala_ccode_node_unref0 (_tmp118_);
				} else {
					ValaCCodeIdentifier* _tmp124_;
					ValaCCodeIdentifier* _tmp125_;
					ValaCCodeFunctionCall* _tmp126_;
					_tmp124_ = vala_ccode_identifier_new ("g_strcmp0");
					_tmp125_ = _tmp124_;
					_tmp126_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp125_);
					_vala_ccode_node_unref0 (ccall);
					ccall = _tmp126_;
					_vala_ccode_node_unref0 (_tmp125_);
				}
				_tmp127_ = ccall;
				_tmp128_ = s1;
				vala_ccode_function_call_add_argument (_tmp127_, _tmp128_);
				_tmp129_ = ccall;
				_tmp130_ = s2;
				vala_ccode_function_call_add_argument (_tmp129_, _tmp130_);
				_tmp131_ = ccall;
				_tmp132_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp131_);
				_vala_ccode_node_unref0 (cexp);
				cexp = _tmp132_;
				_vala_ccode_node_unref0 (ccall);
			} else {
				ValaField* _tmp133_;
				ValaDataType* _tmp134_;
				ValaDataType* _tmp135_;
				_tmp133_ = f;
				_tmp134_ = vala_variable_get_variable_type ((ValaVariable*) _tmp133_);
				_tmp135_ = _tmp134_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp135_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
					gchar* equalfunc = NULL;
					ValaField* _tmp136_;
					ValaDataType* _tmp137_;
					ValaDataType* _tmp138_;
					ValaTypeSymbol* _tmp139_;
					ValaTypeSymbol* _tmp140_;
					gchar* _tmp141_;
					ValaCCodeFunctionCall* ccall = NULL;
					const gchar* _tmp142_;
					ValaCCodeIdentifier* _tmp143_;
					ValaCCodeIdentifier* _tmp144_;
					ValaCCodeFunctionCall* _tmp145_;
					ValaCCodeFunctionCall* _tmp146_;
					ValaCCodeFunctionCall* _tmp147_;
					ValaCCodeExpression* _tmp148_;
					ValaCCodeFunctionCall* _tmp149_;
					ValaCCodeExpression* _tmp150_;
					ValaCCodeFunctionCall* _tmp151_;
					ValaCCodeUnaryExpression* _tmp152_;
					_tmp136_ = f;
					_tmp137_ = vala_variable_get_variable_type ((ValaVariable*) _tmp136_);
					_tmp138_ = _tmp137_;
					_tmp139_ = vala_data_type_get_type_symbol (_tmp138_);
					_tmp140_ = _tmp139_;
					_tmp141_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_TYPE (_tmp140_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp140_) : NULL);
					equalfunc = _tmp141_;
					_tmp142_ = equalfunc;
					_tmp143_ = vala_ccode_identifier_new (_tmp142_);
					_tmp144_ = _tmp143_;
					_tmp145_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp144_);
					_tmp146_ = _tmp145_;
					_vala_ccode_node_unref0 (_tmp144_);
					ccall = _tmp146_;
					_tmp147_ = ccall;
					_tmp148_ = s1;
					vala_ccode_function_call_add_argument (_tmp147_, _tmp148_);
					_tmp149_ = ccall;
					_tmp150_ = s2;
					vala_ccode_function_call_add_argument (_tmp149_, _tmp150_);
					_tmp151_ = ccall;
					_tmp152_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp151_);
					_vala_ccode_node_unref0 (cexp);
					cexp = (ValaCCodeExpression*) _tmp152_;
					_vala_ccode_node_unref0 (ccall);
					_g_free0 (equalfunc);
				} else {
					ValaCCodeExpression* _tmp153_;
					ValaCCodeExpression* _tmp154_;
					ValaCCodeBinaryExpression* _tmp155_;
					_tmp153_ = s1;
					_tmp154_ = s2;
					_tmp155_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp153_, _tmp154_);
					_vala_ccode_node_unref0 (cexp);
					cexp = (ValaCCodeExpression*) _tmp155_;
				}
			}
			_tmp156_ = vala_ccode_base_module_get_ccode (self);
			_tmp157_ = _tmp156_;
			_tmp158_ = cexp;
			vala_ccode_function_open_if (_tmp157_, _tmp158_);
			_tmp159_ = vala_ccode_base_module_get_ccode (self);
			_tmp160_ = _tmp159_;
			_tmp161_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
			_tmp162_ = _tmp161_;
			vala_ccode_function_add_return (_tmp160_, _tmp162_);
			_vala_ccode_node_unref0 (_tmp162_);
			_tmp163_ = vala_ccode_base_module_get_ccode (self);
			_tmp164_ = _tmp163_;
			vala_ccode_function_close (_tmp164_);
			_vala_code_node_unref0 (variable_type);
			_vala_ccode_node_unref0 (s2);
			_vala_ccode_node_unref0 (s1);
			_vala_ccode_node_unref0 (cexp);
			_vala_code_node_unref0 (f);
		}
	}
	if (!has_instance_fields) {
		if (vala_struct_is_simple_type (st)) {
			ValaCCodeBinaryExpression* cexp = NULL;
			ValaCCodeIdentifier* _tmp165_;
			ValaCCodeIdentifier* _tmp166_;
			ValaCCodeUnaryExpression* _tmp167_;
			ValaCCodeUnaryExpression* _tmp168_;
			ValaCCodeIdentifier* _tmp169_;
			ValaCCodeIdentifier* _tmp170_;
			ValaCCodeUnaryExpression* _tmp171_;
			ValaCCodeUnaryExpression* _tmp172_;
			ValaCCodeBinaryExpression* _tmp173_;
			ValaCCodeBinaryExpression* _tmp174_;
			ValaCCodeFunction* _tmp175_;
			ValaCCodeFunction* _tmp176_;
			ValaCCodeBinaryExpression* _tmp177_;
			_tmp165_ = vala_ccode_identifier_new ("s1");
			_tmp166_ = _tmp165_;
			_tmp167_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp166_);
			_tmp168_ = _tmp167_;
			_tmp169_ = vala_ccode_identifier_new ("s2");
			_tmp170_ = _tmp169_;
			_tmp171_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp170_);
			_tmp172_ = _tmp171_;
			_tmp173_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp168_, (ValaCCodeExpression*) _tmp172_);
			_tmp174_ = _tmp173_;
			_vala_ccode_node_unref0 (_tmp172_);
			_vala_ccode_node_unref0 (_tmp170_);
			_vala_ccode_node_unref0 (_tmp168_);
			_vala_ccode_node_unref0 (_tmp166_);
			cexp = _tmp174_;
			_tmp175_ = vala_ccode_base_module_get_ccode (self);
			_tmp176_ = _tmp175_;
			_tmp177_ = cexp;
			vala_ccode_function_add_return (_tmp176_, (ValaCCodeExpression*) _tmp177_);
			_vala_ccode_node_unref0 (cexp);
		} else {
			ValaCCodeFunction* _tmp178_;
			ValaCCodeFunction* _tmp179_;
			ValaCCodeExpression* _tmp180_;
			ValaCCodeExpression* _tmp181_;
			_tmp178_ = vala_ccode_base_module_get_ccode (self);
			_tmp179_ = _tmp178_;
			_tmp180_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
			_tmp181_ = _tmp180_;
			vala_ccode_function_add_return (_tmp179_, _tmp181_);
			_vala_ccode_node_unref0 (_tmp181_);
		}
	} else {
		ValaCCodeFunction* _tmp182_;
		ValaCCodeFunction* _tmp183_;
		ValaCCodeExpression* _tmp184_;
		ValaCCodeExpression* _tmp185_;
		_tmp182_ = vala_ccode_base_module_get_ccode (self);
		_tmp183_ = _tmp182_;
		_tmp184_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
		_tmp185_ = _tmp184_;
		vala_ccode_function_add_return (_tmp183_, _tmp185_);
		_vala_ccode_node_unref0 (_tmp185_);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp186_ = self->cfile;
	_tmp187_ = function;
	vala_ccode_file_add_function_declaration (_tmp186_, _tmp187_);
	_tmp188_ = self->cfile;
	_tmp189_ = function;
	vala_ccode_file_add_function (_tmp188_, _tmp189_);
	result = equal_func;
	_vala_ccode_node_unref0 (function);
	return result;
}

static gchar*
vala_ccode_base_module_generate_numeric_equal_function (ValaCCodeBaseModule* self,
                                                        ValaTypeSymbol* sym)
{
	gchar* equal_func = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	const gchar* _tmp4_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp5_;
	ValaDataType* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeParameter* _tmp18_;
	ValaCCodeFunction* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	ValaCCodeParameter* _tmp24_;
	ValaCCodeParameter* _tmp25_;
	ValaCCodeFunction* _tmp26_;
	ValaCCodeFile* _tmp84_;
	ValaCCodeFunction* _tmp85_;
	ValaCCodeFile* _tmp86_;
	ValaCCodeFunction* _tmp87_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) sym);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("_%sequal", _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	equal_func = _tmp3_;
	_tmp4_ = equal_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp4_)) {
		result = equal_func;
		return result;
	}
	_tmp5_ = equal_func;
	_tmp6_ = self->bool_type;
	_tmp7_ = vala_get_ccode_name ((ValaCodeNode*) _tmp6_);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_ccode_function_new (_tmp5_, _tmp8_);
	_tmp10_ = _tmp9_;
	_g_free0 (_tmp8_);
	function = _tmp10_;
	_tmp11_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp11_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp12_ = function;
	_tmp13_ = vala_get_ccode_name ((ValaCodeNode*) sym);
	_tmp14_ = _tmp13_;
	_tmp15_ = g_strdup_printf ("const %s *", _tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_parameter_new ("s1", _tmp16_);
	_tmp18_ = _tmp17_;
	vala_ccode_function_add_parameter (_tmp12_, _tmp18_);
	_vala_ccode_node_unref0 (_tmp18_);
	_g_free0 (_tmp16_);
	_g_free0 (_tmp14_);
	_tmp19_ = function;
	_tmp20_ = vala_get_ccode_name ((ValaCodeNode*) sym);
	_tmp21_ = _tmp20_;
	_tmp22_ = g_strdup_printf ("const %s *", _tmp21_);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_ccode_parameter_new ("s2", _tmp23_);
	_tmp25_ = _tmp24_;
	vala_ccode_function_add_parameter (_tmp19_, _tmp25_);
	_vala_ccode_node_unref0 (_tmp25_);
	_g_free0 (_tmp23_);
	_g_free0 (_tmp21_);
	_tmp26_ = function;
	vala_ccode_base_module_push_function (self, _tmp26_);
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp27_;
		ValaCCodeIdentifier* _tmp28_;
		ValaCCodeIdentifier* _tmp29_;
		ValaCCodeIdentifier* _tmp30_;
		ValaCCodeBinaryExpression* _tmp31_;
		ValaCCodeBinaryExpression* _tmp32_;
		ValaCCodeFunction* _tmp33_;
		ValaCCodeFunction* _tmp34_;
		ValaCCodeBinaryExpression* _tmp35_;
		ValaCCodeFunction* _tmp36_;
		ValaCCodeFunction* _tmp37_;
		ValaCCodeExpression* _tmp38_;
		ValaCCodeExpression* _tmp39_;
		ValaCCodeFunction* _tmp40_;
		ValaCCodeFunction* _tmp41_;
		_tmp27_ = vala_ccode_identifier_new ("s1");
		_tmp28_ = _tmp27_;
		_tmp29_ = vala_ccode_identifier_new ("s2");
		_tmp30_ = _tmp29_;
		_tmp31_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp28_, (ValaCCodeExpression*) _tmp30_);
		_tmp32_ = _tmp31_;
		_vala_ccode_node_unref0 (_tmp30_);
		_vala_ccode_node_unref0 (_tmp28_);
		cexp = _tmp32_;
		_tmp33_ = vala_ccode_base_module_get_ccode (self);
		_tmp34_ = _tmp33_;
		_tmp35_ = cexp;
		vala_ccode_function_open_if (_tmp34_, (ValaCCodeExpression*) _tmp35_);
		_tmp36_ = vala_ccode_base_module_get_ccode (self);
		_tmp37_ = _tmp36_;
		_tmp38_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
		_tmp39_ = _tmp38_;
		vala_ccode_function_add_return (_tmp37_, _tmp39_);
		_vala_ccode_node_unref0 (_tmp39_);
		_tmp40_ = vala_ccode_base_module_get_ccode (self);
		_tmp41_ = _tmp40_;
		vala_ccode_function_close (_tmp41_);
		_vala_ccode_node_unref0 (cexp);
	}
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp42_;
		ValaCCodeIdentifier* _tmp43_;
		ValaCCodeConstant* _tmp44_;
		ValaCCodeConstant* _tmp45_;
		ValaCCodeBinaryExpression* _tmp46_;
		ValaCCodeBinaryExpression* _tmp47_;
		ValaCCodeFunction* _tmp48_;
		ValaCCodeFunction* _tmp49_;
		ValaCCodeBinaryExpression* _tmp50_;
		ValaCCodeFunction* _tmp51_;
		ValaCCodeFunction* _tmp52_;
		ValaCCodeExpression* _tmp53_;
		ValaCCodeExpression* _tmp54_;
		ValaCCodeFunction* _tmp55_;
		ValaCCodeFunction* _tmp56_;
		ValaCCodeIdentifier* _tmp57_;
		ValaCCodeIdentifier* _tmp58_;
		ValaCCodeConstant* _tmp59_;
		ValaCCodeConstant* _tmp60_;
		ValaCCodeBinaryExpression* _tmp61_;
		ValaCCodeFunction* _tmp62_;
		ValaCCodeFunction* _tmp63_;
		ValaCCodeBinaryExpression* _tmp64_;
		ValaCCodeFunction* _tmp65_;
		ValaCCodeFunction* _tmp66_;
		ValaCCodeExpression* _tmp67_;
		ValaCCodeExpression* _tmp68_;
		ValaCCodeFunction* _tmp69_;
		ValaCCodeFunction* _tmp70_;
		_tmp42_ = vala_ccode_identifier_new ("s1");
		_tmp43_ = _tmp42_;
		_tmp44_ = vala_ccode_constant_new ("NULL");
		_tmp45_ = _tmp44_;
		_tmp46_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp43_, (ValaCCodeExpression*) _tmp45_);
		_tmp47_ = _tmp46_;
		_vala_ccode_node_unref0 (_tmp45_);
		_vala_ccode_node_unref0 (_tmp43_);
		cexp = _tmp47_;
		_tmp48_ = vala_ccode_base_module_get_ccode (self);
		_tmp49_ = _tmp48_;
		_tmp50_ = cexp;
		vala_ccode_function_open_if (_tmp49_, (ValaCCodeExpression*) _tmp50_);
		_tmp51_ = vala_ccode_base_module_get_ccode (self);
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
		_tmp54_ = _tmp53_;
		vala_ccode_function_add_return (_tmp52_, _tmp54_);
		_vala_ccode_node_unref0 (_tmp54_);
		_tmp55_ = vala_ccode_base_module_get_ccode (self);
		_tmp56_ = _tmp55_;
		vala_ccode_function_close (_tmp56_);
		_tmp57_ = vala_ccode_identifier_new ("s2");
		_tmp58_ = _tmp57_;
		_tmp59_ = vala_ccode_constant_new ("NULL");
		_tmp60_ = _tmp59_;
		_tmp61_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp58_, (ValaCCodeExpression*) _tmp60_);
		_vala_ccode_node_unref0 (cexp);
		cexp = _tmp61_;
		_vala_ccode_node_unref0 (_tmp60_);
		_vala_ccode_node_unref0 (_tmp58_);
		_tmp62_ = vala_ccode_base_module_get_ccode (self);
		_tmp63_ = _tmp62_;
		_tmp64_ = cexp;
		vala_ccode_function_open_if (_tmp63_, (ValaCCodeExpression*) _tmp64_);
		_tmp65_ = vala_ccode_base_module_get_ccode (self);
		_tmp66_ = _tmp65_;
		_tmp67_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
		_tmp68_ = _tmp67_;
		vala_ccode_function_add_return (_tmp66_, _tmp68_);
		_vala_ccode_node_unref0 (_tmp68_);
		_tmp69_ = vala_ccode_base_module_get_ccode (self);
		_tmp70_ = _tmp69_;
		vala_ccode_function_close (_tmp70_);
		_vala_ccode_node_unref0 (cexp);
	}
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp71_;
		ValaCCodeIdentifier* _tmp72_;
		ValaCCodeUnaryExpression* _tmp73_;
		ValaCCodeUnaryExpression* _tmp74_;
		ValaCCodeIdentifier* _tmp75_;
		ValaCCodeIdentifier* _tmp76_;
		ValaCCodeUnaryExpression* _tmp77_;
		ValaCCodeUnaryExpression* _tmp78_;
		ValaCCodeBinaryExpression* _tmp79_;
		ValaCCodeBinaryExpression* _tmp80_;
		ValaCCodeFunction* _tmp81_;
		ValaCCodeFunction* _tmp82_;
		ValaCCodeBinaryExpression* _tmp83_;
		_tmp71_ = vala_ccode_identifier_new ("s1");
		_tmp72_ = _tmp71_;
		_tmp73_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp72_);
		_tmp74_ = _tmp73_;
		_tmp75_ = vala_ccode_identifier_new ("s2");
		_tmp76_ = _tmp75_;
		_tmp77_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp76_);
		_tmp78_ = _tmp77_;
		_tmp79_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp74_, (ValaCCodeExpression*) _tmp78_);
		_tmp80_ = _tmp79_;
		_vala_ccode_node_unref0 (_tmp78_);
		_vala_ccode_node_unref0 (_tmp76_);
		_vala_ccode_node_unref0 (_tmp74_);
		_vala_ccode_node_unref0 (_tmp72_);
		cexp = _tmp80_;
		_tmp81_ = vala_ccode_base_module_get_ccode (self);
		_tmp82_ = _tmp81_;
		_tmp83_ = cexp;
		vala_ccode_function_add_return (_tmp82_, (ValaCCodeExpression*) _tmp83_);
		_vala_ccode_node_unref0 (cexp);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp84_ = self->cfile;
	_tmp85_ = function;
	vala_ccode_file_add_function_declaration (_tmp84_, _tmp85_);
	_tmp86_ = self->cfile;
	_tmp87_ = function;
	vala_ccode_file_add_function (_tmp86_, _tmp87_);
	result = equal_func;
	_vala_ccode_node_unref0 (function);
	return result;
}

static gchar*
vala_ccode_base_module_generate_struct_dup_wrapper (ValaCCodeBaseModule* self,
                                                    ValaValueType* value_type)
{
	gchar* dup_func = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeFunction* _tmp18_;
	ValaTypeSymbol* _tmp19_;
	ValaTypeSymbol* _tmp20_;
	ValaStruct* _tmp21_;
	ValaCCodeFile* _tmp138_;
	ValaCCodeFunction* _tmp139_;
	ValaCCodeFile* _tmp140_;
	ValaCCodeFunction* _tmp141_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value_type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("_%sdup", _tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	dup_func = _tmp5_;
	_tmp6_ = dup_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
		result = dup_func;
		return result;
	}
	_tmp7_ = dup_func;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) value_type);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_function_new (_tmp7_, _tmp9_);
	_tmp11_ = _tmp10_;
	_g_free0 (_tmp9_);
	function = _tmp11_;
	_tmp12_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp12_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp13_ = function;
	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) value_type);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_parameter_new ("self", _tmp15_);
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_parameter (_tmp13_, _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_g_free0 (_tmp15_);
	_tmp18_ = function;
	vala_ccode_base_module_push_function (self, _tmp18_);
	_tmp19_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
	_tmp20_ = _tmp19_;
	_tmp21_ = self->gvalue_type;
	if (_tmp20_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
		ValaCCodeFunctionCall* dup_call = NULL;
		ValaCCodeIdentifier* _tmp22_;
		ValaCCodeIdentifier* _tmp23_;
		ValaCCodeFunctionCall* _tmp24_;
		ValaCCodeFunctionCall* _tmp25_;
		ValaCCodeFunctionCall* _tmp26_;
		ValaCCodeIdentifier* _tmp27_;
		ValaCCodeIdentifier* _tmp28_;
		ValaCCodeFunctionCall* _tmp29_;
		ValaCCodeIdentifier* _tmp30_;
		ValaCCodeIdentifier* _tmp31_;
		ValaCCodeFunction* _tmp32_;
		ValaCCodeFunction* _tmp33_;
		ValaCCodeFunctionCall* _tmp34_;
		_tmp22_ = vala_ccode_identifier_new ("g_boxed_copy");
		_tmp23_ = _tmp22_;
		_tmp24_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp23_);
		_tmp25_ = _tmp24_;
		_vala_ccode_node_unref0 (_tmp23_);
		dup_call = _tmp25_;
		_tmp26_ = dup_call;
		_tmp27_ = vala_ccode_identifier_new ("G_TYPE_VALUE");
		_tmp28_ = _tmp27_;
		vala_ccode_function_call_add_argument (_tmp26_, (ValaCCodeExpression*) _tmp28_);
		_vala_ccode_node_unref0 (_tmp28_);
		_tmp29_ = dup_call;
		_tmp30_ = vala_ccode_identifier_new ("self");
		_tmp31_ = _tmp30_;
		vala_ccode_function_call_add_argument (_tmp29_, (ValaCCodeExpression*) _tmp31_);
		_vala_ccode_node_unref0 (_tmp31_);
		_tmp32_ = vala_ccode_base_module_get_ccode (self);
		_tmp33_ = _tmp32_;
		_tmp34_ = dup_call;
		vala_ccode_function_add_return (_tmp33_, (ValaCCodeExpression*) _tmp34_);
		_vala_ccode_node_unref0 (dup_call);
	} else {
		ValaCCodeFunction* _tmp35_;
		ValaCCodeFunction* _tmp36_;
		gchar* _tmp37_;
		gchar* _tmp38_;
		ValaCCodeVariableDeclarator* _tmp39_;
		ValaCCodeVariableDeclarator* _tmp40_;
		ValaCCodeFunctionCall* creation_call = NULL;
		ValaCodeContext* _tmp41_;
		ValaProfile _tmp42_;
		ValaProfile _tmp43_;
		ValaCCodeFunction* _tmp78_;
		ValaCCodeFunction* _tmp79_;
		ValaCCodeIdentifier* _tmp80_;
		ValaCCodeIdentifier* _tmp81_;
		ValaCCodeFunctionCall* _tmp82_;
		ValaStruct* st = NULL;
		ValaTypeSymbol* _tmp83_;
		ValaTypeSymbol* _tmp84_;
		ValaStruct* _tmp85_;
		gboolean _tmp86_ = FALSE;
		ValaStruct* _tmp87_;
		ValaCCodeFunction* _tmp134_;
		ValaCCodeFunction* _tmp135_;
		ValaCCodeIdentifier* _tmp136_;
		ValaCCodeIdentifier* _tmp137_;
		_tmp35_ = vala_ccode_base_module_get_ccode (self);
		_tmp36_ = _tmp35_;
		_tmp37_ = vala_get_ccode_name ((ValaCodeNode*) value_type);
		_tmp38_ = _tmp37_;
		_tmp39_ = vala_ccode_variable_declarator_new ("dup", NULL, NULL);
		_tmp40_ = _tmp39_;
		vala_ccode_function_add_declaration (_tmp36_, _tmp38_, (ValaCCodeDeclarator*) _tmp40_, 0);
		_vala_ccode_node_unref0 (_tmp40_);
		_g_free0 (_tmp38_);
		_tmp41_ = self->priv->_context;
		_tmp42_ = vala_code_context_get_profile (_tmp41_);
		_tmp43_ = _tmp42_;
		if (_tmp43_ == VALA_PROFILE_POSIX) {
			ValaCCodeFile* _tmp44_;
			ValaCCodeIdentifier* _tmp45_;
			ValaCCodeIdentifier* _tmp46_;
			ValaCCodeFunctionCall* _tmp47_;
			ValaCCodeFunctionCall* _tmp48_;
			ValaCCodeConstant* _tmp49_;
			ValaCCodeConstant* _tmp50_;
			ValaCCodeFunctionCall* csizeof = NULL;
			ValaCCodeIdentifier* _tmp51_;
			ValaCCodeIdentifier* _tmp52_;
			ValaCCodeFunctionCall* _tmp53_;
			ValaCCodeFunctionCall* _tmp54_;
			ValaCCodeFunctionCall* _tmp55_;
			ValaTypeSymbol* _tmp56_;
			ValaTypeSymbol* _tmp57_;
			gchar* _tmp58_;
			gchar* _tmp59_;
			ValaCCodeIdentifier* _tmp60_;
			ValaCCodeIdentifier* _tmp61_;
			ValaCCodeFunctionCall* _tmp62_;
			ValaCCodeFunctionCall* _tmp63_;
			_tmp44_ = self->cfile;
			vala_ccode_file_add_include (_tmp44_, "stdlib.h", FALSE);
			_tmp45_ = vala_ccode_identifier_new ("calloc");
			_tmp46_ = _tmp45_;
			_tmp47_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp46_);
			_vala_ccode_node_unref0 (creation_call);
			creation_call = _tmp47_;
			_vala_ccode_node_unref0 (_tmp46_);
			_tmp48_ = creation_call;
			_tmp49_ = vala_ccode_constant_new ("1");
			_tmp50_ = _tmp49_;
			vala_ccode_function_call_add_argument (_tmp48_, (ValaCCodeExpression*) _tmp50_);
			_vala_ccode_node_unref0 (_tmp50_);
			_tmp51_ = vala_ccode_identifier_new ("sizeof");
			_tmp52_ = _tmp51_;
			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
			_tmp54_ = _tmp53_;
			_vala_ccode_node_unref0 (_tmp52_);
			csizeof = _tmp54_;
			_tmp55_ = csizeof;
			_tmp56_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_get_ccode_name ((ValaCodeNode*) _tmp57_);
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_ccode_identifier_new (_tmp59_);
			_tmp61_ = _tmp60_;
			vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp61_);
			_vala_ccode_node_unref0 (_tmp61_);
			_g_free0 (_tmp59_);
			_tmp62_ = creation_call;
			_tmp63_ = csizeof;
			vala_ccode_function_call_add_argument (_tmp62_, (ValaCCodeExpression*) _tmp63_);
			_vala_ccode_node_unref0 (csizeof);
		} else {
			ValaCCodeFile* _tmp64_;
			ValaCCodeIdentifier* _tmp65_;
			ValaCCodeIdentifier* _tmp66_;
			ValaCCodeFunctionCall* _tmp67_;
			ValaCCodeFunctionCall* _tmp68_;
			ValaTypeSymbol* _tmp69_;
			ValaTypeSymbol* _tmp70_;
			gchar* _tmp71_;
			gchar* _tmp72_;
			ValaCCodeIdentifier* _tmp73_;
			ValaCCodeIdentifier* _tmp74_;
			ValaCCodeFunctionCall* _tmp75_;
			ValaCCodeConstant* _tmp76_;
			ValaCCodeConstant* _tmp77_;
			_tmp64_ = self->cfile;
			vala_ccode_file_add_include (_tmp64_, "glib.h", FALSE);
			_tmp65_ = vala_ccode_identifier_new ("g_new0");
			_tmp66_ = _tmp65_;
			_tmp67_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp66_);
			_vala_ccode_node_unref0 (creation_call);
			creation_call = _tmp67_;
			_vala_ccode_node_unref0 (_tmp66_);
			_tmp68_ = creation_call;
			_tmp69_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
			_tmp70_ = _tmp69_;
			_tmp71_ = vala_get_ccode_name ((ValaCodeNode*) _tmp70_);
			_tmp72_ = _tmp71_;
			_tmp73_ = vala_ccode_identifier_new (_tmp72_);
			_tmp74_ = _tmp73_;
			vala_ccode_function_call_add_argument (_tmp68_, (ValaCCodeExpression*) _tmp74_);
			_vala_ccode_node_unref0 (_tmp74_);
			_g_free0 (_tmp72_);
			_tmp75_ = creation_call;
			_tmp76_ = vala_ccode_constant_new ("1");
			_tmp77_ = _tmp76_;
			vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp77_);
			_vala_ccode_node_unref0 (_tmp77_);
		}
		_tmp78_ = vala_ccode_base_module_get_ccode (self);
		_tmp79_ = _tmp78_;
		_tmp80_ = vala_ccode_identifier_new ("dup");
		_tmp81_ = _tmp80_;
		_tmp82_ = creation_call;
		vala_ccode_function_add_assignment (_tmp79_, (ValaCCodeExpression*) _tmp81_, (ValaCCodeExpression*) _tmp82_);
		_vala_ccode_node_unref0 (_tmp81_);
		_tmp83_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
		_tmp84_ = _tmp83_;
		_tmp85_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp84_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp84_) : NULL);
		st = _tmp85_;
		_tmp87_ = st;
		if (_tmp87_ != NULL) {
			ValaStruct* _tmp88_;
			_tmp88_ = st;
			_tmp86_ = vala_struct_is_disposable (_tmp88_);
		} else {
			_tmp86_ = FALSE;
		}
		if (_tmp86_) {
			ValaStruct* _tmp89_;
			ValaCCodeFunctionCall* copy_call = NULL;
			ValaStruct* _tmp91_;
			gchar* _tmp92_;
			gchar* _tmp93_;
			ValaCCodeIdentifier* _tmp94_;
			ValaCCodeIdentifier* _tmp95_;
			ValaCCodeFunctionCall* _tmp96_;
			ValaCCodeFunctionCall* _tmp97_;
			ValaCCodeFunctionCall* _tmp98_;
			ValaCCodeIdentifier* _tmp99_;
			ValaCCodeIdentifier* _tmp100_;
			ValaCCodeFunctionCall* _tmp101_;
			ValaCCodeIdentifier* _tmp102_;
			ValaCCodeIdentifier* _tmp103_;
			ValaCCodeFunction* _tmp104_;
			ValaCCodeFunction* _tmp105_;
			ValaCCodeFunctionCall* _tmp106_;
			_tmp89_ = st;
			if (!vala_get_ccode_has_copy_function (_tmp89_)) {
				ValaStruct* _tmp90_;
				_tmp90_ = st;
				vala_ccode_base_module_generate_struct_copy_function (self, _tmp90_);
			}
			_tmp91_ = st;
			_tmp92_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp91_);
			_tmp93_ = _tmp92_;
			_tmp94_ = vala_ccode_identifier_new (_tmp93_);
			_tmp95_ = _tmp94_;
			_tmp96_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp95_);
			_tmp97_ = _tmp96_;
			_vala_ccode_node_unref0 (_tmp95_);
			_g_free0 (_tmp93_);
			copy_call = _tmp97_;
			_tmp98_ = copy_call;
			_tmp99_ = vala_ccode_identifier_new ("self");
			_tmp100_ = _tmp99_;
			vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp100_);
			_vala_ccode_node_unref0 (_tmp100_);
			_tmp101_ = copy_call;
			_tmp102_ = vala_ccode_identifier_new ("dup");
			_tmp103_ = _tmp102_;
			vala_ccode_function_call_add_argument (_tmp101_, (ValaCCodeExpression*) _tmp103_);
			_vala_ccode_node_unref0 (_tmp103_);
			_tmp104_ = vala_ccode_base_module_get_ccode (self);
			_tmp105_ = _tmp104_;
			_tmp106_ = copy_call;
			vala_ccode_function_add_expression (_tmp105_, (ValaCCodeExpression*) _tmp106_);
			_vala_ccode_node_unref0 (copy_call);
		} else {
			ValaCCodeFile* _tmp107_;
			ValaCCodeFunctionCall* sizeof_call = NULL;
			ValaCCodeIdentifier* _tmp108_;
			ValaCCodeIdentifier* _tmp109_;
			ValaCCodeFunctionCall* _tmp110_;
			ValaCCodeFunctionCall* _tmp111_;
			ValaCCodeFunctionCall* _tmp112_;
			ValaTypeSymbol* _tmp113_;
			ValaTypeSymbol* _tmp114_;
			gchar* _tmp115_;
			gchar* _tmp116_;
			ValaCCodeConstant* _tmp117_;
			ValaCCodeConstant* _tmp118_;
			ValaCCodeFunctionCall* copy_call = NULL;
			ValaCCodeIdentifier* _tmp119_;
			ValaCCodeIdentifier* _tmp120_;
			ValaCCodeFunctionCall* _tmp121_;
			ValaCCodeFunctionCall* _tmp122_;
			ValaCCodeFunctionCall* _tmp123_;
			ValaCCodeIdentifier* _tmp124_;
			ValaCCodeIdentifier* _tmp125_;
			ValaCCodeFunctionCall* _tmp126_;
			ValaCCodeIdentifier* _tmp127_;
			ValaCCodeIdentifier* _tmp128_;
			ValaCCodeFunctionCall* _tmp129_;
			ValaCCodeFunctionCall* _tmp130_;
			ValaCCodeFunction* _tmp131_;
			ValaCCodeFunction* _tmp132_;
			ValaCCodeFunctionCall* _tmp133_;
			_tmp107_ = self->cfile;
			vala_ccode_file_add_include (_tmp107_, "string.h", FALSE);
			_tmp108_ = vala_ccode_identifier_new ("sizeof");
			_tmp109_ = _tmp108_;
			_tmp110_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp109_);
			_tmp111_ = _tmp110_;
			_vala_ccode_node_unref0 (_tmp109_);
			sizeof_call = _tmp111_;
			_tmp112_ = sizeof_call;
			_tmp113_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
			_tmp114_ = _tmp113_;
			_tmp115_ = vala_get_ccode_name ((ValaCodeNode*) _tmp114_);
			_tmp116_ = _tmp115_;
			_tmp117_ = vala_ccode_constant_new (_tmp116_);
			_tmp118_ = _tmp117_;
			vala_ccode_function_call_add_argument (_tmp112_, (ValaCCodeExpression*) _tmp118_);
			_vala_ccode_node_unref0 (_tmp118_);
			_g_free0 (_tmp116_);
			_tmp119_ = vala_ccode_identifier_new ("memcpy");
			_tmp120_ = _tmp119_;
			_tmp121_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp120_);
			_tmp122_ = _tmp121_;
			_vala_ccode_node_unref0 (_tmp120_);
			copy_call = _tmp122_;
			_tmp123_ = copy_call;
			_tmp124_ = vala_ccode_identifier_new ("dup");
			_tmp125_ = _tmp124_;
			vala_ccode_function_call_add_argument (_tmp123_, (ValaCCodeExpression*) _tmp125_);
			_vala_ccode_node_unref0 (_tmp125_);
			_tmp126_ = copy_call;
			_tmp127_ = vala_ccode_identifier_new ("self");
			_tmp128_ = _tmp127_;
			vala_ccode_function_call_add_argument (_tmp126_, (ValaCCodeExpression*) _tmp128_);
			_vala_ccode_node_unref0 (_tmp128_);
			_tmp129_ = copy_call;
			_tmp130_ = sizeof_call;
			vala_ccode_function_call_add_argument (_tmp129_, (ValaCCodeExpression*) _tmp130_);
			_tmp131_ = vala_ccode_base_module_get_ccode (self);
			_tmp132_ = _tmp131_;
			_tmp133_ = copy_call;
			vala_ccode_function_add_expression (_tmp132_, (ValaCCodeExpression*) _tmp133_);
			_vala_ccode_node_unref0 (copy_call);
			_vala_ccode_node_unref0 (sizeof_call);
		}
		_tmp134_ = vala_ccode_base_module_get_ccode (self);
		_tmp135_ = _tmp134_;
		_tmp136_ = vala_ccode_identifier_new ("dup");
		_tmp137_ = _tmp136_;
		vala_ccode_function_add_return (_tmp135_, (ValaCCodeExpression*) _tmp137_);
		_vala_ccode_node_unref0 (_tmp137_);
		_vala_code_node_unref0 (st);
		_vala_ccode_node_unref0 (creation_call);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp138_ = self->cfile;
	_tmp139_ = function;
	vala_ccode_file_add_function_declaration (_tmp138_, _tmp139_);
	_tmp140_ = self->cfile;
	_tmp141_ = function;
	vala_ccode_file_add_function (_tmp140_, _tmp141_);
	result = dup_func;
	_vala_ccode_node_unref0 (function);
	return result;
}

gchar*
vala_ccode_base_module_generate_dup_func_wrapper (ValaCCodeBaseModule* self,
                                                  ValaDataType* type)
{
	gchar* destroy_func = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeFunction* _tmp18_;
	ValaCCodeFunctionCall* free_call = NULL;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeIdentifier* _tmp20_;
	ValaCCodeFunctionCall* _tmp21_;
	ValaCCodeFunctionCall* _tmp22_;
	ValaCCodeFunctionCall* _tmp23_;
	ValaTypeSymbol* _tmp24_;
	ValaTypeSymbol* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeFunctionCall* _tmp30_;
	ValaCCodeIdentifier* _tmp31_;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	ValaCCodeFunctionCall* _tmp35_;
	ValaCCodeFile* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	ValaCCodeFile* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("_vala_%s_copy", _tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	destroy_func = _tmp5_;
	_tmp6_ = destroy_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
		result = destroy_func;
		return result;
	}
	_tmp7_ = destroy_func;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_function_new (_tmp7_, _tmp9_);
	_tmp11_ = _tmp10_;
	_g_free0 (_tmp9_);
	function = _tmp11_;
	_tmp12_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp12_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp13_ = function;
	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_parameter_new ("self", _tmp15_);
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_parameter (_tmp13_, _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_g_free0 (_tmp15_);
	_tmp18_ = function;
	vala_ccode_base_module_push_function (self, _tmp18_);
	_tmp19_ = vala_ccode_identifier_new ("g_boxed_copy");
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp20_);
	_tmp22_ = _tmp21_;
	_vala_ccode_node_unref0 (_tmp20_);
	free_call = _tmp22_;
	_tmp23_ = free_call;
	_tmp24_ = vala_data_type_get_type_symbol (type);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_ccode_identifier_new (_tmp27_);
	_tmp29_ = _tmp28_;
	vala_ccode_function_call_add_argument (_tmp23_, (ValaCCodeExpression*) _tmp29_);
	_vala_ccode_node_unref0 (_tmp29_);
	_g_free0 (_tmp27_);
	_tmp30_ = free_call;
	_tmp31_ = vala_ccode_identifier_new ("self");
	_tmp32_ = _tmp31_;
	vala_ccode_function_call_add_argument (_tmp30_, (ValaCCodeExpression*) _tmp32_);
	_vala_ccode_node_unref0 (_tmp32_);
	_tmp33_ = vala_ccode_base_module_get_ccode (self);
	_tmp34_ = _tmp33_;
	_tmp35_ = free_call;
	vala_ccode_function_add_return (_tmp34_, (ValaCCodeExpression*) _tmp35_);
	vala_ccode_base_module_pop_function (self);
	_tmp36_ = self->cfile;
	_tmp37_ = function;
	vala_ccode_file_add_function_declaration (_tmp36_, _tmp37_);
	_tmp38_ = self->cfile;
	_tmp39_ = function;
	vala_ccode_file_add_function (_tmp38_, _tmp39_);
	result = destroy_func;
	_vala_ccode_node_unref0 (free_call);
	_vala_ccode_node_unref0 (function);
	return result;
}

gchar*
vala_ccode_base_module_generate_free_function_address_of_wrapper (ValaCCodeBaseModule* self,
                                                                  ValaDataType* type)
{
	gchar* destroy_func = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaClass* cl = NULL;
	ValaTypeSymbol* _tmp16_;
	ValaTypeSymbol* _tmp17_;
	ValaClass* _tmp18_;
	ValaCCodeFunctionCall* free_call = NULL;
	ValaClass* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	ValaCCodeIdentifier* _tmp22_;
	ValaCCodeIdentifier* _tmp23_;
	ValaCCodeFunctionCall* _tmp24_;
	ValaCCodeFunctionCall* _tmp25_;
	ValaCCodeFunctionCall* _tmp26_;
	ValaCCodeIdentifier* _tmp27_;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeUnaryExpression* _tmp29_;
	ValaCCodeUnaryExpression* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeFunctionCall* _tmp33_;
	ValaCCodeFile* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeFile* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("_vala_%s_free_function_address_of", _tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	destroy_func = _tmp5_;
	_tmp6_ = destroy_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
		result = destroy_func;
		return result;
	}
	_tmp7_ = destroy_func;
	_tmp8_ = vala_ccode_function_new (_tmp7_, "void");
	function = _tmp8_;
	_tmp9_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp9_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp10_ = function;
	_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_parameter_new ("self", _tmp12_);
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp10_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_g_free0 (_tmp12_);
	_tmp15_ = function;
	vala_ccode_base_module_push_function (self, _tmp15_);
	_tmp16_ = vala_data_type_get_type_symbol (type);
	_tmp17_ = _tmp16_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp17_) : NULL;
	_tmp18_ = cl;
	_vala_assert (_tmp18_ != NULL, "cl != null");
	_tmp19_ = cl;
	_tmp20_ = vala_get_ccode_free_function ((ValaTypeSymbol*) _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_ccode_identifier_new (_tmp21_);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp23_);
	_tmp25_ = _tmp24_;
	_vala_ccode_node_unref0 (_tmp23_);
	_g_free0 (_tmp21_);
	free_call = _tmp25_;
	_tmp26_ = free_call;
	_tmp27_ = vala_ccode_identifier_new ("self");
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp28_);
	_tmp30_ = _tmp29_;
	vala_ccode_function_call_add_argument (_tmp26_, (ValaCCodeExpression*) _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_vala_ccode_node_unref0 (_tmp28_);
	_tmp31_ = vala_ccode_base_module_get_ccode (self);
	_tmp32_ = _tmp31_;
	_tmp33_ = free_call;
	vala_ccode_function_add_expression (_tmp32_, (ValaCCodeExpression*) _tmp33_);
	vala_ccode_base_module_pop_function (self);
	_tmp34_ = self->cfile;
	_tmp35_ = function;
	vala_ccode_file_add_function_declaration (_tmp34_, _tmp35_);
	_tmp36_ = self->cfile;
	_tmp37_ = function;
	vala_ccode_file_add_function (_tmp36_, _tmp37_);
	result = destroy_func;
	_vala_ccode_node_unref0 (free_call);
	_vala_ccode_node_unref0 (function);
	return result;
}

gchar*
vala_ccode_base_module_generate_destroy_function_content_of_wrapper (ValaCCodeBaseModule* self,
                                                                     ValaDataType* type)
{
	gchar* destroy_func = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaDataType* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeParameter* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	ValaCCodeFunction* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	ValaCCodeVariableDeclarator* _tmp21_;
	ValaCCodeVariableDeclarator* _tmp22_;
	ValaCCodeUnaryExpression* cast = NULL;
	ValaCCodeIdentifier* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	ValaCCodeCastExpression* _tmp29_;
	ValaCCodeCastExpression* _tmp30_;
	ValaCCodeUnaryExpression* _tmp31_;
	ValaCCodeUnaryExpression* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeIdentifier* _tmp36_;
	ValaCCodeUnaryExpression* _tmp37_;
	ValaCCodeFunctionCall* free_call = NULL;
	ValaCCodeExpression* _tmp38_;
	ValaCCodeExpression* _tmp39_;
	ValaCCodeFunctionCall* _tmp40_;
	ValaCCodeFunctionCall* _tmp41_;
	ValaCCodeFunctionCall* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeFunction* _tmp45_;
	ValaCCodeFunction* _tmp46_;
	ValaCCodeFunctionCall* _tmp47_;
	ValaCCodeFile* _tmp48_;
	ValaCCodeFunction* _tmp49_;
	ValaCCodeFile* _tmp50_;
	ValaCCodeFunction* _tmp51_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("_vala_%s_free_function_content_of", _tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	destroy_func = _tmp5_;
	_tmp6_ = destroy_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
		result = destroy_func;
		return result;
	}
	_tmp7_ = destroy_func;
	_tmp8_ = vala_ccode_function_new (_tmp7_, "void");
	function = _tmp8_;
	_tmp9_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp9_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp10_ = function;
	_tmp11_ = self->pointer_type;
	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_parameter_new ("data", _tmp13_);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_parameter (_tmp10_, _tmp15_);
	_vala_ccode_node_unref0 (_tmp15_);
	_g_free0 (_tmp13_);
	_tmp16_ = function;
	vala_ccode_base_module_push_function (self, _tmp16_);
	_tmp17_ = vala_ccode_base_module_get_ccode (self);
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
	_tmp22_ = _tmp21_;
	vala_ccode_function_add_declaration (_tmp18_, _tmp20_, (ValaCCodeDeclarator*) _tmp22_, 0);
	_vala_ccode_node_unref0 (_tmp22_);
	_g_free0 (_tmp20_);
	_tmp23_ = vala_ccode_identifier_new ("data");
	_tmp24_ = _tmp23_;
	_tmp25_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp26_ = _tmp25_;
	_tmp27_ = g_strconcat (_tmp26_, "*", NULL);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp24_, _tmp28_);
	_tmp30_ = _tmp29_;
	_tmp31_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp30_);
	_tmp32_ = _tmp31_;
	_vala_ccode_node_unref0 (_tmp30_);
	_g_free0 (_tmp28_);
	_g_free0 (_tmp26_);
	_vala_ccode_node_unref0 (_tmp24_);
	cast = _tmp32_;
	_tmp33_ = vala_ccode_base_module_get_ccode (self);
	_tmp34_ = _tmp33_;
	_tmp35_ = vala_ccode_identifier_new ("self");
	_tmp36_ = _tmp35_;
	_tmp37_ = cast;
	vala_ccode_function_add_assignment (_tmp34_, (ValaCCodeExpression*) _tmp36_, (ValaCCodeExpression*) _tmp37_);
	_vala_ccode_node_unref0 (_tmp36_);
	_tmp38_ = vala_ccode_base_module_get_destroy0_func_expression (self, type, FALSE);
	_tmp39_ = _tmp38_;
	_tmp40_ = vala_ccode_function_call_new (_tmp39_);
	_tmp41_ = _tmp40_;
	_vala_ccode_node_unref0 (_tmp39_);
	free_call = _tmp41_;
	_tmp42_ = free_call;
	_tmp43_ = vala_ccode_identifier_new ("self");
	_tmp44_ = _tmp43_;
	vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp44_);
	_vala_ccode_node_unref0 (_tmp44_);
	_tmp45_ = vala_ccode_base_module_get_ccode (self);
	_tmp46_ = _tmp45_;
	_tmp47_ = free_call;
	vala_ccode_function_add_expression (_tmp46_, (ValaCCodeExpression*) _tmp47_);
	vala_ccode_base_module_pop_function (self);
	_tmp48_ = self->cfile;
	_tmp49_ = function;
	vala_ccode_file_add_function_declaration (_tmp48_, _tmp49_);
	_tmp50_ = self->cfile;
	_tmp51_ = function;
	vala_ccode_file_add_function (_tmp50_, _tmp51_);
	result = destroy_func;
	_vala_ccode_node_unref0 (free_call);
	_vala_ccode_node_unref0 (cast);
	_vala_ccode_node_unref0 (function);
	return result;
}

gchar*
vala_ccode_base_module_generate_free_func_wrapper (ValaCCodeBaseModule* self,
                                                   ValaDataType* type)
{
	gchar* destroy_func = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	gboolean _tmp16_ = FALSE;
	ValaTypeSymbol* _tmp17_;
	ValaTypeSymbol* _tmp18_;
	ValaCCodeFile* _tmp78_;
	ValaCCodeFunction* _tmp79_;
	ValaCCodeFile* _tmp80_;
	ValaCCodeFunction* _tmp81_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("_vala_%s_free", _tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	destroy_func = _tmp5_;
	_tmp6_ = destroy_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
		result = destroy_func;
		return result;
	}
	_tmp7_ = destroy_func;
	_tmp8_ = vala_ccode_function_new (_tmp7_, "void");
	function = _tmp8_;
	_tmp9_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp9_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp10_ = function;
	_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_parameter_new ("self", _tmp12_);
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp10_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_g_free0 (_tmp12_);
	_tmp15_ = function;
	vala_ccode_base_module_push_function (self, _tmp15_);
	_tmp17_ = vala_data_type_get_type_symbol (type);
	_tmp18_ = _tmp17_;
	if (vala_get_ccode_is_gboxed (_tmp18_)) {
		_tmp16_ = TRUE;
	} else {
		gboolean _tmp19_ = FALSE;
		ValaStruct* _tmp20_;
		_tmp20_ = self->gvalue_type;
		if (_tmp20_ != NULL) {
			ValaTypeSymbol* _tmp21_;
			ValaTypeSymbol* _tmp22_;
			ValaStruct* _tmp23_;
			_tmp21_ = vala_data_type_get_type_symbol (type);
			_tmp22_ = _tmp21_;
			_tmp23_ = self->gvalue_type;
			_tmp19_ = _tmp22_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		} else {
			_tmp19_ = FALSE;
		}
		_tmp16_ = _tmp19_;
	}
	if (_tmp16_) {
		ValaCCodeFunctionCall* free_call = NULL;
		ValaCCodeIdentifier* _tmp24_;
		ValaCCodeIdentifier* _tmp25_;
		ValaCCodeFunctionCall* _tmp26_;
		ValaCCodeFunctionCall* _tmp27_;
		ValaCCodeFunctionCall* _tmp28_;
		ValaTypeSymbol* _tmp29_;
		ValaTypeSymbol* _tmp30_;
		gchar* _tmp31_;
		gchar* _tmp32_;
		ValaCCodeIdentifier* _tmp33_;
		ValaCCodeIdentifier* _tmp34_;
		ValaCCodeFunctionCall* _tmp35_;
		ValaCCodeIdentifier* _tmp36_;
		ValaCCodeIdentifier* _tmp37_;
		ValaCCodeFunction* _tmp38_;
		ValaCCodeFunction* _tmp39_;
		ValaCCodeFunctionCall* _tmp40_;
		_tmp24_ = vala_ccode_identifier_new ("g_boxed_free");
		_tmp25_ = _tmp24_;
		_tmp26_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp25_);
		_tmp27_ = _tmp26_;
		_vala_ccode_node_unref0 (_tmp25_);
		free_call = _tmp27_;
		_tmp28_ = free_call;
		_tmp29_ = vala_data_type_get_type_symbol (type);
		_tmp30_ = _tmp29_;
		_tmp31_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp30_);
		_tmp32_ = _tmp31_;
		_tmp33_ = vala_ccode_identifier_new (_tmp32_);
		_tmp34_ = _tmp33_;
		vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp34_);
		_vala_ccode_node_unref0 (_tmp34_);
		_g_free0 (_tmp32_);
		_tmp35_ = free_call;
		_tmp36_ = vala_ccode_identifier_new ("self");
		_tmp37_ = _tmp36_;
		vala_ccode_function_call_add_argument (_tmp35_, (ValaCCodeExpression*) _tmp37_);
		_vala_ccode_node_unref0 (_tmp37_);
		_tmp38_ = vala_ccode_base_module_get_ccode (self);
		_tmp39_ = _tmp38_;
		_tmp40_ = free_call;
		vala_ccode_function_add_expression (_tmp39_, (ValaCCodeExpression*) _tmp40_);
		_vala_ccode_node_unref0 (free_call);
	} else {
		ValaStruct* st = NULL;
		ValaTypeSymbol* _tmp41_;
		ValaTypeSymbol* _tmp42_;
		gboolean _tmp43_ = FALSE;
		ValaStruct* _tmp44_;
		ValaCCodeFunctionCall* free_call = NULL;
		ValaCodeContext* _tmp61_;
		ValaProfile _tmp62_;
		ValaProfile _tmp63_;
		ValaCCodeFunctionCall* _tmp72_;
		ValaCCodeIdentifier* _tmp73_;
		ValaCCodeIdentifier* _tmp74_;
		ValaCCodeFunction* _tmp75_;
		ValaCCodeFunction* _tmp76_;
		ValaCCodeFunctionCall* _tmp77_;
		_tmp41_ = vala_data_type_get_type_symbol (type);
		_tmp42_ = _tmp41_;
		st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp42_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp42_) : NULL;
		_tmp44_ = st;
		if (_tmp44_ != NULL) {
			ValaStruct* _tmp45_;
			_tmp45_ = st;
			_tmp43_ = vala_struct_is_disposable (_tmp45_);
		} else {
			_tmp43_ = FALSE;
		}
		if (_tmp43_) {
			ValaStruct* _tmp46_;
			ValaCCodeFunctionCall* destroy_call = NULL;
			ValaStruct* _tmp48_;
			gchar* _tmp49_;
			gchar* _tmp50_;
			ValaCCodeIdentifier* _tmp51_;
			ValaCCodeIdentifier* _tmp52_;
			ValaCCodeFunctionCall* _tmp53_;
			ValaCCodeFunctionCall* _tmp54_;
			ValaCCodeFunctionCall* _tmp55_;
			ValaCCodeIdentifier* _tmp56_;
			ValaCCodeIdentifier* _tmp57_;
			ValaCCodeFunction* _tmp58_;
			ValaCCodeFunction* _tmp59_;
			ValaCCodeFunctionCall* _tmp60_;
			_tmp46_ = st;
			if (!vala_get_ccode_has_destroy_function (_tmp46_)) {
				ValaStruct* _tmp47_;
				_tmp47_ = st;
				vala_ccode_base_module_generate_struct_destroy_function (self, _tmp47_);
			}
			_tmp48_ = st;
			_tmp49_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp48_);
			_tmp50_ = _tmp49_;
			_tmp51_ = vala_ccode_identifier_new (_tmp50_);
			_tmp52_ = _tmp51_;
			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
			_tmp54_ = _tmp53_;
			_vala_ccode_node_unref0 (_tmp52_);
			_g_free0 (_tmp50_);
			destroy_call = _tmp54_;
			_tmp55_ = destroy_call;
			_tmp56_ = vala_ccode_identifier_new ("self");
			_tmp57_ = _tmp56_;
			vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp57_);
			_vala_ccode_node_unref0 (_tmp57_);
			_tmp58_ = vala_ccode_base_module_get_ccode (self);
			_tmp59_ = _tmp58_;
			_tmp60_ = destroy_call;
			vala_ccode_function_add_expression (_tmp59_, (ValaCCodeExpression*) _tmp60_);
			_vala_ccode_node_unref0 (destroy_call);
		}
		_tmp61_ = self->priv->_context;
		_tmp62_ = vala_code_context_get_profile (_tmp61_);
		_tmp63_ = _tmp62_;
		if (_tmp63_ == VALA_PROFILE_POSIX) {
			ValaCCodeFile* _tmp64_;
			ValaCCodeIdentifier* _tmp65_;
			ValaCCodeIdentifier* _tmp66_;
			ValaCCodeFunctionCall* _tmp67_;
			_tmp64_ = self->cfile;
			vala_ccode_file_add_include (_tmp64_, "stdlib.h", FALSE);
			_tmp65_ = vala_ccode_identifier_new ("free");
			_tmp66_ = _tmp65_;
			_tmp67_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp66_);
			_vala_ccode_node_unref0 (free_call);
			free_call = _tmp67_;
			_vala_ccode_node_unref0 (_tmp66_);
		} else {
			ValaCCodeFile* _tmp68_;
			ValaCCodeIdentifier* _tmp69_;
			ValaCCodeIdentifier* _tmp70_;
			ValaCCodeFunctionCall* _tmp71_;
			_tmp68_ = self->cfile;
			vala_ccode_file_add_include (_tmp68_, "glib.h", FALSE);
			_tmp69_ = vala_ccode_identifier_new ("g_free");
			_tmp70_ = _tmp69_;
			_tmp71_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp70_);
			_vala_ccode_node_unref0 (free_call);
			free_call = _tmp71_;
			_vala_ccode_node_unref0 (_tmp70_);
		}
		_tmp72_ = free_call;
		_tmp73_ = vala_ccode_identifier_new ("self");
		_tmp74_ = _tmp73_;
		vala_ccode_function_call_add_argument (_tmp72_, (ValaCCodeExpression*) _tmp74_);
		_vala_ccode_node_unref0 (_tmp74_);
		_tmp75_ = vala_ccode_base_module_get_ccode (self);
		_tmp76_ = _tmp75_;
		_tmp77_ = free_call;
		vala_ccode_function_add_expression (_tmp76_, (ValaCCodeExpression*) _tmp77_);
		_vala_ccode_node_unref0 (free_call);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp78_ = self->cfile;
	_tmp79_ = function;
	vala_ccode_file_add_function_declaration (_tmp78_, _tmp79_);
	_tmp80_ = self->cfile;
	_tmp81_ = function;
	vala_ccode_file_add_function (_tmp80_, _tmp81_);
	result = destroy_func;
	_vala_ccode_node_unref0 (function);
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_destroy0_func_expression (ValaCCodeBaseModule* self,
                                                     ValaDataType* type,
                                                     gboolean is_chainup)
{
	ValaCCodeExpression* element_destroy_func_expression = NULL;
	ValaCCodeExpression* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_destroy_func_expression (self, type, is_chainup);
	element_destroy_func_expression = _tmp0_;
	if (!G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
		ValaCCodeExpression* _tmp2_;
		_tmp2_ = element_destroy_func_expression;
		_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CCODE_IDENTIFIER);
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		ValaCCodeIdentifier* freeid = NULL;
		ValaCCodeExpression* _tmp3_;
		ValaCCodeIdentifier* _tmp4_;
		gchar* free0_func = NULL;
		ValaCCodeIdentifier* _tmp5_;
		const gchar* _tmp6_;
		const gchar* _tmp7_;
		gchar* _tmp8_;
		const gchar* _tmp9_;
		const gchar* _tmp32_;
		ValaCCodeIdentifier* _tmp33_;
		_tmp3_ = element_destroy_func_expression;
		_tmp4_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
		freeid = _tmp4_;
		_tmp5_ = freeid;
		_tmp6_ = vala_ccode_identifier_get_name (_tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = g_strdup_printf ("_%s0_", _tmp7_);
		free0_func = _tmp8_;
		_tmp9_ = free0_func;
		if (vala_ccode_base_module_add_wrapper (self, _tmp9_)) {
			ValaCCodeFunction* function = NULL;
			const gchar* _tmp10_;
			ValaCCodeFunction* _tmp11_;
			ValaCCodeFunction* _tmp12_;
			ValaCCodeFunction* _tmp13_;
			ValaDataType* _tmp14_;
			gchar* _tmp15_;
			gchar* _tmp16_;
			ValaCCodeParameter* _tmp17_;
			ValaCCodeParameter* _tmp18_;
			ValaCCodeFunction* _tmp19_;
			ValaCCodeFunction* _tmp20_;
			ValaCCodeFunction* _tmp21_;
			ValaCCodeIdentifier* _tmp22_;
			ValaCCodeIdentifier* _tmp23_;
			ValaGLibValue* _tmp24_;
			ValaGLibValue* _tmp25_;
			ValaCCodeExpression* _tmp26_;
			ValaCCodeExpression* _tmp27_;
			ValaCCodeFile* _tmp28_;
			ValaCCodeFunction* _tmp29_;
			ValaCCodeFile* _tmp30_;
			ValaCCodeFunction* _tmp31_;
			_tmp10_ = free0_func;
			_tmp11_ = vala_ccode_function_new (_tmp10_, "void");
			function = _tmp11_;
			_tmp12_ = function;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp12_, VALA_CCODE_MODIFIERS_STATIC);
			_tmp13_ = function;
			_tmp14_ = self->pointer_type;
			_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
			_tmp16_ = _tmp15_;
			_tmp17_ = vala_ccode_parameter_new ("var", _tmp16_);
			_tmp18_ = _tmp17_;
			vala_ccode_function_add_parameter (_tmp13_, _tmp18_);
			_vala_ccode_node_unref0 (_tmp18_);
			_g_free0 (_tmp16_);
			_tmp19_ = function;
			vala_ccode_base_module_push_function (self, _tmp19_);
			_tmp20_ = vala_ccode_base_module_get_ccode (self);
			_tmp21_ = _tmp20_;
			_tmp22_ = vala_ccode_identifier_new ("var");
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_glib_value_new (type, (ValaCCodeExpression*) _tmp23_, TRUE);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp25_, TRUE);
			_tmp27_ = _tmp26_;
			vala_ccode_function_add_expression (_tmp21_, _tmp27_);
			_vala_ccode_node_unref0 (_tmp27_);
			_vala_target_value_unref0 (_tmp25_);
			_vala_ccode_node_unref0 (_tmp23_);
			vala_ccode_base_module_pop_function (self);
			_tmp28_ = self->cfile;
			_tmp29_ = function;
			vala_ccode_file_add_function_declaration (_tmp28_, _tmp29_);
			_tmp30_ = self->cfile;
			_tmp31_ = function;
			vala_ccode_file_add_function (_tmp30_, _tmp31_);
			_vala_ccode_node_unref0 (function);
		}
		_tmp32_ = free0_func;
		_tmp33_ = vala_ccode_identifier_new (_tmp32_);
		_vala_ccode_node_unref0 (element_destroy_func_expression);
		element_destroy_func_expression = (ValaCCodeExpression*) _tmp33_;
		_g_free0 (free0_func);
		_vala_ccode_node_unref0 (freeid);
	}
	result = element_destroy_func_expression;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_destroy_func_expression (ValaCCodeBaseModule* self,
                                                    ValaDataType* type,
                                                    gboolean is_chainup)
{
	gboolean _tmp0_ = FALSE;
	ValaCodeContext* _tmp1_;
	ValaProfile _tmp2_;
	ValaProfile _tmp3_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp1_ = self->priv->_context;
	_tmp2_ = vala_code_context_get_profile (_tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ == VALA_PROFILE_GOBJECT) {
		gboolean _tmp4_ = FALSE;
		gboolean _tmp5_ = FALSE;
		gboolean _tmp6_ = FALSE;
		ValaTypeSymbol* _tmp7_;
		ValaTypeSymbol* _tmp8_;
		ValaClass* _tmp9_;
		_tmp7_ = vala_data_type_get_type_symbol (type);
		_tmp8_ = _tmp7_;
		_tmp9_ = self->glist_type;
		if (_tmp8_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			_tmp6_ = TRUE;
		} else {
			ValaTypeSymbol* _tmp10_;
			ValaTypeSymbol* _tmp11_;
			ValaClass* _tmp12_;
			_tmp10_ = vala_data_type_get_type_symbol (type);
			_tmp11_ = _tmp10_;
			_tmp12_ = self->gslist_type;
			_tmp6_ = _tmp11_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		}
		if (_tmp6_) {
			_tmp5_ = TRUE;
		} else {
			ValaTypeSymbol* _tmp13_;
			ValaTypeSymbol* _tmp14_;
			ValaClass* _tmp15_;
			_tmp13_ = vala_data_type_get_type_symbol (type);
			_tmp14_ = _tmp13_;
			_tmp15_ = self->gnode_type;
			_tmp5_ = _tmp14_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		}
		if (_tmp5_) {
			_tmp4_ = TRUE;
		} else {
			ValaTypeSymbol* _tmp16_;
			ValaTypeSymbol* _tmp17_;
			ValaClass* _tmp18_;
			_tmp16_ = vala_data_type_get_type_symbol (type);
			_tmp17_ = _tmp16_;
			_tmp18_ = self->gqueue_type;
			_tmp4_ = _tmp17_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		}
		_tmp0_ = _tmp4_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gboolean elements_require_free = FALSE;
		gboolean generic_elements = FALSE;
		ValaCCodeExpression* element_destroy_func_expression = NULL;
		elements_require_free = FALSE;
		generic_elements = FALSE;
		element_destroy_func_expression = NULL;
		{
			ValaList* _type_arg_list = NULL;
			ValaList* _tmp19_;
			gint _type_arg_size = 0;
			ValaList* _tmp20_;
			gint _tmp21_;
			gint _tmp22_;
			gint _type_arg_index = 0;
			_tmp19_ = vala_data_type_get_type_arguments (type);
			_type_arg_list = _tmp19_;
			_tmp20_ = _type_arg_list;
			_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
			_tmp22_ = _tmp21_;
			_type_arg_size = _tmp22_;
			_type_arg_index = -1;
			while (TRUE) {
				gint _tmp23_;
				gint _tmp24_;
				ValaDataType* type_arg = NULL;
				ValaList* _tmp25_;
				gpointer _tmp26_;
				ValaDataType* _tmp27_;
				_type_arg_index = _type_arg_index + 1;
				_tmp23_ = _type_arg_index;
				_tmp24_ = _type_arg_size;
				if (!(_tmp23_ < _tmp24_)) {
					break;
				}
				_tmp25_ = _type_arg_list;
				_tmp26_ = vala_list_get (_tmp25_, _type_arg_index);
				type_arg = (ValaDataType*) _tmp26_;
				_tmp27_ = type_arg;
				elements_require_free = vala_ccode_base_module_requires_destroy (_tmp27_);
				if (elements_require_free) {
					ValaDataType* _tmp28_;
					ValaCCodeExpression* _tmp29_;
					ValaDataType* _tmp30_;
					_tmp28_ = type_arg;
					_tmp29_ = vala_ccode_base_module_get_destroy0_func_expression (self, _tmp28_, FALSE);
					_vala_ccode_node_unref0 (element_destroy_func_expression);
					element_destroy_func_expression = _tmp29_;
					_tmp30_ = type_arg;
					generic_elements = G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, VALA_TYPE_GENERIC_TYPE);
				}
				_vala_code_node_unref0 (type_arg);
			}
		}
		if (elements_require_free) {
			ValaCCodeExpression* cexpr = NULL;
			gboolean _tmp31_ = FALSE;
			ValaCCodeExpression* _tmp32_;
			cexpr = NULL;
			_tmp32_ = element_destroy_func_expression;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_CCODE_IDENTIFIER)) {
				_tmp31_ = TRUE;
			} else {
				ValaCCodeExpression* _tmp33_;
				_tmp33_ = element_destroy_func_expression;
				_tmp31_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, VALA_TYPE_CCODE_MEMBER_ACCESS);
			}
			if (_tmp31_) {
				ValaCCodeIdentifier* _tmp34_ = NULL;
				gchar* _tmp36_;
				gchar* _tmp37_;
				ValaCCodeIdentifier* _tmp38_;
				if (generic_elements) {
					_tmp34_ = NULL;
				} else {
					ValaCCodeExpression* _tmp35_;
					_tmp35_ = element_destroy_func_expression;
					_tmp34_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp35_, VALA_TYPE_CCODE_IDENTIFIER) ? ((ValaCCodeIdentifier*) _tmp35_) : NULL;
				}
				_tmp36_ = vala_ccode_base_module_generate_collection_free_wrapper (self, type, _tmp34_);
				_tmp37_ = _tmp36_;
				_tmp38_ = vala_ccode_identifier_new (_tmp37_);
				_vala_ccode_node_unref0 (cexpr);
				cexpr = (ValaCCodeExpression*) _tmp38_;
				_g_free0 (_tmp37_);
				if (generic_elements) {
					ValaCCodeExpression* _tmp39_;
					ValaCCodeFunctionCall* _tmp40_;
					ValaCCodeExpression* _tmp41_;
					ValaCCodeExpression* _tmp42_;
					_tmp39_ = cexpr;
					_tmp40_ = vala_ccode_function_call_new (_tmp39_);
					_vala_ccode_node_unref0 (cexpr);
					cexpr = (ValaCCodeExpression*) _tmp40_;
					_tmp41_ = cexpr;
					_tmp42_ = element_destroy_func_expression;
					vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp41_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), _tmp42_);
				}
			} else {
				vala_report_error (NULL, "internal error: No useable element_destroy_function found");
			}
			result = cexpr;
			_vala_ccode_node_unref0 (element_destroy_func_expression);
			return result;
		} else {
			ValaTypeSymbol* _tmp43_;
			ValaTypeSymbol* _tmp44_;
			gchar* _tmp45_;
			gchar* _tmp46_;
			ValaCCodeIdentifier* _tmp47_;
			ValaCCodeExpression* _tmp48_;
			_tmp43_ = vala_data_type_get_type_symbol (type);
			_tmp44_ = _tmp43_;
			_tmp45_ = vala_get_ccode_free_function (_tmp44_);
			_tmp46_ = _tmp45_;
			_tmp47_ = vala_ccode_identifier_new (_tmp46_);
			_tmp48_ = (ValaCCodeExpression*) _tmp47_;
			_g_free0 (_tmp46_);
			result = _tmp48_;
			_vala_ccode_node_unref0 (element_destroy_func_expression);
			return result;
		}
		_vala_ccode_node_unref0 (element_destroy_func_expression);
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
			ValaCCodeFile* _tmp49_;
			ValaCCodeIdentifier* _tmp50_;
			_tmp49_ = self->cfile;
			vala_ccode_file_add_include (_tmp49_, "glib.h", FALSE);
			_tmp50_ = vala_ccode_identifier_new ("g_error_free");
			result = (ValaCCodeExpression*) _tmp50_;
			return result;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
				ValaTypeParameter* type_parameter = NULL;
				ValaTypeParameter* _tmp51_;
				ValaTypeParameter* _tmp52_;
				ValaTypeParameter* _tmp53_;
				gchar* identifier = NULL;
				ValaTypeParameter* _tmp54_;
				gchar* _tmp55_;
				const gchar* _tmp56_;
				ValaCCodeExpression* _tmp57_;
				_tmp51_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
				_tmp52_ = _tmp51_;
				_tmp53_ = _vala_code_node_ref0 (_tmp52_);
				type_parameter = _tmp53_;
				_tmp54_ = type_parameter;
				_tmp55_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp54_);
				identifier = _tmp55_;
				_tmp56_ = identifier;
				_tmp57_ = vala_ccode_base_module_get_generic_type_expression (self, _tmp56_, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType), is_chainup);
				result = _tmp57_;
				_g_free0 (identifier);
				_vala_code_node_unref0 (type_parameter);
				return result;
			} else {
				ValaTypeSymbol* _tmp58_;
				ValaTypeSymbol* _tmp59_;
				_tmp58_ = vala_data_type_get_type_symbol (type);
				_tmp59_ = _tmp58_;
				if (_tmp59_ != NULL) {
					gchar* unref_function = NULL;
					const gchar* _tmp113_;
					const gchar* _tmp115_;
					ValaCCodeIdentifier* _tmp116_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_REFERENCE_TYPE)) {
						ValaTypeSymbol* _tmp60_;
						ValaTypeSymbol* _tmp61_;
						_tmp60_ = vala_data_type_get_type_symbol (type);
						_tmp61_ = _tmp60_;
						if (vala_is_reference_counting (_tmp61_)) {
							ValaTypeSymbol* _tmp62_;
							ValaTypeSymbol* _tmp63_;
							gchar* _tmp64_;
							gboolean _tmp65_ = FALSE;
							ValaTypeSymbol* _tmp66_;
							ValaTypeSymbol* _tmp67_;
							_tmp62_ = vala_data_type_get_type_symbol (type);
							_tmp63_ = _tmp62_;
							_tmp64_ = vala_get_ccode_unref_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
							_g_free0 (unref_function);
							unref_function = _tmp64_;
							_tmp66_ = vala_data_type_get_type_symbol (type);
							_tmp67_ = _tmp66_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp67_, VALA_TYPE_INTERFACE)) {
								const gchar* _tmp68_;
								_tmp68_ = unref_function;
								_tmp65_ = _tmp68_ == NULL;
							} else {
								_tmp65_ = FALSE;
							}
							if (_tmp65_) {
								ValaSourceReference* _tmp69_;
								ValaSourceReference* _tmp70_;
								ValaTypeSymbol* _tmp71_;
								ValaTypeSymbol* _tmp72_;
								gchar* _tmp73_;
								gchar* _tmp74_;
								_tmp69_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
								_tmp70_ = _tmp69_;
								_tmp71_ = vala_data_type_get_type_symbol (type);
								_tmp72_ = _tmp71_;
								_tmp73_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp72_);
								_tmp74_ = _tmp73_;
								vala_report_error (_tmp70_, "missing class prerequisite for interface `%s', add GLib.Object to inte" \
"rface declaration if unsure", _tmp74_);
								_g_free0 (_tmp74_);
								result = NULL;
								_g_free0 (unref_function);
								return result;
							}
						} else {
							ValaTypeSymbol* _tmp75_;
							ValaTypeSymbol* _tmp76_;
							_tmp75_ = vala_data_type_get_type_symbol (type);
							_tmp76_ = _tmp75_;
							if (vala_get_ccode_is_gboxed (_tmp76_)) {
								gchar* _tmp77_;
								_tmp77_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
								_g_free0 (unref_function);
								unref_function = _tmp77_;
							} else {
								if (vala_is_free_function_address_of (type)) {
									gchar* _tmp78_;
									_tmp78_ = vala_ccode_base_module_generate_free_function_address_of_wrapper (self, type);
									_g_free0 (unref_function);
									unref_function = _tmp78_;
								} else {
									ValaTypeSymbol* _tmp79_;
									ValaTypeSymbol* _tmp80_;
									gchar* _tmp81_;
									_tmp79_ = vala_data_type_get_type_symbol (type);
									_tmp80_ = _tmp79_;
									_tmp81_ = vala_get_ccode_free_function (_tmp80_);
									_g_free0 (unref_function);
									unref_function = _tmp81_;
								}
							}
						}
					} else {
						gboolean _tmp82_;
						gboolean _tmp83_;
						_tmp82_ = vala_data_type_get_nullable (type);
						_tmp83_ = _tmp82_;
						if (_tmp83_) {
							ValaTypeSymbol* _tmp84_;
							ValaTypeSymbol* _tmp85_;
							const gchar* _tmp90_;
							_tmp84_ = vala_data_type_get_type_symbol (type);
							_tmp85_ = _tmp84_;
							if (vala_get_ccode_is_gboxed (_tmp85_)) {
								gchar* _tmp86_;
								_tmp86_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
								_g_free0 (unref_function);
								unref_function = _tmp86_;
							} else {
								ValaTypeSymbol* _tmp87_;
								ValaTypeSymbol* _tmp88_;
								gchar* _tmp89_;
								_tmp87_ = vala_data_type_get_type_symbol (type);
								_tmp88_ = _tmp87_;
								_tmp89_ = vala_get_ccode_free_function (_tmp88_);
								_g_free0 (unref_function);
								unref_function = _tmp89_;
							}
							_tmp90_ = unref_function;
							if (_tmp90_ == NULL) {
								gboolean _tmp91_ = FALSE;
								ValaTypeSymbol* _tmp92_;
								ValaTypeSymbol* _tmp93_;
								_tmp92_ = vala_data_type_get_type_symbol (type);
								_tmp93_ = _tmp92_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp93_, VALA_TYPE_STRUCT)) {
									ValaTypeSymbol* _tmp94_;
									ValaTypeSymbol* _tmp95_;
									_tmp94_ = vala_data_type_get_type_symbol (type);
									_tmp95_ = _tmp94_;
									_tmp91_ = vala_struct_is_disposable (G_TYPE_CHECK_INSTANCE_CAST (_tmp95_, VALA_TYPE_STRUCT, ValaStruct));
								} else {
									_tmp91_ = FALSE;
								}
								if (_tmp91_) {
									gchar* _tmp96_;
									_tmp96_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
									_g_free0 (unref_function);
									unref_function = _tmp96_;
								} else {
									ValaCodeContext* _tmp97_;
									ValaProfile _tmp98_;
									ValaProfile _tmp99_;
									_tmp97_ = self->priv->_context;
									_tmp98_ = vala_code_context_get_profile (_tmp97_);
									_tmp99_ = _tmp98_;
									if (_tmp99_ == VALA_PROFILE_POSIX) {
										ValaCCodeFile* _tmp100_;
										gchar* _tmp101_;
										_tmp100_ = self->cfile;
										vala_ccode_file_add_include (_tmp100_, "stdlib.h", FALSE);
										_tmp101_ = g_strdup ("free");
										_g_free0 (unref_function);
										unref_function = _tmp101_;
									} else {
										ValaCCodeFile* _tmp102_;
										gchar* _tmp103_;
										_tmp102_ = self->cfile;
										vala_ccode_file_add_include (_tmp102_, "glib.h", FALSE);
										_tmp103_ = g_strdup ("g_free");
										_g_free0 (unref_function);
										unref_function = _tmp103_;
									}
								}
							}
						} else {
							if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ENUM_VALUE_TYPE)) {
								_g_free0 (unref_function);
								unref_function = NULL;
							} else {
								ValaStruct* st = NULL;
								ValaTypeSymbol* _tmp104_;
								ValaTypeSymbol* _tmp105_;
								gboolean _tmp106_ = FALSE;
								ValaStruct* _tmp107_;
								_tmp104_ = vala_data_type_get_type_symbol (type);
								_tmp105_ = _tmp104_;
								st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp105_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp105_) : NULL;
								_tmp107_ = st;
								if (_tmp107_ != NULL) {
									ValaStruct* _tmp108_;
									_tmp108_ = st;
									_tmp106_ = vala_struct_is_disposable (_tmp108_);
								} else {
									_tmp106_ = FALSE;
								}
								if (_tmp106_) {
									ValaStruct* _tmp109_;
									ValaStruct* _tmp111_;
									gchar* _tmp112_;
									_tmp109_ = st;
									if (!vala_get_ccode_has_destroy_function (_tmp109_)) {
										ValaStruct* _tmp110_;
										_tmp110_ = st;
										vala_ccode_base_module_generate_struct_destroy_function (self, _tmp110_);
									}
									_tmp111_ = st;
									_tmp112_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp111_);
									_g_free0 (unref_function);
									unref_function = _tmp112_;
								} else {
									_g_free0 (unref_function);
									unref_function = NULL;
								}
							}
						}
					}
					_tmp113_ = unref_function;
					if (_tmp113_ == NULL) {
						ValaCCodeConstant* _tmp114_;
						_tmp114_ = vala_ccode_constant_new ("NULL");
						result = (ValaCCodeExpression*) _tmp114_;
						_g_free0 (unref_function);
						return result;
					}
					_tmp115_ = unref_function;
					_tmp116_ = vala_ccode_identifier_new (_tmp115_);
					result = (ValaCCodeExpression*) _tmp116_;
					_g_free0 (unref_function);
					return result;
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
						ValaCodeContext* _tmp117_;
						ValaProfile _tmp118_;
						ValaProfile _tmp119_;
						_tmp117_ = self->priv->_context;
						_tmp118_ = vala_code_context_get_profile (_tmp117_);
						_tmp119_ = _tmp118_;
						if (_tmp119_ == VALA_PROFILE_POSIX) {
							ValaCCodeFile* _tmp120_;
							ValaCCodeIdentifier* _tmp121_;
							_tmp120_ = self->cfile;
							vala_ccode_file_add_include (_tmp120_, "stdlib.h", FALSE);
							_tmp121_ = vala_ccode_identifier_new ("free");
							result = (ValaCCodeExpression*) _tmp121_;
							return result;
						} else {
							ValaCCodeFile* _tmp122_;
							ValaCCodeIdentifier* _tmp123_;
							_tmp122_ = self->cfile;
							vala_ccode_file_add_include (_tmp122_, "glib.h", FALSE);
							_tmp123_ = vala_ccode_identifier_new ("g_free");
							result = (ValaCCodeExpression*) _tmp123_;
							return result;
						}
					} else {
						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
							ValaCodeContext* _tmp124_;
							ValaProfile _tmp125_;
							ValaProfile _tmp126_;
							_tmp124_ = self->priv->_context;
							_tmp125_ = vala_code_context_get_profile (_tmp124_);
							_tmp126_ = _tmp125_;
							if (_tmp126_ == VALA_PROFILE_POSIX) {
								ValaCCodeFile* _tmp127_;
								ValaCCodeIdentifier* _tmp128_;
								_tmp127_ = self->cfile;
								vala_ccode_file_add_include (_tmp127_, "stdlib.h", FALSE);
								_tmp128_ = vala_ccode_identifier_new ("free");
								result = (ValaCCodeExpression*) _tmp128_;
								return result;
							} else {
								ValaCCodeFile* _tmp129_;
								ValaCCodeIdentifier* _tmp130_;
								_tmp129_ = self->cfile;
								vala_ccode_file_add_include (_tmp129_, "glib.h", FALSE);
								_tmp130_ = vala_ccode_identifier_new ("g_free");
								result = (ValaCCodeExpression*) _tmp130_;
								return result;
							}
						} else {
							ValaCCodeConstant* _tmp131_;
							_tmp131_ = vala_ccode_constant_new ("NULL");
							result = (ValaCCodeExpression*) _tmp131_;
							return result;
						}
					}
				}
			}
		}
	}
}

static gchar*
vala_ccode_base_module_generate_collection_free_wrapper (ValaCCodeBaseModule* self,
                                                         ValaDataType* collection_type,
                                                         ValaCCodeIdentifier* element_destroy_func_expression)
{
	gchar* destroy_func = NULL;
	gchar* destroy_func_wrapper = NULL;
	ValaTypeSymbol* _tmp8_;
	ValaTypeSymbol* _tmp9_;
	ValaClass* _tmp10_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (collection_type != NULL, NULL);
	destroy_func_wrapper = NULL;
	if (element_destroy_func_expression != NULL) {
		ValaTypeSymbol* _tmp0_;
		ValaTypeSymbol* _tmp1_;
		gchar* _tmp2_;
		gchar* _tmp3_;
		const gchar* _tmp4_;
		const gchar* _tmp5_;
		gchar* _tmp6_;
		const gchar* _tmp7_;
		_tmp0_ = vala_data_type_get_type_symbol (collection_type);
		_tmp1_ = _tmp0_;
		_tmp2_ = vala_get_ccode_free_function (_tmp1_);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_ccode_identifier_get_name (element_destroy_func_expression);
		_tmp5_ = _tmp4_;
		_tmp6_ = g_strdup_printf ("_%s_%s", _tmp3_, _tmp5_);
		_g_free0 (destroy_func_wrapper);
		destroy_func_wrapper = _tmp6_;
		_g_free0 (_tmp3_);
		_tmp7_ = destroy_func_wrapper;
		if (!vala_ccode_base_module_add_wrapper (self, _tmp7_)) {
			result = destroy_func_wrapper;
			_g_free0 (destroy_func);
			return result;
		}
	}
	_tmp8_ = vala_data_type_get_type_symbol (collection_type);
	_tmp9_ = _tmp8_;
	_tmp10_ = self->gnode_type;
	if (_tmp9_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
		gchar* _tmp11_;
		const gchar* _tmp12_;
		ValaCCodeFunction* function = NULL;
		const gchar* _tmp13_;
		ValaCCodeFunction* _tmp14_;
		ValaCCodeFunction* _tmp15_;
		gchar* _tmp16_;
		gchar* _tmp17_;
		ValaCCodeParameter* _tmp18_;
		ValaCCodeParameter* _tmp19_;
		ValaCCodeFunction* _tmp20_;
		ValaCCodeParameter* _tmp21_;
		ValaCCodeParameter* _tmp22_;
		ValaCCodeFunction* _tmp23_;
		ValaCCodeFunctionCall* element_free_call = NULL;
		gchar* destroy_node_func = NULL;
		const gchar* _tmp24_;
		gchar* _tmp25_;
		ValaCCodeFunction* wrapper = NULL;
		const gchar* _tmp26_;
		ValaDataType* _tmp27_;
		gchar* _tmp28_;
		gchar* _tmp29_;
		ValaCCodeFunction* _tmp30_;
		ValaCCodeFunction* _tmp31_;
		ValaCCodeFunction* _tmp32_;
		ValaCCodeFunction* _tmp33_;
		gchar* _tmp34_;
		gchar* _tmp35_;
		ValaCCodeParameter* _tmp36_;
		ValaCCodeParameter* _tmp37_;
		ValaCCodeFunction* _tmp38_;
		ValaCCodeParameter* _tmp39_;
		ValaCCodeParameter* _tmp40_;
		ValaCCodeFunction* _tmp41_;
		ValaCCodeFunctionCall* free_call = NULL;
		ValaCCodeIdentifier* _tmp42_;
		ValaCCodeIdentifier* _tmp43_;
		ValaCCodeFunctionCall* _tmp44_;
		ValaCCodeFunctionCall* _tmp45_;
		ValaCCodeFunctionCall* _tmp46_;
		ValaCCodeIdentifier* _tmp47_;
		ValaCCodeIdentifier* _tmp48_;
		ValaCCodeMemberAccess* _tmp49_;
		ValaCCodeMemberAccess* _tmp50_;
		ValaCCodeBinaryExpression* data_isnull = NULL;
		ValaCCodeIdentifier* _tmp51_;
		ValaCCodeIdentifier* _tmp52_;
		ValaCCodeMemberAccess* _tmp53_;
		ValaCCodeMemberAccess* _tmp54_;
		ValaCCodeConstant* _tmp55_;
		ValaCCodeConstant* _tmp56_;
		ValaCCodeBinaryExpression* _tmp57_;
		ValaCCodeBinaryExpression* _tmp58_;
		ValaCCodeCommaExpression* ccomma_data = NULL;
		ValaCCodeCommaExpression* _tmp59_;
		ValaCCodeCommaExpression* _tmp60_;
		ValaCCodeBinaryExpression* _tmp61_;
		ValaCCodeConstant* _tmp62_;
		ValaCCodeConstant* _tmp63_;
		ValaCCodeFunctionCall* _tmp64_;
		ValaCCodeConditionalExpression* _tmp65_;
		ValaCCodeConditionalExpression* _tmp66_;
		ValaCCodeFunction* _tmp67_;
		ValaCCodeFunction* _tmp68_;
		ValaCCodeCommaExpression* _tmp69_;
		ValaCCodeFunction* _tmp70_;
		ValaCCodeFunction* _tmp71_;
		ValaCCodeConstant* _tmp72_;
		ValaCCodeConstant* _tmp73_;
		ValaCCodeFile* _tmp74_;
		ValaCCodeFunction* _tmp75_;
		ValaCCodeFile* _tmp76_;
		ValaCCodeFunction* _tmp77_;
		ValaCCodeIdentifier* _tmp78_;
		ValaCCodeIdentifier* _tmp79_;
		ValaCCodeFunctionCall* _tmp80_;
		ValaCCodeFunctionCall* _tmp81_;
		ValaCCodeIdentifier* _tmp82_;
		ValaCCodeIdentifier* _tmp83_;
		ValaCCodeFunctionCall* _tmp84_;
		ValaCCodeConstant* _tmp85_;
		ValaCCodeConstant* _tmp86_;
		ValaCCodeFunctionCall* _tmp87_;
		ValaCCodeConstant* _tmp88_;
		ValaCCodeConstant* _tmp89_;
		ValaCCodeFunctionCall* _tmp90_;
		ValaCCodeConstant* _tmp91_;
		ValaCCodeConstant* _tmp92_;
		ValaCCodeFunctionCall* _tmp93_;
		const gchar* _tmp94_;
		ValaCCodeIdentifier* _tmp95_;
		ValaCCodeIdentifier* _tmp96_;
		ValaCCodeCastExpression* _tmp97_;
		ValaCCodeCastExpression* _tmp98_;
		ValaCCodeFunctionCall* _tmp99_;
		ValaCCodeIdentifier* _tmp100_;
		ValaCCodeIdentifier* _tmp101_;
		ValaCCodeBinaryExpression* free_func_isnull = NULL;
		ValaCCodeIdentifier* _tmp102_;
		ValaCCodeIdentifier* _tmp103_;
		ValaCCodeConstant* _tmp104_;
		ValaCCodeConstant* _tmp105_;
		ValaCCodeBinaryExpression* _tmp106_;
		ValaCCodeBinaryExpression* _tmp107_;
		ValaCCodeCommaExpression* ccomma = NULL;
		ValaCCodeCommaExpression* _tmp108_;
		ValaCCodeCommaExpression* _tmp109_;
		ValaCCodeBinaryExpression* _tmp110_;
		ValaCCodeConstant* _tmp111_;
		ValaCCodeConstant* _tmp112_;
		ValaCCodeFunctionCall* _tmp113_;
		ValaCCodeConditionalExpression* _tmp114_;
		ValaCCodeConditionalExpression* _tmp115_;
		ValaCCodeFunction* _tmp116_;
		ValaCCodeFunction* _tmp117_;
		ValaCCodeCommaExpression* _tmp118_;
		ValaCCodeFunctionCall* cfreecall = NULL;
		ValaClass* _tmp119_;
		gchar* _tmp120_;
		gchar* _tmp121_;
		ValaCCodeIdentifier* _tmp122_;
		ValaCCodeIdentifier* _tmp123_;
		ValaCCodeFunctionCall* _tmp124_;
		ValaCCodeFunctionCall* _tmp125_;
		ValaCCodeFunctionCall* _tmp126_;
		ValaCCodeIdentifier* _tmp127_;
		ValaCCodeIdentifier* _tmp128_;
		ValaCCodeFunction* _tmp129_;
		ValaCCodeFunction* _tmp130_;
		ValaCCodeFunctionCall* _tmp131_;
		ValaCCodeFunction* _tmp132_;
		ValaCCodeFile* _tmp133_;
		ValaCCodeFunction* _tmp134_;
		ValaCCodeFile* _tmp135_;
		ValaCCodeFunction* _tmp136_;
		_tmp11_ = g_strdup ("_g_node_free_all");
		_g_free0 (destroy_func);
		destroy_func = _tmp11_;
		_tmp12_ = destroy_func;
		if (!vala_ccode_base_module_add_wrapper (self, _tmp12_)) {
			result = destroy_func;
			_g_free0 (destroy_func_wrapper);
			return result;
		}
		_tmp13_ = destroy_func;
		_tmp14_ = vala_ccode_function_new (_tmp13_, "void");
		function = _tmp14_;
		_tmp15_ = function;
		_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_ccode_parameter_new ("self", _tmp17_);
		_tmp19_ = _tmp18_;
		vala_ccode_function_add_parameter (_tmp15_, _tmp19_);
		_vala_ccode_node_unref0 (_tmp19_);
		_g_free0 (_tmp17_);
		_tmp20_ = function;
		_tmp21_ = vala_ccode_parameter_new ("free_func", "GDestroyNotify");
		_tmp22_ = _tmp21_;
		vala_ccode_function_add_parameter (_tmp20_, _tmp22_);
		_vala_ccode_node_unref0 (_tmp22_);
		_tmp23_ = function;
		vala_ccode_base_module_push_function (self, _tmp23_);
		_tmp24_ = destroy_func;
		_tmp25_ = g_strdup_printf ("%s_node", _tmp24_);
		destroy_node_func = _tmp25_;
		_tmp26_ = destroy_node_func;
		_tmp27_ = self->bool_type;
		_tmp28_ = vala_get_ccode_name ((ValaCodeNode*) _tmp27_);
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_ccode_function_new (_tmp26_, _tmp29_);
		_tmp31_ = _tmp30_;
		_g_free0 (_tmp29_);
		wrapper = _tmp31_;
		_tmp32_ = wrapper;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp32_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp33_ = wrapper;
		_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_ccode_parameter_new ("node", _tmp35_);
		_tmp37_ = _tmp36_;
		vala_ccode_function_add_parameter (_tmp33_, _tmp37_);
		_vala_ccode_node_unref0 (_tmp37_);
		_g_free0 (_tmp35_);
		_tmp38_ = wrapper;
		_tmp39_ = vala_ccode_parameter_new ("free_func", "GDestroyNotify");
		_tmp40_ = _tmp39_;
		vala_ccode_function_add_parameter (_tmp38_, _tmp40_);
		_vala_ccode_node_unref0 (_tmp40_);
		_tmp41_ = wrapper;
		vala_ccode_base_module_push_function (self, _tmp41_);
		_tmp42_ = vala_ccode_identifier_new ("free_func");
		_tmp43_ = _tmp42_;
		_tmp44_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp43_);
		_tmp45_ = _tmp44_;
		_vala_ccode_node_unref0 (_tmp43_);
		free_call = _tmp45_;
		_tmp46_ = free_call;
		_tmp47_ = vala_ccode_identifier_new ("node");
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp48_, "data");
		_tmp50_ = _tmp49_;
		vala_ccode_function_call_add_argument (_tmp46_, (ValaCCodeExpression*) _tmp50_);
		_vala_ccode_node_unref0 (_tmp50_);
		_vala_ccode_node_unref0 (_tmp48_);
		_tmp51_ = vala_ccode_identifier_new ("node");
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp52_, "data");
		_tmp54_ = _tmp53_;
		_tmp55_ = vala_ccode_constant_new ("NULL");
		_tmp56_ = _tmp55_;
		_tmp57_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp54_, (ValaCCodeExpression*) _tmp56_);
		_tmp58_ = _tmp57_;
		_vala_ccode_node_unref0 (_tmp56_);
		_vala_ccode_node_unref0 (_tmp54_);
		_vala_ccode_node_unref0 (_tmp52_);
		data_isnull = _tmp58_;
		_tmp59_ = vala_ccode_comma_expression_new ();
		ccomma_data = _tmp59_;
		_tmp60_ = ccomma_data;
		_tmp61_ = data_isnull;
		_tmp62_ = vala_ccode_constant_new ("NULL");
		_tmp63_ = _tmp62_;
		_tmp64_ = free_call;
		_tmp65_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp61_, (ValaCCodeExpression*) _tmp63_, (ValaCCodeExpression*) _tmp64_);
		_tmp66_ = _tmp65_;
		vala_ccode_comma_expression_append_expression (_tmp60_, (ValaCCodeExpression*) _tmp66_);
		_vala_ccode_node_unref0 (_tmp66_);
		_vala_ccode_node_unref0 (_tmp63_);
		_tmp67_ = vala_ccode_base_module_get_ccode (self);
		_tmp68_ = _tmp67_;
		_tmp69_ = ccomma_data;
		vala_ccode_function_add_expression (_tmp68_, (ValaCCodeExpression*) _tmp69_);
		_tmp70_ = vala_ccode_base_module_get_ccode (self);
		_tmp71_ = _tmp70_;
		_tmp72_ = vala_ccode_constant_new ("FALSE");
		_tmp73_ = _tmp72_;
		vala_ccode_function_add_return (_tmp71_, (ValaCCodeExpression*) _tmp73_);
		_vala_ccode_node_unref0 (_tmp73_);
		vala_ccode_base_module_pop_function (self);
		_tmp74_ = self->cfile;
		_tmp75_ = wrapper;
		vala_ccode_file_add_function_declaration (_tmp74_, _tmp75_);
		_tmp76_ = self->cfile;
		_tmp77_ = wrapper;
		vala_ccode_file_add_function (_tmp76_, _tmp77_);
		_tmp78_ = vala_ccode_identifier_new ("g_node_traverse");
		_tmp79_ = _tmp78_;
		_tmp80_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp79_);
		_vala_ccode_node_unref0 (element_free_call);
		element_free_call = _tmp80_;
		_vala_ccode_node_unref0 (_tmp79_);
		_tmp81_ = element_free_call;
		_tmp82_ = vala_ccode_identifier_new ("self");
		_tmp83_ = _tmp82_;
		vala_ccode_function_call_add_argument (_tmp81_, (ValaCCodeExpression*) _tmp83_);
		_vala_ccode_node_unref0 (_tmp83_);
		_tmp84_ = element_free_call;
		_tmp85_ = vala_ccode_constant_new ("G_POST_ORDER");
		_tmp86_ = _tmp85_;
		vala_ccode_function_call_add_argument (_tmp84_, (ValaCCodeExpression*) _tmp86_);
		_vala_ccode_node_unref0 (_tmp86_);
		_tmp87_ = element_free_call;
		_tmp88_ = vala_ccode_constant_new ("G_TRAVERSE_ALL");
		_tmp89_ = _tmp88_;
		vala_ccode_function_call_add_argument (_tmp87_, (ValaCCodeExpression*) _tmp89_);
		_vala_ccode_node_unref0 (_tmp89_);
		_tmp90_ = element_free_call;
		_tmp91_ = vala_ccode_constant_new ("-1");
		_tmp92_ = _tmp91_;
		vala_ccode_function_call_add_argument (_tmp90_, (ValaCCodeExpression*) _tmp92_);
		_vala_ccode_node_unref0 (_tmp92_);
		_tmp93_ = element_free_call;
		_tmp94_ = destroy_node_func;
		_tmp95_ = vala_ccode_identifier_new (_tmp94_);
		_tmp96_ = _tmp95_;
		_tmp97_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp96_, "GNodeTraverseFunc");
		_tmp98_ = _tmp97_;
		vala_ccode_function_call_add_argument (_tmp93_, (ValaCCodeExpression*) _tmp98_);
		_vala_ccode_node_unref0 (_tmp98_);
		_vala_ccode_node_unref0 (_tmp96_);
		_tmp99_ = element_free_call;
		_tmp100_ = vala_ccode_identifier_new ("free_func");
		_tmp101_ = _tmp100_;
		vala_ccode_function_call_add_argument (_tmp99_, (ValaCCodeExpression*) _tmp101_);
		_vala_ccode_node_unref0 (_tmp101_);
		_tmp102_ = vala_ccode_identifier_new ("free_func");
		_tmp103_ = _tmp102_;
		_tmp104_ = vala_ccode_constant_new ("NULL");
		_tmp105_ = _tmp104_;
		_tmp106_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp103_, (ValaCCodeExpression*) _tmp105_);
		_tmp107_ = _tmp106_;
		_vala_ccode_node_unref0 (_tmp105_);
		_vala_ccode_node_unref0 (_tmp103_);
		free_func_isnull = _tmp107_;
		_tmp108_ = vala_ccode_comma_expression_new ();
		ccomma = _tmp108_;
		_tmp109_ = ccomma;
		_tmp110_ = free_func_isnull;
		_tmp111_ = vala_ccode_constant_new ("NULL");
		_tmp112_ = _tmp111_;
		_tmp113_ = element_free_call;
		_tmp114_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp110_, (ValaCCodeExpression*) _tmp112_, (ValaCCodeExpression*) _tmp113_);
		_tmp115_ = _tmp114_;
		vala_ccode_comma_expression_append_expression (_tmp109_, (ValaCCodeExpression*) _tmp115_);
		_vala_ccode_node_unref0 (_tmp115_);
		_vala_ccode_node_unref0 (_tmp112_);
		_tmp116_ = vala_ccode_base_module_get_ccode (self);
		_tmp117_ = _tmp116_;
		_tmp118_ = ccomma;
		vala_ccode_function_add_expression (_tmp117_, (ValaCCodeExpression*) _tmp118_);
		_tmp119_ = self->gnode_type;
		_tmp120_ = vala_get_ccode_free_function ((ValaTypeSymbol*) _tmp119_);
		_tmp121_ = _tmp120_;
		_tmp122_ = vala_ccode_identifier_new (_tmp121_);
		_tmp123_ = _tmp122_;
		_tmp124_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp123_);
		_tmp125_ = _tmp124_;
		_vala_ccode_node_unref0 (_tmp123_);
		_g_free0 (_tmp121_);
		cfreecall = _tmp125_;
		_tmp126_ = cfreecall;
		_tmp127_ = vala_ccode_identifier_new ("self");
		_tmp128_ = _tmp127_;
		vala_ccode_function_call_add_argument (_tmp126_, (ValaCCodeExpression*) _tmp128_);
		_vala_ccode_node_unref0 (_tmp128_);
		_tmp129_ = vala_ccode_base_module_get_ccode (self);
		_tmp130_ = _tmp129_;
		_tmp131_ = cfreecall;
		vala_ccode_function_add_expression (_tmp130_, (ValaCCodeExpression*) _tmp131_);
		_tmp132_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp132_, VALA_CCODE_MODIFIERS_STATIC);
		vala_ccode_base_module_pop_function (self);
		_tmp133_ = self->cfile;
		_tmp134_ = function;
		vala_ccode_file_add_function_declaration (_tmp133_, _tmp134_);
		_tmp135_ = self->cfile;
		_tmp136_ = function;
		vala_ccode_file_add_function (_tmp135_, _tmp136_);
		_vala_ccode_node_unref0 (cfreecall);
		_vala_ccode_node_unref0 (ccomma);
		_vala_ccode_node_unref0 (free_func_isnull);
		_vala_ccode_node_unref0 (ccomma_data);
		_vala_ccode_node_unref0 (data_isnull);
		_vala_ccode_node_unref0 (free_call);
		_vala_ccode_node_unref0 (wrapper);
		_g_free0 (destroy_node_func);
		_vala_ccode_node_unref0 (element_free_call);
		_vala_ccode_node_unref0 (function);
	} else {
		ValaTypeSymbol* _tmp137_;
		ValaTypeSymbol* _tmp138_;
		ValaClass* _tmp139_;
		_tmp137_ = vala_data_type_get_type_symbol (collection_type);
		_tmp138_ = _tmp137_;
		_tmp139_ = self->glist_type;
		if (_tmp138_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp139_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			gchar* _tmp140_;
			_tmp140_ = g_strdup ("g_list_free_full");
			_g_free0 (destroy_func);
			destroy_func = _tmp140_;
		} else {
			ValaTypeSymbol* _tmp141_;
			ValaTypeSymbol* _tmp142_;
			ValaClass* _tmp143_;
			_tmp141_ = vala_data_type_get_type_symbol (collection_type);
			_tmp142_ = _tmp141_;
			_tmp143_ = self->gslist_type;
			if (_tmp142_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp143_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
				gchar* _tmp144_;
				_tmp144_ = g_strdup ("g_slist_free_full");
				_g_free0 (destroy_func);
				destroy_func = _tmp144_;
			} else {
				ValaTypeSymbol* _tmp145_;
				ValaTypeSymbol* _tmp146_;
				ValaClass* _tmp147_;
				_tmp145_ = vala_data_type_get_type_symbol (collection_type);
				_tmp146_ = _tmp145_;
				_tmp147_ = self->gqueue_type;
				if (_tmp146_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp147_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
					gchar* _tmp148_;
					_tmp148_ = g_strdup ("g_queue_free_full");
					_g_free0 (destroy_func);
					destroy_func = _tmp148_;
				} else {
					gchar* _tmp149_;
					vala_report_error (NULL, "internal error: type of collection not supported");
					_tmp149_ = g_strdup ("");
					result = _tmp149_;
					_g_free0 (destroy_func_wrapper);
					_g_free0 (destroy_func);
					return result;
				}
			}
		}
	}
	if (element_destroy_func_expression != NULL) {
		ValaCCodeFunction* function = NULL;
		const gchar* _tmp150_;
		ValaCCodeFunction* _tmp151_;
		ValaCCodeFunction* _tmp152_;
		gchar* _tmp153_;
		gchar* _tmp154_;
		ValaCCodeParameter* _tmp155_;
		ValaCCodeParameter* _tmp156_;
		ValaCCodeFunction* _tmp157_;
		ValaCCodeFunctionCall* collection_free_call = NULL;
		const gchar* _tmp158_;
		ValaCCodeIdentifier* _tmp159_;
		ValaCCodeIdentifier* _tmp160_;
		ValaCCodeFunctionCall* _tmp161_;
		ValaCCodeFunctionCall* _tmp162_;
		ValaCCodeFunctionCall* _tmp163_;
		ValaCCodeIdentifier* _tmp164_;
		ValaCCodeIdentifier* _tmp165_;
		ValaCCodeFunctionCall* _tmp166_;
		ValaCCodeCastExpression* _tmp167_;
		ValaCCodeCastExpression* _tmp168_;
		ValaCCodeFunction* _tmp169_;
		ValaCCodeFunction* _tmp170_;
		ValaCCodeFunctionCall* _tmp171_;
		ValaCCodeFunction* _tmp172_;
		ValaCCodeFile* _tmp173_;
		ValaCCodeFunction* _tmp174_;
		ValaCCodeFile* _tmp175_;
		ValaCCodeFunction* _tmp176_;
		_tmp150_ = destroy_func_wrapper;
		_tmp151_ = vala_ccode_function_new (_tmp150_, "void");
		function = _tmp151_;
		_tmp152_ = function;
		_tmp153_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
		_tmp154_ = _tmp153_;
		_tmp155_ = vala_ccode_parameter_new ("self", _tmp154_);
		_tmp156_ = _tmp155_;
		vala_ccode_function_add_parameter (_tmp152_, _tmp156_);
		_vala_ccode_node_unref0 (_tmp156_);
		_g_free0 (_tmp154_);
		_tmp157_ = function;
		vala_ccode_base_module_push_function (self, _tmp157_);
		_tmp158_ = destroy_func;
		_tmp159_ = vala_ccode_identifier_new (_tmp158_);
		_tmp160_ = _tmp159_;
		_tmp161_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp160_);
		_tmp162_ = _tmp161_;
		_vala_ccode_node_unref0 (_tmp160_);
		collection_free_call = _tmp162_;
		_tmp163_ = collection_free_call;
		_tmp164_ = vala_ccode_identifier_new ("self");
		_tmp165_ = _tmp164_;
		vala_ccode_function_call_add_argument (_tmp163_, (ValaCCodeExpression*) _tmp165_);
		_vala_ccode_node_unref0 (_tmp165_);
		_tmp166_ = collection_free_call;
		_tmp167_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) element_destroy_func_expression, "GDestroyNotify");
		_tmp168_ = _tmp167_;
		vala_ccode_function_call_add_argument (_tmp166_, (ValaCCodeExpression*) _tmp168_);
		_vala_ccode_node_unref0 (_tmp168_);
		_tmp169_ = vala_ccode_base_module_get_ccode (self);
		_tmp170_ = _tmp169_;
		_tmp171_ = collection_free_call;
		vala_ccode_function_add_expression (_tmp170_, (ValaCCodeExpression*) _tmp171_);
		_tmp172_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp172_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
		vala_ccode_base_module_pop_function (self);
		_tmp173_ = self->cfile;
		_tmp174_ = function;
		vala_ccode_file_add_function_declaration (_tmp173_, _tmp174_);
		_tmp175_ = self->cfile;
		_tmp176_ = function;
		vala_ccode_file_add_function (_tmp175_, _tmp176_);
		result = destroy_func_wrapper;
		_vala_ccode_node_unref0 (collection_free_call);
		_vala_ccode_node_unref0 (function);
		_g_free0 (destroy_func);
		return result;
	}
	result = destroy_func;
	_g_free0 (destroy_func_wrapper);
	return result;
}

static gchar*
vala_ccode_base_module_real_append_struct_array_destroy (ValaCCodeBaseModule* self,
                                                         ValaStruct* st)
{
	gchar* result;
	g_return_val_if_fail (st != NULL, NULL);
	result = NULL;
	return result;
}

gchar*
vala_ccode_base_module_append_struct_array_destroy (ValaCCodeBaseModule* self,
                                                    ValaStruct* st)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->append_struct_array_destroy) {
		return _klass_->append_struct_array_destroy (self, st);
	}
	return NULL;
}

static gchar*
vala_ccode_base_module_real_append_struct_array_free (ValaCCodeBaseModule* self,
                                                      ValaStruct* st)
{
	gchar* result;
	g_return_val_if_fail (st != NULL, NULL);
	result = NULL;
	return result;
}

gchar*
vala_ccode_base_module_append_struct_array_free (ValaCCodeBaseModule* self,
                                                 ValaStruct* st)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->append_struct_array_free) {
		return _klass_->append_struct_array_free (self, st);
	}
	return NULL;
}

ValaCCodeExpression*
vala_ccode_base_module_destroy_local (ValaCCodeBaseModule* self,
                                      ValaLocalVariable* local)
{
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (local != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_local_cvalue (self, local);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_destroy_value (self, _tmp1_, FALSE);
	_tmp3_ = _tmp2_;
	_vala_target_value_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_destroy_parameter (ValaCCodeBaseModule* self,
                                          ValaParameter* param)
{
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (param != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_destroy_value (self, _tmp1_, FALSE);
	_tmp3_ = _tmp2_;
	_vala_target_value_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_destroy_field (ValaCCodeBaseModule* self,
                                      ValaField* field,
                                      ValaTargetValue* instance)
{
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (field != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_field_cvalue (self, field, instance);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_destroy_value (self, _tmp1_, FALSE);
	_tmp3_ = _tmp2_;
	_vala_target_value_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_destroy_value (ValaCCodeBaseModule* self,
                                           ValaTargetValue* value,
                                           gboolean is_macro_definition)
{
	ValaDataType* type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaDataType* _tmp4_;
	ValaCCodeExpression* cvar = NULL;
	ValaCCodeExpression* _tmp8_;
	ValaCCodeExpression* _tmp9_;
	ValaDataType* _tmp10_;
	gboolean _tmp58_ = FALSE;
	gboolean _tmp59_ = FALSE;
	gboolean _tmp60_ = FALSE;
	ValaDataType* _tmp61_;
	ValaTypeSymbol* _tmp62_;
	ValaTypeSymbol* _tmp63_;
	ValaClass* _tmp64_;
	gboolean is_gcollection = FALSE;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeExpression* cexpr = NULL;
	ValaDataType* _tmp77_;
	ValaCCodeExpression* _tmp78_;
	gboolean _tmp79_ = FALSE;
	gboolean _tmp85_ = FALSE;
	ValaDataType* _tmp86_;
	gboolean _tmp157_ = FALSE;
	gboolean _tmp158_ = FALSE;
	gboolean _tmp159_ = FALSE;
	gboolean _tmp160_ = FALSE;
	ValaCodeContext* _tmp204_;
	ValaProfile _tmp205_;
	ValaProfile _tmp206_;
	ValaCCodeBinaryExpression* cisnull = NULL;
	ValaCCodeExpression* _tmp208_;
	ValaCCodeConstant* _tmp209_;
	ValaCCodeConstant* _tmp210_;
	ValaCCodeBinaryExpression* _tmp211_;
	ValaCCodeBinaryExpression* _tmp212_;
	ValaDataType* _tmp213_;
	ValaCCodeFunctionCall* _tmp242_;
	ValaCCodeExpression* _tmp243_;
	ValaCCodeCommaExpression* ccomma = NULL;
	ValaCCodeCommaExpression* _tmp244_;
	gboolean _tmp245_ = FALSE;
	gboolean _tmp246_ = FALSE;
	gboolean _tmp247_ = FALSE;
	ValaCodeContext* _tmp248_;
	ValaProfile _tmp249_;
	ValaProfile _tmp250_;
	ValaCCodeCommaExpression* _tmp335_;
	ValaCCodeFunctionCall* _tmp336_;
	ValaCCodeCommaExpression* _tmp337_;
	ValaCCodeConstant* _tmp338_;
	ValaCCodeConstant* _tmp339_;
	ValaCCodeAssignment* cassign = NULL;
	ValaCCodeExpression* _tmp340_;
	ValaCCodeCommaExpression* _tmp341_;
	ValaCCodeAssignment* _tmp342_;
	gboolean _tmp343_ = FALSE;
	gboolean _tmp344_ = FALSE;
	ValaDataType* _tmp345_;
	ValaTypeSymbol* _tmp346_;
	ValaTypeSymbol* _tmp347_;
	gboolean uses_gfree = FALSE;
	gboolean _tmp356_ = FALSE;
	ValaCCodeBinaryExpression* _tmp358_;
	ValaCCodeConstant* _tmp359_;
	ValaCCodeConstant* _tmp360_;
	ValaCCodeAssignment* _tmp361_;
	ValaCCodeConditionalExpression* _tmp362_;
	ValaCCodeExpression* _tmp363_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = vala_target_value_get_value_type (value);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	type = _tmp2_;
	_tmp3_ = vala_target_value_get_actual_value_type (value);
	_tmp4_ = _tmp3_;
	if (_tmp4_ != NULL) {
		ValaDataType* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp7_;
		_tmp5_ = vala_target_value_get_actual_value_type (value);
		_tmp6_ = _tmp5_;
		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
		_vala_code_node_unref0 (type);
		type = _tmp7_;
	}
	_tmp8_ = vala_get_cvalue_ (value);
	_tmp9_ = _vala_ccode_node_ref0 (_tmp8_);
	cvar = _tmp9_;
	_tmp10_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_DELEGATE_TYPE)) {
		ValaCodeContext* _tmp11_;
		ValaProfile _tmp12_;
		ValaProfile _tmp13_;
		ValaCCodeExpression* delegate_target = NULL;
		ValaCCodeExpression* _tmp15_;
		ValaCCodeExpression* delegate_target_destroy_notify = NULL;
		ValaCCodeExpression* _tmp16_;
		ValaCCodeFunctionCall* ccall = NULL;
		ValaCCodeExpression* _tmp17_;
		ValaCCodeFunctionCall* _tmp18_;
		ValaCCodeFunctionCall* _tmp19_;
		ValaCCodeExpression* _tmp20_;
		ValaCCodeCommaExpression* destroy_call = NULL;
		ValaCCodeCommaExpression* _tmp21_;
		ValaCCodeCommaExpression* _tmp22_;
		ValaCCodeFunctionCall* _tmp23_;
		ValaCCodeCommaExpression* _tmp24_;
		ValaCCodeConstant* _tmp25_;
		ValaCCodeConstant* _tmp26_;
		ValaCCodeBinaryExpression* cisnull = NULL;
		ValaCCodeExpression* _tmp27_;
		ValaCCodeConstant* _tmp28_;
		ValaCCodeConstant* _tmp29_;
		ValaCCodeBinaryExpression* _tmp30_;
		ValaCCodeBinaryExpression* _tmp31_;
		ValaCCodeCommaExpression* ccomma = NULL;
		ValaCCodeCommaExpression* _tmp32_;
		ValaCCodeCommaExpression* _tmp33_;
		ValaCCodeBinaryExpression* _tmp34_;
		ValaCCodeConstant* _tmp35_;
		ValaCCodeConstant* _tmp36_;
		ValaCCodeCommaExpression* _tmp37_;
		ValaCCodeConditionalExpression* _tmp38_;
		ValaCCodeConditionalExpression* _tmp39_;
		ValaCCodeCommaExpression* _tmp40_;
		ValaCCodeExpression* _tmp41_;
		ValaCCodeConstant* _tmp42_;
		ValaCCodeConstant* _tmp43_;
		ValaCCodeAssignment* _tmp44_;
		ValaCCodeAssignment* _tmp45_;
		ValaCCodeCommaExpression* _tmp46_;
		ValaCCodeExpression* _tmp47_;
		ValaCCodeConstant* _tmp48_;
		ValaCCodeConstant* _tmp49_;
		ValaCCodeAssignment* _tmp50_;
		ValaCCodeAssignment* _tmp51_;
		ValaCCodeCommaExpression* _tmp52_;
		ValaCCodeExpression* _tmp53_;
		ValaCCodeConstant* _tmp54_;
		ValaCCodeConstant* _tmp55_;
		ValaCCodeAssignment* _tmp56_;
		ValaCCodeAssignment* _tmp57_;
		_tmp11_ = self->priv->_context;
		_tmp12_ = vala_code_context_get_profile (_tmp11_);
		_tmp13_ = _tmp12_;
		if (_tmp13_ != VALA_PROFILE_GOBJECT) {
			ValaCCodeFile* _tmp14_;
			_tmp14_ = self->cfile;
			vala_ccode_file_add_include (_tmp14_, "stddef.h", FALSE);
		}
		_tmp15_ = vala_ccode_base_module_get_delegate_target_cvalue (self, value);
		delegate_target = _tmp15_;
		_tmp16_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, value);
		delegate_target_destroy_notify = _tmp16_;
		_tmp17_ = delegate_target_destroy_notify;
		_tmp18_ = vala_ccode_function_call_new (_tmp17_);
		ccall = _tmp18_;
		_tmp19_ = ccall;
		_tmp20_ = delegate_target;
		vala_ccode_function_call_add_argument (_tmp19_, _tmp20_);
		_tmp21_ = vala_ccode_comma_expression_new ();
		destroy_call = _tmp21_;
		_tmp22_ = destroy_call;
		_tmp23_ = ccall;
		vala_ccode_comma_expression_append_expression (_tmp22_, (ValaCCodeExpression*) _tmp23_);
		_tmp24_ = destroy_call;
		_tmp25_ = vala_ccode_constant_new ("NULL");
		_tmp26_ = _tmp25_;
		vala_ccode_comma_expression_append_expression (_tmp24_, (ValaCCodeExpression*) _tmp26_);
		_vala_ccode_node_unref0 (_tmp26_);
		_tmp27_ = delegate_target_destroy_notify;
		_tmp28_ = vala_ccode_constant_new ("NULL");
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp27_, (ValaCCodeExpression*) _tmp29_);
		_tmp31_ = _tmp30_;
		_vala_ccode_node_unref0 (_tmp29_);
		cisnull = _tmp31_;
		_tmp32_ = vala_ccode_comma_expression_new ();
		ccomma = _tmp32_;
		_tmp33_ = ccomma;
		_tmp34_ = cisnull;
		_tmp35_ = vala_ccode_constant_new ("NULL");
		_tmp36_ = _tmp35_;
		_tmp37_ = destroy_call;
		_tmp38_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp34_, (ValaCCodeExpression*) _tmp36_, (ValaCCodeExpression*) _tmp37_);
		_tmp39_ = _tmp38_;
		vala_ccode_comma_expression_append_expression (_tmp33_, (ValaCCodeExpression*) _tmp39_);
		_vala_ccode_node_unref0 (_tmp39_);
		_vala_ccode_node_unref0 (_tmp36_);
		_tmp40_ = ccomma;
		_tmp41_ = cvar;
		_tmp42_ = vala_ccode_constant_new ("NULL");
		_tmp43_ = _tmp42_;
		_tmp44_ = vala_ccode_assignment_new (_tmp41_, (ValaCCodeExpression*) _tmp43_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp45_ = _tmp44_;
		vala_ccode_comma_expression_append_expression (_tmp40_, (ValaCCodeExpression*) _tmp45_);
		_vala_ccode_node_unref0 (_tmp45_);
		_vala_ccode_node_unref0 (_tmp43_);
		_tmp46_ = ccomma;
		_tmp47_ = delegate_target;
		_tmp48_ = vala_ccode_constant_new ("NULL");
		_tmp49_ = _tmp48_;
		_tmp50_ = vala_ccode_assignment_new (_tmp47_, (ValaCCodeExpression*) _tmp49_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp51_ = _tmp50_;
		vala_ccode_comma_expression_append_expression (_tmp46_, (ValaCCodeExpression*) _tmp51_);
		_vala_ccode_node_unref0 (_tmp51_);
		_vala_ccode_node_unref0 (_tmp49_);
		_tmp52_ = ccomma;
		_tmp53_ = delegate_target_destroy_notify;
		_tmp54_ = vala_ccode_constant_new ("NULL");
		_tmp55_ = _tmp54_;
		_tmp56_ = vala_ccode_assignment_new (_tmp53_, (ValaCCodeExpression*) _tmp55_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp57_ = _tmp56_;
		vala_ccode_comma_expression_append_expression (_tmp52_, (ValaCCodeExpression*) _tmp57_);
		_vala_ccode_node_unref0 (_tmp57_);
		_vala_ccode_node_unref0 (_tmp55_);
		result = (ValaCCodeExpression*) ccomma;
		_vala_ccode_node_unref0 (cisnull);
		_vala_ccode_node_unref0 (destroy_call);
		_vala_ccode_node_unref0 (ccall);
		_vala_ccode_node_unref0 (delegate_target_destroy_notify);
		_vala_ccode_node_unref0 (delegate_target);
		_vala_ccode_node_unref0 (cvar);
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp61_ = type;
	_tmp62_ = vala_data_type_get_type_symbol (_tmp61_);
	_tmp63_ = _tmp62_;
	_tmp64_ = self->glist_type;
	if (_tmp63_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp64_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
		_tmp60_ = TRUE;
	} else {
		ValaDataType* _tmp65_;
		ValaTypeSymbol* _tmp66_;
		ValaTypeSymbol* _tmp67_;
		ValaClass* _tmp68_;
		_tmp65_ = type;
		_tmp66_ = vala_data_type_get_type_symbol (_tmp65_);
		_tmp67_ = _tmp66_;
		_tmp68_ = self->gslist_type;
		_tmp60_ = _tmp67_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp68_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	if (_tmp60_) {
		_tmp59_ = TRUE;
	} else {
		ValaDataType* _tmp69_;
		ValaTypeSymbol* _tmp70_;
		ValaTypeSymbol* _tmp71_;
		ValaClass* _tmp72_;
		_tmp69_ = type;
		_tmp70_ = vala_data_type_get_type_symbol (_tmp69_);
		_tmp71_ = _tmp70_;
		_tmp72_ = self->gnode_type;
		_tmp59_ = _tmp71_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	if (_tmp59_) {
		_tmp58_ = TRUE;
	} else {
		ValaDataType* _tmp73_;
		ValaTypeSymbol* _tmp74_;
		ValaTypeSymbol* _tmp75_;
		ValaClass* _tmp76_;
		_tmp73_ = type;
		_tmp74_ = vala_data_type_get_type_symbol (_tmp73_);
		_tmp75_ = _tmp74_;
		_tmp76_ = self->gqueue_type;
		_tmp58_ = _tmp75_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp76_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	is_gcollection = _tmp58_;
	_tmp77_ = type;
	_tmp78_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp77_, FALSE);
	cexpr = _tmp78_;
	if (is_gcollection) {
		ValaCCodeExpression* _tmp80_;
		_tmp80_ = cexpr;
		_tmp79_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp80_, VALA_TYPE_CCODE_FUNCTION_CALL);
	} else {
		_tmp79_ = FALSE;
	}
	if (_tmp79_) {
		ValaCCodeExpression* _tmp81_;
		ValaCCodeFunctionCall* _tmp82_;
		_tmp81_ = cexpr;
		_tmp82_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp81_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall));
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp82_;
	} else {
		ValaCCodeExpression* _tmp83_;
		ValaCCodeFunctionCall* _tmp84_;
		_tmp83_ = cexpr;
		_tmp84_ = vala_ccode_function_call_new (_tmp83_);
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp84_;
	}
	_tmp86_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp86_, VALA_TYPE_VALUE_TYPE)) {
		ValaDataType* _tmp87_;
		gboolean _tmp88_;
		gboolean _tmp89_;
		_tmp87_ = type;
		_tmp88_ = vala_data_type_get_nullable (_tmp87_);
		_tmp89_ = _tmp88_;
		_tmp85_ = !_tmp89_;
	} else {
		_tmp85_ = FALSE;
	}
	if (_tmp85_) {
		ValaStruct* st = NULL;
		ValaDataType* _tmp90_;
		ValaTypeSymbol* _tmp91_;
		ValaTypeSymbol* _tmp92_;
		gboolean _tmp93_ = FALSE;
		ValaStruct* _tmp94_;
		gboolean _tmp102_ = FALSE;
		ValaStruct* _tmp103_;
		_tmp90_ = type;
		_tmp91_ = vala_data_type_get_type_symbol (_tmp90_);
		_tmp92_ = _tmp91_;
		st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp92_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp92_) : NULL;
		_tmp94_ = st;
		if (_tmp94_ != NULL) {
			ValaStruct* _tmp95_;
			_tmp95_ = st;
			_tmp93_ = vala_struct_is_simple_type (_tmp95_);
		} else {
			_tmp93_ = FALSE;
		}
		if (_tmp93_) {
			ValaCCodeFunctionCall* _tmp96_;
			ValaCCodeExpression* _tmp97_;
			_tmp96_ = ccall;
			_tmp97_ = cvar;
			vala_ccode_function_call_add_argument (_tmp96_, _tmp97_);
		} else {
			ValaCCodeFunctionCall* _tmp98_;
			ValaCCodeExpression* _tmp99_;
			ValaCCodeUnaryExpression* _tmp100_;
			ValaCCodeUnaryExpression* _tmp101_;
			_tmp98_ = ccall;
			_tmp99_ = cvar;
			_tmp100_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp99_);
			_tmp101_ = _tmp100_;
			vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp101_);
			_vala_ccode_node_unref0 (_tmp101_);
		}
		_tmp103_ = self->gvalue_type;
		if (_tmp103_ != NULL) {
			ValaDataType* _tmp104_;
			ValaTypeSymbol* _tmp105_;
			ValaTypeSymbol* _tmp106_;
			ValaStruct* _tmp107_;
			_tmp104_ = type;
			_tmp105_ = vala_data_type_get_type_symbol (_tmp104_);
			_tmp106_ = _tmp105_;
			_tmp107_ = self->gvalue_type;
			_tmp102_ = _tmp106_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp107_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		} else {
			_tmp102_ = FALSE;
		}
		if (_tmp102_) {
			ValaCCodeFunctionCall* cisvalid = NULL;
			ValaCCodeIdentifier* _tmp108_;
			ValaCCodeIdentifier* _tmp109_;
			ValaCCodeFunctionCall* _tmp110_;
			ValaCCodeFunctionCall* _tmp111_;
			ValaCCodeFunctionCall* _tmp112_;
			ValaCCodeExpression* _tmp113_;
			ValaCCodeUnaryExpression* _tmp114_;
			ValaCCodeUnaryExpression* _tmp115_;
			ValaCCodeCommaExpression* ccomma = NULL;
			ValaCCodeCommaExpression* _tmp116_;
			ValaCCodeCommaExpression* _tmp117_;
			ValaCCodeFunctionCall* _tmp118_;
			ValaCCodeCommaExpression* _tmp119_;
			ValaCCodeConstant* _tmp120_;
			ValaCCodeConstant* _tmp121_;
			ValaCCodeFunctionCall* _tmp122_;
			ValaCCodeCommaExpression* _tmp123_;
			ValaCCodeConstant* _tmp124_;
			ValaCCodeConstant* _tmp125_;
			ValaCCodeConditionalExpression* _tmp126_;
			ValaCCodeExpression* _tmp127_;
			_tmp108_ = vala_ccode_identifier_new ("G_IS_VALUE");
			_tmp109_ = _tmp108_;
			_tmp110_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp109_);
			_tmp111_ = _tmp110_;
			_vala_ccode_node_unref0 (_tmp109_);
			cisvalid = _tmp111_;
			_tmp112_ = cisvalid;
			_tmp113_ = cvar;
			_tmp114_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp113_);
			_tmp115_ = _tmp114_;
			vala_ccode_function_call_add_argument (_tmp112_, (ValaCCodeExpression*) _tmp115_);
			_vala_ccode_node_unref0 (_tmp115_);
			_tmp116_ = vala_ccode_comma_expression_new ();
			ccomma = _tmp116_;
			_tmp117_ = ccomma;
			_tmp118_ = ccall;
			vala_ccode_comma_expression_append_expression (_tmp117_, (ValaCCodeExpression*) _tmp118_);
			_tmp119_ = ccomma;
			_tmp120_ = vala_ccode_constant_new ("NULL");
			_tmp121_ = _tmp120_;
			vala_ccode_comma_expression_append_expression (_tmp119_, (ValaCCodeExpression*) _tmp121_);
			_vala_ccode_node_unref0 (_tmp121_);
			_tmp122_ = cisvalid;
			_tmp123_ = ccomma;
			_tmp124_ = vala_ccode_constant_new ("NULL");
			_tmp125_ = _tmp124_;
			_tmp126_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp122_, (ValaCCodeExpression*) _tmp123_, (ValaCCodeExpression*) _tmp125_);
			_tmp127_ = (ValaCCodeExpression*) _tmp126_;
			_vala_ccode_node_unref0 (_tmp125_);
			result = _tmp127_;
			_vala_ccode_node_unref0 (ccomma);
			_vala_ccode_node_unref0 (cisvalid);
			_vala_ccode_node_unref0 (cexpr);
			_vala_ccode_node_unref0 (ccall);
			_vala_ccode_node_unref0 (cvar);
			_vala_code_node_unref0 (type);
			return result;
		} else {
			gboolean _tmp128_ = FALSE;
			gboolean _tmp129_ = FALSE;
			gboolean _tmp130_ = FALSE;
			ValaDataType* _tmp131_;
			ValaTypeSymbol* _tmp132_;
			ValaTypeSymbol* _tmp133_;
			ValaStruct* _tmp134_;
			_tmp131_ = type;
			_tmp132_ = vala_data_type_get_type_symbol (_tmp131_);
			_tmp133_ = _tmp132_;
			_tmp134_ = self->gmutex_type;
			if (_tmp133_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp134_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
				_tmp130_ = TRUE;
			} else {
				ValaDataType* _tmp135_;
				ValaTypeSymbol* _tmp136_;
				ValaTypeSymbol* _tmp137_;
				ValaStruct* _tmp138_;
				_tmp135_ = type;
				_tmp136_ = vala_data_type_get_type_symbol (_tmp135_);
				_tmp137_ = _tmp136_;
				_tmp138_ = self->grecmutex_type;
				_tmp130_ = _tmp137_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp138_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
			}
			if (_tmp130_) {
				_tmp129_ = TRUE;
			} else {
				ValaDataType* _tmp139_;
				ValaTypeSymbol* _tmp140_;
				ValaTypeSymbol* _tmp141_;
				ValaStruct* _tmp142_;
				_tmp139_ = type;
				_tmp140_ = vala_data_type_get_type_symbol (_tmp139_);
				_tmp141_ = _tmp140_;
				_tmp142_ = self->grwlock_type;
				_tmp129_ = _tmp141_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
			}
			if (_tmp129_) {
				_tmp128_ = TRUE;
			} else {
				ValaDataType* _tmp143_;
				ValaTypeSymbol* _tmp144_;
				ValaTypeSymbol* _tmp145_;
				ValaStruct* _tmp146_;
				_tmp143_ = type;
				_tmp144_ = vala_data_type_get_type_symbol (_tmp143_);
				_tmp145_ = _tmp144_;
				_tmp146_ = self->gcond_type;
				_tmp128_ = _tmp145_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp146_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
			}
			if (_tmp128_) {
				ValaCCodeFunctionCall* _tmp147_;
				ValaDataType* _tmp148_;
				ValaTypeSymbol* _tmp149_;
				ValaTypeSymbol* _tmp150_;
				gchar* _tmp151_;
				gchar* _tmp152_;
				gchar* _tmp153_;
				gchar* _tmp154_;
				ValaCCodeIdentifier* _tmp155_;
				ValaCCodeIdentifier* _tmp156_;
				self->requires_clear_mutex = TRUE;
				_tmp147_ = ccall;
				_tmp148_ = type;
				_tmp149_ = vala_data_type_get_type_symbol (_tmp148_);
				_tmp150_ = _tmp149_;
				_tmp151_ = vala_get_ccode_name ((ValaCodeNode*) _tmp150_);
				_tmp152_ = _tmp151_;
				_tmp153_ = g_strconcat ("_vala_clear_", _tmp152_, NULL);
				_tmp154_ = _tmp153_;
				_tmp155_ = vala_ccode_identifier_new (_tmp154_);
				_tmp156_ = _tmp155_;
				vala_ccode_function_call_set_call (_tmp147_, (ValaCCodeExpression*) _tmp156_);
				_vala_ccode_node_unref0 (_tmp156_);
				_g_free0 (_tmp154_);
				_g_free0 (_tmp152_);
				result = (ValaCCodeExpression*) ccall;
				_vala_ccode_node_unref0 (cexpr);
				_vala_ccode_node_unref0 (cvar);
				_vala_code_node_unref0 (type);
				return result;
			} else {
				result = (ValaCCodeExpression*) ccall;
				_vala_ccode_node_unref0 (cexpr);
				_vala_ccode_node_unref0 (cvar);
				_vala_code_node_unref0 (type);
				return result;
			}
		}
	}
	if (!is_gcollection) {
		ValaCCodeFunctionCall* _tmp161_;
		ValaCCodeExpression* _tmp162_;
		ValaCCodeExpression* _tmp163_;
		_tmp161_ = ccall;
		_tmp162_ = vala_ccode_function_call_get_call (_tmp161_);
		_tmp163_ = _tmp162_;
		_tmp160_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, VALA_TYPE_CCODE_IDENTIFIER);
	} else {
		_tmp160_ = FALSE;
	}
	if (_tmp160_) {
		ValaDataType* _tmp164_;
		_tmp164_ = type;
		_tmp159_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp164_, VALA_TYPE_ARRAY_TYPE);
	} else {
		_tmp159_ = FALSE;
	}
	if (_tmp159_) {
		ValaDataType* _tmp165_;
		_tmp165_ = type;
		_tmp158_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp165_, VALA_TYPE_GENERIC_TYPE);
	} else {
		_tmp158_ = FALSE;
	}
	if (_tmp158_) {
		_tmp157_ = !is_macro_definition;
	} else {
		_tmp157_ = FALSE;
	}
	if (_tmp157_) {
		ValaCCodeIdentifier* freeid = NULL;
		ValaCCodeFunctionCall* _tmp166_;
		ValaCCodeExpression* _tmp167_;
		ValaCCodeExpression* _tmp168_;
		ValaCCodeIdentifier* _tmp169_;
		gchar* free0_func = NULL;
		ValaCCodeIdentifier* _tmp170_;
		const gchar* _tmp171_;
		const gchar* _tmp172_;
		gchar* _tmp173_;
		const gchar* _tmp174_;
		ValaCCodeExpression* _tmp194_;
		const gchar* _tmp198_;
		ValaCCodeIdentifier* _tmp199_;
		ValaCCodeIdentifier* _tmp200_;
		ValaCCodeFunctionCall* _tmp201_;
		ValaCCodeFunctionCall* _tmp202_;
		ValaCCodeExpression* _tmp203_;
		_tmp166_ = ccall;
		_tmp167_ = vala_ccode_function_call_get_call (_tmp166_);
		_tmp168_ = _tmp167_;
		_tmp169_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp168_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
		freeid = _tmp169_;
		_tmp170_ = freeid;
		_tmp171_ = vala_ccode_identifier_get_name (_tmp170_);
		_tmp172_ = _tmp171_;
		_tmp173_ = g_strdup_printf ("_%s0", _tmp172_);
		free0_func = _tmp173_;
		_tmp174_ = free0_func;
		if (vala_ccode_base_module_add_wrapper (self, _tmp174_)) {
			ValaCCodeExpression* macro = NULL;
			ValaDataType* _tmp175_;
			ValaCCodeIdentifier* _tmp176_;
			ValaCCodeIdentifier* _tmp177_;
			ValaGLibValue* _tmp178_;
			ValaGLibValue* _tmp179_;
			ValaCCodeExpression* _tmp180_;
			ValaCCodeExpression* _tmp181_;
			ValaCCodeFile* _tmp182_;
			const gchar* _tmp183_;
			gchar* _tmp184_;
			gchar* _tmp185_;
			ValaCCodeExpression* _tmp186_;
			ValaCCodeMacroReplacement* _tmp187_;
			ValaCCodeMacroReplacement* _tmp188_;
			_tmp175_ = type;
			_tmp176_ = vala_ccode_identifier_new ("var");
			_tmp177_ = _tmp176_;
			_tmp178_ = vala_glib_value_new (_tmp175_, (ValaCCodeExpression*) _tmp177_, TRUE);
			_tmp179_ = _tmp178_;
			_tmp180_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp179_, TRUE);
			_tmp181_ = _tmp180_;
			_vala_target_value_unref0 (_tmp179_);
			_vala_ccode_node_unref0 (_tmp177_);
			macro = _tmp181_;
			_tmp182_ = self->cfile;
			_tmp183_ = free0_func;
			_tmp184_ = g_strdup_printf ("%s(var)", _tmp183_);
			_tmp185_ = _tmp184_;
			_tmp186_ = macro;
			_tmp187_ = vala_ccode_macro_replacement_new_with_expression (_tmp185_, _tmp186_);
			_tmp188_ = _tmp187_;
			vala_ccode_file_add_type_declaration (_tmp182_, (ValaCCodeNode*) _tmp188_);
			_vala_ccode_node_unref0 (_tmp188_);
			_g_free0 (_tmp185_);
			_vala_ccode_node_unref0 (macro);
		}
		while (TRUE) {
			ValaCCodeExpression* _tmp189_;
			ValaCCodeExpression* _tmp190_;
			ValaCCodeExpression* _tmp191_;
			ValaCCodeExpression* _tmp192_;
			ValaCCodeExpression* _tmp193_;
			_tmp189_ = cvar;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
				break;
			}
			_tmp190_ = cvar;
			_tmp191_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp190_, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
			_tmp192_ = _tmp191_;
			_tmp193_ = _vala_ccode_node_ref0 (_tmp192_);
			_vala_ccode_node_unref0 (cvar);
			cvar = _tmp193_;
		}
		_tmp194_ = cvar;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp194_, VALA_TYPE_CCODE_FUNCTION_CALL)) {
			ValaCCodeExpression* _tmp195_;
			ValaList* _tmp196_;
			gpointer _tmp197_;
			_tmp195_ = cvar;
			_tmp196_ = vala_ccode_function_call_get_arguments (G_TYPE_CHECK_INSTANCE_CAST (_tmp195_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall));
			_tmp197_ = vala_list_get (_tmp196_, 0);
			_vala_ccode_node_unref0 (cvar);
			cvar = (ValaCCodeExpression*) _tmp197_;
		}
		_tmp198_ = free0_func;
		_tmp199_ = vala_ccode_identifier_new (_tmp198_);
		_tmp200_ = _tmp199_;
		_tmp201_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp200_);
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp201_;
		_vala_ccode_node_unref0 (_tmp200_);
		_tmp202_ = ccall;
		_tmp203_ = cvar;
		vala_ccode_function_call_add_argument (_tmp202_, _tmp203_);
		result = (ValaCCodeExpression*) ccall;
		_g_free0 (free0_func);
		_vala_ccode_node_unref0 (freeid);
		_vala_ccode_node_unref0 (cexpr);
		_vala_ccode_node_unref0 (cvar);
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp204_ = self->priv->_context;
	_tmp205_ = vala_code_context_get_profile (_tmp204_);
	_tmp206_ = _tmp205_;
	if (_tmp206_ != VALA_PROFILE_GOBJECT) {
		ValaCCodeFile* _tmp207_;
		_tmp207_ = self->cfile;
		vala_ccode_file_add_include (_tmp207_, "stddef.h", FALSE);
	}
	_tmp208_ = cvar;
	_tmp209_ = vala_ccode_constant_new ("NULL");
	_tmp210_ = _tmp209_;
	_tmp211_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp208_, (ValaCCodeExpression*) _tmp210_);
	_tmp212_ = _tmp211_;
	_vala_ccode_node_unref0 (_tmp210_);
	cisnull = _tmp212_;
	_tmp213_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp213_, VALA_TYPE_GENERIC_TYPE)) {
		ValaSymbol* parent = NULL;
		ValaDataType* _tmp214_;
		ValaTypeParameter* _tmp215_;
		ValaTypeParameter* _tmp216_;
		ValaSymbol* _tmp217_;
		ValaSymbol* _tmp218_;
		ValaSymbol* _tmp219_;
		ValaClass* cl = NULL;
		ValaSymbol* _tmp220_;
		ValaClass* _tmp221_;
		gboolean _tmp222_ = FALSE;
		gboolean _tmp223_ = FALSE;
		ValaSymbol* _tmp224_;
		ValaCCodeBinaryExpression* cunrefisnull = NULL;
		ValaDataType* _tmp232_;
		ValaCCodeExpression* _tmp233_;
		ValaCCodeExpression* _tmp234_;
		ValaCCodeConstant* _tmp235_;
		ValaCCodeConstant* _tmp236_;
		ValaCCodeBinaryExpression* _tmp237_;
		ValaCCodeBinaryExpression* _tmp238_;
		ValaCCodeBinaryExpression* _tmp239_;
		ValaCCodeBinaryExpression* _tmp240_;
		ValaCCodeBinaryExpression* _tmp241_;
		_tmp214_ = type;
		_tmp215_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp214_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
		_tmp216_ = _tmp215_;
		_tmp217_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp216_);
		_tmp218_ = _tmp217_;
		_tmp219_ = _vala_code_node_ref0 (_tmp218_);
		parent = _tmp219_;
		_tmp220_ = parent;
		_tmp221_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp220_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp220_) : NULL);
		cl = _tmp221_;
		_tmp224_ = parent;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp224_, VALA_TYPE_METHOD)) {
			ValaSymbol* _tmp225_;
			_tmp225_ = parent;
			_tmp223_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp225_, VALA_TYPE_OBJECT_TYPE_SYMBOL);
		} else {
			_tmp223_ = FALSE;
		}
		if (_tmp223_) {
			_tmp222_ = TRUE;
		} else {
			gboolean _tmp226_ = FALSE;
			ValaClass* _tmp227_;
			_tmp227_ = cl;
			if (_tmp227_ != NULL) {
				ValaClass* _tmp228_;
				gboolean _tmp229_;
				gboolean _tmp230_;
				_tmp228_ = cl;
				_tmp229_ = vala_class_get_is_compact (_tmp228_);
				_tmp230_ = _tmp229_;
				_tmp226_ = _tmp230_;
			} else {
				_tmp226_ = FALSE;
			}
			_tmp222_ = _tmp226_;
		}
		if (_tmp222_) {
			ValaCCodeConstant* _tmp231_;
			_tmp231_ = vala_ccode_constant_new ("NULL");
			result = (ValaCCodeExpression*) _tmp231_;
			_vala_code_node_unref0 (cl);
			_vala_code_node_unref0 (parent);
			_vala_ccode_node_unref0 (cisnull);
			_vala_ccode_node_unref0 (cexpr);
			_vala_ccode_node_unref0 (ccall);
			_vala_ccode_node_unref0 (cvar);
			_vala_code_node_unref0 (type);
			return result;
		}
		_tmp232_ = type;
		_tmp233_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp232_, FALSE);
		_tmp234_ = _tmp233_;
		_tmp235_ = vala_ccode_constant_new ("NULL");
		_tmp236_ = _tmp235_;
		_tmp237_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp234_, (ValaCCodeExpression*) _tmp236_);
		_tmp238_ = _tmp237_;
		_vala_ccode_node_unref0 (_tmp236_);
		_vala_ccode_node_unref0 (_tmp234_);
		cunrefisnull = _tmp238_;
		_tmp239_ = cisnull;
		_tmp240_ = cunrefisnull;
		_tmp241_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, (ValaCCodeExpression*) _tmp239_, (ValaCCodeExpression*) _tmp240_);
		_vala_ccode_node_unref0 (cisnull);
		cisnull = _tmp241_;
		_vala_ccode_node_unref0 (cunrefisnull);
		_vala_code_node_unref0 (cl);
		_vala_code_node_unref0 (parent);
	}
	_tmp242_ = ccall;
	_tmp243_ = cvar;
	vala_ccode_function_call_insert_argument (_tmp242_, 0, _tmp243_);
	_tmp244_ = vala_ccode_comma_expression_new ();
	ccomma = _tmp244_;
	_tmp248_ = self->priv->_context;
	_tmp249_ = vala_code_context_get_profile (_tmp248_);
	_tmp250_ = _tmp249_;
	if (_tmp250_ == VALA_PROFILE_GOBJECT) {
		ValaDataType* _tmp251_;
		ValaTypeSymbol* _tmp252_;
		ValaTypeSymbol* _tmp253_;
		_tmp251_ = type;
		_tmp252_ = vala_data_type_get_type_symbol (_tmp251_);
		_tmp253_ = _tmp252_;
		_tmp247_ = _tmp253_ != NULL;
	} else {
		_tmp247_ = FALSE;
	}
	if (_tmp247_) {
		ValaDataType* _tmp254_;
		ValaTypeSymbol* _tmp255_;
		ValaTypeSymbol* _tmp256_;
		_tmp254_ = type;
		_tmp255_ = vala_data_type_get_type_symbol (_tmp254_);
		_tmp256_ = _tmp255_;
		_tmp246_ = !vala_is_reference_counting (_tmp256_);
	} else {
		_tmp246_ = FALSE;
	}
	if (_tmp246_) {
		ValaDataType* _tmp257_;
		ValaTypeSymbol* _tmp258_;
		ValaTypeSymbol* _tmp259_;
		ValaTypeSymbol* _tmp260_;
		_tmp257_ = type;
		_tmp258_ = vala_data_type_get_type_symbol (_tmp257_);
		_tmp259_ = _tmp258_;
		_tmp260_ = self->gstringbuilder_type;
		_tmp245_ = vala_typesymbol_is_subtype_of (_tmp259_, _tmp260_);
	} else {
		_tmp245_ = FALSE;
	}
	if (_tmp245_) {
		ValaCCodeFunctionCall* _tmp261_;
		ValaCCodeConstant* _tmp262_;
		ValaCCodeConstant* _tmp263_;
		_tmp261_ = ccall;
		_tmp262_ = vala_ccode_constant_new ("TRUE");
		_tmp263_ = _tmp262_;
		vala_ccode_function_call_add_argument (_tmp261_, (ValaCCodeExpression*) _tmp263_);
		_vala_ccode_node_unref0 (_tmp263_);
	} else {
		gboolean _tmp264_ = FALSE;
		ValaCodeContext* _tmp265_;
		ValaProfile _tmp266_;
		ValaProfile _tmp267_;
		_tmp265_ = self->priv->_context;
		_tmp266_ = vala_code_context_get_profile (_tmp265_);
		_tmp267_ = _tmp266_;
		if (_tmp267_ == VALA_PROFILE_GOBJECT) {
			ValaDataType* _tmp268_;
			ValaTypeSymbol* _tmp269_;
			ValaTypeSymbol* _tmp270_;
			ValaTypeSymbol* _tmp271_;
			_tmp268_ = type;
			_tmp269_ = vala_data_type_get_type_symbol (_tmp268_);
			_tmp270_ = _tmp269_;
			_tmp271_ = self->gthreadpool_type;
			_tmp264_ = _tmp270_ == _tmp271_;
		} else {
			_tmp264_ = FALSE;
		}
		if (_tmp264_) {
			ValaCCodeFunctionCall* _tmp272_;
			ValaCCodeConstant* _tmp273_;
			ValaCCodeConstant* _tmp274_;
			ValaCCodeFunctionCall* _tmp275_;
			ValaCCodeConstant* _tmp276_;
			ValaCCodeConstant* _tmp277_;
			_tmp272_ = ccall;
			_tmp273_ = vala_ccode_constant_new ("FALSE");
			_tmp274_ = _tmp273_;
			vala_ccode_function_call_add_argument (_tmp272_, (ValaCCodeExpression*) _tmp274_);
			_vala_ccode_node_unref0 (_tmp274_);
			_tmp275_ = ccall;
			_tmp276_ = vala_ccode_constant_new ("TRUE");
			_tmp277_ = _tmp276_;
			vala_ccode_function_call_add_argument (_tmp275_, (ValaCCodeExpression*) _tmp277_);
			_vala_ccode_node_unref0 (_tmp277_);
		} else {
			ValaDataType* _tmp278_;
			_tmp278_ = type;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp278_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* array_type = NULL;
				ValaDataType* _tmp279_;
				ValaArrayType* _tmp280_;
				ValaArrayType* _tmp281_;
				ValaDataType* _tmp282_;
				ValaDataType* _tmp283_;
				_tmp279_ = type;
				_tmp280_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp279_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				array_type = _tmp280_;
				_tmp281_ = array_type;
				_tmp282_ = vala_array_type_get_element_type (_tmp281_);
				_tmp283_ = _tmp282_;
				if (vala_ccode_base_module_requires_destroy (_tmp283_)) {
					ValaCCodeExpression* csizeexpr = NULL;
					ValaList* _tmp284_;
					ValaCCodeExpression* _tmp296_;
					csizeexpr = NULL;
					_tmp284_ = G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->array_length_cvalues;
					if (_tmp284_ != NULL) {
						ValaCCodeExpression* _tmp285_;
						_tmp285_ = vala_ccode_base_module_get_array_length_cvalue (self, value, -1);
						_vala_ccode_node_unref0 (csizeexpr);
						csizeexpr = _tmp285_;
					} else {
						if (vala_get_array_null_terminated (value)) {
							ValaCCodeFunctionCall* len_call = NULL;
							ValaCCodeIdentifier* _tmp286_;
							ValaCCodeIdentifier* _tmp287_;
							ValaCCodeFunctionCall* _tmp288_;
							ValaCCodeFunctionCall* _tmp289_;
							ValaCCodeFunctionCall* _tmp290_;
							ValaCCodeExpression* _tmp291_;
							ValaCCodeFunctionCall* _tmp292_;
							ValaCCodeExpression* _tmp293_;
							self->requires_array_length = TRUE;
							_tmp286_ = vala_ccode_identifier_new ("_vala_array_length");
							_tmp287_ = _tmp286_;
							_tmp288_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp287_);
							_tmp289_ = _tmp288_;
							_vala_ccode_node_unref0 (_tmp287_);
							len_call = _tmp289_;
							_tmp290_ = len_call;
							_tmp291_ = cvar;
							vala_ccode_function_call_add_argument (_tmp290_, _tmp291_);
							_tmp292_ = len_call;
							_tmp293_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp292_);
							_vala_ccode_node_unref0 (csizeexpr);
							csizeexpr = _tmp293_;
							_vala_ccode_node_unref0 (len_call);
						} else {
							ValaCCodeExpression* _tmp294_;
							ValaCCodeExpression* _tmp295_;
							_tmp294_ = vala_get_array_length_cexpr (value);
							_tmp295_ = _vala_ccode_node_ref0 (_tmp294_);
							_vala_ccode_node_unref0 (csizeexpr);
							csizeexpr = _tmp295_;
						}
					}
					_tmp296_ = csizeexpr;
					if (_tmp296_ != NULL) {
						ValaStruct* st = NULL;
						ValaArrayType* _tmp297_;
						ValaDataType* _tmp298_;
						ValaDataType* _tmp299_;
						ValaTypeSymbol* _tmp300_;
						ValaTypeSymbol* _tmp301_;
						gboolean _tmp302_ = FALSE;
						ValaStruct* _tmp303_;
						_tmp297_ = array_type;
						_tmp298_ = vala_array_type_get_element_type (_tmp297_);
						_tmp299_ = _tmp298_;
						_tmp300_ = vala_data_type_get_type_symbol (_tmp299_);
						_tmp301_ = _tmp300_;
						st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp301_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp301_) : NULL;
						_tmp303_ = st;
						if (_tmp303_ != NULL) {
							ValaArrayType* _tmp304_;
							ValaDataType* _tmp305_;
							ValaDataType* _tmp306_;
							gboolean _tmp307_;
							gboolean _tmp308_;
							_tmp304_ = array_type;
							_tmp305_ = vala_array_type_get_element_type (_tmp304_);
							_tmp306_ = _tmp305_;
							_tmp307_ = vala_data_type_get_nullable (_tmp306_);
							_tmp308_ = _tmp307_;
							_tmp302_ = !_tmp308_;
						} else {
							_tmp302_ = FALSE;
						}
						if (_tmp302_) {
							ValaCCodeFunctionCall* _tmp309_;
							ValaStruct* _tmp310_;
							gchar* _tmp311_;
							gchar* _tmp312_;
							ValaCCodeIdentifier* _tmp313_;
							ValaCCodeIdentifier* _tmp314_;
							ValaCCodeFunctionCall* _tmp315_;
							ValaCCodeExpression* _tmp316_;
							_tmp309_ = ccall;
							_tmp310_ = st;
							_tmp311_ = vala_ccode_base_module_append_struct_array_free (self, _tmp310_);
							_tmp312_ = _tmp311_;
							_tmp313_ = vala_ccode_identifier_new (_tmp312_);
							_tmp314_ = _tmp313_;
							vala_ccode_function_call_set_call (_tmp309_, (ValaCCodeExpression*) _tmp314_);
							_vala_ccode_node_unref0 (_tmp314_);
							_g_free0 (_tmp312_);
							_tmp315_ = ccall;
							_tmp316_ = csizeexpr;
							vala_ccode_function_call_add_argument (_tmp315_, _tmp316_);
						} else {
							ValaDelegateType* _tmp317_;
							ValaCCodeFile* _tmp318_;
							ValaCCodeFunctionCall* _tmp319_;
							ValaCCodeIdentifier* _tmp320_;
							ValaCCodeIdentifier* _tmp321_;
							ValaCCodeFunctionCall* _tmp322_;
							ValaCCodeExpression* _tmp323_;
							ValaCCodeFunctionCall* _tmp324_;
							ValaArrayType* _tmp325_;
							ValaDataType* _tmp326_;
							ValaDataType* _tmp327_;
							ValaCCodeExpression* _tmp328_;
							ValaCCodeExpression* _tmp329_;
							ValaDelegateType* _tmp330_;
							gchar* _tmp331_;
							gchar* _tmp332_;
							ValaCCodeCastExpression* _tmp333_;
							ValaCCodeCastExpression* _tmp334_;
							self->requires_array_free = TRUE;
							_tmp317_ = self->delegate_target_destroy_type;
							_tmp318_ = self->cfile;
							vala_ccode_base_module_generate_type_declaration (self, (ValaDataType*) _tmp317_, _tmp318_);
							_tmp319_ = ccall;
							_tmp320_ = vala_ccode_identifier_new ("_vala_array_free");
							_tmp321_ = _tmp320_;
							vala_ccode_function_call_set_call (_tmp319_, (ValaCCodeExpression*) _tmp321_);
							_vala_ccode_node_unref0 (_tmp321_);
							_tmp322_ = ccall;
							_tmp323_ = csizeexpr;
							vala_ccode_function_call_add_argument (_tmp322_, _tmp323_);
							_tmp324_ = ccall;
							_tmp325_ = array_type;
							_tmp326_ = vala_array_type_get_element_type (_tmp325_);
							_tmp327_ = _tmp326_;
							_tmp328_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp327_, FALSE);
							_tmp329_ = _tmp328_;
							_tmp330_ = self->delegate_target_destroy_type;
							_tmp331_ = vala_get_ccode_name ((ValaCodeNode*) _tmp330_);
							_tmp332_ = _tmp331_;
							_tmp333_ = vala_ccode_cast_expression_new (_tmp329_, _tmp332_);
							_tmp334_ = _tmp333_;
							vala_ccode_function_call_add_argument (_tmp324_, (ValaCCodeExpression*) _tmp334_);
							_vala_ccode_node_unref0 (_tmp334_);
							_g_free0 (_tmp332_);
							_vala_ccode_node_unref0 (_tmp329_);
						}
					}
					_vala_ccode_node_unref0 (csizeexpr);
				}
				_vala_code_node_unref0 (array_type);
			}
		}
	}
	_tmp335_ = ccomma;
	_tmp336_ = ccall;
	vala_ccode_comma_expression_append_expression (_tmp335_, (ValaCCodeExpression*) _tmp336_);
	_tmp337_ = ccomma;
	_tmp338_ = vala_ccode_constant_new ("NULL");
	_tmp339_ = _tmp338_;
	vala_ccode_comma_expression_append_expression (_tmp337_, (ValaCCodeExpression*) _tmp339_);
	_vala_ccode_node_unref0 (_tmp339_);
	_tmp340_ = cvar;
	_tmp341_ = ccomma;
	_tmp342_ = vala_ccode_assignment_new (_tmp340_, (ValaCCodeExpression*) _tmp341_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	cassign = _tmp342_;
	_tmp345_ = type;
	_tmp346_ = vala_data_type_get_type_symbol (_tmp345_);
	_tmp347_ = _tmp346_;
	if (_tmp347_ != NULL) {
		ValaDataType* _tmp348_;
		ValaTypeSymbol* _tmp349_;
		ValaTypeSymbol* _tmp350_;
		_tmp348_ = type;
		_tmp349_ = vala_data_type_get_type_symbol (_tmp348_);
		_tmp350_ = _tmp349_;
		_tmp344_ = !vala_is_reference_counting (_tmp350_);
	} else {
		_tmp344_ = FALSE;
	}
	if (_tmp344_) {
		ValaDataType* _tmp351_;
		ValaTypeSymbol* _tmp352_;
		ValaTypeSymbol* _tmp353_;
		gchar* _tmp354_;
		gchar* _tmp355_;
		_tmp351_ = type;
		_tmp352_ = vala_data_type_get_type_symbol (_tmp351_);
		_tmp353_ = _tmp352_;
		_tmp354_ = vala_get_ccode_free_function (_tmp353_);
		_tmp355_ = _tmp354_;
		_tmp343_ = g_strcmp0 (_tmp355_, "g_free") == 0;
		_g_free0 (_tmp355_);
	} else {
		_tmp343_ = FALSE;
	}
	uses_gfree = _tmp343_;
	if (uses_gfree) {
		_tmp356_ = TRUE;
	} else {
		ValaDataType* _tmp357_;
		_tmp357_ = type;
		_tmp356_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp357_, VALA_TYPE_ARRAY_TYPE);
	}
	uses_gfree = _tmp356_;
	if (uses_gfree) {
		result = (ValaCCodeExpression*) cassign;
		_vala_ccode_node_unref0 (ccomma);
		_vala_ccode_node_unref0 (cisnull);
		_vala_ccode_node_unref0 (cexpr);
		_vala_ccode_node_unref0 (ccall);
		_vala_ccode_node_unref0 (cvar);
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp358_ = cisnull;
	_tmp359_ = vala_ccode_constant_new ("NULL");
	_tmp360_ = _tmp359_;
	_tmp361_ = cassign;
	_tmp362_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp358_, (ValaCCodeExpression*) _tmp360_, (ValaCCodeExpression*) _tmp361_);
	_tmp363_ = (ValaCCodeExpression*) _tmp362_;
	_vala_ccode_node_unref0 (_tmp360_);
	result = _tmp363_;
	_vala_ccode_node_unref0 (cassign);
	_vala_ccode_node_unref0 (ccomma);
	_vala_ccode_node_unref0 (cisnull);
	_vala_ccode_node_unref0 (cexpr);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (cvar);
	_vala_code_node_unref0 (type);
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_destroy_value (ValaCCodeBaseModule* self,
                                      ValaTargetValue* value,
                                      gboolean is_macro_definition)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->destroy_value) {
		return _klass_->destroy_value (self, value, is_macro_definition);
	}
	return NULL;
}

static void
vala_ccode_base_module_real_visit_end_full_expression (ValaCodeVisitor* base,
                                                       ValaExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaArrayList* _tmp0_;
	ValaArrayList* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	ValaLocalVariable* local_decl = NULL;
	ValaCodeNode* _tmp4_;
	ValaCodeNode* _tmp5_;
	ValaLocalVariable* _tmp6_;
	gboolean _tmp7_ = FALSE;
	ValaLocalVariable* _tmp8_;
	ValaArrayList* _tmp31_;
	ValaArrayList* _tmp32_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_ccode_base_module_get_temp_ref_values (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ == 0) {
		return;
	}
	_tmp4_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
	_tmp5_ = _tmp4_;
	_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp5_) : NULL);
	local_decl = _tmp6_;
	_tmp8_ = local_decl;
	if (_tmp8_ != NULL) {
		ValaLocalVariable* _tmp9_;
		ValaLocalVariable* _tmp10_;
		ValaExpression* _tmp11_;
		ValaExpression* _tmp12_;
		_tmp9_ = local_decl;
		_tmp10_ = local_decl;
		_tmp11_ = vala_variable_get_initializer ((ValaVariable*) _tmp10_);
		_tmp12_ = _tmp11_;
		_tmp7_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp9_, _tmp12_);
	} else {
		_tmp7_ = FALSE;
	}
	if (!_tmp7_) {
		ValaTargetValue* _tmp13_;
		ValaTargetValue* _tmp14_;
		ValaTargetValue* _tmp15_;
		ValaTargetValue* _tmp16_;
		_tmp13_ = vala_expression_get_target_value (expr);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_ccode_base_module_store_temp_value (self, _tmp14_, (ValaCodeNode*) expr, NULL);
		_tmp16_ = _tmp15_;
		vala_expression_set_target_value (expr, _tmp16_);
		_vala_target_value_unref0 (_tmp16_);
	}
	{
		ValaArrayList* _value_list = NULL;
		ValaArrayList* _tmp17_;
		ValaArrayList* _tmp18_;
		gint _value_size = 0;
		ValaArrayList* _tmp19_;
		gint _tmp20_;
		gint _tmp21_;
		gint _value_index = 0;
		_tmp17_ = vala_ccode_base_module_get_temp_ref_values (self);
		_tmp18_ = _tmp17_;
		_value_list = _tmp18_;
		_tmp19_ = _value_list;
		_tmp20_ = vala_collection_get_size ((ValaCollection*) _tmp19_);
		_tmp21_ = _tmp20_;
		_value_size = _tmp21_;
		_value_index = -1;
		while (TRUE) {
			gint _tmp22_;
			gint _tmp23_;
			ValaTargetValue* value = NULL;
			ValaArrayList* _tmp24_;
			gpointer _tmp25_;
			ValaCCodeFunction* _tmp26_;
			ValaCCodeFunction* _tmp27_;
			ValaTargetValue* _tmp28_;
			ValaCCodeExpression* _tmp29_;
			ValaCCodeExpression* _tmp30_;
			_value_index = _value_index + 1;
			_tmp22_ = _value_index;
			_tmp23_ = _value_size;
			if (!(_tmp22_ < _tmp23_)) {
				break;
			}
			_tmp24_ = _value_list;
			_tmp25_ = vala_list_get ((ValaList*) _tmp24_, _value_index);
			value = (ValaTargetValue*) _tmp25_;
			_tmp26_ = vala_ccode_base_module_get_ccode (self);
			_tmp27_ = _tmp26_;
			_tmp28_ = value;
			_tmp29_ = vala_ccode_base_module_destroy_value (self, _tmp28_, FALSE);
			_tmp30_ = _tmp29_;
			vala_ccode_function_add_expression (_tmp27_, _tmp30_);
			_vala_ccode_node_unref0 (_tmp30_);
			_vala_target_value_unref0 (value);
		}
	}
	_tmp31_ = vala_ccode_base_module_get_temp_ref_values (self);
	_tmp32_ = _tmp31_;
	vala_collection_clear ((ValaCollection*) _tmp32_);
	_vala_code_node_unref0 (local_decl);
}

void
vala_ccode_base_module_emit_temp_var (ValaCCodeBaseModule* self,
                                      ValaLocalVariable* local,
                                      gboolean on_error)
{
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaCCodeFile* _tmp2_;
	gboolean _tmp3_ = FALSE;
	const gchar* _tmp4_;
	const gchar* _tmp5_;
	gboolean init = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (local != NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) local);
	_tmp1_ = _tmp0_;
	_tmp2_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
	_tmp4_ = vala_symbol_get_name ((ValaSymbol*) local);
	_tmp5_ = _tmp4_;
	if (!g_str_has_prefix (_tmp5_, "*")) {
		gboolean _tmp6_;
		gboolean _tmp7_;
		_tmp6_ = vala_local_variable_get_init (local);
		_tmp7_ = _tmp6_;
		_tmp3_ = _tmp7_;
	} else {
		_tmp3_ = FALSE;
	}
	init = _tmp3_;
	if (vala_ccode_base_module_is_in_coroutine (self)) {
		ValaCCodeStruct* _tmp8_;
		ValaDataType* _tmp9_;
		ValaDataType* _tmp10_;
		gchar* _tmp11_;
		gchar* _tmp12_;
		const gchar* _tmp13_;
		const gchar* _tmp14_;
		ValaDataType* _tmp15_;
		ValaDataType* _tmp16_;
		ValaCCodeDeclaratorSuffix* _tmp17_;
		ValaCCodeDeclaratorSuffix* _tmp18_;
		_tmp8_ = self->closure_struct;
		_tmp9_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) _tmp10_);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_symbol_get_name ((ValaSymbol*) local);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp16_ = _tmp15_;
		_tmp17_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp16_);
		_tmp18_ = _tmp17_;
		vala_ccode_struct_add_field (_tmp8_, _tmp12_, _tmp14_, 0, _tmp18_);
		_vala_ccode_declarator_suffix_unref0 (_tmp18_);
		_g_free0 (_tmp12_);
		if (init) {
			ValaCCodeExpression* initializer = NULL;
			ValaDataType* _tmp19_;
			ValaDataType* _tmp20_;
			ValaCCodeExpression* _tmp21_;
			ValaCCodeExpression* _tmp22_;
			_tmp19_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp20_ = _tmp19_;
			_tmp21_ = vala_ccode_base_module_default_value_for_type (self, _tmp20_, FALSE, on_error);
			initializer = _tmp21_;
			_tmp22_ = initializer;
			if (_tmp22_ == NULL) {
				ValaCCodeFile* _tmp23_;
				ValaCCodeFunctionCall* memset_call = NULL;
				ValaCCodeIdentifier* _tmp24_;
				ValaCCodeIdentifier* _tmp25_;
				ValaCCodeFunctionCall* _tmp26_;
				ValaCCodeFunctionCall* _tmp27_;
				ValaCCodeFunctionCall* _tmp28_;
				const gchar* _tmp29_;
				const gchar* _tmp30_;
				ValaCCodeExpression* _tmp31_;
				ValaCCodeExpression* _tmp32_;
				ValaCCodeUnaryExpression* _tmp33_;
				ValaCCodeUnaryExpression* _tmp34_;
				ValaCCodeFunctionCall* _tmp35_;
				ValaCCodeConstant* _tmp36_;
				ValaCCodeConstant* _tmp37_;
				ValaCCodeExpression* size = NULL;
				ValaCCodeExpression* _tmp38_ = NULL;
				ValaCCodeExpression* _tmp39_;
				ValaCCodeFunctionCall* _tmp47_;
				ValaCCodeExpression* _tmp48_;
				ValaCCodeFunction* _tmp49_;
				ValaCCodeFunction* _tmp50_;
				ValaCCodeFunctionCall* _tmp51_;
				_tmp23_ = self->cfile;
				vala_ccode_file_add_include (_tmp23_, "string.h", FALSE);
				_tmp24_ = vala_ccode_identifier_new ("memset");
				_tmp25_ = _tmp24_;
				_tmp26_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp25_);
				_tmp27_ = _tmp26_;
				_vala_ccode_node_unref0 (_tmp25_);
				memset_call = _tmp27_;
				_tmp28_ = memset_call;
				_tmp29_ = vala_symbol_get_name ((ValaSymbol*) local);
				_tmp30_ = _tmp29_;
				_tmp31_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp30_);
				_tmp32_ = _tmp31_;
				_tmp33_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp32_);
				_tmp34_ = _tmp33_;
				vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp34_);
				_vala_ccode_node_unref0 (_tmp34_);
				_vala_ccode_node_unref0 (_tmp32_);
				_tmp35_ = memset_call;
				_tmp36_ = vala_ccode_constant_new ("0");
				_tmp37_ = _tmp36_;
				vala_ccode_function_call_add_argument (_tmp35_, (ValaCCodeExpression*) _tmp37_);
				_vala_ccode_node_unref0 (_tmp37_);
				size = NULL;
				vala_ccode_base_module_requires_memset_init (self, (ValaVariable*) local, &_tmp38_);
				_vala_ccode_node_unref0 (size);
				size = _tmp38_;
				_tmp39_ = size;
				if (_tmp39_ == NULL) {
					ValaDataType* _tmp40_;
					ValaDataType* _tmp41_;
					gchar* _tmp42_;
					gchar* _tmp43_;
					gchar* _tmp44_;
					gchar* _tmp45_;
					ValaCCodeIdentifier* _tmp46_;
					_tmp40_ = vala_variable_get_variable_type ((ValaVariable*) local);
					_tmp41_ = _tmp40_;
					_tmp42_ = vala_get_ccode_name ((ValaCodeNode*) _tmp41_);
					_tmp43_ = _tmp42_;
					_tmp44_ = g_strdup_printf ("sizeof (%s)", _tmp43_);
					_tmp45_ = _tmp44_;
					_tmp46_ = vala_ccode_identifier_new (_tmp45_);
					_vala_ccode_node_unref0 (size);
					size = (ValaCCodeExpression*) _tmp46_;
					_g_free0 (_tmp45_);
					_g_free0 (_tmp43_);
				}
				_tmp47_ = memset_call;
				_tmp48_ = size;
				vala_ccode_function_call_add_argument (_tmp47_, _tmp48_);
				_tmp49_ = vala_ccode_base_module_get_ccode (self);
				_tmp50_ = _tmp49_;
				_tmp51_ = memset_call;
				vala_ccode_function_add_expression (_tmp50_, (ValaCCodeExpression*) _tmp51_);
				_vala_ccode_node_unref0 (size);
				_vala_ccode_node_unref0 (memset_call);
			} else {
				ValaCCodeFunction* _tmp52_;
				ValaCCodeFunction* _tmp53_;
				const gchar* _tmp54_;
				const gchar* _tmp55_;
				ValaCCodeExpression* _tmp56_;
				ValaCCodeExpression* _tmp57_;
				ValaCCodeExpression* _tmp58_;
				_tmp52_ = vala_ccode_base_module_get_ccode (self);
				_tmp53_ = _tmp52_;
				_tmp54_ = vala_symbol_get_name ((ValaSymbol*) local);
				_tmp55_ = _tmp54_;
				_tmp56_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp55_);
				_tmp57_ = _tmp56_;
				_tmp58_ = initializer;
				vala_ccode_function_add_assignment (_tmp53_, _tmp57_, _tmp58_);
				_vala_ccode_node_unref0 (_tmp57_);
			}
			_vala_ccode_node_unref0 (initializer);
		}
	} else {
		ValaCCodeVariableDeclarator* cvar = NULL;
		const gchar* _tmp59_;
		const gchar* _tmp60_;
		ValaDataType* _tmp61_;
		ValaDataType* _tmp62_;
		ValaCCodeDeclaratorSuffix* _tmp63_;
		ValaCCodeDeclaratorSuffix* _tmp64_;
		ValaCCodeVariableDeclarator* _tmp65_;
		ValaCCodeVariableDeclarator* _tmp66_;
		ValaCCodeExpression* size = NULL;
		gboolean _tmp67_ = FALSE;
		ValaCCodeFunction* _tmp99_;
		ValaCCodeFunction* _tmp100_;
		ValaDataType* _tmp101_;
		ValaDataType* _tmp102_;
		gchar* _tmp103_;
		gchar* _tmp104_;
		ValaCCodeVariableDeclarator* _tmp105_;
		_tmp59_ = vala_symbol_get_name ((ValaSymbol*) local);
		_tmp60_ = _tmp59_;
		_tmp61_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp62_ = _tmp61_;
		_tmp63_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp62_);
		_tmp64_ = _tmp63_;
		_tmp65_ = vala_ccode_variable_declarator_new (_tmp60_, NULL, _tmp64_);
		_tmp66_ = _tmp65_;
		_vala_ccode_declarator_suffix_unref0 (_tmp64_);
		cvar = _tmp66_;
		size = NULL;
		if (init) {
			ValaCCodeExpression* _tmp68_ = NULL;
			gboolean _tmp69_;
			_tmp69_ = vala_ccode_base_module_requires_memset_init (self, (ValaVariable*) local, &_tmp68_);
			_vala_ccode_node_unref0 (size);
			size = _tmp68_;
			_tmp67_ = !_tmp69_;
		} else {
			_tmp67_ = FALSE;
		}
		if (_tmp67_) {
			ValaCCodeVariableDeclarator* _tmp70_;
			ValaDataType* _tmp71_;
			ValaDataType* _tmp72_;
			ValaCCodeExpression* _tmp73_;
			ValaCCodeExpression* _tmp74_;
			ValaCCodeVariableDeclarator* _tmp75_;
			_tmp70_ = cvar;
			_tmp71_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp72_ = _tmp71_;
			_tmp73_ = vala_ccode_base_module_default_value_for_type (self, _tmp72_, TRUE, on_error);
			_tmp74_ = _tmp73_;
			vala_ccode_variable_declarator_set_initializer (_tmp70_, _tmp74_);
			_vala_ccode_node_unref0 (_tmp74_);
			_tmp75_ = cvar;
			vala_ccode_variable_declarator_set_init0 (_tmp75_, TRUE);
		} else {
			gboolean _tmp76_ = FALSE;
			gboolean _tmp77_ = FALSE;
			if (init) {
				ValaCCodeExpression* _tmp78_;
				_tmp78_ = size;
				_tmp77_ = _tmp78_ != NULL;
			} else {
				_tmp77_ = FALSE;
			}
			if (_tmp77_) {
				ValaExpression* _tmp79_;
				ValaExpression* _tmp80_;
				_tmp79_ = vala_variable_get_initializer ((ValaVariable*) local);
				_tmp80_ = _tmp79_;
				_tmp76_ = _tmp80_ == NULL;
			} else {
				_tmp76_ = FALSE;
			}
			if (_tmp76_) {
				ValaCCodeFile* _tmp81_;
				ValaCCodeFunctionCall* memset_call = NULL;
				ValaCCodeIdentifier* _tmp82_;
				ValaCCodeIdentifier* _tmp83_;
				ValaCCodeFunctionCall* _tmp84_;
				ValaCCodeFunctionCall* _tmp85_;
				ValaCCodeFunctionCall* _tmp86_;
				const gchar* _tmp87_;
				const gchar* _tmp88_;
				ValaCCodeExpression* _tmp89_;
				ValaCCodeExpression* _tmp90_;
				ValaCCodeFunctionCall* _tmp91_;
				ValaCCodeConstant* _tmp92_;
				ValaCCodeConstant* _tmp93_;
				ValaCCodeFunctionCall* _tmp94_;
				ValaCCodeExpression* _tmp95_;
				ValaCCodeFunction* _tmp96_;
				ValaCCodeFunction* _tmp97_;
				ValaCCodeFunctionCall* _tmp98_;
				_tmp81_ = self->cfile;
				vala_ccode_file_add_include (_tmp81_, "string.h", FALSE);
				_tmp82_ = vala_ccode_identifier_new ("memset");
				_tmp83_ = _tmp82_;
				_tmp84_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp83_);
				_tmp85_ = _tmp84_;
				_vala_ccode_node_unref0 (_tmp83_);
				memset_call = _tmp85_;
				_tmp86_ = memset_call;
				_tmp87_ = vala_symbol_get_name ((ValaSymbol*) local);
				_tmp88_ = _tmp87_;
				_tmp89_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp88_);
				_tmp90_ = _tmp89_;
				vala_ccode_function_call_add_argument (_tmp86_, _tmp90_);
				_vala_ccode_node_unref0 (_tmp90_);
				_tmp91_ = memset_call;
				_tmp92_ = vala_ccode_constant_new ("0");
				_tmp93_ = _tmp92_;
				vala_ccode_function_call_add_argument (_tmp91_, (ValaCCodeExpression*) _tmp93_);
				_vala_ccode_node_unref0 (_tmp93_);
				_tmp94_ = memset_call;
				_tmp95_ = size;
				vala_ccode_function_call_add_argument (_tmp94_, _tmp95_);
				_tmp96_ = vala_ccode_base_module_get_ccode (self);
				_tmp97_ = _tmp96_;
				_tmp98_ = memset_call;
				vala_ccode_function_add_expression (_tmp97_, (ValaCCodeExpression*) _tmp98_);
				_vala_ccode_node_unref0 (memset_call);
			}
		}
		_tmp99_ = vala_ccode_base_module_get_ccode (self);
		_tmp100_ = _tmp99_;
		_tmp101_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp102_ = _tmp101_;
		_tmp103_ = vala_get_ccode_name ((ValaCodeNode*) _tmp102_);
		_tmp104_ = _tmp103_;
		_tmp105_ = cvar;
		vala_ccode_function_add_declaration (_tmp100_, _tmp104_, (ValaCCodeDeclarator*) _tmp105_, 0);
		_g_free0 (_tmp104_);
		_vala_ccode_node_unref0 (size);
		_vala_ccode_node_unref0 (cvar);
	}
}

static void
vala_ccode_base_module_real_visit_expression_statement (ValaCodeVisitor* base,
                                                        ValaExpressionStatement* stmt)
{
	ValaCCodeBaseModule * self;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	gboolean _tmp2_;
	gboolean _tmp3_;
	gboolean _tmp18_ = FALSE;
	gboolean _tmp19_;
	gboolean _tmp20_;
	ValaArrayList* _tmp27_;
	ValaArrayList* _tmp28_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_expression_statement_get_expression (stmt);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_code_node_get_error ((ValaCodeNode*) _tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_) {
		vala_code_node_set_error ((ValaCodeNode*) stmt, TRUE);
		return;
	}
	{
		ValaArrayList* _value_list = NULL;
		ValaArrayList* _tmp4_;
		ValaArrayList* _tmp5_;
		gint _value_size = 0;
		ValaArrayList* _tmp6_;
		gint _tmp7_;
		gint _tmp8_;
		gint _value_index = 0;
		_tmp4_ = vala_ccode_base_module_get_temp_ref_values (self);
		_tmp5_ = _tmp4_;
		_value_list = _tmp5_;
		_tmp6_ = _value_list;
		_tmp7_ = vala_collection_get_size ((ValaCollection*) _tmp6_);
		_tmp8_ = _tmp7_;
		_value_size = _tmp8_;
		_value_index = -1;
		while (TRUE) {
			gint _tmp9_;
			gint _tmp10_;
			ValaTargetValue* value = NULL;
			ValaArrayList* _tmp11_;
			gpointer _tmp12_;
			ValaCCodeFunction* _tmp13_;
			ValaCCodeFunction* _tmp14_;
			ValaTargetValue* _tmp15_;
			ValaCCodeExpression* _tmp16_;
			ValaCCodeExpression* _tmp17_;
			_value_index = _value_index + 1;
			_tmp9_ = _value_index;
			_tmp10_ = _value_size;
			if (!(_tmp9_ < _tmp10_)) {
				break;
			}
			_tmp11_ = _value_list;
			_tmp12_ = vala_list_get ((ValaList*) _tmp11_, _value_index);
			value = (ValaTargetValue*) _tmp12_;
			_tmp13_ = vala_ccode_base_module_get_ccode (self);
			_tmp14_ = _tmp13_;
			_tmp15_ = value;
			_tmp16_ = vala_ccode_base_module_destroy_value (self, _tmp15_, FALSE);
			_tmp17_ = _tmp16_;
			vala_ccode_function_add_expression (_tmp14_, _tmp17_);
			_vala_ccode_node_unref0 (_tmp17_);
			_vala_target_value_unref0 (value);
		}
	}
	_tmp19_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) stmt);
	_tmp20_ = _tmp19_;
	if (_tmp20_) {
		ValaExpression* _tmp21_;
		ValaExpression* _tmp22_;
		gboolean _tmp23_;
		gboolean _tmp24_;
		_tmp21_ = vala_expression_statement_get_expression (stmt);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp22_);
		_tmp24_ = _tmp23_;
		_tmp18_ = _tmp24_;
	} else {
		_tmp18_ = FALSE;
	}
	if (_tmp18_) {
		ValaExpression* _tmp25_;
		ValaExpression* _tmp26_;
		_tmp25_ = vala_expression_statement_get_expression (stmt);
		_tmp26_ = _tmp25_;
		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp26_, FALSE);
	}
	_tmp27_ = vala_ccode_base_module_get_temp_ref_values (self);
	_tmp28_ = _tmp27_;
	vala_collection_clear ((ValaCollection*) _tmp28_);
}

static void
vala_ccode_base_module_real_append_scope_free (ValaCCodeBaseModule* self,
                                               ValaSymbol* sym,
                                               ValaCodeNode* stop_at)
{
	ValaBlock* b = NULL;
	ValaBlock* _tmp0_;
	ValaList* local_vars = NULL;
	ValaBlock* _tmp1_;
	ValaList* _tmp2_;
	ValaList* _tmp3_;
	ValaBlock* _tmp31_;
	gboolean _tmp32_;
	gboolean _tmp33_;
	g_return_if_fail (sym != NULL);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_BLOCK, ValaBlock));
	b = _tmp0_;
	_tmp1_ = b;
	_tmp2_ = vala_block_get_local_variables (_tmp1_);
	_tmp3_ = _vala_iterable_ref0 (_tmp2_);
	local_vars = _tmp3_;
	{
		gint i = 0;
		ValaList* _tmp4_;
		gint _tmp5_;
		gint _tmp6_;
		_tmp4_ = local_vars;
		_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
		_tmp6_ = _tmp5_;
		i = _tmp6_ - 1;
		{
			gboolean _tmp7_ = FALSE;
			_tmp7_ = TRUE;
			while (TRUE) {
				ValaLocalVariable* local = NULL;
				ValaList* _tmp9_;
				gpointer _tmp10_;
				gboolean _tmp11_ = FALSE;
				gboolean _tmp12_ = FALSE;
				gboolean _tmp13_ = FALSE;
				ValaLocalVariable* _tmp14_;
				gboolean _tmp15_;
				gboolean _tmp16_;
				if (!_tmp7_) {
					gint _tmp8_;
					_tmp8_ = i;
					i = _tmp8_ - 1;
				}
				_tmp7_ = FALSE;
				if (!(i >= 0)) {
					break;
				}
				_tmp9_ = local_vars;
				_tmp10_ = vala_list_get (_tmp9_, i);
				local = (ValaLocalVariable*) _tmp10_;
				_tmp14_ = local;
				_tmp15_ = vala_code_node_get_unreachable ((ValaCodeNode*) _tmp14_);
				_tmp16_ = _tmp15_;
				if (!_tmp16_) {
					ValaLocalVariable* _tmp17_;
					gboolean _tmp18_;
					gboolean _tmp19_;
					_tmp17_ = local;
					_tmp18_ = vala_symbol_get_active ((ValaSymbol*) _tmp17_);
					_tmp19_ = _tmp18_;
					_tmp13_ = _tmp19_;
				} else {
					_tmp13_ = FALSE;
				}
				if (_tmp13_) {
					ValaLocalVariable* _tmp20_;
					gboolean _tmp21_;
					gboolean _tmp22_;
					_tmp20_ = local;
					_tmp21_ = vala_local_variable_get_captured (_tmp20_);
					_tmp22_ = _tmp21_;
					_tmp12_ = !_tmp22_;
				} else {
					_tmp12_ = FALSE;
				}
				if (_tmp12_) {
					ValaLocalVariable* _tmp23_;
					ValaDataType* _tmp24_;
					ValaDataType* _tmp25_;
					_tmp23_ = local;
					_tmp24_ = vala_variable_get_variable_type ((ValaVariable*) _tmp23_);
					_tmp25_ = _tmp24_;
					_tmp11_ = vala_ccode_base_module_requires_destroy (_tmp25_);
				} else {
					_tmp11_ = FALSE;
				}
				if (_tmp11_) {
					ValaCCodeFunction* _tmp26_;
					ValaCCodeFunction* _tmp27_;
					ValaLocalVariable* _tmp28_;
					ValaCCodeExpression* _tmp29_;
					ValaCCodeExpression* _tmp30_;
					_tmp26_ = vala_ccode_base_module_get_ccode (self);
					_tmp27_ = _tmp26_;
					_tmp28_ = local;
					_tmp29_ = vala_ccode_base_module_destroy_local (self, _tmp28_);
					_tmp30_ = _tmp29_;
					vala_ccode_function_add_expression (_tmp27_, _tmp30_);
					_vala_ccode_node_unref0 (_tmp30_);
				}
				_vala_code_node_unref0 (local);
			}
		}
	}
	_tmp31_ = b;
	_tmp32_ = vala_block_get_captured (_tmp31_);
	_tmp33_ = _tmp32_;
	if (_tmp33_) {
		gint block_id = 0;
		ValaBlock* _tmp34_;
		ValaCCodeFunctionCall* data_unref = NULL;
		gchar* _tmp35_;
		gchar* _tmp36_;
		ValaCCodeIdentifier* _tmp37_;
		ValaCCodeIdentifier* _tmp38_;
		ValaCCodeFunctionCall* _tmp39_;
		ValaCCodeFunctionCall* _tmp40_;
		ValaCCodeFunctionCall* _tmp41_;
		gchar* _tmp42_;
		gchar* _tmp43_;
		ValaCCodeExpression* _tmp44_;
		ValaCCodeExpression* _tmp45_;
		ValaCCodeFunction* _tmp46_;
		ValaCCodeFunction* _tmp47_;
		ValaCCodeFunctionCall* _tmp48_;
		ValaCCodeFunction* _tmp49_;
		ValaCCodeFunction* _tmp50_;
		gchar* _tmp51_;
		gchar* _tmp52_;
		ValaCCodeExpression* _tmp53_;
		ValaCCodeExpression* _tmp54_;
		ValaCCodeConstant* _tmp55_;
		ValaCCodeConstant* _tmp56_;
		_tmp34_ = b;
		block_id = vala_ccode_base_module_get_block_id (self, _tmp34_);
		_tmp35_ = g_strdup_printf ("block%d_data_unref", block_id);
		_tmp36_ = _tmp35_;
		_tmp37_ = vala_ccode_identifier_new (_tmp36_);
		_tmp38_ = _tmp37_;
		_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
		_tmp40_ = _tmp39_;
		_vala_ccode_node_unref0 (_tmp38_);
		_g_free0 (_tmp36_);
		data_unref = _tmp40_;
		_tmp41_ = data_unref;
		_tmp42_ = g_strdup_printf ("_data%d_", block_id);
		_tmp43_ = _tmp42_;
		_tmp44_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp43_);
		_tmp45_ = _tmp44_;
		vala_ccode_function_call_add_argument (_tmp41_, _tmp45_);
		_vala_ccode_node_unref0 (_tmp45_);
		_g_free0 (_tmp43_);
		_tmp46_ = vala_ccode_base_module_get_ccode (self);
		_tmp47_ = _tmp46_;
		_tmp48_ = data_unref;
		vala_ccode_function_add_expression (_tmp47_, (ValaCCodeExpression*) _tmp48_);
		_tmp49_ = vala_ccode_base_module_get_ccode (self);
		_tmp50_ = _tmp49_;
		_tmp51_ = g_strdup_printf ("_data%d_", block_id);
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp52_);
		_tmp54_ = _tmp53_;
		_tmp55_ = vala_ccode_constant_new ("NULL");
		_tmp56_ = _tmp55_;
		vala_ccode_function_add_assignment (_tmp50_, _tmp54_, (ValaCCodeExpression*) _tmp56_);
		_vala_ccode_node_unref0 (_tmp56_);
		_vala_ccode_node_unref0 (_tmp54_);
		_g_free0 (_tmp52_);
		_vala_ccode_node_unref0 (data_unref);
	}
	_vala_iterable_unref0 (local_vars);
	_vala_code_node_unref0 (b);
}

void
vala_ccode_base_module_append_scope_free (ValaCCodeBaseModule* self,
                                          ValaSymbol* sym,
                                          ValaCodeNode* stop_at)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->append_scope_free) {
		_klass_->append_scope_free (self, sym, stop_at);
	}
}

void
vala_ccode_base_module_append_local_free (ValaCCodeBaseModule* self,
                                          ValaSymbol* sym,
                                          ValaStatement* jump_stmt,
                                          ValaCodeNode* stop_at)
{
	ValaBlock* b = NULL;
	ValaBlock* _tmp0_;
	gboolean _tmp19_ = FALSE;
	ValaSymbol* _tmp23_;
	ValaSymbol* _tmp24_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (sym != NULL);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_BLOCK, ValaBlock));
	b = _tmp0_;
	vala_ccode_base_module_append_scope_free (self, sym, stop_at);
	if (G_TYPE_CHECK_INSTANCE_TYPE (jump_stmt, VALA_TYPE_BREAK_STATEMENT)) {
		gboolean _tmp1_ = FALSE;
		gboolean _tmp2_ = FALSE;
		ValaBlock* _tmp3_;
		ValaCodeNode* _tmp4_;
		ValaCodeNode* _tmp5_;
		_tmp3_ = b;
		_tmp4_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp3_);
		_tmp5_ = _tmp4_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_LOOP_STATEMENT)) {
			_tmp2_ = TRUE;
		} else {
			ValaBlock* _tmp6_;
			ValaCodeNode* _tmp7_;
			ValaCodeNode* _tmp8_;
			_tmp6_ = b;
			_tmp7_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp6_);
			_tmp8_ = _tmp7_;
			_tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_FOREACH_STATEMENT);
		}
		if (_tmp2_) {
			_tmp1_ = TRUE;
		} else {
			ValaBlock* _tmp9_;
			ValaCodeNode* _tmp10_;
			ValaCodeNode* _tmp11_;
			_tmp9_ = b;
			_tmp10_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp9_);
			_tmp11_ = _tmp10_;
			_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_SWITCH_STATEMENT);
		}
		if (_tmp1_) {
			_vala_code_node_unref0 (b);
			return;
		}
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (jump_stmt, VALA_TYPE_CONTINUE_STATEMENT)) {
			gboolean _tmp12_ = FALSE;
			ValaBlock* _tmp13_;
			ValaCodeNode* _tmp14_;
			ValaCodeNode* _tmp15_;
			_tmp13_ = b;
			_tmp14_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp13_);
			_tmp15_ = _tmp14_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_LOOP_STATEMENT)) {
				_tmp12_ = TRUE;
			} else {
				ValaBlock* _tmp16_;
				ValaCodeNode* _tmp17_;
				ValaCodeNode* _tmp18_;
				_tmp16_ = b;
				_tmp17_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp16_);
				_tmp18_ = _tmp17_;
				_tmp12_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_FOREACH_STATEMENT);
			}
			if (_tmp12_) {
				_vala_code_node_unref0 (b);
				return;
			}
		}
	}
	if (stop_at != NULL) {
		ValaBlock* _tmp20_;
		ValaCodeNode* _tmp21_;
		ValaCodeNode* _tmp22_;
		_tmp20_ = b;
		_tmp21_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp20_);
		_tmp22_ = _tmp21_;
		_tmp19_ = _tmp22_ == stop_at;
	} else {
		_tmp19_ = FALSE;
	}
	if (_tmp19_) {
		_vala_code_node_unref0 (b);
		return;
	}
	_tmp23_ = vala_symbol_get_parent_symbol (sym);
	_tmp24_ = _tmp23_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_BLOCK)) {
		ValaSymbol* _tmp25_;
		ValaSymbol* _tmp26_;
		_tmp25_ = vala_symbol_get_parent_symbol (sym);
		_tmp26_ = _tmp25_;
		vala_ccode_base_module_append_local_free (self, _tmp26_, jump_stmt, stop_at);
	} else {
		ValaSymbol* _tmp27_;
		ValaSymbol* _tmp28_;
		_tmp27_ = vala_symbol_get_parent_symbol (sym);
		_tmp28_ = _tmp27_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp28_, VALA_TYPE_METHOD)) {
			ValaSymbol* _tmp29_;
			ValaSymbol* _tmp30_;
			_tmp29_ = vala_symbol_get_parent_symbol (sym);
			_tmp30_ = _tmp29_;
			vala_ccode_base_module_append_param_free (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_METHOD, ValaMethod));
		} else {
			ValaSymbol* _tmp31_;
			ValaSymbol* _tmp32_;
			_tmp31_ = vala_symbol_get_parent_symbol (sym);
			_tmp32_ = _tmp31_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_PROPERTY_ACCESSOR)) {
				ValaPropertyAccessor* acc = NULL;
				ValaSymbol* _tmp33_;
				ValaSymbol* _tmp34_;
				ValaPropertyAccessor* _tmp35_;
				gboolean _tmp36_ = FALSE;
				ValaPropertyAccessor* _tmp37_;
				ValaParameter* _tmp38_;
				ValaParameter* _tmp39_;
				_tmp33_ = vala_symbol_get_parent_symbol (sym);
				_tmp34_ = _tmp33_;
				_tmp35_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
				acc = _tmp35_;
				_tmp37_ = acc;
				_tmp38_ = vala_property_accessor_get_value_parameter (_tmp37_);
				_tmp39_ = _tmp38_;
				if (_tmp39_ != NULL) {
					ValaPropertyAccessor* _tmp40_;
					ValaParameter* _tmp41_;
					ValaParameter* _tmp42_;
					ValaDataType* _tmp43_;
					ValaDataType* _tmp44_;
					_tmp40_ = acc;
					_tmp41_ = vala_property_accessor_get_value_parameter (_tmp40_);
					_tmp42_ = _tmp41_;
					_tmp43_ = vala_variable_get_variable_type ((ValaVariable*) _tmp42_);
					_tmp44_ = _tmp43_;
					_tmp36_ = vala_ccode_base_module_requires_destroy (_tmp44_);
				} else {
					_tmp36_ = FALSE;
				}
				if (_tmp36_) {
					ValaCCodeFunction* _tmp45_;
					ValaCCodeFunction* _tmp46_;
					ValaPropertyAccessor* _tmp47_;
					ValaParameter* _tmp48_;
					ValaParameter* _tmp49_;
					ValaCCodeExpression* _tmp50_;
					ValaCCodeExpression* _tmp51_;
					_tmp45_ = vala_ccode_base_module_get_ccode (self);
					_tmp46_ = _tmp45_;
					_tmp47_ = acc;
					_tmp48_ = vala_property_accessor_get_value_parameter (_tmp47_);
					_tmp49_ = _tmp48_;
					_tmp50_ = vala_ccode_base_module_destroy_parameter (self, _tmp49_);
					_tmp51_ = _tmp50_;
					vala_ccode_function_add_expression (_tmp46_, _tmp51_);
					_vala_ccode_node_unref0 (_tmp51_);
				}
				_vala_code_node_unref0 (acc);
			}
		}
	}
	_vala_code_node_unref0 (b);
}

static void
vala_ccode_base_module_append_param_free (ValaCCodeBaseModule* self,
                                          ValaMethod* m)
{
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	{
		ValaList* _param_list = NULL;
		ValaList* _tmp0_;
		gint _param_size = 0;
		ValaList* _tmp1_;
		gint _tmp2_;
		gint _tmp3_;
		gint _param_index = 0;
		_tmp0_ = vala_callable_get_parameters ((ValaCallable*) m);
		_param_list = _tmp0_;
		_tmp1_ = _param_list;
		_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
		_tmp3_ = _tmp2_;
		_param_size = _tmp3_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp4_;
			gint _tmp5_;
			ValaParameter* param = NULL;
			ValaList* _tmp6_;
			gpointer _tmp7_;
			gboolean _tmp8_ = FALSE;
			gboolean _tmp9_ = FALSE;
			gboolean _tmp10_ = FALSE;
			gboolean _tmp11_ = FALSE;
			ValaParameter* _tmp12_;
			gboolean _tmp13_;
			gboolean _tmp14_;
			_param_index = _param_index + 1;
			_tmp4_ = _param_index;
			_tmp5_ = _param_size;
			if (!(_tmp4_ < _tmp5_)) {
				break;
			}
			_tmp6_ = _param_list;
			_tmp7_ = vala_list_get (_tmp6_, _param_index);
			param = (ValaParameter*) _tmp7_;
			_tmp12_ = param;
			_tmp13_ = vala_parameter_get_captured (_tmp12_);
			_tmp14_ = _tmp13_;
			if (!_tmp14_) {
				ValaParameter* _tmp15_;
				gboolean _tmp16_;
				gboolean _tmp17_;
				_tmp15_ = param;
				_tmp16_ = vala_parameter_get_ellipsis (_tmp15_);
				_tmp17_ = _tmp16_;
				_tmp11_ = !_tmp17_;
			} else {
				_tmp11_ = FALSE;
			}
			if (_tmp11_) {
				ValaParameter* _tmp18_;
				gboolean _tmp19_;
				gboolean _tmp20_;
				_tmp18_ = param;
				_tmp19_ = vala_parameter_get_params_array (_tmp18_);
				_tmp20_ = _tmp19_;
				_tmp10_ = !_tmp20_;
			} else {
				_tmp10_ = FALSE;
			}
			if (_tmp10_) {
				ValaParameter* _tmp21_;
				ValaDataType* _tmp22_;
				ValaDataType* _tmp23_;
				_tmp21_ = param;
				_tmp22_ = vala_variable_get_variable_type ((ValaVariable*) _tmp21_);
				_tmp23_ = _tmp22_;
				_tmp9_ = vala_ccode_base_module_requires_destroy (_tmp23_);
			} else {
				_tmp9_ = FALSE;
			}
			if (_tmp9_) {
				ValaParameter* _tmp24_;
				ValaParameterDirection _tmp25_;
				ValaParameterDirection _tmp26_;
				_tmp24_ = param;
				_tmp25_ = vala_parameter_get_direction (_tmp24_);
				_tmp26_ = _tmp25_;
				_tmp8_ = _tmp26_ == VALA_PARAMETER_DIRECTION_IN;
			} else {
				_tmp8_ = FALSE;
			}
			if (_tmp8_) {
				ValaCCodeFunction* _tmp27_;
				ValaCCodeFunction* _tmp28_;
				ValaParameter* _tmp29_;
				ValaCCodeExpression* _tmp30_;
				ValaCCodeExpression* _tmp31_;
				_tmp27_ = vala_ccode_base_module_get_ccode (self);
				_tmp28_ = _tmp27_;
				_tmp29_ = param;
				_tmp30_ = vala_ccode_base_module_destroy_parameter (self, _tmp29_);
				_tmp31_ = _tmp30_;
				vala_ccode_function_add_expression (_tmp28_, _tmp31_);
				_vala_ccode_node_unref0 (_tmp31_);
			}
			_vala_code_node_unref0 (param);
		}
	}
}

void
vala_ccode_base_module_append_out_param_free (ValaCCodeBaseModule* self,
                                              ValaMethod* m)
{
	g_return_if_fail (self != NULL);
	if (m == NULL) {
		return;
	}
	{
		ValaList* _param_list = NULL;
		ValaList* _tmp0_;
		gint _param_size = 0;
		ValaList* _tmp1_;
		gint _tmp2_;
		gint _tmp3_;
		gint _param_index = 0;
		_tmp0_ = vala_callable_get_parameters ((ValaCallable*) m);
		_param_list = _tmp0_;
		_tmp1_ = _param_list;
		_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
		_tmp3_ = _tmp2_;
		_param_size = _tmp3_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp4_;
			gint _tmp5_;
			ValaParameter* param = NULL;
			ValaList* _tmp6_;
			gpointer _tmp7_;
			gboolean _tmp8_ = FALSE;
			ValaParameter* _tmp9_;
			ValaParameterDirection _tmp10_;
			ValaParameterDirection _tmp11_;
			_param_index = _param_index + 1;
			_tmp4_ = _param_index;
			_tmp5_ = _param_size;
			if (!(_tmp4_ < _tmp5_)) {
				break;
			}
			_tmp6_ = _param_list;
			_tmp7_ = vala_list_get (_tmp6_, _param_index);
			param = (ValaParameter*) _tmp7_;
			_tmp9_ = param;
			_tmp10_ = vala_parameter_get_direction (_tmp9_);
			_tmp11_ = _tmp10_;
			if (_tmp11_ == VALA_PARAMETER_DIRECTION_OUT) {
				ValaParameter* _tmp12_;
				ValaDataType* _tmp13_;
				ValaDataType* _tmp14_;
				_tmp12_ = param;
				_tmp13_ = vala_variable_get_variable_type ((ValaVariable*) _tmp12_);
				_tmp14_ = _tmp13_;
				_tmp8_ = vala_data_type_is_disposable (_tmp14_);
			} else {
				_tmp8_ = FALSE;
			}
			if (_tmp8_) {
				ValaCCodeFunction* _tmp15_;
				ValaCCodeFunction* _tmp16_;
				ValaParameter* _tmp17_;
				ValaCCodeExpression* _tmp18_;
				ValaCCodeExpression* _tmp19_;
				_tmp15_ = vala_ccode_base_module_get_ccode (self);
				_tmp16_ = _tmp15_;
				_tmp17_ = param;
				_tmp18_ = vala_ccode_base_module_destroy_parameter (self, _tmp17_);
				_tmp19_ = _tmp18_;
				vala_ccode_function_add_expression (_tmp16_, _tmp19_);
				_vala_ccode_node_unref0 (_tmp19_);
			}
			_vala_code_node_unref0 (param);
		}
	}
}

gboolean
vala_ccode_base_module_variable_accessible_in_finally (ValaCCodeBaseModule* self,
                                                       ValaLocalVariable* local)
{
	ValaTryStatement* _tmp0_;
	ValaTryStatement* _tmp1_;
	ValaSymbol* sym = NULL;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaSymbol* _tmp4_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (local != NULL, FALSE);
	_tmp0_ = vala_ccode_base_module_get_current_try (self);
	_tmp1_ = _tmp0_;
	if (_tmp1_ == NULL) {
		result = FALSE;
		return result;
	}
	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_code_node_ref0 (_tmp3_);
	sym = _tmp4_;
	while (TRUE) {
		gboolean _tmp5_ = FALSE;
		gboolean _tmp6_ = FALSE;
		ValaSymbol* _tmp7_;
		gboolean _tmp16_ = FALSE;
		gboolean _tmp17_ = FALSE;
		ValaSymbol* _tmp18_;
		ValaCodeNode* _tmp19_;
		ValaCodeNode* _tmp20_;
		ValaSymbol* _tmp37_;
		ValaSymbol* _tmp38_;
		ValaSymbol* _tmp39_;
		ValaSymbol* _tmp40_;
		_tmp7_ = sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_METHOD)) {
			_tmp6_ = TRUE;
		} else {
			ValaSymbol* _tmp8_;
			_tmp8_ = sym;
			_tmp6_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_PROPERTY_ACCESSOR);
		}
		if (!_tmp6_) {
			ValaSymbol* _tmp9_;
			ValaScope* _tmp10_;
			ValaScope* _tmp11_;
			const gchar* _tmp12_;
			const gchar* _tmp13_;
			ValaSymbol* _tmp14_;
			ValaSymbol* _tmp15_;
			_tmp9_ = sym;
			_tmp10_ = vala_symbol_get_scope (_tmp9_);
			_tmp11_ = _tmp10_;
			_tmp12_ = vala_symbol_get_name ((ValaSymbol*) local);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_scope_lookup (_tmp11_, _tmp13_);
			_tmp15_ = _tmp14_;
			_tmp5_ = _tmp15_ == NULL;
			_vala_code_node_unref0 (_tmp15_);
		} else {
			_tmp5_ = FALSE;
		}
		if (!_tmp5_) {
			break;
		}
		_tmp18_ = sym;
		_tmp19_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp18_);
		_tmp20_ = _tmp19_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_TRY_STATEMENT)) {
			ValaSymbol* _tmp21_;
			ValaCodeNode* _tmp22_;
			ValaCodeNode* _tmp23_;
			ValaBlock* _tmp24_;
			ValaBlock* _tmp25_;
			_tmp21_ = sym;
			_tmp22_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp21_);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
			_tmp25_ = _tmp24_;
			_tmp17_ = _tmp25_ != NULL;
		} else {
			_tmp17_ = FALSE;
		}
		if (_tmp17_) {
			_tmp16_ = TRUE;
		} else {
			gboolean _tmp26_ = FALSE;
			ValaSymbol* _tmp27_;
			ValaCodeNode* _tmp28_;
			ValaCodeNode* _tmp29_;
			_tmp27_ = sym;
			_tmp28_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp27_);
			_tmp29_ = _tmp28_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_CATCH_CLAUSE)) {
				ValaSymbol* _tmp30_;
				ValaCodeNode* _tmp31_;
				ValaCodeNode* _tmp32_;
				ValaCodeNode* _tmp33_;
				ValaCodeNode* _tmp34_;
				ValaBlock* _tmp35_;
				ValaBlock* _tmp36_;
				_tmp30_ = sym;
				_tmp31_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp30_);
				_tmp32_ = _tmp31_;
				_tmp33_ = vala_code_node_get_parent_node (_tmp32_);
				_tmp34_ = _tmp33_;
				_tmp35_ = vala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
				_tmp36_ = _tmp35_;
				_tmp26_ = _tmp36_ != NULL;
			} else {
				_tmp26_ = FALSE;
			}
			_tmp16_ = _tmp26_;
		}
		if (_tmp16_) {
			result = TRUE;
			_vala_code_node_unref0 (sym);
			return result;
		}
		_tmp37_ = sym;
		_tmp38_ = vala_symbol_get_parent_symbol (_tmp37_);
		_tmp39_ = _tmp38_;
		_tmp40_ = _vala_code_node_ref0 (_tmp39_);
		_vala_code_node_unref0 (sym);
		sym = _tmp40_;
	}
	result = FALSE;
	_vala_code_node_unref0 (sym);
	return result;
}

void
vala_ccode_base_module_return_out_parameter (ValaCCodeBaseModule* self,
                                             ValaParameter* param)
{
	ValaDelegateType* delegate_type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDelegateType* _tmp2_;
	ValaTargetValue* value = NULL;
	ValaTargetValue* _tmp3_;
	gboolean old_coroutine = FALSE;
	ValaMethod* _tmp4_;
	ValaMethod* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeExpression* _tmp8_;
	ValaCCodeExpression* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeExpression* _tmp12_;
	ValaCCodeExpression* _tmp13_;
	ValaCCodeUnaryExpression* _tmp14_;
	ValaCCodeUnaryExpression* _tmp15_;
	ValaTargetValue* _tmp16_;
	ValaCCodeExpression* _tmp17_;
	gboolean _tmp18_ = FALSE;
	gboolean _tmp19_ = FALSE;
	ValaDataType* _tmp50_;
	ValaDataType* _tmp51_;
	ValaCCodeFunction* _tmp62_;
	ValaCCodeFunction* _tmp63_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp64_;
	ValaDataType* _tmp65_;
	ValaArrayType* _tmp66_;
	gboolean _tmp67_ = FALSE;
	gboolean _tmp68_ = FALSE;
	ValaArrayType* _tmp69_;
	ValaMethod* _tmp96_;
	ValaMethod* _tmp97_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (param != NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp1_) : NULL);
	delegate_type = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
	value = _tmp3_;
	old_coroutine = vala_ccode_base_module_is_in_coroutine (self);
	_tmp4_ = vala_ccode_base_module_get_current_method (self);
	_tmp5_ = _tmp4_;
	vala_method_set_coroutine (_tmp5_, FALSE);
	_tmp6_ = vala_ccode_base_module_get_ccode (self);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_ccode_base_module_get_parameter_cexpression (self, param);
	_tmp9_ = _tmp8_;
	vala_ccode_function_open_if (_tmp7_, _tmp9_);
	_vala_ccode_node_unref0 (_tmp9_);
	_tmp10_ = vala_ccode_base_module_get_ccode (self);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_base_module_get_parameter_cexpression (self, param);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = value;
	_tmp17_ = vala_get_cvalue_ (_tmp16_);
	vala_ccode_function_add_assignment (_tmp11_, (ValaCCodeExpression*) _tmp15_, _tmp17_);
	_vala_ccode_node_unref0 (_tmp15_);
	_vala_ccode_node_unref0 (_tmp13_);
	if (vala_get_ccode_delegate_target ((ValaCodeNode*) param)) {
		ValaDelegateType* _tmp20_;
		_tmp20_ = delegate_type;
		_tmp19_ = _tmp20_ != NULL;
	} else {
		_tmp19_ = FALSE;
	}
	if (_tmp19_) {
		ValaDelegateType* _tmp21_;
		ValaDelegate* _tmp22_;
		ValaDelegate* _tmp23_;
		gboolean _tmp24_;
		gboolean _tmp25_;
		_tmp21_ = delegate_type;
		_tmp22_ = vala_delegate_type_get_delegate_symbol (_tmp21_);
		_tmp23_ = _tmp22_;
		_tmp24_ = vala_delegate_get_has_target (_tmp23_);
		_tmp25_ = _tmp24_;
		_tmp18_ = _tmp25_;
	} else {
		_tmp18_ = FALSE;
	}
	if (_tmp18_) {
		ValaCCodeFunction* _tmp26_;
		ValaCCodeFunction* _tmp27_;
		gchar* _tmp28_;
		gchar* _tmp29_;
		ValaCCodeExpression* _tmp30_;
		ValaCCodeExpression* _tmp31_;
		ValaCCodeUnaryExpression* _tmp32_;
		ValaCCodeUnaryExpression* _tmp33_;
		ValaTargetValue* _tmp34_;
		ValaCCodeExpression* _tmp35_;
		ValaCCodeExpression* _tmp36_;
		ValaDelegateType* _tmp37_;
		_tmp26_ = vala_ccode_base_module_get_ccode (self);
		_tmp27_ = _tmp26_;
		_tmp28_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_ccode_base_module_get_cexpression (self, _tmp29_);
		_tmp31_ = _tmp30_;
		_tmp32_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp31_);
		_tmp33_ = _tmp32_;
		_tmp34_ = value;
		_tmp35_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp34_);
		_tmp36_ = _tmp35_;
		vala_ccode_function_add_assignment (_tmp27_, (ValaCCodeExpression*) _tmp33_, _tmp36_);
		_vala_ccode_node_unref0 (_tmp36_);
		_vala_ccode_node_unref0 (_tmp33_);
		_vala_ccode_node_unref0 (_tmp31_);
		_g_free0 (_tmp29_);
		_tmp37_ = delegate_type;
		if (vala_data_type_is_disposable ((ValaDataType*) _tmp37_)) {
			ValaCCodeFunction* _tmp38_;
			ValaCCodeFunction* _tmp39_;
			gchar* _tmp40_;
			gchar* _tmp41_;
			ValaCCodeExpression* _tmp42_;
			ValaCCodeExpression* _tmp43_;
			ValaCCodeUnaryExpression* _tmp44_;
			ValaCCodeUnaryExpression* _tmp45_;
			ValaTargetValue* _tmp46_;
			ValaTargetValue* _tmp47_;
			ValaCCodeExpression* _tmp48_;
			ValaCCodeExpression* _tmp49_;
			_tmp38_ = vala_ccode_base_module_get_ccode (self);
			_tmp39_ = _tmp38_;
			_tmp40_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
			_tmp41_ = _tmp40_;
			_tmp42_ = vala_ccode_base_module_get_cexpression (self, _tmp41_);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
			_tmp47_ = _tmp46_;
			_tmp48_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp47_);
			_tmp49_ = _tmp48_;
			vala_ccode_function_add_assignment (_tmp39_, (ValaCCodeExpression*) _tmp45_, _tmp49_);
			_vala_ccode_node_unref0 (_tmp49_);
			_vala_target_value_unref0 (_tmp47_);
			_vala_ccode_node_unref0 (_tmp45_);
			_vala_ccode_node_unref0 (_tmp43_);
			_g_free0 (_tmp41_);
		}
	}
	_tmp50_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp51_ = _tmp50_;
	if (vala_data_type_is_disposable (_tmp51_)) {
		ValaCCodeFunction* _tmp52_;
		ValaCCodeFunction* _tmp53_;
		ValaMethod* _tmp54_;
		ValaMethod* _tmp55_;
		ValaCCodeFunction* _tmp56_;
		ValaCCodeFunction* _tmp57_;
		ValaCCodeExpression* _tmp58_;
		ValaCCodeExpression* _tmp59_;
		ValaMethod* _tmp60_;
		ValaMethod* _tmp61_;
		_tmp52_ = vala_ccode_base_module_get_ccode (self);
		_tmp53_ = _tmp52_;
		vala_ccode_function_add_else (_tmp53_);
		_tmp54_ = vala_ccode_base_module_get_current_method (self);
		_tmp55_ = _tmp54_;
		vala_method_set_coroutine (_tmp55_, old_coroutine);
		_tmp56_ = vala_ccode_base_module_get_ccode (self);
		_tmp57_ = _tmp56_;
		_tmp58_ = vala_ccode_base_module_destroy_parameter (self, param);
		_tmp59_ = _tmp58_;
		vala_ccode_function_add_expression (_tmp57_, _tmp59_);
		_vala_ccode_node_unref0 (_tmp59_);
		_tmp60_ = vala_ccode_base_module_get_current_method (self);
		_tmp61_ = _tmp60_;
		vala_method_set_coroutine (_tmp61_, FALSE);
	}
	_tmp62_ = vala_ccode_base_module_get_ccode (self);
	_tmp63_ = _tmp62_;
	vala_ccode_function_close (_tmp63_);
	_tmp64_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp65_ = _tmp64_;
	_tmp66_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp65_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp65_) : NULL);
	array_type = _tmp66_;
	_tmp69_ = array_type;
	if (_tmp69_ != NULL) {
		ValaArrayType* _tmp70_;
		gboolean _tmp71_;
		gboolean _tmp72_;
		_tmp70_ = array_type;
		_tmp71_ = vala_array_type_get_fixed_length (_tmp70_);
		_tmp72_ = _tmp71_;
		_tmp68_ = !_tmp72_;
	} else {
		_tmp68_ = FALSE;
	}
	if (_tmp68_) {
		_tmp67_ = vala_get_ccode_array_length ((ValaCodeNode*) param);
	} else {
		_tmp67_ = FALSE;
	}
	if (_tmp67_) {
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp73_ = FALSE;
				_tmp73_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp75_;
					gint _tmp76_;
					gint _tmp77_;
					gchar* length_cname = NULL;
					gchar* _tmp78_;
					ValaCCodeFunction* _tmp79_;
					ValaCCodeFunction* _tmp80_;
					const gchar* _tmp81_;
					ValaCCodeExpression* _tmp82_;
					ValaCCodeExpression* _tmp83_;
					ValaCCodeFunction* _tmp84_;
					ValaCCodeFunction* _tmp85_;
					const gchar* _tmp86_;
					ValaCCodeExpression* _tmp87_;
					ValaCCodeExpression* _tmp88_;
					ValaCCodeUnaryExpression* _tmp89_;
					ValaCCodeUnaryExpression* _tmp90_;
					ValaTargetValue* _tmp91_;
					ValaCCodeExpression* _tmp92_;
					ValaCCodeExpression* _tmp93_;
					ValaCCodeFunction* _tmp94_;
					ValaCCodeFunction* _tmp95_;
					if (!_tmp73_) {
						gint _tmp74_;
						_tmp74_ = dim;
						dim = _tmp74_ + 1;
					}
					_tmp73_ = FALSE;
					_tmp75_ = array_type;
					_tmp76_ = vala_array_type_get_rank (_tmp75_);
					_tmp77_ = _tmp76_;
					if (!(dim <= _tmp77_)) {
						break;
					}
					_tmp78_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) param, dim);
					length_cname = _tmp78_;
					_tmp79_ = vala_ccode_base_module_get_ccode (self);
					_tmp80_ = _tmp79_;
					_tmp81_ = length_cname;
					_tmp82_ = vala_ccode_base_module_get_cexpression (self, _tmp81_);
					_tmp83_ = _tmp82_;
					vala_ccode_function_open_if (_tmp80_, _tmp83_);
					_vala_ccode_node_unref0 (_tmp83_);
					_tmp84_ = vala_ccode_base_module_get_ccode (self);
					_tmp85_ = _tmp84_;
					_tmp86_ = length_cname;
					_tmp87_ = vala_ccode_base_module_get_cexpression (self, _tmp86_);
					_tmp88_ = _tmp87_;
					_tmp89_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp88_);
					_tmp90_ = _tmp89_;
					_tmp91_ = value;
					_tmp92_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp91_, dim);
					_tmp93_ = _tmp92_;
					vala_ccode_function_add_assignment (_tmp85_, (ValaCCodeExpression*) _tmp90_, _tmp93_);
					_vala_ccode_node_unref0 (_tmp93_);
					_vala_ccode_node_unref0 (_tmp90_);
					_vala_ccode_node_unref0 (_tmp88_);
					_tmp94_ = vala_ccode_base_module_get_ccode (self);
					_tmp95_ = _tmp94_;
					vala_ccode_function_close (_tmp95_);
					_g_free0 (length_cname);
				}
			}
		}
	}
	_tmp96_ = vala_ccode_base_module_get_current_method (self);
	_tmp97_ = _tmp96_;
	vala_method_set_coroutine (_tmp97_, old_coroutine);
	_vala_code_node_unref0 (array_type);
	_vala_target_value_unref0 (value);
	_vala_code_node_unref0 (delegate_type);
}

static void
vala_ccode_base_module_real_visit_return_statement (ValaCodeVisitor* base,
                                                    ValaReturnStatement* stmt)
{
	ValaCCodeBaseModule * self;
	ValaSymbol* return_expression_symbol = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	gboolean _tmp14_ = FALSE;
	gboolean _tmp15_ = FALSE;
	gboolean _tmp16_ = FALSE;
	ValaMethod* _tmp17_;
	ValaMethod* _tmp18_;
	ValaExpression* _tmp120_;
	ValaExpression* _tmp121_;
	ValaMethod* _tmp134_;
	ValaMethod* _tmp135_;
	ValaSymbol* _tmp147_;
	ValaSymbol* _tmp148_;
	gboolean _tmp149_ = FALSE;
	ValaMethod* _tmp150_;
	ValaMethod* _tmp151_;
	gboolean _tmp170_ = FALSE;
	ValaMethod* _tmp171_;
	ValaMethod* _tmp172_;
	ValaSymbol* _tmp233_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (stmt != NULL);
	return_expression_symbol = NULL;
	_tmp0_ = vala_return_statement_get_return_expression (stmt);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		ValaLocalVariable* local = NULL;
		ValaExpression* _tmp2_;
		ValaExpression* _tmp3_;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaLocalVariable* _tmp6_;
		gboolean _tmp7_ = FALSE;
		ValaLocalVariable* _tmp8_;
		_tmp2_ = vala_return_statement_get_return_expression (stmt);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_expression_get_symbol_reference (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp5_) : NULL);
		local = _tmp6_;
		_tmp8_ = local;
		if (_tmp8_ != NULL) {
			ValaLocalVariable* _tmp9_;
			gboolean _tmp10_;
			gboolean _tmp11_;
			_tmp9_ = local;
			_tmp10_ = vala_symbol_get_active ((ValaSymbol*) _tmp9_);
			_tmp11_ = _tmp10_;
			_tmp7_ = !_tmp11_;
		} else {
			_tmp7_ = FALSE;
		}
		if (_tmp7_) {
			ValaLocalVariable* _tmp12_;
			ValaSymbol* _tmp13_;
			_tmp12_ = local;
			_tmp13_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp12_);
			_vala_code_node_unref0 (return_expression_symbol);
			return_expression_symbol = _tmp13_;
		}
		_vala_code_node_unref0 (local);
	}
	_tmp17_ = vala_ccode_base_module_get_current_method (self);
	_tmp18_ = _tmp17_;
	if (_tmp18_ != NULL) {
		ValaMethod* _tmp19_;
		ValaMethod* _tmp20_;
		_tmp19_ = vala_ccode_base_module_get_current_method (self);
		_tmp20_ = _tmp19_;
		_tmp16_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp20_);
	} else {
		_tmp16_ = FALSE;
	}
	if (_tmp16_) {
		_tmp15_ = TRUE;
	} else {
		gboolean _tmp21_ = FALSE;
		ValaPropertyAccessor* _tmp22_;
		ValaPropertyAccessor* _tmp23_;
		_tmp22_ = vala_ccode_base_module_get_current_property_accessor (self);
		_tmp23_ = _tmp22_;
		if (_tmp23_ != NULL) {
			ValaPropertyAccessor* _tmp24_;
			ValaPropertyAccessor* _tmp25_;
			_tmp24_ = vala_ccode_base_module_get_current_property_accessor (self);
			_tmp25_ = _tmp24_;
			_tmp21_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp25_);
		} else {
			_tmp21_ = FALSE;
		}
		_tmp15_ = _tmp21_;
	}
	if (_tmp15_) {
		ValaDataType* _tmp26_;
		ValaDataType* _tmp27_;
		_tmp26_ = vala_ccode_base_module_get_current_return_type (self);
		_tmp27_ = _tmp26_;
		_tmp14_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp27_, VALA_TYPE_ARRAY_TYPE);
	} else {
		_tmp14_ = FALSE;
	}
	if (_tmp14_) {
		ValaTargetValue* temp_value = NULL;
		ValaExpression* _tmp28_;
		ValaExpression* _tmp29_;
		ValaTargetValue* _tmp30_;
		ValaTargetValue* _tmp31_;
		ValaTargetValue* _tmp32_;
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp33_;
		ValaDataType* _tmp34_;
		ValaArrayType* _tmp35_;
		ValaExpression* _tmp62_;
		ValaExpression* _tmp63_;
		ValaTargetValue* _tmp64_;
		_tmp28_ = vala_return_statement_get_return_expression (stmt);
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_expression_get_target_value (_tmp29_);
		_tmp31_ = _tmp30_;
		_tmp32_ = vala_ccode_base_module_store_temp_value (self, _tmp31_, (ValaCodeNode*) stmt, NULL);
		temp_value = _tmp32_;
		_tmp33_ = vala_ccode_base_module_get_current_return_type (self);
		_tmp34_ = _tmp33_;
		_tmp35_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
		array_type = _tmp35_;
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp36_ = FALSE;
				_tmp36_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp38_;
					gint _tmp39_;
					gint _tmp40_;
					ValaCCodeExpression* len_l = NULL;
					gchar* _tmp41_;
					gchar* _tmp42_;
					ValaCCodeExpression* _tmp43_;
					ValaCCodeExpression* _tmp44_;
					ValaCCodeExpression* len_r = NULL;
					ValaTargetValue* _tmp45_;
					ValaCCodeExpression* _tmp46_;
					if (!_tmp36_) {
						gint _tmp37_;
						_tmp37_ = dim;
						dim = _tmp37_ + 1;
					}
					_tmp36_ = FALSE;
					_tmp38_ = array_type;
					_tmp39_ = vala_array_type_get_rank (_tmp38_);
					_tmp40_ = _tmp39_;
					if (!(dim <= _tmp40_)) {
						break;
					}
					_tmp41_ = vala_ccode_base_module_get_array_length_cname (self, "result", dim);
					_tmp42_ = _tmp41_;
					_tmp43_ = vala_ccode_base_module_get_cexpression (self, _tmp42_);
					_tmp44_ = _tmp43_;
					_g_free0 (_tmp42_);
					len_l = _tmp44_;
					_tmp45_ = temp_value;
					_tmp46_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp45_, dim);
					len_r = _tmp46_;
					if (!vala_ccode_base_module_is_in_coroutine (self)) {
						ValaCCodeFunction* _tmp47_;
						ValaCCodeFunction* _tmp48_;
						ValaCCodeExpression* _tmp49_;
						ValaCCodeExpression* _tmp50_;
						ValaCCodeUnaryExpression* _tmp51_;
						ValaCCodeFunction* _tmp52_;
						ValaCCodeFunction* _tmp53_;
						ValaCCodeExpression* _tmp54_;
						ValaCCodeExpression* _tmp55_;
						ValaCCodeFunction* _tmp56_;
						ValaCCodeFunction* _tmp57_;
						_tmp47_ = vala_ccode_base_module_get_ccode (self);
						_tmp48_ = _tmp47_;
						_tmp49_ = len_l;
						vala_ccode_function_open_if (_tmp48_, _tmp49_);
						_tmp50_ = len_l;
						_tmp51_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp50_);
						_vala_ccode_node_unref0 (len_l);
						len_l = (ValaCCodeExpression*) _tmp51_;
						_tmp52_ = vala_ccode_base_module_get_ccode (self);
						_tmp53_ = _tmp52_;
						_tmp54_ = len_l;
						_tmp55_ = len_r;
						vala_ccode_function_add_assignment (_tmp53_, _tmp54_, _tmp55_);
						_tmp56_ = vala_ccode_base_module_get_ccode (self);
						_tmp57_ = _tmp56_;
						vala_ccode_function_close (_tmp57_);
					} else {
						ValaCCodeFunction* _tmp58_;
						ValaCCodeFunction* _tmp59_;
						ValaCCodeExpression* _tmp60_;
						ValaCCodeExpression* _tmp61_;
						_tmp58_ = vala_ccode_base_module_get_ccode (self);
						_tmp59_ = _tmp58_;
						_tmp60_ = len_l;
						_tmp61_ = len_r;
						vala_ccode_function_add_assignment (_tmp59_, _tmp60_, _tmp61_);
					}
					_vala_ccode_node_unref0 (len_r);
					_vala_ccode_node_unref0 (len_l);
				}
			}
		}
		_tmp62_ = vala_return_statement_get_return_expression (stmt);
		_tmp63_ = _tmp62_;
		_tmp64_ = temp_value;
		vala_expression_set_target_value (_tmp63_, _tmp64_);
		_vala_code_node_unref0 (array_type);
		_vala_target_value_unref0 (temp_value);
	} else {
		gboolean _tmp65_ = FALSE;
		gboolean _tmp66_ = FALSE;
		gboolean _tmp67_ = FALSE;
		ValaMethod* _tmp68_;
		ValaMethod* _tmp69_;
		_tmp68_ = vala_ccode_base_module_get_current_method (self);
		_tmp69_ = _tmp68_;
		if (_tmp69_ != NULL) {
			ValaMethod* _tmp70_;
			ValaMethod* _tmp71_;
			_tmp70_ = vala_ccode_base_module_get_current_method (self);
			_tmp71_ = _tmp70_;
			_tmp67_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp71_);
		} else {
			_tmp67_ = FALSE;
		}
		if (_tmp67_) {
			_tmp66_ = TRUE;
		} else {
			gboolean _tmp72_ = FALSE;
			ValaPropertyAccessor* _tmp73_;
			ValaPropertyAccessor* _tmp74_;
			_tmp73_ = vala_ccode_base_module_get_current_property_accessor (self);
			_tmp74_ = _tmp73_;
			if (_tmp74_ != NULL) {
				ValaPropertyAccessor* _tmp75_;
				ValaPropertyAccessor* _tmp76_;
				_tmp75_ = vala_ccode_base_module_get_current_property_accessor (self);
				_tmp76_ = _tmp75_;
				_tmp72_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp76_);
			} else {
				_tmp72_ = FALSE;
			}
			_tmp66_ = _tmp72_;
		}
		if (_tmp66_) {
			ValaDataType* _tmp77_;
			ValaDataType* _tmp78_;
			_tmp77_ = vala_ccode_base_module_get_current_return_type (self);
			_tmp78_ = _tmp77_;
			_tmp65_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp78_, VALA_TYPE_DELEGATE_TYPE);
		} else {
			_tmp65_ = FALSE;
		}
		if (_tmp65_) {
			ValaDelegateType* delegate_type = NULL;
			ValaDataType* _tmp79_;
			ValaDataType* _tmp80_;
			ValaDelegateType* _tmp81_;
			ValaDelegateType* _tmp82_;
			ValaDelegate* _tmp83_;
			ValaDelegate* _tmp84_;
			gboolean _tmp85_;
			gboolean _tmp86_;
			_tmp79_ = vala_ccode_base_module_get_current_return_type (self);
			_tmp80_ = _tmp79_;
			_tmp81_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp80_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
			delegate_type = _tmp81_;
			_tmp82_ = delegate_type;
			_tmp83_ = vala_delegate_type_get_delegate_symbol (_tmp82_);
			_tmp84_ = _tmp83_;
			_tmp85_ = vala_delegate_get_has_target (_tmp84_);
			_tmp86_ = _tmp85_;
			if (_tmp86_) {
				ValaTargetValue* temp_value = NULL;
				ValaExpression* _tmp87_;
				ValaExpression* _tmp88_;
				ValaTargetValue* _tmp89_;
				ValaTargetValue* _tmp90_;
				ValaTargetValue* _tmp91_;
				ValaCCodeExpression* target_l = NULL;
				gchar* _tmp92_;
				gchar* _tmp93_;
				ValaCCodeExpression* _tmp94_;
				ValaCCodeExpression* _tmp95_;
				ValaCCodeExpression* target_r = NULL;
				ValaTargetValue* _tmp98_;
				ValaCCodeExpression* _tmp99_;
				ValaCCodeFunction* _tmp100_;
				ValaCCodeFunction* _tmp101_;
				ValaCCodeExpression* _tmp102_;
				ValaCCodeExpression* _tmp103_;
				ValaDelegateType* _tmp104_;
				ValaExpression* _tmp117_;
				ValaExpression* _tmp118_;
				ValaTargetValue* _tmp119_;
				_tmp87_ = vala_return_statement_get_return_expression (stmt);
				_tmp88_ = _tmp87_;
				_tmp89_ = vala_expression_get_target_value (_tmp88_);
				_tmp90_ = _tmp89_;
				_tmp91_ = vala_ccode_base_module_store_temp_value (self, _tmp90_, (ValaCodeNode*) stmt, NULL);
				temp_value = _tmp91_;
				_tmp92_ = vala_ccode_base_module_get_delegate_target_cname (self, "result");
				_tmp93_ = _tmp92_;
				_tmp94_ = vala_ccode_base_module_get_cexpression (self, _tmp93_);
				_tmp95_ = _tmp94_;
				_g_free0 (_tmp93_);
				target_l = _tmp95_;
				if (!vala_ccode_base_module_is_in_coroutine (self)) {
					ValaCCodeExpression* _tmp96_;
					ValaCCodeUnaryExpression* _tmp97_;
					_tmp96_ = target_l;
					_tmp97_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp96_);
					_vala_ccode_node_unref0 (target_l);
					target_l = (ValaCCodeExpression*) _tmp97_;
				}
				_tmp98_ = temp_value;
				_tmp99_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp98_);
				target_r = _tmp99_;
				_tmp100_ = vala_ccode_base_module_get_ccode (self);
				_tmp101_ = _tmp100_;
				_tmp102_ = target_l;
				_tmp103_ = target_r;
				vala_ccode_function_add_assignment (_tmp101_, _tmp102_, _tmp103_);
				_tmp104_ = delegate_type;
				if (vala_data_type_is_disposable ((ValaDataType*) _tmp104_)) {
					ValaCCodeExpression* target_l_destroy_notify = NULL;
					gchar* _tmp105_;
					gchar* _tmp106_;
					ValaCCodeExpression* _tmp107_;
					ValaCCodeExpression* _tmp108_;
					ValaCCodeExpression* target_r_destroy_notify = NULL;
					ValaTargetValue* _tmp111_;
					ValaCCodeExpression* _tmp112_;
					ValaCCodeFunction* _tmp113_;
					ValaCCodeFunction* _tmp114_;
					ValaCCodeExpression* _tmp115_;
					ValaCCodeExpression* _tmp116_;
					_tmp105_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "result");
					_tmp106_ = _tmp105_;
					_tmp107_ = vala_ccode_base_module_get_cexpression (self, _tmp106_);
					_tmp108_ = _tmp107_;
					_g_free0 (_tmp106_);
					target_l_destroy_notify = _tmp108_;
					if (!vala_ccode_base_module_is_in_coroutine (self)) {
						ValaCCodeExpression* _tmp109_;
						ValaCCodeUnaryExpression* _tmp110_;
						_tmp109_ = target_l_destroy_notify;
						_tmp110_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp109_);
						_vala_ccode_node_unref0 (target_l_destroy_notify);
						target_l_destroy_notify = (ValaCCodeExpression*) _tmp110_;
					}
					_tmp111_ = temp_value;
					_tmp112_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp111_);
					target_r_destroy_notify = _tmp112_;
					_tmp113_ = vala_ccode_base_module_get_ccode (self);
					_tmp114_ = _tmp113_;
					_tmp115_ = target_l_destroy_notify;
					_tmp116_ = target_r_destroy_notify;
					vala_ccode_function_add_assignment (_tmp114_, _tmp115_, _tmp116_);
					_vala_ccode_node_unref0 (target_r_destroy_notify);
					_vala_ccode_node_unref0 (target_l_destroy_notify);
				}
				_tmp117_ = vala_return_statement_get_return_expression (stmt);
				_tmp118_ = _tmp117_;
				_tmp119_ = temp_value;
				vala_expression_set_target_value (_tmp118_, _tmp119_);
				_vala_ccode_node_unref0 (target_r);
				_vala_ccode_node_unref0 (target_l);
				_vala_target_value_unref0 (temp_value);
			}
			_vala_code_node_unref0 (delegate_type);
		}
	}
	_tmp120_ = vala_return_statement_get_return_expression (stmt);
	_tmp121_ = _tmp120_;
	if (_tmp121_ != NULL) {
		ValaCCodeExpression* result_lhs = NULL;
		ValaCCodeExpression* _tmp122_;
		gboolean _tmp123_ = FALSE;
		ValaDataType* _tmp124_;
		ValaDataType* _tmp125_;
		ValaCCodeFunction* _tmp128_;
		ValaCCodeFunction* _tmp129_;
		ValaCCodeExpression* _tmp130_;
		ValaExpression* _tmp131_;
		ValaExpression* _tmp132_;
		ValaCCodeExpression* _tmp133_;
		_tmp122_ = vala_ccode_base_module_get_cexpression (self, "result");
		result_lhs = _tmp122_;
		_tmp124_ = vala_ccode_base_module_get_current_return_type (self);
		_tmp125_ = _tmp124_;
		if (vala_data_type_is_real_non_null_struct_type (_tmp125_)) {
			_tmp123_ = !vala_ccode_base_module_is_in_coroutine (self);
		} else {
			_tmp123_ = FALSE;
		}
		if (_tmp123_) {
			ValaCCodeExpression* _tmp126_;
			ValaCCodeUnaryExpression* _tmp127_;
			_tmp126_ = result_lhs;
			_tmp127_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp126_);
			_vala_ccode_node_unref0 (result_lhs);
			result_lhs = (ValaCCodeExpression*) _tmp127_;
		}
		_tmp128_ = vala_ccode_base_module_get_ccode (self);
		_tmp129_ = _tmp128_;
		_tmp130_ = result_lhs;
		_tmp131_ = vala_return_statement_get_return_expression (stmt);
		_tmp132_ = _tmp131_;
		_tmp133_ = vala_get_cvalue (_tmp132_);
		vala_ccode_function_add_assignment (_tmp129_, _tmp130_, _tmp133_);
		_vala_ccode_node_unref0 (result_lhs);
	}
	_tmp134_ = vala_ccode_base_module_get_current_method (self);
	_tmp135_ = _tmp134_;
	if (_tmp135_ != NULL) {
		{
			ValaList* _postcondition_list = NULL;
			ValaMethod* _tmp136_;
			ValaMethod* _tmp137_;
			ValaList* _tmp138_;
			gint _postcondition_size = 0;
			ValaList* _tmp139_;
			gint _tmp140_;
			gint _tmp141_;
			gint _postcondition_index = 0;
			_tmp136_ = vala_ccode_base_module_get_current_method (self);
			_tmp137_ = _tmp136_;
			_tmp138_ = vala_method_get_postconditions (_tmp137_);
			_postcondition_list = _tmp138_;
			_tmp139_ = _postcondition_list;
			_tmp140_ = vala_collection_get_size ((ValaCollection*) _tmp139_);
			_tmp141_ = _tmp140_;
			_postcondition_size = _tmp141_;
			_postcondition_index = -1;
			while (TRUE) {
				gint _tmp142_;
				gint _tmp143_;
				ValaExpression* postcondition = NULL;
				ValaList* _tmp144_;
				gpointer _tmp145_;
				ValaExpression* _tmp146_;
				_postcondition_index = _postcondition_index + 1;
				_tmp142_ = _postcondition_index;
				_tmp143_ = _postcondition_size;
				if (!(_tmp142_ < _tmp143_)) {
					break;
				}
				_tmp144_ = _postcondition_list;
				_tmp145_ = vala_list_get (_tmp144_, _postcondition_index);
				postcondition = (ValaExpression*) _tmp145_;
				_tmp146_ = postcondition;
				vala_ccode_base_module_create_postcondition_statement (self, _tmp146_);
				_vala_code_node_unref0 (postcondition);
			}
		}
	}
	_tmp147_ = vala_ccode_base_module_get_current_symbol (self);
	_tmp148_ = _tmp147_;
	vala_ccode_base_module_append_local_free (self, _tmp148_, NULL, NULL);
	_tmp150_ = vala_ccode_base_module_get_current_method (self);
	_tmp151_ = _tmp150_;
	if (_tmp151_ != NULL) {
		ValaMethod* _tmp152_;
		ValaMethod* _tmp153_;
		gboolean _tmp154_;
		gboolean _tmp155_;
		_tmp152_ = vala_ccode_base_module_get_current_method (self);
		_tmp153_ = _tmp152_;
		_tmp154_ = vala_method_get_coroutine (_tmp153_);
		_tmp155_ = _tmp154_;
		_tmp149_ = !_tmp155_;
	} else {
		_tmp149_ = FALSE;
	}
	if (_tmp149_) {
		{
			ValaList* _param_list = NULL;
			ValaMethod* _tmp156_;
			ValaMethod* _tmp157_;
			ValaList* _tmp158_;
			gint _param_size = 0;
			ValaList* _tmp159_;
			gint _tmp160_;
			gint _tmp161_;
			gint _param_index = 0;
			_tmp156_ = vala_ccode_base_module_get_current_method (self);
			_tmp157_ = _tmp156_;
			_tmp158_ = vala_callable_get_parameters ((ValaCallable*) _tmp157_);
			_param_list = _tmp158_;
			_tmp159_ = _param_list;
			_tmp160_ = vala_collection_get_size ((ValaCollection*) _tmp159_);
			_tmp161_ = _tmp160_;
			_param_size = _tmp161_;
			_param_index = -1;
			while (TRUE) {
				gint _tmp162_;
				gint _tmp163_;
				ValaParameter* param = NULL;
				ValaList* _tmp164_;
				gpointer _tmp165_;
				ValaParameter* _tmp166_;
				ValaParameterDirection _tmp167_;
				ValaParameterDirection _tmp168_;
				ValaParameter* _tmp169_;
				_param_index = _param_index + 1;
				_tmp162_ = _param_index;
				_tmp163_ = _param_size;
				if (!(_tmp162_ < _tmp163_)) {
					break;
				}
				_tmp164_ = _param_list;
				_tmp165_ = vala_list_get (_tmp164_, _param_index);
				param = (ValaParameter*) _tmp165_;
				_tmp166_ = param;
				_tmp167_ = vala_parameter_get_direction (_tmp166_);
				_tmp168_ = _tmp167_;
				if (_tmp168_ != VALA_PARAMETER_DIRECTION_OUT) {
					_vala_code_node_unref0 (param);
					continue;
				}
				_tmp169_ = param;
				vala_ccode_base_module_return_out_parameter (self, _tmp169_);
				_vala_code_node_unref0 (param);
			}
		}
	}
	_tmp171_ = vala_ccode_base_module_get_current_method (self);
	_tmp172_ = _tmp171_;
	if (_tmp172_ != NULL) {
		ValaMethod* _tmp173_;
		ValaMethod* _tmp174_;
		ValaAttribute* _tmp175_;
		_tmp173_ = vala_ccode_base_module_get_current_method (self);
		_tmp174_ = _tmp173_;
		_tmp175_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp174_, "Profile");
		_tmp170_ = _tmp175_ != NULL;
	} else {
		_tmp170_ = FALSE;
	}
	if (_tmp170_) {
		gchar* prefix = NULL;
		ValaMethod* _tmp176_;
		ValaMethod* _tmp177_;
		gchar* _tmp178_;
		gchar* _tmp179_;
		gchar* _tmp180_;
		gchar* _tmp181_;
		ValaCCodeIdentifier* level = NULL;
		const gchar* _tmp182_;
		gchar* _tmp183_;
		gchar* _tmp184_;
		ValaCCodeIdentifier* _tmp185_;
		ValaCCodeIdentifier* _tmp186_;
		ValaCCodeFunction* _tmp187_;
		ValaCCodeFunction* _tmp188_;
		ValaCCodeIdentifier* _tmp189_;
		ValaCCodeUnaryExpression* _tmp190_;
		ValaCCodeUnaryExpression* _tmp191_;
		ValaCCodeUnaryExpression* _tmp192_;
		ValaCCodeUnaryExpression* _tmp193_;
		ValaCCodeIdentifier* timer = NULL;
		const gchar* _tmp194_;
		gchar* _tmp195_;
		gchar* _tmp196_;
		ValaCCodeIdentifier* _tmp197_;
		ValaCCodeIdentifier* _tmp198_;
		ValaCCodeFunctionCall* stop_call = NULL;
		ValaCCodeIdentifier* _tmp199_;
		ValaCCodeIdentifier* _tmp200_;
		ValaCCodeFunctionCall* _tmp201_;
		ValaCCodeFunctionCall* _tmp202_;
		ValaCCodeFunctionCall* _tmp203_;
		ValaCCodeIdentifier* _tmp204_;
		ValaCCodeFunction* _tmp205_;
		ValaCCodeFunction* _tmp206_;
		ValaCCodeFunctionCall* _tmp207_;
		ValaCCodeFunction* _tmp208_;
		ValaCCodeFunction* _tmp209_;
		_tmp176_ = vala_ccode_base_module_get_current_method (self);
		_tmp177_ = _tmp176_;
		_tmp178_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp177_);
		_tmp179_ = _tmp178_;
		_tmp180_ = g_strdup_printf ("_vala_prof_%s", _tmp179_);
		_tmp181_ = _tmp180_;
		_g_free0 (_tmp179_);
		prefix = _tmp181_;
		_tmp182_ = prefix;
		_tmp183_ = g_strconcat (_tmp182_, "_level", NULL);
		_tmp184_ = _tmp183_;
		_tmp185_ = vala_ccode_identifier_new (_tmp184_);
		_tmp186_ = _tmp185_;
		_g_free0 (_tmp184_);
		level = _tmp186_;
		_tmp187_ = vala_ccode_base_module_get_ccode (self);
		_tmp188_ = _tmp187_;
		_tmp189_ = level;
		_tmp190_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT, (ValaCCodeExpression*) _tmp189_);
		_tmp191_ = _tmp190_;
		_tmp192_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp191_);
		_tmp193_ = _tmp192_;
		vala_ccode_function_open_if (_tmp188_, (ValaCCodeExpression*) _tmp193_);
		_vala_ccode_node_unref0 (_tmp193_);
		_vala_ccode_node_unref0 (_tmp191_);
		_tmp194_ = prefix;
		_tmp195_ = g_strconcat (_tmp194_, "_timer", NULL);
		_tmp196_ = _tmp195_;
		_tmp197_ = vala_ccode_identifier_new (_tmp196_);
		_tmp198_ = _tmp197_;
		_g_free0 (_tmp196_);
		timer = _tmp198_;
		_tmp199_ = vala_ccode_identifier_new ("g_timer_stop");
		_tmp200_ = _tmp199_;
		_tmp201_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp200_);
		_tmp202_ = _tmp201_;
		_vala_ccode_node_unref0 (_tmp200_);
		stop_call = _tmp202_;
		_tmp203_ = stop_call;
		_tmp204_ = timer;
		vala_ccode_function_call_add_argument (_tmp203_, (ValaCCodeExpression*) _tmp204_);
		_tmp205_ = vala_ccode_base_module_get_ccode (self);
		_tmp206_ = _tmp205_;
		_tmp207_ = stop_call;
		vala_ccode_function_add_expression (_tmp206_, (ValaCCodeExpression*) _tmp207_);
		_tmp208_ = vala_ccode_base_module_get_ccode (self);
		_tmp209_ = _tmp208_;
		vala_ccode_function_close (_tmp209_);
		_vala_ccode_node_unref0 (stop_call);
		_vala_ccode_node_unref0 (timer);
		_vala_ccode_node_unref0 (level);
		_g_free0 (prefix);
	}
	if (vala_ccode_base_module_is_in_constructor (self)) {
		ValaCCodeFunction* _tmp210_;
		ValaCCodeFunction* _tmp211_;
		ValaCCodeIdentifier* _tmp212_;
		ValaCCodeIdentifier* _tmp213_;
		_tmp210_ = vala_ccode_base_module_get_ccode (self);
		_tmp211_ = _tmp210_;
		_tmp212_ = vala_ccode_identifier_new ("obj");
		_tmp213_ = _tmp212_;
		vala_ccode_function_add_return (_tmp211_, (ValaCCodeExpression*) _tmp213_);
		_vala_ccode_node_unref0 (_tmp213_);
	} else {
		if (vala_ccode_base_module_is_in_destructor (self)) {
			ValaCCodeFunction* _tmp214_;
			ValaCCodeFunction* _tmp215_;
			_tmp214_ = vala_ccode_base_module_get_ccode (self);
			_tmp215_ = _tmp214_;
			vala_ccode_function_add_goto (_tmp215_, "_return");
		} else {
			if (vala_ccode_base_module_is_in_coroutine (self)) {
			} else {
				ValaMethod* _tmp216_;
				ValaMethod* _tmp217_;
				_tmp216_ = vala_ccode_base_module_get_current_method (self);
				_tmp217_ = _tmp216_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp217_, VALA_TYPE_CREATION_METHOD)) {
					ValaCCodeFunction* _tmp218_;
					ValaCCodeFunction* _tmp219_;
					ValaCCodeIdentifier* _tmp220_;
					ValaCCodeIdentifier* _tmp221_;
					_tmp218_ = vala_ccode_base_module_get_ccode (self);
					_tmp219_ = _tmp218_;
					_tmp220_ = vala_ccode_identifier_new ("self");
					_tmp221_ = _tmp220_;
					vala_ccode_function_add_return (_tmp219_, (ValaCCodeExpression*) _tmp221_);
					_vala_ccode_node_unref0 (_tmp221_);
				} else {
					gboolean _tmp222_ = FALSE;
					ValaDataType* _tmp223_;
					ValaDataType* _tmp224_;
					_tmp223_ = vala_ccode_base_module_get_current_return_type (self);
					_tmp224_ = _tmp223_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp224_, VALA_TYPE_VOID_TYPE)) {
						_tmp222_ = TRUE;
					} else {
						ValaDataType* _tmp225_;
						ValaDataType* _tmp226_;
						_tmp225_ = vala_ccode_base_module_get_current_return_type (self);
						_tmp226_ = _tmp225_;
						_tmp222_ = vala_data_type_is_real_non_null_struct_type (_tmp226_);
					}
					if (_tmp222_) {
						ValaCCodeFunction* _tmp227_;
						ValaCCodeFunction* _tmp228_;
						_tmp227_ = vala_ccode_base_module_get_ccode (self);
						_tmp228_ = _tmp227_;
						vala_ccode_function_add_return (_tmp228_, NULL);
					} else {
						ValaCCodeFunction* _tmp229_;
						ValaCCodeFunction* _tmp230_;
						ValaCCodeIdentifier* _tmp231_;
						ValaCCodeIdentifier* _tmp232_;
						_tmp229_ = vala_ccode_base_module_get_ccode (self);
						_tmp230_ = _tmp229_;
						_tmp231_ = vala_ccode_identifier_new ("result");
						_tmp232_ = _tmp231_;
						vala_ccode_function_add_return (_tmp230_, (ValaCCodeExpression*) _tmp232_);
						_vala_ccode_node_unref0 (_tmp232_);
					}
				}
			}
		}
	}
	_tmp233_ = return_expression_symbol;
	if (_tmp233_ != NULL) {
		ValaSymbol* _tmp234_;
		_tmp234_ = return_expression_symbol;
		vala_symbol_set_active (_tmp234_, TRUE);
	}
	vala_ccode_base_module_set_current_method_return (self, TRUE);
	_vala_code_node_unref0 (return_expression_symbol);
}

static gchar*
string_replace (const gchar* self,
                const gchar* old,
                const gchar* replacement)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	GError* _inner_error0_ = NULL;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (old != NULL, NULL);
	g_return_val_if_fail (replacement != NULL, NULL);
	if ((*((gchar*) self)) == '\0') {
		_tmp1_ = TRUE;
	} else {
		_tmp1_ = (*((gchar*) old)) == '\0';
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		_tmp0_ = g_strcmp0 (old, replacement) == 0;
	}
	if (_tmp0_) {
		gchar* _tmp2_;
		_tmp2_ = g_strdup (self);
		result = _tmp2_;
		return result;
	}
	{
		GRegex* regex = NULL;
		gchar* _tmp3_;
		gchar* _tmp4_;
		GRegex* _tmp5_;
		GRegex* _tmp6_;
		gchar* _tmp7_ = NULL;
		GRegex* _tmp8_;
		gchar* _tmp9_;
		gchar* _tmp10_;
		_tmp3_ = g_regex_escape_string (old, -1);
		_tmp4_ = _tmp3_;
		_tmp5_ = g_regex_new (_tmp4_, 0, 0, &_inner_error0_);
		_tmp6_ = _tmp5_;
		_g_free0 (_tmp4_);
		regex = _tmp6_;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			if (_inner_error0_->domain == G_REGEX_ERROR) {
				goto __catch0_g_regex_error;
			}
			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);
			g_clear_error (&_inner_error0_);
			return NULL;
		}
		_tmp8_ = regex;
		_tmp9_ = g_regex_replace_literal (_tmp8_, self, (gssize) -1, 0, replacement, 0, &_inner_error0_);
		_tmp7_ = _tmp9_;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			_g_regex_unref0 (regex);
			if (_inner_error0_->domain == G_REGEX_ERROR) {
				goto __catch0_g_regex_error;
			}
			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);
			g_clear_error (&_inner_error0_);
			return NULL;
		}
		_tmp10_ = _tmp7_;
		_tmp7_ = NULL;
		result = _tmp10_;
		_g_free0 (_tmp7_);
		_g_regex_unref0 (regex);
		return result;
	}
	goto __finally0;
	__catch0_g_regex_error:
	{
		g_clear_error (&_inner_error0_);
		g_assert_not_reached ();
	}
	__finally0:
	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);
	g_clear_error (&_inner_error0_);
	return NULL;
}

gchar*
vala_ccode_base_module_get_symbol_lock_name (ValaCCodeBaseModule* self,
                                             const gchar* symname)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (symname != NULL, NULL);
	_tmp0_ = string_replace (symname, "-", "_");
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("__lock_%s", _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	result = _tmp3_;
	return result;
}

static ValaCCodeExpression*
vala_ccode_base_module_get_lock_expression (ValaCCodeBaseModule* self,
                                            ValaStatement* stmt,
                                            ValaExpression* resource)
{
	ValaCCodeExpression* l = NULL;
	ValaSymbol* member = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaTypeSymbol* parent = NULL;
	ValaSymbol* _tmp3_;
	ValaSymbol* _tmp4_;
	ValaSymbol* _tmp5_;
	ValaSymbol* _tmp6_;
	ValaTypeSymbol* _tmp7_;
	ValaSymbol* _tmp8_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (stmt != NULL, NULL);
	g_return_val_if_fail (resource != NULL, NULL);
	l = NULL;
	_tmp0_ = vala_expression_get_symbol_reference (resource);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	member = _tmp2_;
	_tmp3_ = vala_expression_get_symbol_reference (resource);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
	parent = _tmp7_;
	_tmp8_ = member;
	if (vala_symbol_is_instance_member (_tmp8_)) {
		ValaExpression* _tmp9_;
		ValaExpression* _tmp10_;
		ValaCCodeExpression* _tmp11_;
		ValaCCodeExpression* _tmp12_;
		ValaCCodeExpression* _tmp13_;
		ValaCCodeMemberAccess* _tmp14_;
		ValaCCodeMemberAccess* _tmp15_;
		ValaSymbol* _tmp16_;
		gchar* _tmp17_;
		gchar* _tmp18_;
		gchar* _tmp19_;
		gchar* _tmp20_;
		ValaCCodeMemberAccess* _tmp21_;
		_tmp9_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (resource, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_get_cvalue (_tmp10_);
		_tmp12_ = _vala_ccode_node_ref0 (_tmp11_);
		_vala_ccode_node_unref0 (l);
		l = _tmp12_;
		_tmp13_ = l;
		_tmp14_ = vala_ccode_member_access_new_pointer (_tmp13_, "priv");
		_tmp15_ = _tmp14_;
		_tmp16_ = member;
		_tmp17_ = vala_get_ccode_name ((ValaCodeNode*) _tmp16_);
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp18_);
		_tmp20_ = _tmp19_;
		_tmp21_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp15_, _tmp20_);
		_vala_ccode_node_unref0 (l);
		l = (ValaCCodeExpression*) _tmp21_;
		_g_free0 (_tmp20_);
		_g_free0 (_tmp18_);
		_vala_ccode_node_unref0 (_tmp15_);
	} else {
		ValaSymbol* _tmp22_;
		_tmp22_ = member;
		if (vala_symbol_is_class_member (_tmp22_)) {
			ValaClass* cl = NULL;
			ValaTypeSymbol* _tmp23_;
			ValaCCodeExpression* cast = NULL;
			ValaClass* _tmp24_;
			ValaCCodeExpression* _tmp25_;
			ValaCCodeFunctionCall* get_class_private_call = NULL;
			ValaClass* _tmp26_;
			gchar* _tmp27_;
			gchar* _tmp28_;
			ValaCCodeIdentifier* _tmp29_;
			ValaCCodeIdentifier* _tmp30_;
			ValaCCodeFunctionCall* _tmp31_;
			ValaCCodeFunctionCall* _tmp32_;
			ValaCCodeFunctionCall* _tmp33_;
			ValaCCodeExpression* _tmp34_;
			ValaCCodeFunctionCall* _tmp35_;
			ValaSymbol* _tmp36_;
			gchar* _tmp37_;
			gchar* _tmp38_;
			gchar* _tmp39_;
			gchar* _tmp40_;
			ValaCCodeMemberAccess* _tmp41_;
			_tmp23_ = parent;
			cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_CLASS, ValaClass);
			_tmp24_ = cl;
			_tmp25_ = vala_ccode_base_module_get_this_class_cexpression (self, _tmp24_, NULL);
			cast = _tmp25_;
			_tmp26_ = cl;
			_tmp27_ = vala_get_ccode_class_get_private_function (_tmp26_);
			_tmp28_ = _tmp27_;
			_tmp29_ = vala_ccode_identifier_new (_tmp28_);
			_tmp30_ = _tmp29_;
			_tmp31_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp30_);
			_tmp32_ = _tmp31_;
			_vala_ccode_node_unref0 (_tmp30_);
			_g_free0 (_tmp28_);
			get_class_private_call = _tmp32_;
			_tmp33_ = get_class_private_call;
			_tmp34_ = cast;
			vala_ccode_function_call_add_argument (_tmp33_, _tmp34_);
			_tmp35_ = get_class_private_call;
			_tmp36_ = member;
			_tmp37_ = vala_get_ccode_name ((ValaCodeNode*) _tmp36_);
			_tmp38_ = _tmp37_;
			_tmp39_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp38_);
			_tmp40_ = _tmp39_;
			_tmp41_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp35_, _tmp40_);
			_vala_ccode_node_unref0 (l);
			l = (ValaCCodeExpression*) _tmp41_;
			_g_free0 (_tmp40_);
			_g_free0 (_tmp38_);
			_vala_ccode_node_unref0 (get_class_private_call);
			_vala_ccode_node_unref0 (cast);
		} else {
			gchar* lock_name = NULL;
			ValaTypeSymbol* _tmp42_;
			gchar* _tmp43_;
			gchar* _tmp44_;
			ValaSymbol* _tmp45_;
			gchar* _tmp46_;
			gchar* _tmp47_;
			gchar* _tmp48_;
			gchar* _tmp49_;
			const gchar* _tmp50_;
			gchar* _tmp51_;
			gchar* _tmp52_;
			ValaCCodeIdentifier* _tmp53_;
			_tmp42_ = parent;
			_tmp43_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp42_, NULL);
			_tmp44_ = _tmp43_;
			_tmp45_ = member;
			_tmp46_ = vala_get_ccode_name ((ValaCodeNode*) _tmp45_);
			_tmp47_ = _tmp46_;
			_tmp48_ = g_strdup_printf ("%s_%s", _tmp44_, _tmp47_);
			_tmp49_ = _tmp48_;
			_g_free0 (_tmp47_);
			_g_free0 (_tmp44_);
			lock_name = _tmp49_;
			_tmp50_ = lock_name;
			_tmp51_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp50_);
			_tmp52_ = _tmp51_;
			_tmp53_ = vala_ccode_identifier_new (_tmp52_);
			_vala_ccode_node_unref0 (l);
			l = (ValaCCodeExpression*) _tmp53_;
			_g_free0 (_tmp52_);
			_g_free0 (lock_name);
		}
	}
	result = l;
	_vala_code_node_unref0 (parent);
	_vala_code_node_unref0 (member);
	return result;
}

static void
vala_ccode_base_module_real_visit_lock_statement (ValaCodeVisitor* base,
                                                  ValaLockStatement* stmt)
{
	ValaCCodeBaseModule * self;
	ValaCCodeExpression* l = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeFunctionCall* fc = NULL;
	ValaStruct* _tmp3_;
	ValaScope* _tmp4_;
	ValaScope* _tmp5_;
	ValaSymbol* _tmp6_;
	ValaSymbol* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaCCodeFunctionCall* _tmp13_;
	ValaCCodeUnaryExpression* _tmp14_;
	ValaCCodeUnaryExpression* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_lock_statement_get_resource (stmt);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_lock_expression (self, (ValaStatement*) stmt, _tmp1_);
	l = _tmp2_;
	_tmp3_ = self->mutex_type;
	_tmp4_ = vala_symbol_get_scope ((ValaSymbol*) _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_scope_lookup (_tmp5_, "lock");
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) _tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_identifier_new (_tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp11_);
	_tmp13_ = _tmp12_;
	_vala_ccode_node_unref0 (_tmp11_);
	_g_free0 (_tmp9_);
	_vala_code_node_unref0 (_tmp7_);
	fc = _tmp13_;
	_tmp14_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, l);
	_tmp15_ = _tmp14_;
	vala_ccode_function_call_add_argument (fc, (ValaCCodeExpression*) _tmp15_);
	_vala_ccode_node_unref0 (_tmp15_);
	_tmp16_ = vala_ccode_base_module_get_ccode (self);
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_expression (_tmp17_, (ValaCCodeExpression*) fc);
	_vala_ccode_node_unref0 (fc);
	_vala_ccode_node_unref0 (l);
}

static void
vala_ccode_base_module_real_visit_unlock_statement (ValaCodeVisitor* base,
                                                    ValaUnlockStatement* stmt)
{
	ValaCCodeBaseModule * self;
	ValaCCodeExpression* l = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeFunctionCall* fc = NULL;
	ValaStruct* _tmp3_;
	ValaScope* _tmp4_;
	ValaScope* _tmp5_;
	ValaSymbol* _tmp6_;
	ValaSymbol* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaCCodeFunctionCall* _tmp13_;
	ValaCCodeUnaryExpression* _tmp14_;
	ValaCCodeUnaryExpression* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_unlock_statement_get_resource (stmt);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_lock_expression (self, (ValaStatement*) stmt, _tmp1_);
	l = _tmp2_;
	_tmp3_ = self->mutex_type;
	_tmp4_ = vala_symbol_get_scope ((ValaSymbol*) _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_scope_lookup (_tmp5_, "unlock");
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) _tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_identifier_new (_tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp11_);
	_tmp13_ = _tmp12_;
	_vala_ccode_node_unref0 (_tmp11_);
	_g_free0 (_tmp9_);
	_vala_code_node_unref0 (_tmp7_);
	fc = _tmp13_;
	_tmp14_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, l);
	_tmp15_ = _tmp14_;
	vala_ccode_function_call_add_argument (fc, (ValaCCodeExpression*) _tmp15_);
	_vala_ccode_node_unref0 (_tmp15_);
	_tmp16_ = vala_ccode_base_module_get_ccode (self);
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_expression (_tmp17_, (ValaCCodeExpression*) fc);
	_vala_ccode_node_unref0 (fc);
	_vala_ccode_node_unref0 (l);
}

static void
vala_ccode_base_module_real_visit_delete_statement (ValaCodeVisitor* base,
                                                    ValaDeleteStatement* stmt)
{
	ValaCCodeBaseModule * self;
	ValaDataType* type = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaPointerType* pointer_type = NULL;
	ValaDataType* _tmp4_;
	gboolean _tmp5_ = FALSE;
	gboolean _tmp6_ = FALSE;
	ValaPointerType* _tmp7_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaDataType* _tmp23_;
	ValaExpression* _tmp24_;
	ValaExpression* _tmp25_;
	ValaCCodeExpression* _tmp26_;
	ValaGLibValue* _tmp27_;
	ValaGLibValue* _tmp28_;
	ValaCCodeExpression* _tmp29_;
	ValaCCodeExpression* _tmp30_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_delete_statement_get_expression (stmt);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_expression_get_value_type (_tmp1_);
	_tmp3_ = _tmp2_;
	type = _tmp3_;
	_tmp4_ = type;
	pointer_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_POINTER_TYPE) ? ((ValaPointerType*) _tmp4_) : NULL;
	_tmp7_ = pointer_type;
	if (_tmp7_ != NULL) {
		ValaPointerType* _tmp8_;
		ValaDataType* _tmp9_;
		ValaDataType* _tmp10_;
		ValaTypeSymbol* _tmp11_;
		ValaTypeSymbol* _tmp12_;
		_tmp8_ = pointer_type;
		_tmp9_ = vala_pointer_type_get_base_type (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_data_type_get_type_symbol (_tmp10_);
		_tmp12_ = _tmp11_;
		_tmp6_ = _tmp12_ != NULL;
	} else {
		_tmp6_ = FALSE;
	}
	if (_tmp6_) {
		ValaPointerType* _tmp13_;
		ValaDataType* _tmp14_;
		ValaDataType* _tmp15_;
		ValaTypeSymbol* _tmp16_;
		ValaTypeSymbol* _tmp17_;
		_tmp13_ = pointer_type;
		_tmp14_ = vala_pointer_type_get_base_type (_tmp13_);
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_data_type_get_type_symbol (_tmp15_);
		_tmp17_ = _tmp16_;
		_tmp5_ = vala_typesymbol_is_reference_type (_tmp17_);
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		ValaPointerType* _tmp18_;
		ValaDataType* _tmp19_;
		ValaDataType* _tmp20_;
		_tmp18_ = pointer_type;
		_tmp19_ = vala_pointer_type_get_base_type (_tmp18_);
		_tmp20_ = _tmp19_;
		type = _tmp20_;
	}
	_tmp21_ = vala_ccode_base_module_get_ccode (self);
	_tmp22_ = _tmp21_;
	_tmp23_ = type;
	_tmp24_ = vala_delete_statement_get_expression (stmt);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_get_cvalue (_tmp25_);
	_tmp27_ = vala_glib_value_new (_tmp23_, _tmp26_, FALSE);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp28_, FALSE);
	_tmp30_ = _tmp29_;
	vala_ccode_function_add_expression (_tmp22_, _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_vala_target_value_unref0 (_tmp28_);
}

static gboolean
vala_ccode_base_module_is_compact_class_destructor_call (ValaExpression* expr)
{
	ValaClass* cl = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	ValaClass* _tmp6_;
	gboolean result;
	g_return_val_if_fail (expr != NULL, FALSE);
	_tmp0_ = vala_expression_get_value_type (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
	_tmp3_ = _tmp2_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL;
	_tmp6_ = cl;
	if (_tmp6_ != NULL) {
		ValaClass* _tmp7_;
		gboolean _tmp8_;
		gboolean _tmp9_;
		_tmp7_ = cl;
		_tmp8_ = vala_class_get_is_compact (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp5_ = _tmp9_;
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		ValaCodeNode* _tmp10_;
		ValaCodeNode* _tmp11_;
		_tmp10_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
		_tmp11_ = _tmp10_;
		_tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_MEMBER_ACCESS);
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		ValaMethodType* mt = NULL;
		ValaCodeNode* _tmp12_;
		ValaCodeNode* _tmp13_;
		ValaDataType* _tmp14_;
		ValaDataType* _tmp15_;
		gboolean _tmp16_ = FALSE;
		gboolean _tmp17_ = FALSE;
		ValaMethodType* _tmp18_;
		_tmp12_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_expression_get_value_type ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_tmp15_ = _tmp14_;
		mt = G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_METHOD_TYPE) ? ((ValaMethodType*) _tmp15_) : NULL;
		_tmp18_ = mt;
		if (_tmp18_ != NULL) {
			ValaMethodType* _tmp19_;
			ValaMethod* _tmp20_;
			ValaMethod* _tmp21_;
			_tmp19_ = mt;
			_tmp20_ = vala_method_type_get_method_symbol (_tmp19_);
			_tmp21_ = _tmp20_;
			_tmp17_ = _tmp21_ != NULL;
		} else {
			_tmp17_ = FALSE;
		}
		if (_tmp17_) {
			ValaMethodType* _tmp22_;
			ValaMethod* _tmp23_;
			ValaMethod* _tmp24_;
			ValaAttribute* _tmp25_;
			_tmp22_ = mt;
			_tmp23_ = vala_method_type_get_method_symbol (_tmp22_);
			_tmp24_ = _tmp23_;
			_tmp25_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp24_, "DestroysInstance");
			_tmp16_ = _tmp25_ != NULL;
		} else {
			_tmp16_ = FALSE;
		}
		if (_tmp16_) {
			result = TRUE;
			return result;
		}
	}
	result = FALSE;
	return result;
}

static void
vala_ccode_base_module_real_visit_expression (ValaCodeVisitor* base,
                                              ValaExpression* expr)
{
	ValaCCodeBaseModule * self;
	gboolean _tmp0_ = FALSE;
	ValaCCodeExpression* _tmp1_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp1_ = vala_get_cvalue (expr);
	if (_tmp1_ != NULL) {
		gboolean _tmp2_;
		gboolean _tmp3_;
		_tmp2_ = vala_expression_get_lvalue (expr);
		_tmp3_ = _tmp2_;
		_tmp0_ = !_tmp3_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gboolean _tmp4_ = FALSE;
		ValaDataType* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp37_;
		ValaDataType* _tmp38_;
		ValaTargetValue* _tmp49_;
		ValaTargetValue* _tmp50_;
		gboolean _tmp51_ = FALSE;
		ValaDataType* _tmp52_;
		ValaDataType* _tmp53_;
		gboolean _tmp70_ = FALSE;
		gboolean _tmp71_ = FALSE;
		gboolean _tmp72_ = FALSE;
		gboolean _tmp92_ = FALSE;
		ValaDataType* _tmp93_;
		ValaDataType* _tmp94_;
		_tmp5_ = vala_expression_get_formal_value_type (expr);
		_tmp6_ = _tmp5_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_GENERIC_TYPE)) {
			ValaDataType* _tmp7_;
			ValaDataType* _tmp8_;
			_tmp7_ = vala_expression_get_value_type (expr);
			_tmp8_ = _tmp7_;
			_tmp4_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_GENERIC_TYPE);
		} else {
			_tmp4_ = FALSE;
		}
		if (_tmp4_) {
			ValaTypeParameter* type_parameter = NULL;
			ValaDataType* _tmp9_;
			ValaDataType* _tmp10_;
			ValaTypeParameter* _tmp11_;
			ValaTypeParameter* _tmp12_;
			ValaTypeParameter* _tmp13_;
			ValaStruct* st = NULL;
			ValaTypeParameter* _tmp14_;
			ValaSymbol* _tmp15_;
			ValaSymbol* _tmp16_;
			ValaSymbol* _tmp17_;
			ValaSymbol* _tmp18_;
			ValaStruct* _tmp19_;
			gboolean _tmp20_ = FALSE;
			ValaTypeParameter* _tmp21_;
			ValaSymbol* _tmp22_;
			ValaSymbol* _tmp23_;
			ValaClass* _tmp24_;
			_tmp9_ = vala_expression_get_formal_value_type (expr);
			_tmp10_ = _tmp9_;
			_tmp11_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
			_tmp12_ = _tmp11_;
			_tmp13_ = _vala_code_node_ref0 (_tmp12_);
			type_parameter = _tmp13_;
			_tmp14_ = type_parameter;
			_tmp15_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp14_);
			_tmp16_ = _tmp15_;
			_tmp17_ = vala_symbol_get_parent_symbol (_tmp16_);
			_tmp18_ = _tmp17_;
			_tmp19_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp18_) : NULL);
			st = _tmp19_;
			_tmp21_ = type_parameter;
			_tmp22_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp21_);
			_tmp23_ = _tmp22_;
			_tmp24_ = self->garray_type;
			if (_tmp23_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_SYMBOL, ValaSymbol)) {
				gboolean _tmp25_ = FALSE;
				ValaStruct* _tmp26_;
				_tmp26_ = st;
				if (_tmp26_ == NULL) {
					_tmp25_ = TRUE;
				} else {
					ValaStruct* _tmp27_;
					gchar* _tmp28_;
					gchar* _tmp29_;
					_tmp27_ = st;
					_tmp28_ = vala_get_ccode_name ((ValaCodeNode*) _tmp27_);
					_tmp29_ = _tmp28_;
					_tmp25_ = g_strcmp0 (_tmp29_, "va_list") != 0;
					_g_free0 (_tmp29_);
				}
				_tmp20_ = _tmp25_;
			} else {
				_tmp20_ = FALSE;
			}
			if (_tmp20_) {
				ValaCCodeExpression* _tmp30_;
				ValaDataType* _tmp31_;
				ValaDataType* _tmp32_;
				ValaCCodeExpression* _tmp33_;
				ValaCCodeExpression* _tmp34_;
				ValaTargetValue* _tmp35_;
				ValaTargetValue* _tmp36_;
				_tmp30_ = vala_get_cvalue (expr);
				_tmp31_ = vala_expression_get_value_type (expr);
				_tmp32_ = _tmp31_;
				_tmp33_ = vala_ccode_base_module_convert_from_generic_pointer (self, _tmp30_, _tmp32_);
				_tmp34_ = _tmp33_;
				vala_set_cvalue (expr, _tmp34_);
				_vala_ccode_node_unref0 (_tmp34_);
				_tmp35_ = vala_expression_get_target_value (expr);
				_tmp36_ = _tmp35_;
				G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
			}
			_vala_code_node_unref0 (st);
			_vala_code_node_unref0 (type_parameter);
		}
		_tmp37_ = vala_expression_get_value_type (expr);
		_tmp38_ = _tmp37_;
		if (_tmp38_ != NULL) {
			ValaTargetValue* _tmp39_;
			ValaTargetValue* _tmp40_;
			ValaDataType* _tmp41_;
			ValaDataType* _tmp42_;
			ValaTargetValue* _tmp43_;
			ValaTargetValue* _tmp44_;
			ValaDataType* _tmp45_;
			ValaDataType* _tmp46_;
			ValaTargetValue* _tmp47_;
			ValaTargetValue* _tmp48_;
			_tmp39_ = vala_expression_get_target_value (expr);
			_tmp40_ = _tmp39_;
			_tmp41_ = vala_expression_get_value_type (expr);
			_tmp42_ = _tmp41_;
			vala_target_value_set_value_type (_tmp40_, _tmp42_);
			_tmp43_ = vala_expression_get_target_value (expr);
			_tmp44_ = _tmp43_;
			_tmp45_ = vala_expression_get_target_type (expr);
			_tmp46_ = _tmp45_;
			_tmp47_ = vala_ccode_base_module_transform_value (self, _tmp44_, _tmp46_, (ValaCodeNode*) expr);
			_tmp48_ = _tmp47_;
			vala_expression_set_target_value (expr, _tmp48_);
			_vala_target_value_unref0 (_tmp48_);
		}
		_tmp49_ = vala_expression_get_target_value (expr);
		_tmp50_ = _tmp49_;
		if (_tmp50_ == NULL) {
			return;
		}
		_tmp52_ = vala_expression_get_formal_target_type (expr);
		_tmp53_ = _tmp52_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp53_, VALA_TYPE_GENERIC_TYPE)) {
			ValaDataType* _tmp54_;
			ValaDataType* _tmp55_;
			_tmp54_ = vala_expression_get_target_type (expr);
			_tmp55_ = _tmp54_;
			_tmp51_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, VALA_TYPE_GENERIC_TYPE);
		} else {
			_tmp51_ = FALSE;
		}
		if (_tmp51_) {
			ValaDataType* _tmp56_;
			ValaDataType* _tmp57_;
			ValaTypeParameter* _tmp58_;
			ValaTypeParameter* _tmp59_;
			ValaSymbol* _tmp60_;
			ValaSymbol* _tmp61_;
			ValaClass* _tmp62_;
			_tmp56_ = vala_expression_get_formal_target_type (expr);
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp59_);
			_tmp61_ = _tmp60_;
			_tmp62_ = self->garray_type;
			if (_tmp61_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp62_, VALA_TYPE_SYMBOL, ValaSymbol)) {
				ValaCCodeExpression* _tmp63_;
				ValaDataType* _tmp64_;
				ValaDataType* _tmp65_;
				ValaCCodeExpression* _tmp66_;
				ValaCCodeExpression* _tmp67_;
				ValaTargetValue* _tmp68_;
				ValaTargetValue* _tmp69_;
				_tmp63_ = vala_get_cvalue (expr);
				_tmp64_ = vala_expression_get_target_type (expr);
				_tmp65_ = _tmp64_;
				_tmp66_ = vala_ccode_base_module_convert_to_generic_pointer (self, _tmp63_, _tmp65_);
				_tmp67_ = _tmp66_;
				vala_set_cvalue (expr, _tmp67_);
				_vala_ccode_node_unref0 (_tmp67_);
				_tmp68_ = vala_expression_get_target_value (expr);
				_tmp69_ = _tmp68_;
				G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
			}
		}
		if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_NULL_LITERAL)) {
			ValaCodeNode* _tmp73_;
			ValaCodeNode* _tmp74_;
			_tmp73_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
			_tmp74_ = _tmp73_;
			_tmp72_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp74_, VALA_TYPE_INITIALIZER_LIST);
		} else {
			_tmp72_ = FALSE;
		}
		if (_tmp72_) {
			ValaDataType* _tmp75_;
			ValaDataType* _tmp76_;
			_tmp75_ = vala_expression_get_target_type (expr);
			_tmp76_ = _tmp75_;
			_tmp71_ = _tmp76_ != NULL;
		} else {
			_tmp71_ = FALSE;
		}
		if (_tmp71_) {
			ValaDataType* _tmp77_;
			ValaDataType* _tmp78_;
			_tmp77_ = vala_expression_get_target_type (expr);
			_tmp78_ = _tmp77_;
			_tmp70_ = vala_data_type_is_real_non_null_struct_type (_tmp78_);
		} else {
			_tmp70_ = FALSE;
		}
		if (_tmp70_) {
			ValaCCodeInitializerList* clist = NULL;
			ValaCCodeInitializerList* _tmp79_;
			ValaCCodeInitializerList* _tmp80_;
			ValaCCodeConstant* _tmp81_;
			ValaCCodeConstant* _tmp82_;
			ValaCCodeInitializerList* _tmp83_;
			ValaDataType* _tmp84_;
			ValaDataType* _tmp85_;
			ValaTypeSymbol* _tmp86_;
			ValaTypeSymbol* _tmp87_;
			gchar* _tmp88_;
			gchar* _tmp89_;
			ValaCCodeCastExpression* _tmp90_;
			ValaCCodeCastExpression* _tmp91_;
			_tmp79_ = vala_ccode_initializer_list_new ();
			clist = _tmp79_;
			_tmp80_ = clist;
			_tmp81_ = vala_ccode_constant_new ("0");
			_tmp82_ = _tmp81_;
			vala_ccode_initializer_list_append (_tmp80_, (ValaCCodeExpression*) _tmp82_);
			_vala_ccode_node_unref0 (_tmp82_);
			_tmp83_ = clist;
			_tmp84_ = vala_expression_get_target_type (expr);
			_tmp85_ = _tmp84_;
			_tmp86_ = vala_data_type_get_type_symbol (_tmp85_);
			_tmp87_ = _tmp86_;
			_tmp88_ = vala_get_ccode_name ((ValaCodeNode*) _tmp87_);
			_tmp89_ = _tmp88_;
			_tmp90_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp83_, _tmp89_);
			_tmp91_ = _tmp90_;
			vala_set_cvalue (expr, (ValaCCodeExpression*) _tmp91_);
			_vala_ccode_node_unref0 (_tmp91_);
			_g_free0 (_tmp89_);
			_vala_ccode_node_unref0 (clist);
		}
		_tmp93_ = vala_expression_get_value_type (expr);
		_tmp94_ = _tmp93_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp94_, VALA_TYPE_VALUE_TYPE)) {
			ValaDataType* _tmp95_;
			ValaDataType* _tmp96_;
			gboolean _tmp97_;
			gboolean _tmp98_;
			_tmp95_ = vala_expression_get_value_type (expr);
			_tmp96_ = _tmp95_;
			_tmp97_ = vala_data_type_get_nullable (_tmp96_);
			_tmp98_ = _tmp97_;
			_tmp92_ = !_tmp98_;
		} else {
			_tmp92_ = FALSE;
		}
		if (!_tmp92_) {
			ValaTargetValue* _tmp99_;
			ValaTargetValue* _tmp100_;
			_tmp99_ = vala_expression_get_target_value (expr);
			_tmp100_ = _tmp99_;
			G_TYPE_CHECK_INSTANCE_CAST (_tmp100_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->non_null = vala_expression_is_non_null (expr);
		}
	} else {
		gboolean _tmp101_ = FALSE;
		ValaDataType* _tmp102_;
		ValaDataType* _tmp103_;
		_tmp102_ = vala_expression_get_value_type (expr);
		_tmp103_ = _tmp102_;
		if (_tmp103_ != NULL) {
			_tmp101_ = vala_ccode_base_module_is_compact_class_destructor_call (expr);
		} else {
			_tmp101_ = FALSE;
		}
		if (_tmp101_) {
			ValaTargetValue* temp_value = NULL;
			ValaTargetValue* _tmp104_;
			ValaTargetValue* _tmp105_;
			ValaTargetValue* _tmp106_;
			ValaCCodeFunction* _tmp107_;
			ValaCCodeFunction* _tmp108_;
			ValaCCodeExpression* _tmp109_;
			ValaCCodeConstant* _tmp110_;
			ValaCCodeConstant* _tmp111_;
			ValaTargetValue* _tmp112_;
			_tmp104_ = vala_expression_get_target_value (expr);
			_tmp105_ = _tmp104_;
			_tmp106_ = vala_ccode_base_module_store_temp_value (self, _tmp105_, (ValaCodeNode*) expr, NULL);
			temp_value = _tmp106_;
			_tmp107_ = vala_ccode_base_module_get_ccode (self);
			_tmp108_ = _tmp107_;
			_tmp109_ = vala_get_cvalue (expr);
			_tmp110_ = vala_ccode_constant_new ("NULL");
			_tmp111_ = _tmp110_;
			vala_ccode_function_add_assignment (_tmp108_, _tmp109_, (ValaCCodeExpression*) _tmp111_);
			_vala_ccode_node_unref0 (_tmp111_);
			_tmp112_ = temp_value;
			vala_expression_set_target_value (expr, _tmp112_);
			_vala_target_value_unref0 (temp_value);
		}
	}
}

static void
vala_ccode_base_module_real_visit_boolean_literal (ValaCodeVisitor* base,
                                                   ValaBooleanLiteral* expr)
{
	ValaCCodeBaseModule * self;
	gboolean _tmp0_;
	gboolean _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_boolean_literal_get_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_boolean_cconstant (self, _tmp1_);
	_tmp3_ = _tmp2_;
	vala_set_cvalue ((ValaExpression*) expr, _tmp3_);
	_vala_ccode_node_unref0 (_tmp3_);
}

static void
vala_ccode_base_module_real_visit_character_literal (ValaCodeVisitor* base,
                                                     ValaCharacterLiteral* expr)
{
	ValaCCodeBaseModule * self;
	gboolean _tmp0_ = FALSE;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	if (vala_character_literal_get_char (expr) >= ((gunichar) 0x20)) {
		_tmp0_ = vala_character_literal_get_char (expr) < ((gunichar) 0x80);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		const gchar* _tmp1_;
		const gchar* _tmp2_;
		ValaCCodeConstant* _tmp3_;
		ValaCCodeConstant* _tmp4_;
		_tmp1_ = vala_character_literal_get_value (expr);
		_tmp2_ = _tmp1_;
		_tmp3_ = vala_ccode_constant_new (_tmp2_);
		_tmp4_ = _tmp3_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp4_);
		_vala_ccode_node_unref0 (_tmp4_);
	} else {
		gchar* _tmp5_;
		gchar* _tmp6_;
		ValaCCodeConstant* _tmp7_;
		ValaCCodeConstant* _tmp8_;
		_tmp5_ = g_strdup_printf ("%uU", (guint) vala_character_literal_get_char (expr));
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_ccode_constant_new (_tmp6_);
		_tmp8_ = _tmp7_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp8_);
		_vala_ccode_node_unref0 (_tmp8_);
		_g_free0 (_tmp6_);
	}
}

static void
vala_ccode_base_module_real_visit_integer_literal (ValaCodeVisitor* base,
                                                   ValaIntegerLiteral* expr)
{
	ValaCCodeBaseModule * self;
	const gchar* _tmp0_;
	const gchar* _tmp1_;
	const gchar* _tmp2_;
	const gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeConstant* _tmp6_;
	ValaCCodeConstant* _tmp7_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_integer_literal_get_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_integer_literal_get_type_suffix (expr);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strconcat (_tmp1_, _tmp3_, NULL);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_constant_new (_tmp5_);
	_tmp7_ = _tmp6_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	_g_free0 (_tmp5_);
}

static glong
string_strnlen (gchar* str,
                glong maxlen)
{
	gchar* end = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	glong result;
	_tmp0_ = memchr (str, 0, (gsize) maxlen);
	end = _tmp0_;
	_tmp1_ = end;
	if (_tmp1_ == NULL) {
		result = maxlen;
		return result;
	} else {
		gchar* _tmp2_;
		_tmp2_ = end;
		result = (glong) (_tmp2_ - str);
		return result;
	}
}

static gchar*
string_substring (const gchar* self,
                  glong offset,
                  glong len)
{
	glong string_length = 0L;
	gboolean _tmp0_ = FALSE;
	gchar* _tmp3_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	if (offset >= ((glong) 0)) {
		_tmp0_ = len >= ((glong) 0);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		string_length = string_strnlen ((gchar*) self, offset + len);
	} else {
		gint _tmp1_;
		gint _tmp2_;
		_tmp1_ = strlen (self);
		_tmp2_ = _tmp1_;
		string_length = (glong) _tmp2_;
	}
	if (offset < ((glong) 0)) {
		offset = string_length + offset;
		g_return_val_if_fail (offset >= ((glong) 0), NULL);
	} else {
		g_return_val_if_fail (offset <= string_length, NULL);
	}
	if (len < ((glong) 0)) {
		len = string_length - offset;
	}
	g_return_val_if_fail ((offset + len) <= string_length, NULL);
	_tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len);
	result = _tmp3_;
	return result;
}

static gboolean
string_contains (const gchar* self,
                 const gchar* needle)
{
	gchar* _tmp0_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (needle != NULL, FALSE);
	_tmp0_ = strstr ((gchar*) self, (gchar*) needle);
	result = _tmp0_ != NULL;
	return result;
}

static void
vala_ccode_base_module_real_visit_real_literal (ValaCodeVisitor* base,
                                                ValaRealLiteral* expr)
{
	ValaCCodeBaseModule * self;
	gchar* c_literal = NULL;
	const gchar* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	gboolean _tmp3_ = FALSE;
	const gchar* _tmp4_;
	gboolean _tmp11_ = FALSE;
	gboolean _tmp12_ = FALSE;
	const gchar* _tmp13_;
	const gchar* _tmp28_;
	ValaCCodeConstant* _tmp29_;
	ValaCCodeConstant* _tmp30_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_real_literal_get_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup (_tmp1_);
	c_literal = _tmp2_;
	_tmp4_ = c_literal;
	if (g_str_has_suffix (_tmp4_, "d")) {
		_tmp3_ = TRUE;
	} else {
		const gchar* _tmp5_;
		_tmp5_ = c_literal;
		_tmp3_ = g_str_has_suffix (_tmp5_, "D");
	}
	if (_tmp3_) {
		const gchar* _tmp6_;
		const gchar* _tmp7_;
		gint _tmp8_;
		gint _tmp9_;
		gchar* _tmp10_;
		_tmp6_ = c_literal;
		_tmp7_ = c_literal;
		_tmp8_ = strlen (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = string_substring (_tmp6_, (glong) 0, (glong) (_tmp9_ - 1));
		_g_free0 (c_literal);
		c_literal = _tmp10_;
	}
	_tmp13_ = c_literal;
	if (string_contains (_tmp13_, ".")) {
		_tmp12_ = TRUE;
	} else {
		const gchar* _tmp14_;
		_tmp14_ = c_literal;
		_tmp12_ = string_contains (_tmp14_, "e");
	}
	if (_tmp12_) {
		_tmp11_ = TRUE;
	} else {
		const gchar* _tmp15_;
		_tmp15_ = c_literal;
		_tmp11_ = string_contains (_tmp15_, "E");
	}
	if (!_tmp11_) {
		gboolean _tmp16_ = FALSE;
		const gchar* _tmp17_;
		_tmp17_ = c_literal;
		if (string_contains (_tmp17_, "f")) {
			_tmp16_ = TRUE;
		} else {
			const gchar* _tmp18_;
			_tmp18_ = c_literal;
			_tmp16_ = string_contains (_tmp18_, "F");
		}
		if (_tmp16_) {
			const gchar* _tmp19_;
			const gchar* _tmp20_;
			gint _tmp21_;
			gint _tmp22_;
			gchar* _tmp23_;
			gchar* _tmp24_;
			gchar* _tmp25_;
			_tmp19_ = c_literal;
			_tmp20_ = c_literal;
			_tmp21_ = strlen (_tmp20_);
			_tmp22_ = _tmp21_;
			_tmp23_ = string_substring (_tmp19_, (glong) 0, (glong) (_tmp22_ - 1));
			_tmp24_ = _tmp23_;
			_tmp25_ = g_strconcat (_tmp24_, ".f", NULL);
			_g_free0 (c_literal);
			c_literal = _tmp25_;
			_g_free0 (_tmp24_);
		} else {
			const gchar* _tmp26_;
			gchar* _tmp27_;
			_tmp26_ = c_literal;
			_tmp27_ = g_strconcat (_tmp26_, ".", NULL);
			_g_free0 (c_literal);
			c_literal = _tmp27_;
		}
	}
	_tmp28_ = c_literal;
	_tmp29_ = vala_ccode_constant_new (_tmp28_);
	_tmp30_ = _tmp29_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_g_free0 (c_literal);
}

static void
vala_ccode_base_module_real_visit_string_literal (ValaCodeVisitor* base,
                                                  ValaStringLiteral* expr)
{
	ValaCCodeBaseModule * self;
	const gchar* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeConstant* _tmp4_;
	ValaCCodeConstant* _tmp5_;
	gboolean _tmp6_;
	gboolean _tmp7_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_string_literal_get_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = string_replace (_tmp1_, "\n", "\\n");
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_constant_new_string (_tmp3_);
	_tmp5_ = _tmp4_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp5_);
	_vala_ccode_node_unref0 (_tmp5_);
	_g_free0 (_tmp3_);
	_tmp6_ = vala_string_literal_get_translate (expr);
	_tmp7_ = _tmp6_;
	if (_tmp7_) {
		ValaCCodeFunctionCall* translate = NULL;
		ValaCCodeIdentifier* _tmp8_;
		ValaCCodeIdentifier* _tmp9_;
		ValaCCodeFunctionCall* _tmp10_;
		ValaCCodeFunctionCall* _tmp11_;
		ValaCCodeFunctionCall* _tmp12_;
		ValaCCodeExpression* _tmp13_;
		ValaCCodeFunctionCall* _tmp14_;
		_tmp8_ = vala_ccode_identifier_new ("_");
		_tmp9_ = _tmp8_;
		_tmp10_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp9_);
		_tmp11_ = _tmp10_;
		_vala_ccode_node_unref0 (_tmp9_);
		translate = _tmp11_;
		_tmp12_ = translate;
		_tmp13_ = vala_get_cvalue ((ValaExpression*) expr);
		vala_ccode_function_call_add_argument (_tmp12_, _tmp13_);
		_tmp14_ = translate;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp14_);
		_vala_ccode_node_unref0 (translate);
	}
}

static void
vala_ccode_base_module_real_visit_regex_literal (ValaCodeVisitor* base,
                                                 ValaRegexLiteral* expr)
{
	ValaCCodeBaseModule * self;
	gchar** parts = NULL;
	const gchar* _tmp0_;
	const gchar* _tmp1_;
	gchar** _tmp2_;
	gchar** _tmp3_;
	gint parts_length1;
	gint _parts_size_;
	gchar* re = NULL;
	gchar** _tmp4_;
	gint _tmp4__length1;
	const gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* flags = NULL;
	gchar* _tmp7_;
	gchar** _tmp8_;
	gint _tmp8__length1;
	const gchar* _tmp9_;
	gchar** _tmp12_;
	gint _tmp12__length1;
	const gchar* _tmp13_;
	gchar** _tmp16_;
	gint _tmp16__length1;
	const gchar* _tmp17_;
	gchar** _tmp20_;
	gint _tmp20__length1;
	const gchar* _tmp21_;
	ValaCCodeDeclaration* _cdecl_ = NULL;
	ValaCCodeDeclaration* _tmp24_;
	gchar* cname = NULL;
	gchar* _tmp25_;
	gint _tmp98_;
	ValaCCodeDeclaration* _tmp99_;
	const gchar* _tmp100_;
	gchar* _tmp101_;
	gchar* _tmp102_;
	ValaCCodeVariableDeclarator* _tmp103_;
	ValaCCodeVariableDeclarator* _tmp104_;
	ValaCCodeDeclaration* _tmp105_;
	ValaCCodeConstant* regex_const = NULL;
	const gchar* _tmp106_;
	const gchar* _tmp107_;
	const gchar* _tmp108_;
	gchar* _tmp109_;
	gchar* _tmp110_;
	ValaCCodeConstant* _tmp111_;
	ValaCCodeConstant* _tmp112_;
	ValaCCodeFile* _tmp113_;
	ValaCCodeDeclaration* _tmp114_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_regex_literal_get_value (expr);
	_tmp1_ = _tmp0_;
	_tmp3_ = _tmp2_ = g_strsplit (_tmp1_, "/", 3);
	parts = _tmp3_;
	parts_length1 = _vala_array_length (_tmp2_);
	_parts_size_ = parts_length1;
	_tmp4_ = parts;
	_tmp4__length1 = parts_length1;
	_tmp5_ = _tmp4_[2];
	_tmp6_ = g_strescape (_tmp5_, "");
	re = _tmp6_;
	_tmp7_ = g_strdup ("0");
	flags = _tmp7_;
	_tmp8_ = parts;
	_tmp8__length1 = parts_length1;
	_tmp9_ = _tmp8_[1];
	if (string_contains (_tmp9_, "i")) {
		const gchar* _tmp10_;
		gchar* _tmp11_;
		_tmp10_ = flags;
		_tmp11_ = g_strconcat (_tmp10_, " | G_REGEX_CASELESS", NULL);
		_g_free0 (flags);
		flags = _tmp11_;
	}
	_tmp12_ = parts;
	_tmp12__length1 = parts_length1;
	_tmp13_ = _tmp12_[1];
	if (string_contains (_tmp13_, "m")) {
		const gchar* _tmp14_;
		gchar* _tmp15_;
		_tmp14_ = flags;
		_tmp15_ = g_strconcat (_tmp14_, " | G_REGEX_MULTILINE", NULL);
		_g_free0 (flags);
		flags = _tmp15_;
	}
	_tmp16_ = parts;
	_tmp16__length1 = parts_length1;
	_tmp17_ = _tmp16_[1];
	if (string_contains (_tmp17_, "s")) {
		const gchar* _tmp18_;
		gchar* _tmp19_;
		_tmp18_ = flags;
		_tmp19_ = g_strconcat (_tmp18_, " | G_REGEX_DOTALL", NULL);
		_g_free0 (flags);
		flags = _tmp19_;
	}
	_tmp20_ = parts;
	_tmp20__length1 = parts_length1;
	_tmp21_ = _tmp20_[1];
	if (string_contains (_tmp21_, "x")) {
		const gchar* _tmp22_;
		gchar* _tmp23_;
		_tmp22_ = flags;
		_tmp23_ = g_strconcat (_tmp22_, " | G_REGEX_EXTENDED", NULL);
		_g_free0 (flags);
		flags = _tmp23_;
	}
	_tmp24_ = vala_ccode_declaration_new ("GRegex*");
	_cdecl_ = _tmp24_;
	_tmp25_ = g_strdup_printf ("_tmp_regex_%d", self->next_regex_id);
	cname = _tmp25_;
	if (self->next_regex_id == 0) {
		ValaCCodeFunction* fun = NULL;
		ValaCCodeFunction* _tmp26_;
		ValaCCodeFunction* _tmp27_;
		ValaCCodeFunction* _tmp28_;
		ValaCCodeParameter* _tmp29_;
		ValaCCodeParameter* _tmp30_;
		ValaCCodeFunction* _tmp31_;
		ValaCCodeParameter* _tmp32_;
		ValaCCodeParameter* _tmp33_;
		ValaCCodeFunction* _tmp34_;
		ValaCCodeParameter* _tmp35_;
		ValaCCodeParameter* _tmp36_;
		ValaCCodeFunction* _tmp37_;
		ValaCCodeFunctionCall* once_enter_call = NULL;
		ValaCCodeIdentifier* _tmp38_;
		ValaCCodeIdentifier* _tmp39_;
		ValaCCodeFunctionCall* _tmp40_;
		ValaCCodeFunctionCall* _tmp41_;
		ValaCodeContext* _tmp42_;
		ValaCCodeFunction* _tmp49_;
		ValaCCodeFunction* _tmp50_;
		ValaCCodeFunctionCall* _tmp51_;
		ValaCCodeFunctionCall* regex_new_call = NULL;
		ValaCCodeIdentifier* _tmp52_;
		ValaCCodeIdentifier* _tmp53_;
		ValaCCodeFunctionCall* _tmp54_;
		ValaCCodeFunctionCall* _tmp55_;
		ValaCCodeFunctionCall* _tmp56_;
		ValaCCodeConstant* _tmp57_;
		ValaCCodeConstant* _tmp58_;
		ValaCCodeFunctionCall* _tmp59_;
		ValaCCodeConstant* _tmp60_;
		ValaCCodeConstant* _tmp61_;
		ValaCCodeFunctionCall* _tmp62_;
		ValaCCodeConstant* _tmp63_;
		ValaCCodeConstant* _tmp64_;
		ValaCCodeFunctionCall* _tmp65_;
		ValaCCodeConstant* _tmp66_;
		ValaCCodeConstant* _tmp67_;
		ValaCCodeFunction* _tmp68_;
		ValaCCodeFunction* _tmp69_;
		ValaCCodeIdentifier* _tmp70_;
		ValaCCodeIdentifier* _tmp71_;
		ValaCCodeFunctionCall* _tmp72_;
		ValaCCodeFunctionCall* once_leave_call = NULL;
		ValaCCodeIdentifier* _tmp73_;
		ValaCCodeIdentifier* _tmp74_;
		ValaCCodeFunctionCall* _tmp75_;
		ValaCCodeFunctionCall* _tmp76_;
		ValaCodeContext* _tmp77_;
		ValaCCodeFunctionCall* _tmp84_;
		ValaCCodeConstant* _tmp85_;
		ValaCCodeConstant* _tmp86_;
		ValaCCodeFunction* _tmp87_;
		ValaCCodeFunction* _tmp88_;
		ValaCCodeFunctionCall* _tmp89_;
		ValaCCodeFunction* _tmp90_;
		ValaCCodeFunction* _tmp91_;
		ValaCCodeFunction* _tmp92_;
		ValaCCodeFunction* _tmp93_;
		ValaCCodeIdentifier* _tmp94_;
		ValaCCodeIdentifier* _tmp95_;
		ValaCCodeFile* _tmp96_;
		ValaCCodeFunction* _tmp97_;
		_tmp26_ = vala_ccode_function_new ("_thread_safe_regex_init", "GRegex*");
		fun = _tmp26_;
		_tmp27_ = fun;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp27_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
		_tmp28_ = fun;
		_tmp29_ = vala_ccode_parameter_new ("re", "GRegex**");
		_tmp30_ = _tmp29_;
		vala_ccode_function_add_parameter (_tmp28_, _tmp30_);
		_vala_ccode_node_unref0 (_tmp30_);
		_tmp31_ = fun;
		_tmp32_ = vala_ccode_parameter_new ("pattern", "const gchar *");
		_tmp33_ = _tmp32_;
		vala_ccode_function_add_parameter (_tmp31_, _tmp33_);
		_vala_ccode_node_unref0 (_tmp33_);
		_tmp34_ = fun;
		_tmp35_ = vala_ccode_parameter_new ("compile_flags", "GRegexCompileFlags");
		_tmp36_ = _tmp35_;
		vala_ccode_function_add_parameter (_tmp34_, _tmp36_);
		_vala_ccode_node_unref0 (_tmp36_);
		_tmp37_ = fun;
		vala_ccode_base_module_push_function (self, _tmp37_);
		_tmp38_ = vala_ccode_identifier_new ("g_once_init_enter");
		_tmp39_ = _tmp38_;
		_tmp40_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp39_);
		_tmp41_ = _tmp40_;
		_vala_ccode_node_unref0 (_tmp39_);
		once_enter_call = _tmp41_;
		_tmp42_ = self->priv->_context;
		if (vala_code_context_require_glib_version (_tmp42_, 2, 68)) {
			ValaCCodeFunctionCall* _tmp43_;
			ValaCCodeConstant* _tmp44_;
			ValaCCodeConstant* _tmp45_;
			_tmp43_ = once_enter_call;
			_tmp44_ = vala_ccode_constant_new ("(gsize*) re");
			_tmp45_ = _tmp44_;
			vala_ccode_function_call_add_argument (_tmp43_, (ValaCCodeExpression*) _tmp45_);
			_vala_ccode_node_unref0 (_tmp45_);
		} else {
			ValaCCodeFunctionCall* _tmp46_;
			ValaCCodeConstant* _tmp47_;
			ValaCCodeConstant* _tmp48_;
			_tmp46_ = once_enter_call;
			_tmp47_ = vala_ccode_constant_new ("(volatile gsize*) re");
			_tmp48_ = _tmp47_;
			vala_ccode_function_call_add_argument (_tmp46_, (ValaCCodeExpression*) _tmp48_);
			_vala_ccode_node_unref0 (_tmp48_);
		}
		_tmp49_ = vala_ccode_base_module_get_ccode (self);
		_tmp50_ = _tmp49_;
		_tmp51_ = once_enter_call;
		vala_ccode_function_open_if (_tmp50_, (ValaCCodeExpression*) _tmp51_);
		_tmp52_ = vala_ccode_identifier_new ("g_regex_new");
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp53_);
		_tmp55_ = _tmp54_;
		_vala_ccode_node_unref0 (_tmp53_);
		regex_new_call = _tmp55_;
		_tmp56_ = regex_new_call;
		_tmp57_ = vala_ccode_constant_new ("pattern");
		_tmp58_ = _tmp57_;
		vala_ccode_function_call_add_argument (_tmp56_, (ValaCCodeExpression*) _tmp58_);
		_vala_ccode_node_unref0 (_tmp58_);
		_tmp59_ = regex_new_call;
		_tmp60_ = vala_ccode_constant_new ("compile_flags");
		_tmp61_ = _tmp60_;
		vala_ccode_function_call_add_argument (_tmp59_, (ValaCCodeExpression*) _tmp61_);
		_vala_ccode_node_unref0 (_tmp61_);
		_tmp62_ = regex_new_call;
		_tmp63_ = vala_ccode_constant_new ("0");
		_tmp64_ = _tmp63_;
		vala_ccode_function_call_add_argument (_tmp62_, (ValaCCodeExpression*) _tmp64_);
		_vala_ccode_node_unref0 (_tmp64_);
		_tmp65_ = regex_new_call;
		_tmp66_ = vala_ccode_constant_new ("NULL");
		_tmp67_ = _tmp66_;
		vala_ccode_function_call_add_argument (_tmp65_, (ValaCCodeExpression*) _tmp67_);
		_vala_ccode_node_unref0 (_tmp67_);
		_tmp68_ = vala_ccode_base_module_get_ccode (self);
		_tmp69_ = _tmp68_;
		_tmp70_ = vala_ccode_identifier_new ("GRegex* val");
		_tmp71_ = _tmp70_;
		_tmp72_ = regex_new_call;
		vala_ccode_function_add_assignment (_tmp69_, (ValaCCodeExpression*) _tmp71_, (ValaCCodeExpression*) _tmp72_);
		_vala_ccode_node_unref0 (_tmp71_);
		_tmp73_ = vala_ccode_identifier_new ("g_once_init_leave");
		_tmp74_ = _tmp73_;
		_tmp75_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp74_);
		_tmp76_ = _tmp75_;
		_vala_ccode_node_unref0 (_tmp74_);
		once_leave_call = _tmp76_;
		_tmp77_ = self->priv->_context;
		if (vala_code_context_require_glib_version (_tmp77_, 2, 68)) {
			ValaCCodeFunctionCall* _tmp78_;
			ValaCCodeConstant* _tmp79_;
			ValaCCodeConstant* _tmp80_;
			_tmp78_ = once_leave_call;
			_tmp79_ = vala_ccode_constant_new ("(gsize*) re");
			_tmp80_ = _tmp79_;
			vala_ccode_function_call_add_argument (_tmp78_, (ValaCCodeExpression*) _tmp80_);
			_vala_ccode_node_unref0 (_tmp80_);
		} else {
			ValaCCodeFunctionCall* _tmp81_;
			ValaCCodeConstant* _tmp82_;
			ValaCCodeConstant* _tmp83_;
			_tmp81_ = once_leave_call;
			_tmp82_ = vala_ccode_constant_new ("(volatile gsize*) re");
			_tmp83_ = _tmp82_;
			vala_ccode_function_call_add_argument (_tmp81_, (ValaCCodeExpression*) _tmp83_);
			_vala_ccode_node_unref0 (_tmp83_);
		}
		_tmp84_ = once_leave_call;
		_tmp85_ = vala_ccode_constant_new ("(gsize) val");
		_tmp86_ = _tmp85_;
		vala_ccode_function_call_add_argument (_tmp84_, (ValaCCodeExpression*) _tmp86_);
		_vala_ccode_node_unref0 (_tmp86_);
		_tmp87_ = vala_ccode_base_module_get_ccode (self);
		_tmp88_ = _tmp87_;
		_tmp89_ = once_leave_call;
		vala_ccode_function_add_expression (_tmp88_, (ValaCCodeExpression*) _tmp89_);
		_tmp90_ = vala_ccode_base_module_get_ccode (self);
		_tmp91_ = _tmp90_;
		vala_ccode_function_close (_tmp91_);
		_tmp92_ = vala_ccode_base_module_get_ccode (self);
		_tmp93_ = _tmp92_;
		_tmp94_ = vala_ccode_identifier_new ("*re");
		_tmp95_ = _tmp94_;
		vala_ccode_function_add_return (_tmp93_, (ValaCCodeExpression*) _tmp95_);
		_vala_ccode_node_unref0 (_tmp95_);
		vala_ccode_base_module_pop_function (self);
		_tmp96_ = self->cfile;
		_tmp97_ = fun;
		vala_ccode_file_add_function (_tmp96_, _tmp97_);
		_vala_ccode_node_unref0 (once_leave_call);
		_vala_ccode_node_unref0 (regex_new_call);
		_vala_ccode_node_unref0 (once_enter_call);
		_vala_ccode_node_unref0 (fun);
	}
	_tmp98_ = self->next_regex_id;
	self->next_regex_id = _tmp98_ + 1;
	_tmp99_ = _cdecl_;
	_tmp100_ = cname;
	_tmp101_ = g_strconcat (_tmp100_, " = NULL", NULL);
	_tmp102_ = _tmp101_;
	_tmp103_ = vala_ccode_variable_declarator_new (_tmp102_, NULL, NULL);
	_tmp104_ = _tmp103_;
	vala_ccode_declaration_add_declarator (_tmp99_, (ValaCCodeDeclarator*) _tmp104_);
	_vala_ccode_node_unref0 (_tmp104_);
	_g_free0 (_tmp102_);
	_tmp105_ = _cdecl_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp105_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp106_ = cname;
	_tmp107_ = re;
	_tmp108_ = flags;
	_tmp109_ = g_strdup_printf ("_thread_safe_regex_init (&%s, \"%s\", %s)", _tmp106_, _tmp107_, _tmp108_);
	_tmp110_ = _tmp109_;
	_tmp111_ = vala_ccode_constant_new (_tmp110_);
	_tmp112_ = _tmp111_;
	_g_free0 (_tmp110_);
	regex_const = _tmp112_;
	_tmp113_ = self->cfile;
	_tmp114_ = _cdecl_;
	vala_ccode_file_add_constant_declaration (_tmp113_, (ValaCCodeNode*) _tmp114_);
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) regex_const);
	_vala_ccode_node_unref0 (regex_const);
	_g_free0 (cname);
	_vala_ccode_node_unref0 (_cdecl_);
	_g_free0 (flags);
	_g_free0 (re);
	parts = (_vala_array_free (parts, parts_length1, (GDestroyNotify) g_free), NULL);
}

static void
vala_ccode_base_module_real_visit_null_literal (ValaCodeVisitor* base,
                                                ValaNullLiteral* expr)
{
	ValaCCodeBaseModule * self;
	ValaCodeContext* _tmp0_;
	ValaProfile _tmp1_;
	ValaProfile _tmp2_;
	ValaCCodeConstant* _tmp5_;
	ValaCCodeConstant* _tmp6_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp7_;
	ValaDataType* _tmp8_;
	ValaArrayType* _tmp9_;
	ValaDelegateType* delegate_type = NULL;
	ValaDataType* _tmp10_;
	ValaDataType* _tmp11_;
	ValaDelegateType* _tmp12_;
	ValaArrayType* _tmp13_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = self->priv->_context;
	_tmp1_ = vala_code_context_get_profile (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == VALA_PROFILE_GOBJECT) {
		ValaCCodeFile* _tmp3_;
		_tmp3_ = self->cfile;
		vala_ccode_file_add_include (_tmp3_, "glib.h", FALSE);
	} else {
		ValaCCodeFile* _tmp4_;
		_tmp4_ = self->cfile;
		vala_ccode_file_add_include (_tmp4_, "stddef.h", FALSE);
	}
	_tmp5_ = vala_ccode_constant_new ("NULL");
	_tmp6_ = _tmp5_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp6_);
	_vala_ccode_node_unref0 (_tmp6_);
	_tmp7_ = vala_expression_get_target_type ((ValaExpression*) expr);
	_tmp8_ = _tmp7_;
	_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp8_) : NULL);
	array_type = _tmp9_;
	_tmp10_ = vala_expression_get_target_type ((ValaExpression*) expr);
	_tmp11_ = _tmp10_;
	_tmp12_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp11_) : NULL);
	delegate_type = _tmp12_;
	_tmp13_ = array_type;
	if (_tmp13_ != NULL) {
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp14_ = FALSE;
				_tmp14_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp16_;
					gint _tmp17_;
					gint _tmp18_;
					ValaCCodeConstant* _tmp19_;
					ValaCCodeConstant* _tmp20_;
					if (!_tmp14_) {
						gint _tmp15_;
						_tmp15_ = dim;
						dim = _tmp15_ + 1;
					}
					_tmp14_ = FALSE;
					_tmp16_ = array_type;
					_tmp17_ = vala_array_type_get_rank (_tmp16_);
					_tmp18_ = _tmp17_;
					if (!(dim <= _tmp18_)) {
						break;
					}
					_tmp19_ = vala_ccode_constant_new ("0");
					_tmp20_ = _tmp19_;
					vala_append_array_length ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp20_);
					_vala_ccode_node_unref0 (_tmp20_);
				}
			}
		}
	} else {
		gboolean _tmp21_ = FALSE;
		ValaDelegateType* _tmp22_;
		_tmp22_ = delegate_type;
		if (_tmp22_ != NULL) {
			ValaDelegateType* _tmp23_;
			ValaDelegate* _tmp24_;
			ValaDelegate* _tmp25_;
			gboolean _tmp26_;
			gboolean _tmp27_;
			_tmp23_ = delegate_type;
			_tmp24_ = vala_delegate_type_get_delegate_symbol (_tmp23_);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_delegate_get_has_target (_tmp25_);
			_tmp27_ = _tmp26_;
			_tmp21_ = _tmp27_;
		} else {
			_tmp21_ = FALSE;
		}
		if (_tmp21_) {
			ValaCCodeConstant* _tmp28_;
			ValaCCodeConstant* _tmp29_;
			ValaCCodeConstant* _tmp30_;
			ValaCCodeConstant* _tmp31_;
			_tmp28_ = vala_ccode_constant_new ("NULL");
			_tmp29_ = _tmp28_;
			vala_set_delegate_target ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp29_);
			_vala_ccode_node_unref0 (_tmp29_);
			_tmp30_ = vala_ccode_constant_new ("NULL");
			_tmp31_ = _tmp30_;
			vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp31_);
			_vala_ccode_node_unref0 (_tmp31_);
		}
	}
	_vala_code_node_unref0 (delegate_type);
	_vala_code_node_unref0 (array_type);
}

static ValaTargetValue*
vala_ccode_base_module_real_get_local_cvalue (ValaCCodeBaseModule* self,
                                              ValaLocalVariable* local)
{
	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_get_local_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

ValaTargetValue*
vala_ccode_base_module_get_local_cvalue (ValaCCodeBaseModule* self,
                                         ValaLocalVariable* local)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_local_cvalue) {
		return _klass_->get_local_cvalue (self, local);
	}
	return NULL;
}

static ValaTargetValue*
vala_ccode_base_module_real_get_parameter_cvalue (ValaCCodeBaseModule* self,
                                                  ValaParameter* param)
{
	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_get_parameter_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

ValaTargetValue*
vala_ccode_base_module_get_parameter_cvalue (ValaCCodeBaseModule* self,
                                             ValaParameter* param)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_parameter_cvalue) {
		return _klass_->get_parameter_cvalue (self, param);
	}
	return NULL;
}

static ValaTargetValue*
vala_ccode_base_module_real_get_field_cvalue (ValaCCodeBaseModule* self,
                                              ValaField* field,
                                              ValaTargetValue* instance)
{
	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_get_field_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

ValaTargetValue*
vala_ccode_base_module_get_field_cvalue (ValaCCodeBaseModule* self,
                                         ValaField* field,
                                         ValaTargetValue* instance)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_field_cvalue) {
		return _klass_->get_field_cvalue (self, field, instance);
	}
	return NULL;
}

static ValaTargetValue*
vala_ccode_base_module_real_load_variable (ValaCCodeBaseModule* self,
                                           ValaVariable* variable,
                                           ValaTargetValue* value,
                                           ValaExpression* expr)
{
	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_load_variable'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

ValaTargetValue*
vala_ccode_base_module_load_variable (ValaCCodeBaseModule* self,
                                      ValaVariable* variable,
                                      ValaTargetValue* value,
                                      ValaExpression* expr)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->load_variable) {
		return _klass_->load_variable (self, variable, value, expr);
	}
	return NULL;
}

static ValaTargetValue*
vala_ccode_base_module_real_load_this_parameter (ValaCCodeBaseModule* self,
                                                 ValaTypeSymbol* sym)
{
	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_load_this_parameter'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

ValaTargetValue*
vala_ccode_base_module_load_this_parameter (ValaCCodeBaseModule* self,
                                            ValaTypeSymbol* sym)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->load_this_parameter) {
		return _klass_->load_this_parameter (self, sym);
	}
	return NULL;
}

static void
vala_ccode_base_module_real_store_value (ValaCCodeBaseModule* self,
                                         ValaTargetValue* lvalue,
                                         ValaTargetValue* value,
                                         ValaSourceReference* source_reference)
{
	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_store_value'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return;
}

void
vala_ccode_base_module_store_value (ValaCCodeBaseModule* self,
                                    ValaTargetValue* lvalue,
                                    ValaTargetValue* value,
                                    ValaSourceReference* source_reference)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->store_value) {
		_klass_->store_value (self, lvalue, value, source_reference);
	}
}

static gchar*
vala_ccode_base_module_real_get_delegate_target_cname (ValaCCodeBaseModule* self,
                                                       const gchar* delegate_cname)
{
	g_return_val_if_fail (delegate_cname != NULL, NULL);
	g_assert_not_reached ();
}

gchar*
vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self,
                                                  const gchar* delegate_cname)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_delegate_target_cname) {
		return _klass_->get_delegate_target_cname (self, delegate_cname);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_cexpression (ValaCCodeBaseModule* self,
                                                             ValaExpression* delegate_expr,
                                                             ValaCCodeExpression** delegate_target_destroy_notify)
{
	ValaCCodeExpression* _vala_delegate_target_destroy_notify = NULL;
	g_return_val_if_fail (delegate_expr != NULL, NULL);
	g_assert_not_reached ();
}

ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target_cexpression (ValaCCodeBaseModule* self,
                                                        ValaExpression* delegate_expr,
                                                        ValaCCodeExpression** delegate_target_destroy_notify)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_delegate_target_cexpression) {
		return _klass_->get_delegate_target_cexpression (self, delegate_expr, delegate_target_destroy_notify);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_cvalue (ValaCCodeBaseModule* self,
                                                        ValaTargetValue* value)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target_cvalue (ValaCCodeBaseModule* self,
                                                   ValaTargetValue* value)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_delegate_target_cvalue) {
		return _klass_->get_delegate_target_cvalue (self, value);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue (ValaCCodeBaseModule* self,
                                                                       ValaTargetValue* value)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (ValaCCodeBaseModule* self,
                                                                  ValaTargetValue* value)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_delegate_target_destroy_notify_cvalue) {
		return _klass_->get_delegate_target_destroy_notify_cvalue (self, value);
	}
	return NULL;
}

static gchar*
vala_ccode_base_module_real_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self,
                                                                      const gchar* delegate_cname)
{
	g_return_val_if_fail (delegate_cname != NULL, NULL);
	g_assert_not_reached ();
}

gchar*
vala_ccode_base_module_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self,
                                                                 const gchar* delegate_cname)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_delegate_target_destroy_notify_cname) {
		return _klass_->get_delegate_target_destroy_notify_cname (self, delegate_cname);
	}
	return NULL;
}

static void
vala_ccode_base_module_real_visit_base_access (ValaCodeVisitor* base,
                                               ValaBaseAccess* expr)
{
	ValaCCodeBaseModule * self;
	ValaClass* cl = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	gboolean _tmp4_ = FALSE;
	ValaClass* _tmp5_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_expression_get_value_type ((ValaExpression*) expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
	_tmp3_ = _tmp2_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL;
	_tmp5_ = cl;
	if (_tmp5_ != NULL) {
		ValaClass* _tmp6_;
		gboolean _tmp7_;
		gboolean _tmp8_;
		_tmp6_ = cl;
		_tmp7_ = vala_class_get_is_compact (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp4_ = !_tmp8_;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		ValaCCodeExpression* _tmp9_;
		ValaCCodeExpression* _tmp10_;
		ValaClass* _tmp11_;
		ValaCCodeFunctionCall* _tmp12_;
		ValaCCodeFunctionCall* _tmp13_;
		_tmp9_ = vala_ccode_base_module_get_this_cexpression (self);
		_tmp10_ = _tmp9_;
		_tmp11_ = cl;
		_tmp12_ = vala_ccode_base_module_generate_instance_cast (self, _tmp10_, (ValaTypeSymbol*) _tmp11_);
		_tmp13_ = _tmp12_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp13_);
		_vala_ccode_node_unref0 (_tmp13_);
		_vala_ccode_node_unref0 (_tmp10_);
	} else {
		ValaDataType* _tmp14_;
		ValaDataType* _tmp15_;
		ValaTypeSymbol* _tmp16_;
		ValaTypeSymbol* _tmp17_;
		ValaTargetValue* _tmp18_;
		ValaTargetValue* _tmp19_;
		_tmp14_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_data_type_get_type_symbol (_tmp15_);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_ccode_base_module_load_this_parameter (self, _tmp17_);
		_tmp19_ = _tmp18_;
		vala_expression_set_target_value ((ValaExpression*) expr, _tmp19_);
		_vala_target_value_unref0 (_tmp19_);
	}
}

static void
vala_ccode_base_module_real_visit_postfix_expression (ValaCodeVisitor* base,
                                                      ValaPostfixExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaMemberAccess* ma = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaMemberAccess* _tmp2_;
	ValaMemberAccess* _tmp3_;
	ValaTargetValue* temp_value = NULL;
	ValaExpression* _tmp31_;
	ValaExpression* _tmp32_;
	ValaTargetValue* _tmp33_;
	ValaTargetValue* _tmp34_;
	ValaTargetValue* _tmp35_;
	ValaCCodeBinaryOperator _tmp36_ = 0;
	gboolean _tmp37_;
	gboolean _tmp38_;
	ValaCCodeBinaryOperator op = 0;
	ValaCCodeBinaryExpression* cexpr = NULL;
	ValaTargetValue* _tmp39_;
	ValaCCodeExpression* _tmp40_;
	ValaCCodeConstant* _tmp41_;
	ValaCCodeConstant* _tmp42_;
	ValaCCodeBinaryExpression* _tmp43_;
	ValaCCodeBinaryExpression* _tmp44_;
	ValaCCodeFunction* _tmp45_;
	ValaCCodeFunction* _tmp46_;
	ValaExpression* _tmp47_;
	ValaExpression* _tmp48_;
	ValaCCodeExpression* _tmp49_;
	ValaCCodeBinaryExpression* _tmp50_;
	ValaTargetValue* _tmp51_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_postfix_expression_get_inner (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_find_property_access (self, _tmp1_);
	ma = _tmp2_;
	_tmp3_ = ma;
	if (_tmp3_ != NULL) {
		ValaProperty* prop = NULL;
		ValaMemberAccess* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		ValaProperty* _tmp7_;
		ValaCCodeBinaryOperator _tmp8_ = 0;
		gboolean _tmp9_;
		gboolean _tmp10_;
		ValaCCodeBinaryOperator op = 0;
		ValaCCodeBinaryExpression* cexpr = NULL;
		ValaExpression* _tmp11_;
		ValaExpression* _tmp12_;
		ValaCCodeExpression* _tmp13_;
		ValaCCodeConstant* _tmp14_;
		ValaCCodeConstant* _tmp15_;
		ValaCCodeBinaryExpression* _tmp16_;
		ValaCCodeBinaryExpression* _tmp17_;
		ValaProperty* _tmp18_;
		ValaMemberAccess* _tmp19_;
		ValaExpression* _tmp20_;
		ValaExpression* _tmp21_;
		ValaDataType* _tmp22_;
		ValaDataType* _tmp23_;
		ValaCCodeBinaryExpression* _tmp24_;
		ValaGLibValue* _tmp25_;
		ValaGLibValue* _tmp26_;
		ValaExpression* _tmp27_;
		ValaExpression* _tmp28_;
		ValaTargetValue* _tmp29_;
		ValaTargetValue* _tmp30_;
		_tmp4_ = ma;
		_tmp5_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_PROPERTY, ValaProperty));
		prop = _tmp7_;
		_tmp9_ = vala_postfix_expression_get_increment (expr);
		_tmp10_ = _tmp9_;
		if (_tmp10_) {
			_tmp8_ = VALA_CCODE_BINARY_OPERATOR_PLUS;
		} else {
			_tmp8_ = VALA_CCODE_BINARY_OPERATOR_MINUS;
		}
		op = _tmp8_;
		_tmp11_ = vala_postfix_expression_get_inner (expr);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_get_cvalue (_tmp12_);
		_tmp14_ = vala_ccode_constant_new ("1");
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_ccode_binary_expression_new (op, _tmp13_, (ValaCCodeExpression*) _tmp15_);
		_tmp17_ = _tmp16_;
		_vala_ccode_node_unref0 (_tmp15_);
		cexpr = _tmp17_;
		_tmp18_ = prop;
		_tmp19_ = ma;
		_tmp20_ = vala_member_access_get_inner (_tmp19_);
		_tmp21_ = _tmp20_;
		_tmp22_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp23_ = _tmp22_;
		_tmp24_ = cexpr;
		_tmp25_ = vala_glib_value_new (_tmp23_, (ValaCCodeExpression*) _tmp24_, FALSE);
		_tmp26_ = _tmp25_;
		vala_ccode_base_module_store_property (self, _tmp18_, _tmp21_, (ValaTargetValue*) _tmp26_);
		_vala_target_value_unref0 (_tmp26_);
		_tmp27_ = vala_postfix_expression_get_inner (expr);
		_tmp28_ = _tmp27_;
		_tmp29_ = vala_expression_get_target_value (_tmp28_);
		_tmp30_ = _tmp29_;
		vala_expression_set_target_value ((ValaExpression*) expr, _tmp30_);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (prop);
		_vala_code_node_unref0 (ma);
		return;
	}
	_tmp31_ = vala_postfix_expression_get_inner (expr);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_expression_get_target_value (_tmp32_);
	_tmp34_ = _tmp33_;
	_tmp35_ = vala_ccode_base_module_store_temp_value (self, _tmp34_, (ValaCodeNode*) expr, NULL);
	temp_value = _tmp35_;
	_tmp37_ = vala_postfix_expression_get_increment (expr);
	_tmp38_ = _tmp37_;
	if (_tmp38_) {
		_tmp36_ = VALA_CCODE_BINARY_OPERATOR_PLUS;
	} else {
		_tmp36_ = VALA_CCODE_BINARY_OPERATOR_MINUS;
	}
	op = _tmp36_;
	_tmp39_ = temp_value;
	_tmp40_ = vala_get_cvalue_ (_tmp39_);
	_tmp41_ = vala_ccode_constant_new ("1");
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_ccode_binary_expression_new (op, _tmp40_, (ValaCCodeExpression*) _tmp42_);
	_tmp44_ = _tmp43_;
	_vala_ccode_node_unref0 (_tmp42_);
	cexpr = _tmp44_;
	_tmp45_ = vala_ccode_base_module_get_ccode (self);
	_tmp46_ = _tmp45_;
	_tmp47_ = vala_postfix_expression_get_inner (expr);
	_tmp48_ = _tmp47_;
	_tmp49_ = vala_get_cvalue (_tmp48_);
	_tmp50_ = cexpr;
	vala_ccode_function_add_assignment (_tmp46_, _tmp49_, (ValaCCodeExpression*) _tmp50_);
	_tmp51_ = temp_value;
	vala_expression_set_target_value ((ValaExpression*) expr, _tmp51_);
	_vala_ccode_node_unref0 (cexpr);
	_vala_target_value_unref0 (temp_value);
	_vala_code_node_unref0 (ma);
}

static ValaMemberAccess*
vala_ccode_base_module_find_property_access (ValaCCodeBaseModule* self,
                                             ValaExpression* expr)
{
	ValaMemberAccess* ma = NULL;
	ValaMemberAccess* _tmp0_;
	ValaMemberAccess* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaMemberAccess* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	if (!G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_MEMBER_ACCESS)) {
		result = NULL;
		return result;
	}
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
	ma = _tmp0_;
	_tmp1_ = ma;
	_tmp2_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp1_);
	_tmp3_ = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_PROPERTY)) {
		result = ma;
		return result;
	}
	result = NULL;
	_vala_code_node_unref0 (ma);
	return result;
}

static gboolean
vala_ccode_base_module_is_limited_generic_type (ValaGenericType* type)
{
	ValaClass* cl = NULL;
	ValaTypeParameter* _tmp0_;
	ValaTypeParameter* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaStruct* st = NULL;
	ValaTypeParameter* _tmp4_;
	ValaTypeParameter* _tmp5_;
	ValaSymbol* _tmp6_;
	ValaSymbol* _tmp7_;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	ValaClass* _tmp10_;
	gboolean result;
	g_return_val_if_fail (type != NULL, FALSE);
	_tmp0_ = vala_generic_type_get_type_parameter (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1_);
	_tmp3_ = _tmp2_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL;
	_tmp4_ = vala_generic_type_get_type_parameter (type);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp5_);
	_tmp7_ = _tmp6_;
	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp7_) : NULL;
	_tmp10_ = cl;
	if (_tmp10_ != NULL) {
		ValaClass* _tmp11_;
		gboolean _tmp12_;
		gboolean _tmp13_;
		_tmp11_ = cl;
		_tmp12_ = vala_class_get_is_compact (_tmp11_);
		_tmp13_ = _tmp12_;
		_tmp9_ = _tmp13_;
	} else {
		_tmp9_ = FALSE;
	}
	if (_tmp9_) {
		_tmp8_ = TRUE;
	} else {
		ValaStruct* _tmp14_;
		_tmp14_ = st;
		_tmp8_ = _tmp14_ != NULL;
	}
	if (_tmp8_) {
		result = TRUE;
		return result;
	}
	result = FALSE;
	return result;
}

gboolean
vala_ccode_base_module_requires_copy (ValaDataType* type)
{
	ValaClass* cl = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	ValaClass* _tmp4_;
	gboolean result;
	g_return_val_if_fail (type != NULL, FALSE);
	if (!vala_data_type_is_disposable (type)) {
		result = FALSE;
		return result;
	}
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL;
	_tmp4_ = cl;
	if (_tmp4_ != NULL) {
		ValaClass* _tmp5_;
		_tmp5_ = cl;
		_tmp3_ = vala_is_reference_counting ((ValaTypeSymbol*) _tmp5_);
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		ValaClass* _tmp6_;
		gchar* _tmp7_;
		gchar* _tmp8_;
		_tmp6_ = cl;
		_tmp7_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) _tmp6_);
		_tmp8_ = _tmp7_;
		_tmp2_ = g_strcmp0 (_tmp8_, "") == 0;
		_g_free0 (_tmp8_);
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		result = FALSE;
		return result;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
		if (vala_ccode_base_module_is_limited_generic_type (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
			result = FALSE;
			return result;
		}
	}
	result = TRUE;
	return result;
}

gboolean
vala_ccode_base_module_requires_destroy (ValaDataType* type)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaArrayType* _tmp2_;
	ValaClass* cl = NULL;
	ValaTypeSymbol* _tmp9_;
	ValaTypeSymbol* _tmp10_;
	gboolean _tmp11_ = FALSE;
	gboolean _tmp12_ = FALSE;
	ValaClass* _tmp13_;
	gboolean result;
	g_return_val_if_fail (type != NULL, FALSE);
	if (!vala_data_type_is_disposable (type)) {
		result = FALSE;
		return result;
	}
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
	array_type = _tmp0_;
	_tmp2_ = array_type;
	if (_tmp2_ != NULL) {
		ValaArrayType* _tmp3_;
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp3_ = array_type;
		_tmp4_ = vala_array_type_get_fixed_length (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp1_ = _tmp5_;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		ValaArrayType* _tmp6_;
		ValaDataType* _tmp7_;
		ValaDataType* _tmp8_;
		_tmp6_ = array_type;
		_tmp7_ = vala_array_type_get_element_type (_tmp6_);
		_tmp8_ = _tmp7_;
		result = vala_ccode_base_module_requires_destroy (_tmp8_);
		_vala_code_node_unref0 (array_type);
		return result;
	}
	_tmp9_ = vala_data_type_get_type_symbol (type);
	_tmp10_ = _tmp9_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp10_) : NULL;
	_tmp13_ = cl;
	if (_tmp13_ != NULL) {
		ValaClass* _tmp14_;
		_tmp14_ = cl;
		_tmp12_ = vala_is_reference_counting ((ValaTypeSymbol*) _tmp14_);
	} else {
		_tmp12_ = FALSE;
	}
	if (_tmp12_) {
		ValaClass* _tmp15_;
		gchar* _tmp16_;
		gchar* _tmp17_;
		_tmp15_ = cl;
		_tmp16_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) _tmp15_);
		_tmp17_ = _tmp16_;
		_tmp11_ = g_strcmp0 (_tmp17_, "") == 0;
		_g_free0 (_tmp17_);
	} else {
		_tmp11_ = FALSE;
	}
	if (_tmp11_) {
		result = FALSE;
		_vala_code_node_unref0 (array_type);
		return result;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
		if (vala_ccode_base_module_is_limited_generic_type (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
			result = FALSE;
			_vala_code_node_unref0 (array_type);
			return result;
		}
	}
	result = TRUE;
	_vala_code_node_unref0 (array_type);
	return result;
}

static ValaTargetValue*
vala_ccode_base_module_real_copy_value (ValaCCodeBaseModule* self,
                                        ValaTargetValue* value,
                                        ValaCodeNode* node)
{
	ValaDataType* type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaCCodeExpression* cexpr = NULL;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* _tmp4_;
	ValaGLibValue* _result_ = NULL;
	ValaGLibValue* _tmp5_;
	ValaDataType* _tmp6_;
	gboolean _tmp23_ = FALSE;
	ValaDataType* _tmp24_;
	ValaCCodeExpression* dupexpr = NULL;
	ValaDataType* _tmp117_;
	ValaSourceReference* _tmp118_;
	ValaSourceReference* _tmp119_;
	ValaCCodeExpression* _tmp120_;
	ValaCCodeExpression* _tmp121_;
	gboolean _tmp122_ = FALSE;
	gboolean _tmp123_ = FALSE;
	gboolean _tmp124_ = FALSE;
	ValaCCodeExpression* _tmp125_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeExpression* _tmp188_;
	ValaCCodeFunctionCall* _tmp189_;
	gboolean _tmp190_ = FALSE;
	gboolean _tmp191_ = FALSE;
	ValaDataType* _tmp192_;
	ValaTargetValue* result;
	g_return_val_if_fail (value != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = vala_target_value_get_value_type (value);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	type = _tmp2_;
	_tmp3_ = vala_get_cvalue_ (value);
	_tmp4_ = _vala_ccode_node_ref0 (_tmp3_);
	cexpr = _tmp4_;
	_tmp5_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	_result_ = _tmp5_;
	_tmp6_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_DELEGATE_TYPE)) {
		ValaDelegateType* delegate_type = NULL;
		ValaDataType* _tmp7_;
		ValaDelegateType* _tmp8_;
		gboolean _tmp9_ = FALSE;
		gboolean _tmp10_ = FALSE;
		ValaGLibValue* _tmp21_;
		ValaCCodeConstant* _tmp22_;
		_tmp7_ = type;
		_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
		delegate_type = _tmp8_;
		if (vala_get_ccode_delegate_target (node)) {
			ValaDelegateType* _tmp11_;
			ValaDelegate* _tmp12_;
			ValaDelegate* _tmp13_;
			gboolean _tmp14_;
			gboolean _tmp15_;
			_tmp11_ = delegate_type;
			_tmp12_ = vala_delegate_type_get_delegate_symbol (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_delegate_get_has_target (_tmp13_);
			_tmp15_ = _tmp14_;
			_tmp10_ = _tmp15_;
		} else {
			_tmp10_ = FALSE;
		}
		if (_tmp10_) {
			ValaCodeContext* _tmp16_;
			gboolean _tmp17_;
			gboolean _tmp18_;
			_tmp16_ = self->priv->_context;
			_tmp17_ = vala_code_context_get_deprecated (_tmp16_);
			_tmp18_ = _tmp17_;
			_tmp9_ = !_tmp18_;
		} else {
			_tmp9_ = FALSE;
		}
		if (_tmp9_) {
			ValaSourceReference* _tmp19_;
			ValaSourceReference* _tmp20_;
			_tmp19_ = vala_code_node_get_source_reference (node);
			_tmp20_ = _tmp19_;
			vala_report_deprecated (_tmp20_, "copying delegates is not supported");
		}
		_tmp21_ = _result_;
		_tmp22_ = vala_ccode_constant_new ("NULL");
		_vala_ccode_node_unref0 (_tmp21_->delegate_target_destroy_notify_cvalue);
		_tmp21_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp22_;
		result = (ValaTargetValue*) _result_;
		_vala_code_node_unref0 (delegate_type);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp24_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_VALUE_TYPE)) {
		ValaDataType* _tmp25_;
		gboolean _tmp26_;
		gboolean _tmp27_;
		_tmp25_ = type;
		_tmp26_ = vala_data_type_get_nullable (_tmp25_);
		_tmp27_ = _tmp26_;
		_tmp23_ = !_tmp27_;
	} else {
		_tmp23_ = FALSE;
	}
	if (_tmp23_) {
		ValaTargetValue* temp_cvalue = NULL;
		ValaDataType* _tmp28_;
		ValaTargetValue* _tmp29_;
		ValaTargetValue* _tmp30_;
		ValaSourceReference* _tmp31_;
		ValaSourceReference* _tmp32_;
		ValaTargetValue* _tmp33_;
		ValaCCodeExpression* _tmp34_;
		ValaCCodeExpression* _tmp35_;
		ValaTargetValue* temp_value = NULL;
		ValaDataType* _tmp36_;
		gboolean _tmp37_;
		ValaTargetValue* _tmp38_;
		ValaCCodeExpression* ctemp = NULL;
		ValaTargetValue* _tmp39_;
		ValaCCodeExpression* _tmp40_;
		ValaCCodeExpression* _tmp41_;
		ValaValueType* vt = NULL;
		ValaDataType* _tmp42_;
		ValaValueType* _tmp43_;
		ValaStruct* st = NULL;
		ValaValueType* _tmp44_;
		ValaTypeSymbol* _tmp45_;
		ValaTypeSymbol* _tmp46_;
		ValaStruct* _tmp47_;
		ValaCCodeFunctionCall* copy_call = NULL;
		ValaStruct* _tmp48_;
		gchar* _tmp49_;
		gchar* _tmp50_;
		ValaCCodeIdentifier* _tmp51_;
		ValaCCodeIdentifier* _tmp52_;
		ValaCCodeFunctionCall* _tmp53_;
		ValaCCodeFunctionCall* _tmp54_;
		ValaCCodeFunctionCall* _tmp55_;
		ValaCCodeExpression* _tmp56_;
		ValaCCodeUnaryExpression* _tmp57_;
		ValaCCodeUnaryExpression* _tmp58_;
		ValaCCodeFunctionCall* _tmp59_;
		ValaCCodeExpression* _tmp60_;
		ValaCCodeUnaryExpression* _tmp61_;
		ValaCCodeUnaryExpression* _tmp62_;
		ValaStruct* _tmp63_;
		gboolean _tmp65_ = FALSE;
		ValaStruct* _tmp66_;
		_tmp28_ = type;
		_tmp29_ = vala_ccode_base_module_create_temp_value (self, _tmp28_, FALSE, node, NULL);
		temp_cvalue = _tmp29_;
		_tmp30_ = temp_cvalue;
		_tmp31_ = vala_code_node_get_source_reference (node);
		_tmp32_ = _tmp31_;
		vala_ccode_base_module_store_value (self, _tmp30_, value, _tmp32_);
		_tmp33_ = temp_cvalue;
		_tmp34_ = vala_get_cvalue_ (_tmp33_);
		_tmp35_ = _vala_ccode_node_ref0 (_tmp34_);
		_vala_ccode_node_unref0 (cexpr);
		cexpr = _tmp35_;
		_tmp36_ = type;
		_tmp37_ = TRUE;
		_tmp38_ = vala_ccode_base_module_create_temp_value (self, _tmp36_, TRUE, node, &_tmp37_);
		temp_value = _tmp38_;
		_tmp39_ = temp_value;
		_tmp40_ = vala_get_cvalue_ (_tmp39_);
		_tmp41_ = _vala_ccode_node_ref0 (_tmp40_);
		ctemp = _tmp41_;
		_tmp42_ = type;
		_tmp43_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_VALUE_TYPE, ValaValueType));
		vt = _tmp43_;
		_tmp44_ = vt;
		_tmp45_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp44_);
		_tmp46_ = _tmp45_;
		_tmp47_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_STRUCT, ValaStruct));
		st = _tmp47_;
		_tmp48_ = st;
		_tmp49_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp48_);
		_tmp50_ = _tmp49_;
		_tmp51_ = vala_ccode_identifier_new (_tmp50_);
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
		_tmp54_ = _tmp53_;
		_vala_ccode_node_unref0 (_tmp52_);
		_g_free0 (_tmp50_);
		copy_call = _tmp54_;
		_tmp55_ = copy_call;
		_tmp56_ = cexpr;
		_tmp57_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp56_);
		_tmp58_ = _tmp57_;
		vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp58_);
		_vala_ccode_node_unref0 (_tmp58_);
		_tmp59_ = copy_call;
		_tmp60_ = ctemp;
		_tmp61_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp60_);
		_tmp62_ = _tmp61_;
		vala_ccode_function_call_add_argument (_tmp59_, (ValaCCodeExpression*) _tmp62_);
		_vala_ccode_node_unref0 (_tmp62_);
		_tmp63_ = st;
		if (!vala_get_ccode_has_copy_function (_tmp63_)) {
			ValaStruct* _tmp64_;
			_tmp64_ = st;
			vala_ccode_base_module_generate_struct_copy_function (self, _tmp64_);
		}
		_tmp66_ = self->gvalue_type;
		if (_tmp66_ != NULL) {
			ValaDataType* _tmp67_;
			ValaTypeSymbol* _tmp68_;
			ValaTypeSymbol* _tmp69_;
			ValaStruct* _tmp70_;
			_tmp67_ = type;
			_tmp68_ = vala_data_type_get_type_symbol (_tmp67_);
			_tmp69_ = _tmp68_;
			_tmp70_ = self->gvalue_type;
			_tmp65_ = _tmp69_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		} else {
			_tmp65_ = FALSE;
		}
		if (_tmp65_) {
			ValaCCodeFunctionCall* cisvalid = NULL;
			ValaCCodeIdentifier* _tmp71_;
			ValaCCodeIdentifier* _tmp72_;
			ValaCCodeFunctionCall* _tmp73_;
			ValaCCodeFunctionCall* _tmp74_;
			ValaCCodeFunctionCall* _tmp75_;
			ValaCCodeExpression* _tmp76_;
			ValaCCodeUnaryExpression* _tmp77_;
			ValaCCodeUnaryExpression* _tmp78_;
			ValaCCodeFunction* _tmp79_;
			ValaCCodeFunction* _tmp80_;
			ValaCCodeFunctionCall* _tmp81_;
			ValaCCodeFunctionCall* value_type_call = NULL;
			ValaCCodeIdentifier* _tmp82_;
			ValaCCodeIdentifier* _tmp83_;
			ValaCCodeFunctionCall* _tmp84_;
			ValaCCodeFunctionCall* _tmp85_;
			ValaCCodeFunctionCall* _tmp86_;
			ValaCCodeExpression* _tmp87_;
			ValaCCodeUnaryExpression* _tmp88_;
			ValaCCodeUnaryExpression* _tmp89_;
			ValaCCodeFunctionCall* init_call = NULL;
			ValaCCodeIdentifier* _tmp90_;
			ValaCCodeIdentifier* _tmp91_;
			ValaCCodeFunctionCall* _tmp92_;
			ValaCCodeFunctionCall* _tmp93_;
			ValaCCodeFunctionCall* _tmp94_;
			ValaCCodeExpression* _tmp95_;
			ValaCCodeUnaryExpression* _tmp96_;
			ValaCCodeUnaryExpression* _tmp97_;
			ValaCCodeFunctionCall* _tmp98_;
			ValaCCodeFunctionCall* _tmp99_;
			ValaCCodeFunction* _tmp100_;
			ValaCCodeFunction* _tmp101_;
			ValaCCodeFunctionCall* _tmp102_;
			ValaCCodeFunction* _tmp103_;
			ValaCCodeFunction* _tmp104_;
			ValaCCodeFunctionCall* _tmp105_;
			ValaCCodeFunction* _tmp106_;
			ValaCCodeFunction* _tmp107_;
			ValaTargetValue* _tmp108_;
			ValaTargetValue* _tmp109_;
			ValaSourceReference* _tmp110_;
			ValaSourceReference* _tmp111_;
			ValaCCodeFunction* _tmp112_;
			ValaCCodeFunction* _tmp113_;
			_tmp71_ = vala_ccode_identifier_new ("G_IS_VALUE");
			_tmp72_ = _tmp71_;
			_tmp73_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp72_);
			_tmp74_ = _tmp73_;
			_vala_ccode_node_unref0 (_tmp72_);
			cisvalid = _tmp74_;
			_tmp75_ = cisvalid;
			_tmp76_ = cexpr;
			_tmp77_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp76_);
			_tmp78_ = _tmp77_;
			vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp78_);
			_vala_ccode_node_unref0 (_tmp78_);
			_tmp79_ = vala_ccode_base_module_get_ccode (self);
			_tmp80_ = _tmp79_;
			_tmp81_ = cisvalid;
			vala_ccode_function_open_if (_tmp80_, (ValaCCodeExpression*) _tmp81_);
			_tmp82_ = vala_ccode_identifier_new ("G_VALUE_TYPE");
			_tmp83_ = _tmp82_;
			_tmp84_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp83_);
			_tmp85_ = _tmp84_;
			_vala_ccode_node_unref0 (_tmp83_);
			value_type_call = _tmp85_;
			_tmp86_ = value_type_call;
			_tmp87_ = cexpr;
			_tmp88_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp87_);
			_tmp89_ = _tmp88_;
			vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp89_);
			_vala_ccode_node_unref0 (_tmp89_);
			_tmp90_ = vala_ccode_identifier_new ("g_value_init");
			_tmp91_ = _tmp90_;
			_tmp92_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp91_);
			_tmp93_ = _tmp92_;
			_vala_ccode_node_unref0 (_tmp91_);
			init_call = _tmp93_;
			_tmp94_ = init_call;
			_tmp95_ = ctemp;
			_tmp96_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp95_);
			_tmp97_ = _tmp96_;
			vala_ccode_function_call_add_argument (_tmp94_, (ValaCCodeExpression*) _tmp97_);
			_vala_ccode_node_unref0 (_tmp97_);
			_tmp98_ = init_call;
			_tmp99_ = value_type_call;
			vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp99_);
			_tmp100_ = vala_ccode_base_module_get_ccode (self);
			_tmp101_ = _tmp100_;
			_tmp102_ = init_call;
			vala_ccode_function_add_expression (_tmp101_, (ValaCCodeExpression*) _tmp102_);
			_tmp103_ = vala_ccode_base_module_get_ccode (self);
			_tmp104_ = _tmp103_;
			_tmp105_ = copy_call;
			vala_ccode_function_add_expression (_tmp104_, (ValaCCodeExpression*) _tmp105_);
			_tmp106_ = vala_ccode_base_module_get_ccode (self);
			_tmp107_ = _tmp106_;
			vala_ccode_function_add_else (_tmp107_);
			_tmp108_ = temp_value;
			_tmp109_ = temp_cvalue;
			_tmp110_ = vala_code_node_get_source_reference (node);
			_tmp111_ = _tmp110_;
			vala_ccode_base_module_store_value (self, _tmp108_, _tmp109_, _tmp111_);
			_tmp112_ = vala_ccode_base_module_get_ccode (self);
			_tmp113_ = _tmp112_;
			vala_ccode_function_close (_tmp113_);
			_vala_ccode_node_unref0 (init_call);
			_vala_ccode_node_unref0 (value_type_call);
			_vala_ccode_node_unref0 (cisvalid);
		} else {
			ValaCCodeFunction* _tmp114_;
			ValaCCodeFunction* _tmp115_;
			ValaCCodeFunctionCall* _tmp116_;
			_tmp114_ = vala_ccode_base_module_get_ccode (self);
			_tmp115_ = _tmp114_;
			_tmp116_ = copy_call;
			vala_ccode_function_add_expression (_tmp115_, (ValaCCodeExpression*) _tmp116_);
		}
		result = temp_value;
		_vala_ccode_node_unref0 (copy_call);
		_vala_code_node_unref0 (st);
		_vala_code_node_unref0 (vt);
		_vala_ccode_node_unref0 (ctemp);
		_vala_target_value_unref0 (temp_cvalue);
		_vala_target_value_unref0 (_result_);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp117_ = type;
	_tmp118_ = vala_code_node_get_source_reference (node);
	_tmp119_ = _tmp118_;
	_tmp120_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp117_, _tmp119_, FALSE);
	dupexpr = _tmp120_;
	_tmp121_ = dupexpr;
	if (_tmp121_ == NULL) {
		vala_code_node_set_error (node, TRUE);
		result = NULL;
		_vala_ccode_node_unref0 (dupexpr);
		_vala_target_value_unref0 (_result_);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp125_ = dupexpr;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp125_, VALA_TYPE_CCODE_IDENTIFIER)) {
		ValaDataType* _tmp126_;
		_tmp126_ = type;
		_tmp124_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp126_, VALA_TYPE_ARRAY_TYPE);
	} else {
		_tmp124_ = FALSE;
	}
	if (_tmp124_) {
		ValaDataType* _tmp127_;
		_tmp127_ = type;
		_tmp123_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp127_, VALA_TYPE_GENERIC_TYPE);
	} else {
		_tmp123_ = FALSE;
	}
	if (_tmp123_) {
		ValaDataType* _tmp128_;
		_tmp128_ = type;
		_tmp122_ = !vala_is_ref_function_void (_tmp128_);
	} else {
		_tmp122_ = FALSE;
	}
	if (_tmp122_) {
		ValaCCodeIdentifier* dupid = NULL;
		ValaCCodeExpression* _tmp129_;
		ValaCCodeIdentifier* _tmp130_;
		gchar* dup0_func = NULL;
		ValaCCodeIdentifier* _tmp131_;
		const gchar* _tmp132_;
		const gchar* _tmp133_;
		gchar* _tmp134_;
		ValaCCodeIdentifier* _tmp135_;
		const gchar* _tmp136_;
		const gchar* _tmp137_;
		ValaCCodeFunctionCall* ccall = NULL;
		const gchar* _tmp173_;
		ValaCCodeIdentifier* _tmp174_;
		ValaCCodeIdentifier* _tmp175_;
		ValaCCodeFunctionCall* _tmp176_;
		ValaCCodeFunctionCall* _tmp177_;
		ValaCCodeFunctionCall* _tmp178_;
		ValaCCodeExpression* _tmp179_;
		ValaGLibValue* _tmp180_;
		ValaCCodeFunctionCall* _tmp181_;
		ValaCCodeExpression* _tmp182_;
		ValaGLibValue* _tmp183_;
		ValaDataType* _tmp184_;
		ValaDataType* _tmp185_;
		ValaGLibValue* _tmp186_;
		ValaTargetValue* _tmp187_;
		_tmp129_ = dupexpr;
		_tmp130_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp129_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
		dupid = _tmp130_;
		_tmp131_ = dupid;
		_tmp132_ = vala_ccode_identifier_get_name (_tmp131_);
		_tmp133_ = _tmp132_;
		_tmp134_ = g_strdup_printf ("_%s0", _tmp133_);
		dup0_func = _tmp134_;
		_tmp135_ = dupid;
		_tmp136_ = vala_ccode_identifier_get_name (_tmp135_);
		_tmp137_ = _tmp136_;
		if (g_strcmp0 (_tmp137_, "g_strdup") == 0) {
			ValaCCodeIdentifier* _tmp138_;
			const gchar* _tmp139_;
			const gchar* _tmp140_;
			gchar* _tmp141_;
			_tmp138_ = dupid;
			_tmp139_ = vala_ccode_identifier_get_name (_tmp138_);
			_tmp140_ = _tmp139_;
			_tmp141_ = g_strdup (_tmp140_);
			_g_free0 (dup0_func);
			dup0_func = _tmp141_;
		} else {
			const gchar* _tmp142_;
			_tmp142_ = dup0_func;
			if (vala_ccode_base_module_add_wrapper (self, _tmp142_)) {
				ValaCCodeFunction* dup0_fun = NULL;
				const gchar* _tmp143_;
				ValaDataType* _tmp144_;
				gchar* _tmp145_;
				gchar* _tmp146_;
				ValaCCodeFunction* _tmp147_;
				ValaCCodeFunction* _tmp148_;
				ValaCCodeFunction* _tmp149_;
				ValaDataType* _tmp150_;
				gchar* _tmp151_;
				gchar* _tmp152_;
				ValaCCodeParameter* _tmp153_;
				ValaCCodeParameter* _tmp154_;
				ValaCCodeFunction* _tmp155_;
				ValaCCodeFunction* _tmp156_;
				ValaCCodeFunctionCall* dup_call = NULL;
				ValaCCodeExpression* _tmp157_;
				ValaCCodeFunctionCall* _tmp158_;
				ValaCCodeFunctionCall* _tmp159_;
				ValaCCodeIdentifier* _tmp160_;
				ValaCCodeIdentifier* _tmp161_;
				ValaCCodeFunction* _tmp162_;
				ValaCCodeFunction* _tmp163_;
				ValaCCodeIdentifier* _tmp164_;
				ValaCCodeIdentifier* _tmp165_;
				ValaCCodeFunctionCall* _tmp166_;
				ValaCCodeConstant* _tmp167_;
				ValaCCodeConstant* _tmp168_;
				ValaCCodeConditionalExpression* _tmp169_;
				ValaCCodeConditionalExpression* _tmp170_;
				ValaCCodeFile* _tmp171_;
				ValaCCodeFunction* _tmp172_;
				_tmp143_ = dup0_func;
				_tmp144_ = self->pointer_type;
				_tmp145_ = vala_get_ccode_name ((ValaCodeNode*) _tmp144_);
				_tmp146_ = _tmp145_;
				_tmp147_ = vala_ccode_function_new (_tmp143_, _tmp146_);
				_tmp148_ = _tmp147_;
				_g_free0 (_tmp146_);
				dup0_fun = _tmp148_;
				_tmp149_ = dup0_fun;
				_tmp150_ = self->pointer_type;
				_tmp151_ = vala_get_ccode_name ((ValaCodeNode*) _tmp150_);
				_tmp152_ = _tmp151_;
				_tmp153_ = vala_ccode_parameter_new ("self", _tmp152_);
				_tmp154_ = _tmp153_;
				vala_ccode_function_add_parameter (_tmp149_, _tmp154_);
				_vala_ccode_node_unref0 (_tmp154_);
				_g_free0 (_tmp152_);
				_tmp155_ = dup0_fun;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp155_, VALA_CCODE_MODIFIERS_STATIC);
				_tmp156_ = dup0_fun;
				vala_ccode_base_module_push_function (self, _tmp156_);
				_tmp157_ = dupexpr;
				_tmp158_ = vala_ccode_function_call_new (_tmp157_);
				dup_call = _tmp158_;
				_tmp159_ = dup_call;
				_tmp160_ = vala_ccode_identifier_new ("self");
				_tmp161_ = _tmp160_;
				vala_ccode_function_call_add_argument (_tmp159_, (ValaCCodeExpression*) _tmp161_);
				_vala_ccode_node_unref0 (_tmp161_);
				_tmp162_ = vala_ccode_base_module_get_ccode (self);
				_tmp163_ = _tmp162_;
				_tmp164_ = vala_ccode_identifier_new ("self");
				_tmp165_ = _tmp164_;
				_tmp166_ = dup_call;
				_tmp167_ = vala_ccode_constant_new ("NULL");
				_tmp168_ = _tmp167_;
				_tmp169_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp165_, (ValaCCodeExpression*) _tmp166_, (ValaCCodeExpression*) _tmp168_);
				_tmp170_ = _tmp169_;
				vala_ccode_function_add_return (_tmp163_, (ValaCCodeExpression*) _tmp170_);
				_vala_ccode_node_unref0 (_tmp170_);
				_vala_ccode_node_unref0 (_tmp168_);
				_vala_ccode_node_unref0 (_tmp165_);
				vala_ccode_base_module_pop_function (self);
				_tmp171_ = self->cfile;
				_tmp172_ = dup0_fun;
				vala_ccode_file_add_function (_tmp171_, _tmp172_);
				_vala_ccode_node_unref0 (dup_call);
				_vala_ccode_node_unref0 (dup0_fun);
			}
		}
		_tmp173_ = dup0_func;
		_tmp174_ = vala_ccode_identifier_new (_tmp173_);
		_tmp175_ = _tmp174_;
		_tmp176_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp175_);
		_tmp177_ = _tmp176_;
		_vala_ccode_node_unref0 (_tmp175_);
		ccall = _tmp177_;
		_tmp178_ = ccall;
		_tmp179_ = cexpr;
		vala_ccode_function_call_add_argument (_tmp178_, _tmp179_);
		_tmp180_ = _result_;
		_tmp181_ = ccall;
		_tmp182_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp181_);
		_vala_ccode_node_unref0 (_tmp180_->cvalue);
		_tmp180_->cvalue = _tmp182_;
		_tmp183_ = _result_;
		_tmp184_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp183_);
		_tmp185_ = _tmp184_;
		vala_data_type_set_value_owned (_tmp185_, TRUE);
		_tmp186_ = _result_;
		_tmp187_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp186_, node, NULL);
		result = _tmp187_;
		_vala_ccode_node_unref0 (ccall);
		_g_free0 (dup0_func);
		_vala_ccode_node_unref0 (dupid);
		_vala_ccode_node_unref0 (dupexpr);
		_vala_target_value_unref0 (_result_);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp188_ = dupexpr;
	_tmp189_ = vala_ccode_function_call_new (_tmp188_);
	ccall = _tmp189_;
	_tmp192_ = type;
	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp192_, VALA_TYPE_ARRAY_TYPE)) {
		_tmp191_ = vala_get_non_null (value);
	} else {
		_tmp191_ = FALSE;
	}
	if (_tmp191_) {
		ValaDataType* _tmp193_;
		_tmp193_ = type;
		_tmp190_ = !vala_is_ref_function_void (_tmp193_);
	} else {
		_tmp190_ = FALSE;
	}
	if (_tmp190_) {
		ValaCCodeFunctionCall* _tmp194_;
		ValaCCodeExpression* _tmp195_;
		ValaDataType* _tmp196_;
		ValaCCodeFunctionCall* _tmp197_;
		ValaGLibValue* _tmp198_;
		ValaGLibValue* _tmp199_;
		ValaTargetValue* _tmp200_;
		ValaTargetValue* _tmp201_;
		_tmp194_ = ccall;
		_tmp195_ = cexpr;
		vala_ccode_function_call_add_argument (_tmp194_, _tmp195_);
		_tmp196_ = type;
		_tmp197_ = ccall;
		_tmp198_ = vala_glib_value_new (_tmp196_, (ValaCCodeExpression*) _tmp197_, FALSE);
		_tmp199_ = _tmp198_;
		_tmp200_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp199_, node, NULL);
		_tmp201_ = _tmp200_;
		_vala_target_value_unref0 (_tmp199_);
		result = _tmp201_;
		_vala_ccode_node_unref0 (ccall);
		_vala_ccode_node_unref0 (dupexpr);
		_vala_target_value_unref0 (_result_);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (type);
		return result;
	} else {
		ValaCCodeExpression* ccallarg = NULL;
		ValaCCodeBinaryExpression* cnotnull = NULL;
		ValaCCodeExpression* _tmp210_;
		ValaCCodeConstant* _tmp211_;
		ValaCCodeConstant* _tmp212_;
		ValaCCodeBinaryExpression* _tmp213_;
		ValaCCodeBinaryExpression* _tmp214_;
		ValaDataType* _tmp215_;
		ValaDataType* _tmp228_;
		ValaDataType* _tmp238_;
		ValaCCodeExpression* cifnull = NULL;
		ValaDataType* _tmp257_;
		ValaDataType* _tmp269_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (node, VALA_TYPE_SLICE_EXPRESSION)) {
			ValaCCodeExpression* _tmp202_;
			ValaCCodeExpression* _tmp203_;
			ValaExpression* _tmp204_;
			ValaExpression* _tmp205_;
			ValaCCodeExpression* _tmp206_;
			ValaCCodeExpression* _tmp207_;
			_tmp202_ = cexpr;
			_tmp203_ = _vala_ccode_node_ref0 (_tmp202_);
			_vala_ccode_node_unref0 (ccallarg);
			ccallarg = _tmp203_;
			_tmp204_ = vala_slice_expression_get_container (G_TYPE_CHECK_INSTANCE_CAST (node, VALA_TYPE_SLICE_EXPRESSION, ValaSliceExpression));
			_tmp205_ = _tmp204_;
			_tmp206_ = vala_get_cvalue (_tmp205_);
			_tmp207_ = _vala_ccode_node_ref0 (_tmp206_);
			_vala_ccode_node_unref0 (cexpr);
			cexpr = _tmp207_;
		} else {
			ValaCCodeExpression* _tmp208_;
			ValaCCodeExpression* _tmp209_;
			_tmp208_ = cexpr;
			_tmp209_ = _vala_ccode_node_ref0 (_tmp208_);
			_vala_ccode_node_unref0 (ccallarg);
			ccallarg = _tmp209_;
		}
		_tmp210_ = cexpr;
		_tmp211_ = vala_ccode_constant_new ("NULL");
		_tmp212_ = _tmp211_;
		_tmp213_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp210_, (ValaCCodeExpression*) _tmp212_);
		_tmp214_ = _tmp213_;
		_vala_ccode_node_unref0 (_tmp212_);
		cnotnull = _tmp214_;
		_tmp215_ = type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp215_, VALA_TYPE_GENERIC_TYPE)) {
			ValaCCodeBinaryExpression* cdupnotnull = NULL;
			ValaDataType* _tmp216_;
			ValaSourceReference* _tmp217_;
			ValaSourceReference* _tmp218_;
			ValaCCodeExpression* _tmp219_;
			ValaCCodeExpression* _tmp220_;
			ValaCCodeConstant* _tmp221_;
			ValaCCodeConstant* _tmp222_;
			ValaCCodeBinaryExpression* _tmp223_;
			ValaCCodeBinaryExpression* _tmp224_;
			ValaCCodeBinaryExpression* _tmp225_;
			ValaCCodeBinaryExpression* _tmp226_;
			ValaCCodeBinaryExpression* _tmp227_;
			_tmp216_ = type;
			_tmp217_ = vala_code_node_get_source_reference (node);
			_tmp218_ = _tmp217_;
			_tmp219_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp216_, _tmp218_, FALSE);
			_tmp220_ = _tmp219_;
			_tmp221_ = vala_ccode_constant_new ("NULL");
			_tmp222_ = _tmp221_;
			_tmp223_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp220_, (ValaCCodeExpression*) _tmp222_);
			_tmp224_ = _tmp223_;
			_vala_ccode_node_unref0 (_tmp222_);
			_vala_ccode_node_unref0 (_tmp220_);
			cdupnotnull = _tmp224_;
			_tmp225_ = cnotnull;
			_tmp226_ = cdupnotnull;
			_tmp227_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_AND, (ValaCCodeExpression*) _tmp225_, (ValaCCodeExpression*) _tmp226_);
			_vala_ccode_node_unref0 (cnotnull);
			cnotnull = _tmp227_;
			_vala_ccode_node_unref0 (cdupnotnull);
		}
		_tmp228_ = type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp228_, VALA_TYPE_GENERIC_TYPE)) {
			ValaCCodeFunctionCall* _tmp229_;
			ValaCCodeExpression* _tmp230_;
			ValaDataType* _tmp231_;
			gchar* _tmp232_;
			gchar* _tmp233_;
			ValaCCodeCastExpression* _tmp234_;
			ValaCCodeCastExpression* _tmp235_;
			_tmp229_ = ccall;
			_tmp230_ = ccallarg;
			_tmp231_ = self->pointer_type;
			_tmp232_ = vala_get_ccode_name ((ValaCodeNode*) _tmp231_);
			_tmp233_ = _tmp232_;
			_tmp234_ = vala_ccode_cast_expression_new (_tmp230_, _tmp233_);
			_tmp235_ = _tmp234_;
			vala_ccode_function_call_add_argument (_tmp229_, (ValaCCodeExpression*) _tmp235_);
			_vala_ccode_node_unref0 (_tmp235_);
			_g_free0 (_tmp233_);
		} else {
			ValaCCodeFunctionCall* _tmp236_;
			ValaCCodeExpression* _tmp237_;
			_tmp236_ = ccall;
			_tmp237_ = ccallarg;
			vala_ccode_function_call_add_argument (_tmp236_, _tmp237_);
		}
		_tmp238_ = type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp238_, VALA_TYPE_ARRAY_TYPE)) {
			ValaArrayType* array_type = NULL;
			ValaDataType* _tmp239_;
			ValaArrayType* _tmp240_;
			ValaCCodeFunctionCall* _tmp241_;
			ValaCCodeExpression* _tmp242_;
			ValaCCodeExpression* _tmp243_;
			ValaArrayType* _tmp244_;
			ValaDataType* _tmp245_;
			ValaDataType* _tmp246_;
			_tmp239_ = type;
			_tmp240_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp239_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array_type = _tmp240_;
			_tmp241_ = ccall;
			_tmp242_ = vala_ccode_base_module_get_array_length_cvalue (self, value, -1);
			_tmp243_ = _tmp242_;
			vala_ccode_function_call_add_argument (_tmp241_, _tmp243_);
			_vala_ccode_node_unref0 (_tmp243_);
			_tmp244_ = array_type;
			_tmp245_ = vala_array_type_get_element_type (_tmp244_);
			_tmp246_ = _tmp245_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp246_, VALA_TYPE_GENERIC_TYPE)) {
				ValaCCodeExpression* elem_dupexpr = NULL;
				ValaArrayType* _tmp247_;
				ValaDataType* _tmp248_;
				ValaDataType* _tmp249_;
				ValaSourceReference* _tmp250_;
				ValaSourceReference* _tmp251_;
				ValaCCodeExpression* _tmp252_;
				ValaCCodeExpression* _tmp253_;
				ValaCCodeFunctionCall* _tmp255_;
				ValaCCodeExpression* _tmp256_;
				_tmp247_ = array_type;
				_tmp248_ = vala_array_type_get_element_type (_tmp247_);
				_tmp249_ = _tmp248_;
				_tmp250_ = vala_code_node_get_source_reference (node);
				_tmp251_ = _tmp250_;
				_tmp252_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp249_, _tmp251_, FALSE);
				elem_dupexpr = _tmp252_;
				_tmp253_ = elem_dupexpr;
				if (_tmp253_ == NULL) {
					ValaCCodeConstant* _tmp254_;
					_tmp254_ = vala_ccode_constant_new ("NULL");
					_vala_ccode_node_unref0 (elem_dupexpr);
					elem_dupexpr = (ValaCCodeExpression*) _tmp254_;
				}
				_tmp255_ = ccall;
				_tmp256_ = elem_dupexpr;
				vala_ccode_function_call_add_argument (_tmp255_, _tmp256_);
				_vala_ccode_node_unref0 (elem_dupexpr);
			}
			_vala_code_node_unref0 (array_type);
		}
		_tmp257_ = type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp257_, VALA_TYPE_GENERIC_TYPE)) {
			ValaCCodeExpression* _tmp258_;
			ValaDataType* _tmp259_;
			gchar* _tmp260_;
			gchar* _tmp261_;
			ValaCCodeCastExpression* _tmp262_;
			_tmp258_ = cexpr;
			_tmp259_ = self->pointer_type;
			_tmp260_ = vala_get_ccode_name ((ValaCodeNode*) _tmp259_);
			_tmp261_ = _tmp260_;
			_tmp262_ = vala_ccode_cast_expression_new (_tmp258_, _tmp261_);
			_vala_ccode_node_unref0 (cifnull);
			cifnull = (ValaCCodeExpression*) _tmp262_;
			_g_free0 (_tmp261_);
		} else {
			ValaDataType* _tmp263_;
			ValaTypeSymbol* _tmp264_;
			ValaTypeSymbol* _tmp265_;
			_tmp263_ = type;
			_tmp264_ = vala_data_type_get_type_symbol (_tmp263_);
			_tmp265_ = _tmp264_;
			if (_tmp265_ != NULL) {
				ValaCCodeConstant* _tmp266_;
				_tmp266_ = vala_ccode_constant_new ("NULL");
				_vala_ccode_node_unref0 (cifnull);
				cifnull = (ValaCCodeExpression*) _tmp266_;
			} else {
				ValaCCodeExpression* _tmp267_;
				ValaCCodeExpression* _tmp268_;
				_tmp267_ = cexpr;
				_tmp268_ = _vala_ccode_node_ref0 (_tmp267_);
				_vala_ccode_node_unref0 (cifnull);
				cifnull = _tmp268_;
			}
		}
		_tmp269_ = type;
		if (vala_is_ref_function_void (_tmp269_)) {
			ValaCCodeFunction* _tmp270_;
			ValaCCodeFunction* _tmp271_;
			ValaCCodeBinaryExpression* _tmp272_;
			ValaCCodeFunction* _tmp273_;
			ValaCCodeFunction* _tmp274_;
			ValaCCodeFunctionCall* _tmp275_;
			ValaCCodeFunction* _tmp276_;
			ValaCCodeFunction* _tmp277_;
			_tmp270_ = vala_ccode_base_module_get_ccode (self);
			_tmp271_ = _tmp270_;
			_tmp272_ = cnotnull;
			vala_ccode_function_open_if (_tmp271_, (ValaCCodeExpression*) _tmp272_);
			_tmp273_ = vala_ccode_base_module_get_ccode (self);
			_tmp274_ = _tmp273_;
			_tmp275_ = ccall;
			vala_ccode_function_add_expression (_tmp274_, (ValaCCodeExpression*) _tmp275_);
			_tmp276_ = vala_ccode_base_module_get_ccode (self);
			_tmp277_ = _tmp276_;
			vala_ccode_function_close (_tmp277_);
		} else {
			ValaGLibValue* _tmp288_;
			gboolean _tmp289_;
			ValaTargetValue* _tmp290_;
			if (vala_get_non_null (value)) {
				ValaGLibValue* _tmp278_;
				ValaCCodeFunctionCall* _tmp279_;
				ValaCCodeExpression* _tmp280_;
				_tmp278_ = _result_;
				_tmp279_ = ccall;
				_tmp280_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp279_);
				_vala_ccode_node_unref0 (_tmp278_->cvalue);
				_tmp278_->cvalue = _tmp280_;
			} else {
				ValaCCodeConditionalExpression* ccond = NULL;
				ValaCCodeBinaryExpression* _tmp281_;
				ValaCCodeFunctionCall* _tmp282_;
				ValaCCodeExpression* _tmp283_;
				ValaCCodeConditionalExpression* _tmp284_;
				ValaGLibValue* _tmp285_;
				ValaCCodeConditionalExpression* _tmp286_;
				ValaCCodeExpression* _tmp287_;
				_tmp281_ = cnotnull;
				_tmp282_ = ccall;
				_tmp283_ = cifnull;
				_tmp284_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp281_, (ValaCCodeExpression*) _tmp282_, _tmp283_);
				ccond = _tmp284_;
				_tmp285_ = _result_;
				_tmp286_ = ccond;
				_tmp287_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp286_);
				_vala_ccode_node_unref0 (_tmp285_->cvalue);
				_tmp285_->cvalue = _tmp287_;
				_vala_ccode_node_unref0 (ccond);
			}
			_tmp288_ = _result_;
			_tmp289_ = TRUE;
			_tmp290_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp288_, node, &_tmp289_);
			_vala_target_value_unref0 (_result_);
			_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp290_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
		}
		result = (ValaTargetValue*) _result_;
		_vala_ccode_node_unref0 (cifnull);
		_vala_ccode_node_unref0 (cnotnull);
		_vala_ccode_node_unref0 (ccallarg);
		_vala_ccode_node_unref0 (ccall);
		_vala_ccode_node_unref0 (dupexpr);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (type);
		return result;
	}
}

ValaTargetValue*
vala_ccode_base_module_copy_value (ValaCCodeBaseModule* self,
                                   ValaTargetValue* value,
                                   ValaCodeNode* node)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->copy_value) {
		return _klass_->copy_value (self, value, node);
	}
	return NULL;
}

static void
vala_ccode_base_module_real_generate_class_declaration (ValaCCodeBaseModule* self,
                                                        ValaClass* cl,
                                                        ValaCCodeFile* decl_space)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gboolean _tmp2_;
	g_return_if_fail (cl != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) cl, _tmp1_);
	_g_free0 (_tmp1_);
	if (_tmp2_) {
		return;
	}
}

void
vala_ccode_base_module_generate_class_declaration (ValaCCodeBaseModule* self,
                                                   ValaClass* cl,
                                                   ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_class_declaration) {
		_klass_->generate_class_declaration (self, cl, decl_space);
	}
}

static void
vala_ccode_base_module_real_generate_interface_declaration (ValaCCodeBaseModule* self,
                                                            ValaInterface* iface,
                                                            ValaCCodeFile* decl_space)
{
	g_return_if_fail (iface != NULL);
	g_return_if_fail (decl_space != NULL);
}

void
vala_ccode_base_module_generate_interface_declaration (ValaCCodeBaseModule* self,
                                                       ValaInterface* iface,
                                                       ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_interface_declaration) {
		_klass_->generate_interface_declaration (self, iface, decl_space);
	}
}

static gboolean
vala_ccode_base_module_real_generate_method_declaration (ValaCCodeBaseModule* self,
                                                         ValaMethod* m,
                                                         ValaCCodeFile* decl_space)
{
	gboolean result;
	g_return_val_if_fail (m != NULL, FALSE);
	g_return_val_if_fail (decl_space != NULL, FALSE);
	result = FALSE;
	return result;
}

gboolean
vala_ccode_base_module_generate_method_declaration (ValaCCodeBaseModule* self,
                                                    ValaMethod* m,
                                                    ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, FALSE);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_method_declaration) {
		return _klass_->generate_method_declaration (self, m, decl_space);
	}
	return FALSE;
}

static void
vala_ccode_base_module_real_generate_error_domain_declaration (ValaCCodeBaseModule* self,
                                                               ValaErrorDomain* edomain,
                                                               ValaCCodeFile* decl_space)
{
	g_return_if_fail (edomain != NULL);
	g_return_if_fail (decl_space != NULL);
}

void
vala_ccode_base_module_generate_error_domain_declaration (ValaCCodeBaseModule* self,
                                                          ValaErrorDomain* edomain,
                                                          ValaCCodeFile* decl_space)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_error_domain_declaration) {
		_klass_->generate_error_domain_declaration (self, edomain, decl_space);
	}
}

void
vala_ccode_base_module_add_generic_type_arguments (ValaCCodeBaseModule* self,
                                                   ValaMethod* m,
                                                   ValaMap* arg_map,
                                                   ValaList* type_args,
                                                   ValaCodeNode* expr,
                                                   gboolean is_chainup,
                                                   ValaList* type_parameters)
{
	gint type_param_index = 0;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	g_return_if_fail (arg_map != NULL);
	g_return_if_fail (type_args != NULL);
	g_return_if_fail (expr != NULL);
	type_param_index = 0;
	{
		ValaList* _type_arg_list = NULL;
		gint _type_arg_size = 0;
		ValaList* _tmp0_;
		gint _tmp1_;
		gint _tmp2_;
		gint _type_arg_index = 0;
		_type_arg_list = type_args;
		_tmp0_ = _type_arg_list;
		_tmp1_ = vala_collection_get_size ((ValaCollection*) _tmp0_);
		_tmp2_ = _tmp1_;
		_type_arg_size = _tmp2_;
		_type_arg_index = -1;
		while (TRUE) {
			gint _tmp3_;
			gint _tmp4_;
			ValaDataType* type_arg = NULL;
			ValaList* _tmp5_;
			gpointer _tmp6_;
			ValaDataType* _tmp37_;
			ValaCCodeExpression* _tmp38_;
			ValaCCodeExpression* _tmp39_;
			ValaDataType* _tmp40_;
			gint _tmp62_;
			_type_arg_index = _type_arg_index + 1;
			_tmp3_ = _type_arg_index;
			_tmp4_ = _type_arg_size;
			if (!(_tmp3_ < _tmp4_)) {
				break;
			}
			_tmp5_ = _type_arg_list;
			_tmp6_ = vala_list_get (_tmp5_, _type_arg_index);
			type_arg = (ValaDataType*) _tmp6_;
			if (vala_get_ccode_simple_generics (m)) {
				ValaDataType* _tmp7_;
				gint _tmp13_;
				_tmp7_ = type_arg;
				if (vala_ccode_base_module_requires_copy (_tmp7_)) {
					ValaDataType* _tmp8_;
					ValaCCodeExpression* _tmp9_;
					ValaCCodeExpression* _tmp10_;
					_tmp8_ = type_arg;
					_tmp9_ = vala_ccode_base_module_get_destroy0_func_expression (self, _tmp8_, is_chainup);
					_tmp10_ = _tmp9_;
					vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (-1 + (0.1 * type_param_index)) + 0.03, FALSE)), _tmp10_);
					_vala_ccode_node_unref0 (_tmp10_);
				} else {
					ValaCCodeConstant* _tmp11_;
					ValaCCodeConstant* _tmp12_;
					_tmp11_ = vala_ccode_constant_new ("NULL");
					_tmp12_ = _tmp11_;
					vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (-1 + (0.1 * type_param_index)) + 0.03, FALSE)), (ValaCCodeExpression*) _tmp12_);
					_vala_ccode_node_unref0 (_tmp12_);
				}
				_tmp13_ = type_param_index;
				type_param_index = _tmp13_ + 1;
				_vala_code_node_unref0 (type_arg);
				continue;
			}
			if (type_parameters != NULL) {
				gchar* type_param_name = NULL;
				gpointer _tmp14_;
				ValaTypeParameter* _tmp15_;
				const gchar* _tmp16_;
				const gchar* _tmp17_;
				gchar* _tmp18_;
				gchar* _tmp19_;
				gchar* _tmp20_;
				gchar* _tmp21_;
				const gchar* _tmp22_;
				gchar* _tmp23_;
				gchar* _tmp24_;
				ValaCCodeConstant* _tmp25_;
				ValaCCodeConstant* _tmp26_;
				const gchar* _tmp27_;
				gchar* _tmp28_;
				gchar* _tmp29_;
				ValaCCodeConstant* _tmp30_;
				ValaCCodeConstant* _tmp31_;
				const gchar* _tmp32_;
				gchar* _tmp33_;
				gchar* _tmp34_;
				ValaCCodeConstant* _tmp35_;
				ValaCCodeConstant* _tmp36_;
				_tmp14_ = vala_list_get (type_parameters, type_param_index);
				_tmp15_ = (ValaTypeParameter*) _tmp14_;
				_tmp16_ = vala_symbol_get_name ((ValaSymbol*) _tmp15_);
				_tmp17_ = _tmp16_;
				_tmp18_ = g_ascii_strdown (_tmp17_, (gssize) -1);
				_tmp19_ = _tmp18_;
				_tmp20_ = string_replace (_tmp19_, "_", "-");
				_tmp21_ = _tmp20_;
				_g_free0 (_tmp19_);
				_vala_code_node_unref0 (_tmp15_);
				type_param_name = _tmp21_;
				_tmp22_ = type_param_name;
				_tmp23_ = g_strdup_printf ("\"%s-type\"", _tmp22_);
				_tmp24_ = _tmp23_;
				_tmp25_ = vala_ccode_constant_new (_tmp24_);
				_tmp26_ = _tmp25_;
				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.01, FALSE)), (ValaCCodeExpression*) _tmp26_);
				_vala_ccode_node_unref0 (_tmp26_);
				_g_free0 (_tmp24_);
				_tmp27_ = type_param_name;
				_tmp28_ = g_strdup_printf ("\"%s-dup-func\"", _tmp27_);
				_tmp29_ = _tmp28_;
				_tmp30_ = vala_ccode_constant_new (_tmp29_);
				_tmp31_ = _tmp30_;
				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.03, FALSE)), (ValaCCodeExpression*) _tmp31_);
				_vala_ccode_node_unref0 (_tmp31_);
				_g_free0 (_tmp29_);
				_tmp32_ = type_param_name;
				_tmp33_ = g_strdup_printf ("\"%s-destroy-func\"", _tmp32_);
				_tmp34_ = _tmp33_;
				_tmp35_ = vala_ccode_constant_new (_tmp34_);
				_tmp36_ = _tmp35_;
				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.05, FALSE)), (ValaCCodeExpression*) _tmp36_);
				_vala_ccode_node_unref0 (_tmp36_);
				_g_free0 (_tmp34_);
				_g_free0 (type_param_name);
			}
			_tmp37_ = type_arg;
			_tmp38_ = vala_ccode_base_module_get_type_id_expression (self, _tmp37_, is_chainup);
			_tmp39_ = _tmp38_;
			vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.02, FALSE)), _tmp39_);
			_vala_ccode_node_unref0 (_tmp39_);
			_tmp40_ = type_arg;
			if (vala_ccode_base_module_requires_copy (_tmp40_)) {
				ValaSourceReference* _tmp41_ = NULL;
				ValaDataType* _tmp42_;
				ValaSourceReference* _tmp43_;
				ValaSourceReference* _tmp44_;
				ValaCCodeExpression* dup_func = NULL;
				ValaDataType* _tmp47_;
				ValaCCodeExpression* _tmp48_;
				ValaCCodeExpression* _tmp49_;
				ValaCCodeExpression* _tmp50_;
				ValaCCodeCastExpression* _tmp51_;
				ValaCCodeCastExpression* _tmp52_;
				ValaDataType* _tmp53_;
				ValaCCodeExpression* _tmp54_;
				ValaCCodeExpression* _tmp55_;
				ValaCCodeCastExpression* _tmp56_;
				ValaCCodeCastExpression* _tmp57_;
				_tmp42_ = type_arg;
				_tmp43_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp42_);
				_tmp44_ = _tmp43_;
				_tmp41_ = _tmp44_;
				if (_tmp41_ == NULL) {
					ValaSourceReference* _tmp45_;
					ValaSourceReference* _tmp46_;
					_tmp45_ = vala_code_node_get_source_reference (expr);
					_tmp46_ = _tmp45_;
					_tmp41_ = _tmp46_;
				}
				_tmp47_ = type_arg;
				_tmp48_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp47_, _tmp41_, is_chainup);
				dup_func = _tmp48_;
				_tmp49_ = dup_func;
				if (_tmp49_ == NULL) {
					vala_code_node_set_error (expr, TRUE);
					_vala_ccode_node_unref0 (dup_func);
					_vala_code_node_unref0 (type_arg);
					return;
				}
				_tmp50_ = dup_func;
				_tmp51_ = vala_ccode_cast_expression_new (_tmp50_, "GBoxedCopyFunc");
				_tmp52_ = _tmp51_;
				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.04, FALSE)), (ValaCCodeExpression*) _tmp52_);
				_vala_ccode_node_unref0 (_tmp52_);
				_tmp53_ = type_arg;
				_tmp54_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp53_, is_chainup);
				_tmp55_ = _tmp54_;
				_tmp56_ = vala_ccode_cast_expression_new (_tmp55_, "GDestroyNotify");
				_tmp57_ = _tmp56_;
				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.06, FALSE)), (ValaCCodeExpression*) _tmp57_);
				_vala_ccode_node_unref0 (_tmp57_);
				_vala_ccode_node_unref0 (_tmp55_);
				_vala_ccode_node_unref0 (dup_func);
			} else {
				ValaCCodeConstant* _tmp58_;
				ValaCCodeConstant* _tmp59_;
				ValaCCodeConstant* _tmp60_;
				ValaCCodeConstant* _tmp61_;
				_tmp58_ = vala_ccode_constant_new ("NULL");
				_tmp59_ = _tmp58_;
				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.04, FALSE)), (ValaCCodeExpression*) _tmp59_);
				_vala_ccode_node_unref0 (_tmp59_);
				_tmp60_ = vala_ccode_constant_new ("NULL");
				_tmp61_ = _tmp60_;
				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.06, FALSE)), (ValaCCodeExpression*) _tmp61_);
				_vala_ccode_node_unref0 (_tmp61_);
			}
			_tmp62_ = type_param_index;
			type_param_index = _tmp62_ + 1;
			_vala_code_node_unref0 (type_arg);
		}
	}
}

static gpointer
_vala_map_ref0 (gpointer self)
{
	return self ? vala_map_ref (self) : NULL;
}

static void
vala_ccode_base_module_real_visit_object_creation_expression (ValaCodeVisitor* base,
                                                              ValaObjectCreationExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaCCodeExpression* instance = NULL;
	ValaCCodeExpression* creation_expr = NULL;
	ValaStruct* st = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	ValaStruct* _tmp6_;
	ValaSymbol* _tmp137_;
	ValaSymbol* _tmp138_;
	ValaLocalVariable* local = NULL;
	ValaCodeNode* _tmp657_;
	ValaCodeNode* _tmp658_;
	ValaLocalVariable* _tmp659_;
	gboolean _tmp660_ = FALSE;
	ValaLocalVariable* _tmp661_;
	ValaTargetValue* _tmp895_;
	ValaTargetValue* _tmp896_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	instance = NULL;
	creation_expr = NULL;
	_tmp0_ = vala_object_creation_expression_get_type_reference (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
	_tmp3_ = _tmp2_;
	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp3_) : NULL;
	_tmp6_ = st;
	if (_tmp6_ != NULL) {
		gboolean _tmp7_ = FALSE;
		ValaStruct* _tmp8_;
		_tmp8_ = st;
		if (!vala_struct_is_simple_type (_tmp8_)) {
			_tmp7_ = TRUE;
		} else {
			ValaStruct* _tmp9_;
			gchar* _tmp10_;
			gchar* _tmp11_;
			_tmp9_ = st;
			_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) _tmp9_);
			_tmp11_ = _tmp10_;
			_tmp7_ = g_strcmp0 (_tmp11_, "va_list") == 0;
			_g_free0 (_tmp11_);
		}
		_tmp5_ = _tmp7_;
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		_tmp4_ = TRUE;
	} else {
		ValaList* _tmp12_;
		gint _tmp13_;
		gint _tmp14_;
		_tmp12_ = vala_object_creation_expression_get_object_initializer (expr);
		_tmp13_ = vala_collection_get_size ((ValaCollection*) _tmp12_);
		_tmp14_ = _tmp13_;
		_tmp4_ = _tmp14_ > 0;
	}
	if (_tmp4_) {
		ValaLocalVariable* local = NULL;
		ValaCodeNode* _tmp15_;
		ValaCodeNode* _tmp16_;
		ValaLocalVariable* _tmp17_;
		ValaField* field = NULL;
		ValaCodeNode* _tmp18_;
		ValaCodeNode* _tmp19_;
		ValaField* _tmp20_;
		ValaAssignment* a = NULL;
		ValaCodeNode* _tmp21_;
		ValaCodeNode* _tmp22_;
		ValaAssignment* _tmp23_;
		gboolean _tmp24_ = FALSE;
		ValaLocalVariable* _tmp25_;
		_tmp15_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
		_tmp16_ = _tmp15_;
		_tmp17_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp16_) : NULL);
		local = _tmp17_;
		_tmp18_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
		_tmp19_ = _tmp18_;
		_tmp20_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_FIELD) ? ((ValaField*) _tmp19_) : NULL);
		field = _tmp20_;
		_tmp21_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
		_tmp22_ = _tmp21_;
		_tmp23_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_ASSIGNMENT) ? ((ValaAssignment*) _tmp22_) : NULL);
		a = _tmp23_;
		_tmp25_ = local;
		if (_tmp25_ != NULL) {
			ValaLocalVariable* _tmp26_;
			ValaLocalVariable* _tmp27_;
			ValaExpression* _tmp28_;
			ValaExpression* _tmp29_;
			_tmp26_ = local;
			_tmp27_ = local;
			_tmp28_ = vala_variable_get_initializer ((ValaVariable*) _tmp27_);
			_tmp29_ = _tmp28_;
			_tmp24_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp26_, _tmp29_);
		} else {
			_tmp24_ = FALSE;
		}
		if (_tmp24_) {
			ValaLocalVariable* _tmp30_;
			ValaTargetValue* _tmp31_;
			ValaTargetValue* _tmp32_;
			ValaCCodeExpression* _tmp33_;
			ValaCCodeExpression* _tmp34_;
			_tmp30_ = local;
			_tmp31_ = vala_ccode_base_module_get_local_cvalue (self, _tmp30_);
			_tmp32_ = _tmp31_;
			_tmp33_ = vala_get_cvalue_ (_tmp32_);
			_tmp34_ = _vala_ccode_node_ref0 (_tmp33_);
			_vala_ccode_node_unref0 (instance);
			instance = _tmp34_;
			_vala_target_value_unref0 (_tmp32_);
		} else {
			gboolean _tmp35_ = FALSE;
			ValaField* _tmp36_;
			_tmp36_ = field;
			if (_tmp36_ != NULL) {
				ValaField* _tmp37_;
				ValaField* _tmp38_;
				ValaExpression* _tmp39_;
				ValaExpression* _tmp40_;
				_tmp37_ = field;
				_tmp38_ = field;
				_tmp39_ = vala_variable_get_initializer ((ValaVariable*) _tmp38_);
				_tmp40_ = _tmp39_;
				_tmp35_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp37_, _tmp40_);
			} else {
				_tmp35_ = FALSE;
			}
			if (_tmp35_) {
				ValaTargetValue* thisparam = NULL;
				ValaField* _tmp41_;
				ValaSymbol* _tmp42_;
				ValaSymbol* _tmp43_;
				ValaTargetValue* _tmp44_;
				ValaField* _tmp45_;
				ValaTargetValue* _tmp46_;
				ValaTargetValue* _tmp47_;
				ValaTargetValue* _tmp48_;
				ValaCCodeExpression* _tmp49_;
				ValaCCodeExpression* _tmp50_;
				_tmp41_ = field;
				_tmp42_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp41_);
				_tmp43_ = _tmp42_;
				_tmp44_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
				thisparam = _tmp44_;
				_tmp45_ = field;
				_tmp46_ = thisparam;
				_tmp47_ = vala_ccode_base_module_get_field_cvalue (self, _tmp45_, _tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = vala_get_cvalue_ (_tmp48_);
				_tmp50_ = _vala_ccode_node_ref0 (_tmp49_);
				_vala_ccode_node_unref0 (instance);
				instance = _tmp50_;
				_vala_target_value_unref0 (_tmp48_);
				_vala_target_value_unref0 (thisparam);
			} else {
				gboolean _tmp51_ = FALSE;
				gboolean _tmp52_ = FALSE;
				ValaAssignment* _tmp53_;
				_tmp53_ = a;
				if (_tmp53_ != NULL) {
					ValaAssignment* _tmp54_;
					ValaExpression* _tmp55_;
					ValaExpression* _tmp56_;
					ValaSymbol* _tmp57_;
					ValaSymbol* _tmp58_;
					_tmp54_ = a;
					_tmp55_ = vala_assignment_get_left (_tmp54_);
					_tmp56_ = _tmp55_;
					_tmp57_ = vala_expression_get_symbol_reference (_tmp56_);
					_tmp58_ = _tmp57_;
					_tmp52_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp58_, VALA_TYPE_VARIABLE);
				} else {
					_tmp52_ = FALSE;
				}
				if (_tmp52_) {
					ValaAssignment* _tmp59_;
					ValaExpression* _tmp60_;
					ValaExpression* _tmp61_;
					ValaSymbol* _tmp62_;
					ValaSymbol* _tmp63_;
					ValaAssignment* _tmp64_;
					ValaExpression* _tmp65_;
					ValaExpression* _tmp66_;
					_tmp59_ = a;
					_tmp60_ = vala_assignment_get_left (_tmp59_);
					_tmp61_ = _tmp60_;
					_tmp62_ = vala_expression_get_symbol_reference (_tmp61_);
					_tmp63_ = _tmp62_;
					_tmp64_ = a;
					_tmp65_ = vala_assignment_get_right (_tmp64_);
					_tmp66_ = _tmp65_;
					_tmp51_ = vala_ccode_base_module_is_simple_struct_creation (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_VARIABLE, ValaVariable), _tmp66_);
				} else {
					_tmp51_ = FALSE;
				}
				if (_tmp51_) {
					ValaAssignment* _tmp67_;
					ValaExpression* _tmp68_;
					ValaExpression* _tmp69_;
					ValaDataType* _tmp70_;
					ValaDataType* _tmp71_;
					ValaAssignment* _tmp81_;
					ValaExpression* _tmp82_;
					ValaExpression* _tmp83_;
					ValaSymbol* _tmp84_;
					ValaSymbol* _tmp85_;
					ValaLocalVariable* _tmp86_;
					ValaAssignment* _tmp87_;
					ValaExpression* _tmp88_;
					ValaExpression* _tmp89_;
					ValaSymbol* _tmp90_;
					ValaSymbol* _tmp91_;
					ValaField* _tmp92_;
					ValaParameter* param = NULL;
					ValaAssignment* _tmp93_;
					ValaExpression* _tmp94_;
					ValaExpression* _tmp95_;
					ValaSymbol* _tmp96_;
					ValaSymbol* _tmp97_;
					ValaParameter* _tmp98_;
					ValaLocalVariable* _tmp99_;
					_tmp67_ = a;
					_tmp68_ = vala_assignment_get_left (_tmp67_);
					_tmp69_ = _tmp68_;
					_tmp70_ = vala_expression_get_value_type (_tmp69_);
					_tmp71_ = _tmp70_;
					if (vala_ccode_base_module_requires_destroy (_tmp71_)) {
						ValaCCodeFunction* _tmp72_;
						ValaCCodeFunction* _tmp73_;
						ValaAssignment* _tmp74_;
						ValaExpression* _tmp75_;
						ValaExpression* _tmp76_;
						ValaTargetValue* _tmp77_;
						ValaTargetValue* _tmp78_;
						ValaCCodeExpression* _tmp79_;
						ValaCCodeExpression* _tmp80_;
						_tmp72_ = vala_ccode_base_module_get_ccode (self);
						_tmp73_ = _tmp72_;
						_tmp74_ = a;
						_tmp75_ = vala_assignment_get_left (_tmp74_);
						_tmp76_ = _tmp75_;
						_tmp77_ = vala_expression_get_target_value (_tmp76_);
						_tmp78_ = _tmp77_;
						_tmp79_ = vala_ccode_base_module_destroy_value (self, _tmp78_, FALSE);
						_tmp80_ = _tmp79_;
						vala_ccode_function_add_expression (_tmp73_, _tmp80_);
						_vala_ccode_node_unref0 (_tmp80_);
					}
					_tmp81_ = a;
					_tmp82_ = vala_assignment_get_left (_tmp81_);
					_tmp83_ = _tmp82_;
					_tmp84_ = vala_expression_get_symbol_reference (_tmp83_);
					_tmp85_ = _tmp84_;
					_tmp86_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp85_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp85_) : NULL);
					_vala_code_node_unref0 (local);
					local = _tmp86_;
					_tmp87_ = a;
					_tmp88_ = vala_assignment_get_left (_tmp87_);
					_tmp89_ = _tmp88_;
					_tmp90_ = vala_expression_get_symbol_reference (_tmp89_);
					_tmp91_ = _tmp90_;
					_tmp92_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, VALA_TYPE_FIELD) ? ((ValaField*) _tmp91_) : NULL);
					_vala_code_node_unref0 (field);
					field = _tmp92_;
					_tmp93_ = a;
					_tmp94_ = vala_assignment_get_left (_tmp93_);
					_tmp95_ = _tmp94_;
					_tmp96_ = vala_expression_get_symbol_reference (_tmp95_);
					_tmp97_ = _tmp96_;
					_tmp98_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp97_, VALA_TYPE_PARAMETER) ? ((ValaParameter*) _tmp97_) : NULL);
					param = _tmp98_;
					_tmp99_ = local;
					if (_tmp99_ != NULL) {
						ValaLocalVariable* _tmp100_;
						ValaTargetValue* _tmp101_;
						ValaTargetValue* _tmp102_;
						ValaCCodeExpression* _tmp103_;
						ValaCCodeExpression* _tmp104_;
						_tmp100_ = local;
						_tmp101_ = vala_ccode_base_module_get_local_cvalue (self, _tmp100_);
						_tmp102_ = _tmp101_;
						_tmp103_ = vala_get_cvalue_ (_tmp102_);
						_tmp104_ = _vala_ccode_node_ref0 (_tmp103_);
						_vala_ccode_node_unref0 (instance);
						instance = _tmp104_;
						_vala_target_value_unref0 (_tmp102_);
					} else {
						ValaField* _tmp105_;
						_tmp105_ = field;
						if (_tmp105_ != NULL) {
							ValaExpression* inner = NULL;
							ValaAssignment* _tmp106_;
							ValaExpression* _tmp107_;
							ValaExpression* _tmp108_;
							ValaExpression* _tmp109_;
							ValaExpression* _tmp110_;
							ValaExpression* _tmp111_;
							ValaTargetValue* _tmp112_ = NULL;
							ValaExpression* _tmp113_;
							ValaField* _tmp117_;
							ValaTargetValue* _tmp118_;
							ValaTargetValue* _tmp119_;
							ValaCCodeExpression* _tmp120_;
							ValaCCodeExpression* _tmp121_;
							_tmp106_ = a;
							_tmp107_ = vala_assignment_get_left (_tmp106_);
							_tmp108_ = _tmp107_;
							_tmp109_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
							_tmp110_ = _tmp109_;
							_tmp111_ = _vala_code_node_ref0 (_tmp110_);
							inner = _tmp111_;
							_tmp113_ = inner;
							if (_tmp113_ != NULL) {
								ValaExpression* _tmp114_;
								ValaTargetValue* _tmp115_;
								ValaTargetValue* _tmp116_;
								_tmp114_ = inner;
								_tmp115_ = vala_expression_get_target_value (_tmp114_);
								_tmp116_ = _tmp115_;
								_tmp112_ = _tmp116_;
							} else {
								_tmp112_ = NULL;
							}
							_tmp117_ = field;
							_tmp118_ = vala_ccode_base_module_get_field_cvalue (self, _tmp117_, _tmp112_);
							_tmp119_ = _tmp118_;
							_tmp120_ = vala_get_cvalue_ (_tmp119_);
							_tmp121_ = _vala_ccode_node_ref0 (_tmp120_);
							_vala_ccode_node_unref0 (instance);
							instance = _tmp121_;
							_vala_target_value_unref0 (_tmp119_);
							_vala_code_node_unref0 (inner);
						} else {
							ValaParameter* _tmp122_;
							_tmp122_ = param;
							if (_tmp122_ != NULL) {
								ValaParameter* _tmp123_;
								ValaTargetValue* _tmp124_;
								ValaTargetValue* _tmp125_;
								ValaCCodeExpression* _tmp126_;
								ValaCCodeExpression* _tmp127_;
								_tmp123_ = param;
								_tmp124_ = vala_ccode_base_module_get_parameter_cvalue (self, _tmp123_);
								_tmp125_ = _tmp124_;
								_tmp126_ = vala_get_cvalue_ (_tmp125_);
								_tmp127_ = _vala_ccode_node_ref0 (_tmp126_);
								_vala_ccode_node_unref0 (instance);
								instance = _tmp127_;
								_vala_target_value_unref0 (_tmp125_);
							}
						}
					}
					_vala_code_node_unref0 (param);
				} else {
					gboolean _tmp128_;
					gboolean _tmp129_;
					_tmp128_ = vala_callable_expression_get_is_chainup ((ValaCallableExpression*) expr);
					_tmp129_ = _tmp128_;
					if (_tmp129_) {
						ValaCCodeExpression* _tmp130_;
						_tmp130_ = vala_ccode_base_module_get_this_cexpression (self);
						_vala_ccode_node_unref0 (instance);
						instance = _tmp130_;
					} else {
						ValaTargetValue* temp_value = NULL;
						ValaDataType* _tmp131_;
						ValaDataType* _tmp132_;
						ValaTargetValue* _tmp133_;
						ValaTargetValue* _tmp134_;
						ValaCCodeExpression* _tmp135_;
						ValaCCodeExpression* _tmp136_;
						_tmp131_ = vala_object_creation_expression_get_type_reference (expr);
						_tmp132_ = _tmp131_;
						_tmp133_ = vala_ccode_base_module_create_temp_value (self, _tmp132_, TRUE, (ValaCodeNode*) expr, NULL);
						temp_value = _tmp133_;
						_tmp134_ = temp_value;
						_tmp135_ = vala_get_cvalue_ (_tmp134_);
						_tmp136_ = _vala_ccode_node_ref0 (_tmp135_);
						_vala_ccode_node_unref0 (instance);
						instance = _tmp136_;
						_vala_target_value_unref0 (temp_value);
					}
				}
			}
		}
		_vala_code_node_unref0 (a);
		_vala_code_node_unref0 (field);
		_vala_code_node_unref0 (local);
	}
	_tmp137_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
	_tmp138_ = _tmp137_;
	if (_tmp138_ == NULL) {
		ValaDataType* _tmp139_;
		ValaDataType* _tmp140_;
		ValaTypeSymbol* _tmp141_;
		ValaTypeSymbol* _tmp142_;
		_tmp139_ = vala_object_creation_expression_get_type_reference (expr);
		_tmp140_ = _tmp139_;
		_tmp141_ = vala_data_type_get_type_symbol (_tmp140_);
		_tmp142_ = _tmp141_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp142_, VALA_TYPE_STRUCT)) {
			ValaCCodeFile* _tmp143_;
			ValaCCodeFunctionCall* creation_call = NULL;
			ValaCCodeIdentifier* _tmp144_;
			ValaCCodeIdentifier* _tmp145_;
			ValaCCodeFunctionCall* _tmp146_;
			ValaCCodeFunctionCall* _tmp147_;
			ValaCCodeFunctionCall* _tmp148_;
			ValaCCodeExpression* _tmp149_;
			ValaCCodeUnaryExpression* _tmp150_;
			ValaCCodeUnaryExpression* _tmp151_;
			ValaCCodeFunctionCall* _tmp152_;
			ValaCCodeConstant* _tmp153_;
			ValaCCodeConstant* _tmp154_;
			ValaCCodeFunctionCall* _tmp155_;
			ValaDataType* _tmp156_;
			ValaDataType* _tmp157_;
			gchar* _tmp158_;
			gchar* _tmp159_;
			gchar* _tmp160_;
			gchar* _tmp161_;
			ValaCCodeIdentifier* _tmp162_;
			ValaCCodeIdentifier* _tmp163_;
			ValaCCodeFunctionCall* _tmp164_;
			ValaCCodeExpression* _tmp165_;
			_tmp143_ = self->cfile;
			vala_ccode_file_add_include (_tmp143_, "string.h", FALSE);
			_tmp144_ = vala_ccode_identifier_new ("memset");
			_tmp145_ = _tmp144_;
			_tmp146_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp145_);
			_tmp147_ = _tmp146_;
			_vala_ccode_node_unref0 (_tmp145_);
			creation_call = _tmp147_;
			_tmp148_ = creation_call;
			_tmp149_ = instance;
			_tmp150_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp149_);
			_tmp151_ = _tmp150_;
			vala_ccode_function_call_add_argument (_tmp148_, (ValaCCodeExpression*) _tmp151_);
			_vala_ccode_node_unref0 (_tmp151_);
			_tmp152_ = creation_call;
			_tmp153_ = vala_ccode_constant_new ("0");
			_tmp154_ = _tmp153_;
			vala_ccode_function_call_add_argument (_tmp152_, (ValaCCodeExpression*) _tmp154_);
			_vala_ccode_node_unref0 (_tmp154_);
			_tmp155_ = creation_call;
			_tmp156_ = vala_object_creation_expression_get_type_reference (expr);
			_tmp157_ = _tmp156_;
			_tmp158_ = vala_get_ccode_name ((ValaCodeNode*) _tmp157_);
			_tmp159_ = _tmp158_;
			_tmp160_ = g_strdup_printf ("sizeof (%s)", _tmp159_);
			_tmp161_ = _tmp160_;
			_tmp162_ = vala_ccode_identifier_new (_tmp161_);
			_tmp163_ = _tmp162_;
			vala_ccode_function_call_add_argument (_tmp155_, (ValaCCodeExpression*) _tmp163_);
			_vala_ccode_node_unref0 (_tmp163_);
			_g_free0 (_tmp161_);
			_g_free0 (_tmp159_);
			_tmp164_ = creation_call;
			_tmp165_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp164_);
			_vala_ccode_node_unref0 (creation_expr);
			creation_expr = _tmp165_;
			_vala_ccode_node_unref0 (creation_call);
		}
	} else {
		gboolean _tmp166_ = FALSE;
		ValaDataType* _tmp167_;
		ValaDataType* _tmp168_;
		ValaTypeSymbol* _tmp169_;
		ValaTypeSymbol* _tmp170_;
		ValaClass* _tmp171_;
		_tmp167_ = vala_object_creation_expression_get_type_reference (expr);
		_tmp168_ = _tmp167_;
		_tmp169_ = vala_data_type_get_type_symbol (_tmp168_);
		_tmp170_ = _tmp169_;
		_tmp171_ = self->glist_type;
		if (_tmp170_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp171_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			_tmp166_ = TRUE;
		} else {
			ValaDataType* _tmp172_;
			ValaDataType* _tmp173_;
			ValaTypeSymbol* _tmp174_;
			ValaTypeSymbol* _tmp175_;
			ValaClass* _tmp176_;
			_tmp172_ = vala_object_creation_expression_get_type_reference (expr);
			_tmp173_ = _tmp172_;
			_tmp174_ = vala_data_type_get_type_symbol (_tmp173_);
			_tmp175_ = _tmp174_;
			_tmp176_ = self->gslist_type;
			_tmp166_ = _tmp175_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp176_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		}
		if (_tmp166_) {
			ValaCCodeConstant* _tmp177_;
			ValaCCodeConstant* _tmp178_;
			_tmp177_ = vala_ccode_constant_new ("NULL");
			_tmp178_ = _tmp177_;
			vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp178_);
			_vala_ccode_node_unref0 (_tmp178_);
		} else {
			ValaSymbol* _tmp179_;
			ValaSymbol* _tmp180_;
			_tmp179_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
			_tmp180_ = _tmp179_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp180_, VALA_TYPE_METHOD)) {
				ValaMethod* m = NULL;
				ValaSymbol* _tmp181_;
				ValaSymbol* _tmp182_;
				ValaMethod* _tmp183_;
				ValaList* params = NULL;
				ValaMethod* _tmp184_;
				ValaList* _tmp185_;
				ValaList* _tmp186_;
				ValaCCodeFunctionCall* creation_call = NULL;
				ValaCCodeFunctionCall* async_call = NULL;
				ValaCCodeFunctionCall* finish_call = NULL;
				ValaMethod* _tmp187_;
				ValaCCodeFile* _tmp188_;
				gboolean _tmp189_ = FALSE;
				gboolean _tmp190_ = FALSE;
				ValaMethod* _tmp191_;
				ValaClass* cl = NULL;
				ValaDataType* _tmp207_;
				ValaDataType* _tmp208_;
				ValaTypeSymbol* _tmp209_;
				ValaTypeSymbol* _tmp210_;
				ValaMethod* _tmp211_;
				gboolean _tmp230_ = FALSE;
				gboolean _tmp231_ = FALSE;
				ValaStruct* _tmp232_;
				ValaDataType* _tmp315_;
				ValaDataType* _tmp316_;
				ValaCCodeFile* _tmp317_;
				ValaHashMap* in_arg_map = NULL;
				GHashFunc _tmp318_;
				GEqualFunc _tmp319_;
				GEqualFunc _tmp320_;
				ValaHashMap* _tmp321_;
				ValaHashMap* out_arg_map = NULL;
				ValaHashMap* _tmp322_;
				ValaHashMap* _tmp323_;
				gboolean _tmp324_ = FALSE;
				ValaMethod* _tmp325_;
				gboolean _tmp353_ = FALSE;
				ValaClass* _tmp354_;
				gboolean ellipsis = FALSE;
				gint i = 0;
				gint arg_pos = 0;
				ValaIterator* params_it = NULL;
				ValaList* _tmp365_;
				ValaIterator* _tmp366_;
				ValaIterator* _tmp463_;
				gboolean _tmp473_;
				gboolean _tmp474_;
				gboolean _tmp501_ = FALSE;
				gboolean _tmp502_ = FALSE;
				ValaStruct* _tmp503_;
				gboolean _tmp510_ = FALSE;
				ValaMethod* _tmp511_;
				gboolean _tmp527_ = FALSE;
				gboolean _tmp528_ = FALSE;
				ValaMethod* _tmp529_;
				gint last_pos = 0;
				gint min_pos = 0;
				ValaCCodeFunctionCall* _tmp544_;
				ValaCCodeFunctionCall* _tmp545_;
				ValaCCodeFunctionCall* _tmp560_;
				gboolean _tmp575_;
				gboolean _tmp576_;
				ValaCCodeFunctionCall* _tmp600_;
				ValaCCodeExpression* _tmp601_;
				ValaMethod* _tmp602_;
				gchar* _tmp603_;
				gchar* _tmp604_;
				gboolean _tmp605_;
				_tmp181_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
				_tmp182_ = _tmp181_;
				_tmp183_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp182_, VALA_TYPE_METHOD, ValaMethod));
				m = _tmp183_;
				_tmp184_ = m;
				_tmp185_ = vala_callable_get_parameters ((ValaCallable*) _tmp184_);
				_tmp186_ = _vala_iterable_ref0 (_tmp185_);
				params = _tmp186_;
				async_call = NULL;
				finish_call = NULL;
				_tmp187_ = m;
				_tmp188_ = self->cfile;
				vala_ccode_base_module_generate_method_declaration (self, _tmp187_, _tmp188_);
				_tmp191_ = m;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp191_, VALA_TYPE_CREATION_METHOD)) {
					ValaMethod* _tmp192_;
					gboolean _tmp193_;
					gboolean _tmp194_;
					_tmp192_ = m;
					_tmp193_ = vala_symbol_get_external ((ValaSymbol*) _tmp192_);
					_tmp194_ = _tmp193_;
					_tmp190_ = !_tmp194_;
				} else {
					_tmp190_ = FALSE;
				}
				if (_tmp190_) {
					ValaMethod* _tmp195_;
					gboolean _tmp196_;
					gboolean _tmp197_;
					_tmp195_ = m;
					_tmp196_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp195_);
					_tmp197_ = _tmp196_;
					_tmp189_ = _tmp197_;
				} else {
					_tmp189_ = FALSE;
				}
				if (_tmp189_) {
					ValaCreationMethod* cm = NULL;
					ValaMethod* _tmp198_;
					ValaCreationMethod* _tmp199_;
					gboolean _tmp200_;
					gboolean _tmp201_;
					ValaCreationMethod* _tmp205_;
					_tmp198_ = m;
					cm = G_TYPE_CHECK_INSTANCE_CAST (_tmp198_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod);
					_tmp199_ = cm;
					_tmp200_ = vala_creation_method_get_chain_up (_tmp199_);
					_tmp201_ = _tmp200_;
					if (!_tmp201_) {
						ValaCreationMethod* _tmp202_;
						ValaSourceReference* _tmp203_;
						ValaSourceReference* _tmp204_;
						_tmp202_ = cm;
						_tmp203_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp202_);
						_tmp204_ = _tmp203_;
						vala_report_error (_tmp204_, "internal: Creation method implementation in binding must be chained up");
					}
					_tmp205_ = cm;
					if (vala_ccode_base_module_add_generated_external_symbol (self, (ValaSymbol*) _tmp205_)) {
						ValaCreationMethod* _tmp206_;
						_tmp206_ = cm;
						vala_code_visitor_visit_creation_method ((ValaCodeVisitor*) self, _tmp206_);
					}
				}
				_tmp207_ = vala_object_creation_expression_get_type_reference (expr);
				_tmp208_ = _tmp207_;
				_tmp209_ = vala_data_type_get_type_symbol (_tmp208_);
				_tmp210_ = _tmp209_;
				cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp210_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp210_) : NULL;
				_tmp211_ = m;
				if (!vala_get_ccode_has_new_function (_tmp211_)) {
					ValaMethod* _tmp212_;
					gchar* _tmp213_;
					gchar* _tmp214_;
					ValaCCodeIdentifier* _tmp215_;
					ValaCCodeIdentifier* _tmp216_;
					ValaCCodeFunctionCall* _tmp217_;
					ValaCCodeFunctionCall* _tmp218_;
					ValaClass* _tmp219_;
					gchar* _tmp220_;
					gchar* _tmp221_;
					ValaCCodeIdentifier* _tmp222_;
					ValaCCodeIdentifier* _tmp223_;
					_tmp212_ = m;
					_tmp213_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp212_);
					_tmp214_ = _tmp213_;
					_tmp215_ = vala_ccode_identifier_new (_tmp214_);
					_tmp216_ = _tmp215_;
					_tmp217_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp216_);
					_vala_ccode_node_unref0 (creation_call);
					creation_call = _tmp217_;
					_vala_ccode_node_unref0 (_tmp216_);
					_g_free0 (_tmp214_);
					_tmp218_ = creation_call;
					_tmp219_ = cl;
					_tmp220_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp219_);
					_tmp221_ = _tmp220_;
					_tmp222_ = vala_ccode_identifier_new (_tmp221_);
					_tmp223_ = _tmp222_;
					vala_ccode_function_call_add_argument (_tmp218_, (ValaCCodeExpression*) _tmp223_);
					_vala_ccode_node_unref0 (_tmp223_);
					_g_free0 (_tmp221_);
				} else {
					ValaMethod* _tmp224_;
					gchar* _tmp225_;
					gchar* _tmp226_;
					ValaCCodeIdentifier* _tmp227_;
					ValaCCodeIdentifier* _tmp228_;
					ValaCCodeFunctionCall* _tmp229_;
					_tmp224_ = m;
					_tmp225_ = vala_get_ccode_name ((ValaCodeNode*) _tmp224_);
					_tmp226_ = _tmp225_;
					_tmp227_ = vala_ccode_identifier_new (_tmp226_);
					_tmp228_ = _tmp227_;
					_tmp229_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp228_);
					_vala_ccode_node_unref0 (creation_call);
					creation_call = _tmp229_;
					_vala_ccode_node_unref0 (_tmp228_);
					_g_free0 (_tmp226_);
				}
				_tmp232_ = st;
				if (_tmp232_ != NULL) {
					ValaStruct* _tmp233_;
					_tmp233_ = st;
					_tmp231_ = !vala_struct_is_simple_type (_tmp233_);
				} else {
					_tmp231_ = FALSE;
				}
				if (_tmp231_) {
					ValaMethod* _tmp234_;
					_tmp234_ = m;
					_tmp230_ = !(vala_get_ccode_instance_pos ((ValaCodeNode*) _tmp234_) < ((gdouble) 0));
				} else {
					_tmp230_ = FALSE;
				}
				if (_tmp230_) {
					gboolean _tmp235_;
					gboolean _tmp236_;
					_tmp235_ = vala_callable_expression_get_is_chainup ((ValaCallableExpression*) expr);
					_tmp236_ = _tmp235_;
					if (_tmp236_) {
						ValaCCodeFunctionCall* _tmp237_;
						ValaCCodeExpression* _tmp238_;
						_tmp237_ = creation_call;
						_tmp238_ = instance;
						vala_ccode_function_call_add_argument (_tmp237_, _tmp238_);
					} else {
						ValaCCodeFunctionCall* _tmp239_;
						ValaCCodeExpression* _tmp240_;
						ValaCCodeUnaryExpression* _tmp241_;
						ValaCCodeUnaryExpression* _tmp242_;
						_tmp239_ = creation_call;
						_tmp240_ = instance;
						_tmp241_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp240_);
						_tmp242_ = _tmp241_;
						vala_ccode_function_call_add_argument (_tmp239_, (ValaCCodeExpression*) _tmp242_);
						_vala_ccode_node_unref0 (_tmp242_);
					}
				} else {
					gboolean _tmp243_ = FALSE;
					ValaStruct* _tmp244_;
					_tmp244_ = st;
					if (_tmp244_ != NULL) {
						ValaStruct* _tmp245_;
						gchar* _tmp246_;
						gchar* _tmp247_;
						_tmp245_ = st;
						_tmp246_ = vala_get_ccode_name ((ValaCodeNode*) _tmp245_);
						_tmp247_ = _tmp246_;
						_tmp243_ = g_strcmp0 (_tmp247_, "va_list") == 0;
						_g_free0 (_tmp247_);
					} else {
						_tmp243_ = FALSE;
					}
					if (_tmp243_) {
						ValaCCodeFunctionCall* _tmp248_;
						ValaCCodeExpression* _tmp249_;
						ValaMethod* _tmp250_;
						gchar* _tmp251_;
						gchar* _tmp252_;
						gboolean _tmp253_;
						_tmp248_ = creation_call;
						_tmp249_ = instance;
						vala_ccode_function_call_add_argument (_tmp248_, _tmp249_);
						_tmp250_ = m;
						_tmp251_ = vala_get_ccode_name ((ValaCodeNode*) _tmp250_);
						_tmp252_ = _tmp251_;
						_tmp253_ = g_strcmp0 (_tmp252_, "va_start") == 0;
						_g_free0 (_tmp252_);
						if (_tmp253_) {
							ValaClass* parent = NULL;
							ValaMethod* _tmp254_;
							ValaMethod* _tmp255_;
							ValaSymbol* _tmp256_;
							ValaSymbol* _tmp257_;
							gboolean _tmp258_ = FALSE;
							gboolean _tmp259_ = FALSE;
							gboolean _tmp260_;
							gboolean _tmp261_;
							_tmp254_ = vala_ccode_base_module_get_current_method (self);
							_tmp255_ = _tmp254_;
							_tmp256_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp255_);
							_tmp257_ = _tmp256_;
							parent = G_TYPE_CHECK_INSTANCE_TYPE (_tmp257_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp257_) : NULL;
							_tmp260_ = vala_ccode_base_module_get_in_creation_method (self);
							_tmp261_ = _tmp260_;
							if (_tmp261_) {
								ValaClass* _tmp262_;
								_tmp262_ = parent;
								_tmp259_ = _tmp262_ != NULL;
							} else {
								_tmp259_ = FALSE;
							}
							if (_tmp259_) {
								ValaClass* _tmp263_;
								gboolean _tmp264_;
								gboolean _tmp265_;
								_tmp263_ = parent;
								_tmp264_ = vala_class_get_is_compact (_tmp263_);
								_tmp265_ = _tmp264_;
								_tmp258_ = !_tmp265_;
							} else {
								_tmp258_ = FALSE;
							}
							if (_tmp258_) {
								ValaCCodeIdentifier* _tmp266_;
								ValaCCodeIdentifier* _tmp267_;
								ValaCCodeFunctionCall* _tmp268_;
								ValaCCodeFunctionCall* _tmp269_;
								ValaCCodeExpression* _tmp270_;
								ValaCCodeFunctionCall* _tmp271_;
								ValaCCodeIdentifier* _tmp272_;
								ValaCCodeIdentifier* _tmp273_;
								_tmp266_ = vala_ccode_identifier_new ("va_copy");
								_tmp267_ = _tmp266_;
								_tmp268_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp267_);
								_vala_ccode_node_unref0 (creation_call);
								creation_call = _tmp268_;
								_vala_ccode_node_unref0 (_tmp267_);
								_tmp269_ = creation_call;
								_tmp270_ = instance;
								vala_ccode_function_call_add_argument (_tmp269_, _tmp270_);
								_tmp271_ = creation_call;
								_tmp272_ = vala_ccode_identifier_new ("_vala_va_list");
								_tmp273_ = _tmp272_;
								vala_ccode_function_call_add_argument (_tmp271_, (ValaCCodeExpression*) _tmp273_);
								_vala_ccode_node_unref0 (_tmp273_);
							} else {
								ValaParameter* last_param = NULL;
								gint nParams = 0;
								ValaCCodeFunction* _tmp293_;
								ValaCCodeFunction* _tmp294_;
								gboolean _tmp295_ = FALSE;
								last_param = NULL;
								{
									ValaList* _param_list = NULL;
									ValaMethod* _tmp274_;
									ValaMethod* _tmp275_;
									ValaList* _tmp276_;
									gint _param_size = 0;
									ValaList* _tmp277_;
									gint _tmp278_;
									gint _tmp279_;
									gint _param_index = 0;
									_tmp274_ = vala_ccode_base_module_get_current_method (self);
									_tmp275_ = _tmp274_;
									_tmp276_ = vala_callable_get_parameters ((ValaCallable*) _tmp275_);
									_param_list = _tmp276_;
									_tmp277_ = _param_list;
									_tmp278_ = vala_collection_get_size ((ValaCollection*) _tmp277_);
									_tmp279_ = _tmp278_;
									_param_size = _tmp279_;
									_param_index = -1;
									while (TRUE) {
										gint _tmp280_;
										gint _tmp281_;
										ValaParameter* param = NULL;
										ValaList* _tmp282_;
										gpointer _tmp283_;
										gboolean _tmp284_ = FALSE;
										ValaParameter* _tmp285_;
										gboolean _tmp286_;
										gboolean _tmp287_;
										ValaParameter* _tmp291_;
										ValaParameter* _tmp292_;
										_param_index = _param_index + 1;
										_tmp280_ = _param_index;
										_tmp281_ = _param_size;
										if (!(_tmp280_ < _tmp281_)) {
											break;
										}
										_tmp282_ = _param_list;
										_tmp283_ = vala_list_get (_tmp282_, _param_index);
										param = (ValaParameter*) _tmp283_;
										_tmp285_ = param;
										_tmp286_ = vala_parameter_get_ellipsis (_tmp285_);
										_tmp287_ = _tmp286_;
										if (_tmp287_) {
											_tmp284_ = TRUE;
										} else {
											ValaParameter* _tmp288_;
											gboolean _tmp289_;
											gboolean _tmp290_;
											_tmp288_ = param;
											_tmp289_ = vala_parameter_get_params_array (_tmp288_);
											_tmp290_ = _tmp289_;
											_tmp284_ = _tmp290_;
										}
										if (_tmp284_) {
											_vala_code_node_unref0 (param);
											break;
										}
										_tmp291_ = param;
										_tmp292_ = _vala_code_node_ref0 (_tmp291_);
										_vala_code_node_unref0 (last_param);
										last_param = _tmp292_;
										_vala_code_node_unref0 (param);
									}
								}
								_tmp293_ = vala_ccode_base_module_get_ccode (self);
								_tmp294_ = _tmp293_;
								nParams = vala_ccode_function_get_parameter_count (_tmp294_);
								if (nParams == 0) {
									_tmp295_ = TRUE;
								} else {
									ValaCCodeFunction* _tmp296_;
									ValaCCodeFunction* _tmp297_;
									ValaCCodeParameter* _tmp298_;
									ValaCCodeParameter* _tmp299_;
									gboolean _tmp300_;
									gboolean _tmp301_;
									_tmp296_ = vala_ccode_base_module_get_ccode (self);
									_tmp297_ = _tmp296_;
									_tmp298_ = vala_ccode_function_get_parameter (_tmp297_, nParams - 1);
									_tmp299_ = _tmp298_;
									_tmp300_ = vala_ccode_parameter_get_ellipsis (_tmp299_);
									_tmp301_ = _tmp300_;
									_tmp295_ = !_tmp301_;
									_vala_ccode_node_unref0 (_tmp299_);
								}
								if (_tmp295_) {
									ValaSourceReference* _tmp302_;
									ValaSourceReference* _tmp303_;
									_tmp302_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
									_tmp303_ = _tmp302_;
									vala_report_error (_tmp303_, "`va_list' used in method with fixed args");
								} else {
									if (nParams == 1) {
										ValaSourceReference* _tmp304_;
										ValaSourceReference* _tmp305_;
										_tmp304_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
										_tmp305_ = _tmp304_;
										vala_report_error (_tmp305_, "`va_list' used in method without parameter");
									} else {
										ValaCCodeFunctionCall* _tmp306_;
										ValaCCodeFunction* _tmp307_;
										ValaCCodeFunction* _tmp308_;
										ValaCCodeParameter* _tmp309_;
										ValaCCodeParameter* _tmp310_;
										const gchar* _tmp311_;
										const gchar* _tmp312_;
										ValaCCodeIdentifier* _tmp313_;
										ValaCCodeIdentifier* _tmp314_;
										_tmp306_ = creation_call;
										_tmp307_ = vala_ccode_base_module_get_ccode (self);
										_tmp308_ = _tmp307_;
										_tmp309_ = vala_ccode_function_get_parameter (_tmp308_, nParams - 2);
										_tmp310_ = _tmp309_;
										_tmp311_ = vala_ccode_parameter_get_name (_tmp310_);
										_tmp312_ = _tmp311_;
										_tmp313_ = vala_ccode_identifier_new (_tmp312_);
										_tmp314_ = _tmp313_;
										vala_ccode_function_call_add_argument (_tmp306_, (ValaCCodeExpression*) _tmp314_);
										_vala_ccode_node_unref0 (_tmp314_);
										_vala_ccode_node_unref0 (_tmp310_);
									}
								}
								_vala_code_node_unref0 (last_param);
							}
						}
					}
				}
				_tmp315_ = vala_object_creation_expression_get_type_reference (expr);
				_tmp316_ = _tmp315_;
				_tmp317_ = self->cfile;
				vala_ccode_base_module_generate_type_declaration (self, _tmp316_, _tmp317_);
				_tmp318_ = g_direct_hash;
				_tmp319_ = g_direct_equal;
				_tmp320_ = g_direct_equal;
				_tmp321_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp318_, _tmp319_, _tmp320_);
				in_arg_map = _tmp321_;
				_tmp322_ = in_arg_map;
				_tmp323_ = _vala_map_ref0 (_tmp322_);
				out_arg_map = _tmp323_;
				_tmp325_ = m;
				if (_tmp325_ != NULL) {
					ValaMethod* _tmp326_;
					gboolean _tmp327_;
					gboolean _tmp328_;
					_tmp326_ = m;
					_tmp327_ = vala_method_get_coroutine (_tmp326_);
					_tmp328_ = _tmp327_;
					_tmp324_ = _tmp328_;
				} else {
					_tmp324_ = FALSE;
				}
				if (_tmp324_) {
					ValaMethod* _tmp329_;
					gchar* _tmp330_;
					gchar* _tmp331_;
					ValaCCodeIdentifier* _tmp332_;
					ValaCCodeIdentifier* _tmp333_;
					ValaCCodeFunctionCall* _tmp334_;
					ValaMethod* _tmp335_;
					gchar* _tmp336_;
					gchar* _tmp337_;
					ValaCCodeIdentifier* _tmp338_;
					ValaCCodeIdentifier* _tmp339_;
					ValaCCodeFunctionCall* _tmp340_;
					ValaCCodeFunctionCall* _tmp341_;
					ValaCCodeFunctionCall* _tmp342_;
					GHashFunc _tmp343_;
					GEqualFunc _tmp344_;
					GEqualFunc _tmp345_;
					ValaHashMap* _tmp346_;
					ValaHashMap* _tmp347_;
					ValaMethod* _tmp348_;
					ValaCCodeIdentifier* _tmp349_;
					ValaCCodeIdentifier* _tmp350_;
					ValaCCodeMemberAccess* _tmp351_;
					ValaCCodeMemberAccess* _tmp352_;
					_tmp329_ = m;
					_tmp330_ = vala_get_ccode_name ((ValaCodeNode*) _tmp329_);
					_tmp331_ = _tmp330_;
					_tmp332_ = vala_ccode_identifier_new (_tmp331_);
					_tmp333_ = _tmp332_;
					_tmp334_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp333_);
					_vala_ccode_node_unref0 (async_call);
					async_call = _tmp334_;
					_vala_ccode_node_unref0 (_tmp333_);
					_g_free0 (_tmp331_);
					_tmp335_ = m;
					_tmp336_ = vala_get_ccode_finish_name (_tmp335_);
					_tmp337_ = _tmp336_;
					_tmp338_ = vala_ccode_identifier_new (_tmp337_);
					_tmp339_ = _tmp338_;
					_tmp340_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp339_);
					_vala_ccode_node_unref0 (finish_call);
					finish_call = _tmp340_;
					_vala_ccode_node_unref0 (_tmp339_);
					_g_free0 (_tmp337_);
					_tmp341_ = finish_call;
					_tmp342_ = _vala_ccode_node_ref0 (_tmp341_);
					_vala_ccode_node_unref0 (creation_call);
					creation_call = _tmp342_;
					_tmp343_ = g_direct_hash;
					_tmp344_ = g_direct_equal;
					_tmp345_ = g_direct_equal;
					_tmp346_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp343_, _tmp344_, _tmp345_);
					_vala_map_unref0 (out_arg_map);
					out_arg_map = _tmp346_;
					_tmp347_ = out_arg_map;
					_tmp348_ = m;
					_tmp349_ = vala_ccode_identifier_new ("_data_");
					_tmp350_ = _tmp349_;
					_tmp351_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp350_, "_res_");
					_tmp352_ = _tmp351_;
					vala_map_set ((ValaMap*) _tmp347_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_async_result_pos (_tmp348_), FALSE)), (ValaCCodeExpression*) _tmp352_);
					_vala_ccode_node_unref0 (_tmp352_);
					_vala_ccode_node_unref0 (_tmp350_);
				}
				_tmp354_ = cl;
				if (_tmp354_ != NULL) {
					gboolean _tmp355_ = FALSE;
					ValaClass* _tmp356_;
					gboolean _tmp357_;
					gboolean _tmp358_;
					_tmp356_ = cl;
					_tmp357_ = vala_class_get_is_compact (_tmp356_);
					_tmp358_ = _tmp357_;
					if (!_tmp358_) {
						_tmp355_ = TRUE;
					} else {
						ValaMethod* _tmp359_;
						_tmp359_ = m;
						_tmp355_ = vala_get_ccode_simple_generics (_tmp359_);
					}
					_tmp353_ = _tmp355_;
				} else {
					_tmp353_ = FALSE;
				}
				if (_tmp353_) {
					ValaMethod* _tmp360_;
					ValaHashMap* _tmp361_;
					ValaDataType* _tmp362_;
					ValaDataType* _tmp363_;
					ValaList* _tmp364_;
					_tmp360_ = m;
					_tmp361_ = in_arg_map;
					_tmp362_ = vala_object_creation_expression_get_type_reference (expr);
					_tmp363_ = _tmp362_;
					_tmp364_ = vala_data_type_get_type_arguments (_tmp363_);
					vala_ccode_base_module_add_generic_type_arguments (self, _tmp360_, (ValaMap*) _tmp361_, _tmp364_, (ValaCodeNode*) expr, FALSE, NULL);
				}
				ellipsis = FALSE;
				i = 1;
				_tmp365_ = params;
				_tmp366_ = vala_iterable_iterator ((ValaIterable*) _tmp365_);
				params_it = _tmp366_;
				{
					ValaList* _arg_list = NULL;
					ValaList* _tmp367_;
					gint _arg_size = 0;
					ValaList* _tmp368_;
					gint _tmp369_;
					gint _tmp370_;
					gint _arg_index = 0;
					_tmp367_ = vala_callable_expression_get_argument_list ((ValaCallableExpression*) expr);
					_arg_list = _tmp367_;
					_tmp368_ = _arg_list;
					_tmp369_ = vala_collection_get_size ((ValaCollection*) _tmp368_);
					_tmp370_ = _tmp369_;
					_arg_size = _tmp370_;
					_arg_index = -1;
					while (TRUE) {
						gint _tmp371_;
						gint _tmp372_;
						ValaExpression* arg = NULL;
						ValaList* _tmp373_;
						gpointer _tmp374_;
						ValaCCodeExpression* cexpr = NULL;
						ValaExpression* _tmp375_;
						ValaCCodeExpression* _tmp376_;
						ValaCCodeExpression* _tmp377_;
						ValaHashMap* carg_map = NULL;
						ValaHashMap* _tmp378_;
						ValaHashMap* _tmp379_;
						ValaParameter* param = NULL;
						ValaIterator* _tmp380_;
						ValaHashMap* _tmp460_;
						ValaCCodeExpression* _tmp461_;
						gint _tmp462_;
						_arg_index = _arg_index + 1;
						_tmp371_ = _arg_index;
						_tmp372_ = _arg_size;
						if (!(_tmp371_ < _tmp372_)) {
							break;
						}
						_tmp373_ = _arg_list;
						_tmp374_ = vala_list_get (_tmp373_, _arg_index);
						arg = (ValaExpression*) _tmp374_;
						_tmp375_ = arg;
						_tmp376_ = vala_get_cvalue (_tmp375_);
						_tmp377_ = _vala_ccode_node_ref0 (_tmp376_);
						cexpr = _tmp377_;
						_tmp378_ = in_arg_map;
						_tmp379_ = _vala_map_ref0 (_tmp378_);
						carg_map = _tmp379_;
						param = NULL;
						_tmp380_ = params_it;
						if (vala_iterator_next (_tmp380_)) {
							ValaIterator* _tmp381_;
							gpointer _tmp382_;
							gboolean _tmp383_ = FALSE;
							ValaParameter* _tmp384_;
							gboolean _tmp385_;
							gboolean _tmp386_;
							ValaParameter* _tmp456_;
							_tmp381_ = params_it;
							_tmp382_ = vala_iterator_get (_tmp381_);
							_vala_code_node_unref0 (param);
							param = (ValaParameter*) _tmp382_;
							_tmp384_ = param;
							_tmp385_ = vala_parameter_get_ellipsis (_tmp384_);
							_tmp386_ = _tmp385_;
							if (_tmp386_) {
								_tmp383_ = TRUE;
							} else {
								ValaParameter* _tmp387_;
								gboolean _tmp388_;
								gboolean _tmp389_;
								_tmp387_ = param;
								_tmp388_ = vala_parameter_get_params_array (_tmp387_);
								_tmp389_ = _tmp388_;
								_tmp383_ = _tmp389_;
							}
							ellipsis = _tmp383_;
							if (!ellipsis) {
								ValaParameter* _tmp390_;
								ValaParameterDirection _tmp391_;
								ValaParameterDirection _tmp392_;
								gboolean _tmp395_ = FALSE;
								ValaParameter* _tmp396_;
								ValaParameter* _tmp440_;
								ValaExpression* _tmp441_;
								ValaCCodeExpression* _tmp442_;
								ValaCCodeExpression* _tmp443_;
								ValaParameter* _tmp444_;
								gchar* _tmp445_;
								gchar* _tmp446_;
								gboolean _tmp447_;
								_tmp390_ = param;
								_tmp391_ = vala_parameter_get_direction (_tmp390_);
								_tmp392_ = _tmp391_;
								if (_tmp392_ == VALA_PARAMETER_DIRECTION_OUT) {
									ValaHashMap* _tmp393_;
									ValaHashMap* _tmp394_;
									_tmp393_ = out_arg_map;
									_tmp394_ = _vala_map_ref0 (_tmp393_);
									_vala_map_unref0 (carg_map);
									carg_map = _tmp394_;
								}
								_tmp396_ = param;
								if (vala_get_ccode_array_length ((ValaCodeNode*) _tmp396_)) {
									ValaParameter* _tmp397_;
									ValaDataType* _tmp398_;
									ValaDataType* _tmp399_;
									_tmp397_ = param;
									_tmp398_ = vala_variable_get_variable_type ((ValaVariable*) _tmp397_);
									_tmp399_ = _tmp398_;
									_tmp395_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp399_, VALA_TYPE_ARRAY_TYPE);
								} else {
									_tmp395_ = FALSE;
								}
								if (_tmp395_) {
									ValaArrayType* array_type = NULL;
									ValaParameter* _tmp400_;
									ValaDataType* _tmp401_;
									ValaDataType* _tmp402_;
									ValaArrayType* _tmp403_;
									_tmp400_ = param;
									_tmp401_ = vala_variable_get_variable_type ((ValaVariable*) _tmp400_);
									_tmp402_ = _tmp401_;
									_tmp403_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp402_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
									array_type = _tmp403_;
									{
										gint dim = 0;
										dim = 1;
										{
											gboolean _tmp404_ = FALSE;
											_tmp404_ = TRUE;
											while (TRUE) {
												ValaArrayType* _tmp406_;
												gint _tmp407_;
												gint _tmp408_;
												ValaHashMap* _tmp409_;
												ValaParameter* _tmp410_;
												ValaExpression* _tmp411_;
												ValaCCodeExpression* _tmp412_;
												ValaCCodeExpression* _tmp413_;
												if (!_tmp404_) {
													gint _tmp405_;
													_tmp405_ = dim;
													dim = _tmp405_ + 1;
												}
												_tmp404_ = FALSE;
												_tmp406_ = array_type;
												_tmp407_ = vala_array_type_get_rank (_tmp406_);
												_tmp408_ = _tmp407_;
												if (!(dim <= _tmp408_)) {
													break;
												}
												_tmp409_ = carg_map;
												_tmp410_ = param;
												_tmp411_ = arg;
												_tmp412_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp411_, dim);
												_tmp413_ = _tmp412_;
												vala_map_set ((ValaMap*) _tmp409_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_array_length_pos ((ValaCodeNode*) _tmp410_) + (0.01 * dim), FALSE)), _tmp413_);
												_vala_ccode_node_unref0 (_tmp413_);
											}
										}
									}
									_vala_code_node_unref0 (array_type);
								} else {
									gboolean _tmp414_ = FALSE;
									ValaParameter* _tmp415_;
									_tmp415_ = param;
									if (vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp415_)) {
										ValaParameter* _tmp416_;
										ValaDataType* _tmp417_;
										ValaDataType* _tmp418_;
										_tmp416_ = param;
										_tmp417_ = vala_variable_get_variable_type ((ValaVariable*) _tmp416_);
										_tmp418_ = _tmp417_;
										_tmp414_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp418_, VALA_TYPE_DELEGATE_TYPE);
									} else {
										_tmp414_ = FALSE;
									}
									if (_tmp414_) {
										ValaDelegateType* deleg_type = NULL;
										ValaParameter* _tmp419_;
										ValaDataType* _tmp420_;
										ValaDataType* _tmp421_;
										ValaDelegateType* _tmp422_;
										ValaDelegate* d = NULL;
										ValaDelegateType* _tmp423_;
										ValaDelegate* _tmp424_;
										ValaDelegate* _tmp425_;
										ValaDelegate* _tmp426_;
										ValaDelegate* _tmp427_;
										gboolean _tmp428_;
										gboolean _tmp429_;
										_tmp419_ = param;
										_tmp420_ = vala_variable_get_variable_type ((ValaVariable*) _tmp419_);
										_tmp421_ = _tmp420_;
										_tmp422_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp421_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
										deleg_type = _tmp422_;
										_tmp423_ = deleg_type;
										_tmp424_ = vala_delegate_type_get_delegate_symbol (_tmp423_);
										_tmp425_ = _tmp424_;
										_tmp426_ = _vala_code_node_ref0 (_tmp425_);
										d = _tmp426_;
										_tmp427_ = d;
										_tmp428_ = vala_delegate_get_has_target (_tmp427_);
										_tmp429_ = _tmp428_;
										if (_tmp429_) {
											ValaCCodeExpression* delegate_target_destroy_notify = NULL;
											ValaCCodeExpression* delegate_target = NULL;
											ValaExpression* _tmp430_;
											ValaCCodeExpression* _tmp431_ = NULL;
											ValaCCodeExpression* _tmp432_;
											ValaHashMap* _tmp433_;
											ValaParameter* _tmp434_;
											ValaCCodeExpression* _tmp435_;
											ValaDelegateType* _tmp436_;
											_tmp430_ = arg;
											_tmp432_ = vala_ccode_base_module_get_delegate_target_cexpression (self, _tmp430_, &_tmp431_);
											_vala_ccode_node_unref0 (delegate_target_destroy_notify);
											delegate_target_destroy_notify = _tmp431_;
											delegate_target = _tmp432_;
											_tmp433_ = carg_map;
											_tmp434_ = param;
											_tmp435_ = delegate_target;
											vala_map_set ((ValaMap*) _tmp433_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp434_), FALSE)), _tmp435_);
											_tmp436_ = deleg_type;
											if (vala_data_type_is_disposable ((ValaDataType*) _tmp436_)) {
												ValaHashMap* _tmp437_;
												ValaParameter* _tmp438_;
												ValaCCodeExpression* _tmp439_;
												_tmp437_ = carg_map;
												_tmp438_ = param;
												_tmp439_ = delegate_target_destroy_notify;
												vala_map_set ((ValaMap*) _tmp437_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_destroy_notify_pos ((ValaCodeNode*) _tmp438_), FALSE)), _tmp439_);
											}
											_vala_ccode_node_unref0 (delegate_target);
											_vala_ccode_node_unref0 (delegate_target_destroy_notify);
										}
										_vala_code_node_unref0 (d);
										_vala_code_node_unref0 (deleg_type);
									}
								}
								_tmp440_ = param;
								_tmp441_ = arg;
								_tmp442_ = cexpr;
								_tmp443_ = vala_ccode_base_module_handle_struct_argument (self, _tmp440_, _tmp441_, _tmp442_);
								_vala_ccode_node_unref0 (cexpr);
								cexpr = _tmp443_;
								_tmp444_ = param;
								_tmp445_ = vala_get_ccode_type ((ValaCodeNode*) _tmp444_);
								_tmp446_ = _tmp445_;
								_tmp447_ = _tmp446_ != NULL;
								_g_free0 (_tmp446_);
								if (_tmp447_) {
									ValaCCodeExpression* _tmp448_;
									ValaParameter* _tmp449_;
									gchar* _tmp450_;
									gchar* _tmp451_;
									ValaCCodeCastExpression* _tmp452_;
									_tmp448_ = cexpr;
									_tmp449_ = param;
									_tmp450_ = vala_get_ccode_type ((ValaCodeNode*) _tmp449_);
									_tmp451_ = _tmp450_;
									_tmp452_ = vala_ccode_cast_expression_new (_tmp448_, _tmp451_);
									_vala_ccode_node_unref0 (cexpr);
									cexpr = (ValaCCodeExpression*) _tmp452_;
									_g_free0 (_tmp451_);
								}
							} else {
								ValaExpression* _tmp453_;
								ValaCCodeExpression* _tmp454_;
								ValaCCodeExpression* _tmp455_;
								_tmp453_ = arg;
								_tmp454_ = cexpr;
								_tmp455_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp453_, _tmp454_);
								_vala_ccode_node_unref0 (cexpr);
								cexpr = _tmp455_;
							}
							_tmp456_ = param;
							arg_pos = vala_ccode_base_module_get_param_pos (self, vala_get_ccode_pos (_tmp456_), ellipsis);
						} else {
							ValaExpression* _tmp457_;
							ValaCCodeExpression* _tmp458_;
							ValaCCodeExpression* _tmp459_;
							_tmp457_ = arg;
							_tmp458_ = cexpr;
							_tmp459_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp457_, _tmp458_);
							_vala_ccode_node_unref0 (cexpr);
							cexpr = _tmp459_;
							arg_pos = vala_ccode_base_module_get_param_pos (self, (gdouble) i, ellipsis);
						}
						_tmp460_ = carg_map;
						_tmp461_ = cexpr;
						vala_map_set ((ValaMap*) _tmp460_, (gpointer) ((gintptr) arg_pos), _tmp461_);
						_tmp462_ = i;
						i = _tmp462_ + 1;
						_vala_code_node_unref0 (param);
						_vala_map_unref0 (carg_map);
						_vala_ccode_node_unref0 (cexpr);
						_vala_code_node_unref0 (arg);
					}
				}
				_tmp463_ = params_it;
				if (vala_iterator_next (_tmp463_)) {
					ValaParameter* param = NULL;
					ValaIterator* _tmp464_;
					gpointer _tmp465_;
					gboolean _tmp466_ = FALSE;
					ValaParameter* _tmp467_;
					gboolean _tmp468_;
					gboolean _tmp469_;
					_tmp464_ = params_it;
					_tmp465_ = vala_iterator_get (_tmp464_);
					param = (ValaParameter*) _tmp465_;
					_tmp467_ = param;
					_tmp468_ = vala_parameter_get_params_array (_tmp467_);
					_tmp469_ = _tmp468_;
					if (_tmp469_) {
						_tmp466_ = TRUE;
					} else {
						ValaParameter* _tmp470_;
						gboolean _tmp471_;
						gboolean _tmp472_;
						_tmp470_ = param;
						_tmp471_ = vala_parameter_get_ellipsis (_tmp470_);
						_tmp472_ = _tmp471_;
						_tmp466_ = _tmp472_;
					}
					_vala_assert (_tmp466_, "param.params_array || param.ellipsis");
					ellipsis = TRUE;
					_vala_code_node_unref0 (param);
				}
				_tmp473_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) expr);
				_tmp474_ = _tmp473_;
				if (_tmp474_) {
					ValaHashMap* _tmp475_;
					ValaCCodeExpression* _tmp476_;
					ValaCCodeExpression* _tmp477_;
					ValaCCodeUnaryExpression* _tmp478_;
					ValaCCodeUnaryExpression* _tmp479_;
					vala_ccode_base_module_set_current_method_inner_error (self, TRUE);
					_tmp475_ = out_arg_map;
					_tmp476_ = vala_ccode_base_module_get_inner_error_cexpression (self);
					_tmp477_ = _tmp476_;
					_tmp478_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp477_);
					_tmp479_ = _tmp478_;
					vala_map_set ((ValaMap*) _tmp475_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, FALSE)), (ValaCCodeExpression*) _tmp479_);
					_vala_ccode_node_unref0 (_tmp479_);
					_vala_ccode_node_unref0 (_tmp477_);
				}
				if (ellipsis) {
					ValaMethod* _tmp480_;
					_tmp480_ = m;
					if (_tmp480_ == NULL) {
						ValaHashMap* _tmp481_;
						ValaCCodeConstant* _tmp482_;
						ValaCCodeConstant* _tmp483_;
						_tmp481_ = in_arg_map;
						_tmp482_ = vala_ccode_constant_new ("NULL");
						_tmp483_ = _tmp482_;
						vala_map_set ((ValaMap*) _tmp481_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, TRUE)), (ValaCCodeExpression*) _tmp483_);
						_vala_ccode_node_unref0 (_tmp483_);
					} else {
						gboolean _tmp484_ = FALSE;
						gboolean _tmp485_ = FALSE;
						ValaMethod* _tmp486_;
						gboolean _tmp487_;
						gboolean _tmp488_;
						_tmp486_ = m;
						_tmp487_ = vala_method_get_printf_format (_tmp486_);
						_tmp488_ = _tmp487_;
						if (!_tmp488_) {
							ValaMethod* _tmp489_;
							gboolean _tmp490_;
							gboolean _tmp491_;
							_tmp489_ = m;
							_tmp490_ = vala_method_get_scanf_format (_tmp489_);
							_tmp491_ = _tmp490_;
							_tmp485_ = !_tmp491_;
						} else {
							_tmp485_ = FALSE;
						}
						if (_tmp485_) {
							ValaMethod* _tmp492_;
							gchar* _tmp493_;
							gchar* _tmp494_;
							_tmp492_ = m;
							_tmp493_ = vala_get_ccode_sentinel (_tmp492_);
							_tmp494_ = _tmp493_;
							_tmp484_ = g_strcmp0 (_tmp494_, "") != 0;
							_g_free0 (_tmp494_);
						} else {
							_tmp484_ = FALSE;
						}
						if (_tmp484_) {
							ValaHashMap* _tmp495_;
							ValaMethod* _tmp496_;
							gchar* _tmp497_;
							gchar* _tmp498_;
							ValaCCodeConstant* _tmp499_;
							ValaCCodeConstant* _tmp500_;
							_tmp495_ = in_arg_map;
							_tmp496_ = m;
							_tmp497_ = vala_get_ccode_sentinel (_tmp496_);
							_tmp498_ = _tmp497_;
							_tmp499_ = vala_ccode_constant_new (_tmp498_);
							_tmp500_ = _tmp499_;
							vala_map_set ((ValaMap*) _tmp495_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, TRUE)), (ValaCCodeExpression*) _tmp500_);
							_vala_ccode_node_unref0 (_tmp500_);
							_g_free0 (_tmp498_);
						}
					}
				}
				_tmp503_ = st;
				if (_tmp503_ != NULL) {
					ValaStruct* _tmp504_;
					_tmp504_ = st;
					_tmp502_ = !vala_struct_is_simple_type (_tmp504_);
				} else {
					_tmp502_ = FALSE;
				}
				if (_tmp502_) {
					ValaMethod* _tmp505_;
					_tmp505_ = m;
					_tmp501_ = vala_get_ccode_instance_pos ((ValaCodeNode*) _tmp505_) < ((gdouble) 0);
				} else {
					_tmp501_ = FALSE;
				}
				if (_tmp501_) {
					ValaHashMap* _tmp506_;
					ValaCCodeExpression* _tmp507_;
					ValaCCodeUnaryExpression* _tmp508_;
					ValaCCodeUnaryExpression* _tmp509_;
					_tmp506_ = out_arg_map;
					_tmp507_ = instance;
					_tmp508_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp507_);
					_tmp509_ = _tmp508_;
					vala_map_set ((ValaMap*) _tmp506_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -3, FALSE)), (ValaCCodeExpression*) _tmp509_);
					_vala_ccode_node_unref0 (_tmp509_);
				}
				_tmp511_ = m;
				if (_tmp511_ != NULL) {
					ValaMethod* _tmp512_;
					gboolean _tmp513_;
					gboolean _tmp514_;
					_tmp512_ = m;
					_tmp513_ = vala_method_get_coroutine (_tmp512_);
					_tmp514_ = _tmp513_;
					_tmp510_ = _tmp514_;
				} else {
					_tmp510_ = FALSE;
				}
				if (_tmp510_) {
					gboolean _tmp515_;
					gboolean _tmp516_;
					_tmp515_ = vala_callable_expression_get_is_yield_expression ((ValaCallableExpression*) expr);
					_tmp516_ = _tmp515_;
					if (_tmp516_) {
						ValaHashMap* _tmp517_;
						ValaMethod* _tmp518_;
						ValaMethod* _tmp519_;
						gchar* _tmp520_;
						gchar* _tmp521_;
						ValaCCodeIdentifier* _tmp522_;
						ValaCCodeIdentifier* _tmp523_;
						ValaHashMap* _tmp524_;
						ValaCCodeIdentifier* _tmp525_;
						ValaCCodeIdentifier* _tmp526_;
						_tmp517_ = in_arg_map;
						_tmp518_ = vala_ccode_base_module_get_current_method (self);
						_tmp519_ = _tmp518_;
						_tmp520_ = vala_ccode_base_module_generate_ready_function (self, _tmp519_);
						_tmp521_ = _tmp520_;
						_tmp522_ = vala_ccode_identifier_new (_tmp521_);
						_tmp523_ = _tmp522_;
						vala_map_set ((ValaMap*) _tmp517_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, FALSE)), (ValaCCodeExpression*) _tmp523_);
						_vala_ccode_node_unref0 (_tmp523_);
						_g_free0 (_tmp521_);
						_tmp524_ = in_arg_map;
						_tmp525_ = vala_ccode_identifier_new ("_data_");
						_tmp526_ = _tmp525_;
						vala_map_set ((ValaMap*) _tmp524_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, -0.9, FALSE)), (ValaCCodeExpression*) _tmp526_);
						_vala_ccode_node_unref0 (_tmp526_);
					}
				}
				_tmp529_ = m;
				if (_tmp529_ != NULL) {
					ValaMethod* _tmp530_;
					gboolean _tmp531_;
					gboolean _tmp532_;
					_tmp530_ = m;
					_tmp531_ = vala_method_get_coroutine (_tmp530_);
					_tmp532_ = _tmp531_;
					_tmp528_ = _tmp532_;
				} else {
					_tmp528_ = FALSE;
				}
				if (_tmp528_) {
					ValaMethod* _tmp533_;
					ValaSymbol* _tmp534_;
					ValaSymbol* _tmp535_;
					_tmp533_ = m;
					_tmp534_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp533_);
					_tmp535_ = _tmp534_;
					_tmp527_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp535_, VALA_TYPE_CLASS);
				} else {
					_tmp527_ = FALSE;
				}
				if (_tmp527_) {
					ValaMethod* _tmp536_;
					_tmp536_ = m;
					if (vala_get_ccode_finish_instance (_tmp536_)) {
						ValaCCodeMemberAccess* tmp = NULL;
						ValaCCodeIdentifier* _tmp537_;
						ValaCCodeIdentifier* _tmp538_;
						ValaCCodeMemberAccess* _tmp539_;
						ValaCCodeMemberAccess* _tmp540_;
						ValaHashMap* _tmp541_;
						ValaMethod* _tmp542_;
						ValaCCodeMemberAccess* _tmp543_;
						_tmp537_ = vala_ccode_identifier_new ("_data_");
						_tmp538_ = _tmp537_;
						_tmp539_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp538_, "_source_object_");
						_tmp540_ = _tmp539_;
						_vala_ccode_node_unref0 (_tmp538_);
						tmp = _tmp540_;
						_tmp541_ = out_arg_map;
						_tmp542_ = m;
						_tmp543_ = tmp;
						vala_map_set ((ValaMap*) _tmp541_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_instance_pos ((ValaCodeNode*) _tmp542_), FALSE)), (ValaCCodeExpression*) _tmp543_);
						_vala_ccode_node_unref0 (tmp);
					}
				}
				_tmp544_ = async_call;
				_tmp545_ = creation_call;
				if (_tmp544_ != _tmp545_) {
					last_pos = -1;
					while (TRUE) {
						ValaCCodeFunctionCall* _tmp556_;
						ValaHashMap* _tmp557_;
						gpointer _tmp558_;
						ValaCCodeExpression* _tmp559_;
						min_pos = -1;
						{
							ValaIterator* _pos_it = NULL;
							ValaHashMap* _tmp546_;
							ValaSet* _tmp547_;
							ValaSet* _tmp548_;
							ValaIterator* _tmp549_;
							ValaIterator* _tmp550_;
							_tmp546_ = out_arg_map;
							_tmp547_ = vala_map_get_keys ((ValaMap*) _tmp546_);
							_tmp548_ = _tmp547_;
							_tmp549_ = vala_iterable_iterator ((ValaIterable*) _tmp548_);
							_tmp550_ = _tmp549_;
							_vala_iterable_unref0 (_tmp548_);
							_pos_it = _tmp550_;
							while (TRUE) {
								ValaIterator* _tmp551_;
								gint pos = 0;
								ValaIterator* _tmp552_;
								gpointer _tmp553_;
								gboolean _tmp554_ = FALSE;
								_tmp551_ = _pos_it;
								if (!vala_iterator_next (_tmp551_)) {
									break;
								}
								_tmp552_ = _pos_it;
								_tmp553_ = vala_iterator_get (_tmp552_);
								pos = (gint) ((gintptr) _tmp553_);
								if (pos > last_pos) {
									gboolean _tmp555_ = FALSE;
									if (min_pos == -1) {
										_tmp555_ = TRUE;
									} else {
										_tmp555_ = pos < min_pos;
									}
									_tmp554_ = _tmp555_;
								} else {
									_tmp554_ = FALSE;
								}
								if (_tmp554_) {
									min_pos = pos;
								}
							}
							_vala_iterator_unref0 (_pos_it);
						}
						if (min_pos == -1) {
							break;
						}
						_tmp556_ = creation_call;
						_tmp557_ = out_arg_map;
						_tmp558_ = vala_map_get ((ValaMap*) _tmp557_, (gpointer) ((gintptr) min_pos));
						_tmp559_ = (ValaCCodeExpression*) _tmp558_;
						vala_ccode_function_call_add_argument (_tmp556_, _tmp559_);
						_vala_ccode_node_unref0 (_tmp559_);
						last_pos = min_pos;
					}
				}
				_tmp560_ = async_call;
				if (_tmp560_ != NULL) {
					last_pos = -1;
					while (TRUE) {
						ValaCCodeFunctionCall* _tmp571_;
						ValaHashMap* _tmp572_;
						gpointer _tmp573_;
						ValaCCodeExpression* _tmp574_;
						min_pos = -1;
						{
							ValaIterator* _pos_it = NULL;
							ValaHashMap* _tmp561_;
							ValaSet* _tmp562_;
							ValaSet* _tmp563_;
							ValaIterator* _tmp564_;
							ValaIterator* _tmp565_;
							_tmp561_ = in_arg_map;
							_tmp562_ = vala_map_get_keys ((ValaMap*) _tmp561_);
							_tmp563_ = _tmp562_;
							_tmp564_ = vala_iterable_iterator ((ValaIterable*) _tmp563_);
							_tmp565_ = _tmp564_;
							_vala_iterable_unref0 (_tmp563_);
							_pos_it = _tmp565_;
							while (TRUE) {
								ValaIterator* _tmp566_;
								gint pos = 0;
								ValaIterator* _tmp567_;
								gpointer _tmp568_;
								gboolean _tmp569_ = FALSE;
								_tmp566_ = _pos_it;
								if (!vala_iterator_next (_tmp566_)) {
									break;
								}
								_tmp567_ = _pos_it;
								_tmp568_ = vala_iterator_get (_tmp567_);
								pos = (gint) ((gintptr) _tmp568_);
								if (pos > last_pos) {
									gboolean _tmp570_ = FALSE;
									if (min_pos == -1) {
										_tmp570_ = TRUE;
									} else {
										_tmp570_ = pos < min_pos;
									}
									_tmp569_ = _tmp570_;
								} else {
									_tmp569_ = FALSE;
								}
								if (_tmp569_) {
									min_pos = pos;
								}
							}
							_vala_iterator_unref0 (_pos_it);
						}
						if (min_pos == -1) {
							break;
						}
						_tmp571_ = async_call;
						_tmp572_ = in_arg_map;
						_tmp573_ = vala_map_get ((ValaMap*) _tmp572_, (gpointer) ((gintptr) min_pos));
						_tmp574_ = (ValaCCodeExpression*) _tmp573_;
						vala_ccode_function_call_add_argument (_tmp571_, _tmp574_);
						_vala_ccode_node_unref0 (_tmp574_);
						last_pos = min_pos;
					}
				}
				_tmp575_ = vala_callable_expression_get_is_yield_expression ((ValaCallableExpression*) expr);
				_tmp576_ = _tmp575_;
				if (_tmp576_) {
					gint state = 0;
					ValaCCodeBaseModuleEmitContext* _tmp577_;
					gint _tmp578_;
					ValaCCodeFunction* _tmp579_;
					ValaCCodeFunction* _tmp580_;
					ValaCCodeIdentifier* _tmp581_;
					ValaCCodeIdentifier* _tmp582_;
					ValaCCodeMemberAccess* _tmp583_;
					ValaCCodeMemberAccess* _tmp584_;
					gchar* _tmp585_;
					gchar* _tmp586_;
					ValaCCodeConstant* _tmp587_;
					ValaCCodeConstant* _tmp588_;
					ValaCCodeFunction* _tmp589_;
					ValaCCodeFunction* _tmp590_;
					ValaCCodeFunctionCall* _tmp591_;
					ValaCCodeFunction* _tmp592_;
					ValaCCodeFunction* _tmp593_;
					ValaCCodeConstant* _tmp594_;
					ValaCCodeConstant* _tmp595_;
					ValaCCodeFunction* _tmp596_;
					ValaCCodeFunction* _tmp597_;
					gchar* _tmp598_;
					gchar* _tmp599_;
					_tmp577_ = self->emit_context;
					_tmp578_ = _tmp577_->next_coroutine_state;
					_tmp577_->next_coroutine_state = _tmp578_ + 1;
					state = _tmp578_;
					_tmp579_ = vala_ccode_base_module_get_ccode (self);
					_tmp580_ = _tmp579_;
					_tmp581_ = vala_ccode_identifier_new ("_data_");
					_tmp582_ = _tmp581_;
					_tmp583_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp582_, "_state_");
					_tmp584_ = _tmp583_;
					_tmp585_ = g_strdup_printf ("%i", state);
					_tmp586_ = _tmp585_;
					_tmp587_ = vala_ccode_constant_new (_tmp586_);
					_tmp588_ = _tmp587_;
					vala_ccode_function_add_assignment (_tmp580_, (ValaCCodeExpression*) _tmp584_, (ValaCCodeExpression*) _tmp588_);
					_vala_ccode_node_unref0 (_tmp588_);
					_g_free0 (_tmp586_);
					_vala_ccode_node_unref0 (_tmp584_);
					_vala_ccode_node_unref0 (_tmp582_);
					_tmp589_ = vala_ccode_base_module_get_ccode (self);
					_tmp590_ = _tmp589_;
					_tmp591_ = async_call;
					vala_ccode_function_add_expression (_tmp590_, (ValaCCodeExpression*) _tmp591_);
					_tmp592_ = vala_ccode_base_module_get_ccode (self);
					_tmp593_ = _tmp592_;
					_tmp594_ = vala_ccode_constant_new ("FALSE");
					_tmp595_ = _tmp594_;
					vala_ccode_function_add_return (_tmp593_, (ValaCCodeExpression*) _tmp595_);
					_vala_ccode_node_unref0 (_tmp595_);
					_tmp596_ = vala_ccode_base_module_get_ccode (self);
					_tmp597_ = _tmp596_;
					_tmp598_ = g_strdup_printf ("_state_%d", state);
					_tmp599_ = _tmp598_;
					vala_ccode_function_add_label (_tmp597_, _tmp599_);
					_g_free0 (_tmp599_);
				}
				_tmp600_ = creation_call;
				_tmp601_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp600_);
				_vala_ccode_node_unref0 (creation_expr);
				creation_expr = _tmp601_;
				_tmp602_ = m;
				_tmp603_ = vala_get_ccode_type ((ValaCodeNode*) _tmp602_);
				_tmp604_ = _tmp603_;
				_tmp605_ = _tmp604_ != NULL;
				_g_free0 (_tmp604_);
				if (_tmp605_) {
					ValaCCodeExpression* _tmp606_;
					ValaDataType* _tmp607_;
					ValaDataType* _tmp608_;
					gchar* _tmp609_;
					gchar* _tmp610_;
					ValaCCodeCastExpression* _tmp611_;
					_tmp606_ = creation_expr;
					_tmp607_ = vala_object_creation_expression_get_type_reference (expr);
					_tmp608_ = _tmp607_;
					_tmp609_ = vala_get_ccode_name ((ValaCodeNode*) _tmp608_);
					_tmp610_ = _tmp609_;
					_tmp611_ = vala_ccode_cast_expression_new (_tmp606_, _tmp610_);
					_vala_ccode_node_unref0 (creation_expr);
					creation_expr = (ValaCCodeExpression*) _tmp611_;
					_g_free0 (_tmp610_);
				}
				_vala_iterator_unref0 (params_it);
				_vala_map_unref0 (out_arg_map);
				_vala_map_unref0 (in_arg_map);
				_vala_ccode_node_unref0 (finish_call);
				_vala_ccode_node_unref0 (async_call);
				_vala_ccode_node_unref0 (creation_call);
				_vala_iterable_unref0 (params);
				_vala_code_node_unref0 (m);
			} else {
				ValaSymbol* _tmp612_;
				ValaSymbol* _tmp613_;
				_tmp612_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
				_tmp613_ = _tmp612_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp613_, VALA_TYPE_ERROR_CODE)) {
					ValaErrorCode* ecode = NULL;
					ValaSymbol* _tmp614_;
					ValaSymbol* _tmp615_;
					ValaErrorCode* _tmp616_;
					ValaErrorDomain* edomain = NULL;
					ValaErrorCode* _tmp617_;
					ValaSymbol* _tmp618_;
					ValaSymbol* _tmp619_;
					ValaErrorDomain* _tmp620_;
					ValaCCodeFunctionCall* creation_call = NULL;
					ValaErrorDomain* _tmp621_;
					ValaCCodeFile* _tmp622_;
					ValaList* _tmp623_;
					gint _tmp624_;
					gint _tmp625_;
					ValaCCodeFunctionCall* _tmp632_;
					ValaErrorDomain* _tmp633_;
					gchar* _tmp634_;
					gchar* _tmp635_;
					ValaCCodeIdentifier* _tmp636_;
					ValaCCodeIdentifier* _tmp637_;
					ValaCCodeFunctionCall* _tmp638_;
					ValaErrorCode* _tmp639_;
					gchar* _tmp640_;
					gchar* _tmp641_;
					ValaCCodeIdentifier* _tmp642_;
					ValaCCodeIdentifier* _tmp643_;
					ValaCCodeFunctionCall* _tmp655_;
					ValaCCodeExpression* _tmp656_;
					_tmp614_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
					_tmp615_ = _tmp614_;
					_tmp616_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp615_, VALA_TYPE_ERROR_CODE, ValaErrorCode));
					ecode = _tmp616_;
					_tmp617_ = ecode;
					_tmp618_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp617_);
					_tmp619_ = _tmp618_;
					_tmp620_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp619_, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain));
					edomain = _tmp620_;
					_tmp621_ = edomain;
					_tmp622_ = self->cfile;
					vala_ccode_base_module_generate_error_domain_declaration (self, _tmp621_, _tmp622_);
					_tmp623_ = vala_callable_expression_get_argument_list ((ValaCallableExpression*) expr);
					_tmp624_ = vala_collection_get_size ((ValaCollection*) _tmp623_);
					_tmp625_ = _tmp624_;
					if (_tmp625_ == 1) {
						ValaCCodeIdentifier* _tmp626_;
						ValaCCodeIdentifier* _tmp627_;
						ValaCCodeFunctionCall* _tmp628_;
						_tmp626_ = vala_ccode_identifier_new ("g_error_new_literal");
						_tmp627_ = _tmp626_;
						_tmp628_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp627_);
						_vala_ccode_node_unref0 (creation_call);
						creation_call = _tmp628_;
						_vala_ccode_node_unref0 (_tmp627_);
					} else {
						ValaCCodeIdentifier* _tmp629_;
						ValaCCodeIdentifier* _tmp630_;
						ValaCCodeFunctionCall* _tmp631_;
						_tmp629_ = vala_ccode_identifier_new ("g_error_new");
						_tmp630_ = _tmp629_;
						_tmp631_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp630_);
						_vala_ccode_node_unref0 (creation_call);
						creation_call = _tmp631_;
						_vala_ccode_node_unref0 (_tmp630_);
					}
					_tmp632_ = creation_call;
					_tmp633_ = edomain;
					_tmp634_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp633_, NULL);
					_tmp635_ = _tmp634_;
					_tmp636_ = vala_ccode_identifier_new (_tmp635_);
					_tmp637_ = _tmp636_;
					vala_ccode_function_call_add_argument (_tmp632_, (ValaCCodeExpression*) _tmp637_);
					_vala_ccode_node_unref0 (_tmp637_);
					_g_free0 (_tmp635_);
					_tmp638_ = creation_call;
					_tmp639_ = ecode;
					_tmp640_ = vala_get_ccode_name ((ValaCodeNode*) _tmp639_);
					_tmp641_ = _tmp640_;
					_tmp642_ = vala_ccode_identifier_new (_tmp641_);
					_tmp643_ = _tmp642_;
					vala_ccode_function_call_add_argument (_tmp638_, (ValaCCodeExpression*) _tmp643_);
					_vala_ccode_node_unref0 (_tmp643_);
					_g_free0 (_tmp641_);
					{
						ValaList* _arg_list = NULL;
						ValaList* _tmp644_;
						gint _arg_size = 0;
						ValaList* _tmp645_;
						gint _tmp646_;
						gint _tmp647_;
						gint _arg_index = 0;
						_tmp644_ = vala_callable_expression_get_argument_list ((ValaCallableExpression*) expr);
						_arg_list = _tmp644_;
						_tmp645_ = _arg_list;
						_tmp646_ = vala_collection_get_size ((ValaCollection*) _tmp645_);
						_tmp647_ = _tmp646_;
						_arg_size = _tmp647_;
						_arg_index = -1;
						while (TRUE) {
							gint _tmp648_;
							gint _tmp649_;
							ValaExpression* arg = NULL;
							ValaList* _tmp650_;
							gpointer _tmp651_;
							ValaCCodeFunctionCall* _tmp652_;
							ValaExpression* _tmp653_;
							ValaCCodeExpression* _tmp654_;
							_arg_index = _arg_index + 1;
							_tmp648_ = _arg_index;
							_tmp649_ = _arg_size;
							if (!(_tmp648_ < _tmp649_)) {
								break;
							}
							_tmp650_ = _arg_list;
							_tmp651_ = vala_list_get (_tmp650_, _arg_index);
							arg = (ValaExpression*) _tmp651_;
							_tmp652_ = creation_call;
							_tmp653_ = arg;
							_tmp654_ = vala_get_cvalue (_tmp653_);
							vala_ccode_function_call_add_argument (_tmp652_, _tmp654_);
							_vala_code_node_unref0 (arg);
						}
					}
					_tmp655_ = creation_call;
					_tmp656_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp655_);
					_vala_ccode_node_unref0 (creation_expr);
					creation_expr = _tmp656_;
					_vala_ccode_node_unref0 (creation_call);
					_vala_code_node_unref0 (edomain);
					_vala_code_node_unref0 (ecode);
				} else {
					_vala_assert (FALSE, "false");
				}
			}
		}
	}
	_tmp657_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
	_tmp658_ = _tmp657_;
	_tmp659_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp658_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp658_) : NULL);
	local = _tmp659_;
	_tmp661_ = local;
	if (_tmp661_ != NULL) {
		ValaLocalVariable* _tmp662_;
		ValaLocalVariable* _tmp663_;
		ValaExpression* _tmp664_;
		ValaExpression* _tmp665_;
		_tmp662_ = local;
		_tmp663_ = local;
		_tmp664_ = vala_variable_get_initializer ((ValaVariable*) _tmp663_);
		_tmp665_ = _tmp664_;
		_tmp660_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp662_, _tmp665_);
	} else {
		_tmp660_ = FALSE;
	}
	if (_tmp660_) {
		ValaCCodeFunction* _tmp666_;
		ValaCCodeFunction* _tmp667_;
		ValaCCodeExpression* _tmp668_;
		ValaCCodeExpression* _tmp669_;
		_tmp666_ = vala_ccode_base_module_get_ccode (self);
		_tmp667_ = _tmp666_;
		_tmp668_ = creation_expr;
		vala_ccode_function_add_expression (_tmp667_, _tmp668_);
		_tmp669_ = instance;
		vala_set_cvalue ((ValaExpression*) expr, _tmp669_);
	} else {
		ValaCCodeExpression* _tmp670_;
		_tmp670_ = instance;
		if (_tmp670_ != NULL) {
			ValaDataType* _tmp671_;
			ValaDataType* _tmp672_;
			ValaTypeSymbol* _tmp673_;
			ValaTypeSymbol* _tmp674_;
			ValaCCodeExpression* _tmp798_;
			_tmp671_ = vala_object_creation_expression_get_type_reference (expr);
			_tmp672_ = _tmp671_;
			_tmp673_ = vala_data_type_get_type_symbol (_tmp672_);
			_tmp674_ = _tmp673_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp674_, VALA_TYPE_STRUCT)) {
				ValaCCodeFunction* _tmp675_;
				ValaCCodeFunction* _tmp676_;
				ValaCCodeExpression* _tmp677_;
				_tmp675_ = vala_ccode_base_module_get_ccode (self);
				_tmp676_ = _tmp675_;
				_tmp677_ = creation_expr;
				vala_ccode_function_add_expression (_tmp676_, _tmp677_);
			} else {
				ValaCCodeFunction* _tmp678_;
				ValaCCodeFunction* _tmp679_;
				ValaCCodeExpression* _tmp680_;
				ValaCCodeExpression* _tmp681_;
				_tmp678_ = vala_ccode_base_module_get_ccode (self);
				_tmp679_ = _tmp678_;
				_tmp680_ = instance;
				_tmp681_ = creation_expr;
				vala_ccode_function_add_assignment (_tmp679_, _tmp680_, _tmp681_);
			}
			{
				ValaList* _init_list = NULL;
				ValaList* _tmp682_;
				gint _init_size = 0;
				ValaList* _tmp683_;
				gint _tmp684_;
				gint _tmp685_;
				gint _init_index = 0;
				_tmp682_ = vala_object_creation_expression_get_object_initializer (expr);
				_init_list = _tmp682_;
				_tmp683_ = _init_list;
				_tmp684_ = vala_collection_get_size ((ValaCollection*) _tmp683_);
				_tmp685_ = _tmp684_;
				_init_size = _tmp685_;
				_init_index = -1;
				while (TRUE) {
					gint _tmp686_;
					gint _tmp687_;
					ValaMemberInitializer* init = NULL;
					ValaList* _tmp688_;
					gpointer _tmp689_;
					ValaMemberInitializer* _tmp690_;
					ValaSymbol* _tmp691_;
					ValaSymbol* _tmp692_;
					_init_index = _init_index + 1;
					_tmp686_ = _init_index;
					_tmp687_ = _init_size;
					if (!(_tmp686_ < _tmp687_)) {
						break;
					}
					_tmp688_ = _init_list;
					_tmp689_ = vala_list_get (_tmp688_, _init_index);
					init = (ValaMemberInitializer*) _tmp689_;
					_tmp690_ = init;
					_tmp691_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp690_);
					_tmp692_ = _tmp691_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp692_, VALA_TYPE_FIELD)) {
						ValaField* f = NULL;
						ValaMemberInitializer* _tmp693_;
						ValaSymbol* _tmp694_;
						ValaSymbol* _tmp695_;
						ValaField* _tmp696_;
						ValaDataType* instance_target_type = NULL;
						ValaField* _tmp697_;
						ValaSymbol* _tmp698_;
						ValaSymbol* _tmp699_;
						ValaDataType* _tmp700_;
						ValaTargetValue* typed_inst = NULL;
						ValaDataType* _tmp701_;
						ValaDataType* _tmp702_;
						ValaCCodeExpression* _tmp703_;
						ValaGLibValue* _tmp704_;
						ValaGLibValue* _tmp705_;
						ValaDataType* _tmp706_;
						ValaMemberInitializer* _tmp707_;
						ValaTargetValue* _tmp708_;
						ValaTargetValue* _tmp709_;
						ValaField* _tmp710_;
						ValaTargetValue* _tmp711_;
						ValaMemberInitializer* _tmp712_;
						ValaExpression* _tmp713_;
						ValaExpression* _tmp714_;
						ValaTargetValue* _tmp715_;
						ValaTargetValue* _tmp716_;
						ValaMemberInitializer* _tmp717_;
						ValaSourceReference* _tmp718_;
						ValaSourceReference* _tmp719_;
						ValaClass* cl = NULL;
						ValaField* _tmp720_;
						ValaSymbol* _tmp721_;
						ValaSymbol* _tmp722_;
						ValaClass* _tmp723_;
						ValaClass* _tmp724_;
						_tmp693_ = init;
						_tmp694_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp693_);
						_tmp695_ = _tmp694_;
						_tmp696_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp695_, VALA_TYPE_FIELD, ValaField));
						f = _tmp696_;
						_tmp697_ = f;
						_tmp698_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp697_);
						_tmp699_ = _tmp698_;
						_tmp700_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp699_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
						instance_target_type = _tmp700_;
						_tmp701_ = vala_object_creation_expression_get_type_reference (expr);
						_tmp702_ = _tmp701_;
						_tmp703_ = instance;
						_tmp704_ = vala_glib_value_new (_tmp702_, _tmp703_, TRUE);
						_tmp705_ = _tmp704_;
						_tmp706_ = instance_target_type;
						_tmp707_ = init;
						_tmp708_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp705_, _tmp706_, (ValaCodeNode*) _tmp707_);
						_tmp709_ = _tmp708_;
						_vala_target_value_unref0 (_tmp705_);
						typed_inst = _tmp709_;
						_tmp710_ = f;
						_tmp711_ = typed_inst;
						_tmp712_ = init;
						_tmp713_ = vala_member_initializer_get_initializer (_tmp712_);
						_tmp714_ = _tmp713_;
						_tmp715_ = vala_expression_get_target_value (_tmp714_);
						_tmp716_ = _tmp715_;
						_tmp717_ = init;
						_tmp718_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp717_);
						_tmp719_ = _tmp718_;
						vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp710_, _tmp711_, _tmp716_, _tmp719_);
						_tmp720_ = f;
						_tmp721_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp720_);
						_tmp722_ = _tmp721_;
						_tmp723_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp722_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp722_) : NULL);
						cl = _tmp723_;
						_tmp724_ = cl;
						if (_tmp724_ != NULL) {
							ValaClass* _tmp725_;
							ValaCCodeFile* _tmp726_;
							_tmp725_ = cl;
							_tmp726_ = self->cfile;
							vala_ccode_base_module_generate_class_struct_declaration (self, _tmp725_, _tmp726_);
						}
						_vala_code_node_unref0 (cl);
						_vala_target_value_unref0 (typed_inst);
						_vala_code_node_unref0 (instance_target_type);
						_vala_code_node_unref0 (f);
					} else {
						ValaMemberInitializer* _tmp727_;
						ValaSymbol* _tmp728_;
						ValaSymbol* _tmp729_;
						_tmp727_ = init;
						_tmp728_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp727_);
						_tmp729_ = _tmp728_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp729_, VALA_TYPE_PROPERTY)) {
							ValaProperty* p = NULL;
							ValaMemberInitializer* _tmp730_;
							ValaSymbol* _tmp731_;
							ValaSymbol* _tmp732_;
							ValaProperty* _tmp733_;
							ValaProperty* _tmp734_;
							ValaProperty* _tmp735_;
							ValaProperty* _tmp736_;
							ValaDataType* instance_target_type = NULL;
							ValaProperty* _tmp748_;
							ValaSymbol* _tmp749_;
							ValaSymbol* _tmp750_;
							ValaDataType* _tmp751_;
							ValaTargetValue* typed_inst = NULL;
							ValaDataType* _tmp752_;
							ValaDataType* _tmp753_;
							ValaCCodeExpression* _tmp754_;
							ValaGLibValue* _tmp755_;
							ValaGLibValue* _tmp756_;
							ValaDataType* _tmp757_;
							ValaMemberInitializer* _tmp758_;
							ValaTargetValue* _tmp759_;
							ValaTargetValue* _tmp760_;
							ValaMemberAccess* inst_ma = NULL;
							ValaMemberAccess* _tmp761_;
							ValaMemberAccess* _tmp762_;
							ValaTargetValue* _tmp763_;
							ValaProperty* _tmp764_;
							ValaMemberAccess* _tmp765_;
							ValaMemberInitializer* _tmp766_;
							ValaExpression* _tmp767_;
							ValaExpression* _tmp768_;
							ValaTargetValue* _tmp769_;
							ValaTargetValue* _tmp770_;
							gboolean _tmp771_ = FALSE;
							ValaProperty* _tmp772_;
							ValaPropertyAccessor* _tmp773_;
							ValaPropertyAccessor* _tmp774_;
							ValaDataType* _tmp775_;
							ValaDataType* _tmp776_;
							gboolean _tmp777_;
							gboolean _tmp778_;
							_tmp730_ = init;
							_tmp731_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp730_);
							_tmp732_ = _tmp731_;
							_tmp733_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp732_, VALA_TYPE_PROPERTY, ValaProperty));
							p = _tmp733_;
							_tmp734_ = p;
							_tmp735_ = vala_property_get_base_property (_tmp734_);
							_tmp736_ = _tmp735_;
							if (_tmp736_ != NULL) {
								ValaProperty* _tmp737_;
								ValaProperty* _tmp738_;
								ValaProperty* _tmp739_;
								ValaProperty* _tmp740_;
								_tmp737_ = p;
								_tmp738_ = vala_property_get_base_property (_tmp737_);
								_tmp739_ = _tmp738_;
								_tmp740_ = _vala_code_node_ref0 (_tmp739_);
								_vala_code_node_unref0 (p);
								p = _tmp740_;
							} else {
								ValaProperty* _tmp741_;
								ValaProperty* _tmp742_;
								ValaProperty* _tmp743_;
								_tmp741_ = p;
								_tmp742_ = vala_property_get_base_interface_property (_tmp741_);
								_tmp743_ = _tmp742_;
								if (_tmp743_ != NULL) {
									ValaProperty* _tmp744_;
									ValaProperty* _tmp745_;
									ValaProperty* _tmp746_;
									ValaProperty* _tmp747_;
									_tmp744_ = p;
									_tmp745_ = vala_property_get_base_interface_property (_tmp744_);
									_tmp746_ = _tmp745_;
									_tmp747_ = _vala_code_node_ref0 (_tmp746_);
									_vala_code_node_unref0 (p);
									p = _tmp747_;
								}
							}
							_tmp748_ = p;
							_tmp749_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp748_);
							_tmp750_ = _tmp749_;
							_tmp751_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp750_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
							instance_target_type = _tmp751_;
							_tmp752_ = vala_object_creation_expression_get_type_reference (expr);
							_tmp753_ = _tmp752_;
							_tmp754_ = instance;
							_tmp755_ = vala_glib_value_new (_tmp753_, _tmp754_, FALSE);
							_tmp756_ = _tmp755_;
							_tmp757_ = instance_target_type;
							_tmp758_ = init;
							_tmp759_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp756_, _tmp757_, (ValaCodeNode*) _tmp758_);
							_tmp760_ = _tmp759_;
							_vala_target_value_unref0 (_tmp756_);
							typed_inst = _tmp760_;
							_tmp761_ = vala_member_access_new_simple ("fake", NULL);
							inst_ma = _tmp761_;
							_tmp762_ = inst_ma;
							_tmp763_ = typed_inst;
							vala_expression_set_target_value ((ValaExpression*) _tmp762_, _tmp763_);
							_tmp764_ = p;
							_tmp765_ = inst_ma;
							_tmp766_ = init;
							_tmp767_ = vala_member_initializer_get_initializer (_tmp766_);
							_tmp768_ = _tmp767_;
							_tmp769_ = vala_expression_get_target_value (_tmp768_);
							_tmp770_ = _tmp769_;
							vala_ccode_base_module_store_property (self, _tmp764_, (ValaExpression*) _tmp765_, _tmp770_);
							_tmp772_ = p;
							_tmp773_ = vala_property_get_set_accessor (_tmp772_);
							_tmp774_ = _tmp773_;
							_tmp775_ = vala_property_accessor_get_value_type (_tmp774_);
							_tmp776_ = _tmp775_;
							_tmp777_ = vala_data_type_get_value_owned (_tmp776_);
							_tmp778_ = _tmp777_;
							if (!_tmp778_) {
								ValaMemberInitializer* _tmp779_;
								ValaExpression* _tmp780_;
								ValaExpression* _tmp781_;
								ValaTargetValue* _tmp782_;
								ValaTargetValue* _tmp783_;
								ValaDataType* _tmp784_;
								ValaDataType* _tmp785_;
								_tmp779_ = init;
								_tmp780_ = vala_member_initializer_get_initializer (_tmp779_);
								_tmp781_ = _tmp780_;
								_tmp782_ = vala_expression_get_target_value (_tmp781_);
								_tmp783_ = _tmp782_;
								_tmp784_ = vala_target_value_get_value_type (_tmp783_);
								_tmp785_ = _tmp784_;
								_tmp771_ = vala_ccode_base_module_requires_destroy (_tmp785_);
							} else {
								_tmp771_ = FALSE;
							}
							if (_tmp771_) {
								ValaCCodeFunction* _tmp786_;
								ValaCCodeFunction* _tmp787_;
								ValaMemberInitializer* _tmp788_;
								ValaExpression* _tmp789_;
								ValaExpression* _tmp790_;
								ValaTargetValue* _tmp791_;
								ValaTargetValue* _tmp792_;
								ValaCCodeExpression* _tmp793_;
								ValaCCodeExpression* _tmp794_;
								_tmp786_ = vala_ccode_base_module_get_ccode (self);
								_tmp787_ = _tmp786_;
								_tmp788_ = init;
								_tmp789_ = vala_member_initializer_get_initializer (_tmp788_);
								_tmp790_ = _tmp789_;
								_tmp791_ = vala_expression_get_target_value (_tmp790_);
								_tmp792_ = _tmp791_;
								_tmp793_ = vala_ccode_base_module_destroy_value (self, _tmp792_, FALSE);
								_tmp794_ = _tmp793_;
								vala_ccode_function_add_expression (_tmp787_, _tmp794_);
								_vala_ccode_node_unref0 (_tmp794_);
							}
							_vala_code_node_unref0 (inst_ma);
							_vala_target_value_unref0 (typed_inst);
							_vala_code_node_unref0 (instance_target_type);
							_vala_code_node_unref0 (p);
						} else {
							ValaMemberInitializer* _tmp795_;
							ValaSourceReference* _tmp796_;
							ValaSourceReference* _tmp797_;
							_tmp795_ = init;
							_tmp796_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp795_);
							_tmp797_ = _tmp796_;
							vala_report_error (_tmp797_, "internal: Unsupported symbol");
						}
					}
					_vala_code_node_unref0 (init);
				}
			}
			_tmp798_ = instance;
			vala_set_cvalue ((ValaExpression*) expr, _tmp798_);
		} else {
			ValaCCodeExpression* _tmp799_;
			_tmp799_ = creation_expr;
			if (_tmp799_ != NULL) {
				ValaTargetValue* temp_value = NULL;
				ValaDataType* _tmp800_;
				ValaDataType* _tmp801_;
				ValaTargetValue* _tmp802_;
				ValaCCodeFunction* _tmp803_;
				ValaCCodeFunction* _tmp804_;
				ValaTargetValue* _tmp805_;
				ValaCCodeExpression* _tmp806_;
				ValaCCodeExpression* _tmp807_;
				ValaTargetValue* _tmp808_;
				ValaClass* cl = NULL;
				ValaDataType* _tmp809_;
				ValaDataType* _tmp810_;
				ValaTypeSymbol* _tmp811_;
				ValaTypeSymbol* _tmp812_;
				ValaCodeContext* _tmp813_;
				gboolean _tmp814_;
				gboolean _tmp815_;
				gboolean _tmp860_ = FALSE;
				ValaClass* _tmp861_;
				_tmp800_ = vala_expression_get_value_type ((ValaExpression*) expr);
				_tmp801_ = _tmp800_;
				_tmp802_ = vala_ccode_base_module_create_temp_value (self, _tmp801_, FALSE, (ValaCodeNode*) expr, NULL);
				temp_value = _tmp802_;
				_tmp803_ = vala_ccode_base_module_get_ccode (self);
				_tmp804_ = _tmp803_;
				_tmp805_ = temp_value;
				_tmp806_ = vala_get_cvalue_ (_tmp805_);
				_tmp807_ = creation_expr;
				vala_ccode_function_add_assignment (_tmp804_, _tmp806_, _tmp807_);
				_tmp808_ = temp_value;
				vala_expression_set_target_value ((ValaExpression*) expr, _tmp808_);
				_tmp809_ = vala_object_creation_expression_get_type_reference (expr);
				_tmp810_ = _tmp809_;
				_tmp811_ = vala_data_type_get_type_symbol (_tmp810_);
				_tmp812_ = _tmp811_;
				cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp812_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp812_) : NULL;
				_tmp813_ = self->priv->_context;
				_tmp814_ = vala_code_context_get_gobject_tracing (_tmp813_);
				_tmp815_ = _tmp814_;
				if (_tmp815_) {
					gboolean _tmp816_ = FALSE;
					ValaClass* _tmp817_;
					_tmp817_ = cl;
					if (_tmp817_ != NULL) {
						ValaClass* _tmp818_;
						ValaTypeSymbol* _tmp819_;
						_tmp818_ = cl;
						_tmp819_ = self->gobject_type;
						_tmp816_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp818_, _tmp819_);
					} else {
						_tmp816_ = FALSE;
					}
					if (_tmp816_) {
						ValaCCodeFunction* _tmp820_;
						ValaCCodeFunction* _tmp821_;
						ValaTargetValue* _tmp822_;
						ValaTargetValue* _tmp823_;
						ValaCCodeExpression* _tmp824_;
						ValaCCodeFunctionCall* set_data_call = NULL;
						ValaCCodeIdentifier* _tmp825_;
						ValaCCodeIdentifier* _tmp826_;
						ValaCCodeFunctionCall* _tmp827_;
						ValaCCodeFunctionCall* _tmp828_;
						ValaCCodeFunctionCall* _tmp829_;
						ValaTargetValue* _tmp830_;
						ValaTargetValue* _tmp831_;
						ValaCCodeExpression* _tmp832_;
						ValaCCodeCastExpression* _tmp833_;
						ValaCCodeCastExpression* _tmp834_;
						ValaCCodeFunctionCall* _tmp835_;
						ValaCCodeConstant* _tmp836_;
						ValaCCodeConstant* _tmp837_;
						gchar* func_name = NULL;
						gchar* _tmp838_;
						ValaMethod* _tmp839_;
						ValaMethod* _tmp840_;
						ValaCCodeFunctionCall* _tmp849_;
						const gchar* _tmp850_;
						gchar* _tmp851_;
						gchar* _tmp852_;
						ValaCCodeConstant* _tmp853_;
						ValaCCodeConstant* _tmp854_;
						ValaCCodeFunction* _tmp855_;
						ValaCCodeFunction* _tmp856_;
						ValaCCodeFunctionCall* _tmp857_;
						ValaCCodeFunction* _tmp858_;
						ValaCCodeFunction* _tmp859_;
						_tmp820_ = vala_ccode_base_module_get_ccode (self);
						_tmp821_ = _tmp820_;
						_tmp822_ = vala_expression_get_target_value ((ValaExpression*) expr);
						_tmp823_ = _tmp822_;
						_tmp824_ = vala_get_cvalue_ (_tmp823_);
						vala_ccode_function_open_if (_tmp821_, _tmp824_);
						_tmp825_ = vala_ccode_identifier_new ("g_object_set_data");
						_tmp826_ = _tmp825_;
						_tmp827_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp826_);
						_tmp828_ = _tmp827_;
						_vala_ccode_node_unref0 (_tmp826_);
						set_data_call = _tmp828_;
						_tmp829_ = set_data_call;
						_tmp830_ = vala_expression_get_target_value ((ValaExpression*) expr);
						_tmp831_ = _tmp830_;
						_tmp832_ = vala_get_cvalue_ (_tmp831_);
						_tmp833_ = vala_ccode_cast_expression_new (_tmp832_, "GObject *");
						_tmp834_ = _tmp833_;
						vala_ccode_function_call_add_argument (_tmp829_, (ValaCCodeExpression*) _tmp834_);
						_vala_ccode_node_unref0 (_tmp834_);
						_tmp835_ = set_data_call;
						_tmp836_ = vala_ccode_constant_new ("\"vala-creation-function\"");
						_tmp837_ = _tmp836_;
						vala_ccode_function_call_add_argument (_tmp835_, (ValaCCodeExpression*) _tmp837_);
						_vala_ccode_node_unref0 (_tmp837_);
						_tmp838_ = g_strdup ("");
						func_name = _tmp838_;
						_tmp839_ = vala_ccode_base_module_get_current_method (self);
						_tmp840_ = _tmp839_;
						if (_tmp840_ != NULL) {
							ValaMethod* _tmp841_;
							ValaMethod* _tmp842_;
							gchar* _tmp843_;
							_tmp841_ = vala_ccode_base_module_get_current_method (self);
							_tmp842_ = _tmp841_;
							_tmp843_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp842_);
							_g_free0 (func_name);
							func_name = _tmp843_;
						} else {
							ValaPropertyAccessor* _tmp844_;
							ValaPropertyAccessor* _tmp845_;
							_tmp844_ = vala_ccode_base_module_get_current_property_accessor (self);
							_tmp845_ = _tmp844_;
							if (_tmp845_ != NULL) {
								ValaPropertyAccessor* _tmp846_;
								ValaPropertyAccessor* _tmp847_;
								gchar* _tmp848_;
								_tmp846_ = vala_ccode_base_module_get_current_property_accessor (self);
								_tmp847_ = _tmp846_;
								_tmp848_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp847_);
								_g_free0 (func_name);
								func_name = _tmp848_;
							}
						}
						_tmp849_ = set_data_call;
						_tmp850_ = func_name;
						_tmp851_ = g_strdup_printf ("\"%s\"", _tmp850_);
						_tmp852_ = _tmp851_;
						_tmp853_ = vala_ccode_constant_new (_tmp852_);
						_tmp854_ = _tmp853_;
						vala_ccode_function_call_add_argument (_tmp849_, (ValaCCodeExpression*) _tmp854_);
						_vala_ccode_node_unref0 (_tmp854_);
						_g_free0 (_tmp852_);
						_tmp855_ = vala_ccode_base_module_get_ccode (self);
						_tmp856_ = _tmp855_;
						_tmp857_ = set_data_call;
						vala_ccode_function_add_expression (_tmp856_, (ValaCCodeExpression*) _tmp857_);
						_tmp858_ = vala_ccode_base_module_get_ccode (self);
						_tmp859_ = _tmp858_;
						vala_ccode_function_close (_tmp859_);
						_g_free0 (func_name);
						_vala_ccode_node_unref0 (set_data_call);
					}
				}
				_tmp861_ = cl;
				if (_tmp861_ != NULL) {
					ValaClass* _tmp862_;
					ValaClass* _tmp863_;
					_tmp862_ = cl;
					_tmp863_ = self->garray_type;
					_tmp860_ = _tmp862_ == _tmp863_;
				} else {
					_tmp860_ = FALSE;
				}
				if (_tmp860_) {
					ValaDataType* type_arg = NULL;
					ValaDataType* _tmp864_;
					ValaDataType* _tmp865_;
					ValaList* _tmp866_;
					gpointer _tmp867_;
					ValaDataType* _tmp868_;
					_tmp864_ = vala_object_creation_expression_get_type_reference (expr);
					_tmp865_ = _tmp864_;
					_tmp866_ = vala_data_type_get_type_arguments (_tmp865_);
					_tmp867_ = vala_list_get (_tmp866_, 0);
					type_arg = (ValaDataType*) _tmp867_;
					_tmp868_ = type_arg;
					if (vala_ccode_base_module_requires_destroy (_tmp868_)) {
						ValaCCodeFunctionCall* clear_func = NULL;
						ValaCCodeIdentifier* _tmp869_;
						ValaCCodeIdentifier* _tmp870_;
						ValaCCodeFunctionCall* _tmp871_;
						ValaCCodeFunctionCall* _tmp872_;
						ValaCCodeFunctionCall* _tmp873_;
						ValaTargetValue* _tmp874_;
						ValaTargetValue* _tmp875_;
						ValaCCodeExpression* _tmp876_;
						gchar* destroy_func = NULL;
						gboolean _tmp877_ = FALSE;
						ValaDataType* _tmp878_;
						ValaCCodeFunctionCall* _tmp886_;
						const gchar* _tmp887_;
						ValaCCodeIdentifier* _tmp888_;
						ValaCCodeIdentifier* _tmp889_;
						ValaCCodeCastExpression* _tmp890_;
						ValaCCodeCastExpression* _tmp891_;
						ValaCCodeFunction* _tmp892_;
						ValaCCodeFunction* _tmp893_;
						ValaCCodeFunctionCall* _tmp894_;
						_tmp869_ = vala_ccode_identifier_new ("g_array_set_clear_func");
						_tmp870_ = _tmp869_;
						_tmp871_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp870_);
						_tmp872_ = _tmp871_;
						_vala_ccode_node_unref0 (_tmp870_);
						clear_func = _tmp872_;
						_tmp873_ = clear_func;
						_tmp874_ = vala_expression_get_target_value ((ValaExpression*) expr);
						_tmp875_ = _tmp874_;
						_tmp876_ = vala_get_cvalue_ (_tmp875_);
						vala_ccode_function_call_add_argument (_tmp873_, _tmp876_);
						_tmp878_ = type_arg;
						if (vala_data_type_is_non_null_simple_type (_tmp878_)) {
							_tmp877_ = TRUE;
						} else {
							ValaDataType* _tmp879_;
							_tmp879_ = type_arg;
							_tmp877_ = vala_data_type_is_real_non_null_struct_type (_tmp879_);
						}
						if (_tmp877_) {
							ValaDataType* _tmp880_;
							ValaTypeSymbol* _tmp881_;
							ValaTypeSymbol* _tmp882_;
							gchar* _tmp883_;
							_tmp880_ = type_arg;
							_tmp881_ = vala_data_type_get_type_symbol (_tmp880_);
							_tmp882_ = _tmp881_;
							_tmp883_ = vala_get_ccode_destroy_function (_tmp882_);
							_g_free0 (destroy_func);
							destroy_func = _tmp883_;
						} else {
							ValaDataType* _tmp884_;
							gchar* _tmp885_;
							_tmp884_ = type_arg;
							_tmp885_ = vala_ccode_base_module_generate_destroy_function_content_of_wrapper (self, _tmp884_);
							_g_free0 (destroy_func);
							destroy_func = _tmp885_;
						}
						_tmp886_ = clear_func;
						_tmp887_ = destroy_func;
						_tmp888_ = vala_ccode_identifier_new (_tmp887_);
						_tmp889_ = _tmp888_;
						_tmp890_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp889_, "GDestroyNotify");
						_tmp891_ = _tmp890_;
						vala_ccode_function_call_add_argument (_tmp886_, (ValaCCodeExpression*) _tmp891_);
						_vala_ccode_node_unref0 (_tmp891_);
						_vala_ccode_node_unref0 (_tmp889_);
						_tmp892_ = vala_ccode_base_module_get_ccode (self);
						_tmp893_ = _tmp892_;
						_tmp894_ = clear_func;
						vala_ccode_function_add_expression (_tmp893_, (ValaCCodeExpression*) _tmp894_);
						_g_free0 (destroy_func);
						_vala_ccode_node_unref0 (clear_func);
					}
					_vala_code_node_unref0 (type_arg);
				}
				_vala_target_value_unref0 (temp_value);
			}
		}
	}
	_tmp895_ = vala_expression_get_target_value ((ValaExpression*) expr);
	_tmp896_ = _tmp895_;
	G_TYPE_CHECK_INSTANCE_CAST (_tmp896_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = TRUE;
	_vala_code_node_unref0 (local);
	_vala_ccode_node_unref0 (creation_expr);
	_vala_ccode_node_unref0 (instance);
}

ValaCCodeExpression*
vala_ccode_base_module_handle_struct_argument (ValaCCodeBaseModule* self,
                                               ValaParameter* param,
                                               ValaExpression* arg,
                                               ValaCCodeExpression* cexpr)
{
	ValaDataType* type = NULL;
	ValaUnaryExpression* unary = NULL;
	ValaUnaryExpression* _tmp6_;
	gboolean _tmp7_ = FALSE;
	ValaDataType* _tmp8_;
	ValaDataType* _tmp9_;
	ValaCCodeExpression* _tmp35_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (arg != NULL, NULL);
	if (param != NULL) {
		ValaDataType* _tmp0_;
		ValaDataType* _tmp1_;
		ValaDataType* _tmp2_;
		_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
		_tmp1_ = _tmp0_;
		_tmp2_ = _vala_code_node_ref0 (_tmp1_);
		_vala_code_node_unref0 (type);
		type = _tmp2_;
	} else {
		ValaDataType* _tmp3_;
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		_tmp3_ = vala_expression_get_value_type (arg);
		_tmp4_ = _tmp3_;
		_tmp5_ = _vala_code_node_ref0 (_tmp4_);
		_vala_code_node_unref0 (type);
		type = _tmp5_;
	}
	_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (arg, VALA_TYPE_UNARY_EXPRESSION) ? ((ValaUnaryExpression*) arg) : NULL);
	unary = _tmp6_;
	_tmp8_ = vala_expression_get_value_type (arg);
	_tmp9_ = _tmp8_;
	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, VALA_TYPE_NULL_TYPE)) {
		ValaDataType* _tmp10_;
		_tmp10_ = type;
		_tmp7_ = vala_data_type_is_real_struct_type (_tmp10_);
	} else {
		_tmp7_ = FALSE;
	}
	if (_tmp7_) {
		gboolean _tmp11_ = FALSE;
		gboolean _tmp12_ = FALSE;
		ValaUnaryExpression* _tmp13_;
		_tmp13_ = unary;
		if (_tmp13_ != NULL) {
			gboolean _tmp14_ = FALSE;
			ValaUnaryExpression* _tmp15_;
			ValaUnaryOperator _tmp16_;
			ValaUnaryOperator _tmp17_;
			_tmp15_ = unary;
			_tmp16_ = vala_unary_expression_get_operator (_tmp15_);
			_tmp17_ = _tmp16_;
			if (_tmp17_ == VALA_UNARY_OPERATOR_OUT) {
				_tmp14_ = TRUE;
			} else {
				ValaUnaryExpression* _tmp18_;
				ValaUnaryOperator _tmp19_;
				ValaUnaryOperator _tmp20_;
				_tmp18_ = unary;
				_tmp19_ = vala_unary_expression_get_operator (_tmp18_);
				_tmp20_ = _tmp19_;
				_tmp14_ = _tmp20_ == VALA_UNARY_OPERATOR_REF;
			}
			_tmp12_ = _tmp14_;
		} else {
			_tmp12_ = FALSE;
		}
		if (!_tmp12_) {
			ValaDataType* _tmp21_;
			gboolean _tmp22_;
			gboolean _tmp23_;
			_tmp21_ = type;
			_tmp22_ = vala_data_type_get_nullable (_tmp21_);
			_tmp23_ = _tmp22_;
			_tmp11_ = !_tmp23_;
		} else {
			_tmp11_ = FALSE;
		}
		if (_tmp11_) {
			gboolean _tmp24_ = FALSE;
			if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_IDENTIFIER)) {
				_tmp24_ = TRUE;
			} else {
				_tmp24_ = G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_MEMBER_ACCESS);
			}
			if (_tmp24_) {
				ValaCCodeUnaryExpression* _tmp25_;
				_tmp25_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, cexpr);
				result = (ValaCCodeExpression*) _tmp25_;
				_vala_code_node_unref0 (unary);
				_vala_code_node_unref0 (type);
				return result;
			} else {
				ValaTargetValue* temp_value = NULL;
				ValaDataType* _tmp26_;
				ValaTargetValue* _tmp27_;
				ValaCCodeFunction* _tmp28_;
				ValaCCodeFunction* _tmp29_;
				ValaTargetValue* _tmp30_;
				ValaCCodeExpression* _tmp31_;
				ValaTargetValue* _tmp32_;
				ValaCCodeExpression* _tmp33_;
				ValaCCodeUnaryExpression* _tmp34_;
				_tmp26_ = type;
				_tmp27_ = vala_ccode_base_module_create_temp_value (self, _tmp26_, FALSE, (ValaCodeNode*) arg, NULL);
				temp_value = _tmp27_;
				_tmp28_ = vala_ccode_base_module_get_ccode (self);
				_tmp29_ = _tmp28_;
				_tmp30_ = temp_value;
				_tmp31_ = vala_get_cvalue_ (_tmp30_);
				vala_ccode_function_add_assignment (_tmp29_, _tmp31_, cexpr);
				_tmp32_ = temp_value;
				_tmp33_ = vala_get_cvalue_ (_tmp32_);
				_tmp34_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp33_);
				result = (ValaCCodeExpression*) _tmp34_;
				_vala_target_value_unref0 (temp_value);
				_vala_code_node_unref0 (unary);
				_vala_code_node_unref0 (type);
				return result;
			}
		}
	}
	_tmp35_ = _vala_ccode_node_ref0 (cexpr);
	result = _tmp35_;
	_vala_code_node_unref0 (unary);
	_vala_code_node_unref0 (type);
	return result;
}

static void
vala_ccode_base_module_real_visit_sizeof_expression (ValaCodeVisitor* base,
                                                     ValaSizeofExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaCCodeFile* _tmp2_;
	ValaCCodeFunctionCall* csizeof = NULL;
	ValaCCodeIdentifier* _tmp3_;
	ValaCCodeIdentifier* _tmp4_;
	ValaCCodeFunctionCall* _tmp5_;
	ValaCCodeFunctionCall* _tmp6_;
	ValaDataType* _tmp7_;
	ValaDataType* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeIdentifier* _tmp12_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_sizeof_expression_get_type_reference (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
	_tmp3_ = vala_ccode_identifier_new ("sizeof");
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp4_);
	_tmp6_ = _tmp5_;
	_vala_ccode_node_unref0 (_tmp4_);
	csizeof = _tmp6_;
	_tmp7_ = vala_sizeof_expression_get_type_reference (expr);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_identifier_new (_tmp10_);
	_tmp12_ = _tmp11_;
	vala_ccode_function_call_add_argument (csizeof, (ValaCCodeExpression*) _tmp12_);
	_vala_ccode_node_unref0 (_tmp12_);
	_g_free0 (_tmp10_);
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) csizeof);
	_vala_ccode_node_unref0 (csizeof);
}

static void
vala_ccode_base_module_real_visit_typeof_expression (ValaCodeVisitor* base,
                                                     ValaTypeofExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaCCodeFile* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* _tmp4_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = self->cfile;
	vala_ccode_file_add_include (_tmp0_, "glib-object.h", FALSE);
	_tmp1_ = vala_typeof_expression_get_type_reference (expr);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_ccode_base_module_get_type_id_expression (self, _tmp2_, FALSE);
	_tmp4_ = _tmp3_;
	vala_set_cvalue ((ValaExpression*) expr, _tmp4_);
	_vala_ccode_node_unref0 (_tmp4_);
}

static void
vala_ccode_base_module_real_visit_unary_expression (ValaCodeVisitor* base,
                                                    ValaUnaryExpression* expr)
{
	ValaCCodeBaseModule * self;
	gboolean _tmp0_ = FALSE;
	ValaUnaryOperator _tmp1_;
	ValaUnaryOperator _tmp2_;
	gboolean _tmp66_ = FALSE;
	ValaUnaryOperator _tmp67_;
	ValaUnaryOperator _tmp68_;
	ValaCCodeUnaryOperator op = 0;
	ValaUnaryOperator _tmp108_;
	ValaUnaryOperator _tmp109_;
	ValaExpression* _tmp110_;
	ValaExpression* _tmp111_;
	ValaCCodeExpression* _tmp112_;
	ValaCCodeUnaryExpression* _tmp113_;
	ValaCCodeUnaryExpression* _tmp114_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp1_ = vala_unary_expression_get_operator (expr);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == VALA_UNARY_OPERATOR_REF) {
		_tmp0_ = TRUE;
	} else {
		ValaUnaryOperator _tmp3_;
		ValaUnaryOperator _tmp4_;
		_tmp3_ = vala_unary_expression_get_operator (expr);
		_tmp4_ = _tmp3_;
		_tmp0_ = _tmp4_ == VALA_UNARY_OPERATOR_OUT;
	}
	if (_tmp0_) {
		ValaGLibValue* glib_value = NULL;
		ValaExpression* _tmp5_;
		ValaExpression* _tmp6_;
		ValaTargetValue* _tmp7_;
		ValaTargetValue* _tmp8_;
		ValaGLibValue* _tmp9_;
		ValaGLibValue* ref_value = NULL;
		ValaGLibValue* _tmp10_;
		ValaDataType* _tmp11_;
		ValaDataType* _tmp12_;
		ValaGLibValue* _tmp13_;
		gboolean _tmp14_ = FALSE;
		gboolean _tmp15_ = FALSE;
		ValaDataType* _tmp16_;
		ValaDataType* _tmp17_;
		ValaGLibValue* _tmp38_;
		ValaList* _tmp39_;
		ValaGLibValue* _tmp53_;
		ValaCCodeExpression* _tmp54_;
		ValaGLibValue* _tmp59_;
		ValaCCodeExpression* _tmp60_;
		ValaGLibValue* _tmp65_;
		_tmp5_ = vala_unary_expression_get_inner (expr);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_expression_get_target_value (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
		glib_value = _tmp9_;
		_tmp10_ = glib_value;
		_tmp11_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp10_);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_glib_value_new (_tmp12_, NULL, FALSE);
		ref_value = _tmp13_;
		_tmp16_ = vala_expression_get_target_type ((ValaExpression*) expr);
		_tmp17_ = _tmp16_;
		if (_tmp17_ != NULL) {
			ValaGLibValue* _tmp18_;
			ValaDataType* _tmp19_;
			ValaDataType* _tmp20_;
			_tmp18_ = glib_value;
			_tmp19_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp18_);
			_tmp20_ = _tmp19_;
			_tmp15_ = vala_data_type_is_real_struct_type (_tmp20_);
		} else {
			_tmp15_ = FALSE;
		}
		if (_tmp15_) {
			ValaGLibValue* _tmp21_;
			ValaDataType* _tmp22_;
			ValaDataType* _tmp23_;
			gboolean _tmp24_;
			gboolean _tmp25_;
			ValaDataType* _tmp26_;
			ValaDataType* _tmp27_;
			gboolean _tmp28_;
			gboolean _tmp29_;
			_tmp21_ = glib_value;
			_tmp22_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp21_);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_data_type_get_nullable (_tmp23_);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_expression_get_target_type ((ValaExpression*) expr);
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_data_type_get_nullable (_tmp27_);
			_tmp29_ = _tmp28_;
			_tmp14_ = _tmp25_ != _tmp29_;
		} else {
			_tmp14_ = FALSE;
		}
		if (_tmp14_) {
			ValaGLibValue* _tmp30_;
			ValaGLibValue* _tmp31_;
			ValaCCodeExpression* _tmp32_;
			ValaCCodeExpression* _tmp33_;
			_tmp30_ = ref_value;
			_tmp31_ = glib_value;
			_tmp32_ = _tmp31_->cvalue;
			_tmp33_ = _vala_ccode_node_ref0 (_tmp32_);
			_vala_ccode_node_unref0 (_tmp30_->cvalue);
			_tmp30_->cvalue = _tmp33_;
		} else {
			ValaGLibValue* _tmp34_;
			ValaGLibValue* _tmp35_;
			ValaCCodeExpression* _tmp36_;
			ValaCCodeUnaryExpression* _tmp37_;
			_tmp34_ = ref_value;
			_tmp35_ = glib_value;
			_tmp36_ = _tmp35_->cvalue;
			_tmp37_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp36_);
			_vala_ccode_node_unref0 (_tmp34_->cvalue);
			_tmp34_->cvalue = (ValaCCodeExpression*) _tmp37_;
		}
		_tmp38_ = glib_value;
		_tmp39_ = _tmp38_->array_length_cvalues;
		if (_tmp39_ != NULL) {
			{
				gint i = 0;
				i = 0;
				{
					gboolean _tmp40_ = FALSE;
					_tmp40_ = TRUE;
					while (TRUE) {
						ValaGLibValue* _tmp42_;
						ValaList* _tmp43_;
						gint _tmp44_;
						gint _tmp45_;
						ValaGLibValue* _tmp46_;
						ValaGLibValue* _tmp47_;
						ValaList* _tmp48_;
						gpointer _tmp49_;
						ValaCCodeExpression* _tmp50_;
						ValaCCodeUnaryExpression* _tmp51_;
						ValaCCodeUnaryExpression* _tmp52_;
						if (!_tmp40_) {
							gint _tmp41_;
							_tmp41_ = i;
							i = _tmp41_ + 1;
						}
						_tmp40_ = FALSE;
						_tmp42_ = glib_value;
						_tmp43_ = _tmp42_->array_length_cvalues;
						_tmp44_ = vala_collection_get_size ((ValaCollection*) _tmp43_);
						_tmp45_ = _tmp44_;
						if (!(i < _tmp45_)) {
							break;
						}
						_tmp46_ = ref_value;
						_tmp47_ = glib_value;
						_tmp48_ = _tmp47_->array_length_cvalues;
						_tmp49_ = vala_list_get (_tmp48_, i);
						_tmp50_ = (ValaCCodeExpression*) _tmp49_;
						_tmp51_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp50_);
						_tmp52_ = _tmp51_;
						vala_glib_value_append_array_length_cvalue (_tmp46_, (ValaCCodeExpression*) _tmp52_);
						_vala_ccode_node_unref0 (_tmp52_);
						_vala_ccode_node_unref0 (_tmp50_);
					}
				}
			}
		}
		_tmp53_ = glib_value;
		_tmp54_ = _tmp53_->delegate_target_cvalue;
		if (_tmp54_ != NULL) {
			ValaGLibValue* _tmp55_;
			ValaGLibValue* _tmp56_;
			ValaCCodeExpression* _tmp57_;
			ValaCCodeUnaryExpression* _tmp58_;
			_tmp55_ = ref_value;
			_tmp56_ = glib_value;
			_tmp57_ = _tmp56_->delegate_target_cvalue;
			_tmp58_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp57_);
			_vala_ccode_node_unref0 (_tmp55_->delegate_target_cvalue);
			_tmp55_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp58_;
		}
		_tmp59_ = glib_value;
		_tmp60_ = _tmp59_->delegate_target_destroy_notify_cvalue;
		if (_tmp60_ != NULL) {
			ValaGLibValue* _tmp61_;
			ValaGLibValue* _tmp62_;
			ValaCCodeExpression* _tmp63_;
			ValaCCodeUnaryExpression* _tmp64_;
			_tmp61_ = ref_value;
			_tmp62_ = glib_value;
			_tmp63_ = _tmp62_->delegate_target_destroy_notify_cvalue;
			_tmp64_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp63_);
			_vala_ccode_node_unref0 (_tmp61_->delegate_target_destroy_notify_cvalue);
			_tmp61_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp64_;
		}
		_tmp65_ = ref_value;
		vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp65_);
		_vala_target_value_unref0 (ref_value);
		_vala_target_value_unref0 (glib_value);
		return;
	}
	_tmp67_ = vala_unary_expression_get_operator (expr);
	_tmp68_ = _tmp67_;
	if (_tmp68_ == VALA_UNARY_OPERATOR_INCREMENT) {
		_tmp66_ = TRUE;
	} else {
		ValaUnaryOperator _tmp69_;
		ValaUnaryOperator _tmp70_;
		_tmp69_ = vala_unary_expression_get_operator (expr);
		_tmp70_ = _tmp69_;
		_tmp66_ = _tmp70_ == VALA_UNARY_OPERATOR_DECREMENT;
	}
	if (_tmp66_) {
		ValaCCodeBinaryOperator _tmp71_ = 0;
		ValaUnaryOperator _tmp72_;
		ValaUnaryOperator _tmp73_;
		ValaCCodeBinaryOperator op = 0;
		ValaCCodeBinaryExpression* cexpr = NULL;
		ValaExpression* _tmp74_;
		ValaExpression* _tmp75_;
		ValaTargetValue* _tmp76_;
		ValaTargetValue* _tmp77_;
		ValaCCodeExpression* _tmp78_;
		ValaCCodeConstant* _tmp79_;
		ValaCCodeConstant* _tmp80_;
		ValaCCodeBinaryExpression* _tmp81_;
		ValaCCodeBinaryExpression* _tmp82_;
		ValaCCodeFunction* _tmp83_;
		ValaCCodeFunction* _tmp84_;
		ValaExpression* _tmp85_;
		ValaExpression* _tmp86_;
		ValaCCodeExpression* _tmp87_;
		ValaCCodeBinaryExpression* _tmp88_;
		ValaTargetValue* temp_value = NULL;
		ValaExpression* _tmp89_;
		ValaExpression* _tmp90_;
		ValaTargetValue* _tmp91_;
		ValaTargetValue* _tmp92_;
		ValaTargetValue* _tmp93_;
		ValaMemberAccess* ma = NULL;
		ValaExpression* _tmp94_;
		ValaExpression* _tmp95_;
		ValaMemberAccess* _tmp96_;
		ValaMemberAccess* _tmp97_;
		ValaTargetValue* _tmp107_;
		_tmp72_ = vala_unary_expression_get_operator (expr);
		_tmp73_ = _tmp72_;
		if (_tmp73_ == VALA_UNARY_OPERATOR_INCREMENT) {
			_tmp71_ = VALA_CCODE_BINARY_OPERATOR_PLUS;
		} else {
			_tmp71_ = VALA_CCODE_BINARY_OPERATOR_MINUS;
		}
		op = _tmp71_;
		_tmp74_ = vala_unary_expression_get_inner (expr);
		_tmp75_ = _tmp74_;
		_tmp76_ = vala_expression_get_target_value (_tmp75_);
		_tmp77_ = _tmp76_;
		_tmp78_ = vala_get_cvalue_ (_tmp77_);
		_tmp79_ = vala_ccode_constant_new ("1");
		_tmp80_ = _tmp79_;
		_tmp81_ = vala_ccode_binary_expression_new (op, _tmp78_, (ValaCCodeExpression*) _tmp80_);
		_tmp82_ = _tmp81_;
		_vala_ccode_node_unref0 (_tmp80_);
		cexpr = _tmp82_;
		_tmp83_ = vala_ccode_base_module_get_ccode (self);
		_tmp84_ = _tmp83_;
		_tmp85_ = vala_unary_expression_get_inner (expr);
		_tmp86_ = _tmp85_;
		_tmp87_ = vala_get_cvalue (_tmp86_);
		_tmp88_ = cexpr;
		vala_ccode_function_add_assignment (_tmp84_, _tmp87_, (ValaCCodeExpression*) _tmp88_);
		_tmp89_ = vala_unary_expression_get_inner (expr);
		_tmp90_ = _tmp89_;
		_tmp91_ = vala_expression_get_target_value (_tmp90_);
		_tmp92_ = _tmp91_;
		_tmp93_ = vala_ccode_base_module_store_temp_value (self, _tmp92_, (ValaCodeNode*) expr, NULL);
		temp_value = _tmp93_;
		_tmp94_ = vala_unary_expression_get_inner (expr);
		_tmp95_ = _tmp94_;
		_tmp96_ = vala_ccode_base_module_find_property_access (self, _tmp95_);
		ma = _tmp96_;
		_tmp97_ = ma;
		if (_tmp97_ != NULL) {
			ValaProperty* prop = NULL;
			ValaMemberAccess* _tmp98_;
			ValaSymbol* _tmp99_;
			ValaSymbol* _tmp100_;
			ValaProperty* _tmp101_;
			ValaProperty* _tmp102_;
			ValaMemberAccess* _tmp103_;
			ValaExpression* _tmp104_;
			ValaExpression* _tmp105_;
			ValaTargetValue* _tmp106_;
			_tmp98_ = ma;
			_tmp99_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp98_);
			_tmp100_ = _tmp99_;
			_tmp101_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp100_, VALA_TYPE_PROPERTY, ValaProperty));
			prop = _tmp101_;
			_tmp102_ = prop;
			_tmp103_ = ma;
			_tmp104_ = vala_member_access_get_inner (_tmp103_);
			_tmp105_ = _tmp104_;
			_tmp106_ = temp_value;
			vala_ccode_base_module_store_property (self, _tmp102_, _tmp105_, _tmp106_);
			_vala_code_node_unref0 (prop);
		}
		_tmp107_ = temp_value;
		vala_expression_set_target_value ((ValaExpression*) expr, _tmp107_);
		_vala_code_node_unref0 (ma);
		_vala_target_value_unref0 (temp_value);
		_vala_ccode_node_unref0 (cexpr);
		return;
	}
	_tmp108_ = vala_unary_expression_get_operator (expr);
	_tmp109_ = _tmp108_;
	switch (_tmp109_) {
		case VALA_UNARY_OPERATOR_PLUS:
		{
			op = VALA_CCODE_UNARY_OPERATOR_PLUS;
			break;
		}
		case VALA_UNARY_OPERATOR_MINUS:
		{
			op = VALA_CCODE_UNARY_OPERATOR_MINUS;
			break;
		}
		case VALA_UNARY_OPERATOR_LOGICAL_NEGATION:
		{
			op = VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION;
			break;
		}
		case VALA_UNARY_OPERATOR_BITWISE_COMPLEMENT:
		{
			op = VALA_CCODE_UNARY_OPERATOR_BITWISE_COMPLEMENT;
			break;
		}
		case VALA_UNARY_OPERATOR_INCREMENT:
		{
			op = VALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT;
			break;
		}
		case VALA_UNARY_OPERATOR_DECREMENT:
		{
			op = VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT;
			break;
		}
		default:
		{
			g_assert_not_reached ();
		}
	}
	_tmp110_ = vala_unary_expression_get_inner (expr);
	_tmp111_ = _tmp110_;
	_tmp112_ = vala_get_cvalue (_tmp111_);
	_tmp113_ = vala_ccode_unary_expression_new (op, _tmp112_);
	_tmp114_ = _tmp113_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp114_);
	_vala_ccode_node_unref0 (_tmp114_);
}

static ValaCCodeExpression*
vala_ccode_base_module_real_deserialize_expression (ValaCCodeBaseModule* self,
                                                    ValaDataType* type,
                                                    ValaCCodeExpression* variant_expr,
                                                    ValaCCodeExpression* expr,
                                                    ValaCCodeExpression* error_expr,
                                                    gboolean* may_fail)
{
	gboolean _vala_may_fail = FALSE;
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (variant_expr != NULL, NULL);
	g_assert_not_reached ();
}

ValaCCodeExpression*
vala_ccode_base_module_deserialize_expression (ValaCCodeBaseModule* self,
                                               ValaDataType* type,
                                               ValaCCodeExpression* variant_expr,
                                               ValaCCodeExpression* expr,
                                               ValaCCodeExpression* error_expr,
                                               gboolean* may_fail)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->deserialize_expression) {
		return _klass_->deserialize_expression (self, type, variant_expr, expr, error_expr, may_fail);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_serialize_expression (ValaCCodeBaseModule* self,
                                                  ValaDataType* type,
                                                  ValaCCodeExpression* expr)
{
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	g_assert_not_reached ();
}

ValaCCodeExpression*
vala_ccode_base_module_serialize_expression (ValaCCodeBaseModule* self,
                                             ValaDataType* type,
                                             ValaCCodeExpression* expr)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->serialize_expression) {
		return _klass_->serialize_expression (self, type, expr);
	}
	return NULL;
}

static void
vala_ccode_base_module_real_visit_cast_expression (ValaCodeVisitor* base,
                                                   ValaCastExpression* expr)
{
	ValaCCodeBaseModule * self;
	gboolean _tmp0_;
	gboolean _tmp1_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	ValaCCodeFile* _tmp8_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp9_;
	ValaDataType* _tmp10_;
	ValaArrayType* _tmp11_;
	gboolean _tmp12_ = FALSE;
	ValaArrayType* _tmp13_;
	ValaCCodeExpression* innercexpr = NULL;
	ValaExpression* _tmp138_;
	ValaExpression* _tmp139_;
	ValaCCodeExpression* _tmp140_;
	ValaCCodeExpression* _tmp141_;
	gboolean _tmp142_ = FALSE;
	gboolean _tmp143_ = FALSE;
	gboolean _tmp144_ = FALSE;
	ValaDataType* _tmp145_;
	ValaDataType* _tmp146_;
	ValaCCodeExpression* _tmp223_;
	ValaDataType* _tmp224_;
	ValaDataType* _tmp225_;
	gchar* _tmp226_;
	gchar* _tmp227_;
	ValaCCodeCastExpression* _tmp228_;
	ValaCCodeCastExpression* _tmp229_;
	ValaTargetValue* _tmp230_;
	ValaTargetValue* _tmp231_;
	ValaDataType* _tmp232_;
	ValaDataType* _tmp233_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_cast_expression_get_is_silent_cast (expr);
	_tmp1_ = _tmp0_;
	if (_tmp1_) {
		ValaCCodeInvalidExpression* _tmp2_;
		ValaCCodeInvalidExpression* _tmp3_;
		ValaSourceReference* _tmp4_;
		ValaSourceReference* _tmp5_;
		_tmp2_ = vala_ccode_invalid_expression_new ();
		_tmp3_ = _tmp2_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp3_);
		_vala_ccode_node_unref0 (_tmp3_);
		vala_code_node_set_error ((ValaCodeNode*) expr, TRUE);
		_tmp4_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
		_tmp5_ = _tmp4_;
		vala_report_error (_tmp5_, "Operation not supported for this type");
		return;
	}
	_tmp6_ = vala_cast_expression_get_type_reference (expr);
	_tmp7_ = _tmp6_;
	_tmp8_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp7_, _tmp8_);
	_tmp9_ = vala_cast_expression_get_type_reference (expr);
	_tmp10_ = _tmp9_;
	_tmp11_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp10_) : NULL);
	array_type = _tmp11_;
	_tmp13_ = array_type;
	if (_tmp13_ != NULL) {
		ValaExpression* _tmp14_;
		ValaExpression* _tmp15_;
		ValaDataType* _tmp16_;
		ValaDataType* _tmp17_;
		_tmp14_ = vala_cast_expression_get_inner (expr);
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_expression_get_value_type (_tmp15_);
		_tmp17_ = _tmp16_;
		_tmp12_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_ARRAY_TYPE);
	} else {
		_tmp12_ = FALSE;
	}
	if (_tmp12_) {
		gboolean _tmp18_ = FALSE;
		ValaArrayType* _tmp19_;
		ValaDataType* _tmp20_;
		ValaDataType* _tmp21_;
		_tmp19_ = array_type;
		_tmp20_ = vala_array_type_get_element_type (_tmp19_);
		_tmp21_ = _tmp20_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_GENERIC_TYPE)) {
			_tmp18_ = TRUE;
		} else {
			ValaExpression* _tmp22_;
			ValaExpression* _tmp23_;
			ValaDataType* _tmp24_;
			ValaDataType* _tmp25_;
			ValaDataType* _tmp26_;
			ValaDataType* _tmp27_;
			_tmp22_ = vala_cast_expression_get_inner (expr);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_expression_get_value_type (_tmp23_);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			_tmp27_ = _tmp26_;
			_tmp18_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp27_, VALA_TYPE_GENERIC_TYPE);
		}
		if (_tmp18_) {
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp28_ = FALSE;
					_tmp28_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp30_;
						gint _tmp31_;
						gint _tmp32_;
						ValaExpression* _tmp33_;
						ValaExpression* _tmp34_;
						ValaCCodeExpression* _tmp35_;
						ValaCCodeExpression* _tmp36_;
						if (!_tmp28_) {
							gint _tmp29_;
							_tmp29_ = dim;
							dim = _tmp29_ + 1;
						}
						_tmp28_ = FALSE;
						_tmp30_ = array_type;
						_tmp31_ = vala_array_type_get_rank (_tmp30_);
						_tmp32_ = _tmp31_;
						if (!(dim <= _tmp32_)) {
							break;
						}
						_tmp33_ = vala_cast_expression_get_inner (expr);
						_tmp34_ = _tmp33_;
						_tmp35_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp34_, dim);
						_tmp36_ = _tmp35_;
						vala_append_array_length ((ValaExpression*) expr, _tmp36_);
						_vala_ccode_node_unref0 (_tmp36_);
					}
				}
			}
		} else {
			ValaCCodeFunctionCall* sizeof_to = NULL;
			ValaCCodeIdentifier* _tmp37_;
			ValaCCodeIdentifier* _tmp38_;
			ValaCCodeFunctionCall* _tmp39_;
			ValaCCodeFunctionCall* _tmp40_;
			ValaCCodeFunctionCall* _tmp41_;
			ValaArrayType* _tmp42_;
			ValaDataType* _tmp43_;
			ValaDataType* _tmp44_;
			gchar* _tmp45_;
			gchar* _tmp46_;
			ValaCCodeConstant* _tmp47_;
			ValaCCodeConstant* _tmp48_;
			ValaCCodeFunctionCall* sizeof_from = NULL;
			ValaCCodeIdentifier* _tmp49_;
			ValaCCodeIdentifier* _tmp50_;
			ValaCCodeFunctionCall* _tmp51_;
			ValaCCodeFunctionCall* _tmp52_;
			ValaCCodeFunctionCall* _tmp53_;
			ValaExpression* _tmp54_;
			ValaExpression* _tmp55_;
			ValaDataType* _tmp56_;
			ValaDataType* _tmp57_;
			ValaDataType* _tmp58_;
			ValaDataType* _tmp59_;
			gchar* _tmp60_;
			gchar* _tmp61_;
			ValaCCodeConstant* _tmp62_;
			ValaCCodeConstant* _tmp63_;
			_tmp37_ = vala_ccode_identifier_new ("sizeof");
			_tmp38_ = _tmp37_;
			_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
			_tmp40_ = _tmp39_;
			_vala_ccode_node_unref0 (_tmp38_);
			sizeof_to = _tmp40_;
			_tmp41_ = sizeof_to;
			_tmp42_ = array_type;
			_tmp43_ = vala_array_type_get_element_type (_tmp42_);
			_tmp44_ = _tmp43_;
			_tmp45_ = vala_get_ccode_name ((ValaCodeNode*) _tmp44_);
			_tmp46_ = _tmp45_;
			_tmp47_ = vala_ccode_constant_new (_tmp46_);
			_tmp48_ = _tmp47_;
			vala_ccode_function_call_add_argument (_tmp41_, (ValaCCodeExpression*) _tmp48_);
			_vala_ccode_node_unref0 (_tmp48_);
			_g_free0 (_tmp46_);
			_tmp49_ = vala_ccode_identifier_new ("sizeof");
			_tmp50_ = _tmp49_;
			_tmp51_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp50_);
			_tmp52_ = _tmp51_;
			_vala_ccode_node_unref0 (_tmp50_);
			sizeof_from = _tmp52_;
			_tmp53_ = sizeof_from;
			_tmp54_ = vala_cast_expression_get_inner (expr);
			_tmp55_ = _tmp54_;
			_tmp56_ = vala_expression_get_value_type (_tmp55_);
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_get_ccode_name ((ValaCodeNode*) _tmp59_);
			_tmp61_ = _tmp60_;
			_tmp62_ = vala_ccode_constant_new (_tmp61_);
			_tmp63_ = _tmp62_;
			vala_ccode_function_call_add_argument (_tmp53_, (ValaCCodeExpression*) _tmp63_);
			_vala_ccode_node_unref0 (_tmp63_);
			_g_free0 (_tmp61_);
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp64_ = FALSE;
					_tmp64_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp66_;
						gint _tmp67_;
						gint _tmp68_;
						ValaExpression* _tmp69_;
						ValaExpression* _tmp70_;
						ValaCCodeExpression* _tmp71_;
						ValaCCodeExpression* _tmp72_;
						ValaCCodeFunctionCall* _tmp73_;
						ValaCCodeBinaryExpression* _tmp74_;
						ValaCCodeBinaryExpression* _tmp75_;
						ValaCCodeFunctionCall* _tmp76_;
						ValaCCodeBinaryExpression* _tmp77_;
						ValaCCodeBinaryExpression* _tmp78_;
						if (!_tmp64_) {
							gint _tmp65_;
							_tmp65_ = dim;
							dim = _tmp65_ + 1;
						}
						_tmp64_ = FALSE;
						_tmp66_ = array_type;
						_tmp67_ = vala_array_type_get_rank (_tmp66_);
						_tmp68_ = _tmp67_;
						if (!(dim <= _tmp68_)) {
							break;
						}
						_tmp69_ = vala_cast_expression_get_inner (expr);
						_tmp70_ = _tmp69_;
						_tmp71_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp70_, dim);
						_tmp72_ = _tmp71_;
						_tmp73_ = sizeof_from;
						_tmp74_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, _tmp72_, (ValaCCodeExpression*) _tmp73_);
						_tmp75_ = _tmp74_;
						_tmp76_ = sizeof_to;
						_tmp77_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp75_, (ValaCCodeExpression*) _tmp76_);
						_tmp78_ = _tmp77_;
						vala_append_array_length ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp78_);
						_vala_ccode_node_unref0 (_tmp78_);
						_vala_ccode_node_unref0 (_tmp75_);
						_vala_ccode_node_unref0 (_tmp72_);
					}
				}
			}
			_vala_ccode_node_unref0 (sizeof_from);
			_vala_ccode_node_unref0 (sizeof_to);
		}
	} else {
		ValaArrayType* _tmp79_;
		_tmp79_ = array_type;
		if (_tmp79_ != NULL) {
			ValaCCodeExpression* array_length_expr = NULL;
			ValaCCodeFunctionCall* sizeof_to = NULL;
			ValaCCodeIdentifier* _tmp80_;
			ValaCCodeIdentifier* _tmp81_;
			ValaCCodeFunctionCall* _tmp82_;
			ValaCCodeFunctionCall* _tmp83_;
			ValaCCodeFunctionCall* _tmp84_;
			ValaArrayType* _tmp85_;
			ValaDataType* _tmp86_;
			ValaDataType* _tmp87_;
			gchar* _tmp88_;
			gchar* _tmp89_;
			ValaCCodeConstant* _tmp90_;
			ValaCCodeConstant* _tmp91_;
			ValaCCodeFunctionCall* sizeof_from = NULL;
			ValaCCodeIdentifier* _tmp92_;
			ValaCCodeIdentifier* _tmp93_;
			ValaCCodeFunctionCall* _tmp94_;
			ValaCCodeFunctionCall* _tmp95_;
			ValaDataType* value_type = NULL;
			ValaExpression* _tmp96_;
			ValaExpression* _tmp97_;
			ValaDataType* _tmp98_;
			ValaDataType* _tmp99_;
			ValaDataType* _tmp100_;
			ValaDataType* _tmp101_;
			_tmp80_ = vala_ccode_identifier_new ("sizeof");
			_tmp81_ = _tmp80_;
			_tmp82_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp81_);
			_tmp83_ = _tmp82_;
			_vala_ccode_node_unref0 (_tmp81_);
			sizeof_to = _tmp83_;
			_tmp84_ = sizeof_to;
			_tmp85_ = array_type;
			_tmp86_ = vala_array_type_get_element_type (_tmp85_);
			_tmp87_ = _tmp86_;
			_tmp88_ = vala_get_ccode_name ((ValaCodeNode*) _tmp87_);
			_tmp89_ = _tmp88_;
			_tmp90_ = vala_ccode_constant_new (_tmp89_);
			_tmp91_ = _tmp90_;
			vala_ccode_function_call_add_argument (_tmp84_, (ValaCCodeExpression*) _tmp91_);
			_vala_ccode_node_unref0 (_tmp91_);
			_g_free0 (_tmp89_);
			_tmp92_ = vala_ccode_identifier_new ("sizeof");
			_tmp93_ = _tmp92_;
			_tmp94_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp93_);
			_tmp95_ = _tmp94_;
			_vala_ccode_node_unref0 (_tmp93_);
			sizeof_from = _tmp95_;
			_tmp96_ = vala_cast_expression_get_inner (expr);
			_tmp97_ = _tmp96_;
			_tmp98_ = vala_expression_get_value_type (_tmp97_);
			_tmp99_ = _tmp98_;
			_tmp100_ = _vala_code_node_ref0 (_tmp99_);
			value_type = _tmp100_;
			_tmp101_ = value_type;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp101_, VALA_TYPE_VALUE_TYPE)) {
				ValaCCodeFunctionCall* _tmp102_;
				ValaDataType* _tmp103_;
				ValaTypeSymbol* _tmp104_;
				ValaTypeSymbol* _tmp105_;
				gchar* _tmp106_;
				gchar* _tmp107_;
				ValaCCodeConstant* _tmp108_;
				ValaCCodeConstant* _tmp109_;
				ValaCCodeFunctionCall* _tmp110_;
				ValaCCodeFunctionCall* _tmp111_;
				ValaCCodeBinaryExpression* _tmp112_;
				_tmp102_ = sizeof_from;
				_tmp103_ = value_type;
				_tmp104_ = vala_data_type_get_type_symbol (_tmp103_);
				_tmp105_ = _tmp104_;
				_tmp106_ = vala_get_ccode_name ((ValaCodeNode*) _tmp105_);
				_tmp107_ = _tmp106_;
				_tmp108_ = vala_ccode_constant_new (_tmp107_);
				_tmp109_ = _tmp108_;
				vala_ccode_function_call_add_argument (_tmp102_, (ValaCCodeExpression*) _tmp109_);
				_vala_ccode_node_unref0 (_tmp109_);
				_g_free0 (_tmp107_);
				_tmp110_ = sizeof_from;
				_tmp111_ = sizeof_to;
				_tmp112_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp110_, (ValaCCodeExpression*) _tmp111_);
				_vala_ccode_node_unref0 (array_length_expr);
				array_length_expr = (ValaCCodeExpression*) _tmp112_;
			} else {
				gboolean _tmp113_ = FALSE;
				ValaDataType* _tmp114_;
				_tmp114_ = value_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, VALA_TYPE_POINTER_TYPE)) {
					ValaDataType* _tmp115_;
					ValaDataType* _tmp116_;
					ValaDataType* _tmp117_;
					_tmp115_ = value_type;
					_tmp116_ = vala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp115_, VALA_TYPE_POINTER_TYPE, ValaPointerType));
					_tmp117_ = _tmp116_;
					_tmp113_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp117_, VALA_TYPE_VALUE_TYPE);
				} else {
					_tmp113_ = FALSE;
				}
				if (_tmp113_) {
					ValaCCodeFunctionCall* _tmp118_;
					ValaDataType* _tmp119_;
					ValaDataType* _tmp120_;
					ValaDataType* _tmp121_;
					ValaTypeSymbol* _tmp122_;
					ValaTypeSymbol* _tmp123_;
					gchar* _tmp124_;
					gchar* _tmp125_;
					ValaCCodeConstant* _tmp126_;
					ValaCCodeConstant* _tmp127_;
					ValaCCodeFunctionCall* _tmp128_;
					ValaCCodeFunctionCall* _tmp129_;
					ValaCCodeBinaryExpression* _tmp130_;
					_tmp118_ = sizeof_from;
					_tmp119_ = value_type;
					_tmp120_ = vala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp119_, VALA_TYPE_POINTER_TYPE, ValaPointerType));
					_tmp121_ = _tmp120_;
					_tmp122_ = vala_data_type_get_type_symbol (_tmp121_);
					_tmp123_ = _tmp122_;
					_tmp124_ = vala_get_ccode_name ((ValaCodeNode*) _tmp123_);
					_tmp125_ = _tmp124_;
					_tmp126_ = vala_ccode_constant_new (_tmp125_);
					_tmp127_ = _tmp126_;
					vala_ccode_function_call_add_argument (_tmp118_, (ValaCCodeExpression*) _tmp127_);
					_vala_ccode_node_unref0 (_tmp127_);
					_g_free0 (_tmp125_);
					_tmp128_ = sizeof_from;
					_tmp129_ = sizeof_to;
					_tmp130_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp128_, (ValaCCodeExpression*) _tmp129_);
					_vala_ccode_node_unref0 (array_length_expr);
					array_length_expr = (ValaCCodeExpression*) _tmp130_;
				} else {
					ValaCCodeConstant* _tmp131_;
					_tmp131_ = vala_ccode_constant_new ("-1");
					_vala_ccode_node_unref0 (array_length_expr);
					array_length_expr = (ValaCCodeExpression*) _tmp131_;
				}
			}
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp132_ = FALSE;
					_tmp132_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp134_;
						gint _tmp135_;
						gint _tmp136_;
						ValaCCodeExpression* _tmp137_;
						if (!_tmp132_) {
							gint _tmp133_;
							_tmp133_ = dim;
							dim = _tmp133_ + 1;
						}
						_tmp132_ = FALSE;
						_tmp134_ = array_type;
						_tmp135_ = vala_array_type_get_rank (_tmp134_);
						_tmp136_ = _tmp135_;
						if (!(dim <= _tmp136_)) {
							break;
						}
						_tmp137_ = array_length_expr;
						vala_append_array_length ((ValaExpression*) expr, _tmp137_);
					}
				}
			}
			_vala_code_node_unref0 (value_type);
			_vala_ccode_node_unref0 (sizeof_from);
			_vala_ccode_node_unref0 (sizeof_to);
			_vala_ccode_node_unref0 (array_length_expr);
		}
	}
	_tmp138_ = vala_cast_expression_get_inner (expr);
	_tmp139_ = _tmp138_;
	_tmp140_ = vala_get_cvalue (_tmp139_);
	_tmp141_ = _vala_ccode_node_ref0 (_tmp140_);
	innercexpr = _tmp141_;
	_tmp145_ = vala_cast_expression_get_type_reference (expr);
	_tmp146_ = _tmp145_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp146_, VALA_TYPE_VALUE_TYPE)) {
		ValaDataType* _tmp147_;
		ValaDataType* _tmp148_;
		gboolean _tmp149_;
		gboolean _tmp150_;
		_tmp147_ = vala_cast_expression_get_type_reference (expr);
		_tmp148_ = _tmp147_;
		_tmp149_ = vala_data_type_get_nullable (_tmp148_);
		_tmp150_ = _tmp149_;
		_tmp144_ = !_tmp150_;
	} else {
		_tmp144_ = FALSE;
	}
	if (_tmp144_) {
		ValaExpression* _tmp151_;
		ValaExpression* _tmp152_;
		ValaDataType* _tmp153_;
		ValaDataType* _tmp154_;
		_tmp151_ = vala_cast_expression_get_inner (expr);
		_tmp152_ = _tmp151_;
		_tmp153_ = vala_expression_get_value_type (_tmp152_);
		_tmp154_ = _tmp153_;
		_tmp143_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp154_, VALA_TYPE_VALUE_TYPE);
	} else {
		_tmp143_ = FALSE;
	}
	if (_tmp143_) {
		ValaExpression* _tmp155_;
		ValaExpression* _tmp156_;
		ValaDataType* _tmp157_;
		ValaDataType* _tmp158_;
		gboolean _tmp159_;
		gboolean _tmp160_;
		_tmp155_ = vala_cast_expression_get_inner (expr);
		_tmp156_ = _tmp155_;
		_tmp157_ = vala_expression_get_value_type (_tmp156_);
		_tmp158_ = _tmp157_;
		_tmp159_ = vala_data_type_get_nullable (_tmp158_);
		_tmp160_ = _tmp159_;
		_tmp142_ = _tmp160_;
	} else {
		_tmp142_ = FALSE;
	}
	if (_tmp142_) {
		ValaExpression* inner_expr = NULL;
		ValaExpression* _tmp161_;
		ValaExpression* _tmp162_;
		gboolean _tmp167_ = FALSE;
		ValaExpression* _tmp168_;
		ValaDataType* _tmp169_;
		ValaDataType* _tmp170_;
		gboolean _tmp171_;
		gboolean _tmp172_;
		ValaCCodeExpression* _tmp188_;
		ValaCCodeUnaryExpression* _tmp189_;
		_tmp161_ = vala_cast_expression_get_inner (expr);
		_tmp162_ = _tmp161_;
		inner_expr = _tmp162_;
		while (TRUE) {
			ValaExpression* _tmp163_;
			ValaExpression* _tmp164_;
			ValaExpression* _tmp165_;
			ValaExpression* _tmp166_;
			_tmp163_ = inner_expr;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, VALA_TYPE_CAST_EXPRESSION)) {
				break;
			}
			_tmp164_ = inner_expr;
			_tmp165_ = vala_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp164_, VALA_TYPE_CAST_EXPRESSION, ValaCastExpression));
			_tmp166_ = _tmp165_;
			inner_expr = _tmp166_;
		}
		_tmp168_ = inner_expr;
		_tmp169_ = vala_expression_get_value_type (_tmp168_);
		_tmp170_ = _tmp169_;
		_tmp171_ = vala_data_type_get_value_owned (_tmp170_);
		_tmp172_ = _tmp171_;
		if (_tmp172_) {
			gboolean _tmp173_ = FALSE;
			ValaExpression* _tmp174_;
			ValaSymbol* _tmp175_;
			ValaSymbol* _tmp176_;
			_tmp174_ = inner_expr;
			_tmp175_ = vala_expression_get_symbol_reference (_tmp174_);
			_tmp176_ = _tmp175_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp176_, VALA_TYPE_VARIABLE)) {
				_tmp173_ = TRUE;
			} else {
				ValaExpression* _tmp177_;
				_tmp177_ = inner_expr;
				_tmp173_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp177_, VALA_TYPE_ELEMENT_ACCESS);
			}
			_tmp167_ = !_tmp173_;
		} else {
			_tmp167_ = FALSE;
		}
		if (_tmp167_) {
			ValaGLibValue* value = NULL;
			ValaVoidType* _tmp178_;
			ValaVoidType* _tmp179_;
			ValaPointerType* _tmp180_;
			ValaPointerType* _tmp181_;
			ValaCCodeExpression* _tmp182_;
			ValaGLibValue* _tmp183_;
			ValaGLibValue* _tmp184_;
			ValaArrayList* _tmp185_;
			ValaArrayList* _tmp186_;
			ValaGLibValue* _tmp187_;
			_tmp178_ = vala_void_type_new (NULL);
			_tmp179_ = _tmp178_;
			_tmp180_ = vala_pointer_type_new ((ValaDataType*) _tmp179_, NULL);
			_tmp181_ = _tmp180_;
			_tmp182_ = innercexpr;
			_tmp183_ = vala_glib_value_new ((ValaDataType*) _tmp181_, _tmp182_, FALSE);
			_tmp184_ = _tmp183_;
			_vala_code_node_unref0 (_tmp181_);
			_vala_code_node_unref0 (_tmp179_);
			value = _tmp184_;
			_tmp185_ = vala_ccode_base_module_get_temp_ref_values (self);
			_tmp186_ = _tmp185_;
			_tmp187_ = value;
			vala_list_insert ((ValaList*) _tmp186_, 0, (ValaTargetValue*) _tmp187_);
			_vala_target_value_unref0 (value);
		}
		_tmp188_ = innercexpr;
		_tmp189_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp188_);
		_vala_ccode_node_unref0 (innercexpr);
		innercexpr = (ValaCCodeExpression*) _tmp189_;
	} else {
		gboolean _tmp190_ = FALSE;
		gboolean _tmp191_ = FALSE;
		ValaDataType* _tmp192_;
		ValaDataType* _tmp193_;
		_tmp192_ = vala_cast_expression_get_type_reference (expr);
		_tmp193_ = _tmp192_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp193_, VALA_TYPE_VALUE_TYPE)) {
			ValaDataType* _tmp194_;
			ValaDataType* _tmp195_;
			gboolean _tmp196_;
			gboolean _tmp197_;
			_tmp194_ = vala_cast_expression_get_type_reference (expr);
			_tmp195_ = _tmp194_;
			_tmp196_ = vala_data_type_get_nullable (_tmp195_);
			_tmp197_ = _tmp196_;
			_tmp191_ = _tmp197_;
		} else {
			_tmp191_ = FALSE;
		}
		if (_tmp191_) {
			ValaExpression* _tmp198_;
			ValaExpression* _tmp199_;
			ValaDataType* _tmp200_;
			ValaDataType* _tmp201_;
			_tmp198_ = vala_cast_expression_get_inner (expr);
			_tmp199_ = _tmp198_;
			_tmp200_ = vala_expression_get_value_type (_tmp199_);
			_tmp201_ = _tmp200_;
			_tmp190_ = vala_data_type_is_real_non_null_struct_type (_tmp201_);
		} else {
			_tmp190_ = FALSE;
		}
		if (_tmp190_) {
			ValaCCodeExpression* _tmp202_;
			ValaCCodeUnaryExpression* _tmp203_;
			_tmp202_ = innercexpr;
			_tmp203_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp202_);
			_vala_ccode_node_unref0 (innercexpr);
			innercexpr = (ValaCCodeExpression*) _tmp203_;
		} else {
			gboolean _tmp204_ = FALSE;
			gboolean _tmp205_ = FALSE;
			gboolean _tmp206_ = FALSE;
			ValaDataType* _tmp207_;
			ValaDataType* _tmp208_;
			_tmp207_ = vala_cast_expression_get_type_reference (expr);
			_tmp208_ = _tmp207_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp208_, VALA_TYPE_ARRAY_TYPE)) {
				ValaExpression* _tmp209_;
				ValaExpression* _tmp210_;
				_tmp209_ = vala_cast_expression_get_inner (expr);
				_tmp210_ = _tmp209_;
				_tmp206_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp210_, VALA_TYPE_LITERAL);
			} else {
				_tmp206_ = FALSE;
			}
			if (_tmp206_) {
				ValaExpression* _tmp211_;
				ValaExpression* _tmp212_;
				ValaDataType* _tmp213_;
				ValaDataType* _tmp214_;
				_tmp211_ = vala_cast_expression_get_inner (expr);
				_tmp212_ = _tmp211_;
				_tmp213_ = vala_expression_get_value_type (_tmp212_);
				_tmp214_ = _tmp213_;
				_tmp205_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp214_, VALA_TYPE_VALUE_TYPE);
			} else {
				_tmp205_ = FALSE;
			}
			if (_tmp205_) {
				ValaExpression* _tmp215_;
				ValaExpression* _tmp216_;
				ValaDataType* _tmp217_;
				ValaDataType* _tmp218_;
				gboolean _tmp219_;
				gboolean _tmp220_;
				_tmp215_ = vala_cast_expression_get_inner (expr);
				_tmp216_ = _tmp215_;
				_tmp217_ = vala_expression_get_value_type (_tmp216_);
				_tmp218_ = _tmp217_;
				_tmp219_ = vala_data_type_get_nullable (_tmp218_);
				_tmp220_ = _tmp219_;
				_tmp204_ = !_tmp220_;
			} else {
				_tmp204_ = FALSE;
			}
			if (_tmp204_) {
				ValaCCodeExpression* _tmp221_;
				ValaCCodeUnaryExpression* _tmp222_;
				_tmp221_ = innercexpr;
				_tmp222_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp221_);
				_vala_ccode_node_unref0 (innercexpr);
				innercexpr = (ValaCCodeExpression*) _tmp222_;
			}
		}
	}
	_tmp223_ = innercexpr;
	_tmp224_ = vala_cast_expression_get_type_reference (expr);
	_tmp225_ = _tmp224_;
	_tmp226_ = vala_get_ccode_name ((ValaCodeNode*) _tmp225_);
	_tmp227_ = _tmp226_;
	_tmp228_ = vala_ccode_cast_expression_new (_tmp223_, _tmp227_);
	_tmp229_ = _tmp228_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp229_);
	_vala_ccode_node_unref0 (_tmp229_);
	_g_free0 (_tmp227_);
	_tmp230_ = vala_expression_get_target_value ((ValaExpression*) expr);
	_tmp231_ = _tmp230_;
	G_TYPE_CHECK_INSTANCE_CAST (_tmp231_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->non_null = vala_expression_is_non_null ((ValaExpression*) expr);
	_tmp232_ = vala_cast_expression_get_type_reference (expr);
	_tmp233_ = _tmp232_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp233_, VALA_TYPE_DELEGATE_TYPE)) {
		ValaCCodeExpression* target = NULL;
		ValaExpression* _tmp234_;
		ValaExpression* _tmp235_;
		ValaCCodeExpression* _tmp236_;
		ValaCCodeExpression* _tmp237_;
		ValaCCodeExpression* _tmp238_;
		ValaCCodeExpression* target_destroy_notify = NULL;
		ValaExpression* _tmp242_;
		ValaExpression* _tmp243_;
		ValaCCodeExpression* _tmp244_;
		ValaCCodeExpression* _tmp245_;
		ValaCCodeExpression* _tmp246_;
		_tmp234_ = vala_cast_expression_get_inner (expr);
		_tmp235_ = _tmp234_;
		_tmp236_ = vala_get_delegate_target (_tmp235_);
		_tmp237_ = _vala_ccode_node_ref0 (_tmp236_);
		target = _tmp237_;
		_tmp238_ = target;
		if (_tmp238_ != NULL) {
			ValaCCodeExpression* _tmp239_;
			_tmp239_ = target;
			vala_set_delegate_target ((ValaExpression*) expr, _tmp239_);
		} else {
			ValaCCodeConstant* _tmp240_;
			ValaCCodeConstant* _tmp241_;
			_tmp240_ = vala_ccode_constant_new ("NULL");
			_tmp241_ = _tmp240_;
			vala_set_delegate_target ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp241_);
			_vala_ccode_node_unref0 (_tmp241_);
		}
		_tmp242_ = vala_cast_expression_get_inner (expr);
		_tmp243_ = _tmp242_;
		_tmp244_ = vala_get_delegate_target_destroy_notify (_tmp243_);
		_tmp245_ = _vala_ccode_node_ref0 (_tmp244_);
		target_destroy_notify = _tmp245_;
		_tmp246_ = target_destroy_notify;
		if (_tmp246_ != NULL) {
			ValaCCodeExpression* _tmp247_;
			_tmp247_ = target_destroy_notify;
			vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, _tmp247_);
		} else {
			ValaCCodeConstant* _tmp248_;
			ValaCCodeConstant* _tmp249_;
			_tmp248_ = vala_ccode_constant_new ("NULL");
			_tmp249_ = _tmp248_;
			vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp249_);
			_vala_ccode_node_unref0 (_tmp249_);
		}
		_vala_ccode_node_unref0 (target_destroy_notify);
		_vala_ccode_node_unref0 (target);
	}
	_vala_ccode_node_unref0 (innercexpr);
	_vala_code_node_unref0 (array_type);
}

static void
vala_ccode_base_module_real_visit_named_argument (ValaCodeVisitor* base,
                                                  ValaNamedArgument* expr)
{
	ValaCCodeBaseModule * self;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_named_argument_get_inner (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_cvalue (_tmp1_);
	vala_set_cvalue ((ValaExpression*) expr, _tmp2_);
}

static void
vala_ccode_base_module_real_visit_pointer_indirection (ValaCodeVisitor* base,
                                                       ValaPointerIndirection* expr)
{
	ValaCCodeBaseModule * self;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeUnaryExpression* _tmp3_;
	ValaCCodeUnaryExpression* _tmp4_;
	ValaTargetValue* _tmp5_;
	ValaTargetValue* _tmp6_;
	ValaExpression* _tmp7_;
	ValaExpression* _tmp8_;
	ValaTargetValue* _tmp9_;
	ValaTargetValue* _tmp10_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_pointer_indirection_get_inner (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_cvalue (_tmp1_);
	_tmp3_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp2_);
	_tmp4_ = _tmp3_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp4_);
	_vala_ccode_node_unref0 (_tmp4_);
	_tmp5_ = vala_expression_get_target_value ((ValaExpression*) expr);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_pointer_indirection_get_inner (expr);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_expression_get_target_value (_tmp8_);
	_tmp10_ = _tmp9_;
	G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = vala_get_lvalue (_tmp10_);
}

static void
vala_ccode_base_module_real_visit_addressof_expression (ValaCodeVisitor* base,
                                                        ValaAddressofExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeUnaryExpression* _tmp3_;
	ValaCCodeUnaryExpression* _tmp4_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_addressof_expression_get_inner (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_cvalue (_tmp1_);
	_tmp3_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp2_);
	_tmp4_ = _tmp3_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp4_);
	_vala_ccode_node_unref0 (_tmp4_);
}

static void
vala_ccode_base_module_real_visit_reference_transfer_expression (ValaCodeVisitor* base,
                                                                 ValaReferenceTransferExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* _tmp4_;
	ValaTargetValue* _tmp5_;
	gboolean _tmp6_ = FALSE;
	ValaExpression* _tmp7_;
	ValaExpression* _tmp8_;
	ValaDataType* _tmp9_;
	ValaDataType* _tmp10_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_reference_transfer_expression_get_inner (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_expression_get_target_value (_tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_base_module_store_temp_value (self, _tmp3_, (ValaCodeNode*) expr, NULL);
	_tmp5_ = _tmp4_;
	vala_expression_set_target_value ((ValaExpression*) expr, _tmp5_);
	_vala_target_value_unref0 (_tmp5_);
	_tmp7_ = vala_reference_transfer_expression_get_inner (expr);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_expression_get_value_type (_tmp8_);
	_tmp10_ = _tmp9_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
		ValaExpression* _tmp11_;
		ValaExpression* _tmp12_;
		ValaDataType* _tmp13_;
		ValaDataType* _tmp14_;
		gboolean _tmp15_;
		gboolean _tmp16_;
		_tmp11_ = vala_reference_transfer_expression_get_inner (expr);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_expression_get_value_type (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_data_type_get_nullable (_tmp14_);
		_tmp16_ = _tmp15_;
		_tmp6_ = !_tmp16_;
	} else {
		_tmp6_ = FALSE;
	}
	if (_tmp6_) {
		ValaCCodeFile* _tmp17_;
		ValaCCodeFunctionCall* creation_call = NULL;
		ValaCCodeIdentifier* _tmp18_;
		ValaCCodeIdentifier* _tmp19_;
		ValaCCodeFunctionCall* _tmp20_;
		ValaCCodeFunctionCall* _tmp21_;
		ValaCCodeFunctionCall* _tmp22_;
		ValaExpression* _tmp23_;
		ValaExpression* _tmp24_;
		ValaCCodeExpression* _tmp25_;
		ValaCCodeUnaryExpression* _tmp26_;
		ValaCCodeUnaryExpression* _tmp27_;
		ValaCCodeFunctionCall* _tmp28_;
		ValaCCodeConstant* _tmp29_;
		ValaCCodeConstant* _tmp30_;
		ValaCCodeFunctionCall* _tmp31_;
		ValaExpression* _tmp32_;
		ValaExpression* _tmp33_;
		ValaDataType* _tmp34_;
		ValaDataType* _tmp35_;
		gchar* _tmp36_;
		gchar* _tmp37_;
		gchar* _tmp38_;
		gchar* _tmp39_;
		ValaCCodeIdentifier* _tmp40_;
		ValaCCodeIdentifier* _tmp41_;
		ValaCCodeFunction* _tmp42_;
		ValaCCodeFunction* _tmp43_;
		ValaCCodeFunctionCall* _tmp44_;
		_tmp17_ = self->cfile;
		vala_ccode_file_add_include (_tmp17_, "string.h", FALSE);
		_tmp18_ = vala_ccode_identifier_new ("memset");
		_tmp19_ = _tmp18_;
		_tmp20_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp19_);
		_tmp21_ = _tmp20_;
		_vala_ccode_node_unref0 (_tmp19_);
		creation_call = _tmp21_;
		_tmp22_ = creation_call;
		_tmp23_ = vala_reference_transfer_expression_get_inner (expr);
		_tmp24_ = _tmp23_;
		_tmp25_ = vala_get_cvalue (_tmp24_);
		_tmp26_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp25_);
		_tmp27_ = _tmp26_;
		vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp27_);
		_vala_ccode_node_unref0 (_tmp27_);
		_tmp28_ = creation_call;
		_tmp29_ = vala_ccode_constant_new ("0");
		_tmp30_ = _tmp29_;
		vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp30_);
		_vala_ccode_node_unref0 (_tmp30_);
		_tmp31_ = creation_call;
		_tmp32_ = vala_reference_transfer_expression_get_inner (expr);
		_tmp33_ = _tmp32_;
		_tmp34_ = vala_expression_get_value_type (_tmp33_);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_get_ccode_name ((ValaCodeNode*) _tmp35_);
		_tmp37_ = _tmp36_;
		_tmp38_ = g_strdup_printf ("sizeof (%s)", _tmp37_);
		_tmp39_ = _tmp38_;
		_tmp40_ = vala_ccode_identifier_new (_tmp39_);
		_tmp41_ = _tmp40_;
		vala_ccode_function_call_add_argument (_tmp31_, (ValaCCodeExpression*) _tmp41_);
		_vala_ccode_node_unref0 (_tmp41_);
		_g_free0 (_tmp39_);
		_g_free0 (_tmp37_);
		_tmp42_ = vala_ccode_base_module_get_ccode (self);
		_tmp43_ = _tmp42_;
		_tmp44_ = creation_call;
		vala_ccode_function_add_expression (_tmp43_, (ValaCCodeExpression*) _tmp44_);
		_vala_ccode_node_unref0 (creation_call);
	} else {
		ValaDataType* _tmp45_;
		ValaDataType* _tmp46_;
		_tmp45_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp46_ = _tmp45_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, VALA_TYPE_DELEGATE_TYPE)) {
			ValaCCodeFunction* _tmp47_;
			ValaCCodeFunction* _tmp48_;
			ValaExpression* _tmp49_;
			ValaExpression* _tmp50_;
			ValaCCodeExpression* _tmp51_;
			ValaCCodeConstant* _tmp52_;
			ValaCCodeConstant* _tmp53_;
			ValaCCodeExpression* target = NULL;
			ValaExpression* _tmp54_;
			ValaExpression* _tmp55_;
			ValaTargetValue* _tmp56_;
			ValaTargetValue* _tmp57_;
			ValaCCodeExpression* _tmp58_;
			ValaCCodeExpression* _tmp59_;
			ValaCCodeExpression* target_destroy_notify = NULL;
			ValaExpression* _tmp65_;
			ValaExpression* _tmp66_;
			ValaTargetValue* _tmp67_;
			ValaTargetValue* _tmp68_;
			ValaCCodeExpression* _tmp69_;
			ValaCCodeExpression* _tmp70_;
			_tmp47_ = vala_ccode_base_module_get_ccode (self);
			_tmp48_ = _tmp47_;
			_tmp49_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp50_ = _tmp49_;
			_tmp51_ = vala_get_cvalue (_tmp50_);
			_tmp52_ = vala_ccode_constant_new ("NULL");
			_tmp53_ = _tmp52_;
			vala_ccode_function_add_assignment (_tmp48_, _tmp51_, (ValaCCodeExpression*) _tmp53_);
			_vala_ccode_node_unref0 (_tmp53_);
			_tmp54_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp55_ = _tmp54_;
			_tmp56_ = vala_expression_get_target_value (_tmp55_);
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp57_);
			target = _tmp58_;
			_tmp59_ = target;
			if (_tmp59_ != NULL) {
				ValaCCodeFunction* _tmp60_;
				ValaCCodeFunction* _tmp61_;
				ValaCCodeExpression* _tmp62_;
				ValaCCodeConstant* _tmp63_;
				ValaCCodeConstant* _tmp64_;
				_tmp60_ = vala_ccode_base_module_get_ccode (self);
				_tmp61_ = _tmp60_;
				_tmp62_ = target;
				_tmp63_ = vala_ccode_constant_new ("NULL");
				_tmp64_ = _tmp63_;
				vala_ccode_function_add_assignment (_tmp61_, _tmp62_, (ValaCCodeExpression*) _tmp64_);
				_vala_ccode_node_unref0 (_tmp64_);
			}
			_tmp65_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp66_ = _tmp65_;
			_tmp67_ = vala_expression_get_target_value (_tmp66_);
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp68_);
			target_destroy_notify = _tmp69_;
			_tmp70_ = target_destroy_notify;
			if (_tmp70_ != NULL) {
				ValaCCodeFunction* _tmp71_;
				ValaCCodeFunction* _tmp72_;
				ValaCCodeExpression* _tmp73_;
				ValaCCodeConstant* _tmp74_;
				ValaCCodeConstant* _tmp75_;
				_tmp71_ = vala_ccode_base_module_get_ccode (self);
				_tmp72_ = _tmp71_;
				_tmp73_ = target_destroy_notify;
				_tmp74_ = vala_ccode_constant_new ("NULL");
				_tmp75_ = _tmp74_;
				vala_ccode_function_add_assignment (_tmp72_, _tmp73_, (ValaCCodeExpression*) _tmp75_);
				_vala_ccode_node_unref0 (_tmp75_);
			}
			_vala_ccode_node_unref0 (target_destroy_notify);
			_vala_ccode_node_unref0 (target);
		} else {
			ValaExpression* _tmp76_;
			ValaExpression* _tmp77_;
			ValaDataType* _tmp78_;
			ValaDataType* _tmp79_;
			_tmp76_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp77_ = _tmp76_;
			_tmp78_ = vala_expression_get_value_type (_tmp77_);
			_tmp79_ = _tmp78_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp79_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* array_type = NULL;
				ValaExpression* _tmp80_;
				ValaExpression* _tmp81_;
				ValaDataType* _tmp82_;
				ValaDataType* _tmp83_;
				ValaArrayType* _tmp84_;
				ValaGLibValue* glib_value = NULL;
				ValaExpression* _tmp85_;
				ValaExpression* _tmp86_;
				ValaTargetValue* _tmp87_;
				ValaTargetValue* _tmp88_;
				ValaGLibValue* _tmp89_;
				ValaCCodeFunction* _tmp90_;
				ValaCCodeFunction* _tmp91_;
				ValaExpression* _tmp92_;
				ValaExpression* _tmp93_;
				ValaCCodeExpression* _tmp94_;
				ValaCCodeConstant* _tmp95_;
				ValaCCodeConstant* _tmp96_;
				ValaGLibValue* _tmp97_;
				ValaList* _tmp98_;
				_tmp80_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp81_ = _tmp80_;
				_tmp82_ = vala_expression_get_value_type (_tmp81_);
				_tmp83_ = _tmp82_;
				_tmp84_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp83_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				array_type = _tmp84_;
				_tmp85_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp86_ = _tmp85_;
				_tmp87_ = vala_expression_get_target_value (_tmp86_);
				_tmp88_ = _tmp87_;
				_tmp89_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp88_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
				glib_value = _tmp89_;
				_tmp90_ = vala_ccode_base_module_get_ccode (self);
				_tmp91_ = _tmp90_;
				_tmp92_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp93_ = _tmp92_;
				_tmp94_ = vala_get_cvalue (_tmp93_);
				_tmp95_ = vala_ccode_constant_new ("NULL");
				_tmp96_ = _tmp95_;
				vala_ccode_function_add_assignment (_tmp91_, _tmp94_, (ValaCCodeExpression*) _tmp96_);
				_vala_ccode_node_unref0 (_tmp96_);
				_tmp97_ = glib_value;
				_tmp98_ = _tmp97_->array_length_cvalues;
				if (_tmp98_ != NULL) {
					{
						gint dim = 0;
						dim = 1;
						{
							gboolean _tmp99_ = FALSE;
							_tmp99_ = TRUE;
							while (TRUE) {
								ValaArrayType* _tmp101_;
								gint _tmp102_;
								gint _tmp103_;
								ValaCCodeFunction* _tmp104_;
								ValaCCodeFunction* _tmp105_;
								ValaGLibValue* _tmp106_;
								ValaCCodeExpression* _tmp107_;
								ValaCCodeExpression* _tmp108_;
								ValaCCodeConstant* _tmp109_;
								ValaCCodeConstant* _tmp110_;
								if (!_tmp99_) {
									gint _tmp100_;
									_tmp100_ = dim;
									dim = _tmp100_ + 1;
								}
								_tmp99_ = FALSE;
								_tmp101_ = array_type;
								_tmp102_ = vala_array_type_get_rank (_tmp101_);
								_tmp103_ = _tmp102_;
								if (!(dim <= _tmp103_)) {
									break;
								}
								_tmp104_ = vala_ccode_base_module_get_ccode (self);
								_tmp105_ = _tmp104_;
								_tmp106_ = glib_value;
								_tmp107_ = vala_ccode_base_module_get_array_length_cvalue (self, (ValaTargetValue*) _tmp106_, dim);
								_tmp108_ = _tmp107_;
								_tmp109_ = vala_ccode_constant_new ("0");
								_tmp110_ = _tmp109_;
								vala_ccode_function_add_assignment (_tmp105_, _tmp108_, (ValaCCodeExpression*) _tmp110_);
								_vala_ccode_node_unref0 (_tmp110_);
								_vala_ccode_node_unref0 (_tmp108_);
							}
						}
					}
				}
				_vala_target_value_unref0 (glib_value);
				_vala_code_node_unref0 (array_type);
			} else {
				ValaCCodeFunction* _tmp111_;
				ValaCCodeFunction* _tmp112_;
				ValaExpression* _tmp113_;
				ValaExpression* _tmp114_;
				ValaCCodeExpression* _tmp115_;
				ValaCCodeConstant* _tmp116_;
				ValaCCodeConstant* _tmp117_;
				_tmp111_ = vala_ccode_base_module_get_ccode (self);
				_tmp112_ = _tmp111_;
				_tmp113_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp114_ = _tmp113_;
				_tmp115_ = vala_get_cvalue (_tmp114_);
				_tmp116_ = vala_ccode_constant_new ("NULL");
				_tmp117_ = _tmp116_;
				vala_ccode_function_add_assignment (_tmp112_, _tmp115_, (ValaCCodeExpression*) _tmp117_);
				_vala_ccode_node_unref0 (_tmp117_);
			}
		}
	}
}

static void
vala_ccode_base_module_real_visit_binary_expression (ValaCodeVisitor* base,
                                                     ValaBinaryExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaCCodeExpression* cleft = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* cright = NULL;
	ValaExpression* _tmp4_;
	ValaExpression* _tmp5_;
	ValaCCodeExpression* _tmp6_;
	ValaCCodeExpression* _tmp7_;
	ValaCCodeExpression* left_chain = NULL;
	gboolean _tmp8_;
	gboolean _tmp9_;
	ValaCCodeBinaryOperator op = 0;
	ValaBinaryOperator _tmp51_;
	ValaBinaryOperator _tmp52_;
	gboolean _tmp154_ = FALSE;
	ValaBinaryOperator _tmp155_;
	ValaBinaryOperator _tmp156_;
	gboolean _tmp227_ = FALSE;
	gboolean _tmp228_ = FALSE;
	gboolean _tmp229_ = FALSE;
	ValaExpression* _tmp230_;
	ValaExpression* _tmp231_;
	ValaDataType* _tmp232_;
	ValaDataType* _tmp233_;
	gboolean is_string_comparison = FALSE;
	gboolean _tmp248_ = FALSE;
	ValaExpression* _tmp249_;
	ValaExpression* _tmp250_;
	gboolean has_string_literal = FALSE;
	gboolean _tmp253_ = FALSE;
	ValaCCodeExpression* _tmp380_;
	ValaCCodeExpression* _tmp381_;
	ValaCCodeBinaryExpression* _tmp382_;
	ValaCCodeBinaryExpression* _tmp383_;
	ValaCCodeExpression* _tmp384_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_binary_expression_get_left (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_cvalue (_tmp1_);
	_tmp3_ = _vala_ccode_node_ref0 (_tmp2_);
	cleft = _tmp3_;
	_tmp4_ = vala_binary_expression_get_right (expr);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_get_cvalue (_tmp5_);
	_tmp7_ = _vala_ccode_node_ref0 (_tmp6_);
	cright = _tmp7_;
	left_chain = NULL;
	_tmp8_ = vala_binary_expression_get_is_chained (expr);
	_tmp9_ = _tmp8_;
	if (_tmp9_) {
		ValaBinaryExpression* lbe = NULL;
		ValaExpression* _tmp10_;
		ValaExpression* _tmp11_;
		ValaBinaryExpression* _tmp12_;
		ValaLocalVariable* temp_decl = NULL;
		ValaBinaryExpression* _tmp13_;
		ValaExpression* _tmp14_;
		ValaExpression* _tmp15_;
		ValaDataType* _tmp16_;
		ValaDataType* _tmp17_;
		ValaLocalVariable* _tmp18_;
		ValaLocalVariable* _tmp19_;
		ValaCCodeExpression* cvar = NULL;
		ValaLocalVariable* _tmp20_;
		const gchar* _tmp21_;
		const gchar* _tmp22_;
		ValaCCodeExpression* _tmp23_;
		ValaCCodeBinaryExpression* clbe = NULL;
		ValaBinaryExpression* _tmp24_;
		ValaCCodeExpression* _tmp25_;
		ValaCCodeBinaryExpression* _tmp26_;
		ValaBinaryExpression* _tmp27_;
		gboolean _tmp28_;
		gboolean _tmp29_;
		ValaCCodeFunction* _tmp34_;
		ValaCCodeFunction* _tmp35_;
		ValaCCodeExpression* _tmp36_;
		ValaBinaryExpression* _tmp37_;
		ValaExpression* _tmp38_;
		ValaExpression* _tmp39_;
		ValaCCodeExpression* _tmp40_;
		ValaCCodeBinaryExpression* _tmp41_;
		ValaLocalVariable* _tmp42_;
		const gchar* _tmp43_;
		const gchar* _tmp44_;
		ValaCCodeExpression* _tmp45_;
		ValaCCodeExpression* _tmp46_;
		ValaCCodeExpression* _tmp47_;
		ValaCCodeExpression* _tmp48_;
		ValaCCodeExpression* _tmp49_;
		ValaCCodeExpression* _tmp50_;
		_tmp10_ = vala_binary_expression_get_left (expr);
		_tmp11_ = _tmp10_;
		_tmp12_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpression));
		lbe = _tmp12_;
		_tmp13_ = lbe;
		_tmp14_ = vala_binary_expression_get_right (_tmp13_);
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_expression_get_target_type (_tmp15_);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_ccode_base_module_get_temp_variable (self, _tmp17_, TRUE, NULL, FALSE);
		temp_decl = _tmp18_;
		_tmp19_ = temp_decl;
		vala_ccode_base_module_emit_temp_var (self, _tmp19_, FALSE);
		_tmp20_ = temp_decl;
		_tmp21_ = vala_symbol_get_name ((ValaSymbol*) _tmp20_);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp22_);
		cvar = _tmp23_;
		_tmp24_ = lbe;
		_tmp25_ = vala_get_cvalue ((ValaExpression*) _tmp24_);
		_tmp26_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
		clbe = _tmp26_;
		_tmp27_ = lbe;
		_tmp28_ = vala_binary_expression_get_is_chained (_tmp27_);
		_tmp29_ = _tmp28_;
		if (_tmp29_) {
			ValaCCodeBinaryExpression* _tmp30_;
			ValaCCodeExpression* _tmp31_;
			ValaCCodeExpression* _tmp32_;
			ValaCCodeBinaryExpression* _tmp33_;
			_tmp30_ = clbe;
			_tmp31_ = vala_ccode_binary_expression_get_right (_tmp30_);
			_tmp32_ = _tmp31_;
			_tmp33_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
			_vala_ccode_node_unref0 (clbe);
			clbe = _tmp33_;
		}
		_tmp34_ = vala_ccode_base_module_get_ccode (self);
		_tmp35_ = _tmp34_;
		_tmp36_ = cvar;
		_tmp37_ = lbe;
		_tmp38_ = vala_binary_expression_get_right (_tmp37_);
		_tmp39_ = _tmp38_;
		_tmp40_ = vala_get_cvalue (_tmp39_);
		vala_ccode_function_add_assignment (_tmp35_, _tmp36_, _tmp40_);
		_tmp41_ = clbe;
		_tmp42_ = temp_decl;
		_tmp43_ = vala_symbol_get_name ((ValaSymbol*) _tmp42_);
		_tmp44_ = _tmp43_;
		_tmp45_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp44_);
		_tmp46_ = _tmp45_;
		vala_ccode_binary_expression_set_right (_tmp41_, _tmp46_);
		_vala_ccode_node_unref0 (_tmp46_);
		_tmp47_ = cleft;
		_tmp48_ = _vala_ccode_node_ref0 (_tmp47_);
		_vala_ccode_node_unref0 (left_chain);
		left_chain = _tmp48_;
		_tmp49_ = cvar;
		_tmp50_ = _vala_ccode_node_ref0 (_tmp49_);
		_vala_ccode_node_unref0 (cleft);
		cleft = _tmp50_;
		_vala_ccode_node_unref0 (clbe);
		_vala_ccode_node_unref0 (cvar);
		_vala_code_node_unref0 (temp_decl);
		_vala_code_node_unref0 (lbe);
	}
	_tmp51_ = vala_binary_expression_get_operator (expr);
	_tmp52_ = _tmp51_;
	switch (_tmp52_) {
		case VALA_BINARY_OPERATOR_PLUS:
		{
			op = VALA_CCODE_BINARY_OPERATOR_PLUS;
			break;
		}
		case VALA_BINARY_OPERATOR_MINUS:
		{
			op = VALA_CCODE_BINARY_OPERATOR_MINUS;
			break;
		}
		case VALA_BINARY_OPERATOR_MUL:
		{
			op = VALA_CCODE_BINARY_OPERATOR_MUL;
			break;
		}
		case VALA_BINARY_OPERATOR_DIV:
		{
			op = VALA_CCODE_BINARY_OPERATOR_DIV;
			break;
		}
		case VALA_BINARY_OPERATOR_MOD:
		{
			ValaDataType* _tmp53_;
			ValaDataType* _tmp54_;
			ValaDataType* _tmp55_;
			_tmp53_ = vala_expression_get_value_type ((ValaExpression*) expr);
			_tmp54_ = _tmp53_;
			_tmp55_ = self->double_type;
			if (vala_data_type_equals (_tmp54_, _tmp55_)) {
				ValaCCodeFile* _tmp56_;
				ValaCCodeFunctionCall* ccall = NULL;
				ValaCCodeIdentifier* _tmp57_;
				ValaCCodeIdentifier* _tmp58_;
				ValaCCodeFunctionCall* _tmp59_;
				ValaCCodeFunctionCall* _tmp60_;
				ValaCCodeFunctionCall* _tmp61_;
				ValaCCodeExpression* _tmp62_;
				ValaCCodeFunctionCall* _tmp63_;
				ValaCCodeExpression* _tmp64_;
				ValaCCodeFunctionCall* _tmp65_;
				_tmp56_ = self->cfile;
				vala_ccode_file_add_include (_tmp56_, "math.h", FALSE);
				_tmp57_ = vala_ccode_identifier_new ("fmod");
				_tmp58_ = _tmp57_;
				_tmp59_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp58_);
				_tmp60_ = _tmp59_;
				_vala_ccode_node_unref0 (_tmp58_);
				ccall = _tmp60_;
				_tmp61_ = ccall;
				_tmp62_ = cleft;
				vala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
				_tmp63_ = ccall;
				_tmp64_ = cright;
				vala_ccode_function_call_add_argument (_tmp63_, _tmp64_);
				_tmp65_ = ccall;
				vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp65_);
				_vala_ccode_node_unref0 (ccall);
				_vala_ccode_node_unref0 (left_chain);
				_vala_ccode_node_unref0 (cright);
				_vala_ccode_node_unref0 (cleft);
				return;
			} else {
				ValaDataType* _tmp66_;
				ValaDataType* _tmp67_;
				ValaDataType* _tmp68_;
				_tmp66_ = vala_expression_get_value_type ((ValaExpression*) expr);
				_tmp67_ = _tmp66_;
				_tmp68_ = self->float_type;
				if (vala_data_type_equals (_tmp67_, _tmp68_)) {
					ValaCCodeFile* _tmp69_;
					ValaCCodeFunctionCall* ccall = NULL;
					ValaCCodeIdentifier* _tmp70_;
					ValaCCodeIdentifier* _tmp71_;
					ValaCCodeFunctionCall* _tmp72_;
					ValaCCodeFunctionCall* _tmp73_;
					ValaCCodeFunctionCall* _tmp74_;
					ValaCCodeExpression* _tmp75_;
					ValaCCodeFunctionCall* _tmp76_;
					ValaCCodeExpression* _tmp77_;
					ValaCCodeFunctionCall* _tmp78_;
					_tmp69_ = self->cfile;
					vala_ccode_file_add_include (_tmp69_, "math.h", FALSE);
					_tmp70_ = vala_ccode_identifier_new ("fmodf");
					_tmp71_ = _tmp70_;
					_tmp72_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp71_);
					_tmp73_ = _tmp72_;
					_vala_ccode_node_unref0 (_tmp71_);
					ccall = _tmp73_;
					_tmp74_ = ccall;
					_tmp75_ = cleft;
					vala_ccode_function_call_add_argument (_tmp74_, _tmp75_);
					_tmp76_ = ccall;
					_tmp77_ = cright;
					vala_ccode_function_call_add_argument (_tmp76_, _tmp77_);
					_tmp78_ = ccall;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp78_);
					_vala_ccode_node_unref0 (ccall);
					_vala_ccode_node_unref0 (left_chain);
					_vala_ccode_node_unref0 (cright);
					_vala_ccode_node_unref0 (cleft);
					return;
				} else {
					op = VALA_CCODE_BINARY_OPERATOR_MOD;
				}
			}
			break;
		}
		case VALA_BINARY_OPERATOR_SHIFT_LEFT:
		{
			op = VALA_CCODE_BINARY_OPERATOR_SHIFT_LEFT;
			break;
		}
		case VALA_BINARY_OPERATOR_SHIFT_RIGHT:
		{
			op = VALA_CCODE_BINARY_OPERATOR_SHIFT_RIGHT;
			break;
		}
		case VALA_BINARY_OPERATOR_LESS_THAN:
		{
			op = VALA_CCODE_BINARY_OPERATOR_LESS_THAN;
			break;
		}
		case VALA_BINARY_OPERATOR_GREATER_THAN:
		{
			op = VALA_CCODE_BINARY_OPERATOR_GREATER_THAN;
			break;
		}
		case VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
		{
			op = VALA_CCODE_BINARY_OPERATOR_LESS_THAN_OR_EQUAL;
			break;
		}
		case VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
		{
			op = VALA_CCODE_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL;
			break;
		}
		case VALA_BINARY_OPERATOR_EQUALITY:
		{
			op = VALA_CCODE_BINARY_OPERATOR_EQUALITY;
			break;
		}
		case VALA_BINARY_OPERATOR_INEQUALITY:
		{
			op = VALA_CCODE_BINARY_OPERATOR_INEQUALITY;
			break;
		}
		case VALA_BINARY_OPERATOR_BITWISE_AND:
		{
			op = VALA_CCODE_BINARY_OPERATOR_BITWISE_AND;
			break;
		}
		case VALA_BINARY_OPERATOR_BITWISE_OR:
		{
			op = VALA_CCODE_BINARY_OPERATOR_BITWISE_OR;
			break;
		}
		case VALA_BINARY_OPERATOR_BITWISE_XOR:
		{
			op = VALA_CCODE_BINARY_OPERATOR_BITWISE_XOR;
			break;
		}
		case VALA_BINARY_OPERATOR_AND:
		{
			op = VALA_CCODE_BINARY_OPERATOR_AND;
			break;
		}
		case VALA_BINARY_OPERATOR_OR:
		{
			op = VALA_CCODE_BINARY_OPERATOR_OR;
			break;
		}
		case VALA_BINARY_OPERATOR_IN:
		{
			ValaExpression* _tmp79_;
			ValaExpression* _tmp80_;
			ValaDataType* _tmp81_;
			ValaDataType* _tmp82_;
			_tmp79_ = vala_binary_expression_get_right (expr);
			_tmp80_ = _tmp79_;
			_tmp81_ = vala_expression_get_value_type (_tmp80_);
			_tmp82_ = _tmp81_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp82_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* array_type = NULL;
				ValaExpression* _tmp83_;
				ValaExpression* _tmp84_;
				ValaDataType* _tmp85_;
				ValaDataType* _tmp86_;
				ValaDataType* element_type = NULL;
				ValaArrayType* _tmp87_;
				ValaDataType* _tmp88_;
				ValaDataType* _tmp89_;
				ValaCCodeFunctionCall* ccall = NULL;
				ValaArrayType* _tmp90_;
				gchar* _tmp91_;
				gchar* _tmp92_;
				ValaCCodeIdentifier* _tmp93_;
				ValaCCodeIdentifier* _tmp94_;
				ValaCCodeFunctionCall* _tmp95_;
				ValaCCodeFunctionCall* _tmp96_;
				ValaCCodeExpression* node = NULL;
				ValaCCodeFunctionCall* _tmp97_;
				ValaCCodeExpression* _tmp98_;
				ValaCCodeFunctionCall* _tmp99_;
				ValaCCodeExpression* _tmp100_;
				ValaCCodeFunctionCall* _tmp101_;
				ValaExpression* _tmp102_;
				ValaExpression* _tmp103_;
				ValaCCodeExpression* _tmp104_;
				ValaCCodeExpression* _tmp105_;
				ValaDataType* _tmp106_;
				ValaCCodeExpression* _tmp146_;
				_tmp83_ = vala_binary_expression_get_right (expr);
				_tmp84_ = _tmp83_;
				_tmp85_ = vala_expression_get_value_type (_tmp84_);
				_tmp86_ = _tmp85_;
				array_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, VALA_TYPE_ARRAY_TYPE, ValaArrayType);
				_tmp87_ = array_type;
				_tmp88_ = vala_array_type_get_element_type (_tmp87_);
				_tmp89_ = _tmp88_;
				element_type = _tmp89_;
				_tmp90_ = array_type;
				_tmp91_ = vala_ccode_base_module_generate_array_contains_wrapper (self, _tmp90_);
				_tmp92_ = _tmp91_;
				_tmp93_ = vala_ccode_identifier_new (_tmp92_);
				_tmp94_ = _tmp93_;
				_tmp95_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp94_);
				_tmp96_ = _tmp95_;
				_vala_ccode_node_unref0 (_tmp94_);
				_g_free0 (_tmp92_);
				ccall = _tmp96_;
				_tmp97_ = ccall;
				_tmp98_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp97_);
				node = _tmp98_;
				_tmp99_ = ccall;
				_tmp100_ = cright;
				vala_ccode_function_call_add_argument (_tmp99_, _tmp100_);
				_tmp101_ = ccall;
				_tmp102_ = vala_binary_expression_get_right (expr);
				_tmp103_ = _tmp102_;
				_tmp104_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp103_, -1);
				_tmp105_ = _tmp104_;
				vala_ccode_function_call_add_argument (_tmp101_, _tmp105_);
				_vala_ccode_node_unref0 (_tmp105_);
				_tmp106_ = element_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp106_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
					ValaCCodeFunctionCall* _tmp107_;
					ValaCCodeExpression* _tmp108_;
					ValaCCodeUnaryExpression* _tmp109_;
					ValaCCodeUnaryExpression* _tmp110_;
					_tmp107_ = ccall;
					_tmp108_ = cleft;
					_tmp109_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp108_);
					_tmp110_ = _tmp109_;
					vala_ccode_function_call_add_argument (_tmp107_, (ValaCCodeExpression*) _tmp110_);
					_vala_ccode_node_unref0 (_tmp110_);
				} else {
					gboolean _tmp111_ = FALSE;
					gboolean _tmp112_ = FALSE;
					gboolean _tmp113_ = FALSE;
					ValaDataType* _tmp114_;
					_tmp114_ = element_type;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, VALA_TYPE_VALUE_TYPE)) {
						ValaDataType* _tmp115_;
						gboolean _tmp116_;
						gboolean _tmp117_;
						_tmp115_ = element_type;
						_tmp116_ = vala_data_type_get_nullable (_tmp115_);
						_tmp117_ = _tmp116_;
						_tmp113_ = !_tmp117_;
					} else {
						_tmp113_ = FALSE;
					}
					if (_tmp113_) {
						ValaExpression* _tmp118_;
						ValaExpression* _tmp119_;
						ValaDataType* _tmp120_;
						ValaDataType* _tmp121_;
						_tmp118_ = vala_binary_expression_get_left (expr);
						_tmp119_ = _tmp118_;
						_tmp120_ = vala_expression_get_value_type (_tmp119_);
						_tmp121_ = _tmp120_;
						_tmp112_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp121_, VALA_TYPE_VALUE_TYPE);
					} else {
						_tmp112_ = FALSE;
					}
					if (_tmp112_) {
						ValaExpression* _tmp122_;
						ValaExpression* _tmp123_;
						ValaDataType* _tmp124_;
						ValaDataType* _tmp125_;
						gboolean _tmp126_;
						gboolean _tmp127_;
						_tmp122_ = vala_binary_expression_get_left (expr);
						_tmp123_ = _tmp122_;
						_tmp124_ = vala_expression_get_value_type (_tmp123_);
						_tmp125_ = _tmp124_;
						_tmp126_ = vala_data_type_get_nullable (_tmp125_);
						_tmp127_ = _tmp126_;
						_tmp111_ = _tmp127_;
					} else {
						_tmp111_ = FALSE;
					}
					if (_tmp111_) {
						ValaCCodeBinaryExpression* cnull = NULL;
						ValaCCodeExpression* _tmp128_;
						ValaCCodeConstant* _tmp129_;
						ValaCCodeConstant* _tmp130_;
						ValaCCodeBinaryExpression* _tmp131_;
						ValaCCodeBinaryExpression* _tmp132_;
						ValaCCodeFunctionCall* _tmp133_;
						ValaCCodeExpression* _tmp134_;
						ValaCCodeUnaryExpression* _tmp135_;
						ValaCCodeUnaryExpression* _tmp136_;
						ValaCCodeBinaryExpression* _tmp137_;
						ValaCCodeConstant* _tmp138_;
						ValaCCodeConstant* _tmp139_;
						ValaCCodeFunctionCall* _tmp140_;
						ValaCCodeConditionalExpression* _tmp141_;
						ValaCCodeConditionalExpression* _tmp142_;
						ValaCCodeParenthesizedExpression* _tmp143_;
						_tmp128_ = cleft;
						_tmp129_ = vala_ccode_constant_new ("NULL");
						_tmp130_ = _tmp129_;
						_tmp131_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp128_, (ValaCCodeExpression*) _tmp130_);
						_tmp132_ = _tmp131_;
						_vala_ccode_node_unref0 (_tmp130_);
						cnull = _tmp132_;
						_tmp133_ = ccall;
						_tmp134_ = cleft;
						_tmp135_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp134_);
						_tmp136_ = _tmp135_;
						vala_ccode_function_call_add_argument (_tmp133_, (ValaCCodeExpression*) _tmp136_);
						_vala_ccode_node_unref0 (_tmp136_);
						_tmp137_ = cnull;
						_tmp138_ = vala_ccode_constant_new ("FALSE");
						_tmp139_ = _tmp138_;
						_tmp140_ = ccall;
						_tmp141_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp137_, (ValaCCodeExpression*) _tmp139_, (ValaCCodeExpression*) _tmp140_);
						_tmp142_ = _tmp141_;
						_tmp143_ = vala_ccode_parenthesized_expression_new ((ValaCCodeExpression*) _tmp142_);
						_vala_ccode_node_unref0 (node);
						node = (ValaCCodeExpression*) _tmp143_;
						_vala_ccode_node_unref0 (_tmp142_);
						_vala_ccode_node_unref0 (_tmp139_);
						_vala_ccode_node_unref0 (cnull);
					} else {
						ValaCCodeFunctionCall* _tmp144_;
						ValaCCodeExpression* _tmp145_;
						_tmp144_ = ccall;
						_tmp145_ = cleft;
						vala_ccode_function_call_add_argument (_tmp144_, _tmp145_);
					}
				}
				_tmp146_ = node;
				vala_set_cvalue ((ValaExpression*) expr, _tmp146_);
				_vala_ccode_node_unref0 (node);
				_vala_ccode_node_unref0 (ccall);
			} else {
				ValaCCodeExpression* _tmp147_;
				ValaCCodeExpression* _tmp148_;
				ValaCCodeBinaryExpression* _tmp149_;
				ValaCCodeBinaryExpression* _tmp150_;
				ValaCCodeExpression* _tmp151_;
				ValaCCodeBinaryExpression* _tmp152_;
				ValaCCodeBinaryExpression* _tmp153_;
				_tmp147_ = cright;
				_tmp148_ = cleft;
				_tmp149_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_BITWISE_AND, _tmp147_, _tmp148_);
				_tmp150_ = _tmp149_;
				_tmp151_ = cleft;
				_tmp152_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp150_, _tmp151_);
				_tmp153_ = _tmp152_;
				vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp153_);
				_vala_ccode_node_unref0 (_tmp153_);
				_vala_ccode_node_unref0 (_tmp150_);
			}
			_vala_ccode_node_unref0 (left_chain);
			_vala_ccode_node_unref0 (cright);
			_vala_ccode_node_unref0 (cleft);
			return;
		}
		default:
		{
			g_assert_not_reached ();
		}
	}
	_tmp155_ = vala_binary_expression_get_operator (expr);
	_tmp156_ = _tmp155_;
	if (_tmp156_ == VALA_BINARY_OPERATOR_EQUALITY) {
		_tmp154_ = TRUE;
	} else {
		ValaBinaryOperator _tmp157_;
		ValaBinaryOperator _tmp158_;
		_tmp157_ = vala_binary_expression_get_operator (expr);
		_tmp158_ = _tmp157_;
		_tmp154_ = _tmp158_ == VALA_BINARY_OPERATOR_INEQUALITY;
	}
	if (_tmp154_) {
		ValaDataType* left_type = NULL;
		ValaExpression* _tmp159_;
		ValaExpression* _tmp160_;
		ValaDataType* _tmp161_;
		ValaDataType* _tmp162_;
		ValaDataType* _tmp163_;
		ValaDataType* right_type = NULL;
		ValaExpression* _tmp164_;
		ValaExpression* _tmp165_;
		ValaDataType* _tmp166_;
		ValaDataType* _tmp167_;
		ValaDataType* _tmp168_;
		gboolean _tmp169_ = FALSE;
		ValaDataType* _tmp170_;
		_tmp159_ = vala_binary_expression_get_left (expr);
		_tmp160_ = _tmp159_;
		_tmp161_ = vala_expression_get_target_type (_tmp160_);
		_tmp162_ = _tmp161_;
		_tmp163_ = _vala_code_node_ref0 (_tmp162_);
		left_type = _tmp163_;
		_tmp164_ = vala_binary_expression_get_right (expr);
		_tmp165_ = _tmp164_;
		_tmp166_ = vala_expression_get_target_type (_tmp165_);
		_tmp167_ = _tmp166_;
		_tmp168_ = _vala_code_node_ref0 (_tmp167_);
		right_type = _tmp168_;
		vala_ccode_base_module_make_comparable_cexpression (self, &left_type, &cleft, &right_type, &cright);
		_tmp170_ = left_type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp170_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
			ValaDataType* _tmp171_;
			_tmp171_ = right_type;
			_tmp169_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp171_, VALA_TYPE_STRUCT_VALUE_TYPE);
		} else {
			_tmp169_ = FALSE;
		}
		if (_tmp169_) {
			gchar* equalfunc = NULL;
			ValaDataType* _tmp172_;
			ValaTypeSymbol* _tmp173_;
			ValaTypeSymbol* _tmp174_;
			gchar* _tmp175_;
			ValaCCodeFunctionCall* ccall = NULL;
			const gchar* _tmp176_;
			ValaCCodeIdentifier* _tmp177_;
			ValaCCodeIdentifier* _tmp178_;
			ValaCCodeFunctionCall* _tmp179_;
			ValaCCodeFunctionCall* _tmp180_;
			ValaCCodeFunctionCall* _tmp181_;
			ValaCCodeExpression* _tmp182_;
			ValaCCodeFunctionCall* _tmp183_;
			ValaCCodeExpression* _tmp184_;
			ValaCCodeFunctionCall* _tmp185_;
			ValaCCodeExpression* _tmp186_;
			ValaCCodeExpression* _tmp187_;
			_tmp172_ = left_type;
			_tmp173_ = vala_data_type_get_type_symbol (_tmp172_);
			_tmp174_ = _tmp173_;
			_tmp175_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp174_, VALA_TYPE_STRUCT, ValaStruct));
			equalfunc = _tmp175_;
			_tmp176_ = equalfunc;
			_tmp177_ = vala_ccode_identifier_new (_tmp176_);
			_tmp178_ = _tmp177_;
			_tmp179_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp178_);
			_tmp180_ = _tmp179_;
			_vala_ccode_node_unref0 (_tmp178_);
			ccall = _tmp180_;
			_tmp181_ = ccall;
			_tmp182_ = cleft;
			vala_ccode_function_call_add_argument (_tmp181_, _tmp182_);
			_tmp183_ = ccall;
			_tmp184_ = cright;
			vala_ccode_function_call_add_argument (_tmp183_, _tmp184_);
			_tmp185_ = ccall;
			_tmp186_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp185_);
			_vala_ccode_node_unref0 (cleft);
			cleft = _tmp186_;
			_tmp187_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
			_vala_ccode_node_unref0 (cright);
			cright = _tmp187_;
			_vala_ccode_node_unref0 (ccall);
			_g_free0 (equalfunc);
		} else {
			gboolean _tmp188_ = FALSE;
			gboolean _tmp189_ = FALSE;
			gboolean _tmp190_ = FALSE;
			gboolean _tmp191_ = FALSE;
			gboolean _tmp192_ = FALSE;
			gboolean _tmp193_ = FALSE;
			ValaDataType* _tmp194_;
			_tmp194_ = left_type;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp194_, VALA_TYPE_INTEGER_TYPE)) {
				_tmp193_ = TRUE;
			} else {
				ValaDataType* _tmp195_;
				_tmp195_ = left_type;
				_tmp193_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp195_, VALA_TYPE_FLOATING_TYPE);
			}
			if (_tmp193_) {
				_tmp192_ = TRUE;
			} else {
				ValaDataType* _tmp196_;
				_tmp196_ = left_type;
				_tmp192_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp196_, VALA_TYPE_BOOLEAN_TYPE);
			}
			if (_tmp192_) {
				_tmp191_ = TRUE;
			} else {
				ValaDataType* _tmp197_;
				_tmp197_ = left_type;
				_tmp191_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp197_, VALA_TYPE_ENUM_VALUE_TYPE);
			}
			if (_tmp191_) {
				ValaDataType* _tmp198_;
				gboolean _tmp199_;
				gboolean _tmp200_;
				_tmp198_ = left_type;
				_tmp199_ = vala_data_type_get_nullable (_tmp198_);
				_tmp200_ = _tmp199_;
				_tmp190_ = _tmp200_;
			} else {
				_tmp190_ = FALSE;
			}
			if (_tmp190_) {
				gboolean _tmp201_ = FALSE;
				gboolean _tmp202_ = FALSE;
				gboolean _tmp203_ = FALSE;
				ValaDataType* _tmp204_;
				_tmp204_ = right_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp204_, VALA_TYPE_INTEGER_TYPE)) {
					_tmp203_ = TRUE;
				} else {
					ValaDataType* _tmp205_;
					_tmp205_ = right_type;
					_tmp203_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp205_, VALA_TYPE_FLOATING_TYPE);
				}
				if (_tmp203_) {
					_tmp202_ = TRUE;
				} else {
					ValaDataType* _tmp206_;
					_tmp206_ = right_type;
					_tmp202_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp206_, VALA_TYPE_BOOLEAN_TYPE);
				}
				if (_tmp202_) {
					_tmp201_ = TRUE;
				} else {
					ValaDataType* _tmp207_;
					_tmp207_ = right_type;
					_tmp201_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp207_, VALA_TYPE_ENUM_VALUE_TYPE);
				}
				_tmp189_ = _tmp201_;
			} else {
				_tmp189_ = FALSE;
			}
			if (_tmp189_) {
				ValaDataType* _tmp208_;
				gboolean _tmp209_;
				gboolean _tmp210_;
				_tmp208_ = right_type;
				_tmp209_ = vala_data_type_get_nullable (_tmp208_);
				_tmp210_ = _tmp209_;
				_tmp188_ = _tmp210_;
			} else {
				_tmp188_ = FALSE;
			}
			if (_tmp188_) {
				gchar* equalfunc = NULL;
				ValaDataType* _tmp211_;
				ValaTypeSymbol* _tmp212_;
				ValaTypeSymbol* _tmp213_;
				gchar* _tmp214_;
				ValaCCodeFunctionCall* ccall = NULL;
				const gchar* _tmp215_;
				ValaCCodeIdentifier* _tmp216_;
				ValaCCodeIdentifier* _tmp217_;
				ValaCCodeFunctionCall* _tmp218_;
				ValaCCodeFunctionCall* _tmp219_;
				ValaCCodeFunctionCall* _tmp220_;
				ValaCCodeExpression* _tmp221_;
				ValaCCodeFunctionCall* _tmp222_;
				ValaCCodeExpression* _tmp223_;
				ValaCCodeFunctionCall* _tmp224_;
				ValaCCodeExpression* _tmp225_;
				ValaCCodeExpression* _tmp226_;
				_tmp211_ = left_type;
				_tmp212_ = vala_data_type_get_type_symbol (_tmp211_);
				_tmp213_ = _tmp212_;
				_tmp214_ = vala_ccode_base_module_generate_numeric_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp213_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
				equalfunc = _tmp214_;
				_tmp215_ = equalfunc;
				_tmp216_ = vala_ccode_identifier_new (_tmp215_);
				_tmp217_ = _tmp216_;
				_tmp218_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp217_);
				_tmp219_ = _tmp218_;
				_vala_ccode_node_unref0 (_tmp217_);
				ccall = _tmp219_;
				_tmp220_ = ccall;
				_tmp221_ = cleft;
				vala_ccode_function_call_add_argument (_tmp220_, _tmp221_);
				_tmp222_ = ccall;
				_tmp223_ = cright;
				vala_ccode_function_call_add_argument (_tmp222_, _tmp223_);
				_tmp224_ = ccall;
				_tmp225_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp224_);
				_vala_ccode_node_unref0 (cleft);
				cleft = _tmp225_;
				_tmp226_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
				_vala_ccode_node_unref0 (cright);
				cright = _tmp226_;
				_vala_ccode_node_unref0 (ccall);
				_g_free0 (equalfunc);
			}
		}
		_vala_code_node_unref0 (right_type);
		_vala_code_node_unref0 (left_type);
	}
	_tmp230_ = vala_binary_expression_get_left (expr);
	_tmp231_ = _tmp230_;
	_tmp232_ = vala_expression_get_value_type (_tmp231_);
	_tmp233_ = _tmp232_;
	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp233_, VALA_TYPE_NULL_TYPE)) {
		ValaExpression* _tmp234_;
		ValaExpression* _tmp235_;
		ValaDataType* _tmp236_;
		ValaDataType* _tmp237_;
		ValaDataType* _tmp238_;
		_tmp234_ = vala_binary_expression_get_left (expr);
		_tmp235_ = _tmp234_;
		_tmp236_ = vala_expression_get_value_type (_tmp235_);
		_tmp237_ = _tmp236_;
		_tmp238_ = self->string_type;
		_tmp229_ = vala_data_type_compatible (_tmp237_, _tmp238_);
	} else {
		_tmp229_ = FALSE;
	}
	if (_tmp229_) {
		ValaExpression* _tmp239_;
		ValaExpression* _tmp240_;
		ValaDataType* _tmp241_;
		ValaDataType* _tmp242_;
		_tmp239_ = vala_binary_expression_get_right (expr);
		_tmp240_ = _tmp239_;
		_tmp241_ = vala_expression_get_value_type (_tmp240_);
		_tmp242_ = _tmp241_;
		_tmp228_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp242_, VALA_TYPE_NULL_TYPE);
	} else {
		_tmp228_ = FALSE;
	}
	if (_tmp228_) {
		ValaExpression* _tmp243_;
		ValaExpression* _tmp244_;
		ValaDataType* _tmp245_;
		ValaDataType* _tmp246_;
		ValaDataType* _tmp247_;
		_tmp243_ = vala_binary_expression_get_right (expr);
		_tmp244_ = _tmp243_;
		_tmp245_ = vala_expression_get_value_type (_tmp244_);
		_tmp246_ = _tmp245_;
		_tmp247_ = self->string_type;
		_tmp227_ = vala_data_type_compatible (_tmp246_, _tmp247_);
	} else {
		_tmp227_ = FALSE;
	}
	is_string_comparison = _tmp227_;
	_tmp249_ = vala_binary_expression_get_left (expr);
	_tmp250_ = _tmp249_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp250_, VALA_TYPE_STRING_LITERAL)) {
		_tmp248_ = TRUE;
	} else {
		ValaExpression* _tmp251_;
		ValaExpression* _tmp252_;
		_tmp251_ = vala_binary_expression_get_right (expr);
		_tmp252_ = _tmp251_;
		_tmp248_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp252_, VALA_TYPE_STRING_LITERAL);
	}
	has_string_literal = _tmp248_;
	if (is_string_comparison) {
		_tmp253_ = TRUE;
	} else {
		gboolean _tmp254_ = FALSE;
		if (has_string_literal) {
			ValaBinaryOperator _tmp255_;
			ValaBinaryOperator _tmp256_;
			_tmp255_ = vala_binary_expression_get_operator (expr);
			_tmp256_ = _tmp255_;
			_tmp254_ = _tmp256_ != VALA_BINARY_OPERATOR_PLUS;
		} else {
			_tmp254_ = FALSE;
		}
		_tmp253_ = _tmp254_;
	}
	if (_tmp253_) {
		ValaBinaryOperator _tmp257_;
		ValaBinaryOperator _tmp258_;
		_tmp257_ = vala_binary_expression_get_operator (expr);
		_tmp258_ = _tmp257_;
		switch (_tmp258_) {
			case VALA_BINARY_OPERATOR_PLUS:
			{
				gboolean _tmp259_ = FALSE;
				ValaExpression* _tmp260_;
				ValaExpression* _tmp261_;
				_tmp260_ = vala_binary_expression_get_left (expr);
				_tmp261_ = _tmp260_;
				if (vala_expression_is_constant (_tmp261_)) {
					ValaExpression* _tmp262_;
					ValaExpression* _tmp263_;
					_tmp262_ = vala_binary_expression_get_right (expr);
					_tmp263_ = _tmp262_;
					_tmp259_ = vala_expression_is_constant (_tmp263_);
				} else {
					_tmp259_ = FALSE;
				}
				if (_tmp259_) {
					gchar* left = NULL;
					gchar* right = NULL;
					ValaCCodeExpression* _tmp264_;
					ValaCCodeExpression* _tmp277_;
					const gchar* _tmp290_;
					const gchar* _tmp291_;
					gchar* _tmp292_;
					gchar* _tmp293_;
					ValaCCodeConstant* _tmp294_;
					ValaCCodeConstant* _tmp295_;
					_tmp264_ = cleft;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp264_, VALA_TYPE_CCODE_IDENTIFIER)) {
						ValaCCodeExpression* _tmp265_;
						const gchar* _tmp266_;
						const gchar* _tmp267_;
						gchar* _tmp268_;
						_tmp265_ = cleft;
						_tmp266_ = vala_ccode_identifier_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp265_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
						_tmp267_ = _tmp266_;
						_tmp268_ = g_strdup (_tmp267_);
						_g_free0 (left);
						left = _tmp268_;
					} else {
						ValaCCodeExpression* _tmp269_;
						_tmp269_ = cleft;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp269_, VALA_TYPE_CCODE_CONSTANT)) {
							ValaCCodeExpression* _tmp270_;
							const gchar* _tmp271_;
							const gchar* _tmp272_;
							gchar* _tmp273_;
							_tmp270_ = cleft;
							_tmp271_ = vala_ccode_constant_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp270_, VALA_TYPE_CCODE_CONSTANT, ValaCCodeConstant));
							_tmp272_ = _tmp271_;
							_tmp273_ = g_strdup (_tmp272_);
							_g_free0 (left);
							left = _tmp273_;
						} else {
							ValaSourceReference* _tmp274_;
							ValaSourceReference* _tmp275_;
							gchar* _tmp276_;
							_tmp274_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
							_tmp275_ = _tmp274_;
							vala_report_error (_tmp275_, "internal: Unsupported expression");
							_tmp276_ = g_strdup ("NULL");
							_g_free0 (left);
							left = _tmp276_;
						}
					}
					_tmp277_ = cright;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp277_, VALA_TYPE_CCODE_IDENTIFIER)) {
						ValaCCodeExpression* _tmp278_;
						const gchar* _tmp279_;
						const gchar* _tmp280_;
						gchar* _tmp281_;
						_tmp278_ = cright;
						_tmp279_ = vala_ccode_identifier_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp278_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
						_tmp280_ = _tmp279_;
						_tmp281_ = g_strdup (_tmp280_);
						_g_free0 (right);
						right = _tmp281_;
					} else {
						ValaCCodeExpression* _tmp282_;
						_tmp282_ = cright;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp282_, VALA_TYPE_CCODE_CONSTANT)) {
							ValaCCodeExpression* _tmp283_;
							const gchar* _tmp284_;
							const gchar* _tmp285_;
							gchar* _tmp286_;
							_tmp283_ = cright;
							_tmp284_ = vala_ccode_constant_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp283_, VALA_TYPE_CCODE_CONSTANT, ValaCCodeConstant));
							_tmp285_ = _tmp284_;
							_tmp286_ = g_strdup (_tmp285_);
							_g_free0 (right);
							right = _tmp286_;
						} else {
							ValaSourceReference* _tmp287_;
							ValaSourceReference* _tmp288_;
							gchar* _tmp289_;
							_tmp287_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
							_tmp288_ = _tmp287_;
							vala_report_error (_tmp288_, "internal: Unsupported expression");
							_tmp289_ = g_strdup ("NULL");
							_g_free0 (right);
							right = _tmp289_;
						}
					}
					_tmp290_ = left;
					_tmp291_ = right;
					_tmp292_ = g_strdup_printf ("%s %s", _tmp290_, _tmp291_);
					_tmp293_ = _tmp292_;
					_tmp294_ = vala_ccode_constant_new (_tmp293_);
					_tmp295_ = _tmp294_;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp295_);
					_vala_ccode_node_unref0 (_tmp295_);
					_g_free0 (_tmp293_);
					_g_free0 (right);
					_g_free0 (left);
				} else {
					ValaTargetValue* temp_value = NULL;
					ValaDataType* _tmp296_;
					ValaDataType* _tmp297_;
					ValaTargetValue* _tmp298_;
					ValaCCodeFunctionCall* ccall = NULL;
					ValaCodeContext* _tmp299_;
					ValaProfile _tmp300_;
					ValaProfile _tmp301_;
					ValaCCodeFunction* _tmp353_;
					ValaCCodeFunction* _tmp354_;
					ValaTargetValue* _tmp355_;
					ValaCCodeExpression* _tmp356_;
					ValaCCodeFunctionCall* _tmp357_;
					ValaTargetValue* _tmp358_;
					_tmp296_ = vala_expression_get_value_type ((ValaExpression*) expr);
					_tmp297_ = _tmp296_;
					_tmp298_ = vala_ccode_base_module_create_temp_value (self, _tmp297_, FALSE, (ValaCodeNode*) expr, NULL);
					temp_value = _tmp298_;
					_tmp299_ = self->priv->_context;
					_tmp300_ = vala_code_context_get_profile (_tmp299_);
					_tmp301_ = _tmp300_;
					if (_tmp301_ == VALA_PROFILE_POSIX) {
						ValaCCodeIdentifier* _tmp302_;
						ValaCCodeIdentifier* _tmp303_;
						ValaCCodeFunctionCall* _tmp304_;
						ValaCCodeFunctionCall* strcpy = NULL;
						ValaCCodeIdentifier* _tmp305_;
						ValaCCodeIdentifier* _tmp306_;
						ValaCCodeFunctionCall* _tmp307_;
						ValaCCodeFunctionCall* _tmp308_;
						ValaCCodeFunctionCall* malloc = NULL;
						ValaCCodeIdentifier* _tmp309_;
						ValaCCodeIdentifier* _tmp310_;
						ValaCCodeFunctionCall* _tmp311_;
						ValaCCodeFunctionCall* _tmp312_;
						ValaCCodeFunctionCall* strlen_a = NULL;
						ValaCCodeIdentifier* _tmp313_;
						ValaCCodeIdentifier* _tmp314_;
						ValaCCodeFunctionCall* _tmp315_;
						ValaCCodeFunctionCall* _tmp316_;
						ValaCCodeFunctionCall* _tmp317_;
						ValaCCodeExpression* _tmp318_;
						ValaCCodeFunctionCall* strlen_b = NULL;
						ValaCCodeIdentifier* _tmp319_;
						ValaCCodeIdentifier* _tmp320_;
						ValaCCodeFunctionCall* _tmp321_;
						ValaCCodeFunctionCall* _tmp322_;
						ValaCCodeFunctionCall* _tmp323_;
						ValaCCodeExpression* _tmp324_;
						ValaCCodeBinaryExpression* newlength = NULL;
						ValaCCodeIdentifier* _tmp325_;
						ValaCCodeIdentifier* _tmp326_;
						ValaCCodeFunctionCall* _tmp327_;
						ValaCCodeFunctionCall* _tmp328_;
						ValaCCodeBinaryExpression* _tmp329_;
						ValaCCodeBinaryExpression* _tmp330_;
						ValaCCodeBinaryExpression* _tmp331_;
						ValaCCodeBinaryExpression* _tmp332_;
						ValaCCodeFunctionCall* _tmp333_;
						ValaCCodeBinaryExpression* _tmp334_;
						ValaCCodeFunctionCall* _tmp335_;
						ValaCCodeFunctionCall* _tmp336_;
						ValaCCodeFunctionCall* _tmp337_;
						ValaCCodeExpression* _tmp338_;
						ValaCCodeFunctionCall* _tmp339_;
						ValaCCodeFunctionCall* _tmp340_;
						ValaCCodeFunctionCall* _tmp341_;
						ValaCCodeExpression* _tmp342_;
						_tmp302_ = vala_ccode_identifier_new ("strcat");
						_tmp303_ = _tmp302_;
						_tmp304_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp303_);
						_vala_ccode_node_unref0 (ccall);
						ccall = _tmp304_;
						_vala_ccode_node_unref0 (_tmp303_);
						_tmp305_ = vala_ccode_identifier_new ("strcpy");
						_tmp306_ = _tmp305_;
						_tmp307_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp306_);
						_tmp308_ = _tmp307_;
						_vala_ccode_node_unref0 (_tmp306_);
						strcpy = _tmp308_;
						_tmp309_ = vala_ccode_identifier_new ("malloc");
						_tmp310_ = _tmp309_;
						_tmp311_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp310_);
						_tmp312_ = _tmp311_;
						_vala_ccode_node_unref0 (_tmp310_);
						malloc = _tmp312_;
						_tmp313_ = vala_ccode_identifier_new ("strlen");
						_tmp314_ = _tmp313_;
						_tmp315_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp314_);
						_tmp316_ = _tmp315_;
						_vala_ccode_node_unref0 (_tmp314_);
						strlen_a = _tmp316_;
						_tmp317_ = strlen_a;
						_tmp318_ = cleft;
						vala_ccode_function_call_add_argument (_tmp317_, _tmp318_);
						_tmp319_ = vala_ccode_identifier_new ("strlen");
						_tmp320_ = _tmp319_;
						_tmp321_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp320_);
						_tmp322_ = _tmp321_;
						_vala_ccode_node_unref0 (_tmp320_);
						strlen_b = _tmp322_;
						_tmp323_ = strlen_b;
						_tmp324_ = cright;
						vala_ccode_function_call_add_argument (_tmp323_, _tmp324_);
						_tmp325_ = vala_ccode_identifier_new ("1");
						_tmp326_ = _tmp325_;
						_tmp327_ = strlen_a;
						_tmp328_ = strlen_b;
						_tmp329_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp327_, (ValaCCodeExpression*) _tmp328_);
						_tmp330_ = _tmp329_;
						_tmp331_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp326_, (ValaCCodeExpression*) _tmp330_);
						_tmp332_ = _tmp331_;
						_vala_ccode_node_unref0 (_tmp330_);
						_vala_ccode_node_unref0 (_tmp326_);
						newlength = _tmp332_;
						_tmp333_ = malloc;
						_tmp334_ = newlength;
						vala_ccode_function_call_add_argument (_tmp333_, (ValaCCodeExpression*) _tmp334_);
						_tmp335_ = strcpy;
						_tmp336_ = malloc;
						vala_ccode_function_call_add_argument (_tmp335_, (ValaCCodeExpression*) _tmp336_);
						_tmp337_ = strcpy;
						_tmp338_ = cleft;
						vala_ccode_function_call_add_argument (_tmp337_, _tmp338_);
						_tmp339_ = ccall;
						_tmp340_ = strcpy;
						vala_ccode_function_call_add_argument (_tmp339_, (ValaCCodeExpression*) _tmp340_);
						_tmp341_ = ccall;
						_tmp342_ = cright;
						vala_ccode_function_call_add_argument (_tmp341_, _tmp342_);
						_vala_ccode_node_unref0 (newlength);
						_vala_ccode_node_unref0 (strlen_b);
						_vala_ccode_node_unref0 (strlen_a);
						_vala_ccode_node_unref0 (malloc);
						_vala_ccode_node_unref0 (strcpy);
					} else {
						ValaCCodeIdentifier* _tmp343_;
						ValaCCodeIdentifier* _tmp344_;
						ValaCCodeFunctionCall* _tmp345_;
						ValaCCodeFunctionCall* _tmp346_;
						ValaCCodeExpression* _tmp347_;
						ValaCCodeFunctionCall* _tmp348_;
						ValaCCodeExpression* _tmp349_;
						ValaCCodeFunctionCall* _tmp350_;
						ValaCCodeConstant* _tmp351_;
						ValaCCodeConstant* _tmp352_;
						_tmp343_ = vala_ccode_identifier_new ("g_strconcat");
						_tmp344_ = _tmp343_;
						_tmp345_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp344_);
						_vala_ccode_node_unref0 (ccall);
						ccall = _tmp345_;
						_vala_ccode_node_unref0 (_tmp344_);
						_tmp346_ = ccall;
						_tmp347_ = cleft;
						vala_ccode_function_call_add_argument (_tmp346_, _tmp347_);
						_tmp348_ = ccall;
						_tmp349_ = cright;
						vala_ccode_function_call_add_argument (_tmp348_, _tmp349_);
						_tmp350_ = ccall;
						_tmp351_ = vala_ccode_constant_new ("NULL");
						_tmp352_ = _tmp351_;
						vala_ccode_function_call_add_argument (_tmp350_, (ValaCCodeExpression*) _tmp352_);
						_vala_ccode_node_unref0 (_tmp352_);
					}
					_tmp353_ = vala_ccode_base_module_get_ccode (self);
					_tmp354_ = _tmp353_;
					_tmp355_ = temp_value;
					_tmp356_ = vala_get_cvalue_ (_tmp355_);
					_tmp357_ = ccall;
					vala_ccode_function_add_assignment (_tmp354_, _tmp356_, (ValaCCodeExpression*) _tmp357_);
					_tmp358_ = temp_value;
					vala_expression_set_target_value ((ValaExpression*) expr, _tmp358_);
					_vala_ccode_node_unref0 (ccall);
					_vala_target_value_unref0 (temp_value);
				}
				_vala_ccode_node_unref0 (left_chain);
				_vala_ccode_node_unref0 (cright);
				_vala_ccode_node_unref0 (cleft);
				return;
			}
			case VALA_BINARY_OPERATOR_EQUALITY:
			case VALA_BINARY_OPERATOR_INEQUALITY:
			case VALA_BINARY_OPERATOR_LESS_THAN:
			case VALA_BINARY_OPERATOR_GREATER_THAN:
			case VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
			case VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
			{
				ValaCCodeFunctionCall* ccall = NULL;
				ValaCodeContext* _tmp359_;
				ValaProfile _tmp360_;
				ValaProfile _tmp361_;
				ValaCCodeFunctionCall* _tmp373_;
				ValaCCodeExpression* _tmp374_;
				ValaCCodeFunctionCall* _tmp375_;
				ValaCCodeExpression* _tmp376_;
				ValaCCodeFunctionCall* _tmp377_;
				ValaCCodeExpression* _tmp378_;
				ValaCCodeConstant* _tmp379_;
				_tmp359_ = self->priv->_context;
				_tmp360_ = vala_code_context_get_profile (_tmp359_);
				_tmp361_ = _tmp360_;
				if (_tmp361_ == VALA_PROFILE_POSIX) {
					ValaCCodeFile* _tmp362_;
					ValaCCodeIdentifier* _tmp363_;
					ValaCCodeIdentifier* _tmp364_;
					gchar* _tmp365_;
					gchar* _tmp366_;
					ValaCCodeIdentifier* _tmp367_;
					ValaCCodeIdentifier* _tmp368_;
					ValaCCodeFunctionCall* _tmp369_;
					_tmp362_ = self->cfile;
					vala_ccode_file_add_include (_tmp362_, "string.h", FALSE);
					_tmp363_ = vala_ccode_identifier_new ("strcmp");
					_tmp364_ = _tmp363_;
					_tmp365_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp364_);
					_tmp366_ = _tmp365_;
					_tmp367_ = vala_ccode_identifier_new (_tmp366_);
					_tmp368_ = _tmp367_;
					_tmp369_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp368_);
					_vala_ccode_node_unref0 (ccall);
					ccall = _tmp369_;
					_vala_ccode_node_unref0 (_tmp368_);
					_g_free0 (_tmp366_);
					_vala_ccode_node_unref0 (_tmp364_);
				} else {
					ValaCCodeIdentifier* _tmp370_;
					ValaCCodeIdentifier* _tmp371_;
					ValaCCodeFunctionCall* _tmp372_;
					_tmp370_ = vala_ccode_identifier_new ("g_strcmp0");
					_tmp371_ = _tmp370_;
					_tmp372_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp371_);
					_vala_ccode_node_unref0 (ccall);
					ccall = _tmp372_;
					_vala_ccode_node_unref0 (_tmp371_);
				}
				_tmp373_ = ccall;
				_tmp374_ = cleft;
				vala_ccode_function_call_add_argument (_tmp373_, _tmp374_);
				_tmp375_ = ccall;
				_tmp376_ = cright;
				vala_ccode_function_call_add_argument (_tmp375_, _tmp376_);
				_tmp377_ = ccall;
				_tmp378_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp377_);
				_vala_ccode_node_unref0 (cleft);
				cleft = _tmp378_;
				_tmp379_ = vala_ccode_constant_new ("0");
				_vala_ccode_node_unref0 (cright);
				cright = (ValaCCodeExpression*) _tmp379_;
				_vala_ccode_node_unref0 (ccall);
				break;
			}
			default:
			{
				break;
			}
		}
	}
	_tmp380_ = cleft;
	_tmp381_ = cright;
	_tmp382_ = vala_ccode_binary_expression_new (op, _tmp380_, _tmp381_);
	_tmp383_ = _tmp382_;
	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp383_);
	_vala_ccode_node_unref0 (_tmp383_);
	_tmp384_ = left_chain;
	if (_tmp384_ != NULL) {
		ValaCCodeExpression* _tmp385_;
		ValaCCodeExpression* _tmp386_;
		ValaCCodeBinaryExpression* _tmp387_;
		ValaCCodeBinaryExpression* _tmp388_;
		_tmp385_ = left_chain;
		_tmp386_ = vala_get_cvalue ((ValaExpression*) expr);
		_tmp387_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_AND, _tmp385_, _tmp386_);
		_tmp388_ = _tmp387_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp388_);
		_vala_ccode_node_unref0 (_tmp388_);
	}
	_vala_ccode_node_unref0 (left_chain);
	_vala_ccode_node_unref0 (cright);
	_vala_ccode_node_unref0 (cleft);
}

ValaCCodeExpression*
vala_ccode_base_module_create_type_check (ValaCCodeBaseModule* self,
                                          ValaCCodeNode* ccodenode,
                                          ValaDataType* type)
{
	ValaErrorType* et = NULL;
	ValaErrorType* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaErrorType* _tmp2_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (ccodenode != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE) ? ((ValaErrorType*) type) : NULL);
	et = _tmp0_;
	_tmp2_ = et;
	if (_tmp2_ != NULL) {
		ValaErrorType* _tmp3_;
		ValaErrorCode* _tmp4_;
		ValaErrorCode* _tmp5_;
		_tmp3_ = et;
		_tmp4_ = vala_error_type_get_error_code (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp1_ = _tmp5_ != NULL;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		ValaCCodeFunctionCall* matches_call = NULL;
		ValaCCodeIdentifier* _tmp6_;
		ValaCCodeIdentifier* _tmp7_;
		ValaCCodeFunctionCall* _tmp8_;
		ValaCCodeFunctionCall* _tmp9_;
		ValaCCodeFunctionCall* _tmp10_;
		ValaCCodeFunctionCall* _tmp11_;
		ValaErrorType* _tmp12_;
		ValaErrorDomain* _tmp13_;
		ValaErrorDomain* _tmp14_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		ValaCCodeIdentifier* _tmp17_;
		ValaCCodeIdentifier* _tmp18_;
		ValaCCodeFunctionCall* _tmp19_;
		ValaErrorType* _tmp20_;
		ValaErrorCode* _tmp21_;
		ValaErrorCode* _tmp22_;
		gchar* _tmp23_;
		gchar* _tmp24_;
		ValaCCodeIdentifier* _tmp25_;
		ValaCCodeIdentifier* _tmp26_;
		_tmp6_ = vala_ccode_identifier_new ("g_error_matches");
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp7_);
		_tmp9_ = _tmp8_;
		_vala_ccode_node_unref0 (_tmp7_);
		matches_call = _tmp9_;
		_tmp10_ = matches_call;
		vala_ccode_function_call_add_argument (_tmp10_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
		_tmp11_ = matches_call;
		_tmp12_ = et;
		_tmp13_ = vala_error_type_get_error_domain (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp14_, NULL);
		_tmp16_ = _tmp15_;
		_tmp17_ = vala_ccode_identifier_new (_tmp16_);
		_tmp18_ = _tmp17_;
		vala_ccode_function_call_add_argument (_tmp11_, (ValaCCodeExpression*) _tmp18_);
		_vala_ccode_node_unref0 (_tmp18_);
		_g_free0 (_tmp16_);
		_tmp19_ = matches_call;
		_tmp20_ = et;
		_tmp21_ = vala_error_type_get_error_code (_tmp20_);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_get_ccode_name ((ValaCodeNode*) _tmp22_);
		_tmp24_ = _tmp23_;
		_tmp25_ = vala_ccode_identifier_new (_tmp24_);
		_tmp26_ = _tmp25_;
		vala_ccode_function_call_add_argument (_tmp19_, (ValaCCodeExpression*) _tmp26_);
		_vala_ccode_node_unref0 (_tmp26_);
		_g_free0 (_tmp24_);
		result = (ValaCCodeExpression*) matches_call;
		_vala_code_node_unref0 (et);
		return result;
	} else {
		gboolean _tmp27_ = FALSE;
		ValaErrorType* _tmp28_;
		_tmp28_ = et;
		if (_tmp28_ != NULL) {
			ValaErrorType* _tmp29_;
			ValaErrorDomain* _tmp30_;
			ValaErrorDomain* _tmp31_;
			_tmp29_ = et;
			_tmp30_ = vala_error_type_get_error_domain (_tmp29_);
			_tmp31_ = _tmp30_;
			_tmp27_ = _tmp31_ != NULL;
		} else {
			_tmp27_ = FALSE;
		}
		if (_tmp27_) {
			ValaCCodeMemberAccess* instance_domain = NULL;
			ValaCCodeMemberAccess* _tmp32_;
			ValaCCodeIdentifier* type_domain = NULL;
			ValaErrorType* _tmp33_;
			ValaErrorDomain* _tmp34_;
			ValaErrorDomain* _tmp35_;
			gchar* _tmp36_;
			gchar* _tmp37_;
			ValaCCodeIdentifier* _tmp38_;
			ValaCCodeIdentifier* _tmp39_;
			ValaCCodeMemberAccess* _tmp40_;
			ValaCCodeIdentifier* _tmp41_;
			ValaCCodeBinaryExpression* _tmp42_;
			_tmp32_ = vala_ccode_member_access_new_pointer (G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression), "domain");
			instance_domain = _tmp32_;
			_tmp33_ = et;
			_tmp34_ = vala_error_type_get_error_domain (_tmp33_);
			_tmp35_ = _tmp34_;
			_tmp36_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp35_, NULL);
			_tmp37_ = _tmp36_;
			_tmp38_ = vala_ccode_identifier_new (_tmp37_);
			_tmp39_ = _tmp38_;
			_g_free0 (_tmp37_);
			type_domain = _tmp39_;
			_tmp40_ = instance_domain;
			_tmp41_ = type_domain;
			_tmp42_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp40_, (ValaCCodeExpression*) _tmp41_);
			result = (ValaCCodeExpression*) _tmp42_;
			_vala_ccode_node_unref0 (type_domain);
			_vala_ccode_node_unref0 (instance_domain);
			_vala_code_node_unref0 (et);
			return result;
		} else {
			ValaCCodeFunctionCall* ccheck = NULL;
			gboolean _tmp43_ = FALSE;
			gboolean _tmp44_ = FALSE;
			if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
				_tmp44_ = TRUE;
			} else {
				ValaTypeSymbol* _tmp45_;
				ValaTypeSymbol* _tmp46_;
				_tmp45_ = vala_data_type_get_type_symbol (type);
				_tmp46_ = _tmp45_;
				_tmp44_ = _tmp46_ == NULL;
			}
			if (_tmp44_) {
				_tmp43_ = TRUE;
			} else {
				ValaTypeSymbol* _tmp47_;
				ValaTypeSymbol* _tmp48_;
				gboolean _tmp49_;
				gboolean _tmp50_;
				_tmp47_ = vala_data_type_get_type_symbol (type);
				_tmp48_ = _tmp47_;
				_tmp49_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp48_);
				_tmp50_ = _tmp49_;
				_tmp43_ = _tmp50_;
			}
			if (_tmp43_) {
				ValaCCodeIdentifier* _tmp51_;
				ValaCCodeIdentifier* _tmp52_;
				ValaCCodeFunctionCall* _tmp53_;
				ValaCCodeFunctionCall* _tmp54_;
				ValaCCodeFunctionCall* _tmp55_;
				ValaCCodeExpression* _tmp56_;
				ValaCCodeExpression* _tmp57_;
				_tmp51_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_TYPE");
				_tmp52_ = _tmp51_;
				_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
				_vala_ccode_node_unref0 (ccheck);
				ccheck = _tmp53_;
				_vala_ccode_node_unref0 (_tmp52_);
				_tmp54_ = ccheck;
				vala_ccode_function_call_add_argument (_tmp54_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
				_tmp55_ = ccheck;
				_tmp56_ = vala_ccode_base_module_get_type_id_expression (self, type, FALSE);
				_tmp57_ = _tmp56_;
				vala_ccode_function_call_add_argument (_tmp55_, _tmp57_);
				_vala_ccode_node_unref0 (_tmp57_);
			} else {
				ValaTypeSymbol* _tmp58_;
				ValaTypeSymbol* _tmp59_;
				gchar* _tmp60_;
				gchar* _tmp61_;
				ValaCCodeIdentifier* _tmp62_;
				ValaCCodeIdentifier* _tmp63_;
				ValaCCodeFunctionCall* _tmp64_;
				ValaCCodeFunctionCall* _tmp65_;
				_tmp58_ = vala_data_type_get_type_symbol (type);
				_tmp59_ = _tmp58_;
				_tmp60_ = vala_get_ccode_type_check_function (_tmp59_);
				_tmp61_ = _tmp60_;
				_tmp62_ = vala_ccode_identifier_new (_tmp61_);
				_tmp63_ = _tmp62_;
				_tmp64_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp63_);
				_vala_ccode_node_unref0 (ccheck);
				ccheck = _tmp64_;
				_vala_ccode_node_unref0 (_tmp63_);
				_g_free0 (_tmp61_);
				_tmp65_ = ccheck;
				vala_ccode_function_call_add_argument (_tmp65_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
			}
			result = (ValaCCodeExpression*) ccheck;
			_vala_code_node_unref0 (et);
			return result;
		}
	}
}

static gchar*
vala_ccode_base_module_generate_array_contains_wrapper (ValaCCodeBaseModule* self,
                                                        ValaArrayType* array_type)
{
	gchar* array_contains_func = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaDataType* _tmp7_;
	ValaCCodeFile* _tmp8_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp9_;
	ValaDataType* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaDataType* _tmp17_;
	ValaDataType* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	ValaCCodeParameter* _tmp23_;
	ValaCCodeParameter* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	ValaDataType* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	ValaCCodeParameter* _tmp29_;
	ValaCCodeParameter* _tmp30_;
	ValaDataType* _tmp31_;
	ValaDataType* _tmp32_;
	ValaCCodeFunction* _tmp51_;
	ValaCCodeFunction* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaDataType* _tmp54_;
	gchar* _tmp55_;
	gchar* _tmp56_;
	ValaCCodeVariableDeclarator* _tmp57_;
	ValaCCodeVariableDeclarator* _tmp58_;
	ValaCCodeAssignment* cloop_initializer = NULL;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeIdentifier* _tmp60_;
	ValaCCodeConstant* _tmp61_;
	ValaCCodeConstant* _tmp62_;
	ValaCCodeAssignment* _tmp63_;
	ValaCCodeAssignment* _tmp64_;
	ValaCCodeBinaryExpression* cloop_condition = NULL;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeIdentifier* _tmp66_;
	ValaCCodeIdentifier* _tmp67_;
	ValaCCodeIdentifier* _tmp68_;
	ValaCCodeBinaryExpression* _tmp69_;
	ValaCCodeBinaryExpression* _tmp70_;
	ValaCCodeUnaryExpression* cloop_iterator = NULL;
	ValaCCodeIdentifier* _tmp71_;
	ValaCCodeIdentifier* _tmp72_;
	ValaCCodeUnaryExpression* _tmp73_;
	ValaCCodeUnaryExpression* _tmp74_;
	ValaCCodeFunction* _tmp75_;
	ValaCCodeFunction* _tmp76_;
	ValaCCodeAssignment* _tmp77_;
	ValaCCodeBinaryExpression* _tmp78_;
	ValaCCodeUnaryExpression* _tmp79_;
	ValaCCodeElementAccess* celement = NULL;
	ValaCCodeIdentifier* _tmp80_;
	ValaCCodeIdentifier* _tmp81_;
	ValaCCodeIdentifier* _tmp82_;
	ValaCCodeIdentifier* _tmp83_;
	ValaCCodeElementAccess* _tmp84_;
	ValaCCodeElementAccess* _tmp85_;
	ValaCCodeIdentifier* cneedle = NULL;
	ValaCCodeIdentifier* _tmp86_;
	ValaCCodeBinaryExpression* cif_condition = NULL;
	ValaDataType* _tmp87_;
	ValaDataType* _tmp88_;
	ValaDataType* _tmp89_;
	ValaCCodeFunction* _tmp137_;
	ValaCCodeFunction* _tmp138_;
	ValaCCodeBinaryExpression* _tmp139_;
	ValaCCodeFunction* _tmp140_;
	ValaCCodeFunction* _tmp141_;
	ValaCCodeExpression* _tmp142_;
	ValaCCodeExpression* _tmp143_;
	ValaCCodeFunction* _tmp144_;
	ValaCCodeFunction* _tmp145_;
	ValaCCodeFunction* _tmp146_;
	ValaCCodeFunction* _tmp147_;
	ValaCCodeFunction* _tmp148_;
	ValaCCodeFunction* _tmp149_;
	ValaCCodeExpression* _tmp150_;
	ValaCCodeExpression* _tmp151_;
	ValaCCodeFile* _tmp152_;
	ValaCCodeFunction* _tmp153_;
	ValaCCodeFile* _tmp154_;
	ValaCCodeFunction* _tmp155_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (array_type != NULL, NULL);
	_tmp0_ = vala_array_type_get_element_type (array_type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp1_, NULL);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("_vala_%s_array_contains", _tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	array_contains_func = _tmp5_;
	_tmp6_ = array_contains_func;
	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
		result = array_contains_func;
		return result;
	}
	_tmp7_ = self->ssize_t_type;
	_tmp8_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp7_, _tmp8_);
	_tmp9_ = array_contains_func;
	_tmp10_ = self->bool_type;
	_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_function_new (_tmp9_, _tmp12_);
	_tmp14_ = _tmp13_;
	_g_free0 (_tmp12_);
	function = _tmp14_;
	_tmp15_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp15_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp16_ = function;
	_tmp17_ = vala_array_type_get_element_type (array_type);
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) _tmp18_);
	_tmp20_ = _tmp19_;
	_tmp21_ = g_strdup_printf ("%s *", _tmp20_);
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_ccode_parameter_new ("stack", _tmp22_);
	_tmp24_ = _tmp23_;
	vala_ccode_function_add_parameter (_tmp16_, _tmp24_);
	_vala_ccode_node_unref0 (_tmp24_);
	_g_free0 (_tmp22_);
	_g_free0 (_tmp20_);
	_tmp25_ = function;
	_tmp26_ = self->ssize_t_type;
	_tmp27_ = vala_get_ccode_name ((ValaCodeNode*) _tmp26_);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_parameter_new ("stack_length", _tmp28_);
	_tmp30_ = _tmp29_;
	vala_ccode_function_add_parameter (_tmp25_, _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_g_free0 (_tmp28_);
	_tmp31_ = vala_array_type_get_element_type (array_type);
	_tmp32_ = _tmp31_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
		ValaCCodeFunction* _tmp33_;
		ValaDataType* _tmp34_;
		ValaDataType* _tmp35_;
		gchar* _tmp36_;
		gchar* _tmp37_;
		gchar* _tmp38_;
		gchar* _tmp39_;
		ValaCCodeParameter* _tmp40_;
		ValaCCodeParameter* _tmp41_;
		_tmp33_ = function;
		_tmp34_ = vala_array_type_get_element_type (array_type);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_get_ccode_name ((ValaCodeNode*) _tmp35_);
		_tmp37_ = _tmp36_;
		_tmp38_ = g_strdup_printf ("const %s *", _tmp37_);
		_tmp39_ = _tmp38_;
		_tmp40_ = vala_ccode_parameter_new ("needle", _tmp39_);
		_tmp41_ = _tmp40_;
		vala_ccode_function_add_parameter (_tmp33_, _tmp41_);
		_vala_ccode_node_unref0 (_tmp41_);
		_g_free0 (_tmp39_);
		_g_free0 (_tmp37_);
	} else {
		ValaCCodeFunction* _tmp42_;
		ValaDataType* _tmp43_;
		ValaDataType* _tmp44_;
		gchar* _tmp45_;
		gchar* _tmp46_;
		gchar* _tmp47_;
		gchar* _tmp48_;
		ValaCCodeParameter* _tmp49_;
		ValaCCodeParameter* _tmp50_;
		_tmp42_ = function;
		_tmp43_ = vala_array_type_get_element_type (array_type);
		_tmp44_ = _tmp43_;
		_tmp45_ = vala_get_ccode_name ((ValaCodeNode*) _tmp44_);
		_tmp46_ = _tmp45_;
		_tmp47_ = g_strdup_printf ("const %s", _tmp46_);
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_parameter_new ("needle", _tmp48_);
		_tmp50_ = _tmp49_;
		vala_ccode_function_add_parameter (_tmp42_, _tmp50_);
		_vala_ccode_node_unref0 (_tmp50_);
		_g_free0 (_tmp48_);
		_g_free0 (_tmp46_);
	}
	_tmp51_ = function;
	vala_ccode_base_module_push_function (self, _tmp51_);
	_tmp52_ = vala_ccode_base_module_get_ccode (self);
	_tmp53_ = _tmp52_;
	_tmp54_ = self->ssize_t_type;
	_tmp55_ = vala_get_ccode_name ((ValaCodeNode*) _tmp54_);
	_tmp56_ = _tmp55_;
	_tmp57_ = vala_ccode_variable_declarator_new ("i", NULL, NULL);
	_tmp58_ = _tmp57_;
	vala_ccode_function_add_declaration (_tmp53_, _tmp56_, (ValaCCodeDeclarator*) _tmp58_, 0);
	_vala_ccode_node_unref0 (_tmp58_);
	_g_free0 (_tmp56_);
	_tmp59_ = vala_ccode_identifier_new ("i");
	_tmp60_ = _tmp59_;
	_tmp61_ = vala_ccode_constant_new ("0");
	_tmp62_ = _tmp61_;
	_tmp63_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp60_, (ValaCCodeExpression*) _tmp62_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp64_ = _tmp63_;
	_vala_ccode_node_unref0 (_tmp62_);
	_vala_ccode_node_unref0 (_tmp60_);
	cloop_initializer = _tmp64_;
	_tmp65_ = vala_ccode_identifier_new ("i");
	_tmp66_ = _tmp65_;
	_tmp67_ = vala_ccode_identifier_new ("stack_length");
	_tmp68_ = _tmp67_;
	_tmp69_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_LESS_THAN, (ValaCCodeExpression*) _tmp66_, (ValaCCodeExpression*) _tmp68_);
	_tmp70_ = _tmp69_;
	_vala_ccode_node_unref0 (_tmp68_);
	_vala_ccode_node_unref0 (_tmp66_);
	cloop_condition = _tmp70_;
	_tmp71_ = vala_ccode_identifier_new ("i");
	_tmp72_ = _tmp71_;
	_tmp73_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp72_);
	_tmp74_ = _tmp73_;
	_vala_ccode_node_unref0 (_tmp72_);
	cloop_iterator = _tmp74_;
	_tmp75_ = vala_ccode_base_module_get_ccode (self);
	_tmp76_ = _tmp75_;
	_tmp77_ = cloop_initializer;
	_tmp78_ = cloop_condition;
	_tmp79_ = cloop_iterator;
	vala_ccode_function_open_for (_tmp76_, (ValaCCodeExpression*) _tmp77_, (ValaCCodeExpression*) _tmp78_, (ValaCCodeExpression*) _tmp79_);
	_tmp80_ = vala_ccode_identifier_new ("stack");
	_tmp81_ = _tmp80_;
	_tmp82_ = vala_ccode_identifier_new ("i");
	_tmp83_ = _tmp82_;
	_tmp84_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp81_, (ValaCCodeExpression*) _tmp83_);
	_tmp85_ = _tmp84_;
	_vala_ccode_node_unref0 (_tmp83_);
	_vala_ccode_node_unref0 (_tmp81_);
	celement = _tmp85_;
	_tmp86_ = vala_ccode_identifier_new ("needle");
	cneedle = _tmp86_;
	_tmp87_ = vala_array_type_get_element_type (array_type);
	_tmp88_ = _tmp87_;
	_tmp89_ = self->string_type;
	if (vala_data_type_compatible (_tmp88_, _tmp89_)) {
		ValaCCodeFunctionCall* ccall = NULL;
		ValaCodeContext* _tmp90_;
		ValaProfile _tmp91_;
		ValaProfile _tmp92_;
		ValaCCodeFunctionCall* _tmp104_;
		ValaCCodeElementAccess* _tmp105_;
		ValaCCodeFunctionCall* _tmp106_;
		ValaCCodeIdentifier* _tmp107_;
		ValaCCodeFunctionCall* _tmp108_;
		ValaCCodeConstant* _tmp109_;
		ValaCCodeConstant* _tmp110_;
		ValaCCodeBinaryExpression* _tmp111_;
		_tmp90_ = self->priv->_context;
		_tmp91_ = vala_code_context_get_profile (_tmp90_);
		_tmp92_ = _tmp91_;
		if (_tmp92_ == VALA_PROFILE_POSIX) {
			ValaCCodeFile* _tmp93_;
			ValaCCodeIdentifier* _tmp94_;
			ValaCCodeIdentifier* _tmp95_;
			gchar* _tmp96_;
			gchar* _tmp97_;
			ValaCCodeIdentifier* _tmp98_;
			ValaCCodeIdentifier* _tmp99_;
			ValaCCodeFunctionCall* _tmp100_;
			_tmp93_ = self->cfile;
			vala_ccode_file_add_include (_tmp93_, "string.h", FALSE);
			_tmp94_ = vala_ccode_identifier_new ("strcmp");
			_tmp95_ = _tmp94_;
			_tmp96_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp95_);
			_tmp97_ = _tmp96_;
			_tmp98_ = vala_ccode_identifier_new (_tmp97_);
			_tmp99_ = _tmp98_;
			_tmp100_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp99_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp100_;
			_vala_ccode_node_unref0 (_tmp99_);
			_g_free0 (_tmp97_);
			_vala_ccode_node_unref0 (_tmp95_);
		} else {
			ValaCCodeIdentifier* _tmp101_;
			ValaCCodeIdentifier* _tmp102_;
			ValaCCodeFunctionCall* _tmp103_;
			_tmp101_ = vala_ccode_identifier_new ("g_strcmp0");
			_tmp102_ = _tmp101_;
			_tmp103_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp102_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp103_;
			_vala_ccode_node_unref0 (_tmp102_);
		}
		_tmp104_ = ccall;
		_tmp105_ = celement;
		vala_ccode_function_call_add_argument (_tmp104_, (ValaCCodeExpression*) _tmp105_);
		_tmp106_ = ccall;
		_tmp107_ = cneedle;
		vala_ccode_function_call_add_argument (_tmp106_, (ValaCCodeExpression*) _tmp107_);
		_tmp108_ = ccall;
		_tmp109_ = vala_ccode_constant_new ("0");
		_tmp110_ = _tmp109_;
		_tmp111_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp108_, (ValaCCodeExpression*) _tmp110_);
		_vala_ccode_node_unref0 (cif_condition);
		cif_condition = _tmp111_;
		_vala_ccode_node_unref0 (_tmp110_);
		_vala_ccode_node_unref0 (ccall);
	} else {
		ValaDataType* _tmp112_;
		ValaDataType* _tmp113_;
		_tmp112_ = vala_array_type_get_element_type (array_type);
		_tmp113_ = _tmp112_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp113_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
			gchar* equalfunc = NULL;
			ValaDataType* _tmp114_;
			ValaDataType* _tmp115_;
			ValaTypeSymbol* _tmp116_;
			ValaTypeSymbol* _tmp117_;
			gchar* _tmp118_;
			ValaCCodeFunctionCall* ccall = NULL;
			const gchar* _tmp119_;
			ValaCCodeIdentifier* _tmp120_;
			ValaCCodeIdentifier* _tmp121_;
			ValaCCodeFunctionCall* _tmp122_;
			ValaCCodeFunctionCall* _tmp123_;
			ValaCCodeFunctionCall* _tmp124_;
			ValaCCodeElementAccess* _tmp125_;
			ValaCCodeUnaryExpression* _tmp126_;
			ValaCCodeUnaryExpression* _tmp127_;
			ValaCCodeFunctionCall* _tmp128_;
			ValaCCodeIdentifier* _tmp129_;
			ValaCCodeFunctionCall* _tmp130_;
			ValaCCodeExpression* _tmp131_;
			ValaCCodeExpression* _tmp132_;
			ValaCCodeBinaryExpression* _tmp133_;
			_tmp114_ = vala_array_type_get_element_type (array_type);
			_tmp115_ = _tmp114_;
			_tmp116_ = vala_data_type_get_type_symbol (_tmp115_);
			_tmp117_ = _tmp116_;
			_tmp118_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp117_, VALA_TYPE_STRUCT, ValaStruct));
			equalfunc = _tmp118_;
			_tmp119_ = equalfunc;
			_tmp120_ = vala_ccode_identifier_new (_tmp119_);
			_tmp121_ = _tmp120_;
			_tmp122_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp121_);
			_tmp123_ = _tmp122_;
			_vala_ccode_node_unref0 (_tmp121_);
			ccall = _tmp123_;
			_tmp124_ = ccall;
			_tmp125_ = celement;
			_tmp126_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp125_);
			_tmp127_ = _tmp126_;
			vala_ccode_function_call_add_argument (_tmp124_, (ValaCCodeExpression*) _tmp127_);
			_vala_ccode_node_unref0 (_tmp127_);
			_tmp128_ = ccall;
			_tmp129_ = cneedle;
			vala_ccode_function_call_add_argument (_tmp128_, (ValaCCodeExpression*) _tmp129_);
			_tmp130_ = ccall;
			_tmp131_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
			_tmp132_ = _tmp131_;
			_tmp133_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp130_, _tmp132_);
			_vala_ccode_node_unref0 (cif_condition);
			cif_condition = _tmp133_;
			_vala_ccode_node_unref0 (_tmp132_);
			_vala_ccode_node_unref0 (ccall);
			_g_free0 (equalfunc);
		} else {
			ValaCCodeIdentifier* _tmp134_;
			ValaCCodeElementAccess* _tmp135_;
			ValaCCodeBinaryExpression* _tmp136_;
			_tmp134_ = cneedle;
			_tmp135_ = celement;
			_tmp136_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp134_, (ValaCCodeExpression*) _tmp135_);
			_vala_ccode_node_unref0 (cif_condition);
			cif_condition = _tmp136_;
		}
	}
	_tmp137_ = vala_ccode_base_module_get_ccode (self);
	_tmp138_ = _tmp137_;
	_tmp139_ = cif_condition;
	vala_ccode_function_open_if (_tmp138_, (ValaCCodeExpression*) _tmp139_);
	_tmp140_ = vala_ccode_base_module_get_ccode (self);
	_tmp141_ = _tmp140_;
	_tmp142_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
	_tmp143_ = _tmp142_;
	vala_ccode_function_add_return (_tmp141_, _tmp143_);
	_vala_ccode_node_unref0 (_tmp143_);
	_tmp144_ = vala_ccode_base_module_get_ccode (self);
	_tmp145_ = _tmp144_;
	vala_ccode_function_close (_tmp145_);
	_tmp146_ = vala_ccode_base_module_get_ccode (self);
	_tmp147_ = _tmp146_;
	vala_ccode_function_close (_tmp147_);
	_tmp148_ = vala_ccode_base_module_get_ccode (self);
	_tmp149_ = _tmp148_;
	_tmp150_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
	_tmp151_ = _tmp150_;
	vala_ccode_function_add_return (_tmp149_, _tmp151_);
	_vala_ccode_node_unref0 (_tmp151_);
	vala_ccode_base_module_pop_function (self);
	_tmp152_ = self->cfile;
	_tmp153_ = function;
	vala_ccode_file_add_function_declaration (_tmp152_, _tmp153_);
	_tmp154_ = self->cfile;
	_tmp155_ = function;
	vala_ccode_file_add_function (_tmp154_, _tmp155_);
	result = array_contains_func;
	_vala_ccode_node_unref0 (cif_condition);
	_vala_ccode_node_unref0 (cneedle);
	_vala_ccode_node_unref0 (celement);
	_vala_ccode_node_unref0 (cloop_iterator);
	_vala_ccode_node_unref0 (cloop_condition);
	_vala_ccode_node_unref0 (cloop_initializer);
	_vala_ccode_node_unref0 (function);
	return result;
}

static gchar*
vala_ccode_base_module_generate_cmp_wrapper (ValaCCodeBaseModule* self,
                                             ValaCCodeIdentifier* cmpid)
{
	gchar* cmp0_func = NULL;
	const gchar* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	const gchar* _tmp3_;
	const gchar* _tmp4_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (cmpid != NULL, NULL);
	_tmp0_ = vala_ccode_identifier_get_name (cmpid);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("_%s0", _tmp1_);
	cmp0_func = _tmp2_;
	_tmp3_ = vala_ccode_identifier_get_name (cmpid);
	_tmp4_ = _tmp3_;
	if (g_strcmp0 (_tmp4_, "g_strcmp0") == 0) {
		const gchar* _tmp5_;
		const gchar* _tmp6_;
		gchar* _tmp7_;
		_tmp5_ = vala_ccode_identifier_get_name (cmpid);
		_tmp6_ = _tmp5_;
		_tmp7_ = g_strdup (_tmp6_);
		_g_free0 (cmp0_func);
		cmp0_func = _tmp7_;
	} else {
		const gchar* _tmp8_;
		_tmp8_ = cmp0_func;
		if (vala_ccode_base_module_add_wrapper (self, _tmp8_)) {
			ValaCCodeFunction* cmp0_fun = NULL;
			const gchar* _tmp9_;
			ValaDataType* _tmp10_;
			gchar* _tmp11_;
			gchar* _tmp12_;
			ValaCCodeFunction* _tmp13_;
			ValaCCodeFunction* _tmp14_;
			ValaCCodeFunction* _tmp15_;
			ValaCCodeParameter* _tmp16_;
			ValaCCodeParameter* _tmp17_;
			ValaCCodeFunction* _tmp18_;
			ValaCCodeParameter* _tmp19_;
			ValaCCodeParameter* _tmp20_;
			ValaCCodeFunction* _tmp21_;
			ValaCCodeFunction* _tmp22_;
			ValaCCodeBinaryExpression* noteq = NULL;
			ValaCCodeIdentifier* _tmp23_;
			ValaCCodeIdentifier* _tmp24_;
			ValaCCodeIdentifier* _tmp25_;
			ValaCCodeIdentifier* _tmp26_;
			ValaCCodeBinaryExpression* _tmp27_;
			ValaCCodeBinaryExpression* _tmp28_;
			ValaCCodeFunctionCall* cmp_call = NULL;
			ValaCCodeFunctionCall* _tmp55_;
			ValaCCodeFunctionCall* _tmp56_;
			ValaCCodeIdentifier* _tmp57_;
			ValaCCodeIdentifier* _tmp58_;
			ValaCCodeFunctionCall* _tmp59_;
			ValaCCodeIdentifier* _tmp60_;
			ValaCCodeIdentifier* _tmp61_;
			ValaCCodeFunction* _tmp62_;
			ValaCCodeFunction* _tmp63_;
			ValaCCodeFunctionCall* _tmp64_;
			ValaCCodeFile* _tmp65_;
			ValaCCodeFunction* _tmp66_;
			_tmp9_ = cmp0_func;
			_tmp10_ = self->int_type;
			_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) _tmp10_);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_ccode_function_new (_tmp9_, _tmp12_);
			_tmp14_ = _tmp13_;
			_g_free0 (_tmp12_);
			cmp0_fun = _tmp14_;
			_tmp15_ = cmp0_fun;
			_tmp16_ = vala_ccode_parameter_new ("s1", "const void *");
			_tmp17_ = _tmp16_;
			vala_ccode_function_add_parameter (_tmp15_, _tmp17_);
			_vala_ccode_node_unref0 (_tmp17_);
			_tmp18_ = cmp0_fun;
			_tmp19_ = vala_ccode_parameter_new ("s2", "const void *");
			_tmp20_ = _tmp19_;
			vala_ccode_function_add_parameter (_tmp18_, _tmp20_);
			_vala_ccode_node_unref0 (_tmp20_);
			_tmp21_ = cmp0_fun;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp21_, VALA_CCODE_MODIFIERS_STATIC);
			_tmp22_ = cmp0_fun;
			vala_ccode_base_module_push_function (self, _tmp22_);
			_tmp23_ = vala_ccode_identifier_new ("s1");
			_tmp24_ = _tmp23_;
			_tmp25_ = vala_ccode_identifier_new ("s2");
			_tmp26_ = _tmp25_;
			_tmp27_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp24_, (ValaCCodeExpression*) _tmp26_);
			_tmp28_ = _tmp27_;
			_vala_ccode_node_unref0 (_tmp26_);
			_vala_ccode_node_unref0 (_tmp24_);
			noteq = _tmp28_;
			{
				ValaCCodeUnaryExpression* cexp = NULL;
				ValaCCodeIdentifier* _tmp29_;
				ValaCCodeIdentifier* _tmp30_;
				ValaCCodeUnaryExpression* _tmp31_;
				ValaCCodeUnaryExpression* _tmp32_;
				ValaCCodeFunction* _tmp33_;
				ValaCCodeFunction* _tmp34_;
				ValaCCodeUnaryExpression* _tmp35_;
				ValaCCodeFunction* _tmp36_;
				ValaCCodeFunction* _tmp37_;
				ValaCCodeBinaryExpression* _tmp38_;
				ValaCCodeUnaryExpression* _tmp39_;
				ValaCCodeUnaryExpression* _tmp40_;
				ValaCCodeFunction* _tmp41_;
				ValaCCodeFunction* _tmp42_;
				_tmp29_ = vala_ccode_identifier_new ("s1");
				_tmp30_ = _tmp29_;
				_tmp31_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp30_);
				_tmp32_ = _tmp31_;
				_vala_ccode_node_unref0 (_tmp30_);
				cexp = _tmp32_;
				_tmp33_ = vala_ccode_base_module_get_ccode (self);
				_tmp34_ = _tmp33_;
				_tmp35_ = cexp;
				vala_ccode_function_open_if (_tmp34_, (ValaCCodeExpression*) _tmp35_);
				_tmp36_ = vala_ccode_base_module_get_ccode (self);
				_tmp37_ = _tmp36_;
				_tmp38_ = noteq;
				_tmp39_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_MINUS, (ValaCCodeExpression*) _tmp38_);
				_tmp40_ = _tmp39_;
				vala_ccode_function_add_return (_tmp37_, (ValaCCodeExpression*) _tmp40_);
				_vala_ccode_node_unref0 (_tmp40_);
				_tmp41_ = vala_ccode_base_module_get_ccode (self);
				_tmp42_ = _tmp41_;
				vala_ccode_function_close (_tmp42_);
				_vala_ccode_node_unref0 (cexp);
			}
			{
				ValaCCodeUnaryExpression* cexp = NULL;
				ValaCCodeIdentifier* _tmp43_;
				ValaCCodeIdentifier* _tmp44_;
				ValaCCodeUnaryExpression* _tmp45_;
				ValaCCodeUnaryExpression* _tmp46_;
				ValaCCodeFunction* _tmp47_;
				ValaCCodeFunction* _tmp48_;
				ValaCCodeUnaryExpression* _tmp49_;
				ValaCCodeFunction* _tmp50_;
				ValaCCodeFunction* _tmp51_;
				ValaCCodeBinaryExpression* _tmp52_;
				ValaCCodeFunction* _tmp53_;
				ValaCCodeFunction* _tmp54_;
				_tmp43_ = vala_ccode_identifier_new ("s2");
				_tmp44_ = _tmp43_;
				_tmp45_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp44_);
				_tmp46_ = _tmp45_;
				_vala_ccode_node_unref0 (_tmp44_);
				cexp = _tmp46_;
				_tmp47_ = vala_ccode_base_module_get_ccode (self);
				_tmp48_ = _tmp47_;
				_tmp49_ = cexp;
				vala_ccode_function_open_if (_tmp48_, (ValaCCodeExpression*) _tmp49_);
				_tmp50_ = vala_ccode_base_module_get_ccode (self);
				_tmp51_ = _tmp50_;
				_tmp52_ = noteq;
				vala_ccode_function_add_return (_tmp51_, (ValaCCodeExpression*) _tmp52_);
				_tmp53_ = vala_ccode_base_module_get_ccode (self);
				_tmp54_ = _tmp53_;
				vala_ccode_function_close (_tmp54_);
				_vala_ccode_node_unref0 (cexp);
			}
			_tmp55_ = vala_ccode_function_call_new ((ValaCCodeExpression*) cmpid);
			cmp_call = _tmp55_;
			_tmp56_ = cmp_call;
			_tmp57_ = vala_ccode_identifier_new ("s1");
			_tmp58_ = _tmp57_;
			vala_ccode_function_call_add_argument (_tmp56_, (ValaCCodeExpression*) _tmp58_);
			_vala_ccode_node_unref0 (_tmp58_);
			_tmp59_ = cmp_call;
			_tmp60_ = vala_ccode_identifier_new ("s2");
			_tmp61_ = _tmp60_;
			vala_ccode_function_call_add_argument (_tmp59_, (ValaCCodeExpression*) _tmp61_);
			_vala_ccode_node_unref0 (_tmp61_);
			_tmp62_ = vala_ccode_base_module_get_ccode (self);
			_tmp63_ = _tmp62_;
			_tmp64_ = cmp_call;
			vala_ccode_function_add_return (_tmp63_, (ValaCCodeExpression*) _tmp64_);
			vala_ccode_base_module_pop_function (self);
			_tmp65_ = self->cfile;
			_tmp66_ = cmp0_fun;
			vala_ccode_file_add_function (_tmp65_, _tmp66_);
			_vala_ccode_node_unref0 (cmp_call);
			_vala_ccode_node_unref0 (noteq);
			_vala_ccode_node_unref0 (cmp0_fun);
		}
	}
	result = cmp0_func;
	return result;
}

static void
vala_ccode_base_module_real_visit_type_check (ValaCodeVisitor* base,
                                              ValaTypeCheck* expr)
{
	ValaCCodeBaseModule * self;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaCCodeFile* _tmp2_;
	ValaDataType* type = NULL;
	ValaExpression* _tmp3_;
	ValaExpression* _tmp4_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	ValaPointerType* pointer_type = NULL;
	ValaDataType* _tmp8_;
	ValaPointerType* _tmp9_;
	ValaPointerType* _tmp10_;
	ValaClass* cl = NULL;
	ValaDataType* _tmp15_;
	ValaTypeSymbol* _tmp16_;
	ValaTypeSymbol* _tmp17_;
	ValaInterface* iface = NULL;
	ValaDataType* _tmp18_;
	ValaTypeSymbol* _tmp19_;
	ValaTypeSymbol* _tmp20_;
	gboolean _tmp21_ = FALSE;
	gboolean _tmp22_ = FALSE;
	gboolean _tmp23_ = FALSE;
	gboolean _tmp24_ = FALSE;
	ValaClass* _tmp25_;
	ValaCCodeExpression* _tmp41_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_typecheck_get_type_reference (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
	_tmp3_ = vala_typecheck_get_expression (expr);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_expression_get_value_type (_tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = _vala_code_node_ref0 (_tmp6_);
	type = _tmp7_;
	_tmp8_ = type;
	_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_POINTER_TYPE) ? ((ValaPointerType*) _tmp8_) : NULL);
	pointer_type = _tmp9_;
	_tmp10_ = pointer_type;
	if (_tmp10_ != NULL) {
		ValaPointerType* _tmp11_;
		ValaDataType* _tmp12_;
		ValaDataType* _tmp13_;
		ValaDataType* _tmp14_;
		_tmp11_ = pointer_type;
		_tmp12_ = vala_pointer_type_get_base_type (_tmp11_);
		_tmp13_ = _tmp12_;
		_tmp14_ = _vala_code_node_ref0 (_tmp13_);
		_vala_code_node_unref0 (type);
		type = _tmp14_;
	}
	_tmp15_ = type;
	_tmp16_ = vala_data_type_get_type_symbol (_tmp15_);
	_tmp17_ = _tmp16_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp17_) : NULL;
	_tmp18_ = type;
	_tmp19_ = vala_data_type_get_type_symbol (_tmp18_);
	_tmp20_ = _tmp19_;
	iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp20_) : NULL;
	_tmp25_ = cl;
	if (_tmp25_ != NULL) {
		ValaClass* _tmp26_;
		gboolean _tmp27_;
		gboolean _tmp28_;
		_tmp26_ = cl;
		_tmp27_ = vala_class_get_is_compact (_tmp26_);
		_tmp28_ = _tmp27_;
		_tmp24_ = !_tmp28_;
	} else {
		_tmp24_ = FALSE;
	}
	if (_tmp24_) {
		_tmp23_ = TRUE;
	} else {
		ValaInterface* _tmp29_;
		_tmp29_ = iface;
		_tmp23_ = _tmp29_ != NULL;
	}
	if (_tmp23_) {
		_tmp22_ = TRUE;
	} else {
		ValaDataType* _tmp30_;
		_tmp30_ = type;
		_tmp22_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, VALA_TYPE_GENERIC_TYPE);
	}
	if (_tmp22_) {
		_tmp21_ = TRUE;
	} else {
		ValaDataType* _tmp31_;
		_tmp31_ = type;
		_tmp21_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, VALA_TYPE_ERROR_TYPE);
	}
	if (_tmp21_) {
		ValaExpression* _tmp32_;
		ValaExpression* _tmp33_;
		ValaCCodeExpression* _tmp34_;
		ValaDataType* _tmp35_;
		ValaDataType* _tmp36_;
		ValaCCodeExpression* _tmp37_;
		ValaCCodeExpression* _tmp38_;
		_tmp32_ = vala_typecheck_get_expression (expr);
		_tmp33_ = _tmp32_;
		_tmp34_ = vala_get_cvalue (_tmp33_);
		_tmp35_ = vala_typecheck_get_type_reference (expr);
		_tmp36_ = _tmp35_;
		_tmp37_ = vala_ccode_base_module_create_type_check (self, (ValaCCodeNode*) _tmp34_, _tmp36_);
		_tmp38_ = _tmp37_;
		vala_set_cvalue ((ValaExpression*) expr, _tmp38_);
		_vala_ccode_node_unref0 (_tmp38_);
	} else {
		ValaCCodeInvalidExpression* _tmp39_;
		ValaCCodeInvalidExpression* _tmp40_;
		_tmp39_ = vala_ccode_invalid_expression_new ();
		_tmp40_ = _tmp39_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp40_);
		_vala_ccode_node_unref0 (_tmp40_);
	}
	_tmp41_ = vala_get_cvalue ((ValaExpression*) expr);
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, VALA_TYPE_CCODE_INVALID_EXPRESSION)) {
		ValaSourceReference* _tmp42_;
		ValaSourceReference* _tmp43_;
		_tmp42_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
		_tmp43_ = _tmp42_;
		vala_report_error (_tmp43_, "type check expressions not supported for compact classes, structs, and" \
" enums");
	}
	_vala_code_node_unref0 (pointer_type);
	_vala_code_node_unref0 (type);
}

static void
vala_ccode_base_module_real_visit_lambda_expression (ValaCodeVisitor* base,
                                                     ValaLambdaExpression* lambda)
{
	ValaCCodeBaseModule * self;
	ValaDelegateType* delegate_type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDelegateType* _tmp2_;
	gboolean expr_owned = FALSE;
	ValaDataType* _tmp3_;
	ValaDataType* _tmp4_;
	gboolean _tmp5_;
	gboolean _tmp6_;
	ValaMethod* _tmp7_;
	ValaMethod* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeIdentifier* _tmp12_;
	ValaDataType* this_type = NULL;
	ValaMethod* _tmp13_;
	ValaMethod* _tmp14_;
	gboolean _tmp15_;
	gboolean _tmp16_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (lambda != NULL);
	_tmp0_ = vala_expression_get_target_type ((ValaExpression*) lambda);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
	delegate_type = _tmp2_;
	vala_code_node_accept_children ((ValaCodeNode*) lambda, (ValaCodeVisitor*) self);
	_tmp3_ = vala_expression_get_value_type ((ValaExpression*) lambda);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_data_type_get_value_owned (_tmp4_);
	_tmp6_ = _tmp5_;
	expr_owned = _tmp6_;
	_tmp7_ = vala_lambda_expression_get_method (lambda);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_identifier_new (_tmp10_);
	_tmp12_ = _tmp11_;
	vala_set_cvalue ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp12_);
	_vala_ccode_node_unref0 (_tmp12_);
	_g_free0 (_tmp10_);
	_tmp13_ = vala_lambda_expression_get_method (lambda);
	_tmp14_ = _tmp13_;
	_tmp15_ = vala_method_get_closure (_tmp14_);
	_tmp16_ = _tmp15_;
	if (_tmp16_) {
		gint block_id = 0;
		ValaBlock* _tmp17_;
		ValaBlock* _tmp18_;
		ValaCCodeExpression* delegate_target = NULL;
		gchar* _tmp19_;
		gchar* _tmp20_;
		ValaCCodeExpression* _tmp21_;
		ValaCCodeExpression* _tmp22_;
		gboolean _tmp23_ = FALSE;
		ValaCCodeExpression* _tmp43_;
		_tmp17_ = vala_ccode_base_module_get_current_closure_block (self);
		_tmp18_ = _tmp17_;
		block_id = vala_ccode_base_module_get_block_id (self, _tmp18_);
		_tmp19_ = g_strdup_printf ("_data%d_", block_id);
		_tmp20_ = _tmp19_;
		_tmp21_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp20_);
		_tmp22_ = _tmp21_;
		_g_free0 (_tmp20_);
		delegate_target = _tmp22_;
		if (expr_owned) {
			_tmp23_ = TRUE;
		} else {
			ValaDelegateType* _tmp24_;
			gboolean _tmp25_;
			gboolean _tmp26_;
			_tmp24_ = delegate_type;
			_tmp25_ = vala_delegate_type_get_is_called_once (_tmp24_);
			_tmp26_ = _tmp25_;
			_tmp23_ = _tmp26_;
		}
		if (_tmp23_) {
			ValaCCodeFunctionCall* ref_call = NULL;
			gchar* _tmp27_;
			gchar* _tmp28_;
			ValaCCodeIdentifier* _tmp29_;
			ValaCCodeIdentifier* _tmp30_;
			ValaCCodeFunctionCall* _tmp31_;
			ValaCCodeFunctionCall* _tmp32_;
			ValaCCodeFunctionCall* _tmp33_;
			ValaCCodeExpression* _tmp34_;
			ValaCCodeFunctionCall* _tmp35_;
			ValaCCodeExpression* _tmp36_;
			gchar* _tmp37_;
			gchar* _tmp38_;
			ValaCCodeIdentifier* _tmp39_;
			ValaCCodeIdentifier* _tmp40_;
			_tmp27_ = g_strdup_printf ("block%d_data_ref", block_id);
			_tmp28_ = _tmp27_;
			_tmp29_ = vala_ccode_identifier_new (_tmp28_);
			_tmp30_ = _tmp29_;
			_tmp31_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp30_);
			_tmp32_ = _tmp31_;
			_vala_ccode_node_unref0 (_tmp30_);
			_g_free0 (_tmp28_);
			ref_call = _tmp32_;
			_tmp33_ = ref_call;
			_tmp34_ = delegate_target;
			vala_ccode_function_call_add_argument (_tmp33_, _tmp34_);
			_tmp35_ = ref_call;
			_tmp36_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp35_);
			_vala_ccode_node_unref0 (delegate_target);
			delegate_target = _tmp36_;
			_tmp37_ = g_strdup_printf ("block%d_data_unref", block_id);
			_tmp38_ = _tmp37_;
			_tmp39_ = vala_ccode_identifier_new (_tmp38_);
			_tmp40_ = _tmp39_;
			vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp40_);
			_vala_ccode_node_unref0 (_tmp40_);
			_g_free0 (_tmp38_);
			_vala_ccode_node_unref0 (ref_call);
		} else {
			ValaCCodeConstant* _tmp41_;
			ValaCCodeConstant* _tmp42_;
			_tmp41_ = vala_ccode_constant_new ("NULL");
			_tmp42_ = _tmp41_;
			vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp42_);
			_vala_ccode_node_unref0 (_tmp42_);
		}
		_tmp43_ = delegate_target;
		vala_set_delegate_target ((ValaExpression*) lambda, _tmp43_);
		_vala_ccode_node_unref0 (delegate_target);
	} else {
		ValaDataType* _tmp44_;
		ValaDataType* _tmp45_;
		_tmp44_ = vala_ccode_base_module_get_this_type (self);
		this_type = _tmp44_;
		_tmp45_ = this_type;
		if (_tmp45_ != NULL) {
			ValaCCodeExpression* delegate_target = NULL;
			ValaCCodeExpression* _tmp46_;
			ValaCCodeExpression* _tmp47_;
			ValaDataType* _tmp48_;
			ValaCCodeExpression* _tmp49_;
			gboolean _tmp50_ = FALSE;
			ValaCCodeExpression* _tmp70_;
			_tmp46_ = vala_ccode_base_module_get_this_cexpression (self);
			delegate_target = _tmp46_;
			_tmp47_ = delegate_target;
			_tmp48_ = this_type;
			_tmp49_ = vala_ccode_base_module_convert_to_generic_pointer (self, _tmp47_, _tmp48_);
			_vala_ccode_node_unref0 (delegate_target);
			delegate_target = _tmp49_;
			if (expr_owned) {
				_tmp50_ = TRUE;
			} else {
				ValaDelegateType* _tmp51_;
				gboolean _tmp52_;
				gboolean _tmp53_;
				_tmp51_ = delegate_type;
				_tmp52_ = vala_delegate_type_get_is_called_once (_tmp51_);
				_tmp53_ = _tmp52_;
				_tmp50_ = _tmp53_;
			}
			if (_tmp50_) {
				ValaCCodeFunctionCall* ref_call = NULL;
				ValaDataType* _tmp54_;
				ValaSourceReference* _tmp55_;
				ValaSourceReference* _tmp56_;
				ValaCCodeExpression* _tmp57_;
				ValaCCodeExpression* _tmp58_;
				ValaCCodeFunctionCall* _tmp59_;
				ValaCCodeFunctionCall* _tmp60_;
				ValaCCodeFunctionCall* _tmp61_;
				ValaCCodeExpression* _tmp62_;
				ValaCCodeFunctionCall* _tmp63_;
				ValaCCodeExpression* _tmp64_;
				ValaDataType* _tmp65_;
				ValaCCodeExpression* _tmp66_;
				ValaCCodeExpression* _tmp67_;
				_tmp54_ = this_type;
				_tmp55_ = vala_code_node_get_source_reference ((ValaCodeNode*) lambda);
				_tmp56_ = _tmp55_;
				_tmp57_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp54_, _tmp56_, FALSE);
				_tmp58_ = _tmp57_;
				_tmp59_ = vala_ccode_function_call_new (_tmp58_);
				_tmp60_ = _tmp59_;
				_vala_ccode_node_unref0 (_tmp58_);
				ref_call = _tmp60_;
				_tmp61_ = ref_call;
				_tmp62_ = delegate_target;
				vala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
				_tmp63_ = ref_call;
				_tmp64_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp63_);
				_vala_ccode_node_unref0 (delegate_target);
				delegate_target = _tmp64_;
				_tmp65_ = this_type;
				_tmp66_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp65_, FALSE);
				_tmp67_ = _tmp66_;
				vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, _tmp67_);
				_vala_ccode_node_unref0 (_tmp67_);
				_vala_ccode_node_unref0 (ref_call);
			} else {
				ValaCCodeConstant* _tmp68_;
				ValaCCodeConstant* _tmp69_;
				_tmp68_ = vala_ccode_constant_new ("NULL");
				_tmp69_ = _tmp68_;
				vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp69_);
				_vala_ccode_node_unref0 (_tmp69_);
			}
			_tmp70_ = delegate_target;
			vala_set_delegate_target ((ValaExpression*) lambda, _tmp70_);
			_vala_ccode_node_unref0 (delegate_target);
		} else {
			ValaCCodeConstant* _tmp71_;
			ValaCCodeConstant* _tmp72_;
			ValaCCodeConstant* _tmp73_;
			ValaCCodeConstant* _tmp74_;
			_tmp71_ = vala_ccode_constant_new ("NULL");
			_tmp72_ = _tmp71_;
			vala_set_delegate_target ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp72_);
			_vala_ccode_node_unref0 (_tmp72_);
			_tmp73_ = vala_ccode_constant_new ("NULL");
			_tmp74_ = _tmp73_;
			vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp74_);
			_vala_ccode_node_unref0 (_tmp74_);
		}
	}
	_vala_code_node_unref0 (delegate_type);
}

ValaCCodeExpression*
vala_ccode_base_module_convert_from_generic_pointer (ValaCCodeBaseModule* self,
                                                     ValaCCodeExpression* cexpr,
                                                     ValaDataType* actual_type)
{
	ValaSemanticAnalyzer* analyzer = NULL;
	ValaCodeContext* _tmp0_;
	ValaSemanticAnalyzer* _tmp1_;
	ValaSemanticAnalyzer* _tmp2_;
	ValaCCodeExpression* _result_ = NULL;
	ValaCCodeExpression* _tmp3_;
	gboolean _tmp4_ = FALSE;
	ValaSemanticAnalyzer* _tmp5_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (cexpr != NULL, NULL);
	g_return_val_if_fail (actual_type != NULL, NULL);
	_tmp0_ = self->priv->_context;
	_tmp1_ = vala_code_context_get_analyzer (_tmp0_);
	_tmp2_ = _tmp1_;
	analyzer = _tmp2_;
	_tmp3_ = _vala_ccode_node_ref0 (cexpr);
	_result_ = _tmp3_;
	_tmp5_ = analyzer;
	if (vala_semantic_analyzer_is_reference_type_argument (_tmp5_, actual_type)) {
		_tmp4_ = TRUE;
	} else {
		ValaSemanticAnalyzer* _tmp6_;
		_tmp6_ = analyzer;
		_tmp4_ = vala_semantic_analyzer_is_nullable_value_type_argument (_tmp6_, actual_type);
	}
	if (_tmp4_) {
		ValaCCodeFile* _tmp7_;
		gchar* _tmp8_;
		gchar* _tmp9_;
		ValaCCodeCastExpression* _tmp10_;
		_tmp7_ = self->cfile;
		vala_ccode_base_module_generate_type_declaration (self, actual_type, _tmp7_);
		_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
		_tmp9_ = _tmp8_;
		_tmp10_ = vala_ccode_cast_expression_new (cexpr, _tmp9_);
		_vala_ccode_node_unref0 (_result_);
		_result_ = (ValaCCodeExpression*) _tmp10_;
		_g_free0 (_tmp9_);
	} else {
		ValaSemanticAnalyzer* _tmp11_;
		_tmp11_ = analyzer;
		if (vala_semantic_analyzer_is_signed_integer_type_argument (_tmp11_, actual_type)) {
			ValaCCodeCastExpression* _tmp14_;
			ValaCCodeCastExpression* _tmp15_;
			gchar* _tmp16_;
			gchar* _tmp17_;
			ValaCCodeCastExpression* _tmp18_;
			while (TRUE) {
				ValaCCodeExpression* _tmp12_;
				ValaCCodeExpression* _tmp13_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
					break;
				}
				_tmp12_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
				_tmp13_ = _tmp12_;
				cexpr = _tmp13_;
			}
			_tmp14_ = vala_ccode_cast_expression_new (cexpr, "gintptr");
			_tmp15_ = _tmp14_;
			_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
			_tmp17_ = _tmp16_;
			_tmp18_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp15_, _tmp17_);
			_vala_ccode_node_unref0 (_result_);
			_result_ = (ValaCCodeExpression*) _tmp18_;
			_g_free0 (_tmp17_);
			_vala_ccode_node_unref0 (_tmp15_);
		} else {
			ValaSemanticAnalyzer* _tmp19_;
			_tmp19_ = analyzer;
			if (vala_semantic_analyzer_is_unsigned_integer_type_argument (_tmp19_, actual_type)) {
				ValaCCodeCastExpression* _tmp22_;
				ValaCCodeCastExpression* _tmp23_;
				gchar* _tmp24_;
				gchar* _tmp25_;
				ValaCCodeCastExpression* _tmp26_;
				while (TRUE) {
					ValaCCodeExpression* _tmp20_;
					ValaCCodeExpression* _tmp21_;
					if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
						break;
					}
					_tmp20_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
					_tmp21_ = _tmp20_;
					cexpr = _tmp21_;
				}
				_tmp22_ = vala_ccode_cast_expression_new (cexpr, "guintptr");
				_tmp23_ = _tmp22_;
				_tmp24_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
				_tmp25_ = _tmp24_;
				_tmp26_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp23_, _tmp25_);
				_vala_ccode_node_unref0 (_result_);
				_result_ = (ValaCCodeExpression*) _tmp26_;
				_g_free0 (_tmp25_);
				_vala_ccode_node_unref0 (_tmp23_);
			}
		}
	}
	result = _result_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_convert_to_generic_pointer (ValaCCodeBaseModule* self,
                                                   ValaCCodeExpression* cexpr,
                                                   ValaDataType* actual_type)
{
	ValaSemanticAnalyzer* analyzer = NULL;
	ValaCodeContext* _tmp0_;
	ValaSemanticAnalyzer* _tmp1_;
	ValaSemanticAnalyzer* _tmp2_;
	ValaCCodeExpression* _result_ = NULL;
	ValaCCodeExpression* _tmp3_;
	ValaSemanticAnalyzer* _tmp4_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (cexpr != NULL, NULL);
	g_return_val_if_fail (actual_type != NULL, NULL);
	_tmp0_ = self->priv->_context;
	_tmp1_ = vala_code_context_get_analyzer (_tmp0_);
	_tmp2_ = _tmp1_;
	analyzer = _tmp2_;
	_tmp3_ = _vala_ccode_node_ref0 (cexpr);
	_result_ = _tmp3_;
	_tmp4_ = analyzer;
	if (vala_semantic_analyzer_is_signed_integer_type_argument (_tmp4_, actual_type)) {
		ValaCCodeCastExpression* _tmp7_;
		ValaCCodeCastExpression* _tmp8_;
		ValaDataType* _tmp9_;
		gchar* _tmp10_;
		gchar* _tmp11_;
		ValaCCodeCastExpression* _tmp12_;
		while (TRUE) {
			ValaCCodeExpression* _tmp5_;
			ValaCCodeExpression* _tmp6_;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
				break;
			}
			_tmp5_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
			_tmp6_ = _tmp5_;
			cexpr = _tmp6_;
		}
		_tmp7_ = vala_ccode_cast_expression_new (cexpr, "gintptr");
		_tmp8_ = _tmp7_;
		_tmp9_ = self->pointer_type;
		_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) _tmp9_);
		_tmp11_ = _tmp10_;
		_tmp12_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp8_, _tmp11_);
		_vala_ccode_node_unref0 (_result_);
		_result_ = (ValaCCodeExpression*) _tmp12_;
		_g_free0 (_tmp11_);
		_vala_ccode_node_unref0 (_tmp8_);
	} else {
		ValaSemanticAnalyzer* _tmp13_;
		_tmp13_ = analyzer;
		if (vala_semantic_analyzer_is_unsigned_integer_type_argument (_tmp13_, actual_type)) {
			ValaCCodeCastExpression* _tmp16_;
			ValaCCodeCastExpression* _tmp17_;
			ValaDataType* _tmp18_;
			gchar* _tmp19_;
			gchar* _tmp20_;
			ValaCCodeCastExpression* _tmp21_;
			while (TRUE) {
				ValaCCodeExpression* _tmp14_;
				ValaCCodeExpression* _tmp15_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
					break;
				}
				_tmp14_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
				_tmp15_ = _tmp14_;
				cexpr = _tmp15_;
			}
			_tmp16_ = vala_ccode_cast_expression_new (cexpr, "guintptr");
			_tmp17_ = _tmp16_;
			_tmp18_ = self->pointer_type;
			_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) _tmp18_);
			_tmp20_ = _tmp19_;
			_tmp21_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp17_, _tmp20_);
			_vala_ccode_node_unref0 (_result_);
			_result_ = (ValaCCodeExpression*) _tmp21_;
			_g_free0 (_tmp20_);
			_vala_ccode_node_unref0 (_tmp17_);
		}
	}
	result = _result_;
	return result;
}

ValaTargetValue*
vala_ccode_base_module_transform_value (ValaCCodeBaseModule* self,
                                        ValaTargetValue* value,
                                        ValaDataType* target_type,
                                        ValaCodeNode* node)
{
	ValaDataType* type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaGLibValue* _result_ = NULL;
	ValaGLibValue* _tmp3_;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	ValaDataType* _tmp6_;
	gboolean _tmp7_;
	gboolean _tmp8_;
	gboolean _tmp61_ = FALSE;
	gboolean _tmp62_ = FALSE;
	gboolean _tmp63_ = FALSE;
	ValaDataType* _tmp64_;
	gboolean boxing = FALSE;
	gboolean _tmp70_ = FALSE;
	gboolean _tmp71_ = FALSE;
	gboolean _tmp72_ = FALSE;
	ValaDataType* _tmp73_;
	gboolean unboxing = FALSE;
	gboolean _tmp79_ = FALSE;
	gboolean _tmp80_ = FALSE;
	gboolean _tmp81_ = FALSE;
	gboolean _tmp82_ = FALSE;
	ValaCodeContext* _tmp83_;
	ValaProfile _tmp84_;
	ValaProfile _tmp85_;
	gboolean gvalue_boxing = FALSE;
	gboolean _tmp93_ = FALSE;
	gboolean _tmp94_ = FALSE;
	gboolean _tmp95_ = FALSE;
	gboolean _tmp96_ = FALSE;
	ValaCodeContext* _tmp97_;
	ValaProfile _tmp98_;
	ValaProfile _tmp99_;
	gboolean gvariant_boxing = FALSE;
	gboolean _tmp108_ = FALSE;
	gboolean _tmp109_ = FALSE;
	ValaDataType* _tmp110_;
	gboolean _tmp111_;
	gboolean _tmp112_;
	ValaGLibValue* _tmp141_;
	ValaDataType* _tmp142_;
	ValaDataType* _tmp143_;
	gboolean array_needs_copy = FALSE;
	gboolean _tmp354_ = FALSE;
	ValaDataType* _tmp355_;
	gboolean _tmp373_ = FALSE;
	gboolean _tmp374_ = FALSE;
	gboolean _tmp375_ = FALSE;
	gboolean _tmp376_ = FALSE;
	gboolean _tmp377_ = FALSE;
	ValaTargetValue* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = vala_target_value_get_value_type (value);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
	type = _tmp2_;
	_tmp3_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	_result_ = _tmp3_;
	_tmp6_ = type;
	_tmp7_ = vala_data_type_get_value_owned (_tmp6_);
	_tmp8_ = _tmp7_;
	if (_tmp8_) {
		gboolean _tmp9_ = FALSE;
		gboolean _tmp10_ = FALSE;
		if (target_type == NULL) {
			_tmp10_ = TRUE;
		} else {
			_tmp10_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_GENERIC_TYPE);
		}
		if (_tmp10_) {
			_tmp9_ = TRUE;
		} else {
			gboolean _tmp11_;
			gboolean _tmp12_;
			_tmp11_ = vala_data_type_get_floating_reference (target_type);
			_tmp12_ = _tmp11_;
			_tmp9_ = !_tmp12_;
		}
		_tmp5_ = _tmp9_;
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		ValaDataType* _tmp13_;
		gboolean _tmp14_;
		gboolean _tmp15_;
		_tmp13_ = type;
		_tmp14_ = vala_data_type_get_floating_reference (_tmp13_);
		_tmp15_ = _tmp14_;
		_tmp4_ = _tmp15_;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		ValaObjectTypeSymbol* cl = NULL;
		ValaDataType* _tmp16_;
		ValaTypeSymbol* _tmp17_;
		ValaTypeSymbol* _tmp18_;
		gchar* _tmp19_ = NULL;
		ValaObjectTypeSymbol* _tmp20_;
		gchar* sink_func = NULL;
		gchar* _tmp24_;
		const gchar* _tmp25_;
		_tmp16_ = type;
		_tmp17_ = vala_data_type_get_type_symbol (_tmp16_);
		_tmp18_ = _tmp17_;
		cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp18_) : NULL;
		_tmp20_ = cl;
		if (_tmp20_ != NULL) {
			ValaObjectTypeSymbol* _tmp21_;
			gchar* _tmp22_;
			_tmp21_ = cl;
			_tmp22_ = vala_get_ccode_ref_sink_function (_tmp21_);
			_g_free0 (_tmp19_);
			_tmp19_ = _tmp22_;
		} else {
			gchar* _tmp23_;
			_tmp23_ = g_strdup ("");
			_g_free0 (_tmp19_);
			_tmp19_ = _tmp23_;
		}
		_tmp24_ = g_strdup (_tmp19_);
		sink_func = _tmp24_;
		_tmp25_ = sink_func;
		if (g_strcmp0 (_tmp25_, "") != 0) {
			ValaDataType* _tmp26_;
			gboolean _tmp27_;
			gboolean _tmp28_;
			ValaCCodeFunctionCall* csink = NULL;
			const gchar* _tmp38_;
			ValaCCodeIdentifier* _tmp39_;
			ValaCCodeIdentifier* _tmp40_;
			ValaCCodeFunctionCall* _tmp41_;
			ValaCCodeFunctionCall* _tmp42_;
			ValaCCodeFunctionCall* _tmp43_;
			ValaGLibValue* _tmp44_;
			ValaCCodeExpression* _tmp45_;
			ValaCCodeFunction* _tmp46_;
			ValaCCodeFunction* _tmp47_;
			ValaCCodeFunctionCall* _tmp48_;
			ValaDataType* _tmp49_;
			gboolean _tmp50_;
			gboolean _tmp51_;
			_tmp26_ = type;
			_tmp27_ = vala_data_type_get_nullable (_tmp26_);
			_tmp28_ = _tmp27_;
			if (_tmp28_) {
				ValaCCodeBinaryExpression* is_not_null = NULL;
				ValaGLibValue* _tmp29_;
				ValaCCodeExpression* _tmp30_;
				ValaCCodeConstant* _tmp31_;
				ValaCCodeConstant* _tmp32_;
				ValaCCodeBinaryExpression* _tmp33_;
				ValaCCodeBinaryExpression* _tmp34_;
				ValaCCodeFunction* _tmp35_;
				ValaCCodeFunction* _tmp36_;
				ValaCCodeBinaryExpression* _tmp37_;
				_tmp29_ = _result_;
				_tmp30_ = _tmp29_->cvalue;
				_tmp31_ = vala_ccode_constant_new ("NULL");
				_tmp32_ = _tmp31_;
				_tmp33_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp30_, (ValaCCodeExpression*) _tmp32_);
				_tmp34_ = _tmp33_;
				_vala_ccode_node_unref0 (_tmp32_);
				is_not_null = _tmp34_;
				_tmp35_ = vala_ccode_base_module_get_ccode (self);
				_tmp36_ = _tmp35_;
				_tmp37_ = is_not_null;
				vala_ccode_function_open_if (_tmp36_, (ValaCCodeExpression*) _tmp37_);
				_vala_ccode_node_unref0 (is_not_null);
			}
			_tmp38_ = sink_func;
			_tmp39_ = vala_ccode_identifier_new (_tmp38_);
			_tmp40_ = _tmp39_;
			_tmp41_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp40_);
			_tmp42_ = _tmp41_;
			_vala_ccode_node_unref0 (_tmp40_);
			csink = _tmp42_;
			_tmp43_ = csink;
			_tmp44_ = _result_;
			_tmp45_ = _tmp44_->cvalue;
			vala_ccode_function_call_add_argument (_tmp43_, _tmp45_);
			_tmp46_ = vala_ccode_base_module_get_ccode (self);
			_tmp47_ = _tmp46_;
			_tmp48_ = csink;
			vala_ccode_function_add_expression (_tmp47_, (ValaCCodeExpression*) _tmp48_);
			_tmp49_ = type;
			_tmp50_ = vala_data_type_get_nullable (_tmp49_);
			_tmp51_ = _tmp50_;
			if (_tmp51_) {
				ValaCCodeFunction* _tmp52_;
				ValaCCodeFunction* _tmp53_;
				_tmp52_ = vala_ccode_base_module_get_ccode (self);
				_tmp53_ = _tmp52_;
				vala_ccode_function_close (_tmp53_);
			}
			_vala_ccode_node_unref0 (csink);
		} else {
			ValaSourceReference* _tmp54_;
			ValaSourceReference* _tmp55_;
			ValaDataType* _tmp56_;
			ValaTypeSymbol* _tmp57_;
			ValaTypeSymbol* _tmp58_;
			const gchar* _tmp59_;
			const gchar* _tmp60_;
			_tmp54_ = vala_code_node_get_source_reference (node);
			_tmp55_ = _tmp54_;
			_tmp56_ = type;
			_tmp57_ = vala_data_type_get_type_symbol (_tmp56_);
			_tmp58_ = _tmp57_;
			_tmp59_ = vala_symbol_get_name ((ValaSymbol*) _tmp58_);
			_tmp60_ = _tmp59_;
			vala_report_error (_tmp55_, "type `%s' does not support floating references", _tmp60_);
		}
		_g_free0 (sink_func);
		_g_free0 (_tmp19_);
	}
	_tmp64_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp64_, VALA_TYPE_VALUE_TYPE)) {
		ValaDataType* _tmp65_;
		gboolean _tmp66_;
		gboolean _tmp67_;
		_tmp65_ = type;
		_tmp66_ = vala_data_type_get_nullable (_tmp65_);
		_tmp67_ = _tmp66_;
		_tmp63_ = !_tmp67_;
	} else {
		_tmp63_ = FALSE;
	}
	if (_tmp63_) {
		_tmp62_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_VALUE_TYPE);
	} else {
		_tmp62_ = FALSE;
	}
	if (_tmp62_) {
		gboolean _tmp68_;
		gboolean _tmp69_;
		_tmp68_ = vala_data_type_get_nullable (target_type);
		_tmp69_ = _tmp68_;
		_tmp61_ = _tmp69_;
	} else {
		_tmp61_ = FALSE;
	}
	boxing = _tmp61_;
	_tmp73_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp73_, VALA_TYPE_VALUE_TYPE)) {
		ValaDataType* _tmp74_;
		gboolean _tmp75_;
		gboolean _tmp76_;
		_tmp74_ = type;
		_tmp75_ = vala_data_type_get_nullable (_tmp74_);
		_tmp76_ = _tmp75_;
		_tmp72_ = _tmp76_;
	} else {
		_tmp72_ = FALSE;
	}
	if (_tmp72_) {
		_tmp71_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_VALUE_TYPE);
	} else {
		_tmp71_ = FALSE;
	}
	if (_tmp71_) {
		gboolean _tmp77_;
		gboolean _tmp78_;
		_tmp77_ = vala_data_type_get_nullable (target_type);
		_tmp78_ = _tmp77_;
		_tmp70_ = !_tmp78_;
	} else {
		_tmp70_ = FALSE;
	}
	unboxing = _tmp70_;
	_tmp83_ = self->priv->_context;
	_tmp84_ = vala_code_context_get_profile (_tmp83_);
	_tmp85_ = _tmp84_;
	if (_tmp85_ == VALA_PROFILE_GOBJECT) {
		_tmp82_ = target_type != NULL;
	} else {
		_tmp82_ = FALSE;
	}
	if (_tmp82_) {
		ValaTypeSymbol* _tmp86_;
		ValaTypeSymbol* _tmp87_;
		ValaStruct* _tmp88_;
		_tmp86_ = vala_data_type_get_type_symbol (target_type);
		_tmp87_ = _tmp86_;
		_tmp88_ = self->gvalue_type;
		_tmp81_ = _tmp87_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp88_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	} else {
		_tmp81_ = FALSE;
	}
	if (_tmp81_) {
		ValaDataType* _tmp89_;
		_tmp89_ = type;
		_tmp80_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp89_, VALA_TYPE_NULL_TYPE);
	} else {
		_tmp80_ = FALSE;
	}
	if (_tmp80_) {
		ValaDataType* _tmp90_;
		gchar* _tmp91_;
		gchar* _tmp92_;
		_tmp90_ = type;
		_tmp91_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp90_);
		_tmp92_ = _tmp91_;
		_tmp79_ = g_strcmp0 (_tmp92_, "G_TYPE_VALUE") != 0;
		_g_free0 (_tmp92_);
	} else {
		_tmp79_ = FALSE;
	}
	gvalue_boxing = _tmp79_;
	_tmp97_ = self->priv->_context;
	_tmp98_ = vala_code_context_get_profile (_tmp97_);
	_tmp99_ = _tmp98_;
	if (_tmp99_ == VALA_PROFILE_GOBJECT) {
		_tmp96_ = target_type != NULL;
	} else {
		_tmp96_ = FALSE;
	}
	if (_tmp96_) {
		ValaTypeSymbol* _tmp100_;
		ValaTypeSymbol* _tmp101_;
		ValaClass* _tmp102_;
		_tmp100_ = vala_data_type_get_type_symbol (target_type);
		_tmp101_ = _tmp100_;
		_tmp102_ = self->gvariant_type;
		_tmp95_ = _tmp101_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp102_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	} else {
		_tmp95_ = FALSE;
	}
	if (_tmp95_) {
		ValaDataType* _tmp103_;
		_tmp103_ = type;
		_tmp94_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp103_, VALA_TYPE_NULL_TYPE);
	} else {
		_tmp94_ = FALSE;
	}
	if (_tmp94_) {
		ValaDataType* _tmp104_;
		ValaTypeSymbol* _tmp105_;
		ValaTypeSymbol* _tmp106_;
		ValaClass* _tmp107_;
		_tmp104_ = type;
		_tmp105_ = vala_data_type_get_type_symbol (_tmp104_);
		_tmp106_ = _tmp105_;
		_tmp107_ = self->gvariant_type;
		_tmp93_ = _tmp106_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp107_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	} else {
		_tmp93_ = FALSE;
	}
	gvariant_boxing = _tmp93_;
	_tmp110_ = type;
	_tmp111_ = vala_data_type_get_value_owned (_tmp110_);
	_tmp112_ = _tmp111_;
	if (_tmp112_) {
		gboolean _tmp113_ = FALSE;
		gboolean _tmp114_ = FALSE;
		gboolean _tmp115_ = FALSE;
		gboolean _tmp116_ = FALSE;
		if (target_type == NULL) {
			_tmp116_ = TRUE;
		} else {
			gboolean _tmp117_;
			gboolean _tmp118_;
			_tmp117_ = vala_data_type_get_value_owned (target_type);
			_tmp118_ = _tmp117_;
			_tmp116_ = !_tmp118_;
		}
		if (_tmp116_) {
			_tmp115_ = TRUE;
		} else {
			_tmp115_ = boxing;
		}
		if (_tmp115_) {
			_tmp114_ = TRUE;
		} else {
			_tmp114_ = unboxing;
		}
		if (_tmp114_) {
			_tmp113_ = TRUE;
		} else {
			_tmp113_ = gvariant_boxing;
		}
		_tmp109_ = _tmp113_;
	} else {
		_tmp109_ = FALSE;
	}
	if (_tmp109_) {
		_tmp108_ = !gvalue_boxing;
	} else {
		_tmp108_ = FALSE;
	}
	if (_tmp108_) {
		if (G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_POINTER_TYPE)) {
		} else {
			ValaDataType* _tmp119_;
			_tmp119_ = type;
			if (vala_ccode_base_module_requires_destroy (_tmp119_)) {
				ValaDataType* _tmp120_;
				_tmp120_ = type;
				if (!vala_ccode_base_module_is_lvalue_access_allowed (self, _tmp120_)) {
					ValaArrayList* _tmp121_;
					ValaArrayList* _tmp122_;
					ValaGLibValue* _tmp123_;
					ValaGLibValue* _tmp124_;
					ValaGLibValue* _tmp125_;
					_tmp121_ = vala_ccode_base_module_get_temp_ref_values (self);
					_tmp122_ = _tmp121_;
					_tmp123_ = _result_;
					_tmp124_ = vala_glib_value_copy (_tmp123_);
					_tmp125_ = _tmp124_;
					vala_list_insert ((ValaList*) _tmp122_, 0, (ValaTargetValue*) _tmp125_);
					_vala_target_value_unref0 (_tmp125_);
				} else {
					ValaTargetValue* temp_value = NULL;
					ValaDataType* _tmp126_;
					ValaTargetValue* _tmp127_;
					ValaArrayList* _tmp128_;
					ValaArrayList* _tmp129_;
					ValaTargetValue* _tmp130_;
					ValaGLibValue* _tmp131_;
					ValaGLibValue* _tmp132_;
					ValaTargetValue* _tmp133_;
					ValaGLibValue* _tmp134_;
					ValaSourceReference* _tmp135_;
					ValaSourceReference* _tmp136_;
					ValaGLibValue* _tmp137_;
					ValaTargetValue* _tmp138_;
					ValaCCodeExpression* _tmp139_;
					ValaCCodeExpression* _tmp140_;
					_tmp126_ = type;
					_tmp127_ = vala_ccode_base_module_create_temp_value (self, _tmp126_, FALSE, node, NULL);
					temp_value = _tmp127_;
					_tmp128_ = vala_ccode_base_module_get_temp_ref_values (self);
					_tmp129_ = _tmp128_;
					_tmp130_ = temp_value;
					_tmp131_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp130_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
					_tmp132_ = _tmp131_;
					vala_list_insert ((ValaList*) _tmp129_, 0, (ValaTargetValue*) _tmp132_);
					_vala_target_value_unref0 (_tmp132_);
					_tmp133_ = temp_value;
					_tmp134_ = _result_;
					_tmp135_ = vala_code_node_get_source_reference (node);
					_tmp136_ = _tmp135_;
					vala_ccode_base_module_store_value (self, _tmp133_, (ValaTargetValue*) _tmp134_, _tmp136_);
					_tmp137_ = _result_;
					_tmp138_ = temp_value;
					_tmp139_ = vala_get_cvalue_ (_tmp138_);
					_tmp140_ = _vala_ccode_node_ref0 (_tmp139_);
					_vala_ccode_node_unref0 (_tmp137_->cvalue);
					_tmp137_->cvalue = _tmp140_;
					_vala_target_value_unref0 (temp_value);
				}
			}
		}
	}
	if (target_type == NULL) {
		result = (ValaTargetValue*) _result_;
		_vala_code_node_unref0 (type);
		return result;
	}
	_tmp141_ = _result_;
	_tmp142_ = vala_data_type_copy (target_type);
	_tmp143_ = _tmp142_;
	vala_target_value_set_value_type ((ValaTargetValue*) _tmp141_, _tmp143_);
	_vala_code_node_unref0 (_tmp143_);
	if (gvalue_boxing) {
		ValaTargetValue* temp_value = NULL;
		gboolean _tmp144_;
		ValaTargetValue* _tmp145_;
		gboolean _tmp146_;
		gboolean _tmp147_;
		gboolean _tmp153_;
		gboolean _tmp154_;
		ValaCCodeFunctionCall* ccall = NULL;
		ValaCCodeIdentifier* _tmp172_;
		ValaCCodeIdentifier* _tmp173_;
		ValaCCodeFunctionCall* _tmp174_;
		ValaCCodeFunctionCall* _tmp175_;
		gboolean _tmp176_;
		gboolean _tmp177_;
		gchar* type_id = NULL;
		ValaDataType* _tmp186_;
		gchar* _tmp187_;
		const gchar* _tmp188_;
		ValaCCodeFunctionCall* _tmp194_;
		const gchar* _tmp195_;
		ValaCCodeIdentifier* _tmp196_;
		ValaCCodeIdentifier* _tmp197_;
		ValaCCodeFunction* _tmp198_;
		ValaCCodeFunction* _tmp199_;
		ValaCCodeFunctionCall* _tmp200_;
		ValaDataType* _tmp201_;
		gboolean _tmp210_;
		gboolean _tmp211_;
		ValaDataType* _tmp220_;
		ValaCCodeFunction* _tmp229_;
		ValaCCodeFunction* _tmp230_;
		ValaCCodeFunctionCall* _tmp231_;
		ValaTargetValue* _tmp232_;
		ValaGLibValue* _tmp233_;
		_tmp144_ = TRUE;
		_tmp145_ = vala_ccode_base_module_create_temp_value (self, target_type, TRUE, node, &_tmp144_);
		temp_value = _tmp145_;
		_tmp146_ = vala_data_type_get_value_owned (target_type);
		_tmp147_ = _tmp146_;
		if (!_tmp147_) {
			ValaArrayList* _tmp148_;
			ValaArrayList* _tmp149_;
			ValaTargetValue* _tmp150_;
			ValaGLibValue* _tmp151_;
			ValaGLibValue* _tmp152_;
			_tmp148_ = vala_ccode_base_module_get_temp_ref_values (self);
			_tmp149_ = _tmp148_;
			_tmp150_ = temp_value;
			_tmp151_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp150_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
			_tmp152_ = _tmp151_;
			vala_list_insert ((ValaList*) _tmp149_, 0, (ValaTargetValue*) _tmp152_);
			_vala_target_value_unref0 (_tmp152_);
		}
		_tmp153_ = vala_data_type_get_nullable (target_type);
		_tmp154_ = _tmp153_;
		if (_tmp154_) {
			ValaCCodeFunctionCall* newcall = NULL;
			ValaCCodeIdentifier* _tmp155_;
			ValaCCodeIdentifier* _tmp156_;
			ValaCCodeFunctionCall* _tmp157_;
			ValaCCodeFunctionCall* _tmp158_;
			ValaCCodeFunctionCall* _tmp159_;
			ValaCCodeConstant* _tmp160_;
			ValaCCodeConstant* _tmp161_;
			ValaCCodeFunctionCall* _tmp162_;
			ValaCCodeConstant* _tmp163_;
			ValaCCodeConstant* _tmp164_;
			ValaCCodeAssignment* newassignment = NULL;
			ValaTargetValue* _tmp165_;
			ValaCCodeExpression* _tmp166_;
			ValaCCodeFunctionCall* _tmp167_;
			ValaCCodeAssignment* _tmp168_;
			ValaCCodeFunction* _tmp169_;
			ValaCCodeFunction* _tmp170_;
			ValaCCodeAssignment* _tmp171_;
			_tmp155_ = vala_ccode_identifier_new ("g_new0");
			_tmp156_ = _tmp155_;
			_tmp157_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp156_);
			_tmp158_ = _tmp157_;
			_vala_ccode_node_unref0 (_tmp156_);
			newcall = _tmp158_;
			_tmp159_ = newcall;
			_tmp160_ = vala_ccode_constant_new ("GValue");
			_tmp161_ = _tmp160_;
			vala_ccode_function_call_add_argument (_tmp159_, (ValaCCodeExpression*) _tmp161_);
			_vala_ccode_node_unref0 (_tmp161_);
			_tmp162_ = newcall;
			_tmp163_ = vala_ccode_constant_new ("1");
			_tmp164_ = _tmp163_;
			vala_ccode_function_call_add_argument (_tmp162_, (ValaCCodeExpression*) _tmp164_);
			_vala_ccode_node_unref0 (_tmp164_);
			_tmp165_ = temp_value;
			_tmp166_ = vala_get_cvalue_ (_tmp165_);
			_tmp167_ = newcall;
			_tmp168_ = vala_ccode_assignment_new (_tmp166_, (ValaCCodeExpression*) _tmp167_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
			newassignment = _tmp168_;
			_tmp169_ = vala_ccode_base_module_get_ccode (self);
			_tmp170_ = _tmp169_;
			_tmp171_ = newassignment;
			vala_ccode_function_add_expression (_tmp170_, (ValaCCodeExpression*) _tmp171_);
			_vala_ccode_node_unref0 (newassignment);
			_vala_ccode_node_unref0 (newcall);
		}
		_tmp172_ = vala_ccode_identifier_new ("g_value_init");
		_tmp173_ = _tmp172_;
		_tmp174_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp173_);
		_tmp175_ = _tmp174_;
		_vala_ccode_node_unref0 (_tmp173_);
		ccall = _tmp175_;
		_tmp176_ = vala_data_type_get_nullable (target_type);
		_tmp177_ = _tmp176_;
		if (_tmp177_) {
			ValaCCodeFunctionCall* _tmp178_;
			ValaTargetValue* _tmp179_;
			ValaCCodeExpression* _tmp180_;
			_tmp178_ = ccall;
			_tmp179_ = temp_value;
			_tmp180_ = vala_get_cvalue_ (_tmp179_);
			vala_ccode_function_call_add_argument (_tmp178_, _tmp180_);
		} else {
			ValaCCodeFunctionCall* _tmp181_;
			ValaTargetValue* _tmp182_;
			ValaCCodeExpression* _tmp183_;
			ValaCCodeUnaryExpression* _tmp184_;
			ValaCCodeUnaryExpression* _tmp185_;
			_tmp181_ = ccall;
			_tmp182_ = temp_value;
			_tmp183_ = vala_get_cvalue_ (_tmp182_);
			_tmp184_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp183_);
			_tmp185_ = _tmp184_;
			vala_ccode_function_call_add_argument (_tmp181_, (ValaCCodeExpression*) _tmp185_);
			_vala_ccode_node_unref0 (_tmp185_);
		}
		_tmp186_ = type;
		_tmp187_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp186_);
		type_id = _tmp187_;
		_tmp188_ = type_id;
		if (g_strcmp0 (_tmp188_, "") == 0) {
			ValaSourceReference* _tmp189_;
			ValaSourceReference* _tmp190_;
			ValaDataType* _tmp191_;
			gchar* _tmp192_;
			gchar* _tmp193_;
			_tmp189_ = vala_code_node_get_source_reference (node);
			_tmp190_ = _tmp189_;
			_tmp191_ = type;
			_tmp192_ = vala_code_node_to_string ((ValaCodeNode*) _tmp191_);
			_tmp193_ = _tmp192_;
			vala_report_error (_tmp190_, "GValue boxing of type `%s' is not supported", _tmp193_);
			_g_free0 (_tmp193_);
		}
		_tmp194_ = ccall;
		_tmp195_ = type_id;
		_tmp196_ = vala_ccode_identifier_new (_tmp195_);
		_tmp197_ = _tmp196_;
		vala_ccode_function_call_add_argument (_tmp194_, (ValaCCodeExpression*) _tmp197_);
		_vala_ccode_node_unref0 (_tmp197_);
		_tmp198_ = vala_ccode_base_module_get_ccode (self);
		_tmp199_ = _tmp198_;
		_tmp200_ = ccall;
		vala_ccode_function_add_expression (_tmp199_, (ValaCCodeExpression*) _tmp200_);
		_tmp201_ = type;
		if (vala_ccode_base_module_requires_destroy (_tmp201_)) {
			ValaDataType* _tmp202_;
			ValaCCodeExpression* _tmp203_;
			ValaCCodeExpression* _tmp204_;
			ValaCCodeFunctionCall* _tmp205_;
			_tmp202_ = type;
			_tmp203_ = vala_ccode_base_module_get_value_taker_function (self, _tmp202_);
			_tmp204_ = _tmp203_;
			_tmp205_ = vala_ccode_function_call_new (_tmp204_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp205_;
			_vala_ccode_node_unref0 (_tmp204_);
		} else {
			ValaDataType* _tmp206_;
			ValaCCodeExpression* _tmp207_;
			ValaCCodeExpression* _tmp208_;
			ValaCCodeFunctionCall* _tmp209_;
			_tmp206_ = type;
			_tmp207_ = vala_ccode_base_module_get_value_setter_function (self, _tmp206_);
			_tmp208_ = _tmp207_;
			_tmp209_ = vala_ccode_function_call_new (_tmp208_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp209_;
			_vala_ccode_node_unref0 (_tmp208_);
		}
		_tmp210_ = vala_data_type_get_nullable (target_type);
		_tmp211_ = _tmp210_;
		if (_tmp211_) {
			ValaCCodeFunctionCall* _tmp212_;
			ValaTargetValue* _tmp213_;
			ValaCCodeExpression* _tmp214_;
			_tmp212_ = ccall;
			_tmp213_ = temp_value;
			_tmp214_ = vala_get_cvalue_ (_tmp213_);
			vala_ccode_function_call_add_argument (_tmp212_, _tmp214_);
		} else {
			ValaCCodeFunctionCall* _tmp215_;
			ValaTargetValue* _tmp216_;
			ValaCCodeExpression* _tmp217_;
			ValaCCodeUnaryExpression* _tmp218_;
			ValaCCodeUnaryExpression* _tmp219_;
			_tmp215_ = ccall;
			_tmp216_ = temp_value;
			_tmp217_ = vala_get_cvalue_ (_tmp216_);
			_tmp218_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp217_);
			_tmp219_ = _tmp218_;
			vala_ccode_function_call_add_argument (_tmp215_, (ValaCCodeExpression*) _tmp219_);
			_vala_ccode_node_unref0 (_tmp219_);
		}
		_tmp220_ = type;
		if (vala_data_type_is_real_non_null_struct_type (_tmp220_)) {
			ValaCCodeFunctionCall* _tmp221_;
			ValaGLibValue* _tmp222_;
			ValaCCodeExpression* _tmp223_;
			ValaCCodeUnaryExpression* _tmp224_;
			ValaCCodeUnaryExpression* _tmp225_;
			_tmp221_ = ccall;
			_tmp222_ = _result_;
			_tmp223_ = _tmp222_->cvalue;
			_tmp224_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp223_);
			_tmp225_ = _tmp224_;
			vala_ccode_function_call_add_argument (_tmp221_, (ValaCCodeExpression*) _tmp225_);
			_vala_ccode_node_unref0 (_tmp225_);
		} else {
			ValaCCodeFunctionCall* _tmp226_;
			ValaGLibValue* _tmp227_;
			ValaCCodeExpression* _tmp228_;
			_tmp226_ = ccall;
			_tmp227_ = _result_;
			_tmp228_ = _tmp227_->cvalue;
			vala_ccode_function_call_add_argument (_tmp226_, _tmp228_);
		}
		_tmp229_ = vala_ccode_base_module_get_ccode (self);
		_tmp230_ = _tmp229_;
		_tmp231_ = ccall;
		vala_ccode_function_add_expression (_tmp230_, (ValaCCodeExpression*) _tmp231_);
		_tmp232_ = temp_value;
		_tmp233_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp232_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
		_vala_target_value_unref0 (_result_);
		_result_ = _tmp233_;
		_g_free0 (type_id);
		_vala_ccode_node_unref0 (ccall);
		_vala_target_value_unref0 (temp_value);
	} else {
		if (gvariant_boxing) {
			gchar* variant_func = NULL;
			gint _tmp234_;
			gchar* _tmp235_;
			ValaCCodeFunctionCall* ccall = NULL;
			const gchar* _tmp236_;
			ValaCCodeIdentifier* _tmp237_;
			ValaCCodeIdentifier* _tmp238_;
			ValaCCodeFunctionCall* _tmp239_;
			ValaCCodeFunctionCall* _tmp240_;
			ValaCCodeFunctionCall* _tmp241_;
			ValaGLibValue* _tmp242_;
			ValaCCodeExpression* _tmp243_;
			ValaCCodeFunction* cfunc = NULL;
			const gchar* _tmp244_;
			ValaCCodeFunction* _tmp245_;
			ValaCCodeFunction* _tmp246_;
			ValaCCodeFunction* _tmp247_;
			ValaDataType* _tmp248_;
			gchar* _tmp249_;
			gchar* _tmp250_;
			ValaCCodeParameter* _tmp251_;
			ValaCCodeParameter* _tmp252_;
			ValaDataType* _tmp253_;
			ValaCCodeFunction* _tmp272_;
			ValaCCodeFunctionCall* sink = NULL;
			ValaCCodeIdentifier* _tmp273_;
			ValaCCodeIdentifier* _tmp274_;
			ValaCCodeFunctionCall* _tmp275_;
			ValaCCodeFunctionCall* _tmp276_;
			ValaCCodeFunctionCall* _tmp277_;
			ValaDataType* _tmp278_;
			ValaCCodeIdentifier* _tmp279_;
			ValaCCodeIdentifier* _tmp280_;
			ValaCCodeExpression* _tmp281_;
			ValaCCodeExpression* _tmp282_;
			ValaCCodeFunction* _tmp283_;
			ValaCCodeFunction* _tmp284_;
			ValaCCodeFunctionCall* _tmp285_;
			ValaCCodeFile* _tmp286_;
			ValaCCodeFunction* _tmp287_;
			ValaCCodeFile* _tmp288_;
			ValaCCodeFunction* _tmp289_;
			ValaGLibValue* _tmp290_;
			ValaCCodeFunctionCall* _tmp291_;
			ValaCCodeExpression* _tmp292_;
			ValaGLibValue* _tmp293_;
			ValaDataType* _tmp294_;
			ValaDataType* _tmp295_;
			ValaGLibValue* _tmp296_;
			ValaTargetValue* _tmp297_;
			gboolean _tmp298_;
			gboolean _tmp299_;
			self->priv->next_variant_function_id = self->priv->next_variant_function_id + 1;
			_tmp234_ = self->priv->next_variant_function_id;
			_tmp235_ = g_strdup_printf ("_variant_new%d", _tmp234_);
			variant_func = _tmp235_;
			_tmp236_ = variant_func;
			_tmp237_ = vala_ccode_identifier_new (_tmp236_);
			_tmp238_ = _tmp237_;
			_tmp239_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp238_);
			_tmp240_ = _tmp239_;
			_vala_ccode_node_unref0 (_tmp238_);
			ccall = _tmp240_;
			_tmp241_ = ccall;
			_tmp242_ = _result_;
			_tmp243_ = _tmp242_->cvalue;
			vala_ccode_function_call_add_argument (_tmp241_, _tmp243_);
			_tmp244_ = variant_func;
			_tmp245_ = vala_ccode_function_new (_tmp244_, "GVariant*");
			cfunc = _tmp245_;
			_tmp246_ = cfunc;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp246_, VALA_CCODE_MODIFIERS_STATIC);
			_tmp247_ = cfunc;
			_tmp248_ = type;
			_tmp249_ = vala_get_ccode_name ((ValaCodeNode*) _tmp248_);
			_tmp250_ = _tmp249_;
			_tmp251_ = vala_ccode_parameter_new ("value", _tmp250_);
			_tmp252_ = _tmp251_;
			vala_ccode_function_add_parameter (_tmp247_, _tmp252_);
			_vala_ccode_node_unref0 (_tmp252_);
			_g_free0 (_tmp250_);
			_tmp253_ = type;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp253_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* array_type = NULL;
				ValaDataType* _tmp254_;
				ValaArrayType* _tmp255_;
				gchar* length_ctype = NULL;
				ValaArrayType* _tmp256_;
				gchar* _tmp257_;
				_tmp254_ = type;
				_tmp255_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp254_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				array_type = _tmp255_;
				_tmp256_ = array_type;
				_tmp257_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp256_);
				length_ctype = _tmp257_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp258_ = FALSE;
						_tmp258_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp260_;
							gint _tmp261_;
							gint _tmp262_;
							ValaCCodeFunctionCall* _tmp263_;
							ValaCCodeExpression* _tmp264_;
							ValaCCodeExpression* _tmp265_;
							ValaCCodeFunction* _tmp266_;
							gchar* _tmp267_;
							gchar* _tmp268_;
							const gchar* _tmp269_;
							ValaCCodeParameter* _tmp270_;
							ValaCCodeParameter* _tmp271_;
							if (!_tmp258_) {
								gint _tmp259_;
								_tmp259_ = dim;
								dim = _tmp259_ + 1;
							}
							_tmp258_ = FALSE;
							_tmp260_ = array_type;
							_tmp261_ = vala_array_type_get_rank (_tmp260_);
							_tmp262_ = _tmp261_;
							if (!(dim <= _tmp262_)) {
								break;
							}
							_tmp263_ = ccall;
							_tmp264_ = vala_ccode_base_module_get_array_length_cvalue (self, value, dim);
							_tmp265_ = _tmp264_;
							vala_ccode_function_call_add_argument (_tmp263_, _tmp265_);
							_vala_ccode_node_unref0 (_tmp265_);
							_tmp266_ = cfunc;
							_tmp267_ = vala_ccode_base_module_get_array_length_cname (self, "value", dim);
							_tmp268_ = _tmp267_;
							_tmp269_ = length_ctype;
							_tmp270_ = vala_ccode_parameter_new (_tmp268_, _tmp269_);
							_tmp271_ = _tmp270_;
							vala_ccode_function_add_parameter (_tmp266_, _tmp271_);
							_vala_ccode_node_unref0 (_tmp271_);
							_g_free0 (_tmp268_);
						}
					}
				}
				_g_free0 (length_ctype);
				_vala_code_node_unref0 (array_type);
			}
			_tmp272_ = cfunc;
			vala_ccode_base_module_push_function (self, _tmp272_);
			_tmp273_ = vala_ccode_identifier_new ("g_variant_ref_sink");
			_tmp274_ = _tmp273_;
			_tmp275_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp274_);
			_tmp276_ = _tmp275_;
			_vala_ccode_node_unref0 (_tmp274_);
			sink = _tmp276_;
			_tmp277_ = sink;
			_tmp278_ = type;
			_tmp279_ = vala_ccode_identifier_new ("value");
			_tmp280_ = _tmp279_;
			_tmp281_ = vala_ccode_base_module_serialize_expression (self, _tmp278_, (ValaCCodeExpression*) _tmp280_);
			_tmp282_ = _tmp281_;
			vala_ccode_function_call_add_argument (_tmp277_, _tmp282_);
			_vala_ccode_node_unref0 (_tmp282_);
			_vala_ccode_node_unref0 (_tmp280_);
			_tmp283_ = vala_ccode_base_module_get_ccode (self);
			_tmp284_ = _tmp283_;
			_tmp285_ = sink;
			vala_ccode_function_add_return (_tmp284_, (ValaCCodeExpression*) _tmp285_);
			vala_ccode_base_module_pop_function (self);
			_tmp286_ = self->cfile;
			_tmp287_ = cfunc;
			vala_ccode_file_add_function_declaration (_tmp286_, _tmp287_);
			_tmp288_ = self->cfile;
			_tmp289_ = cfunc;
			vala_ccode_file_add_function (_tmp288_, _tmp289_);
			_tmp290_ = _result_;
			_tmp291_ = ccall;
			_tmp292_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp291_);
			_vala_ccode_node_unref0 (_tmp290_->cvalue);
			_tmp290_->cvalue = _tmp292_;
			_tmp293_ = _result_;
			_tmp294_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp293_);
			_tmp295_ = _tmp294_;
			vala_data_type_set_value_owned (_tmp295_, TRUE);
			_tmp296_ = _result_;
			_tmp297_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp296_, node, NULL);
			_vala_target_value_unref0 (_result_);
			_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp297_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
			_tmp298_ = vala_data_type_get_value_owned (target_type);
			_tmp299_ = _tmp298_;
			if (!_tmp299_) {
				ValaArrayList* _tmp300_;
				ValaArrayList* _tmp301_;
				ValaGLibValue* _tmp302_;
				ValaGLibValue* _tmp303_;
				ValaGLibValue* _tmp304_;
				_tmp300_ = vala_ccode_base_module_get_temp_ref_values (self);
				_tmp301_ = _tmp300_;
				_tmp302_ = _result_;
				_tmp303_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp302_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
				_tmp304_ = _tmp303_;
				vala_list_insert ((ValaList*) _tmp301_, 0, (ValaTargetValue*) _tmp304_);
				_vala_target_value_unref0 (_tmp304_);
			}
			_vala_ccode_node_unref0 (sink);
			_vala_ccode_node_unref0 (cfunc);
			_vala_ccode_node_unref0 (ccall);
			_g_free0 (variant_func);
		} else {
			if (boxing) {
				ValaGLibValue* _tmp305_;
				ValaDataType* _tmp306_;
				ValaDataType* _tmp307_;
				gboolean _tmp308_ = FALSE;
				ValaGLibValue* _tmp309_;
				ValaGLibValue* _tmp328_;
				ValaGLibValue* _tmp329_;
				ValaCCodeExpression* _tmp330_;
				ValaCCodeUnaryExpression* _tmp331_;
				ValaGLibValue* _tmp332_;
				ValaGLibValue* _tmp333_;
				ValaDataType* _tmp334_;
				ValaDataType* _tmp335_;
				_tmp305_ = _result_;
				_tmp306_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp305_);
				_tmp307_ = _tmp306_;
				vala_data_type_set_nullable (_tmp307_, FALSE);
				_tmp309_ = _result_;
				if (!_tmp309_->lvalue) {
					_tmp308_ = TRUE;
				} else {
					ValaGLibValue* _tmp310_;
					ValaDataType* _tmp311_;
					ValaDataType* _tmp312_;
					ValaDataType* _tmp313_;
					ValaDataType* _tmp314_;
					_tmp310_ = _result_;
					_tmp311_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp310_);
					_tmp312_ = _tmp311_;
					_tmp313_ = vala_target_value_get_value_type (value);
					_tmp314_ = _tmp313_;
					_tmp308_ = !vala_data_type_equals (_tmp312_, _tmp314_);
				}
				if (_tmp308_) {
					ValaGLibValue* _tmp315_;
					ValaGLibValue* _tmp316_;
					ValaCCodeExpression* _tmp317_;
					ValaDataType* _tmp318_;
					ValaDataType* _tmp319_;
					ValaGLibValue* _tmp320_;
					ValaDataType* _tmp321_;
					ValaDataType* _tmp322_;
					ValaCCodeExpression* _tmp323_;
					ValaGLibValue* _tmp324_;
					ValaCCodeExpression* _tmp325_;
					_tmp315_ = _result_;
					_tmp316_ = _result_;
					_tmp317_ = _tmp316_->cvalue;
					_tmp318_ = vala_target_value_get_value_type (value);
					_tmp319_ = _tmp318_;
					_tmp320_ = _result_;
					_tmp321_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp320_);
					_tmp322_ = _tmp321_;
					_tmp323_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp317_, _tmp319_, _tmp322_, node);
					_vala_ccode_node_unref0 (_tmp315_->cvalue);
					_tmp315_->cvalue = _tmp323_;
					_tmp324_ = _result_;
					_tmp325_ = _tmp324_->cvalue;
					if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp325_, VALA_TYPE_CCODE_CONSTANT_IDENTIFIER)) {
						ValaGLibValue* _tmp326_;
						ValaTargetValue* _tmp327_;
						_tmp326_ = _result_;
						_tmp327_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp326_, node, NULL);
						_vala_target_value_unref0 (_result_);
						_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp327_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
					}
				}
				_tmp328_ = _result_;
				_tmp329_ = _result_;
				_tmp330_ = _tmp329_->cvalue;
				_tmp331_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp330_);
				_vala_ccode_node_unref0 (_tmp328_->cvalue);
				_tmp328_->cvalue = (ValaCCodeExpression*) _tmp331_;
				_tmp332_ = _result_;
				_tmp332_->lvalue = FALSE;
				_tmp333_ = _result_;
				_tmp334_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp333_);
				_tmp335_ = _tmp334_;
				vala_data_type_set_nullable (_tmp335_, TRUE);
			} else {
				if (unboxing) {
					ValaGLibValue* _tmp336_;
					ValaGLibValue* _tmp337_;
					ValaCCodeExpression* _tmp338_;
					ValaCCodeUnaryExpression* _tmp339_;
					_tmp336_ = _result_;
					_tmp337_ = _result_;
					_tmp338_ = _tmp337_->cvalue;
					_tmp339_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp338_);
					_vala_ccode_node_unref0 (_tmp336_->cvalue);
					_tmp336_->cvalue = (ValaCCodeExpression*) _tmp339_;
				} else {
					ValaCCodeExpression* old_cexpr = NULL;
					ValaGLibValue* _tmp340_;
					ValaCCodeExpression* _tmp341_;
					ValaCCodeExpression* _tmp342_;
					ValaGLibValue* _tmp343_;
					ValaGLibValue* _tmp344_;
					ValaCCodeExpression* _tmp345_;
					ValaDataType* _tmp346_;
					ValaCCodeExpression* _tmp347_;
					gboolean _tmp348_ = FALSE;
					ValaGLibValue* _tmp349_;
					ValaGLibValue* _tmp353_;
					_tmp340_ = _result_;
					_tmp341_ = _tmp340_->cvalue;
					_tmp342_ = _vala_ccode_node_ref0 (_tmp341_);
					old_cexpr = _tmp342_;
					_tmp343_ = _result_;
					_tmp344_ = _result_;
					_tmp345_ = _tmp344_->cvalue;
					_tmp346_ = type;
					_tmp347_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp345_, _tmp346_, target_type, node);
					_vala_ccode_node_unref0 (_tmp343_->cvalue);
					_tmp343_->cvalue = _tmp347_;
					_tmp349_ = _result_;
					if (_tmp349_->lvalue) {
						ValaGLibValue* _tmp350_;
						ValaCCodeExpression* _tmp351_;
						ValaCCodeExpression* _tmp352_;
						_tmp350_ = _result_;
						_tmp351_ = _tmp350_->cvalue;
						_tmp352_ = old_cexpr;
						_tmp348_ = _tmp351_ == _tmp352_;
					} else {
						_tmp348_ = FALSE;
					}
					_tmp353_ = _result_;
					_tmp353_->lvalue = _tmp348_;
					_vala_ccode_node_unref0 (old_cexpr);
				}
			}
		}
	}
	array_needs_copy = FALSE;
	_tmp355_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp355_, VALA_TYPE_ARRAY_TYPE)) {
		_tmp354_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_ARRAY_TYPE);
	} else {
		_tmp354_ = FALSE;
	}
	if (_tmp354_) {
		ValaArrayType* array = NULL;
		ValaDataType* _tmp356_;
		ValaArrayType* _tmp357_;
		ValaArrayType* target_array = NULL;
		ValaArrayType* _tmp358_;
		gboolean _tmp359_ = FALSE;
		ValaArrayType* _tmp360_;
		ValaDataType* _tmp361_;
		ValaDataType* _tmp362_;
		gboolean _tmp363_;
		gboolean _tmp364_;
		_tmp356_ = type;
		_tmp357_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp356_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
		array = _tmp357_;
		_tmp358_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (target_type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
		target_array = _tmp358_;
		_tmp360_ = target_array;
		_tmp361_ = vala_array_type_get_element_type (_tmp360_);
		_tmp362_ = _tmp361_;
		_tmp363_ = vala_data_type_get_value_owned (_tmp362_);
		_tmp364_ = _tmp363_;
		if (_tmp364_) {
			ValaArrayType* _tmp365_;
			ValaDataType* _tmp366_;
			ValaDataType* _tmp367_;
			gboolean _tmp368_;
			gboolean _tmp369_;
			_tmp365_ = array;
			_tmp366_ = vala_array_type_get_element_type (_tmp365_);
			_tmp367_ = _tmp366_;
			_tmp368_ = vala_data_type_get_value_owned (_tmp367_);
			_tmp369_ = _tmp368_;
			_tmp359_ = !_tmp369_;
		} else {
			_tmp359_ = FALSE;
		}
		if (_tmp359_) {
			ValaArrayType* _tmp370_;
			ValaDataType* _tmp371_;
			ValaDataType* _tmp372_;
			_tmp370_ = target_array;
			_tmp371_ = vala_array_type_get_element_type (_tmp370_);
			_tmp372_ = _tmp371_;
			array_needs_copy = vala_ccode_base_module_requires_copy (_tmp372_);
		}
		_vala_code_node_unref0 (target_array);
		_vala_code_node_unref0 (array);
	}
	if (!gvalue_boxing) {
		_tmp377_ = !gvariant_boxing;
	} else {
		_tmp377_ = FALSE;
	}
	if (_tmp377_) {
		gboolean _tmp378_;
		gboolean _tmp379_;
		_tmp378_ = vala_data_type_get_value_owned (target_type);
		_tmp379_ = _tmp378_;
		_tmp376_ = _tmp379_;
	} else {
		_tmp376_ = FALSE;
	}
	if (_tmp376_) {
		gboolean _tmp380_ = FALSE;
		gboolean _tmp381_ = FALSE;
		gboolean _tmp382_ = FALSE;
		ValaDataType* _tmp383_;
		gboolean _tmp384_;
		gboolean _tmp385_;
		_tmp383_ = type;
		_tmp384_ = vala_data_type_get_value_owned (_tmp383_);
		_tmp385_ = _tmp384_;
		if (!_tmp385_) {
			_tmp382_ = TRUE;
		} else {
			_tmp382_ = boxing;
		}
		if (_tmp382_) {
			_tmp381_ = TRUE;
		} else {
			_tmp381_ = unboxing;
		}
		if (_tmp381_) {
			_tmp380_ = TRUE;
		} else {
			_tmp380_ = array_needs_copy;
		}
		_tmp375_ = _tmp380_;
	} else {
		_tmp375_ = FALSE;
	}
	if (_tmp375_) {
		_tmp374_ = vala_ccode_base_module_requires_copy (target_type);
	} else {
		_tmp374_ = FALSE;
	}
	if (_tmp374_) {
		ValaDataType* _tmp386_;
		_tmp386_ = type;
		_tmp373_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp386_, VALA_TYPE_NULL_TYPE);
	} else {
		_tmp373_ = FALSE;
	}
	if (_tmp373_) {
		ValaGLibValue* copy = NULL;
		ValaGLibValue* _tmp387_;
		ValaTargetValue* _tmp388_;
		gboolean _tmp389_ = FALSE;
		ValaTypeSymbol* _tmp390_;
		ValaTypeSymbol* _tmp391_;
		gboolean _tmp399_ = FALSE;
		ValaGLibValue* _tmp410_;
		ValaGLibValue* _tmp411_;
		ValaPropertyAccessor* prop_acc = NULL;
		ValaPropertyAccessor* _tmp412_;
		gboolean _tmp413_ = FALSE;
		gboolean _tmp414_ = FALSE;
		ValaPropertyAccessor* _tmp415_;
		_tmp387_ = _result_;
		_tmp388_ = vala_ccode_base_module_copy_value (self, (ValaTargetValue*) _tmp387_, node);
		copy = G_TYPE_CHECK_INSTANCE_CAST (_tmp388_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
		_tmp390_ = vala_data_type_get_type_symbol (target_type);
		_tmp391_ = _tmp390_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp391_, VALA_TYPE_INTERFACE)) {
			ValaGLibValue* _tmp392_;
			_tmp392_ = copy;
			_tmp389_ = _tmp392_ == NULL;
		} else {
			_tmp389_ = FALSE;
		}
		if (_tmp389_) {
			ValaSourceReference* _tmp393_;
			ValaSourceReference* _tmp394_;
			ValaTypeSymbol* _tmp395_;
			ValaTypeSymbol* _tmp396_;
			gchar* _tmp397_;
			gchar* _tmp398_;
			_tmp393_ = vala_code_node_get_source_reference (node);
			_tmp394_ = _tmp393_;
			_tmp395_ = vala_data_type_get_type_symbol (target_type);
			_tmp396_ = _tmp395_;
			_tmp397_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp396_);
			_tmp398_ = _tmp397_;
			vala_report_error (_tmp394_, "missing class prerequisite for interface `%s', add GLib.Object to inte" \
"rface declaration if unsure", _tmp398_);
			_g_free0 (_tmp398_);
			result = (ValaTargetValue*) _result_;
			_vala_target_value_unref0 (copy);
			_vala_code_node_unref0 (type);
			return result;
		}
		if (array_needs_copy) {
			ValaDataType* _tmp400_;
			_tmp400_ = type;
			_tmp399_ = vala_ccode_base_module_requires_destroy (_tmp400_);
		} else {
			_tmp399_ = FALSE;
		}
		if (_tmp399_) {
			ValaGLibValue* _tmp401_;
			ValaDataType* _tmp402_;
			ValaDataType* _tmp403_;
			ValaDataType* _tmp404_;
			ValaCCodeFunction* _tmp405_;
			ValaCCodeFunction* _tmp406_;
			ValaGLibValue* _tmp407_;
			ValaCCodeExpression* _tmp408_;
			ValaCCodeExpression* _tmp409_;
			_tmp401_ = _result_;
			_tmp402_ = type;
			_tmp403_ = vala_data_type_copy (_tmp402_);
			_tmp404_ = _tmp403_;
			vala_target_value_set_value_type ((ValaTargetValue*) _tmp401_, _tmp404_);
			_vala_code_node_unref0 (_tmp404_);
			_tmp405_ = vala_ccode_base_module_get_ccode (self);
			_tmp406_ = _tmp405_;
			_tmp407_ = _result_;
			_tmp408_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp407_, FALSE);
			_tmp409_ = _tmp408_;
			vala_ccode_function_add_expression (_tmp406_, _tmp409_);
			_vala_ccode_node_unref0 (_tmp409_);
		}
		_tmp410_ = copy;
		_tmp411_ = _vala_target_value_ref0 (_tmp410_);
		_vala_target_value_unref0 (_result_);
		_result_ = _tmp411_;
		_tmp412_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (node, VALA_TYPE_PROPERTY_ACCESSOR) ? ((ValaPropertyAccessor*) node) : NULL);
		prop_acc = _tmp412_;
		_tmp415_ = prop_acc;
		if (_tmp415_ != NULL) {
			ValaPropertyAccessor* _tmp416_;
			gboolean _tmp417_;
			gboolean _tmp418_;
			_tmp416_ = prop_acc;
			_tmp417_ = vala_property_accessor_get_automatic_body (_tmp416_);
			_tmp418_ = _tmp417_;
			_tmp414_ = !_tmp418_;
		} else {
			_tmp414_ = FALSE;
		}
		if (_tmp414_) {
			ValaGLibValue* _tmp419_;
			ValaDataType* _tmp420_;
			ValaDataType* _tmp421_;
			_tmp419_ = _result_;
			_tmp420_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp419_);
			_tmp421_ = _tmp420_;
			_tmp413_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp421_, VALA_TYPE_ARRAY_TYPE);
		} else {
			_tmp413_ = FALSE;
		}
		if (_tmp413_) {
			ValaSourceReference* _tmp422_;
			ValaSourceReference* _tmp423_;
			_tmp422_ = vala_code_node_get_source_reference (node);
			_tmp423_ = _tmp422_;
			vala_report_deprecated (_tmp423_, "implicit copy of array is deprecated, explicitly invoke the copy metho" \
"d instead");
		}
		_vala_code_node_unref0 (prop_acc);
		_vala_target_value_unref0 (copy);
	}
	result = (ValaTargetValue*) _result_;
	_vala_code_node_unref0 (type);
	return result;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_implicit_cast_expression (ValaCCodeBaseModule* self,
                                                          ValaCCodeExpression* source_cexpr,
                                                          ValaDataType* expression_type,
                                                          ValaDataType* target_type,
                                                          ValaCodeNode* node)
{
	ValaCCodeExpression* cexpr = NULL;
	ValaCCodeExpression* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	ValaCCodeFile* _tmp8_;
	ValaClass* cl = NULL;
	ValaTypeSymbol* _tmp9_;
	ValaTypeSymbol* _tmp10_;
	ValaInterface* iface = NULL;
	ValaTypeSymbol* _tmp11_;
	ValaTypeSymbol* _tmp12_;
	gboolean _tmp13_ = FALSE;
	ValaCodeContext* _tmp14_;
	gboolean _tmp15_;
	gboolean _tmp16_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (source_cexpr != NULL, NULL);
	_tmp0_ = _vala_ccode_node_ref0 (source_cexpr);
	cexpr = _tmp0_;
	_tmp2_ = vala_data_type_get_type_symbol (expression_type);
	_tmp3_ = _tmp2_;
	if (_tmp3_ != NULL) {
		ValaTypeSymbol* _tmp4_;
		ValaTypeSymbol* _tmp5_;
		ValaTypeSymbol* _tmp6_;
		ValaTypeSymbol* _tmp7_;
		_tmp4_ = vala_data_type_get_type_symbol (expression_type);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_data_type_get_type_symbol (target_type);
		_tmp7_ = _tmp6_;
		_tmp1_ = _tmp5_ == _tmp7_;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		result = cexpr;
		return result;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (expression_type, VALA_TYPE_NULL_TYPE)) {
		result = cexpr;
		return result;
	}
	_tmp8_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, target_type, _tmp8_);
	_tmp9_ = vala_data_type_get_type_symbol (target_type);
	_tmp10_ = _tmp9_;
	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp10_) : NULL;
	_tmp11_ = vala_data_type_get_type_symbol (target_type);
	_tmp12_ = _tmp11_;
	iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp12_) : NULL;
	_tmp14_ = self->priv->_context;
	_tmp15_ = vala_code_context_get_checking (_tmp14_);
	_tmp16_ = _tmp15_;
	if (_tmp16_) {
		gboolean _tmp17_ = FALSE;
		ValaInterface* _tmp18_;
		_tmp18_ = iface;
		if (_tmp18_ != NULL) {
			_tmp17_ = TRUE;
		} else {
			gboolean _tmp19_ = FALSE;
			ValaClass* _tmp20_;
			_tmp20_ = cl;
			if (_tmp20_ != NULL) {
				ValaClass* _tmp21_;
				gboolean _tmp22_;
				gboolean _tmp23_;
				_tmp21_ = cl;
				_tmp22_ = vala_class_get_is_compact (_tmp21_);
				_tmp23_ = _tmp22_;
				_tmp19_ = !_tmp23_;
			} else {
				_tmp19_ = FALSE;
			}
			_tmp17_ = _tmp19_;
		}
		_tmp13_ = _tmp17_;
	} else {
		_tmp13_ = FALSE;
	}
	if (_tmp13_) {
		ValaCCodeExpression* _tmp24_;
		ValaTypeSymbol* _tmp25_;
		ValaTypeSymbol* _tmp26_;
		ValaCCodeFunctionCall* _tmp27_;
		_tmp24_ = cexpr;
		_tmp25_ = vala_data_type_get_type_symbol (target_type);
		_tmp26_ = _tmp25_;
		_tmp27_ = vala_ccode_base_module_generate_instance_cast (self, _tmp24_, _tmp26_);
		result = (ValaCCodeExpression*) _tmp27_;
		_vala_ccode_node_unref0 (cexpr);
		return result;
	} else {
		gboolean _tmp28_ = FALSE;
		ValaTypeSymbol* _tmp29_;
		ValaTypeSymbol* _tmp30_;
		_tmp29_ = vala_data_type_get_type_symbol (target_type);
		_tmp30_ = _tmp29_;
		if (_tmp30_ != NULL) {
			gchar* _tmp31_;
			gchar* _tmp32_;
			gchar* _tmp33_;
			gchar* _tmp34_;
			_tmp31_ = vala_get_ccode_name ((ValaCodeNode*) expression_type);
			_tmp32_ = _tmp31_;
			_tmp33_ = vala_get_ccode_name ((ValaCodeNode*) target_type);
			_tmp34_ = _tmp33_;
			_tmp28_ = g_strcmp0 (_tmp32_, _tmp34_) != 0;
			_g_free0 (_tmp34_);
			_g_free0 (_tmp32_);
		} else {
			_tmp28_ = FALSE;
		}
		if (_tmp28_) {
			ValaStruct* st = NULL;
			ValaTypeSymbol* _tmp35_;
			ValaTypeSymbol* _tmp36_;
			gboolean _tmp37_ = FALSE;
			ValaTypeSymbol* _tmp38_;
			ValaTypeSymbol* _tmp39_;
			_tmp35_ = vala_data_type_get_type_symbol (target_type);
			_tmp36_ = _tmp35_;
			st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp36_) : NULL;
			_tmp38_ = vala_data_type_get_type_symbol (target_type);
			_tmp39_ = _tmp38_;
			if (vala_typesymbol_is_reference_type (_tmp39_)) {
				_tmp37_ = TRUE;
			} else {
				gboolean _tmp40_ = FALSE;
				ValaStruct* _tmp41_;
				_tmp41_ = st;
				if (_tmp41_ != NULL) {
					ValaStruct* _tmp42_;
					_tmp42_ = st;
					_tmp40_ = vala_struct_is_simple_type (_tmp42_);
				} else {
					_tmp40_ = FALSE;
				}
				_tmp37_ = _tmp40_;
			}
			if (_tmp37_) {
				ValaCCodeExpression* _tmp43_;
				gchar* _tmp44_;
				gchar* _tmp45_;
				ValaCCodeCastExpression* _tmp46_;
				ValaCCodeExpression* _tmp47_;
				_tmp43_ = cexpr;
				_tmp44_ = vala_get_ccode_name ((ValaCodeNode*) target_type);
				_tmp45_ = _tmp44_;
				_tmp46_ = vala_ccode_cast_expression_new (_tmp43_, _tmp45_);
				_tmp47_ = (ValaCCodeExpression*) _tmp46_;
				_g_free0 (_tmp45_);
				result = _tmp47_;
				_vala_ccode_node_unref0 (cexpr);
				return result;
			} else {
				result = cexpr;
				return result;
			}
		} else {
			result = cexpr;
			return result;
		}
	}
}

ValaCCodeExpression*
vala_ccode_base_module_get_implicit_cast_expression (ValaCCodeBaseModule* self,
                                                     ValaCCodeExpression* source_cexpr,
                                                     ValaDataType* expression_type,
                                                     ValaDataType* target_type,
                                                     ValaCodeNode* node)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_implicit_cast_expression) {
		return _klass_->get_implicit_cast_expression (self, source_cexpr, expression_type, target_type, node);
	}
	return NULL;
}

void
vala_ccode_base_module_store_property (ValaCCodeBaseModule* self,
                                       ValaProperty* prop,
                                       ValaExpression* instance,
                                       ValaTargetValue* value)
{
	ValaProperty* base_prop = NULL;
	ValaProperty* _tmp0_;
	ValaProperty* _tmp1_;
	gboolean _tmp8_ = FALSE;
	gchar* set_func = NULL;
	gchar* _tmp81_;
	gboolean _tmp82_ = FALSE;
	ValaCCodeFunctionCall* ccall = NULL;
	const gchar* _tmp96_;
	ValaCCodeIdentifier* _tmp97_;
	ValaCCodeIdentifier* _tmp98_;
	ValaCCodeFunctionCall* _tmp99_;
	ValaCCodeFunctionCall* _tmp100_;
	ValaMemberBinding _tmp101_;
	ValaMemberBinding _tmp102_;
	gboolean _tmp120_ = FALSE;
	ValaCCodeExpression* cexpr = NULL;
	ValaCCodeExpression* _tmp124_;
	ValaCCodeExpression* _tmp125_;
	ValaDataType* _tmp126_;
	ValaDataType* _tmp127_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp137_;
	ValaDataType* _tmp138_;
	ValaArrayType* _tmp139_;
	ValaCCodeFunctionCall* _tmp140_;
	ValaCCodeExpression* _tmp141_;
	gboolean _tmp142_ = FALSE;
	ValaArrayType* _tmp143_;
	gboolean _tmp176_ = FALSE;
	ValaCCodeFunction* _tmp180_;
	ValaCCodeFunction* _tmp181_;
	ValaCCodeFunctionCall* _tmp182_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (prop != NULL);
	g_return_if_fail (value != NULL);
	base_prop = prop;
	_tmp0_ = vala_property_get_base_property (prop);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		ValaProperty* _tmp2_;
		ValaProperty* _tmp3_;
		_tmp2_ = vala_property_get_base_property (prop);
		_tmp3_ = _tmp2_;
		base_prop = _tmp3_;
	} else {
		ValaProperty* _tmp4_;
		ValaProperty* _tmp5_;
		_tmp4_ = vala_property_get_base_interface_property (prop);
		_tmp5_ = _tmp4_;
		if (_tmp5_ != NULL) {
			ValaProperty* _tmp6_;
			ValaProperty* _tmp7_;
			_tmp6_ = vala_property_get_base_interface_property (prop);
			_tmp7_ = _tmp6_;
			base_prop = _tmp7_;
		}
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (instance, VALA_TYPE_BASE_ACCESS)) {
		gboolean _tmp9_ = FALSE;
		ValaProperty* _tmp10_;
		gboolean _tmp11_;
		gboolean _tmp12_;
		_tmp10_ = base_prop;
		_tmp11_ = vala_property_get_is_abstract (_tmp10_);
		_tmp12_ = _tmp11_;
		if (_tmp12_) {
			_tmp9_ = TRUE;
		} else {
			ValaProperty* _tmp13_;
			gboolean _tmp14_;
			gboolean _tmp15_;
			_tmp13_ = base_prop;
			_tmp14_ = vala_property_get_is_virtual (_tmp13_);
			_tmp15_ = _tmp14_;
			_tmp9_ = _tmp15_;
		}
		_tmp8_ = _tmp9_;
	} else {
		_tmp8_ = FALSE;
	}
	if (_tmp8_) {
		ValaCCodeExpression* vcast = NULL;
		ValaProperty* _tmp16_;
		ValaSymbol* _tmp17_;
		ValaSymbol* _tmp18_;
		ValaCCodeExpression* _tmp45_;
		vcast = NULL;
		_tmp16_ = base_prop;
		_tmp17_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp16_);
		_tmp18_ = _tmp17_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_CLASS)) {
			ValaClass* base_class = NULL;
			ValaProperty* _tmp19_;
			ValaSymbol* _tmp20_;
			ValaSymbol* _tmp21_;
			ValaClass* _tmp22_;
			gchar* _tmp23_;
			gchar* _tmp24_;
			ValaCCodeIdentifier* _tmp25_;
			ValaCCodeIdentifier* _tmp26_;
			ValaCCodeFunctionCall* _tmp27_;
			ValaCCodeExpression* _tmp28_;
			ValaClass* _tmp29_;
			ValaClass* _tmp30_;
			gchar* _tmp31_;
			gchar* _tmp32_;
			gchar* _tmp33_;
			gchar* _tmp34_;
			ValaCCodeIdentifier* _tmp35_;
			ValaCCodeIdentifier* _tmp36_;
			_tmp19_ = base_prop;
			_tmp20_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp19_);
			_tmp21_ = _tmp20_;
			base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_CLASS, ValaClass);
			_tmp22_ = base_class;
			_tmp23_ = vala_get_ccode_class_type_function (_tmp22_);
			_tmp24_ = _tmp23_;
			_tmp25_ = vala_ccode_identifier_new (_tmp24_);
			_tmp26_ = _tmp25_;
			_tmp27_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp26_);
			_vala_ccode_node_unref0 (vcast);
			vcast = (ValaCCodeExpression*) _tmp27_;
			_vala_ccode_node_unref0 (_tmp26_);
			_g_free0 (_tmp24_);
			_tmp28_ = vcast;
			_tmp29_ = vala_ccode_base_module_get_current_class (self);
			_tmp30_ = _tmp29_;
			_tmp31_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp30_, NULL);
			_tmp32_ = _tmp31_;
			_tmp33_ = g_strdup_printf ("%s_parent_class", _tmp32_);
			_tmp34_ = _tmp33_;
			_tmp35_ = vala_ccode_identifier_new (_tmp34_);
			_tmp36_ = _tmp35_;
			vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp36_);
			_vala_ccode_node_unref0 (_tmp36_);
			_g_free0 (_tmp34_);
			_g_free0 (_tmp32_);
		} else {
			ValaProperty* _tmp37_;
			ValaSymbol* _tmp38_;
			ValaSymbol* _tmp39_;
			_tmp37_ = base_prop;
			_tmp38_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp37_);
			_tmp39_ = _tmp38_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp39_, VALA_TYPE_INTERFACE)) {
				ValaInterface* base_iface = NULL;
				ValaProperty* _tmp40_;
				ValaSymbol* _tmp41_;
				ValaSymbol* _tmp42_;
				ValaInterface* _tmp43_;
				ValaCCodeExpression* _tmp44_;
				_tmp40_ = base_prop;
				_tmp41_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp40_);
				_tmp42_ = _tmp41_;
				base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_INTERFACE, ValaInterface);
				_tmp43_ = base_iface;
				_tmp44_ = vala_ccode_base_module_get_this_interface_cexpression (self, _tmp43_, NULL);
				_vala_ccode_node_unref0 (vcast);
				vcast = _tmp44_;
			}
		}
		_tmp45_ = vcast;
		if (_tmp45_ != NULL) {
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeExpression* _tmp46_;
			const gchar* _tmp47_;
			const gchar* _tmp48_;
			gchar* _tmp49_;
			gchar* _tmp50_;
			ValaCCodeMemberAccess* _tmp51_;
			ValaCCodeMemberAccess* _tmp52_;
			ValaCCodeFunctionCall* _tmp53_;
			ValaCCodeFunctionCall* _tmp54_;
			ValaCCodeFunctionCall* _tmp55_;
			ValaCCodeExpression* _tmp56_;
			ValaCCodeExpression* _tmp57_;
			ValaCCodeExpression* cexpr = NULL;
			ValaCCodeExpression* _tmp58_;
			ValaCCodeExpression* _tmp59_;
			ValaDataType* _tmp60_;
			ValaDataType* _tmp61_;
			ValaCCodeFunctionCall* _tmp71_;
			ValaCCodeExpression* _tmp72_;
			ValaCCodeFunction* _tmp73_;
			ValaCCodeFunction* _tmp74_;
			ValaCCodeFunctionCall* _tmp75_;
			_tmp46_ = vcast;
			_tmp47_ = vala_symbol_get_name ((ValaSymbol*) prop);
			_tmp48_ = _tmp47_;
			_tmp49_ = g_strdup_printf ("set_%s", _tmp48_);
			_tmp50_ = _tmp49_;
			_tmp51_ = vala_ccode_member_access_new_pointer (_tmp46_, _tmp50_);
			_tmp52_ = _tmp51_;
			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
			_tmp54_ = _tmp53_;
			_vala_ccode_node_unref0 (_tmp52_);
			_g_free0 (_tmp50_);
			ccall = _tmp54_;
			_tmp55_ = ccall;
			_tmp56_ = vala_ccode_base_module_get_ccodenode (self, instance);
			_tmp57_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp56_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
			vala_ccode_function_call_add_argument (_tmp55_, _tmp57_);
			_vala_ccode_node_unref0 (_tmp57_);
			_tmp58_ = vala_get_cvalue_ (value);
			_tmp59_ = _vala_ccode_node_ref0 (_tmp58_);
			cexpr = _tmp59_;
			_tmp60_ = vala_property_get_property_type (prop);
			_tmp61_ = _tmp60_;
			if (vala_data_type_is_real_non_null_struct_type (_tmp61_)) {
				gboolean _tmp62_ = FALSE;
				ValaCCodeExpression* _tmp63_;
				ValaCCodeExpression* _tmp69_;
				ValaCCodeUnaryExpression* _tmp70_;
				_tmp63_ = cexpr;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp63_, VALA_TYPE_CCODE_CONSTANT)) {
					_tmp62_ = TRUE;
				} else {
					ValaCCodeExpression* _tmp64_;
					_tmp64_ = cexpr;
					_tmp62_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp64_, VALA_TYPE_CCODE_IDENTIFIER);
				}
				if (!_tmp62_) {
					ValaTargetValue* temp_value = NULL;
					ValaTargetValue* _tmp65_;
					ValaTargetValue* _tmp66_;
					ValaCCodeExpression* _tmp67_;
					ValaCCodeExpression* _tmp68_;
					_tmp65_ = vala_ccode_base_module_store_temp_value (self, value, (ValaCodeNode*) instance, NULL);
					temp_value = _tmp65_;
					_tmp66_ = temp_value;
					_tmp67_ = vala_get_cvalue_ (_tmp66_);
					_tmp68_ = _vala_ccode_node_ref0 (_tmp67_);
					_vala_ccode_node_unref0 (cexpr);
					cexpr = _tmp68_;
					_vala_target_value_unref0 (temp_value);
				}
				_tmp69_ = cexpr;
				_tmp70_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp69_);
				_vala_ccode_node_unref0 (cexpr);
				cexpr = (ValaCCodeExpression*) _tmp70_;
			}
			_tmp71_ = ccall;
			_tmp72_ = cexpr;
			vala_ccode_function_call_add_argument (_tmp71_, _tmp72_);
			_tmp73_ = vala_ccode_base_module_get_ccode (self);
			_tmp74_ = _tmp73_;
			_tmp75_ = ccall;
			vala_ccode_function_add_expression (_tmp74_, (ValaCCodeExpression*) _tmp75_);
			_vala_ccode_node_unref0 (cexpr);
			_vala_ccode_node_unref0 (ccall);
		} else {
			ValaSourceReference* _tmp76_;
			ValaSourceReference* _tmp77_;
			ValaProperty* _tmp78_;
			gchar* _tmp79_;
			gchar* _tmp80_;
			_tmp76_ = vala_code_node_get_source_reference ((ValaCodeNode*) instance);
			_tmp77_ = _tmp76_;
			_tmp78_ = base_prop;
			_tmp79_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp78_);
			_tmp80_ = _tmp79_;
			vala_report_error (_tmp77_, "internal: Invalid assignment to `%s'", _tmp80_);
			_g_free0 (_tmp80_);
		}
		_vala_ccode_node_unref0 (vcast);
		return;
	}
	_tmp81_ = g_strdup ("g_object_set");
	set_func = _tmp81_;
	if (!vala_get_ccode_no_accessor_method (prop)) {
		_tmp82_ = !G_TYPE_CHECK_INSTANCE_TYPE (prop, VALA_TYPE_DYNAMIC_PROPERTY);
	} else {
		_tmp82_ = FALSE;
	}
	if (_tmp82_) {
		ValaProperty* _tmp83_;
		ValaPropertyAccessor* _tmp84_;
		ValaPropertyAccessor* _tmp85_;
		ValaCCodeFile* _tmp86_;
		ValaProperty* _tmp87_;
		ValaPropertyAccessor* _tmp88_;
		ValaPropertyAccessor* _tmp89_;
		gchar* _tmp90_;
		gboolean _tmp91_ = FALSE;
		gboolean _tmp92_;
		gboolean _tmp93_;
		_tmp83_ = base_prop;
		_tmp84_ = vala_property_get_set_accessor (_tmp83_);
		_tmp85_ = _tmp84_;
		_tmp86_ = self->cfile;
		vala_ccode_base_module_generate_property_accessor_declaration (self, _tmp85_, _tmp86_);
		_tmp87_ = base_prop;
		_tmp88_ = vala_property_get_set_accessor (_tmp87_);
		_tmp89_ = _tmp88_;
		_tmp90_ = vala_get_ccode_name ((ValaCodeNode*) _tmp89_);
		_g_free0 (set_func);
		set_func = _tmp90_;
		_tmp92_ = vala_symbol_get_external ((ValaSymbol*) prop);
		_tmp93_ = _tmp92_;
		if (!_tmp93_) {
			gboolean _tmp94_;
			gboolean _tmp95_;
			_tmp94_ = vala_symbol_get_external_package ((ValaSymbol*) prop);
			_tmp95_ = _tmp94_;
			_tmp91_ = _tmp95_;
		} else {
			_tmp91_ = FALSE;
		}
		if (_tmp91_) {
			if (vala_ccode_base_module_add_generated_external_symbol (self, (ValaSymbol*) prop)) {
				vala_code_visitor_visit_property ((ValaCodeVisitor*) self, prop);
			}
		}
	}
	_tmp96_ = set_func;
	_tmp97_ = vala_ccode_identifier_new (_tmp96_);
	_tmp98_ = _tmp97_;
	_tmp99_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp98_);
	_tmp100_ = _tmp99_;
	_vala_ccode_node_unref0 (_tmp98_);
	ccall = _tmp100_;
	_tmp101_ = vala_property_get_binding (prop);
	_tmp102_ = _tmp101_;
	if (_tmp102_ == VALA_MEMBER_BINDING_INSTANCE) {
		ValaCCodeExpression* cinstance = NULL;
		ValaCCodeExpression* _tmp103_;
		gboolean _tmp104_ = FALSE;
		ValaSymbol* _tmp105_;
		ValaSymbol* _tmp106_;
		ValaCCodeFunctionCall* _tmp118_;
		ValaCCodeExpression* _tmp119_;
		_tmp103_ = vala_ccode_base_module_get_ccodenode (self, instance);
		cinstance = G_TYPE_CHECK_INSTANCE_CAST (_tmp103_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
		_tmp105_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
		_tmp106_ = _tmp105_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp106_, VALA_TYPE_STRUCT)) {
			ValaSymbol* _tmp107_;
			ValaSymbol* _tmp108_;
			_tmp107_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
			_tmp108_ = _tmp107_;
			_tmp104_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_STRUCT, ValaStruct));
		} else {
			_tmp104_ = FALSE;
		}
		if (_tmp104_) {
			ValaTargetValue* instance_value = NULL;
			ValaTargetValue* _tmp109_;
			ValaTargetValue* _tmp110_;
			ValaTargetValue* _tmp111_;
			ValaTargetValue* _tmp112_;
			ValaTargetValue* _tmp115_;
			ValaCCodeExpression* _tmp116_;
			ValaCCodeUnaryExpression* _tmp117_;
			_tmp109_ = vala_expression_get_target_value (instance);
			_tmp110_ = _tmp109_;
			_tmp111_ = _vala_target_value_ref0 (_tmp110_);
			instance_value = _tmp111_;
			_tmp112_ = instance_value;
			if (!vala_get_lvalue (_tmp112_)) {
				ValaTargetValue* _tmp113_;
				ValaTargetValue* _tmp114_;
				_tmp113_ = instance_value;
				_tmp114_ = vala_ccode_base_module_store_temp_value (self, _tmp113_, (ValaCodeNode*) instance, NULL);
				_vala_target_value_unref0 (instance_value);
				instance_value = _tmp114_;
			}
			_tmp115_ = instance_value;
			_tmp116_ = vala_get_cvalue_ (_tmp115_);
			_tmp117_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp116_);
			_vala_ccode_node_unref0 (cinstance);
			cinstance = (ValaCCodeExpression*) _tmp117_;
			_vala_target_value_unref0 (instance_value);
		}
		_tmp118_ = ccall;
		_tmp119_ = cinstance;
		vala_ccode_function_call_add_argument (_tmp118_, _tmp119_);
		_vala_ccode_node_unref0 (cinstance);
	}
	if (vala_get_ccode_no_accessor_method (prop)) {
		_tmp120_ = TRUE;
	} else {
		_tmp120_ = G_TYPE_CHECK_INSTANCE_TYPE (prop, VALA_TYPE_DYNAMIC_PROPERTY);
	}
	if (_tmp120_) {
		ValaCCodeFunctionCall* _tmp121_;
		ValaCCodeConstant* _tmp122_;
		ValaCCodeConstant* _tmp123_;
		_tmp121_ = ccall;
		_tmp122_ = vala_ccode_base_module_get_property_canonical_cconstant (self, prop);
		_tmp123_ = _tmp122_;
		vala_ccode_function_call_add_argument (_tmp121_, (ValaCCodeExpression*) _tmp123_);
		_vala_ccode_node_unref0 (_tmp123_);
	}
	_tmp124_ = vala_get_cvalue_ (value);
	_tmp125_ = _vala_ccode_node_ref0 (_tmp124_);
	cexpr = _tmp125_;
	_tmp126_ = vala_property_get_property_type (prop);
	_tmp127_ = _tmp126_;
	if (vala_data_type_is_real_non_null_struct_type (_tmp127_)) {
		gboolean _tmp128_ = FALSE;
		ValaCCodeExpression* _tmp129_;
		ValaCCodeExpression* _tmp135_;
		ValaCCodeUnaryExpression* _tmp136_;
		_tmp129_ = cexpr;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp129_, VALA_TYPE_CCODE_CONSTANT)) {
			_tmp128_ = TRUE;
		} else {
			ValaCCodeExpression* _tmp130_;
			_tmp130_ = cexpr;
			_tmp128_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp130_, VALA_TYPE_CCODE_IDENTIFIER);
		}
		if (!_tmp128_) {
			ValaTargetValue* temp_value = NULL;
			ValaTargetValue* _tmp131_;
			ValaTargetValue* _tmp132_;
			ValaCCodeExpression* _tmp133_;
			ValaCCodeExpression* _tmp134_;
			_tmp131_ = vala_ccode_base_module_store_temp_value (self, value, (ValaCodeNode*) instance, NULL);
			temp_value = _tmp131_;
			_tmp132_ = temp_value;
			_tmp133_ = vala_get_cvalue_ (_tmp132_);
			_tmp134_ = _vala_ccode_node_ref0 (_tmp133_);
			_vala_ccode_node_unref0 (cexpr);
			cexpr = _tmp134_;
			_vala_target_value_unref0 (temp_value);
		}
		_tmp135_ = cexpr;
		_tmp136_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp135_);
		_vala_ccode_node_unref0 (cexpr);
		cexpr = (ValaCCodeExpression*) _tmp136_;
	}
	_tmp137_ = vala_property_get_property_type (prop);
	_tmp138_ = _tmp137_;
	_tmp139_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp138_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp138_) : NULL);
	array_type = _tmp139_;
	_tmp140_ = ccall;
	_tmp141_ = cexpr;
	vala_ccode_function_call_add_argument (_tmp140_, _tmp141_);
	_tmp143_ = array_type;
	if (_tmp143_ != NULL) {
		_tmp142_ = vala_get_ccode_array_length ((ValaCodeNode*) prop);
	} else {
		_tmp142_ = FALSE;
	}
	if (_tmp142_) {
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp144_ = FALSE;
				_tmp144_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp146_;
					gint _tmp147_;
					gint _tmp148_;
					ValaCCodeFunctionCall* _tmp149_;
					ValaCCodeExpression* _tmp150_;
					ValaCCodeExpression* _tmp151_;
					if (!_tmp144_) {
						gint _tmp145_;
						_tmp145_ = dim;
						dim = _tmp145_ + 1;
					}
					_tmp144_ = FALSE;
					_tmp146_ = array_type;
					_tmp147_ = vala_array_type_get_rank (_tmp146_);
					_tmp148_ = _tmp147_;
					if (!(dim <= _tmp148_)) {
						break;
					}
					_tmp149_ = ccall;
					_tmp150_ = vala_ccode_base_module_get_array_length_cvalue (self, value, dim);
					_tmp151_ = _tmp150_;
					vala_ccode_function_call_add_argument (_tmp149_, _tmp151_);
					_vala_ccode_node_unref0 (_tmp151_);
				}
			}
		}
	} else {
		ValaDataType* _tmp152_;
		ValaDataType* _tmp153_;
		_tmp152_ = vala_property_get_property_type (prop);
		_tmp153_ = _tmp152_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp153_, VALA_TYPE_DELEGATE_TYPE)) {
			ValaDelegateType* delegate_type = NULL;
			ValaDataType* _tmp154_;
			ValaDataType* _tmp155_;
			ValaDelegateType* _tmp156_;
			gboolean _tmp157_ = FALSE;
			_tmp154_ = vala_property_get_property_type (prop);
			_tmp155_ = _tmp154_;
			_tmp156_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp155_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
			delegate_type = _tmp156_;
			if (vala_get_ccode_delegate_target ((ValaCodeNode*) prop)) {
				ValaDelegateType* _tmp158_;
				ValaDelegate* _tmp159_;
				ValaDelegate* _tmp160_;
				gboolean _tmp161_;
				gboolean _tmp162_;
				_tmp158_ = delegate_type;
				_tmp159_ = vala_delegate_type_get_delegate_symbol (_tmp158_);
				_tmp160_ = _tmp159_;
				_tmp161_ = vala_delegate_get_has_target (_tmp160_);
				_tmp162_ = _tmp161_;
				_tmp157_ = _tmp162_;
			} else {
				_tmp157_ = FALSE;
			}
			if (_tmp157_) {
				ValaCCodeFunctionCall* _tmp163_;
				ValaCCodeExpression* _tmp164_;
				ValaCCodeExpression* _tmp165_;
				ValaProperty* _tmp166_;
				ValaPropertyAccessor* _tmp167_;
				ValaPropertyAccessor* _tmp168_;
				ValaDataType* _tmp169_;
				ValaDataType* _tmp170_;
				gboolean _tmp171_;
				gboolean _tmp172_;
				_tmp163_ = ccall;
				_tmp164_ = vala_ccode_base_module_get_delegate_target_cvalue (self, value);
				_tmp165_ = _tmp164_;
				vala_ccode_function_call_add_argument (_tmp163_, _tmp165_);
				_vala_ccode_node_unref0 (_tmp165_);
				_tmp166_ = base_prop;
				_tmp167_ = vala_property_get_set_accessor (_tmp166_);
				_tmp168_ = _tmp167_;
				_tmp169_ = vala_property_accessor_get_value_type (_tmp168_);
				_tmp170_ = _tmp169_;
				_tmp171_ = vala_data_type_get_value_owned (_tmp170_);
				_tmp172_ = _tmp171_;
				if (_tmp172_) {
					ValaCCodeFunctionCall* _tmp173_;
					ValaCCodeExpression* _tmp174_;
					ValaCCodeExpression* _tmp175_;
					_tmp173_ = ccall;
					_tmp174_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, value);
					_tmp175_ = _tmp174_;
					vala_ccode_function_call_add_argument (_tmp173_, _tmp175_);
					_vala_ccode_node_unref0 (_tmp175_);
				}
			}
			_vala_code_node_unref0 (delegate_type);
		}
	}
	if (vala_get_ccode_no_accessor_method (prop)) {
		_tmp176_ = TRUE;
	} else {
		_tmp176_ = G_TYPE_CHECK_INSTANCE_TYPE (prop, VALA_TYPE_DYNAMIC_PROPERTY);
	}
	if (_tmp176_) {
		ValaCCodeFunctionCall* _tmp177_;
		ValaCCodeConstant* _tmp178_;
		ValaCCodeConstant* _tmp179_;
		_tmp177_ = ccall;
		_tmp178_ = vala_ccode_constant_new ("NULL");
		_tmp179_ = _tmp178_;
		vala_ccode_function_call_add_argument (_tmp177_, (ValaCCodeExpression*) _tmp179_);
		_vala_ccode_node_unref0 (_tmp179_);
	}
	_tmp180_ = vala_ccode_base_module_get_ccode (self);
	_tmp181_ = _tmp180_;
	_tmp182_ = ccall;
	vala_ccode_function_add_expression (_tmp181_, (ValaCCodeExpression*) _tmp182_);
	_vala_code_node_unref0 (array_type);
	_vala_ccode_node_unref0 (cexpr);
	_vala_ccode_node_unref0 (ccall);
	_g_free0 (set_func);
}

gboolean
vala_ccode_base_module_add_wrapper (ValaCCodeBaseModule* self,
                                    const gchar* wrapper_name)
{
	ValaSet* _tmp0_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (wrapper_name != NULL, FALSE);
	_tmp0_ = self->wrappers;
	result = vala_collection_add ((ValaCollection*) _tmp0_, wrapper_name);
	return result;
}

gboolean
vala_ccode_base_module_add_generated_external_symbol (ValaCCodeBaseModule* self,
                                                      ValaSymbol* external_symbol)
{
	ValaSet* _tmp0_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (external_symbol != NULL, FALSE);
	_tmp0_ = self->priv->generated_external_symbols;
	result = vala_collection_add ((ValaCollection*) _tmp0_, external_symbol);
	return result;
}

ValaDataType*
vala_ccode_base_module_get_callable_creturn_type (ValaCallable* c)
{
	gboolean _tmp0_ = FALSE;
	ValaDataType* creturn_type = NULL;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaDataType* result;
	g_return_val_if_fail (c != NULL, NULL);
	if (G_TYPE_CHECK_INSTANCE_TYPE (c, VALA_TYPE_METHOD)) {
		_tmp0_ = TRUE;
	} else {
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (c, VALA_TYPE_DELEGATE);
	}
	_vala_assert (_tmp0_, "c is Method || c is Delegate");
	_tmp1_ = vala_callable_get_return_type (c);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_data_type_copy (_tmp2_);
	creturn_type = _tmp3_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (c, VALA_TYPE_CREATION_METHOD)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaStruct* st = NULL;
		ValaSymbol* _tmp6_;
		ValaSymbol* _tmp7_;
		ValaClass* _tmp8_;
		_tmp4_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
		_tmp5_ = _tmp4_;
		cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp5_) : NULL;
		_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
		_tmp7_ = _tmp6_;
		st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp7_) : NULL;
		_tmp8_ = cl;
		if (_tmp8_ != NULL) {
			ValaClass* _tmp9_;
			ValaObjectType* _tmp10_;
			_tmp9_ = cl;
			_tmp10_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp9_, NULL);
			_vala_code_node_unref0 (creturn_type);
			creturn_type = (ValaDataType*) _tmp10_;
		} else {
			gboolean _tmp11_ = FALSE;
			ValaStruct* _tmp12_;
			_tmp12_ = st;
			if (_tmp12_ != NULL) {
				ValaStruct* _tmp13_;
				_tmp13_ = st;
				_tmp11_ = vala_struct_is_simple_type (_tmp13_);
			} else {
				_tmp11_ = FALSE;
			}
			if (_tmp11_) {
				ValaStruct* _tmp14_;
				ValaStructValueType* _tmp15_;
				_tmp14_ = st;
				_tmp15_ = vala_struct_value_type_new (_tmp14_, NULL);
				_vala_code_node_unref0 (creturn_type);
				creturn_type = (ValaDataType*) _tmp15_;
			}
		}
	} else {
		ValaDataType* _tmp16_;
		ValaDataType* _tmp17_;
		_tmp16_ = vala_callable_get_return_type (c);
		_tmp17_ = _tmp16_;
		if (vala_data_type_is_real_non_null_struct_type (_tmp17_)) {
			ValaVoidType* _tmp18_;
			_tmp18_ = vala_void_type_new (NULL);
			_vala_code_node_unref0 (creturn_type);
			creturn_type = (ValaDataType*) _tmp18_;
		}
	}
	result = creturn_type;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_default_value_for_type (ValaCCodeBaseModule* self,
                                               ValaDataType* type,
                                               gboolean initializer_expression,
                                               gboolean on_error)
{
	ValaStruct* st = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp2_;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	ValaTypeSymbol* _tmp5_;
	ValaTypeSymbol* _tmp6_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
	array_type = _tmp2_;
	_tmp5_ = vala_data_type_get_type_symbol (type);
	_tmp6_ = _tmp5_;
	if (_tmp6_ != NULL) {
		gboolean _tmp7_;
		gboolean _tmp8_;
		_tmp7_ = vala_data_type_get_nullable (type);
		_tmp8_ = _tmp7_;
		_tmp4_ = !_tmp8_;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		gchar* _tmp9_ = NULL;
		if (on_error) {
			ValaTypeSymbol* _tmp10_;
			ValaTypeSymbol* _tmp11_;
			gchar* _tmp12_;
			_tmp10_ = vala_data_type_get_type_symbol (type);
			_tmp11_ = _tmp10_;
			_tmp12_ = vala_get_ccode_default_value_on_error (_tmp11_);
			_g_free0 (_tmp9_);
			_tmp9_ = _tmp12_;
		} else {
			ValaTypeSymbol* _tmp13_;
			ValaTypeSymbol* _tmp14_;
			gchar* _tmp15_;
			_tmp13_ = vala_data_type_get_type_symbol (type);
			_tmp14_ = _tmp13_;
			_tmp15_ = vala_get_ccode_default_value (_tmp14_);
			_g_free0 (_tmp9_);
			_tmp9_ = _tmp15_;
		}
		_tmp3_ = g_strcmp0 (_tmp9_, "") != 0;
		_g_free0 (_tmp9_);
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		gchar* _tmp16_ = NULL;
		ValaCCodeExpression* val = NULL;
		ValaCCodeConstant* _tmp23_;
		gboolean _tmp24_ = FALSE;
		ValaStruct* _tmp25_;
		if (on_error) {
			ValaTypeSymbol* _tmp17_;
			ValaTypeSymbol* _tmp18_;
			gchar* _tmp19_;
			_tmp17_ = vala_data_type_get_type_symbol (type);
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_get_ccode_default_value_on_error (_tmp18_);
			_g_free0 (_tmp16_);
			_tmp16_ = _tmp19_;
		} else {
			ValaTypeSymbol* _tmp20_;
			ValaTypeSymbol* _tmp21_;
			gchar* _tmp22_;
			_tmp20_ = vala_data_type_get_type_symbol (type);
			_tmp21_ = _tmp20_;
			_tmp22_ = vala_get_ccode_default_value (_tmp21_);
			_g_free0 (_tmp16_);
			_tmp16_ = _tmp22_;
		}
		_tmp23_ = vala_ccode_constant_new (_tmp16_);
		val = (ValaCCodeExpression*) _tmp23_;
		_tmp25_ = st;
		if (_tmp25_ != NULL) {
			ValaStruct* _tmp26_;
			ValaList* _tmp27_;
			gint _tmp28_;
			gint _tmp29_;
			_tmp26_ = st;
			_tmp27_ = vala_struct_get_fields (_tmp26_);
			_tmp28_ = vala_collection_get_size ((ValaCollection*) _tmp27_);
			_tmp29_ = _tmp28_;
			_tmp24_ = _tmp29_ > 0;
		} else {
			_tmp24_ = FALSE;
		}
		if (_tmp24_) {
			ValaCCodeExpression* _tmp30_;
			ValaStruct* _tmp31_;
			gchar* _tmp32_;
			gchar* _tmp33_;
			ValaCCodeCastExpression* _tmp34_;
			_tmp30_ = val;
			_tmp31_ = st;
			_tmp32_ = vala_get_ccode_name ((ValaCodeNode*) _tmp31_);
			_tmp33_ = _tmp32_;
			_tmp34_ = vala_ccode_cast_expression_new (_tmp30_, _tmp33_);
			_vala_ccode_node_unref0 (val);
			val = (ValaCCodeExpression*) _tmp34_;
			_g_free0 (_tmp33_);
		}
		result = val;
		_g_free0 (_tmp16_);
		_vala_code_node_unref0 (array_type);
		return result;
	} else {
		gboolean _tmp35_ = FALSE;
		gboolean _tmp36_ = FALSE;
		if (initializer_expression) {
			gboolean _tmp37_;
			gboolean _tmp38_;
			_tmp37_ = vala_data_type_get_nullable (type);
			_tmp38_ = _tmp37_;
			_tmp36_ = !_tmp38_;
		} else {
			_tmp36_ = FALSE;
		}
		if (_tmp36_) {
			gboolean _tmp39_ = FALSE;
			ValaStruct* _tmp40_;
			_tmp40_ = st;
			if (_tmp40_ != NULL) {
				_tmp39_ = TRUE;
			} else {
				gboolean _tmp41_ = FALSE;
				ValaArrayType* _tmp42_;
				_tmp42_ = array_type;
				if (_tmp42_ != NULL) {
					ValaArrayType* _tmp43_;
					gboolean _tmp44_;
					gboolean _tmp45_;
					_tmp43_ = array_type;
					_tmp44_ = vala_array_type_get_fixed_length (_tmp43_);
					_tmp45_ = _tmp44_;
					_tmp41_ = _tmp45_;
				} else {
					_tmp41_ = FALSE;
				}
				_tmp39_ = _tmp41_;
			}
			_tmp35_ = _tmp39_;
		} else {
			_tmp35_ = FALSE;
		}
		if (_tmp35_) {
			ValaCCodeInitializerList* clist = NULL;
			ValaCCodeInitializerList* _tmp46_;
			ValaCCodeInitializerList* _tmp47_;
			ValaCCodeConstant* _tmp48_;
			ValaCCodeConstant* _tmp49_;
			_tmp46_ = vala_ccode_initializer_list_new ();
			clist = _tmp46_;
			_tmp47_ = clist;
			_tmp48_ = vala_ccode_constant_new ("0");
			_tmp49_ = _tmp48_;
			vala_ccode_initializer_list_append (_tmp47_, (ValaCCodeExpression*) _tmp49_);
			_vala_ccode_node_unref0 (_tmp49_);
			result = (ValaCCodeExpression*) clist;
			_vala_code_node_unref0 (array_type);
			return result;
		} else {
			gboolean _tmp50_ = FALSE;
			gboolean _tmp51_ = FALSE;
			gboolean _tmp52_ = FALSE;
			gboolean _tmp53_ = FALSE;
			gboolean _tmp54_ = FALSE;
			ValaTypeSymbol* _tmp55_;
			ValaTypeSymbol* _tmp56_;
			_tmp55_ = vala_data_type_get_type_symbol (type);
			_tmp56_ = _tmp55_;
			if (_tmp56_ != NULL) {
				ValaTypeSymbol* _tmp57_;
				ValaTypeSymbol* _tmp58_;
				_tmp57_ = vala_data_type_get_type_symbol (type);
				_tmp58_ = _tmp57_;
				_tmp54_ = vala_typesymbol_is_reference_type (_tmp58_);
			} else {
				_tmp54_ = FALSE;
			}
			if (_tmp54_) {
				_tmp53_ = TRUE;
			} else {
				gboolean _tmp59_;
				gboolean _tmp60_;
				_tmp59_ = vala_data_type_get_nullable (type);
				_tmp60_ = _tmp59_;
				_tmp53_ = _tmp60_;
			}
			if (_tmp53_) {
				_tmp52_ = TRUE;
			} else {
				_tmp52_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE);
			}
			if (_tmp52_) {
				_tmp51_ = TRUE;
			} else {
				_tmp51_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE);
			}
			if (_tmp51_) {
				_tmp50_ = TRUE;
			} else {
				gboolean _tmp61_ = FALSE;
				ValaArrayType* _tmp62_;
				_tmp62_ = array_type;
				if (_tmp62_ != NULL) {
					ValaArrayType* _tmp63_;
					gboolean _tmp64_;
					gboolean _tmp65_;
					_tmp63_ = array_type;
					_tmp64_ = vala_array_type_get_fixed_length (_tmp63_);
					_tmp65_ = _tmp64_;
					_tmp61_ = !_tmp65_;
				} else {
					_tmp61_ = FALSE;
				}
				_tmp50_ = _tmp61_;
			}
			if (_tmp50_) {
				ValaCCodeConstant* _tmp66_;
				_tmp66_ = vala_ccode_constant_new ("NULL");
				result = (ValaCCodeExpression*) _tmp66_;
				_vala_code_node_unref0 (array_type);
				return result;
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
					ValaCCodeConstant* _tmp67_;
					_tmp67_ = vala_ccode_constant_new ("NULL");
					result = (ValaCCodeExpression*) _tmp67_;
					_vala_code_node_unref0 (array_type);
					return result;
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
						ValaCCodeConstant* _tmp68_;
						_tmp68_ = vala_ccode_constant_new ("NULL");
						result = (ValaCCodeExpression*) _tmp68_;
						_vala_code_node_unref0 (array_type);
						return result;
					} else {
						if (VALA_IS_CTYPE (type)) {
							const gchar* _tmp69_;
							const gchar* _tmp70_;
							ValaCCodeConstant* _tmp71_;
							_tmp69_ = vala_ctype_get_cdefault_value (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_CTYPE, ValaCType));
							_tmp70_ = _tmp69_;
							_tmp71_ = vala_ccode_constant_new (_tmp70_);
							result = (ValaCCodeExpression*) _tmp71_;
							_vala_code_node_unref0 (array_type);
							return result;
						}
					}
				}
			}
		}
	}
	result = NULL;
	_vala_code_node_unref0 (array_type);
	return result;
}

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)
{
	g_return_if_fail (self != NULL);
	g_return_if_fail (prop != NULL);
	g_return_if_fail (t != NULL);
	g_return_if_fail (var_name != NULL);
	if (check_return_type) {
		ValaDataType* _tmp0_;
		ValaDataType* _tmp1_;
		_tmp0_ = vala_property_get_property_type (prop);
		_tmp1_ = _tmp0_;
		vala_ccode_base_module_create_type_check_statement (self, (ValaCodeNode*) prop, _tmp1_, t, non_null, var_name);
	} else {
		ValaVoidType* _tmp2_;
		ValaVoidType* _tmp3_;
		_tmp2_ = vala_void_type_new (NULL);
		_tmp3_ = _tmp2_;
		vala_ccode_base_module_create_type_check_statement (self, (ValaCodeNode*) prop, (ValaDataType*) _tmp3_, t, non_null, var_name);
		_vala_code_node_unref0 (_tmp3_);
	}
}

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)
{
	g_return_if_fail (method_node != NULL);
	g_return_if_fail (ret_type != NULL);
	g_return_if_fail (t != NULL);
	g_return_if_fail (var_name != NULL);
}

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)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->create_type_check_statement) {
		_klass_->create_type_check_statement (self, method_node, ret_type, t, non_null, var_name);
	}
}

gint
vala_ccode_base_module_get_param_pos (ValaCCodeBaseModule* self,
                                      gdouble param_pos,
                                      gboolean ellipsis)
{
	gint result;
	g_return_val_if_fail (self != NULL, 0);
	if (!ellipsis) {
		if (param_pos >= ((gdouble) 0)) {
			result = (gint) (param_pos * 1000);
			return result;
		} else {
			result = (gint) ((100 + param_pos) * 1000);
			return result;
		}
	} else {
		if (param_pos >= ((gdouble) 0)) {
			result = (gint) ((100 + param_pos) * 1000);
			return result;
		} else {
			result = (gint) ((200 + param_pos) * 1000);
			return result;
		}
	}
}

ValaCCodeExpression*
vala_ccode_base_module_get_ccodenode (ValaCCodeBaseModule* self,
                                      ValaExpression* node)
{
	ValaCCodeExpression* _tmp0_;
	ValaCCodeExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = vala_get_cvalue (node);
	if (_tmp0_ == NULL) {
		vala_code_node_emit ((ValaCodeNode*) node, (ValaCodeGenerator*) self);
	}
	_tmp1_ = vala_get_cvalue (node);
	_tmp2_ = _vala_ccode_node_ref0 (_tmp1_);
	result = _tmp2_;
	return result;
}

gboolean
vala_ccode_base_module_is_lvalue_access_allowed (ValaCCodeBaseModule* self,
                                                 ValaDataType* type)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaArrayType* _tmp2_;
	ValaTypeSymbol* _tmp6_;
	ValaTypeSymbol* _tmp7_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (type != NULL, FALSE);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
	array_type = _tmp0_;
	_tmp2_ = array_type;
	if (_tmp2_ != NULL) {
		ValaArrayType* _tmp3_;
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp3_ = array_type;
		_tmp4_ = vala_array_type_get_inline_allocated (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp1_ = _tmp5_;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		result = FALSE;
		_vala_code_node_unref0 (array_type);
		return result;
	}
	_tmp6_ = vala_data_type_get_type_symbol (type);
	_tmp7_ = _tmp6_;
	if (_tmp7_ != NULL) {
		ValaTypeSymbol* _tmp8_;
		ValaTypeSymbol* _tmp9_;
		_tmp8_ = vala_data_type_get_type_symbol (type);
		_tmp9_ = _tmp8_;
		result = vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp9_, "CCode", "lvalue_access", TRUE);
		_vala_code_node_unref0 (array_type);
		return result;
	}
	result = TRUE;
	_vala_code_node_unref0 (array_type);
	return result;
}

gboolean
vala_ccode_base_module_requires_memset_init (ValaCCodeBaseModule* self,
                                             ValaVariable* variable,
                                             ValaCCodeExpression** size)
{
	ValaCCodeExpression* _vala_size = NULL;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	gboolean _tmp2_ = FALSE;
	ValaArrayType* _tmp3_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (variable != NULL, FALSE);
	_tmp0_ = vala_variable_get_variable_type (variable);
	_tmp1_ = _tmp0_;
	array_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp1_) : NULL;
	_tmp3_ = array_type;
	if (_tmp3_ != NULL) {
		ValaArrayType* _tmp4_;
		gboolean _tmp5_;
		gboolean _tmp6_;
		_tmp4_ = array_type;
		_tmp5_ = vala_array_type_get_fixed_length (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp2_ = _tmp6_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		ValaCCodeFunctionCall* sizeof_call = NULL;
		ValaCCodeIdentifier* _tmp7_;
		ValaCCodeIdentifier* _tmp8_;
		ValaCCodeFunctionCall* _tmp9_;
		ValaCCodeFunctionCall* _tmp10_;
		ValaCCodeFunctionCall* _tmp11_;
		ValaArrayType* _tmp12_;
		ValaDataType* _tmp13_;
		ValaDataType* _tmp14_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		ValaCCodeIdentifier* _tmp17_;
		ValaCCodeIdentifier* _tmp18_;
		ValaArrayType* _tmp19_;
		ValaExpression* _tmp20_;
		ValaExpression* _tmp21_;
		ValaCCodeExpression* _tmp22_;
		ValaCCodeExpression* _tmp23_;
		ValaCCodeFunctionCall* _tmp24_;
		ValaCCodeBinaryExpression* _tmp25_;
		ValaArrayType* _tmp26_;
		ValaExpression* _tmp27_;
		ValaExpression* _tmp28_;
		_tmp7_ = vala_ccode_identifier_new ("sizeof");
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
		_tmp10_ = _tmp9_;
		_vala_ccode_node_unref0 (_tmp8_);
		sizeof_call = _tmp10_;
		_tmp11_ = sizeof_call;
		_tmp12_ = array_type;
		_tmp13_ = vala_array_type_get_element_type (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
		_tmp16_ = _tmp15_;
		_tmp17_ = vala_ccode_identifier_new (_tmp16_);
		_tmp18_ = _tmp17_;
		vala_ccode_function_call_add_argument (_tmp11_, (ValaCCodeExpression*) _tmp18_);
		_vala_ccode_node_unref0 (_tmp18_);
		_g_free0 (_tmp16_);
		_tmp19_ = array_type;
		_tmp20_ = vala_array_type_get_length (_tmp19_);
		_tmp21_ = _tmp20_;
		_tmp22_ = vala_ccode_base_module_get_ccodenode (self, _tmp21_);
		_tmp23_ = _tmp22_;
		_tmp24_ = sizeof_call;
		_tmp25_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, _tmp23_, (ValaCCodeExpression*) _tmp24_);
		_vala_ccode_node_unref0 (_vala_size);
		_vala_size = (ValaCCodeExpression*) _tmp25_;
		_vala_ccode_node_unref0 (_tmp23_);
		_tmp26_ = array_type;
		_tmp27_ = vala_array_type_get_length (_tmp26_);
		_tmp28_ = _tmp27_;
		result = !vala_ccode_base_module_is_constant_ccode ((ValaCodeNode*) _tmp28_);
		_vala_ccode_node_unref0 (sizeof_call);
		if (size) {
			*size = _vala_size;
		} else {
			_vala_ccode_node_unref0 (_vala_size);
		}
		return result;
	}
	_vala_ccode_node_unref0 (_vala_size);
	_vala_size = NULL;
	result = FALSE;
	if (size) {
		*size = _vala_size;
	} else {
		_vala_ccode_node_unref0 (_vala_size);
	}
	return result;
}

ValaCCodeDeclaratorSuffix*
vala_ccode_base_module_get_ccode_declarator_suffix (ValaCCodeBaseModule* self,
                                                    ValaDataType* type)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	ValaArrayType* _tmp1_;
	ValaCCodeDeclaratorSuffix* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
	array_type = _tmp0_;
	_tmp1_ = array_type;
	if (_tmp1_ != NULL) {
		ValaArrayType* _tmp2_;
		gboolean _tmp3_;
		gboolean _tmp4_;
		_tmp2_ = array_type;
		_tmp3_ = vala_array_type_get_fixed_length (_tmp2_);
		_tmp4_ = _tmp3_;
		if (_tmp4_) {
			ValaArrayType* _tmp5_;
			ValaExpression* _tmp6_;
			ValaExpression* _tmp7_;
			ValaCCodeExpression* _tmp8_;
			ValaCCodeExpression* _tmp9_;
			ValaCCodeDeclaratorSuffix* _tmp10_;
			ValaCCodeDeclaratorSuffix* _tmp11_;
			_tmp5_ = array_type;
			_tmp6_ = vala_array_type_get_length (_tmp5_);
			_tmp7_ = _tmp6_;
			_tmp8_ = vala_ccode_base_module_get_ccodenode (self, _tmp7_);
			_tmp9_ = _tmp8_;
			_tmp10_ = vala_ccode_declarator_suffix_new_with_array (_tmp9_);
			_tmp11_ = _tmp10_;
			_vala_ccode_node_unref0 (_tmp9_);
			result = _tmp11_;
			_vala_code_node_unref0 (array_type);
			return result;
		} else {
			ValaArrayType* _tmp12_;
			gboolean _tmp13_;
			gboolean _tmp14_;
			_tmp12_ = array_type;
			_tmp13_ = vala_array_type_get_inline_allocated (_tmp12_);
			_tmp14_ = _tmp13_;
			if (_tmp14_) {
				ValaCCodeDeclaratorSuffix* _tmp15_;
				_tmp15_ = vala_ccode_declarator_suffix_new_with_array (NULL);
				result = _tmp15_;
				_vala_code_node_unref0 (array_type);
				return result;
			}
		}
	}
	result = NULL;
	_vala_code_node_unref0 (array_type);
	return result;
}

ValaCCodeConstant*
vala_ccode_base_module_get_signal_canonical_constant (ValaCCodeBaseModule* self,
                                                      ValaSignal* sig,
                                                      const gchar* detail)
{
	gchar* _tmp0_ = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeConstant* _tmp7_;
	ValaCCodeConstant* _tmp8_;
	ValaCCodeConstant* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sig != NULL, NULL);
	if (detail != NULL) {
		gchar* _tmp1_;
		_tmp1_ = g_strdup_printf ("::%s", detail);
		_g_free0 (_tmp0_);
		_tmp0_ = _tmp1_;
	} else {
		gchar* _tmp2_;
		_tmp2_ = g_strdup ("");
		_g_free0 (_tmp0_);
		_tmp0_ = _tmp2_;
	}
	_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) sig);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strdup_printf ("\"%s%s\"", _tmp4_, _tmp0_);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_ccode_constant_new (_tmp6_);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	_g_free0 (_tmp4_);
	result = _tmp8_;
	_g_free0 (_tmp0_);
	return result;
}

ValaCCodeConstant*
vala_ccode_base_module_get_property_canonical_cconstant (ValaCCodeBaseModule* self,
                                                         ValaProperty* prop)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeConstant* _tmp4_;
	ValaCCodeConstant* _tmp5_;
	ValaCCodeConstant* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) prop);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("\"%s\"", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_constant_new (_tmp3_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	result = _tmp5_;
	return result;
}

static void
vala_ccode_base_module_real_visit_class (ValaCodeVisitor* base,
                                         ValaClass* cl)
{
	ValaCCodeBaseModule * self;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (cl != NULL);
}

void
vala_ccode_base_module_create_postcondition_statement (ValaCCodeBaseModule* self,
                                                       ValaExpression* postcondition)
{
	ValaCCodeFunctionCall* cassert = NULL;
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeFunctionCall* _tmp3_;
	gchar* message = NULL;
	ValaSourceReference* _tmp4_;
	ValaSourceReference* _tmp5_;
	ValaSourceLocation _tmp6_ = {0};
	ValaSourceLocation _tmp7_;
	gchar* _tmp8_;
	ValaSourceReference* _tmp9_;
	ValaSourceReference* _tmp10_;
	ValaSourceLocation _tmp11_ = {0};
	ValaSourceLocation _tmp12_;
	gchar* _tmp13_;
	ValaSourceReference* _tmp14_;
	ValaSourceReference* _tmp15_;
	ValaSourceLocation _tmp16_ = {0};
	ValaSourceLocation _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaCCodeExpression* _tmp21_;
	ValaCCodeFunctionCall* _tmp22_;
	const gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	ValaCCodeConstant* _tmp30_;
	ValaCCodeConstant* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeFunctionCall* _tmp34_;
	ValaArrayList* _tmp49_;
	ValaArrayList* _tmp50_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (postcondition != NULL);
	_tmp0_ = vala_ccode_identifier_new ("_vala_warn_if_fail");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
	_tmp3_ = _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	cassert = _tmp3_;
	vala_code_node_emit ((ValaCodeNode*) postcondition, (ValaCodeGenerator*) self);
	_tmp4_ = vala_code_node_get_source_reference ((ValaCodeNode*) postcondition);
	_tmp5_ = _tmp4_;
	vala_source_reference_get_begin (_tmp5_, &_tmp6_);
	_tmp7_ = _tmp6_;
	_tmp8_ = _tmp7_.pos;
	_tmp9_ = vala_code_node_get_source_reference ((ValaCodeNode*) postcondition);
	_tmp10_ = _tmp9_;
	vala_source_reference_get_end (_tmp10_, &_tmp11_);
	_tmp12_ = _tmp11_;
	_tmp13_ = _tmp12_.pos;
	_tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) postcondition);
	_tmp15_ = _tmp14_;
	vala_source_reference_get_begin (_tmp15_, &_tmp16_);
	_tmp17_ = _tmp16_;
	_tmp18_ = _tmp17_.pos;
	_tmp19_ = string_substring ((const gchar*) _tmp8_, (glong) 0, (glong) ((gint) (_tmp13_ - _tmp18_)));
	message = _tmp19_;
	_tmp20_ = cassert;
	_tmp21_ = vala_get_cvalue (postcondition);
	vala_ccode_function_call_add_argument (_tmp20_, _tmp21_);
	_tmp22_ = cassert;
	_tmp23_ = message;
	_tmp24_ = string_replace (_tmp23_, "\n", " ");
	_tmp25_ = _tmp24_;
	_tmp26_ = g_strescape (_tmp25_, "");
	_tmp27_ = _tmp26_;
	_tmp28_ = g_strdup_printf ("\"%s\"", _tmp27_);
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_ccode_constant_new (_tmp29_);
	_tmp31_ = _tmp30_;
	vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp31_);
	_vala_ccode_node_unref0 (_tmp31_);
	_g_free0 (_tmp29_);
	_g_free0 (_tmp27_);
	_g_free0 (_tmp25_);
	self->requires_assert = TRUE;
	_tmp32_ = vala_ccode_base_module_get_ccode (self);
	_tmp33_ = _tmp32_;
	_tmp34_ = cassert;
	vala_ccode_function_add_expression (_tmp33_, (ValaCCodeExpression*) _tmp34_);
	{
		ValaArrayList* _value_list = NULL;
		ValaArrayList* _tmp35_;
		ValaArrayList* _tmp36_;
		gint _value_size = 0;
		ValaArrayList* _tmp37_;
		gint _tmp38_;
		gint _tmp39_;
		gint _value_index = 0;
		_tmp35_ = vala_ccode_base_module_get_temp_ref_values (self);
		_tmp36_ = _tmp35_;
		_value_list = _tmp36_;
		_tmp37_ = _value_list;
		_tmp38_ = vala_collection_get_size ((ValaCollection*) _tmp37_);
		_tmp39_ = _tmp38_;
		_value_size = _tmp39_;
		_value_index = -1;
		while (TRUE) {
			gint _tmp40_;
			gint _tmp41_;
			ValaTargetValue* value = NULL;
			ValaArrayList* _tmp42_;
			gpointer _tmp43_;
			ValaCCodeFunction* _tmp44_;
			ValaCCodeFunction* _tmp45_;
			ValaTargetValue* _tmp46_;
			ValaCCodeExpression* _tmp47_;
			ValaCCodeExpression* _tmp48_;
			_value_index = _value_index + 1;
			_tmp40_ = _value_index;
			_tmp41_ = _value_size;
			if (!(_tmp40_ < _tmp41_)) {
				break;
			}
			_tmp42_ = _value_list;
			_tmp43_ = vala_list_get ((ValaList*) _tmp42_, _value_index);
			value = (ValaTargetValue*) _tmp43_;
			_tmp44_ = vala_ccode_base_module_get_ccode (self);
			_tmp45_ = _tmp44_;
			_tmp46_ = value;
			_tmp47_ = vala_ccode_base_module_destroy_value (self, _tmp46_, FALSE);
			_tmp48_ = _tmp47_;
			vala_ccode_function_add_expression (_tmp45_, _tmp48_);
			_vala_ccode_node_unref0 (_tmp48_);
			_vala_target_value_unref0 (value);
		}
	}
	_tmp49_ = vala_ccode_base_module_get_temp_ref_values (self);
	_tmp50_ = _tmp49_;
	vala_collection_clear ((ValaCollection*) _tmp50_);
	_g_free0 (message);
	_vala_ccode_node_unref0 (cassert);
}

ValaDataType*
vala_ccode_base_module_get_this_type (ValaCCodeBaseModule* self)
{
	gboolean _tmp0_ = FALSE;
	ValaMethod* _tmp1_;
	ValaMethod* _tmp2_;
	ValaDataType* result;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp1_ = vala_ccode_base_module_get_current_method (self);
	_tmp2_ = _tmp1_;
	if (_tmp2_ != NULL) {
		ValaMethod* _tmp3_;
		ValaMethod* _tmp4_;
		ValaMemberBinding _tmp5_;
		ValaMemberBinding _tmp6_;
		_tmp3_ = vala_ccode_base_module_get_current_method (self);
		_tmp4_ = _tmp3_;
		_tmp5_ = vala_method_get_binding (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp0_ = _tmp6_ == VALA_MEMBER_BINDING_INSTANCE;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaMethod* _tmp7_;
		ValaMethod* _tmp8_;
		ValaParameter* _tmp9_;
		ValaParameter* _tmp10_;
		ValaDataType* _tmp11_;
		ValaDataType* _tmp12_;
		_tmp7_ = vala_ccode_base_module_get_current_method (self);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_method_get_this_parameter (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_variable_get_variable_type ((ValaVariable*) _tmp10_);
		_tmp12_ = _tmp11_;
		result = _tmp12_;
		return result;
	} else {
		gboolean _tmp13_ = FALSE;
		ValaPropertyAccessor* _tmp14_;
		ValaPropertyAccessor* _tmp15_;
		_tmp14_ = vala_ccode_base_module_get_current_property_accessor (self);
		_tmp15_ = _tmp14_;
		if (_tmp15_ != NULL) {
			ValaPropertyAccessor* _tmp16_;
			ValaPropertyAccessor* _tmp17_;
			ValaProperty* _tmp18_;
			ValaProperty* _tmp19_;
			ValaMemberBinding _tmp20_;
			ValaMemberBinding _tmp21_;
			_tmp16_ = vala_ccode_base_module_get_current_property_accessor (self);
			_tmp17_ = _tmp16_;
			_tmp18_ = vala_property_accessor_get_prop (_tmp17_);
			_tmp19_ = _tmp18_;
			_tmp20_ = vala_property_get_binding (_tmp19_);
			_tmp21_ = _tmp20_;
			_tmp13_ = _tmp21_ == VALA_MEMBER_BINDING_INSTANCE;
		} else {
			_tmp13_ = FALSE;
		}
		if (_tmp13_) {
			ValaPropertyAccessor* _tmp22_;
			ValaPropertyAccessor* _tmp23_;
			ValaProperty* _tmp24_;
			ValaProperty* _tmp25_;
			ValaParameter* _tmp26_;
			ValaParameter* _tmp27_;
			ValaDataType* _tmp28_;
			ValaDataType* _tmp29_;
			_tmp22_ = vala_ccode_base_module_get_current_property_accessor (self);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_property_accessor_get_prop (_tmp23_);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_property_get_this_parameter (_tmp25_);
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_variable_get_variable_type ((ValaVariable*) _tmp27_);
			_tmp29_ = _tmp28_;
			result = _tmp29_;
			return result;
		} else {
			gboolean _tmp30_ = FALSE;
			ValaConstructor* _tmp31_;
			ValaConstructor* _tmp32_;
			_tmp31_ = vala_ccode_base_module_get_current_constructor (self);
			_tmp32_ = _tmp31_;
			if (_tmp32_ != NULL) {
				ValaConstructor* _tmp33_;
				ValaConstructor* _tmp34_;
				ValaMemberBinding _tmp35_;
				ValaMemberBinding _tmp36_;
				_tmp33_ = vala_ccode_base_module_get_current_constructor (self);
				_tmp34_ = _tmp33_;
				_tmp35_ = vala_constructor_get_binding (_tmp34_);
				_tmp36_ = _tmp35_;
				_tmp30_ = _tmp36_ == VALA_MEMBER_BINDING_INSTANCE;
			} else {
				_tmp30_ = FALSE;
			}
			if (_tmp30_) {
				ValaConstructor* _tmp37_;
				ValaConstructor* _tmp38_;
				ValaParameter* _tmp39_;
				ValaParameter* _tmp40_;
				ValaDataType* _tmp41_;
				ValaDataType* _tmp42_;
				_tmp37_ = vala_ccode_base_module_get_current_constructor (self);
				_tmp38_ = _tmp37_;
				_tmp39_ = vala_constructor_get_this_parameter (_tmp38_);
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_variable_get_variable_type ((ValaVariable*) _tmp40_);
				_tmp42_ = _tmp41_;
				result = _tmp42_;
				return result;
			} else {
				gboolean _tmp43_ = FALSE;
				ValaDestructor* _tmp44_;
				ValaDestructor* _tmp45_;
				_tmp44_ = vala_ccode_base_module_get_current_destructor (self);
				_tmp45_ = _tmp44_;
				if (_tmp45_ != NULL) {
					ValaDestructor* _tmp46_;
					ValaDestructor* _tmp47_;
					ValaMemberBinding _tmp48_;
					ValaMemberBinding _tmp49_;
					_tmp46_ = vala_ccode_base_module_get_current_destructor (self);
					_tmp47_ = _tmp46_;
					_tmp48_ = vala_destructor_get_binding (_tmp47_);
					_tmp49_ = _tmp48_;
					_tmp43_ = _tmp49_ == VALA_MEMBER_BINDING_INSTANCE;
				} else {
					_tmp43_ = FALSE;
				}
				if (_tmp43_) {
					ValaDestructor* _tmp50_;
					ValaDestructor* _tmp51_;
					ValaParameter* _tmp52_;
					ValaParameter* _tmp53_;
					ValaDataType* _tmp54_;
					ValaDataType* _tmp55_;
					_tmp50_ = vala_ccode_base_module_get_current_destructor (self);
					_tmp51_ = _tmp50_;
					_tmp52_ = vala_destructor_get_this_parameter (_tmp51_);
					_tmp53_ = _tmp52_;
					_tmp54_ = vala_variable_get_variable_type ((ValaVariable*) _tmp53_);
					_tmp55_ = _tmp54_;
					result = _tmp55_;
					return result;
				}
			}
		}
	}
	result = NULL;
	return result;
}

ValaCCodeFunctionCall*
vala_ccode_base_module_generate_instance_cast (ValaCCodeBaseModule* self,
                                               ValaCCodeExpression* expr,
                                               ValaTypeSymbol* type)
{
	ValaCCodeFunctionCall* _result_ = NULL;
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeFunctionCall* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeIdentifier* _tmp6_;
	ValaCCodeIdentifier* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeFunctionCall* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_CAST");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
	_tmp3_ = _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	_result_ = _tmp3_;
	vala_ccode_function_call_add_argument (_result_, expr);
	_tmp4_ = vala_get_ccode_type_id ((ValaCodeNode*) type);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_identifier_new (_tmp5_);
	_tmp7_ = _tmp6_;
	vala_ccode_function_call_add_argument (_result_, (ValaCCodeExpression*) _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	_g_free0 (_tmp5_);
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_identifier_new (_tmp9_);
	_tmp11_ = _tmp10_;
	vala_ccode_function_call_add_argument (_result_, (ValaCCodeExpression*) _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_g_free0 (_tmp9_);
	result = _result_;
	return result;
}

static void
vala_ccode_base_module_generate_struct_destroy_function (ValaCCodeBaseModule* self,
                                                         ValaStruct* st)
{
	ValaCCodeFile* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gboolean _tmp3_;
	ValaCCodeFunction* function = NULL;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeParameter* _tmp15_;
	ValaCCodeBaseModuleEmitContext* _tmp16_;
	ValaCCodeBaseModuleEmitContext* _tmp17_;
	ValaCCodeFunction* _tmp18_;
	ValaTargetValue* this_value = NULL;
	ValaTargetValue* _tmp19_;
	ValaCCodeFile* _tmp46_;
	ValaCCodeFunction* _tmp47_;
	ValaCCodeFile* _tmp48_;
	ValaCCodeFunction* _tmp49_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (st != NULL);
	_tmp0_ = self->cfile;
	_tmp1_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) st);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_ccode_file_add_declaration (_tmp0_, _tmp2_);
	_g_free0 (_tmp2_);
	if (_tmp3_) {
		return;
	}
	_tmp4_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) st);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_function_new (_tmp5_, "void");
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	function = _tmp7_;
	_tmp8_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp8_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp9_ = function;
	_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp11_ = _tmp10_;
	_tmp12_ = g_strdup_printf ("%s *", _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_parameter_new ("self", _tmp13_);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_parameter (_tmp9_, _tmp15_);
	_vala_ccode_node_unref0 (_tmp15_);
	_g_free0 (_tmp13_);
	_g_free0 (_tmp11_);
	_tmp16_ = vala_ccode_base_module_emit_context_new (NULL);
	_tmp17_ = _tmp16_;
	vala_ccode_base_module_push_context (self, _tmp17_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp17_);
	_tmp18_ = function;
	vala_ccode_base_module_push_function (self, _tmp18_);
	_tmp19_ = vala_ccode_base_module_load_this_parameter (self, (ValaTypeSymbol*) st);
	this_value = _tmp19_;
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp20_;
		gint _f_size = 0;
		ValaList* _tmp21_;
		gint _tmp22_;
		gint _tmp23_;
		gint _f_index = 0;
		_tmp20_ = vala_struct_get_fields (st);
		_f_list = _tmp20_;
		_tmp21_ = _f_list;
		_tmp22_ = vala_collection_get_size ((ValaCollection*) _tmp21_);
		_tmp23_ = _tmp22_;
		_f_size = _tmp23_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp24_;
			gint _tmp25_;
			ValaField* f = NULL;
			ValaList* _tmp26_;
			gpointer _tmp27_;
			ValaField* _tmp28_;
			ValaMemberBinding _tmp29_;
			ValaMemberBinding _tmp30_;
			_f_index = _f_index + 1;
			_tmp24_ = _f_index;
			_tmp25_ = _f_size;
			if (!(_tmp24_ < _tmp25_)) {
				break;
			}
			_tmp26_ = _f_list;
			_tmp27_ = vala_list_get (_tmp26_, _f_index);
			f = (ValaField*) _tmp27_;
			_tmp28_ = f;
			_tmp29_ = vala_field_get_binding (_tmp28_);
			_tmp30_ = _tmp29_;
			if (_tmp30_ == VALA_MEMBER_BINDING_INSTANCE) {
				gboolean _tmp31_ = FALSE;
				gboolean _tmp32_ = FALSE;
				ValaField* _tmp33_;
				ValaDataType* _tmp34_;
				ValaDataType* _tmp35_;
				_tmp33_ = f;
				_tmp34_ = vala_variable_get_variable_type ((ValaVariable*) _tmp33_);
				_tmp35_ = _tmp34_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp35_, VALA_TYPE_DELEGATE_TYPE)) {
					_tmp32_ = TRUE;
				} else {
					ValaField* _tmp36_;
					_tmp36_ = f;
					_tmp32_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp36_);
				}
				if (_tmp32_) {
					ValaField* _tmp37_;
					ValaDataType* _tmp38_;
					ValaDataType* _tmp39_;
					_tmp37_ = f;
					_tmp38_ = vala_variable_get_variable_type ((ValaVariable*) _tmp37_);
					_tmp39_ = _tmp38_;
					_tmp31_ = vala_ccode_base_module_requires_destroy (_tmp39_);
				} else {
					_tmp31_ = FALSE;
				}
				if (_tmp31_) {
					ValaCCodeFunction* _tmp40_;
					ValaCCodeFunction* _tmp41_;
					ValaField* _tmp42_;
					ValaTargetValue* _tmp43_;
					ValaCCodeExpression* _tmp44_;
					ValaCCodeExpression* _tmp45_;
					_tmp40_ = vala_ccode_base_module_get_ccode (self);
					_tmp41_ = _tmp40_;
					_tmp42_ = f;
					_tmp43_ = this_value;
					_tmp44_ = vala_ccode_base_module_destroy_field (self, _tmp42_, _tmp43_);
					_tmp45_ = _tmp44_;
					vala_ccode_function_add_expression (_tmp41_, _tmp45_);
					_vala_ccode_node_unref0 (_tmp45_);
				}
			}
			_vala_code_node_unref0 (f);
		}
	}
	vala_ccode_base_module_pop_function (self);
	vala_ccode_base_module_pop_context (self);
	_tmp46_ = self->cfile;
	_tmp47_ = function;
	vala_ccode_file_add_function_declaration (_tmp46_, _tmp47_);
	_tmp48_ = self->cfile;
	_tmp49_ = function;
	vala_ccode_file_add_function (_tmp48_, _tmp49_);
	_vala_target_value_unref0 (this_value);
	_vala_ccode_node_unref0 (function);
}

static void
vala_ccode_base_module_generate_struct_copy_function (ValaCCodeBaseModule* self,
                                                      ValaStruct* st)
{
	ValaCCodeFile* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gboolean _tmp3_;
	ValaCCodeFunction* function = NULL;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeParameter* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	ValaCCodeParameter* _tmp21_;
	ValaCCodeParameter* _tmp22_;
	ValaCCodeBaseModuleEmitContext* _tmp23_;
	ValaCCodeBaseModuleEmitContext* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	ValaGLibValue* dest_struct = NULL;
	ValaDataType* _tmp26_;
	ValaDataType* _tmp27_;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaGLibValue* _tmp30_;
	ValaGLibValue* _tmp31_;
	ValaCCodeFile* _tmp64_;
	ValaCCodeFunction* _tmp65_;
	ValaCCodeFile* _tmp66_;
	ValaCCodeFunction* _tmp67_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (st != NULL);
	_tmp0_ = self->cfile;
	_tmp1_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) st);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_ccode_file_add_declaration (_tmp0_, _tmp2_);
	_g_free0 (_tmp2_);
	if (_tmp3_) {
		return;
	}
	_tmp4_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) st);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_function_new (_tmp5_, "void");
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	function = _tmp7_;
	_tmp8_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp8_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp9_ = function;
	_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp11_ = _tmp10_;
	_tmp12_ = g_strdup_printf ("const %s *", _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_parameter_new ("self", _tmp13_);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_parameter (_tmp9_, _tmp15_);
	_vala_ccode_node_unref0 (_tmp15_);
	_g_free0 (_tmp13_);
	_g_free0 (_tmp11_);
	_tmp16_ = function;
	_tmp17_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp18_ = _tmp17_;
	_tmp19_ = g_strdup_printf ("%s *", _tmp18_);
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_ccode_parameter_new ("dest", _tmp20_);
	_tmp22_ = _tmp21_;
	vala_ccode_function_add_parameter (_tmp16_, _tmp22_);
	_vala_ccode_node_unref0 (_tmp22_);
	_g_free0 (_tmp20_);
	_g_free0 (_tmp18_);
	_tmp23_ = vala_ccode_base_module_emit_context_new (NULL);
	_tmp24_ = _tmp23_;
	vala_ccode_base_module_push_context (self, _tmp24_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp24_);
	_tmp25_ = function;
	vala_ccode_base_module_push_function (self, _tmp25_);
	_tmp26_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) st);
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_ccode_identifier_new ("(*dest)");
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_glib_value_new (_tmp27_, (ValaCCodeExpression*) _tmp29_, TRUE);
	_tmp31_ = _tmp30_;
	_vala_ccode_node_unref0 (_tmp29_);
	_vala_code_node_unref0 (_tmp27_);
	dest_struct = _tmp31_;
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp32_;
		gint _f_size = 0;
		ValaList* _tmp33_;
		gint _tmp34_;
		gint _tmp35_;
		gint _f_index = 0;
		_tmp32_ = vala_struct_get_fields (st);
		_f_list = _tmp32_;
		_tmp33_ = _f_list;
		_tmp34_ = vala_collection_get_size ((ValaCollection*) _tmp33_);
		_tmp35_ = _tmp34_;
		_f_size = _tmp35_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp36_;
			gint _tmp37_;
			ValaField* f = NULL;
			ValaList* _tmp38_;
			gpointer _tmp39_;
			ValaField* _tmp40_;
			ValaMemberBinding _tmp41_;
			ValaMemberBinding _tmp42_;
			_f_index = _f_index + 1;
			_tmp36_ = _f_index;
			_tmp37_ = _f_size;
			if (!(_tmp36_ < _tmp37_)) {
				break;
			}
			_tmp38_ = _f_list;
			_tmp39_ = vala_list_get (_tmp38_, _f_index);
			f = (ValaField*) _tmp39_;
			_tmp40_ = f;
			_tmp41_ = vala_field_get_binding (_tmp40_);
			_tmp42_ = _tmp41_;
			if (_tmp42_ == VALA_MEMBER_BINDING_INSTANCE) {
				ValaTargetValue* value = NULL;
				ValaField* _tmp43_;
				ValaTargetValue* _tmp44_;
				ValaTargetValue* _tmp45_;
				ValaTargetValue* _tmp46_;
				ValaTargetValue* _tmp47_;
				gboolean _tmp48_ = FALSE;
				gboolean _tmp49_ = FALSE;
				ValaField* _tmp50_;
				ValaDataType* _tmp51_;
				ValaDataType* _tmp52_;
				ValaField* _tmp61_;
				ValaGLibValue* _tmp62_;
				ValaTargetValue* _tmp63_;
				_tmp43_ = f;
				_tmp44_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (st, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
				_tmp45_ = _tmp44_;
				_tmp46_ = vala_code_generator_load_field ((ValaCodeGenerator*) self, _tmp43_, _tmp45_, NULL);
				_tmp47_ = _tmp46_;
				_vala_target_value_unref0 (_tmp45_);
				value = _tmp47_;
				_tmp50_ = f;
				_tmp51_ = vala_variable_get_variable_type ((ValaVariable*) _tmp50_);
				_tmp52_ = _tmp51_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp52_, VALA_TYPE_DELEGATE_TYPE)) {
					_tmp49_ = TRUE;
				} else {
					ValaField* _tmp53_;
					_tmp53_ = f;
					_tmp49_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp53_);
				}
				if (_tmp49_) {
					ValaField* _tmp54_;
					ValaDataType* _tmp55_;
					ValaDataType* _tmp56_;
					_tmp54_ = f;
					_tmp55_ = vala_variable_get_variable_type ((ValaVariable*) _tmp54_);
					_tmp56_ = _tmp55_;
					_tmp48_ = vala_ccode_base_module_requires_copy (_tmp56_);
				} else {
					_tmp48_ = FALSE;
				}
				if (_tmp48_) {
					ValaTargetValue* _tmp57_;
					ValaField* _tmp58_;
					ValaTargetValue* _tmp59_;
					ValaTargetValue* _tmp60_;
					_tmp57_ = value;
					_tmp58_ = f;
					_tmp59_ = vala_ccode_base_module_copy_value (self, _tmp57_, (ValaCodeNode*) _tmp58_);
					_vala_target_value_unref0 (value);
					value = _tmp59_;
					_tmp60_ = value;
					if (_tmp60_ == NULL) {
						_vala_target_value_unref0 (value);
						_vala_code_node_unref0 (f);
						continue;
					}
				}
				_tmp61_ = f;
				_tmp62_ = dest_struct;
				_tmp63_ = value;
				vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp61_, (ValaTargetValue*) _tmp62_, _tmp63_, NULL);
				_vala_target_value_unref0 (value);
			}
			_vala_code_node_unref0 (f);
		}
	}
	vala_ccode_base_module_pop_function (self);
	vala_ccode_base_module_pop_context (self);
	_tmp64_ = self->cfile;
	_tmp65_ = function;
	vala_ccode_file_add_function_declaration (_tmp64_, _tmp65_);
	_tmp66_ = self->cfile;
	_tmp67_ = function;
	vala_ccode_file_add_function (_tmp66_, _tmp67_);
	_vala_target_value_unref0 (dest_struct);
	_vala_ccode_node_unref0 (function);
}

void
vala_ccode_base_module_return_default_value (ValaCCodeBaseModule* self,
                                             ValaDataType* return_type,
                                             gboolean on_error)
{
	ValaStruct* st = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	ValaStruct* _tmp4_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (return_type != NULL);
	_tmp0_ = vala_data_type_get_type_symbol (return_type);
	_tmp1_ = _tmp0_;
	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL;
	_tmp4_ = st;
	if (_tmp4_ != NULL) {
		ValaStruct* _tmp5_;
		_tmp5_ = st;
		_tmp3_ = vala_struct_is_simple_type (_tmp5_);
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		gboolean _tmp6_;
		gboolean _tmp7_;
		_tmp6_ = vala_data_type_get_nullable (return_type);
		_tmp7_ = _tmp6_;
		_tmp2_ = !_tmp7_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		ValaLocalVariable* ret_temp_var = NULL;
		ValaLocalVariable* _tmp8_;
		ValaLocalVariable* _tmp9_;
		ValaCCodeFunction* _tmp10_;
		ValaCCodeFunction* _tmp11_;
		ValaLocalVariable* _tmp12_;
		const gchar* _tmp13_;
		const gchar* _tmp14_;
		ValaCCodeIdentifier* _tmp15_;
		ValaCCodeIdentifier* _tmp16_;
		_tmp8_ = vala_ccode_base_module_get_temp_variable (self, return_type, TRUE, NULL, TRUE);
		ret_temp_var = _tmp8_;
		_tmp9_ = ret_temp_var;
		vala_ccode_base_module_emit_temp_var (self, _tmp9_, on_error);
		_tmp10_ = vala_ccode_base_module_get_ccode (self);
		_tmp11_ = _tmp10_;
		_tmp12_ = ret_temp_var;
		_tmp13_ = vala_symbol_get_name ((ValaSymbol*) _tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_ccode_identifier_new (_tmp14_);
		_tmp16_ = _tmp15_;
		vala_ccode_function_add_return (_tmp11_, (ValaCCodeExpression*) _tmp16_);
		_vala_ccode_node_unref0 (_tmp16_);
		_vala_code_node_unref0 (ret_temp_var);
	} else {
		ValaCCodeFunction* _tmp17_;
		ValaCCodeFunction* _tmp18_;
		ValaCCodeExpression* _tmp19_;
		ValaCCodeExpression* _tmp20_;
		_tmp17_ = vala_ccode_base_module_get_ccode (self);
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_ccode_base_module_default_value_for_type (self, return_type, FALSE, on_error);
		_tmp20_ = _tmp19_;
		vala_ccode_function_add_return (_tmp18_, _tmp20_);
		_vala_ccode_node_unref0 (_tmp20_);
	}
}

static void
vala_ccode_base_module_real_generate_dynamic_method_wrapper (ValaCCodeBaseModule* self,
                                                             ValaDynamicMethod* method)
{
	g_return_if_fail (method != NULL);
}

void
vala_ccode_base_module_generate_dynamic_method_wrapper (ValaCCodeBaseModule* self,
                                                        ValaDynamicMethod* method)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_dynamic_method_wrapper) {
		_klass_->generate_dynamic_method_wrapper (self, method);
	}
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_param_spec_cexpression (ValaCCodeBaseModule* self,
                                                        ValaProperty* prop)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_param_spec_cexpression (ValaCCodeBaseModule* self,
                                                   ValaProperty* prop)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_param_spec_cexpression) {
		return _klass_->get_param_spec_cexpression (self, prop);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_param_spec (ValaCCodeBaseModule* self,
                                            ValaProperty* prop)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_param_spec (ValaCCodeBaseModule* self,
                                       ValaProperty* prop)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_param_spec) {
		return _klass_->get_param_spec (self, prop);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_signal_creation (ValaCCodeBaseModule* self,
                                                 ValaSignal* sig,
                                                 ValaObjectTypeSymbol* type)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (sig != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_signal_creation (ValaCCodeBaseModule* self,
                                            ValaSignal* sig,
                                            ValaObjectTypeSymbol* type)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_signal_creation) {
		return _klass_->get_signal_creation (self, sig, type);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_value_getter_function (ValaCCodeBaseModule* self,
                                                       ValaDataType* type_reference)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (type_reference != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_value_getter_function (ValaCCodeBaseModule* self,
                                                  ValaDataType* type_reference)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_value_getter_function) {
		return _klass_->get_value_getter_function (self, type_reference);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_value_setter_function (ValaCCodeBaseModule* self,
                                                       ValaDataType* type_reference)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (type_reference != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_value_setter_function (ValaCCodeBaseModule* self,
                                                  ValaDataType* type_reference)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_value_setter_function) {
		return _klass_->get_value_setter_function (self, type_reference);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_value_taker_function (ValaCCodeBaseModule* self,
                                                      ValaDataType* type_reference)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (type_reference != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_value_taker_function (ValaCCodeBaseModule* self,
                                                 ValaDataType* type_reference)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_value_taker_function) {
		return _klass_->get_value_taker_function (self, type_reference);
	}
	return NULL;
}

static void
vala_ccode_base_module_real_register_dbus_info (ValaCCodeBaseModule* self,
                                                ValaCCodeBlock* block,
                                                ValaObjectTypeSymbol* bindable)
{
	g_return_if_fail (block != NULL);
	g_return_if_fail (bindable != NULL);
}

void
vala_ccode_base_module_register_dbus_info (ValaCCodeBaseModule* self,
                                           ValaCCodeBlock* block,
                                           ValaObjectTypeSymbol* bindable)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->register_dbus_info) {
		_klass_->register_dbus_info (self, block, bindable);
	}
}

static gchar*
vala_ccode_base_module_real_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
                                                      ValaDynamicSignal* node)
{
	gchar* _tmp0_;
	gchar* result;
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = g_strdup ("");
	result = _tmp0_;
	return result;
}

gchar*
vala_ccode_base_module_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
                                                 ValaDynamicSignal* node)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_dynamic_signal_cname) {
		return _klass_->get_dynamic_signal_cname (self, node);
	}
	return NULL;
}

static gchar*
vala_ccode_base_module_real_get_array_length_cname (ValaCCodeBaseModule* self,
                                                    const gchar* array_cname,
                                                    gint dim)
{
	gchar* _tmp0_;
	gchar* result;
	g_return_val_if_fail (array_cname != NULL, NULL);
	_tmp0_ = g_strdup ("");
	result = _tmp0_;
	return result;
}

gchar*
vala_ccode_base_module_get_array_length_cname (ValaCCodeBaseModule* self,
                                               const gchar* array_cname,
                                               gint dim)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_array_length_cname) {
		return _klass_->get_array_length_cname (self, array_cname, dim);
	}
	return NULL;
}

static gchar*
vala_ccode_base_module_real_get_variable_array_length_cname (ValaCCodeBaseModule* self,
                                                             ValaVariable* variable,
                                                             gint dim)
{
	gchar* _tmp0_;
	gchar* result;
	g_return_val_if_fail (variable != NULL, NULL);
	_tmp0_ = g_strdup ("");
	result = _tmp0_;
	return result;
}

gchar*
vala_ccode_base_module_get_variable_array_length_cname (ValaCCodeBaseModule* self,
                                                        ValaVariable* variable,
                                                        gint dim)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_variable_array_length_cname) {
		return _klass_->get_variable_array_length_cname (self, variable, dim);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_array_length_cexpression (ValaCCodeBaseModule* self,
                                                          ValaExpression* array_expr,
                                                          gint dim)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (array_expr != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_array_length_cexpression (ValaCCodeBaseModule* self,
                                                     ValaExpression* array_expr,
                                                     gint dim)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_array_length_cexpression) {
		return _klass_->get_array_length_cexpression (self, array_expr, dim);
	}
	return NULL;
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_array_length_cvalue (ValaCCodeBaseModule* self,
                                                     ValaTargetValue* value,
                                                     gint dim)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = vala_ccode_invalid_expression_new ();
	result = (ValaCCodeExpression*) _tmp0_;
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_array_length_cvalue (ValaCCodeBaseModule* self,
                                                ValaTargetValue* value,
                                                gint dim)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_array_length_cvalue) {
		return _klass_->get_array_length_cvalue (self, value, dim);
	}
	return NULL;
}

static gchar*
vala_ccode_base_module_real_get_array_size_cname (ValaCCodeBaseModule* self,
                                                  const gchar* array_cname)
{
	gchar* _tmp0_;
	gchar* result;
	g_return_val_if_fail (array_cname != NULL, NULL);
	_tmp0_ = g_strdup ("");
	result = _tmp0_;
	return result;
}

gchar*
vala_ccode_base_module_get_array_size_cname (ValaCCodeBaseModule* self,
                                             const gchar* array_cname)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->get_array_size_cname) {
		return _klass_->get_array_size_cname (self, array_cname);
	}
	return NULL;
}

static void
vala_ccode_base_module_real_add_simple_check (ValaCCodeBaseModule* self,
                                              ValaCodeNode* node,
                                              gboolean always_fails)
{
	g_return_if_fail (node != NULL);
}

void
vala_ccode_base_module_add_simple_check (ValaCCodeBaseModule* self,
                                         ValaCodeNode* node,
                                         gboolean always_fails)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->add_simple_check) {
		_klass_->add_simple_check (self, node, always_fails);
	}
}

static gchar*
vala_ccode_base_module_real_generate_ready_function (ValaCCodeBaseModule* self,
                                                     ValaMethod* m)
{
	gchar* _tmp0_;
	gchar* result;
	g_return_val_if_fail (m != NULL, NULL);
	_tmp0_ = g_strdup ("");
	result = _tmp0_;
	return result;
}

gchar*
vala_ccode_base_module_generate_ready_function (ValaCCodeBaseModule* self,
                                                ValaMethod* m)
{
	ValaCCodeBaseModuleClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = VALA_CCODE_BASE_MODULE_GET_CLASS (self);
	if (_klass_->generate_ready_function) {
		return _klass_->generate_ready_function (self, m);
	}
	return NULL;
}

ValaCCodeExpression*
vala_ccode_base_module_get_boolean_cconstant (ValaCCodeBaseModule* self,
                                              gboolean b)
{
	ValaCodeContext* _tmp0_;
	ValaProfile _tmp1_;
	ValaProfile _tmp2_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_context;
	_tmp1_ = vala_code_context_get_profile (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == VALA_PROFILE_GOBJECT) {
		const gchar* _tmp3_ = NULL;
		ValaCCodeConstant* _tmp4_;
		if (b) {
			_tmp3_ = "TRUE";
		} else {
			_tmp3_ = "FALSE";
		}
		_tmp4_ = vala_ccode_constant_new (_tmp3_);
		result = (ValaCCodeExpression*) _tmp4_;
		return result;
	} else {
		ValaCCodeFile* _tmp5_;
		const gchar* _tmp6_ = NULL;
		ValaCCodeConstant* _tmp7_;
		_tmp5_ = self->cfile;
		vala_ccode_file_add_include (_tmp5_, "stdbool.h", FALSE);
		if (b) {
			_tmp6_ = "true";
		} else {
			_tmp6_ = "false";
		}
		_tmp7_ = vala_ccode_constant_new (_tmp6_);
		result = (ValaCCodeExpression*) _tmp7_;
		return result;
	}
}

ValaCCodeBaseModuleEmitContext*
vala_ccode_base_module_emit_context_construct (GType object_type,
                                               ValaSymbol* symbol)
{
	ValaCCodeBaseModuleEmitContext* self = NULL;
	ValaSymbol* _tmp0_;
	self = (ValaCCodeBaseModuleEmitContext*) g_type_create_instance (object_type);
	_tmp0_ = _vala_code_node_ref0 (symbol);
	_vala_code_node_unref0 (self->current_symbol);
	self->current_symbol = _tmp0_;
	return self;
}

ValaCCodeBaseModuleEmitContext*
vala_ccode_base_module_emit_context_new (ValaSymbol* symbol)
{
	return vala_ccode_base_module_emit_context_construct (VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, symbol);
}

void
vala_ccode_base_module_emit_context_push_symbol (ValaCCodeBaseModuleEmitContext* self,
                                                 ValaSymbol* symbol)
{
	ValaArrayList* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (symbol != NULL);
	_tmp0_ = self->symbol_stack;
	_tmp1_ = self->current_symbol;
	vala_collection_add ((ValaCollection*) _tmp0_, _tmp1_);
	_tmp2_ = _vala_code_node_ref0 (symbol);
	_vala_code_node_unref0 (self->current_symbol);
	self->current_symbol = _tmp2_;
}

void
vala_ccode_base_module_emit_context_pop_symbol (ValaCCodeBaseModuleEmitContext* self)
{
	ValaArrayList* _tmp0_;
	ValaArrayList* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	gpointer _tmp4_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->symbol_stack;
	_tmp1_ = self->symbol_stack;
	_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_list_remove_at ((ValaList*) _tmp0_, _tmp3_ - 1);
	_vala_code_node_unref0 (self->current_symbol);
	self->current_symbol = (ValaSymbol*) _tmp4_;
}

static void
vala_ccode_base_module_value_emit_context_init (GValue* value)
{
	value->data[0].v_pointer = NULL;
}

static void
vala_ccode_base_module_value_emit_context_free_value (GValue* value)
{
	if (value->data[0].v_pointer) {
		vala_ccode_base_module_emit_context_unref (value->data[0].v_pointer);
	}
}

static void
vala_ccode_base_module_value_emit_context_copy_value (const GValue* src_value,
                                                      GValue* dest_value)
{
	if (src_value->data[0].v_pointer) {
		dest_value->data[0].v_pointer = vala_ccode_base_module_emit_context_ref (src_value->data[0].v_pointer);
	} else {
		dest_value->data[0].v_pointer = NULL;
	}
}

static gpointer
vala_ccode_base_module_value_emit_context_peek_pointer (const GValue* value)
{
	return value->data[0].v_pointer;
}

static gchar*
vala_ccode_base_module_value_emit_context_collect_value (GValue* value,
                                                         guint n_collect_values,
                                                         GTypeCValue* collect_values,
                                                         guint collect_flags)
{
	if (collect_values[0].v_pointer) {
		ValaCCodeBaseModuleEmitContext * object;
		object = collect_values[0].v_pointer;
		if (object->parent_instance.g_class == NULL) {
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		}
		value->data[0].v_pointer = vala_ccode_base_module_emit_context_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}

static gchar*
vala_ccode_base_module_value_emit_context_lcopy_value (const GValue* value,
                                                       guint n_collect_values,
                                                       GTypeCValue* collect_values,
                                                       guint collect_flags)
{
	ValaCCodeBaseModuleEmitContext ** object_p;
	object_p = collect_values[0].v_pointer;
	if (!object_p) {
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
	}
	if (!value->data[0].v_pointer) {
		*object_p = NULL;
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
		*object_p = value->data[0].v_pointer;
	} else {
		*object_p = vala_ccode_base_module_emit_context_ref (value->data[0].v_pointer);
	}
	return NULL;
}

GParamSpec*
vala_ccode_base_module_param_spec_emit_context (const gchar* name,
                                                const gchar* nick,
                                                const gchar* blurb,
                                                GType object_type,
                                                GParamFlags flags)
{
	ValaCCodeBaseModuleParamSpecEmitContext* spec;
	g_return_val_if_fail (g_type_is_a (object_type, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT), NULL);
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
	G_PARAM_SPEC (spec)->value_type = object_type;
	return G_PARAM_SPEC (spec);
}

gpointer
vala_ccode_base_module_value_get_emit_context (const GValue* value)
{
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT), NULL);
	return value->data[0].v_pointer;
}

void
vala_ccode_base_module_value_set_emit_context (GValue* value,
                                               gpointer v_object)
{
	ValaCCodeBaseModuleEmitContext * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
		vala_ccode_base_module_emit_context_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		vala_ccode_base_module_emit_context_unref (old);
	}
}

void
vala_ccode_base_module_value_take_emit_context (GValue* value,
                                                gpointer v_object)
{
	ValaCCodeBaseModuleEmitContext * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		vala_ccode_base_module_emit_context_unref (old);
	}
}

static void
vala_ccode_base_module_emit_context_class_init (ValaCCodeBaseModuleEmitContextClass * klass,
                                                gpointer klass_data)
{
	vala_ccode_base_module_emit_context_parent_class = g_type_class_peek_parent (klass);
	((ValaCCodeBaseModuleEmitContextClass *) klass)->finalize = vala_ccode_base_module_emit_context_finalize;
}

static void
vala_ccode_base_module_emit_context_instance_init (ValaCCodeBaseModuleEmitContext * self,
                                                   gpointer klass)
{
	GEqualFunc _tmp0_;
	ValaArrayList* _tmp1_;
	GEqualFunc _tmp2_;
	ValaArrayList* _tmp3_;
	GEqualFunc _tmp4_;
	ValaArrayList* _tmp5_;
	GHashFunc _tmp6_;
	GEqualFunc _tmp7_;
	GEqualFunc _tmp8_;
	ValaHashMap* _tmp9_;
	GHashFunc _tmp10_;
	GEqualFunc _tmp11_;
	GEqualFunc _tmp12_;
	ValaHashMap* _tmp13_;
	GHashFunc _tmp14_;
	GEqualFunc _tmp15_;
	GEqualFunc _tmp16_;
	ValaHashMap* _tmp17_;
	_tmp0_ = g_direct_equal;
	_tmp1_ = vala_array_list_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
	self->symbol_stack = _tmp1_;
	_tmp2_ = g_direct_equal;
	_tmp3_ = vala_array_list_new (VALA_TYPE_CCODE_FUNCTION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp2_);
	self->ccode_stack = _tmp3_;
	_tmp4_ = g_direct_equal;
	_tmp5_ = vala_array_list_new (VALA_TYPE_TARGET_VALUE, (GBoxedCopyFunc) vala_target_value_ref, (GDestroyNotify) vala_target_value_unref, _tmp4_);
	self->temp_ref_values = _tmp5_;
	self->next_coroutine_state = 1;
	_tmp6_ = g_str_hash;
	_tmp7_ = g_str_equal;
	_tmp8_ = g_direct_equal;
	_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_);
	self->variable_name_map = (ValaMap*) _tmp9_;
	_tmp10_ = g_str_hash;
	_tmp11_ = g_str_equal;
	_tmp12_ = g_direct_equal;
	_tmp13_ = vala_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, G_TYPE_INT, NULL, NULL, _tmp10_, _tmp11_, _tmp12_);
	self->closure_variable_count_map = (ValaMap*) _tmp13_;
	_tmp14_ = g_direct_hash;
	_tmp15_ = g_direct_equal;
	_tmp16_ = g_direct_equal;
	_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_);
	self->closure_variable_clash_map = (ValaMap*) _tmp17_;
	self->ref_count = 1;
}

static void
vala_ccode_base_module_emit_context_finalize (ValaCCodeBaseModuleEmitContext * obj)
{
	ValaCCodeBaseModuleEmitContext * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaCCodeBaseModuleEmitContext);
	g_signal_handlers_destroy (self);
	_vala_code_node_unref0 (self->current_symbol);
	_vala_iterable_unref0 (self->symbol_stack);
	_vala_code_node_unref0 (self->current_try);
	_vala_code_node_unref0 (self->current_catch);
	_vala_ccode_node_unref0 (self->ccode);
	_vala_iterable_unref0 (self->ccode_stack);
	_vala_iterable_unref0 (self->temp_ref_values);
	_vala_map_unref0 (self->variable_name_map);
	_vala_map_unref0 (self->closure_variable_count_map);
	_vala_map_unref0 (self->closure_variable_clash_map);
}

static GType
vala_ccode_base_module_emit_context_get_type_once (void)
{
	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 };
	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 };
	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) };
	GType vala_ccode_base_module_emit_context_type_id;
	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);
	return vala_ccode_base_module_emit_context_type_id;
}

GType
vala_ccode_base_module_emit_context_get_type (void)
{
	static volatile gsize vala_ccode_base_module_emit_context_type_id__once = 0;
	if (g_once_init_enter (&vala_ccode_base_module_emit_context_type_id__once)) {
		GType vala_ccode_base_module_emit_context_type_id;
		vala_ccode_base_module_emit_context_type_id = vala_ccode_base_module_emit_context_get_type_once ();
		g_once_init_leave (&vala_ccode_base_module_emit_context_type_id__once, vala_ccode_base_module_emit_context_type_id);
	}
	return vala_ccode_base_module_emit_context_type_id__once;
}

gpointer
vala_ccode_base_module_emit_context_ref (gpointer instance)
{
	ValaCCodeBaseModuleEmitContext * self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}

void
vala_ccode_base_module_emit_context_unref (gpointer instance)
{
	ValaCCodeBaseModuleEmitContext * self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		VALA_CCODE_BASE_MODULE_EMIT_CONTEXT_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}

static void
vala_ccode_base_module_class_init (ValaCCodeBaseModuleClass * klass,
                                   gpointer klass_data)
{
	vala_ccode_base_module_parent_class = g_type_class_peek_parent (klass);
	((ValaCodeVisitorClass *) klass)->finalize = vala_ccode_base_module_finalize;
	g_type_class_adjust_private_offset (klass, &ValaCCodeBaseModule_private_offset);
	((ValaCodeGeneratorClass *) klass)->emit = (void (*) (ValaCodeGenerator*, ValaCodeContext*)) vala_ccode_base_module_real_emit;
	((ValaCCodeBaseModuleClass *) klass)->append_vala_array_free = (void (*) (ValaCCodeBaseModule*)) vala_ccode_base_module_real_append_vala_array_free;
	((ValaCCodeBaseModuleClass *) klass)->append_vala_array_move = (void (*) (ValaCCodeBaseModule*)) vala_ccode_base_module_real_append_vala_array_move;
	((ValaCCodeBaseModuleClass *) klass)->append_vala_array_length = (void (*) (ValaCCodeBaseModule*)) vala_ccode_base_module_real_append_vala_array_length;
	((ValaCCodeBaseModuleClass *) klass)->append_params_array = (void (*) (ValaCCodeBaseModule*, ValaMethod*)) vala_ccode_base_module_real_append_params_array;
	((ValaCodeVisitorClass *) klass)->visit_source_file = (void (*) (ValaCodeVisitor*, ValaSourceFile*)) vala_ccode_base_module_real_visit_source_file;
	((ValaCCodeBaseModuleClass *) klass)->generate_enum_declaration = (gboolean (*) (ValaCCodeBaseModule*, ValaEnum*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_enum_declaration;
	((ValaCodeVisitorClass *) klass)->visit_enum = (void (*) (ValaCodeVisitor*, ValaEnum*)) vala_ccode_base_module_real_visit_enum;
	((ValaCodeVisitorClass *) klass)->visit_constant = (void (*) (ValaCodeVisitor*, ValaConstant*)) vala_ccode_base_module_real_visit_constant;
	((ValaCodeVisitorClass *) klass)->visit_field = (void (*) (ValaCodeVisitor*, ValaField*)) vala_ccode_base_module_real_visit_field;
	((ValaCodeVisitorClass *) klass)->visit_property = (void (*) (ValaCodeVisitor*, ValaProperty*)) vala_ccode_base_module_real_visit_property;
	((ValaCCodeBaseModuleClass *) klass)->generate_class_struct_declaration = (void (*) (ValaCCodeBaseModule*, ValaClass*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_class_struct_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_struct_declaration = (void (*) (ValaCCodeBaseModule*, ValaStruct*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_struct_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_delegate_declaration = (void (*) (ValaCCodeBaseModule*, ValaDelegate*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_delegate_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_cparameters = (void (*) (ValaCCodeBaseModule*, ValaMethod*, ValaCCodeFile*, ValaMap*, ValaCCodeFunction*, ValaCCodeFunctionDeclarator*, ValaMap*, ValaCCodeFunctionCall*, gint)) vala_ccode_base_module_real_generate_cparameters;
	((ValaCodeVisitorClass *) klass)->visit_property_accessor = (void (*) (ValaCodeVisitor*, ValaPropertyAccessor*)) vala_ccode_base_module_real_visit_property_accessor;
	((ValaCodeVisitorClass *) klass)->visit_destructor = (void (*) (ValaCodeVisitor*, ValaDestructor*)) vala_ccode_base_module_real_visit_destructor;
	((ValaCodeVisitorClass *) klass)->visit_block = (void (*) (ValaCodeVisitor*, ValaBlock*)) vala_ccode_base_module_real_visit_block;
	((ValaCodeVisitorClass *) klass)->visit_declaration_statement = (void (*) (ValaCodeVisitor*, ValaDeclarationStatement*)) vala_ccode_base_module_real_visit_declaration_statement;
	((ValaCodeVisitorClass *) klass)->visit_local_variable = (void (*) (ValaCodeVisitor*, ValaLocalVariable*)) vala_ccode_base_module_real_visit_local_variable;
	((ValaCodeVisitorClass *) klass)->visit_initializer_list = (void (*) (ValaCodeVisitor*, ValaInitializerList*)) vala_ccode_base_module_real_visit_initializer_list;
	((ValaCCodeBaseModuleClass *) klass)->get_dup_func_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaSourceReference*, gboolean)) vala_ccode_base_module_real_get_dup_func_expression;
	((ValaCCodeBaseModuleClass *) klass)->append_struct_array_destroy = (gchar* (*) (ValaCCodeBaseModule*, ValaStruct*)) vala_ccode_base_module_real_append_struct_array_destroy;
	((ValaCCodeBaseModuleClass *) klass)->append_struct_array_free = (gchar* (*) (ValaCCodeBaseModule*, ValaStruct*)) vala_ccode_base_module_real_append_struct_array_free;
	((ValaCCodeBaseModuleClass *) klass)->destroy_value = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*, gboolean)) vala_ccode_base_module_real_destroy_value;
	((ValaCodeVisitorClass *) klass)->visit_end_full_expression = (void (*) (ValaCodeVisitor*, ValaExpression*)) vala_ccode_base_module_real_visit_end_full_expression;
	((ValaCodeVisitorClass *) klass)->visit_expression_statement = (void (*) (ValaCodeVisitor*, ValaExpressionStatement*)) vala_ccode_base_module_real_visit_expression_statement;
	((ValaCCodeBaseModuleClass *) klass)->append_scope_free = (void (*) (ValaCCodeBaseModule*, ValaSymbol*, ValaCodeNode*)) vala_ccode_base_module_real_append_scope_free;
	((ValaCodeVisitorClass *) klass)->visit_return_statement = (void (*) (ValaCodeVisitor*, ValaReturnStatement*)) vala_ccode_base_module_real_visit_return_statement;
	((ValaCodeVisitorClass *) klass)->visit_lock_statement = (void (*) (ValaCodeVisitor*, ValaLockStatement*)) vala_ccode_base_module_real_visit_lock_statement;
	((ValaCodeVisitorClass *) klass)->visit_unlock_statement = (void (*) (ValaCodeVisitor*, ValaUnlockStatement*)) vala_ccode_base_module_real_visit_unlock_statement;
	((ValaCodeVisitorClass *) klass)->visit_delete_statement = (void (*) (ValaCodeVisitor*, ValaDeleteStatement*)) vala_ccode_base_module_real_visit_delete_statement;
	((ValaCodeVisitorClass *) klass)->visit_expression = (void (*) (ValaCodeVisitor*, ValaExpression*)) vala_ccode_base_module_real_visit_expression;
	((ValaCodeVisitorClass *) klass)->visit_boolean_literal = (void (*) (ValaCodeVisitor*, ValaBooleanLiteral*)) vala_ccode_base_module_real_visit_boolean_literal;
	((ValaCodeVisitorClass *) klass)->visit_character_literal = (void (*) (ValaCodeVisitor*, ValaCharacterLiteral*)) vala_ccode_base_module_real_visit_character_literal;
	((ValaCodeVisitorClass *) klass)->visit_integer_literal = (void (*) (ValaCodeVisitor*, ValaIntegerLiteral*)) vala_ccode_base_module_real_visit_integer_literal;
	((ValaCodeVisitorClass *) klass)->visit_real_literal = (void (*) (ValaCodeVisitor*, ValaRealLiteral*)) vala_ccode_base_module_real_visit_real_literal;
	((ValaCodeVisitorClass *) klass)->visit_string_literal = (void (*) (ValaCodeVisitor*, ValaStringLiteral*)) vala_ccode_base_module_real_visit_string_literal;
	((ValaCodeVisitorClass *) klass)->visit_regex_literal = (void (*) (ValaCodeVisitor*, ValaRegexLiteral*)) vala_ccode_base_module_real_visit_regex_literal;
	((ValaCodeVisitorClass *) klass)->visit_null_literal = (void (*) (ValaCodeVisitor*, ValaNullLiteral*)) vala_ccode_base_module_real_visit_null_literal;
	((ValaCCodeBaseModuleClass *) klass)->get_local_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaLocalVariable*)) vala_ccode_base_module_real_get_local_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->get_parameter_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaParameter*)) vala_ccode_base_module_real_get_parameter_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->get_field_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaField*, ValaTargetValue*)) vala_ccode_base_module_real_get_field_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->load_variable = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaVariable*, ValaTargetValue*, ValaExpression*)) vala_ccode_base_module_real_load_variable;
	((ValaCCodeBaseModuleClass *) klass)->load_this_parameter = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaTypeSymbol*)) vala_ccode_base_module_real_load_this_parameter;
	((ValaCCodeBaseModuleClass *) klass)->store_value = (void (*) (ValaCCodeBaseModule*, ValaTargetValue*, ValaTargetValue*, ValaSourceReference*)) vala_ccode_base_module_real_store_value;
	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*)) vala_ccode_base_module_real_get_delegate_target_cname;
	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_cexpression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaExpression*, ValaCCodeExpression**)) vala_ccode_base_module_real_get_delegate_target_cexpression;
	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_cvalue = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*)) vala_ccode_base_module_real_get_delegate_target_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_destroy_notify_cvalue = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*)) vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_destroy_notify_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*)) vala_ccode_base_module_real_get_delegate_target_destroy_notify_cname;
	((ValaCodeVisitorClass *) klass)->visit_base_access = (void (*) (ValaCodeVisitor*, ValaBaseAccess*)) vala_ccode_base_module_real_visit_base_access;
	((ValaCodeVisitorClass *) klass)->visit_postfix_expression = (void (*) (ValaCodeVisitor*, ValaPostfixExpression*)) vala_ccode_base_module_real_visit_postfix_expression;
	((ValaCCodeBaseModuleClass *) klass)->copy_value = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaTargetValue*, ValaCodeNode*)) vala_ccode_base_module_real_copy_value;
	((ValaCCodeBaseModuleClass *) klass)->generate_class_declaration = (void (*) (ValaCCodeBaseModule*, ValaClass*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_class_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_interface_declaration = (void (*) (ValaCCodeBaseModule*, ValaInterface*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_interface_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_method_declaration = (gboolean (*) (ValaCCodeBaseModule*, ValaMethod*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_method_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_error_domain_declaration = (void (*) (ValaCCodeBaseModule*, ValaErrorDomain*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_error_domain_declaration;
	((ValaCodeVisitorClass *) klass)->visit_object_creation_expression = (void (*) (ValaCodeVisitor*, ValaObjectCreationExpression*)) vala_ccode_base_module_real_visit_object_creation_expression;
	((ValaCodeVisitorClass *) klass)->visit_sizeof_expression = (void (*) (ValaCodeVisitor*, ValaSizeofExpression*)) vala_ccode_base_module_real_visit_sizeof_expression;
	((ValaCodeVisitorClass *) klass)->visit_typeof_expression = (void (*) (ValaCodeVisitor*, ValaTypeofExpression*)) vala_ccode_base_module_real_visit_typeof_expression;
	((ValaCodeVisitorClass *) klass)->visit_unary_expression = (void (*) (ValaCodeVisitor*, ValaUnaryExpression*)) vala_ccode_base_module_real_visit_unary_expression;
	((ValaCCodeBaseModuleClass *) klass)->deserialize_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaCCodeExpression*, ValaCCodeExpression*, ValaCCodeExpression*, gboolean*)) vala_ccode_base_module_real_deserialize_expression;
	((ValaCCodeBaseModuleClass *) klass)->serialize_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaCCodeExpression*)) vala_ccode_base_module_real_serialize_expression;
	((ValaCodeVisitorClass *) klass)->visit_cast_expression = (void (*) (ValaCodeVisitor*, ValaCastExpression*)) vala_ccode_base_module_real_visit_cast_expression;
	((ValaCodeVisitorClass *) klass)->visit_named_argument = (void (*) (ValaCodeVisitor*, ValaNamedArgument*)) vala_ccode_base_module_real_visit_named_argument;
	((ValaCodeVisitorClass *) klass)->visit_pointer_indirection = (void (*) (ValaCodeVisitor*, ValaPointerIndirection*)) vala_ccode_base_module_real_visit_pointer_indirection;
	((ValaCodeVisitorClass *) klass)->visit_addressof_expression = (void (*) (ValaCodeVisitor*, ValaAddressofExpression*)) vala_ccode_base_module_real_visit_addressof_expression;
	((ValaCodeVisitorClass *) klass)->visit_reference_transfer_expression = (void (*) (ValaCodeVisitor*, ValaReferenceTransferExpression*)) vala_ccode_base_module_real_visit_reference_transfer_expression;
	((ValaCodeVisitorClass *) klass)->visit_binary_expression = (void (*) (ValaCodeVisitor*, ValaBinaryExpression*)) vala_ccode_base_module_real_visit_binary_expression;
	((ValaCodeVisitorClass *) klass)->visit_type_check = (void (*) (ValaCodeVisitor*, ValaTypeCheck*)) vala_ccode_base_module_real_visit_type_check;
	((ValaCodeVisitorClass *) klass)->visit_lambda_expression = (void (*) (ValaCodeVisitor*, ValaLambdaExpression*)) vala_ccode_base_module_real_visit_lambda_expression;
	((ValaCCodeBaseModuleClass *) klass)->get_implicit_cast_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaCCodeExpression*, ValaDataType*, ValaDataType*, ValaCodeNode*)) vala_ccode_base_module_real_get_implicit_cast_expression;
	((ValaCCodeBaseModuleClass *) klass)->create_type_check_statement = (void (*) (ValaCCodeBaseModule*, ValaCodeNode*, ValaDataType*, ValaTypeSymbol*, gboolean, const gchar*)) vala_ccode_base_module_real_create_type_check_statement;
	((ValaCodeVisitorClass *) klass)->visit_class = (void (*) (ValaCodeVisitor*, ValaClass*)) vala_ccode_base_module_real_visit_class;
	((ValaCCodeBaseModuleClass *) klass)->generate_dynamic_method_wrapper = (void (*) (ValaCCodeBaseModule*, ValaDynamicMethod*)) vala_ccode_base_module_real_generate_dynamic_method_wrapper;
	((ValaCCodeBaseModuleClass *) klass)->get_param_spec_cexpression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaProperty*)) vala_ccode_base_module_real_get_param_spec_cexpression;
	((ValaCCodeBaseModuleClass *) klass)->get_param_spec = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaProperty*)) vala_ccode_base_module_real_get_param_spec;
	((ValaCCodeBaseModuleClass *) klass)->get_signal_creation = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaSignal*, ValaObjectTypeSymbol*)) vala_ccode_base_module_real_get_signal_creation;
	((ValaCCodeBaseModuleClass *) klass)->get_value_getter_function = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*)) vala_ccode_base_module_real_get_value_getter_function;
	((ValaCCodeBaseModuleClass *) klass)->get_value_setter_function = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*)) vala_ccode_base_module_real_get_value_setter_function;
	((ValaCCodeBaseModuleClass *) klass)->get_value_taker_function = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*)) vala_ccode_base_module_real_get_value_taker_function;
	((ValaCCodeBaseModuleClass *) klass)->register_dbus_info = (void (*) (ValaCCodeBaseModule*, ValaCCodeBlock*, ValaObjectTypeSymbol*)) vala_ccode_base_module_real_register_dbus_info;
	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_cname;
	((ValaCCodeBaseModuleClass *) klass)->get_array_length_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*, gint)) vala_ccode_base_module_real_get_array_length_cname;
	((ValaCCodeBaseModuleClass *) klass)->get_variable_array_length_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaVariable*, gint)) vala_ccode_base_module_real_get_variable_array_length_cname;
	((ValaCCodeBaseModuleClass *) klass)->get_array_length_cexpression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaExpression*, gint)) vala_ccode_base_module_real_get_array_length_cexpression;
	((ValaCCodeBaseModuleClass *) klass)->get_array_length_cvalue = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*, gint)) vala_ccode_base_module_real_get_array_length_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->get_array_size_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*)) vala_ccode_base_module_real_get_array_size_cname;
	((ValaCCodeBaseModuleClass *) klass)->add_simple_check = (void (*) (ValaCCodeBaseModule*, ValaCodeNode*, gboolean)) vala_ccode_base_module_real_add_simple_check;
	((ValaCCodeBaseModuleClass *) klass)->generate_ready_function = (gchar* (*) (ValaCCodeBaseModule*, ValaMethod*)) vala_ccode_base_module_real_generate_ready_function;
	vala_ccode_base_module_ccode_attribute_cache_index = vala_code_node_get_attribute_cache_index ();
}

static void
vala_ccode_base_module_instance_init (ValaCCodeBaseModule * self,
                                      gpointer klass)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	GEqualFunc _tmp1_;
	ValaArrayList* _tmp2_;
	GEqualFunc _tmp3_;
	ValaArrayList* _tmp4_;
	GHashFunc _tmp5_;
	GEqualFunc _tmp6_;
	GEqualFunc _tmp7_;
	ValaHashMap* _tmp8_;
	GHashFunc _tmp9_;
	GEqualFunc _tmp10_;
	GEqualFunc _tmp11_;
	ValaHashMap* _tmp12_;
	ValaVoidType* _tmp13_;
	self->priv = vala_ccode_base_module_get_instance_private (self);
	_tmp0_ = vala_ccode_base_module_emit_context_new (NULL);
	self->emit_context = _tmp0_;
	_tmp1_ = g_direct_equal;
	_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_);
	self->priv->emit_context_stack = (ValaList*) _tmp2_;
	self->current_line = NULL;
	_tmp3_ = g_direct_equal;
	_tmp4_ = vala_array_list_new (VALA_TYPE_CCODE_LINE_DIRECTIVE, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp3_);
	self->priv->line_directive_stack = (ValaList*) _tmp4_;
	self->next_regex_id = 0;
	self->priv->next_block_id = 0;
	_tmp5_ = g_direct_hash;
	_tmp6_ = g_direct_equal;
	_tmp7_ = g_direct_equal;
	_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_);
	self->priv->block_map = (ValaMap*) _tmp8_;
	_tmp9_ = g_direct_hash;
	_tmp10_ = g_direct_equal;
	_tmp11_ = g_direct_equal;
	_tmp12_ = vala_hash_map_new (VALA_TYPE_METHOD, NULL, NULL, G_TYPE_INT, NULL, NULL, _tmp9_, _tmp10_, _tmp11_);
	self->priv->method_inner_error_var_count = (ValaMap*) _tmp12_;
	_tmp13_ = vala_void_type_new (NULL);
	self->void_type = (ValaDataType*) _tmp13_;
	self->in_plugin = FALSE;
	self->priv->next_variant_function_id = 0;
}

static void
vala_ccode_base_module_finalize (ValaCodeVisitor * obj)
{
	ValaCCodeBaseModule * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModule);
	_vala_code_context_unref0 (self->priv->_context);
	_vala_code_node_unref0 (self->root_symbol);
	_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
	_vala_iterable_unref0 (self->priv->emit_context_stack);
	_vala_ccode_node_unref0 (self->current_line);
	_vala_iterable_unref0 (self->priv->line_directive_stack);
	_vala_ccode_file_unref0 (self->header_file);
	_vala_ccode_file_unref0 (self->internal_header_file);
	_vala_ccode_file_unref0 (self->cfile);
	_vala_ccode_base_module_emit_context_unref0 (self->class_init_context);
	_vala_ccode_base_module_emit_context_unref0 (self->base_init_context);
	_vala_ccode_base_module_emit_context_unref0 (self->class_finalize_context);
	_vala_ccode_base_module_emit_context_unref0 (self->base_finalize_context);
	_vala_ccode_base_module_emit_context_unref0 (self->instance_init_context);
	_vala_ccode_base_module_emit_context_unref0 (self->instance_finalize_context);
	_vala_ccode_node_unref0 (self->param_spec_struct);
	_vala_ccode_node_unref0 (self->closure_struct);
	_vala_ccode_node_unref0 (self->prop_enum);
	_vala_ccode_node_unref0 (self->signal_enum);
	_vala_iterable_unref0 (self->user_marshal_set);
	_vala_iterable_unref0 (self->predefined_marshal_set);
	_vala_map_unref0 (self->priv->block_map);
	_vala_map_unref0 (self->priv->method_inner_error_var_count);
	_vala_code_node_unref0 (self->void_type);
	_vala_code_node_unref0 (self->bool_type);
	_vala_code_node_unref0 (self->char_type);
	_vala_code_node_unref0 (self->uchar_type);
	_vala_code_node_unref0 (self->unichar_type);
	_vala_code_node_unref0 (self->short_type);
	_vala_code_node_unref0 (self->ushort_type);
	_vala_code_node_unref0 (self->int_type);
	_vala_code_node_unref0 (self->uint_type);
	_vala_code_node_unref0 (self->long_type);
	_vala_code_node_unref0 (self->ulong_type);
	_vala_code_node_unref0 (self->int8_type);
	_vala_code_node_unref0 (self->uint8_type);
	_vala_code_node_unref0 (self->int16_type);
	_vala_code_node_unref0 (self->uint16_type);
	_vala_code_node_unref0 (self->int32_type);
	_vala_code_node_unref0 (self->uint32_type);
	_vala_code_node_unref0 (self->int64_type);
	_vala_code_node_unref0 (self->uint64_type);
	_vala_code_node_unref0 (self->size_t_type);
	_vala_code_node_unref0 (self->ssize_t_type);
	_vala_code_node_unref0 (self->string_type);
	_vala_code_node_unref0 (self->regex_type);
	_vala_code_node_unref0 (self->float_type);
	_vala_code_node_unref0 (self->double_type);
	_vala_code_node_unref0 (self->pointer_type);
	_vala_code_node_unref0 (self->gtype_type);
	_vala_code_node_unref0 (self->gobject_type);
	_vala_code_node_unref0 (self->gerror_type);
	_vala_code_node_unref0 (self->glist_type);
	_vala_code_node_unref0 (self->gslist_type);
	_vala_code_node_unref0 (self->gnode_type);
	_vala_code_node_unref0 (self->gqueue_type);
	_vala_code_node_unref0 (self->gvaluearray_type);
	_vala_code_node_unref0 (self->gstringbuilder_type);
	_vala_code_node_unref0 (self->garray_type);
	_vala_code_node_unref0 (self->gbytearray_type);
	_vala_code_node_unref0 (self->genericarray_type);
	_vala_code_node_unref0 (self->gsequence_type);
	_vala_code_node_unref0 (self->gsequence_iter_type);
	_vala_code_node_unref0 (self->gthreadpool_type);
	_vala_code_node_unref0 (self->gquark_type);
	_vala_code_node_unref0 (self->gvalue_type);
	_vala_code_node_unref0 (self->gvariant_type);
	_vala_code_node_unref0 (self->mutex_type);
	_vala_code_node_unref0 (self->gmutex_type);
	_vala_code_node_unref0 (self->grecmutex_type);
	_vala_code_node_unref0 (self->grwlock_type);
	_vala_code_node_unref0 (self->gcond_type);
	_vala_code_node_unref0 (self->gsource_type);
	_vala_code_node_unref0 (self->type_module_type);
	_vala_code_node_unref0 (self->dbus_proxy_type);
	_vala_code_node_unref0 (self->gtk_widget_type);
	_vala_code_node_unref0 (self->delegate_target_type);
	_vala_code_node_unref0 (self->delegate_target_destroy_type);
	_vala_code_node_unref0 (self->priv->destroy_notify);
	_vala_code_node_unref0 (self->priv->gerror);
	_g_free0 (self->module_init_param_name);
	_vala_iterable_unref0 (self->wrappers);
	_vala_iterable_unref0 (self->priv->generated_external_symbols);
	VALA_CODE_VISITOR_CLASS (vala_ccode_base_module_parent_class)->finalize (obj);
}

/**
 * Code visitor generating C Code.
 */
static GType
vala_ccode_base_module_get_type_once (void)
{
	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 };
	GType vala_ccode_base_module_type_id;
	vala_ccode_base_module_type_id = g_type_register_static (VALA_TYPE_CODE_GENERATOR, "ValaCCodeBaseModule", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
	ValaCCodeBaseModule_private_offset = g_type_add_instance_private (vala_ccode_base_module_type_id, sizeof (ValaCCodeBaseModulePrivate));
	return vala_ccode_base_module_type_id;
}

GType
vala_ccode_base_module_get_type (void)
{
	static volatile gsize vala_ccode_base_module_type_id__once = 0;
	if (g_once_init_enter (&vala_ccode_base_module_type_id__once)) {
		GType vala_ccode_base_module_type_id;
		vala_ccode_base_module_type_id = vala_ccode_base_module_get_type_once ();
		g_once_init_leave (&vala_ccode_base_module_type_id__once, vala_ccode_base_module_type_id);
	}
	return vala_ccode_base_module_type_id__once;
}

static void
_vala_array_destroy (gpointer array,
                     gssize array_length,
                     GDestroyNotify destroy_func)
{
	if ((array != NULL) && (destroy_func != NULL)) {
		gssize i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}

static void
_vala_array_free (gpointer array,
                  gssize array_length,
                  GDestroyNotify destroy_func)
{
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}

static gssize
_vala_array_length (gpointer array)
{
	gssize length;
	length = 0;
	if (array) {
		while (((gpointer*) array)[length]) {
			length++;
		}
	}
	return length;
}

