/* 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_TYPE_GLIB_VALUE (vala_glib_value_get_type ())
#define VALA_GLIB_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_GLIB_VALUE, ValaGLibValue))
#define VALA_GLIB_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_GLIB_VALUE, ValaGLibValueClass))
#define VALA_IS_GLIB_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_GLIB_VALUE))
#define VALA_IS_GLIB_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_GLIB_VALUE))
#define VALA_GLIB_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_GLIB_VALUE, ValaGLibValueClass))

typedef struct _ValaGLibValue ValaGLibValue;
typedef struct _ValaGLibValueClass ValaGLibValueClass;
typedef struct _ValaGLibValuePrivate ValaGLibValuePrivate;
#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)))
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (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 _ValaGLibValue {
	ValaTargetValue parent_instance;
	ValaCCodeExpression* cvalue;
	gboolean lvalue;
	gboolean non_null;
	gchar* ctype;
	ValaList* array_length_cvalues;
	ValaCCodeExpression* array_size_cvalue;
	gboolean array_null_terminated;
	ValaCCodeExpression* array_length_cexpr;
	ValaCCodeExpression* delegate_target_cvalue;
	ValaCCodeExpression* delegate_target_destroy_notify_cvalue;
	ValaGLibValuePrivate * priv;
};

struct _ValaGLibValueClass {
	ValaTargetValueClass parent_class;
};

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;
gint vala_ccode_base_module_ccode_attribute_cache_index = 0;
static gpointer vala_ccode_base_module_emit_context_parent_class = NULL;
static gpointer vala_glib_value_parent_class = NULL;

static void vala_ccode_base_module_real_emit (ValaCodeGenerator* base,
                                       ValaCodeContext* context);
static ValaCCodeIdentifier* vala_ccode_base_module_get_value_getter_function (ValaCCodeBaseModule* self,
                                                                       ValaDataType* type_reference);
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_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 (ValaCCodeBaseModule* self,
                                                        ValaInitializerList* initializer_list,
                                                        gint* sizes,
                                                        gint sizes_length1,
                                                        gint rank);
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);
G_GNUC_INTERNAL GType vala_glib_value_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ValaGLibValue, vala_target_value_unref)
static void vala_ccode_base_module_real_visit_formal_parameter (ValaCodeVisitor* base,
                                                         ValaParameter* p);
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);
G_GNUC_INTERNAL ValaGLibValue* vala_glib_value_new (ValaDataType* value_type,
                                    ValaCCodeExpression* cvalue,
                                    gboolean lvalue);
G_GNUC_INTERNAL ValaGLibValue* vala_glib_value_construct (GType object_type,
                                          ValaDataType* value_type,
                                          ValaCCodeExpression* cvalue,
                                          gboolean lvalue);
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 (ValaCCodeBaseModule* self,
                                                             ValaLocalVariable* local);
static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* base,
                                                       ValaLocalVariable* local);
G_GNUC_INTERNAL ValaGLibValue* vala_glib_value_copy (ValaGLibValue* self);
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_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_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 (ValaCCodeBaseModule* self,
                                                                  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);
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 (ValaCCodeBaseModule* self,
                                                         ValaGenericType* type);
static ValaTargetValue* vala_ccode_base_module_real_copy_value (ValaCCodeBaseModule* self,
                                                         ValaTargetValue* value,
                                                         ValaCodeNode* node);
static gboolean vala_ccode_base_module_is_reference_type_argument (ValaCCodeBaseModule* self,
                                                            ValaDataType* type_arg);
static gboolean vala_ccode_base_module_is_nullable_value_type_argument (ValaCCodeBaseModule* self,
                                                                 ValaDataType* type_arg);
static gboolean vala_ccode_base_module_is_signed_integer_type_argument (ValaCCodeBaseModule* self,
                                                                 ValaDataType* type_arg);
static gboolean vala_ccode_base_module_is_unsigned_integer_type_argument (ValaCCodeBaseModule* self,
                                                                   ValaDataType* type_arg);
static void vala_ccode_base_module_check_type_argument (ValaCCodeBaseModule* self,
                                                 ValaDataType* type_arg);
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 void 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);
G_GNUC_INTERNAL void vala_glib_value_append_array_length_cvalue (ValaGLibValue* self,
                                                 ValaCCodeExpression* length_cvalue);
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 ValaCCodeExpression* vala_ccode_base_module_create_type_check (ValaCCodeBaseModule* self,
                                                               ValaCCodeNode* ccodenode,
                                                               ValaDataType* type);
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 gchar* vala_ccode_base_module_generate_cmp_wrapper (ValaCCodeBaseModule* self,
                                                    ValaCCodeIdentifier* cmpid);
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 gboolean vala_ccode_base_module_real_method_has_wrapper (ValaCCodeBaseModule* self,
                                                         ValaMethod* 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,
                                                                      ValaTypeSymbol* type);
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_property_getter_cname (ValaCCodeBaseModule* self,
                                                                      ValaDynamicProperty* node);
static gchar* vala_ccode_base_module_real_get_dynamic_property_setter_cname (ValaCCodeBaseModule* self,
                                                                      ValaDynamicProperty* node);
static gchar* vala_ccode_base_module_real_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
                                                             ValaDynamicSignal* node);
static gchar* vala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name (ValaCCodeBaseModule* self,
                                                                            ValaDynamicSignal* node);
static gchar* vala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name (ValaCCodeBaseModule* self,
                                                                                  ValaDynamicSignal* node);
static gchar* vala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name (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 void vala_ccode_base_module_finalize (ValaCodeVisitor * obj);
static void vala_glib_value_finalize (ValaTargetValue * obj);
static void _vala_array_destroy (gpointer array,
                          gint array_length,
                          GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array,
                       gint array_length,
                       GDestroyNotify destroy_func);
static gint _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);
}

gboolean
vala_ccode_base_module_is_in_coroutine (ValaCCodeBaseModule* self)
{
	gboolean _tmp0_ = FALSE;
	ValaMethod* _tmp1_;
	ValaMethod* _tmp2_;
	gboolean result = FALSE;
	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;
}

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

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 = FALSE;
	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 = FALSE;
	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_next_closure_block (ValaCCodeBaseModule* self,
                                           ValaSymbol* sym)
{
	ValaBlock* result = NULL;
	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;
}

ValaCCodeBaseModule*
vala_ccode_base_module_construct (GType object_type)
{
	ValaCCodeBaseModule* self = NULL;
	GHashFunc _tmp0_;
	GEqualFunc _tmp1_;
	ValaHashSet* _tmp2_;
	ValaSet* _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_;
	GHashFunc _tmp24_;
	GEqualFunc _tmp25_;
	ValaHashSet* _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_;
	ValaSet* _tmp50_;
	ValaSet* _tmp51_;
	ValaSet* _tmp52_;
	ValaSet* _tmp53_;
	ValaSet* _tmp54_;
	ValaSet* _tmp55_;
	ValaSet* _tmp56_;
	ValaSet* _tmp57_;
	ValaSet* _tmp58_;
	ValaSet* _tmp59_;
	ValaSet* _tmp60_;
	ValaSet* _tmp61_;
	ValaSet* _tmp62_;
	ValaSet* _tmp63_;
	ValaSet* _tmp64_;
	ValaSet* _tmp65_;
	ValaSet* _tmp66_;
	ValaSet* _tmp67_;
	ValaSet* _tmp68_;
	ValaSet* _tmp69_;
	ValaSet* _tmp70_;
	ValaSet* _tmp71_;
	ValaSet* _tmp72_;
	ValaSet* _tmp73_;
	ValaSet* _tmp74_;
	ValaSet* _tmp75_;
	self = (ValaCCodeBaseModule*) vala_code_generator_construct (object_type);
	_tmp0_ = g_str_hash;
	_tmp1_ = g_str_equal;
	_tmp2_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp0_, _tmp1_);
	_vala_iterable_unref0 (self->predefined_marshal_set);
	self->predefined_marshal_set = (ValaSet*) _tmp2_;
	_tmp3_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp3_, "VOID:VOID");
	_tmp4_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp4_, "VOID:BOOLEAN");
	_tmp5_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp5_, "VOID:CHAR");
	_tmp6_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp6_, "VOID:UCHAR");
	_tmp7_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp7_, "VOID:INT");
	_tmp8_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp8_, "VOID:UINT");
	_tmp9_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp9_, "VOID:LONG");
	_tmp10_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp10_, "VOID:ULONG");
	_tmp11_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp11_, "VOID:ENUM");
	_tmp12_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp12_, "VOID:FLAGS");
	_tmp13_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp13_, "VOID:FLOAT");
	_tmp14_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp14_, "VOID:DOUBLE");
	_tmp15_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp15_, "VOID:STRING");
	_tmp16_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp16_, "VOID:POINTER");
	_tmp17_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp17_, "VOID:OBJECT");
	_tmp18_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp18_, "STRING:OBJECT,POINTER");
	_tmp19_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp19_, "VOID:UINT,POINTER");
	_tmp20_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp20_, "BOOLEAN:FLAGS");
	_tmp21_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp21_, "VOID:BOXED");
	_tmp22_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp22_, "VOID:VARIANT");
	_tmp23_ = self->predefined_marshal_set;
	vala_collection_add ((ValaCollection*) _tmp23_, "BOOLEAN:BOXED,BOXED");
	_tmp24_ = g_str_hash;
	_tmp25_ = g_str_equal;
	_tmp26_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp24_, _tmp25_);
	_vala_iterable_unref0 (vala_ccode_base_module_reserved_identifiers);
	vala_ccode_base_module_reserved_identifiers = (ValaSet*) _tmp26_;
	_tmp27_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp27_, "_Bool");
	_tmp28_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp28_, "_Complex");
	_tmp29_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp29_, "_Imaginary");
	_tmp30_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp30_, "asm");
	_tmp31_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp31_, "auto");
	_tmp32_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp32_, "break");
	_tmp33_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp33_, "case");
	_tmp34_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp34_, "char");
	_tmp35_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp35_, "const");
	_tmp36_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp36_, "continue");
	_tmp37_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp37_, "default");
	_tmp38_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp38_, "do");
	_tmp39_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp39_, "double");
	_tmp40_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp40_, "else");
	_tmp41_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp41_, "enum");
	_tmp42_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp42_, "extern");
	_tmp43_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp43_, "float");
	_tmp44_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp44_, "for");
	_tmp45_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp45_, "goto");
	_tmp46_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp46_, "if");
	_tmp47_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp47_, "inline");
	_tmp48_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp48_, "int");
	_tmp49_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp49_, "long");
	_tmp50_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp50_, "register");
	_tmp51_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp51_, "restrict");
	_tmp52_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp52_, "return");
	_tmp53_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp53_, "short");
	_tmp54_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp54_, "signed");
	_tmp55_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp55_, "sizeof");
	_tmp56_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp56_, "static");
	_tmp57_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp57_, "struct");
	_tmp58_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp58_, "switch");
	_tmp59_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp59_, "typedef");
	_tmp60_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp60_, "union");
	_tmp61_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp61_, "unsigned");
	_tmp62_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp62_, "void");
	_tmp63_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp63_, "volatile");
	_tmp64_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp64_, "while");
	_tmp65_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp65_, "_Alignas");
	_tmp66_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp66_, "_Alignof");
	_tmp67_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp67_, "_Atomic");
	_tmp68_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp68_, "_Generic");
	_tmp69_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp69_, "_Noreturn");
	_tmp70_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp70_, "_Static_assert");
	_tmp71_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp71_, "_Thread_local");
	_tmp72_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp72_, "cdecl");
	_tmp73_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp73_, "error");
	_tmp74_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp74_, "result");
	_tmp75_ = vala_ccode_base_module_reserved_identifiers;
	vala_collection_add ((ValaCollection*) _tmp75_, "self");
	return 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;
	ValaNamespace* _tmp0_;
	ValaNamespace* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaScope* _tmp4_;
	ValaScope* _tmp5_;
	ValaSymbol* _tmp6_;
	ValaStruct* _tmp7_;
	ValaBooleanType* _tmp8_;
	ValaSymbol* _tmp9_;
	ValaScope* _tmp10_;
	ValaScope* _tmp11_;
	ValaSymbol* _tmp12_;
	ValaStruct* _tmp13_;
	ValaIntegerType* _tmp14_;
	ValaSymbol* _tmp15_;
	ValaScope* _tmp16_;
	ValaScope* _tmp17_;
	ValaSymbol* _tmp18_;
	ValaStruct* _tmp19_;
	ValaIntegerType* _tmp20_;
	ValaSymbol* _tmp21_;
	ValaScope* _tmp22_;
	ValaScope* _tmp23_;
	ValaSymbol* _tmp24_;
	ValaStruct* _tmp25_;
	ValaIntegerType* _tmp26_;
	ValaSymbol* _tmp27_;
	ValaScope* _tmp28_;
	ValaScope* _tmp29_;
	ValaSymbol* _tmp30_;
	ValaStruct* _tmp31_;
	ValaIntegerType* _tmp32_;
	ValaSymbol* _tmp33_;
	ValaScope* _tmp34_;
	ValaScope* _tmp35_;
	ValaSymbol* _tmp36_;
	ValaStruct* _tmp37_;
	ValaIntegerType* _tmp38_;
	ValaSymbol* _tmp39_;
	ValaScope* _tmp40_;
	ValaScope* _tmp41_;
	ValaSymbol* _tmp42_;
	ValaStruct* _tmp43_;
	ValaIntegerType* _tmp44_;
	ValaSymbol* _tmp45_;
	ValaScope* _tmp46_;
	ValaScope* _tmp47_;
	ValaSymbol* _tmp48_;
	ValaStruct* _tmp49_;
	ValaIntegerType* _tmp50_;
	ValaSymbol* _tmp51_;
	ValaScope* _tmp52_;
	ValaScope* _tmp53_;
	ValaSymbol* _tmp54_;
	ValaStruct* _tmp55_;
	ValaIntegerType* _tmp56_;
	ValaSymbol* _tmp57_;
	ValaScope* _tmp58_;
	ValaScope* _tmp59_;
	ValaSymbol* _tmp60_;
	ValaStruct* _tmp61_;
	ValaIntegerType* _tmp62_;
	ValaSymbol* _tmp63_;
	ValaScope* _tmp64_;
	ValaScope* _tmp65_;
	ValaSymbol* _tmp66_;
	ValaStruct* _tmp67_;
	ValaIntegerType* _tmp68_;
	ValaSymbol* _tmp69_;
	ValaScope* _tmp70_;
	ValaScope* _tmp71_;
	ValaSymbol* _tmp72_;
	ValaStruct* _tmp73_;
	ValaIntegerType* _tmp74_;
	ValaSymbol* _tmp75_;
	ValaScope* _tmp76_;
	ValaScope* _tmp77_;
	ValaSymbol* _tmp78_;
	ValaStruct* _tmp79_;
	ValaIntegerType* _tmp80_;
	ValaSymbol* _tmp81_;
	ValaScope* _tmp82_;
	ValaScope* _tmp83_;
	ValaSymbol* _tmp84_;
	ValaStruct* _tmp85_;
	ValaIntegerType* _tmp86_;
	ValaSymbol* _tmp87_;
	ValaScope* _tmp88_;
	ValaScope* _tmp89_;
	ValaSymbol* _tmp90_;
	ValaStruct* _tmp91_;
	ValaIntegerType* _tmp92_;
	ValaSymbol* _tmp93_;
	ValaScope* _tmp94_;
	ValaScope* _tmp95_;
	ValaSymbol* _tmp96_;
	ValaStruct* _tmp97_;
	ValaIntegerType* _tmp98_;
	ValaSymbol* _tmp99_;
	ValaScope* _tmp100_;
	ValaScope* _tmp101_;
	ValaSymbol* _tmp102_;
	ValaStruct* _tmp103_;
	ValaIntegerType* _tmp104_;
	ValaSymbol* _tmp105_;
	ValaScope* _tmp106_;
	ValaScope* _tmp107_;
	ValaSymbol* _tmp108_;
	ValaStruct* _tmp109_;
	ValaFloatingType* _tmp110_;
	ValaSymbol* _tmp111_;
	ValaScope* _tmp112_;
	ValaScope* _tmp113_;
	ValaSymbol* _tmp114_;
	ValaStruct* _tmp115_;
	ValaFloatingType* _tmp116_;
	ValaSymbol* _tmp117_;
	ValaScope* _tmp118_;
	ValaScope* _tmp119_;
	ValaSymbol* _tmp120_;
	ValaClass* _tmp121_;
	ValaObjectType* _tmp122_;
	ValaStruct* unichar_struct = NULL;
	ValaSymbol* _tmp123_;
	ValaScope* _tmp124_;
	ValaScope* _tmp125_;
	ValaSymbol* _tmp126_;
	ValaStruct* _tmp127_;
	ValaProfile _tmp130_;
	ValaProfile _tmp131_;
	ValaSymbol* gtk_ns = NULL;
	ValaSymbol* _tmp305_;
	ValaScope* _tmp306_;
	ValaScope* _tmp307_;
	ValaSymbol* _tmp308_;
	ValaSymbol* _tmp309_;
	ValaCCodeFile* _tmp314_;
	ValaCCodeFile* _tmp315_;
	ValaCCodeFile* _tmp316_;
	ValaCCodeFile* _tmp317_;
	ValaList* source_files = NULL;
	ValaList* _tmp318_;
	const gchar* _tmp337_;
	const gchar* _tmp338_;
	const gchar* _tmp357_;
	const gchar* _tmp358_;
	const gchar* _tmp375_;
	const gchar* _tmp376_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (context != NULL);
	vala_ccode_base_module_set_context (self, context);
	_tmp0_ = vala_code_context_get_root (context);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp1_);
	_vala_code_node_unref0 (self->root_symbol);
	self->root_symbol = _tmp2_;
	_tmp3_ = self->root_symbol;
	_tmp4_ = vala_symbol_get_scope (_tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_scope_lookup (_tmp5_, "bool");
	_tmp7_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp8_ = vala_boolean_type_new (_tmp7_);
	_vala_code_node_unref0 (self->bool_type);
	self->bool_type = (ValaDataType*) _tmp8_;
	_vala_code_node_unref0 (_tmp7_);
	_tmp9_ = self->root_symbol;
	_tmp10_ = vala_symbol_get_scope (_tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_scope_lookup (_tmp11_, "char");
	_tmp13_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp14_ = vala_integer_type_new (_tmp13_, NULL, NULL);
	_vala_code_node_unref0 (self->char_type);
	self->char_type = (ValaDataType*) _tmp14_;
	_vala_code_node_unref0 (_tmp13_);
	_tmp15_ = self->root_symbol;
	_tmp16_ = vala_symbol_get_scope (_tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_scope_lookup (_tmp17_, "uchar");
	_tmp19_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp20_ = vala_integer_type_new (_tmp19_, NULL, NULL);
	_vala_code_node_unref0 (self->uchar_type);
	self->uchar_type = (ValaDataType*) _tmp20_;
	_vala_code_node_unref0 (_tmp19_);
	_tmp21_ = self->root_symbol;
	_tmp22_ = vala_symbol_get_scope (_tmp21_);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_scope_lookup (_tmp23_, "short");
	_tmp25_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp26_ = vala_integer_type_new (_tmp25_, NULL, NULL);
	_vala_code_node_unref0 (self->short_type);
	self->short_type = (ValaDataType*) _tmp26_;
	_vala_code_node_unref0 (_tmp25_);
	_tmp27_ = self->root_symbol;
	_tmp28_ = vala_symbol_get_scope (_tmp27_);
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_scope_lookup (_tmp29_, "ushort");
	_tmp31_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp32_ = vala_integer_type_new (_tmp31_, NULL, NULL);
	_vala_code_node_unref0 (self->ushort_type);
	self->ushort_type = (ValaDataType*) _tmp32_;
	_vala_code_node_unref0 (_tmp31_);
	_tmp33_ = self->root_symbol;
	_tmp34_ = vala_symbol_get_scope (_tmp33_);
	_tmp35_ = _tmp34_;
	_tmp36_ = vala_scope_lookup (_tmp35_, "int");
	_tmp37_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp38_ = vala_integer_type_new (_tmp37_, NULL, NULL);
	_vala_code_node_unref0 (self->int_type);
	self->int_type = (ValaDataType*) _tmp38_;
	_vala_code_node_unref0 (_tmp37_);
	_tmp39_ = self->root_symbol;
	_tmp40_ = vala_symbol_get_scope (_tmp39_);
	_tmp41_ = _tmp40_;
	_tmp42_ = vala_scope_lookup (_tmp41_, "uint");
	_tmp43_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp44_ = vala_integer_type_new (_tmp43_, NULL, NULL);
	_vala_code_node_unref0 (self->uint_type);
	self->uint_type = (ValaDataType*) _tmp44_;
	_vala_code_node_unref0 (_tmp43_);
	_tmp45_ = self->root_symbol;
	_tmp46_ = vala_symbol_get_scope (_tmp45_);
	_tmp47_ = _tmp46_;
	_tmp48_ = vala_scope_lookup (_tmp47_, "long");
	_tmp49_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp50_ = vala_integer_type_new (_tmp49_, NULL, NULL);
	_vala_code_node_unref0 (self->long_type);
	self->long_type = (ValaDataType*) _tmp50_;
	_vala_code_node_unref0 (_tmp49_);
	_tmp51_ = self->root_symbol;
	_tmp52_ = vala_symbol_get_scope (_tmp51_);
	_tmp53_ = _tmp52_;
	_tmp54_ = vala_scope_lookup (_tmp53_, "ulong");
	_tmp55_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp54_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp56_ = vala_integer_type_new (_tmp55_, NULL, NULL);
	_vala_code_node_unref0 (self->ulong_type);
	self->ulong_type = (ValaDataType*) _tmp56_;
	_vala_code_node_unref0 (_tmp55_);
	_tmp57_ = self->root_symbol;
	_tmp58_ = vala_symbol_get_scope (_tmp57_);
	_tmp59_ = _tmp58_;
	_tmp60_ = vala_scope_lookup (_tmp59_, "int8");
	_tmp61_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp60_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp62_ = vala_integer_type_new (_tmp61_, NULL, NULL);
	_vala_code_node_unref0 (self->int8_type);
	self->int8_type = (ValaDataType*) _tmp62_;
	_vala_code_node_unref0 (_tmp61_);
	_tmp63_ = self->root_symbol;
	_tmp64_ = vala_symbol_get_scope (_tmp63_);
	_tmp65_ = _tmp64_;
	_tmp66_ = vala_scope_lookup (_tmp65_, "uint8");
	_tmp67_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp66_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp68_ = vala_integer_type_new (_tmp67_, NULL, NULL);
	_vala_code_node_unref0 (self->uint8_type);
	self->uint8_type = (ValaDataType*) _tmp68_;
	_vala_code_node_unref0 (_tmp67_);
	_tmp69_ = self->root_symbol;
	_tmp70_ = vala_symbol_get_scope (_tmp69_);
	_tmp71_ = _tmp70_;
	_tmp72_ = vala_scope_lookup (_tmp71_, "int16");
	_tmp73_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp74_ = vala_integer_type_new (_tmp73_, NULL, NULL);
	_vala_code_node_unref0 (self->int16_type);
	self->int16_type = (ValaDataType*) _tmp74_;
	_vala_code_node_unref0 (_tmp73_);
	_tmp75_ = self->root_symbol;
	_tmp76_ = vala_symbol_get_scope (_tmp75_);
	_tmp77_ = _tmp76_;
	_tmp78_ = vala_scope_lookup (_tmp77_, "uint16");
	_tmp79_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp78_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp80_ = vala_integer_type_new (_tmp79_, NULL, NULL);
	_vala_code_node_unref0 (self->uint16_type);
	self->uint16_type = (ValaDataType*) _tmp80_;
	_vala_code_node_unref0 (_tmp79_);
	_tmp81_ = self->root_symbol;
	_tmp82_ = vala_symbol_get_scope (_tmp81_);
	_tmp83_ = _tmp82_;
	_tmp84_ = vala_scope_lookup (_tmp83_, "int32");
	_tmp85_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp84_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp86_ = vala_integer_type_new (_tmp85_, NULL, NULL);
	_vala_code_node_unref0 (self->int32_type);
	self->int32_type = (ValaDataType*) _tmp86_;
	_vala_code_node_unref0 (_tmp85_);
	_tmp87_ = self->root_symbol;
	_tmp88_ = vala_symbol_get_scope (_tmp87_);
	_tmp89_ = _tmp88_;
	_tmp90_ = vala_scope_lookup (_tmp89_, "uint32");
	_tmp91_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp92_ = vala_integer_type_new (_tmp91_, NULL, NULL);
	_vala_code_node_unref0 (self->uint32_type);
	self->uint32_type = (ValaDataType*) _tmp92_;
	_vala_code_node_unref0 (_tmp91_);
	_tmp93_ = self->root_symbol;
	_tmp94_ = vala_symbol_get_scope (_tmp93_);
	_tmp95_ = _tmp94_;
	_tmp96_ = vala_scope_lookup (_tmp95_, "int64");
	_tmp97_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp96_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp98_ = vala_integer_type_new (_tmp97_, NULL, NULL);
	_vala_code_node_unref0 (self->int64_type);
	self->int64_type = (ValaDataType*) _tmp98_;
	_vala_code_node_unref0 (_tmp97_);
	_tmp99_ = self->root_symbol;
	_tmp100_ = vala_symbol_get_scope (_tmp99_);
	_tmp101_ = _tmp100_;
	_tmp102_ = vala_scope_lookup (_tmp101_, "uint64");
	_tmp103_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp102_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp104_ = vala_integer_type_new (_tmp103_, NULL, NULL);
	_vala_code_node_unref0 (self->uint64_type);
	self->uint64_type = (ValaDataType*) _tmp104_;
	_vala_code_node_unref0 (_tmp103_);
	_tmp105_ = self->root_symbol;
	_tmp106_ = vala_symbol_get_scope (_tmp105_);
	_tmp107_ = _tmp106_;
	_tmp108_ = vala_scope_lookup (_tmp107_, "float");
	_tmp109_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp110_ = vala_floating_type_new (_tmp109_);
	_vala_code_node_unref0 (self->float_type);
	self->float_type = (ValaDataType*) _tmp110_;
	_vala_code_node_unref0 (_tmp109_);
	_tmp111_ = self->root_symbol;
	_tmp112_ = vala_symbol_get_scope (_tmp111_);
	_tmp113_ = _tmp112_;
	_tmp114_ = vala_scope_lookup (_tmp113_, "double");
	_tmp115_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp116_ = vala_floating_type_new (_tmp115_);
	_vala_code_node_unref0 (self->double_type);
	self->double_type = (ValaDataType*) _tmp116_;
	_vala_code_node_unref0 (_tmp115_);
	_tmp117_ = self->root_symbol;
	_tmp118_ = vala_symbol_get_scope (_tmp117_);
	_tmp119_ = _tmp118_;
	_tmp120_ = vala_scope_lookup (_tmp119_, "string");
	_tmp121_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp120_, VALA_TYPE_CLASS, ValaClass);
	_tmp122_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp121_);
	_vala_code_node_unref0 (self->string_type);
	self->string_type = (ValaDataType*) _tmp122_;
	_vala_code_node_unref0 (_tmp121_);
	_tmp123_ = self->root_symbol;
	_tmp124_ = vala_symbol_get_scope (_tmp123_);
	_tmp125_ = _tmp124_;
	_tmp126_ = vala_scope_lookup (_tmp125_, "unichar");
	unichar_struct = G_TYPE_CHECK_INSTANCE_CAST (_tmp126_, VALA_TYPE_STRUCT, ValaStruct);
	_tmp127_ = unichar_struct;
	if (_tmp127_ != NULL) {
		ValaStruct* _tmp128_;
		ValaIntegerType* _tmp129_;
		_tmp128_ = unichar_struct;
		_tmp129_ = vala_integer_type_new (_tmp128_, NULL, NULL);
		_vala_code_node_unref0 (self->unichar_type);
		self->unichar_type = (ValaDataType*) _tmp129_;
	}
	_tmp130_ = vala_code_context_get_profile (context);
	_tmp131_ = _tmp130_;
	if (_tmp131_ == VALA_PROFILE_GOBJECT) {
		ValaSymbol* glib_ns = NULL;
		ValaSymbol* _tmp132_;
		ValaScope* _tmp133_;
		ValaScope* _tmp134_;
		ValaSymbol* _tmp135_;
		ValaSymbol* _tmp136_;
		ValaScope* _tmp137_;
		ValaScope* _tmp138_;
		ValaSymbol* _tmp139_;
		ValaSymbol* _tmp140_;
		ValaScope* _tmp141_;
		ValaScope* _tmp142_;
		ValaSymbol* _tmp143_;
		ValaErrorType* _tmp144_;
		ValaSymbol* _tmp145_;
		ValaScope* _tmp146_;
		ValaScope* _tmp147_;
		ValaSymbol* _tmp148_;
		ValaSymbol* _tmp149_;
		ValaScope* _tmp150_;
		ValaScope* _tmp151_;
		ValaSymbol* _tmp152_;
		ValaSymbol* _tmp153_;
		ValaScope* _tmp154_;
		ValaScope* _tmp155_;
		ValaSymbol* _tmp156_;
		ValaSymbol* _tmp157_;
		ValaScope* _tmp158_;
		ValaScope* _tmp159_;
		ValaSymbol* _tmp160_;
		ValaSymbol* _tmp161_;
		ValaScope* _tmp162_;
		ValaScope* _tmp163_;
		ValaSymbol* _tmp164_;
		ValaSymbol* _tmp165_;
		ValaScope* _tmp166_;
		ValaScope* _tmp167_;
		ValaSymbol* _tmp168_;
		ValaSymbol* _tmp169_;
		ValaScope* _tmp170_;
		ValaScope* _tmp171_;
		ValaSymbol* _tmp172_;
		ValaSymbol* _tmp173_;
		ValaScope* _tmp174_;
		ValaScope* _tmp175_;
		ValaSymbol* _tmp176_;
		ValaSymbol* _tmp177_;
		ValaScope* _tmp178_;
		ValaScope* _tmp179_;
		ValaSymbol* _tmp180_;
		ValaSymbol* _tmp181_;
		ValaScope* _tmp182_;
		ValaScope* _tmp183_;
		ValaSymbol* _tmp184_;
		ValaSymbol* _tmp185_;
		ValaScope* _tmp186_;
		ValaScope* _tmp187_;
		ValaSymbol* _tmp188_;
		ValaDelegate* _tmp189_;
		ValaDelegateType* _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_;
		ValaStruct* _tmp203_;
		ValaIntegerType* _tmp204_;
		ValaSymbol* _tmp205_;
		ValaScope* _tmp206_;
		ValaScope* _tmp207_;
		ValaSymbol* _tmp208_;
		ValaSymbol* _tmp209_;
		ValaScope* _tmp210_;
		ValaScope* _tmp211_;
		ValaSymbol* _tmp212_;
		ValaSymbol* _tmp213_;
		ValaScope* _tmp214_;
		ValaScope* _tmp215_;
		ValaSymbol* _tmp216_;
		ValaSymbol* _tmp217_;
		ValaScope* _tmp218_;
		ValaScope* _tmp219_;
		ValaSymbol* _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_;
		ValaStruct* _tmp233_;
		ValaStruct* _tmp234_;
		ValaSymbol* _tmp235_;
		ValaScope* _tmp236_;
		ValaScope* _tmp237_;
		ValaSymbol* _tmp238_;
		ValaSymbol* _tmp239_;
		ValaScope* _tmp240_;
		ValaScope* _tmp241_;
		ValaSymbol* _tmp242_;
		ValaSymbol* _tmp243_;
		ValaScope* _tmp244_;
		ValaScope* _tmp245_;
		ValaSymbol* _tmp246_;
		ValaClass* _tmp247_;
		ValaObjectType* _tmp248_;
		ValaMethod* _tmp249_;
		ValaMethod* _tmp250_;
		ValaSymbol* _tmp269_;
		ValaScope* _tmp270_;
		ValaScope* _tmp271_;
		ValaSymbol* _tmp272_;
		ValaSymbol* _tmp273_;
		ValaScope* _tmp274_;
		ValaScope* _tmp275_;
		ValaSymbol* _tmp276_;
		ValaStruct* _tmp277_;
		ValaStructValueType* _tmp278_;
		ValaSymbol* _tmp279_;
		ValaScope* _tmp280_;
		ValaScope* _tmp281_;
		ValaSymbol* _tmp282_;
		ValaDelegate* _tmp283_;
		ValaDelegateType* _tmp284_;
		_tmp132_ = self->root_symbol;
		_tmp133_ = vala_symbol_get_scope (_tmp132_);
		_tmp134_ = _tmp133_;
		_tmp135_ = vala_scope_lookup (_tmp134_, "GLib");
		glib_ns = _tmp135_;
		_tmp136_ = glib_ns;
		_tmp137_ = vala_symbol_get_scope (_tmp136_);
		_tmp138_ = _tmp137_;
		_tmp139_ = vala_scope_lookup (_tmp138_, "Type");
		_vala_code_node_unref0 (self->gtype_type);
		self->gtype_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp139_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp140_ = glib_ns;
		_tmp141_ = vala_symbol_get_scope (_tmp140_);
		_tmp142_ = _tmp141_;
		_tmp143_ = vala_scope_lookup (_tmp142_, "Object");
		_vala_code_node_unref0 (self->gobject_type);
		self->gobject_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp143_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp144_ = vala_error_type_new (NULL, NULL, NULL);
		_vala_code_node_unref0 (self->gerror_type);
		self->gerror_type = _tmp144_;
		_tmp145_ = glib_ns;
		_tmp146_ = vala_symbol_get_scope (_tmp145_);
		_tmp147_ = _tmp146_;
		_tmp148_ = vala_scope_lookup (_tmp147_, "List");
		_vala_code_node_unref0 (self->glist_type);
		self->glist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp148_, VALA_TYPE_CLASS, ValaClass);
		_tmp149_ = glib_ns;
		_tmp150_ = vala_symbol_get_scope (_tmp149_);
		_tmp151_ = _tmp150_;
		_tmp152_ = vala_scope_lookup (_tmp151_, "SList");
		_vala_code_node_unref0 (self->gslist_type);
		self->gslist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp152_, VALA_TYPE_CLASS, ValaClass);
		_tmp153_ = glib_ns;
		_tmp154_ = vala_symbol_get_scope (_tmp153_);
		_tmp155_ = _tmp154_;
		_tmp156_ = vala_scope_lookup (_tmp155_, "Node");
		_vala_code_node_unref0 (self->gnode_type);
		self->gnode_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp156_, VALA_TYPE_CLASS, ValaClass);
		_tmp157_ = glib_ns;
		_tmp158_ = vala_symbol_get_scope (_tmp157_);
		_tmp159_ = _tmp158_;
		_tmp160_ = vala_scope_lookup (_tmp159_, "Queue");
		_vala_code_node_unref0 (self->gqueue_type);
		self->gqueue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp160_, VALA_TYPE_CLASS, ValaClass);
		_tmp161_ = glib_ns;
		_tmp162_ = vala_symbol_get_scope (_tmp161_);
		_tmp163_ = _tmp162_;
		_tmp164_ = vala_scope_lookup (_tmp163_, "ValueArray");
		_vala_code_node_unref0 (self->gvaluearray_type);
		self->gvaluearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp164_, VALA_TYPE_CLASS, ValaClass);
		_tmp165_ = glib_ns;
		_tmp166_ = vala_symbol_get_scope (_tmp165_);
		_tmp167_ = _tmp166_;
		_tmp168_ = vala_scope_lookup (_tmp167_, "StringBuilder");
		_vala_code_node_unref0 (self->gstringbuilder_type);
		self->gstringbuilder_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp168_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp169_ = glib_ns;
		_tmp170_ = vala_symbol_get_scope (_tmp169_);
		_tmp171_ = _tmp170_;
		_tmp172_ = vala_scope_lookup (_tmp171_, "Array");
		_vala_code_node_unref0 (self->garray_type);
		self->garray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp172_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp173_ = glib_ns;
		_tmp174_ = vala_symbol_get_scope (_tmp173_);
		_tmp175_ = _tmp174_;
		_tmp176_ = vala_scope_lookup (_tmp175_, "ByteArray");
		_vala_code_node_unref0 (self->gbytearray_type);
		self->gbytearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp176_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp177_ = glib_ns;
		_tmp178_ = vala_symbol_get_scope (_tmp177_);
		_tmp179_ = _tmp178_;
		_tmp180_ = vala_scope_lookup (_tmp179_, "PtrArray");
		_vala_code_node_unref0 (self->gptrarray_type);
		self->gptrarray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp180_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp181_ = glib_ns;
		_tmp182_ = vala_symbol_get_scope (_tmp181_);
		_tmp183_ = _tmp182_;
		_tmp184_ = vala_scope_lookup (_tmp183_, "ThreadPool");
		_vala_code_node_unref0 (self->gthreadpool_type);
		self->gthreadpool_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp184_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp185_ = glib_ns;
		_tmp186_ = vala_symbol_get_scope (_tmp185_);
		_tmp187_ = _tmp186_;
		_tmp188_ = vala_scope_lookup (_tmp187_, "DestroyNotify");
		_tmp189_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp188_, VALA_TYPE_DELEGATE, ValaDelegate);
		_tmp190_ = vala_delegate_type_new (_tmp189_);
		_vala_code_node_unref0 (self->gdestroynotify_type);
		self->gdestroynotify_type = (ValaDataType*) _tmp190_;
		_vala_code_node_unref0 (_tmp189_);
		_tmp191_ = self->root_symbol;
		_tmp192_ = vala_symbol_get_scope (_tmp191_);
		_tmp193_ = _tmp192_;
		_tmp194_ = vala_scope_lookup (_tmp193_, "GLib");
		_tmp195_ = _tmp194_;
		_tmp196_ = vala_symbol_get_scope (_tmp195_);
		_tmp197_ = _tmp196_;
		_tmp198_ = vala_scope_lookup (_tmp197_, "Error");
		_vala_code_node_unref0 (self->priv->gerror);
		self->priv->gerror = G_TYPE_CHECK_INSTANCE_CAST (_tmp198_, VALA_TYPE_CLASS, ValaClass);
		_vala_code_node_unref0 (_tmp195_);
		_tmp199_ = glib_ns;
		_tmp200_ = vala_symbol_get_scope (_tmp199_);
		_tmp201_ = _tmp200_;
		_tmp202_ = vala_scope_lookup (_tmp201_, "Quark");
		_tmp203_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp202_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp204_ = vala_integer_type_new (_tmp203_, NULL, NULL);
		_vala_code_node_unref0 (self->gquark_type);
		self->gquark_type = (ValaDataType*) _tmp204_;
		_vala_code_node_unref0 (_tmp203_);
		_tmp205_ = glib_ns;
		_tmp206_ = vala_symbol_get_scope (_tmp205_);
		_tmp207_ = _tmp206_;
		_tmp208_ = vala_scope_lookup (_tmp207_, "Value");
		_vala_code_node_unref0 (self->gvalue_type);
		self->gvalue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp208_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp209_ = glib_ns;
		_tmp210_ = vala_symbol_get_scope (_tmp209_);
		_tmp211_ = _tmp210_;
		_tmp212_ = vala_scope_lookup (_tmp211_, "Variant");
		_vala_code_node_unref0 (self->gvariant_type);
		self->gvariant_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp212_, VALA_TYPE_CLASS, ValaClass);
		_tmp213_ = glib_ns;
		_tmp214_ = vala_symbol_get_scope (_tmp213_);
		_tmp215_ = _tmp214_;
		_tmp216_ = vala_scope_lookup (_tmp215_, "Source");
		_vala_code_node_unref0 (self->gsource_type);
		self->gsource_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp216_, VALA_TYPE_CLASS, ValaClass);
		_tmp217_ = glib_ns;
		_tmp218_ = vala_symbol_get_scope (_tmp217_);
		_tmp219_ = _tmp218_;
		_tmp220_ = vala_scope_lookup (_tmp219_, "Mutex");
		_vala_code_node_unref0 (self->gmutex_type);
		self->gmutex_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp220_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp221_ = glib_ns;
		_tmp222_ = vala_symbol_get_scope (_tmp221_);
		_tmp223_ = _tmp222_;
		_tmp224_ = vala_scope_lookup (_tmp223_, "RecMutex");
		_vala_code_node_unref0 (self->grecmutex_type);
		self->grecmutex_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_, "RWLock");
		_vala_code_node_unref0 (self->grwlock_type);
		self->grwlock_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp228_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp229_ = glib_ns;
		_tmp230_ = vala_symbol_get_scope (_tmp229_);
		_tmp231_ = _tmp230_;
		_tmp232_ = vala_scope_lookup (_tmp231_, "Cond");
		_vala_code_node_unref0 (self->gcond_type);
		self->gcond_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp232_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp233_ = self->grecmutex_type;
		_tmp234_ = _vala_code_node_ref0 (_tmp233_);
		_vala_code_node_unref0 (self->mutex_type);
		self->mutex_type = _tmp234_;
		_tmp235_ = glib_ns;
		_tmp236_ = vala_symbol_get_scope (_tmp235_);
		_tmp237_ = _tmp236_;
		_tmp238_ = vala_scope_lookup (_tmp237_, "TypeModule");
		_vala_code_node_unref0 (self->type_module_type);
		self->type_module_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp238_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp239_ = self->root_symbol;
		_tmp240_ = vala_symbol_get_scope (_tmp239_);
		_tmp241_ = _tmp240_;
		_tmp242_ = vala_scope_lookup (_tmp241_, "GLib");
		_tmp243_ = _tmp242_;
		_tmp244_ = vala_symbol_get_scope (_tmp243_);
		_tmp245_ = _tmp244_;
		_tmp246_ = vala_scope_lookup (_tmp245_, "Regex");
		_tmp247_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp246_, VALA_TYPE_CLASS, ValaClass);
		_tmp248_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp247_);
		_vala_code_node_unref0 (self->regex_type);
		self->regex_type = (ValaDataType*) _tmp248_;
		_vala_code_node_unref0 (_tmp247_);
		_vala_code_node_unref0 (_tmp243_);
		_tmp249_ = vala_code_context_get_module_init_method (context);
		_tmp250_ = _tmp249_;
		if (_tmp250_ != NULL) {
			{
				ValaList* _parameter_list = NULL;
				ValaMethod* _tmp251_;
				ValaMethod* _tmp252_;
				ValaList* _tmp253_;
				gint _parameter_size = 0;
				ValaList* _tmp254_;
				gint _tmp255_;
				gint _tmp256_;
				gint _parameter_index = 0;
				_tmp251_ = vala_code_context_get_module_init_method (context);
				_tmp252_ = _tmp251_;
				_tmp253_ = vala_callable_get_parameters ((ValaCallable*) _tmp252_);
				_parameter_list = _tmp253_;
				_tmp254_ = _parameter_list;
				_tmp255_ = vala_collection_get_size ((ValaCollection*) _tmp254_);
				_tmp256_ = _tmp255_;
				_parameter_size = _tmp256_;
				_parameter_index = -1;
				while (TRUE) {
					ValaParameter* parameter = NULL;
					ValaList* _tmp257_;
					gpointer _tmp258_;
					ValaParameter* _tmp259_;
					ValaDataType* _tmp260_;
					ValaDataType* _tmp261_;
					ValaTypeSymbol* _tmp262_;
					ValaTypeSymbol* _tmp263_;
					ValaTypeSymbol* _tmp264_;
					_parameter_index = _parameter_index + 1;
					if (!(_parameter_index < _parameter_size)) {
						break;
					}
					_tmp257_ = _parameter_list;
					_tmp258_ = vala_list_get (_tmp257_, _parameter_index);
					parameter = (ValaParameter*) _tmp258_;
					_tmp259_ = parameter;
					_tmp260_ = vala_variable_get_variable_type ((ValaVariable*) _tmp259_);
					_tmp261_ = _tmp260_;
					_tmp262_ = vala_data_type_get_data_type (_tmp261_);
					_tmp263_ = _tmp262_;
					_tmp264_ = self->type_module_type;
					if (vala_typesymbol_is_subtype_of (_tmp263_, _tmp264_)) {
						ValaParameter* _tmp265_;
						const gchar* _tmp266_;
						const gchar* _tmp267_;
						gchar* _tmp268_;
						self->in_plugin = TRUE;
						_tmp265_ = parameter;
						_tmp266_ = vala_symbol_get_name ((ValaSymbol*) _tmp265_);
						_tmp267_ = _tmp266_;
						_tmp268_ = g_strdup (_tmp267_);
						_g_free0 (self->module_init_param_name);
						self->module_init_param_name = _tmp268_;
						_vala_code_node_unref0 (parameter);
						break;
					}
					_vala_code_node_unref0 (parameter);
				}
				_vala_iterable_unref0 (_parameter_list);
			}
		}
		_tmp269_ = glib_ns;
		_tmp270_ = vala_symbol_get_scope (_tmp269_);
		_tmp271_ = _tmp270_;
		_tmp272_ = vala_scope_lookup (_tmp271_, "DBusProxy");
		_vala_code_node_unref0 (self->dbus_proxy_type);
		self->dbus_proxy_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp272_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
		_tmp273_ = glib_ns;
		_tmp274_ = vala_symbol_get_scope (_tmp273_);
		_tmp275_ = _tmp274_;
		_tmp276_ = vala_scope_lookup (_tmp275_, "pointer");
		_tmp277_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp276_, VALA_TYPE_STRUCT, ValaStruct);
		_tmp278_ = vala_struct_value_type_new (_tmp277_);
		_vala_code_node_unref0 (self->delegate_target_type);
		self->delegate_target_type = (ValaDataType*) _tmp278_;
		_vala_code_node_unref0 (_tmp277_);
		_tmp279_ = glib_ns;
		_tmp280_ = vala_symbol_get_scope (_tmp279_);
		_tmp281_ = _tmp280_;
		_tmp282_ = vala_scope_lookup (_tmp281_, "DestroyNotify");
		_vala_code_node_unref0 (self->priv->destroy_notify);
		self->priv->destroy_notify = G_TYPE_CHECK_INSTANCE_CAST (_tmp282_, VALA_TYPE_DELEGATE, ValaDelegate);
		_tmp283_ = self->priv->destroy_notify;
		_tmp284_ = vala_delegate_type_new (_tmp283_);
		_vala_code_node_unref0 (self->delegate_target_destroy_type);
		self->delegate_target_destroy_type = _tmp284_;
		_vala_code_node_unref0 (glib_ns);
	} else {
		ValaVoidType* _tmp285_;
		ValaVoidType* _tmp286_;
		ValaPointerType* _tmp287_;
		ValaVoidType* _tmp288_;
		ValaVoidType* _tmp289_;
		ValaDelegate* _tmp290_;
		ValaDelegate* _tmp291_;
		ValaVoidType* _tmp292_;
		ValaVoidType* _tmp293_;
		ValaPointerType* _tmp294_;
		ValaPointerType* _tmp295_;
		ValaParameter* _tmp296_;
		ValaParameter* _tmp297_;
		ValaDelegate* _tmp298_;
		ValaDelegate* _tmp299_;
		ValaSymbol* _tmp300_;
		ValaScope* _tmp301_;
		ValaScope* _tmp302_;
		ValaDelegate* _tmp303_;
		ValaDelegateType* _tmp304_;
		_tmp285_ = vala_void_type_new (NULL);
		_tmp286_ = _tmp285_;
		_tmp287_ = vala_pointer_type_new ((ValaDataType*) _tmp286_, NULL);
		_vala_code_node_unref0 (self->delegate_target_type);
		self->delegate_target_type = (ValaDataType*) _tmp287_;
		_vala_code_node_unref0 (_tmp286_);
		_tmp288_ = vala_void_type_new (NULL);
		_tmp289_ = _tmp288_;
		_tmp290_ = vala_delegate_new ("ValaDestroyNotify", (ValaDataType*) _tmp289_, NULL, NULL);
		_vala_code_node_unref0 (self->priv->destroy_notify);
		self->priv->destroy_notify = _tmp290_;
		_vala_code_node_unref0 (_tmp289_);
		_tmp291_ = self->priv->destroy_notify;
		_tmp292_ = vala_void_type_new (NULL);
		_tmp293_ = _tmp292_;
		_tmp294_ = vala_pointer_type_new ((ValaDataType*) _tmp293_, NULL);
		_tmp295_ = _tmp294_;
		_tmp296_ = vala_parameter_new ("data", (ValaDataType*) _tmp295_, NULL);
		_tmp297_ = _tmp296_;
		vala_callable_add_parameter ((ValaCallable*) _tmp291_, _tmp297_);
		_vala_code_node_unref0 (_tmp297_);
		_vala_code_node_unref0 (_tmp295_);
		_vala_code_node_unref0 (_tmp293_);
		_tmp298_ = self->priv->destroy_notify;
		vala_delegate_set_has_target (_tmp298_, FALSE);
		_tmp299_ = self->priv->destroy_notify;
		_tmp300_ = self->root_symbol;
		_tmp301_ = vala_symbol_get_scope (_tmp300_);
		_tmp302_ = _tmp301_;
		vala_symbol_set_owner ((ValaSymbol*) _tmp299_, _tmp302_);
		_tmp303_ = self->priv->destroy_notify;
		_tmp304_ = vala_delegate_type_new (_tmp303_);
		_vala_code_node_unref0 (self->delegate_target_destroy_type);
		self->delegate_target_destroy_type = _tmp304_;
	}
	_tmp305_ = self->root_symbol;
	_tmp306_ = vala_symbol_get_scope (_tmp305_);
	_tmp307_ = _tmp306_;
	_tmp308_ = vala_scope_lookup (_tmp307_, "Gtk");
	gtk_ns = _tmp308_;
	_tmp309_ = gtk_ns;
	if (_tmp309_ != NULL) {
		ValaSymbol* _tmp310_;
		ValaScope* _tmp311_;
		ValaScope* _tmp312_;
		ValaSymbol* _tmp313_;
		_tmp310_ = gtk_ns;
		_tmp311_ = vala_symbol_get_scope (_tmp310_);
		_tmp312_ = _tmp311_;
		_tmp313_ = vala_scope_lookup (_tmp312_, "Widget");
		_vala_code_node_unref0 (self->gtk_widget_type);
		self->gtk_widget_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp313_, VALA_TYPE_CLASS, ValaClass);
	}
	_tmp314_ = vala_ccode_file_new (NULL);
	_vala_ccode_file_unref0 (self->header_file);
	self->header_file = _tmp314_;
	_tmp315_ = self->header_file;
	vala_ccode_file_set_is_header (_tmp315_, TRUE);
	_tmp316_ = vala_ccode_file_new (NULL);
	_vala_ccode_file_unref0 (self->internal_header_file);
	self->internal_header_file = _tmp316_;
	_tmp317_ = self->internal_header_file;
	vala_ccode_file_set_is_header (_tmp317_, TRUE);
	_tmp318_ = vala_code_context_get_source_files (context);
	source_files = _tmp318_;
	{
		ValaList* _file_list = NULL;
		ValaList* _tmp319_;
		ValaList* _tmp320_;
		gint _file_size = 0;
		ValaList* _tmp321_;
		gint _tmp322_;
		gint _tmp323_;
		gint _file_index = 0;
		_tmp319_ = source_files;
		_tmp320_ = _vala_iterable_ref0 (_tmp319_);
		_file_list = _tmp320_;
		_tmp321_ = _file_list;
		_tmp322_ = vala_collection_get_size ((ValaCollection*) _tmp321_);
		_tmp323_ = _tmp322_;
		_file_size = _tmp323_;
		_file_index = -1;
		while (TRUE) {
			ValaSourceFile* file = NULL;
			ValaList* _tmp324_;
			gpointer _tmp325_;
			gboolean _tmp326_ = FALSE;
			ValaSourceFile* _tmp327_;
			ValaSourceFileType _tmp328_;
			ValaSourceFileType _tmp329_;
			_file_index = _file_index + 1;
			if (!(_file_index < _file_size)) {
				break;
			}
			_tmp324_ = _file_list;
			_tmp325_ = vala_list_get (_tmp324_, _file_index);
			file = (ValaSourceFile*) _tmp325_;
			_tmp327_ = file;
			_tmp328_ = vala_source_file_get_file_type (_tmp327_);
			_tmp329_ = _tmp328_;
			if (_tmp329_ == VALA_SOURCE_FILE_TYPE_SOURCE) {
				_tmp326_ = TRUE;
			} else {
				gboolean _tmp330_ = FALSE;
				const gchar* _tmp331_;
				const gchar* _tmp332_;
				_tmp331_ = vala_code_context_get_header_filename (context);
				_tmp332_ = _tmp331_;
				if (_tmp332_ != NULL) {
					ValaSourceFile* _tmp333_;
					ValaSourceFileType _tmp334_;
					ValaSourceFileType _tmp335_;
					_tmp333_ = file;
					_tmp334_ = vala_source_file_get_file_type (_tmp333_);
					_tmp335_ = _tmp334_;
					_tmp330_ = _tmp335_ == VALA_SOURCE_FILE_TYPE_FAST;
				} else {
					_tmp330_ = FALSE;
				}
				_tmp326_ = _tmp330_;
			}
			if (_tmp326_) {
				ValaSourceFile* _tmp336_;
				_tmp336_ = file;
				vala_source_file_accept (_tmp336_, (ValaCodeVisitor*) self);
			}
			_vala_source_file_unref0 (file);
		}
		_vala_iterable_unref0 (_file_list);
	}
	_tmp337_ = vala_code_context_get_symbols_filename (context);
	_tmp338_ = _tmp337_;
	if (_tmp338_ != NULL) {
		FILE* stream = NULL;
		const gchar* _tmp339_;
		const gchar* _tmp340_;
		FILE* _tmp341_;
		FILE* _tmp342_;
		_tmp339_ = vala_code_context_get_symbols_filename (context);
		_tmp340_ = _tmp339_;
		_tmp341_ = g_fopen (_tmp340_, "w");
		stream = _tmp341_;
		_tmp342_ = stream;
		if (_tmp342_ == NULL) {
			const gchar* _tmp343_;
			const gchar* _tmp344_;
			gchar* _tmp345_;
			gchar* _tmp346_;
			_tmp343_ = vala_code_context_get_symbols_filename (context);
			_tmp344_ = _tmp343_;
			_tmp345_ = g_strdup_printf ("unable to open `%s' for writing", _tmp344_);
			_tmp346_ = _tmp345_;
			vala_report_error (NULL, _tmp346_);
			_g_free0 (_tmp346_);
			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* _tmp347_;
			ValaList* _tmp348_;
			gint _symbol_size = 0;
			ValaList* _tmp349_;
			gint _tmp350_;
			gint _tmp351_;
			gint _symbol_index = 0;
			_tmp347_ = self->header_file;
			_tmp348_ = vala_ccode_file_get_symbols (_tmp347_);
			_symbol_list = _tmp348_;
			_tmp349_ = _symbol_list;
			_tmp350_ = vala_collection_get_size ((ValaCollection*) _tmp349_);
			_tmp351_ = _tmp350_;
			_symbol_size = _tmp351_;
			_symbol_index = -1;
			while (TRUE) {
				gchar* symbol = NULL;
				ValaList* _tmp352_;
				gpointer _tmp353_;
				FILE* _tmp354_;
				const gchar* _tmp355_;
				FILE* _tmp356_;
				_symbol_index = _symbol_index + 1;
				if (!(_symbol_index < _symbol_size)) {
					break;
				}
				_tmp352_ = _symbol_list;
				_tmp353_ = vala_list_get (_tmp352_, _symbol_index);
				symbol = (gchar*) _tmp353_;
				_tmp354_ = stream;
				_tmp355_ = symbol;
				fputs (_tmp355_, _tmp354_);
				_tmp356_ = stream;
				fputc ('\n', _tmp356_);
				_g_free0 (symbol);
			}
			_vala_iterable_unref0 (_symbol_list);
		}
		_fclose0 (stream);
		stream = NULL;
		_fclose0 (stream);
	}
	_tmp357_ = vala_code_context_get_header_filename (context);
	_tmp358_ = _tmp357_;
	if (_tmp358_ != NULL) {
		gboolean ret = FALSE;
		ValaProfile _tmp359_;
		ValaProfile _tmp360_;
		_tmp359_ = vala_code_context_get_profile (context);
		_tmp360_ = _tmp359_;
		if (_tmp360_ == VALA_PROFILE_GOBJECT) {
			ValaCCodeFile* _tmp361_;
			const gchar* _tmp362_;
			const gchar* _tmp363_;
			gboolean _tmp364_;
			gboolean _tmp365_;
			_tmp361_ = self->header_file;
			_tmp362_ = vala_code_context_get_header_filename (context);
			_tmp363_ = _tmp362_;
			_tmp364_ = vala_code_context_get_version_header (context);
			_tmp365_ = _tmp364_;
			ret = vala_ccode_file_store (_tmp361_, _tmp363_, NULL, _tmp365_, FALSE, "G_BEGIN_DECLS", "G_END_DECLS");
		} else {
			ValaCCodeFile* _tmp366_;
			const gchar* _tmp367_;
			const gchar* _tmp368_;
			gboolean _tmp369_;
			gboolean _tmp370_;
			_tmp366_ = self->header_file;
			_tmp367_ = vala_code_context_get_header_filename (context);
			_tmp368_ = _tmp367_;
			_tmp369_ = vala_code_context_get_version_header (context);
			_tmp370_ = _tmp369_;
			ret = vala_ccode_file_store (_tmp366_, _tmp368_, NULL, _tmp370_, FALSE, "#ifdef  __cplusplus\nextern \"C\" {\n#endif", "#ifdef  __cplusplus\n}\n#endif");
		}
		if (!ret) {
			const gchar* _tmp371_;
			const gchar* _tmp372_;
			gchar* _tmp373_;
			gchar* _tmp374_;
			_tmp371_ = vala_code_context_get_header_filename (context);
			_tmp372_ = _tmp371_;
			_tmp373_ = g_strdup_printf ("unable to open `%s' for writing", _tmp372_);
			_tmp374_ = _tmp373_;
			vala_report_error (NULL, _tmp374_);
			_g_free0 (_tmp374_);
		}
	}
	_tmp375_ = vala_code_context_get_internal_header_filename (context);
	_tmp376_ = _tmp375_;
	if (_tmp376_ != NULL) {
		gboolean ret = FALSE;
		ValaProfile _tmp377_;
		ValaProfile _tmp378_;
		_tmp377_ = vala_code_context_get_profile (context);
		_tmp378_ = _tmp377_;
		if (_tmp378_ == VALA_PROFILE_GOBJECT) {
			ValaCCodeFile* _tmp379_;
			const gchar* _tmp380_;
			const gchar* _tmp381_;
			gboolean _tmp382_;
			gboolean _tmp383_;
			_tmp379_ = self->internal_header_file;
			_tmp380_ = vala_code_context_get_internal_header_filename (context);
			_tmp381_ = _tmp380_;
			_tmp382_ = vala_code_context_get_version_header (context);
			_tmp383_ = _tmp382_;
			ret = vala_ccode_file_store (_tmp379_, _tmp381_, NULL, _tmp383_, FALSE, "G_BEGIN_DECLS", "G_END_DECLS");
		} else {
			ValaCCodeFile* _tmp384_;
			const gchar* _tmp385_;
			const gchar* _tmp386_;
			gboolean _tmp387_;
			gboolean _tmp388_;
			_tmp384_ = self->internal_header_file;
			_tmp385_ = vala_code_context_get_internal_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, "#ifdef  __cplusplus\nextern \"C\" {\n#endif", "#ifdef  __cplusplus\n}\n#endif");
		}
		if (!ret) {
			const gchar* _tmp389_;
			const gchar* _tmp390_;
			gchar* _tmp391_;
			gchar* _tmp392_;
			_tmp389_ = vala_code_context_get_internal_header_filename (context);
			_tmp390_ = _tmp389_;
			_tmp391_ = g_strdup_printf ("unable to open `%s' for writing", _tmp390_);
			_tmp392_ = _tmp391_;
			vala_report_error (NULL, _tmp392_);
			_g_free0 (_tmp392_);
		}
	}
	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)
{
	ValaSourceReference* _tmp0_;
	ValaSourceReference* _tmp1_;
	gboolean _tmp6_;
	gboolean _tmp7_;
	gboolean _tmp15_ = FALSE;
	gboolean _tmp18_ = FALSE;
	gboolean _tmp19_ = FALSE;
	gboolean _tmp20_;
	gboolean _tmp21_;
	gboolean result = FALSE;
	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);
	if (vala_ccode_file_add_declaration (decl_space, name)) {
		result = TRUE;
		return result;
	}
	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		ValaSourceReference* _tmp2_;
		ValaSourceReference* _tmp3_;
		ValaSourceFile* _tmp4_;
		ValaSourceFile* _tmp5_;
		_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_source_reference_get_file (_tmp3_);
		_tmp5_ = _tmp4_;
		vala_source_file_set_used (_tmp5_, TRUE);
	}
	_tmp6_ = vala_symbol_get_anonymous (sym);
	_tmp7_ = _tmp6_;
	if (_tmp7_) {
		gboolean _tmp8_ = FALSE;
		gboolean _tmp9_;
		gboolean _tmp10_;
		_tmp9_ = vala_ccode_file_get_is_header (decl_space);
		_tmp10_ = _tmp9_;
		if (!_tmp10_) {
			ValaCodeContext* _tmp11_;
			ValaCodeContext* _tmp12_;
			gboolean _tmp13_;
			gboolean _tmp14_;
			_tmp11_ = vala_code_context_get ();
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_code_context_get_use_header (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp8_ = _tmp14_;
			_vala_code_context_unref0 (_tmp12_);
		} else {
			_tmp8_ = FALSE;
		}
		result = _tmp8_;
		return result;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_CONSTANT)) {
		ValaExpression* _tmp16_;
		ValaExpression* _tmp17_;
		_tmp16_ = vala_constant_get_value (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant));
		_tmp17_ = _tmp16_;
		_tmp15_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_INITIALIZER_LIST);
	} else {
		_tmp15_ = FALSE;
	}
	if (_tmp15_) {
		result = FALSE;
		return result;
	}
	_tmp20_ = vala_symbol_get_external_package (sym);
	_tmp21_ = _tmp20_;
	if (_tmp21_) {
		_tmp19_ = TRUE;
	} else {
		gboolean _tmp22_ = FALSE;
		gboolean _tmp23_ = FALSE;
		gboolean _tmp24_;
		gboolean _tmp25_;
		_tmp24_ = vala_ccode_file_get_is_header (decl_space);
		_tmp25_ = _tmp24_;
		if (!_tmp25_) {
			ValaCodeContext* _tmp26_;
			ValaCodeContext* _tmp27_;
			gboolean _tmp28_;
			gboolean _tmp29_;
			_tmp26_ = vala_code_context_get ();
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_code_context_get_use_header (_tmp27_);
			_tmp29_ = _tmp28_;
			_tmp23_ = _tmp29_;
			_vala_code_context_unref0 (_tmp27_);
		} else {
			_tmp23_ = FALSE;
		}
		if (_tmp23_) {
			_tmp22_ = !vala_symbol_is_internal_symbol (sym);
		} else {
			_tmp22_ = FALSE;
		}
		_tmp19_ = _tmp22_;
	}
	if (_tmp19_) {
		_tmp18_ = TRUE;
	} else {
		gboolean _tmp30_ = FALSE;
		gboolean _tmp31_;
		gboolean _tmp32_;
		_tmp31_ = vala_symbol_get_is_extern (sym);
		_tmp32_ = _tmp31_;
		if (_tmp32_) {
			gchar* _tmp33_;
			gchar* _tmp34_;
			gint _tmp35_;
			gint _tmp36_;
			_tmp33_ = vala_get_ccode_header_filenames (sym);
			_tmp34_ = _tmp33_;
			_tmp35_ = strlen (_tmp34_);
			_tmp36_ = _tmp35_;
			_tmp30_ = _tmp36_ > 0;
			_g_free0 (_tmp34_);
		} else {
			_tmp30_ = FALSE;
		}
		_tmp18_ = _tmp30_;
	}
	if (_tmp18_) {
		gchar* _tmp37_;
		gchar* _tmp38_;
		gchar** _tmp39_;
		gchar** _tmp40_;
		gchar** _tmp41_;
		gint _tmp41__length1;
		gchar* _tmp43_;
		gchar* _tmp44_;
		gchar** _tmp45_;
		gchar** _tmp46_;
		gchar** _tmp47_;
		gint _tmp47__length1;
		_tmp37_ = vala_get_ccode_feature_test_macros (sym);
		_tmp38_ = _tmp37_;
		_tmp40_ = _tmp39_ = g_strsplit (_tmp38_, ",", 0);
		_tmp41_ = _tmp40_;
		_tmp41__length1 = _vala_array_length (_tmp39_);
		_g_free0 (_tmp38_);
		{
			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 = _tmp41_;
			feature_test_macro_collection_length1 = _tmp41__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* _tmp42_;
					_tmp42_ = feature_test_macro;
					vala_ccode_file_add_feature_test_macro (decl_space, _tmp42_);
				}
			}
			feature_test_macro_collection = (_vala_array_free (feature_test_macro_collection, feature_test_macro_collection_length1, (GDestroyNotify) g_free), NULL);
		}
		_tmp43_ = vala_get_ccode_header_filenames (sym);
		_tmp44_ = _tmp43_;
		_tmp46_ = _tmp45_ = g_strsplit (_tmp44_, ",", 0);
		_tmp47_ = _tmp46_;
		_tmp47__length1 = _vala_array_length (_tmp45_);
		_g_free0 (_tmp44_);
		{
			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 = _tmp47_;
			header_filename_collection_length1 = _tmp47__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 _tmp48_ = FALSE;
					gboolean _tmp49_;
					gboolean _tmp50_;
					const gchar* _tmp59_;
					_tmp49_ = vala_symbol_get_is_extern (sym);
					_tmp50_ = _tmp49_;
					if (!_tmp50_) {
						gboolean _tmp51_ = FALSE;
						gboolean _tmp52_;
						gboolean _tmp53_;
						_tmp52_ = vala_symbol_get_external_package (sym);
						_tmp53_ = _tmp52_;
						if (!_tmp53_) {
							_tmp51_ = TRUE;
						} else {
							gboolean _tmp54_ = FALSE;
							gboolean _tmp55_;
							gboolean _tmp56_;
							_tmp55_ = vala_symbol_get_external_package (sym);
							_tmp56_ = _tmp55_;
							if (_tmp56_) {
								gboolean _tmp57_;
								gboolean _tmp58_;
								_tmp57_ = vala_symbol_get_from_commandline (sym);
								_tmp58_ = _tmp57_;
								_tmp54_ = _tmp58_;
							} else {
								_tmp54_ = FALSE;
							}
							_tmp51_ = _tmp54_;
						}
						_tmp48_ = _tmp51_;
					} else {
						_tmp48_ = FALSE;
					}
					_tmp59_ = header_filename;
					vala_ccode_file_add_include (decl_space, _tmp59_, _tmp48_);
				}
			}
			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;
	}
}

ValaCCodeIdentifier*
vala_ccode_base_module_get_value_setter_function (ValaCCodeBaseModule* self,
                                                  ValaDataType* type_reference)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaCCodeIdentifier* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type_reference != NULL, NULL);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type_reference, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type_reference) : NULL);
	array_type = _tmp0_;
	_tmp1_ = vala_data_type_get_data_type (type_reference);
	_tmp2_ = _tmp1_;
	if (_tmp2_ != NULL) {
		ValaTypeSymbol* _tmp3_;
		ValaTypeSymbol* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		ValaCCodeIdentifier* _tmp7_;
		ValaCCodeIdentifier* _tmp8_;
		_tmp3_ = vala_data_type_get_data_type (type_reference);
		_tmp4_ = _tmp3_;
		_tmp5_ = vala_get_ccode_set_value_function ((ValaCodeNode*) _tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_ccode_identifier_new (_tmp6_);
		_tmp8_ = _tmp7_;
		_g_free0 (_tmp6_);
		result = _tmp8_;
		_vala_code_node_unref0 (array_type);
		return result;
	} else {
		gboolean _tmp9_ = FALSE;
		ValaArrayType* _tmp10_;
		_tmp10_ = array_type;
		if (_tmp10_ != NULL) {
			ValaArrayType* _tmp11_;
			ValaDataType* _tmp12_;
			ValaDataType* _tmp13_;
			ValaTypeSymbol* _tmp14_;
			ValaTypeSymbol* _tmp15_;
			ValaDataType* _tmp16_;
			ValaTypeSymbol* _tmp17_;
			ValaTypeSymbol* _tmp18_;
			_tmp11_ = array_type;
			_tmp12_ = vala_array_type_get_element_type (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_data_type_get_data_type (_tmp13_);
			_tmp15_ = _tmp14_;
			_tmp16_ = self->string_type;
			_tmp17_ = vala_data_type_get_data_type (_tmp16_);
			_tmp18_ = _tmp17_;
			_tmp9_ = _tmp15_ == _tmp18_;
		} else {
			_tmp9_ = FALSE;
		}
		if (_tmp9_) {
			ValaCCodeIdentifier* _tmp19_;
			_tmp19_ = vala_ccode_identifier_new ("g_value_set_boxed");
			result = _tmp19_;
			_vala_code_node_unref0 (array_type);
			return result;
		} else {
			ValaCCodeIdentifier* _tmp20_;
			_tmp20_ = vala_ccode_identifier_new ("g_value_set_pointer");
			result = _tmp20_;
			_vala_code_node_unref0 (array_type);
			return result;
		}
	}
	_vala_code_node_unref0 (array_type);
}

ValaCCodeIdentifier*
vala_ccode_base_module_get_value_taker_function (ValaCCodeBaseModule* self,
                                                 ValaDataType* type_reference)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaCCodeIdentifier* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type_reference != NULL, NULL);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type_reference, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type_reference) : NULL);
	array_type = _tmp0_;
	_tmp1_ = vala_data_type_get_data_type (type_reference);
	_tmp2_ = _tmp1_;
	if (_tmp2_ != NULL) {
		ValaTypeSymbol* _tmp3_;
		ValaTypeSymbol* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		ValaCCodeIdentifier* _tmp7_;
		ValaCCodeIdentifier* _tmp8_;
		_tmp3_ = vala_data_type_get_data_type (type_reference);
		_tmp4_ = _tmp3_;
		_tmp5_ = vala_get_ccode_take_value_function ((ValaCodeNode*) _tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_ccode_identifier_new (_tmp6_);
		_tmp8_ = _tmp7_;
		_g_free0 (_tmp6_);
		result = _tmp8_;
		_vala_code_node_unref0 (array_type);
		return result;
	} else {
		gboolean _tmp9_ = FALSE;
		ValaArrayType* _tmp10_;
		_tmp10_ = array_type;
		if (_tmp10_ != NULL) {
			ValaArrayType* _tmp11_;
			ValaDataType* _tmp12_;
			ValaDataType* _tmp13_;
			ValaTypeSymbol* _tmp14_;
			ValaTypeSymbol* _tmp15_;
			ValaDataType* _tmp16_;
			ValaTypeSymbol* _tmp17_;
			ValaTypeSymbol* _tmp18_;
			_tmp11_ = array_type;
			_tmp12_ = vala_array_type_get_element_type (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_data_type_get_data_type (_tmp13_);
			_tmp15_ = _tmp14_;
			_tmp16_ = self->string_type;
			_tmp17_ = vala_data_type_get_data_type (_tmp16_);
			_tmp18_ = _tmp17_;
			_tmp9_ = _tmp15_ == _tmp18_;
		} else {
			_tmp9_ = FALSE;
		}
		if (_tmp9_) {
			ValaCCodeIdentifier* _tmp19_;
			_tmp19_ = vala_ccode_identifier_new ("g_value_take_boxed");
			result = _tmp19_;
			_vala_code_node_unref0 (array_type);
			return result;
		} else {
			ValaCCodeIdentifier* _tmp20_;
			_tmp20_ = vala_ccode_identifier_new ("g_value_set_pointer");
			result = _tmp20_;
			_vala_code_node_unref0 (array_type);
			return result;
		}
	}
	_vala_code_node_unref0 (array_type);
}

static ValaCCodeIdentifier*
vala_ccode_base_module_get_value_getter_function (ValaCCodeBaseModule* self,
                                                  ValaDataType* type_reference)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaCCodeIdentifier* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type_reference != NULL, NULL);
	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type_reference, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type_reference) : NULL);
	array_type = _tmp0_;
	_tmp1_ = vala_data_type_get_data_type (type_reference);
	_tmp2_ = _tmp1_;
	if (_tmp2_ != NULL) {
		ValaTypeSymbol* _tmp3_;
		ValaTypeSymbol* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		ValaCCodeIdentifier* _tmp7_;
		ValaCCodeIdentifier* _tmp8_;
		_tmp3_ = vala_data_type_get_data_type (type_reference);
		_tmp4_ = _tmp3_;
		_tmp5_ = vala_get_ccode_get_value_function ((ValaCodeNode*) _tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_ccode_identifier_new (_tmp6_);
		_tmp8_ = _tmp7_;
		_g_free0 (_tmp6_);
		result = _tmp8_;
		_vala_code_node_unref0 (array_type);
		return result;
	} else {
		gboolean _tmp9_ = FALSE;
		ValaArrayType* _tmp10_;
		_tmp10_ = array_type;
		if (_tmp10_ != NULL) {
			ValaArrayType* _tmp11_;
			ValaDataType* _tmp12_;
			ValaDataType* _tmp13_;
			ValaTypeSymbol* _tmp14_;
			ValaTypeSymbol* _tmp15_;
			ValaDataType* _tmp16_;
			ValaTypeSymbol* _tmp17_;
			ValaTypeSymbol* _tmp18_;
			_tmp11_ = array_type;
			_tmp12_ = vala_array_type_get_element_type (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_data_type_get_data_type (_tmp13_);
			_tmp15_ = _tmp14_;
			_tmp16_ = self->string_type;
			_tmp17_ = vala_data_type_get_data_type (_tmp16_);
			_tmp18_ = _tmp17_;
			_tmp9_ = _tmp15_ == _tmp18_;
		} else {
			_tmp9_ = FALSE;
		}
		if (_tmp9_) {
			ValaCCodeIdentifier* _tmp19_;
			_tmp19_ = vala_ccode_identifier_new ("g_value_get_boxed");
			result = _tmp19_;
			_vala_code_node_unref0 (array_type);
			return result;
		} else {
			ValaCCodeIdentifier* _tmp20_;
			_tmp20_ = vala_ccode_identifier_new ("g_value_get_pointer");
			result = _tmp20_;
			_vala_code_node_unref0 (array_type);
			return result;
		}
	}
	_vala_code_node_unref0 (array_type);
}

static void
vala_ccode_base_module_real_append_vala_array_free (ValaCCodeBaseModule* self)
{
}

void
vala_ccode_base_module_append_vala_array_free (ValaCCodeBaseModule* self)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_vala_array_length (self);
}

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_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* _tmp35_;
	ValaList* _tmp36_;
	ValaCCodeFile* _tmp50_;
	gchar* _tmp51_;
	gchar* _tmp52_;
	const gchar* _tmp53_;
	const gchar* _tmp54_;
	ValaCodeContext* _tmp55_;
	gboolean _tmp56_;
	gboolean _tmp57_;
	ValaCodeContext* _tmp58_;
	gboolean _tmp59_;
	gboolean _tmp60_;
	gboolean _tmp61_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (source_file != NULL);
	_tmp0_ = vala_ccode_file_new (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_clear_mutex = 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_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");
	}
	_tmp35_ = vala_source_file_get_comments (source_file);
	comments = _tmp35_;
	_tmp36_ = comments;
	if (_tmp36_ != NULL) {
		{
			ValaList* _comment_list = NULL;
			ValaList* _tmp37_;
			ValaList* _tmp38_;
			gint _comment_size = 0;
			ValaList* _tmp39_;
			gint _tmp40_;
			gint _tmp41_;
			gint _comment_index = 0;
			_tmp37_ = comments;
			_tmp38_ = _vala_iterable_ref0 (_tmp37_);
			_comment_list = _tmp38_;
			_tmp39_ = _comment_list;
			_tmp40_ = vala_collection_get_size ((ValaCollection*) _tmp39_);
			_tmp41_ = _tmp40_;
			_comment_size = _tmp41_;
			_comment_index = -1;
			while (TRUE) {
				ValaComment* comment = NULL;
				ValaList* _tmp42_;
				gpointer _tmp43_;
				ValaCCodeComment* ccomment = NULL;
				ValaComment* _tmp44_;
				const gchar* _tmp45_;
				const gchar* _tmp46_;
				ValaCCodeComment* _tmp47_;
				ValaCCodeFile* _tmp48_;
				ValaCCodeComment* _tmp49_;
				_comment_index = _comment_index + 1;
				if (!(_comment_index < _comment_size)) {
					break;
				}
				_tmp42_ = _comment_list;
				_tmp43_ = vala_list_get (_tmp42_, _comment_index);
				comment = (ValaComment*) _tmp43_;
				_tmp44_ = comment;
				_tmp45_ = vala_comment_get_content (_tmp44_);
				_tmp46_ = _tmp45_;
				_tmp47_ = vala_ccode_comment_new (_tmp46_);
				ccomment = _tmp47_;
				_tmp48_ = self->cfile;
				_tmp49_ = ccomment;
				vala_ccode_file_add_comment (_tmp48_, _tmp49_);
				_vala_ccode_node_unref0 (ccomment);
				_vala_comment_unref0 (comment);
			}
			_vala_iterable_unref0 (_comment_list);
		}
	}
	_tmp50_ = self->cfile;
	_tmp51_ = vala_source_file_get_csource_filename (source_file);
	_tmp52_ = _tmp51_;
	_tmp53_ = vala_source_file_get_filename (source_file);
	_tmp54_ = _tmp53_;
	_tmp55_ = self->priv->_context;
	_tmp56_ = vala_code_context_get_version_header (_tmp55_);
	_tmp57_ = _tmp56_;
	_tmp58_ = self->priv->_context;
	_tmp59_ = vala_code_context_get_debug (_tmp58_);
	_tmp60_ = _tmp59_;
	_tmp61_ = !vala_ccode_file_store (_tmp50_, _tmp52_, _tmp54_, _tmp57_, _tmp60_, NULL, NULL);
	_g_free0 (_tmp52_);
	if (_tmp61_) {
		gchar* _tmp62_;
		gchar* _tmp63_;
		gchar* _tmp64_;
		gchar* _tmp65_;
		_tmp62_ = vala_source_file_get_csource_filename (source_file);
		_tmp63_ = _tmp62_;
		_tmp64_ = g_strdup_printf ("unable to open `%s' for writing", _tmp63_);
		_tmp65_ = _tmp64_;
		vala_report_error (NULL, _tmp65_);
		_g_free0 (_tmp65_);
		_g_free0 (_tmp63_);
	}
	_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_;
	ValaCCodeModifiers _tmp7_ = 0U;
	ValaVersionAttribute* _tmp8_;
	ValaVersionAttribute* _tmp9_;
	gboolean _tmp10_;
	gboolean _tmp11_;
	ValaCCodeEnum* _tmp12_;
	ValaCCodeEnum* _tmp13_;
	ValaCCodeModifiers _tmp14_;
	ValaCCodeModifiers _tmp15_;
	ValaCCodeFile* current_cfile = NULL;
	ValaCCodeFile* _tmp16_;
	ValaCCodeFile* _tmp17_;
	ValaCCodeFile* _tmp18_;
	gint flag_shift = 0;
	ValaCCodeFile* _tmp63_;
	ValaCCodeFile* _tmp64_;
	ValaCCodeEnum* _tmp65_;
	ValaCCodeNewline* _tmp66_;
	ValaCCodeNewline* _tmp67_;
	gboolean _tmp68_ = FALSE;
	ValaCodeContext* _tmp69_;
	ValaProfile _tmp70_;
	ValaProfile _tmp71_;
	ValaCCodeNewline* _tmp72_;
	ValaCCodeNewline* _tmp73_;
	gchar* fun_name = NULL;
	gchar* _tmp74_;
	gchar* macro = NULL;
	const gchar* _tmp75_;
	gchar* _tmp76_;
	gchar* _tmp77_;
	gchar* _tmp78_;
	const gchar* _tmp79_;
	ValaCCodeMacroReplacement* _tmp80_;
	ValaCCodeMacroReplacement* _tmp81_;
	ValaCCodeFunction* regfun = NULL;
	const gchar* _tmp82_;
	ValaCCodeFunction* _tmp83_;
	ValaCCodeFunction* _tmp84_;
	ValaCCodeFunction* _tmp97_;
	gboolean result = FALSE;
	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_;
	_tmp8_ = vala_symbol_get_version ((ValaSymbol*) en);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_version_attribute_get_deprecated (_tmp9_);
	_tmp11_ = _tmp10_;
	if (_tmp11_) {
		_tmp7_ = VALA_CCODE_MODIFIERS_DEPRECATED;
	} else {
		_tmp7_ = 0;
	}
	_tmp12_ = cenum;
	_tmp13_ = cenum;
	_tmp14_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp13_);
	_tmp15_ = _tmp14_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp13_, _tmp15_ | _tmp7_);
	_tmp16_ = self->cfile;
	_tmp17_ = _vala_ccode_file_ref0 (_tmp16_);
	current_cfile = _tmp17_;
	_tmp18_ = _vala_ccode_file_ref0 (decl_space);
	_vala_ccode_file_unref0 (self->cfile);
	self->cfile = _tmp18_;
	flag_shift = 0;
	{
		ValaList* _ev_list = NULL;
		ValaList* _tmp19_;
		gint _ev_size = 0;
		ValaList* _tmp20_;
		gint _tmp21_;
		gint _tmp22_;
		gint _ev_index = 0;
		_tmp19_ = vala_enum_get_values (en);
		_ev_list = _tmp19_;
		_tmp20_ = _ev_list;
		_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
		_tmp22_ = _tmp21_;
		_ev_size = _tmp22_;
		_ev_index = -1;
		while (TRUE) {
			ValaEnumValue* ev = NULL;
			ValaList* _tmp23_;
			gpointer _tmp24_;
			ValaCCodeEnumValue* c_ev = NULL;
			ValaEnumValue* _tmp25_;
			ValaExpression* _tmp26_;
			ValaExpression* _tmp27_;
			ValaCCodeModifiers _tmp51_ = 0U;
			ValaEnumValue* _tmp52_;
			ValaVersionAttribute* _tmp53_;
			ValaVersionAttribute* _tmp54_;
			gboolean _tmp55_;
			gboolean _tmp56_;
			ValaCCodeEnumValue* _tmp57_;
			ValaCCodeEnumValue* _tmp58_;
			ValaCCodeModifiers _tmp59_;
			ValaCCodeModifiers _tmp60_;
			ValaCCodeEnum* _tmp61_;
			ValaCCodeEnumValue* _tmp62_;
			_ev_index = _ev_index + 1;
			if (!(_ev_index < _ev_size)) {
				break;
			}
			_tmp23_ = _ev_list;
			_tmp24_ = vala_list_get (_tmp23_, _ev_index);
			ev = (ValaEnumValue*) _tmp24_;
			_tmp25_ = ev;
			_tmp26_ = vala_constant_get_value ((ValaConstant*) _tmp25_);
			_tmp27_ = _tmp26_;
			if (_tmp27_ == NULL) {
				ValaEnumValue* _tmp28_;
				gchar* _tmp29_;
				gchar* _tmp30_;
				ValaCCodeEnumValue* _tmp31_;
				gboolean _tmp32_;
				gboolean _tmp33_;
				_tmp28_ = ev;
				_tmp29_ = vala_get_ccode_name ((ValaCodeNode*) _tmp28_);
				_tmp30_ = _tmp29_;
				_tmp31_ = vala_ccode_enum_value_new (_tmp30_, NULL);
				_vala_ccode_node_unref0 (c_ev);
				c_ev = _tmp31_;
				_g_free0 (_tmp30_);
				_tmp32_ = vala_enum_get_is_flags (en);
				_tmp33_ = _tmp32_;
				if (_tmp33_) {
					ValaCCodeEnumValue* _tmp34_;
					gchar* _tmp35_;
					gchar* _tmp36_;
					ValaCCodeConstant* _tmp37_;
					ValaCCodeConstant* _tmp38_;
					_tmp34_ = c_ev;
					_tmp35_ = g_strdup_printf ("1 << %d", flag_shift);
					_tmp36_ = _tmp35_;
					_tmp37_ = vala_ccode_constant_new (_tmp36_);
					_tmp38_ = _tmp37_;
					vala_ccode_enum_value_set_value (_tmp34_, (ValaCCodeExpression*) _tmp38_);
					_vala_ccode_node_unref0 (_tmp38_);
					_g_free0 (_tmp36_);
					flag_shift += 1;
				}
			} else {
				ValaEnumValue* _tmp39_;
				ValaExpression* _tmp40_;
				ValaExpression* _tmp41_;
				ValaEnumValue* _tmp42_;
				gchar* _tmp43_;
				gchar* _tmp44_;
				ValaEnumValue* _tmp45_;
				ValaExpression* _tmp46_;
				ValaExpression* _tmp47_;
				ValaCCodeExpression* _tmp48_;
				ValaCCodeExpression* _tmp49_;
				ValaCCodeEnumValue* _tmp50_;
				_tmp39_ = ev;
				_tmp40_ = vala_constant_get_value ((ValaConstant*) _tmp39_);
				_tmp41_ = _tmp40_;
				vala_code_node_emit ((ValaCodeNode*) _tmp41_, (ValaCodeGenerator*) self);
				_tmp42_ = ev;
				_tmp43_ = vala_get_ccode_name ((ValaCodeNode*) _tmp42_);
				_tmp44_ = _tmp43_;
				_tmp45_ = ev;
				_tmp46_ = vala_constant_get_value ((ValaConstant*) _tmp45_);
				_tmp47_ = _tmp46_;
				_tmp48_ = vala_ccode_base_module_get_cvalue (self, _tmp47_);
				_tmp49_ = _tmp48_;
				_tmp50_ = vala_ccode_enum_value_new (_tmp44_, _tmp49_);
				_vala_ccode_node_unref0 (c_ev);
				c_ev = _tmp50_;
				_vala_ccode_node_unref0 (_tmp49_);
				_g_free0 (_tmp44_);
			}
			_tmp52_ = ev;
			_tmp53_ = vala_symbol_get_version ((ValaSymbol*) _tmp52_);
			_tmp54_ = _tmp53_;
			_tmp55_ = vala_version_attribute_get_deprecated (_tmp54_);
			_tmp56_ = _tmp55_;
			if (_tmp56_) {
				_tmp51_ = VALA_CCODE_MODIFIERS_DEPRECATED;
			} else {
				_tmp51_ = 0;
			}
			_tmp57_ = c_ev;
			_tmp58_ = c_ev;
			_tmp59_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp58_);
			_tmp60_ = _tmp59_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp58_, _tmp60_ | _tmp51_);
			_tmp61_ = cenum;
			_tmp62_ = c_ev;
			vala_ccode_enum_add_value (_tmp61_, _tmp62_);
			_vala_ccode_node_unref0 (c_ev);
			_vala_code_node_unref0 (ev);
		}
		_vala_iterable_unref0 (_ev_list);
	}
	_tmp63_ = current_cfile;
	_tmp64_ = _vala_ccode_file_ref0 (_tmp63_);
	_vala_ccode_file_unref0 (self->cfile);
	self->cfile = _tmp64_;
	_tmp65_ = cenum;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp65_);
	_tmp66_ = vala_ccode_newline_new ();
	_tmp67_ = _tmp66_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp67_);
	_vala_ccode_node_unref0 (_tmp67_);
	_tmp69_ = self->priv->_context;
	_tmp70_ = vala_code_context_get_profile (_tmp69_);
	_tmp71_ = _tmp70_;
	if (_tmp71_ != VALA_PROFILE_GOBJECT) {
		_tmp68_ = TRUE;
	} else {
		_tmp68_ = !vala_get_ccode_has_type_id ((ValaTypeSymbol*) en);
	}
	if (_tmp68_) {
		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);
	_tmp72_ = vala_ccode_newline_new ();
	_tmp73_ = _tmp72_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp73_);
	_vala_ccode_node_unref0 (_tmp73_);
	_tmp74_ = vala_get_ccode_type_function ((ValaTypeSymbol*) en);
	fun_name = _tmp74_;
	_tmp75_ = fun_name;
	_tmp76_ = g_strdup_printf ("(%s ())", _tmp75_);
	macro = _tmp76_;
	_tmp77_ = vala_get_ccode_type_id ((ValaCodeNode*) en);
	_tmp78_ = _tmp77_;
	_tmp79_ = macro;
	_tmp80_ = vala_ccode_macro_replacement_new (_tmp78_, _tmp79_);
	_tmp81_ = _tmp80_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp81_);
	_vala_ccode_node_unref0 (_tmp81_);
	_g_free0 (_tmp78_);
	_tmp82_ = fun_name;
	_tmp83_ = vala_ccode_function_new (_tmp82_, "GType");
	regfun = _tmp83_;
	_tmp84_ = regfun;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp84_, VALA_CCODE_MODIFIERS_CONST);
	if (vala_symbol_is_private_symbol ((ValaSymbol*) en)) {
		ValaCCodeFunction* _tmp85_;
		ValaCCodeFunction* _tmp86_;
		ValaCCodeModifiers _tmp87_;
		ValaCCodeModifiers _tmp88_;
		_tmp85_ = regfun;
		_tmp86_ = regfun;
		_tmp87_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp86_);
		_tmp88_ = _tmp87_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp86_, _tmp88_ | (VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_UNUSED));
	} else {
		gboolean _tmp89_ = FALSE;
		ValaCodeContext* _tmp90_;
		gboolean _tmp91_;
		gboolean _tmp92_;
		_tmp90_ = self->priv->_context;
		_tmp91_ = vala_code_context_get_hide_internal (_tmp90_);
		_tmp92_ = _tmp91_;
		if (_tmp92_) {
			_tmp89_ = vala_symbol_is_internal_symbol ((ValaSymbol*) en);
		} else {
			_tmp89_ = FALSE;
		}
		if (_tmp89_) {
			ValaCCodeFunction* _tmp93_;
			ValaCCodeFunction* _tmp94_;
			ValaCCodeModifiers _tmp95_;
			ValaCCodeModifiers _tmp96_;
			_tmp93_ = regfun;
			_tmp94_ = regfun;
			_tmp95_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp94_);
			_tmp96_ = _tmp95_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp94_, _tmp96_ | VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp97_ = regfun;
	vala_ccode_file_add_function_declaration (decl_space, _tmp97_);
	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)
{
	g_return_val_if_fail (self != NULL, FALSE);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_enum_declaration (self, en, decl_space);
}

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 (ValaCCodeBaseModule* self,
                                                   ValaInitializerList* initializer_list,
                                                   gint* sizes,
                                                   gint sizes_length1,
                                                   gint rank)
{
	gint _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	g_return_if_fail (self != NULL);
	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) {
			ValaExpression* expr = NULL;
			ValaList* _tmp8_;
			gpointer _tmp9_;
			gboolean _tmp10_ = FALSE;
			ValaExpression* _tmp11_;
			_expr_index = _expr_index + 1;
			if (!(_expr_index < _expr_size)) {
				break;
			}
			_tmp8_ = _expr_list;
			_tmp9_ = vala_list_get (_tmp8_, _expr_index);
			expr = (ValaExpression*) _tmp9_;
			_tmp11_ = expr;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_INITIALIZER_LIST)) {
				ValaExpression* _tmp12_;
				ValaDataType* _tmp13_;
				ValaDataType* _tmp14_;
				_tmp12_ = expr;
				_tmp13_ = vala_expression_get_target_type ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_INITIALIZER_LIST, ValaInitializerList));
				_tmp14_ = _tmp13_;
				_tmp10_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp14_, VALA_TYPE_ARRAY_TYPE);
			} else {
				_tmp10_ = FALSE;
			}
			if (_tmp10_) {
				ValaExpression* _tmp15_;
				_tmp15_ = expr;
				vala_ccode_base_module_constant_array_ranks_sizes (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_INITIALIZER_LIST, ValaInitializerList), sizes, (gint) sizes_length1, rank);
			}
			_vala_code_node_unref0 (expr);
		}
		_vala_iterable_unref0 (_expr_list);
	}
}

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_) {
		_tmp5_ = TRUE;
	} else {
		gboolean _tmp8_ = FALSE;
		ValaSourceFileType _tmp9_;
		ValaSourceFileType _tmp10_;
		_tmp9_ = vala_symbol_get_source_type ((ValaSymbol*) c);
		_tmp10_ = _tmp9_;
		if (_tmp10_ == VALA_SOURCE_FILE_TYPE_FAST) {
			ValaExpression* _tmp11_;
			ValaExpression* _tmp12_;
			_tmp11_ = vala_constant_get_value (c);
			_tmp12_ = _tmp11_;
			_tmp8_ = _tmp12_ != NULL;
		} else {
			_tmp8_ = FALSE;
		}
		_tmp5_ = _tmp8_;
	}
	if (_tmp5_) {
		ValaDataType* _tmp13_;
		ValaDataType* _tmp14_;
		ValaExpression* _tmp15_;
		ValaExpression* _tmp16_;
		ValaInitializerList* initializer_list = NULL;
		ValaExpression* _tmp17_;
		ValaExpression* _tmp18_;
		ValaInitializerList* _tmp19_;
		ValaInitializerList* _tmp20_;
		_tmp13_ = vala_constant_get_type_reference (c);
		_tmp14_ = _tmp13_;
		vala_ccode_base_module_generate_type_declaration (self, _tmp14_, decl_space);
		_tmp15_ = vala_constant_get_value (c);
		_tmp16_ = _tmp15_;
		vala_code_node_emit ((ValaCodeNode*) _tmp16_, (ValaCodeGenerator*) self);
		_tmp17_ = vala_constant_get_value (c);
		_tmp18_ = _tmp17_;
		_tmp19_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_INITIALIZER_LIST) ? ((ValaInitializerList*) _tmp18_) : NULL);
		initializer_list = _tmp19_;
		_tmp20_ = initializer_list;
		if (_tmp20_ != NULL) {
			ValaCCodeDeclaration* _cdecl_ = NULL;
			ValaDataType* _tmp21_;
			ValaDataType* _tmp22_;
			gchar* _tmp23_;
			gchar* _tmp24_;
			ValaCCodeDeclaration* _tmp25_;
			ValaCCodeDeclaration* _tmp26_;
			gchar* arr = NULL;
			gchar* _tmp27_;
			ValaDataType* _tmp28_;
			ValaDataType* _tmp29_;
			ValaCCodeExpression* cinitializer = NULL;
			ValaExpression* _tmp50_;
			ValaExpression* _tmp51_;
			ValaCCodeExpression* _tmp52_;
			ValaCCodeDeclaration* _tmp53_;
			gchar* _tmp54_;
			gchar* _tmp55_;
			const gchar* _tmp56_;
			gchar* _tmp57_;
			gchar* _tmp58_;
			ValaCCodeExpression* _tmp59_;
			ValaCCodeVariableDeclarator* _tmp60_;
			ValaCCodeVariableDeclarator* _tmp61_;
			ValaCCodeDeclaration* _tmp64_;
			_tmp21_ = vala_constant_get_type_reference (c);
			_tmp22_ = _tmp21_;
			_tmp23_ = vala_get_ccode_const_name ((ValaCodeNode*) _tmp22_);
			_tmp24_ = _tmp23_;
			_tmp25_ = vala_ccode_declaration_new (_tmp24_);
			_tmp26_ = _tmp25_;
			_g_free0 (_tmp24_);
			_cdecl_ = _tmp26_;
			_tmp27_ = g_strdup ("");
			arr = _tmp27_;
			_tmp28_ = vala_constant_get_type_reference (c);
			_tmp29_ = _tmp28_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* array = NULL;
				ValaDataType* _tmp30_;
				ValaDataType* _tmp31_;
				ValaArrayType* _tmp32_;
				gint* sizes = NULL;
				ValaArrayType* _tmp33_;
				gint _tmp34_;
				gint _tmp35_;
				gint* _tmp36_;
				gint sizes_length1;
				gint _sizes_size_;
				ValaInitializerList* _tmp37_;
				gint* _tmp38_;
				gint _tmp38__length1;
				_tmp30_ = vala_constant_get_type_reference (c);
				_tmp31_ = _tmp30_;
				_tmp32_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				array = _tmp32_;
				_tmp33_ = array;
				_tmp34_ = vala_array_type_get_rank (_tmp33_);
				_tmp35_ = _tmp34_;
				_tmp36_ = g_new0 (gint, _tmp35_);
				sizes = _tmp36_;
				sizes_length1 = _tmp35_;
				_sizes_size_ = sizes_length1;
				_tmp37_ = initializer_list;
				_tmp38_ = sizes;
				_tmp38__length1 = sizes_length1;
				vala_ccode_base_module_constant_array_ranks_sizes (self, _tmp37_, _tmp38_, (gint) _tmp38__length1, 0);
				{
					gint i = 0;
					i = 0;
					{
						gboolean _tmp39_ = FALSE;
						_tmp39_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp41_;
							gint _tmp42_;
							gint _tmp43_;
							const gchar* _tmp44_;
							gint* _tmp45_;
							gint _tmp45__length1;
							gint _tmp46_;
							gchar* _tmp47_;
							gchar* _tmp48_;
							gchar* _tmp49_;
							if (!_tmp39_) {
								gint _tmp40_;
								_tmp40_ = i;
								i = _tmp40_ + 1;
							}
							_tmp39_ = FALSE;
							_tmp41_ = array;
							_tmp42_ = vala_array_type_get_rank (_tmp41_);
							_tmp43_ = _tmp42_;
							if (!(i < _tmp43_)) {
								break;
							}
							_tmp44_ = arr;
							_tmp45_ = sizes;
							_tmp45__length1 = sizes_length1;
							_tmp46_ = _tmp45_[i];
							_tmp47_ = g_strdup_printf ("[%d]", _tmp46_);
							_tmp48_ = _tmp47_;
							_tmp49_ = g_strconcat (_tmp44_, _tmp48_, NULL);
							_g_free0 (arr);
							arr = _tmp49_;
							_g_free0 (_tmp48_);
						}
					}
				}
				sizes = (g_free (sizes), NULL);
				_vala_code_node_unref0 (array);
			}
			_tmp50_ = vala_constant_get_value (c);
			_tmp51_ = _tmp50_;
			_tmp52_ = vala_ccode_base_module_get_cvalue (self, _tmp51_);
			cinitializer = _tmp52_;
			if (!definition) {
				_vala_ccode_node_unref0 (cinitializer);
				cinitializer = NULL;
			}
			_tmp53_ = _cdecl_;
			_tmp54_ = vala_get_ccode_name ((ValaCodeNode*) c);
			_tmp55_ = _tmp54_;
			_tmp56_ = arr;
			_tmp57_ = g_strdup_printf ("%s%s", _tmp55_, _tmp56_);
			_tmp58_ = _tmp57_;
			_tmp59_ = cinitializer;
			_tmp60_ = vala_ccode_variable_declarator_new (_tmp58_, _tmp59_, NULL);
			_tmp61_ = _tmp60_;
			vala_ccode_declaration_add_declarator (_tmp53_, (ValaCCodeDeclarator*) _tmp61_);
			_vala_ccode_node_unref0 (_tmp61_);
			_g_free0 (_tmp58_);
			_g_free0 (_tmp55_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) c)) {
				ValaCCodeDeclaration* _tmp62_;
				_tmp62_ = _cdecl_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp62_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				ValaCCodeDeclaration* _tmp63_;
				_tmp63_ = _cdecl_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp63_, VALA_CCODE_MODIFIERS_EXTERN);
			}
			_tmp64_ = _cdecl_;
			vala_ccode_file_add_constant_declaration (decl_space, (ValaCCodeNode*) _tmp64_);
			_vala_ccode_node_unref0 (cinitializer);
			_g_free0 (arr);
			_vala_ccode_node_unref0 (_cdecl_);
		} else {
			ValaCCodeMacroReplacement* cdefine = NULL;
			gchar* _tmp65_;
			gchar* _tmp66_;
			ValaExpression* _tmp67_;
			ValaExpression* _tmp68_;
			ValaCCodeExpression* _tmp69_;
			ValaCCodeExpression* _tmp70_;
			ValaCCodeMacroReplacement* _tmp71_;
			ValaCCodeMacroReplacement* _tmp72_;
			ValaCCodeMacroReplacement* _tmp73_;
			_tmp65_ = vala_get_ccode_name ((ValaCodeNode*) c);
			_tmp66_ = _tmp65_;
			_tmp67_ = vala_constant_get_value (c);
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_ccode_base_module_get_cvalue (self, _tmp68_);
			_tmp70_ = _tmp69_;
			_tmp71_ = vala_ccode_macro_replacement_new_with_expression (_tmp66_, _tmp70_);
			_tmp72_ = _tmp71_;
			_vala_ccode_node_unref0 (_tmp70_);
			_g_free0 (_tmp66_);
			cdefine = _tmp72_;
			_tmp73_ = cdefine;
			vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp73_);
			_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_;
		gchar* _tmp11_;
		gchar* arr = NULL;
		gchar* _tmp12_;
		ValaDataType* _tmp13_;
		ValaDataType* _tmp14_;
		ValaDataType* _tmp39_;
		ValaDataType* _tmp40_;
		ValaDataType* _tmp41_;
		ValaCCodeExpression* cinitializer = NULL;
		ValaExpression* _tmp44_;
		ValaExpression* _tmp45_;
		ValaCCodeExpression* _tmp46_;
		ValaCCodeFunction* _tmp47_;
		ValaCCodeFunction* _tmp48_;
		const gchar* _tmp49_;
		gchar* _tmp50_;
		gchar* _tmp51_;
		const gchar* _tmp52_;
		gchar* _tmp53_;
		gchar* _tmp54_;
		ValaCCodeExpression* _tmp55_;
		ValaCCodeVariableDeclarator* _tmp56_;
		ValaCCodeVariableDeclarator* _tmp57_;
		_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_ = vala_get_ccode_const_name ((ValaCodeNode*) _tmp10_);
		type_name = _tmp11_;
		_tmp12_ = g_strdup ("");
		arr = _tmp12_;
		_tmp13_ = vala_constant_get_type_reference (c);
		_tmp14_ = _tmp13_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp14_, VALA_TYPE_ARRAY_TYPE)) {
			ValaArrayType* array = NULL;
			ValaDataType* _tmp15_;
			ValaDataType* _tmp16_;
			ValaArrayType* _tmp17_;
			ValaInitializerList* initializer_list = NULL;
			ValaExpression* _tmp18_;
			ValaExpression* _tmp19_;
			ValaInitializerList* _tmp20_;
			ValaInitializerList* _tmp21_;
			_tmp15_ = vala_constant_get_type_reference (c);
			_tmp16_ = _tmp15_;
			_tmp17_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array = _tmp17_;
			_tmp18_ = vala_constant_get_value (c);
			_tmp19_ = _tmp18_;
			_tmp20_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_INITIALIZER_LIST) ? ((ValaInitializerList*) _tmp19_) : NULL);
			initializer_list = _tmp20_;
			_tmp21_ = initializer_list;
			if (_tmp21_ != NULL) {
				gint* sizes = NULL;
				ValaArrayType* _tmp22_;
				gint _tmp23_;
				gint _tmp24_;
				gint* _tmp25_;
				gint sizes_length1;
				gint _sizes_size_;
				ValaInitializerList* _tmp26_;
				gint* _tmp27_;
				gint _tmp27__length1;
				_tmp22_ = array;
				_tmp23_ = vala_array_type_get_rank (_tmp22_);
				_tmp24_ = _tmp23_;
				_tmp25_ = g_new0 (gint, _tmp24_);
				sizes = _tmp25_;
				sizes_length1 = _tmp24_;
				_sizes_size_ = sizes_length1;
				_tmp26_ = initializer_list;
				_tmp27_ = sizes;
				_tmp27__length1 = sizes_length1;
				vala_ccode_base_module_constant_array_ranks_sizes (self, _tmp26_, _tmp27_, (gint) _tmp27__length1, 0);
				{
					gint i = 0;
					i = 0;
					{
						gboolean _tmp28_ = FALSE;
						_tmp28_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp30_;
							gint _tmp31_;
							gint _tmp32_;
							const gchar* _tmp33_;
							gint* _tmp34_;
							gint _tmp34__length1;
							gint _tmp35_;
							gchar* _tmp36_;
							gchar* _tmp37_;
							gchar* _tmp38_;
							if (!_tmp28_) {
								gint _tmp29_;
								_tmp29_ = i;
								i = _tmp29_ + 1;
							}
							_tmp28_ = FALSE;
							_tmp30_ = array;
							_tmp31_ = vala_array_type_get_rank (_tmp30_);
							_tmp32_ = _tmp31_;
							if (!(i < _tmp32_)) {
								break;
							}
							_tmp33_ = arr;
							_tmp34_ = sizes;
							_tmp34__length1 = sizes_length1;
							_tmp35_ = _tmp34_[i];
							_tmp36_ = g_strdup_printf ("[%d]", _tmp35_);
							_tmp37_ = _tmp36_;
							_tmp38_ = g_strconcat (_tmp33_, _tmp37_, NULL);
							_g_free0 (arr);
							arr = _tmp38_;
							_g_free0 (_tmp37_);
						}
					}
				}
				sizes = (g_free (sizes), NULL);
			}
			_vala_code_node_unref0 (initializer_list);
			_vala_code_node_unref0 (array);
		}
		_tmp39_ = vala_constant_get_type_reference (c);
		_tmp40_ = _tmp39_;
		_tmp41_ = self->string_type;
		if (vala_data_type_compatible (_tmp40_, _tmp41_)) {
			gchar* _tmp42_;
			gchar* _tmp43_;
			_tmp42_ = g_strdup ("const char");
			_g_free0 (type_name);
			type_name = _tmp42_;
			_tmp43_ = g_strdup ("[]");
			_g_free0 (arr);
			arr = _tmp43_;
		}
		_tmp44_ = vala_constant_get_value (c);
		_tmp45_ = _tmp44_;
		_tmp46_ = vala_ccode_base_module_get_cvalue (self, _tmp45_);
		cinitializer = _tmp46_;
		_tmp47_ = vala_ccode_base_module_get_ccode (self);
		_tmp48_ = _tmp47_;
		_tmp49_ = type_name;
		_tmp50_ = vala_get_ccode_name ((ValaCodeNode*) c);
		_tmp51_ = _tmp50_;
		_tmp52_ = arr;
		_tmp53_ = g_strdup_printf ("%s%s", _tmp51_, _tmp52_);
		_tmp54_ = _tmp53_;
		_tmp55_ = cinitializer;
		_tmp56_ = vala_ccode_variable_declarator_new (_tmp54_, _tmp55_, NULL);
		_tmp57_ = _tmp56_;
		vala_ccode_function_add_declaration (_tmp48_, _tmp49_, (ValaCCodeDeclarator*) _tmp57_, VALA_CCODE_MODIFIERS_STATIC);
		_vala_ccode_node_unref0 (_tmp57_);
		_g_free0 (_tmp54_);
		_g_free0 (_tmp51_);
		_vala_ccode_node_unref0 (cinitializer);
		_g_free0 (arr);
		_g_free0 (type_name);
	} else {
		ValaCCodeFile* _tmp58_;
		_tmp58_ = self->cfile;
		vala_ccode_base_module_generate_constant_declaration (self, c, _tmp58_, TRUE);
		if (!vala_symbol_is_internal_symbol ((ValaSymbol*) c)) {
			ValaCCodeFile* _tmp59_;
			_tmp59_ = self->header_file;
			vala_ccode_base_module_generate_constant_declaration (self, c, _tmp59_, FALSE);
		}
		if (!vala_symbol_is_private_symbol ((ValaSymbol*) c)) {
			ValaCCodeFile* _tmp60_;
			_tmp60_ = self->internal_header_file;
			vala_ccode_base_module_generate_constant_declaration (self, c, _tmp60_, FALSE);
		}
	}
	vala_ccode_base_module_pop_line (self);
}

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

static void
vala_ccode_base_module_real_visit_formal_parameter (ValaCodeVisitor* base,
                                                    ValaParameter* p)
{
	ValaCCodeBaseModule * self;
	gboolean _tmp0_;
	gboolean _tmp1_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (p != NULL);
	_tmp0_ = vala_parameter_get_ellipsis (p);
	_tmp1_ = _tmp0_;
	if (!_tmp1_) {
		ValaDataType* _tmp2_;
		ValaDataType* _tmp3_;
		_tmp2_ = vala_variable_get_variable_type ((ValaVariable*) p);
		_tmp3_ = _tmp2_;
		vala_ccode_base_module_check_type (self, _tmp3_);
	}
}

static void
vala_ccode_base_module_real_visit_property (ValaCodeVisitor* base,
                                            ValaProperty* prop)
{
	ValaCCodeBaseModule * self;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaPropertyAccessor* _tmp2_;
	ValaPropertyAccessor* _tmp3_;
	ValaPropertyAccessor* _tmp6_;
	ValaPropertyAccessor* _tmp7_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (prop != NULL);
	vala_ccode_base_module_visit_member (self, (ValaSymbol*) prop);
	_tmp0_ = vala_property_get_property_type (prop);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_check_type (self, _tmp1_);
	_tmp2_ = vala_property_get_get_accessor (prop);
	_tmp3_ = _tmp2_;
	if (_tmp3_ != NULL) {
		ValaPropertyAccessor* _tmp4_;
		ValaPropertyAccessor* _tmp5_;
		_tmp4_ = vala_property_get_get_accessor (prop);
		_tmp5_ = _tmp4_;
		vala_code_node_accept ((ValaCodeNode*) _tmp5_, (ValaCodeVisitor*) self);
	}
	_tmp6_ = vala_property_get_set_accessor (prop);
	_tmp7_ = _tmp6_;
	if (_tmp7_ != NULL) {
		ValaPropertyAccessor* _tmp8_;
		ValaPropertyAccessor* _tmp9_;
		_tmp8_ = vala_property_get_set_accessor (prop);
		_tmp9_ = _tmp8_;
		vala_code_node_accept ((ValaCodeNode*) _tmp9_, (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_;
		ValaObjectTypeSymbol* _tmp2_;
		ValaObjectTypeSymbol* _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_object_type_get_type_symbol (_tmp1_);
		_tmp3_ = _tmp2_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS)) {
			ValaClass* cl = NULL;
			ValaObjectType* _tmp4_;
			ValaObjectTypeSymbol* _tmp5_;
			ValaObjectTypeSymbol* _tmp6_;
			ValaClass* _tmp7_;
			ValaClass* _tmp8_;
			gboolean _tmp9_ = FALSE;
			ValaClass* _tmp10_;
			gboolean _tmp11_;
			gboolean _tmp12_;
			_tmp4_ = object_type;
			_tmp5_ = vala_object_type_get_type_symbol (_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_;
			ValaObjectTypeSymbol* _tmp16_;
			ValaObjectTypeSymbol* _tmp17_;
			_tmp15_ = object_type;
			_tmp16_ = vala_object_type_get_type_symbol (_tmp15_);
			_tmp17_ = _tmp16_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_INTERFACE)) {
				ValaInterface* iface = NULL;
				ValaObjectType* _tmp18_;
				ValaObjectTypeSymbol* _tmp19_;
				ValaObjectTypeSymbol* _tmp20_;
				ValaInterface* _tmp21_;
				ValaInterface* _tmp22_;
				ValaInterface* _tmp23_;
				_tmp18_ = object_type;
				_tmp19_ = vala_object_type_get_type_symbol (_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_data_type (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_data_type (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_value_type_get_type_symbol (_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_;
						_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);
						_vala_code_node_unref0 (array_type);
					} else {
						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
							ValaErrorType* error_type = NULL;
							ValaErrorType* _tmp51_;
							ValaErrorType* _tmp52_;
							ValaErrorDomain* _tmp53_;
							ValaErrorDomain* _tmp54_;
							_tmp51_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ERROR_TYPE, ValaErrorType));
							error_type = _tmp51_;
							_tmp52_ = error_type;
							_tmp53_ = vala_error_type_get_error_domain (_tmp52_);
							_tmp54_ = _tmp53_;
							if (_tmp54_ != NULL) {
								ValaErrorType* _tmp55_;
								ValaErrorDomain* _tmp56_;
								ValaErrorDomain* _tmp57_;
								_tmp55_ = error_type;
								_tmp56_ = vala_error_type_get_error_domain (_tmp55_);
								_tmp57_ = _tmp56_;
								vala_ccode_base_module_generate_error_domain_declaration (self, _tmp57_, decl_space);
							} else {
								ValaClass* _tmp58_;
								_tmp58_ = self->priv->gerror;
								vala_ccode_base_module_generate_class_declaration (self, _tmp58_, 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* _tmp59_;
								ValaPointerType* _tmp60_;
								ValaDataType* _tmp61_;
								ValaDataType* _tmp62_;
								_tmp59_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_POINTER_TYPE, ValaPointerType));
								pointer_type = _tmp59_;
								_tmp60_ = pointer_type;
								_tmp61_ = vala_pointer_type_get_base_type (_tmp60_);
								_tmp62_ = _tmp61_;
								vala_ccode_base_module_generate_type_declaration (self, _tmp62_, decl_space);
								_vala_code_node_unref0 (pointer_type);
							} else {
								if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_METHOD_TYPE)) {
									ValaMethod* method = NULL;
									ValaMethod* _tmp63_;
									ValaMethod* _tmp64_;
									ValaMethod* _tmp65_;
									gboolean _tmp66_ = FALSE;
									ValaMethod* _tmp67_;
									_tmp63_ = vala_method_type_get_method_symbol (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_METHOD_TYPE, ValaMethodType));
									_tmp64_ = _tmp63_;
									_tmp65_ = _vala_code_node_ref0 (_tmp64_);
									method = _tmp65_;
									_tmp67_ = method;
									if (vala_method_has_type_parameters (_tmp67_)) {
										ValaMethod* _tmp68_;
										_tmp68_ = method;
										_tmp66_ = !vala_get_ccode_simple_generics (_tmp68_);
									} else {
										_tmp66_ = FALSE;
									}
									if (_tmp66_) {
										ValaTypeSymbol* _tmp69_;
										_tmp69_ = self->gtype_type;
										vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
									}
									_vala_code_node_unref0 (method);
								}
							}
						}
					}
				}
			}
		}
	}
	{
		ValaList* _type_arg_list = NULL;
		ValaList* _tmp70_;
		gint _type_arg_size = 0;
		ValaList* _tmp71_;
		gint _tmp72_;
		gint _tmp73_;
		gint _type_arg_index = 0;
		_tmp70_ = vala_data_type_get_type_arguments (type);
		_type_arg_list = _tmp70_;
		_tmp71_ = _type_arg_list;
		_tmp72_ = vala_collection_get_size ((ValaCollection*) _tmp71_);
		_tmp73_ = _tmp72_;
		_type_arg_size = _tmp73_;
		_type_arg_index = -1;
		while (TRUE) {
			ValaDataType* type_arg = NULL;
			ValaList* _tmp74_;
			gpointer _tmp75_;
			ValaDataType* _tmp76_;
			_type_arg_index = _type_arg_index + 1;
			if (!(_type_arg_index < _type_arg_size)) {
				break;
			}
			_tmp74_ = _type_arg_list;
			_tmp75_ = vala_list_get (_tmp74_, _type_arg_index);
			type_arg = (ValaDataType*) _tmp75_;
			_tmp76_ = type_arg;
			vala_ccode_base_module_generate_type_declaration (self, _tmp76_, decl_space);
			_vala_code_node_unref0 (type_arg);
		}
		_vala_iterable_unref0 (_type_arg_list);
	}
}

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

static gboolean
vala_ccode_base_module_is_foreach_element_variable (ValaCCodeBaseModule* self,
                                                    ValaLocalVariable* local)
{
	ValaSymbol* block = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	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_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaCCodeFile* _tmp4_;
	gboolean _tmp5_ = FALSE;
	gboolean _tmp6_;
	gboolean _tmp7_;
	gboolean declared = FALSE;
	ValaExpression* _tmp51_;
	ValaExpression* _tmp52_;
	ValaCCodeExpression* rhs = NULL;
	gboolean _tmp57_ = FALSE;
	ValaExpression* _tmp58_;
	ValaExpression* _tmp59_;
	ValaCCodeExpression* _tmp150_;
	gboolean _tmp159_ = FALSE;
	ValaExpression* _tmp160_;
	ValaExpression* _tmp161_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (local != NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) local);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_check_type (self, _tmp1_);
	_tmp2_ = vala_variable_get_variable_type ((ValaVariable*) local);
	_tmp3_ = _tmp2_;
	_tmp4_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp3_, _tmp4_);
	_tmp6_ = vala_local_variable_get_captured (local);
	_tmp7_ = _tmp6_;
	if (!_tmp7_) {
		_tmp5_ = TRUE;
	} else {
		_tmp5_ = vala_ccode_base_module_is_foreach_element_variable (self, local);
	}
	declared = _tmp5_;
	if (declared) {
		if (vala_ccode_base_module_is_in_coroutine (self)) {
			gint count = 0;
			ValaCCodeBaseModuleEmitContext* _tmp8_;
			ValaMap* _tmp9_;
			const gchar* _tmp10_;
			const gchar* _tmp11_;
			gpointer _tmp12_;
			ValaCCodeBaseModuleEmitContext* _tmp15_;
			ValaMap* _tmp16_;
			const gchar* _tmp17_;
			const gchar* _tmp18_;
			ValaCCodeStruct* _tmp19_;
			ValaDataType* _tmp20_;
			ValaDataType* _tmp21_;
			gchar* _tmp22_;
			gchar* _tmp23_;
			gchar* _tmp24_;
			gchar* _tmp25_;
			ValaDataType* _tmp26_;
			ValaDataType* _tmp27_;
			ValaCCodeDeclaratorSuffix* _tmp28_;
			ValaCCodeDeclaratorSuffix* _tmp29_;
			_tmp8_ = self->emit_context;
			_tmp9_ = _tmp8_->closure_variable_count_map;
			_tmp10_ = vala_symbol_get_name ((ValaSymbol*) local);
			_tmp11_ = _tmp10_;
			_tmp12_ = vala_map_get (_tmp9_, _tmp11_);
			count = (gint) ((gintptr) _tmp12_);
			if (count > 0) {
				ValaCCodeBaseModuleEmitContext* _tmp13_;
				ValaMap* _tmp14_;
				_tmp13_ = self->emit_context;
				_tmp14_ = _tmp13_->closure_variable_clash_map;
				vala_map_set (_tmp14_, local, (gpointer) ((gintptr) count));
			}
			_tmp15_ = self->emit_context;
			_tmp16_ = _tmp15_->closure_variable_count_map;
			_tmp17_ = vala_symbol_get_name ((ValaSymbol*) local);
			_tmp18_ = _tmp17_;
			vala_map_set (_tmp16_, _tmp18_, (gpointer) ((gintptr) (count + 1)));
			_tmp19_ = self->closure_struct;
			_tmp20_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp21_ = _tmp20_;
			_tmp22_ = vala_get_ccode_name ((ValaCodeNode*) _tmp21_);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_ccode_base_module_get_local_cname (self, local);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp27_);
			_tmp29_ = _tmp28_;
			vala_ccode_struct_add_field (_tmp19_, _tmp23_, _tmp25_, 0, _tmp29_);
			_vala_ccode_declarator_suffix_unref0 (_tmp29_);
			_g_free0 (_tmp25_);
			_g_free0 (_tmp23_);
		} else {
			ValaCCodeVariableDeclarator* cvar = NULL;
			gchar* _tmp30_;
			gchar* _tmp31_;
			ValaDataType* _tmp32_;
			ValaDataType* _tmp33_;
			ValaCCodeDeclaratorSuffix* _tmp34_;
			ValaCCodeDeclaratorSuffix* _tmp35_;
			ValaCCodeVariableDeclarator* _tmp36_;
			ValaCCodeVariableDeclarator* _tmp37_;
			ValaCCodeVariableDeclarator* _tmp38_;
			ValaDataType* _tmp39_;
			ValaDataType* _tmp40_;
			ValaCCodeExpression* _tmp41_;
			ValaCCodeExpression* _tmp42_;
			ValaCCodeVariableDeclarator* _tmp43_;
			ValaCCodeFunction* _tmp44_;
			ValaCCodeFunction* _tmp45_;
			ValaDataType* _tmp46_;
			ValaDataType* _tmp47_;
			gchar* _tmp48_;
			gchar* _tmp49_;
			ValaCCodeVariableDeclarator* _tmp50_;
			_tmp30_ = vala_ccode_base_module_get_local_cname (self, local);
			_tmp31_ = _tmp30_;
			_tmp32_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp33_ = _tmp32_;
			_tmp34_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp33_);
			_tmp35_ = _tmp34_;
			_tmp36_ = vala_ccode_variable_declarator_new (_tmp31_, NULL, _tmp35_);
			_tmp37_ = _tmp36_;
			_vala_ccode_declarator_suffix_unref0 (_tmp35_);
			_g_free0 (_tmp31_);
			cvar = _tmp37_;
			_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);
			_tmp44_ = vala_ccode_base_module_get_ccode (self);
			_tmp45_ = _tmp44_;
			_tmp46_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp47_ = _tmp46_;
			_tmp48_ = vala_get_ccode_name ((ValaCodeNode*) _tmp47_);
			_tmp49_ = _tmp48_;
			_tmp50_ = cvar;
			vala_ccode_function_add_declaration (_tmp45_, _tmp49_, (ValaCCodeDeclarator*) _tmp50_, 0);
			_g_free0 (_tmp49_);
			_vala_ccode_node_unref0 (cvar);
		}
	}
	_tmp51_ = vala_variable_get_initializer ((ValaVariable*) local);
	_tmp52_ = _tmp51_;
	if (_tmp52_ != NULL) {
		ValaExpression* _tmp53_;
		ValaExpression* _tmp54_;
		ValaExpression* _tmp55_;
		ValaExpression* _tmp56_;
		_tmp53_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp54_ = _tmp53_;
		vala_code_node_emit ((ValaCodeNode*) _tmp54_, (ValaCodeGenerator*) self);
		_tmp55_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp56_ = _tmp55_;
		vala_code_visitor_visit_end_full_expression ((ValaCodeVisitor*) self, _tmp56_);
	}
	rhs = NULL;
	_tmp58_ = vala_variable_get_initializer ((ValaVariable*) local);
	_tmp59_ = _tmp58_;
	if (_tmp59_ != NULL) {
		ValaExpression* _tmp60_;
		ValaExpression* _tmp61_;
		ValaCCodeExpression* _tmp62_;
		ValaCCodeExpression* _tmp63_;
		_tmp60_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp61_ = _tmp60_;
		_tmp62_ = vala_ccode_base_module_get_cvalue (self, _tmp61_);
		_tmp63_ = _tmp62_;
		_tmp57_ = _tmp63_ != NULL;
		_vala_ccode_node_unref0 (_tmp63_);
	} else {
		_tmp57_ = FALSE;
	}
	if (_tmp57_) {
		ValaExpression* _tmp64_;
		ValaExpression* _tmp65_;
		ValaCCodeExpression* _tmp66_;
		_tmp64_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp65_ = _tmp64_;
		_tmp66_ = vala_ccode_base_module_get_cvalue (self, _tmp65_);
		_vala_ccode_node_unref0 (rhs);
		rhs = _tmp66_;
	}
	if (declared) {
		ValaDataType* _tmp67_;
		ValaDataType* _tmp68_;
		_tmp67_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp68_ = _tmp67_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, VALA_TYPE_ARRAY_TYPE)) {
			ValaArrayType* array_type = NULL;
			ValaDataType* _tmp69_;
			ValaDataType* _tmp70_;
			ValaArrayType* _tmp71_;
			ValaArrayType* _tmp72_;
			gboolean _tmp73_;
			gboolean _tmp74_;
			_tmp69_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp70_ = _tmp69_;
			_tmp71_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array_type = _tmp71_;
			_tmp72_ = array_type;
			_tmp73_ = vala_array_type_get_fixed_length (_tmp72_);
			_tmp74_ = _tmp73_;
			if (!_tmp74_) {
				ValaArrayType* _tmp95_;
				gint _tmp96_;
				gint _tmp97_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp75_ = FALSE;
						_tmp75_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp77_;
							gint _tmp78_;
							gint _tmp79_;
							ValaLocalVariable* len_var = NULL;
							ValaArrayType* _tmp80_;
							ValaDataType* _tmp81_;
							ValaDataType* _tmp82_;
							ValaDataType* _tmp83_;
							ValaDataType* _tmp84_;
							gchar* _tmp85_;
							gchar* _tmp86_;
							gchar* _tmp87_;
							gchar* _tmp88_;
							ValaLocalVariable* _tmp89_;
							ValaLocalVariable* _tmp90_;
							ValaLocalVariable* _tmp91_;
							ValaExpression* _tmp92_;
							ValaExpression* _tmp93_;
							ValaLocalVariable* _tmp94_;
							if (!_tmp75_) {
								gint _tmp76_;
								_tmp76_ = dim;
								dim = _tmp76_ + 1;
							}
							_tmp75_ = FALSE;
							_tmp77_ = array_type;
							_tmp78_ = vala_array_type_get_rank (_tmp77_);
							_tmp79_ = _tmp78_;
							if (!(dim <= _tmp79_)) {
								break;
							}
							_tmp80_ = array_type;
							_tmp81_ = vala_array_type_get_length_type (_tmp80_);
							_tmp82_ = _tmp81_;
							_tmp83_ = vala_data_type_copy (_tmp82_);
							_tmp84_ = _tmp83_;
							_tmp85_ = vala_ccode_base_module_get_local_cname (self, local);
							_tmp86_ = _tmp85_;
							_tmp87_ = vala_ccode_base_module_get_array_length_cname (self, _tmp86_, dim);
							_tmp88_ = _tmp87_;
							_tmp89_ = vala_local_variable_new (_tmp84_, _tmp88_, NULL, NULL);
							_tmp90_ = _tmp89_;
							_g_free0 (_tmp88_);
							_g_free0 (_tmp86_);
							_vala_code_node_unref0 (_tmp84_);
							len_var = _tmp90_;
							_tmp91_ = len_var;
							_tmp92_ = vala_variable_get_initializer ((ValaVariable*) local);
							_tmp93_ = _tmp92_;
							vala_local_variable_set_init (_tmp91_, _tmp93_ == NULL);
							_tmp94_ = len_var;
							vala_ccode_base_module_emit_temp_var (self, _tmp94_, FALSE);
							_vala_code_node_unref0 (len_var);
						}
					}
				}
				_tmp95_ = array_type;
				_tmp96_ = vala_array_type_get_rank (_tmp95_);
				_tmp97_ = _tmp96_;
				if (_tmp97_ == 1) {
					ValaLocalVariable* size_var = NULL;
					ValaArrayType* _tmp98_;
					ValaDataType* _tmp99_;
					ValaDataType* _tmp100_;
					ValaDataType* _tmp101_;
					ValaDataType* _tmp102_;
					gchar* _tmp103_;
					gchar* _tmp104_;
					gchar* _tmp105_;
					gchar* _tmp106_;
					ValaLocalVariable* _tmp107_;
					ValaLocalVariable* _tmp108_;
					ValaLocalVariable* _tmp109_;
					ValaExpression* _tmp110_;
					ValaExpression* _tmp111_;
					ValaLocalVariable* _tmp112_;
					_tmp98_ = array_type;
					_tmp99_ = vala_array_type_get_length_type (_tmp98_);
					_tmp100_ = _tmp99_;
					_tmp101_ = vala_data_type_copy (_tmp100_);
					_tmp102_ = _tmp101_;
					_tmp103_ = vala_ccode_base_module_get_local_cname (self, local);
					_tmp104_ = _tmp103_;
					_tmp105_ = vala_ccode_base_module_get_array_size_cname (self, _tmp104_);
					_tmp106_ = _tmp105_;
					_tmp107_ = vala_local_variable_new (_tmp102_, _tmp106_, NULL, NULL);
					_tmp108_ = _tmp107_;
					_g_free0 (_tmp106_);
					_g_free0 (_tmp104_);
					_vala_code_node_unref0 (_tmp102_);
					size_var = _tmp108_;
					_tmp109_ = size_var;
					_tmp110_ = vala_variable_get_initializer ((ValaVariable*) local);
					_tmp111_ = _tmp110_;
					vala_local_variable_set_init (_tmp109_, _tmp111_ == NULL);
					_tmp112_ = size_var;
					vala_ccode_base_module_emit_temp_var (self, _tmp112_, FALSE);
					_vala_code_node_unref0 (size_var);
				}
			}
			_vala_code_node_unref0 (array_type);
		} else {
			ValaDataType* _tmp113_;
			ValaDataType* _tmp114_;
			_tmp113_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp114_ = _tmp113_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaDelegateType* deleg_type = NULL;
				ValaDataType* _tmp115_;
				ValaDataType* _tmp116_;
				ValaDelegateType* _tmp117_;
				ValaDelegateType* _tmp118_;
				ValaDelegate* _tmp119_;
				ValaDelegate* _tmp120_;
				gboolean _tmp121_;
				gboolean _tmp122_;
				_tmp115_ = vala_variable_get_variable_type ((ValaVariable*) local);
				_tmp116_ = _tmp115_;
				_tmp117_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp116_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				deleg_type = _tmp117_;
				_tmp118_ = deleg_type;
				_tmp119_ = vala_delegate_type_get_delegate_symbol (_tmp118_);
				_tmp120_ = _tmp119_;
				_tmp121_ = vala_delegate_get_has_target (_tmp120_);
				_tmp122_ = _tmp121_;
				if (_tmp122_) {
					ValaLocalVariable* target_var = NULL;
					ValaDataType* _tmp123_;
					ValaDataType* _tmp124_;
					ValaDataType* _tmp125_;
					gchar* _tmp126_;
					gchar* _tmp127_;
					gchar* _tmp128_;
					gchar* _tmp129_;
					ValaLocalVariable* _tmp130_;
					ValaLocalVariable* _tmp131_;
					ValaLocalVariable* _tmp132_;
					ValaExpression* _tmp133_;
					ValaExpression* _tmp134_;
					ValaLocalVariable* _tmp135_;
					ValaDelegateType* _tmp136_;
					_tmp123_ = self->delegate_target_type;
					_tmp124_ = vala_data_type_copy (_tmp123_);
					_tmp125_ = _tmp124_;
					_tmp126_ = vala_ccode_base_module_get_local_cname (self, local);
					_tmp127_ = _tmp126_;
					_tmp128_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp127_);
					_tmp129_ = _tmp128_;
					_tmp130_ = vala_local_variable_new (_tmp125_, _tmp129_, NULL, NULL);
					_tmp131_ = _tmp130_;
					_g_free0 (_tmp129_);
					_g_free0 (_tmp127_);
					_vala_code_node_unref0 (_tmp125_);
					target_var = _tmp131_;
					_tmp132_ = target_var;
					_tmp133_ = vala_variable_get_initializer ((ValaVariable*) local);
					_tmp134_ = _tmp133_;
					vala_local_variable_set_init (_tmp132_, _tmp134_ == NULL);
					_tmp135_ = target_var;
					vala_ccode_base_module_emit_temp_var (self, _tmp135_, FALSE);
					_tmp136_ = deleg_type;
					if (vala_data_type_is_disposable ((ValaDataType*) _tmp136_)) {
						ValaLocalVariable* target_destroy_notify_var = NULL;
						ValaDelegateType* _tmp137_;
						ValaDataType* _tmp138_;
						ValaDataType* _tmp139_;
						gchar* _tmp140_;
						gchar* _tmp141_;
						gchar* _tmp142_;
						gchar* _tmp143_;
						ValaLocalVariable* _tmp144_;
						ValaLocalVariable* _tmp145_;
						ValaLocalVariable* _tmp146_;
						ValaExpression* _tmp147_;
						ValaExpression* _tmp148_;
						ValaLocalVariable* _tmp149_;
						_tmp137_ = self->delegate_target_destroy_type;
						_tmp138_ = vala_data_type_copy ((ValaDataType*) _tmp137_);
						_tmp139_ = _tmp138_;
						_tmp140_ = vala_ccode_base_module_get_local_cname (self, local);
						_tmp141_ = _tmp140_;
						_tmp142_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp141_);
						_tmp143_ = _tmp142_;
						_tmp144_ = vala_local_variable_new (_tmp139_, _tmp143_, NULL, NULL);
						_tmp145_ = _tmp144_;
						_g_free0 (_tmp143_);
						_g_free0 (_tmp141_);
						_vala_code_node_unref0 (_tmp139_);
						target_destroy_notify_var = _tmp145_;
						_tmp146_ = target_destroy_notify_var;
						_tmp147_ = vala_variable_get_initializer ((ValaVariable*) local);
						_tmp148_ = _tmp147_;
						vala_local_variable_set_init (_tmp146_, _tmp148_ == NULL);
						_tmp149_ = target_destroy_notify_var;
						vala_ccode_base_module_emit_temp_var (self, _tmp149_, FALSE);
						_vala_code_node_unref0 (target_destroy_notify_var);
					}
					_vala_code_node_unref0 (target_var);
				}
				_vala_code_node_unref0 (deleg_type);
			}
		}
	}
	_tmp150_ = rhs;
	if (_tmp150_ != NULL) {
		ValaExpression* _tmp151_;
		ValaExpression* _tmp152_;
		_tmp151_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp152_ = _tmp151_;
		if (!vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) local, _tmp152_)) {
			ValaExpression* _tmp153_;
			ValaExpression* _tmp154_;
			ValaTargetValue* _tmp155_;
			ValaTargetValue* _tmp156_;
			ValaSourceReference* _tmp157_;
			ValaSourceReference* _tmp158_;
			_tmp153_ = vala_variable_get_initializer ((ValaVariable*) local);
			_tmp154_ = _tmp153_;
			_tmp155_ = vala_expression_get_target_value (_tmp154_);
			_tmp156_ = _tmp155_;
			_tmp157_ = vala_code_node_get_source_reference ((ValaCodeNode*) local);
			_tmp158_ = _tmp157_;
			vala_code_generator_store_local ((ValaCodeGenerator*) self, local, _tmp156_, TRUE, _tmp158_);
		}
	}
	_tmp160_ = vala_variable_get_initializer ((ValaVariable*) local);
	_tmp161_ = _tmp160_;
	if (_tmp161_ != NULL) {
		ValaExpression* _tmp162_;
		ValaExpression* _tmp163_;
		gboolean _tmp164_;
		gboolean _tmp165_;
		_tmp162_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp163_ = _tmp162_;
		_tmp164_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp163_);
		_tmp165_ = _tmp164_;
		_tmp159_ = _tmp165_;
	} else {
		_tmp159_ = FALSE;
	}
	if (_tmp159_) {
		ValaExpression* _tmp166_;
		ValaExpression* _tmp167_;
		_tmp166_ = vala_variable_get_initializer ((ValaVariable*) local);
		_tmp167_ = _tmp166_;
		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp167_, 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* _tmp0_;
	ValaDataType* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaSourceReference* _tmp6_;
	ValaSourceReference* _tmp7_;
	ValaLocalVariable* _tmp8_;
	ValaLocalVariable* _tmp9_;
	ValaLocalVariable* _tmp10_;
	ValaArrayType* array_type = NULL;
	ValaLocalVariable* _tmp14_;
	ValaDataType* _tmp15_;
	ValaDataType* _tmp16_;
	ValaArrayType* _tmp17_;
	ValaDelegateType* deleg_type = NULL;
	ValaLocalVariable* _tmp18_;
	ValaDataType* _tmp19_;
	ValaDataType* _tmp20_;
	ValaDelegateType* _tmp21_;
	ValaLocalVariable* _tmp22_;
	ValaArrayType* _tmp23_;
	ValaTargetValue* value = NULL;
	ValaLocalVariable* _tmp81_;
	ValaTargetValue* _tmp82_;
	ValaTargetValue* result = NULL;
	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);
	_tmp0_ = vala_data_type_copy (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_get_next_temp_var_id (self);
	_tmp3_ = _tmp2_;
	vala_ccode_base_module_set_next_temp_var_id (self, _tmp3_ + 1);
	_tmp4_ = g_strdup_printf ("_tmp%d_", _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_code_node_get_source_reference (node_reference);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_local_variable_new (_tmp1_, _tmp5_, NULL, _tmp7_);
	_tmp9_ = _tmp8_;
	_g_free0 (_tmp5_);
	_vala_code_node_unref0 (_tmp1_);
	local = _tmp9_;
	_tmp10_ = local;
	vala_local_variable_set_init (_tmp10_, init);
	if (value_owned != NULL) {
		ValaLocalVariable* _tmp11_;
		ValaDataType* _tmp12_;
		ValaDataType* _tmp13_;
		_tmp11_ = local;
		_tmp12_ = vala_variable_get_variable_type ((ValaVariable*) _tmp11_);
		_tmp13_ = _tmp12_;
		vala_data_type_set_value_owned (_tmp13_, *value_owned);
	}
	_tmp14_ = local;
	_tmp15_ = vala_variable_get_variable_type ((ValaVariable*) _tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp16_) : NULL);
	array_type = _tmp17_;
	_tmp18_ = local;
	_tmp19_ = vala_variable_get_variable_type ((ValaVariable*) _tmp18_);
	_tmp20_ = _tmp19_;
	_tmp21_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp20_) : NULL);
	deleg_type = _tmp21_;
	_tmp22_ = local;
	vala_ccode_base_module_emit_temp_var (self, _tmp22_, FALSE);
	_tmp23_ = array_type;
	if (_tmp23_ != NULL) {
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp24_ = FALSE;
				_tmp24_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp26_;
					gint _tmp27_;
					gint _tmp28_;
					ValaLocalVariable* len_var = NULL;
					ValaArrayType* _tmp29_;
					ValaDataType* _tmp30_;
					ValaDataType* _tmp31_;
					ValaDataType* _tmp32_;
					ValaDataType* _tmp33_;
					ValaLocalVariable* _tmp34_;
					const gchar* _tmp35_;
					const gchar* _tmp36_;
					gchar* _tmp37_;
					gchar* _tmp38_;
					ValaSourceReference* _tmp39_;
					ValaSourceReference* _tmp40_;
					ValaLocalVariable* _tmp41_;
					ValaLocalVariable* _tmp42_;
					ValaLocalVariable* _tmp43_;
					ValaLocalVariable* _tmp44_;
					if (!_tmp24_) {
						gint _tmp25_;
						_tmp25_ = dim;
						dim = _tmp25_ + 1;
					}
					_tmp24_ = FALSE;
					_tmp26_ = array_type;
					_tmp27_ = vala_array_type_get_rank (_tmp26_);
					_tmp28_ = _tmp27_;
					if (!(dim <= _tmp28_)) {
						break;
					}
					_tmp29_ = array_type;
					_tmp30_ = vala_array_type_get_length_type (_tmp29_);
					_tmp31_ = _tmp30_;
					_tmp32_ = vala_data_type_copy (_tmp31_);
					_tmp33_ = _tmp32_;
					_tmp34_ = local;
					_tmp35_ = vala_symbol_get_name ((ValaSymbol*) _tmp34_);
					_tmp36_ = _tmp35_;
					_tmp37_ = vala_ccode_base_module_get_array_length_cname (self, _tmp36_, dim);
					_tmp38_ = _tmp37_;
					_tmp39_ = vala_code_node_get_source_reference (node_reference);
					_tmp40_ = _tmp39_;
					_tmp41_ = vala_local_variable_new (_tmp33_, _tmp38_, NULL, _tmp40_);
					_tmp42_ = _tmp41_;
					_g_free0 (_tmp38_);
					_vala_code_node_unref0 (_tmp33_);
					len_var = _tmp42_;
					_tmp43_ = len_var;
					vala_local_variable_set_init (_tmp43_, init);
					_tmp44_ = len_var;
					vala_ccode_base_module_emit_temp_var (self, _tmp44_, FALSE);
					_vala_code_node_unref0 (len_var);
				}
			}
		}
	} else {
		gboolean _tmp45_ = FALSE;
		ValaDelegateType* _tmp46_;
		_tmp46_ = deleg_type;
		if (_tmp46_ != NULL) {
			ValaDelegateType* _tmp47_;
			ValaDelegate* _tmp48_;
			ValaDelegate* _tmp49_;
			gboolean _tmp50_;
			gboolean _tmp51_;
			_tmp47_ = deleg_type;
			_tmp48_ = vala_delegate_type_get_delegate_symbol (_tmp47_);
			_tmp49_ = _tmp48_;
			_tmp50_ = vala_delegate_get_has_target (_tmp49_);
			_tmp51_ = _tmp50_;
			_tmp45_ = _tmp51_;
		} else {
			_tmp45_ = FALSE;
		}
		if (_tmp45_) {
			ValaLocalVariable* target_var = NULL;
			ValaDataType* _tmp52_;
			ValaDataType* _tmp53_;
			ValaDataType* _tmp54_;
			ValaLocalVariable* _tmp55_;
			const gchar* _tmp56_;
			const gchar* _tmp57_;
			gchar* _tmp58_;
			gchar* _tmp59_;
			ValaSourceReference* _tmp60_;
			ValaSourceReference* _tmp61_;
			ValaLocalVariable* _tmp62_;
			ValaLocalVariable* _tmp63_;
			ValaLocalVariable* _tmp64_;
			ValaLocalVariable* _tmp65_;
			ValaDelegateType* _tmp66_;
			_tmp52_ = self->delegate_target_type;
			_tmp53_ = vala_data_type_copy (_tmp52_);
			_tmp54_ = _tmp53_;
			_tmp55_ = local;
			_tmp56_ = vala_symbol_get_name ((ValaSymbol*) _tmp55_);
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp57_);
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_code_node_get_source_reference (node_reference);
			_tmp61_ = _tmp60_;
			_tmp62_ = vala_local_variable_new (_tmp54_, _tmp59_, NULL, _tmp61_);
			_tmp63_ = _tmp62_;
			_g_free0 (_tmp59_);
			_vala_code_node_unref0 (_tmp54_);
			target_var = _tmp63_;
			_tmp64_ = target_var;
			vala_local_variable_set_init (_tmp64_, init);
			_tmp65_ = target_var;
			vala_ccode_base_module_emit_temp_var (self, _tmp65_, FALSE);
			_tmp66_ = deleg_type;
			if (vala_data_type_is_disposable ((ValaDataType*) _tmp66_)) {
				ValaLocalVariable* target_destroy_notify_var = NULL;
				ValaDelegateType* _tmp67_;
				ValaDataType* _tmp68_;
				ValaDataType* _tmp69_;
				ValaLocalVariable* _tmp70_;
				const gchar* _tmp71_;
				const gchar* _tmp72_;
				gchar* _tmp73_;
				gchar* _tmp74_;
				ValaSourceReference* _tmp75_;
				ValaSourceReference* _tmp76_;
				ValaLocalVariable* _tmp77_;
				ValaLocalVariable* _tmp78_;
				ValaLocalVariable* _tmp79_;
				ValaLocalVariable* _tmp80_;
				_tmp67_ = self->delegate_target_destroy_type;
				_tmp68_ = vala_data_type_copy ((ValaDataType*) _tmp67_);
				_tmp69_ = _tmp68_;
				_tmp70_ = local;
				_tmp71_ = vala_symbol_get_name ((ValaSymbol*) _tmp70_);
				_tmp72_ = _tmp71_;
				_tmp73_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp72_);
				_tmp74_ = _tmp73_;
				_tmp75_ = vala_code_node_get_source_reference (node_reference);
				_tmp76_ = _tmp75_;
				_tmp77_ = vala_local_variable_new (_tmp69_, _tmp74_, NULL, _tmp76_);
				_tmp78_ = _tmp77_;
				_g_free0 (_tmp74_);
				_vala_code_node_unref0 (_tmp69_);
				target_destroy_notify_var = _tmp78_;
				_tmp79_ = target_destroy_notify_var;
				vala_local_variable_set_init (_tmp79_, init);
				_tmp80_ = target_destroy_notify_var;
				vala_ccode_base_module_emit_temp_var (self, _tmp80_, FALSE);
				_vala_code_node_unref0 (target_destroy_notify_var);
			}
			_vala_code_node_unref0 (target_var);
		}
	}
	_tmp81_ = local;
	_tmp82_ = vala_ccode_base_module_get_local_cvalue (self, _tmp81_);
	value = _tmp82_;
	vala_ccode_base_module_set_array_size_cvalue (self, 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 = NULL;
	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 = NULL;
	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_data_type (_tmp1_);
	_tmp3_ = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT)) {
		ValaStruct* st = NULL;
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaTypeSymbol* _tmp6_;
		ValaTypeSymbol* _tmp7_;
		ValaStruct* _tmp8_;
		gboolean _tmp16_ = FALSE;
		gboolean _tmp17_ = FALSE;
		ValaCodeNode* _tmp18_;
		ValaCodeNode* _tmp19_;
		_tmp4_ = vala_expression_get_target_type ((ValaExpression*) list);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_data_type_get_data_type (_tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_STRUCT, ValaStruct));
		st = _tmp8_;
		while (TRUE) {
			ValaStruct* _tmp9_;
			ValaStruct* _tmp10_;
			ValaStruct* _tmp11_;
			ValaStruct* _tmp12_;
			ValaStruct* _tmp13_;
			ValaStruct* _tmp14_;
			ValaStruct* _tmp15_;
			_tmp9_ = st;
			_tmp10_ = vala_struct_get_base_struct (_tmp9_);
			_tmp11_ = _tmp10_;
			if (!(_tmp11_ != NULL)) {
				break;
			}
			_tmp12_ = st;
			_tmp13_ = vala_struct_get_base_struct (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp15_ = _vala_code_node_ref0 (_tmp14_);
			_vala_code_node_unref0 (st);
			st = _tmp15_;
		}
		_tmp18_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
		_tmp19_ = _tmp18_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_CONSTANT)) {
			_tmp17_ = TRUE;
		} else {
			ValaCodeNode* _tmp20_;
			ValaCodeNode* _tmp21_;
			_tmp20_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
			_tmp21_ = _tmp20_;
			_tmp17_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_FIELD);
		}
		if (_tmp17_) {
			_tmp16_ = TRUE;
		} else {
			ValaCodeNode* _tmp22_;
			ValaCodeNode* _tmp23_;
			_tmp22_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
			_tmp23_ = _tmp22_;
			_tmp16_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_INITIALIZER_LIST);
		}
		if (_tmp16_) {
			ValaCCodeInitializerList* clist = NULL;
			ValaCCodeInitializerList* _tmp24_;
			ValaIterator* field_it = NULL;
			ValaStruct* _tmp25_;
			ValaList* _tmp26_;
			ValaList* _tmp27_;
			ValaIterator* _tmp28_;
			ValaIterator* _tmp29_;
			ValaCCodeInitializerList* _tmp77_;
			_tmp24_ = vala_ccode_initializer_list_new ();
			clist = _tmp24_;
			_tmp25_ = st;
			_tmp26_ = vala_struct_get_fields (_tmp25_);
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_iterable_iterator ((ValaIterable*) _tmp27_);
			_tmp29_ = _tmp28_;
			_vala_iterable_unref0 (_tmp27_);
			field_it = _tmp29_;
			{
				ValaList* _expr_list = NULL;
				ValaList* _tmp30_;
				gint _expr_size = 0;
				ValaList* _tmp31_;
				gint _tmp32_;
				gint _tmp33_;
				gint _expr_index = 0;
				_tmp30_ = vala_initializer_list_get_initializers (list);
				_expr_list = _tmp30_;
				_tmp31_ = _expr_list;
				_tmp32_ = vala_collection_get_size ((ValaCollection*) _tmp31_);
				_tmp33_ = _tmp32_;
				_expr_size = _tmp33_;
				_expr_index = -1;
				while (TRUE) {
					ValaExpression* expr = NULL;
					ValaList* _tmp34_;
					gpointer _tmp35_;
					ValaField* field = NULL;
					ValaCCodeExpression* cexpr = NULL;
					ValaExpression* _tmp43_;
					ValaCCodeExpression* _tmp44_;
					gchar* ctype = NULL;
					ValaField* _tmp45_;
					gchar* _tmp46_;
					const gchar* _tmp47_;
					ValaCCodeInitializerList* _tmp51_;
					ValaCCodeExpression* _tmp52_;
					ValaArrayType* array_type = NULL;
					ValaField* _tmp53_;
					ValaDataType* _tmp54_;
					ValaDataType* _tmp55_;
					ValaArrayType* _tmp56_;
					gboolean _tmp57_ = FALSE;
					gboolean _tmp58_ = FALSE;
					gboolean _tmp59_ = FALSE;
					ValaArrayType* _tmp60_;
					_expr_index = _expr_index + 1;
					if (!(_expr_index < _expr_size)) {
						break;
					}
					_tmp34_ = _expr_list;
					_tmp35_ = vala_list_get (_tmp34_, _expr_index);
					expr = (ValaExpression*) _tmp35_;
					field = NULL;
					while (TRUE) {
						ValaField* _tmp36_;
						ValaIterator* _tmp37_;
						ValaIterator* _tmp38_;
						gpointer _tmp39_;
						ValaField* _tmp40_;
						ValaMemberBinding _tmp41_;
						ValaMemberBinding _tmp42_;
						_tmp36_ = field;
						if (!(_tmp36_ == NULL)) {
							break;
						}
						_tmp37_ = field_it;
						vala_iterator_next (_tmp37_);
						_tmp38_ = field_it;
						_tmp39_ = vala_iterator_get (_tmp38_);
						_vala_code_node_unref0 (field);
						field = (ValaField*) _tmp39_;
						_tmp40_ = field;
						_tmp41_ = vala_field_get_binding (_tmp40_);
						_tmp42_ = _tmp41_;
						if (_tmp42_ != VALA_MEMBER_BINDING_INSTANCE) {
							_vala_code_node_unref0 (field);
							field = NULL;
						}
					}
					_tmp43_ = expr;
					_tmp44_ = vala_ccode_base_module_get_cvalue (self, _tmp43_);
					cexpr = _tmp44_;
					_tmp45_ = field;
					_tmp46_ = vala_get_ccode_type ((ValaCodeNode*) _tmp45_);
					ctype = _tmp46_;
					_tmp47_ = ctype;
					if (_tmp47_ != NULL) {
						ValaCCodeExpression* _tmp48_;
						const gchar* _tmp49_;
						ValaCCodeCastExpression* _tmp50_;
						_tmp48_ = cexpr;
						_tmp49_ = ctype;
						_tmp50_ = vala_ccode_cast_expression_new (_tmp48_, _tmp49_);
						_vala_ccode_node_unref0 (cexpr);
						cexpr = (ValaCCodeExpression*) _tmp50_;
					}
					_tmp51_ = clist;
					_tmp52_ = cexpr;
					vala_ccode_initializer_list_append (_tmp51_, _tmp52_);
					_tmp53_ = field;
					_tmp54_ = vala_variable_get_variable_type ((ValaVariable*) _tmp53_);
					_tmp55_ = _tmp54_;
					_tmp56_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp55_) : NULL);
					array_type = _tmp56_;
					_tmp60_ = array_type;
					if (_tmp60_ != NULL) {
						ValaArrayType* _tmp61_;
						gboolean _tmp62_;
						gboolean _tmp63_;
						_tmp61_ = array_type;
						_tmp62_ = vala_array_type_get_fixed_length (_tmp61_);
						_tmp63_ = _tmp62_;
						_tmp59_ = !_tmp63_;
					} else {
						_tmp59_ = FALSE;
					}
					if (_tmp59_) {
						ValaField* _tmp64_;
						_tmp64_ = field;
						_tmp58_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp64_);
					} else {
						_tmp58_ = FALSE;
					}
					if (_tmp58_) {
						ValaField* _tmp65_;
						_tmp65_ = field;
						_tmp57_ = !vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp65_);
					} else {
						_tmp57_ = FALSE;
					}
					if (_tmp57_) {
						{
							gint dim = 0;
							dim = 1;
							{
								gboolean _tmp66_ = FALSE;
								_tmp66_ = TRUE;
								while (TRUE) {
									ValaArrayType* _tmp68_;
									gint _tmp69_;
									gint _tmp70_;
									ValaCCodeInitializerList* _tmp71_;
									ValaExpression* _tmp72_;
									ValaTargetValue* _tmp73_;
									ValaTargetValue* _tmp74_;
									ValaCCodeExpression* _tmp75_;
									ValaCCodeExpression* _tmp76_;
									if (!_tmp66_) {
										gint _tmp67_;
										_tmp67_ = dim;
										dim = _tmp67_ + 1;
									}
									_tmp66_ = FALSE;
									_tmp68_ = array_type;
									_tmp69_ = vala_array_type_get_rank (_tmp68_);
									_tmp70_ = _tmp69_;
									if (!(dim <= _tmp70_)) {
										break;
									}
									_tmp71_ = clist;
									_tmp72_ = expr;
									_tmp73_ = vala_expression_get_target_value (_tmp72_);
									_tmp74_ = _tmp73_;
									_tmp75_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp74_, dim);
									_tmp76_ = _tmp75_;
									vala_ccode_initializer_list_append (_tmp71_, _tmp76_);
									_vala_ccode_node_unref0 (_tmp76_);
								}
							}
						}
					}
					_vala_code_node_unref0 (array_type);
					_g_free0 (ctype);
					_vala_ccode_node_unref0 (cexpr);
					_vala_code_node_unref0 (field);
					_vala_code_node_unref0 (expr);
				}
				_vala_iterable_unref0 (_expr_list);
			}
			_tmp77_ = clist;
			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) list, (ValaCCodeExpression*) _tmp77_);
			_vala_iterator_unref0 (field_it);
			_vala_ccode_node_unref0 (clist);
		} else {
			ValaTargetValue* instance = NULL;
			ValaDataType* _tmp78_;
			ValaDataType* _tmp79_;
			ValaTargetValue* _tmp80_;
			ValaIterator* field_it = NULL;
			ValaStruct* _tmp81_;
			ValaList* _tmp82_;
			ValaList* _tmp83_;
			ValaIterator* _tmp84_;
			ValaIterator* _tmp85_;
			ValaTargetValue* _tmp107_;
			_tmp78_ = vala_expression_get_value_type ((ValaExpression*) list);
			_tmp79_ = _tmp78_;
			_tmp80_ = vala_ccode_base_module_create_temp_value (self, _tmp79_, TRUE, (ValaCodeNode*) list, NULL);
			instance = _tmp80_;
			_tmp81_ = st;
			_tmp82_ = vala_struct_get_fields (_tmp81_);
			_tmp83_ = _tmp82_;
			_tmp84_ = vala_iterable_iterator ((ValaIterable*) _tmp83_);
			_tmp85_ = _tmp84_;
			_vala_iterable_unref0 (_tmp83_);
			field_it = _tmp85_;
			{
				ValaList* _expr_list = NULL;
				ValaList* _tmp86_;
				gint _expr_size = 0;
				ValaList* _tmp87_;
				gint _tmp88_;
				gint _tmp89_;
				gint _expr_index = 0;
				_tmp86_ = vala_initializer_list_get_initializers (list);
				_expr_list = _tmp86_;
				_tmp87_ = _expr_list;
				_tmp88_ = vala_collection_get_size ((ValaCollection*) _tmp87_);
				_tmp89_ = _tmp88_;
				_expr_size = _tmp89_;
				_expr_index = -1;
				while (TRUE) {
					ValaExpression* expr = NULL;
					ValaList* _tmp90_;
					gpointer _tmp91_;
					ValaField* field = NULL;
					ValaField* _tmp99_;
					ValaTargetValue* _tmp100_;
					ValaExpression* _tmp101_;
					ValaTargetValue* _tmp102_;
					ValaTargetValue* _tmp103_;
					ValaExpression* _tmp104_;
					ValaSourceReference* _tmp105_;
					ValaSourceReference* _tmp106_;
					_expr_index = _expr_index + 1;
					if (!(_expr_index < _expr_size)) {
						break;
					}
					_tmp90_ = _expr_list;
					_tmp91_ = vala_list_get (_tmp90_, _expr_index);
					expr = (ValaExpression*) _tmp91_;
					field = NULL;
					while (TRUE) {
						ValaField* _tmp92_;
						ValaIterator* _tmp93_;
						ValaIterator* _tmp94_;
						gpointer _tmp95_;
						ValaField* _tmp96_;
						ValaMemberBinding _tmp97_;
						ValaMemberBinding _tmp98_;
						_tmp92_ = field;
						if (!(_tmp92_ == NULL)) {
							break;
						}
						_tmp93_ = field_it;
						vala_iterator_next (_tmp93_);
						_tmp94_ = field_it;
						_tmp95_ = vala_iterator_get (_tmp94_);
						_vala_code_node_unref0 (field);
						field = (ValaField*) _tmp95_;
						_tmp96_ = field;
						_tmp97_ = vala_field_get_binding (_tmp96_);
						_tmp98_ = _tmp97_;
						if (_tmp98_ != VALA_MEMBER_BINDING_INSTANCE) {
							_vala_code_node_unref0 (field);
							field = NULL;
						}
					}
					_tmp99_ = field;
					_tmp100_ = instance;
					_tmp101_ = expr;
					_tmp102_ = vala_expression_get_target_value (_tmp101_);
					_tmp103_ = _tmp102_;
					_tmp104_ = expr;
					_tmp105_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp104_);
					_tmp106_ = _tmp105_;
					vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp99_, _tmp100_, _tmp103_, _tmp106_);
					_vala_code_node_unref0 (field);
					_vala_code_node_unref0 (expr);
				}
				_vala_iterable_unref0 (_expr_list);
			}
			_tmp107_ = instance;
			vala_expression_set_target_value ((ValaExpression*) list, _tmp107_);
			_vala_iterator_unref0 (field_it);
			_vala_target_value_unref0 (instance);
		}
		_vala_code_node_unref0 (st);
	} else {
		ValaCCodeInitializerList* clist = NULL;
		ValaCCodeInitializerList* _tmp108_;
		ValaCCodeInitializerList* _tmp119_;
		_tmp108_ = vala_ccode_initializer_list_new ();
		clist = _tmp108_;
		{
			ValaList* _expr_list = NULL;
			ValaList* _tmp109_;
			gint _expr_size = 0;
			ValaList* _tmp110_;
			gint _tmp111_;
			gint _tmp112_;
			gint _expr_index = 0;
			_tmp109_ = vala_initializer_list_get_initializers (list);
			_expr_list = _tmp109_;
			_tmp110_ = _expr_list;
			_tmp111_ = vala_collection_get_size ((ValaCollection*) _tmp110_);
			_tmp112_ = _tmp111_;
			_expr_size = _tmp112_;
			_expr_index = -1;
			while (TRUE) {
				ValaExpression* expr = NULL;
				ValaList* _tmp113_;
				gpointer _tmp114_;
				ValaCCodeInitializerList* _tmp115_;
				ValaExpression* _tmp116_;
				ValaCCodeExpression* _tmp117_;
				ValaCCodeExpression* _tmp118_;
				_expr_index = _expr_index + 1;
				if (!(_expr_index < _expr_size)) {
					break;
				}
				_tmp113_ = _expr_list;
				_tmp114_ = vala_list_get (_tmp113_, _expr_index);
				expr = (ValaExpression*) _tmp114_;
				_tmp115_ = clist;
				_tmp116_ = expr;
				_tmp117_ = vala_ccode_base_module_get_cvalue (self, _tmp116_);
				_tmp118_ = _tmp117_;
				vala_ccode_initializer_list_append (_tmp115_, _tmp118_);
				_vala_ccode_node_unref0 (_tmp118_);
				_vala_code_node_unref0 (expr);
			}
			_vala_iterable_unref0 (_expr_list);
		}
		_tmp119_ = clist;
		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) list, (ValaCCodeExpression*) _tmp119_);
		_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 = NULL;
	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 = FALSE;
	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_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) iface);
		_tmp2_ = _tmp1_;
		_tmp3_ = vala_symbol_get_full_name ((ValaSymbol*) iface);
		_tmp4_ = _tmp3_;
		_tmp5_ = g_strdup_printf ("missing generic type for interface `%s', add GenericAccessors attribut" \
"e to interface declaration", _tmp4_);
		_tmp6_ = _tmp5_;
		vala_report_error (_tmp2_, _tmp6_);
		_g_free0 (_tmp6_);
		_g_free0 (_tmp4_);
	}
}

ValaCCodeExpression*
vala_ccode_base_module_get_type_id_expression (ValaCCodeBaseModule* self,
                                               ValaDataType* type,
                                               gboolean is_chainup)
{
	ValaCCodeExpression* result = NULL;
	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_;
		gchar* var_name = NULL;
		ValaTypeParameter* _tmp3_;
		const gchar* _tmp4_;
		const gchar* _tmp5_;
		gchar* _tmp6_;
		gchar* _tmp7_;
		gchar* _tmp8_;
		gchar* _tmp9_;
		ValaTypeParameter* _tmp10_;
		ValaSymbol* _tmp11_;
		ValaSymbol* _tmp12_;
		gboolean _tmp44_ = FALSE;
		gboolean _tmp45_ = FALSE;
		_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_name ((ValaSymbol*) _tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = g_utf8_strdown (_tmp5_, (gssize) -1);
		_tmp7_ = _tmp6_;
		_tmp8_ = g_strdup_printf ("%s_type", _tmp7_);
		_tmp9_ = _tmp8_;
		_g_free0 (_tmp7_);
		var_name = _tmp9_;
		_tmp10_ = type_parameter;
		_tmp11_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp10_);
		_tmp12_ = _tmp11_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_INTERFACE)) {
			ValaInterface* iface = NULL;
			ValaTypeParameter* _tmp13_;
			ValaSymbol* _tmp14_;
			ValaSymbol* _tmp15_;
			ValaInterface* _tmp16_;
			ValaInterface* _tmp17_;
			gchar* method_name = NULL;
			ValaTypeParameter* _tmp18_;
			const gchar* _tmp19_;
			const gchar* _tmp20_;
			gchar* _tmp21_;
			gchar* _tmp22_;
			gchar* _tmp23_;
			gchar* _tmp24_;
			ValaCCodeFunctionCall* cast_self = NULL;
			ValaInterface* _tmp25_;
			gchar* _tmp26_;
			gchar* _tmp27_;
			ValaCCodeIdentifier* _tmp28_;
			ValaCCodeIdentifier* _tmp29_;
			ValaCCodeFunctionCall* _tmp30_;
			ValaCCodeFunctionCall* _tmp31_;
			ValaCCodeFunctionCall* _tmp32_;
			ValaCCodeIdentifier* _tmp33_;
			ValaCCodeIdentifier* _tmp34_;
			ValaCCodeFunctionCall* function_call = NULL;
			ValaCCodeFunctionCall* _tmp35_;
			const gchar* _tmp36_;
			ValaCCodeMemberAccess* _tmp37_;
			ValaCCodeMemberAccess* _tmp38_;
			ValaCCodeFunctionCall* _tmp39_;
			ValaCCodeFunctionCall* _tmp40_;
			ValaCCodeFunctionCall* _tmp41_;
			ValaCCodeIdentifier* _tmp42_;
			ValaCCodeIdentifier* _tmp43_;
			_tmp13_ = type_parameter;
			_tmp14_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp13_);
			_tmp15_ = _tmp14_;
			_tmp16_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_INTERFACE, ValaInterface));
			iface = _tmp16_;
			_tmp17_ = iface;
			vala_ccode_base_module_require_generic_accessors (self, _tmp17_);
			_tmp18_ = type_parameter;
			_tmp19_ = vala_symbol_get_name ((ValaSymbol*) _tmp18_);
			_tmp20_ = _tmp19_;
			_tmp21_ = g_utf8_strdown (_tmp20_, (gssize) -1);
			_tmp22_ = _tmp21_;
			_tmp23_ = g_strdup_printf ("get_%s_type", _tmp22_);
			_tmp24_ = _tmp23_;
			_g_free0 (_tmp22_);
			method_name = _tmp24_;
			_tmp25_ = iface;
			_tmp26_ = vala_get_ccode_interface_get_function (_tmp25_);
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_ccode_identifier_new (_tmp27_);
			_tmp29_ = _tmp28_;
			_tmp30_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp29_);
			_tmp31_ = _tmp30_;
			_vala_ccode_node_unref0 (_tmp29_);
			_g_free0 (_tmp27_);
			cast_self = _tmp31_;
			_tmp32_ = cast_self;
			_tmp33_ = vala_ccode_identifier_new ("self");
			_tmp34_ = _tmp33_;
			vala_ccode_function_call_add_argument (_tmp32_, (ValaCCodeExpression*) _tmp34_);
			_vala_ccode_node_unref0 (_tmp34_);
			_tmp35_ = cast_self;
			_tmp36_ = method_name;
			_tmp37_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp35_, _tmp36_);
			_tmp38_ = _tmp37_;
			_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
			_tmp40_ = _tmp39_;
			_vala_ccode_node_unref0 (_tmp38_);
			function_call = _tmp40_;
			_tmp41_ = function_call;
			_tmp42_ = vala_ccode_identifier_new ("self");
			_tmp43_ = _tmp42_;
			vala_ccode_function_call_add_argument (_tmp41_, (ValaCCodeExpression*) _tmp43_);
			_vala_ccode_node_unref0 (_tmp43_);
			result = (ValaCCodeExpression*) function_call;
			_vala_ccode_node_unref0 (cast_self);
			_g_free0 (method_name);
			_vala_code_node_unref0 (iface);
			_g_free0 (var_name);
			_vala_code_node_unref0 (type_parameter);
			return result;
		}
		if (vala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
			_tmp45_ = !is_chainup;
		} else {
			_tmp45_ = FALSE;
		}
		if (_tmp45_) {
			gboolean _tmp46_;
			gboolean _tmp47_;
			_tmp46_ = vala_ccode_base_module_get_in_creation_method (self);
			_tmp47_ = _tmp46_;
			_tmp44_ = !_tmp47_;
		} else {
			_tmp44_ = FALSE;
		}
		if (_tmp44_) {
			ValaCCodeExpression* _tmp48_;
			ValaCCodeExpression* _tmp49_;
			ValaCCodeMemberAccess* _tmp50_;
			ValaCCodeMemberAccess* _tmp51_;
			const gchar* _tmp52_;
			ValaCCodeMemberAccess* _tmp53_;
			ValaCCodeExpression* _tmp54_;
			_tmp48_ = vala_ccode_base_module_get_this_cexpression (self);
			_tmp49_ = _tmp48_;
			_tmp50_ = vala_ccode_member_access_new_pointer (_tmp49_, "priv");
			_tmp51_ = _tmp50_;
			_tmp52_ = var_name;
			_tmp53_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp51_, _tmp52_);
			_tmp54_ = (ValaCCodeExpression*) _tmp53_;
			_vala_ccode_node_unref0 (_tmp51_);
			_vala_ccode_node_unref0 (_tmp49_);
			result = _tmp54_;
			_g_free0 (var_name);
			_vala_code_node_unref0 (type_parameter);
			return result;
		} else {
			const gchar* _tmp55_;
			ValaCCodeExpression* _tmp56_;
			_tmp55_ = var_name;
			_tmp56_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp55_);
			result = _tmp56_;
			_g_free0 (var_name);
			_vala_code_node_unref0 (type_parameter);
			return result;
		}
		_g_free0 (var_name);
		_vala_code_node_unref0 (type_parameter);
	} else {
		gchar* type_id = NULL;
		gchar* _tmp57_;
		const gchar* _tmp58_;
		const gchar* _tmp61_;
		ValaCCodeIdentifier* _tmp62_;
		_tmp57_ = vala_get_ccode_type_id ((ValaCodeNode*) type);
		type_id = _tmp57_;
		_tmp58_ = type_id;
		if (g_strcmp0 (_tmp58_, "") == 0) {
			gchar* _tmp59_;
			_tmp59_ = g_strdup ("G_TYPE_INVALID");
			_g_free0 (type_id);
			type_id = _tmp59_;
		} else {
			ValaCCodeFile* _tmp60_;
			_tmp60_ = self->cfile;
			vala_ccode_base_module_generate_type_declaration (self, type, _tmp60_);
		}
		_tmp61_ = type_id;
		_tmp62_ = vala_ccode_identifier_new (_tmp61_);
		result = (ValaCCodeExpression*) _tmp62_;
		_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 = NULL;
	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 {
		ValaTypeSymbol* _tmp1_;
		ValaTypeSymbol* _tmp2_;
		_tmp1_ = vala_data_type_get_data_type (type);
		_tmp2_ = _tmp1_;
		if (_tmp2_ != NULL) {
			gchar* dup_function = NULL;
			ValaClass* cl = NULL;
			ValaTypeSymbol* _tmp3_;
			ValaTypeSymbol* _tmp4_;
			ValaClass* _tmp5_;
			ValaTypeSymbol* _tmp6_;
			ValaTypeSymbol* _tmp7_;
			const gchar* _tmp54_;
			ValaCCodeIdentifier* _tmp55_;
			_tmp3_ = vala_data_type_get_data_type (type);
			_tmp4_ = _tmp3_;
			_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp4_) : NULL);
			cl = _tmp5_;
			_tmp6_ = vala_data_type_get_data_type (type);
			_tmp7_ = _tmp6_;
			if (vala_is_reference_counting (_tmp7_)) {
				ValaTypeSymbol* _tmp8_;
				ValaTypeSymbol* _tmp9_;
				gchar* _tmp10_;
				gboolean _tmp11_ = FALSE;
				ValaTypeSymbol* _tmp12_;
				ValaTypeSymbol* _tmp13_;
				_tmp8_ = vala_data_type_get_data_type (type);
				_tmp9_ = _tmp8_;
				_tmp10_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
				_g_free0 (dup_function);
				dup_function = _tmp10_;
				_tmp12_ = vala_data_type_get_data_type (type);
				_tmp13_ = _tmp12_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_INTERFACE)) {
					const gchar* _tmp14_;
					_tmp14_ = dup_function;
					_tmp11_ = _tmp14_ == NULL;
				} else {
					_tmp11_ = FALSE;
				}
				if (_tmp11_) {
					ValaTypeSymbol* _tmp15_;
					ValaTypeSymbol* _tmp16_;
					gchar* _tmp17_;
					gchar* _tmp18_;
					gchar* _tmp19_;
					gchar* _tmp20_;
					ValaCCodeInvalidExpression* _tmp21_;
					_tmp15_ = vala_data_type_get_data_type (type);
					_tmp16_ = _tmp15_;
					_tmp17_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp16_);
					_tmp18_ = _tmp17_;
					_tmp19_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
"rface declaration if unsure", _tmp18_);
					_tmp20_ = _tmp19_;
					vala_report_error (source_reference, _tmp20_);
					_g_free0 (_tmp20_);
					_g_free0 (_tmp18_);
					_tmp21_ = vala_ccode_invalid_expression_new ();
					result = (ValaCCodeExpression*) _tmp21_;
					_vala_code_node_unref0 (cl);
					_g_free0 (dup_function);
					return result;
				}
			} else {
				gboolean _tmp22_ = FALSE;
				ValaClass* _tmp23_;
				_tmp23_ = cl;
				if (_tmp23_ != NULL) {
					ValaClass* _tmp24_;
					gboolean _tmp25_;
					gboolean _tmp26_;
					_tmp24_ = cl;
					_tmp25_ = vala_class_get_is_immutable (_tmp24_);
					_tmp26_ = _tmp25_;
					_tmp22_ = _tmp26_;
				} else {
					_tmp22_ = FALSE;
				}
				if (_tmp22_) {
					ValaTypeSymbol* _tmp27_;
					ValaTypeSymbol* _tmp28_;
					gchar* _tmp29_;
					const gchar* _tmp30_;
					_tmp27_ = vala_data_type_get_data_type (type);
					_tmp28_ = _tmp27_;
					_tmp29_ = vala_get_ccode_dup_function (_tmp28_);
					_g_free0 (dup_function);
					dup_function = _tmp29_;
					_tmp30_ = dup_function;
					if (_tmp30_ == NULL) {
						gchar* _tmp31_;
						_tmp31_ = g_strdup ("");
						_g_free0 (dup_function);
						dup_function = _tmp31_;
					}
				} else {
					ValaTypeSymbol* _tmp32_;
					ValaTypeSymbol* _tmp33_;
					_tmp32_ = vala_data_type_get_data_type (type);
					_tmp33_ = _tmp32_;
					if (vala_get_ccode_is_gboxed (_tmp33_)) {
						gchar* _tmp34_;
						const gchar* _tmp35_;
						_tmp34_ = vala_ccode_base_module_generate_dup_func_wrapper (self, type);
						_g_free0 (dup_function);
						dup_function = _tmp34_;
						_tmp35_ = dup_function;
						if (_tmp35_ == NULL) {
							gchar* _tmp36_;
							_tmp36_ = g_strdup ("");
							_g_free0 (dup_function);
							dup_function = _tmp36_;
						}
					} else {
						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VALUE_TYPE)) {
							ValaTypeSymbol* _tmp37_;
							ValaTypeSymbol* _tmp38_;
							gchar* _tmp39_;
							gboolean _tmp40_ = FALSE;
							const gchar* _tmp41_;
							_tmp37_ = vala_data_type_get_data_type (type);
							_tmp38_ = _tmp37_;
							_tmp39_ = vala_get_ccode_dup_function (_tmp38_);
							_g_free0 (dup_function);
							dup_function = _tmp39_;
							_tmp41_ = dup_function;
							if (_tmp41_ == NULL) {
								gboolean _tmp42_;
								gboolean _tmp43_;
								_tmp42_ = vala_data_type_get_nullable (type);
								_tmp43_ = _tmp42_;
								_tmp40_ = _tmp43_;
							} else {
								_tmp40_ = FALSE;
							}
							if (_tmp40_) {
								gchar* _tmp44_;
								_tmp44_ = 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 = _tmp44_;
							} else {
								const gchar* _tmp45_;
								_tmp45_ = dup_function;
								if (_tmp45_ == NULL) {
									gchar* _tmp46_;
									_tmp46_ = g_strdup ("");
									_g_free0 (dup_function);
									dup_function = _tmp46_;
								}
							}
						} else {
							ValaTypeSymbol* _tmp47_;
							ValaTypeSymbol* _tmp48_;
							const gchar* _tmp49_;
							const gchar* _tmp50_;
							gchar* _tmp51_;
							gchar* _tmp52_;
							ValaCCodeInvalidExpression* _tmp53_;
							_tmp47_ = vala_data_type_get_data_type (type);
							_tmp48_ = _tmp47_;
							_tmp49_ = vala_symbol_get_name ((ValaSymbol*) _tmp48_);
							_tmp50_ = _tmp49_;
							_tmp51_ = g_strdup_printf ("duplicating %s instance, use unowned variable or explicitly invoke cop" \
"y method", _tmp50_);
							_tmp52_ = _tmp51_;
							vala_report_error (source_reference, _tmp52_);
							_g_free0 (_tmp52_);
							_tmp53_ = vala_ccode_invalid_expression_new ();
							result = (ValaCCodeExpression*) _tmp53_;
							_vala_code_node_unref0 (cl);
							_g_free0 (dup_function);
							return result;
						}
					}
				}
			}
			_tmp54_ = dup_function;
			_tmp55_ = vala_ccode_identifier_new (_tmp54_);
			result = (ValaCCodeExpression*) _tmp55_;
			_vala_code_node_unref0 (cl);
			_g_free0 (dup_function);
			return result;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
				ValaTypeParameter* type_parameter = NULL;
				ValaTypeParameter* _tmp56_;
				ValaTypeParameter* _tmp57_;
				ValaTypeParameter* _tmp58_;
				gchar* func_name = NULL;
				ValaTypeParameter* _tmp59_;
				const gchar* _tmp60_;
				const gchar* _tmp61_;
				gchar* _tmp62_;
				gchar* _tmp63_;
				gchar* _tmp64_;
				gchar* _tmp65_;
				ValaTypeParameter* _tmp66_;
				ValaSymbol* _tmp67_;
				ValaSymbol* _tmp68_;
				gboolean _tmp100_ = FALSE;
				gboolean _tmp101_ = FALSE;
				_tmp56_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
				_tmp57_ = _tmp56_;
				_tmp58_ = _vala_code_node_ref0 (_tmp57_);
				type_parameter = _tmp58_;
				_tmp59_ = type_parameter;
				_tmp60_ = vala_symbol_get_name ((ValaSymbol*) _tmp59_);
				_tmp61_ = _tmp60_;
				_tmp62_ = g_utf8_strdown (_tmp61_, (gssize) -1);
				_tmp63_ = _tmp62_;
				_tmp64_ = g_strdup_printf ("%s_dup_func", _tmp63_);
				_tmp65_ = _tmp64_;
				_g_free0 (_tmp63_);
				func_name = _tmp65_;
				_tmp66_ = type_parameter;
				_tmp67_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp66_);
				_tmp68_ = _tmp67_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, VALA_TYPE_INTERFACE)) {
					ValaInterface* iface = NULL;
					ValaTypeParameter* _tmp69_;
					ValaSymbol* _tmp70_;
					ValaSymbol* _tmp71_;
					ValaInterface* _tmp72_;
					ValaInterface* _tmp73_;
					gchar* method_name = NULL;
					ValaTypeParameter* _tmp74_;
					const gchar* _tmp75_;
					const gchar* _tmp76_;
					gchar* _tmp77_;
					gchar* _tmp78_;
					gchar* _tmp79_;
					gchar* _tmp80_;
					ValaCCodeFunctionCall* cast_self = NULL;
					ValaInterface* _tmp81_;
					gchar* _tmp82_;
					gchar* _tmp83_;
					ValaCCodeIdentifier* _tmp84_;
					ValaCCodeIdentifier* _tmp85_;
					ValaCCodeFunctionCall* _tmp86_;
					ValaCCodeFunctionCall* _tmp87_;
					ValaCCodeFunctionCall* _tmp88_;
					ValaCCodeIdentifier* _tmp89_;
					ValaCCodeIdentifier* _tmp90_;
					ValaCCodeFunctionCall* function_call = NULL;
					ValaCCodeFunctionCall* _tmp91_;
					const gchar* _tmp92_;
					ValaCCodeMemberAccess* _tmp93_;
					ValaCCodeMemberAccess* _tmp94_;
					ValaCCodeFunctionCall* _tmp95_;
					ValaCCodeFunctionCall* _tmp96_;
					ValaCCodeFunctionCall* _tmp97_;
					ValaCCodeIdentifier* _tmp98_;
					ValaCCodeIdentifier* _tmp99_;
					_tmp69_ = type_parameter;
					_tmp70_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp69_);
					_tmp71_ = _tmp70_;
					_tmp72_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp71_, VALA_TYPE_INTERFACE, ValaInterface));
					iface = _tmp72_;
					_tmp73_ = iface;
					vala_ccode_base_module_require_generic_accessors (self, _tmp73_);
					_tmp74_ = type_parameter;
					_tmp75_ = vala_symbol_get_name ((ValaSymbol*) _tmp74_);
					_tmp76_ = _tmp75_;
					_tmp77_ = g_utf8_strdown (_tmp76_, (gssize) -1);
					_tmp78_ = _tmp77_;
					_tmp79_ = g_strdup_printf ("get_%s_dup_func", _tmp78_);
					_tmp80_ = _tmp79_;
					_g_free0 (_tmp78_);
					method_name = _tmp80_;
					_tmp81_ = iface;
					_tmp82_ = vala_get_ccode_interface_get_function (_tmp81_);
					_tmp83_ = _tmp82_;
					_tmp84_ = vala_ccode_identifier_new (_tmp83_);
					_tmp85_ = _tmp84_;
					_tmp86_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp85_);
					_tmp87_ = _tmp86_;
					_vala_ccode_node_unref0 (_tmp85_);
					_g_free0 (_tmp83_);
					cast_self = _tmp87_;
					_tmp88_ = cast_self;
					_tmp89_ = vala_ccode_identifier_new ("self");
					_tmp90_ = _tmp89_;
					vala_ccode_function_call_add_argument (_tmp88_, (ValaCCodeExpression*) _tmp90_);
					_vala_ccode_node_unref0 (_tmp90_);
					_tmp91_ = cast_self;
					_tmp92_ = method_name;
					_tmp93_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp91_, _tmp92_);
					_tmp94_ = _tmp93_;
					_tmp95_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp94_);
					_tmp96_ = _tmp95_;
					_vala_ccode_node_unref0 (_tmp94_);
					function_call = _tmp96_;
					_tmp97_ = function_call;
					_tmp98_ = vala_ccode_identifier_new ("self");
					_tmp99_ = _tmp98_;
					vala_ccode_function_call_add_argument (_tmp97_, (ValaCCodeExpression*) _tmp99_);
					_vala_ccode_node_unref0 (_tmp99_);
					result = (ValaCCodeExpression*) function_call;
					_vala_ccode_node_unref0 (cast_self);
					_g_free0 (method_name);
					_vala_code_node_unref0 (iface);
					_g_free0 (func_name);
					_vala_code_node_unref0 (type_parameter);
					return result;
				}
				if (vala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
					_tmp101_ = !is_chainup;
				} else {
					_tmp101_ = FALSE;
				}
				if (_tmp101_) {
					gboolean _tmp102_;
					gboolean _tmp103_;
					_tmp102_ = vala_ccode_base_module_get_in_creation_method (self);
					_tmp103_ = _tmp102_;
					_tmp100_ = !_tmp103_;
				} else {
					_tmp100_ = FALSE;
				}
				if (_tmp100_) {
					ValaCCodeExpression* _tmp104_;
					ValaCCodeExpression* _tmp105_;
					ValaCCodeMemberAccess* _tmp106_;
					ValaCCodeMemberAccess* _tmp107_;
					const gchar* _tmp108_;
					ValaCCodeMemberAccess* _tmp109_;
					ValaCCodeExpression* _tmp110_;
					_tmp104_ = vala_ccode_base_module_get_this_cexpression (self);
					_tmp105_ = _tmp104_;
					_tmp106_ = vala_ccode_member_access_new_pointer (_tmp105_, "priv");
					_tmp107_ = _tmp106_;
					_tmp108_ = func_name;
					_tmp109_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp107_, _tmp108_);
					_tmp110_ = (ValaCCodeExpression*) _tmp109_;
					_vala_ccode_node_unref0 (_tmp107_);
					_vala_ccode_node_unref0 (_tmp105_);
					result = _tmp110_;
					_g_free0 (func_name);
					_vala_code_node_unref0 (type_parameter);
					return result;
				} else {
					const gchar* _tmp111_;
					ValaCCodeExpression* _tmp112_;
					_tmp111_ = func_name;
					_tmp112_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp111_);
					result = _tmp112_;
					_g_free0 (func_name);
					_vala_code_node_unref0 (type_parameter);
					return result;
				}
				_g_free0 (func_name);
				_vala_code_node_unref0 (type_parameter);
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
					ValaPointerType* pointer_type = NULL;
					ValaPointerType* _tmp113_;
					ValaPointerType* _tmp114_;
					ValaDataType* _tmp115_;
					ValaDataType* _tmp116_;
					ValaCCodeExpression* _tmp117_;
					_tmp113_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_POINTER_TYPE, ValaPointerType));
					pointer_type = _tmp113_;
					_tmp114_ = pointer_type;
					_tmp115_ = vala_pointer_type_get_base_type (_tmp114_);
					_tmp116_ = _tmp115_;
					_tmp117_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp116_, source_reference, FALSE);
					result = _tmp117_;
					_vala_code_node_unref0 (pointer_type);
					return result;
				} else {
					ValaCCodeConstant* _tmp118_;
					_tmp118_ = vala_ccode_constant_new ("NULL");
					result = (ValaCCodeExpression*) _tmp118_;
					return result;
				}
			}
		}
	}
}

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

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_data_type (*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_data_type (*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_data_type (*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_data_type (*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_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	ValaCCodeParameter* _tmp18_;
	ValaCCodeParameter* _tmp19_;
	ValaCCodeFunction* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	ValaCCodeParameter* _tmp25_;
	ValaCCodeParameter* _tmp26_;
	ValaCCodeFunction* _tmp27_;
	gboolean has_instance_fields = FALSE;
	ValaCCodeFile* _tmp170_;
	ValaCCodeFunction* _tmp171_;
	ValaCCodeFile* _tmp172_;
	ValaCCodeFunction* _tmp173_;
	gchar* result = NULL;
	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_ = vala_ccode_function_new (_tmp10_, "gboolean");
	function = _tmp11_;
	_tmp12_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp12_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp13_ = function;
	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp15_ = _tmp14_;
	_tmp16_ = g_strdup_printf ("const %s *", _tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_parameter_new ("s1", _tmp17_);
	_tmp19_ = _tmp18_;
	vala_ccode_function_add_parameter (_tmp13_, _tmp19_);
	_vala_ccode_node_unref0 (_tmp19_);
	_g_free0 (_tmp17_);
	_g_free0 (_tmp15_);
	_tmp20_ = function;
	_tmp21_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp22_ = _tmp21_;
	_tmp23_ = g_strdup_printf ("const %s *", _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = vala_ccode_parameter_new ("s2", _tmp24_);
	_tmp26_ = _tmp25_;
	vala_ccode_function_add_parameter (_tmp20_, _tmp26_);
	_vala_ccode_node_unref0 (_tmp26_);
	_g_free0 (_tmp24_);
	_g_free0 (_tmp22_);
	_tmp27_ = function;
	vala_ccode_base_module_push_function (self, _tmp27_);
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp28_;
		ValaCCodeIdentifier* _tmp29_;
		ValaCCodeIdentifier* _tmp30_;
		ValaCCodeIdentifier* _tmp31_;
		ValaCCodeBinaryExpression* _tmp32_;
		ValaCCodeBinaryExpression* _tmp33_;
		ValaCCodeFunction* _tmp34_;
		ValaCCodeFunction* _tmp35_;
		ValaCCodeBinaryExpression* _tmp36_;
		ValaCCodeFunction* _tmp37_;
		ValaCCodeFunction* _tmp38_;
		ValaCCodeConstant* _tmp39_;
		ValaCCodeConstant* _tmp40_;
		ValaCCodeFunction* _tmp41_;
		ValaCCodeFunction* _tmp42_;
		_tmp28_ = vala_ccode_identifier_new ("s1");
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_ccode_identifier_new ("s2");
		_tmp31_ = _tmp30_;
		_tmp32_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp29_, (ValaCCodeExpression*) _tmp31_);
		_tmp33_ = _tmp32_;
		_vala_ccode_node_unref0 (_tmp31_);
		_vala_ccode_node_unref0 (_tmp29_);
		cexp = _tmp33_;
		_tmp34_ = vala_ccode_base_module_get_ccode (self);
		_tmp35_ = _tmp34_;
		_tmp36_ = cexp;
		vala_ccode_function_open_if (_tmp35_, (ValaCCodeExpression*) _tmp36_);
		_tmp37_ = vala_ccode_base_module_get_ccode (self);
		_tmp38_ = _tmp37_;
		_tmp39_ = vala_ccode_constant_new ("TRUE");
		_tmp40_ = _tmp39_;
		vala_ccode_function_add_return (_tmp38_, (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);
	}
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp43_;
		ValaCCodeIdentifier* _tmp44_;
		ValaCCodeConstant* _tmp45_;
		ValaCCodeConstant* _tmp46_;
		ValaCCodeBinaryExpression* _tmp47_;
		ValaCCodeBinaryExpression* _tmp48_;
		ValaCCodeFunction* _tmp49_;
		ValaCCodeFunction* _tmp50_;
		ValaCCodeBinaryExpression* _tmp51_;
		ValaCCodeFunction* _tmp52_;
		ValaCCodeFunction* _tmp53_;
		ValaCCodeConstant* _tmp54_;
		ValaCCodeConstant* _tmp55_;
		ValaCCodeFunction* _tmp56_;
		ValaCCodeFunction* _tmp57_;
		ValaCCodeIdentifier* _tmp58_;
		ValaCCodeIdentifier* _tmp59_;
		ValaCCodeConstant* _tmp60_;
		ValaCCodeConstant* _tmp61_;
		ValaCCodeBinaryExpression* _tmp62_;
		ValaCCodeFunction* _tmp63_;
		ValaCCodeFunction* _tmp64_;
		ValaCCodeBinaryExpression* _tmp65_;
		ValaCCodeFunction* _tmp66_;
		ValaCCodeFunction* _tmp67_;
		ValaCCodeConstant* _tmp68_;
		ValaCCodeConstant* _tmp69_;
		ValaCCodeFunction* _tmp70_;
		ValaCCodeFunction* _tmp71_;
		_tmp43_ = vala_ccode_identifier_new ("s1");
		_tmp44_ = _tmp43_;
		_tmp45_ = vala_ccode_constant_new ("NULL");
		_tmp46_ = _tmp45_;
		_tmp47_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp44_, (ValaCCodeExpression*) _tmp46_);
		_tmp48_ = _tmp47_;
		_vala_ccode_node_unref0 (_tmp46_);
		_vala_ccode_node_unref0 (_tmp44_);
		cexp = _tmp48_;
		_tmp49_ = vala_ccode_base_module_get_ccode (self);
		_tmp50_ = _tmp49_;
		_tmp51_ = cexp;
		vala_ccode_function_open_if (_tmp50_, (ValaCCodeExpression*) _tmp51_);
		_tmp52_ = vala_ccode_base_module_get_ccode (self);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_constant_new ("FALSE");
		_tmp55_ = _tmp54_;
		vala_ccode_function_add_return (_tmp53_, (ValaCCodeExpression*) _tmp55_);
		_vala_ccode_node_unref0 (_tmp55_);
		_tmp56_ = vala_ccode_base_module_get_ccode (self);
		_tmp57_ = _tmp56_;
		vala_ccode_function_close (_tmp57_);
		_tmp58_ = vala_ccode_identifier_new ("s2");
		_tmp59_ = _tmp58_;
		_tmp60_ = vala_ccode_constant_new ("NULL");
		_tmp61_ = _tmp60_;
		_tmp62_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp59_, (ValaCCodeExpression*) _tmp61_);
		_vala_ccode_node_unref0 (cexp);
		cexp = _tmp62_;
		_vala_ccode_node_unref0 (_tmp61_);
		_vala_ccode_node_unref0 (_tmp59_);
		_tmp63_ = vala_ccode_base_module_get_ccode (self);
		_tmp64_ = _tmp63_;
		_tmp65_ = cexp;
		vala_ccode_function_open_if (_tmp64_, (ValaCCodeExpression*) _tmp65_);
		_tmp66_ = vala_ccode_base_module_get_ccode (self);
		_tmp67_ = _tmp66_;
		_tmp68_ = vala_ccode_constant_new ("FALSE");
		_tmp69_ = _tmp68_;
		vala_ccode_function_add_return (_tmp67_, (ValaCCodeExpression*) _tmp69_);
		_vala_ccode_node_unref0 (_tmp69_);
		_tmp70_ = vala_ccode_base_module_get_ccode (self);
		_tmp71_ = _tmp70_;
		vala_ccode_function_close (_tmp71_);
		_vala_ccode_node_unref0 (cexp);
	}
	has_instance_fields = FALSE;
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp72_;
		gint _f_size = 0;
		ValaList* _tmp73_;
		gint _tmp74_;
		gint _tmp75_;
		gint _f_index = 0;
		_tmp72_ = vala_struct_get_fields (st);
		_f_list = _tmp72_;
		_tmp73_ = _f_list;
		_tmp74_ = vala_collection_get_size ((ValaCollection*) _tmp73_);
		_tmp75_ = _tmp74_;
		_f_size = _tmp75_;
		_f_index = -1;
		while (TRUE) {
			ValaField* f = NULL;
			ValaList* _tmp76_;
			gpointer _tmp77_;
			ValaField* _tmp78_;
			ValaMemberBinding _tmp79_;
			ValaMemberBinding _tmp80_;
			ValaCCodeExpression* cexp = NULL;
			ValaCCodeExpression* s1 = NULL;
			ValaCCodeIdentifier* _tmp81_;
			ValaCCodeIdentifier* _tmp82_;
			ValaField* _tmp83_;
			gchar* _tmp84_;
			gchar* _tmp85_;
			ValaCCodeMemberAccess* _tmp86_;
			ValaCCodeExpression* _tmp87_;
			ValaCCodeExpression* s2 = NULL;
			ValaCCodeIdentifier* _tmp88_;
			ValaCCodeIdentifier* _tmp89_;
			ValaField* _tmp90_;
			gchar* _tmp91_;
			gchar* _tmp92_;
			ValaCCodeMemberAccess* _tmp93_;
			ValaCCodeExpression* _tmp94_;
			ValaDataType* variable_type = NULL;
			ValaField* _tmp95_;
			ValaDataType* _tmp96_;
			ValaDataType* _tmp97_;
			ValaDataType* _tmp98_;
			gboolean _tmp99_ = FALSE;
			ValaField* _tmp100_;
			ValaDataType* _tmp101_;
			ValaDataType* _tmp102_;
			ValaCCodeFunction* _tmp140_;
			ValaCCodeFunction* _tmp141_;
			ValaCCodeExpression* _tmp142_;
			ValaCCodeFunction* _tmp143_;
			ValaCCodeFunction* _tmp144_;
			ValaCCodeConstant* _tmp145_;
			ValaCCodeConstant* _tmp146_;
			ValaCCodeFunction* _tmp147_;
			ValaCCodeFunction* _tmp148_;
			_f_index = _f_index + 1;
			if (!(_f_index < _f_size)) {
				break;
			}
			_tmp76_ = _f_list;
			_tmp77_ = vala_list_get (_tmp76_, _f_index);
			f = (ValaField*) _tmp77_;
			_tmp78_ = f;
			_tmp79_ = vala_field_get_binding (_tmp78_);
			_tmp80_ = _tmp79_;
			if (_tmp80_ != VALA_MEMBER_BINDING_INSTANCE) {
				_vala_code_node_unref0 (f);
				continue;
			}
			has_instance_fields = TRUE;
			_tmp81_ = vala_ccode_identifier_new ("s1");
			_tmp82_ = _tmp81_;
			_tmp83_ = f;
			_tmp84_ = vala_get_ccode_name ((ValaCodeNode*) _tmp83_);
			_tmp85_ = _tmp84_;
			_tmp86_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp82_, _tmp85_);
			_tmp87_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
			_g_free0 (_tmp85_);
			_vala_ccode_node_unref0 (_tmp82_);
			s1 = _tmp87_;
			_tmp88_ = vala_ccode_identifier_new ("s2");
			_tmp89_ = _tmp88_;
			_tmp90_ = f;
			_tmp91_ = vala_get_ccode_name ((ValaCodeNode*) _tmp90_);
			_tmp92_ = _tmp91_;
			_tmp93_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp89_, _tmp92_);
			_tmp94_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp93_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
			_g_free0 (_tmp92_);
			_vala_ccode_node_unref0 (_tmp89_);
			s2 = _tmp94_;
			_tmp95_ = f;
			_tmp96_ = vala_variable_get_variable_type ((ValaVariable*) _tmp95_);
			_tmp97_ = _tmp96_;
			_tmp98_ = vala_data_type_copy (_tmp97_);
			variable_type = _tmp98_;
			vala_ccode_base_module_make_comparable_cexpression (self, &variable_type, &s1, &variable_type, &s2);
			_tmp100_ = f;
			_tmp101_ = vala_variable_get_variable_type ((ValaVariable*) _tmp100_);
			_tmp102_ = _tmp101_;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp102_, VALA_TYPE_NULL_TYPE)) {
				ValaField* _tmp103_;
				ValaDataType* _tmp104_;
				ValaDataType* _tmp105_;
				ValaDataType* _tmp106_;
				_tmp103_ = f;
				_tmp104_ = vala_variable_get_variable_type ((ValaVariable*) _tmp103_);
				_tmp105_ = _tmp104_;
				_tmp106_ = self->string_type;
				_tmp99_ = vala_data_type_compatible (_tmp105_, _tmp106_);
			} else {
				_tmp99_ = FALSE;
			}
			if (_tmp99_) {
				ValaCCodeFunctionCall* ccall = NULL;
				ValaCCodeIdentifier* _tmp107_;
				ValaCCodeIdentifier* _tmp108_;
				ValaCCodeFunctionCall* _tmp109_;
				ValaCCodeFunctionCall* _tmp110_;
				ValaCCodeFunctionCall* _tmp111_;
				ValaCCodeExpression* _tmp112_;
				ValaCCodeFunctionCall* _tmp113_;
				ValaCCodeExpression* _tmp114_;
				ValaCCodeFunctionCall* _tmp115_;
				ValaCCodeExpression* _tmp116_;
				_tmp107_ = vala_ccode_identifier_new ("g_strcmp0");
				_tmp108_ = _tmp107_;
				_tmp109_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp108_);
				_tmp110_ = _tmp109_;
				_vala_ccode_node_unref0 (_tmp108_);
				ccall = _tmp110_;
				_tmp111_ = ccall;
				_tmp112_ = s1;
				vala_ccode_function_call_add_argument (_tmp111_, _tmp112_);
				_tmp113_ = ccall;
				_tmp114_ = s2;
				vala_ccode_function_call_add_argument (_tmp113_, _tmp114_);
				_tmp115_ = ccall;
				_tmp116_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp115_);
				_vala_ccode_node_unref0 (cexp);
				cexp = _tmp116_;
				_vala_ccode_node_unref0 (ccall);
			} else {
				ValaField* _tmp117_;
				ValaDataType* _tmp118_;
				ValaDataType* _tmp119_;
				_tmp117_ = f;
				_tmp118_ = vala_variable_get_variable_type ((ValaVariable*) _tmp117_);
				_tmp119_ = _tmp118_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp119_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
					gchar* equalfunc = NULL;
					ValaField* _tmp120_;
					ValaDataType* _tmp121_;
					ValaDataType* _tmp122_;
					ValaTypeSymbol* _tmp123_;
					ValaTypeSymbol* _tmp124_;
					gchar* _tmp125_;
					ValaCCodeFunctionCall* ccall = NULL;
					const gchar* _tmp126_;
					ValaCCodeIdentifier* _tmp127_;
					ValaCCodeIdentifier* _tmp128_;
					ValaCCodeFunctionCall* _tmp129_;
					ValaCCodeFunctionCall* _tmp130_;
					ValaCCodeFunctionCall* _tmp131_;
					ValaCCodeExpression* _tmp132_;
					ValaCCodeFunctionCall* _tmp133_;
					ValaCCodeExpression* _tmp134_;
					ValaCCodeFunctionCall* _tmp135_;
					ValaCCodeUnaryExpression* _tmp136_;
					_tmp120_ = f;
					_tmp121_ = vala_variable_get_variable_type ((ValaVariable*) _tmp120_);
					_tmp122_ = _tmp121_;
					_tmp123_ = vala_data_type_get_data_type (_tmp122_);
					_tmp124_ = _tmp123_;
					_tmp125_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_TYPE (_tmp124_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp124_) : NULL);
					equalfunc = _tmp125_;
					_tmp126_ = equalfunc;
					_tmp127_ = vala_ccode_identifier_new (_tmp126_);
					_tmp128_ = _tmp127_;
					_tmp129_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp128_);
					_tmp130_ = _tmp129_;
					_vala_ccode_node_unref0 (_tmp128_);
					ccall = _tmp130_;
					_tmp131_ = ccall;
					_tmp132_ = s1;
					vala_ccode_function_call_add_argument (_tmp131_, _tmp132_);
					_tmp133_ = ccall;
					_tmp134_ = s2;
					vala_ccode_function_call_add_argument (_tmp133_, _tmp134_);
					_tmp135_ = ccall;
					_tmp136_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp135_);
					_vala_ccode_node_unref0 (cexp);
					cexp = (ValaCCodeExpression*) _tmp136_;
					_vala_ccode_node_unref0 (ccall);
					_g_free0 (equalfunc);
				} else {
					ValaCCodeExpression* _tmp137_;
					ValaCCodeExpression* _tmp138_;
					ValaCCodeBinaryExpression* _tmp139_;
					_tmp137_ = s1;
					_tmp138_ = s2;
					_tmp139_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp137_, _tmp138_);
					_vala_ccode_node_unref0 (cexp);
					cexp = (ValaCCodeExpression*) _tmp139_;
				}
			}
			_tmp140_ = vala_ccode_base_module_get_ccode (self);
			_tmp141_ = _tmp140_;
			_tmp142_ = cexp;
			vala_ccode_function_open_if (_tmp141_, _tmp142_);
			_tmp143_ = vala_ccode_base_module_get_ccode (self);
			_tmp144_ = _tmp143_;
			_tmp145_ = vala_ccode_constant_new ("FALSE");
			_tmp146_ = _tmp145_;
			vala_ccode_function_add_return (_tmp144_, (ValaCCodeExpression*) _tmp146_);
			_vala_ccode_node_unref0 (_tmp146_);
			_tmp147_ = vala_ccode_base_module_get_ccode (self);
			_tmp148_ = _tmp147_;
			vala_ccode_function_close (_tmp148_);
			_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);
		}
		_vala_iterable_unref0 (_f_list);
	}
	if (!has_instance_fields) {
		if (vala_struct_is_simple_type (st)) {
			ValaCCodeBinaryExpression* cexp = NULL;
			ValaCCodeIdentifier* _tmp149_;
			ValaCCodeIdentifier* _tmp150_;
			ValaCCodeUnaryExpression* _tmp151_;
			ValaCCodeUnaryExpression* _tmp152_;
			ValaCCodeIdentifier* _tmp153_;
			ValaCCodeIdentifier* _tmp154_;
			ValaCCodeUnaryExpression* _tmp155_;
			ValaCCodeUnaryExpression* _tmp156_;
			ValaCCodeBinaryExpression* _tmp157_;
			ValaCCodeBinaryExpression* _tmp158_;
			ValaCCodeFunction* _tmp159_;
			ValaCCodeFunction* _tmp160_;
			ValaCCodeBinaryExpression* _tmp161_;
			_tmp149_ = vala_ccode_identifier_new ("s1");
			_tmp150_ = _tmp149_;
			_tmp151_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp150_);
			_tmp152_ = _tmp151_;
			_tmp153_ = vala_ccode_identifier_new ("s2");
			_tmp154_ = _tmp153_;
			_tmp155_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp154_);
			_tmp156_ = _tmp155_;
			_tmp157_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp152_, (ValaCCodeExpression*) _tmp156_);
			_tmp158_ = _tmp157_;
			_vala_ccode_node_unref0 (_tmp156_);
			_vala_ccode_node_unref0 (_tmp154_);
			_vala_ccode_node_unref0 (_tmp152_);
			_vala_ccode_node_unref0 (_tmp150_);
			cexp = _tmp158_;
			_tmp159_ = vala_ccode_base_module_get_ccode (self);
			_tmp160_ = _tmp159_;
			_tmp161_ = cexp;
			vala_ccode_function_add_return (_tmp160_, (ValaCCodeExpression*) _tmp161_);
			_vala_ccode_node_unref0 (cexp);
		} else {
			ValaCCodeFunction* _tmp162_;
			ValaCCodeFunction* _tmp163_;
			ValaCCodeConstant* _tmp164_;
			ValaCCodeConstant* _tmp165_;
			_tmp162_ = vala_ccode_base_module_get_ccode (self);
			_tmp163_ = _tmp162_;
			_tmp164_ = vala_ccode_constant_new ("FALSE");
			_tmp165_ = _tmp164_;
			vala_ccode_function_add_return (_tmp163_, (ValaCCodeExpression*) _tmp165_);
			_vala_ccode_node_unref0 (_tmp165_);
		}
	} else {
		ValaCCodeFunction* _tmp166_;
		ValaCCodeFunction* _tmp167_;
		ValaCCodeConstant* _tmp168_;
		ValaCCodeConstant* _tmp169_;
		_tmp166_ = vala_ccode_base_module_get_ccode (self);
		_tmp167_ = _tmp166_;
		_tmp168_ = vala_ccode_constant_new ("TRUE");
		_tmp169_ = _tmp168_;
		vala_ccode_function_add_return (_tmp167_, (ValaCCodeExpression*) _tmp169_);
		_vala_ccode_node_unref0 (_tmp169_);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp170_ = self->cfile;
	_tmp171_ = function;
	vala_ccode_file_add_function_declaration (_tmp170_, _tmp171_);
	_tmp172_ = self->cfile;
	_tmp173_ = function;
	vala_ccode_file_add_function (_tmp172_, _tmp173_);
	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_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	ValaCCodeParameter* _tmp20_;
	ValaCCodeParameter* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaCCodeFile* _tmp80_;
	ValaCCodeFunction* _tmp81_;
	ValaCCodeFile* _tmp82_;
	ValaCCodeFunction* _tmp83_;
	gchar* result = NULL;
	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_ = vala_ccode_function_new (_tmp5_, "gboolean");
	function = _tmp6_;
	_tmp7_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp7_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp8_ = function;
	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) sym);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("const %s *", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_parameter_new ("s1", _tmp12_);
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp8_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_g_free0 (_tmp12_);
	_g_free0 (_tmp10_);
	_tmp15_ = function;
	_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) sym);
	_tmp17_ = _tmp16_;
	_tmp18_ = g_strdup_printf ("const %s *", _tmp17_);
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_ccode_parameter_new ("s2", _tmp19_);
	_tmp21_ = _tmp20_;
	vala_ccode_function_add_parameter (_tmp15_, _tmp21_);
	_vala_ccode_node_unref0 (_tmp21_);
	_g_free0 (_tmp19_);
	_g_free0 (_tmp17_);
	_tmp22_ = function;
	vala_ccode_base_module_push_function (self, _tmp22_);
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp23_;
		ValaCCodeIdentifier* _tmp24_;
		ValaCCodeIdentifier* _tmp25_;
		ValaCCodeIdentifier* _tmp26_;
		ValaCCodeBinaryExpression* _tmp27_;
		ValaCCodeBinaryExpression* _tmp28_;
		ValaCCodeFunction* _tmp29_;
		ValaCCodeFunction* _tmp30_;
		ValaCCodeBinaryExpression* _tmp31_;
		ValaCCodeFunction* _tmp32_;
		ValaCCodeFunction* _tmp33_;
		ValaCCodeConstant* _tmp34_;
		ValaCCodeConstant* _tmp35_;
		ValaCCodeFunction* _tmp36_;
		ValaCCodeFunction* _tmp37_;
		_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_EQUALITY, (ValaCCodeExpression*) _tmp24_, (ValaCCodeExpression*) _tmp26_);
		_tmp28_ = _tmp27_;
		_vala_ccode_node_unref0 (_tmp26_);
		_vala_ccode_node_unref0 (_tmp24_);
		cexp = _tmp28_;
		_tmp29_ = vala_ccode_base_module_get_ccode (self);
		_tmp30_ = _tmp29_;
		_tmp31_ = cexp;
		vala_ccode_function_open_if (_tmp30_, (ValaCCodeExpression*) _tmp31_);
		_tmp32_ = vala_ccode_base_module_get_ccode (self);
		_tmp33_ = _tmp32_;
		_tmp34_ = vala_ccode_constant_new ("TRUE");
		_tmp35_ = _tmp34_;
		vala_ccode_function_add_return (_tmp33_, (ValaCCodeExpression*) _tmp35_);
		_vala_ccode_node_unref0 (_tmp35_);
		_tmp36_ = vala_ccode_base_module_get_ccode (self);
		_tmp37_ = _tmp36_;
		vala_ccode_function_close (_tmp37_);
		_vala_ccode_node_unref0 (cexp);
	}
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp38_;
		ValaCCodeIdentifier* _tmp39_;
		ValaCCodeConstant* _tmp40_;
		ValaCCodeConstant* _tmp41_;
		ValaCCodeBinaryExpression* _tmp42_;
		ValaCCodeBinaryExpression* _tmp43_;
		ValaCCodeFunction* _tmp44_;
		ValaCCodeFunction* _tmp45_;
		ValaCCodeBinaryExpression* _tmp46_;
		ValaCCodeFunction* _tmp47_;
		ValaCCodeFunction* _tmp48_;
		ValaCCodeConstant* _tmp49_;
		ValaCCodeConstant* _tmp50_;
		ValaCCodeFunction* _tmp51_;
		ValaCCodeFunction* _tmp52_;
		ValaCCodeIdentifier* _tmp53_;
		ValaCCodeIdentifier* _tmp54_;
		ValaCCodeConstant* _tmp55_;
		ValaCCodeConstant* _tmp56_;
		ValaCCodeBinaryExpression* _tmp57_;
		ValaCCodeFunction* _tmp58_;
		ValaCCodeFunction* _tmp59_;
		ValaCCodeBinaryExpression* _tmp60_;
		ValaCCodeFunction* _tmp61_;
		ValaCCodeFunction* _tmp62_;
		ValaCCodeConstant* _tmp63_;
		ValaCCodeConstant* _tmp64_;
		ValaCCodeFunction* _tmp65_;
		ValaCCodeFunction* _tmp66_;
		_tmp38_ = vala_ccode_identifier_new ("s1");
		_tmp39_ = _tmp38_;
		_tmp40_ = vala_ccode_constant_new ("NULL");
		_tmp41_ = _tmp40_;
		_tmp42_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp39_, (ValaCCodeExpression*) _tmp41_);
		_tmp43_ = _tmp42_;
		_vala_ccode_node_unref0 (_tmp41_);
		_vala_ccode_node_unref0 (_tmp39_);
		cexp = _tmp43_;
		_tmp44_ = vala_ccode_base_module_get_ccode (self);
		_tmp45_ = _tmp44_;
		_tmp46_ = cexp;
		vala_ccode_function_open_if (_tmp45_, (ValaCCodeExpression*) _tmp46_);
		_tmp47_ = vala_ccode_base_module_get_ccode (self);
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_constant_new ("FALSE");
		_tmp50_ = _tmp49_;
		vala_ccode_function_add_return (_tmp48_, (ValaCCodeExpression*) _tmp50_);
		_vala_ccode_node_unref0 (_tmp50_);
		_tmp51_ = vala_ccode_base_module_get_ccode (self);
		_tmp52_ = _tmp51_;
		vala_ccode_function_close (_tmp52_);
		_tmp53_ = vala_ccode_identifier_new ("s2");
		_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_);
		_vala_ccode_node_unref0 (cexp);
		cexp = _tmp57_;
		_vala_ccode_node_unref0 (_tmp56_);
		_vala_ccode_node_unref0 (_tmp54_);
		_tmp58_ = vala_ccode_base_module_get_ccode (self);
		_tmp59_ = _tmp58_;
		_tmp60_ = cexp;
		vala_ccode_function_open_if (_tmp59_, (ValaCCodeExpression*) _tmp60_);
		_tmp61_ = vala_ccode_base_module_get_ccode (self);
		_tmp62_ = _tmp61_;
		_tmp63_ = vala_ccode_constant_new ("FALSE");
		_tmp64_ = _tmp63_;
		vala_ccode_function_add_return (_tmp62_, (ValaCCodeExpression*) _tmp64_);
		_vala_ccode_node_unref0 (_tmp64_);
		_tmp65_ = vala_ccode_base_module_get_ccode (self);
		_tmp66_ = _tmp65_;
		vala_ccode_function_close (_tmp66_);
		_vala_ccode_node_unref0 (cexp);
	}
	{
		ValaCCodeBinaryExpression* cexp = NULL;
		ValaCCodeIdentifier* _tmp67_;
		ValaCCodeIdentifier* _tmp68_;
		ValaCCodeUnaryExpression* _tmp69_;
		ValaCCodeUnaryExpression* _tmp70_;
		ValaCCodeIdentifier* _tmp71_;
		ValaCCodeIdentifier* _tmp72_;
		ValaCCodeUnaryExpression* _tmp73_;
		ValaCCodeUnaryExpression* _tmp74_;
		ValaCCodeBinaryExpression* _tmp75_;
		ValaCCodeBinaryExpression* _tmp76_;
		ValaCCodeFunction* _tmp77_;
		ValaCCodeFunction* _tmp78_;
		ValaCCodeBinaryExpression* _tmp79_;
		_tmp67_ = vala_ccode_identifier_new ("s1");
		_tmp68_ = _tmp67_;
		_tmp69_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp68_);
		_tmp70_ = _tmp69_;
		_tmp71_ = vala_ccode_identifier_new ("s2");
		_tmp72_ = _tmp71_;
		_tmp73_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp72_);
		_tmp74_ = _tmp73_;
		_tmp75_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp70_, (ValaCCodeExpression*) _tmp74_);
		_tmp76_ = _tmp75_;
		_vala_ccode_node_unref0 (_tmp74_);
		_vala_ccode_node_unref0 (_tmp72_);
		_vala_ccode_node_unref0 (_tmp70_);
		_vala_ccode_node_unref0 (_tmp68_);
		cexp = _tmp76_;
		_tmp77_ = vala_ccode_base_module_get_ccode (self);
		_tmp78_ = _tmp77_;
		_tmp79_ = cexp;
		vala_ccode_function_add_return (_tmp78_, (ValaCCodeExpression*) _tmp79_);
		_vala_ccode_node_unref0 (cexp);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp80_ = self->cfile;
	_tmp81_ = function;
	vala_ccode_file_add_function_declaration (_tmp80_, _tmp81_);
	_tmp82_ = self->cfile;
	_tmp83_ = function;
	vala_ccode_file_add_function (_tmp82_, _tmp83_);
	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* _tmp115_;
	ValaCCodeFunction* _tmp116_;
	ValaCCodeFile* _tmp117_;
	ValaCCodeFunction* _tmp118_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value_type != NULL, NULL);
	_tmp0_ = vala_value_type_get_type_symbol (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_value_type_get_type_symbol (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;
		ValaCCodeIdentifier* _tmp41_;
		ValaCCodeIdentifier* _tmp42_;
		ValaCCodeFunctionCall* _tmp43_;
		ValaCCodeFunctionCall* _tmp44_;
		ValaCCodeFunctionCall* _tmp45_;
		ValaTypeSymbol* _tmp46_;
		ValaTypeSymbol* _tmp47_;
		gchar* _tmp48_;
		gchar* _tmp49_;
		ValaCCodeConstant* _tmp50_;
		ValaCCodeConstant* _tmp51_;
		ValaCCodeFunctionCall* _tmp52_;
		ValaCCodeConstant* _tmp53_;
		ValaCCodeConstant* _tmp54_;
		ValaCCodeFunction* _tmp55_;
		ValaCCodeFunction* _tmp56_;
		ValaCCodeIdentifier* _tmp57_;
		ValaCCodeIdentifier* _tmp58_;
		ValaCCodeFunctionCall* _tmp59_;
		ValaStruct* st = NULL;
		ValaTypeSymbol* _tmp60_;
		ValaTypeSymbol* _tmp61_;
		ValaStruct* _tmp62_;
		gboolean _tmp63_ = FALSE;
		ValaStruct* _tmp64_;
		ValaCCodeFunction* _tmp111_;
		ValaCCodeFunction* _tmp112_;
		ValaCCodeIdentifier* _tmp113_;
		ValaCCodeIdentifier* _tmp114_;
		_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_ = vala_ccode_identifier_new ("g_new0");
		_tmp42_ = _tmp41_;
		_tmp43_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp42_);
		_tmp44_ = _tmp43_;
		_vala_ccode_node_unref0 (_tmp42_);
		creation_call = _tmp44_;
		_tmp45_ = creation_call;
		_tmp46_ = vala_data_type_get_data_type ((ValaDataType*) value_type);
		_tmp47_ = _tmp46_;
		_tmp48_ = vala_get_ccode_name ((ValaCodeNode*) _tmp47_);
		_tmp49_ = _tmp48_;
		_tmp50_ = vala_ccode_constant_new (_tmp49_);
		_tmp51_ = _tmp50_;
		vala_ccode_function_call_add_argument (_tmp45_, (ValaCCodeExpression*) _tmp51_);
		_vala_ccode_node_unref0 (_tmp51_);
		_g_free0 (_tmp49_);
		_tmp52_ = creation_call;
		_tmp53_ = vala_ccode_constant_new ("1");
		_tmp54_ = _tmp53_;
		vala_ccode_function_call_add_argument (_tmp52_, (ValaCCodeExpression*) _tmp54_);
		_vala_ccode_node_unref0 (_tmp54_);
		_tmp55_ = vala_ccode_base_module_get_ccode (self);
		_tmp56_ = _tmp55_;
		_tmp57_ = vala_ccode_identifier_new ("dup");
		_tmp58_ = _tmp57_;
		_tmp59_ = creation_call;
		vala_ccode_function_add_assignment (_tmp56_, (ValaCCodeExpression*) _tmp58_, (ValaCCodeExpression*) _tmp59_);
		_vala_ccode_node_unref0 (_tmp58_);
		_tmp60_ = vala_data_type_get_data_type ((ValaDataType*) value_type);
		_tmp61_ = _tmp60_;
		_tmp62_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp61_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp61_) : NULL);
		st = _tmp62_;
		_tmp64_ = st;
		if (_tmp64_ != NULL) {
			ValaStruct* _tmp65_;
			_tmp65_ = st;
			_tmp63_ = vala_struct_is_disposable (_tmp65_);
		} else {
			_tmp63_ = FALSE;
		}
		if (_tmp63_) {
			ValaStruct* _tmp66_;
			ValaCCodeFunctionCall* copy_call = NULL;
			ValaStruct* _tmp68_;
			gchar* _tmp69_;
			gchar* _tmp70_;
			ValaCCodeIdentifier* _tmp71_;
			ValaCCodeIdentifier* _tmp72_;
			ValaCCodeFunctionCall* _tmp73_;
			ValaCCodeFunctionCall* _tmp74_;
			ValaCCodeFunctionCall* _tmp75_;
			ValaCCodeIdentifier* _tmp76_;
			ValaCCodeIdentifier* _tmp77_;
			ValaCCodeFunctionCall* _tmp78_;
			ValaCCodeIdentifier* _tmp79_;
			ValaCCodeIdentifier* _tmp80_;
			ValaCCodeFunction* _tmp81_;
			ValaCCodeFunction* _tmp82_;
			ValaCCodeFunctionCall* _tmp83_;
			_tmp66_ = st;
			if (!vala_get_ccode_has_copy_function (_tmp66_)) {
				ValaStruct* _tmp67_;
				_tmp67_ = st;
				vala_ccode_base_module_generate_struct_copy_function (self, _tmp67_);
			}
			_tmp68_ = st;
			_tmp69_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp68_);
			_tmp70_ = _tmp69_;
			_tmp71_ = vala_ccode_identifier_new (_tmp70_);
			_tmp72_ = _tmp71_;
			_tmp73_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp72_);
			_tmp74_ = _tmp73_;
			_vala_ccode_node_unref0 (_tmp72_);
			_g_free0 (_tmp70_);
			copy_call = _tmp74_;
			_tmp75_ = copy_call;
			_tmp76_ = vala_ccode_identifier_new ("self");
			_tmp77_ = _tmp76_;
			vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp77_);
			_vala_ccode_node_unref0 (_tmp77_);
			_tmp78_ = copy_call;
			_tmp79_ = vala_ccode_identifier_new ("dup");
			_tmp80_ = _tmp79_;
			vala_ccode_function_call_add_argument (_tmp78_, (ValaCCodeExpression*) _tmp80_);
			_vala_ccode_node_unref0 (_tmp80_);
			_tmp81_ = vala_ccode_base_module_get_ccode (self);
			_tmp82_ = _tmp81_;
			_tmp83_ = copy_call;
			vala_ccode_function_add_expression (_tmp82_, (ValaCCodeExpression*) _tmp83_);
			_vala_ccode_node_unref0 (copy_call);
		} else {
			ValaCCodeFile* _tmp84_;
			ValaCCodeFunctionCall* sizeof_call = NULL;
			ValaCCodeIdentifier* _tmp85_;
			ValaCCodeIdentifier* _tmp86_;
			ValaCCodeFunctionCall* _tmp87_;
			ValaCCodeFunctionCall* _tmp88_;
			ValaCCodeFunctionCall* _tmp89_;
			ValaTypeSymbol* _tmp90_;
			ValaTypeSymbol* _tmp91_;
			gchar* _tmp92_;
			gchar* _tmp93_;
			ValaCCodeConstant* _tmp94_;
			ValaCCodeConstant* _tmp95_;
			ValaCCodeFunctionCall* copy_call = NULL;
			ValaCCodeIdentifier* _tmp96_;
			ValaCCodeIdentifier* _tmp97_;
			ValaCCodeFunctionCall* _tmp98_;
			ValaCCodeFunctionCall* _tmp99_;
			ValaCCodeFunctionCall* _tmp100_;
			ValaCCodeIdentifier* _tmp101_;
			ValaCCodeIdentifier* _tmp102_;
			ValaCCodeFunctionCall* _tmp103_;
			ValaCCodeIdentifier* _tmp104_;
			ValaCCodeIdentifier* _tmp105_;
			ValaCCodeFunctionCall* _tmp106_;
			ValaCCodeFunctionCall* _tmp107_;
			ValaCCodeFunction* _tmp108_;
			ValaCCodeFunction* _tmp109_;
			ValaCCodeFunctionCall* _tmp110_;
			_tmp84_ = self->cfile;
			vala_ccode_file_add_include (_tmp84_, "string.h", FALSE);
			_tmp85_ = vala_ccode_identifier_new ("sizeof");
			_tmp86_ = _tmp85_;
			_tmp87_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp86_);
			_tmp88_ = _tmp87_;
			_vala_ccode_node_unref0 (_tmp86_);
			sizeof_call = _tmp88_;
			_tmp89_ = sizeof_call;
			_tmp90_ = vala_data_type_get_data_type ((ValaDataType*) value_type);
			_tmp91_ = _tmp90_;
			_tmp92_ = vala_get_ccode_name ((ValaCodeNode*) _tmp91_);
			_tmp93_ = _tmp92_;
			_tmp94_ = vala_ccode_constant_new (_tmp93_);
			_tmp95_ = _tmp94_;
			vala_ccode_function_call_add_argument (_tmp89_, (ValaCCodeExpression*) _tmp95_);
			_vala_ccode_node_unref0 (_tmp95_);
			_g_free0 (_tmp93_);
			_tmp96_ = vala_ccode_identifier_new ("memcpy");
			_tmp97_ = _tmp96_;
			_tmp98_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp97_);
			_tmp99_ = _tmp98_;
			_vala_ccode_node_unref0 (_tmp97_);
			copy_call = _tmp99_;
			_tmp100_ = copy_call;
			_tmp101_ = vala_ccode_identifier_new ("dup");
			_tmp102_ = _tmp101_;
			vala_ccode_function_call_add_argument (_tmp100_, (ValaCCodeExpression*) _tmp102_);
			_vala_ccode_node_unref0 (_tmp102_);
			_tmp103_ = copy_call;
			_tmp104_ = vala_ccode_identifier_new ("self");
			_tmp105_ = _tmp104_;
			vala_ccode_function_call_add_argument (_tmp103_, (ValaCCodeExpression*) _tmp105_);
			_vala_ccode_node_unref0 (_tmp105_);
			_tmp106_ = copy_call;
			_tmp107_ = sizeof_call;
			vala_ccode_function_call_add_argument (_tmp106_, (ValaCCodeExpression*) _tmp107_);
			_tmp108_ = vala_ccode_base_module_get_ccode (self);
			_tmp109_ = _tmp108_;
			_tmp110_ = copy_call;
			vala_ccode_function_add_expression (_tmp109_, (ValaCCodeExpression*) _tmp110_);
			_vala_ccode_node_unref0 (copy_call);
			_vala_ccode_node_unref0 (sizeof_call);
		}
		_tmp111_ = vala_ccode_base_module_get_ccode (self);
		_tmp112_ = _tmp111_;
		_tmp113_ = vala_ccode_identifier_new ("dup");
		_tmp114_ = _tmp113_;
		vala_ccode_function_add_return (_tmp112_, (ValaCCodeExpression*) _tmp114_);
		_vala_ccode_node_unref0 (_tmp114_);
		_vala_code_node_unref0 (st);
		_vala_ccode_node_unref0 (creation_call);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp115_ = self->cfile;
	_tmp116_ = function;
	vala_ccode_file_add_function_declaration (_tmp115_, _tmp116_);
	_tmp117_ = self->cfile;
	_tmp118_ = function;
	vala_ccode_file_add_function (_tmp117_, _tmp118_);
	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 = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_data_type (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_data_type (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 = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_data_type (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_data_type (type);
	_tmp17_ = _tmp16_;
	_tmp18_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp17_) : NULL);
	cl = _tmp18_;
	_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_code_node_unref0 (cl);
	_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_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	ValaCCodeVariableDeclarator* _tmp18_;
	ValaCCodeVariableDeclarator* _tmp19_;
	ValaCCodeUnaryExpression* cast = NULL;
	ValaCCodeIdentifier* _tmp20_;
	ValaCCodeIdentifier* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	ValaCCodeCastExpression* _tmp26_;
	ValaCCodeCastExpression* _tmp27_;
	ValaCCodeUnaryExpression* _tmp28_;
	ValaCCodeUnaryExpression* _tmp29_;
	ValaCCodeFunction* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeUnaryExpression* _tmp34_;
	ValaCCodeFunctionCall* free_call = NULL;
	ValaCCodeExpression* _tmp35_;
	ValaCCodeExpression* _tmp36_;
	ValaCCodeFunctionCall* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	ValaCCodeFunctionCall* _tmp39_;
	ValaCCodeIdentifier* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeFunction* _tmp42_;
	ValaCCodeFunction* _tmp43_;
	ValaCCodeFunctionCall* _tmp44_;
	ValaCCodeFile* _tmp45_;
	ValaCCodeFunction* _tmp46_;
	ValaCCodeFile* _tmp47_;
	ValaCCodeFunction* _tmp48_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_data_type (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_ = vala_ccode_parameter_new ("data", "gpointer");
	_tmp12_ = _tmp11_;
	vala_ccode_function_add_parameter (_tmp10_, _tmp12_);
	_vala_ccode_node_unref0 (_tmp12_);
	_tmp13_ = function;
	vala_ccode_base_module_push_function (self, _tmp13_);
	_tmp14_ = vala_ccode_base_module_get_ccode (self);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
	_tmp19_ = _tmp18_;
	vala_ccode_function_add_declaration (_tmp15_, _tmp17_, (ValaCCodeDeclarator*) _tmp19_, 0);
	_vala_ccode_node_unref0 (_tmp19_);
	_g_free0 (_tmp17_);
	_tmp20_ = vala_ccode_identifier_new ("data");
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_get_ccode_name ((ValaCodeNode*) type);
	_tmp23_ = _tmp22_;
	_tmp24_ = g_strconcat (_tmp23_, "*", NULL);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp21_, _tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp27_);
	_tmp29_ = _tmp28_;
	_vala_ccode_node_unref0 (_tmp27_);
	_g_free0 (_tmp25_);
	_g_free0 (_tmp23_);
	_vala_ccode_node_unref0 (_tmp21_);
	cast = _tmp29_;
	_tmp30_ = vala_ccode_base_module_get_ccode (self);
	_tmp31_ = _tmp30_;
	_tmp32_ = vala_ccode_identifier_new ("self");
	_tmp33_ = _tmp32_;
	_tmp34_ = cast;
	vala_ccode_function_add_assignment (_tmp31_, (ValaCCodeExpression*) _tmp33_, (ValaCCodeExpression*) _tmp34_);
	_vala_ccode_node_unref0 (_tmp33_);
	_tmp35_ = vala_ccode_base_module_get_destroy0_func_expression (self, type, FALSE);
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_function_call_new (_tmp36_);
	_tmp38_ = _tmp37_;
	_vala_ccode_node_unref0 (_tmp36_);
	free_call = _tmp38_;
	_tmp39_ = free_call;
	_tmp40_ = vala_ccode_identifier_new ("self");
	_tmp41_ = _tmp40_;
	vala_ccode_function_call_add_argument (_tmp39_, (ValaCCodeExpression*) _tmp41_);
	_vala_ccode_node_unref0 (_tmp41_);
	_tmp42_ = vala_ccode_base_module_get_ccode (self);
	_tmp43_ = _tmp42_;
	_tmp44_ = free_call;
	vala_ccode_function_add_expression (_tmp43_, (ValaCCodeExpression*) _tmp44_);
	vala_ccode_base_module_pop_function (self);
	_tmp45_ = self->cfile;
	_tmp46_ = function;
	vala_ccode_file_add_function_declaration (_tmp45_, _tmp46_);
	_tmp47_ = self->cfile;
	_tmp48_ = function;
	vala_ccode_file_add_function (_tmp47_, _tmp48_);
	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_;
	ValaTypeSymbol* _tmp16_;
	ValaTypeSymbol* _tmp17_;
	ValaCCodeFile* _tmp66_;
	ValaCCodeFunction* _tmp67_;
	ValaCCodeFile* _tmp68_;
	ValaCCodeFunction* _tmp69_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_data_type (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_);
	_tmp16_ = vala_data_type_get_data_type (type);
	_tmp17_ = _tmp16_;
	if (vala_get_ccode_is_gboxed (_tmp17_)) {
		ValaCCodeFunctionCall* free_call = NULL;
		ValaCCodeIdentifier* _tmp18_;
		ValaCCodeIdentifier* _tmp19_;
		ValaCCodeFunctionCall* _tmp20_;
		ValaCCodeFunctionCall* _tmp21_;
		ValaCCodeFunctionCall* _tmp22_;
		ValaTypeSymbol* _tmp23_;
		ValaTypeSymbol* _tmp24_;
		gchar* _tmp25_;
		gchar* _tmp26_;
		ValaCCodeIdentifier* _tmp27_;
		ValaCCodeIdentifier* _tmp28_;
		ValaCCodeFunctionCall* _tmp29_;
		ValaCCodeIdentifier* _tmp30_;
		ValaCCodeIdentifier* _tmp31_;
		ValaCCodeFunction* _tmp32_;
		ValaCCodeFunction* _tmp33_;
		ValaCCodeFunctionCall* _tmp34_;
		_tmp18_ = vala_ccode_identifier_new ("g_boxed_free");
		_tmp19_ = _tmp18_;
		_tmp20_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp19_);
		_tmp21_ = _tmp20_;
		_vala_ccode_node_unref0 (_tmp19_);
		free_call = _tmp21_;
		_tmp22_ = free_call;
		_tmp23_ = vala_data_type_get_data_type (type);
		_tmp24_ = _tmp23_;
		_tmp25_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp24_);
		_tmp26_ = _tmp25_;
		_tmp27_ = vala_ccode_identifier_new (_tmp26_);
		_tmp28_ = _tmp27_;
		vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp28_);
		_vala_ccode_node_unref0 (_tmp28_);
		_g_free0 (_tmp26_);
		_tmp29_ = free_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_ = free_call;
		vala_ccode_function_add_expression (_tmp33_, (ValaCCodeExpression*) _tmp34_);
		_vala_ccode_node_unref0 (free_call);
	} else {
		ValaStruct* st = NULL;
		ValaTypeSymbol* _tmp35_;
		ValaTypeSymbol* _tmp36_;
		ValaStruct* _tmp37_;
		gboolean _tmp38_ = FALSE;
		ValaStruct* _tmp39_;
		ValaCCodeFunctionCall* free_call = NULL;
		ValaCCodeIdentifier* _tmp56_;
		ValaCCodeIdentifier* _tmp57_;
		ValaCCodeFunctionCall* _tmp58_;
		ValaCCodeFunctionCall* _tmp59_;
		ValaCCodeFunctionCall* _tmp60_;
		ValaCCodeIdentifier* _tmp61_;
		ValaCCodeIdentifier* _tmp62_;
		ValaCCodeFunction* _tmp63_;
		ValaCCodeFunction* _tmp64_;
		ValaCCodeFunctionCall* _tmp65_;
		_tmp35_ = vala_data_type_get_data_type (type);
		_tmp36_ = _tmp35_;
		_tmp37_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp36_) : NULL);
		st = _tmp37_;
		_tmp39_ = st;
		if (_tmp39_ != NULL) {
			ValaStruct* _tmp40_;
			_tmp40_ = st;
			_tmp38_ = vala_struct_is_disposable (_tmp40_);
		} else {
			_tmp38_ = FALSE;
		}
		if (_tmp38_) {
			ValaStruct* _tmp41_;
			ValaCCodeFunctionCall* destroy_call = NULL;
			ValaStruct* _tmp43_;
			gchar* _tmp44_;
			gchar* _tmp45_;
			ValaCCodeIdentifier* _tmp46_;
			ValaCCodeIdentifier* _tmp47_;
			ValaCCodeFunctionCall* _tmp48_;
			ValaCCodeFunctionCall* _tmp49_;
			ValaCCodeFunctionCall* _tmp50_;
			ValaCCodeIdentifier* _tmp51_;
			ValaCCodeIdentifier* _tmp52_;
			ValaCCodeFunction* _tmp53_;
			ValaCCodeFunction* _tmp54_;
			ValaCCodeFunctionCall* _tmp55_;
			_tmp41_ = st;
			if (!vala_get_ccode_has_destroy_function (_tmp41_)) {
				ValaStruct* _tmp42_;
				_tmp42_ = st;
				vala_ccode_base_module_generate_struct_destroy_function (self, _tmp42_);
			}
			_tmp43_ = st;
			_tmp44_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = vala_ccode_identifier_new (_tmp45_);
			_tmp47_ = _tmp46_;
			_tmp48_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp47_);
			_tmp49_ = _tmp48_;
			_vala_ccode_node_unref0 (_tmp47_);
			_g_free0 (_tmp45_);
			destroy_call = _tmp49_;
			_tmp50_ = destroy_call;
			_tmp51_ = vala_ccode_identifier_new ("self");
			_tmp52_ = _tmp51_;
			vala_ccode_function_call_add_argument (_tmp50_, (ValaCCodeExpression*) _tmp52_);
			_vala_ccode_node_unref0 (_tmp52_);
			_tmp53_ = vala_ccode_base_module_get_ccode (self);
			_tmp54_ = _tmp53_;
			_tmp55_ = destroy_call;
			vala_ccode_function_add_expression (_tmp54_, (ValaCCodeExpression*) _tmp55_);
			_vala_ccode_node_unref0 (destroy_call);
		}
		_tmp56_ = vala_ccode_identifier_new ("g_free");
		_tmp57_ = _tmp56_;
		_tmp58_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp57_);
		_tmp59_ = _tmp58_;
		_vala_ccode_node_unref0 (_tmp57_);
		free_call = _tmp59_;
		_tmp60_ = free_call;
		_tmp61_ = vala_ccode_identifier_new ("self");
		_tmp62_ = _tmp61_;
		vala_ccode_function_call_add_argument (_tmp60_, (ValaCCodeExpression*) _tmp62_);
		_vala_ccode_node_unref0 (_tmp62_);
		_tmp63_ = vala_ccode_base_module_get_ccode (self);
		_tmp64_ = _tmp63_;
		_tmp65_ = free_call;
		vala_ccode_function_add_expression (_tmp64_, (ValaCCodeExpression*) _tmp65_);
		_vala_ccode_node_unref0 (free_call);
		_vala_code_node_unref0 (st);
	}
	vala_ccode_base_module_pop_function (self);
	_tmp66_ = self->cfile;
	_tmp67_ = function;
	vala_ccode_file_add_function_declaration (_tmp66_, _tmp67_);
	_tmp68_ = self->cfile;
	_tmp69_ = function;
	vala_ccode_file_add_function (_tmp68_, _tmp69_);
	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 = NULL;
	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* _tmp29_;
		ValaCCodeIdentifier* _tmp30_;
		_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_;
			ValaCCodeParameter* _tmp14_;
			ValaCCodeParameter* _tmp15_;
			ValaCCodeFunction* _tmp16_;
			ValaCCodeFunction* _tmp17_;
			ValaCCodeFunction* _tmp18_;
			ValaCCodeIdentifier* _tmp19_;
			ValaCCodeIdentifier* _tmp20_;
			ValaGLibValue* _tmp21_;
			ValaGLibValue* _tmp22_;
			ValaCCodeExpression* _tmp23_;
			ValaCCodeExpression* _tmp24_;
			ValaCCodeFile* _tmp25_;
			ValaCCodeFunction* _tmp26_;
			ValaCCodeFile* _tmp27_;
			ValaCCodeFunction* _tmp28_;
			_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_ = vala_ccode_parameter_new ("var", "gpointer");
			_tmp15_ = _tmp14_;
			vala_ccode_function_add_parameter (_tmp13_, _tmp15_);
			_vala_ccode_node_unref0 (_tmp15_);
			_tmp16_ = function;
			vala_ccode_base_module_push_function (self, _tmp16_);
			_tmp17_ = vala_ccode_base_module_get_ccode (self);
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_ccode_identifier_new ("var");
			_tmp20_ = _tmp19_;
			_tmp21_ = vala_glib_value_new (type, (ValaCCodeExpression*) _tmp20_, TRUE);
			_tmp22_ = _tmp21_;
			_tmp23_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp22_, TRUE);
			_tmp24_ = _tmp23_;
			vala_ccode_function_add_expression (_tmp18_, _tmp24_);
			_vala_ccode_node_unref0 (_tmp24_);
			_vala_target_value_unref0 (_tmp22_);
			_vala_ccode_node_unref0 (_tmp20_);
			vala_ccode_base_module_pop_function (self);
			_tmp25_ = self->cfile;
			_tmp26_ = function;
			vala_ccode_file_add_function_declaration (_tmp25_, _tmp26_);
			_tmp27_ = self->cfile;
			_tmp28_ = function;
			vala_ccode_file_add_function (_tmp27_, _tmp28_);
			_vala_ccode_node_unref0 (function);
		}
		_tmp29_ = free0_func;
		_tmp30_ = vala_ccode_identifier_new (_tmp29_);
		_vala_ccode_node_unref0 (element_destroy_func_expression);
		element_destroy_func_expression = (ValaCCodeExpression*) _tmp30_;
		_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 = NULL;
	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_data_type (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_data_type (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_data_type (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_data_type (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) {
				ValaDataType* type_arg = NULL;
				ValaList* _tmp23_;
				gpointer _tmp24_;
				ValaDataType* _tmp25_;
				_type_arg_index = _type_arg_index + 1;
				if (!(_type_arg_index < _type_arg_size)) {
					break;
				}
				_tmp23_ = _type_arg_list;
				_tmp24_ = vala_list_get (_tmp23_, _type_arg_index);
				type_arg = (ValaDataType*) _tmp24_;
				_tmp25_ = type_arg;
				elements_require_free = vala_ccode_base_module_requires_destroy (self, _tmp25_);
				if (elements_require_free) {
					ValaDataType* _tmp26_;
					ValaCCodeExpression* _tmp27_;
					ValaDataType* _tmp28_;
					_tmp26_ = type_arg;
					_tmp27_ = vala_ccode_base_module_get_destroy0_func_expression (self, _tmp26_, FALSE);
					_vala_ccode_node_unref0 (element_destroy_func_expression);
					element_destroy_func_expression = _tmp27_;
					_tmp28_ = type_arg;
					generic_elements = G_TYPE_CHECK_INSTANCE_TYPE (_tmp28_, VALA_TYPE_GENERIC_TYPE);
				}
				_vala_code_node_unref0 (type_arg);
			}
			_vala_iterable_unref0 (_type_arg_list);
		}
		if (elements_require_free) {
			ValaCCodeExpression* cexpr = NULL;
			gboolean _tmp29_ = FALSE;
			ValaCCodeExpression* _tmp30_;
			cexpr = NULL;
			_tmp30_ = element_destroy_func_expression;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, VALA_TYPE_CCODE_IDENTIFIER)) {
				_tmp29_ = TRUE;
			} else {
				ValaCCodeExpression* _tmp31_;
				_tmp31_ = element_destroy_func_expression;
				_tmp29_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, VALA_TYPE_CCODE_MEMBER_ACCESS);
			}
			if (_tmp29_) {
				ValaCCodeIdentifier* _tmp32_ = NULL;
				gchar* _tmp34_;
				gchar* _tmp35_;
				ValaCCodeIdentifier* _tmp36_;
				if (generic_elements) {
					_tmp32_ = NULL;
				} else {
					ValaCCodeExpression* _tmp33_;
					_tmp33_ = element_destroy_func_expression;
					_tmp32_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, VALA_TYPE_CCODE_IDENTIFIER) ? ((ValaCCodeIdentifier*) _tmp33_) : NULL;
				}
				_tmp34_ = vala_ccode_base_module_generate_collection_free_wrapper (self, type, _tmp32_);
				_tmp35_ = _tmp34_;
				_tmp36_ = vala_ccode_identifier_new (_tmp35_);
				_vala_ccode_node_unref0 (cexpr);
				cexpr = (ValaCCodeExpression*) _tmp36_;
				_g_free0 (_tmp35_);
				if (generic_elements) {
					ValaCCodeExpression* _tmp37_;
					ValaCCodeFunctionCall* _tmp38_;
					ValaCCodeExpression* _tmp39_;
					ValaCCodeExpression* _tmp40_;
					_tmp37_ = cexpr;
					_tmp38_ = vala_ccode_function_call_new (_tmp37_);
					_vala_ccode_node_unref0 (cexpr);
					cexpr = (ValaCCodeExpression*) _tmp38_;
					_tmp39_ = cexpr;
					_tmp40_ = element_destroy_func_expression;
					vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), _tmp40_);
				}
			} 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* _tmp41_;
			ValaTypeSymbol* _tmp42_;
			gchar* _tmp43_;
			gchar* _tmp44_;
			ValaCCodeIdentifier* _tmp45_;
			ValaCCodeExpression* _tmp46_;
			_tmp41_ = vala_data_type_get_data_type (type);
			_tmp42_ = _tmp41_;
			_tmp43_ = vala_get_ccode_free_function (_tmp42_);
			_tmp44_ = _tmp43_;
			_tmp45_ = vala_ccode_identifier_new (_tmp44_);
			_tmp46_ = (ValaCCodeExpression*) _tmp45_;
			_g_free0 (_tmp44_);
			result = _tmp46_;
			_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)) {
			ValaCCodeIdentifier* _tmp47_;
			_tmp47_ = vala_ccode_identifier_new ("g_error_free");
			result = (ValaCCodeExpression*) _tmp47_;
			return result;
		} else {
			ValaTypeSymbol* _tmp48_;
			ValaTypeSymbol* _tmp49_;
			_tmp48_ = vala_data_type_get_data_type (type);
			_tmp49_ = _tmp48_;
			if (_tmp49_ != NULL) {
				gchar* unref_function = NULL;
				const gchar* _tmp98_;
				const gchar* _tmp100_;
				ValaCCodeIdentifier* _tmp101_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_REFERENCE_TYPE)) {
					ValaTypeSymbol* _tmp50_;
					ValaTypeSymbol* _tmp51_;
					_tmp50_ = vala_data_type_get_data_type (type);
					_tmp51_ = _tmp50_;
					if (vala_is_reference_counting (_tmp51_)) {
						ValaTypeSymbol* _tmp52_;
						ValaTypeSymbol* _tmp53_;
						gchar* _tmp54_;
						gboolean _tmp55_ = FALSE;
						ValaTypeSymbol* _tmp56_;
						ValaTypeSymbol* _tmp57_;
						_tmp52_ = vala_data_type_get_data_type (type);
						_tmp53_ = _tmp52_;
						_tmp54_ = vala_get_ccode_unref_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp53_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
						_g_free0 (unref_function);
						unref_function = _tmp54_;
						_tmp56_ = vala_data_type_get_data_type (type);
						_tmp57_ = _tmp56_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp57_, VALA_TYPE_INTERFACE)) {
							const gchar* _tmp58_;
							_tmp58_ = unref_function;
							_tmp55_ = _tmp58_ == NULL;
						} else {
							_tmp55_ = FALSE;
						}
						if (_tmp55_) {
							ValaSourceReference* _tmp59_;
							ValaSourceReference* _tmp60_;
							ValaTypeSymbol* _tmp61_;
							ValaTypeSymbol* _tmp62_;
							gchar* _tmp63_;
							gchar* _tmp64_;
							gchar* _tmp65_;
							gchar* _tmp66_;
							_tmp59_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
							_tmp60_ = _tmp59_;
							_tmp61_ = vala_data_type_get_data_type (type);
							_tmp62_ = _tmp61_;
							_tmp63_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp62_);
							_tmp64_ = _tmp63_;
							_tmp65_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
"rface declaration if unsure", _tmp64_);
							_tmp66_ = _tmp65_;
							vala_report_error (_tmp60_, _tmp66_);
							_g_free0 (_tmp66_);
							_g_free0 (_tmp64_);
							result = NULL;
							_g_free0 (unref_function);
							return result;
						}
					} else {
						ValaTypeSymbol* _tmp67_;
						ValaTypeSymbol* _tmp68_;
						_tmp67_ = vala_data_type_get_data_type (type);
						_tmp68_ = _tmp67_;
						if (vala_get_ccode_is_gboxed (_tmp68_)) {
							gchar* _tmp69_;
							_tmp69_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
							_g_free0 (unref_function);
							unref_function = _tmp69_;
						} else {
							if (vala_is_free_function_address_of (type)) {
								gchar* _tmp70_;
								_tmp70_ = vala_ccode_base_module_generate_free_function_address_of_wrapper (self, type);
								_g_free0 (unref_function);
								unref_function = _tmp70_;
							} else {
								ValaTypeSymbol* _tmp71_;
								ValaTypeSymbol* _tmp72_;
								gchar* _tmp73_;
								_tmp71_ = vala_data_type_get_data_type (type);
								_tmp72_ = _tmp71_;
								_tmp73_ = vala_get_ccode_free_function (_tmp72_);
								_g_free0 (unref_function);
								unref_function = _tmp73_;
							}
						}
					}
				} else {
					gboolean _tmp74_;
					gboolean _tmp75_;
					_tmp74_ = vala_data_type_get_nullable (type);
					_tmp75_ = _tmp74_;
					if (_tmp75_) {
						ValaTypeSymbol* _tmp76_;
						ValaTypeSymbol* _tmp77_;
						const gchar* _tmp82_;
						_tmp76_ = vala_data_type_get_data_type (type);
						_tmp77_ = _tmp76_;
						if (vala_get_ccode_is_gboxed (_tmp77_)) {
							gchar* _tmp78_;
							_tmp78_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
							_g_free0 (unref_function);
							unref_function = _tmp78_;
						} else {
							ValaTypeSymbol* _tmp79_;
							ValaTypeSymbol* _tmp80_;
							gchar* _tmp81_;
							_tmp79_ = vala_data_type_get_data_type (type);
							_tmp80_ = _tmp79_;
							_tmp81_ = vala_get_ccode_free_function (_tmp80_);
							_g_free0 (unref_function);
							unref_function = _tmp81_;
						}
						_tmp82_ = unref_function;
						if (_tmp82_ == NULL) {
							gboolean _tmp83_ = FALSE;
							ValaTypeSymbol* _tmp84_;
							ValaTypeSymbol* _tmp85_;
							_tmp84_ = vala_data_type_get_data_type (type);
							_tmp85_ = _tmp84_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp85_, VALA_TYPE_STRUCT)) {
								ValaTypeSymbol* _tmp86_;
								ValaTypeSymbol* _tmp87_;
								_tmp86_ = vala_data_type_get_data_type (type);
								_tmp87_ = _tmp86_;
								_tmp83_ = vala_struct_is_disposable (G_TYPE_CHECK_INSTANCE_CAST (_tmp87_, VALA_TYPE_STRUCT, ValaStruct));
							} else {
								_tmp83_ = FALSE;
							}
							if (_tmp83_) {
								gchar* _tmp88_;
								_tmp88_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
								_g_free0 (unref_function);
								unref_function = _tmp88_;
							} else {
								gchar* _tmp89_;
								_tmp89_ = g_strdup ("g_free");
								_g_free0 (unref_function);
								unref_function = _tmp89_;
							}
						}
					} 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* _tmp90_;
							ValaTypeSymbol* _tmp91_;
							ValaStruct* _tmp92_;
							ValaStruct* _tmp93_;
							_tmp90_ = vala_data_type_get_data_type (type);
							_tmp91_ = _tmp90_;
							_tmp92_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp91_, VALA_TYPE_STRUCT, ValaStruct));
							st = _tmp92_;
							_tmp93_ = st;
							if (vala_struct_is_disposable (_tmp93_)) {
								ValaStruct* _tmp94_;
								ValaStruct* _tmp96_;
								gchar* _tmp97_;
								_tmp94_ = st;
								if (!vala_get_ccode_has_destroy_function (_tmp94_)) {
									ValaStruct* _tmp95_;
									_tmp95_ = st;
									vala_ccode_base_module_generate_struct_destroy_function (self, _tmp95_);
								}
								_tmp96_ = st;
								_tmp97_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp96_);
								_g_free0 (unref_function);
								unref_function = _tmp97_;
							} else {
								_g_free0 (unref_function);
								unref_function = NULL;
							}
							_vala_code_node_unref0 (st);
						}
					}
				}
				_tmp98_ = unref_function;
				if (_tmp98_ == NULL) {
					ValaCCodeConstant* _tmp99_;
					_tmp99_ = vala_ccode_constant_new ("NULL");
					result = (ValaCCodeExpression*) _tmp99_;
					_g_free0 (unref_function);
					return result;
				}
				_tmp100_ = unref_function;
				_tmp101_ = vala_ccode_identifier_new (_tmp100_);
				result = (ValaCCodeExpression*) _tmp101_;
				_g_free0 (unref_function);
				return result;
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
					ValaTypeParameter* type_parameter = NULL;
					ValaTypeParameter* _tmp102_;
					ValaTypeParameter* _tmp103_;
					ValaTypeParameter* _tmp104_;
					gchar* func_name = NULL;
					ValaTypeParameter* _tmp105_;
					const gchar* _tmp106_;
					const gchar* _tmp107_;
					gchar* _tmp108_;
					gchar* _tmp109_;
					gchar* _tmp110_;
					gchar* _tmp111_;
					ValaTypeParameter* _tmp112_;
					ValaSymbol* _tmp113_;
					ValaSymbol* _tmp114_;
					gboolean _tmp146_ = FALSE;
					gboolean _tmp147_ = FALSE;
					_tmp102_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
					_tmp103_ = _tmp102_;
					_tmp104_ = _vala_code_node_ref0 (_tmp103_);
					type_parameter = _tmp104_;
					_tmp105_ = type_parameter;
					_tmp106_ = vala_symbol_get_name ((ValaSymbol*) _tmp105_);
					_tmp107_ = _tmp106_;
					_tmp108_ = g_utf8_strdown (_tmp107_, (gssize) -1);
					_tmp109_ = _tmp108_;
					_tmp110_ = g_strdup_printf ("%s_destroy_func", _tmp109_);
					_tmp111_ = _tmp110_;
					_g_free0 (_tmp109_);
					func_name = _tmp111_;
					_tmp112_ = type_parameter;
					_tmp113_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp112_);
					_tmp114_ = _tmp113_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, VALA_TYPE_INTERFACE)) {
						ValaInterface* iface = NULL;
						ValaTypeParameter* _tmp115_;
						ValaSymbol* _tmp116_;
						ValaSymbol* _tmp117_;
						ValaInterface* _tmp118_;
						ValaInterface* _tmp119_;
						gchar* method_name = NULL;
						ValaTypeParameter* _tmp120_;
						const gchar* _tmp121_;
						const gchar* _tmp122_;
						gchar* _tmp123_;
						gchar* _tmp124_;
						gchar* _tmp125_;
						gchar* _tmp126_;
						ValaCCodeFunctionCall* cast_self = NULL;
						ValaInterface* _tmp127_;
						gchar* _tmp128_;
						gchar* _tmp129_;
						ValaCCodeIdentifier* _tmp130_;
						ValaCCodeIdentifier* _tmp131_;
						ValaCCodeFunctionCall* _tmp132_;
						ValaCCodeFunctionCall* _tmp133_;
						ValaCCodeFunctionCall* _tmp134_;
						ValaCCodeIdentifier* _tmp135_;
						ValaCCodeIdentifier* _tmp136_;
						ValaCCodeFunctionCall* function_call = NULL;
						ValaCCodeFunctionCall* _tmp137_;
						const gchar* _tmp138_;
						ValaCCodeMemberAccess* _tmp139_;
						ValaCCodeMemberAccess* _tmp140_;
						ValaCCodeFunctionCall* _tmp141_;
						ValaCCodeFunctionCall* _tmp142_;
						ValaCCodeFunctionCall* _tmp143_;
						ValaCCodeIdentifier* _tmp144_;
						ValaCCodeIdentifier* _tmp145_;
						_tmp115_ = type_parameter;
						_tmp116_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp115_);
						_tmp117_ = _tmp116_;
						_tmp118_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp117_, VALA_TYPE_INTERFACE, ValaInterface));
						iface = _tmp118_;
						_tmp119_ = iface;
						vala_ccode_base_module_require_generic_accessors (self, _tmp119_);
						_tmp120_ = type_parameter;
						_tmp121_ = vala_symbol_get_name ((ValaSymbol*) _tmp120_);
						_tmp122_ = _tmp121_;
						_tmp123_ = g_utf8_strdown (_tmp122_, (gssize) -1);
						_tmp124_ = _tmp123_;
						_tmp125_ = g_strdup_printf ("get_%s_destroy_func", _tmp124_);
						_tmp126_ = _tmp125_;
						_g_free0 (_tmp124_);
						method_name = _tmp126_;
						_tmp127_ = iface;
						_tmp128_ = vala_get_ccode_interface_get_function (_tmp127_);
						_tmp129_ = _tmp128_;
						_tmp130_ = vala_ccode_identifier_new (_tmp129_);
						_tmp131_ = _tmp130_;
						_tmp132_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp131_);
						_tmp133_ = _tmp132_;
						_vala_ccode_node_unref0 (_tmp131_);
						_g_free0 (_tmp129_);
						cast_self = _tmp133_;
						_tmp134_ = cast_self;
						_tmp135_ = vala_ccode_identifier_new ("self");
						_tmp136_ = _tmp135_;
						vala_ccode_function_call_add_argument (_tmp134_, (ValaCCodeExpression*) _tmp136_);
						_vala_ccode_node_unref0 (_tmp136_);
						_tmp137_ = cast_self;
						_tmp138_ = method_name;
						_tmp139_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp137_, _tmp138_);
						_tmp140_ = _tmp139_;
						_tmp141_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp140_);
						_tmp142_ = _tmp141_;
						_vala_ccode_node_unref0 (_tmp140_);
						function_call = _tmp142_;
						_tmp143_ = function_call;
						_tmp144_ = vala_ccode_identifier_new ("self");
						_tmp145_ = _tmp144_;
						vala_ccode_function_call_add_argument (_tmp143_, (ValaCCodeExpression*) _tmp145_);
						_vala_ccode_node_unref0 (_tmp145_);
						result = (ValaCCodeExpression*) function_call;
						_vala_ccode_node_unref0 (cast_self);
						_g_free0 (method_name);
						_vala_code_node_unref0 (iface);
						_g_free0 (func_name);
						_vala_code_node_unref0 (type_parameter);
						return result;
					}
					if (vala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
						_tmp147_ = !is_chainup;
					} else {
						_tmp147_ = FALSE;
					}
					if (_tmp147_) {
						gboolean _tmp148_;
						gboolean _tmp149_;
						_tmp148_ = vala_ccode_base_module_get_in_creation_method (self);
						_tmp149_ = _tmp148_;
						_tmp146_ = !_tmp149_;
					} else {
						_tmp146_ = FALSE;
					}
					if (_tmp146_) {
						ValaCCodeExpression* _tmp150_;
						ValaCCodeExpression* _tmp151_;
						ValaCCodeMemberAccess* _tmp152_;
						ValaCCodeMemberAccess* _tmp153_;
						const gchar* _tmp154_;
						ValaCCodeMemberAccess* _tmp155_;
						ValaCCodeExpression* _tmp156_;
						_tmp150_ = vala_ccode_base_module_get_this_cexpression (self);
						_tmp151_ = _tmp150_;
						_tmp152_ = vala_ccode_member_access_new_pointer (_tmp151_, "priv");
						_tmp153_ = _tmp152_;
						_tmp154_ = func_name;
						_tmp155_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp153_, _tmp154_);
						_tmp156_ = (ValaCCodeExpression*) _tmp155_;
						_vala_ccode_node_unref0 (_tmp153_);
						_vala_ccode_node_unref0 (_tmp151_);
						result = _tmp156_;
						_g_free0 (func_name);
						_vala_code_node_unref0 (type_parameter);
						return result;
					} else {
						const gchar* _tmp157_;
						ValaCCodeExpression* _tmp158_;
						_tmp157_ = func_name;
						_tmp158_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp157_);
						result = _tmp158_;
						_g_free0 (func_name);
						_vala_code_node_unref0 (type_parameter);
						return result;
					}
					_g_free0 (func_name);
					_vala_code_node_unref0 (type_parameter);
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
						ValaCodeContext* _tmp159_;
						ValaProfile _tmp160_;
						ValaProfile _tmp161_;
						_tmp159_ = self->priv->_context;
						_tmp160_ = vala_code_context_get_profile (_tmp159_);
						_tmp161_ = _tmp160_;
						if (_tmp161_ == VALA_PROFILE_POSIX) {
							ValaCCodeIdentifier* _tmp162_;
							_tmp162_ = vala_ccode_identifier_new ("free");
							result = (ValaCCodeExpression*) _tmp162_;
							return result;
						} else {
							ValaCCodeIdentifier* _tmp163_;
							_tmp163_ = vala_ccode_identifier_new ("g_free");
							result = (ValaCCodeExpression*) _tmp163_;
							return result;
						}
					} else {
						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
							ValaCodeContext* _tmp164_;
							ValaProfile _tmp165_;
							ValaProfile _tmp166_;
							_tmp164_ = self->priv->_context;
							_tmp165_ = vala_code_context_get_profile (_tmp164_);
							_tmp166_ = _tmp165_;
							if (_tmp166_ == VALA_PROFILE_POSIX) {
								ValaCCodeIdentifier* _tmp167_;
								_tmp167_ = vala_ccode_identifier_new ("free");
								result = (ValaCCodeExpression*) _tmp167_;
								return result;
							} else {
								ValaCCodeIdentifier* _tmp168_;
								_tmp168_ = vala_ccode_identifier_new ("g_free");
								result = (ValaCCodeExpression*) _tmp168_;
								return result;
							}
						} else {
							ValaCCodeConstant* _tmp169_;
							_tmp169_ = vala_ccode_constant_new ("NULL");
							result = (ValaCCodeExpression*) _tmp169_;
							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 = NULL;
	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_data_type (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_data_type (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_;
		ValaCCodeFunction* _tmp27_;
		ValaCCodeFunction* _tmp28_;
		ValaCCodeFunction* _tmp29_;
		gchar* _tmp30_;
		gchar* _tmp31_;
		ValaCCodeParameter* _tmp32_;
		ValaCCodeParameter* _tmp33_;
		ValaCCodeFunction* _tmp34_;
		ValaCCodeParameter* _tmp35_;
		ValaCCodeParameter* _tmp36_;
		ValaCCodeFunction* _tmp37_;
		ValaCCodeFunctionCall* free_call = NULL;
		ValaCCodeIdentifier* _tmp38_;
		ValaCCodeIdentifier* _tmp39_;
		ValaCCodeFunctionCall* _tmp40_;
		ValaCCodeFunctionCall* _tmp41_;
		ValaCCodeFunctionCall* _tmp42_;
		ValaCCodeIdentifier* _tmp43_;
		ValaCCodeIdentifier* _tmp44_;
		ValaCCodeMemberAccess* _tmp45_;
		ValaCCodeMemberAccess* _tmp46_;
		ValaCCodeBinaryExpression* data_isnull = NULL;
		ValaCCodeIdentifier* _tmp47_;
		ValaCCodeIdentifier* _tmp48_;
		ValaCCodeMemberAccess* _tmp49_;
		ValaCCodeMemberAccess* _tmp50_;
		ValaCCodeConstant* _tmp51_;
		ValaCCodeConstant* _tmp52_;
		ValaCCodeBinaryExpression* _tmp53_;
		ValaCCodeBinaryExpression* _tmp54_;
		ValaCCodeCommaExpression* ccomma_data = NULL;
		ValaCCodeCommaExpression* _tmp55_;
		ValaCCodeCommaExpression* _tmp56_;
		ValaCCodeBinaryExpression* _tmp57_;
		ValaCCodeConstant* _tmp58_;
		ValaCCodeConstant* _tmp59_;
		ValaCCodeFunctionCall* _tmp60_;
		ValaCCodeConditionalExpression* _tmp61_;
		ValaCCodeConditionalExpression* _tmp62_;
		ValaCCodeFunction* _tmp63_;
		ValaCCodeFunction* _tmp64_;
		ValaCCodeCommaExpression* _tmp65_;
		ValaCCodeFunction* _tmp66_;
		ValaCCodeFunction* _tmp67_;
		ValaCCodeConstant* _tmp68_;
		ValaCCodeConstant* _tmp69_;
		ValaCCodeFile* _tmp70_;
		ValaCCodeFunction* _tmp71_;
		ValaCCodeFile* _tmp72_;
		ValaCCodeFunction* _tmp73_;
		ValaCCodeIdentifier* _tmp74_;
		ValaCCodeIdentifier* _tmp75_;
		ValaCCodeFunctionCall* _tmp76_;
		ValaCCodeFunctionCall* _tmp77_;
		ValaCCodeIdentifier* _tmp78_;
		ValaCCodeIdentifier* _tmp79_;
		ValaCCodeFunctionCall* _tmp80_;
		ValaCCodeConstant* _tmp81_;
		ValaCCodeConstant* _tmp82_;
		ValaCCodeFunctionCall* _tmp83_;
		ValaCCodeConstant* _tmp84_;
		ValaCCodeConstant* _tmp85_;
		ValaCCodeFunctionCall* _tmp86_;
		ValaCCodeConstant* _tmp87_;
		ValaCCodeConstant* _tmp88_;
		ValaCCodeFunctionCall* _tmp89_;
		const gchar* _tmp90_;
		ValaCCodeIdentifier* _tmp91_;
		ValaCCodeIdentifier* _tmp92_;
		ValaCCodeCastExpression* _tmp93_;
		ValaCCodeCastExpression* _tmp94_;
		ValaCCodeFunctionCall* _tmp95_;
		ValaCCodeIdentifier* _tmp96_;
		ValaCCodeIdentifier* _tmp97_;
		ValaCCodeBinaryExpression* free_func_isnull = NULL;
		ValaCCodeIdentifier* _tmp98_;
		ValaCCodeIdentifier* _tmp99_;
		ValaCCodeConstant* _tmp100_;
		ValaCCodeConstant* _tmp101_;
		ValaCCodeBinaryExpression* _tmp102_;
		ValaCCodeBinaryExpression* _tmp103_;
		ValaCCodeCommaExpression* ccomma = NULL;
		ValaCCodeCommaExpression* _tmp104_;
		ValaCCodeCommaExpression* _tmp105_;
		ValaCCodeBinaryExpression* _tmp106_;
		ValaCCodeConstant* _tmp107_;
		ValaCCodeConstant* _tmp108_;
		ValaCCodeFunctionCall* _tmp109_;
		ValaCCodeConditionalExpression* _tmp110_;
		ValaCCodeConditionalExpression* _tmp111_;
		ValaCCodeFunction* _tmp112_;
		ValaCCodeFunction* _tmp113_;
		ValaCCodeCommaExpression* _tmp114_;
		ValaCCodeFunctionCall* cfreecall = NULL;
		ValaClass* _tmp115_;
		gchar* _tmp116_;
		gchar* _tmp117_;
		ValaCCodeIdentifier* _tmp118_;
		ValaCCodeIdentifier* _tmp119_;
		ValaCCodeFunctionCall* _tmp120_;
		ValaCCodeFunctionCall* _tmp121_;
		ValaCCodeFunctionCall* _tmp122_;
		ValaCCodeIdentifier* _tmp123_;
		ValaCCodeIdentifier* _tmp124_;
		ValaCCodeFunction* _tmp125_;
		ValaCCodeFunction* _tmp126_;
		ValaCCodeFunctionCall* _tmp127_;
		ValaCCodeFunction* _tmp128_;
		ValaCCodeFile* _tmp129_;
		ValaCCodeFunction* _tmp130_;
		ValaCCodeFile* _tmp131_;
		ValaCCodeFunction* _tmp132_;
		_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_ = vala_ccode_function_new (_tmp26_, "gboolean");
		wrapper = _tmp27_;
		_tmp28_ = wrapper;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp28_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp29_ = wrapper;
		_tmp30_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
		_tmp31_ = _tmp30_;
		_tmp32_ = vala_ccode_parameter_new ("node", _tmp31_);
		_tmp33_ = _tmp32_;
		vala_ccode_function_add_parameter (_tmp29_, _tmp33_);
		_vala_ccode_node_unref0 (_tmp33_);
		_g_free0 (_tmp31_);
		_tmp34_ = wrapper;
		_tmp35_ = vala_ccode_parameter_new ("free_func", "GDestroyNotify");
		_tmp36_ = _tmp35_;
		vala_ccode_function_add_parameter (_tmp34_, _tmp36_);
		_vala_ccode_node_unref0 (_tmp36_);
		_tmp37_ = wrapper;
		vala_ccode_base_module_push_function (self, _tmp37_);
		_tmp38_ = vala_ccode_identifier_new ("free_func");
		_tmp39_ = _tmp38_;
		_tmp40_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp39_);
		_tmp41_ = _tmp40_;
		_vala_ccode_node_unref0 (_tmp39_);
		free_call = _tmp41_;
		_tmp42_ = free_call;
		_tmp43_ = vala_ccode_identifier_new ("node");
		_tmp44_ = _tmp43_;
		_tmp45_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp44_, "data");
		_tmp46_ = _tmp45_;
		vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp46_);
		_vala_ccode_node_unref0 (_tmp46_);
		_vala_ccode_node_unref0 (_tmp44_);
		_tmp47_ = vala_ccode_identifier_new ("node");
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp48_, "data");
		_tmp50_ = _tmp49_;
		_tmp51_ = vala_ccode_constant_new ("NULL");
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp50_, (ValaCCodeExpression*) _tmp52_);
		_tmp54_ = _tmp53_;
		_vala_ccode_node_unref0 (_tmp52_);
		_vala_ccode_node_unref0 (_tmp50_);
		_vala_ccode_node_unref0 (_tmp48_);
		data_isnull = _tmp54_;
		_tmp55_ = vala_ccode_comma_expression_new ();
		ccomma_data = _tmp55_;
		_tmp56_ = ccomma_data;
		_tmp57_ = data_isnull;
		_tmp58_ = vala_ccode_constant_new ("NULL");
		_tmp59_ = _tmp58_;
		_tmp60_ = free_call;
		_tmp61_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp57_, (ValaCCodeExpression*) _tmp59_, (ValaCCodeExpression*) _tmp60_);
		_tmp62_ = _tmp61_;
		vala_ccode_comma_expression_append_expression (_tmp56_, (ValaCCodeExpression*) _tmp62_);
		_vala_ccode_node_unref0 (_tmp62_);
		_vala_ccode_node_unref0 (_tmp59_);
		_tmp63_ = vala_ccode_base_module_get_ccode (self);
		_tmp64_ = _tmp63_;
		_tmp65_ = ccomma_data;
		vala_ccode_function_add_expression (_tmp64_, (ValaCCodeExpression*) _tmp65_);
		_tmp66_ = vala_ccode_base_module_get_ccode (self);
		_tmp67_ = _tmp66_;
		_tmp68_ = vala_ccode_constant_new ("FALSE");
		_tmp69_ = _tmp68_;
		vala_ccode_function_add_return (_tmp67_, (ValaCCodeExpression*) _tmp69_);
		_vala_ccode_node_unref0 (_tmp69_);
		vala_ccode_base_module_pop_function (self);
		_tmp70_ = self->cfile;
		_tmp71_ = wrapper;
		vala_ccode_file_add_function_declaration (_tmp70_, _tmp71_);
		_tmp72_ = self->cfile;
		_tmp73_ = wrapper;
		vala_ccode_file_add_function (_tmp72_, _tmp73_);
		_tmp74_ = vala_ccode_identifier_new ("g_node_traverse");
		_tmp75_ = _tmp74_;
		_tmp76_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp75_);
		_vala_ccode_node_unref0 (element_free_call);
		element_free_call = _tmp76_;
		_vala_ccode_node_unref0 (_tmp75_);
		_tmp77_ = element_free_call;
		_tmp78_ = vala_ccode_identifier_new ("self");
		_tmp79_ = _tmp78_;
		vala_ccode_function_call_add_argument (_tmp77_, (ValaCCodeExpression*) _tmp79_);
		_vala_ccode_node_unref0 (_tmp79_);
		_tmp80_ = element_free_call;
		_tmp81_ = vala_ccode_constant_new ("G_POST_ORDER");
		_tmp82_ = _tmp81_;
		vala_ccode_function_call_add_argument (_tmp80_, (ValaCCodeExpression*) _tmp82_);
		_vala_ccode_node_unref0 (_tmp82_);
		_tmp83_ = element_free_call;
		_tmp84_ = vala_ccode_constant_new ("G_TRAVERSE_ALL");
		_tmp85_ = _tmp84_;
		vala_ccode_function_call_add_argument (_tmp83_, (ValaCCodeExpression*) _tmp85_);
		_vala_ccode_node_unref0 (_tmp85_);
		_tmp86_ = element_free_call;
		_tmp87_ = vala_ccode_constant_new ("-1");
		_tmp88_ = _tmp87_;
		vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp88_);
		_vala_ccode_node_unref0 (_tmp88_);
		_tmp89_ = element_free_call;
		_tmp90_ = destroy_node_func;
		_tmp91_ = vala_ccode_identifier_new (_tmp90_);
		_tmp92_ = _tmp91_;
		_tmp93_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp92_, "GNodeTraverseFunc");
		_tmp94_ = _tmp93_;
		vala_ccode_function_call_add_argument (_tmp89_, (ValaCCodeExpression*) _tmp94_);
		_vala_ccode_node_unref0 (_tmp94_);
		_vala_ccode_node_unref0 (_tmp92_);
		_tmp95_ = element_free_call;
		_tmp96_ = vala_ccode_identifier_new ("free_func");
		_tmp97_ = _tmp96_;
		vala_ccode_function_call_add_argument (_tmp95_, (ValaCCodeExpression*) _tmp97_);
		_vala_ccode_node_unref0 (_tmp97_);
		_tmp98_ = vala_ccode_identifier_new ("free_func");
		_tmp99_ = _tmp98_;
		_tmp100_ = vala_ccode_constant_new ("NULL");
		_tmp101_ = _tmp100_;
		_tmp102_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp99_, (ValaCCodeExpression*) _tmp101_);
		_tmp103_ = _tmp102_;
		_vala_ccode_node_unref0 (_tmp101_);
		_vala_ccode_node_unref0 (_tmp99_);
		free_func_isnull = _tmp103_;
		_tmp104_ = vala_ccode_comma_expression_new ();
		ccomma = _tmp104_;
		_tmp105_ = ccomma;
		_tmp106_ = free_func_isnull;
		_tmp107_ = vala_ccode_constant_new ("NULL");
		_tmp108_ = _tmp107_;
		_tmp109_ = element_free_call;
		_tmp110_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp106_, (ValaCCodeExpression*) _tmp108_, (ValaCCodeExpression*) _tmp109_);
		_tmp111_ = _tmp110_;
		vala_ccode_comma_expression_append_expression (_tmp105_, (ValaCCodeExpression*) _tmp111_);
		_vala_ccode_node_unref0 (_tmp111_);
		_vala_ccode_node_unref0 (_tmp108_);
		_tmp112_ = vala_ccode_base_module_get_ccode (self);
		_tmp113_ = _tmp112_;
		_tmp114_ = ccomma;
		vala_ccode_function_add_expression (_tmp113_, (ValaCCodeExpression*) _tmp114_);
		_tmp115_ = self->gnode_type;
		_tmp116_ = vala_get_ccode_free_function ((ValaTypeSymbol*) _tmp115_);
		_tmp117_ = _tmp116_;
		_tmp118_ = vala_ccode_identifier_new (_tmp117_);
		_tmp119_ = _tmp118_;
		_tmp120_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp119_);
		_tmp121_ = _tmp120_;
		_vala_ccode_node_unref0 (_tmp119_);
		_g_free0 (_tmp117_);
		cfreecall = _tmp121_;
		_tmp122_ = cfreecall;
		_tmp123_ = vala_ccode_identifier_new ("self");
		_tmp124_ = _tmp123_;
		vala_ccode_function_call_add_argument (_tmp122_, (ValaCCodeExpression*) _tmp124_);
		_vala_ccode_node_unref0 (_tmp124_);
		_tmp125_ = vala_ccode_base_module_get_ccode (self);
		_tmp126_ = _tmp125_;
		_tmp127_ = cfreecall;
		vala_ccode_function_add_expression (_tmp126_, (ValaCCodeExpression*) _tmp127_);
		_tmp128_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp128_, VALA_CCODE_MODIFIERS_STATIC);
		vala_ccode_base_module_pop_function (self);
		_tmp129_ = self->cfile;
		_tmp130_ = function;
		vala_ccode_file_add_function_declaration (_tmp129_, _tmp130_);
		_tmp131_ = self->cfile;
		_tmp132_ = function;
		vala_ccode_file_add_function (_tmp131_, _tmp132_);
		_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* _tmp133_;
		ValaTypeSymbol* _tmp134_;
		ValaClass* _tmp135_;
		_tmp133_ = vala_data_type_get_data_type (collection_type);
		_tmp134_ = _tmp133_;
		_tmp135_ = self->glist_type;
		if (_tmp134_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp135_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			gchar* _tmp136_;
			_tmp136_ = g_strdup ("g_list_free_full");
			_g_free0 (destroy_func);
			destroy_func = _tmp136_;
		} else {
			ValaTypeSymbol* _tmp137_;
			ValaTypeSymbol* _tmp138_;
			ValaClass* _tmp139_;
			_tmp137_ = vala_data_type_get_data_type (collection_type);
			_tmp138_ = _tmp137_;
			_tmp139_ = self->gslist_type;
			if (_tmp138_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp139_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
				gchar* _tmp140_;
				_tmp140_ = g_strdup ("g_slist_free_full");
				_g_free0 (destroy_func);
				destroy_func = _tmp140_;
			} else {
				ValaTypeSymbol* _tmp141_;
				ValaTypeSymbol* _tmp142_;
				ValaClass* _tmp143_;
				_tmp141_ = vala_data_type_get_data_type (collection_type);
				_tmp142_ = _tmp141_;
				_tmp143_ = self->gqueue_type;
				if (_tmp142_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp143_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
					gchar* _tmp144_;
					_tmp144_ = g_strdup ("g_queue_free_full");
					_g_free0 (destroy_func);
					destroy_func = _tmp144_;
				} else {
					gchar* _tmp145_;
					vala_report_error (NULL, "internal error: type of collection not supported");
					_tmp145_ = g_strdup ("");
					result = _tmp145_;
					_g_free0 (destroy_func_wrapper);
					_g_free0 (destroy_func);
					return result;
				}
			}
		}
	}
	if (element_destroy_func_expression != NULL) {
		ValaCCodeFunction* function = NULL;
		const gchar* _tmp146_;
		ValaCCodeFunction* _tmp147_;
		ValaCCodeFunction* _tmp148_;
		gchar* _tmp149_;
		gchar* _tmp150_;
		ValaCCodeParameter* _tmp151_;
		ValaCCodeParameter* _tmp152_;
		ValaCCodeFunction* _tmp153_;
		ValaCCodeFunctionCall* collection_free_call = NULL;
		const gchar* _tmp154_;
		ValaCCodeIdentifier* _tmp155_;
		ValaCCodeIdentifier* _tmp156_;
		ValaCCodeFunctionCall* _tmp157_;
		ValaCCodeFunctionCall* _tmp158_;
		ValaCCodeFunctionCall* _tmp159_;
		ValaCCodeIdentifier* _tmp160_;
		ValaCCodeIdentifier* _tmp161_;
		ValaCCodeFunctionCall* _tmp162_;
		ValaCCodeCastExpression* _tmp163_;
		ValaCCodeCastExpression* _tmp164_;
		ValaCCodeFunction* _tmp165_;
		ValaCCodeFunction* _tmp166_;
		ValaCCodeFunctionCall* _tmp167_;
		ValaCCodeFunction* _tmp168_;
		ValaCCodeFile* _tmp169_;
		ValaCCodeFunction* _tmp170_;
		ValaCCodeFile* _tmp171_;
		ValaCCodeFunction* _tmp172_;
		_tmp146_ = destroy_func_wrapper;
		_tmp147_ = vala_ccode_function_new (_tmp146_, "void");
		function = _tmp147_;
		_tmp148_ = function;
		_tmp149_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
		_tmp150_ = _tmp149_;
		_tmp151_ = vala_ccode_parameter_new ("self", _tmp150_);
		_tmp152_ = _tmp151_;
		vala_ccode_function_add_parameter (_tmp148_, _tmp152_);
		_vala_ccode_node_unref0 (_tmp152_);
		_g_free0 (_tmp150_);
		_tmp153_ = function;
		vala_ccode_base_module_push_function (self, _tmp153_);
		_tmp154_ = destroy_func;
		_tmp155_ = vala_ccode_identifier_new (_tmp154_);
		_tmp156_ = _tmp155_;
		_tmp157_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp156_);
		_tmp158_ = _tmp157_;
		_vala_ccode_node_unref0 (_tmp156_);
		collection_free_call = _tmp158_;
		_tmp159_ = collection_free_call;
		_tmp160_ = vala_ccode_identifier_new ("self");
		_tmp161_ = _tmp160_;
		vala_ccode_function_call_add_argument (_tmp159_, (ValaCCodeExpression*) _tmp161_);
		_vala_ccode_node_unref0 (_tmp161_);
		_tmp162_ = collection_free_call;
		_tmp163_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) element_destroy_func_expression, "GDestroyNotify");
		_tmp164_ = _tmp163_;
		vala_ccode_function_call_add_argument (_tmp162_, (ValaCCodeExpression*) _tmp164_);
		_vala_ccode_node_unref0 (_tmp164_);
		_tmp165_ = vala_ccode_base_module_get_ccode (self);
		_tmp166_ = _tmp165_;
		_tmp167_ = collection_free_call;
		vala_ccode_function_add_expression (_tmp166_, (ValaCCodeExpression*) _tmp167_);
		_tmp168_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp168_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
		vala_ccode_base_module_pop_function (self);
		_tmp169_ = self->cfile;
		_tmp170_ = function;
		vala_ccode_file_add_function_declaration (_tmp169_, _tmp170_);
		_tmp171_ = self->cfile;
		_tmp172_ = function;
		vala_ccode_file_add_function (_tmp171_, _tmp172_);
		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_free (ValaCCodeBaseModule* self,
                                                      ValaStruct* st)
{
	gchar* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_struct_array_free (self, st);
}

ValaCCodeExpression*
vala_ccode_base_module_destroy_local (ValaCCodeBaseModule* self,
                                      ValaLocalVariable* local)
{
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result = NULL;
	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 = NULL;
	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 = NULL;
	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_;
	ValaDataType* _tmp9_;
	gboolean _tmp57_ = FALSE;
	gboolean _tmp58_ = FALSE;
	gboolean _tmp59_ = FALSE;
	ValaDataType* _tmp60_;
	ValaTypeSymbol* _tmp61_;
	ValaTypeSymbol* _tmp62_;
	ValaClass* _tmp63_;
	gboolean is_gcollection = FALSE;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeExpression* cexpr = NULL;
	ValaDataType* _tmp76_;
	ValaCCodeExpression* _tmp77_;
	gboolean _tmp78_ = FALSE;
	gboolean _tmp84_ = FALSE;
	ValaDataType* _tmp85_;
	gboolean _tmp157_ = FALSE;
	gboolean _tmp158_ = FALSE;
	gboolean _tmp159_ = FALSE;
	ValaCodeContext* _tmp193_;
	ValaProfile _tmp194_;
	ValaProfile _tmp195_;
	ValaCCodeBinaryExpression* cisnull = NULL;
	ValaCCodeExpression* _tmp197_;
	ValaCCodeConstant* _tmp198_;
	ValaCCodeConstant* _tmp199_;
	ValaCCodeBinaryExpression* _tmp200_;
	ValaCCodeBinaryExpression* _tmp201_;
	ValaDataType* _tmp202_;
	ValaCCodeFunctionCall* _tmp231_;
	ValaCCodeExpression* _tmp232_;
	ValaCCodeCommaExpression* ccomma = NULL;
	ValaCCodeCommaExpression* _tmp233_;
	ValaCodeContext* _tmp234_;
	ValaProfile _tmp235_;
	ValaProfile _tmp236_;
	ValaCCodeCommaExpression* _tmp329_;
	ValaCCodeFunctionCall* _tmp330_;
	ValaCCodeCommaExpression* _tmp331_;
	ValaCCodeConstant* _tmp332_;
	ValaCCodeConstant* _tmp333_;
	ValaCCodeAssignment* cassign = NULL;
	ValaCCodeExpression* _tmp334_;
	ValaCCodeCommaExpression* _tmp335_;
	ValaCCodeAssignment* _tmp336_;
	gboolean _tmp337_ = FALSE;
	gboolean _tmp338_ = FALSE;
	ValaDataType* _tmp339_;
	ValaTypeSymbol* _tmp340_;
	ValaTypeSymbol* _tmp341_;
	gboolean uses_gfree = FALSE;
	gboolean _tmp350_ = FALSE;
	ValaCCodeBinaryExpression* _tmp352_;
	ValaCCodeConstant* _tmp353_;
	ValaCCodeConstant* _tmp354_;
	ValaCCodeAssignment* _tmp355_;
	ValaCCodeConditionalExpression* _tmp356_;
	ValaCCodeExpression* _tmp357_;
	ValaCCodeExpression* result = NULL;
	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_ccode_base_module_get_cvalue_ (self, value);
	cvar = _tmp8_;
	_tmp9_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, VALA_TYPE_DELEGATE_TYPE)) {
		ValaCodeContext* _tmp10_;
		ValaProfile _tmp11_;
		ValaProfile _tmp12_;
		ValaCCodeExpression* delegate_target = NULL;
		ValaCCodeExpression* _tmp14_;
		ValaCCodeExpression* delegate_target_destroy_notify = NULL;
		ValaCCodeExpression* _tmp15_;
		ValaCCodeFunctionCall* ccall = NULL;
		ValaCCodeExpression* _tmp16_;
		ValaCCodeFunctionCall* _tmp17_;
		ValaCCodeFunctionCall* _tmp18_;
		ValaCCodeExpression* _tmp19_;
		ValaCCodeCommaExpression* destroy_call = NULL;
		ValaCCodeCommaExpression* _tmp20_;
		ValaCCodeCommaExpression* _tmp21_;
		ValaCCodeFunctionCall* _tmp22_;
		ValaCCodeCommaExpression* _tmp23_;
		ValaCCodeConstant* _tmp24_;
		ValaCCodeConstant* _tmp25_;
		ValaCCodeBinaryExpression* cisnull = NULL;
		ValaCCodeExpression* _tmp26_;
		ValaCCodeConstant* _tmp27_;
		ValaCCodeConstant* _tmp28_;
		ValaCCodeBinaryExpression* _tmp29_;
		ValaCCodeBinaryExpression* _tmp30_;
		ValaCCodeCommaExpression* ccomma = NULL;
		ValaCCodeCommaExpression* _tmp31_;
		ValaCCodeCommaExpression* _tmp32_;
		ValaCCodeBinaryExpression* _tmp33_;
		ValaCCodeConstant* _tmp34_;
		ValaCCodeConstant* _tmp35_;
		ValaCCodeCommaExpression* _tmp36_;
		ValaCCodeConditionalExpression* _tmp37_;
		ValaCCodeConditionalExpression* _tmp38_;
		ValaCCodeCommaExpression* _tmp39_;
		ValaCCodeExpression* _tmp40_;
		ValaCCodeConstant* _tmp41_;
		ValaCCodeConstant* _tmp42_;
		ValaCCodeAssignment* _tmp43_;
		ValaCCodeAssignment* _tmp44_;
		ValaCCodeCommaExpression* _tmp45_;
		ValaCCodeExpression* _tmp46_;
		ValaCCodeConstant* _tmp47_;
		ValaCCodeConstant* _tmp48_;
		ValaCCodeAssignment* _tmp49_;
		ValaCCodeAssignment* _tmp50_;
		ValaCCodeCommaExpression* _tmp51_;
		ValaCCodeExpression* _tmp52_;
		ValaCCodeConstant* _tmp53_;
		ValaCCodeConstant* _tmp54_;
		ValaCCodeAssignment* _tmp55_;
		ValaCCodeAssignment* _tmp56_;
		_tmp10_ = self->priv->_context;
		_tmp11_ = vala_code_context_get_profile (_tmp10_);
		_tmp12_ = _tmp11_;
		if (_tmp12_ != VALA_PROFILE_GOBJECT) {
			ValaCCodeFile* _tmp13_;
			_tmp13_ = self->cfile;
			vala_ccode_file_add_include (_tmp13_, "stddef.h", FALSE);
		}
		_tmp14_ = vala_ccode_base_module_get_delegate_target_cvalue (self, value);
		delegate_target = _tmp14_;
		_tmp15_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, value);
		delegate_target_destroy_notify = _tmp15_;
		_tmp16_ = delegate_target_destroy_notify;
		_tmp17_ = vala_ccode_function_call_new (_tmp16_);
		ccall = _tmp17_;
		_tmp18_ = ccall;
		_tmp19_ = delegate_target;
		vala_ccode_function_call_add_argument (_tmp18_, _tmp19_);
		_tmp20_ = vala_ccode_comma_expression_new ();
		destroy_call = _tmp20_;
		_tmp21_ = destroy_call;
		_tmp22_ = ccall;
		vala_ccode_comma_expression_append_expression (_tmp21_, (ValaCCodeExpression*) _tmp22_);
		_tmp23_ = destroy_call;
		_tmp24_ = vala_ccode_constant_new ("NULL");
		_tmp25_ = _tmp24_;
		vala_ccode_comma_expression_append_expression (_tmp23_, (ValaCCodeExpression*) _tmp25_);
		_vala_ccode_node_unref0 (_tmp25_);
		_tmp26_ = delegate_target_destroy_notify;
		_tmp27_ = vala_ccode_constant_new ("NULL");
		_tmp28_ = _tmp27_;
		_tmp29_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp26_, (ValaCCodeExpression*) _tmp28_);
		_tmp30_ = _tmp29_;
		_vala_ccode_node_unref0 (_tmp28_);
		cisnull = _tmp30_;
		_tmp31_ = vala_ccode_comma_expression_new ();
		ccomma = _tmp31_;
		_tmp32_ = ccomma;
		_tmp33_ = cisnull;
		_tmp34_ = vala_ccode_constant_new ("NULL");
		_tmp35_ = _tmp34_;
		_tmp36_ = destroy_call;
		_tmp37_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp33_, (ValaCCodeExpression*) _tmp35_, (ValaCCodeExpression*) _tmp36_);
		_tmp38_ = _tmp37_;
		vala_ccode_comma_expression_append_expression (_tmp32_, (ValaCCodeExpression*) _tmp38_);
		_vala_ccode_node_unref0 (_tmp38_);
		_vala_ccode_node_unref0 (_tmp35_);
		_tmp39_ = ccomma;
		_tmp40_ = cvar;
		_tmp41_ = vala_ccode_constant_new ("NULL");
		_tmp42_ = _tmp41_;
		_tmp43_ = vala_ccode_assignment_new (_tmp40_, (ValaCCodeExpression*) _tmp42_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp44_ = _tmp43_;
		vala_ccode_comma_expression_append_expression (_tmp39_, (ValaCCodeExpression*) _tmp44_);
		_vala_ccode_node_unref0 (_tmp44_);
		_vala_ccode_node_unref0 (_tmp42_);
		_tmp45_ = ccomma;
		_tmp46_ = delegate_target;
		_tmp47_ = vala_ccode_constant_new ("NULL");
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_assignment_new (_tmp46_, (ValaCCodeExpression*) _tmp48_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp50_ = _tmp49_;
		vala_ccode_comma_expression_append_expression (_tmp45_, (ValaCCodeExpression*) _tmp50_);
		_vala_ccode_node_unref0 (_tmp50_);
		_vala_ccode_node_unref0 (_tmp48_);
		_tmp51_ = ccomma;
		_tmp52_ = delegate_target_destroy_notify;
		_tmp53_ = vala_ccode_constant_new ("NULL");
		_tmp54_ = _tmp53_;
		_tmp55_ = vala_ccode_assignment_new (_tmp52_, (ValaCCodeExpression*) _tmp54_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp56_ = _tmp55_;
		vala_ccode_comma_expression_append_expression (_tmp51_, (ValaCCodeExpression*) _tmp56_);
		_vala_ccode_node_unref0 (_tmp56_);
		_vala_ccode_node_unref0 (_tmp54_);
		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;
	}
	_tmp60_ = type;
	_tmp61_ = vala_data_type_get_data_type (_tmp60_);
	_tmp62_ = _tmp61_;
	_tmp63_ = self->glist_type;
	if (_tmp62_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
		_tmp59_ = TRUE;
	} else {
		ValaDataType* _tmp64_;
		ValaTypeSymbol* _tmp65_;
		ValaTypeSymbol* _tmp66_;
		ValaClass* _tmp67_;
		_tmp64_ = type;
		_tmp65_ = vala_data_type_get_data_type (_tmp64_);
		_tmp66_ = _tmp65_;
		_tmp67_ = self->gslist_type;
		_tmp59_ = _tmp66_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	if (_tmp59_) {
		_tmp58_ = TRUE;
	} else {
		ValaDataType* _tmp68_;
		ValaTypeSymbol* _tmp69_;
		ValaTypeSymbol* _tmp70_;
		ValaClass* _tmp71_;
		_tmp68_ = type;
		_tmp69_ = vala_data_type_get_data_type (_tmp68_);
		_tmp70_ = _tmp69_;
		_tmp71_ = self->gnode_type;
		_tmp58_ = _tmp70_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp71_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	if (_tmp58_) {
		_tmp57_ = TRUE;
	} else {
		ValaDataType* _tmp72_;
		ValaTypeSymbol* _tmp73_;
		ValaTypeSymbol* _tmp74_;
		ValaClass* _tmp75_;
		_tmp72_ = type;
		_tmp73_ = vala_data_type_get_data_type (_tmp72_);
		_tmp74_ = _tmp73_;
		_tmp75_ = self->gqueue_type;
		_tmp57_ = _tmp74_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	is_gcollection = _tmp57_;
	_tmp76_ = type;
	_tmp77_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp76_, FALSE);
	cexpr = _tmp77_;
	if (is_gcollection) {
		ValaCCodeExpression* _tmp79_;
		_tmp79_ = cexpr;
		_tmp78_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp79_, VALA_TYPE_CCODE_FUNCTION_CALL);
	} else {
		_tmp78_ = FALSE;
	}
	if (_tmp78_) {
		ValaCCodeExpression* _tmp80_;
		ValaCCodeFunctionCall* _tmp81_;
		_tmp80_ = cexpr;
		_tmp81_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp80_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall));
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp81_;
	} else {
		ValaCCodeExpression* _tmp82_;
		ValaCCodeFunctionCall* _tmp83_;
		_tmp82_ = cexpr;
		_tmp83_ = vala_ccode_function_call_new (_tmp82_);
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp83_;
	}
	_tmp85_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp85_, VALA_TYPE_VALUE_TYPE)) {
		ValaDataType* _tmp86_;
		gboolean _tmp87_;
		gboolean _tmp88_;
		_tmp86_ = type;
		_tmp87_ = vala_data_type_get_nullable (_tmp86_);
		_tmp88_ = _tmp87_;
		_tmp84_ = !_tmp88_;
	} else {
		_tmp84_ = FALSE;
	}
	if (_tmp84_) {
		ValaStruct* st = NULL;
		ValaDataType* _tmp89_;
		ValaTypeSymbol* _tmp90_;
		ValaTypeSymbol* _tmp91_;
		ValaStruct* _tmp92_;
		gboolean _tmp93_ = FALSE;
		ValaStruct* _tmp94_;
		gboolean _tmp102_ = FALSE;
		ValaStruct* _tmp103_;
		_tmp89_ = type;
		_tmp90_ = vala_data_type_get_data_type (_tmp89_);
		_tmp91_ = _tmp90_;
		_tmp92_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp91_) : NULL);
		st = _tmp92_;
		_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_data_type (_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_code_node_unref0 (st);
			_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_data_type (_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_data_type (_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_data_type (_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_data_type (_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_data_type (_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_code_node_unref0 (st);
				_vala_ccode_node_unref0 (cexpr);
				_vala_ccode_node_unref0 (cvar);
				_vala_code_node_unref0 (type);
				return result;
			} else {
				result = (ValaCCodeExpression*) ccall;
				_vala_code_node_unref0 (st);
				_vala_ccode_node_unref0 (cexpr);
				_vala_ccode_node_unref0 (cvar);
				_vala_code_node_unref0 (type);
				return result;
			}
		}
		_vala_code_node_unref0 (st);
	}
	if (!is_gcollection) {
		ValaCCodeFunctionCall* _tmp160_;
		ValaCCodeExpression* _tmp161_;
		ValaCCodeExpression* _tmp162_;
		_tmp160_ = ccall;
		_tmp161_ = vala_ccode_function_call_get_call (_tmp160_);
		_tmp162_ = _tmp161_;
		_tmp159_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp162_, VALA_TYPE_CCODE_IDENTIFIER);
	} else {
		_tmp159_ = FALSE;
	}
	if (_tmp159_) {
		ValaDataType* _tmp163_;
		_tmp163_ = type;
		_tmp158_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, VALA_TYPE_ARRAY_TYPE);
	} else {
		_tmp158_ = FALSE;
	}
	if (_tmp158_) {
		_tmp157_ = !is_macro_definition;
	} else {
		_tmp157_ = FALSE;
	}
	if (_tmp157_) {
		ValaCCodeIdentifier* freeid = NULL;
		ValaCCodeFunctionCall* _tmp164_;
		ValaCCodeExpression* _tmp165_;
		ValaCCodeExpression* _tmp166_;
		ValaCCodeIdentifier* _tmp167_;
		gchar* free0_func = NULL;
		ValaCCodeIdentifier* _tmp168_;
		const gchar* _tmp169_;
		const gchar* _tmp170_;
		gchar* _tmp171_;
		const gchar* _tmp172_;
		const gchar* _tmp187_;
		ValaCCodeIdentifier* _tmp188_;
		ValaCCodeIdentifier* _tmp189_;
		ValaCCodeFunctionCall* _tmp190_;
		ValaCCodeFunctionCall* _tmp191_;
		ValaCCodeExpression* _tmp192_;
		_tmp164_ = ccall;
		_tmp165_ = vala_ccode_function_call_get_call (_tmp164_);
		_tmp166_ = _tmp165_;
		_tmp167_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp166_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
		freeid = _tmp167_;
		_tmp168_ = freeid;
		_tmp169_ = vala_ccode_identifier_get_name (_tmp168_);
		_tmp170_ = _tmp169_;
		_tmp171_ = g_strdup_printf ("_%s0", _tmp170_);
		free0_func = _tmp171_;
		_tmp172_ = free0_func;
		if (vala_ccode_base_module_add_wrapper (self, _tmp172_)) {
			ValaCCodeExpression* macro = NULL;
			ValaDataType* _tmp173_;
			ValaCCodeIdentifier* _tmp174_;
			ValaCCodeIdentifier* _tmp175_;
			ValaGLibValue* _tmp176_;
			ValaGLibValue* _tmp177_;
			ValaCCodeExpression* _tmp178_;
			ValaCCodeExpression* _tmp179_;
			ValaCCodeFile* _tmp180_;
			const gchar* _tmp181_;
			gchar* _tmp182_;
			gchar* _tmp183_;
			ValaCCodeExpression* _tmp184_;
			ValaCCodeMacroReplacement* _tmp185_;
			ValaCCodeMacroReplacement* _tmp186_;
			_tmp173_ = type;
			_tmp174_ = vala_ccode_identifier_new ("var");
			_tmp175_ = _tmp174_;
			_tmp176_ = vala_glib_value_new (_tmp173_, (ValaCCodeExpression*) _tmp175_, TRUE);
			_tmp177_ = _tmp176_;
			_tmp178_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp177_, TRUE);
			_tmp179_ = _tmp178_;
			_vala_target_value_unref0 (_tmp177_);
			_vala_ccode_node_unref0 (_tmp175_);
			macro = _tmp179_;
			_tmp180_ = self->cfile;
			_tmp181_ = free0_func;
			_tmp182_ = g_strdup_printf ("%s(var)", _tmp181_);
			_tmp183_ = _tmp182_;
			_tmp184_ = macro;
			_tmp185_ = vala_ccode_macro_replacement_new_with_expression (_tmp183_, _tmp184_);
			_tmp186_ = _tmp185_;
			vala_ccode_file_add_type_declaration (_tmp180_, (ValaCCodeNode*) _tmp186_);
			_vala_ccode_node_unref0 (_tmp186_);
			_g_free0 (_tmp183_);
			_vala_ccode_node_unref0 (macro);
		}
		_tmp187_ = free0_func;
		_tmp188_ = vala_ccode_identifier_new (_tmp187_);
		_tmp189_ = _tmp188_;
		_tmp190_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp189_);
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp190_;
		_vala_ccode_node_unref0 (_tmp189_);
		_tmp191_ = ccall;
		_tmp192_ = cvar;
		vala_ccode_function_call_add_argument (_tmp191_, _tmp192_);
		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;
	}
	_tmp193_ = self->priv->_context;
	_tmp194_ = vala_code_context_get_profile (_tmp193_);
	_tmp195_ = _tmp194_;
	if (_tmp195_ != VALA_PROFILE_GOBJECT) {
		ValaCCodeFile* _tmp196_;
		_tmp196_ = self->cfile;
		vala_ccode_file_add_include (_tmp196_, "stddef.h", FALSE);
	}
	_tmp197_ = cvar;
	_tmp198_ = vala_ccode_constant_new ("NULL");
	_tmp199_ = _tmp198_;
	_tmp200_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp197_, (ValaCCodeExpression*) _tmp199_);
	_tmp201_ = _tmp200_;
	_vala_ccode_node_unref0 (_tmp199_);
	cisnull = _tmp201_;
	_tmp202_ = type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp202_, VALA_TYPE_GENERIC_TYPE)) {
		ValaSymbol* parent = NULL;
		ValaDataType* _tmp203_;
		ValaTypeParameter* _tmp204_;
		ValaTypeParameter* _tmp205_;
		ValaSymbol* _tmp206_;
		ValaSymbol* _tmp207_;
		ValaSymbol* _tmp208_;
		ValaClass* cl = NULL;
		ValaSymbol* _tmp209_;
		ValaClass* _tmp210_;
		gboolean _tmp211_ = FALSE;
		gboolean _tmp212_ = FALSE;
		ValaSymbol* _tmp213_;
		ValaCCodeBinaryExpression* cunrefisnull = NULL;
		ValaDataType* _tmp221_;
		ValaCCodeExpression* _tmp222_;
		ValaCCodeExpression* _tmp223_;
		ValaCCodeConstant* _tmp224_;
		ValaCCodeConstant* _tmp225_;
		ValaCCodeBinaryExpression* _tmp226_;
		ValaCCodeBinaryExpression* _tmp227_;
		ValaCCodeBinaryExpression* _tmp228_;
		ValaCCodeBinaryExpression* _tmp229_;
		ValaCCodeBinaryExpression* _tmp230_;
		_tmp203_ = type;
		_tmp204_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp203_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
		_tmp205_ = _tmp204_;
		_tmp206_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp205_);
		_tmp207_ = _tmp206_;
		_tmp208_ = _vala_code_node_ref0 (_tmp207_);
		parent = _tmp208_;
		_tmp209_ = parent;
		_tmp210_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp209_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp209_) : NULL);
		cl = _tmp210_;
		_tmp213_ = parent;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp213_, VALA_TYPE_METHOD)) {
			ValaSymbol* _tmp214_;
			_tmp214_ = parent;
			_tmp212_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp214_, VALA_TYPE_OBJECT_TYPE_SYMBOL);
		} else {
			_tmp212_ = FALSE;
		}
		if (_tmp212_) {
			_tmp211_ = TRUE;
		} else {
			gboolean _tmp215_ = FALSE;
			ValaClass* _tmp216_;
			_tmp216_ = cl;
			if (_tmp216_ != NULL) {
				ValaClass* _tmp217_;
				gboolean _tmp218_;
				gboolean _tmp219_;
				_tmp217_ = cl;
				_tmp218_ = vala_class_get_is_compact (_tmp217_);
				_tmp219_ = _tmp218_;
				_tmp215_ = _tmp219_;
			} else {
				_tmp215_ = FALSE;
			}
			_tmp211_ = _tmp215_;
		}
		if (_tmp211_) {
			ValaCCodeConstant* _tmp220_;
			_tmp220_ = vala_ccode_constant_new ("NULL");
			result = (ValaCCodeExpression*) _tmp220_;
			_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;
		}
		_tmp221_ = type;
		_tmp222_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp221_, FALSE);
		_tmp223_ = _tmp222_;
		_tmp224_ = vala_ccode_constant_new ("NULL");
		_tmp225_ = _tmp224_;
		_tmp226_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp223_, (ValaCCodeExpression*) _tmp225_);
		_tmp227_ = _tmp226_;
		_vala_ccode_node_unref0 (_tmp225_);
		_vala_ccode_node_unref0 (_tmp223_);
		cunrefisnull = _tmp227_;
		_tmp228_ = cisnull;
		_tmp229_ = cunrefisnull;
		_tmp230_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, (ValaCCodeExpression*) _tmp228_, (ValaCCodeExpression*) _tmp229_);
		_vala_ccode_node_unref0 (cisnull);
		cisnull = _tmp230_;
		_vala_ccode_node_unref0 (cunrefisnull);
		_vala_code_node_unref0 (cl);
		_vala_code_node_unref0 (parent);
	}
	_tmp231_ = ccall;
	_tmp232_ = cvar;
	vala_ccode_function_call_insert_argument (_tmp231_, 0, _tmp232_);
	_tmp233_ = vala_ccode_comma_expression_new ();
	ccomma = _tmp233_;
	_tmp234_ = self->priv->_context;
	_tmp235_ = vala_code_context_get_profile (_tmp234_);
	_tmp236_ = _tmp235_;
	if (_tmp236_ == VALA_PROFILE_GOBJECT) {
		gboolean _tmp237_ = FALSE;
		gboolean _tmp238_ = FALSE;
		ValaDataType* _tmp239_;
		ValaTypeSymbol* _tmp240_;
		ValaTypeSymbol* _tmp241_;
		_tmp239_ = type;
		_tmp240_ = vala_data_type_get_data_type (_tmp239_);
		_tmp241_ = _tmp240_;
		if (_tmp241_ != NULL) {
			ValaDataType* _tmp242_;
			ValaTypeSymbol* _tmp243_;
			ValaTypeSymbol* _tmp244_;
			_tmp242_ = type;
			_tmp243_ = vala_data_type_get_data_type (_tmp242_);
			_tmp244_ = _tmp243_;
			_tmp238_ = !vala_is_reference_counting (_tmp244_);
		} else {
			_tmp238_ = FALSE;
		}
		if (_tmp238_) {
			gboolean _tmp245_ = FALSE;
			gboolean _tmp246_ = FALSE;
			gboolean _tmp247_ = FALSE;
			ValaDataType* _tmp248_;
			ValaTypeSymbol* _tmp249_;
			ValaTypeSymbol* _tmp250_;
			ValaTypeSymbol* _tmp251_;
			_tmp248_ = type;
			_tmp249_ = vala_data_type_get_data_type (_tmp248_);
			_tmp250_ = _tmp249_;
			_tmp251_ = self->gstringbuilder_type;
			if (vala_typesymbol_is_subtype_of (_tmp250_, _tmp251_)) {
				_tmp247_ = TRUE;
			} else {
				ValaDataType* _tmp252_;
				ValaTypeSymbol* _tmp253_;
				ValaTypeSymbol* _tmp254_;
				ValaTypeSymbol* _tmp255_;
				_tmp252_ = type;
				_tmp253_ = vala_data_type_get_data_type (_tmp252_);
				_tmp254_ = _tmp253_;
				_tmp255_ = self->garray_type;
				_tmp247_ = vala_typesymbol_is_subtype_of (_tmp254_, _tmp255_);
			}
			if (_tmp247_) {
				_tmp246_ = TRUE;
			} else {
				ValaDataType* _tmp256_;
				ValaTypeSymbol* _tmp257_;
				ValaTypeSymbol* _tmp258_;
				ValaTypeSymbol* _tmp259_;
				_tmp256_ = type;
				_tmp257_ = vala_data_type_get_data_type (_tmp256_);
				_tmp258_ = _tmp257_;
				_tmp259_ = self->gbytearray_type;
				_tmp246_ = vala_typesymbol_is_subtype_of (_tmp258_, _tmp259_);
			}
			if (_tmp246_) {
				_tmp245_ = TRUE;
			} else {
				ValaDataType* _tmp260_;
				ValaTypeSymbol* _tmp261_;
				ValaTypeSymbol* _tmp262_;
				ValaTypeSymbol* _tmp263_;
				_tmp260_ = type;
				_tmp261_ = vala_data_type_get_data_type (_tmp260_);
				_tmp262_ = _tmp261_;
				_tmp263_ = self->gptrarray_type;
				_tmp245_ = vala_typesymbol_is_subtype_of (_tmp262_, _tmp263_);
			}
			_tmp237_ = _tmp245_;
		} else {
			_tmp237_ = FALSE;
		}
		if (_tmp237_) {
			ValaCCodeFunctionCall* _tmp264_;
			ValaCCodeConstant* _tmp265_;
			ValaCCodeConstant* _tmp266_;
			_tmp264_ = ccall;
			_tmp265_ = vala_ccode_constant_new ("TRUE");
			_tmp266_ = _tmp265_;
			vala_ccode_function_call_add_argument (_tmp264_, (ValaCCodeExpression*) _tmp266_);
			_vala_ccode_node_unref0 (_tmp266_);
		} else {
			ValaDataType* _tmp267_;
			ValaTypeSymbol* _tmp268_;
			ValaTypeSymbol* _tmp269_;
			ValaTypeSymbol* _tmp270_;
			_tmp267_ = type;
			_tmp268_ = vala_data_type_get_data_type (_tmp267_);
			_tmp269_ = _tmp268_;
			_tmp270_ = self->gthreadpool_type;
			if (_tmp269_ == _tmp270_) {
				ValaCCodeFunctionCall* _tmp271_;
				ValaCCodeConstant* _tmp272_;
				ValaCCodeConstant* _tmp273_;
				ValaCCodeFunctionCall* _tmp274_;
				ValaCCodeConstant* _tmp275_;
				ValaCCodeConstant* _tmp276_;
				_tmp271_ = ccall;
				_tmp272_ = vala_ccode_constant_new ("FALSE");
				_tmp273_ = _tmp272_;
				vala_ccode_function_call_add_argument (_tmp271_, (ValaCCodeExpression*) _tmp273_);
				_vala_ccode_node_unref0 (_tmp273_);
				_tmp274_ = ccall;
				_tmp275_ = vala_ccode_constant_new ("TRUE");
				_tmp276_ = _tmp275_;
				vala_ccode_function_call_add_argument (_tmp274_, (ValaCCodeExpression*) _tmp276_);
				_vala_ccode_node_unref0 (_tmp276_);
			} else {
				ValaDataType* _tmp277_;
				_tmp277_ = type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp277_, VALA_TYPE_ARRAY_TYPE)) {
					ValaArrayType* array_type = NULL;
					ValaDataType* _tmp278_;
					ValaArrayType* _tmp279_;
					ValaArrayType* _tmp280_;
					ValaDataType* _tmp281_;
					ValaDataType* _tmp282_;
					_tmp278_ = type;
					_tmp279_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp278_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
					array_type = _tmp279_;
					_tmp280_ = array_type;
					_tmp281_ = vala_array_type_get_element_type (_tmp280_);
					_tmp282_ = _tmp281_;
					if (vala_ccode_base_module_requires_destroy (self, _tmp282_)) {
						ValaCCodeExpression* csizeexpr = NULL;
						ValaList* _tmp283_;
						ValaCCodeExpression* _tmp294_;
						csizeexpr = NULL;
						_tmp283_ = G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->array_length_cvalues;
						if (_tmp283_ != NULL) {
							ValaCCodeExpression* _tmp284_;
							_tmp284_ = vala_ccode_base_module_get_array_length_cvalue (self, value, -1);
							_vala_ccode_node_unref0 (csizeexpr);
							csizeexpr = _tmp284_;
						} else {
							if (vala_ccode_base_module_get_array_null_terminated (self, value)) {
								ValaCCodeFunctionCall* len_call = NULL;
								ValaCCodeIdentifier* _tmp285_;
								ValaCCodeIdentifier* _tmp286_;
								ValaCCodeFunctionCall* _tmp287_;
								ValaCCodeFunctionCall* _tmp288_;
								ValaCCodeFunctionCall* _tmp289_;
								ValaCCodeExpression* _tmp290_;
								ValaCCodeFunctionCall* _tmp291_;
								ValaCCodeExpression* _tmp292_;
								self->requires_array_length = TRUE;
								_tmp285_ = vala_ccode_identifier_new ("_vala_array_length");
								_tmp286_ = _tmp285_;
								_tmp287_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp286_);
								_tmp288_ = _tmp287_;
								_vala_ccode_node_unref0 (_tmp286_);
								len_call = _tmp288_;
								_tmp289_ = len_call;
								_tmp290_ = cvar;
								vala_ccode_function_call_add_argument (_tmp289_, _tmp290_);
								_tmp291_ = len_call;
								_tmp292_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp291_);
								_vala_ccode_node_unref0 (csizeexpr);
								csizeexpr = _tmp292_;
								_vala_ccode_node_unref0 (len_call);
							} else {
								ValaCCodeExpression* _tmp293_;
								_tmp293_ = vala_ccode_base_module_get_array_length_cexpr (self, value);
								_vala_ccode_node_unref0 (csizeexpr);
								csizeexpr = _tmp293_;
							}
						}
						_tmp294_ = csizeexpr;
						if (_tmp294_ != NULL) {
							ValaStruct* st = NULL;
							ValaArrayType* _tmp295_;
							ValaDataType* _tmp296_;
							ValaDataType* _tmp297_;
							ValaTypeSymbol* _tmp298_;
							ValaTypeSymbol* _tmp299_;
							ValaStruct* _tmp300_;
							gboolean _tmp301_ = FALSE;
							ValaStruct* _tmp302_;
							_tmp295_ = array_type;
							_tmp296_ = vala_array_type_get_element_type (_tmp295_);
							_tmp297_ = _tmp296_;
							_tmp298_ = vala_data_type_get_data_type (_tmp297_);
							_tmp299_ = _tmp298_;
							_tmp300_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp299_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp299_) : NULL);
							st = _tmp300_;
							_tmp302_ = st;
							if (_tmp302_ != NULL) {
								ValaArrayType* _tmp303_;
								ValaDataType* _tmp304_;
								ValaDataType* _tmp305_;
								gboolean _tmp306_;
								gboolean _tmp307_;
								_tmp303_ = array_type;
								_tmp304_ = vala_array_type_get_element_type (_tmp303_);
								_tmp305_ = _tmp304_;
								_tmp306_ = vala_data_type_get_nullable (_tmp305_);
								_tmp307_ = _tmp306_;
								_tmp301_ = !_tmp307_;
							} else {
								_tmp301_ = FALSE;
							}
							if (_tmp301_) {
								ValaCCodeFunctionCall* _tmp308_;
								ValaStruct* _tmp309_;
								gchar* _tmp310_;
								gchar* _tmp311_;
								ValaCCodeIdentifier* _tmp312_;
								ValaCCodeIdentifier* _tmp313_;
								ValaCCodeFunctionCall* _tmp314_;
								ValaCCodeExpression* _tmp315_;
								_tmp308_ = ccall;
								_tmp309_ = st;
								_tmp310_ = vala_ccode_base_module_append_struct_array_free (self, _tmp309_);
								_tmp311_ = _tmp310_;
								_tmp312_ = vala_ccode_identifier_new (_tmp311_);
								_tmp313_ = _tmp312_;
								vala_ccode_function_call_set_call (_tmp308_, (ValaCCodeExpression*) _tmp313_);
								_vala_ccode_node_unref0 (_tmp313_);
								_g_free0 (_tmp311_);
								_tmp314_ = ccall;
								_tmp315_ = csizeexpr;
								vala_ccode_function_call_add_argument (_tmp314_, _tmp315_);
							} else {
								ValaCCodeFunctionCall* _tmp316_;
								ValaCCodeIdentifier* _tmp317_;
								ValaCCodeIdentifier* _tmp318_;
								ValaCCodeFunctionCall* _tmp319_;
								ValaCCodeExpression* _tmp320_;
								ValaCCodeFunctionCall* _tmp321_;
								ValaArrayType* _tmp322_;
								ValaDataType* _tmp323_;
								ValaDataType* _tmp324_;
								ValaCCodeExpression* _tmp325_;
								ValaCCodeExpression* _tmp326_;
								ValaCCodeCastExpression* _tmp327_;
								ValaCCodeCastExpression* _tmp328_;
								self->requires_array_free = TRUE;
								_tmp316_ = ccall;
								_tmp317_ = vala_ccode_identifier_new ("_vala_array_free");
								_tmp318_ = _tmp317_;
								vala_ccode_function_call_set_call (_tmp316_, (ValaCCodeExpression*) _tmp318_);
								_vala_ccode_node_unref0 (_tmp318_);
								_tmp319_ = ccall;
								_tmp320_ = csizeexpr;
								vala_ccode_function_call_add_argument (_tmp319_, _tmp320_);
								_tmp321_ = ccall;
								_tmp322_ = array_type;
								_tmp323_ = vala_array_type_get_element_type (_tmp322_);
								_tmp324_ = _tmp323_;
								_tmp325_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp324_, FALSE);
								_tmp326_ = _tmp325_;
								_tmp327_ = vala_ccode_cast_expression_new (_tmp326_, "GDestroyNotify");
								_tmp328_ = _tmp327_;
								vala_ccode_function_call_add_argument (_tmp321_, (ValaCCodeExpression*) _tmp328_);
								_vala_ccode_node_unref0 (_tmp328_);
								_vala_ccode_node_unref0 (_tmp326_);
							}
							_vala_code_node_unref0 (st);
						}
						_vala_ccode_node_unref0 (csizeexpr);
					}
					_vala_code_node_unref0 (array_type);
				}
			}
		}
	}
	_tmp329_ = ccomma;
	_tmp330_ = ccall;
	vala_ccode_comma_expression_append_expression (_tmp329_, (ValaCCodeExpression*) _tmp330_);
	_tmp331_ = ccomma;
	_tmp332_ = vala_ccode_constant_new ("NULL");
	_tmp333_ = _tmp332_;
	vala_ccode_comma_expression_append_expression (_tmp331_, (ValaCCodeExpression*) _tmp333_);
	_vala_ccode_node_unref0 (_tmp333_);
	_tmp334_ = cvar;
	_tmp335_ = ccomma;
	_tmp336_ = vala_ccode_assignment_new (_tmp334_, (ValaCCodeExpression*) _tmp335_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	cassign = _tmp336_;
	_tmp339_ = type;
	_tmp340_ = vala_data_type_get_data_type (_tmp339_);
	_tmp341_ = _tmp340_;
	if (_tmp341_ != NULL) {
		ValaDataType* _tmp342_;
		ValaTypeSymbol* _tmp343_;
		ValaTypeSymbol* _tmp344_;
		_tmp342_ = type;
		_tmp343_ = vala_data_type_get_data_type (_tmp342_);
		_tmp344_ = _tmp343_;
		_tmp338_ = !vala_is_reference_counting (_tmp344_);
	} else {
		_tmp338_ = FALSE;
	}
	if (_tmp338_) {
		ValaDataType* _tmp345_;
		ValaTypeSymbol* _tmp346_;
		ValaTypeSymbol* _tmp347_;
		gchar* _tmp348_;
		gchar* _tmp349_;
		_tmp345_ = type;
		_tmp346_ = vala_data_type_get_data_type (_tmp345_);
		_tmp347_ = _tmp346_;
		_tmp348_ = vala_get_ccode_free_function (_tmp347_);
		_tmp349_ = _tmp348_;
		_tmp337_ = g_strcmp0 (_tmp349_, "g_free") == 0;
		_g_free0 (_tmp349_);
	} else {
		_tmp337_ = FALSE;
	}
	uses_gfree = _tmp337_;
	if (uses_gfree) {
		_tmp350_ = TRUE;
	} else {
		ValaDataType* _tmp351_;
		_tmp351_ = type;
		_tmp350_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp351_, VALA_TYPE_ARRAY_TYPE);
	}
	uses_gfree = _tmp350_;
	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;
	}
	_tmp352_ = cisnull;
	_tmp353_ = vala_ccode_constant_new ("NULL");
	_tmp354_ = _tmp353_;
	_tmp355_ = cassign;
	_tmp356_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp352_, (ValaCCodeExpression*) _tmp354_, (ValaCCodeExpression*) _tmp355_);
	_tmp357_ = (ValaCCodeExpression*) _tmp356_;
	_vala_ccode_node_unref0 (_tmp354_);
	result = _tmp357_;
	_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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->destroy_value (self, value, is_macro_definition);
}

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* _tmp30_;
	ValaArrayList* _tmp31_;
	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_;
		ValaArrayList* _tmp19_;
		gint _value_size = 0;
		ValaArrayList* _tmp20_;
		gint _tmp21_;
		gint _tmp22_;
		gint _value_index = 0;
		_tmp17_ = vala_ccode_base_module_get_temp_ref_values (self);
		_tmp18_ = _tmp17_;
		_tmp19_ = _vala_iterable_ref0 (_tmp18_);
		_value_list = _tmp19_;
		_tmp20_ = _value_list;
		_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
		_tmp22_ = _tmp21_;
		_value_size = _tmp22_;
		_value_index = -1;
		while (TRUE) {
			ValaTargetValue* value = NULL;
			ValaArrayList* _tmp23_;
			gpointer _tmp24_;
			ValaCCodeFunction* _tmp25_;
			ValaCCodeFunction* _tmp26_;
			ValaTargetValue* _tmp27_;
			ValaCCodeExpression* _tmp28_;
			ValaCCodeExpression* _tmp29_;
			_value_index = _value_index + 1;
			if (!(_value_index < _value_size)) {
				break;
			}
			_tmp23_ = _value_list;
			_tmp24_ = vala_list_get ((ValaList*) _tmp23_, _value_index);
			value = (ValaTargetValue*) _tmp24_;
			_tmp25_ = vala_ccode_base_module_get_ccode (self);
			_tmp26_ = _tmp25_;
			_tmp27_ = value;
			_tmp28_ = vala_ccode_base_module_destroy_value (self, _tmp27_, FALSE);
			_tmp29_ = _tmp28_;
			vala_ccode_function_add_expression (_tmp26_, _tmp29_);
			_vala_ccode_node_unref0 (_tmp29_);
			_vala_target_value_unref0 (value);
		}
		_vala_iterable_unref0 (_value_list);
	}
	_tmp30_ = vala_ccode_base_module_get_temp_ref_values (self);
	_tmp31_ = _tmp30_;
	vala_collection_clear ((ValaCollection*) _tmp31_);
	_vala_code_node_unref0 (local_decl);
}

void
vala_ccode_base_module_emit_temp_var (ValaCCodeBaseModule* self,
                                      ValaLocalVariable* local,
                                      gboolean on_error)
{
	gboolean _tmp0_ = FALSE;
	const gchar* _tmp1_;
	const gchar* _tmp2_;
	gboolean init = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (local != NULL);
	_tmp1_ = vala_symbol_get_name ((ValaSymbol*) local);
	_tmp2_ = _tmp1_;
	if (!g_str_has_prefix (_tmp2_, "*")) {
		gboolean _tmp3_;
		gboolean _tmp4_;
		_tmp3_ = vala_local_variable_get_init (local);
		_tmp4_ = _tmp3_;
		_tmp0_ = _tmp4_;
	} else {
		_tmp0_ = FALSE;
	}
	init = _tmp0_;
	if (vala_ccode_base_module_is_in_coroutine (self)) {
		ValaCCodeStruct* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp7_;
		gchar* _tmp8_;
		gchar* _tmp9_;
		const gchar* _tmp10_;
		const gchar* _tmp11_;
		_tmp5_ = self->closure_struct;
		_tmp6_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) _tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = vala_symbol_get_name ((ValaSymbol*) local);
		_tmp11_ = _tmp10_;
		vala_ccode_struct_add_field (_tmp5_, _tmp9_, _tmp11_, 0, NULL);
		_g_free0 (_tmp9_);
		if (init) {
			ValaCCodeExpression* initializer = NULL;
			ValaDataType* _tmp12_;
			ValaDataType* _tmp13_;
			ValaCCodeExpression* _tmp14_;
			ValaCCodeExpression* _tmp15_;
			_tmp12_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_ccode_base_module_default_value_for_type (self, _tmp13_, FALSE, on_error);
			initializer = _tmp14_;
			_tmp15_ = initializer;
			if (_tmp15_ == NULL) {
				ValaCCodeFile* _tmp16_;
				ValaCCodeFunctionCall* memset_call = NULL;
				ValaCCodeIdentifier* _tmp17_;
				ValaCCodeIdentifier* _tmp18_;
				ValaCCodeFunctionCall* _tmp19_;
				ValaCCodeFunctionCall* _tmp20_;
				ValaCCodeFunctionCall* _tmp21_;
				const gchar* _tmp22_;
				const gchar* _tmp23_;
				ValaCCodeExpression* _tmp24_;
				ValaCCodeExpression* _tmp25_;
				ValaCCodeUnaryExpression* _tmp26_;
				ValaCCodeUnaryExpression* _tmp27_;
				ValaCCodeFunctionCall* _tmp28_;
				ValaCCodeConstant* _tmp29_;
				ValaCCodeConstant* _tmp30_;
				ValaCCodeFunctionCall* _tmp31_;
				ValaDataType* _tmp32_;
				ValaDataType* _tmp33_;
				gchar* _tmp34_;
				gchar* _tmp35_;
				gchar* _tmp36_;
				gchar* _tmp37_;
				ValaCCodeIdentifier* _tmp38_;
				ValaCCodeIdentifier* _tmp39_;
				ValaCCodeFunction* _tmp40_;
				ValaCCodeFunction* _tmp41_;
				ValaCCodeFunctionCall* _tmp42_;
				_tmp16_ = self->cfile;
				vala_ccode_file_add_include (_tmp16_, "string.h", FALSE);
				_tmp17_ = vala_ccode_identifier_new ("memset");
				_tmp18_ = _tmp17_;
				_tmp19_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp18_);
				_tmp20_ = _tmp19_;
				_vala_ccode_node_unref0 (_tmp18_);
				memset_call = _tmp20_;
				_tmp21_ = memset_call;
				_tmp22_ = vala_symbol_get_name ((ValaSymbol*) local);
				_tmp23_ = _tmp22_;
				_tmp24_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp23_);
				_tmp25_ = _tmp24_;
				_tmp26_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp25_);
				_tmp27_ = _tmp26_;
				vala_ccode_function_call_add_argument (_tmp21_, (ValaCCodeExpression*) _tmp27_);
				_vala_ccode_node_unref0 (_tmp27_);
				_vala_ccode_node_unref0 (_tmp25_);
				_tmp28_ = memset_call;
				_tmp29_ = vala_ccode_constant_new ("0");
				_tmp30_ = _tmp29_;
				vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp30_);
				_vala_ccode_node_unref0 (_tmp30_);
				_tmp31_ = memset_call;
				_tmp32_ = vala_variable_get_variable_type ((ValaVariable*) local);
				_tmp33_ = _tmp32_;
				_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) _tmp33_);
				_tmp35_ = _tmp34_;
				_tmp36_ = g_strdup_printf ("sizeof (%s)", _tmp35_);
				_tmp37_ = _tmp36_;
				_tmp38_ = vala_ccode_identifier_new (_tmp37_);
				_tmp39_ = _tmp38_;
				vala_ccode_function_call_add_argument (_tmp31_, (ValaCCodeExpression*) _tmp39_);
				_vala_ccode_node_unref0 (_tmp39_);
				_g_free0 (_tmp37_);
				_g_free0 (_tmp35_);
				_tmp40_ = vala_ccode_base_module_get_ccode (self);
				_tmp41_ = _tmp40_;
				_tmp42_ = memset_call;
				vala_ccode_function_add_expression (_tmp41_, (ValaCCodeExpression*) _tmp42_);
				_vala_ccode_node_unref0 (memset_call);
			} else {
				ValaCCodeFunction* _tmp43_;
				ValaCCodeFunction* _tmp44_;
				const gchar* _tmp45_;
				const gchar* _tmp46_;
				ValaCCodeExpression* _tmp47_;
				ValaCCodeExpression* _tmp48_;
				ValaCCodeExpression* _tmp49_;
				_tmp43_ = vala_ccode_base_module_get_ccode (self);
				_tmp44_ = _tmp43_;
				_tmp45_ = vala_symbol_get_name ((ValaSymbol*) local);
				_tmp46_ = _tmp45_;
				_tmp47_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = initializer;
				vala_ccode_function_add_assignment (_tmp44_, _tmp48_, _tmp49_);
				_vala_ccode_node_unref0 (_tmp48_);
			}
			_vala_ccode_node_unref0 (initializer);
		}
	} else {
		ValaCCodeVariableDeclarator* cvar = NULL;
		const gchar* _tmp50_;
		const gchar* _tmp51_;
		ValaDataType* _tmp52_;
		ValaDataType* _tmp53_;
		ValaCCodeDeclaratorSuffix* _tmp54_;
		ValaCCodeDeclaratorSuffix* _tmp55_;
		ValaCCodeVariableDeclarator* _tmp56_;
		ValaCCodeVariableDeclarator* _tmp57_;
		ValaCCodeFunction* _tmp64_;
		ValaCCodeFunction* _tmp65_;
		ValaDataType* _tmp66_;
		ValaDataType* _tmp67_;
		gchar* _tmp68_;
		gchar* _tmp69_;
		ValaCCodeVariableDeclarator* _tmp70_;
		_tmp50_ = vala_symbol_get_name ((ValaSymbol*) local);
		_tmp51_ = _tmp50_;
		_tmp52_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp53_);
		_tmp55_ = _tmp54_;
		_tmp56_ = vala_ccode_variable_declarator_new (_tmp51_, NULL, _tmp55_);
		_tmp57_ = _tmp56_;
		_vala_ccode_declarator_suffix_unref0 (_tmp55_);
		cvar = _tmp57_;
		if (init) {
			ValaCCodeVariableDeclarator* _tmp58_;
			ValaDataType* _tmp59_;
			ValaDataType* _tmp60_;
			ValaCCodeExpression* _tmp61_;
			ValaCCodeExpression* _tmp62_;
			ValaCCodeVariableDeclarator* _tmp63_;
			_tmp58_ = cvar;
			_tmp59_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp60_ = _tmp59_;
			_tmp61_ = vala_ccode_base_module_default_value_for_type (self, _tmp60_, TRUE, on_error);
			_tmp62_ = _tmp61_;
			vala_ccode_variable_declarator_set_initializer (_tmp58_, _tmp62_);
			_vala_ccode_node_unref0 (_tmp62_);
			_tmp63_ = cvar;
			vala_ccode_variable_declarator_set_init0 (_tmp63_, TRUE);
		}
		_tmp64_ = vala_ccode_base_module_get_ccode (self);
		_tmp65_ = _tmp64_;
		_tmp66_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp67_ = _tmp66_;
		_tmp68_ = vala_get_ccode_name ((ValaCodeNode*) _tmp67_);
		_tmp69_ = _tmp68_;
		_tmp70_ = cvar;
		vala_ccode_function_add_declaration (_tmp65_, _tmp69_, (ValaCCodeDeclarator*) _tmp70_, 0);
		_g_free0 (_tmp69_);
		_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 _tmp17_ = FALSE;
	gboolean _tmp18_;
	gboolean _tmp19_;
	ValaArrayList* _tmp26_;
	ValaArrayList* _tmp27_;
	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_;
		ValaArrayList* _tmp6_;
		gint _value_size = 0;
		ValaArrayList* _tmp7_;
		gint _tmp8_;
		gint _tmp9_;
		gint _value_index = 0;
		_tmp4_ = vala_ccode_base_module_get_temp_ref_values (self);
		_tmp5_ = _tmp4_;
		_tmp6_ = _vala_iterable_ref0 (_tmp5_);
		_value_list = _tmp6_;
		_tmp7_ = _value_list;
		_tmp8_ = vala_collection_get_size ((ValaCollection*) _tmp7_);
		_tmp9_ = _tmp8_;
		_value_size = _tmp9_;
		_value_index = -1;
		while (TRUE) {
			ValaTargetValue* value = NULL;
			ValaArrayList* _tmp10_;
			gpointer _tmp11_;
			ValaCCodeFunction* _tmp12_;
			ValaCCodeFunction* _tmp13_;
			ValaTargetValue* _tmp14_;
			ValaCCodeExpression* _tmp15_;
			ValaCCodeExpression* _tmp16_;
			_value_index = _value_index + 1;
			if (!(_value_index < _value_size)) {
				break;
			}
			_tmp10_ = _value_list;
			_tmp11_ = vala_list_get ((ValaList*) _tmp10_, _value_index);
			value = (ValaTargetValue*) _tmp11_;
			_tmp12_ = vala_ccode_base_module_get_ccode (self);
			_tmp13_ = _tmp12_;
			_tmp14_ = value;
			_tmp15_ = vala_ccode_base_module_destroy_value (self, _tmp14_, FALSE);
			_tmp16_ = _tmp15_;
			vala_ccode_function_add_expression (_tmp13_, _tmp16_);
			_vala_ccode_node_unref0 (_tmp16_);
			_vala_target_value_unref0 (value);
		}
		_vala_iterable_unref0 (_value_list);
	}
	_tmp18_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) stmt);
	_tmp19_ = _tmp18_;
	if (_tmp19_) {
		ValaExpression* _tmp20_;
		ValaExpression* _tmp21_;
		gboolean _tmp22_;
		gboolean _tmp23_;
		_tmp20_ = vala_expression_statement_get_expression (stmt);
		_tmp21_ = _tmp20_;
		_tmp22_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp21_);
		_tmp23_ = _tmp22_;
		_tmp17_ = _tmp23_;
	} else {
		_tmp17_ = FALSE;
	}
	if (_tmp17_) {
		ValaExpression* _tmp24_;
		ValaExpression* _tmp25_;
		_tmp24_ = vala_expression_statement_get_expression (stmt);
		_tmp25_ = _tmp24_;
		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp25_, FALSE);
	}
	_tmp26_ = vala_ccode_base_module_get_temp_ref_values (self);
	_tmp27_ = _tmp26_;
	vala_collection_clear ((ValaCollection*) _tmp27_);
}

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_;
	ValaBlock* _tmp30_;
	gboolean _tmp31_;
	gboolean _tmp32_;
	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_);
	local_vars = _tmp2_;
	{
		gint i = 0;
		ValaList* _tmp3_;
		gint _tmp4_;
		gint _tmp5_;
		_tmp3_ = local_vars;
		_tmp4_ = vala_collection_get_size ((ValaCollection*) _tmp3_);
		_tmp5_ = _tmp4_;
		i = _tmp5_ - 1;
		{
			gboolean _tmp6_ = FALSE;
			_tmp6_ = TRUE;
			while (TRUE) {
				ValaLocalVariable* local = NULL;
				ValaList* _tmp8_;
				gpointer _tmp9_;
				gboolean _tmp10_ = FALSE;
				gboolean _tmp11_ = FALSE;
				gboolean _tmp12_ = FALSE;
				ValaLocalVariable* _tmp13_;
				gboolean _tmp14_;
				gboolean _tmp15_;
				if (!_tmp6_) {
					gint _tmp7_;
					_tmp7_ = i;
					i = _tmp7_ - 1;
				}
				_tmp6_ = FALSE;
				if (!(i >= 0)) {
					break;
				}
				_tmp8_ = local_vars;
				_tmp9_ = vala_list_get (_tmp8_, i);
				local = (ValaLocalVariable*) _tmp9_;
				_tmp13_ = local;
				_tmp14_ = vala_code_node_get_unreachable ((ValaCodeNode*) _tmp13_);
				_tmp15_ = _tmp14_;
				if (!_tmp15_) {
					ValaLocalVariable* _tmp16_;
					gboolean _tmp17_;
					gboolean _tmp18_;
					_tmp16_ = local;
					_tmp17_ = vala_symbol_get_active ((ValaSymbol*) _tmp16_);
					_tmp18_ = _tmp17_;
					_tmp12_ = _tmp18_;
				} else {
					_tmp12_ = FALSE;
				}
				if (_tmp12_) {
					ValaLocalVariable* _tmp19_;
					gboolean _tmp20_;
					gboolean _tmp21_;
					_tmp19_ = local;
					_tmp20_ = vala_local_variable_get_captured (_tmp19_);
					_tmp21_ = _tmp20_;
					_tmp11_ = !_tmp21_;
				} else {
					_tmp11_ = FALSE;
				}
				if (_tmp11_) {
					ValaLocalVariable* _tmp22_;
					ValaDataType* _tmp23_;
					ValaDataType* _tmp24_;
					_tmp22_ = local;
					_tmp23_ = vala_variable_get_variable_type ((ValaVariable*) _tmp22_);
					_tmp24_ = _tmp23_;
					_tmp10_ = vala_ccode_base_module_requires_destroy (self, _tmp24_);
				} else {
					_tmp10_ = FALSE;
				}
				if (_tmp10_) {
					ValaCCodeFunction* _tmp25_;
					ValaCCodeFunction* _tmp26_;
					ValaLocalVariable* _tmp27_;
					ValaCCodeExpression* _tmp28_;
					ValaCCodeExpression* _tmp29_;
					_tmp25_ = vala_ccode_base_module_get_ccode (self);
					_tmp26_ = _tmp25_;
					_tmp27_ = local;
					_tmp28_ = vala_ccode_base_module_destroy_local (self, _tmp27_);
					_tmp29_ = _tmp28_;
					vala_ccode_function_add_expression (_tmp26_, _tmp29_);
					_vala_ccode_node_unref0 (_tmp29_);
				}
				_vala_code_node_unref0 (local);
			}
		}
	}
	_tmp30_ = b;
	_tmp31_ = vala_block_get_captured (_tmp30_);
	_tmp32_ = _tmp31_;
	if (_tmp32_) {
		gint block_id = 0;
		ValaBlock* _tmp33_;
		ValaCCodeFunctionCall* data_unref = NULL;
		gchar* _tmp34_;
		gchar* _tmp35_;
		ValaCCodeIdentifier* _tmp36_;
		ValaCCodeIdentifier* _tmp37_;
		ValaCCodeFunctionCall* _tmp38_;
		ValaCCodeFunctionCall* _tmp39_;
		ValaCCodeFunctionCall* _tmp40_;
		gchar* _tmp41_;
		gchar* _tmp42_;
		ValaCCodeExpression* _tmp43_;
		ValaCCodeExpression* _tmp44_;
		ValaCCodeFunction* _tmp45_;
		ValaCCodeFunction* _tmp46_;
		ValaCCodeFunctionCall* _tmp47_;
		ValaCCodeFunction* _tmp48_;
		ValaCCodeFunction* _tmp49_;
		gchar* _tmp50_;
		gchar* _tmp51_;
		ValaCCodeExpression* _tmp52_;
		ValaCCodeExpression* _tmp53_;
		ValaCCodeConstant* _tmp54_;
		ValaCCodeConstant* _tmp55_;
		_tmp33_ = b;
		block_id = vala_ccode_base_module_get_block_id (self, _tmp33_);
		_tmp34_ = g_strdup_printf ("block%d_data_unref", block_id);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_ccode_identifier_new (_tmp35_);
		_tmp37_ = _tmp36_;
		_tmp38_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp37_);
		_tmp39_ = _tmp38_;
		_vala_ccode_node_unref0 (_tmp37_);
		_g_free0 (_tmp35_);
		data_unref = _tmp39_;
		_tmp40_ = data_unref;
		_tmp41_ = g_strdup_printf ("_data%d_", block_id);
		_tmp42_ = _tmp41_;
		_tmp43_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp42_);
		_tmp44_ = _tmp43_;
		vala_ccode_function_call_add_argument (_tmp40_, _tmp44_);
		_vala_ccode_node_unref0 (_tmp44_);
		_g_free0 (_tmp42_);
		_tmp45_ = vala_ccode_base_module_get_ccode (self);
		_tmp46_ = _tmp45_;
		_tmp47_ = data_unref;
		vala_ccode_function_add_expression (_tmp46_, (ValaCCodeExpression*) _tmp47_);
		_tmp48_ = vala_ccode_base_module_get_ccode (self);
		_tmp49_ = _tmp48_;
		_tmp50_ = g_strdup_printf ("_data%d_", block_id);
		_tmp51_ = _tmp50_;
		_tmp52_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp51_);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_constant_new ("NULL");
		_tmp55_ = _tmp54_;
		vala_ccode_function_add_assignment (_tmp49_, _tmp53_, (ValaCCodeExpression*) _tmp55_);
		_vala_ccode_node_unref0 (_tmp55_);
		_vala_ccode_node_unref0 (_tmp53_);
		_g_free0 (_tmp51_);
		_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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->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)) {
			_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)) {
				_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 (self, _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) {
			ValaParameter* param = NULL;
			ValaList* _tmp4_;
			gpointer _tmp5_;
			gboolean _tmp6_ = FALSE;
			gboolean _tmp7_ = FALSE;
			gboolean _tmp8_ = FALSE;
			ValaParameter* _tmp9_;
			gboolean _tmp10_;
			gboolean _tmp11_;
			_param_index = _param_index + 1;
			if (!(_param_index < _param_size)) {
				break;
			}
			_tmp4_ = _param_list;
			_tmp5_ = vala_list_get (_tmp4_, _param_index);
			param = (ValaParameter*) _tmp5_;
			_tmp9_ = param;
			_tmp10_ = vala_parameter_get_captured (_tmp9_);
			_tmp11_ = _tmp10_;
			if (!_tmp11_) {
				ValaParameter* _tmp12_;
				gboolean _tmp13_;
				gboolean _tmp14_;
				_tmp12_ = param;
				_tmp13_ = vala_parameter_get_ellipsis (_tmp12_);
				_tmp14_ = _tmp13_;
				_tmp8_ = !_tmp14_;
			} else {
				_tmp8_ = FALSE;
			}
			if (_tmp8_) {
				ValaParameter* _tmp15_;
				ValaDataType* _tmp16_;
				ValaDataType* _tmp17_;
				_tmp15_ = param;
				_tmp16_ = vala_variable_get_variable_type ((ValaVariable*) _tmp15_);
				_tmp17_ = _tmp16_;
				_tmp7_ = vala_ccode_base_module_requires_destroy (self, _tmp17_);
			} else {
				_tmp7_ = FALSE;
			}
			if (_tmp7_) {
				ValaParameter* _tmp18_;
				ValaParameterDirection _tmp19_;
				ValaParameterDirection _tmp20_;
				_tmp18_ = param;
				_tmp19_ = vala_parameter_get_direction (_tmp18_);
				_tmp20_ = _tmp19_;
				_tmp6_ = _tmp20_ == VALA_PARAMETER_DIRECTION_IN;
			} else {
				_tmp6_ = FALSE;
			}
			if (_tmp6_) {
				ValaCCodeFunction* _tmp21_;
				ValaCCodeFunction* _tmp22_;
				ValaParameter* _tmp23_;
				ValaCCodeExpression* _tmp24_;
				ValaCCodeExpression* _tmp25_;
				_tmp21_ = vala_ccode_base_module_get_ccode (self);
				_tmp22_ = _tmp21_;
				_tmp23_ = param;
				_tmp24_ = vala_ccode_base_module_destroy_parameter (self, _tmp23_);
				_tmp25_ = _tmp24_;
				vala_ccode_function_add_expression (_tmp22_, _tmp25_);
				_vala_ccode_node_unref0 (_tmp25_);
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
}

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

static gboolean
vala_ccode_base_module_is_compact_class_destructor_call (ValaCCodeBaseModule* self,
                                                         ValaExpression* expr)
{
	ValaClass* cl = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	ValaClass* _tmp6_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (expr != NULL, FALSE);
	_tmp0_ = vala_expression_get_value_type (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_get_data_type (_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_;
	ValaCCodeExpression* _tmp2_;
	gboolean _tmp3_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp1_ = vala_ccode_base_module_get_cvalue (self, expr);
	_tmp2_ = _tmp1_;
	_tmp3_ = _tmp2_ != NULL;
	_vala_ccode_node_unref0 (_tmp2_);
	if (_tmp3_) {
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp4_ = vala_expression_get_lvalue (expr);
		_tmp5_ = _tmp4_;
		_tmp0_ = !_tmp5_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gboolean _tmp6_ = FALSE;
		ValaDataType* _tmp7_;
		ValaDataType* _tmp8_;
		ValaDataType* _tmp40_;
		ValaDataType* _tmp41_;
		ValaTargetValue* _tmp52_;
		ValaTargetValue* _tmp53_;
		gboolean _tmp54_ = FALSE;
		ValaDataType* _tmp55_;
		ValaDataType* _tmp56_;
		gboolean _tmp74_ = FALSE;
		ValaDataType* _tmp75_;
		ValaDataType* _tmp76_;
		_tmp7_ = vala_expression_get_formal_value_type (expr);
		_tmp8_ = _tmp7_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_GENERIC_TYPE)) {
			ValaDataType* _tmp9_;
			ValaDataType* _tmp10_;
			_tmp9_ = vala_expression_get_value_type (expr);
			_tmp10_ = _tmp9_;
			_tmp6_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_GENERIC_TYPE);
		} else {
			_tmp6_ = FALSE;
		}
		if (_tmp6_) {
			ValaTypeParameter* type_parameter = NULL;
			ValaDataType* _tmp11_;
			ValaDataType* _tmp12_;
			ValaTypeParameter* _tmp13_;
			ValaTypeParameter* _tmp14_;
			ValaTypeParameter* _tmp15_;
			ValaStruct* st = NULL;
			ValaTypeParameter* _tmp16_;
			ValaSymbol* _tmp17_;
			ValaSymbol* _tmp18_;
			ValaSymbol* _tmp19_;
			ValaSymbol* _tmp20_;
			ValaStruct* _tmp21_;
			gboolean _tmp22_ = FALSE;
			ValaTypeParameter* _tmp23_;
			ValaSymbol* _tmp24_;
			ValaSymbol* _tmp25_;
			ValaTypeSymbol* _tmp26_;
			_tmp11_ = vala_expression_get_formal_value_type (expr);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
			_tmp14_ = _tmp13_;
			_tmp15_ = _vala_code_node_ref0 (_tmp14_);
			type_parameter = _tmp15_;
			_tmp16_ = type_parameter;
			_tmp17_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp16_);
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_symbol_get_parent_symbol (_tmp18_);
			_tmp20_ = _tmp19_;
			_tmp21_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp20_) : NULL);
			st = _tmp21_;
			_tmp23_ = type_parameter;
			_tmp24_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp23_);
			_tmp25_ = _tmp24_;
			_tmp26_ = self->garray_type;
			if (_tmp25_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, VALA_TYPE_SYMBOL, ValaSymbol)) {
				gboolean _tmp27_ = FALSE;
				ValaStruct* _tmp28_;
				_tmp28_ = st;
				if (_tmp28_ == NULL) {
					_tmp27_ = TRUE;
				} else {
					ValaStruct* _tmp29_;
					gchar* _tmp30_;
					gchar* _tmp31_;
					_tmp29_ = st;
					_tmp30_ = vala_get_ccode_name ((ValaCodeNode*) _tmp29_);
					_tmp31_ = _tmp30_;
					_tmp27_ = g_strcmp0 (_tmp31_, "va_list") != 0;
					_g_free0 (_tmp31_);
				}
				_tmp22_ = _tmp27_;
			} else {
				_tmp22_ = FALSE;
			}
			if (_tmp22_) {
				ValaCCodeExpression* _tmp32_;
				ValaCCodeExpression* _tmp33_;
				ValaDataType* _tmp34_;
				ValaDataType* _tmp35_;
				ValaCCodeExpression* _tmp36_;
				ValaCCodeExpression* _tmp37_;
				ValaTargetValue* _tmp38_;
				ValaTargetValue* _tmp39_;
				_tmp32_ = vala_ccode_base_module_get_cvalue (self, expr);
				_tmp33_ = _tmp32_;
				_tmp34_ = vala_expression_get_value_type (expr);
				_tmp35_ = _tmp34_;
				_tmp36_ = vala_ccode_base_module_convert_from_generic_pointer (self, _tmp33_, _tmp35_);
				_tmp37_ = _tmp36_;
				vala_ccode_base_module_set_cvalue (self, expr, _tmp37_);
				_vala_ccode_node_unref0 (_tmp37_);
				_vala_ccode_node_unref0 (_tmp33_);
				_tmp38_ = vala_expression_get_target_value (expr);
				_tmp39_ = _tmp38_;
				G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
			}
			_vala_code_node_unref0 (st);
			_vala_code_node_unref0 (type_parameter);
		}
		_tmp40_ = vala_expression_get_value_type (expr);
		_tmp41_ = _tmp40_;
		if (_tmp41_ != NULL) {
			ValaTargetValue* _tmp42_;
			ValaTargetValue* _tmp43_;
			ValaDataType* _tmp44_;
			ValaDataType* _tmp45_;
			ValaTargetValue* _tmp46_;
			ValaTargetValue* _tmp47_;
			ValaDataType* _tmp48_;
			ValaDataType* _tmp49_;
			ValaTargetValue* _tmp50_;
			ValaTargetValue* _tmp51_;
			_tmp42_ = vala_expression_get_target_value (expr);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_expression_get_value_type (expr);
			_tmp45_ = _tmp44_;
			vala_target_value_set_value_type (_tmp43_, _tmp45_);
			_tmp46_ = vala_expression_get_target_value (expr);
			_tmp47_ = _tmp46_;
			_tmp48_ = vala_expression_get_target_type (expr);
			_tmp49_ = _tmp48_;
			_tmp50_ = vala_ccode_base_module_transform_value (self, _tmp47_, _tmp49_, (ValaCodeNode*) expr);
			_tmp51_ = _tmp50_;
			vala_expression_set_target_value (expr, _tmp51_);
			_vala_target_value_unref0 (_tmp51_);
		}
		_tmp52_ = vala_expression_get_target_value (expr);
		_tmp53_ = _tmp52_;
		if (_tmp53_ == NULL) {
			return;
		}
		_tmp55_ = vala_expression_get_formal_target_type (expr);
		_tmp56_ = _tmp55_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp56_, VALA_TYPE_GENERIC_TYPE)) {
			ValaDataType* _tmp57_;
			ValaDataType* _tmp58_;
			_tmp57_ = vala_expression_get_target_type (expr);
			_tmp58_ = _tmp57_;
			_tmp54_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp58_, VALA_TYPE_GENERIC_TYPE);
		} else {
			_tmp54_ = FALSE;
		}
		if (_tmp54_) {
			ValaDataType* _tmp59_;
			ValaDataType* _tmp60_;
			ValaTypeParameter* _tmp61_;
			ValaTypeParameter* _tmp62_;
			ValaSymbol* _tmp63_;
			ValaSymbol* _tmp64_;
			ValaTypeSymbol* _tmp65_;
			_tmp59_ = vala_expression_get_formal_target_type (expr);
			_tmp60_ = _tmp59_;
			_tmp61_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp60_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
			_tmp62_ = _tmp61_;
			_tmp63_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp62_);
			_tmp64_ = _tmp63_;
			_tmp65_ = self->garray_type;
			if (_tmp64_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp65_, VALA_TYPE_SYMBOL, ValaSymbol)) {
				ValaCCodeExpression* _tmp66_;
				ValaCCodeExpression* _tmp67_;
				ValaDataType* _tmp68_;
				ValaDataType* _tmp69_;
				ValaCCodeExpression* _tmp70_;
				ValaCCodeExpression* _tmp71_;
				ValaTargetValue* _tmp72_;
				ValaTargetValue* _tmp73_;
				_tmp66_ = vala_ccode_base_module_get_cvalue (self, expr);
				_tmp67_ = _tmp66_;
				_tmp68_ = vala_expression_get_target_type (expr);
				_tmp69_ = _tmp68_;
				_tmp70_ = vala_ccode_base_module_convert_to_generic_pointer (self, _tmp67_, _tmp69_);
				_tmp71_ = _tmp70_;
				vala_ccode_base_module_set_cvalue (self, expr, _tmp71_);
				_vala_ccode_node_unref0 (_tmp71_);
				_vala_ccode_node_unref0 (_tmp67_);
				_tmp72_ = vala_expression_get_target_value (expr);
				_tmp73_ = _tmp72_;
				G_TYPE_CHECK_INSTANCE_CAST (_tmp73_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
			}
		}
		_tmp75_ = vala_expression_get_value_type (expr);
		_tmp76_ = _tmp75_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp76_, VALA_TYPE_VALUE_TYPE)) {
			ValaDataType* _tmp77_;
			ValaDataType* _tmp78_;
			gboolean _tmp79_;
			gboolean _tmp80_;
			_tmp77_ = vala_expression_get_value_type (expr);
			_tmp78_ = _tmp77_;
			_tmp79_ = vala_data_type_get_nullable (_tmp78_);
			_tmp80_ = _tmp79_;
			_tmp74_ = !_tmp80_;
		} else {
			_tmp74_ = FALSE;
		}
		if (!_tmp74_) {
			ValaTargetValue* _tmp81_;
			ValaTargetValue* _tmp82_;
			_tmp81_ = vala_expression_get_target_value (expr);
			_tmp82_ = _tmp81_;
			G_TYPE_CHECK_INSTANCE_CAST (_tmp82_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->non_null = vala_expression_is_non_null (expr);
		}
	} else {
		gboolean _tmp83_ = FALSE;
		ValaDataType* _tmp84_;
		ValaDataType* _tmp85_;
		_tmp84_ = vala_expression_get_value_type (expr);
		_tmp85_ = _tmp84_;
		if (_tmp85_ != NULL) {
			_tmp83_ = vala_ccode_base_module_is_compact_class_destructor_call (self, expr);
		} else {
			_tmp83_ = FALSE;
		}
		if (_tmp83_) {
			ValaTargetValue* temp_value = NULL;
			ValaTargetValue* _tmp86_;
			ValaTargetValue* _tmp87_;
			ValaTargetValue* _tmp88_;
			ValaCCodeFunction* _tmp89_;
			ValaCCodeFunction* _tmp90_;
			ValaCCodeExpression* _tmp91_;
			ValaCCodeExpression* _tmp92_;
			ValaCCodeConstant* _tmp93_;
			ValaCCodeConstant* _tmp94_;
			ValaTargetValue* _tmp95_;
			_tmp86_ = vala_expression_get_target_value (expr);
			_tmp87_ = _tmp86_;
			_tmp88_ = vala_ccode_base_module_store_temp_value (self, _tmp87_, (ValaCodeNode*) expr, NULL);
			temp_value = _tmp88_;
			_tmp89_ = vala_ccode_base_module_get_ccode (self);
			_tmp90_ = _tmp89_;
			_tmp91_ = vala_ccode_base_module_get_cvalue (self, expr);
			_tmp92_ = _tmp91_;
			_tmp93_ = vala_ccode_constant_new ("NULL");
			_tmp94_ = _tmp93_;
			vala_ccode_function_add_assignment (_tmp90_, _tmp92_, (ValaCCodeExpression*) _tmp94_);
			_vala_ccode_node_unref0 (_tmp94_);
			_vala_ccode_node_unref0 (_tmp92_);
			_tmp95_ = temp_value;
			vala_expression_set_target_value (expr, _tmp95_);
			_vala_target_value_unref0 (temp_value);
		}
	}
}

static void
vala_ccode_base_module_real_visit_boolean_literal (ValaCodeVisitor* base,
                                                   ValaBooleanLiteral* expr)
{
	ValaCCodeBaseModule * self;
	ValaCodeContext* _tmp0_;
	ValaProfile _tmp1_;
	ValaProfile _tmp2_;
	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) {
		const gchar* _tmp3_ = NULL;
		gboolean _tmp4_;
		gboolean _tmp5_;
		ValaCCodeConstant* _tmp6_;
		ValaCCodeConstant* _tmp7_;
		_tmp4_ = vala_boolean_literal_get_value (expr);
		_tmp5_ = _tmp4_;
		if (_tmp5_) {
			_tmp3_ = "TRUE";
		} else {
			_tmp3_ = "FALSE";
		}
		_tmp6_ = vala_ccode_constant_new (_tmp3_);
		_tmp7_ = _tmp6_;
		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp7_);
		_vala_ccode_node_unref0 (_tmp7_);
	} else {
		ValaCCodeFile* _tmp8_;
		const gchar* _tmp9_ = NULL;
		gboolean _tmp10_;
		gboolean _tmp11_;
		ValaCCodeConstant* _tmp12_;
		ValaCCodeConstant* _tmp13_;
		_tmp8_ = self->cfile;
		vala_ccode_file_add_include (_tmp8_, "stdbool.h", FALSE);
		_tmp10_ = vala_boolean_literal_get_value (expr);
		_tmp11_ = _tmp10_;
		if (_tmp11_) {
			_tmp9_ = "true";
		} else {
			_tmp9_ = "false";
		}
		_tmp12_ = vala_ccode_constant_new (_tmp9_);
		_tmp13_ = _tmp12_;
		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp13_);
		_vala_ccode_node_unref0 (_tmp13_);
	}
}

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_ccode_base_module_set_cvalue (self, (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_ccode_base_module_set_cvalue (self, (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_ccode_base_module_set_cvalue (self, (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 = 0L;
	_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 = NULL;
	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 = FALSE;
	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_ccode_base_module_set_cvalue (self, (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_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp5_);
	_vala_ccode_node_unref0 (_tmp5_);
	_g_free0 (_tmp3_);
	_tmp6_ = vala_string_literal_get_translate (expr);
	_tmp7_ = _tmp6_;
	if (_tmp7_) {
		ValaMethod* m = NULL;
		ValaSymbol* _tmp8_;
		ValaScope* _tmp9_;
		ValaScope* _tmp10_;
		ValaSymbol* _tmp11_;
		ValaSymbol* _tmp12_;
		ValaScope* _tmp13_;
		ValaScope* _tmp14_;
		ValaSymbol* _tmp15_;
		ValaMethod* _tmp16_;
		ValaCCodeFile* _tmp17_;
		ValaMethod* _tmp18_;
		ValaMethod* _tmp19_;
		gchar* _tmp20_;
		gchar* _tmp21_;
		ValaCCodeFunctionCall* translate = NULL;
		ValaCCodeIdentifier* _tmp22_;
		ValaCCodeIdentifier* _tmp23_;
		ValaCCodeFunctionCall* _tmp24_;
		ValaCCodeFunctionCall* _tmp25_;
		ValaCCodeFunctionCall* _tmp26_;
		ValaCCodeExpression* _tmp27_;
		ValaCCodeExpression* _tmp28_;
		ValaCCodeFunctionCall* _tmp29_;
		_tmp8_ = self->root_symbol;
		_tmp9_ = vala_symbol_get_scope (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_scope_lookup (_tmp10_, "GLib");
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_symbol_get_scope (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_scope_lookup (_tmp14_, "_");
		_tmp16_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_METHOD, ValaMethod);
		_vala_code_node_unref0 (_tmp12_);
		m = _tmp16_;
		_tmp17_ = self->cfile;
		_tmp18_ = m;
		_tmp19_ = m;
		_tmp20_ = vala_get_ccode_name ((ValaCodeNode*) _tmp19_);
		_tmp21_ = _tmp20_;
		vala_ccode_base_module_add_symbol_declaration (self, _tmp17_, (ValaSymbol*) _tmp18_, _tmp21_);
		_g_free0 (_tmp21_);
		_tmp22_ = vala_ccode_identifier_new ("_");
		_tmp23_ = _tmp22_;
		_tmp24_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp23_);
		_tmp25_ = _tmp24_;
		_vala_ccode_node_unref0 (_tmp23_);
		translate = _tmp25_;
		_tmp26_ = translate;
		_tmp27_ = vala_ccode_base_module_get_cvalue (self, (ValaExpression*) expr);
		_tmp28_ = _tmp27_;
		vala_ccode_function_call_add_argument (_tmp26_, _tmp28_);
		_vala_ccode_node_unref0 (_tmp28_);
		_tmp29_ = translate;
		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp29_);
		_vala_ccode_node_unref0 (translate);
		_vala_code_node_unref0 (m);
	}
}

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 _tmp90_;
	ValaCCodeDeclaration* _tmp91_;
	const gchar* _tmp92_;
	gchar* _tmp93_;
	gchar* _tmp94_;
	ValaCCodeVariableDeclarator* _tmp95_;
	ValaCCodeVariableDeclarator* _tmp96_;
	ValaCCodeDeclaration* _tmp97_;
	ValaCCodeConstant* regex_const = NULL;
	const gchar* _tmp98_;
	const gchar* _tmp99_;
	const gchar* _tmp100_;
	gchar* _tmp101_;
	gchar* _tmp102_;
	ValaCCodeConstant* _tmp103_;
	ValaCCodeConstant* _tmp104_;
	ValaCCodeFile* _tmp105_;
	ValaCCodeDeclaration* _tmp106_;
	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_;
		ValaCCodeFunctionCall* _tmp42_;
		ValaCCodeConstant* _tmp43_;
		ValaCCodeConstant* _tmp44_;
		ValaCCodeFunction* _tmp45_;
		ValaCCodeFunction* _tmp46_;
		ValaCCodeFunctionCall* _tmp47_;
		ValaCCodeFunctionCall* regex_new_call = NULL;
		ValaCCodeIdentifier* _tmp48_;
		ValaCCodeIdentifier* _tmp49_;
		ValaCCodeFunctionCall* _tmp50_;
		ValaCCodeFunctionCall* _tmp51_;
		ValaCCodeFunctionCall* _tmp52_;
		ValaCCodeConstant* _tmp53_;
		ValaCCodeConstant* _tmp54_;
		ValaCCodeFunctionCall* _tmp55_;
		ValaCCodeConstant* _tmp56_;
		ValaCCodeConstant* _tmp57_;
		ValaCCodeFunctionCall* _tmp58_;
		ValaCCodeConstant* _tmp59_;
		ValaCCodeConstant* _tmp60_;
		ValaCCodeFunctionCall* _tmp61_;
		ValaCCodeConstant* _tmp62_;
		ValaCCodeConstant* _tmp63_;
		ValaCCodeFunction* _tmp64_;
		ValaCCodeFunction* _tmp65_;
		ValaCCodeIdentifier* _tmp66_;
		ValaCCodeIdentifier* _tmp67_;
		ValaCCodeFunctionCall* _tmp68_;
		ValaCCodeFunctionCall* once_leave_call = NULL;
		ValaCCodeIdentifier* _tmp69_;
		ValaCCodeIdentifier* _tmp70_;
		ValaCCodeFunctionCall* _tmp71_;
		ValaCCodeFunctionCall* _tmp72_;
		ValaCCodeFunctionCall* _tmp73_;
		ValaCCodeConstant* _tmp74_;
		ValaCCodeConstant* _tmp75_;
		ValaCCodeFunctionCall* _tmp76_;
		ValaCCodeConstant* _tmp77_;
		ValaCCodeConstant* _tmp78_;
		ValaCCodeFunction* _tmp79_;
		ValaCCodeFunction* _tmp80_;
		ValaCCodeFunctionCall* _tmp81_;
		ValaCCodeFunction* _tmp82_;
		ValaCCodeFunction* _tmp83_;
		ValaCCodeFunction* _tmp84_;
		ValaCCodeFunction* _tmp85_;
		ValaCCodeIdentifier* _tmp86_;
		ValaCCodeIdentifier* _tmp87_;
		ValaCCodeFile* _tmp88_;
		ValaCCodeFunction* _tmp89_;
		_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_ = once_enter_call;
		_tmp43_ = vala_ccode_constant_new ("(volatile gsize*) re");
		_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_ = once_enter_call;
		vala_ccode_function_open_if (_tmp46_, (ValaCCodeExpression*) _tmp47_);
		_tmp48_ = vala_ccode_identifier_new ("g_regex_new");
		_tmp49_ = _tmp48_;
		_tmp50_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp49_);
		_tmp51_ = _tmp50_;
		_vala_ccode_node_unref0 (_tmp49_);
		regex_new_call = _tmp51_;
		_tmp52_ = regex_new_call;
		_tmp53_ = vala_ccode_constant_new ("pattern");
		_tmp54_ = _tmp53_;
		vala_ccode_function_call_add_argument (_tmp52_, (ValaCCodeExpression*) _tmp54_);
		_vala_ccode_node_unref0 (_tmp54_);
		_tmp55_ = regex_new_call;
		_tmp56_ = vala_ccode_constant_new ("compile_flags");
		_tmp57_ = _tmp56_;
		vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp57_);
		_vala_ccode_node_unref0 (_tmp57_);
		_tmp58_ = regex_new_call;
		_tmp59_ = vala_ccode_constant_new ("0");
		_tmp60_ = _tmp59_;
		vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp60_);
		_vala_ccode_node_unref0 (_tmp60_);
		_tmp61_ = regex_new_call;
		_tmp62_ = vala_ccode_constant_new ("NULL");
		_tmp63_ = _tmp62_;
		vala_ccode_function_call_add_argument (_tmp61_, (ValaCCodeExpression*) _tmp63_);
		_vala_ccode_node_unref0 (_tmp63_);
		_tmp64_ = vala_ccode_base_module_get_ccode (self);
		_tmp65_ = _tmp64_;
		_tmp66_ = vala_ccode_identifier_new ("GRegex* val");
		_tmp67_ = _tmp66_;
		_tmp68_ = regex_new_call;
		vala_ccode_function_add_assignment (_tmp65_, (ValaCCodeExpression*) _tmp67_, (ValaCCodeExpression*) _tmp68_);
		_vala_ccode_node_unref0 (_tmp67_);
		_tmp69_ = vala_ccode_identifier_new ("g_once_init_leave");
		_tmp70_ = _tmp69_;
		_tmp71_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp70_);
		_tmp72_ = _tmp71_;
		_vala_ccode_node_unref0 (_tmp70_);
		once_leave_call = _tmp72_;
		_tmp73_ = once_leave_call;
		_tmp74_ = vala_ccode_constant_new ("(volatile gsize*) re");
		_tmp75_ = _tmp74_;
		vala_ccode_function_call_add_argument (_tmp73_, (ValaCCodeExpression*) _tmp75_);
		_vala_ccode_node_unref0 (_tmp75_);
		_tmp76_ = once_leave_call;
		_tmp77_ = vala_ccode_constant_new ("(gsize) val");
		_tmp78_ = _tmp77_;
		vala_ccode_function_call_add_argument (_tmp76_, (ValaCCodeExpression*) _tmp78_);
		_vala_ccode_node_unref0 (_tmp78_);
		_tmp79_ = vala_ccode_base_module_get_ccode (self);
		_tmp80_ = _tmp79_;
		_tmp81_ = once_leave_call;
		vala_ccode_function_add_expression (_tmp80_, (ValaCCodeExpression*) _tmp81_);
		_tmp82_ = vala_ccode_base_module_get_ccode (self);
		_tmp83_ = _tmp82_;
		vala_ccode_function_close (_tmp83_);
		_tmp84_ = vala_ccode_base_module_get_ccode (self);
		_tmp85_ = _tmp84_;
		_tmp86_ = vala_ccode_identifier_new ("*re");
		_tmp87_ = _tmp86_;
		vala_ccode_function_add_return (_tmp85_, (ValaCCodeExpression*) _tmp87_);
		_vala_ccode_node_unref0 (_tmp87_);
		vala_ccode_base_module_pop_function (self);
		_tmp88_ = self->cfile;
		_tmp89_ = fun;
		vala_ccode_file_add_function (_tmp88_, _tmp89_);
		_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);
	}
	_tmp90_ = self->next_regex_id;
	self->next_regex_id = _tmp90_ + 1;
	_tmp91_ = _cdecl_;
	_tmp92_ = cname;
	_tmp93_ = g_strconcat (_tmp92_, " = NULL", NULL);
	_tmp94_ = _tmp93_;
	_tmp95_ = vala_ccode_variable_declarator_new (_tmp94_, NULL, NULL);
	_tmp96_ = _tmp95_;
	vala_ccode_declaration_add_declarator (_tmp91_, (ValaCCodeDeclarator*) _tmp96_);
	_vala_ccode_node_unref0 (_tmp96_);
	_g_free0 (_tmp94_);
	_tmp97_ = _cdecl_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp97_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp98_ = cname;
	_tmp99_ = re;
	_tmp100_ = flags;
	_tmp101_ = g_strdup_printf ("_thread_safe_regex_init (&%s, \"%s\", %s)", _tmp98_, _tmp99_, _tmp100_);
	_tmp102_ = _tmp101_;
	_tmp103_ = vala_ccode_constant_new (_tmp102_);
	_tmp104_ = _tmp103_;
	_g_free0 (_tmp102_);
	regex_const = _tmp104_;
	_tmp105_ = self->cfile;
	_tmp106_ = _cdecl_;
	vala_ccode_file_add_constant_declaration (_tmp105_, (ValaCCodeNode*) _tmp106_);
	vala_ccode_base_module_set_cvalue (self, (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* _tmp4_;
	ValaCCodeConstant* _tmp5_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	ValaArrayType* _tmp8_;
	ValaDelegateType* delegate_type = NULL;
	ValaDataType* _tmp9_;
	ValaDataType* _tmp10_;
	ValaDelegateType* _tmp11_;
	ValaArrayType* _tmp12_;
	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_, "stddef.h", FALSE);
	}
	_tmp4_ = vala_ccode_constant_new ("NULL");
	_tmp5_ = _tmp4_;
	vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp5_);
	_vala_ccode_node_unref0 (_tmp5_);
	_tmp6_ = vala_expression_get_target_type ((ValaExpression*) expr);
	_tmp7_ = _tmp6_;
	_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp7_) : NULL);
	array_type = _tmp8_;
	_tmp9_ = vala_expression_get_target_type ((ValaExpression*) expr);
	_tmp10_ = _tmp9_;
	_tmp11_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp10_) : NULL);
	delegate_type = _tmp11_;
	_tmp12_ = array_type;
	if (_tmp12_ != NULL) {
		{
			gint dim = 0;
			dim = 1;
			{
				gboolean _tmp13_ = FALSE;
				_tmp13_ = TRUE;
				while (TRUE) {
					ValaArrayType* _tmp15_;
					gint _tmp16_;
					gint _tmp17_;
					ValaCCodeConstant* _tmp18_;
					ValaCCodeConstant* _tmp19_;
					if (!_tmp13_) {
						gint _tmp14_;
						_tmp14_ = dim;
						dim = _tmp14_ + 1;
					}
					_tmp13_ = FALSE;
					_tmp15_ = array_type;
					_tmp16_ = vala_array_type_get_rank (_tmp15_);
					_tmp17_ = _tmp16_;
					if (!(dim <= _tmp17_)) {
						break;
					}
					_tmp18_ = vala_ccode_constant_new ("0");
					_tmp19_ = _tmp18_;
					vala_ccode_base_module_append_array_length (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp19_);
					_vala_ccode_node_unref0 (_tmp19_);
				}
			}
		}
	} else {
		gboolean _tmp20_ = FALSE;
		ValaDelegateType* _tmp21_;
		_tmp21_ = delegate_type;
		if (_tmp21_ != NULL) {
			ValaDelegateType* _tmp22_;
			ValaDelegate* _tmp23_;
			ValaDelegate* _tmp24_;
			gboolean _tmp25_;
			gboolean _tmp26_;
			_tmp22_ = delegate_type;
			_tmp23_ = vala_delegate_type_get_delegate_symbol (_tmp22_);
			_tmp24_ = _tmp23_;
			_tmp25_ = vala_delegate_get_has_target (_tmp24_);
			_tmp26_ = _tmp25_;
			_tmp20_ = _tmp26_;
		} else {
			_tmp20_ = FALSE;
		}
		if (_tmp20_) {
			ValaCCodeConstant* _tmp27_;
			ValaCCodeConstant* _tmp28_;
			ValaCCodeConstant* _tmp29_;
			ValaCCodeConstant* _tmp30_;
			_tmp27_ = vala_ccode_constant_new ("NULL");
			_tmp28_ = _tmp27_;
			vala_ccode_base_module_set_delegate_target (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp28_);
			_vala_ccode_node_unref0 (_tmp28_);
			_tmp29_ = vala_ccode_constant_new ("NULL");
			_tmp30_ = _tmp29_;
			vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp30_);
			_vala_ccode_node_unref0 (_tmp30_);
		}
	}
	_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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_local_cvalue (self, local);
}

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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_parameter_cvalue (self, param);
}

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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_field_cvalue (self, field, instance);
}

static ValaTargetValue*
vala_ccode_base_module_real_load_variable (ValaCCodeBaseModule* self,
                                           ValaVariable* variable,
                                           ValaTargetValue* value)
{
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->load_variable (self, variable, value);
}

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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->load_this_parameter (self, sym);
}

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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_cname (self, delegate_cname);
}

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 ();
	if (delegate_target_destroy_notify) {
		*delegate_target_destroy_notify = _vala_delegate_target_destroy_notify;
	} else {
		_vala_ccode_node_unref0 (_vala_delegate_target_destroy_notify);
	}
}

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

static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_cvalue (ValaCCodeBaseModule* self,
                                                        ValaTargetValue* value)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_cvalue (self, value);
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue (ValaCCodeBaseModule* self,
                                                                       ValaTargetValue* value)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_destroy_notify_cvalue (self, value);
}

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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_destroy_notify_cname (self, delegate_cname);
}

static void
vala_ccode_base_module_real_visit_base_access (ValaCodeVisitor* base,
                                               ValaBaseAccess* expr)
{
	ValaCCodeBaseModule * self;
	ValaCCodeExpression* _tmp0_;
	ValaCCodeExpression* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaTypeSymbol* _tmp4_;
	ValaTypeSymbol* _tmp5_;
	ValaCCodeFunctionCall* _tmp6_;
	ValaCCodeFunctionCall* _tmp7_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_ccode_base_module_get_this_cexpression (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_expression_get_value_type ((ValaExpression*) expr);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_data_type_get_data_type (_tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_base_module_generate_instance_cast (self, _tmp1_, _tmp5_);
	_tmp7_ = _tmp6_;
	vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	_vala_ccode_node_unref0 (_tmp1_);
}

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* _tmp33_;
	ValaExpression* _tmp34_;
	ValaTargetValue* _tmp35_;
	ValaTargetValue* _tmp36_;
	ValaTargetValue* _tmp37_;
	ValaCCodeBinaryOperator _tmp38_ = 0;
	gboolean _tmp39_;
	gboolean _tmp40_;
	ValaCCodeBinaryOperator op = 0;
	ValaCCodeBinaryExpression* cexpr = NULL;
	ValaCCodeBinaryOperator _tmp41_;
	ValaTargetValue* _tmp42_;
	ValaCCodeExpression* _tmp43_;
	ValaCCodeExpression* _tmp44_;
	ValaCCodeConstant* _tmp45_;
	ValaCCodeConstant* _tmp46_;
	ValaCCodeBinaryExpression* _tmp47_;
	ValaCCodeBinaryExpression* _tmp48_;
	ValaCCodeFunction* _tmp49_;
	ValaCCodeFunction* _tmp50_;
	ValaExpression* _tmp51_;
	ValaExpression* _tmp52_;
	ValaCCodeExpression* _tmp53_;
	ValaCCodeExpression* _tmp54_;
	ValaCCodeBinaryExpression* _tmp55_;
	ValaTargetValue* _tmp56_;
	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;
		ValaCCodeBinaryOperator _tmp11_;
		ValaExpression* _tmp12_;
		ValaExpression* _tmp13_;
		ValaCCodeExpression* _tmp14_;
		ValaCCodeExpression* _tmp15_;
		ValaCCodeConstant* _tmp16_;
		ValaCCodeConstant* _tmp17_;
		ValaCCodeBinaryExpression* _tmp18_;
		ValaCCodeBinaryExpression* _tmp19_;
		ValaProperty* _tmp20_;
		ValaMemberAccess* _tmp21_;
		ValaExpression* _tmp22_;
		ValaExpression* _tmp23_;
		ValaDataType* _tmp24_;
		ValaDataType* _tmp25_;
		ValaCCodeBinaryExpression* _tmp26_;
		ValaGLibValue* _tmp27_;
		ValaGLibValue* _tmp28_;
		ValaExpression* _tmp29_;
		ValaExpression* _tmp30_;
		ValaTargetValue* _tmp31_;
		ValaTargetValue* _tmp32_;
		_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_ = op;
		_tmp12_ = vala_postfix_expression_get_inner (expr);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_ccode_base_module_get_cvalue (self, _tmp13_);
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_ccode_constant_new ("1");
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_ccode_binary_expression_new (_tmp11_, _tmp15_, (ValaCCodeExpression*) _tmp17_);
		_tmp19_ = _tmp18_;
		_vala_ccode_node_unref0 (_tmp17_);
		_vala_ccode_node_unref0 (_tmp15_);
		cexpr = _tmp19_;
		_tmp20_ = prop;
		_tmp21_ = ma;
		_tmp22_ = vala_member_access_get_inner (_tmp21_);
		_tmp23_ = _tmp22_;
		_tmp24_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp25_ = _tmp24_;
		_tmp26_ = cexpr;
		_tmp27_ = vala_glib_value_new (_tmp25_, (ValaCCodeExpression*) _tmp26_, FALSE);
		_tmp28_ = _tmp27_;
		vala_ccode_base_module_store_property (self, _tmp20_, _tmp23_, (ValaTargetValue*) _tmp28_);
		_vala_target_value_unref0 (_tmp28_);
		_tmp29_ = vala_postfix_expression_get_inner (expr);
		_tmp30_ = _tmp29_;
		_tmp31_ = vala_expression_get_target_value (_tmp30_);
		_tmp32_ = _tmp31_;
		vala_expression_set_target_value ((ValaExpression*) expr, _tmp32_);
		_vala_ccode_node_unref0 (cexpr);
		_vala_code_node_unref0 (prop);
		_vala_code_node_unref0 (ma);
		return;
	}
	_tmp33_ = vala_postfix_expression_get_inner (expr);
	_tmp34_ = _tmp33_;
	_tmp35_ = vala_expression_get_target_value (_tmp34_);
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_base_module_store_temp_value (self, _tmp36_, (ValaCodeNode*) expr, NULL);
	temp_value = _tmp37_;
	_tmp39_ = vala_postfix_expression_get_increment (expr);
	_tmp40_ = _tmp39_;
	if (_tmp40_) {
		_tmp38_ = VALA_CCODE_BINARY_OPERATOR_PLUS;
	} else {
		_tmp38_ = VALA_CCODE_BINARY_OPERATOR_MINUS;
	}
	op = _tmp38_;
	_tmp41_ = op;
	_tmp42_ = temp_value;
	_tmp43_ = vala_ccode_base_module_get_cvalue_ (self, _tmp42_);
	_tmp44_ = _tmp43_;
	_tmp45_ = vala_ccode_constant_new ("1");
	_tmp46_ = _tmp45_;
	_tmp47_ = vala_ccode_binary_expression_new (_tmp41_, _tmp44_, (ValaCCodeExpression*) _tmp46_);
	_tmp48_ = _tmp47_;
	_vala_ccode_node_unref0 (_tmp46_);
	_vala_ccode_node_unref0 (_tmp44_);
	cexpr = _tmp48_;
	_tmp49_ = vala_ccode_base_module_get_ccode (self);
	_tmp50_ = _tmp49_;
	_tmp51_ = vala_postfix_expression_get_inner (expr);
	_tmp52_ = _tmp51_;
	_tmp53_ = vala_ccode_base_module_get_cvalue (self, _tmp52_);
	_tmp54_ = _tmp53_;
	_tmp55_ = cexpr;
	vala_ccode_function_add_assignment (_tmp50_, _tmp54_, (ValaCCodeExpression*) _tmp55_);
	_vala_ccode_node_unref0 (_tmp54_);
	_tmp56_ = temp_value;
	vala_expression_set_target_value ((ValaExpression*) expr, _tmp56_);
	_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 = NULL;
	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 (ValaCCodeBaseModule* self,
                                                ValaGenericType* type)
{
	ValaClass* cl = NULL;
	ValaTypeParameter* _tmp0_;
	ValaTypeParameter* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaClass* _tmp4_;
	ValaStruct* st = NULL;
	ValaTypeParameter* _tmp5_;
	ValaTypeParameter* _tmp6_;
	ValaSymbol* _tmp7_;
	ValaSymbol* _tmp8_;
	ValaStruct* _tmp9_;
	gboolean _tmp10_ = FALSE;
	gboolean _tmp11_ = FALSE;
	ValaClass* _tmp12_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	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_;
	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL);
	cl = _tmp4_;
	_tmp5_ = vala_generic_type_get_type_parameter (type);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp6_);
	_tmp8_ = _tmp7_;
	_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp8_) : NULL);
	st = _tmp9_;
	_tmp12_ = cl;
	if (_tmp12_ != NULL) {
		ValaClass* _tmp13_;
		gboolean _tmp14_;
		gboolean _tmp15_;
		_tmp13_ = cl;
		_tmp14_ = vala_class_get_is_compact (_tmp13_);
		_tmp15_ = _tmp14_;
		_tmp11_ = _tmp15_;
	} else {
		_tmp11_ = FALSE;
	}
	if (_tmp11_) {
		_tmp10_ = TRUE;
	} else {
		ValaStruct* _tmp16_;
		_tmp16_ = st;
		_tmp10_ = _tmp16_ != NULL;
	}
	if (_tmp10_) {
		result = TRUE;
		_vala_code_node_unref0 (st);
		_vala_code_node_unref0 (cl);
		return result;
	}
	result = FALSE;
	_vala_code_node_unref0 (st);
	_vala_code_node_unref0 (cl);
	return result;
}

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

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

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

static gboolean
vala_ccode_base_module_is_reference_type_argument (ValaCCodeBaseModule* self,
                                                   ValaDataType* type_arg)
{
	gboolean _tmp0_ = FALSE;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (type_arg != NULL, FALSE);
	if (G_TYPE_CHECK_INSTANCE_TYPE (type_arg, VALA_TYPE_ERROR_TYPE)) {
		_tmp0_ = TRUE;
	} else {
		gboolean _tmp1_ = FALSE;
		ValaTypeSymbol* _tmp2_;
		ValaTypeSymbol* _tmp3_;
		_tmp2_ = vala_data_type_get_data_type (type_arg);
		_tmp3_ = _tmp2_;
		if (_tmp3_ != NULL) {
			ValaTypeSymbol* _tmp4_;
			ValaTypeSymbol* _tmp5_;
			_tmp4_ = vala_data_type_get_data_type (type_arg);
			_tmp5_ = _tmp4_;
			_tmp1_ = vala_typesymbol_is_reference_type (_tmp5_);
		} else {
			_tmp1_ = FALSE;
		}
		_tmp0_ = _tmp1_;
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	} else {
		result = FALSE;
		return result;
	}
}

static gboolean
vala_ccode_base_module_is_nullable_value_type_argument (ValaCCodeBaseModule* self,
                                                        ValaDataType* type_arg)
{
	gboolean _tmp0_ = FALSE;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (type_arg != NULL, FALSE);
	if (G_TYPE_CHECK_INSTANCE_TYPE (type_arg, VALA_TYPE_VALUE_TYPE)) {
		gboolean _tmp1_;
		gboolean _tmp2_;
		_tmp1_ = vala_data_type_get_nullable (type_arg);
		_tmp2_ = _tmp1_;
		_tmp0_ = _tmp2_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	} else {
		result = FALSE;
		return result;
	}
}

static gboolean
vala_ccode_base_module_is_signed_integer_type_argument (ValaCCodeBaseModule* self,
                                                        ValaDataType* type_arg)
{
	ValaStruct* st = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaStruct* _tmp2_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (type_arg != NULL, FALSE);
	_tmp0_ = vala_data_type_get_data_type (type_arg);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL);
	st = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (type_arg, VALA_TYPE_ENUM_VALUE_TYPE)) {
		result = TRUE;
		_vala_code_node_unref0 (st);
		return result;
	} else {
		gboolean _tmp3_;
		gboolean _tmp4_;
		_tmp3_ = vala_data_type_get_nullable (type_arg);
		_tmp4_ = _tmp3_;
		if (_tmp4_) {
			result = FALSE;
			_vala_code_node_unref0 (st);
			return result;
		} else {
			ValaStruct* _tmp5_;
			_tmp5_ = st;
			if (_tmp5_ == NULL) {
				result = FALSE;
				_vala_code_node_unref0 (st);
				return result;
			} else {
				ValaStruct* _tmp6_;
				ValaDataType* _tmp7_;
				ValaTypeSymbol* _tmp8_;
				ValaTypeSymbol* _tmp9_;
				_tmp6_ = st;
				_tmp7_ = self->bool_type;
				_tmp8_ = vala_data_type_get_data_type (_tmp7_);
				_tmp9_ = _tmp8_;
				if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp6_, _tmp9_)) {
					result = TRUE;
					_vala_code_node_unref0 (st);
					return result;
				} else {
					ValaStruct* _tmp10_;
					ValaDataType* _tmp11_;
					ValaTypeSymbol* _tmp12_;
					ValaTypeSymbol* _tmp13_;
					_tmp10_ = st;
					_tmp11_ = self->char_type;
					_tmp12_ = vala_data_type_get_data_type (_tmp11_);
					_tmp13_ = _tmp12_;
					if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp10_, _tmp13_)) {
						result = TRUE;
						_vala_code_node_unref0 (st);
						return result;
					} else {
						gboolean _tmp14_ = FALSE;
						ValaDataType* _tmp15_;
						_tmp15_ = self->unichar_type;
						if (_tmp15_ != NULL) {
							ValaStruct* _tmp16_;
							ValaDataType* _tmp17_;
							ValaTypeSymbol* _tmp18_;
							ValaTypeSymbol* _tmp19_;
							_tmp16_ = st;
							_tmp17_ = self->unichar_type;
							_tmp18_ = vala_data_type_get_data_type (_tmp17_);
							_tmp19_ = _tmp18_;
							_tmp14_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp16_, _tmp19_);
						} else {
							_tmp14_ = FALSE;
						}
						if (_tmp14_) {
							result = TRUE;
							_vala_code_node_unref0 (st);
							return result;
						} else {
							ValaStruct* _tmp20_;
							ValaDataType* _tmp21_;
							ValaTypeSymbol* _tmp22_;
							ValaTypeSymbol* _tmp23_;
							_tmp20_ = st;
							_tmp21_ = self->short_type;
							_tmp22_ = vala_data_type_get_data_type (_tmp21_);
							_tmp23_ = _tmp22_;
							if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp20_, _tmp23_)) {
								result = TRUE;
								_vala_code_node_unref0 (st);
								return result;
							} else {
								ValaStruct* _tmp24_;
								ValaDataType* _tmp25_;
								ValaTypeSymbol* _tmp26_;
								ValaTypeSymbol* _tmp27_;
								_tmp24_ = st;
								_tmp25_ = self->int_type;
								_tmp26_ = vala_data_type_get_data_type (_tmp25_);
								_tmp27_ = _tmp26_;
								if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp24_, _tmp27_)) {
									result = TRUE;
									_vala_code_node_unref0 (st);
									return result;
								} else {
									ValaStruct* _tmp28_;
									ValaDataType* _tmp29_;
									ValaTypeSymbol* _tmp30_;
									ValaTypeSymbol* _tmp31_;
									_tmp28_ = st;
									_tmp29_ = self->long_type;
									_tmp30_ = vala_data_type_get_data_type (_tmp29_);
									_tmp31_ = _tmp30_;
									if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp28_, _tmp31_)) {
										result = TRUE;
										_vala_code_node_unref0 (st);
										return result;
									} else {
										ValaStruct* _tmp32_;
										ValaDataType* _tmp33_;
										ValaTypeSymbol* _tmp34_;
										ValaTypeSymbol* _tmp35_;
										_tmp32_ = st;
										_tmp33_ = self->int8_type;
										_tmp34_ = vala_data_type_get_data_type (_tmp33_);
										_tmp35_ = _tmp34_;
										if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp32_, _tmp35_)) {
											result = TRUE;
											_vala_code_node_unref0 (st);
											return result;
										} else {
											ValaStruct* _tmp36_;
											ValaDataType* _tmp37_;
											ValaTypeSymbol* _tmp38_;
											ValaTypeSymbol* _tmp39_;
											_tmp36_ = st;
											_tmp37_ = self->int16_type;
											_tmp38_ = vala_data_type_get_data_type (_tmp37_);
											_tmp39_ = _tmp38_;
											if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp36_, _tmp39_)) {
												result = TRUE;
												_vala_code_node_unref0 (st);
												return result;
											} else {
												ValaStruct* _tmp40_;
												ValaDataType* _tmp41_;
												ValaTypeSymbol* _tmp42_;
												ValaTypeSymbol* _tmp43_;
												_tmp40_ = st;
												_tmp41_ = self->int32_type;
												_tmp42_ = vala_data_type_get_data_type (_tmp41_);
												_tmp43_ = _tmp42_;
												if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp40_, _tmp43_)) {
													result = TRUE;
													_vala_code_node_unref0 (st);
													return result;
												} else {
													ValaStruct* _tmp44_;
													ValaTypeSymbol* _tmp45_;
													_tmp44_ = st;
													_tmp45_ = self->gtype_type;
													if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp44_, _tmp45_)) {
														result = TRUE;
														_vala_code_node_unref0 (st);
														return result;
													} else {
														result = FALSE;
														_vala_code_node_unref0 (st);
														return result;
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	_vala_code_node_unref0 (st);
}

static gboolean
vala_ccode_base_module_is_unsigned_integer_type_argument (ValaCCodeBaseModule* self,
                                                          ValaDataType* type_arg)
{
	ValaStruct* st = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaStruct* _tmp2_;
	ValaStruct* _tmp3_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (type_arg != NULL, FALSE);
	_tmp0_ = vala_data_type_get_data_type (type_arg);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL);
	st = _tmp2_;
	_tmp3_ = st;
	if (_tmp3_ == NULL) {
		result = FALSE;
		_vala_code_node_unref0 (st);
		return result;
	} else {
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp4_ = vala_data_type_get_nullable (type_arg);
		_tmp5_ = _tmp4_;
		if (_tmp5_) {
			result = FALSE;
			_vala_code_node_unref0 (st);
			return result;
		} else {
			ValaStruct* _tmp6_;
			ValaDataType* _tmp7_;
			ValaTypeSymbol* _tmp8_;
			ValaTypeSymbol* _tmp9_;
			_tmp6_ = st;
			_tmp7_ = self->uchar_type;
			_tmp8_ = vala_data_type_get_data_type (_tmp7_);
			_tmp9_ = _tmp8_;
			if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp6_, _tmp9_)) {
				result = TRUE;
				_vala_code_node_unref0 (st);
				return result;
			} else {
				ValaStruct* _tmp10_;
				ValaDataType* _tmp11_;
				ValaTypeSymbol* _tmp12_;
				ValaTypeSymbol* _tmp13_;
				_tmp10_ = st;
				_tmp11_ = self->ushort_type;
				_tmp12_ = vala_data_type_get_data_type (_tmp11_);
				_tmp13_ = _tmp12_;
				if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp10_, _tmp13_)) {
					result = TRUE;
					_vala_code_node_unref0 (st);
					return result;
				} else {
					ValaStruct* _tmp14_;
					ValaDataType* _tmp15_;
					ValaTypeSymbol* _tmp16_;
					ValaTypeSymbol* _tmp17_;
					_tmp14_ = st;
					_tmp15_ = self->uint_type;
					_tmp16_ = vala_data_type_get_data_type (_tmp15_);
					_tmp17_ = _tmp16_;
					if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp14_, _tmp17_)) {
						result = TRUE;
						_vala_code_node_unref0 (st);
						return result;
					} else {
						ValaStruct* _tmp18_;
						ValaDataType* _tmp19_;
						ValaTypeSymbol* _tmp20_;
						ValaTypeSymbol* _tmp21_;
						_tmp18_ = st;
						_tmp19_ = self->ulong_type;
						_tmp20_ = vala_data_type_get_data_type (_tmp19_);
						_tmp21_ = _tmp20_;
						if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp18_, _tmp21_)) {
							result = TRUE;
							_vala_code_node_unref0 (st);
							return result;
						} else {
							ValaStruct* _tmp22_;
							ValaDataType* _tmp23_;
							ValaTypeSymbol* _tmp24_;
							ValaTypeSymbol* _tmp25_;
							_tmp22_ = st;
							_tmp23_ = self->uint8_type;
							_tmp24_ = vala_data_type_get_data_type (_tmp23_);
							_tmp25_ = _tmp24_;
							if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp22_, _tmp25_)) {
								result = TRUE;
								_vala_code_node_unref0 (st);
								return result;
							} else {
								ValaStruct* _tmp26_;
								ValaDataType* _tmp27_;
								ValaTypeSymbol* _tmp28_;
								ValaTypeSymbol* _tmp29_;
								_tmp26_ = st;
								_tmp27_ = self->uint16_type;
								_tmp28_ = vala_data_type_get_data_type (_tmp27_);
								_tmp29_ = _tmp28_;
								if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp26_, _tmp29_)) {
									result = TRUE;
									_vala_code_node_unref0 (st);
									return result;
								} else {
									ValaStruct* _tmp30_;
									ValaDataType* _tmp31_;
									ValaTypeSymbol* _tmp32_;
									ValaTypeSymbol* _tmp33_;
									_tmp30_ = st;
									_tmp31_ = self->uint32_type;
									_tmp32_ = vala_data_type_get_data_type (_tmp31_);
									_tmp33_ = _tmp32_;
									if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp30_, _tmp33_)) {
										result = TRUE;
										_vala_code_node_unref0 (st);
										return result;
									} else {
										result = FALSE;
										_vala_code_node_unref0 (st);
										return result;
									}
								}
							}
						}
					}
				}
			}
		}
	}
	_vala_code_node_unref0 (st);
}

void
vala_ccode_base_module_check_type (ValaCCodeBaseModule* self,
                                   ValaDataType* type)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	ValaArrayType* _tmp1_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type != 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_;
		ValaDataType* _tmp3_;
		ValaDataType* _tmp4_;
		ValaArrayType* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp7_;
		_tmp2_ = array_type;
		_tmp3_ = vala_array_type_get_element_type (_tmp2_);
		_tmp4_ = _tmp3_;
		vala_ccode_base_module_check_type (self, _tmp4_);
		_tmp5_ = array_type;
		_tmp6_ = vala_array_type_get_element_type (_tmp5_);
		_tmp7_ = _tmp6_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_ARRAY_TYPE)) {
			ValaSourceReference* _tmp8_;
			ValaSourceReference* _tmp9_;
			_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
			_tmp9_ = _tmp8_;
			vala_report_error (_tmp9_, "Stacked arrays are not supported");
		} else {
			ValaArrayType* _tmp10_;
			ValaDataType* _tmp11_;
			ValaDataType* _tmp12_;
			_tmp10_ = array_type;
			_tmp11_ = vala_array_type_get_element_type (_tmp10_);
			_tmp12_ = _tmp11_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaDelegateType* delegate_type = NULL;
				ValaArrayType* _tmp13_;
				ValaDataType* _tmp14_;
				ValaDataType* _tmp15_;
				ValaDelegateType* _tmp16_;
				ValaDelegateType* _tmp17_;
				ValaDelegate* _tmp18_;
				ValaDelegate* _tmp19_;
				gboolean _tmp20_;
				gboolean _tmp21_;
				_tmp13_ = array_type;
				_tmp14_ = vala_array_type_get_element_type (_tmp13_);
				_tmp15_ = _tmp14_;
				_tmp16_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				delegate_type = _tmp16_;
				_tmp17_ = delegate_type;
				_tmp18_ = vala_delegate_type_get_delegate_symbol (_tmp17_);
				_tmp19_ = _tmp18_;
				_tmp20_ = vala_delegate_get_has_target (_tmp19_);
				_tmp21_ = _tmp20_;
				if (_tmp21_) {
					ValaSourceReference* _tmp22_;
					ValaSourceReference* _tmp23_;
					_tmp22_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
					_tmp23_ = _tmp22_;
					vala_report_error (_tmp23_, "Delegates with target are not supported as array element type");
				}
				_vala_code_node_unref0 (delegate_type);
			}
		}
	}
	{
		ValaList* _type_arg_list = NULL;
		ValaList* _tmp24_;
		gint _type_arg_size = 0;
		ValaList* _tmp25_;
		gint _tmp26_;
		gint _tmp27_;
		gint _type_arg_index = 0;
		_tmp24_ = vala_data_type_get_type_arguments (type);
		_type_arg_list = _tmp24_;
		_tmp25_ = _type_arg_list;
		_tmp26_ = vala_collection_get_size ((ValaCollection*) _tmp25_);
		_tmp27_ = _tmp26_;
		_type_arg_size = _tmp27_;
		_type_arg_index = -1;
		while (TRUE) {
			ValaDataType* type_arg = NULL;
			ValaList* _tmp28_;
			gpointer _tmp29_;
			ValaDataType* _tmp30_;
			ValaDataType* _tmp31_;
			_type_arg_index = _type_arg_index + 1;
			if (!(_type_arg_index < _type_arg_size)) {
				break;
			}
			_tmp28_ = _type_arg_list;
			_tmp29_ = vala_list_get (_tmp28_, _type_arg_index);
			type_arg = (ValaDataType*) _tmp29_;
			_tmp30_ = type_arg;
			vala_ccode_base_module_check_type (self, _tmp30_);
			_tmp31_ = type_arg;
			vala_ccode_base_module_check_type_argument (self, _tmp31_);
			_vala_code_node_unref0 (type_arg);
		}
		_vala_iterable_unref0 (_type_arg_list);
	}
	_vala_code_node_unref0 (array_type);
}

void
vala_ccode_base_module_check_type_arguments (ValaCCodeBaseModule* self,
                                             ValaMemberAccess* access)
{
	g_return_if_fail (self != NULL);
	g_return_if_fail (access != NULL);
	{
		ValaList* _type_arg_list = NULL;
		ValaList* _tmp0_;
		gint _type_arg_size = 0;
		ValaList* _tmp1_;
		gint _tmp2_;
		gint _tmp3_;
		gint _type_arg_index = 0;
		_tmp0_ = vala_member_access_get_type_arguments (access);
		_type_arg_list = _tmp0_;
		_tmp1_ = _type_arg_list;
		_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
		_tmp3_ = _tmp2_;
		_type_arg_size = _tmp3_;
		_type_arg_index = -1;
		while (TRUE) {
			ValaDataType* type_arg = NULL;
			ValaList* _tmp4_;
			gpointer _tmp5_;
			ValaDataType* _tmp6_;
			ValaDataType* _tmp7_;
			_type_arg_index = _type_arg_index + 1;
			if (!(_type_arg_index < _type_arg_size)) {
				break;
			}
			_tmp4_ = _type_arg_list;
			_tmp5_ = vala_list_get (_tmp4_, _type_arg_index);
			type_arg = (ValaDataType*) _tmp5_;
			_tmp6_ = type_arg;
			vala_ccode_base_module_check_type (self, _tmp6_);
			_tmp7_ = type_arg;
			vala_ccode_base_module_check_type_argument (self, _tmp7_);
			_vala_code_node_unref0 (type_arg);
		}
		_vala_iterable_unref0 (_type_arg_list);
	}
}

static void
vala_ccode_base_module_check_type_argument (ValaCCodeBaseModule* self,
                                            ValaDataType* type_arg)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type_arg != NULL);
	if (G_TYPE_CHECK_INSTANCE_TYPE (type_arg, VALA_TYPE_GENERIC_TYPE)) {
		_tmp4_ = TRUE;
	} else {
		_tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (type_arg, VALA_TYPE_POINTER_TYPE);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		_tmp3_ = vala_ccode_base_module_is_reference_type_argument (self, type_arg);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		_tmp2_ = vala_ccode_base_module_is_nullable_value_type_argument (self, type_arg);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		_tmp1_ = vala_ccode_base_module_is_signed_integer_type_argument (self, type_arg);
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		_tmp0_ = vala_ccode_base_module_is_unsigned_integer_type_argument (self, type_arg);
	}
	if (_tmp0_) {
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (type_arg, VALA_TYPE_DELEGATE_TYPE)) {
			ValaDelegateType* delegate_type = NULL;
			ValaDelegateType* _tmp5_;
			ValaDelegateType* _tmp6_;
			ValaDelegate* _tmp7_;
			ValaDelegate* _tmp8_;
			gboolean _tmp9_;
			gboolean _tmp10_;
			_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type_arg, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
			delegate_type = _tmp5_;
			_tmp6_ = delegate_type;
			_tmp7_ = vala_delegate_type_get_delegate_symbol (_tmp6_);
			_tmp8_ = _tmp7_;
			_tmp9_ = vala_delegate_get_has_target (_tmp8_);
			_tmp10_ = _tmp9_;
			if (_tmp10_) {
				ValaSourceReference* _tmp11_;
				ValaSourceReference* _tmp12_;
				_tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) type_arg);
				_tmp12_ = _tmp11_;
				vala_report_error (_tmp12_, "Delegates with target are not supported as generic type arguments");
			}
			_vala_code_node_unref0 (delegate_type);
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (type_arg, VALA_TYPE_ARRAY_TYPE)) {
				ValaSourceReference* _tmp13_;
				ValaSourceReference* _tmp14_;
				_tmp13_ = vala_code_node_get_source_reference ((ValaCodeNode*) type_arg);
				_tmp14_ = _tmp13_;
				vala_report_error (_tmp14_, "Arrays are not supported as generic type arguments");
			} else {
				ValaSourceReference* _tmp15_;
				ValaSourceReference* _tmp16_;
				gchar* _tmp17_;
				gchar* _tmp18_;
				gchar* _tmp19_;
				gchar* _tmp20_;
				_tmp15_ = vala_code_node_get_source_reference ((ValaCodeNode*) type_arg);
				_tmp16_ = _tmp15_;
				_tmp17_ = vala_code_node_to_string ((ValaCodeNode*) type_arg);
				_tmp18_ = _tmp17_;
				_tmp19_ = g_strdup_printf ("`%s' is not a supported generic type argument, use `?' to box value ty" \
"pes", _tmp18_);
				_tmp20_ = _tmp19_;
				vala_report_error (_tmp16_, _tmp20_);
				_g_free0 (_tmp20_);
				_g_free0 (_tmp18_);
			}
		}
	}
}

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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_interface_declaration (self, iface, decl_space);
}

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

void
vala_ccode_base_module_generate_method_declaration (ValaCCodeBaseModule* self,
                                                    ValaMethod* m,
                                                    ValaCCodeFile* decl_space)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_method_declaration (self, m, decl_space);
}

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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_error_domain_declaration (self, edomain, decl_space);
}

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

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

ValaCCodeExpression*
vala_ccode_base_module_try_cast_value_to_type (ValaCCodeBaseModule* self,
                                               ValaCCodeExpression* ccodeexpr,
                                               ValaDataType* from,
                                               ValaDataType* to,
                                               ValaExpression* expr)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp13_;
	ValaCCodeIdentifier* _tmp14_;
	ValaCCodeFunctionCall* _tmp15_;
	ValaCCodeFunctionCall* _tmp16_;
	ValaCCodeExpression* gvalue = NULL;
	gboolean _tmp17_;
	gboolean _tmp18_;
	ValaCCodeFunctionCall* _tmp21_;
	ValaCCodeExpression* _tmp22_;
	ValaCCodeExpression* rv = NULL;
	ValaCCodeFunctionCall* _tmp23_;
	ValaCCodeExpression* _tmp24_;
	gboolean _tmp25_ = FALSE;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (ccodeexpr != NULL, NULL);
	g_return_val_if_fail (from != NULL, NULL);
	g_return_val_if_fail (to != NULL, NULL);
	if (from == NULL) {
		_tmp3_ = TRUE;
	} else {
		ValaStruct* _tmp4_;
		_tmp4_ = self->gvalue_type;
		_tmp3_ = _tmp4_ == NULL;
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp5_;
		ValaTypeSymbol* _tmp6_;
		ValaStruct* _tmp7_;
		_tmp5_ = vala_data_type_get_data_type (from);
		_tmp6_ = _tmp5_;
		_tmp7_ = self->gvalue_type;
		_tmp2_ = _tmp6_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp8_;
		ValaTypeSymbol* _tmp9_;
		ValaStruct* _tmp10_;
		_tmp8_ = vala_data_type_get_data_type (to);
		_tmp9_ = _tmp8_;
		_tmp10_ = self->gvalue_type;
		_tmp1_ = _tmp9_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		gchar* _tmp11_;
		gchar* _tmp12_;
		_tmp11_ = vala_get_ccode_type_id ((ValaCodeNode*) to);
		_tmp12_ = _tmp11_;
		_tmp0_ = g_strcmp0 (_tmp12_, "") == 0;
		_g_free0 (_tmp12_);
	}
	if (_tmp0_) {
		result = NULL;
		return result;
	}
	_tmp13_ = vala_ccode_base_module_get_value_getter_function (self, to);
	_tmp14_ = _tmp13_;
	_tmp15_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp14_);
	_tmp16_ = _tmp15_;
	_vala_ccode_node_unref0 (_tmp14_);
	ccall = _tmp16_;
	_tmp17_ = vala_data_type_get_nullable (from);
	_tmp18_ = _tmp17_;
	if (_tmp18_) {
		ValaCCodeExpression* _tmp19_;
		_tmp19_ = _vala_ccode_node_ref0 (ccodeexpr);
		_vala_ccode_node_unref0 (gvalue);
		gvalue = _tmp19_;
	} else {
		ValaCCodeUnaryExpression* _tmp20_;
		_tmp20_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, ccodeexpr);
		_vala_ccode_node_unref0 (gvalue);
		gvalue = (ValaCCodeExpression*) _tmp20_;
	}
	_tmp21_ = ccall;
	_tmp22_ = gvalue;
	vala_ccode_function_call_add_argument (_tmp21_, _tmp22_);
	_tmp23_ = ccall;
	_tmp24_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp23_);
	rv = _tmp24_;
	if (expr != NULL) {
		_tmp25_ = G_TYPE_CHECK_INSTANCE_TYPE (to, VALA_TYPE_ARRAY_TYPE);
	} else {
		_tmp25_ = FALSE;
	}
	if (_tmp25_) {
		ValaCCodeFunctionCall* len_call = NULL;
		ValaCCodeIdentifier* _tmp26_;
		ValaCCodeIdentifier* _tmp27_;
		ValaCCodeFunctionCall* _tmp28_;
		ValaCCodeFunctionCall* _tmp29_;
		ValaCCodeFunctionCall* _tmp30_;
		ValaCCodeExpression* _tmp31_;
		ValaCCodeFunctionCall* _tmp32_;
		_tmp26_ = vala_ccode_identifier_new ("g_strv_length");
		_tmp27_ = _tmp26_;
		_tmp28_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp27_);
		_tmp29_ = _tmp28_;
		_vala_ccode_node_unref0 (_tmp27_);
		len_call = _tmp29_;
		_tmp30_ = len_call;
		_tmp31_ = rv;
		vala_ccode_function_call_add_argument (_tmp30_, _tmp31_);
		_tmp32_ = len_call;
		vala_ccode_base_module_append_array_length (self, expr, (ValaCCodeExpression*) _tmp32_);
		_vala_ccode_node_unref0 (len_call);
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (to, VALA_TYPE_STRUCT_VALUE_TYPE)) {
			ValaCodeNode* _tmp33_ = NULL;
			ValaCodeNode* node = NULL;
			ValaCodeNode* _tmp34_;
			ValaTargetValue* temp_value = NULL;
			ValaCodeNode* _tmp35_;
			gboolean _tmp36_;
			ValaTargetValue* _tmp37_;
			ValaCCodeExpression* ctemp = NULL;
			ValaTargetValue* _tmp38_;
			ValaCCodeExpression* _tmp39_;
			ValaCCodeExpression* _tmp40_;
			ValaPointerType* _tmp41_;
			ValaPointerType* _tmp42_;
			gchar* _tmp43_;
			gchar* _tmp44_;
			ValaCCodeCastExpression* _tmp45_;
			ValaCCodeCastExpression* _tmp46_;
			ValaCCodeUnaryExpression* _tmp47_;
			ValaCCodeFunctionCall* holds = NULL;
			ValaCCodeIdentifier* _tmp48_;
			ValaCCodeIdentifier* _tmp49_;
			ValaCCodeFunctionCall* _tmp50_;
			ValaCCodeFunctionCall* _tmp51_;
			ValaCCodeFunctionCall* _tmp52_;
			ValaCCodeExpression* _tmp53_;
			ValaCCodeFunctionCall* _tmp54_;
			gchar* _tmp55_;
			gchar* _tmp56_;
			ValaCCodeIdentifier* _tmp57_;
			ValaCCodeIdentifier* _tmp58_;
			ValaCCodeBinaryExpression* cond = NULL;
			ValaCCodeFunctionCall* _tmp59_;
			ValaCCodeFunctionCall* _tmp60_;
			ValaCCodeBinaryExpression* _tmp61_;
			ValaCCodeFunctionCall* warn = NULL;
			ValaCCodeIdentifier* _tmp62_;
			ValaCCodeIdentifier* _tmp63_;
			ValaCCodeFunctionCall* _tmp64_;
			ValaCCodeFunctionCall* _tmp65_;
			ValaCCodeFunctionCall* _tmp66_;
			ValaCCodeConstant* _tmp67_;
			ValaCCodeConstant* _tmp68_;
			ValaCCodeCommaExpression* fail = NULL;
			ValaCCodeCommaExpression* _tmp69_;
			ValaCCodeCommaExpression* _tmp70_;
			ValaCCodeFunctionCall* _tmp71_;
			ValaCCodeCommaExpression* _tmp72_;
			ValaCCodeExpression* _tmp73_;
			ValaCCodeBinaryExpression* _tmp74_;
			ValaCCodeExpression* _tmp75_;
			ValaCCodeCommaExpression* _tmp76_;
			ValaCCodeConditionalExpression* _tmp77_;
			if (expr != NULL) {
				_tmp33_ = G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_CODE_NODE, ValaCodeNode);
			} else {
				_tmp33_ = (ValaCodeNode*) to;
			}
			_tmp34_ = _vala_code_node_ref0 (_tmp33_);
			node = _tmp34_;
			_tmp35_ = node;
			_tmp36_ = TRUE;
			_tmp37_ = vala_ccode_base_module_create_temp_value (self, to, TRUE, _tmp35_, &_tmp36_);
			temp_value = _tmp37_;
			_tmp38_ = temp_value;
			_tmp39_ = vala_ccode_base_module_get_cvalue_ (self, _tmp38_);
			ctemp = _tmp39_;
			_tmp40_ = rv;
			_tmp41_ = vala_pointer_type_new (to, NULL);
			_tmp42_ = _tmp41_;
			_tmp43_ = vala_get_ccode_name ((ValaCodeNode*) _tmp42_);
			_tmp44_ = _tmp43_;
			_tmp45_ = vala_ccode_cast_expression_new (_tmp40_, _tmp44_);
			_tmp46_ = _tmp45_;
			_tmp47_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp46_);
			_vala_ccode_node_unref0 (rv);
			rv = (ValaCCodeExpression*) _tmp47_;
			_vala_ccode_node_unref0 (_tmp46_);
			_g_free0 (_tmp44_);
			_vala_code_node_unref0 (_tmp42_);
			_tmp48_ = vala_ccode_identifier_new ("G_VALUE_HOLDS");
			_tmp49_ = _tmp48_;
			_tmp50_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp49_);
			_tmp51_ = _tmp50_;
			_vala_ccode_node_unref0 (_tmp49_);
			holds = _tmp51_;
			_tmp52_ = holds;
			_tmp53_ = gvalue;
			vala_ccode_function_call_add_argument (_tmp52_, _tmp53_);
			_tmp54_ = holds;
			_tmp55_ = vala_get_ccode_type_id ((ValaCodeNode*) to);
			_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_);
			_tmp59_ = holds;
			_tmp60_ = ccall;
			_tmp61_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_AND, (ValaCCodeExpression*) _tmp59_, (ValaCCodeExpression*) _tmp60_);
			cond = _tmp61_;
			_tmp62_ = vala_ccode_identifier_new ("g_warning");
			_tmp63_ = _tmp62_;
			_tmp64_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp63_);
			_tmp65_ = _tmp64_;
			_vala_ccode_node_unref0 (_tmp63_);
			warn = _tmp65_;
			_tmp66_ = warn;
			_tmp67_ = vala_ccode_constant_new ("\"Invalid GValue unboxing (wrong type or NULL)\"");
			_tmp68_ = _tmp67_;
			vala_ccode_function_call_add_argument (_tmp66_, (ValaCCodeExpression*) _tmp68_);
			_vala_ccode_node_unref0 (_tmp68_);
			_tmp69_ = vala_ccode_comma_expression_new ();
			fail = _tmp69_;
			_tmp70_ = fail;
			_tmp71_ = warn;
			vala_ccode_comma_expression_append_expression (_tmp70_, (ValaCCodeExpression*) _tmp71_);
			_tmp72_ = fail;
			_tmp73_ = ctemp;
			vala_ccode_comma_expression_append_expression (_tmp72_, _tmp73_);
			_tmp74_ = cond;
			_tmp75_ = rv;
			_tmp76_ = fail;
			_tmp77_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp74_, _tmp75_, (ValaCCodeExpression*) _tmp76_);
			_vala_ccode_node_unref0 (rv);
			rv = (ValaCCodeExpression*) _tmp77_;
			_vala_ccode_node_unref0 (fail);
			_vala_ccode_node_unref0 (warn);
			_vala_ccode_node_unref0 (cond);
			_vala_ccode_node_unref0 (holds);
			_vala_ccode_node_unref0 (ctemp);
			_vala_target_value_unref0 (temp_value);
			_vala_code_node_unref0 (node);
		}
	}
	result = rv;
	_vala_ccode_node_unref0 (gvalue);
	_vala_ccode_node_unref0 (ccall);
	return result;
}

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 ();
	if (may_fail) {
		*may_fail = _vala_may_fail;
	}
}

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

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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->serialize_expression (self, type, expr);
}

static void
vala_ccode_base_module_real_visit_cast_expression (ValaCodeVisitor* base,
                                                   ValaCastExpression* expr)
{
	ValaCCodeBaseModule * self;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaCCodeFile* _tmp2_;
	gboolean _tmp3_;
	gboolean _tmp4_;
	ValaClass* cl = NULL;
	ValaDataType* _tmp19_;
	ValaDataType* _tmp20_;
	ValaTypeSymbol* _tmp21_;
	ValaTypeSymbol* _tmp22_;
	ValaClass* _tmp23_;
	ValaInterface* iface = NULL;
	ValaDataType* _tmp24_;
	ValaDataType* _tmp25_;
	ValaTypeSymbol* _tmp26_;
	ValaTypeSymbol* _tmp27_;
	ValaInterface* _tmp28_;
	gboolean _tmp29_ = FALSE;
	ValaCodeContext* _tmp30_;
	ValaProfile _tmp31_;
	ValaProfile _tmp32_;
	self = (ValaCCodeBaseModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_cast_expression_get_type_reference (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = self->cfile;
	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
	_tmp3_ = vala_cast_expression_get_is_non_null_cast (expr);
	_tmp4_ = _tmp3_;
	if (!_tmp4_) {
		ValaCCodeExpression* valuecast = NULL;
		ValaExpression* _tmp5_;
		ValaExpression* _tmp6_;
		ValaCCodeExpression* _tmp7_;
		ValaCCodeExpression* _tmp8_;
		ValaExpression* _tmp9_;
		ValaExpression* _tmp10_;
		ValaDataType* _tmp11_;
		ValaDataType* _tmp12_;
		ValaDataType* _tmp13_;
		ValaDataType* _tmp14_;
		ValaCCodeExpression* _tmp15_;
		ValaCCodeExpression* _tmp16_;
		ValaCCodeExpression* _tmp17_;
		_tmp5_ = vala_cast_expression_get_inner (expr);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_ccode_base_module_get_cvalue (self, _tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_cast_expression_get_inner (expr);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_expression_get_value_type (_tmp10_);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_cast_expression_get_type_reference (expr);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_ccode_base_module_try_cast_value_to_type (self, _tmp8_, _tmp12_, _tmp14_, (ValaExpression*) expr);
		_tmp16_ = _tmp15_;
		_vala_ccode_node_unref0 (_tmp8_);
		valuecast = _tmp16_;
		_tmp17_ = valuecast;
		if (_tmp17_ != NULL) {
			ValaCCodeExpression* _tmp18_;
			_tmp18_ = valuecast;
			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, _tmp18_);
			_vala_ccode_node_unref0 (valuecast);
			return;
		}
		_vala_ccode_node_unref0 (valuecast);
	}
	_tmp19_ = vala_cast_expression_get_type_reference (expr);
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_data_type_get_data_type (_tmp20_);
	_tmp22_ = _tmp21_;
	_tmp23_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp22_) : NULL);
	cl = _tmp23_;
	_tmp24_ = vala_cast_expression_get_type_reference (expr);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_data_type_get_data_type (_tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp27_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp27_) : NULL);
	iface = _tmp28_;
	_tmp30_ = self->priv->_context;
	_tmp31_ = vala_code_context_get_profile (_tmp30_);
	_tmp32_ = _tmp31_;
	if (_tmp32_ == VALA_PROFILE_GOBJECT) {
		gboolean _tmp33_ = FALSE;
		ValaInterface* _tmp34_;
		_tmp34_ = iface;
		if (_tmp34_ != NULL) {
			_tmp33_ = TRUE;
		} else {
			gboolean _tmp35_ = FALSE;
			ValaClass* _tmp36_;
			_tmp36_ = cl;
			if (_tmp36_ != NULL) {
				ValaClass* _tmp37_;
				gboolean _tmp38_;
				gboolean _tmp39_;
				_tmp37_ = cl;
				_tmp38_ = vala_class_get_is_compact (_tmp37_);
				_tmp39_ = _tmp38_;
				_tmp35_ = !_tmp39_;
			} else {
				_tmp35_ = FALSE;
			}
			_tmp33_ = _tmp35_;
		}
		_tmp29_ = _tmp33_;
	} else {
		_tmp29_ = FALSE;
	}
	if (_tmp29_) {
		gboolean _tmp40_;
		gboolean _tmp41_;
		_tmp40_ = vala_cast_expression_get_is_silent_cast (expr);
		_tmp41_ = _tmp40_;
		if (_tmp41_) {
			ValaTargetValue* to_cast = NULL;
			ValaExpression* _tmp42_;
			ValaExpression* _tmp43_;
			ValaTargetValue* _tmp44_;
			ValaTargetValue* _tmp45_;
			ValaTargetValue* _tmp46_;
			ValaCCodeExpression* cexpr = NULL;
			ValaTargetValue* _tmp47_;
			ValaTargetValue* _tmp50_;
			ValaCCodeExpression* _tmp51_;
			ValaCCodeExpression* ccheck = NULL;
			ValaCCodeExpression* _tmp52_;
			ValaDataType* _tmp53_;
			ValaDataType* _tmp54_;
			ValaCCodeExpression* _tmp55_;
			ValaCCodeCastExpression* ccast = NULL;
			ValaCCodeExpression* _tmp56_;
			ValaDataType* _tmp57_;
			ValaDataType* _tmp58_;
			gchar* _tmp59_;
			gchar* _tmp60_;
			ValaCCodeCastExpression* _tmp61_;
			ValaCCodeCastExpression* _tmp62_;
			ValaCCodeConstant* cnull = NULL;
			ValaCCodeConstant* _tmp63_;
			ValaGLibValue* cast_value = NULL;
			ValaDataType* _tmp64_;
			ValaDataType* _tmp65_;
			ValaCCodeExpression* _tmp66_;
			ValaCCodeCastExpression* _tmp67_;
			ValaCCodeConstant* _tmp68_;
			ValaCCodeConditionalExpression* _tmp69_;
			ValaCCodeConditionalExpression* _tmp70_;
			ValaGLibValue* _tmp71_;
			ValaGLibValue* _tmp72_;
			ValaExpression* _tmp73_;
			ValaExpression* _tmp74_;
			ValaDataType* _tmp75_;
			ValaDataType* _tmp76_;
			_tmp42_ = vala_cast_expression_get_inner (expr);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_expression_get_target_value (_tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = _vala_target_value_ref0 (_tmp45_);
			to_cast = _tmp46_;
			_tmp47_ = to_cast;
			if (!vala_ccode_base_module_get_lvalue (self, _tmp47_)) {
				ValaTargetValue* _tmp48_;
				ValaTargetValue* _tmp49_;
				_tmp48_ = to_cast;
				_tmp49_ = vala_ccode_base_module_store_temp_value (self, _tmp48_, (ValaCodeNode*) expr, NULL);
				_vala_target_value_unref0 (to_cast);
				to_cast = _tmp49_;
			}
			_tmp50_ = to_cast;
			_tmp51_ = vala_ccode_base_module_get_cvalue_ (self, _tmp50_);
			_vala_ccode_node_unref0 (cexpr);
			cexpr = _tmp51_;
			_tmp52_ = cexpr;
			_tmp53_ = vala_cast_expression_get_type_reference (expr);
			_tmp54_ = _tmp53_;
			_tmp55_ = vala_ccode_base_module_create_type_check (self, (ValaCCodeNode*) _tmp52_, _tmp54_);
			ccheck = _tmp55_;
			_tmp56_ = cexpr;
			_tmp57_ = vala_cast_expression_get_type_reference (expr);
			_tmp58_ = _tmp57_;
			_tmp59_ = vala_get_ccode_name ((ValaCodeNode*) _tmp58_);
			_tmp60_ = _tmp59_;
			_tmp61_ = vala_ccode_cast_expression_new (_tmp56_, _tmp60_);
			_tmp62_ = _tmp61_;
			_g_free0 (_tmp60_);
			ccast = _tmp62_;
			_tmp63_ = vala_ccode_constant_new ("NULL");
			cnull = _tmp63_;
			_tmp64_ = vala_expression_get_value_type ((ValaExpression*) expr);
			_tmp65_ = _tmp64_;
			_tmp66_ = ccheck;
			_tmp67_ = ccast;
			_tmp68_ = cnull;
			_tmp69_ = vala_ccode_conditional_expression_new (_tmp66_, (ValaCCodeExpression*) _tmp67_, (ValaCCodeExpression*) _tmp68_);
			_tmp70_ = _tmp69_;
			_tmp71_ = vala_glib_value_new (_tmp65_, (ValaCCodeExpression*) _tmp70_, FALSE);
			_tmp72_ = _tmp71_;
			_vala_ccode_node_unref0 (_tmp70_);
			cast_value = _tmp72_;
			_tmp73_ = vala_cast_expression_get_inner (expr);
			_tmp74_ = _tmp73_;
			_tmp75_ = vala_expression_get_value_type (_tmp74_);
			_tmp76_ = _tmp75_;
			if (vala_ccode_base_module_requires_destroy (self, _tmp76_)) {
				ValaTargetValue* casted = NULL;
				ValaGLibValue* _tmp77_;
				ValaTargetValue* _tmp78_;
				ValaCCodeFunction* _tmp79_;
				ValaCCodeFunction* _tmp80_;
				ValaTargetValue* _tmp81_;
				ValaCCodeExpression* _tmp82_;
				ValaCCodeExpression* _tmp83_;
				ValaCCodeConstant* _tmp84_;
				ValaCCodeConstant* _tmp85_;
				ValaCCodeBinaryExpression* _tmp86_;
				ValaCCodeBinaryExpression* _tmp87_;
				ValaCCodeFunction* _tmp88_;
				ValaCCodeFunction* _tmp89_;
				ValaTargetValue* _tmp90_;
				ValaCCodeExpression* _tmp91_;
				ValaCCodeExpression* _tmp92_;
				ValaCCodeFunction* _tmp93_;
				ValaCCodeFunction* _tmp94_;
				ValaTargetValue* _tmp95_;
				ValaGLibValue* _tmp96_;
				ValaGLibValue* _tmp97_;
				_tmp77_ = cast_value;
				_tmp78_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp77_, (ValaCodeNode*) expr, NULL);
				casted = _tmp78_;
				_tmp79_ = vala_ccode_base_module_get_ccode (self);
				_tmp80_ = _tmp79_;
				_tmp81_ = casted;
				_tmp82_ = vala_ccode_base_module_get_cvalue_ (self, _tmp81_);
				_tmp83_ = _tmp82_;
				_tmp84_ = vala_ccode_constant_new ("NULL");
				_tmp85_ = _tmp84_;
				_tmp86_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp83_, (ValaCCodeExpression*) _tmp85_);
				_tmp87_ = _tmp86_;
				vala_ccode_function_open_if (_tmp80_, (ValaCCodeExpression*) _tmp87_);
				_vala_ccode_node_unref0 (_tmp87_);
				_vala_ccode_node_unref0 (_tmp85_);
				_vala_ccode_node_unref0 (_tmp83_);
				_tmp88_ = vala_ccode_base_module_get_ccode (self);
				_tmp89_ = _tmp88_;
				_tmp90_ = to_cast;
				_tmp91_ = vala_ccode_base_module_destroy_value (self, _tmp90_, FALSE);
				_tmp92_ = _tmp91_;
				vala_ccode_function_add_expression (_tmp89_, _tmp92_);
				_vala_ccode_node_unref0 (_tmp92_);
				_tmp93_ = vala_ccode_base_module_get_ccode (self);
				_tmp94_ = _tmp93_;
				vala_ccode_function_close (_tmp94_);
				_tmp95_ = casted;
				_tmp96_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp95_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
				_tmp97_ = _tmp96_;
				vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp97_);
				_vala_target_value_unref0 (_tmp97_);
				_vala_target_value_unref0 (casted);
			} else {
				ValaGLibValue* _tmp98_;
				_tmp98_ = cast_value;
				vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp98_);
			}
			_vala_target_value_unref0 (cast_value);
			_vala_ccode_node_unref0 (cnull);
			_vala_ccode_node_unref0 (ccast);
			_vala_ccode_node_unref0 (ccheck);
			_vala_ccode_node_unref0 (cexpr);
			_vala_target_value_unref0 (to_cast);
		} else {
			ValaExpression* _tmp99_;
			ValaExpression* _tmp100_;
			ValaCCodeExpression* _tmp101_;
			ValaCCodeExpression* _tmp102_;
			ValaDataType* _tmp103_;
			ValaDataType* _tmp104_;
			ValaTypeSymbol* _tmp105_;
			ValaTypeSymbol* _tmp106_;
			ValaCCodeFunctionCall* _tmp107_;
			ValaCCodeFunctionCall* _tmp108_;
			_tmp99_ = vala_cast_expression_get_inner (expr);
			_tmp100_ = _tmp99_;
			_tmp101_ = vala_ccode_base_module_get_cvalue (self, _tmp100_);
			_tmp102_ = _tmp101_;
			_tmp103_ = vala_cast_expression_get_type_reference (expr);
			_tmp104_ = _tmp103_;
			_tmp105_ = vala_data_type_get_data_type (_tmp104_);
			_tmp106_ = _tmp105_;
			_tmp107_ = vala_ccode_base_module_generate_instance_cast (self, _tmp102_, _tmp106_);
			_tmp108_ = _tmp107_;
			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp108_);
			_vala_ccode_node_unref0 (_tmp108_);
			_vala_ccode_node_unref0 (_tmp102_);
		}
	} else {
		gboolean _tmp109_;
		gboolean _tmp110_;
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp115_;
		ValaDataType* _tmp116_;
		ValaArrayType* _tmp117_;
		gboolean _tmp118_ = FALSE;
		ValaArrayType* _tmp119_;
		ValaCCodeExpression* innercexpr = NULL;
		ValaExpression* _tmp248_;
		ValaExpression* _tmp249_;
		ValaCCodeExpression* _tmp250_;
		gboolean _tmp251_ = FALSE;
		gboolean _tmp252_ = FALSE;
		gboolean _tmp253_ = FALSE;
		ValaDataType* _tmp254_;
		ValaDataType* _tmp255_;
		ValaCCodeExpression* _tmp291_;
		ValaDataType* _tmp292_;
		ValaDataType* _tmp293_;
		gchar* _tmp294_;
		gchar* _tmp295_;
		ValaCCodeCastExpression* _tmp296_;
		ValaCCodeCastExpression* _tmp297_;
		ValaDataType* _tmp298_;
		ValaDataType* _tmp299_;
		_tmp109_ = vala_cast_expression_get_is_silent_cast (expr);
		_tmp110_ = _tmp109_;
		if (_tmp110_) {
			ValaCCodeInvalidExpression* _tmp111_;
			ValaCCodeInvalidExpression* _tmp112_;
			ValaSourceReference* _tmp113_;
			ValaSourceReference* _tmp114_;
			_tmp111_ = vala_ccode_invalid_expression_new ();
			_tmp112_ = _tmp111_;
			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp112_);
			_vala_ccode_node_unref0 (_tmp112_);
			vala_code_node_set_error ((ValaCodeNode*) expr, TRUE);
			_tmp113_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
			_tmp114_ = _tmp113_;
			vala_report_error (_tmp114_, "Operation not supported for this type");
			_vala_code_node_unref0 (iface);
			_vala_code_node_unref0 (cl);
			return;
		}
		_tmp115_ = vala_cast_expression_get_type_reference (expr);
		_tmp116_ = _tmp115_;
		_tmp117_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp116_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp116_) : NULL);
		array_type = _tmp117_;
		_tmp119_ = array_type;
		if (_tmp119_ != NULL) {
			ValaExpression* _tmp120_;
			ValaExpression* _tmp121_;
			ValaDataType* _tmp122_;
			ValaDataType* _tmp123_;
			_tmp120_ = vala_cast_expression_get_inner (expr);
			_tmp121_ = _tmp120_;
			_tmp122_ = vala_expression_get_value_type (_tmp121_);
			_tmp123_ = _tmp122_;
			_tmp118_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp123_, VALA_TYPE_ARRAY_TYPE);
		} else {
			_tmp118_ = FALSE;
		}
		if (_tmp118_) {
			gboolean _tmp124_ = FALSE;
			ValaArrayType* _tmp125_;
			ValaDataType* _tmp126_;
			ValaDataType* _tmp127_;
			_tmp125_ = array_type;
			_tmp126_ = vala_array_type_get_element_type (_tmp125_);
			_tmp127_ = _tmp126_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp127_, VALA_TYPE_GENERIC_TYPE)) {
				_tmp124_ = TRUE;
			} else {
				ValaExpression* _tmp128_;
				ValaExpression* _tmp129_;
				ValaDataType* _tmp130_;
				ValaDataType* _tmp131_;
				ValaDataType* _tmp132_;
				ValaDataType* _tmp133_;
				_tmp128_ = vala_cast_expression_get_inner (expr);
				_tmp129_ = _tmp128_;
				_tmp130_ = vala_expression_get_value_type (_tmp129_);
				_tmp131_ = _tmp130_;
				_tmp132_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp131_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				_tmp133_ = _tmp132_;
				_tmp124_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp133_, VALA_TYPE_GENERIC_TYPE);
			}
			if (_tmp124_) {
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp134_ = FALSE;
						_tmp134_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp136_;
							gint _tmp137_;
							gint _tmp138_;
							ValaExpression* _tmp139_;
							ValaExpression* _tmp140_;
							ValaCCodeExpression* _tmp141_;
							ValaCCodeExpression* _tmp142_;
							if (!_tmp134_) {
								gint _tmp135_;
								_tmp135_ = dim;
								dim = _tmp135_ + 1;
							}
							_tmp134_ = FALSE;
							_tmp136_ = array_type;
							_tmp137_ = vala_array_type_get_rank (_tmp136_);
							_tmp138_ = _tmp137_;
							if (!(dim <= _tmp138_)) {
								break;
							}
							_tmp139_ = vala_cast_expression_get_inner (expr);
							_tmp140_ = _tmp139_;
							_tmp141_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp140_, dim);
							_tmp142_ = _tmp141_;
							vala_ccode_base_module_append_array_length (self, (ValaExpression*) expr, _tmp142_);
							_vala_ccode_node_unref0 (_tmp142_);
						}
					}
				}
			} else {
				ValaCCodeFunctionCall* sizeof_to = NULL;
				ValaCCodeIdentifier* _tmp143_;
				ValaCCodeIdentifier* _tmp144_;
				ValaCCodeFunctionCall* _tmp145_;
				ValaCCodeFunctionCall* _tmp146_;
				ValaCCodeFunctionCall* _tmp147_;
				ValaArrayType* _tmp148_;
				ValaDataType* _tmp149_;
				ValaDataType* _tmp150_;
				gchar* _tmp151_;
				gchar* _tmp152_;
				ValaCCodeConstant* _tmp153_;
				ValaCCodeConstant* _tmp154_;
				ValaCCodeFunctionCall* sizeof_from = NULL;
				ValaCCodeIdentifier* _tmp155_;
				ValaCCodeIdentifier* _tmp156_;
				ValaCCodeFunctionCall* _tmp157_;
				ValaCCodeFunctionCall* _tmp158_;
				ValaCCodeFunctionCall* _tmp159_;
				ValaExpression* _tmp160_;
				ValaExpression* _tmp161_;
				ValaDataType* _tmp162_;
				ValaDataType* _tmp163_;
				ValaDataType* _tmp164_;
				ValaDataType* _tmp165_;
				gchar* _tmp166_;
				gchar* _tmp167_;
				ValaCCodeConstant* _tmp168_;
				ValaCCodeConstant* _tmp169_;
				_tmp143_ = vala_ccode_identifier_new ("sizeof");
				_tmp144_ = _tmp143_;
				_tmp145_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp144_);
				_tmp146_ = _tmp145_;
				_vala_ccode_node_unref0 (_tmp144_);
				sizeof_to = _tmp146_;
				_tmp147_ = sizeof_to;
				_tmp148_ = array_type;
				_tmp149_ = vala_array_type_get_element_type (_tmp148_);
				_tmp150_ = _tmp149_;
				_tmp151_ = vala_get_ccode_name ((ValaCodeNode*) _tmp150_);
				_tmp152_ = _tmp151_;
				_tmp153_ = vala_ccode_constant_new (_tmp152_);
				_tmp154_ = _tmp153_;
				vala_ccode_function_call_add_argument (_tmp147_, (ValaCCodeExpression*) _tmp154_);
				_vala_ccode_node_unref0 (_tmp154_);
				_g_free0 (_tmp152_);
				_tmp155_ = vala_ccode_identifier_new ("sizeof");
				_tmp156_ = _tmp155_;
				_tmp157_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp156_);
				_tmp158_ = _tmp157_;
				_vala_ccode_node_unref0 (_tmp156_);
				sizeof_from = _tmp158_;
				_tmp159_ = sizeof_from;
				_tmp160_ = vala_cast_expression_get_inner (expr);
				_tmp161_ = _tmp160_;
				_tmp162_ = vala_expression_get_value_type (_tmp161_);
				_tmp163_ = _tmp162_;
				_tmp164_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp163_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				_tmp165_ = _tmp164_;
				_tmp166_ = vala_get_ccode_name ((ValaCodeNode*) _tmp165_);
				_tmp167_ = _tmp166_;
				_tmp168_ = vala_ccode_constant_new (_tmp167_);
				_tmp169_ = _tmp168_;
				vala_ccode_function_call_add_argument (_tmp159_, (ValaCCodeExpression*) _tmp169_);
				_vala_ccode_node_unref0 (_tmp169_);
				_g_free0 (_tmp167_);
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp170_ = FALSE;
						_tmp170_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp172_;
							gint _tmp173_;
							gint _tmp174_;
							ValaExpression* _tmp175_;
							ValaExpression* _tmp176_;
							ValaCCodeExpression* _tmp177_;
							ValaCCodeExpression* _tmp178_;
							ValaCCodeFunctionCall* _tmp179_;
							ValaCCodeBinaryExpression* _tmp180_;
							ValaCCodeBinaryExpression* _tmp181_;
							ValaCCodeFunctionCall* _tmp182_;
							ValaCCodeBinaryExpression* _tmp183_;
							ValaCCodeBinaryExpression* _tmp184_;
							if (!_tmp170_) {
								gint _tmp171_;
								_tmp171_ = dim;
								dim = _tmp171_ + 1;
							}
							_tmp170_ = FALSE;
							_tmp172_ = array_type;
							_tmp173_ = vala_array_type_get_rank (_tmp172_);
							_tmp174_ = _tmp173_;
							if (!(dim <= _tmp174_)) {
								break;
							}
							_tmp175_ = vala_cast_expression_get_inner (expr);
							_tmp176_ = _tmp175_;
							_tmp177_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp176_, dim);
							_tmp178_ = _tmp177_;
							_tmp179_ = sizeof_from;
							_tmp180_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, _tmp178_, (ValaCCodeExpression*) _tmp179_);
							_tmp181_ = _tmp180_;
							_tmp182_ = sizeof_to;
							_tmp183_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp181_, (ValaCCodeExpression*) _tmp182_);
							_tmp184_ = _tmp183_;
							vala_ccode_base_module_append_array_length (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp184_);
							_vala_ccode_node_unref0 (_tmp184_);
							_vala_ccode_node_unref0 (_tmp181_);
							_vala_ccode_node_unref0 (_tmp178_);
						}
					}
				}
				_vala_ccode_node_unref0 (sizeof_from);
				_vala_ccode_node_unref0 (sizeof_to);
			}
		} else {
			ValaArrayType* _tmp185_;
			_tmp185_ = array_type;
			if (_tmp185_ != NULL) {
				ValaCCodeExpression* array_length_expr = NULL;
				ValaCCodeFunctionCall* sizeof_to = NULL;
				ValaCCodeIdentifier* _tmp186_;
				ValaCCodeIdentifier* _tmp187_;
				ValaCCodeFunctionCall* _tmp188_;
				ValaCCodeFunctionCall* _tmp189_;
				ValaCCodeFunctionCall* _tmp190_;
				ValaArrayType* _tmp191_;
				ValaDataType* _tmp192_;
				ValaDataType* _tmp193_;
				gchar* _tmp194_;
				gchar* _tmp195_;
				ValaCCodeConstant* _tmp196_;
				ValaCCodeConstant* _tmp197_;
				ValaCCodeFunctionCall* sizeof_from = NULL;
				ValaCCodeIdentifier* _tmp198_;
				ValaCCodeIdentifier* _tmp199_;
				ValaCCodeFunctionCall* _tmp200_;
				ValaCCodeFunctionCall* _tmp201_;
				ValaDataType* value_type = NULL;
				ValaExpression* _tmp202_;
				ValaExpression* _tmp203_;
				ValaDataType* _tmp204_;
				ValaDataType* _tmp205_;
				ValaDataType* _tmp206_;
				ValaDataType* _tmp207_;
				_tmp186_ = vala_ccode_identifier_new ("sizeof");
				_tmp187_ = _tmp186_;
				_tmp188_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp187_);
				_tmp189_ = _tmp188_;
				_vala_ccode_node_unref0 (_tmp187_);
				sizeof_to = _tmp189_;
				_tmp190_ = sizeof_to;
				_tmp191_ = array_type;
				_tmp192_ = vala_array_type_get_element_type (_tmp191_);
				_tmp193_ = _tmp192_;
				_tmp194_ = vala_get_ccode_name ((ValaCodeNode*) _tmp193_);
				_tmp195_ = _tmp194_;
				_tmp196_ = vala_ccode_constant_new (_tmp195_);
				_tmp197_ = _tmp196_;
				vala_ccode_function_call_add_argument (_tmp190_, (ValaCCodeExpression*) _tmp197_);
				_vala_ccode_node_unref0 (_tmp197_);
				_g_free0 (_tmp195_);
				_tmp198_ = vala_ccode_identifier_new ("sizeof");
				_tmp199_ = _tmp198_;
				_tmp200_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp199_);
				_tmp201_ = _tmp200_;
				_vala_ccode_node_unref0 (_tmp199_);
				sizeof_from = _tmp201_;
				_tmp202_ = vala_cast_expression_get_inner (expr);
				_tmp203_ = _tmp202_;
				_tmp204_ = vala_expression_get_value_type (_tmp203_);
				_tmp205_ = _tmp204_;
				_tmp206_ = _vala_code_node_ref0 (_tmp205_);
				value_type = _tmp206_;
				_tmp207_ = value_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp207_, VALA_TYPE_VALUE_TYPE)) {
					ValaTypeSymbol* data_type = NULL;
					ValaDataType* _tmp208_;
					ValaTypeSymbol* _tmp209_;
					ValaTypeSymbol* _tmp210_;
					ValaTypeSymbol* _tmp211_;
					ValaCCodeFunctionCall* _tmp212_;
					ValaTypeSymbol* _tmp213_;
					gchar* _tmp214_;
					gchar* _tmp215_;
					ValaCCodeConstant* _tmp216_;
					ValaCCodeConstant* _tmp217_;
					ValaCCodeFunctionCall* _tmp218_;
					ValaCCodeFunctionCall* _tmp219_;
					ValaCCodeBinaryExpression* _tmp220_;
					_tmp208_ = value_type;
					_tmp209_ = vala_data_type_get_data_type ((ValaDataType*) G_TYPE_CHECK_INSTANCE_CAST (_tmp208_, VALA_TYPE_VALUE_TYPE, ValaValueType));
					_tmp210_ = _tmp209_;
					_tmp211_ = _vala_code_node_ref0 (_tmp210_);
					data_type = _tmp211_;
					_tmp212_ = sizeof_from;
					_tmp213_ = data_type;
					_tmp214_ = vala_get_ccode_name ((ValaCodeNode*) _tmp213_);
					_tmp215_ = _tmp214_;
					_tmp216_ = vala_ccode_constant_new (_tmp215_);
					_tmp217_ = _tmp216_;
					vala_ccode_function_call_add_argument (_tmp212_, (ValaCCodeExpression*) _tmp217_);
					_vala_ccode_node_unref0 (_tmp217_);
					_g_free0 (_tmp215_);
					_tmp218_ = sizeof_from;
					_tmp219_ = sizeof_to;
					_tmp220_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp218_, (ValaCCodeExpression*) _tmp219_);
					_vala_ccode_node_unref0 (array_length_expr);
					array_length_expr = (ValaCCodeExpression*) _tmp220_;
					_vala_code_node_unref0 (data_type);
				} else {
					gboolean _tmp221_ = FALSE;
					ValaDataType* _tmp222_;
					_tmp222_ = value_type;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp222_, VALA_TYPE_POINTER_TYPE)) {
						ValaDataType* _tmp223_;
						ValaDataType* _tmp224_;
						ValaDataType* _tmp225_;
						_tmp223_ = value_type;
						_tmp224_ = vala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp223_, VALA_TYPE_POINTER_TYPE, ValaPointerType));
						_tmp225_ = _tmp224_;
						_tmp221_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp225_, VALA_TYPE_VALUE_TYPE);
					} else {
						_tmp221_ = FALSE;
					}
					if (_tmp221_) {
						ValaTypeSymbol* data_type = NULL;
						ValaDataType* _tmp226_;
						ValaDataType* _tmp227_;
						ValaDataType* _tmp228_;
						ValaTypeSymbol* _tmp229_;
						ValaTypeSymbol* _tmp230_;
						ValaTypeSymbol* _tmp231_;
						ValaCCodeFunctionCall* _tmp232_;
						ValaTypeSymbol* _tmp233_;
						gchar* _tmp234_;
						gchar* _tmp235_;
						ValaCCodeConstant* _tmp236_;
						ValaCCodeConstant* _tmp237_;
						ValaCCodeFunctionCall* _tmp238_;
						ValaCCodeFunctionCall* _tmp239_;
						ValaCCodeBinaryExpression* _tmp240_;
						_tmp226_ = value_type;
						_tmp227_ = vala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp226_, VALA_TYPE_POINTER_TYPE, ValaPointerType));
						_tmp228_ = _tmp227_;
						_tmp229_ = vala_data_type_get_data_type ((ValaDataType*) G_TYPE_CHECK_INSTANCE_CAST (_tmp228_, VALA_TYPE_VALUE_TYPE, ValaValueType));
						_tmp230_ = _tmp229_;
						_tmp231_ = _vala_code_node_ref0 (_tmp230_);
						data_type = _tmp231_;
						_tmp232_ = sizeof_from;
						_tmp233_ = data_type;
						_tmp234_ = vala_get_ccode_name ((ValaCodeNode*) _tmp233_);
						_tmp235_ = _tmp234_;
						_tmp236_ = vala_ccode_constant_new (_tmp235_);
						_tmp237_ = _tmp236_;
						vala_ccode_function_call_add_argument (_tmp232_, (ValaCCodeExpression*) _tmp237_);
						_vala_ccode_node_unref0 (_tmp237_);
						_g_free0 (_tmp235_);
						_tmp238_ = sizeof_from;
						_tmp239_ = sizeof_to;
						_tmp240_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp238_, (ValaCCodeExpression*) _tmp239_);
						_vala_ccode_node_unref0 (array_length_expr);
						array_length_expr = (ValaCCodeExpression*) _tmp240_;
						_vala_code_node_unref0 (data_type);
					} else {
						ValaCCodeConstant* _tmp241_;
						_tmp241_ = vala_ccode_constant_new ("-1");
						_vala_ccode_node_unref0 (array_length_expr);
						array_length_expr = (ValaCCodeExpression*) _tmp241_;
					}
				}
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp242_ = FALSE;
						_tmp242_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp244_;
							gint _tmp245_;
							gint _tmp246_;
							ValaCCodeExpression* _tmp247_;
							if (!_tmp242_) {
								gint _tmp243_;
								_tmp243_ = dim;
								dim = _tmp243_ + 1;
							}
							_tmp242_ = FALSE;
							_tmp244_ = array_type;
							_tmp245_ = vala_array_type_get_rank (_tmp244_);
							_tmp246_ = _tmp245_;
							if (!(dim <= _tmp246_)) {
								break;
							}
							_tmp247_ = array_length_expr;
							vala_ccode_base_module_append_array_length (self, (ValaExpression*) expr, _tmp247_);
						}
					}
				}
				_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);
			}
		}
		_tmp248_ = vala_cast_expression_get_inner (expr);
		_tmp249_ = _tmp248_;
		_tmp250_ = vala_ccode_base_module_get_cvalue (self, _tmp249_);
		innercexpr = _tmp250_;
		_tmp254_ = vala_cast_expression_get_type_reference (expr);
		_tmp255_ = _tmp254_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp255_, VALA_TYPE_VALUE_TYPE)) {
			ValaDataType* _tmp256_;
			ValaDataType* _tmp257_;
			gboolean _tmp258_;
			gboolean _tmp259_;
			_tmp256_ = vala_cast_expression_get_type_reference (expr);
			_tmp257_ = _tmp256_;
			_tmp258_ = vala_data_type_get_nullable (_tmp257_);
			_tmp259_ = _tmp258_;
			_tmp253_ = !_tmp259_;
		} else {
			_tmp253_ = FALSE;
		}
		if (_tmp253_) {
			ValaExpression* _tmp260_;
			ValaExpression* _tmp261_;
			ValaDataType* _tmp262_;
			ValaDataType* _tmp263_;
			_tmp260_ = vala_cast_expression_get_inner (expr);
			_tmp261_ = _tmp260_;
			_tmp262_ = vala_expression_get_value_type (_tmp261_);
			_tmp263_ = _tmp262_;
			_tmp252_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp263_, VALA_TYPE_VALUE_TYPE);
		} else {
			_tmp252_ = FALSE;
		}
		if (_tmp252_) {
			ValaExpression* _tmp264_;
			ValaExpression* _tmp265_;
			ValaDataType* _tmp266_;
			ValaDataType* _tmp267_;
			gboolean _tmp268_;
			gboolean _tmp269_;
			_tmp264_ = vala_cast_expression_get_inner (expr);
			_tmp265_ = _tmp264_;
			_tmp266_ = vala_expression_get_value_type (_tmp265_);
			_tmp267_ = _tmp266_;
			_tmp268_ = vala_data_type_get_nullable (_tmp267_);
			_tmp269_ = _tmp268_;
			_tmp251_ = _tmp269_;
		} else {
			_tmp251_ = FALSE;
		}
		if (_tmp251_) {
			ValaCCodeExpression* _tmp270_;
			ValaCCodeUnaryExpression* _tmp271_;
			_tmp270_ = innercexpr;
			_tmp271_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp270_);
			_vala_ccode_node_unref0 (innercexpr);
			innercexpr = (ValaCCodeExpression*) _tmp271_;
		} else {
			gboolean _tmp272_ = FALSE;
			gboolean _tmp273_ = FALSE;
			gboolean _tmp274_ = FALSE;
			ValaDataType* _tmp275_;
			ValaDataType* _tmp276_;
			_tmp275_ = vala_cast_expression_get_type_reference (expr);
			_tmp276_ = _tmp275_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp276_, VALA_TYPE_ARRAY_TYPE)) {
				ValaExpression* _tmp277_;
				ValaExpression* _tmp278_;
				_tmp277_ = vala_cast_expression_get_inner (expr);
				_tmp278_ = _tmp277_;
				_tmp274_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp278_, VALA_TYPE_LITERAL);
			} else {
				_tmp274_ = FALSE;
			}
			if (_tmp274_) {
				ValaExpression* _tmp279_;
				ValaExpression* _tmp280_;
				ValaDataType* _tmp281_;
				ValaDataType* _tmp282_;
				_tmp279_ = vala_cast_expression_get_inner (expr);
				_tmp280_ = _tmp279_;
				_tmp281_ = vala_expression_get_value_type (_tmp280_);
				_tmp282_ = _tmp281_;
				_tmp273_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp282_, VALA_TYPE_VALUE_TYPE);
			} else {
				_tmp273_ = FALSE;
			}
			if (_tmp273_) {
				ValaExpression* _tmp283_;
				ValaExpression* _tmp284_;
				ValaDataType* _tmp285_;
				ValaDataType* _tmp286_;
				gboolean _tmp287_;
				gboolean _tmp288_;
				_tmp283_ = vala_cast_expression_get_inner (expr);
				_tmp284_ = _tmp283_;
				_tmp285_ = vala_expression_get_value_type (_tmp284_);
				_tmp286_ = _tmp285_;
				_tmp287_ = vala_data_type_get_nullable (_tmp286_);
				_tmp288_ = _tmp287_;
				_tmp272_ = !_tmp288_;
			} else {
				_tmp272_ = FALSE;
			}
			if (_tmp272_) {
				ValaCCodeExpression* _tmp289_;
				ValaCCodeUnaryExpression* _tmp290_;
				_tmp289_ = innercexpr;
				_tmp290_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp289_);
				_vala_ccode_node_unref0 (innercexpr);
				innercexpr = (ValaCCodeExpression*) _tmp290_;
			}
		}
		_tmp291_ = innercexpr;
		_tmp292_ = vala_cast_expression_get_type_reference (expr);
		_tmp293_ = _tmp292_;
		_tmp294_ = vala_get_ccode_name ((ValaCodeNode*) _tmp293_);
		_tmp295_ = _tmp294_;
		_tmp296_ = vala_ccode_cast_expression_new (_tmp291_, _tmp295_);
		_tmp297_ = _tmp296_;
		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp297_);
		_vala_ccode_node_unref0 (_tmp297_);
		_g_free0 (_tmp295_);
		_tmp298_ = vala_cast_expression_get_type_reference (expr);
		_tmp299_ = _tmp298_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp299_, VALA_TYPE_DELEGATE_TYPE)) {
			ValaExpression* _tmp300_;
			ValaExpression* _tmp301_;
			ValaCCodeExpression* _tmp302_;
			ValaCCodeExpression* _tmp303_;
			gboolean _tmp304_;
			ValaExpression* _tmp311_;
			ValaExpression* _tmp312_;
			ValaCCodeExpression* _tmp313_;
			ValaCCodeExpression* _tmp314_;
			gboolean _tmp315_;
			_tmp300_ = vala_cast_expression_get_inner (expr);
			_tmp301_ = _tmp300_;
			_tmp302_ = vala_ccode_base_module_get_delegate_target (self, _tmp301_);
			_tmp303_ = _tmp302_;
			_tmp304_ = _tmp303_ != NULL;
			_vala_ccode_node_unref0 (_tmp303_);
			if (_tmp304_) {
				ValaExpression* _tmp305_;
				ValaExpression* _tmp306_;
				ValaCCodeExpression* _tmp307_;
				ValaCCodeExpression* _tmp308_;
				_tmp305_ = vala_cast_expression_get_inner (expr);
				_tmp306_ = _tmp305_;
				_tmp307_ = vala_ccode_base_module_get_delegate_target (self, _tmp306_);
				_tmp308_ = _tmp307_;
				vala_ccode_base_module_set_delegate_target (self, (ValaExpression*) expr, _tmp308_);
				_vala_ccode_node_unref0 (_tmp308_);
			} else {
				ValaCCodeConstant* _tmp309_;
				ValaCCodeConstant* _tmp310_;
				_tmp309_ = vala_ccode_constant_new ("NULL");
				_tmp310_ = _tmp309_;
				vala_ccode_base_module_set_delegate_target (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp310_);
				_vala_ccode_node_unref0 (_tmp310_);
			}
			_tmp311_ = vala_cast_expression_get_inner (expr);
			_tmp312_ = _tmp311_;
			_tmp313_ = vala_ccode_base_module_get_delegate_target_destroy_notify (self, _tmp312_);
			_tmp314_ = _tmp313_;
			_tmp315_ = _tmp314_ != NULL;
			_vala_ccode_node_unref0 (_tmp314_);
			if (_tmp315_) {
				ValaExpression* _tmp316_;
				ValaExpression* _tmp317_;
				ValaCCodeExpression* _tmp318_;
				ValaCCodeExpression* _tmp319_;
				_tmp316_ = vala_cast_expression_get_inner (expr);
				_tmp317_ = _tmp316_;
				_tmp318_ = vala_ccode_base_module_get_delegate_target_destroy_notify (self, _tmp317_);
				_tmp319_ = _tmp318_;
				vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) expr, _tmp319_);
				_vala_ccode_node_unref0 (_tmp319_);
			} else {
				ValaCCodeConstant* _tmp320_;
				ValaCCodeConstant* _tmp321_;
				_tmp320_ = vala_ccode_constant_new ("NULL");
				_tmp321_ = _tmp320_;
				vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp321_);
				_vala_ccode_node_unref0 (_tmp321_);
			}
		}
		_vala_ccode_node_unref0 (innercexpr);
		_vala_code_node_unref0 (array_type);
	}
	_vala_code_node_unref0 (iface);
	_vala_code_node_unref0 (cl);
}

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

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

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

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_;
		ValaCCodeExpression* _tmp26_;
		ValaCCodeUnaryExpression* _tmp27_;
		ValaCCodeUnaryExpression* _tmp28_;
		ValaCCodeFunctionCall* _tmp29_;
		ValaCCodeConstant* _tmp30_;
		ValaCCodeConstant* _tmp31_;
		ValaCCodeFunctionCall* _tmp32_;
		ValaExpression* _tmp33_;
		ValaExpression* _tmp34_;
		ValaDataType* _tmp35_;
		ValaDataType* _tmp36_;
		gchar* _tmp37_;
		gchar* _tmp38_;
		gchar* _tmp39_;
		gchar* _tmp40_;
		ValaCCodeIdentifier* _tmp41_;
		ValaCCodeIdentifier* _tmp42_;
		ValaCCodeFunction* _tmp43_;
		ValaCCodeFunction* _tmp44_;
		ValaCCodeFunctionCall* _tmp45_;
		_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_ccode_base_module_get_cvalue (self, _tmp24_);
		_tmp26_ = _tmp25_;
		_tmp27_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp26_);
		_tmp28_ = _tmp27_;
		vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp28_);
		_vala_ccode_node_unref0 (_tmp28_);
		_vala_ccode_node_unref0 (_tmp26_);
		_tmp29_ = creation_call;
		_tmp30_ = vala_ccode_constant_new ("0");
		_tmp31_ = _tmp30_;
		vala_ccode_function_call_add_argument (_tmp29_, (ValaCCodeExpression*) _tmp31_);
		_vala_ccode_node_unref0 (_tmp31_);
		_tmp32_ = creation_call;
		_tmp33_ = vala_reference_transfer_expression_get_inner (expr);
		_tmp34_ = _tmp33_;
		_tmp35_ = vala_expression_get_value_type (_tmp34_);
		_tmp36_ = _tmp35_;
		_tmp37_ = vala_get_ccode_name ((ValaCodeNode*) _tmp36_);
		_tmp38_ = _tmp37_;
		_tmp39_ = g_strdup_printf ("sizeof (%s)", _tmp38_);
		_tmp40_ = _tmp39_;
		_tmp41_ = vala_ccode_identifier_new (_tmp40_);
		_tmp42_ = _tmp41_;
		vala_ccode_function_call_add_argument (_tmp32_, (ValaCCodeExpression*) _tmp42_);
		_vala_ccode_node_unref0 (_tmp42_);
		_g_free0 (_tmp40_);
		_g_free0 (_tmp38_);
		_tmp43_ = vala_ccode_base_module_get_ccode (self);
		_tmp44_ = _tmp43_;
		_tmp45_ = creation_call;
		vala_ccode_function_add_expression (_tmp44_, (ValaCCodeExpression*) _tmp45_);
		_vala_ccode_node_unref0 (creation_call);
	} else {
		ValaDataType* _tmp46_;
		ValaDataType* _tmp47_;
		_tmp46_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp47_ = _tmp46_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp47_, VALA_TYPE_DELEGATE_TYPE)) {
			ValaCCodeFunction* _tmp48_;
			ValaCCodeFunction* _tmp49_;
			ValaExpression* _tmp50_;
			ValaExpression* _tmp51_;
			ValaCCodeExpression* _tmp52_;
			ValaCCodeExpression* _tmp53_;
			ValaCCodeConstant* _tmp54_;
			ValaCCodeConstant* _tmp55_;
			ValaCCodeExpression* target = NULL;
			ValaExpression* _tmp56_;
			ValaExpression* _tmp57_;
			ValaTargetValue* _tmp58_;
			ValaTargetValue* _tmp59_;
			ValaCCodeExpression* _tmp60_;
			ValaCCodeExpression* _tmp61_;
			ValaCCodeExpression* target_destroy_notify = NULL;
			ValaExpression* _tmp67_;
			ValaExpression* _tmp68_;
			ValaTargetValue* _tmp69_;
			ValaTargetValue* _tmp70_;
			ValaCCodeExpression* _tmp71_;
			ValaCCodeExpression* _tmp72_;
			_tmp48_ = vala_ccode_base_module_get_ccode (self);
			_tmp49_ = _tmp48_;
			_tmp50_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp51_ = _tmp50_;
			_tmp52_ = vala_ccode_base_module_get_cvalue (self, _tmp51_);
			_tmp53_ = _tmp52_;
			_tmp54_ = vala_ccode_constant_new ("NULL");
			_tmp55_ = _tmp54_;
			vala_ccode_function_add_assignment (_tmp49_, _tmp53_, (ValaCCodeExpression*) _tmp55_);
			_vala_ccode_node_unref0 (_tmp55_);
			_vala_ccode_node_unref0 (_tmp53_);
			_tmp56_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_expression_get_target_value (_tmp57_);
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp59_);
			target = _tmp60_;
			_tmp61_ = target;
			if (_tmp61_ != NULL) {
				ValaCCodeFunction* _tmp62_;
				ValaCCodeFunction* _tmp63_;
				ValaCCodeExpression* _tmp64_;
				ValaCCodeConstant* _tmp65_;
				ValaCCodeConstant* _tmp66_;
				_tmp62_ = vala_ccode_base_module_get_ccode (self);
				_tmp63_ = _tmp62_;
				_tmp64_ = target;
				_tmp65_ = vala_ccode_constant_new ("NULL");
				_tmp66_ = _tmp65_;
				vala_ccode_function_add_assignment (_tmp63_, _tmp64_, (ValaCCodeExpression*) _tmp66_);
				_vala_ccode_node_unref0 (_tmp66_);
			}
			_tmp67_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_expression_get_target_value (_tmp68_);
			_tmp70_ = _tmp69_;
			_tmp71_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp70_);
			target_destroy_notify = _tmp71_;
			_tmp72_ = target_destroy_notify;
			if (_tmp72_ != NULL) {
				ValaCCodeFunction* _tmp73_;
				ValaCCodeFunction* _tmp74_;
				ValaCCodeExpression* _tmp75_;
				ValaCCodeConstant* _tmp76_;
				ValaCCodeConstant* _tmp77_;
				_tmp73_ = vala_ccode_base_module_get_ccode (self);
				_tmp74_ = _tmp73_;
				_tmp75_ = target_destroy_notify;
				_tmp76_ = vala_ccode_constant_new ("NULL");
				_tmp77_ = _tmp76_;
				vala_ccode_function_add_assignment (_tmp74_, _tmp75_, (ValaCCodeExpression*) _tmp77_);
				_vala_ccode_node_unref0 (_tmp77_);
			}
			_vala_ccode_node_unref0 (target_destroy_notify);
			_vala_ccode_node_unref0 (target);
		} else {
			ValaExpression* _tmp78_;
			ValaExpression* _tmp79_;
			ValaDataType* _tmp80_;
			ValaDataType* _tmp81_;
			_tmp78_ = vala_reference_transfer_expression_get_inner (expr);
			_tmp79_ = _tmp78_;
			_tmp80_ = vala_expression_get_value_type (_tmp79_);
			_tmp81_ = _tmp80_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp81_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* array_type = NULL;
				ValaExpression* _tmp82_;
				ValaExpression* _tmp83_;
				ValaDataType* _tmp84_;
				ValaDataType* _tmp85_;
				ValaArrayType* _tmp86_;
				ValaGLibValue* glib_value = NULL;
				ValaExpression* _tmp87_;
				ValaExpression* _tmp88_;
				ValaTargetValue* _tmp89_;
				ValaTargetValue* _tmp90_;
				ValaGLibValue* _tmp91_;
				ValaCCodeFunction* _tmp92_;
				ValaCCodeFunction* _tmp93_;
				ValaExpression* _tmp94_;
				ValaExpression* _tmp95_;
				ValaCCodeExpression* _tmp96_;
				ValaCCodeExpression* _tmp97_;
				ValaCCodeConstant* _tmp98_;
				ValaCCodeConstant* _tmp99_;
				ValaGLibValue* _tmp100_;
				ValaList* _tmp101_;
				_tmp82_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp83_ = _tmp82_;
				_tmp84_ = vala_expression_get_value_type (_tmp83_);
				_tmp85_ = _tmp84_;
				_tmp86_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp85_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				array_type = _tmp86_;
				_tmp87_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp88_ = _tmp87_;
				_tmp89_ = vala_expression_get_target_value (_tmp88_);
				_tmp90_ = _tmp89_;
				_tmp91_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
				glib_value = _tmp91_;
				_tmp92_ = vala_ccode_base_module_get_ccode (self);
				_tmp93_ = _tmp92_;
				_tmp94_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp95_ = _tmp94_;
				_tmp96_ = vala_ccode_base_module_get_cvalue (self, _tmp95_);
				_tmp97_ = _tmp96_;
				_tmp98_ = vala_ccode_constant_new ("NULL");
				_tmp99_ = _tmp98_;
				vala_ccode_function_add_assignment (_tmp93_, _tmp97_, (ValaCCodeExpression*) _tmp99_);
				_vala_ccode_node_unref0 (_tmp99_);
				_vala_ccode_node_unref0 (_tmp97_);
				_tmp100_ = glib_value;
				_tmp101_ = _tmp100_->array_length_cvalues;
				if (_tmp101_ != NULL) {
					{
						gint dim = 0;
						dim = 1;
						{
							gboolean _tmp102_ = FALSE;
							_tmp102_ = TRUE;
							while (TRUE) {
								ValaArrayType* _tmp104_;
								gint _tmp105_;
								gint _tmp106_;
								ValaCCodeFunction* _tmp107_;
								ValaCCodeFunction* _tmp108_;
								ValaGLibValue* _tmp109_;
								ValaCCodeExpression* _tmp110_;
								ValaCCodeExpression* _tmp111_;
								ValaCCodeConstant* _tmp112_;
								ValaCCodeConstant* _tmp113_;
								if (!_tmp102_) {
									gint _tmp103_;
									_tmp103_ = dim;
									dim = _tmp103_ + 1;
								}
								_tmp102_ = FALSE;
								_tmp104_ = array_type;
								_tmp105_ = vala_array_type_get_rank (_tmp104_);
								_tmp106_ = _tmp105_;
								if (!(dim <= _tmp106_)) {
									break;
								}
								_tmp107_ = vala_ccode_base_module_get_ccode (self);
								_tmp108_ = _tmp107_;
								_tmp109_ = glib_value;
								_tmp110_ = vala_ccode_base_module_get_array_length_cvalue (self, (ValaTargetValue*) _tmp109_, dim);
								_tmp111_ = _tmp110_;
								_tmp112_ = vala_ccode_constant_new ("0");
								_tmp113_ = _tmp112_;
								vala_ccode_function_add_assignment (_tmp108_, _tmp111_, (ValaCCodeExpression*) _tmp113_);
								_vala_ccode_node_unref0 (_tmp113_);
								_vala_ccode_node_unref0 (_tmp111_);
							}
						}
					}
				}
				_vala_target_value_unref0 (glib_value);
				_vala_code_node_unref0 (array_type);
			} else {
				ValaCCodeFunction* _tmp114_;
				ValaCCodeFunction* _tmp115_;
				ValaExpression* _tmp116_;
				ValaExpression* _tmp117_;
				ValaCCodeExpression* _tmp118_;
				ValaCCodeExpression* _tmp119_;
				ValaCCodeConstant* _tmp120_;
				ValaCCodeConstant* _tmp121_;
				_tmp114_ = vala_ccode_base_module_get_ccode (self);
				_tmp115_ = _tmp114_;
				_tmp116_ = vala_reference_transfer_expression_get_inner (expr);
				_tmp117_ = _tmp116_;
				_tmp118_ = vala_ccode_base_module_get_cvalue (self, _tmp117_);
				_tmp119_ = _tmp118_;
				_tmp120_ = vala_ccode_constant_new ("NULL");
				_tmp121_ = _tmp120_;
				vala_ccode_function_add_assignment (_tmp115_, _tmp119_, (ValaCCodeExpression*) _tmp121_);
				_vala_ccode_node_unref0 (_tmp121_);
				_vala_ccode_node_unref0 (_tmp119_);
			}
		}
	}
}

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

static 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 = NULL;
	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;
			ValaTypeSymbol* _tmp44_;
			ValaTypeSymbol* _tmp45_;
			_tmp44_ = vala_data_type_get_data_type (type);
			_tmp45_ = _tmp44_;
			if (_tmp45_ == NULL) {
				_tmp43_ = TRUE;
			} else {
				ValaTypeSymbol* _tmp46_;
				ValaTypeSymbol* _tmp47_;
				gboolean _tmp48_;
				gboolean _tmp49_;
				_tmp46_ = vala_data_type_get_data_type (type);
				_tmp47_ = _tmp46_;
				_tmp48_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp47_);
				_tmp49_ = _tmp48_;
				_tmp43_ = _tmp49_;
			}
			if (_tmp43_) {
				ValaCCodeExpression* type_id = NULL;
				ValaCCodeExpression* _tmp50_;
				ValaCCodeExpression* _tmp51_;
				ValaCCodeIdentifier* _tmp53_;
				ValaCCodeIdentifier* _tmp54_;
				ValaCCodeFunctionCall* _tmp55_;
				ValaCCodeFunctionCall* _tmp56_;
				ValaCCodeFunctionCall* _tmp57_;
				ValaCCodeExpression* _tmp58_;
				_tmp50_ = vala_ccode_base_module_get_type_id_expression (self, type, FALSE);
				type_id = _tmp50_;
				_tmp51_ = type_id;
				if (_tmp51_ == NULL) {
					ValaCCodeInvalidExpression* _tmp52_;
					_tmp52_ = vala_ccode_invalid_expression_new ();
					result = (ValaCCodeExpression*) _tmp52_;
					_vala_ccode_node_unref0 (type_id);
					_vala_ccode_node_unref0 (ccheck);
					_vala_code_node_unref0 (et);
					return result;
				}
				_tmp53_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_TYPE");
				_tmp54_ = _tmp53_;
				_tmp55_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp54_);
				_vala_ccode_node_unref0 (ccheck);
				ccheck = _tmp55_;
				_vala_ccode_node_unref0 (_tmp54_);
				_tmp56_ = ccheck;
				vala_ccode_function_call_add_argument (_tmp56_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
				_tmp57_ = ccheck;
				_tmp58_ = type_id;
				vala_ccode_function_call_add_argument (_tmp57_, _tmp58_);
				_vala_ccode_node_unref0 (type_id);
			} else {
				ValaTypeSymbol* _tmp59_;
				ValaTypeSymbol* _tmp60_;
				gchar* _tmp61_;
				gchar* _tmp62_;
				ValaCCodeIdentifier* _tmp63_;
				ValaCCodeIdentifier* _tmp64_;
				ValaCCodeFunctionCall* _tmp65_;
				ValaCCodeFunctionCall* _tmp66_;
				_tmp59_ = vala_data_type_get_data_type (type);
				_tmp60_ = _tmp59_;
				_tmp61_ = vala_get_ccode_type_check_function (_tmp60_);
				_tmp62_ = _tmp61_;
				_tmp63_ = vala_ccode_identifier_new (_tmp62_);
				_tmp64_ = _tmp63_;
				_tmp65_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp64_);
				_vala_ccode_node_unref0 (ccheck);
				ccheck = _tmp65_;
				_vala_ccode_node_unref0 (_tmp64_);
				_g_free0 (_tmp62_);
				_tmp66_ = ccheck;
				vala_ccode_function_call_add_argument (_tmp66_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
			}
			result = (ValaCCodeExpression*) ccheck;
			_vala_code_node_unref0 (et);
			return result;
		}
	}
	_vala_code_node_unref0 (et);
}

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_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaDataType* _tmp11_;
	ValaDataType* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeParameter* _tmp18_;
	ValaCCodeFunction* _tmp19_;
	ValaCCodeParameter* _tmp20_;
	ValaCCodeParameter* _tmp21_;
	ValaDataType* _tmp22_;
	ValaDataType* _tmp23_;
	ValaCCodeFunction* _tmp42_;
	ValaCCodeFunction* _tmp43_;
	ValaCCodeFunction* _tmp44_;
	ValaCCodeVariableDeclarator* _tmp45_;
	ValaCCodeVariableDeclarator* _tmp46_;
	ValaCCodeAssignment* cloop_initializer = NULL;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeConstant* _tmp49_;
	ValaCCodeConstant* _tmp50_;
	ValaCCodeAssignment* _tmp51_;
	ValaCCodeAssignment* _tmp52_;
	ValaCCodeBinaryExpression* cloop_condition = NULL;
	ValaCCodeIdentifier* _tmp53_;
	ValaCCodeIdentifier* _tmp54_;
	ValaCCodeIdentifier* _tmp55_;
	ValaCCodeIdentifier* _tmp56_;
	ValaCCodeBinaryExpression* _tmp57_;
	ValaCCodeBinaryExpression* _tmp58_;
	ValaCCodeUnaryExpression* cloop_iterator = NULL;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeIdentifier* _tmp60_;
	ValaCCodeUnaryExpression* _tmp61_;
	ValaCCodeUnaryExpression* _tmp62_;
	ValaCCodeFunction* _tmp63_;
	ValaCCodeFunction* _tmp64_;
	ValaCCodeAssignment* _tmp65_;
	ValaCCodeBinaryExpression* _tmp66_;
	ValaCCodeUnaryExpression* _tmp67_;
	ValaCCodeElementAccess* celement = NULL;
	ValaCCodeIdentifier* _tmp68_;
	ValaCCodeIdentifier* _tmp69_;
	ValaCCodeIdentifier* _tmp70_;
	ValaCCodeIdentifier* _tmp71_;
	ValaCCodeElementAccess* _tmp72_;
	ValaCCodeElementAccess* _tmp73_;
	ValaCCodeIdentifier* cneedle = NULL;
	ValaCCodeIdentifier* _tmp74_;
	ValaCCodeBinaryExpression* cif_condition = NULL;
	ValaDataType* _tmp75_;
	ValaDataType* _tmp76_;
	ValaDataType* _tmp77_;
	ValaCCodeFunction* _tmp115_;
	ValaCCodeFunction* _tmp116_;
	ValaCCodeBinaryExpression* _tmp117_;
	ValaCCodeFunction* _tmp118_;
	ValaCCodeFunction* _tmp119_;
	ValaCCodeConstant* _tmp120_;
	ValaCCodeConstant* _tmp121_;
	ValaCCodeFunction* _tmp122_;
	ValaCCodeFunction* _tmp123_;
	ValaCCodeFunction* _tmp124_;
	ValaCCodeFunction* _tmp125_;
	ValaCCodeFunction* _tmp126_;
	ValaCCodeFunction* _tmp127_;
	ValaCCodeConstant* _tmp128_;
	ValaCCodeConstant* _tmp129_;
	ValaCCodeFile* _tmp130_;
	ValaCCodeFunction* _tmp131_;
	ValaCCodeFile* _tmp132_;
	ValaCCodeFunction* _tmp133_;
	gchar* result = NULL;
	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_ = array_contains_func;
	_tmp8_ = vala_ccode_function_new (_tmp7_, "gboolean");
	function = _tmp8_;
	_tmp9_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp9_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp10_ = function;
	_tmp11_ = vala_array_type_get_element_type (array_type);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_get_ccode_name ((ValaCodeNode*) _tmp12_);
	_tmp14_ = _tmp13_;
	_tmp15_ = g_strdup_printf ("%s *", _tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_parameter_new ("stack", _tmp16_);
	_tmp18_ = _tmp17_;
	vala_ccode_function_add_parameter (_tmp10_, _tmp18_);
	_vala_ccode_node_unref0 (_tmp18_);
	_g_free0 (_tmp16_);
	_g_free0 (_tmp14_);
	_tmp19_ = function;
	_tmp20_ = vala_ccode_parameter_new ("stack_length", "int");
	_tmp21_ = _tmp20_;
	vala_ccode_function_add_parameter (_tmp19_, _tmp21_);
	_vala_ccode_node_unref0 (_tmp21_);
	_tmp22_ = vala_array_type_get_element_type (array_type);
	_tmp23_ = _tmp22_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
		ValaCCodeFunction* _tmp24_;
		ValaDataType* _tmp25_;
		ValaDataType* _tmp26_;
		gchar* _tmp27_;
		gchar* _tmp28_;
		gchar* _tmp29_;
		gchar* _tmp30_;
		ValaCCodeParameter* _tmp31_;
		ValaCCodeParameter* _tmp32_;
		_tmp24_ = function;
		_tmp25_ = vala_array_type_get_element_type (array_type);
		_tmp26_ = _tmp25_;
		_tmp27_ = vala_get_ccode_name ((ValaCodeNode*) _tmp26_);
		_tmp28_ = _tmp27_;
		_tmp29_ = g_strdup_printf ("const %s *", _tmp28_);
		_tmp30_ = _tmp29_;
		_tmp31_ = vala_ccode_parameter_new ("needle", _tmp30_);
		_tmp32_ = _tmp31_;
		vala_ccode_function_add_parameter (_tmp24_, _tmp32_);
		_vala_ccode_node_unref0 (_tmp32_);
		_g_free0 (_tmp30_);
		_g_free0 (_tmp28_);
	} else {
		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_);
	}
	_tmp42_ = function;
	vala_ccode_base_module_push_function (self, _tmp42_);
	_tmp43_ = vala_ccode_base_module_get_ccode (self);
	_tmp44_ = _tmp43_;
	_tmp45_ = vala_ccode_variable_declarator_new ("i", NULL, NULL);
	_tmp46_ = _tmp45_;
	vala_ccode_function_add_declaration (_tmp44_, "int", (ValaCCodeDeclarator*) _tmp46_, 0);
	_vala_ccode_node_unref0 (_tmp46_);
	_tmp47_ = vala_ccode_identifier_new ("i");
	_tmp48_ = _tmp47_;
	_tmp49_ = vala_ccode_constant_new ("0");
	_tmp50_ = _tmp49_;
	_tmp51_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp48_, (ValaCCodeExpression*) _tmp50_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp52_ = _tmp51_;
	_vala_ccode_node_unref0 (_tmp50_);
	_vala_ccode_node_unref0 (_tmp48_);
	cloop_initializer = _tmp52_;
	_tmp53_ = vala_ccode_identifier_new ("i");
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_identifier_new ("stack_length");
	_tmp56_ = _tmp55_;
	_tmp57_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_LESS_THAN, (ValaCCodeExpression*) _tmp54_, (ValaCCodeExpression*) _tmp56_);
	_tmp58_ = _tmp57_;
	_vala_ccode_node_unref0 (_tmp56_);
	_vala_ccode_node_unref0 (_tmp54_);
	cloop_condition = _tmp58_;
	_tmp59_ = vala_ccode_identifier_new ("i");
	_tmp60_ = _tmp59_;
	_tmp61_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp60_);
	_tmp62_ = _tmp61_;
	_vala_ccode_node_unref0 (_tmp60_);
	cloop_iterator = _tmp62_;
	_tmp63_ = vala_ccode_base_module_get_ccode (self);
	_tmp64_ = _tmp63_;
	_tmp65_ = cloop_initializer;
	_tmp66_ = cloop_condition;
	_tmp67_ = cloop_iterator;
	vala_ccode_function_open_for (_tmp64_, (ValaCCodeExpression*) _tmp65_, (ValaCCodeExpression*) _tmp66_, (ValaCCodeExpression*) _tmp67_);
	_tmp68_ = vala_ccode_identifier_new ("stack");
	_tmp69_ = _tmp68_;
	_tmp70_ = vala_ccode_identifier_new ("i");
	_tmp71_ = _tmp70_;
	_tmp72_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp69_, (ValaCCodeExpression*) _tmp71_);
	_tmp73_ = _tmp72_;
	_vala_ccode_node_unref0 (_tmp71_);
	_vala_ccode_node_unref0 (_tmp69_);
	celement = _tmp73_;
	_tmp74_ = vala_ccode_identifier_new ("needle");
	cneedle = _tmp74_;
	_tmp75_ = vala_array_type_get_element_type (array_type);
	_tmp76_ = _tmp75_;
	_tmp77_ = self->string_type;
	if (vala_data_type_compatible (_tmp76_, _tmp77_)) {
		ValaCCodeFunctionCall* ccall = NULL;
		ValaCCodeIdentifier* _tmp78_;
		ValaCCodeIdentifier* _tmp79_;
		ValaCCodeFunctionCall* _tmp80_;
		ValaCCodeFunctionCall* _tmp81_;
		ValaCCodeFunctionCall* _tmp82_;
		ValaCCodeElementAccess* _tmp83_;
		ValaCCodeFunctionCall* _tmp84_;
		ValaCCodeIdentifier* _tmp85_;
		ValaCCodeFunctionCall* _tmp86_;
		ValaCCodeConstant* _tmp87_;
		ValaCCodeConstant* _tmp88_;
		ValaCCodeBinaryExpression* _tmp89_;
		_tmp78_ = vala_ccode_identifier_new ("g_strcmp0");
		_tmp79_ = _tmp78_;
		_tmp80_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp79_);
		_tmp81_ = _tmp80_;
		_vala_ccode_node_unref0 (_tmp79_);
		ccall = _tmp81_;
		_tmp82_ = ccall;
		_tmp83_ = celement;
		vala_ccode_function_call_add_argument (_tmp82_, (ValaCCodeExpression*) _tmp83_);
		_tmp84_ = ccall;
		_tmp85_ = cneedle;
		vala_ccode_function_call_add_argument (_tmp84_, (ValaCCodeExpression*) _tmp85_);
		_tmp86_ = ccall;
		_tmp87_ = vala_ccode_constant_new ("0");
		_tmp88_ = _tmp87_;
		_tmp89_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp86_, (ValaCCodeExpression*) _tmp88_);
		_vala_ccode_node_unref0 (cif_condition);
		cif_condition = _tmp89_;
		_vala_ccode_node_unref0 (_tmp88_);
		_vala_ccode_node_unref0 (ccall);
	} else {
		ValaDataType* _tmp90_;
		ValaDataType* _tmp91_;
		_tmp90_ = vala_array_type_get_element_type (array_type);
		_tmp91_ = _tmp90_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
			gchar* equalfunc = NULL;
			ValaDataType* _tmp92_;
			ValaDataType* _tmp93_;
			ValaTypeSymbol* _tmp94_;
			ValaTypeSymbol* _tmp95_;
			gchar* _tmp96_;
			ValaCCodeFunctionCall* ccall = NULL;
			const gchar* _tmp97_;
			ValaCCodeIdentifier* _tmp98_;
			ValaCCodeIdentifier* _tmp99_;
			ValaCCodeFunctionCall* _tmp100_;
			ValaCCodeFunctionCall* _tmp101_;
			ValaCCodeFunctionCall* _tmp102_;
			ValaCCodeElementAccess* _tmp103_;
			ValaCCodeUnaryExpression* _tmp104_;
			ValaCCodeUnaryExpression* _tmp105_;
			ValaCCodeFunctionCall* _tmp106_;
			ValaCCodeIdentifier* _tmp107_;
			ValaCCodeFunctionCall* _tmp108_;
			ValaCCodeConstant* _tmp109_;
			ValaCCodeConstant* _tmp110_;
			ValaCCodeBinaryExpression* _tmp111_;
			_tmp92_ = vala_array_type_get_element_type (array_type);
			_tmp93_ = _tmp92_;
			_tmp94_ = vala_data_type_get_data_type (_tmp93_);
			_tmp95_ = _tmp94_;
			_tmp96_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp95_, VALA_TYPE_STRUCT, ValaStruct));
			equalfunc = _tmp96_;
			_tmp97_ = equalfunc;
			_tmp98_ = vala_ccode_identifier_new (_tmp97_);
			_tmp99_ = _tmp98_;
			_tmp100_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp99_);
			_tmp101_ = _tmp100_;
			_vala_ccode_node_unref0 (_tmp99_);
			ccall = _tmp101_;
			_tmp102_ = ccall;
			_tmp103_ = celement;
			_tmp104_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp103_);
			_tmp105_ = _tmp104_;
			vala_ccode_function_call_add_argument (_tmp102_, (ValaCCodeExpression*) _tmp105_);
			_vala_ccode_node_unref0 (_tmp105_);
			_tmp106_ = ccall;
			_tmp107_ = cneedle;
			vala_ccode_function_call_add_argument (_tmp106_, (ValaCCodeExpression*) _tmp107_);
			_tmp108_ = ccall;
			_tmp109_ = vala_ccode_constant_new ("TRUE");
			_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);
			_g_free0 (equalfunc);
		} else {
			ValaCCodeIdentifier* _tmp112_;
			ValaCCodeElementAccess* _tmp113_;
			ValaCCodeBinaryExpression* _tmp114_;
			_tmp112_ = cneedle;
			_tmp113_ = celement;
			_tmp114_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp112_, (ValaCCodeExpression*) _tmp113_);
			_vala_ccode_node_unref0 (cif_condition);
			cif_condition = _tmp114_;
		}
	}
	_tmp115_ = vala_ccode_base_module_get_ccode (self);
	_tmp116_ = _tmp115_;
	_tmp117_ = cif_condition;
	vala_ccode_function_open_if (_tmp116_, (ValaCCodeExpression*) _tmp117_);
	_tmp118_ = vala_ccode_base_module_get_ccode (self);
	_tmp119_ = _tmp118_;
	_tmp120_ = vala_ccode_constant_new ("TRUE");
	_tmp121_ = _tmp120_;
	vala_ccode_function_add_return (_tmp119_, (ValaCCodeExpression*) _tmp121_);
	_vala_ccode_node_unref0 (_tmp121_);
	_tmp122_ = vala_ccode_base_module_get_ccode (self);
	_tmp123_ = _tmp122_;
	vala_ccode_function_close (_tmp123_);
	_tmp124_ = vala_ccode_base_module_get_ccode (self);
	_tmp125_ = _tmp124_;
	vala_ccode_function_close (_tmp125_);
	_tmp126_ = vala_ccode_base_module_get_ccode (self);
	_tmp127_ = _tmp126_;
	_tmp128_ = vala_ccode_constant_new ("FALSE");
	_tmp129_ = _tmp128_;
	vala_ccode_function_add_return (_tmp127_, (ValaCCodeExpression*) _tmp129_);
	_vala_ccode_node_unref0 (_tmp129_);
	vala_ccode_base_module_pop_function (self);
	_tmp130_ = self->cfile;
	_tmp131_ = function;
	vala_ccode_file_add_function_declaration (_tmp130_, _tmp131_);
	_tmp132_ = self->cfile;
	_tmp133_ = function;
	vala_ccode_file_add_function (_tmp132_, _tmp133_);
	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 = NULL;
	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_;
			ValaCCodeFunction* _tmp10_;
			ValaCCodeFunction* _tmp11_;
			ValaCCodeParameter* _tmp12_;
			ValaCCodeParameter* _tmp13_;
			ValaCCodeFunction* _tmp14_;
			ValaCCodeParameter* _tmp15_;
			ValaCCodeParameter* _tmp16_;
			ValaCCodeFunction* _tmp17_;
			ValaCCodeFunction* _tmp18_;
			ValaCCodeBinaryExpression* noteq = NULL;
			ValaCCodeIdentifier* _tmp19_;
			ValaCCodeIdentifier* _tmp20_;
			ValaCCodeIdentifier* _tmp21_;
			ValaCCodeIdentifier* _tmp22_;
			ValaCCodeBinaryExpression* _tmp23_;
			ValaCCodeBinaryExpression* _tmp24_;
			ValaCCodeFunctionCall* cmp_call = NULL;
			ValaCCodeFunctionCall* _tmp51_;
			ValaCCodeFunctionCall* _tmp52_;
			ValaCCodeIdentifier* _tmp53_;
			ValaCCodeIdentifier* _tmp54_;
			ValaCCodeFunctionCall* _tmp55_;
			ValaCCodeIdentifier* _tmp56_;
			ValaCCodeIdentifier* _tmp57_;
			ValaCCodeFunction* _tmp58_;
			ValaCCodeFunction* _tmp59_;
			ValaCCodeFunctionCall* _tmp60_;
			ValaCCodeFile* _tmp61_;
			ValaCCodeFunction* _tmp62_;
			_tmp9_ = cmp0_func;
			_tmp10_ = vala_ccode_function_new (_tmp9_, "int");
			cmp0_fun = _tmp10_;
			_tmp11_ = cmp0_fun;
			_tmp12_ = vala_ccode_parameter_new ("s1", "const void *");
			_tmp13_ = _tmp12_;
			vala_ccode_function_add_parameter (_tmp11_, _tmp13_);
			_vala_ccode_node_unref0 (_tmp13_);
			_tmp14_ = cmp0_fun;
			_tmp15_ = vala_ccode_parameter_new ("s2", "const void *");
			_tmp16_ = _tmp15_;
			vala_ccode_function_add_parameter (_tmp14_, _tmp16_);
			_vala_ccode_node_unref0 (_tmp16_);
			_tmp17_ = cmp0_fun;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp17_, VALA_CCODE_MODIFIERS_STATIC);
			_tmp18_ = cmp0_fun;
			vala_ccode_base_module_push_function (self, _tmp18_);
			_tmp19_ = vala_ccode_identifier_new ("s1");
			_tmp20_ = _tmp19_;
			_tmp21_ = vala_ccode_identifier_new ("s2");
			_tmp22_ = _tmp21_;
			_tmp23_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp20_, (ValaCCodeExpression*) _tmp22_);
			_tmp24_ = _tmp23_;
			_vala_ccode_node_unref0 (_tmp22_);
			_vala_ccode_node_unref0 (_tmp20_);
			noteq = _tmp24_;
			{
				ValaCCodeUnaryExpression* cexp = NULL;
				ValaCCodeIdentifier* _tmp25_;
				ValaCCodeIdentifier* _tmp26_;
				ValaCCodeUnaryExpression* _tmp27_;
				ValaCCodeUnaryExpression* _tmp28_;
				ValaCCodeFunction* _tmp29_;
				ValaCCodeFunction* _tmp30_;
				ValaCCodeUnaryExpression* _tmp31_;
				ValaCCodeFunction* _tmp32_;
				ValaCCodeFunction* _tmp33_;
				ValaCCodeBinaryExpression* _tmp34_;
				ValaCCodeUnaryExpression* _tmp35_;
				ValaCCodeUnaryExpression* _tmp36_;
				ValaCCodeFunction* _tmp37_;
				ValaCCodeFunction* _tmp38_;
				_tmp25_ = vala_ccode_identifier_new ("s1");
				_tmp26_ = _tmp25_;
				_tmp27_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp26_);
				_tmp28_ = _tmp27_;
				_vala_ccode_node_unref0 (_tmp26_);
				cexp = _tmp28_;
				_tmp29_ = vala_ccode_base_module_get_ccode (self);
				_tmp30_ = _tmp29_;
				_tmp31_ = cexp;
				vala_ccode_function_open_if (_tmp30_, (ValaCCodeExpression*) _tmp31_);
				_tmp32_ = vala_ccode_base_module_get_ccode (self);
				_tmp33_ = _tmp32_;
				_tmp34_ = noteq;
				_tmp35_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_MINUS, (ValaCCodeExpression*) _tmp34_);
				_tmp36_ = _tmp35_;
				vala_ccode_function_add_return (_tmp33_, (ValaCCodeExpression*) _tmp36_);
				_vala_ccode_node_unref0 (_tmp36_);
				_tmp37_ = vala_ccode_base_module_get_ccode (self);
				_tmp38_ = _tmp37_;
				vala_ccode_function_close (_tmp38_);
				_vala_ccode_node_unref0 (cexp);
			}
			{
				ValaCCodeUnaryExpression* cexp = NULL;
				ValaCCodeIdentifier* _tmp39_;
				ValaCCodeIdentifier* _tmp40_;
				ValaCCodeUnaryExpression* _tmp41_;
				ValaCCodeUnaryExpression* _tmp42_;
				ValaCCodeFunction* _tmp43_;
				ValaCCodeFunction* _tmp44_;
				ValaCCodeUnaryExpression* _tmp45_;
				ValaCCodeFunction* _tmp46_;
				ValaCCodeFunction* _tmp47_;
				ValaCCodeBinaryExpression* _tmp48_;
				ValaCCodeFunction* _tmp49_;
				ValaCCodeFunction* _tmp50_;
				_tmp39_ = vala_ccode_identifier_new ("s2");
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp40_);
				_tmp42_ = _tmp41_;
				_vala_ccode_node_unref0 (_tmp40_);
				cexp = _tmp42_;
				_tmp43_ = vala_ccode_base_module_get_ccode (self);
				_tmp44_ = _tmp43_;
				_tmp45_ = cexp;
				vala_ccode_function_open_if (_tmp44_, (ValaCCodeExpression*) _tmp45_);
				_tmp46_ = vala_ccode_base_module_get_ccode (self);
				_tmp47_ = _tmp46_;
				_tmp48_ = noteq;
				vala_ccode_function_add_return (_tmp47_, (ValaCCodeExpression*) _tmp48_);
				_tmp49_ = vala_ccode_base_module_get_ccode (self);
				_tmp50_ = _tmp49_;
				vala_ccode_function_close (_tmp50_);
				_vala_ccode_node_unref0 (cexp);
			}
			_tmp51_ = vala_ccode_function_call_new ((ValaCCodeExpression*) cmpid);
			cmp_call = _tmp51_;
			_tmp52_ = cmp_call;
			_tmp53_ = vala_ccode_identifier_new ("s1");
			_tmp54_ = _tmp53_;
			vala_ccode_function_call_add_argument (_tmp52_, (ValaCCodeExpression*) _tmp54_);
			_vala_ccode_node_unref0 (_tmp54_);
			_tmp55_ = cmp_call;
			_tmp56_ = vala_ccode_identifier_new ("s2");
			_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_ = cmp_call;
			vala_ccode_function_add_return (_tmp59_, (ValaCCodeExpression*) _tmp60_);
			vala_ccode_base_module_pop_function (self);
			_tmp61_ = self->cfile;
			_tmp62_ = cmp0_fun;
			vala_ccode_file_add_function (_tmp61_, _tmp62_);
			_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_;
	ValaClass* _tmp18_;
	ValaInterface* iface = NULL;
	ValaDataType* _tmp19_;
	ValaTypeSymbol* _tmp20_;
	ValaTypeSymbol* _tmp21_;
	ValaInterface* _tmp22_;
	gboolean _tmp23_ = FALSE;
	gboolean _tmp24_ = FALSE;
	gboolean _tmp25_ = FALSE;
	gboolean _tmp26_ = FALSE;
	ValaClass* _tmp27_;
	ValaCCodeExpression* _tmp44_;
	ValaCCodeExpression* _tmp45_;
	gboolean _tmp46_;
	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_data_type (_tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp17_) : NULL);
	cl = _tmp18_;
	_tmp19_ = type;
	_tmp20_ = vala_data_type_get_data_type (_tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp21_) : NULL);
	iface = _tmp22_;
	_tmp27_ = cl;
	if (_tmp27_ != NULL) {
		ValaClass* _tmp28_;
		gboolean _tmp29_;
		gboolean _tmp30_;
		_tmp28_ = cl;
		_tmp29_ = vala_class_get_is_compact (_tmp28_);
		_tmp30_ = _tmp29_;
		_tmp26_ = !_tmp30_;
	} else {
		_tmp26_ = FALSE;
	}
	if (_tmp26_) {
		_tmp25_ = TRUE;
	} else {
		ValaInterface* _tmp31_;
		_tmp31_ = iface;
		_tmp25_ = _tmp31_ != NULL;
	}
	if (_tmp25_) {
		_tmp24_ = TRUE;
	} else {
		ValaDataType* _tmp32_;
		_tmp32_ = type;
		_tmp24_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_GENERIC_TYPE);
	}
	if (_tmp24_) {
		_tmp23_ = TRUE;
	} else {
		ValaDataType* _tmp33_;
		_tmp33_ = type;
		_tmp23_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, VALA_TYPE_ERROR_TYPE);
	}
	if (_tmp23_) {
		ValaExpression* _tmp34_;
		ValaExpression* _tmp35_;
		ValaCCodeExpression* _tmp36_;
		ValaCCodeExpression* _tmp37_;
		ValaDataType* _tmp38_;
		ValaDataType* _tmp39_;
		ValaCCodeExpression* _tmp40_;
		ValaCCodeExpression* _tmp41_;
		_tmp34_ = vala_typecheck_get_expression (expr);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_ccode_base_module_get_cvalue (self, _tmp35_);
		_tmp37_ = _tmp36_;
		_tmp38_ = vala_typecheck_get_type_reference (expr);
		_tmp39_ = _tmp38_;
		_tmp40_ = vala_ccode_base_module_create_type_check (self, (ValaCCodeNode*) _tmp37_, _tmp39_);
		_tmp41_ = _tmp40_;
		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, _tmp41_);
		_vala_ccode_node_unref0 (_tmp41_);
		_vala_ccode_node_unref0 (_tmp37_);
	} else {
		ValaCCodeInvalidExpression* _tmp42_;
		ValaCCodeInvalidExpression* _tmp43_;
		_tmp42_ = vala_ccode_invalid_expression_new ();
		_tmp43_ = _tmp42_;
		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp43_);
		_vala_ccode_node_unref0 (_tmp43_);
	}
	_tmp44_ = vala_ccode_base_module_get_cvalue (self, (ValaExpression*) expr);
	_tmp45_ = _tmp44_;
	_tmp46_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp45_, VALA_TYPE_CCODE_INVALID_EXPRESSION);
	_vala_ccode_node_unref0 (_tmp45_);
	if (_tmp46_) {
		ValaSourceReference* _tmp47_;
		ValaSourceReference* _tmp48_;
		_tmp47_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
		_tmp48_ = _tmp47_;
		vala_report_error (_tmp48_, "type check expressions not supported for compact classes, structs, and" \
" enums");
	}
	_vala_code_node_unref0 (iface);
	_vala_code_node_unref0 (cl);
	_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_;
	ValaDelegate* d = NULL;
	ValaDelegateType* _tmp3_;
	ValaDelegate* _tmp4_;
	ValaDelegate* _tmp5_;
	ValaDelegate* _tmp6_;
	ValaMethod* _tmp7_;
	ValaMethod* _tmp8_;
	ValaDelegate* _tmp9_;
	ValaMethod* _tmp10_;
	ValaMethod* _tmp11_;
	ValaDelegate* _tmp12_;
	ValaMethod* _tmp13_;
	ValaMethod* _tmp14_;
	ValaDelegate* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	gboolean expr_owned = FALSE;
	ValaDataType* _tmp18_;
	ValaDataType* _tmp19_;
	gboolean _tmp20_;
	gboolean _tmp21_;
	ValaMethod* _tmp22_;
	ValaMethod* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	ValaCCodeIdentifier* _tmp26_;
	ValaCCodeIdentifier* _tmp27_;
	ValaMethod* _tmp28_;
	ValaMethod* _tmp29_;
	gboolean _tmp30_;
	gboolean _tmp31_;
	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_;
	_tmp3_ = delegate_type;
	_tmp4_ = vala_delegate_type_get_delegate_symbol (_tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = _vala_code_node_ref0 (_tmp5_);
	d = _tmp6_;
	_tmp7_ = vala_lambda_expression_get_method (lambda);
	_tmp8_ = _tmp7_;
	_tmp9_ = d;
	vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp8_, "CCode", "array_length", vala_get_ccode_array_length ((ValaCodeNode*) _tmp9_), NULL);
	_tmp10_ = vala_lambda_expression_get_method (lambda);
	_tmp11_ = _tmp10_;
	_tmp12_ = d;
	vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp11_, "CCode", "array_null_terminated", vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp12_), NULL);
	_tmp13_ = vala_lambda_expression_get_method (lambda);
	_tmp14_ = _tmp13_;
	_tmp15_ = d;
	_tmp16_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp15_);
	_tmp17_ = _tmp16_;
	vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp14_, "CCode", "array_length_type", _tmp17_, NULL);
	_g_free0 (_tmp17_);
	vala_code_node_accept_children ((ValaCodeNode*) lambda, (ValaCodeVisitor*) self);
	_tmp18_ = vala_expression_get_value_type ((ValaExpression*) lambda);
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_data_type_get_value_owned (_tmp19_);
	_tmp21_ = _tmp20_;
	expr_owned = _tmp21_;
	_tmp22_ = vala_lambda_expression_get_method (lambda);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_get_ccode_name ((ValaCodeNode*) _tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_ccode_identifier_new (_tmp25_);
	_tmp27_ = _tmp26_;
	vala_ccode_base_module_set_cvalue (self, (ValaExpression*) lambda, (ValaCCodeExpression*) _tmp27_);
	_vala_ccode_node_unref0 (_tmp27_);
	_g_free0 (_tmp25_);
	_tmp28_ = vala_lambda_expression_get_method (lambda);
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_method_get_closure (_tmp29_);
	_tmp31_ = _tmp30_;
	if (_tmp31_) {
		gint block_id = 0;
		ValaBlock* _tmp32_;
		ValaBlock* _tmp33_;
		ValaCCodeExpression* delegate_target = NULL;
		gchar* _tmp34_;
		gchar* _tmp35_;
		ValaCCodeExpression* _tmp36_;
		ValaCCodeExpression* _tmp37_;
		gboolean _tmp38_ = FALSE;
		ValaCCodeExpression* _tmp58_;
		_tmp32_ = vala_ccode_base_module_get_current_closure_block (self);
		_tmp33_ = _tmp32_;
		block_id = vala_ccode_base_module_get_block_id (self, _tmp33_);
		_tmp34_ = g_strdup_printf ("_data%d_", block_id);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp35_);
		_tmp37_ = _tmp36_;
		_g_free0 (_tmp35_);
		delegate_target = _tmp37_;
		if (expr_owned) {
			_tmp38_ = TRUE;
		} else {
			ValaDelegateType* _tmp39_;
			gboolean _tmp40_;
			gboolean _tmp41_;
			_tmp39_ = delegate_type;
			_tmp40_ = vala_delegate_type_get_is_called_once (_tmp39_);
			_tmp41_ = _tmp40_;
			_tmp38_ = _tmp41_;
		}
		if (_tmp38_) {
			ValaCCodeFunctionCall* ref_call = NULL;
			gchar* _tmp42_;
			gchar* _tmp43_;
			ValaCCodeIdentifier* _tmp44_;
			ValaCCodeIdentifier* _tmp45_;
			ValaCCodeFunctionCall* _tmp46_;
			ValaCCodeFunctionCall* _tmp47_;
			ValaCCodeFunctionCall* _tmp48_;
			ValaCCodeExpression* _tmp49_;
			ValaCCodeFunctionCall* _tmp50_;
			ValaCCodeExpression* _tmp51_;
			gchar* _tmp52_;
			gchar* _tmp53_;
			ValaCCodeIdentifier* _tmp54_;
			ValaCCodeIdentifier* _tmp55_;
			_tmp42_ = g_strdup_printf ("block%d_data_ref", block_id);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_ccode_identifier_new (_tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp45_);
			_tmp47_ = _tmp46_;
			_vala_ccode_node_unref0 (_tmp45_);
			_g_free0 (_tmp43_);
			ref_call = _tmp47_;
			_tmp48_ = ref_call;
			_tmp49_ = delegate_target;
			vala_ccode_function_call_add_argument (_tmp48_, _tmp49_);
			_tmp50_ = ref_call;
			_tmp51_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp50_);
			_vala_ccode_node_unref0 (delegate_target);
			delegate_target = _tmp51_;
			_tmp52_ = g_strdup_printf ("block%d_data_unref", block_id);
			_tmp53_ = _tmp52_;
			_tmp54_ = vala_ccode_identifier_new (_tmp53_);
			_tmp55_ = _tmp54_;
			vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) lambda, (ValaCCodeExpression*) _tmp55_);
			_vala_ccode_node_unref0 (_tmp55_);
			_g_free0 (_tmp53_);
			_vala_ccode_node_unref0 (ref_call);
		} else {
			ValaCCodeConstant* _tmp56_;
			ValaCCodeConstant* _tmp57_;
			_tmp56_ = vala_ccode_constant_new ("NULL");
			_tmp57_ = _tmp56_;
			vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) lambda, (ValaCCodeExpression*) _tmp57_);
			_vala_ccode_node_unref0 (_tmp57_);
		}
		_tmp58_ = delegate_target;
		vala_ccode_base_module_set_delegate_target (self, (ValaExpression*) lambda, _tmp58_);
		_vala_ccode_node_unref0 (delegate_target);
	} else {
		ValaDataType* _tmp59_;
		ValaDataType* _tmp60_;
		gboolean _tmp61_;
		_tmp59_ = vala_ccode_base_module_get_this_type (self);
		_tmp60_ = _tmp59_;
		_tmp61_ = _tmp60_ != NULL;
		_vala_code_node_unref0 (_tmp60_);
		if (_tmp61_) {
			ValaCCodeExpression* delegate_target = NULL;
			ValaCCodeExpression* _tmp62_;
			ValaCCodeExpression* _tmp63_;
			ValaDataType* _tmp64_;
			ValaDataType* _tmp65_;
			ValaCCodeExpression* _tmp66_;
			gboolean _tmp67_ = FALSE;
			ValaCCodeExpression* _tmp89_;
			_tmp62_ = vala_ccode_base_module_get_this_cexpression (self);
			delegate_target = _tmp62_;
			_tmp63_ = delegate_target;
			_tmp64_ = vala_ccode_base_module_get_this_type (self);
			_tmp65_ = _tmp64_;
			_tmp66_ = vala_ccode_base_module_convert_to_generic_pointer (self, _tmp63_, _tmp65_);
			_vala_ccode_node_unref0 (delegate_target);
			delegate_target = _tmp66_;
			_vala_code_node_unref0 (_tmp65_);
			if (expr_owned) {
				_tmp67_ = TRUE;
			} else {
				ValaDelegateType* _tmp68_;
				gboolean _tmp69_;
				gboolean _tmp70_;
				_tmp68_ = delegate_type;
				_tmp69_ = vala_delegate_type_get_is_called_once (_tmp68_);
				_tmp70_ = _tmp69_;
				_tmp67_ = _tmp70_;
			}
			if (_tmp67_) {
				ValaCCodeFunctionCall* ref_call = NULL;
				ValaDataType* _tmp71_;
				ValaDataType* _tmp72_;
				ValaSourceReference* _tmp73_;
				ValaSourceReference* _tmp74_;
				ValaCCodeExpression* _tmp75_;
				ValaCCodeExpression* _tmp76_;
				ValaCCodeFunctionCall* _tmp77_;
				ValaCCodeFunctionCall* _tmp78_;
				ValaCCodeFunctionCall* _tmp79_;
				ValaCCodeExpression* _tmp80_;
				ValaCCodeFunctionCall* _tmp81_;
				ValaCCodeExpression* _tmp82_;
				ValaDataType* _tmp83_;
				ValaDataType* _tmp84_;
				ValaCCodeExpression* _tmp85_;
				ValaCCodeExpression* _tmp86_;
				_tmp71_ = vala_ccode_base_module_get_this_type (self);
				_tmp72_ = _tmp71_;
				_tmp73_ = vala_code_node_get_source_reference ((ValaCodeNode*) lambda);
				_tmp74_ = _tmp73_;
				_tmp75_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp72_, _tmp74_, FALSE);
				_tmp76_ = _tmp75_;
				_tmp77_ = vala_ccode_function_call_new (_tmp76_);
				_tmp78_ = _tmp77_;
				_vala_ccode_node_unref0 (_tmp76_);
				_vala_code_node_unref0 (_tmp72_);
				ref_call = _tmp78_;
				_tmp79_ = ref_call;
				_tmp80_ = delegate_target;
				vala_ccode_function_call_add_argument (_tmp79_, _tmp80_);
				_tmp81_ = ref_call;
				_tmp82_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp81_);
				_vala_ccode_node_unref0 (delegate_target);
				delegate_target = _tmp82_;
				_tmp83_ = vala_ccode_base_module_get_this_type (self);
				_tmp84_ = _tmp83_;
				_tmp85_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp84_, FALSE);
				_tmp86_ = _tmp85_;
				vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) lambda, _tmp86_);
				_vala_ccode_node_unref0 (_tmp86_);
				_vala_code_node_unref0 (_tmp84_);
				_vala_ccode_node_unref0 (ref_call);
			} else {
				ValaCCodeConstant* _tmp87_;
				ValaCCodeConstant* _tmp88_;
				_tmp87_ = vala_ccode_constant_new ("NULL");
				_tmp88_ = _tmp87_;
				vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) lambda, (ValaCCodeExpression*) _tmp88_);
				_vala_ccode_node_unref0 (_tmp88_);
			}
			_tmp89_ = delegate_target;
			vala_ccode_base_module_set_delegate_target (self, (ValaExpression*) lambda, _tmp89_);
			_vala_ccode_node_unref0 (delegate_target);
		} else {
			ValaCCodeConstant* _tmp90_;
			ValaCCodeConstant* _tmp91_;
			ValaCCodeConstant* _tmp92_;
			ValaCCodeConstant* _tmp93_;
			_tmp90_ = vala_ccode_constant_new ("NULL");
			_tmp91_ = _tmp90_;
			vala_ccode_base_module_set_delegate_target (self, (ValaExpression*) lambda, (ValaCCodeExpression*) _tmp91_);
			_vala_ccode_node_unref0 (_tmp91_);
			_tmp92_ = vala_ccode_constant_new ("NULL");
			_tmp93_ = _tmp92_;
			vala_ccode_base_module_set_delegate_target_destroy_notify (self, (ValaExpression*) lambda, (ValaCCodeExpression*) _tmp93_);
			_vala_ccode_node_unref0 (_tmp93_);
		}
	}
	_vala_code_node_unref0 (d);
	_vala_code_node_unref0 (delegate_type);
}

ValaCCodeExpression*
vala_ccode_base_module_convert_from_generic_pointer (ValaCCodeBaseModule* self,
                                                     ValaCCodeExpression* cexpr,
                                                     ValaDataType* actual_type)
{
	ValaCCodeExpression* _result_ = NULL;
	ValaCCodeExpression* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaCCodeExpression* result = NULL;
	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_ = _vala_ccode_node_ref0 (cexpr);
	_result_ = _tmp0_;
	if (vala_ccode_base_module_is_reference_type_argument (self, actual_type)) {
		_tmp1_ = TRUE;
	} else {
		_tmp1_ = vala_ccode_base_module_is_nullable_value_type_argument (self, actual_type);
	}
	if (_tmp1_) {
		ValaCCodeFile* _tmp2_;
		gchar* _tmp3_;
		gchar* _tmp4_;
		ValaCCodeCastExpression* _tmp5_;
		_tmp2_ = self->cfile;
		vala_ccode_base_module_generate_type_declaration (self, actual_type, _tmp2_);
		_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
		_tmp4_ = _tmp3_;
		_tmp5_ = vala_ccode_cast_expression_new (cexpr, _tmp4_);
		_vala_ccode_node_unref0 (_result_);
		_result_ = (ValaCCodeExpression*) _tmp5_;
		_g_free0 (_tmp4_);
	} else {
		if (vala_ccode_base_module_is_signed_integer_type_argument (self, actual_type)) {
			ValaCCodeCastExpression* _tmp6_;
			ValaCCodeCastExpression* _tmp7_;
			gchar* _tmp8_;
			gchar* _tmp9_;
			ValaCCodeCastExpression* _tmp10_;
			_tmp6_ = vala_ccode_cast_expression_new (cexpr, "gintptr");
			_tmp7_ = _tmp6_;
			_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
			_tmp9_ = _tmp8_;
			_tmp10_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp7_, _tmp9_);
			_vala_ccode_node_unref0 (_result_);
			_result_ = (ValaCCodeExpression*) _tmp10_;
			_g_free0 (_tmp9_);
			_vala_ccode_node_unref0 (_tmp7_);
		} else {
			if (vala_ccode_base_module_is_unsigned_integer_type_argument (self, actual_type)) {
				ValaCCodeCastExpression* _tmp11_;
				ValaCCodeCastExpression* _tmp12_;
				gchar* _tmp13_;
				gchar* _tmp14_;
				ValaCCodeCastExpression* _tmp15_;
				_tmp11_ = vala_ccode_cast_expression_new (cexpr, "guintptr");
				_tmp12_ = _tmp11_;
				_tmp13_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
				_tmp14_ = _tmp13_;
				_tmp15_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp12_, _tmp14_);
				_vala_ccode_node_unref0 (_result_);
				_result_ = (ValaCCodeExpression*) _tmp15_;
				_g_free0 (_tmp14_);
				_vala_ccode_node_unref0 (_tmp12_);
			}
		}
	}
	result = _result_;
	return result;
}

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

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

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

gboolean
vala_ccode_base_module_add_wrapper (ValaCCodeBaseModule* self,
                                    const gchar* wrapper_name)
{
	ValaSet* _tmp0_;
	gboolean result = FALSE;
	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 = FALSE;
	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_data_type_for_symbol (ValaTypeSymbol* sym)
{
	ValaDataType* type = NULL;
	ValaDataType* result = NULL;
	g_return_val_if_fail (sym != NULL, NULL);
	type = NULL;
	if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_CLASS)) {
		ValaObjectType* _tmp0_;
		_tmp0_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass));
		_vala_code_node_unref0 (type);
		type = (ValaDataType*) _tmp0_;
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_INTERFACE)) {
			ValaObjectType* _tmp1_;
			_tmp1_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_INTERFACE, ValaInterface));
			_vala_code_node_unref0 (type);
			type = (ValaDataType*) _tmp1_;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_STRUCT)) {
				ValaStruct* st = NULL;
				ValaStruct* _tmp2_;
				ValaStruct* _tmp3_;
				_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_STRUCT, ValaStruct));
				st = _tmp2_;
				_tmp3_ = st;
				if (vala_struct_is_boolean_type (_tmp3_)) {
					ValaStruct* _tmp4_;
					ValaBooleanType* _tmp5_;
					_tmp4_ = st;
					_tmp5_ = vala_boolean_type_new (_tmp4_);
					_vala_code_node_unref0 (type);
					type = (ValaDataType*) _tmp5_;
				} else {
					ValaStruct* _tmp6_;
					_tmp6_ = st;
					if (vala_struct_is_integer_type (_tmp6_)) {
						ValaStruct* _tmp7_;
						ValaIntegerType* _tmp8_;
						_tmp7_ = st;
						_tmp8_ = vala_integer_type_new (_tmp7_, NULL, NULL);
						_vala_code_node_unref0 (type);
						type = (ValaDataType*) _tmp8_;
					} else {
						ValaStruct* _tmp9_;
						_tmp9_ = st;
						if (vala_struct_is_floating_type (_tmp9_)) {
							ValaStruct* _tmp10_;
							ValaFloatingType* _tmp11_;
							_tmp10_ = st;
							_tmp11_ = vala_floating_type_new (_tmp10_);
							_vala_code_node_unref0 (type);
							type = (ValaDataType*) _tmp11_;
						} else {
							ValaStruct* _tmp12_;
							ValaStructValueType* _tmp13_;
							_tmp12_ = st;
							_tmp13_ = vala_struct_value_type_new (_tmp12_);
							_vala_code_node_unref0 (type);
							type = (ValaDataType*) _tmp13_;
						}
					}
				}
				_vala_code_node_unref0 (st);
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_ENUM)) {
					ValaEnumValueType* _tmp14_;
					_tmp14_ = vala_enum_value_type_new (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM, ValaEnum));
					_vala_code_node_unref0 (type);
					type = (ValaDataType*) _tmp14_;
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_ERROR_DOMAIN)) {
						ValaErrorType* _tmp15_;
						_tmp15_ = vala_error_type_new (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain), NULL, NULL);
						_vala_code_node_unref0 (type);
						type = (ValaDataType*) _tmp15_;
					} else {
						if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_ERROR_CODE)) {
							ValaSymbol* _tmp16_;
							ValaSymbol* _tmp17_;
							ValaErrorType* _tmp18_;
							_tmp16_ = vala_symbol_get_parent_symbol ((ValaSymbol*) sym);
							_tmp17_ = _tmp16_;
							_tmp18_ = vala_error_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain), G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ERROR_CODE, ValaErrorCode), NULL);
							_vala_code_node_unref0 (type);
							type = (ValaDataType*) _tmp18_;
						} else {
							gchar* _tmp19_;
							gchar* _tmp20_;
							gchar* _tmp21_;
							gchar* _tmp22_;
							ValaInvalidType* _tmp23_;
							_tmp19_ = vala_symbol_get_full_name ((ValaSymbol*) sym);
							_tmp20_ = _tmp19_;
							_tmp21_ = g_strdup_printf ("internal error: `%s' is not a supported type", _tmp20_);
							_tmp22_ = _tmp21_;
							vala_report_error (NULL, _tmp22_);
							_g_free0 (_tmp22_);
							_g_free0 (_tmp20_);
							_tmp23_ = vala_invalid_type_new ();
							result = (ValaDataType*) _tmp23_;
							_vala_code_node_unref0 (type);
							return result;
						}
					}
				}
			}
		}
	}
	result = 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_;
	ValaStruct* _tmp2_;
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp3_;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	ValaTypeSymbol* _tmp6_;
	ValaTypeSymbol* _tmp7_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_data_type (type);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL);
	st = _tmp2_;
	_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
	array_type = _tmp3_;
	_tmp6_ = vala_data_type_get_data_type (type);
	_tmp7_ = _tmp6_;
	if (_tmp7_ != NULL) {
		gboolean _tmp8_;
		gboolean _tmp9_;
		_tmp8_ = vala_data_type_get_nullable (type);
		_tmp9_ = _tmp8_;
		_tmp5_ = !_tmp9_;
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		gchar* _tmp10_ = NULL;
		if (on_error) {
			ValaTypeSymbol* _tmp11_;
			ValaTypeSymbol* _tmp12_;
			gchar* _tmp13_;
			_tmp11_ = vala_data_type_get_data_type (type);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_get_ccode_default_value_on_error (_tmp12_);
			_g_free0 (_tmp10_);
			_tmp10_ = _tmp13_;
		} else {
			ValaTypeSymbol* _tmp14_;
			ValaTypeSymbol* _tmp15_;
			gchar* _tmp16_;
			_tmp14_ = vala_data_type_get_data_type (type);
			_tmp15_ = _tmp14_;
			_tmp16_ = vala_get_ccode_default_value (_tmp15_);
			_g_free0 (_tmp10_);
			_tmp10_ = _tmp16_;
		}
		_tmp4_ = g_strcmp0 (_tmp10_, "") != 0;
		_g_free0 (_tmp10_);
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		gchar* _tmp17_ = NULL;
		ValaCCodeConstant* _tmp24_;
		if (on_error) {
			ValaTypeSymbol* _tmp18_;
			ValaTypeSymbol* _tmp19_;
			gchar* _tmp20_;
			_tmp18_ = vala_data_type_get_data_type (type);
			_tmp19_ = _tmp18_;
			_tmp20_ = vala_get_ccode_default_value_on_error (_tmp19_);
			_g_free0 (_tmp17_);
			_tmp17_ = _tmp20_;
		} else {
			ValaTypeSymbol* _tmp21_;
			ValaTypeSymbol* _tmp22_;
			gchar* _tmp23_;
			_tmp21_ = vala_data_type_get_data_type (type);
			_tmp22_ = _tmp21_;
			_tmp23_ = vala_get_ccode_default_value (_tmp22_);
			_g_free0 (_tmp17_);
			_tmp17_ = _tmp23_;
		}
		_tmp24_ = vala_ccode_constant_new (_tmp17_);
		result = (ValaCCodeExpression*) _tmp24_;
		_g_free0 (_tmp17_);
		_vala_code_node_unref0 (array_type);
		_vala_code_node_unref0 (st);
		return result;
	} else {
		gboolean _tmp25_ = FALSE;
		gboolean _tmp26_ = FALSE;
		if (initializer_expression) {
			gboolean _tmp27_;
			gboolean _tmp28_;
			_tmp27_ = vala_data_type_get_nullable (type);
			_tmp28_ = _tmp27_;
			_tmp26_ = !_tmp28_;
		} else {
			_tmp26_ = FALSE;
		}
		if (_tmp26_) {
			gboolean _tmp29_ = FALSE;
			ValaStruct* _tmp30_;
			_tmp30_ = st;
			if (_tmp30_ != NULL) {
				_tmp29_ = TRUE;
			} else {
				gboolean _tmp31_ = FALSE;
				ValaArrayType* _tmp32_;
				_tmp32_ = array_type;
				if (_tmp32_ != NULL) {
					ValaArrayType* _tmp33_;
					gboolean _tmp34_;
					gboolean _tmp35_;
					_tmp33_ = array_type;
					_tmp34_ = vala_array_type_get_fixed_length (_tmp33_);
					_tmp35_ = _tmp34_;
					_tmp31_ = _tmp35_;
				} else {
					_tmp31_ = FALSE;
				}
				_tmp29_ = _tmp31_;
			}
			_tmp25_ = _tmp29_;
		} else {
			_tmp25_ = FALSE;
		}
		if (_tmp25_) {
			ValaCCodeInitializerList* clist = NULL;
			ValaCCodeInitializerList* _tmp36_;
			ValaCCodeInitializerList* _tmp37_;
			ValaCCodeConstant* _tmp38_;
			ValaCCodeConstant* _tmp39_;
			_tmp36_ = vala_ccode_initializer_list_new ();
			clist = _tmp36_;
			_tmp37_ = clist;
			_tmp38_ = vala_ccode_constant_new ("0");
			_tmp39_ = _tmp38_;
			vala_ccode_initializer_list_append (_tmp37_, (ValaCCodeExpression*) _tmp39_);
			_vala_ccode_node_unref0 (_tmp39_);
			result = (ValaCCodeExpression*) clist;
			_vala_code_node_unref0 (array_type);
			_vala_code_node_unref0 (st);
			return result;
		} else {
			gboolean _tmp40_ = FALSE;
			gboolean _tmp41_ = FALSE;
			gboolean _tmp42_ = FALSE;
			gboolean _tmp43_ = FALSE;
			gboolean _tmp44_ = FALSE;
			ValaTypeSymbol* _tmp45_;
			ValaTypeSymbol* _tmp46_;
			_tmp45_ = vala_data_type_get_data_type (type);
			_tmp46_ = _tmp45_;
			if (_tmp46_ != NULL) {
				ValaTypeSymbol* _tmp47_;
				ValaTypeSymbol* _tmp48_;
				_tmp47_ = vala_data_type_get_data_type (type);
				_tmp48_ = _tmp47_;
				_tmp44_ = vala_typesymbol_is_reference_type (_tmp48_);
			} else {
				_tmp44_ = FALSE;
			}
			if (_tmp44_) {
				_tmp43_ = TRUE;
			} else {
				gboolean _tmp49_;
				gboolean _tmp50_;
				_tmp49_ = vala_data_type_get_nullable (type);
				_tmp50_ = _tmp49_;
				_tmp43_ = _tmp50_;
			}
			if (_tmp43_) {
				_tmp42_ = TRUE;
			} else {
				_tmp42_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE);
			}
			if (_tmp42_) {
				_tmp41_ = TRUE;
			} else {
				_tmp41_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE);
			}
			if (_tmp41_) {
				_tmp40_ = TRUE;
			} else {
				gboolean _tmp51_ = FALSE;
				ValaArrayType* _tmp52_;
				_tmp52_ = array_type;
				if (_tmp52_ != NULL) {
					ValaArrayType* _tmp53_;
					gboolean _tmp54_;
					gboolean _tmp55_;
					_tmp53_ = array_type;
					_tmp54_ = vala_array_type_get_fixed_length (_tmp53_);
					_tmp55_ = _tmp54_;
					_tmp51_ = !_tmp55_;
				} else {
					_tmp51_ = FALSE;
				}
				_tmp40_ = _tmp51_;
			}
			if (_tmp40_) {
				ValaCCodeConstant* _tmp56_;
				_tmp56_ = vala_ccode_constant_new ("NULL");
				result = (ValaCCodeExpression*) _tmp56_;
				_vala_code_node_unref0 (array_type);
				_vala_code_node_unref0 (st);
				return result;
			} else {
				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
					ValaCCodeConstant* _tmp57_;
					_tmp57_ = vala_ccode_constant_new ("NULL");
					result = (ValaCCodeExpression*) _tmp57_;
					_vala_code_node_unref0 (array_type);
					_vala_code_node_unref0 (st);
					return result;
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
						ValaCCodeConstant* _tmp58_;
						_tmp58_ = vala_ccode_constant_new ("NULL");
						result = (ValaCCodeExpression*) _tmp58_;
						_vala_code_node_unref0 (array_type);
						_vala_code_node_unref0 (st);
						return result;
					} else {
						if (VALA_IS_CTYPE (type)) {
							const gchar* _tmp59_;
							const gchar* _tmp60_;
							ValaCCodeConstant* _tmp61_;
							_tmp59_ = vala_ctype_get_cdefault_value (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_CTYPE, ValaCType));
							_tmp60_ = _tmp59_;
							_tmp61_ = vala_ccode_constant_new (_tmp60_);
							result = (ValaCCodeExpression*) _tmp61_;
							_vala_code_node_unref0 (array_type);
							_vala_code_node_unref0 (st);
							return result;
						}
					}
				}
			}
		}
	}
	result = NULL;
	_vala_code_node_unref0 (array_type);
	_vala_code_node_unref0 (st);
	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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->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 = 0;
	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_;
	gboolean _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_cvalue (self, node);
	_tmp1_ = _tmp0_;
	_tmp2_ = _tmp1_ == NULL;
	_vala_ccode_node_unref0 (_tmp1_);
	if (_tmp2_) {
		vala_code_node_emit ((ValaCodeNode*) node, (ValaCodeGenerator*) self);
	}
	_tmp3_ = vala_ccode_base_module_get_cvalue (self, node);
	result = _tmp3_;
	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 = FALSE;
	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_data_type (type);
	_tmp7_ = _tmp6_;
	if (_tmp7_ != NULL) {
		ValaTypeSymbol* _tmp8_;
		ValaTypeSymbol* _tmp9_;
		_tmp8_ = vala_data_type_get_data_type (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;
}

ValaCCodeDeclaratorSuffix*
vala_ccode_base_module_get_ccode_declarator_suffix (ValaCCodeBaseModule* self,
                                                    ValaDataType* type)
{
	ValaArrayType* array_type = NULL;
	ValaArrayType* _tmp0_;
	ValaArrayType* _tmp1_;
	ValaCCodeDeclaratorSuffix* result = NULL;
	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 = NULL;
	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 = NULL;
	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_;
	ValaCCodeExpression* _tmp20_;
	ValaCCodeExpression* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	ValaCCodeConstant* _tmp28_;
	ValaCCodeConstant* _tmp29_;
	ValaCCodeFunction* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	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_ = vala_ccode_base_module_get_cvalue (self, postcondition);
	_tmp21_ = _tmp20_;
	vala_ccode_function_call_add_argument (cassert, _tmp21_);
	_vala_ccode_node_unref0 (_tmp21_);
	_tmp22_ = string_replace (message, "\n", " ");
	_tmp23_ = _tmp22_;
	_tmp24_ = g_strescape (_tmp23_, "");
	_tmp25_ = _tmp24_;
	_tmp26_ = g_strdup_printf ("\"%s\"", _tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_ccode_constant_new (_tmp27_);
	_tmp29_ = _tmp28_;
	vala_ccode_function_call_add_argument (cassert, (ValaCCodeExpression*) _tmp29_);
	_vala_ccode_node_unref0 (_tmp29_);
	_g_free0 (_tmp27_);
	_g_free0 (_tmp25_);
	_g_free0 (_tmp23_);
	self->requires_assert = TRUE;
	_tmp30_ = vala_ccode_base_module_get_ccode (self);
	_tmp31_ = _tmp30_;
	vala_ccode_function_add_expression (_tmp31_, (ValaCCodeExpression*) cassert);
	_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 = NULL;
	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_;
		ValaDataType* _tmp13_;
		_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_;
		_tmp13_ = _vala_code_node_ref0 (_tmp12_);
		result = _tmp13_;
		return result;
	} else {
		gboolean _tmp14_ = FALSE;
		ValaPropertyAccessor* _tmp15_;
		ValaPropertyAccessor* _tmp16_;
		_tmp15_ = vala_ccode_base_module_get_current_property_accessor (self);
		_tmp16_ = _tmp15_;
		if (_tmp16_ != NULL) {
			ValaPropertyAccessor* _tmp17_;
			ValaPropertyAccessor* _tmp18_;
			ValaProperty* _tmp19_;
			ValaProperty* _tmp20_;
			ValaMemberBinding _tmp21_;
			ValaMemberBinding _tmp22_;
			_tmp17_ = vala_ccode_base_module_get_current_property_accessor (self);
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_property_accessor_get_prop (_tmp18_);
			_tmp20_ = _tmp19_;
			_tmp21_ = vala_property_get_binding (_tmp20_);
			_tmp22_ = _tmp21_;
			_tmp14_ = _tmp22_ == VALA_MEMBER_BINDING_INSTANCE;
		} else {
			_tmp14_ = FALSE;
		}
		if (_tmp14_) {
			ValaPropertyAccessor* _tmp23_;
			ValaPropertyAccessor* _tmp24_;
			ValaProperty* _tmp25_;
			ValaProperty* _tmp26_;
			ValaParameter* _tmp27_;
			ValaParameter* _tmp28_;
			ValaDataType* _tmp29_;
			ValaDataType* _tmp30_;
			ValaDataType* _tmp31_;
			_tmp23_ = vala_ccode_base_module_get_current_property_accessor (self);
			_tmp24_ = _tmp23_;
			_tmp25_ = vala_property_accessor_get_prop (_tmp24_);
			_tmp26_ = _tmp25_;
			_tmp27_ = vala_property_get_this_parameter (_tmp26_);
			_tmp28_ = _tmp27_;
			_tmp29_ = vala_variable_get_variable_type ((ValaVariable*) _tmp28_);
			_tmp30_ = _tmp29_;
			_tmp31_ = _vala_code_node_ref0 (_tmp30_);
			result = _tmp31_;
			return result;
		} else {
			gboolean _tmp32_ = FALSE;
			ValaConstructor* _tmp33_;
			ValaConstructor* _tmp34_;
			_tmp33_ = vala_ccode_base_module_get_current_constructor (self);
			_tmp34_ = _tmp33_;
			if (_tmp34_ != NULL) {
				ValaConstructor* _tmp35_;
				ValaConstructor* _tmp36_;
				ValaMemberBinding _tmp37_;
				ValaMemberBinding _tmp38_;
				_tmp35_ = vala_ccode_base_module_get_current_constructor (self);
				_tmp36_ = _tmp35_;
				_tmp37_ = vala_constructor_get_binding (_tmp36_);
				_tmp38_ = _tmp37_;
				_tmp32_ = _tmp38_ == VALA_MEMBER_BINDING_INSTANCE;
			} else {
				_tmp32_ = FALSE;
			}
			if (_tmp32_) {
				ValaConstructor* _tmp39_;
				ValaConstructor* _tmp40_;
				ValaParameter* _tmp41_;
				ValaParameter* _tmp42_;
				ValaDataType* _tmp43_;
				ValaDataType* _tmp44_;
				ValaDataType* _tmp45_;
				_tmp39_ = vala_ccode_base_module_get_current_constructor (self);
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_constructor_get_this_parameter (_tmp40_);
				_tmp42_ = _tmp41_;
				_tmp43_ = vala_variable_get_variable_type ((ValaVariable*) _tmp42_);
				_tmp44_ = _tmp43_;
				_tmp45_ = _vala_code_node_ref0 (_tmp44_);
				result = _tmp45_;
				return result;
			} else {
				gboolean _tmp46_ = FALSE;
				ValaDestructor* _tmp47_;
				ValaDestructor* _tmp48_;
				_tmp47_ = vala_ccode_base_module_get_current_destructor (self);
				_tmp48_ = _tmp47_;
				if (_tmp48_ != NULL) {
					ValaDestructor* _tmp49_;
					ValaDestructor* _tmp50_;
					ValaMemberBinding _tmp51_;
					ValaMemberBinding _tmp52_;
					_tmp49_ = vala_ccode_base_module_get_current_destructor (self);
					_tmp50_ = _tmp49_;
					_tmp51_ = vala_destructor_get_binding (_tmp50_);
					_tmp52_ = _tmp51_;
					_tmp46_ = _tmp52_ == VALA_MEMBER_BINDING_INSTANCE;
				} else {
					_tmp46_ = FALSE;
				}
				if (_tmp46_) {
					ValaDestructor* _tmp53_;
					ValaDestructor* _tmp54_;
					ValaParameter* _tmp55_;
					ValaParameter* _tmp56_;
					ValaDataType* _tmp57_;
					ValaDataType* _tmp58_;
					ValaDataType* _tmp59_;
					_tmp53_ = vala_ccode_base_module_get_current_destructor (self);
					_tmp54_ = _tmp53_;
					_tmp55_ = vala_destructor_get_this_parameter (_tmp54_);
					_tmp56_ = _tmp55_;
					_tmp57_ = vala_variable_get_variable_type ((ValaVariable*) _tmp56_);
					_tmp58_ = _tmp57_;
					_tmp59_ = _vala_code_node_ref0 (_tmp58_);
					result = _tmp59_;
					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 = NULL;
	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* _tmp44_;
	ValaCCodeFunction* _tmp45_;
	ValaCCodeFile* _tmp46_;
	ValaCCodeFunction* _tmp47_;
	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) {
			ValaField* f = NULL;
			ValaList* _tmp24_;
			gpointer _tmp25_;
			ValaField* _tmp26_;
			ValaMemberBinding _tmp27_;
			ValaMemberBinding _tmp28_;
			_f_index = _f_index + 1;
			if (!(_f_index < _f_size)) {
				break;
			}
			_tmp24_ = _f_list;
			_tmp25_ = vala_list_get (_tmp24_, _f_index);
			f = (ValaField*) _tmp25_;
			_tmp26_ = f;
			_tmp27_ = vala_field_get_binding (_tmp26_);
			_tmp28_ = _tmp27_;
			if (_tmp28_ == VALA_MEMBER_BINDING_INSTANCE) {
				gboolean _tmp29_ = FALSE;
				gboolean _tmp30_ = FALSE;
				ValaField* _tmp31_;
				ValaDataType* _tmp32_;
				ValaDataType* _tmp33_;
				_tmp31_ = f;
				_tmp32_ = vala_variable_get_variable_type ((ValaVariable*) _tmp31_);
				_tmp33_ = _tmp32_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, VALA_TYPE_DELEGATE_TYPE)) {
					_tmp30_ = TRUE;
				} else {
					ValaField* _tmp34_;
					_tmp34_ = f;
					_tmp30_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp34_);
				}
				if (_tmp30_) {
					ValaField* _tmp35_;
					ValaDataType* _tmp36_;
					ValaDataType* _tmp37_;
					_tmp35_ = f;
					_tmp36_ = vala_variable_get_variable_type ((ValaVariable*) _tmp35_);
					_tmp37_ = _tmp36_;
					_tmp29_ = vala_ccode_base_module_requires_destroy (self, _tmp37_);
				} else {
					_tmp29_ = FALSE;
				}
				if (_tmp29_) {
					ValaCCodeFunction* _tmp38_;
					ValaCCodeFunction* _tmp39_;
					ValaField* _tmp40_;
					ValaTargetValue* _tmp41_;
					ValaCCodeExpression* _tmp42_;
					ValaCCodeExpression* _tmp43_;
					_tmp38_ = vala_ccode_base_module_get_ccode (self);
					_tmp39_ = _tmp38_;
					_tmp40_ = f;
					_tmp41_ = this_value;
					_tmp42_ = vala_ccode_base_module_destroy_field (self, _tmp40_, _tmp41_);
					_tmp43_ = _tmp42_;
					vala_ccode_function_add_expression (_tmp39_, _tmp43_);
					_vala_ccode_node_unref0 (_tmp43_);
				}
			}
			_vala_code_node_unref0 (f);
		}
		_vala_iterable_unref0 (_f_list);
	}
	vala_ccode_base_module_pop_function (self);
	vala_ccode_base_module_pop_context (self);
	_tmp44_ = self->cfile;
	_tmp45_ = function;
	vala_ccode_file_add_function_declaration (_tmp44_, _tmp45_);
	_tmp46_ = self->cfile;
	_tmp47_ = function;
	vala_ccode_file_add_function (_tmp46_, _tmp47_);
	_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* _tmp62_;
	ValaCCodeFunction* _tmp63_;
	ValaCCodeFile* _tmp64_;
	ValaCCodeFunction* _tmp65_;
	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_ccode_base_module_get_data_type_for_symbol ((ValaTypeSymbol*) 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) {
			ValaField* f = NULL;
			ValaList* _tmp36_;
			gpointer _tmp37_;
			ValaField* _tmp38_;
			ValaMemberBinding _tmp39_;
			ValaMemberBinding _tmp40_;
			_f_index = _f_index + 1;
			if (!(_f_index < _f_size)) {
				break;
			}
			_tmp36_ = _f_list;
			_tmp37_ = vala_list_get (_tmp36_, _f_index);
			f = (ValaField*) _tmp37_;
			_tmp38_ = f;
			_tmp39_ = vala_field_get_binding (_tmp38_);
			_tmp40_ = _tmp39_;
			if (_tmp40_ == VALA_MEMBER_BINDING_INSTANCE) {
				ValaTargetValue* value = NULL;
				ValaField* _tmp41_;
				ValaTargetValue* _tmp42_;
				ValaTargetValue* _tmp43_;
				ValaTargetValue* _tmp44_;
				ValaTargetValue* _tmp45_;
				gboolean _tmp46_ = FALSE;
				gboolean _tmp47_ = FALSE;
				ValaField* _tmp48_;
				ValaDataType* _tmp49_;
				ValaDataType* _tmp50_;
				ValaField* _tmp59_;
				ValaGLibValue* _tmp60_;
				ValaTargetValue* _tmp61_;
				_tmp41_ = f;
				_tmp42_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (st, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
				_tmp43_ = _tmp42_;
				_tmp44_ = vala_code_generator_load_field ((ValaCodeGenerator*) self, _tmp41_, _tmp43_);
				_tmp45_ = _tmp44_;
				_vala_target_value_unref0 (_tmp43_);
				value = _tmp45_;
				_tmp48_ = f;
				_tmp49_ = vala_variable_get_variable_type ((ValaVariable*) _tmp48_);
				_tmp50_ = _tmp49_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp50_, VALA_TYPE_DELEGATE_TYPE)) {
					_tmp47_ = TRUE;
				} else {
					ValaField* _tmp51_;
					_tmp51_ = f;
					_tmp47_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp51_);
				}
				if (_tmp47_) {
					ValaField* _tmp52_;
					ValaDataType* _tmp53_;
					ValaDataType* _tmp54_;
					_tmp52_ = f;
					_tmp53_ = vala_variable_get_variable_type ((ValaVariable*) _tmp52_);
					_tmp54_ = _tmp53_;
					_tmp46_ = vala_ccode_base_module_requires_copy (self, _tmp54_);
				} else {
					_tmp46_ = FALSE;
				}
				if (_tmp46_) {
					ValaTargetValue* _tmp55_;
					ValaField* _tmp56_;
					ValaTargetValue* _tmp57_;
					ValaTargetValue* _tmp58_;
					_tmp55_ = value;
					_tmp56_ = f;
					_tmp57_ = vala_ccode_base_module_copy_value (self, _tmp55_, (ValaCodeNode*) _tmp56_);
					_vala_target_value_unref0 (value);
					value = _tmp57_;
					_tmp58_ = value;
					if (_tmp58_ == NULL) {
						_vala_target_value_unref0 (value);
						_vala_code_node_unref0 (f);
						continue;
					}
				}
				_tmp59_ = f;
				_tmp60_ = dest_struct;
				_tmp61_ = value;
				vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp59_, (ValaTargetValue*) _tmp60_, _tmp61_, NULL);
				_vala_target_value_unref0 (value);
			}
			_vala_code_node_unref0 (f);
		}
		_vala_iterable_unref0 (_f_list);
	}
	vala_ccode_base_module_pop_function (self);
	vala_ccode_base_module_pop_context (self);
	_tmp62_ = self->cfile;
	_tmp63_ = function;
	vala_ccode_file_add_function_declaration (_tmp62_, _tmp63_);
	_tmp64_ = self->cfile;
	_tmp65_ = function;
	vala_ccode_file_add_function (_tmp64_, _tmp65_);
	_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_;
	ValaStruct* _tmp2_;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	ValaStruct* _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (return_type != NULL);
	_tmp0_ = vala_data_type_get_data_type (return_type);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL);
	st = _tmp2_;
	_tmp5_ = st;
	if (_tmp5_ != NULL) {
		ValaStruct* _tmp6_;
		_tmp6_ = st;
		_tmp4_ = vala_struct_is_simple_type (_tmp6_);
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		gboolean _tmp7_;
		gboolean _tmp8_;
		_tmp7_ = vala_data_type_get_nullable (return_type);
		_tmp8_ = _tmp7_;
		_tmp3_ = !_tmp8_;
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		ValaLocalVariable* ret_temp_var = NULL;
		ValaLocalVariable* _tmp9_;
		ValaLocalVariable* _tmp10_;
		ValaCCodeFunction* _tmp11_;
		ValaCCodeFunction* _tmp12_;
		ValaLocalVariable* _tmp13_;
		const gchar* _tmp14_;
		const gchar* _tmp15_;
		ValaCCodeIdentifier* _tmp16_;
		ValaCCodeIdentifier* _tmp17_;
		_tmp9_ = vala_ccode_base_module_get_temp_variable (self, return_type, TRUE, NULL, TRUE);
		ret_temp_var = _tmp9_;
		_tmp10_ = ret_temp_var;
		vala_ccode_base_module_emit_temp_var (self, _tmp10_, on_error);
		_tmp11_ = vala_ccode_base_module_get_ccode (self);
		_tmp12_ = _tmp11_;
		_tmp13_ = ret_temp_var;
		_tmp14_ = vala_symbol_get_name ((ValaSymbol*) _tmp13_);
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_ccode_identifier_new (_tmp15_);
		_tmp17_ = _tmp16_;
		vala_ccode_function_add_return (_tmp12_, (ValaCCodeExpression*) _tmp17_);
		_vala_ccode_node_unref0 (_tmp17_);
		_vala_code_node_unref0 (ret_temp_var);
	} else {
		ValaCCodeFunction* _tmp18_;
		ValaCCodeFunction* _tmp19_;
		ValaCCodeExpression* _tmp20_;
		ValaCCodeExpression* _tmp21_;
		_tmp18_ = vala_ccode_base_module_get_ccode (self);
		_tmp19_ = _tmp18_;
		_tmp20_ = vala_ccode_base_module_default_value_for_type (self, return_type, FALSE, on_error);
		_tmp21_ = _tmp20_;
		vala_ccode_function_add_return (_tmp19_, _tmp21_);
		_vala_ccode_node_unref0 (_tmp21_);
	}
	_vala_code_node_unref0 (st);
}

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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_dynamic_method_wrapper (self, method);
}

static gboolean
vala_ccode_base_module_real_method_has_wrapper (ValaCCodeBaseModule* self,
                                                ValaMethod* method)
{
	gboolean result = FALSE;
	g_return_val_if_fail (method != NULL, FALSE);
	result = FALSE;
	return result;
}

gboolean
vala_ccode_base_module_method_has_wrapper (ValaCCodeBaseModule* self,
                                           ValaMethod* method)
{
	g_return_val_if_fail (self != NULL, FALSE);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->method_has_wrapper (self, method);
}

static ValaCCodeExpression*
vala_ccode_base_module_real_get_param_spec_cexpression (ValaCCodeBaseModule* self,
                                                        ValaProperty* prop)
{
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = vala_ccode_identifier_new ("");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
	_tmp3_ = (ValaCCodeExpression*) _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

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

static ValaCCodeExpression*
vala_ccode_base_module_real_get_param_spec (ValaCCodeBaseModule* self,
                                            ValaProperty* prop)
{
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = vala_ccode_identifier_new ("");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
	_tmp3_ = (ValaCCodeExpression*) _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

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

static ValaCCodeExpression*
vala_ccode_base_module_real_get_signal_creation (ValaCCodeBaseModule* self,
                                                 ValaSignal* sig,
                                                 ValaTypeSymbol* type)
{
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeExpression* _tmp3_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (sig != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_ccode_identifier_new ("");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
	_tmp3_ = (ValaCCodeExpression*) _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

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

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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->register_dbus_info (self, block, bindable);
}

static gchar*
vala_ccode_base_module_real_get_dynamic_property_getter_cname (ValaCCodeBaseModule* self,
                                                               ValaDynamicProperty* node)
{
	ValaSourceReference* _tmp0_;
	ValaSourceReference* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* result = NULL;
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) node);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_dynamic_property_get_dynamic_type (node);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_code_node_to_string ((ValaCodeNode*) _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = g_strdup_printf ("dynamic properties are not supported for %s", _tmp5_);
	_tmp7_ = _tmp6_;
	vala_report_error (_tmp1_, _tmp7_);
	_g_free0 (_tmp7_);
	_g_free0 (_tmp5_);
	_tmp8_ = g_strdup ("");
	result = _tmp8_;
	return result;
}

gchar*
vala_ccode_base_module_get_dynamic_property_getter_cname (ValaCCodeBaseModule* self,
                                                          ValaDynamicProperty* node)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_property_getter_cname (self, node);
}

static gchar*
vala_ccode_base_module_real_get_dynamic_property_setter_cname (ValaCCodeBaseModule* self,
                                                               ValaDynamicProperty* node)
{
	ValaSourceReference* _tmp0_;
	ValaSourceReference* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* result = NULL;
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) node);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_dynamic_property_get_dynamic_type (node);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_code_node_to_string ((ValaCodeNode*) _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = g_strdup_printf ("dynamic properties are not supported for %s", _tmp5_);
	_tmp7_ = _tmp6_;
	vala_report_error (_tmp1_, _tmp7_);
	_g_free0 (_tmp7_);
	_g_free0 (_tmp5_);
	_tmp8_ = g_strdup ("");
	result = _tmp8_;
	return result;
}

gchar*
vala_ccode_base_module_get_dynamic_property_setter_cname (ValaCCodeBaseModule* self,
                                                          ValaDynamicProperty* node)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_property_setter_cname (self, node);
}

static gchar*
vala_ccode_base_module_real_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
                                                      ValaDynamicSignal* node)
{
	gchar* _tmp0_;
	gchar* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_cname (self, node);
}

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

gchar*
vala_ccode_base_module_get_dynamic_signal_connect_wrapper_name (ValaCCodeBaseModule* self,
                                                                ValaDynamicSignal* node)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_connect_wrapper_name (self, node);
}

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

gchar*
vala_ccode_base_module_get_dynamic_signal_connect_after_wrapper_name (ValaCCodeBaseModule* self,
                                                                      ValaDynamicSignal* node)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_connect_after_wrapper_name (self, node);
}

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

gchar*
vala_ccode_base_module_get_dynamic_signal_disconnect_wrapper_name (ValaCCodeBaseModule* self,
                                                                   ValaDynamicSignal* node)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_disconnect_wrapper_name (self, node);
}

static gchar*
vala_ccode_base_module_real_get_array_length_cname (ValaCCodeBaseModule* self,
                                                    const gchar* array_cname,
                                                    gint dim)
{
	gchar* _tmp0_;
	gchar* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_array_length_cname (self, array_cname, dim);
}

static gchar*
vala_ccode_base_module_real_get_variable_array_length_cname (ValaCCodeBaseModule* self,
                                                             ValaVariable* variable,
                                                             gint dim)
{
	gchar* _tmp0_;
	gchar* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_variable_array_length_cname (self, variable, dim);
}

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

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

static ValaCCodeExpression*
vala_ccode_base_module_real_get_array_length_cvalue (ValaCCodeBaseModule* self,
                                                     ValaTargetValue* value,
                                                     gint dim)
{
	ValaCCodeInvalidExpression* _tmp0_;
	ValaCCodeExpression* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_array_length_cvalue (self, value, dim);
}

static gchar*
vala_ccode_base_module_real_get_array_size_cname (ValaCCodeBaseModule* self,
                                                  const gchar* array_cname)
{
	gchar* _tmp0_;
	gchar* result = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_array_size_cname (self, array_cname);
}

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)
{
	g_return_if_fail (self != NULL);
	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->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 = NULL;
	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)
{
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_ready_function (self, m);
}

ValaCCodeExpression*
vala_ccode_base_module_get_cvalue (ValaCCodeBaseModule* self,
                                   ValaExpression* expr)
{
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaGLibValue* _tmp4_;
	ValaGLibValue* _tmp5_;
	ValaCCodeExpression* _tmp6_;
	ValaCCodeExpression* _tmp7_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	if (_tmp1_ == NULL) {
		result = NULL;
		return result;
	}
	_tmp2_ = vala_expression_get_target_value (expr);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp4_;
	_tmp5_ = glib_value;
	_tmp6_ = _tmp5_->cvalue;
	_tmp7_ = _vala_ccode_node_ref0 (_tmp6_);
	result = _tmp7_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_cvalue_ (ValaCCodeBaseModule* self,
                                    ValaTargetValue* value)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	ValaCCodeExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	_tmp1_ = glib_value->cvalue;
	_tmp2_ = _vala_ccode_node_ref0 (_tmp1_);
	result = _tmp2_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

void
vala_ccode_base_module_set_cvalue (ValaCCodeBaseModule* self,
                                   ValaExpression* expr,
                                   ValaCCodeExpression* cvalue)
{
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* _tmp2_;
	ValaGLibValue* _tmp3_;
	ValaGLibValue* _tmp8_;
	ValaCCodeExpression* _tmp9_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp2_;
	_tmp3_ = glib_value;
	if (_tmp3_ == NULL) {
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaGLibValue* _tmp6_;
		ValaGLibValue* _tmp7_;
		_tmp4_ = vala_expression_get_value_type (expr);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_glib_value_new (_tmp5_, NULL, FALSE);
		_vala_target_value_unref0 (glib_value);
		glib_value = _tmp6_;
		_tmp7_ = glib_value;
		vala_expression_set_target_value (expr, (ValaTargetValue*) _tmp7_);
	}
	_tmp8_ = glib_value;
	_tmp9_ = _vala_ccode_node_ref0 (cvalue);
	_vala_ccode_node_unref0 (_tmp8_->cvalue);
	_tmp8_->cvalue = _tmp9_;
	_vala_target_value_unref0 (glib_value);
}

ValaCCodeExpression*
vala_ccode_base_module_get_array_size_cvalue (ValaCCodeBaseModule* self,
                                              ValaTargetValue* value)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	ValaCCodeExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	_tmp1_ = glib_value->array_size_cvalue;
	_tmp2_ = _vala_ccode_node_ref0 (_tmp1_);
	result = _tmp2_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

void
vala_ccode_base_module_set_array_size_cvalue (ValaCCodeBaseModule* self,
                                              ValaTargetValue* value,
                                              ValaCCodeExpression* cvalue)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	ValaCCodeExpression* _tmp1_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (value != NULL);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	_tmp1_ = _vala_ccode_node_ref0 (cvalue);
	_vala_ccode_node_unref0 (glib_value->array_size_cvalue);
	glib_value->array_size_cvalue = _tmp1_;
	_vala_target_value_unref0 (glib_value);
}

ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target (ValaCCodeBaseModule* self,
                                            ValaExpression* expr)
{
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaGLibValue* _tmp4_;
	ValaGLibValue* _tmp5_;
	ValaCCodeExpression* _tmp6_;
	ValaCCodeExpression* _tmp7_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	if (_tmp1_ == NULL) {
		result = NULL;
		return result;
	}
	_tmp2_ = vala_expression_get_target_value (expr);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp4_;
	_tmp5_ = glib_value;
	_tmp6_ = _tmp5_->delegate_target_cvalue;
	_tmp7_ = _vala_ccode_node_ref0 (_tmp6_);
	result = _tmp7_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

void
vala_ccode_base_module_set_delegate_target (ValaCCodeBaseModule* self,
                                            ValaExpression* expr,
                                            ValaCCodeExpression* delegate_target)
{
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* _tmp2_;
	ValaGLibValue* _tmp3_;
	ValaGLibValue* _tmp8_;
	ValaCCodeExpression* _tmp9_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp2_;
	_tmp3_ = glib_value;
	if (_tmp3_ == NULL) {
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaGLibValue* _tmp6_;
		ValaGLibValue* _tmp7_;
		_tmp4_ = vala_expression_get_value_type (expr);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_glib_value_new (_tmp5_, NULL, FALSE);
		_vala_target_value_unref0 (glib_value);
		glib_value = _tmp6_;
		_tmp7_ = glib_value;
		vala_expression_set_target_value (expr, (ValaTargetValue*) _tmp7_);
	}
	_tmp8_ = glib_value;
	_tmp9_ = _vala_ccode_node_ref0 (delegate_target);
	_vala_ccode_node_unref0 (_tmp8_->delegate_target_cvalue);
	_tmp8_->delegate_target_cvalue = _tmp9_;
	_vala_target_value_unref0 (glib_value);
}

ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target_destroy_notify (ValaCCodeBaseModule* self,
                                                           ValaExpression* expr)
{
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaGLibValue* _tmp4_;
	ValaGLibValue* _tmp5_;
	ValaCCodeExpression* _tmp6_;
	ValaCCodeExpression* _tmp7_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	if (_tmp1_ == NULL) {
		result = NULL;
		return result;
	}
	_tmp2_ = vala_expression_get_target_value (expr);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp4_;
	_tmp5_ = glib_value;
	_tmp6_ = _tmp5_->delegate_target_destroy_notify_cvalue;
	_tmp7_ = _vala_ccode_node_ref0 (_tmp6_);
	result = _tmp7_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

void
vala_ccode_base_module_set_delegate_target_destroy_notify (ValaCCodeBaseModule* self,
                                                           ValaExpression* expr,
                                                           ValaCCodeExpression* destroy_notify)
{
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* _tmp2_;
	ValaGLibValue* _tmp3_;
	ValaGLibValue* _tmp8_;
	ValaCCodeExpression* _tmp9_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp2_;
	_tmp3_ = glib_value;
	if (_tmp3_ == NULL) {
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaGLibValue* _tmp6_;
		ValaGLibValue* _tmp7_;
		_tmp4_ = vala_expression_get_value_type (expr);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_glib_value_new (_tmp5_, NULL, FALSE);
		_vala_target_value_unref0 (glib_value);
		glib_value = _tmp6_;
		_tmp7_ = glib_value;
		vala_expression_set_target_value (expr, (ValaTargetValue*) _tmp7_);
	}
	_tmp8_ = glib_value;
	_tmp9_ = _vala_ccode_node_ref0 (destroy_notify);
	_vala_ccode_node_unref0 (_tmp8_->delegate_target_destroy_notify_cvalue);
	_tmp8_->delegate_target_destroy_notify_cvalue = _tmp9_;
	_vala_target_value_unref0 (glib_value);
}

void
vala_ccode_base_module_append_array_length (ValaCCodeBaseModule* self,
                                            ValaExpression* expr,
                                            ValaCCodeExpression* size)
{
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* _tmp2_;
	ValaGLibValue* _tmp3_;
	ValaGLibValue* _tmp8_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (expr != NULL);
	g_return_if_fail (size != NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp2_;
	_tmp3_ = glib_value;
	if (_tmp3_ == NULL) {
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaGLibValue* _tmp6_;
		ValaGLibValue* _tmp7_;
		_tmp4_ = vala_expression_get_value_type (expr);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_glib_value_new (_tmp5_, NULL, FALSE);
		_vala_target_value_unref0 (glib_value);
		glib_value = _tmp6_;
		_tmp7_ = glib_value;
		vala_expression_set_target_value (expr, (ValaTargetValue*) _tmp7_);
	}
	_tmp8_ = glib_value;
	vala_glib_value_append_array_length_cvalue (_tmp8_, size);
	_vala_target_value_unref0 (glib_value);
}

ValaList*
vala_ccode_base_module_get_array_lengths (ValaCCodeBaseModule* self,
                                          ValaExpression* expr)
{
	ValaGLibValue* glib_value = NULL;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaGLibValue* _tmp2_;
	ValaGLibValue* _tmp3_;
	ValaGLibValue* _tmp8_;
	ValaList* _tmp9_;
	ValaList* _tmp10_;
	ValaList* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_tmp0_ = vala_expression_get_target_value (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp2_;
	_tmp3_ = glib_value;
	if (_tmp3_ == NULL) {
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		ValaGLibValue* _tmp6_;
		ValaGLibValue* _tmp7_;
		_tmp4_ = vala_expression_get_value_type (expr);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_glib_value_new (_tmp5_, NULL, FALSE);
		_vala_target_value_unref0 (glib_value);
		glib_value = _tmp6_;
		_tmp7_ = glib_value;
		vala_expression_set_target_value (expr, (ValaTargetValue*) _tmp7_);
	}
	_tmp8_ = glib_value;
	_tmp9_ = _tmp8_->array_length_cvalues;
	_tmp10_ = _vala_iterable_ref0 (_tmp9_);
	result = _tmp10_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

gboolean
vala_ccode_base_module_get_lvalue (ValaCCodeBaseModule* self,
                                   ValaTargetValue* value)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (value != NULL, FALSE);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	result = glib_value->lvalue;
	_vala_target_value_unref0 (glib_value);
	return result;
}

gboolean
vala_ccode_base_module_get_non_null (ValaCCodeBaseModule* self,
                                     ValaTargetValue* value)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (value != NULL, FALSE);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	result = glib_value->non_null;
	_vala_target_value_unref0 (glib_value);
	return result;
}

gchar*
vala_ccode_base_module_get_ctype (ValaCCodeBaseModule* self,
                                  ValaTargetValue* value)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	_tmp1_ = glib_value->ctype;
	_tmp2_ = g_strdup (_tmp1_);
	result = _tmp2_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

gboolean
vala_ccode_base_module_get_array_null_terminated (ValaCCodeBaseModule* self,
                                                  ValaTargetValue* value)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (value != NULL, FALSE);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	result = glib_value->array_null_terminated;
	_vala_target_value_unref0 (glib_value);
	return result;
}

ValaCCodeExpression*
vala_ccode_base_module_get_array_length_cexpr (ValaCCodeBaseModule* self,
                                               ValaTargetValue* value)
{
	ValaGLibValue* glib_value = NULL;
	ValaGLibValue* _tmp0_;
	ValaCCodeExpression* _tmp1_;
	ValaCCodeExpression* _tmp2_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	glib_value = _tmp0_;
	_tmp1_ = glib_value->array_length_cexpr;
	_tmp2_ = _vala_ccode_node_ref0 (_tmp1_);
	result = _tmp2_;
	_vala_target_value_unref0 (glib_value);
	return result;
}

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;
}

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_;
}

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;
}

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;
}

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;
}

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;
}

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);
}

GType
vala_ccode_base_module_emit_context_get_type (void)
{
	static volatile gsize vala_ccode_base_module_emit_context_type_id__volatile = 0;
	if (g_once_init_enter (&vala_ccode_base_module_emit_context_type_id__volatile)) {
		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);
		g_once_init_leave (&vala_ccode_base_module_emit_context_type_id__volatile, vala_ccode_base_module_emit_context_type_id);
	}
	return vala_ccode_base_module_emit_context_type_id__volatile;
}

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;
	((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_formal_parameter = (void (*) (ValaCodeVisitor*, ValaParameter*)) vala_ccode_base_module_real_visit_formal_parameter;
	((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_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*)) 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 = (void (*) (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)->method_has_wrapper = (gboolean (*) (ValaCCodeBaseModule*, ValaMethod*)) vala_ccode_base_module_real_method_has_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*, ValaTypeSymbol*)) vala_ccode_base_module_real_get_signal_creation;
	((ValaCCodeBaseModuleClass *) klass)->register_dbus_info = (void (*) (ValaCCodeBaseModule*, ValaCCodeBlock*, ValaObjectTypeSymbol*)) vala_ccode_base_module_real_register_dbus_info;
	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_property_getter_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicProperty*)) vala_ccode_base_module_real_get_dynamic_property_getter_cname;
	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_property_setter_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicProperty*)) vala_ccode_base_module_real_get_dynamic_property_setter_cname;
	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_cname;
	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_connect_wrapper_name = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name;
	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_connect_after_wrapper_name = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name;
	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_disconnect_wrapper_name = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name;
	((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->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->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->gptrarray_type);
	_vala_code_node_unref0 (self->gthreadpool_type);
	_vala_code_node_unref0 (self->gdestroynotify_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.
 */
GType
vala_ccode_base_module_get_type (void)
{
	static volatile gsize vala_ccode_base_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_ccode_base_module_type_id__volatile)) {
		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));
		g_once_init_leave (&vala_ccode_base_module_type_id__volatile, vala_ccode_base_module_type_id);
	}
	return vala_ccode_base_module_type_id__volatile;
}

G_GNUC_INTERNAL ValaGLibValue*
vala_glib_value_construct (GType object_type,
                           ValaDataType* value_type,
                           ValaCCodeExpression* cvalue,
                           gboolean lvalue)
{
	ValaGLibValue* self = NULL;
	ValaCCodeExpression* _tmp0_;
	self = (ValaGLibValue*) vala_target_value_construct (object_type, value_type);
	_tmp0_ = _vala_ccode_node_ref0 (cvalue);
	_vala_ccode_node_unref0 (self->cvalue);
	self->cvalue = _tmp0_;
	self->lvalue = lvalue;
	return self;
}

G_GNUC_INTERNAL ValaGLibValue*
vala_glib_value_new (ValaDataType* value_type,
                     ValaCCodeExpression* cvalue,
                     gboolean lvalue)
{
	return vala_glib_value_construct (VALA_TYPE_GLIB_VALUE, value_type, cvalue, lvalue);
}

G_GNUC_INTERNAL void
vala_glib_value_append_array_length_cvalue (ValaGLibValue* self,
                                            ValaCCodeExpression* length_cvalue)
{
	ValaList* _tmp0_;
	ValaList* _tmp3_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (length_cvalue != NULL);
	_tmp0_ = self->array_length_cvalues;
	if (_tmp0_ == NULL) {
		GEqualFunc _tmp1_;
		ValaArrayList* _tmp2_;
		_tmp1_ = g_direct_equal;
		_tmp2_ = vala_array_list_new (VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp1_);
		_vala_iterable_unref0 (self->array_length_cvalues);
		self->array_length_cvalues = (ValaList*) _tmp2_;
	}
	_tmp3_ = self->array_length_cvalues;
	vala_collection_add ((ValaCollection*) _tmp3_, length_cvalue);
}

G_GNUC_INTERNAL ValaGLibValue*
vala_glib_value_copy (ValaGLibValue* self)
{
	ValaGLibValue* _result_ = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaCCodeExpression* _tmp4_;
	ValaGLibValue* _tmp5_;
	ValaGLibValue* _tmp6_;
	ValaGLibValue* _tmp7_;
	ValaDataType* _tmp8_;
	ValaDataType* _tmp9_;
	ValaGLibValue* _tmp10_;
	ValaGLibValue* _tmp11_;
	const gchar* _tmp12_;
	gchar* _tmp13_;
	ValaList* _tmp14_;
	ValaGLibValue* _tmp24_;
	ValaCCodeExpression* _tmp25_;
	ValaCCodeExpression* _tmp26_;
	ValaGLibValue* _tmp27_;
	ValaGLibValue* _tmp28_;
	ValaCCodeExpression* _tmp29_;
	ValaCCodeExpression* _tmp30_;
	ValaGLibValue* _tmp31_;
	ValaCCodeExpression* _tmp32_;
	ValaCCodeExpression* _tmp33_;
	ValaGLibValue* _tmp34_;
	ValaCCodeExpression* _tmp35_;
	ValaCCodeExpression* _tmp36_;
	ValaGLibValue* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = vala_target_value_get_value_type ((ValaTargetValue*) self);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_copy (_tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = self->cvalue;
	_tmp5_ = vala_glib_value_new (_tmp3_, _tmp4_, self->lvalue);
	_tmp6_ = _tmp5_;
	_vala_code_node_unref0 (_tmp3_);
	_result_ = _tmp6_;
	_tmp7_ = _result_;
	_tmp8_ = vala_target_value_get_actual_value_type ((ValaTargetValue*) self);
	_tmp9_ = _tmp8_;
	vala_target_value_set_actual_value_type ((ValaTargetValue*) _tmp7_, _tmp9_);
	_tmp10_ = _result_;
	_tmp10_->non_null = self->non_null;
	_tmp11_ = _result_;
	_tmp12_ = self->ctype;
	_tmp13_ = g_strdup (_tmp12_);
	_g_free0 (_tmp11_->ctype);
	_tmp11_->ctype = _tmp13_;
	_tmp14_ = self->array_length_cvalues;
	if (_tmp14_ != NULL) {
		{
			ValaList* _cexpr_list = NULL;
			ValaList* _tmp15_;
			ValaList* _tmp16_;
			gint _cexpr_size = 0;
			ValaList* _tmp17_;
			gint _tmp18_;
			gint _tmp19_;
			gint _cexpr_index = 0;
			_tmp15_ = self->array_length_cvalues;
			_tmp16_ = _vala_iterable_ref0 (_tmp15_);
			_cexpr_list = _tmp16_;
			_tmp17_ = _cexpr_list;
			_tmp18_ = vala_collection_get_size ((ValaCollection*) _tmp17_);
			_tmp19_ = _tmp18_;
			_cexpr_size = _tmp19_;
			_cexpr_index = -1;
			while (TRUE) {
				ValaCCodeExpression* cexpr = NULL;
				ValaList* _tmp20_;
				gpointer _tmp21_;
				ValaGLibValue* _tmp22_;
				ValaCCodeExpression* _tmp23_;
				_cexpr_index = _cexpr_index + 1;
				if (!(_cexpr_index < _cexpr_size)) {
					break;
				}
				_tmp20_ = _cexpr_list;
				_tmp21_ = vala_list_get (_tmp20_, _cexpr_index);
				cexpr = (ValaCCodeExpression*) _tmp21_;
				_tmp22_ = _result_;
				_tmp23_ = cexpr;
				vala_glib_value_append_array_length_cvalue (_tmp22_, _tmp23_);
				_vala_ccode_node_unref0 (cexpr);
			}
			_vala_iterable_unref0 (_cexpr_list);
		}
	}
	_tmp24_ = _result_;
	_tmp25_ = self->array_size_cvalue;
	_tmp26_ = _vala_ccode_node_ref0 (_tmp25_);
	_vala_ccode_node_unref0 (_tmp24_->array_size_cvalue);
	_tmp24_->array_size_cvalue = _tmp26_;
	_tmp27_ = _result_;
	_tmp27_->array_null_terminated = self->array_null_terminated;
	_tmp28_ = _result_;
	_tmp29_ = self->array_length_cexpr;
	_tmp30_ = _vala_ccode_node_ref0 (_tmp29_);
	_vala_ccode_node_unref0 (_tmp28_->array_length_cexpr);
	_tmp28_->array_length_cexpr = _tmp30_;
	_tmp31_ = _result_;
	_tmp32_ = self->delegate_target_cvalue;
	_tmp33_ = _vala_ccode_node_ref0 (_tmp32_);
	_vala_ccode_node_unref0 (_tmp31_->delegate_target_cvalue);
	_tmp31_->delegate_target_cvalue = _tmp33_;
	_tmp34_ = _result_;
	_tmp35_ = self->delegate_target_destroy_notify_cvalue;
	_tmp36_ = _vala_ccode_node_ref0 (_tmp35_);
	_vala_ccode_node_unref0 (_tmp34_->delegate_target_destroy_notify_cvalue);
	_tmp34_->delegate_target_destroy_notify_cvalue = _tmp36_;
	result = _result_;
	return result;
}

static void
vala_glib_value_class_init (ValaGLibValueClass * klass,
                            gpointer klass_data)
{
	vala_glib_value_parent_class = g_type_class_peek_parent (klass);
	((ValaTargetValueClass *) klass)->finalize = vala_glib_value_finalize;
}

static void
vala_glib_value_instance_init (ValaGLibValue * self,
                               gpointer klass)
{
}

static void
vala_glib_value_finalize (ValaTargetValue * obj)
{
	ValaGLibValue * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
	_vala_ccode_node_unref0 (self->cvalue);
	_g_free0 (self->ctype);
	_vala_iterable_unref0 (self->array_length_cvalues);
	_vala_ccode_node_unref0 (self->array_size_cvalue);
	_vala_ccode_node_unref0 (self->array_length_cexpr);
	_vala_ccode_node_unref0 (self->delegate_target_cvalue);
	_vala_ccode_node_unref0 (self->delegate_target_destroy_notify_cvalue);
	VALA_TARGET_VALUE_CLASS (vala_glib_value_parent_class)->finalize (obj);
}

G_GNUC_INTERNAL GType
vala_glib_value_get_type (void)
{
	static volatile gsize vala_glib_value_type_id__volatile = 0;
	if (g_once_init_enter (&vala_glib_value_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaGLibValueClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_glib_value_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGLibValue), 0, (GInstanceInitFunc) vala_glib_value_instance_init, NULL };
		GType vala_glib_value_type_id;
		vala_glib_value_type_id = g_type_register_static (VALA_TYPE_TARGET_VALUE, "ValaGLibValue", &g_define_type_info, 0);
		g_once_init_leave (&vala_glib_value_type_id__volatile, vala_glib_value_type_id);
	}
	return vala_glib_value_type_id__volatile;
}

static void
_vala_array_destroy (gpointer array,
                     gint array_length,
                     GDestroyNotify destroy_func)
{
	if ((array != NULL) && (destroy_func != NULL)) {
		int 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,
                  gint array_length,
                  GDestroyNotify destroy_func)
{
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}

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

