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

/* valagtypemodule.vala
 *
 * Copyright (C) 2006-2010  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 <valaccode.h>
#include <valagee.h>
#include <glib-object.h>
#include <glib.h>
#include <stdlib.h>
#include <string.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif

#define _g_free0(var) (var = (g_free (var), NULL))
#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_typeregister_function_unref0(var) ((var == NULL) ? NULL : (var = (vala_typeregister_function_unref (var), NULL)))
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_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_ccode_declarator_suffix_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_declarator_suffix_unref (var), NULL)))
#define _vala_map_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_iterator_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))
#define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))
#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);

static gpointer vala_gtype_module_parent_class = NULL;

static ValaCCodeParameter* vala_gtype_module_real_generate_parameter (ValaCCodeMethodModule* base,
                                                               ValaParameter* param,
                                                               ValaCCodeFile* decl_space,
                                                               ValaMap* cparam_map,
                                                               ValaMap* carg_map);
static void vala_gtype_module_real_generate_class_declaration (ValaCCodeBaseModule* base,
                                                        ValaClass* cl,
                                                        ValaCCodeFile* decl_space);
static gboolean vala_gtype_module_compact_class_has_instance_struct_member (ValaGTypeModule* self,
                                                                     ValaClass* cl);
static void vala_gtype_module_generate_autoptr_cleanup (ValaGTypeModule* self,
                                                 ValaObjectTypeSymbol* sym,
                                                 ValaClass* cl,
                                                 ValaCCodeFile* decl_space);
static void vala_gtype_module_real_generate_class_struct_declaration (ValaCCodeBaseModule* base,
                                                               ValaClass* cl,
                                                               ValaCCodeFile* decl_space);
static void vala_gtype_module_generate_struct_method_declaration (ValaGTypeModule* self,
                                                           ValaObjectTypeSymbol* type_sym,
                                                           ValaMethod* m,
                                                           ValaCCodeStruct* instance_struct,
                                                           ValaCCodeStruct* type_struct,
                                                           ValaCCodeFile* decl_space);
static void vala_gtype_module_generate_struct_property_declaration (ValaGTypeModule* self,
                                                             ValaObjectTypeSymbol* type_sym,
                                                             ValaProperty* prop,
                                                             ValaCCodeStruct* instance_struct,
                                                             ValaCCodeStruct* type_struct,
                                                             ValaCCodeFile* decl_space);
static void vala_gtype_module_generate_struct_field_declaration (ValaGTypeModule* self,
                                                          ValaField* f,
                                                          ValaCCodeStruct* instance_struct,
                                                          ValaCCodeStruct* type_struct,
                                                          ValaCCodeFile* decl_space);
static gboolean vala_gtype_module_real_generate_method_declaration (ValaCCodeBaseModule* base,
                                                             ValaMethod* m,
                                                             ValaCCodeFile* decl_space);
static void vala_gtype_module_real_generate_virtual_method_declaration (ValaGTypeModule* self,
                                                                 ValaMethod* m,
                                                                 ValaCCodeFile* decl_space,
                                                                 ValaCCodeStruct* type_struct);
static void vala_gtype_module_generate_class_private_declaration (ValaGTypeModule* self,
                                                           ValaClass* cl,
                                                           ValaCCodeFile* decl_space);
static void vala_gtype_module_real_visit_class (ValaCodeVisitor* base,
                                         ValaClass* cl);
static void vala_gtype_module_begin_base_init_function (ValaGTypeModule* self,
                                                 ValaClass* cl);
static void vala_gtype_module_begin_class_init_function (ValaGTypeModule* self,
                                                  ValaClass* cl);
static void vala_gtype_module_begin_instance_init_function (ValaGTypeModule* self,
                                                     ValaClass* cl);
static void vala_gtype_module_begin_base_finalize_function (ValaGTypeModule* self,
                                                     ValaClass* cl);
static void vala_gtype_module_begin_class_finalize_function (ValaGTypeModule* self,
                                                      ValaClass* cl);
static void vala_gtype_module_begin_finalize_function (ValaGTypeModule* self,
                                                ValaClass* cl);
static void vala_gtype_module_add_type_value_table_init_function (ValaGTypeModule* self,
                                                           ValaClass* cl);
static void vala_gtype_module_add_type_value_table_free_function (ValaGTypeModule* self,
                                                           ValaClass* cl);
static void vala_gtype_module_add_type_value_table_copy_function (ValaGTypeModule* self,
                                                           ValaClass* cl);
static void vala_gtype_module_add_type_value_table_peek_pointer_function (ValaGTypeModule* self,
                                                                   ValaClass* cl);
static void vala_gtype_module_add_type_value_table_collect_value_function (ValaGTypeModule* self,
                                                                    ValaClass* cl);
static void vala_gtype_module_add_type_value_table_lcopy_value_function (ValaGTypeModule* self,
                                                                  ValaClass* cl);
static void vala_gtype_module_add_g_param_spec_type_function (ValaGTypeModule* self,
                                                       ValaClass* cl);
static void vala_gtype_module_add_g_value_get_function (ValaGTypeModule* self,
                                                 ValaClass* cl);
static void vala_gtype_module_add_g_value_set_function (ValaGTypeModule* self,
                                                 ValaClass* cl);
static void vala_gtype_module_add_g_value_take_function (ValaGTypeModule* self,
                                                  ValaClass* cl);
static void vala_gtype_module_add_base_init_function (ValaGTypeModule* self,
                                               ValaClass* cl);
static void vala_gtype_module_add_class_init_function (ValaGTypeModule* self,
                                                ValaClass* cl);
static void vala_gtype_module_add_base_finalize_function (ValaGTypeModule* self,
                                                   ValaClass* cl);
static void vala_gtype_module_add_class_finalize_function (ValaGTypeModule* self,
                                                    ValaClass* cl);
static void vala_gtype_module_add_interface_init_function (ValaGTypeModule* self,
                                                    ValaClass* cl,
                                                    ValaInterface* iface);
static void vala_gtype_module_add_instance_init_function (ValaGTypeModule* self,
                                                   ValaClass* cl);
static void vala_gtype_module_add_finalize_function (ValaGTypeModule* self,
                                              ValaClass* cl);
static void vala_gtype_module_real_generate_class_init (ValaGTypeModule* self,
                                                 ValaClass* cl);
static void vala_gtype_module_real_end_instance_init (ValaGTypeModule* self,
                                               ValaClass* cl);
static ValaCCodeExpression* vala_gtype_module_cast_method_pointer (ValaGTypeModule* self,
                                                            ValaMethod* m,
                                                            ValaCCodeExpression* cfunc,
                                                            ValaObjectTypeSymbol* base_type,
                                                            gint direction);
static void vala_gtype_module_add_generic_accessor_function (ValaGTypeModule* self,
                                                      const gchar* base_name,
                                                      const gchar* return_type,
                                                      ValaCCodeExpression* expression,
                                                      ValaTypeParameter* p,
                                                      ValaClass* cl,
                                                      ValaInterface* iface);
static ValaCCodeExpression* vala_gtype_module_real_get_param_spec_cexpression (ValaCCodeBaseModule* base,
                                                                        ValaProperty* prop);
static ValaCCodeExpression* vala_gtype_module_real_get_param_spec (ValaCCodeBaseModule* base,
                                                            ValaProperty* prop);
static void vala_gtype_module_real_generate_interface_declaration (ValaCCodeBaseModule* base,
                                                            ValaInterface* iface,
                                                            ValaCCodeFile* decl_space);
static void vala_gtype_module_real_visit_interface (ValaCodeVisitor* base,
                                             ValaInterface* iface);
static void vala_gtype_module_add_interface_default_init_function (ValaGTypeModule* self,
                                                            ValaInterface* iface);
static void vala_gtype_module_real_visit_struct (ValaCodeVisitor* base,
                                          ValaStruct* st);
static void vala_gtype_module_real_visit_enum (ValaCodeVisitor* base,
                                        ValaEnum* en);
static void vala_gtype_module_real_visit_error_domain (ValaCodeVisitor* base,
                                                ValaErrorDomain* edomain);
static void vala_gtype_module_real_visit_method_call (ValaCodeVisitor* base,
                                               ValaMethodCall* expr);
static void vala_gtype_module_real_visit_property (ValaCodeVisitor* base,
                                            ValaProperty* prop);
static void vala_gtype_module_real_create_type_check_statement (ValaCCodeBaseModule* base,
                                                         ValaCodeNode* method_node,
                                                         ValaDataType* ret_type,
                                                         ValaTypeSymbol* t,
                                                         gboolean non_null,
                                                         const gchar* var_name);
static void vala_gtype_module_real_visit_cast_expression (ValaCodeVisitor* base,
                                                   ValaCastExpression* expr);
static GType vala_gtype_module_get_type_once (void);

static ValaCCodeParameter*
vala_gtype_module_real_generate_parameter (ValaCCodeMethodModule* base,
                                           ValaParameter* param,
                                           ValaCCodeFile* decl_space,
                                           ValaMap* cparam_map,
                                           ValaMap* carg_map)
{
	ValaGTypeModule * self;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp3_;
	ValaDataType* _tmp4_;
	gchar* ctypename = NULL;
	gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaCCodeParameter* cparam = NULL;
	gchar* _tmp14_;
	gchar* _tmp15_;
	const gchar* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeParameter* _tmp18_;
	gboolean _tmp19_;
	gboolean _tmp20_;
	ValaCCodeParameter* _tmp22_;
	ValaCCodeParameter* result;
	self = (ValaGTypeModule*) base;
	g_return_val_if_fail (param != NULL, NULL);
	g_return_val_if_fail (decl_space != NULL, NULL);
	g_return_val_if_fail (cparam_map != NULL, NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp1_ = _tmp0_;
	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_OBJECT_TYPE)) {
		ValaCCodeParameter* _tmp2_;
		_tmp2_ = VALA_CCODE_METHOD_MODULE_CLASS (vala_gtype_module_parent_class)->generate_parameter ((ValaCCodeMethodModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), param, decl_space, cparam_map, carg_map);
		result = _tmp2_;
		return result;
	}
	_tmp3_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp4_, decl_space);
	_tmp5_ = vala_get_ccode_type ((ValaCodeNode*) param);
	ctypename = _tmp5_;
	_tmp6_ = ctypename;
	if (_tmp6_ == NULL) {
		ValaDataType* _tmp7_;
		ValaDataType* _tmp8_;
		gchar* _tmp9_;
		ValaParameterDirection _tmp10_;
		ValaParameterDirection _tmp11_;
		_tmp7_ = vala_variable_get_variable_type ((ValaVariable*) param);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
		_g_free0 (ctypename);
		ctypename = _tmp9_;
		_tmp10_ = vala_parameter_get_direction (param);
		_tmp11_ = _tmp10_;
		if (_tmp11_ != VALA_PARAMETER_DIRECTION_IN) {
			const gchar* _tmp12_;
			gchar* _tmp13_;
			_tmp12_ = ctypename;
			_tmp13_ = g_strdup_printf ("%s*", _tmp12_);
			_g_free0 (ctypename);
			ctypename = _tmp13_;
		}
	}
	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) param);
	_tmp15_ = _tmp14_;
	_tmp16_ = ctypename;
	_tmp17_ = vala_ccode_parameter_new (_tmp15_, _tmp16_);
	_tmp18_ = _tmp17_;
	_g_free0 (_tmp15_);
	cparam = _tmp18_;
	_tmp19_ = vala_parameter_get_format_arg (param);
	_tmp20_ = _tmp19_;
	if (_tmp20_) {
		ValaCCodeParameter* _tmp21_;
		_tmp21_ = cparam;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp21_, VALA_CCODE_MODIFIERS_FORMAT_ARG);
	}
	_tmp22_ = cparam;
	vala_map_set (cparam_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, vala_get_ccode_pos (param), FALSE)), _tmp22_);
	if (carg_map != NULL) {
		ValaCCodeExpression* _tmp23_;
		ValaCCodeExpression* _tmp24_;
		_tmp23_ = vala_ccode_base_module_get_parameter_cexpression ((ValaCCodeBaseModule*) self, param);
		_tmp24_ = _tmp23_;
		vala_map_set (carg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, vala_get_ccode_pos (param), FALSE)), _tmp24_);
		_vala_ccode_node_unref0 (_tmp24_);
	}
	result = cparam;
	_g_free0 (ctypename);
	return result;
}

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

static void
vala_gtype_module_real_generate_class_declaration (ValaCCodeBaseModule* base,
                                                   ValaClass* cl,
                                                   ValaCCodeFile* decl_space)
{
	ValaGTypeModule * self;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gboolean _tmp2_;
	ValaClass* _tmp3_;
	ValaClass* _tmp4_;
	gboolean _tmp7_ = FALSE;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	gboolean _tmp10_;
	gboolean _tmp11_;
	gboolean final_not_public = FALSE;
	gboolean is_gtypeinstance = FALSE;
	gboolean _tmp20_;
	gboolean _tmp21_;
	gboolean _tmp22_ = FALSE;
	gboolean is_fundamental = FALSE;
	gboolean is_gsource = FALSE;
	ValaClass* _tmp25_;
	gboolean _tmp95_ = FALSE;
	gboolean _tmp96_ = FALSE;
	gboolean _tmp97_;
	gboolean _tmp98_;
	ValaClass* base_class = NULL;
	ValaClass* _tmp267_;
	ValaClass* _tmp275_;
	self = (ValaGTypeModule*) base;
	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 ((ValaCCodeBaseModule*) self, decl_space, (ValaSymbol*) cl, _tmp1_);
	_g_free0 (_tmp1_);
	if (_tmp2_) {
		return;
	}
	_tmp3_ = vala_class_get_base_class (cl);
	_tmp4_ = _tmp3_;
	if (_tmp4_ != NULL) {
		ValaClass* _tmp5_;
		ValaClass* _tmp6_;
		_tmp5_ = vala_class_get_base_class (cl);
		_tmp6_ = _tmp5_;
		vala_ccode_base_module_generate_class_declaration ((ValaCCodeBaseModule*) self, _tmp6_, decl_space);
	}
	_tmp10_ = vala_class_get_is_opaque (cl);
	_tmp11_ = _tmp10_;
	if (_tmp11_) {
		_tmp9_ = TRUE;
	} else {
		gboolean _tmp12_;
		gboolean _tmp13_;
		_tmp12_ = vala_class_get_is_sealed (cl);
		_tmp13_ = _tmp12_;
		_tmp9_ = _tmp13_;
	}
	if (_tmp9_) {
		ValaCodeContext* _tmp14_;
		ValaCodeContext* _tmp15_;
		const gchar* _tmp16_;
		const gchar* _tmp17_;
		_tmp14_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp15_ = _tmp14_;
		_tmp16_ = vala_code_context_get_header_filename (_tmp15_);
		_tmp17_ = _tmp16_;
		_tmp8_ = _tmp17_ != NULL;
	} else {
		_tmp8_ = FALSE;
	}
	if (_tmp8_) {
		CCodeFileType _tmp18_;
		CCodeFileType _tmp19_;
		_tmp18_ = vala_ccode_file_get_file_type (decl_space);
		_tmp19_ = _tmp18_;
		_tmp7_ = _tmp19_ != CCODE_FILE_TYPE_PUBLIC_HEADER;
	} else {
		_tmp7_ = FALSE;
	}
	final_not_public = _tmp7_;
	_tmp20_ = vala_class_get_is_compact (cl);
	_tmp21_ = _tmp20_;
	is_gtypeinstance = !_tmp21_;
	if (is_gtypeinstance) {
		ValaClass* _tmp23_;
		ValaClass* _tmp24_;
		_tmp23_ = vala_class_get_base_class (cl);
		_tmp24_ = _tmp23_;
		_tmp22_ = _tmp24_ == NULL;
	} else {
		_tmp22_ = FALSE;
	}
	is_fundamental = _tmp22_;
	_tmp25_ = ((ValaCCodeBaseModule*) self)->gsource_type;
	is_gsource = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, (ValaTypeSymbol*) _tmp25_);
	if (final_not_public) {
	} else {
		if (is_gtypeinstance) {
			ValaCCodeNewline* _tmp26_;
			ValaCCodeNewline* _tmp27_;
			gchar* macro = NULL;
			gchar* _tmp28_;
			gchar* _tmp29_;
			gchar* _tmp30_;
			gchar* _tmp31_;
			gchar* _tmp32_;
			gchar* _tmp33_;
			const gchar* _tmp34_;
			ValaCCodeMacroReplacement* _tmp35_;
			ValaCCodeMacroReplacement* _tmp36_;
			gchar* _tmp37_;
			gchar* _tmp38_;
			gchar* _tmp39_;
			gchar* _tmp40_;
			gchar* _tmp41_;
			gchar* _tmp42_;
			gchar* _tmp43_;
			gchar* _tmp44_;
			gchar* _tmp45_;
			const gchar* _tmp46_;
			ValaCCodeMacroReplacement* _tmp47_;
			ValaCCodeMacroReplacement* _tmp48_;
			gchar* _tmp49_;
			gchar* _tmp50_;
			gchar* _tmp51_;
			gchar* _tmp52_;
			gchar* _tmp53_;
			gchar* _tmp54_;
			gchar* _tmp55_;
			gchar* _tmp56_;
			gchar* _tmp57_;
			const gchar* _tmp58_;
			ValaCCodeMacroReplacement* _tmp59_;
			ValaCCodeMacroReplacement* _tmp60_;
			gchar* _tmp61_;
			gchar* _tmp62_;
			gchar* _tmp63_;
			gchar* _tmp64_;
			gchar* _tmp65_;
			gchar* _tmp66_;
			gchar* _tmp67_;
			const gchar* _tmp68_;
			ValaCCodeMacroReplacement* _tmp69_;
			ValaCCodeMacroReplacement* _tmp70_;
			gchar* _tmp71_;
			gchar* _tmp72_;
			gchar* _tmp73_;
			gchar* _tmp74_;
			gchar* _tmp75_;
			gchar* _tmp76_;
			gchar* _tmp77_;
			const gchar* _tmp78_;
			ValaCCodeMacroReplacement* _tmp79_;
			ValaCCodeMacroReplacement* _tmp80_;
			gchar* _tmp81_;
			gchar* _tmp82_;
			gchar* _tmp83_;
			gchar* _tmp84_;
			gchar* _tmp85_;
			gchar* _tmp86_;
			gchar* _tmp87_;
			gchar* _tmp88_;
			gchar* _tmp89_;
			const gchar* _tmp90_;
			ValaCCodeMacroReplacement* _tmp91_;
			ValaCCodeMacroReplacement* _tmp92_;
			ValaCCodeNewline* _tmp93_;
			ValaCCodeNewline* _tmp94_;
			vala_ccode_file_add_include (decl_space, "glib-object.h", FALSE);
			_tmp26_ = vala_ccode_newline_new ();
			_tmp27_ = _tmp26_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp27_);
			_vala_ccode_node_unref0 (_tmp27_);
			_tmp28_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
			_tmp29_ = _tmp28_;
			_tmp30_ = g_strdup_printf ("(%s_get_type ())", _tmp29_);
			_tmp31_ = _tmp30_;
			_g_free0 (_tmp29_);
			macro = _tmp31_;
			_tmp32_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp33_ = _tmp32_;
			_tmp34_ = macro;
			_tmp35_ = vala_ccode_macro_replacement_new (_tmp33_, _tmp34_);
			_tmp36_ = _tmp35_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp36_);
			_vala_ccode_node_unref0 (_tmp36_);
			_g_free0 (_tmp33_);
			_tmp37_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp38_ = _tmp37_;
			_tmp39_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp40_ = _tmp39_;
			_tmp41_ = g_strdup_printf ("(G_TYPE_CHECK_INSTANCE_CAST ((obj), %s, %s))", _tmp38_, _tmp40_);
			_g_free0 (macro);
			macro = _tmp41_;
			_g_free0 (_tmp40_);
			_g_free0 (_tmp38_);
			_tmp42_ = vala_get_ccode_type_cast_function ((ValaObjectTypeSymbol*) cl);
			_tmp43_ = _tmp42_;
			_tmp44_ = g_strdup_printf ("%s(obj)", _tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = macro;
			_tmp47_ = vala_ccode_macro_replacement_new (_tmp45_, _tmp46_);
			_tmp48_ = _tmp47_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp48_);
			_vala_ccode_node_unref0 (_tmp48_);
			_g_free0 (_tmp45_);
			_g_free0 (_tmp43_);
			_tmp49_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp50_ = _tmp49_;
			_tmp51_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
			_tmp52_ = _tmp51_;
			_tmp53_ = g_strdup_printf ("(G_TYPE_CHECK_CLASS_CAST ((klass), %s, %s))", _tmp50_, _tmp52_);
			_g_free0 (macro);
			macro = _tmp53_;
			_g_free0 (_tmp52_);
			_g_free0 (_tmp50_);
			_tmp54_ = vala_get_ccode_class_type_function (cl);
			_tmp55_ = _tmp54_;
			_tmp56_ = g_strdup_printf ("%s(klass)", _tmp55_);
			_tmp57_ = _tmp56_;
			_tmp58_ = macro;
			_tmp59_ = vala_ccode_macro_replacement_new (_tmp57_, _tmp58_);
			_tmp60_ = _tmp59_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp60_);
			_vala_ccode_node_unref0 (_tmp60_);
			_g_free0 (_tmp57_);
			_g_free0 (_tmp55_);
			_tmp61_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp62_ = _tmp61_;
			_tmp63_ = g_strdup_printf ("(G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))", _tmp62_);
			_g_free0 (macro);
			macro = _tmp63_;
			_g_free0 (_tmp62_);
			_tmp64_ = vala_get_ccode_type_check_function ((ValaTypeSymbol*) cl);
			_tmp65_ = _tmp64_;
			_tmp66_ = g_strdup_printf ("%s(obj)", _tmp65_);
			_tmp67_ = _tmp66_;
			_tmp68_ = macro;
			_tmp69_ = vala_ccode_macro_replacement_new (_tmp67_, _tmp68_);
			_tmp70_ = _tmp69_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp70_);
			_vala_ccode_node_unref0 (_tmp70_);
			_g_free0 (_tmp67_);
			_g_free0 (_tmp65_);
			_tmp71_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp72_ = _tmp71_;
			_tmp73_ = g_strdup_printf ("(G_TYPE_CHECK_CLASS_TYPE ((klass), %s))", _tmp72_);
			_g_free0 (macro);
			macro = _tmp73_;
			_g_free0 (_tmp72_);
			_tmp74_ = vala_get_ccode_class_type_check_function (cl);
			_tmp75_ = _tmp74_;
			_tmp76_ = g_strdup_printf ("%s(klass)", _tmp75_);
			_tmp77_ = _tmp76_;
			_tmp78_ = macro;
			_tmp79_ = vala_ccode_macro_replacement_new (_tmp77_, _tmp78_);
			_tmp80_ = _tmp79_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp80_);
			_vala_ccode_node_unref0 (_tmp80_);
			_g_free0 (_tmp77_);
			_g_free0 (_tmp75_);
			_tmp81_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp82_ = _tmp81_;
			_tmp83_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
			_tmp84_ = _tmp83_;
			_tmp85_ = g_strdup_printf ("(G_TYPE_INSTANCE_GET_CLASS ((obj), %s, %s))", _tmp82_, _tmp84_);
			_g_free0 (macro);
			macro = _tmp85_;
			_g_free0 (_tmp84_);
			_g_free0 (_tmp82_);
			_tmp86_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) cl);
			_tmp87_ = _tmp86_;
			_tmp88_ = g_strdup_printf ("%s(obj)", _tmp87_);
			_tmp89_ = _tmp88_;
			_tmp90_ = macro;
			_tmp91_ = vala_ccode_macro_replacement_new (_tmp89_, _tmp90_);
			_tmp92_ = _tmp91_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp92_);
			_vala_ccode_node_unref0 (_tmp92_);
			_g_free0 (_tmp89_);
			_g_free0 (_tmp87_);
			_tmp93_ = vala_ccode_newline_new ();
			_tmp94_ = _tmp93_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp94_);
			_vala_ccode_node_unref0 (_tmp94_);
			_g_free0 (macro);
		}
	}
	_tmp97_ = vala_class_get_is_compact (cl);
	_tmp98_ = _tmp97_;
	if (!_tmp98_) {
		_tmp96_ = TRUE;
	} else {
		ValaClass* _tmp99_;
		ValaClass* _tmp100_;
		_tmp99_ = vala_class_get_base_class (cl);
		_tmp100_ = _tmp99_;
		_tmp96_ = _tmp100_ == NULL;
	}
	if (_tmp96_) {
		_tmp95_ = TRUE;
	} else {
		_tmp95_ = vala_gtype_module_compact_class_has_instance_struct_member (self, cl);
	}
	if (!_tmp95_) {
		ValaClass* _tmp101_;
		ValaClass* _tmp102_;
		gchar* _tmp103_;
		gchar* _tmp104_;
		gchar* _tmp105_;
		gchar* _tmp106_;
		ValaCCodeVariableDeclarator* _tmp107_;
		ValaCCodeVariableDeclarator* _tmp108_;
		ValaCCodeTypeDefinition* _tmp109_;
		ValaCCodeTypeDefinition* _tmp110_;
		_tmp101_ = vala_class_get_base_class (cl);
		_tmp102_ = _tmp101_;
		_tmp103_ = vala_get_ccode_name ((ValaCodeNode*) _tmp102_);
		_tmp104_ = _tmp103_;
		_tmp105_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp106_ = _tmp105_;
		_tmp107_ = vala_ccode_variable_declarator_new (_tmp106_, NULL, NULL);
		_tmp108_ = _tmp107_;
		_tmp109_ = vala_ccode_type_definition_new (_tmp104_, (ValaCCodeDeclarator*) _tmp108_);
		_tmp110_ = _tmp109_;
		vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp110_);
		_vala_ccode_node_unref0 (_tmp110_);
		_vala_ccode_node_unref0 (_tmp108_);
		_g_free0 (_tmp106_);
		_g_free0 (_tmp104_);
	} else {
		gchar* _tmp111_;
		gchar* _tmp112_;
		gchar* _tmp113_;
		gchar* _tmp114_;
		gchar* _tmp115_;
		gchar* _tmp116_;
		ValaCCodeVariableDeclarator* _tmp117_;
		ValaCCodeVariableDeclarator* _tmp118_;
		ValaCCodeTypeDefinition* _tmp119_;
		ValaCCodeTypeDefinition* _tmp120_;
		_tmp111_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp112_ = _tmp111_;
		_tmp113_ = g_strdup_printf ("struct _%s", _tmp112_);
		_tmp114_ = _tmp113_;
		_tmp115_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp116_ = _tmp115_;
		_tmp117_ = vala_ccode_variable_declarator_new (_tmp116_, NULL, NULL);
		_tmp118_ = _tmp117_;
		_tmp119_ = vala_ccode_type_definition_new (_tmp114_, (ValaCCodeDeclarator*) _tmp118_);
		_tmp120_ = _tmp119_;
		vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp120_);
		_vala_ccode_node_unref0 (_tmp120_);
		_vala_ccode_node_unref0 (_tmp118_);
		_g_free0 (_tmp116_);
		_g_free0 (_tmp114_);
		_g_free0 (_tmp112_);
	}
	if (final_not_public) {
	} else {
		if (is_fundamental) {
			ValaCCodeFunction* ref_fun = NULL;
			gchar* _tmp121_;
			gchar* _tmp122_;
			ValaCCodeFunction* _tmp123_;
			ValaCCodeFunction* _tmp124_;
			ValaCCodeFunction* unref_fun = NULL;
			gchar* _tmp125_;
			gchar* _tmp126_;
			ValaCCodeFunction* _tmp127_;
			ValaCCodeFunction* _tmp128_;
			ValaCCodeFunction* _tmp140_;
			ValaCCodeParameter* _tmp141_;
			ValaCCodeParameter* _tmp142_;
			ValaCCodeFunction* _tmp143_;
			ValaCCodeParameter* _tmp144_;
			ValaCCodeParameter* _tmp145_;
			ValaCCodeFunction* _tmp146_;
			ValaCCodeFunction* _tmp147_;
			ValaCCodeFunction* function = NULL;
			gchar* _tmp148_;
			gchar* _tmp149_;
			ValaCCodeFunction* _tmp150_;
			ValaCCodeFunction* _tmp151_;
			ValaCCodeFunction* _tmp152_;
			ValaCCodeParameter* _tmp153_;
			ValaCCodeParameter* _tmp154_;
			ValaCCodeFunction* _tmp155_;
			ValaCCodeParameter* _tmp156_;
			ValaCCodeParameter* _tmp157_;
			ValaCCodeFunction* _tmp158_;
			ValaCCodeParameter* _tmp159_;
			ValaCCodeParameter* _tmp160_;
			ValaCCodeFunction* _tmp161_;
			ValaCCodeParameter* _tmp162_;
			ValaCCodeParameter* _tmp163_;
			ValaCCodeFunction* _tmp164_;
			ValaCCodeParameter* _tmp165_;
			ValaCCodeParameter* _tmp166_;
			ValaCCodeFunction* _tmp175_;
			gchar* _tmp176_;
			gchar* _tmp177_;
			ValaCCodeFunction* _tmp178_;
			ValaCCodeFunction* _tmp179_;
			ValaCCodeParameter* _tmp180_;
			ValaCCodeParameter* _tmp181_;
			ValaCCodeFunction* _tmp182_;
			ValaCCodeParameter* _tmp183_;
			ValaCCodeParameter* _tmp184_;
			ValaCCodeFunction* _tmp193_;
			gchar* _tmp194_;
			gchar* _tmp195_;
			ValaCCodeFunction* _tmp196_;
			ValaCCodeFunction* _tmp197_;
			ValaCCodeParameter* _tmp198_;
			ValaCCodeParameter* _tmp199_;
			ValaCCodeFunction* _tmp200_;
			ValaCCodeParameter* _tmp201_;
			ValaCCodeParameter* _tmp202_;
			ValaCCodeFunction* _tmp211_;
			gchar* _tmp212_;
			gchar* _tmp213_;
			ValaCCodeFunction* _tmp214_;
			ValaCCodeFunction* _tmp215_;
			ValaCCodeParameter* _tmp216_;
			ValaCCodeParameter* _tmp217_;
			ValaCCodeFunction* _tmp226_;
			_tmp121_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
			_tmp122_ = _tmp121_;
			_tmp123_ = vala_ccode_function_new (_tmp122_, "gpointer");
			_tmp124_ = _tmp123_;
			_g_free0 (_tmp122_);
			ref_fun = _tmp124_;
			_tmp125_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
			_tmp126_ = _tmp125_;
			_tmp127_ = vala_ccode_function_new (_tmp126_, "void");
			_tmp128_ = _tmp127_;
			_g_free0 (_tmp126_);
			unref_fun = _tmp128_;
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp129_;
				ValaCCodeFunction* _tmp130_;
				_tmp129_ = ref_fun;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp129_, VALA_CCODE_MODIFIERS_STATIC);
				_tmp130_ = unref_fun;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp130_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp131_ = FALSE;
				ValaCodeContext* _tmp132_;
				ValaCodeContext* _tmp133_;
				gboolean _tmp134_;
				gboolean _tmp135_;
				_tmp132_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp133_ = _tmp132_;
				_tmp134_ = vala_code_context_get_hide_internal (_tmp133_);
				_tmp135_ = _tmp134_;
				if (_tmp135_) {
					_tmp131_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp131_ = FALSE;
				}
				if (_tmp131_) {
					ValaCCodeFunction* _tmp136_;
					ValaCCodeFunction* _tmp137_;
					_tmp136_ = ref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp136_, VALA_CCODE_MODIFIERS_INTERNAL);
					_tmp137_ = unref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp137_, VALA_CCODE_MODIFIERS_INTERNAL);
				} else {
					ValaCCodeFunction* _tmp138_;
					ValaCCodeFunction* _tmp139_;
					_tmp138_ = ref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp138_, VALA_CCODE_MODIFIERS_EXTERN);
					_tmp139_ = unref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp139_, VALA_CCODE_MODIFIERS_EXTERN);
					((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
				}
			}
			_tmp140_ = ref_fun;
			_tmp141_ = vala_ccode_parameter_new ("instance", "gpointer");
			_tmp142_ = _tmp141_;
			vala_ccode_function_add_parameter (_tmp140_, _tmp142_);
			_vala_ccode_node_unref0 (_tmp142_);
			_tmp143_ = unref_fun;
			_tmp144_ = vala_ccode_parameter_new ("instance", "gpointer");
			_tmp145_ = _tmp144_;
			vala_ccode_function_add_parameter (_tmp143_, _tmp145_);
			_vala_ccode_node_unref0 (_tmp145_);
			_tmp146_ = ref_fun;
			vala_ccode_file_add_function_declaration (decl_space, _tmp146_);
			_tmp147_ = unref_fun;
			vala_ccode_file_add_function_declaration (decl_space, _tmp147_);
			_tmp148_ = vala_get_ccode_param_spec_function ((ValaCodeNode*) cl);
			_tmp149_ = _tmp148_;
			_tmp150_ = vala_ccode_function_new (_tmp149_, "GParamSpec*");
			_tmp151_ = _tmp150_;
			_g_free0 (_tmp149_);
			function = _tmp151_;
			_tmp152_ = function;
			_tmp153_ = vala_ccode_parameter_new ("name", "const gchar*");
			_tmp154_ = _tmp153_;
			vala_ccode_function_add_parameter (_tmp152_, _tmp154_);
			_vala_ccode_node_unref0 (_tmp154_);
			_tmp155_ = function;
			_tmp156_ = vala_ccode_parameter_new ("nick", "const gchar*");
			_tmp157_ = _tmp156_;
			vala_ccode_function_add_parameter (_tmp155_, _tmp157_);
			_vala_ccode_node_unref0 (_tmp157_);
			_tmp158_ = function;
			_tmp159_ = vala_ccode_parameter_new ("blurb", "const gchar*");
			_tmp160_ = _tmp159_;
			vala_ccode_function_add_parameter (_tmp158_, _tmp160_);
			_vala_ccode_node_unref0 (_tmp160_);
			_tmp161_ = function;
			_tmp162_ = vala_ccode_parameter_new ("object_type", "GType");
			_tmp163_ = _tmp162_;
			vala_ccode_function_add_parameter (_tmp161_, _tmp163_);
			_vala_ccode_node_unref0 (_tmp163_);
			_tmp164_ = function;
			_tmp165_ = vala_ccode_parameter_new ("flags", "GParamFlags");
			_tmp166_ = _tmp165_;
			vala_ccode_function_add_parameter (_tmp164_, _tmp166_);
			_vala_ccode_node_unref0 (_tmp166_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp167_;
				_tmp167_ = function;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp167_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_UNUSED);
			} else {
				gboolean _tmp168_ = FALSE;
				ValaCodeContext* _tmp169_;
				ValaCodeContext* _tmp170_;
				gboolean _tmp171_;
				gboolean _tmp172_;
				_tmp169_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp170_ = _tmp169_;
				_tmp171_ = vala_code_context_get_hide_internal (_tmp170_);
				_tmp172_ = _tmp171_;
				if (_tmp172_) {
					_tmp168_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp168_ = FALSE;
				}
				if (_tmp168_) {
					ValaCCodeFunction* _tmp173_;
					_tmp173_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp173_, VALA_CCODE_MODIFIERS_INTERNAL);
				} else {
					ValaCCodeFunction* _tmp174_;
					_tmp174_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp174_, VALA_CCODE_MODIFIERS_EXTERN);
					((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
				}
			}
			_tmp175_ = function;
			vala_ccode_file_add_function_declaration (decl_space, _tmp175_);
			_tmp176_ = vala_get_ccode_set_value_function ((ValaCodeNode*) cl);
			_tmp177_ = _tmp176_;
			_tmp178_ = vala_ccode_function_new (_tmp177_, "void");
			_vala_ccode_node_unref0 (function);
			function = _tmp178_;
			_g_free0 (_tmp177_);
			_tmp179_ = function;
			_tmp180_ = vala_ccode_parameter_new ("value", "GValue*");
			_tmp181_ = _tmp180_;
			vala_ccode_function_add_parameter (_tmp179_, _tmp181_);
			_vala_ccode_node_unref0 (_tmp181_);
			_tmp182_ = function;
			_tmp183_ = vala_ccode_parameter_new ("v_object", "gpointer");
			_tmp184_ = _tmp183_;
			vala_ccode_function_add_parameter (_tmp182_, _tmp184_);
			_vala_ccode_node_unref0 (_tmp184_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp185_;
				_tmp185_ = function;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp185_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_UNUSED);
			} else {
				gboolean _tmp186_ = FALSE;
				ValaCodeContext* _tmp187_;
				ValaCodeContext* _tmp188_;
				gboolean _tmp189_;
				gboolean _tmp190_;
				_tmp187_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp188_ = _tmp187_;
				_tmp189_ = vala_code_context_get_hide_internal (_tmp188_);
				_tmp190_ = _tmp189_;
				if (_tmp190_) {
					_tmp186_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp186_ = FALSE;
				}
				if (_tmp186_) {
					ValaCCodeFunction* _tmp191_;
					_tmp191_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp191_, VALA_CCODE_MODIFIERS_INTERNAL | VALA_CCODE_MODIFIERS_UNUSED);
				} else {
					ValaCCodeFunction* _tmp192_;
					_tmp192_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp192_, VALA_CCODE_MODIFIERS_EXTERN);
					((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
				}
			}
			_tmp193_ = function;
			vala_ccode_file_add_function_declaration (decl_space, _tmp193_);
			_tmp194_ = vala_get_ccode_take_value_function ((ValaCodeNode*) cl);
			_tmp195_ = _tmp194_;
			_tmp196_ = vala_ccode_function_new (_tmp195_, "void");
			_vala_ccode_node_unref0 (function);
			function = _tmp196_;
			_g_free0 (_tmp195_);
			_tmp197_ = function;
			_tmp198_ = vala_ccode_parameter_new ("value", "GValue*");
			_tmp199_ = _tmp198_;
			vala_ccode_function_add_parameter (_tmp197_, _tmp199_);
			_vala_ccode_node_unref0 (_tmp199_);
			_tmp200_ = function;
			_tmp201_ = vala_ccode_parameter_new ("v_object", "gpointer");
			_tmp202_ = _tmp201_;
			vala_ccode_function_add_parameter (_tmp200_, _tmp202_);
			_vala_ccode_node_unref0 (_tmp202_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp203_;
				_tmp203_ = function;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp203_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_UNUSED);
			} else {
				gboolean _tmp204_ = FALSE;
				ValaCodeContext* _tmp205_;
				ValaCodeContext* _tmp206_;
				gboolean _tmp207_;
				gboolean _tmp208_;
				_tmp205_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp206_ = _tmp205_;
				_tmp207_ = vala_code_context_get_hide_internal (_tmp206_);
				_tmp208_ = _tmp207_;
				if (_tmp208_) {
					_tmp204_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp204_ = FALSE;
				}
				if (_tmp204_) {
					ValaCCodeFunction* _tmp209_;
					_tmp209_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp209_, VALA_CCODE_MODIFIERS_INTERNAL);
				} else {
					ValaCCodeFunction* _tmp210_;
					_tmp210_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp210_, VALA_CCODE_MODIFIERS_EXTERN);
					((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
				}
			}
			_tmp211_ = function;
			vala_ccode_file_add_function_declaration (decl_space, _tmp211_);
			_tmp212_ = vala_get_ccode_get_value_function ((ValaCodeNode*) cl);
			_tmp213_ = _tmp212_;
			_tmp214_ = vala_ccode_function_new (_tmp213_, "gpointer");
			_vala_ccode_node_unref0 (function);
			function = _tmp214_;
			_g_free0 (_tmp213_);
			_tmp215_ = function;
			_tmp216_ = vala_ccode_parameter_new ("value", "const GValue*");
			_tmp217_ = _tmp216_;
			vala_ccode_function_add_parameter (_tmp215_, _tmp217_);
			_vala_ccode_node_unref0 (_tmp217_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp218_;
				_tmp218_ = function;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp218_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_UNUSED);
			} else {
				gboolean _tmp219_ = FALSE;
				ValaCodeContext* _tmp220_;
				ValaCodeContext* _tmp221_;
				gboolean _tmp222_;
				gboolean _tmp223_;
				_tmp220_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp221_ = _tmp220_;
				_tmp222_ = vala_code_context_get_hide_internal (_tmp221_);
				_tmp223_ = _tmp222_;
				if (_tmp223_) {
					_tmp219_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp219_ = FALSE;
				}
				if (_tmp219_) {
					ValaCCodeFunction* _tmp224_;
					_tmp224_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp224_, VALA_CCODE_MODIFIERS_INTERNAL | VALA_CCODE_MODIFIERS_UNUSED);
				} else {
					ValaCCodeFunction* _tmp225_;
					_tmp225_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp225_, VALA_CCODE_MODIFIERS_EXTERN);
					((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
				}
			}
			_tmp226_ = function;
			vala_ccode_file_add_function_declaration (decl_space, _tmp226_);
			_vala_ccode_node_unref0 (function);
			_vala_ccode_node_unref0 (unref_fun);
			_vala_ccode_node_unref0 (ref_fun);
		} else {
			gboolean _tmp227_ = FALSE;
			if (!is_gtypeinstance) {
				_tmp227_ = !is_gsource;
			} else {
				_tmp227_ = FALSE;
			}
			if (_tmp227_) {
				ValaClass* _tmp228_;
				ValaClass* _tmp229_;
				_tmp228_ = vala_class_get_base_class (cl);
				_tmp229_ = _tmp228_;
				if (_tmp229_ == NULL) {
					ValaCCodeFunction* function = NULL;
					gchar* _tmp230_;
					gchar* _tmp231_;
					ValaCCodeFunction* _tmp232_;
					ValaCCodeFunction* _tmp233_;
					ValaCCodeFunction* _tmp242_;
					gchar* _tmp243_;
					gchar* _tmp244_;
					gchar* _tmp245_;
					gchar* _tmp246_;
					ValaCCodeParameter* _tmp247_;
					ValaCCodeParameter* _tmp248_;
					ValaCCodeFunction* _tmp249_;
					_tmp230_ = vala_get_ccode_free_function ((ValaTypeSymbol*) cl);
					_tmp231_ = _tmp230_;
					_tmp232_ = vala_ccode_function_new (_tmp231_, "void");
					_tmp233_ = _tmp232_;
					_g_free0 (_tmp231_);
					function = _tmp233_;
					if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
						ValaCCodeFunction* _tmp234_;
						_tmp234_ = function;
						vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp234_, VALA_CCODE_MODIFIERS_STATIC);
					} else {
						gboolean _tmp235_ = FALSE;
						ValaCodeContext* _tmp236_;
						ValaCodeContext* _tmp237_;
						gboolean _tmp238_;
						gboolean _tmp239_;
						_tmp236_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
						_tmp237_ = _tmp236_;
						_tmp238_ = vala_code_context_get_hide_internal (_tmp237_);
						_tmp239_ = _tmp238_;
						if (_tmp239_) {
							_tmp235_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
						} else {
							_tmp235_ = FALSE;
						}
						if (_tmp235_) {
							ValaCCodeFunction* _tmp240_;
							_tmp240_ = function;
							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp240_, VALA_CCODE_MODIFIERS_INTERNAL);
						} else {
							ValaCCodeFunction* _tmp241_;
							_tmp241_ = function;
							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp241_, VALA_CCODE_MODIFIERS_EXTERN);
							((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
						}
					}
					_tmp242_ = function;
					_tmp243_ = vala_get_ccode_name ((ValaCodeNode*) cl);
					_tmp244_ = _tmp243_;
					_tmp245_ = g_strdup_printf ("%s *", _tmp244_);
					_tmp246_ = _tmp245_;
					_tmp247_ = vala_ccode_parameter_new ("self", _tmp246_);
					_tmp248_ = _tmp247_;
					vala_ccode_function_add_parameter (_tmp242_, _tmp248_);
					_vala_ccode_node_unref0 (_tmp248_);
					_g_free0 (_tmp246_);
					_g_free0 (_tmp244_);
					_tmp249_ = function;
					vala_ccode_file_add_function_declaration (decl_space, _tmp249_);
					_vala_ccode_node_unref0 (function);
				}
			}
		}
	}
	if (is_gtypeinstance) {
		gchar* _tmp250_;
		gchar* _tmp251_;
		gchar* _tmp252_;
		gchar* _tmp253_;
		gchar* _tmp254_;
		gchar* _tmp255_;
		ValaCCodeVariableDeclarator* _tmp256_;
		ValaCCodeVariableDeclarator* _tmp257_;
		ValaCCodeTypeDefinition* _tmp258_;
		ValaCCodeTypeDefinition* _tmp259_;
		ValaClassRegisterFunction* type_fun = NULL;
		ValaClassRegisterFunction* _tmp260_;
		ValaClassRegisterFunction* _tmp261_;
		ValaCodeContext* _tmp262_;
		ValaCodeContext* _tmp263_;
		_tmp250_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
		_tmp251_ = _tmp250_;
		_tmp252_ = g_strdup_printf ("struct _%s", _tmp251_);
		_tmp253_ = _tmp252_;
		_tmp254_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
		_tmp255_ = _tmp254_;
		_tmp256_ = vala_ccode_variable_declarator_new (_tmp255_, NULL, NULL);
		_tmp257_ = _tmp256_;
		_tmp258_ = vala_ccode_type_definition_new (_tmp253_, (ValaCCodeDeclarator*) _tmp257_);
		_tmp259_ = _tmp258_;
		vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp259_);
		_vala_ccode_node_unref0 (_tmp259_);
		_vala_ccode_node_unref0 (_tmp257_);
		_g_free0 (_tmp255_);
		_g_free0 (_tmp253_);
		_g_free0 (_tmp251_);
		_tmp260_ = vala_class_register_function_new (cl);
		type_fun = _tmp260_;
		_tmp261_ = type_fun;
		_tmp262_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp263_ = _tmp262_;
		vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp261_, _tmp263_, ((ValaCCodeBaseModule*) self)->in_plugin, TRUE);
		if (!final_not_public) {
			ValaClassRegisterFunction* _tmp264_;
			ValaCCodeFragment* _tmp265_;
			ValaCCodeFragment* _tmp266_;
			_tmp264_ = type_fun;
			_tmp265_ = vala_typeregister_function_get_declaration ((ValaTypeRegisterFunction*) _tmp264_);
			_tmp266_ = _tmp265_;
			vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp266_);
			_vala_ccode_node_unref0 (_tmp266_);
		}
		((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
		_vala_typeregister_function_unref0 (type_fun);
	}
	if (final_not_public) {
		return;
	}
	_tmp267_ = _vala_code_node_ref0 (cl);
	base_class = _tmp267_;
	while (TRUE) {
		ValaClass* _tmp268_;
		ValaClass* _tmp269_;
		ValaClass* _tmp270_;
		ValaClass* _tmp271_;
		ValaClass* _tmp272_;
		ValaClass* _tmp273_;
		ValaClass* _tmp274_;
		_tmp268_ = base_class;
		_tmp269_ = vala_class_get_base_class (_tmp268_);
		_tmp270_ = _tmp269_;
		if (!(_tmp270_ != NULL)) {
			break;
		}
		_tmp271_ = base_class;
		_tmp272_ = vala_class_get_base_class (_tmp271_);
		_tmp273_ = _tmp272_;
		_tmp274_ = _vala_code_node_ref0 (_tmp273_);
		_vala_code_node_unref0 (base_class);
		base_class = _tmp274_;
	}
	_tmp275_ = base_class;
	vala_gtype_module_generate_autoptr_cleanup (self, (ValaObjectTypeSymbol*) cl, _tmp275_, decl_space);
	_vala_code_node_unref0 (base_class);
}

static void
vala_gtype_module_generate_autoptr_cleanup (ValaGTypeModule* self,
                                            ValaObjectTypeSymbol* sym,
                                            ValaClass* cl,
                                            ValaCCodeFile* decl_space)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_;
	gboolean _tmp3_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (sym != NULL);
	g_return_if_fail (cl != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp2_ = vala_class_get_is_compact (cl);
	_tmp3_ = _tmp2_;
	if (_tmp3_) {
		_tmp1_ = vala_is_reference_counting ((ValaTypeSymbol*) cl);
	} else {
		_tmp1_ = FALSE;
	}
	if (!_tmp1_) {
		gboolean _tmp4_ = FALSE;
		gboolean _tmp5_ = FALSE;
		ValaCodeContext* _tmp6_;
		ValaCodeContext* _tmp7_;
		const gchar* _tmp8_;
		const gchar* _tmp9_;
		_tmp6_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_code_context_get_header_filename (_tmp7_);
		_tmp9_ = _tmp8_;
		if (_tmp9_ == NULL) {
			_tmp5_ = TRUE;
		} else {
			CCodeFileType _tmp10_;
			CCodeFileType _tmp11_;
			_tmp10_ = vala_ccode_file_get_file_type (decl_space);
			_tmp11_ = _tmp10_;
			_tmp5_ = _tmp11_ == CCODE_FILE_TYPE_PUBLIC_HEADER;
		}
		if (_tmp5_) {
			_tmp4_ = TRUE;
		} else {
			gboolean _tmp12_ = FALSE;
			CCodeFileType _tmp13_;
			CCodeFileType _tmp14_;
			_tmp13_ = vala_ccode_file_get_file_type (decl_space);
			_tmp14_ = _tmp13_;
			if (_tmp14_ == CCODE_FILE_TYPE_INTERNAL_HEADER) {
				_tmp12_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
			} else {
				_tmp12_ = FALSE;
			}
			_tmp4_ = _tmp12_;
		}
		_tmp0_ = _tmp4_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gchar* autoptr_cleanup_func = NULL;
		gboolean _tmp17_ = FALSE;
		const gchar* _tmp18_;
		gchar* _tmp22_;
		gchar* _tmp23_;
		const gchar* _tmp24_;
		gchar* _tmp25_;
		gchar* _tmp26_;
		ValaCCodeIdentifier* _tmp27_;
		ValaCCodeIdentifier* _tmp28_;
		ValaCCodeNewline* _tmp29_;
		ValaCCodeNewline* _tmp30_;
		if (vala_is_reference_counting ((ValaTypeSymbol*) cl)) {
			gchar* _tmp15_;
			_tmp15_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
			_g_free0 (autoptr_cleanup_func);
			autoptr_cleanup_func = _tmp15_;
		} else {
			gchar* _tmp16_;
			_tmp16_ = vala_get_ccode_free_function ((ValaTypeSymbol*) cl);
			_g_free0 (autoptr_cleanup_func);
			autoptr_cleanup_func = _tmp16_;
		}
		_tmp18_ = autoptr_cleanup_func;
		if (_tmp18_ == NULL) {
			_tmp17_ = TRUE;
		} else {
			const gchar* _tmp19_;
			_tmp19_ = autoptr_cleanup_func;
			_tmp17_ = g_strcmp0 (_tmp19_, "") == 0;
		}
		if (_tmp17_) {
			ValaSourceReference* _tmp20_;
			ValaSourceReference* _tmp21_;
			_tmp20_ = vala_code_node_get_source_reference ((ValaCodeNode*) cl);
			_tmp21_ = _tmp20_;
			vala_report_error (_tmp21_, "internal error: autoptr_cleanup_func not available");
		}
		_tmp22_ = vala_get_ccode_name ((ValaCodeNode*) sym);
		_tmp23_ = _tmp22_;
		_tmp24_ = autoptr_cleanup_func;
		_tmp25_ = g_strdup_printf ("G_DEFINE_AUTOPTR_CLEANUP_FUNC (%s, %s)", _tmp23_, _tmp24_);
		_tmp26_ = _tmp25_;
		_tmp27_ = vala_ccode_identifier_new (_tmp26_);
		_tmp28_ = _tmp27_;
		vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp28_);
		_vala_ccode_node_unref0 (_tmp28_);
		_g_free0 (_tmp26_);
		_g_free0 (_tmp23_);
		_tmp29_ = vala_ccode_newline_new ();
		_tmp30_ = _tmp29_;
		vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp30_);
		_vala_ccode_node_unref0 (_tmp30_);
		_g_free0 (autoptr_cleanup_func);
	}
}

static void
vala_gtype_module_real_generate_class_struct_declaration (ValaCCodeBaseModule* base,
                                                          ValaClass* cl,
                                                          ValaCCodeFile* decl_space)
{
	ValaGTypeModule * self;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gboolean _tmp4_;
	ValaClass* _tmp5_;
	ValaClass* _tmp6_;
	gboolean is_gtypeinstance = FALSE;
	gboolean _tmp22_;
	gboolean _tmp23_;
	gboolean _tmp24_ = FALSE;
	gboolean is_fundamental = FALSE;
	ValaCCodeStruct* instance_struct = NULL;
	gchar* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	ValaCCodeStruct* _tmp31_;
	ValaCCodeStruct* _tmp32_;
	ValaCCodeStruct* type_struct = NULL;
	gchar* _tmp33_;
	gchar* _tmp34_;
	gchar* _tmp35_;
	gchar* _tmp36_;
	ValaCCodeStruct* _tmp37_;
	ValaCCodeStruct* _tmp38_;
	ValaClass* _tmp39_;
	ValaClass* _tmp40_;
	ValaCodeContext* _tmp81_;
	ValaCodeContext* _tmp82_;
	gboolean _tmp83_;
	gboolean _tmp84_;
	gboolean _tmp196_ = FALSE;
	gboolean _tmp197_ = FALSE;
	gboolean _tmp198_;
	gboolean _tmp199_;
	gboolean _tmp203_ = FALSE;
	gboolean _tmp204_ = FALSE;
	gboolean _tmp205_;
	gboolean _tmp206_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (cl != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("struct _%s", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_base_module_add_symbol_declaration ((ValaCCodeBaseModule*) self, decl_space, (ValaSymbol*) cl, _tmp3_);
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	if (_tmp4_) {
		return;
	}
	_tmp5_ = vala_class_get_base_class (cl);
	_tmp6_ = _tmp5_;
	if (_tmp6_ != NULL) {
		ValaClass* _tmp7_;
		ValaClass* _tmp8_;
		_tmp7_ = vala_class_get_base_class (cl);
		_tmp8_ = _tmp7_;
		vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, _tmp8_, decl_space);
	}
	{
		ValaList* _base_type_list = NULL;
		ValaList* _tmp9_;
		gint _base_type_size = 0;
		ValaList* _tmp10_;
		gint _tmp11_;
		gint _tmp12_;
		gint _base_type_index = 0;
		_tmp9_ = vala_class_get_base_types (cl);
		_base_type_list = _tmp9_;
		_tmp10_ = _base_type_list;
		_tmp11_ = vala_collection_get_size ((ValaCollection*) _tmp10_);
		_tmp12_ = _tmp11_;
		_base_type_size = _tmp12_;
		_base_type_index = -1;
		while (TRUE) {
			gint _tmp13_;
			gint _tmp14_;
			ValaDataType* base_type = NULL;
			ValaList* _tmp15_;
			gpointer _tmp16_;
			ValaInterface* iface = NULL;
			ValaDataType* _tmp17_;
			ValaTypeSymbol* _tmp18_;
			ValaTypeSymbol* _tmp19_;
			ValaInterface* _tmp20_;
			_base_type_index = _base_type_index + 1;
			_tmp13_ = _base_type_index;
			_tmp14_ = _base_type_size;
			if (!(_tmp13_ < _tmp14_)) {
				break;
			}
			_tmp15_ = _base_type_list;
			_tmp16_ = vala_list_get (_tmp15_, _base_type_index);
			base_type = (ValaDataType*) _tmp16_;
			_tmp17_ = base_type;
			_tmp18_ = vala_data_type_get_type_symbol (_tmp17_);
			_tmp19_ = _tmp18_;
			iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp19_) : NULL;
			_tmp20_ = iface;
			if (_tmp20_ != NULL) {
				ValaInterface* _tmp21_;
				_tmp21_ = iface;
				vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, _tmp21_, decl_space);
			}
			_vala_code_node_unref0 (base_type);
		}
	}
	vala_ccode_base_module_generate_class_declaration ((ValaCCodeBaseModule*) self, cl, decl_space);
	_tmp22_ = vala_class_get_is_compact (cl);
	_tmp23_ = _tmp22_;
	is_gtypeinstance = !_tmp23_;
	if (is_gtypeinstance) {
		ValaClass* _tmp25_;
		ValaClass* _tmp26_;
		_tmp25_ = vala_class_get_base_class (cl);
		_tmp26_ = _tmp25_;
		_tmp24_ = _tmp26_ == NULL;
	} else {
		_tmp24_ = FALSE;
	}
	is_fundamental = _tmp24_;
	_tmp27_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp28_ = _tmp27_;
	_tmp29_ = g_strdup_printf ("_%s", _tmp28_);
	_tmp30_ = _tmp29_;
	_tmp31_ = vala_ccode_struct_new (_tmp30_);
	_tmp32_ = _tmp31_;
	_g_free0 (_tmp30_);
	_g_free0 (_tmp28_);
	instance_struct = _tmp32_;
	_tmp33_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
	_tmp34_ = _tmp33_;
	_tmp35_ = g_strdup_printf ("_%s", _tmp34_);
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_struct_new (_tmp36_);
	_tmp38_ = _tmp37_;
	_g_free0 (_tmp36_);
	_g_free0 (_tmp34_);
	type_struct = _tmp38_;
	_tmp39_ = vala_class_get_base_class (cl);
	_tmp40_ = _tmp39_;
	if (_tmp40_ != NULL) {
		ValaCCodeStruct* _tmp41_;
		ValaClass* _tmp42_;
		ValaClass* _tmp43_;
		gchar* _tmp44_;
		gchar* _tmp45_;
		_tmp41_ = instance_struct;
		_tmp42_ = vala_class_get_base_class (cl);
		_tmp43_ = _tmp42_;
		_tmp44_ = vala_get_ccode_name ((ValaCodeNode*) _tmp43_);
		_tmp45_ = _tmp44_;
		vala_ccode_struct_add_field (_tmp41_, _tmp45_, "parent_instance", 0, NULL);
		_g_free0 (_tmp45_);
	} else {
		if (is_fundamental) {
			ValaCCodeStruct* _tmp46_;
			ValaCCodeStruct* _tmp47_;
			_tmp46_ = instance_struct;
			vala_ccode_struct_add_field (_tmp46_, "GTypeInstance", "parent_instance", 0, NULL);
			_tmp47_ = instance_struct;
			vala_ccode_struct_add_field (_tmp47_, "volatile int", "ref_count", 0, NULL);
		}
	}
	if (is_gtypeinstance) {
		ValaCCodeStruct* _tmp48_;
		const gchar* _tmp49_;
		const gchar* _tmp50_;
		gchar* _tmp51_;
		gchar* _tmp52_;
		gchar* _tmp53_;
		gchar* _tmp54_;
		gchar* _tmp55_;
		gchar* _tmp56_;
		ValaCCodeVariableDeclarator* _tmp57_;
		ValaCCodeVariableDeclarator* _tmp58_;
		ValaCCodeTypeDefinition* _tmp59_;
		ValaCCodeTypeDefinition* _tmp60_;
		ValaCodeContext* _tmp61_;
		ValaCodeContext* _tmp62_;
		gboolean _tmp63_;
		gboolean _tmp64_;
		_tmp48_ = instance_struct;
		_tmp49_ = vala_ccode_struct_get_name (_tmp48_);
		_tmp50_ = _tmp49_;
		_tmp51_ = g_strdup_printf ("struct %sPrivate", _tmp50_);
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp54_ = _tmp53_;
		_tmp55_ = g_strdup_printf ("%sPrivate", _tmp54_);
		_tmp56_ = _tmp55_;
		_tmp57_ = vala_ccode_variable_declarator_new (_tmp56_, NULL, NULL);
		_tmp58_ = _tmp57_;
		_tmp59_ = vala_ccode_type_definition_new (_tmp52_, (ValaCCodeDeclarator*) _tmp58_);
		_tmp60_ = _tmp59_;
		vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp60_);
		_vala_ccode_node_unref0 (_tmp60_);
		_vala_ccode_node_unref0 (_tmp58_);
		_g_free0 (_tmp56_);
		_g_free0 (_tmp54_);
		_g_free0 (_tmp52_);
		_tmp61_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp62_ = _tmp61_;
		_tmp63_ = vala_code_context_get_abi_stability (_tmp62_);
		_tmp64_ = _tmp63_;
		if (!_tmp64_) {
			ValaCCodeStruct* _tmp65_;
			gchar* _tmp66_;
			gchar* _tmp67_;
			gchar* _tmp68_;
			gchar* _tmp69_;
			_tmp65_ = instance_struct;
			_tmp66_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp67_ = _tmp66_;
			_tmp68_ = g_strdup_printf ("%sPrivate *", _tmp67_);
			_tmp69_ = _tmp68_;
			vala_ccode_struct_add_field (_tmp65_, _tmp69_, "priv", 0, NULL);
			_g_free0 (_tmp69_);
			_g_free0 (_tmp67_);
		}
		if (is_fundamental) {
			ValaCCodeStruct* _tmp70_;
			_tmp70_ = type_struct;
			vala_ccode_struct_add_field (_tmp70_, "GTypeClass", "parent_class", 0, NULL);
		} else {
			ValaCCodeStruct* _tmp71_;
			ValaClass* _tmp72_;
			ValaClass* _tmp73_;
			gchar* _tmp74_;
			gchar* _tmp75_;
			_tmp71_ = type_struct;
			_tmp72_ = vala_class_get_base_class (cl);
			_tmp73_ = _tmp72_;
			_tmp74_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) _tmp73_);
			_tmp75_ = _tmp74_;
			vala_ccode_struct_add_field (_tmp71_, _tmp75_, "parent_class", 0, NULL);
			_g_free0 (_tmp75_);
		}
		if (is_fundamental) {
			ValaCCodeStruct* _tmp76_;
			gchar* _tmp77_;
			gchar* _tmp78_;
			gchar* _tmp79_;
			gchar* _tmp80_;
			_tmp76_ = type_struct;
			_tmp77_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp78_ = _tmp77_;
			_tmp79_ = g_strdup_printf ("(*finalize) (%s *self)", _tmp78_);
			_tmp80_ = _tmp79_;
			vala_ccode_struct_add_field (_tmp76_, "void", _tmp80_, 0, NULL);
			_g_free0 (_tmp80_);
			_g_free0 (_tmp78_);
		}
	}
	_tmp81_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp82_ = _tmp81_;
	_tmp83_ = vala_code_context_get_abi_stability (_tmp82_);
	_tmp84_ = _tmp83_;
	if (_tmp84_) {
		{
			ValaList* _s_list = NULL;
			ValaList* _tmp85_;
			gint _s_size = 0;
			ValaList* _tmp86_;
			gint _tmp87_;
			gint _tmp88_;
			gint _s_index = 0;
			_tmp85_ = vala_object_type_symbol_get_members ((ValaObjectTypeSymbol*) cl);
			_s_list = _tmp85_;
			_tmp86_ = _s_list;
			_tmp87_ = vala_collection_get_size ((ValaCollection*) _tmp86_);
			_tmp88_ = _tmp87_;
			_s_size = _tmp88_;
			_s_index = -1;
			while (TRUE) {
				gint _tmp89_;
				gint _tmp90_;
				ValaSymbol* s = NULL;
				ValaList* _tmp91_;
				gpointer _tmp92_;
				ValaSymbol* _tmp93_;
				_s_index = _s_index + 1;
				_tmp89_ = _s_index;
				_tmp90_ = _s_size;
				if (!(_tmp89_ < _tmp90_)) {
					break;
				}
				_tmp91_ = _s_list;
				_tmp92_ = vala_list_get (_tmp91_, _s_index);
				s = (ValaSymbol*) _tmp92_;
				_tmp93_ = s;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp93_, VALA_TYPE_METHOD)) {
					ValaMethod* m = NULL;
					ValaSymbol* _tmp94_;
					ValaMethod* _tmp95_;
					ValaMethod* _tmp96_;
					ValaCCodeStruct* _tmp97_;
					ValaCCodeStruct* _tmp98_;
					_tmp94_ = s;
					_tmp95_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp94_, VALA_TYPE_METHOD, ValaMethod));
					m = _tmp95_;
					_tmp96_ = m;
					_tmp97_ = instance_struct;
					_tmp98_ = type_struct;
					vala_gtype_module_generate_struct_method_declaration (self, (ValaObjectTypeSymbol*) cl, _tmp96_, _tmp97_, _tmp98_, decl_space);
					_vala_code_node_unref0 (m);
				} else {
					ValaSymbol* _tmp99_;
					_tmp99_ = s;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp99_, VALA_TYPE_SIGNAL)) {
						ValaSignal* sig = NULL;
						ValaSymbol* _tmp100_;
						ValaSignal* _tmp101_;
						ValaSignal* _tmp102_;
						ValaMethod* _tmp103_;
						ValaMethod* _tmp104_;
						_tmp100_ = s;
						_tmp101_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp100_, VALA_TYPE_SIGNAL, ValaSignal));
						sig = _tmp101_;
						_tmp102_ = sig;
						_tmp103_ = vala_signal_get_default_handler (_tmp102_);
						_tmp104_ = _tmp103_;
						if (_tmp104_ != NULL) {
							ValaSignal* _tmp105_;
							gboolean _tmp106_;
							gboolean _tmp107_;
							_tmp105_ = sig;
							_tmp106_ = vala_signal_get_is_virtual (_tmp105_);
							_tmp107_ = _tmp106_;
							if (_tmp107_) {
								ValaSignal* _tmp108_;
								ValaMethod* _tmp109_;
								ValaMethod* _tmp110_;
								ValaCCodeStruct* _tmp111_;
								_tmp108_ = sig;
								_tmp109_ = vala_signal_get_default_handler (_tmp108_);
								_tmp110_ = _tmp109_;
								_tmp111_ = type_struct;
								vala_gtype_module_generate_virtual_method_declaration (self, _tmp110_, decl_space, _tmp111_);
							} else {
								ValaSignal* _tmp112_;
								ValaMethod* _tmp113_;
								ValaMethod* _tmp114_;
								ValaCCodeFile* _tmp115_;
								_tmp112_ = sig;
								_tmp113_ = vala_signal_get_default_handler (_tmp112_);
								_tmp114_ = _tmp113_;
								_tmp115_ = ((ValaCCodeBaseModule*) self)->cfile;
								vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp114_, _tmp115_);
							}
						}
						_vala_code_node_unref0 (sig);
					} else {
						ValaSymbol* _tmp116_;
						_tmp116_ = s;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp116_, VALA_TYPE_PROPERTY)) {
							ValaProperty* prop = NULL;
							ValaSymbol* _tmp117_;
							ValaProperty* _tmp118_;
							ValaProperty* _tmp119_;
							ValaCCodeStruct* _tmp120_;
							ValaCCodeStruct* _tmp121_;
							_tmp117_ = s;
							_tmp118_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp117_, VALA_TYPE_PROPERTY, ValaProperty));
							prop = _tmp118_;
							_tmp119_ = prop;
							_tmp120_ = instance_struct;
							_tmp121_ = type_struct;
							vala_gtype_module_generate_struct_property_declaration (self, (ValaObjectTypeSymbol*) cl, _tmp119_, _tmp120_, _tmp121_, decl_space);
							_vala_code_node_unref0 (prop);
						} else {
							ValaSymbol* _tmp122_;
							_tmp122_ = s;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp122_, VALA_TYPE_FIELD)) {
								gboolean _tmp123_ = FALSE;
								ValaSymbol* _tmp124_;
								ValaSymbolAccessibility _tmp125_;
								ValaSymbolAccessibility _tmp126_;
								_tmp124_ = s;
								_tmp125_ = vala_symbol_get_access (_tmp124_);
								_tmp126_ = _tmp125_;
								if (_tmp126_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
									_tmp123_ = TRUE;
								} else {
									gboolean _tmp127_;
									gboolean _tmp128_;
									_tmp127_ = vala_class_get_is_opaque (cl);
									_tmp128_ = _tmp127_;
									_tmp123_ = _tmp128_;
								}
								if (_tmp123_) {
									ValaSymbol* _tmp129_;
									ValaCCodeStruct* _tmp130_;
									ValaCCodeStruct* _tmp131_;
									_tmp129_ = s;
									_tmp130_ = instance_struct;
									_tmp131_ = type_struct;
									vala_gtype_module_generate_struct_field_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp129_, VALA_TYPE_FIELD, ValaField), _tmp130_, _tmp131_, decl_space);
								}
							} else {
								ValaSymbol* _tmp132_;
								ValaSourceReference* _tmp133_;
								ValaSourceReference* _tmp134_;
								_tmp132_ = s;
								_tmp133_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp132_);
								_tmp134_ = _tmp133_;
								vala_report_error (_tmp134_, "internal: Unsupported symbol");
							}
						}
					}
				}
				_vala_code_node_unref0 (s);
			}
		}
	} else {
		{
			ValaList* _m_list = NULL;
			ValaList* _tmp135_;
			gint _m_size = 0;
			ValaList* _tmp136_;
			gint _tmp137_;
			gint _tmp138_;
			gint _m_index = 0;
			_tmp135_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
			_m_list = _tmp135_;
			_tmp136_ = _m_list;
			_tmp137_ = vala_collection_get_size ((ValaCollection*) _tmp136_);
			_tmp138_ = _tmp137_;
			_m_size = _tmp138_;
			_m_index = -1;
			while (TRUE) {
				gint _tmp139_;
				gint _tmp140_;
				ValaMethod* m = NULL;
				ValaList* _tmp141_;
				gpointer _tmp142_;
				ValaMethod* _tmp143_;
				ValaCCodeStruct* _tmp144_;
				ValaCCodeStruct* _tmp145_;
				_m_index = _m_index + 1;
				_tmp139_ = _m_index;
				_tmp140_ = _m_size;
				if (!(_tmp139_ < _tmp140_)) {
					break;
				}
				_tmp141_ = _m_list;
				_tmp142_ = vala_list_get (_tmp141_, _m_index);
				m = (ValaMethod*) _tmp142_;
				_tmp143_ = m;
				_tmp144_ = instance_struct;
				_tmp145_ = type_struct;
				vala_gtype_module_generate_struct_method_declaration (self, (ValaObjectTypeSymbol*) cl, _tmp143_, _tmp144_, _tmp145_, decl_space);
				_vala_code_node_unref0 (m);
			}
		}
		{
			ValaList* _sig_list = NULL;
			ValaList* _tmp146_;
			gint _sig_size = 0;
			ValaList* _tmp147_;
			gint _tmp148_;
			gint _tmp149_;
			gint _sig_index = 0;
			_tmp146_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
			_sig_list = _tmp146_;
			_tmp147_ = _sig_list;
			_tmp148_ = vala_collection_get_size ((ValaCollection*) _tmp147_);
			_tmp149_ = _tmp148_;
			_sig_size = _tmp149_;
			_sig_index = -1;
			while (TRUE) {
				gint _tmp150_;
				gint _tmp151_;
				ValaSignal* sig = NULL;
				ValaList* _tmp152_;
				gpointer _tmp153_;
				ValaSignal* _tmp154_;
				ValaMethod* _tmp155_;
				ValaMethod* _tmp156_;
				_sig_index = _sig_index + 1;
				_tmp150_ = _sig_index;
				_tmp151_ = _sig_size;
				if (!(_tmp150_ < _tmp151_)) {
					break;
				}
				_tmp152_ = _sig_list;
				_tmp153_ = vala_list_get (_tmp152_, _sig_index);
				sig = (ValaSignal*) _tmp153_;
				_tmp154_ = sig;
				_tmp155_ = vala_signal_get_default_handler (_tmp154_);
				_tmp156_ = _tmp155_;
				if (_tmp156_ != NULL) {
					ValaSignal* _tmp157_;
					gboolean _tmp158_;
					gboolean _tmp159_;
					_tmp157_ = sig;
					_tmp158_ = vala_signal_get_is_virtual (_tmp157_);
					_tmp159_ = _tmp158_;
					if (_tmp159_) {
						ValaSignal* _tmp160_;
						ValaMethod* _tmp161_;
						ValaMethod* _tmp162_;
						ValaCCodeStruct* _tmp163_;
						_tmp160_ = sig;
						_tmp161_ = vala_signal_get_default_handler (_tmp160_);
						_tmp162_ = _tmp161_;
						_tmp163_ = type_struct;
						vala_gtype_module_generate_virtual_method_declaration (self, _tmp162_, decl_space, _tmp163_);
					} else {
						ValaSignal* _tmp164_;
						ValaMethod* _tmp165_;
						ValaMethod* _tmp166_;
						ValaCCodeFile* _tmp167_;
						_tmp164_ = sig;
						_tmp165_ = vala_signal_get_default_handler (_tmp164_);
						_tmp166_ = _tmp165_;
						_tmp167_ = ((ValaCCodeBaseModule*) self)->cfile;
						vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp166_, _tmp167_);
					}
				}
				_vala_code_node_unref0 (sig);
			}
		}
		{
			ValaList* _prop_list = NULL;
			ValaList* _tmp168_;
			gint _prop_size = 0;
			ValaList* _tmp169_;
			gint _tmp170_;
			gint _tmp171_;
			gint _prop_index = 0;
			_tmp168_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
			_prop_list = _tmp168_;
			_tmp169_ = _prop_list;
			_tmp170_ = vala_collection_get_size ((ValaCollection*) _tmp169_);
			_tmp171_ = _tmp170_;
			_prop_size = _tmp171_;
			_prop_index = -1;
			while (TRUE) {
				gint _tmp172_;
				gint _tmp173_;
				ValaProperty* prop = NULL;
				ValaList* _tmp174_;
				gpointer _tmp175_;
				ValaProperty* _tmp176_;
				ValaCCodeStruct* _tmp177_;
				ValaCCodeStruct* _tmp178_;
				_prop_index = _prop_index + 1;
				_tmp172_ = _prop_index;
				_tmp173_ = _prop_size;
				if (!(_tmp172_ < _tmp173_)) {
					break;
				}
				_tmp174_ = _prop_list;
				_tmp175_ = vala_list_get (_tmp174_, _prop_index);
				prop = (ValaProperty*) _tmp175_;
				_tmp176_ = prop;
				_tmp177_ = instance_struct;
				_tmp178_ = type_struct;
				vala_gtype_module_generate_struct_property_declaration (self, (ValaObjectTypeSymbol*) cl, _tmp176_, _tmp177_, _tmp178_, decl_space);
				_vala_code_node_unref0 (prop);
			}
		}
		{
			ValaList* _f_list = NULL;
			ValaList* _tmp179_;
			gint _f_size = 0;
			ValaList* _tmp180_;
			gint _tmp181_;
			gint _tmp182_;
			gint _f_index = 0;
			_tmp179_ = vala_object_type_symbol_get_fields ((ValaObjectTypeSymbol*) cl);
			_f_list = _tmp179_;
			_tmp180_ = _f_list;
			_tmp181_ = vala_collection_get_size ((ValaCollection*) _tmp180_);
			_tmp182_ = _tmp181_;
			_f_size = _tmp182_;
			_f_index = -1;
			while (TRUE) {
				gint _tmp183_;
				gint _tmp184_;
				ValaField* f = NULL;
				ValaList* _tmp185_;
				gpointer _tmp186_;
				gboolean _tmp187_ = FALSE;
				ValaField* _tmp188_;
				ValaSymbolAccessibility _tmp189_;
				ValaSymbolAccessibility _tmp190_;
				_f_index = _f_index + 1;
				_tmp183_ = _f_index;
				_tmp184_ = _f_size;
				if (!(_tmp183_ < _tmp184_)) {
					break;
				}
				_tmp185_ = _f_list;
				_tmp186_ = vala_list_get (_tmp185_, _f_index);
				f = (ValaField*) _tmp186_;
				_tmp188_ = f;
				_tmp189_ = vala_symbol_get_access ((ValaSymbol*) _tmp188_);
				_tmp190_ = _tmp189_;
				if (_tmp190_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
					_tmp187_ = TRUE;
				} else {
					gboolean _tmp191_;
					gboolean _tmp192_;
					_tmp191_ = vala_class_get_is_opaque (cl);
					_tmp192_ = _tmp191_;
					_tmp187_ = _tmp192_;
				}
				if (_tmp187_) {
					ValaField* _tmp193_;
					ValaCCodeStruct* _tmp194_;
					ValaCCodeStruct* _tmp195_;
					_tmp193_ = f;
					_tmp194_ = instance_struct;
					_tmp195_ = type_struct;
					vala_gtype_module_generate_struct_field_declaration (self, _tmp193_, _tmp194_, _tmp195_, decl_space);
				}
				_vala_code_node_unref0 (f);
			}
		}
	}
	_tmp198_ = vala_class_get_is_compact (cl);
	_tmp199_ = _tmp198_;
	if (_tmp199_) {
		ValaClass* _tmp200_;
		ValaClass* _tmp201_;
		_tmp200_ = vala_class_get_base_class (cl);
		_tmp201_ = _tmp200_;
		_tmp197_ = _tmp201_ == NULL;
	} else {
		_tmp197_ = FALSE;
	}
	if (_tmp197_) {
		_tmp196_ = !vala_gtype_module_compact_class_has_instance_struct_member (self, cl);
	} else {
		_tmp196_ = FALSE;
	}
	if (_tmp196_) {
		ValaCCodeStruct* _tmp202_;
		_tmp202_ = instance_struct;
		vala_ccode_struct_add_field (_tmp202_, "int", "dummy", 0, NULL);
	}
	_tmp205_ = vala_class_get_is_compact (cl);
	_tmp206_ = _tmp205_;
	if (!_tmp206_) {
		_tmp204_ = TRUE;
	} else {
		ValaClass* _tmp207_;
		ValaClass* _tmp208_;
		_tmp207_ = vala_class_get_base_class (cl);
		_tmp208_ = _tmp207_;
		_tmp204_ = _tmp208_ == NULL;
	}
	if (_tmp204_) {
		_tmp203_ = TRUE;
	} else {
		_tmp203_ = vala_gtype_module_compact_class_has_instance_struct_member (self, cl);
	}
	if (_tmp203_) {
		ValaCCodeStruct* _tmp209_;
		_tmp209_ = instance_struct;
		vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp209_);
	}
	if (is_gtypeinstance) {
		ValaCodeContext* _tmp210_;
		ValaCodeContext* _tmp211_;
		gboolean _tmp212_;
		gboolean _tmp213_;
		ValaCCodeStruct* _tmp219_;
		_tmp210_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp211_ = _tmp210_;
		_tmp212_ = vala_code_context_get_abi_stability (_tmp211_);
		_tmp213_ = _tmp212_;
		if (_tmp213_) {
			ValaCCodeStruct* _tmp214_;
			gchar* _tmp215_;
			gchar* _tmp216_;
			gchar* _tmp217_;
			gchar* _tmp218_;
			_tmp214_ = instance_struct;
			_tmp215_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp216_ = _tmp215_;
			_tmp217_ = g_strdup_printf ("%sPrivate *", _tmp216_);
			_tmp218_ = _tmp217_;
			vala_ccode_struct_add_field (_tmp214_, _tmp218_, "priv", 0, NULL);
			_g_free0 (_tmp218_);
			_g_free0 (_tmp216_);
		}
		_tmp219_ = type_struct;
		vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp219_);
	}
	_vala_ccode_node_unref0 (type_struct);
	_vala_ccode_node_unref0 (instance_struct);
}

static gboolean
vala_gtype_module_compact_class_has_instance_struct_member (ValaGTypeModule* self,
                                                            ValaClass* cl)
{
	gboolean _tmp0_;
	gboolean _tmp1_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (cl != NULL, FALSE);
	_tmp0_ = vala_class_get_is_compact (cl);
	_tmp1_ = _tmp0_;
	_vala_assert (_tmp1_, "cl.is_compact");
	{
		ValaList* _s_list = NULL;
		ValaList* _tmp2_;
		gint _s_size = 0;
		ValaList* _tmp3_;
		gint _tmp4_;
		gint _tmp5_;
		gint _s_index = 0;
		_tmp2_ = vala_object_type_symbol_get_members ((ValaObjectTypeSymbol*) cl);
		_s_list = _tmp2_;
		_tmp3_ = _s_list;
		_tmp4_ = vala_collection_get_size ((ValaCollection*) _tmp3_);
		_tmp5_ = _tmp4_;
		_s_size = _tmp5_;
		_s_index = -1;
		while (TRUE) {
			gint _tmp6_;
			gint _tmp7_;
			ValaSymbol* s = NULL;
			ValaList* _tmp8_;
			gpointer _tmp9_;
			ValaSymbol* _tmp10_;
			_s_index = _s_index + 1;
			_tmp6_ = _s_index;
			_tmp7_ = _s_size;
			if (!(_tmp6_ < _tmp7_)) {
				break;
			}
			_tmp8_ = _s_list;
			_tmp9_ = vala_list_get (_tmp8_, _s_index);
			s = (ValaSymbol*) _tmp9_;
			_tmp10_ = s;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_METHOD)) {
				ValaMethod* m = NULL;
				ValaSymbol* _tmp11_;
				gboolean _tmp12_ = FALSE;
				ValaMethod* _tmp13_;
				gboolean _tmp14_;
				gboolean _tmp15_;
				_tmp11_ = s;
				m = G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, VALA_TYPE_METHOD, ValaMethod);
				_tmp13_ = m;
				_tmp14_ = vala_method_get_is_abstract (_tmp13_);
				_tmp15_ = _tmp14_;
				if (_tmp15_) {
					_tmp12_ = TRUE;
				} else {
					ValaMethod* _tmp16_;
					gboolean _tmp17_;
					gboolean _tmp18_;
					_tmp16_ = m;
					_tmp17_ = vala_method_get_is_virtual (_tmp16_);
					_tmp18_ = _tmp17_;
					_tmp12_ = _tmp18_;
				}
				if (_tmp12_) {
					result = TRUE;
					_vala_code_node_unref0 (s);
					return result;
				}
			} else {
				ValaSymbol* _tmp19_;
				_tmp19_ = s;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_PROPERTY)) {
					ValaProperty* prop = NULL;
					ValaSymbol* _tmp20_;
					gboolean _tmp21_ = FALSE;
					ValaProperty* _tmp22_;
					gboolean _tmp23_;
					gboolean _tmp24_;
					_tmp20_ = s;
					prop = G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_PROPERTY, ValaProperty);
					_tmp22_ = prop;
					_tmp23_ = vala_property_get_is_abstract (_tmp22_);
					_tmp24_ = _tmp23_;
					if (_tmp24_) {
						_tmp21_ = TRUE;
					} else {
						ValaProperty* _tmp25_;
						gboolean _tmp26_;
						gboolean _tmp27_;
						_tmp25_ = prop;
						_tmp26_ = vala_property_get_is_virtual (_tmp25_);
						_tmp27_ = _tmp26_;
						_tmp21_ = _tmp27_;
					}
					if (_tmp21_) {
						result = TRUE;
						_vala_code_node_unref0 (s);
						return result;
					}
				} else {
					ValaSymbol* _tmp28_;
					_tmp28_ = s;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp28_, VALA_TYPE_FIELD)) {
						gboolean _tmp29_ = FALSE;
						ValaSymbol* _tmp30_;
						ValaSymbolAccessibility _tmp31_;
						ValaSymbolAccessibility _tmp32_;
						_tmp30_ = s;
						_tmp31_ = vala_symbol_get_access (_tmp30_);
						_tmp32_ = _tmp31_;
						if (_tmp32_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
							_tmp29_ = TRUE;
						} else {
							gboolean _tmp33_;
							gboolean _tmp34_;
							_tmp33_ = vala_class_get_is_opaque (cl);
							_tmp34_ = _tmp33_;
							_tmp29_ = _tmp34_;
						}
						if (_tmp29_) {
							ValaField* f = NULL;
							ValaSymbol* _tmp35_;
							ValaField* _tmp36_;
							ValaMemberBinding _tmp37_;
							ValaMemberBinding _tmp38_;
							_tmp35_ = s;
							f = G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, VALA_TYPE_FIELD, ValaField);
							_tmp36_ = f;
							_tmp37_ = vala_field_get_binding (_tmp36_);
							_tmp38_ = _tmp37_;
							if (_tmp38_ == VALA_MEMBER_BINDING_INSTANCE) {
								result = TRUE;
								_vala_code_node_unref0 (s);
								return result;
							}
						}
					} else {
						ValaSymbol* _tmp39_;
						ValaSourceReference* _tmp40_;
						ValaSourceReference* _tmp41_;
						_tmp39_ = s;
						_tmp40_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp39_);
						_tmp41_ = _tmp40_;
						vala_report_error (_tmp41_, "internal: Unsupported symbol");
					}
				}
			}
			_vala_code_node_unref0 (s);
		}
	}
	result = FALSE;
	return result;
}

static void
vala_gtype_module_generate_struct_method_declaration (ValaGTypeModule* self,
                                                      ValaObjectTypeSymbol* type_sym,
                                                      ValaMethod* m,
                                                      ValaCCodeStruct* instance_struct,
                                                      ValaCCodeStruct* type_struct,
                                                      ValaCCodeFile* decl_space)
{
	ValaClass* cl = NULL;
	gboolean _tmp0_ = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type_sym != NULL);
	g_return_if_fail (m != NULL);
	g_return_if_fail (instance_struct != NULL);
	g_return_if_fail (type_struct != NULL);
	g_return_if_fail (decl_space != NULL);
	cl = G_TYPE_CHECK_INSTANCE_TYPE (type_sym, VALA_TYPE_CLASS) ? ((ValaClass*) type_sym) : NULL;
	if (G_TYPE_CHECK_INSTANCE_TYPE (type_sym, VALA_TYPE_INTERFACE)) {
		_tmp0_ = TRUE;
	} else {
		gboolean _tmp1_ = FALSE;
		ValaClass* _tmp2_;
		_tmp2_ = cl;
		if (_tmp2_ != NULL) {
			ValaClass* _tmp3_;
			gboolean _tmp4_;
			gboolean _tmp5_;
			_tmp3_ = cl;
			_tmp4_ = vala_class_get_is_compact (_tmp3_);
			_tmp5_ = _tmp4_;
			_tmp1_ = !_tmp5_;
		} else {
			_tmp1_ = FALSE;
		}
		_tmp0_ = _tmp1_;
	}
	if (_tmp0_) {
		vala_gtype_module_generate_virtual_method_declaration (self, m, decl_space, type_struct);
	} else {
		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_compact (_tmp9_);
			_tmp11_ = _tmp10_;
			_tmp7_ = _tmp11_;
		} else {
			_tmp7_ = FALSE;
		}
		if (_tmp7_) {
			ValaClass* _tmp12_;
			ValaClass* _tmp13_;
			ValaClass* _tmp14_;
			_tmp12_ = cl;
			_tmp13_ = vala_class_get_base_class (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp6_ = _tmp14_ == NULL;
		} else {
			_tmp6_ = FALSE;
		}
		if (_tmp6_) {
			vala_gtype_module_generate_virtual_method_declaration (self, m, decl_space, instance_struct);
		}
	}
}

static void
vala_gtype_module_generate_struct_property_declaration (ValaGTypeModule* self,
                                                        ValaObjectTypeSymbol* type_sym,
                                                        ValaProperty* prop,
                                                        ValaCCodeStruct* instance_struct,
                                                        ValaCCodeStruct* type_struct,
                                                        ValaCCodeFile* decl_space)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaObjectTypeSymbol* t = NULL;
	ValaSymbol* _tmp7_;
	ValaSymbol* _tmp8_;
	ValaClass* cl = NULL;
	ValaObjectType* this_type = NULL;
	ValaObjectTypeSymbol* _tmp9_;
	ValaObjectType* _tmp10_;
	ValaCCodeParameter* cselfparam = NULL;
	ValaObjectType* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeParameter* _tmp15_;
	ValaPropertyAccessor* _tmp16_;
	ValaPropertyAccessor* _tmp17_;
	ValaPropertyAccessor* _tmp99_;
	ValaPropertyAccessor* _tmp100_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type_sym != NULL);
	g_return_if_fail (prop != NULL);
	g_return_if_fail (instance_struct != NULL);
	g_return_if_fail (type_struct != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp1_ = vala_property_get_is_abstract (prop);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		gboolean _tmp3_;
		gboolean _tmp4_;
		_tmp3_ = vala_property_get_is_virtual (prop);
		_tmp4_ = _tmp3_;
		_tmp0_ = !_tmp4_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		return;
	}
	_tmp5_ = vala_property_get_property_type (prop);
	_tmp6_ = _tmp5_;
	vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp6_, decl_space);
	_tmp7_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
	_tmp8_ = _tmp7_;
	t = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol);
	cl = G_TYPE_CHECK_INSTANCE_TYPE (type_sym, VALA_TYPE_CLASS) ? ((ValaClass*) type_sym) : NULL;
	_tmp9_ = t;
	_tmp10_ = vala_object_type_new (_tmp9_, NULL);
	this_type = _tmp10_;
	_tmp11_ = this_type;
	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_parameter_new ("self", _tmp13_);
	_tmp15_ = _tmp14_;
	_g_free0 (_tmp13_);
	cselfparam = _tmp15_;
	_tmp16_ = vala_property_get_get_accessor (prop);
	_tmp17_ = _tmp16_;
	if (_tmp17_ != NULL) {
		ValaCCodeFunctionDeclarator* vdeclarator = NULL;
		const gchar* _tmp18_;
		const gchar* _tmp19_;
		gchar* _tmp20_;
		gchar* _tmp21_;
		ValaCCodeFunctionDeclarator* _tmp22_;
		ValaCCodeFunctionDeclarator* _tmp23_;
		ValaCCodeFunctionDeclarator* _tmp24_;
		ValaCCodeParameter* _tmp25_;
		ValaDataType* creturn_type = NULL;
		ValaPropertyAccessor* _tmp26_;
		ValaPropertyAccessor* _tmp27_;
		ValaMethod* _tmp28_;
		ValaMethod* _tmp29_;
		ValaDataType* _tmp30_;
		ValaDataType* _tmp31_;
		ValaDataType* _tmp32_;
		ValaDataType* _tmp33_;
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp46_;
		ValaDataType* _tmp47_;
		ValaArrayType* _tmp48_;
		gboolean _tmp49_ = FALSE;
		ValaArrayType* _tmp50_;
		ValaCCodeDeclaration* vdecl = NULL;
		ValaDataType* _tmp81_;
		gchar* _tmp82_;
		gchar* _tmp83_;
		ValaCCodeDeclaration* _tmp84_;
		ValaCCodeDeclaration* _tmp85_;
		ValaCCodeDeclaration* _tmp86_;
		ValaCCodeFunctionDeclarator* _tmp87_;
		ValaCCodeDeclaration* _tmp88_;
		gboolean _tmp89_ = FALSE;
		gboolean _tmp90_ = FALSE;
		ValaClass* _tmp91_;
		_tmp18_ = vala_symbol_get_name ((ValaSymbol*) prop);
		_tmp19_ = _tmp18_;
		_tmp20_ = g_strdup_printf ("get_%s", _tmp19_);
		_tmp21_ = _tmp20_;
		_tmp22_ = vala_ccode_function_declarator_new (_tmp21_);
		_tmp23_ = _tmp22_;
		_g_free0 (_tmp21_);
		vdeclarator = _tmp23_;
		_tmp24_ = vdeclarator;
		_tmp25_ = cselfparam;
		vala_ccode_function_declarator_add_parameter (_tmp24_, _tmp25_);
		_tmp26_ = vala_property_get_get_accessor (prop);
		_tmp27_ = _tmp26_;
		_tmp28_ = vala_property_accessor_get_method (_tmp27_);
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_ccode_base_module_get_callable_creturn_type ((ValaCallable*) _tmp29_);
		_tmp31_ = _tmp30_;
		_vala_code_node_unref0 (_tmp29_);
		creturn_type = _tmp31_;
		_tmp32_ = vala_property_get_property_type (prop);
		_tmp33_ = _tmp32_;
		if (vala_data_type_is_real_non_null_struct_type (_tmp33_)) {
			ValaCCodeParameter* cvalueparam = NULL;
			ValaPropertyAccessor* _tmp34_;
			ValaPropertyAccessor* _tmp35_;
			ValaDataType* _tmp36_;
			ValaDataType* _tmp37_;
			gchar* _tmp38_;
			gchar* _tmp39_;
			gchar* _tmp40_;
			gchar* _tmp41_;
			ValaCCodeParameter* _tmp42_;
			ValaCCodeParameter* _tmp43_;
			ValaCCodeFunctionDeclarator* _tmp44_;
			ValaCCodeParameter* _tmp45_;
			_tmp34_ = vala_property_get_get_accessor (prop);
			_tmp35_ = _tmp34_;
			_tmp36_ = vala_property_accessor_get_value_type (_tmp35_);
			_tmp37_ = _tmp36_;
			_tmp38_ = vala_get_ccode_name ((ValaCodeNode*) _tmp37_);
			_tmp39_ = _tmp38_;
			_tmp40_ = g_strdup_printf ("%s *", _tmp39_);
			_tmp41_ = _tmp40_;
			_tmp42_ = vala_ccode_parameter_new ("result", _tmp41_);
			_tmp43_ = _tmp42_;
			_g_free0 (_tmp41_);
			_g_free0 (_tmp39_);
			cvalueparam = _tmp43_;
			_tmp44_ = vdeclarator;
			_tmp45_ = cvalueparam;
			vala_ccode_function_declarator_add_parameter (_tmp44_, _tmp45_);
			_vala_ccode_node_unref0 (cvalueparam);
		}
		_tmp46_ = vala_property_get_property_type (prop);
		_tmp47_ = _tmp46_;
		_tmp48_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp47_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp47_) : NULL);
		array_type = _tmp48_;
		_tmp50_ = array_type;
		if (_tmp50_ != NULL) {
			_tmp49_ = vala_get_ccode_array_length ((ValaCodeNode*) prop);
		} else {
			_tmp49_ = FALSE;
		}
		if (_tmp49_) {
			gchar* length_ctype = NULL;
			gchar* _tmp51_;
			gchar* _tmp52_;
			gchar* _tmp53_;
			gchar* _tmp54_;
			_tmp51_ = vala_get_ccode_array_length_type ((ValaCodeNode*) prop);
			_tmp52_ = _tmp51_;
			_tmp53_ = g_strconcat (_tmp52_, "*", NULL);
			_tmp54_ = _tmp53_;
			_g_free0 (_tmp52_);
			length_ctype = _tmp54_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp55_ = FALSE;
					_tmp55_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp57_;
						gint _tmp58_;
						gint _tmp59_;
						ValaCCodeFunctionDeclarator* _tmp60_;
						gchar* _tmp61_;
						gchar* _tmp62_;
						const gchar* _tmp63_;
						ValaCCodeParameter* _tmp64_;
						ValaCCodeParameter* _tmp65_;
						if (!_tmp55_) {
							gint _tmp56_;
							_tmp56_ = dim;
							dim = _tmp56_ + 1;
						}
						_tmp55_ = FALSE;
						_tmp57_ = array_type;
						_tmp58_ = vala_array_type_get_rank (_tmp57_);
						_tmp59_ = _tmp58_;
						if (!(dim <= _tmp59_)) {
							break;
						}
						_tmp60_ = vdeclarator;
						_tmp61_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", dim);
						_tmp62_ = _tmp61_;
						_tmp63_ = length_ctype;
						_tmp64_ = vala_ccode_parameter_new (_tmp62_, _tmp63_);
						_tmp65_ = _tmp64_;
						vala_ccode_function_declarator_add_parameter (_tmp60_, _tmp65_);
						_vala_ccode_node_unref0 (_tmp65_);
						_g_free0 (_tmp62_);
					}
				}
			}
			_g_free0 (length_ctype);
		} else {
			gboolean _tmp66_ = FALSE;
			gboolean _tmp67_ = FALSE;
			ValaDataType* _tmp68_;
			ValaDataType* _tmp69_;
			_tmp68_ = vala_property_get_property_type (prop);
			_tmp69_ = _tmp68_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp69_, VALA_TYPE_DELEGATE_TYPE)) {
				_tmp67_ = vala_get_ccode_delegate_target ((ValaCodeNode*) prop);
			} else {
				_tmp67_ = FALSE;
			}
			if (_tmp67_) {
				ValaDataType* _tmp70_;
				ValaDataType* _tmp71_;
				ValaDelegate* _tmp72_;
				ValaDelegate* _tmp73_;
				gboolean _tmp74_;
				gboolean _tmp75_;
				_tmp70_ = vala_property_get_property_type (prop);
				_tmp71_ = _tmp70_;
				_tmp72_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp71_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				_tmp73_ = _tmp72_;
				_tmp74_ = vala_delegate_get_has_target (_tmp73_);
				_tmp75_ = _tmp74_;
				_tmp66_ = _tmp75_;
			} else {
				_tmp66_ = FALSE;
			}
			if (_tmp66_) {
				ValaCCodeFunctionDeclarator* _tmp76_;
				gchar* _tmp77_;
				gchar* _tmp78_;
				ValaCCodeParameter* _tmp79_;
				ValaCCodeParameter* _tmp80_;
				_tmp76_ = vdeclarator;
				_tmp77_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
				_tmp78_ = _tmp77_;
				_tmp79_ = vala_ccode_parameter_new (_tmp78_, "gpointer*");
				_tmp80_ = _tmp79_;
				vala_ccode_function_declarator_add_parameter (_tmp76_, _tmp80_);
				_vala_ccode_node_unref0 (_tmp80_);
				_g_free0 (_tmp78_);
			}
		}
		_tmp81_ = creturn_type;
		_tmp82_ = vala_get_ccode_name ((ValaCodeNode*) _tmp81_);
		_tmp83_ = _tmp82_;
		_tmp84_ = vala_ccode_declaration_new (_tmp83_);
		_tmp85_ = _tmp84_;
		_g_free0 (_tmp83_);
		vdecl = _tmp85_;
		_tmp86_ = vdecl;
		_tmp87_ = vdeclarator;
		vala_ccode_declaration_add_declarator (_tmp86_, (ValaCCodeDeclarator*) _tmp87_);
		_tmp88_ = vdecl;
		vala_ccode_struct_add_declaration (type_struct, _tmp88_);
		_tmp91_ = cl;
		if (_tmp91_ != NULL) {
			ValaClass* _tmp92_;
			gboolean _tmp93_;
			gboolean _tmp94_;
			_tmp92_ = cl;
			_tmp93_ = vala_class_get_is_compact (_tmp92_);
			_tmp94_ = _tmp93_;
			_tmp90_ = _tmp94_;
		} else {
			_tmp90_ = FALSE;
		}
		if (_tmp90_) {
			ValaClass* _tmp95_;
			ValaClass* _tmp96_;
			ValaClass* _tmp97_;
			_tmp95_ = cl;
			_tmp96_ = vala_class_get_base_class (_tmp95_);
			_tmp97_ = _tmp96_;
			_tmp89_ = _tmp97_ == NULL;
		} else {
			_tmp89_ = FALSE;
		}
		if (_tmp89_) {
			ValaCCodeDeclaration* _tmp98_;
			_tmp98_ = vdecl;
			vala_ccode_struct_add_declaration (instance_struct, _tmp98_);
		}
		_vala_ccode_node_unref0 (vdecl);
		_vala_code_node_unref0 (array_type);
		_vala_code_node_unref0 (creturn_type);
		_vala_ccode_node_unref0 (vdeclarator);
	}
	_tmp99_ = vala_property_get_set_accessor (prop);
	_tmp100_ = _tmp99_;
	if (_tmp100_ != NULL) {
		ValaCCodeParameter* cvalueparam = NULL;
		ValaDataType* _tmp101_;
		ValaDataType* _tmp102_;
		ValaCCodeFunctionDeclarator* vdeclarator = NULL;
		const gchar* _tmp119_;
		const gchar* _tmp120_;
		gchar* _tmp121_;
		gchar* _tmp122_;
		ValaCCodeFunctionDeclarator* _tmp123_;
		ValaCCodeFunctionDeclarator* _tmp124_;
		ValaCCodeFunctionDeclarator* _tmp125_;
		ValaCCodeParameter* _tmp126_;
		ValaCCodeFunctionDeclarator* _tmp127_;
		ValaCCodeParameter* _tmp128_;
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp129_;
		ValaDataType* _tmp130_;
		ValaArrayType* _tmp131_;
		gboolean _tmp132_ = FALSE;
		ValaArrayType* _tmp133_;
		ValaCCodeDeclaration* vdecl = NULL;
		ValaCCodeDeclaration* _tmp175_;
		ValaCCodeDeclaration* _tmp176_;
		ValaCCodeFunctionDeclarator* _tmp177_;
		ValaCCodeDeclaration* _tmp178_;
		gboolean _tmp179_ = FALSE;
		gboolean _tmp180_ = FALSE;
		ValaClass* _tmp181_;
		_tmp101_ = vala_property_get_property_type (prop);
		_tmp102_ = _tmp101_;
		if (vala_data_type_is_real_non_null_struct_type (_tmp102_)) {
			ValaPropertyAccessor* _tmp103_;
			ValaPropertyAccessor* _tmp104_;
			ValaDataType* _tmp105_;
			ValaDataType* _tmp106_;
			gchar* _tmp107_;
			gchar* _tmp108_;
			gchar* _tmp109_;
			gchar* _tmp110_;
			ValaCCodeParameter* _tmp111_;
			_tmp103_ = vala_property_get_set_accessor (prop);
			_tmp104_ = _tmp103_;
			_tmp105_ = vala_property_accessor_get_value_type (_tmp104_);
			_tmp106_ = _tmp105_;
			_tmp107_ = vala_get_ccode_name ((ValaCodeNode*) _tmp106_);
			_tmp108_ = _tmp107_;
			_tmp109_ = g_strdup_printf ("%s *", _tmp108_);
			_tmp110_ = _tmp109_;
			_tmp111_ = vala_ccode_parameter_new ("value", _tmp110_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp111_;
			_g_free0 (_tmp110_);
			_g_free0 (_tmp108_);
		} else {
			ValaPropertyAccessor* _tmp112_;
			ValaPropertyAccessor* _tmp113_;
			ValaDataType* _tmp114_;
			ValaDataType* _tmp115_;
			gchar* _tmp116_;
			gchar* _tmp117_;
			ValaCCodeParameter* _tmp118_;
			_tmp112_ = vala_property_get_set_accessor (prop);
			_tmp113_ = _tmp112_;
			_tmp114_ = vala_property_accessor_get_value_type (_tmp113_);
			_tmp115_ = _tmp114_;
			_tmp116_ = vala_get_ccode_name ((ValaCodeNode*) _tmp115_);
			_tmp117_ = _tmp116_;
			_tmp118_ = vala_ccode_parameter_new ("value", _tmp117_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp118_;
			_g_free0 (_tmp117_);
		}
		_tmp119_ = vala_symbol_get_name ((ValaSymbol*) prop);
		_tmp120_ = _tmp119_;
		_tmp121_ = g_strdup_printf ("set_%s", _tmp120_);
		_tmp122_ = _tmp121_;
		_tmp123_ = vala_ccode_function_declarator_new (_tmp122_);
		_tmp124_ = _tmp123_;
		_g_free0 (_tmp122_);
		vdeclarator = _tmp124_;
		_tmp125_ = vdeclarator;
		_tmp126_ = cselfparam;
		vala_ccode_function_declarator_add_parameter (_tmp125_, _tmp126_);
		_tmp127_ = vdeclarator;
		_tmp128_ = cvalueparam;
		vala_ccode_function_declarator_add_parameter (_tmp127_, _tmp128_);
		_tmp129_ = vala_property_get_property_type (prop);
		_tmp130_ = _tmp129_;
		_tmp131_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp130_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp130_) : NULL);
		array_type = _tmp131_;
		_tmp133_ = array_type;
		if (_tmp133_ != NULL) {
			_tmp132_ = vala_get_ccode_array_length ((ValaCodeNode*) prop);
		} else {
			_tmp132_ = FALSE;
		}
		if (_tmp132_) {
			gchar* length_ctype = NULL;
			gchar* _tmp134_;
			_tmp134_ = vala_get_ccode_array_length_type ((ValaCodeNode*) prop);
			length_ctype = _tmp134_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp135_ = FALSE;
					_tmp135_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp137_;
						gint _tmp138_;
						gint _tmp139_;
						ValaCCodeFunctionDeclarator* _tmp140_;
						gchar* _tmp141_;
						gchar* _tmp142_;
						const gchar* _tmp143_;
						ValaCCodeParameter* _tmp144_;
						ValaCCodeParameter* _tmp145_;
						if (!_tmp135_) {
							gint _tmp136_;
							_tmp136_ = dim;
							dim = _tmp136_ + 1;
						}
						_tmp135_ = FALSE;
						_tmp137_ = array_type;
						_tmp138_ = vala_array_type_get_rank (_tmp137_);
						_tmp139_ = _tmp138_;
						if (!(dim <= _tmp139_)) {
							break;
						}
						_tmp140_ = vdeclarator;
						_tmp141_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "value", dim);
						_tmp142_ = _tmp141_;
						_tmp143_ = length_ctype;
						_tmp144_ = vala_ccode_parameter_new (_tmp142_, _tmp143_);
						_tmp145_ = _tmp144_;
						vala_ccode_function_declarator_add_parameter (_tmp140_, _tmp145_);
						_vala_ccode_node_unref0 (_tmp145_);
						_g_free0 (_tmp142_);
					}
				}
			}
			_g_free0 (length_ctype);
		} else {
			gboolean _tmp146_ = FALSE;
			gboolean _tmp147_ = FALSE;
			ValaDataType* _tmp148_;
			ValaDataType* _tmp149_;
			_tmp148_ = vala_property_get_property_type (prop);
			_tmp149_ = _tmp148_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp149_, VALA_TYPE_DELEGATE_TYPE)) {
				_tmp147_ = vala_get_ccode_delegate_target ((ValaCodeNode*) prop);
			} else {
				_tmp147_ = FALSE;
			}
			if (_tmp147_) {
				ValaDataType* _tmp150_;
				ValaDataType* _tmp151_;
				ValaDelegate* _tmp152_;
				ValaDelegate* _tmp153_;
				gboolean _tmp154_;
				gboolean _tmp155_;
				_tmp150_ = vala_property_get_property_type (prop);
				_tmp151_ = _tmp150_;
				_tmp152_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp151_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				_tmp153_ = _tmp152_;
				_tmp154_ = vala_delegate_get_has_target (_tmp153_);
				_tmp155_ = _tmp154_;
				_tmp146_ = _tmp155_;
			} else {
				_tmp146_ = FALSE;
			}
			if (_tmp146_) {
				ValaCCodeFunctionDeclarator* _tmp156_;
				gchar* _tmp157_;
				gchar* _tmp158_;
				ValaCCodeParameter* _tmp159_;
				ValaCCodeParameter* _tmp160_;
				ValaPropertyAccessor* _tmp161_;
				ValaPropertyAccessor* _tmp162_;
				ValaDataType* _tmp163_;
				ValaDataType* _tmp164_;
				gboolean _tmp165_;
				gboolean _tmp166_;
				_tmp156_ = vdeclarator;
				_tmp157_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "value");
				_tmp158_ = _tmp157_;
				_tmp159_ = vala_ccode_parameter_new (_tmp158_, "gpointer");
				_tmp160_ = _tmp159_;
				vala_ccode_function_declarator_add_parameter (_tmp156_, _tmp160_);
				_vala_ccode_node_unref0 (_tmp160_);
				_g_free0 (_tmp158_);
				_tmp161_ = vala_property_get_set_accessor (prop);
				_tmp162_ = _tmp161_;
				_tmp163_ = vala_property_accessor_get_value_type (_tmp162_);
				_tmp164_ = _tmp163_;
				_tmp165_ = vala_data_type_get_value_owned (_tmp164_);
				_tmp166_ = _tmp165_;
				if (_tmp166_) {
					ValaCCodeFunctionDeclarator* _tmp167_;
					gchar* _tmp168_;
					gchar* _tmp169_;
					ValaDelegateType* _tmp170_;
					gchar* _tmp171_;
					gchar* _tmp172_;
					ValaCCodeParameter* _tmp173_;
					ValaCCodeParameter* _tmp174_;
					_tmp167_ = vdeclarator;
					_tmp168_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, "value");
					_tmp169_ = _tmp168_;
					_tmp170_ = ((ValaCCodeBaseModule*) self)->delegate_target_destroy_type;
					_tmp171_ = vala_get_ccode_name ((ValaCodeNode*) _tmp170_);
					_tmp172_ = _tmp171_;
					_tmp173_ = vala_ccode_parameter_new (_tmp169_, _tmp172_);
					_tmp174_ = _tmp173_;
					vala_ccode_function_declarator_add_parameter (_tmp167_, _tmp174_);
					_vala_ccode_node_unref0 (_tmp174_);
					_g_free0 (_tmp172_);
					_g_free0 (_tmp169_);
				}
			}
		}
		_tmp175_ = vala_ccode_declaration_new ("void");
		vdecl = _tmp175_;
		_tmp176_ = vdecl;
		_tmp177_ = vdeclarator;
		vala_ccode_declaration_add_declarator (_tmp176_, (ValaCCodeDeclarator*) _tmp177_);
		_tmp178_ = vdecl;
		vala_ccode_struct_add_declaration (type_struct, _tmp178_);
		_tmp181_ = cl;
		if (_tmp181_ != NULL) {
			ValaClass* _tmp182_;
			gboolean _tmp183_;
			gboolean _tmp184_;
			_tmp182_ = cl;
			_tmp183_ = vala_class_get_is_compact (_tmp182_);
			_tmp184_ = _tmp183_;
			_tmp180_ = _tmp184_;
		} else {
			_tmp180_ = FALSE;
		}
		if (_tmp180_) {
			ValaClass* _tmp185_;
			ValaClass* _tmp186_;
			ValaClass* _tmp187_;
			_tmp185_ = cl;
			_tmp186_ = vala_class_get_base_class (_tmp185_);
			_tmp187_ = _tmp186_;
			_tmp179_ = _tmp187_ == NULL;
		} else {
			_tmp179_ = FALSE;
		}
		if (_tmp179_) {
			ValaCCodeDeclaration* _tmp188_;
			_tmp188_ = vdecl;
			vala_ccode_struct_add_declaration (instance_struct, _tmp188_);
		}
		_vala_ccode_node_unref0 (vdecl);
		_vala_code_node_unref0 (array_type);
		_vala_ccode_node_unref0 (vdeclarator);
		_vala_ccode_node_unref0 (cvalueparam);
	}
	_vala_ccode_node_unref0 (cselfparam);
	_vala_code_node_unref0 (this_type);
}

static void
vala_gtype_module_generate_struct_field_declaration (ValaGTypeModule* self,
                                                     ValaField* f,
                                                     ValaCCodeStruct* instance_struct,
                                                     ValaCCodeStruct* type_struct,
                                                     ValaCCodeFile* decl_space)
{
	ValaMemberBinding _tmp0_;
	ValaMemberBinding _tmp1_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (f != NULL);
	g_return_if_fail (instance_struct != NULL);
	g_return_if_fail (type_struct != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_field_get_binding (f);
	_tmp1_ = _tmp0_;
	if (_tmp1_ == VALA_MEMBER_BINDING_INSTANCE) {
		vala_ccode_base_module_append_field ((ValaCCodeBaseModule*) self, instance_struct, f, decl_space);
	} else {
		ValaMemberBinding _tmp2_;
		ValaMemberBinding _tmp3_;
		_tmp2_ = vala_field_get_binding (f);
		_tmp3_ = _tmp2_;
		if (_tmp3_ == VALA_MEMBER_BINDING_CLASS) {
			vala_ccode_base_module_append_field ((ValaCCodeBaseModule*) self, type_struct, f, decl_space);
		}
	}
}

static gboolean
vala_gtype_module_real_generate_method_declaration (ValaCCodeBaseModule* base,
                                                    ValaMethod* m,
                                                    ValaCCodeFile* decl_space)
{
	ValaGTypeModule * self;
	gboolean result;
	self = (ValaGTypeModule*) base;
	g_return_val_if_fail (m != NULL, FALSE);
	g_return_val_if_fail (decl_space != NULL, FALSE);
	if (VALA_CCODE_BASE_MODULE_CLASS (vala_gtype_module_parent_class)->generate_method_declaration ((ValaCCodeBaseModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), m, decl_space)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp0_;
		ValaSymbol* _tmp1_;
		gboolean _tmp2_ = FALSE;
		gboolean _tmp3_ = FALSE;
		gboolean _tmp4_ = FALSE;
		ValaClass* _tmp5_;
		_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
		_tmp1_ = _tmp0_;
		cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL;
		_tmp5_ = cl;
		if (_tmp5_ != NULL) {
			ValaClass* _tmp6_;
			gboolean _tmp7_;
			gboolean _tmp8_;
			_tmp6_ = cl;
			_tmp7_ = vala_class_get_is_compact (_tmp6_);
			_tmp8_ = _tmp7_;
			_tmp4_ = _tmp8_;
		} else {
			_tmp4_ = FALSE;
		}
		if (_tmp4_) {
			ValaClass* _tmp9_;
			gchar* _tmp10_;
			gchar* _tmp11_;
			gchar* _tmp12_;
			gchar* _tmp13_;
			_tmp9_ = cl;
			_tmp10_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) _tmp9_);
			_tmp11_ = _tmp10_;
			_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) m);
			_tmp13_ = _tmp12_;
			_tmp3_ = g_strcmp0 (_tmp11_, _tmp13_) == 0;
			_g_free0 (_tmp13_);
			_g_free0 (_tmp11_);
		} else {
			_tmp3_ = FALSE;
		}
		if (_tmp3_) {
			gboolean _tmp14_ = FALSE;
			gboolean _tmp15_ = FALSE;
			ValaCodeContext* _tmp16_;
			ValaCodeContext* _tmp17_;
			const gchar* _tmp18_;
			const gchar* _tmp19_;
			_tmp16_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
			_tmp17_ = _tmp16_;
			_tmp18_ = vala_code_context_get_header_filename (_tmp17_);
			_tmp19_ = _tmp18_;
			if (_tmp19_ == NULL) {
				_tmp15_ = TRUE;
			} else {
				CCodeFileType _tmp20_;
				CCodeFileType _tmp21_;
				_tmp20_ = vala_ccode_file_get_file_type (decl_space);
				_tmp21_ = _tmp20_;
				_tmp15_ = _tmp21_ == CCODE_FILE_TYPE_PUBLIC_HEADER;
			}
			if (_tmp15_) {
				_tmp14_ = TRUE;
			} else {
				gboolean _tmp22_ = FALSE;
				CCodeFileType _tmp23_;
				CCodeFileType _tmp24_;
				_tmp23_ = vala_ccode_file_get_file_type (decl_space);
				_tmp24_ = _tmp23_;
				if (_tmp24_ == CCODE_FILE_TYPE_INTERNAL_HEADER) {
					ValaClass* _tmp25_;
					_tmp25_ = cl;
					_tmp22_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp25_);
				} else {
					_tmp22_ = FALSE;
				}
				_tmp14_ = _tmp22_;
			}
			_tmp2_ = _tmp14_;
		} else {
			_tmp2_ = FALSE;
		}
		if (_tmp2_) {
			ValaClass* _tmp26_;
			gchar* _tmp27_;
			gchar* _tmp28_;
			gchar* _tmp29_;
			gchar* _tmp30_;
			gchar* _tmp31_;
			gchar* _tmp32_;
			ValaCCodeIdentifier* _tmp33_;
			ValaCCodeIdentifier* _tmp34_;
			ValaCCodeNewline* _tmp35_;
			ValaCCodeNewline* _tmp36_;
			_tmp26_ = cl;
			_tmp27_ = vala_get_ccode_name ((ValaCodeNode*) _tmp26_);
			_tmp28_ = _tmp27_;
			_tmp29_ = vala_get_ccode_name ((ValaCodeNode*) m);
			_tmp30_ = _tmp29_;
			_tmp31_ = g_strdup_printf ("G_DEFINE_AUTOPTR_CLEANUP_FUNC (%s, %s)", _tmp28_, _tmp30_);
			_tmp32_ = _tmp31_;
			_tmp33_ = vala_ccode_identifier_new (_tmp32_);
			_tmp34_ = _tmp33_;
			vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp34_);
			_vala_ccode_node_unref0 (_tmp34_);
			_g_free0 (_tmp32_);
			_g_free0 (_tmp30_);
			_g_free0 (_tmp28_);
			_tmp35_ = vala_ccode_newline_new ();
			_tmp36_ = _tmp35_;
			vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp36_);
			_vala_ccode_node_unref0 (_tmp36_);
		}
		result = TRUE;
		return result;
	}
	result = FALSE;
	return result;
}

static void
vala_gtype_module_real_generate_virtual_method_declaration (ValaGTypeModule* self,
                                                            ValaMethod* m,
                                                            ValaCCodeFile* decl_space,
                                                            ValaCCodeStruct* type_struct)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaDataType* creturn_type = NULL;
	ValaDataType* _tmp5_;
	ValaCCodeFunctionDeclarator* vdeclarator = NULL;
	gchar* _tmp6_;
	gchar* _tmp7_;
	ValaCCodeFunctionDeclarator* _tmp8_;
	ValaCCodeFunctionDeclarator* _tmp9_;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp10_;
	GEqualFunc _tmp11_;
	GEqualFunc _tmp12_;
	ValaHashMap* _tmp13_;
	gboolean _tmp14_;
	gboolean _tmp15_;
	ValaVersionAttribute* _tmp26_;
	ValaVersionAttribute* _tmp27_;
	gboolean _tmp28_;
	gboolean _tmp29_;
	ValaHashMap* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeFunction* _tmp36_;
	ValaCCodeFunctionDeclarator* _tmp37_;
	ValaCCodeDeclaration* vdecl = NULL;
	ValaDataType* _tmp38_;
	gchar* _tmp39_;
	gchar* _tmp40_;
	ValaCCodeDeclaration* _tmp41_;
	ValaCCodeDeclaration* _tmp42_;
	ValaCCodeDeclaration* _tmp43_;
	ValaCCodeFunctionDeclarator* _tmp44_;
	ValaCCodeDeclaration* _tmp45_;
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	g_return_if_fail (type_struct != NULL);
	_tmp1_ = vala_method_get_is_abstract (m);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		gboolean _tmp3_;
		gboolean _tmp4_;
		_tmp3_ = vala_method_get_is_virtual (m);
		_tmp4_ = _tmp3_;
		_tmp0_ = !_tmp4_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		return;
	}
	_tmp5_ = vala_ccode_base_module_get_callable_creturn_type ((ValaCallable*) m);
	creturn_type = _tmp5_;
	_tmp6_ = vala_get_ccode_vfunc_name (m);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_ccode_function_declarator_new (_tmp7_);
	_tmp9_ = _tmp8_;
	_g_free0 (_tmp7_);
	vdeclarator = _tmp9_;
	_tmp10_ = g_direct_hash;
	_tmp11_ = g_direct_equal;
	_tmp12_ = g_direct_equal;
	_tmp13_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp10_, _tmp11_, _tmp12_);
	cparam_map = _tmp13_;
	_tmp14_ = vala_method_get_printf_format (m);
	_tmp15_ = _tmp14_;
	if (_tmp15_) {
		ValaCCodeFunctionDeclarator* _tmp16_;
		ValaCCodeFunctionDeclarator* _tmp17_;
		ValaCCodeModifiers _tmp18_;
		ValaCCodeModifiers _tmp19_;
		_tmp16_ = vdeclarator;
		_tmp17_ = vdeclarator;
		_tmp18_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp17_);
		_tmp19_ = _tmp18_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp17_, _tmp19_ | VALA_CCODE_MODIFIERS_PRINTF);
	} else {
		gboolean _tmp20_;
		gboolean _tmp21_;
		_tmp20_ = vala_method_get_scanf_format (m);
		_tmp21_ = _tmp20_;
		if (_tmp21_) {
			ValaCCodeFunctionDeclarator* _tmp22_;
			ValaCCodeFunctionDeclarator* _tmp23_;
			ValaCCodeModifiers _tmp24_;
			ValaCCodeModifiers _tmp25_;
			_tmp22_ = vdeclarator;
			_tmp23_ = vdeclarator;
			_tmp24_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp23_);
			_tmp25_ = _tmp24_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp23_, _tmp25_ | VALA_CCODE_MODIFIERS_SCANF);
		}
	}
	_tmp26_ = vala_symbol_get_version ((ValaSymbol*) m);
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_version_attribute_get_deprecated (_tmp27_);
	_tmp29_ = _tmp28_;
	if (_tmp29_) {
		ValaCCodeFunctionDeclarator* _tmp30_;
		ValaCCodeFunctionDeclarator* _tmp31_;
		ValaCCodeModifiers _tmp32_;
		ValaCCodeModifiers _tmp33_;
		_tmp30_ = vdeclarator;
		_tmp31_ = vdeclarator;
		_tmp32_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp31_);
		_tmp33_ = _tmp32_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp31_, _tmp33_ | VALA_CCODE_MODIFIERS_DEPRECATED);
	}
	_tmp34_ = cparam_map;
	_tmp35_ = vala_ccode_function_new ("fake", "void");
	_tmp36_ = _tmp35_;
	_tmp37_ = vdeclarator;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, m, decl_space, (ValaMap*) _tmp34_, _tmp36_, _tmp37_, NULL, NULL, 3);
	_vala_ccode_node_unref0 (_tmp36_);
	_tmp38_ = creturn_type;
	_tmp39_ = vala_get_ccode_name ((ValaCodeNode*) _tmp38_);
	_tmp40_ = _tmp39_;
	_tmp41_ = vala_ccode_declaration_new (_tmp40_);
	_tmp42_ = _tmp41_;
	_g_free0 (_tmp40_);
	vdecl = _tmp42_;
	_tmp43_ = vdecl;
	_tmp44_ = vdeclarator;
	vala_ccode_declaration_add_declarator (_tmp43_, (ValaCCodeDeclarator*) _tmp44_);
	_tmp45_ = vdecl;
	vala_ccode_struct_add_declaration (type_struct, _tmp45_);
	_vala_ccode_node_unref0 (vdecl);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (vdeclarator);
	_vala_code_node_unref0 (creturn_type);
}

void
vala_gtype_module_generate_virtual_method_declaration (ValaGTypeModule* self,
                                                       ValaMethod* m,
                                                       ValaCCodeFile* decl_space,
                                                       ValaCCodeStruct* type_struct)
{
	ValaGTypeModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_GTYPE_MODULE_GET_CLASS (self);
	if (_klass_->generate_virtual_method_declaration) {
		_klass_->generate_virtual_method_declaration (self, m, decl_space, type_struct);
	}
}

static void
vala_gtype_module_generate_class_private_declaration (ValaGTypeModule* self,
                                                      ValaClass* cl,
                                                      ValaCCodeFile* decl_space)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_;
	gboolean _tmp2_;
	gboolean is_gtypeinstance = FALSE;
	gboolean _tmp7_;
	gboolean _tmp8_;
	gboolean has_class_locks = FALSE;
	ValaCCodeStruct* instance_priv_struct = NULL;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeStruct* _tmp13_;
	ValaCCodeStruct* _tmp14_;
	ValaCCodeStruct* type_priv_struct = NULL;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	ValaCCodeStruct* _tmp19_;
	ValaCCodeStruct* _tmp20_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp1_ = vala_class_get_is_opaque (cl);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		_tmp0_ = TRUE;
	} else {
		gchar* _tmp3_;
		gchar* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp4_ = _tmp3_;
		_tmp5_ = g_strdup_printf ("%sPrivate", _tmp4_);
		_tmp6_ = _tmp5_;
		_tmp0_ = vala_ccode_file_add_declaration (decl_space, _tmp6_);
		_g_free0 (_tmp6_);
		_g_free0 (_tmp4_);
	}
	if (_tmp0_) {
		return;
	}
	_tmp7_ = vala_class_get_is_compact (cl);
	_tmp8_ = _tmp7_;
	is_gtypeinstance = !_tmp8_;
	has_class_locks = FALSE;
	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("_%sPrivate", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_struct_new (_tmp12_);
	_tmp14_ = _tmp13_;
	_g_free0 (_tmp12_);
	_g_free0 (_tmp10_);
	instance_priv_struct = _tmp14_;
	_tmp15_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
	_tmp16_ = _tmp15_;
	_tmp17_ = g_strdup_printf ("_%sPrivate", _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_ccode_struct_new (_tmp18_);
	_tmp20_ = _tmp19_;
	_g_free0 (_tmp18_);
	_g_free0 (_tmp16_);
	type_priv_struct = _tmp20_;
	if (is_gtypeinstance) {
		{
			ValaList* _type_param_list = NULL;
			ValaList* _tmp21_;
			gint _type_param_size = 0;
			ValaList* _tmp22_;
			gint _tmp23_;
			gint _tmp24_;
			gint _type_param_index = 0;
			_tmp21_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
			_type_param_list = _tmp21_;
			_tmp22_ = _type_param_list;
			_tmp23_ = vala_collection_get_size ((ValaCollection*) _tmp22_);
			_tmp24_ = _tmp23_;
			_type_param_size = _tmp24_;
			_type_param_index = -1;
			while (TRUE) {
				gint _tmp25_;
				gint _tmp26_;
				ValaTypeParameter* type_param = NULL;
				ValaList* _tmp27_;
				gpointer _tmp28_;
				ValaCCodeStruct* _tmp29_;
				ValaTypeParameter* _tmp30_;
				gchar* _tmp31_;
				gchar* _tmp32_;
				ValaCCodeStruct* _tmp33_;
				ValaTypeParameter* _tmp34_;
				gchar* _tmp35_;
				gchar* _tmp36_;
				ValaCCodeStruct* _tmp37_;
				ValaTypeParameter* _tmp38_;
				gchar* _tmp39_;
				gchar* _tmp40_;
				_type_param_index = _type_param_index + 1;
				_tmp25_ = _type_param_index;
				_tmp26_ = _type_param_size;
				if (!(_tmp25_ < _tmp26_)) {
					break;
				}
				_tmp27_ = _type_param_list;
				_tmp28_ = vala_list_get (_tmp27_, _type_param_index);
				type_param = (ValaTypeParameter*) _tmp28_;
				_tmp29_ = instance_priv_struct;
				_tmp30_ = type_param;
				_tmp31_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp30_);
				_tmp32_ = _tmp31_;
				vala_ccode_struct_add_field (_tmp29_, "GType", _tmp32_, 0, NULL);
				_g_free0 (_tmp32_);
				_tmp33_ = instance_priv_struct;
				_tmp34_ = type_param;
				_tmp35_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp34_);
				_tmp36_ = _tmp35_;
				vala_ccode_struct_add_field (_tmp33_, "GBoxedCopyFunc", _tmp36_, 0, NULL);
				_g_free0 (_tmp36_);
				_tmp37_ = instance_priv_struct;
				_tmp38_ = type_param;
				_tmp39_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp38_);
				_tmp40_ = _tmp39_;
				vala_ccode_struct_add_field (_tmp37_, "GDestroyNotify", _tmp40_, 0, NULL);
				_g_free0 (_tmp40_);
				_vala_code_node_unref0 (type_param);
			}
		}
	}
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp41_;
		gint _f_size = 0;
		ValaList* _tmp42_;
		gint _tmp43_;
		gint _tmp44_;
		gint _f_index = 0;
		_tmp41_ = vala_object_type_symbol_get_fields ((ValaObjectTypeSymbol*) cl);
		_f_list = _tmp41_;
		_tmp42_ = _f_list;
		_tmp43_ = vala_collection_get_size ((ValaCollection*) _tmp42_);
		_tmp44_ = _tmp43_;
		_f_size = _tmp44_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp45_;
			gint _tmp46_;
			ValaField* f = NULL;
			ValaList* _tmp47_;
			gpointer _tmp48_;
			ValaField* _tmp49_;
			ValaSymbolAccessibility _tmp50_;
			ValaSymbolAccessibility _tmp51_;
			ValaField* _tmp55_;
			gboolean _tmp56_;
			gboolean _tmp57_;
			_f_index = _f_index + 1;
			_tmp45_ = _f_index;
			_tmp46_ = _f_size;
			if (!(_tmp45_ < _tmp46_)) {
				break;
			}
			_tmp47_ = _f_list;
			_tmp48_ = vala_list_get (_tmp47_, _f_index);
			f = (ValaField*) _tmp48_;
			_tmp49_ = f;
			_tmp50_ = vala_symbol_get_access ((ValaSymbol*) _tmp49_);
			_tmp51_ = _tmp50_;
			if (_tmp51_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
				ValaField* _tmp52_;
				ValaCCodeStruct* _tmp53_;
				ValaCCodeStruct* _tmp54_;
				_tmp52_ = f;
				_tmp53_ = instance_priv_struct;
				_tmp54_ = type_priv_struct;
				vala_gtype_module_generate_struct_field_declaration (self, _tmp52_, _tmp53_, _tmp54_, decl_space);
			}
			_tmp55_ = f;
			_tmp56_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp55_);
			_tmp57_ = _tmp56_;
			if (_tmp57_) {
				ValaField* _tmp58_;
				ValaMemberBinding _tmp59_;
				ValaMemberBinding _tmp60_;
				_tmp58_ = f;
				_tmp59_ = vala_field_get_binding (_tmp58_);
				_tmp60_ = _tmp59_;
				if (_tmp60_ == VALA_MEMBER_BINDING_INSTANCE) {
					ValaCCodeStruct* _tmp61_;
					ValaStruct* _tmp62_;
					gchar* _tmp63_;
					gchar* _tmp64_;
					ValaField* _tmp65_;
					gchar* _tmp66_;
					gchar* _tmp67_;
					gchar* _tmp68_;
					gchar* _tmp69_;
					vala_class_set_has_private_fields (cl, TRUE);
					_tmp61_ = instance_priv_struct;
					_tmp62_ = ((ValaCCodeBaseModule*) self)->mutex_type;
					_tmp63_ = vala_get_ccode_name ((ValaCodeNode*) _tmp62_);
					_tmp64_ = _tmp63_;
					_tmp65_ = f;
					_tmp66_ = vala_get_ccode_name ((ValaCodeNode*) _tmp65_);
					_tmp67_ = _tmp66_;
					_tmp68_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp67_);
					_tmp69_ = _tmp68_;
					vala_ccode_struct_add_field (_tmp61_, _tmp64_, _tmp69_, 0, NULL);
					_g_free0 (_tmp69_);
					_g_free0 (_tmp67_);
					_g_free0 (_tmp64_);
				} else {
					ValaField* _tmp70_;
					ValaMemberBinding _tmp71_;
					ValaMemberBinding _tmp72_;
					_tmp70_ = f;
					_tmp71_ = vala_field_get_binding (_tmp70_);
					_tmp72_ = _tmp71_;
					if (_tmp72_ == VALA_MEMBER_BINDING_CLASS) {
						ValaCCodeStruct* _tmp73_;
						ValaStruct* _tmp74_;
						gchar* _tmp75_;
						gchar* _tmp76_;
						ValaField* _tmp77_;
						gchar* _tmp78_;
						gchar* _tmp79_;
						gchar* _tmp80_;
						gchar* _tmp81_;
						has_class_locks = TRUE;
						_tmp73_ = type_priv_struct;
						_tmp74_ = ((ValaCCodeBaseModule*) self)->mutex_type;
						_tmp75_ = vala_get_ccode_name ((ValaCodeNode*) _tmp74_);
						_tmp76_ = _tmp75_;
						_tmp77_ = f;
						_tmp78_ = vala_get_ccode_name ((ValaCodeNode*) _tmp77_);
						_tmp79_ = _tmp78_;
						_tmp80_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp79_);
						_tmp81_ = _tmp80_;
						vala_ccode_struct_add_field (_tmp73_, _tmp76_, _tmp81_, 0, NULL);
						_g_free0 (_tmp81_);
						_g_free0 (_tmp79_);
						_g_free0 (_tmp76_);
					}
				}
			}
			_vala_code_node_unref0 (f);
		}
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp82_;
		gint _prop_size = 0;
		ValaList* _tmp83_;
		gint _tmp84_;
		gint _tmp85_;
		gint _prop_index = 0;
		_tmp82_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
		_prop_list = _tmp82_;
		_tmp83_ = _prop_list;
		_tmp84_ = vala_collection_get_size ((ValaCollection*) _tmp83_);
		_tmp85_ = _tmp84_;
		_prop_size = _tmp85_;
		_prop_index = -1;
		while (TRUE) {
			gint _tmp86_;
			gint _tmp87_;
			ValaProperty* prop = NULL;
			ValaList* _tmp88_;
			gpointer _tmp89_;
			ValaProperty* _tmp90_;
			ValaMemberBinding _tmp91_;
			ValaMemberBinding _tmp92_;
			_prop_index = _prop_index + 1;
			_tmp86_ = _prop_index;
			_tmp87_ = _prop_size;
			if (!(_tmp86_ < _tmp87_)) {
				break;
			}
			_tmp88_ = _prop_list;
			_tmp89_ = vala_list_get (_tmp88_, _prop_index);
			prop = (ValaProperty*) _tmp89_;
			_tmp90_ = prop;
			_tmp91_ = vala_property_get_binding (_tmp90_);
			_tmp92_ = _tmp91_;
			if (_tmp92_ == VALA_MEMBER_BINDING_INSTANCE) {
				ValaProperty* _tmp93_;
				gboolean _tmp94_;
				gboolean _tmp95_;
				_tmp93_ = prop;
				_tmp94_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp93_);
				_tmp95_ = _tmp94_;
				if (_tmp95_) {
					ValaCCodeStruct* _tmp96_;
					ValaStruct* _tmp97_;
					gchar* _tmp98_;
					gchar* _tmp99_;
					ValaProperty* _tmp100_;
					gchar* _tmp101_;
					gchar* _tmp102_;
					gchar* _tmp103_;
					gchar* _tmp104_;
					vala_class_set_has_private_fields (cl, TRUE);
					_tmp96_ = instance_priv_struct;
					_tmp97_ = ((ValaCCodeBaseModule*) self)->mutex_type;
					_tmp98_ = vala_get_ccode_name ((ValaCodeNode*) _tmp97_);
					_tmp99_ = _tmp98_;
					_tmp100_ = prop;
					_tmp101_ = vala_get_ccode_name ((ValaCodeNode*) _tmp100_);
					_tmp102_ = _tmp101_;
					_tmp103_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp102_);
					_tmp104_ = _tmp103_;
					vala_ccode_struct_add_field (_tmp96_, _tmp99_, _tmp104_, 0, NULL);
					_g_free0 (_tmp104_);
					_g_free0 (_tmp102_);
					_g_free0 (_tmp99_);
				}
			} else {
				ValaProperty* _tmp105_;
				ValaMemberBinding _tmp106_;
				ValaMemberBinding _tmp107_;
				_tmp105_ = prop;
				_tmp106_ = vala_property_get_binding (_tmp105_);
				_tmp107_ = _tmp106_;
				if (_tmp107_ == VALA_MEMBER_BINDING_CLASS) {
					ValaProperty* _tmp108_;
					gboolean _tmp109_;
					gboolean _tmp110_;
					_tmp108_ = prop;
					_tmp109_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp108_);
					_tmp110_ = _tmp109_;
					if (_tmp110_) {
						ValaCCodeStruct* _tmp111_;
						ValaStruct* _tmp112_;
						gchar* _tmp113_;
						gchar* _tmp114_;
						ValaProperty* _tmp115_;
						gchar* _tmp116_;
						gchar* _tmp117_;
						gchar* _tmp118_;
						gchar* _tmp119_;
						has_class_locks = TRUE;
						_tmp111_ = type_priv_struct;
						_tmp112_ = ((ValaCCodeBaseModule*) self)->mutex_type;
						_tmp113_ = vala_get_ccode_name ((ValaCodeNode*) _tmp112_);
						_tmp114_ = _tmp113_;
						_tmp115_ = prop;
						_tmp116_ = vala_get_ccode_name ((ValaCodeNode*) _tmp115_);
						_tmp117_ = _tmp116_;
						_tmp118_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp117_);
						_tmp119_ = _tmp118_;
						vala_ccode_struct_add_field (_tmp111_, _tmp114_, _tmp119_, 0, NULL);
						_g_free0 (_tmp119_);
						_g_free0 (_tmp117_);
						_g_free0 (_tmp114_);
					}
				}
			}
			_vala_code_node_unref0 (prop);
		}
	}
	if (is_gtypeinstance) {
		gboolean _tmp120_ = FALSE;
		gboolean _tmp121_;
		gboolean _tmp122_;
		gboolean _tmp136_ = FALSE;
		gboolean _tmp137_;
		gboolean _tmp138_;
		gboolean _tmp192_ = FALSE;
		gboolean _tmp193_;
		gboolean _tmp194_;
		_tmp121_ = vala_class_get_has_class_private_fields (cl);
		_tmp122_ = _tmp121_;
		if (_tmp122_) {
			_tmp120_ = TRUE;
		} else {
			_tmp120_ = has_class_locks;
		}
		if (_tmp120_) {
			ValaCCodeStruct* _tmp123_;
			const gchar* _tmp124_;
			const gchar* _tmp125_;
			gchar* _tmp126_;
			gchar* _tmp127_;
			gchar* _tmp128_;
			gchar* _tmp129_;
			gchar* _tmp130_;
			gchar* _tmp131_;
			ValaCCodeVariableDeclarator* _tmp132_;
			ValaCCodeVariableDeclarator* _tmp133_;
			ValaCCodeTypeDefinition* _tmp134_;
			ValaCCodeTypeDefinition* _tmp135_;
			_tmp123_ = type_priv_struct;
			_tmp124_ = vala_ccode_struct_get_name (_tmp123_);
			_tmp125_ = _tmp124_;
			_tmp126_ = g_strdup_printf ("struct %s", _tmp125_);
			_tmp127_ = _tmp126_;
			_tmp128_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
			_tmp129_ = _tmp128_;
			_tmp130_ = g_strdup_printf ("%sPrivate", _tmp129_);
			_tmp131_ = _tmp130_;
			_tmp132_ = vala_ccode_variable_declarator_new (_tmp131_, NULL, NULL);
			_tmp133_ = _tmp132_;
			_tmp134_ = vala_ccode_type_definition_new (_tmp127_, (ValaCCodeDeclarator*) _tmp133_);
			_tmp135_ = _tmp134_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp135_);
			_vala_ccode_node_unref0 (_tmp135_);
			_vala_ccode_node_unref0 (_tmp133_);
			_g_free0 (_tmp131_);
			_g_free0 (_tmp129_);
			_g_free0 (_tmp127_);
		}
		_tmp137_ = vala_class_get_has_private_fields (cl);
		_tmp138_ = _tmp137_;
		if (_tmp138_) {
			_tmp136_ = TRUE;
		} else {
			_tmp136_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) cl);
		}
		if (_tmp136_) {
			ValaCCodeStruct* _tmp139_;
			ValaCCodeDeclaration* parent_decl = NULL;
			ValaCCodeDeclaration* _tmp140_;
			ValaCCodeVariableDeclarator* parent_var_decl = NULL;
			gchar* _tmp141_;
			gchar* _tmp142_;
			gchar* _tmp143_;
			gchar* _tmp144_;
			ValaCCodeVariableDeclarator* _tmp145_;
			ValaCCodeVariableDeclarator* _tmp146_;
			ValaCCodeDeclaration* _tmp147_;
			ValaCCodeVariableDeclarator* _tmp148_;
			ValaCCodeDeclaration* _tmp149_;
			ValaCCodeFile* _tmp150_;
			ValaCCodeDeclaration* _tmp151_;
			ValaCCodeFunction* function = NULL;
			gchar* _tmp152_;
			gchar* _tmp153_;
			gchar* _tmp154_;
			gchar* _tmp155_;
			ValaCCodeFunction* _tmp156_;
			ValaCCodeFunction* _tmp157_;
			ValaCCodeFunction* _tmp158_;
			ValaCCodeFunction* _tmp159_;
			gchar* _tmp160_;
			gchar* _tmp161_;
			gchar* _tmp162_;
			gchar* _tmp163_;
			ValaCCodeParameter* _tmp164_;
			ValaCCodeParameter* _tmp165_;
			ValaCCodeFunction* _tmp166_;
			ValaCCodeFunction* _tmp167_;
			ValaCCodeBlock* _tmp168_;
			ValaCCodeBlock* _tmp169_;
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeIdentifier* _tmp170_;
			ValaCCodeIdentifier* _tmp171_;
			ValaCCodeFunctionCall* _tmp172_;
			ValaCCodeFunctionCall* _tmp173_;
			ValaCCodeFunctionCall* _tmp174_;
			ValaCCodeIdentifier* _tmp175_;
			ValaCCodeIdentifier* _tmp176_;
			ValaCCodeFunctionCall* _tmp177_;
			gchar* _tmp178_;
			gchar* _tmp179_;
			gchar* _tmp180_;
			gchar* _tmp181_;
			ValaCCodeIdentifier* _tmp182_;
			ValaCCodeIdentifier* _tmp183_;
			ValaCCodeFunction* _tmp184_;
			ValaCCodeBlock* _tmp185_;
			ValaCCodeBlock* _tmp186_;
			ValaCCodeFunctionCall* _tmp187_;
			ValaCCodeReturnStatement* _tmp188_;
			ValaCCodeReturnStatement* _tmp189_;
			ValaCCodeFile* _tmp190_;
			ValaCCodeFunction* _tmp191_;
			_tmp139_ = instance_priv_struct;
			vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp139_);
			_tmp140_ = vala_ccode_declaration_new ("gint");
			parent_decl = _tmp140_;
			_tmp141_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp142_ = _tmp141_;
			_tmp143_ = g_strdup_printf ("%s_private_offset", _tmp142_);
			_tmp144_ = _tmp143_;
			_tmp145_ = vala_ccode_variable_declarator_new (_tmp144_, NULL, NULL);
			_tmp146_ = _tmp145_;
			_g_free0 (_tmp144_);
			_g_free0 (_tmp142_);
			parent_var_decl = _tmp146_;
			_tmp147_ = parent_decl;
			_tmp148_ = parent_var_decl;
			vala_ccode_declaration_add_declarator (_tmp147_, (ValaCCodeDeclarator*) _tmp148_);
			_tmp149_ = parent_decl;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp149_, VALA_CCODE_MODIFIERS_STATIC);
			_tmp150_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp151_ = parent_decl;
			vala_ccode_file_add_type_member_declaration (_tmp150_, (ValaCCodeNode*) _tmp151_);
			_tmp152_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
			_tmp153_ = _tmp152_;
			_tmp154_ = g_strdup_printf ("%s_get_instance_private", _tmp153_);
			_tmp155_ = _tmp154_;
			_tmp156_ = vala_ccode_function_new (_tmp155_, "gpointer");
			_tmp157_ = _tmp156_;
			_g_free0 (_tmp155_);
			_g_free0 (_tmp153_);
			function = _tmp157_;
			_tmp158_ = function;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp158_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
			_tmp159_ = function;
			_tmp160_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp161_ = _tmp160_;
			_tmp162_ = g_strdup_printf ("%s*", _tmp161_);
			_tmp163_ = _tmp162_;
			_tmp164_ = vala_ccode_parameter_new ("self", _tmp163_);
			_tmp165_ = _tmp164_;
			vala_ccode_function_add_parameter (_tmp159_, _tmp165_);
			_vala_ccode_node_unref0 (_tmp165_);
			_g_free0 (_tmp163_);
			_g_free0 (_tmp161_);
			_tmp166_ = function;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp166_);
			_tmp167_ = function;
			_tmp168_ = vala_ccode_block_new ();
			_tmp169_ = _tmp168_;
			vala_ccode_function_set_block (_tmp167_, _tmp169_);
			_vala_ccode_node_unref0 (_tmp169_);
			_tmp170_ = vala_ccode_identifier_new ("G_STRUCT_MEMBER_P");
			_tmp171_ = _tmp170_;
			_tmp172_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp171_);
			_tmp173_ = _tmp172_;
			_vala_ccode_node_unref0 (_tmp171_);
			ccall = _tmp173_;
			_tmp174_ = ccall;
			_tmp175_ = vala_ccode_identifier_new ("self");
			_tmp176_ = _tmp175_;
			vala_ccode_function_call_add_argument (_tmp174_, (ValaCCodeExpression*) _tmp176_);
			_vala_ccode_node_unref0 (_tmp176_);
			_tmp177_ = ccall;
			_tmp178_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp179_ = _tmp178_;
			_tmp180_ = g_strdup_printf ("%s_private_offset", _tmp179_);
			_tmp181_ = _tmp180_;
			_tmp182_ = vala_ccode_identifier_new (_tmp181_);
			_tmp183_ = _tmp182_;
			vala_ccode_function_call_add_argument (_tmp177_, (ValaCCodeExpression*) _tmp183_);
			_vala_ccode_node_unref0 (_tmp183_);
			_g_free0 (_tmp181_);
			_g_free0 (_tmp179_);
			_tmp184_ = function;
			_tmp185_ = vala_ccode_function_get_block (_tmp184_);
			_tmp186_ = _tmp185_;
			_tmp187_ = ccall;
			_tmp188_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp187_);
			_tmp189_ = _tmp188_;
			vala_ccode_block_add_statement (_tmp186_, (ValaCCodeNode*) _tmp189_);
			_vala_ccode_node_unref0 (_tmp189_);
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp190_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp191_ = function;
			vala_ccode_file_add_function (_tmp190_, _tmp191_);
			_vala_ccode_node_unref0 (ccall);
			_vala_ccode_node_unref0 (function);
			_vala_ccode_node_unref0 (parent_var_decl);
			_vala_ccode_node_unref0 (parent_decl);
		}
		_tmp193_ = vala_class_get_has_class_private_fields (cl);
		_tmp194_ = _tmp193_;
		if (_tmp194_) {
			_tmp192_ = TRUE;
		} else {
			_tmp192_ = has_class_locks;
		}
		if (_tmp192_) {
			ValaCCodeStruct* _tmp195_;
			gchar* macro = NULL;
			gchar* _tmp196_;
			gchar* _tmp197_;
			gchar* _tmp198_;
			gchar* _tmp199_;
			gchar* _tmp200_;
			gchar* _tmp201_;
			gchar* _tmp202_;
			gchar* _tmp203_;
			gchar* _tmp204_;
			gchar* _tmp205_;
			const gchar* _tmp206_;
			ValaCCodeMacroReplacement* _tmp207_;
			ValaCCodeMacroReplacement* _tmp208_;
			_tmp195_ = type_priv_struct;
			vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp195_);
			_tmp196_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp197_ = _tmp196_;
			_tmp198_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
			_tmp199_ = _tmp198_;
			_tmp200_ = g_strdup_printf ("(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sPrivate))", _tmp197_, _tmp199_);
			_tmp201_ = _tmp200_;
			_g_free0 (_tmp199_);
			_g_free0 (_tmp197_);
			macro = _tmp201_;
			_tmp202_ = vala_get_ccode_class_get_private_function (cl);
			_tmp203_ = _tmp202_;
			_tmp204_ = g_strdup_printf ("%s(klass)", _tmp203_);
			_tmp205_ = _tmp204_;
			_tmp206_ = macro;
			_tmp207_ = vala_ccode_macro_replacement_new (_tmp205_, _tmp206_);
			_tmp208_ = _tmp207_;
			vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp208_);
			_vala_ccode_node_unref0 (_tmp208_);
			_g_free0 (_tmp205_);
			_g_free0 (_tmp203_);
			_g_free0 (macro);
		}
	}
	_vala_ccode_node_unref0 (type_priv_struct);
	_vala_ccode_node_unref0 (instance_priv_struct);
}

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

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

static void
vala_gtype_module_real_visit_class (ValaCodeVisitor* base,
                                    ValaClass* cl)
{
	ValaGTypeModule * self;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaSourceReference* _tmp2_;
	ValaSourceReference* _tmp3_;
	ValaCCodeStruct* old_param_spec_struct = NULL;
	ValaCCodeStruct* _tmp4_;
	ValaCCodeStruct* _tmp5_;
	ValaCCodeEnum* old_prop_enum = NULL;
	ValaCCodeEnum* _tmp6_;
	ValaCCodeEnum* _tmp7_;
	ValaCCodeEnum* old_signal_enum = NULL;
	ValaCCodeEnum* _tmp8_;
	ValaCCodeEnum* _tmp9_;
	ValaCCodeBaseModuleEmitContext* old_class_init_context = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp10_;
	ValaCCodeBaseModuleEmitContext* _tmp11_;
	ValaCCodeBaseModuleEmitContext* old_base_init_context = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp12_;
	ValaCCodeBaseModuleEmitContext* _tmp13_;
	ValaCCodeBaseModuleEmitContext* old_class_finalize_context = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp14_;
	ValaCCodeBaseModuleEmitContext* _tmp15_;
	ValaCCodeBaseModuleEmitContext* old_base_finalize_context = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp16_;
	ValaCCodeBaseModuleEmitContext* _tmp17_;
	ValaCCodeBaseModuleEmitContext* old_instance_init_context = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp18_;
	ValaCCodeBaseModuleEmitContext* _tmp19_;
	ValaCCodeBaseModuleEmitContext* old_instance_finalize_context = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp20_;
	ValaCCodeBaseModuleEmitContext* _tmp21_;
	gboolean is_gtypeinstance = FALSE;
	gboolean _tmp22_;
	gboolean _tmp23_;
	gboolean _tmp24_ = FALSE;
	gboolean is_gobject = FALSE;
	gboolean _tmp26_ = FALSE;
	gboolean is_fundamental = FALSE;
	gchar* _tmp29_;
	gchar* _tmp30_;
	gint _tmp31_;
	gint _tmp32_;
	gboolean _tmp33_;
	ValaCCodeEnum* _tmp38_;
	ValaCCodeEnum* _tmp39_;
	gchar* _tmp40_;
	gchar* _tmp41_;
	gchar* _tmp42_;
	gchar* _tmp43_;
	ValaCCodeEnumValue* _tmp44_;
	ValaCCodeEnumValue* _tmp45_;
	ValaCCodeEnum* _tmp46_;
	ValaCCodeBaseModuleEmitContext* _tmp47_;
	ValaCCodeBaseModuleEmitContext* _tmp48_;
	ValaCCodeBaseModuleEmitContext* _tmp49_;
	ValaCCodeBaseModuleEmitContext* _tmp50_;
	ValaCCodeBaseModuleEmitContext* _tmp51_;
	ValaCCodeBaseModuleEmitContext* _tmp52_;
	ValaCCodeFile* _tmp53_;
	ValaCCodeFile* _tmp54_;
	gchar* last_prop = NULL;
	gchar* _tmp55_;
	gchar* _tmp56_;
	gchar* _tmp57_;
	gchar* _tmp58_;
	gboolean _tmp80_ = FALSE;
	gboolean _tmp90_ = FALSE;
	ValaCCodeStruct* _tmp364_;
	ValaCCodeStruct* _tmp365_;
	ValaCCodeEnum* _tmp366_;
	ValaCCodeEnum* _tmp367_;
	ValaCCodeEnum* _tmp368_;
	ValaCCodeEnum* _tmp369_;
	ValaCCodeBaseModuleEmitContext* _tmp370_;
	ValaCCodeBaseModuleEmitContext* _tmp371_;
	ValaCCodeBaseModuleEmitContext* _tmp372_;
	ValaCCodeBaseModuleEmitContext* _tmp373_;
	ValaCCodeBaseModuleEmitContext* _tmp374_;
	ValaCCodeBaseModuleEmitContext* _tmp375_;
	ValaCCodeBaseModuleEmitContext* _tmp376_;
	ValaCCodeBaseModuleEmitContext* _tmp377_;
	ValaCCodeBaseModuleEmitContext* _tmp378_;
	ValaCCodeBaseModuleEmitContext* _tmp379_;
	ValaCCodeBaseModuleEmitContext* _tmp380_;
	ValaCCodeBaseModuleEmitContext* _tmp381_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) cl);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp1_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
	_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) cl);
	_tmp3_ = _tmp2_;
	vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp3_);
	_tmp4_ = ((ValaCCodeBaseModule*) self)->param_spec_struct;
	_tmp5_ = _vala_ccode_node_ref0 (_tmp4_);
	old_param_spec_struct = _tmp5_;
	_tmp6_ = ((ValaCCodeBaseModule*) self)->prop_enum;
	_tmp7_ = _vala_ccode_node_ref0 (_tmp6_);
	old_prop_enum = _tmp7_;
	_tmp8_ = ((ValaCCodeBaseModule*) self)->signal_enum;
	_tmp9_ = _vala_ccode_node_ref0 (_tmp8_);
	old_signal_enum = _tmp9_;
	_tmp10_ = ((ValaCCodeBaseModule*) self)->class_init_context;
	_tmp11_ = _vala_ccode_base_module_emit_context_ref0 (_tmp10_);
	old_class_init_context = _tmp11_;
	_tmp12_ = ((ValaCCodeBaseModule*) self)->base_init_context;
	_tmp13_ = _vala_ccode_base_module_emit_context_ref0 (_tmp12_);
	old_base_init_context = _tmp13_;
	_tmp14_ = ((ValaCCodeBaseModule*) self)->class_finalize_context;
	_tmp15_ = _vala_ccode_base_module_emit_context_ref0 (_tmp14_);
	old_class_finalize_context = _tmp15_;
	_tmp16_ = ((ValaCCodeBaseModule*) self)->base_finalize_context;
	_tmp17_ = _vala_ccode_base_module_emit_context_ref0 (_tmp16_);
	old_base_finalize_context = _tmp17_;
	_tmp18_ = ((ValaCCodeBaseModule*) self)->instance_init_context;
	_tmp19_ = _vala_ccode_base_module_emit_context_ref0 (_tmp18_);
	old_instance_init_context = _tmp19_;
	_tmp20_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
	_tmp21_ = _vala_ccode_base_module_emit_context_ref0 (_tmp20_);
	old_instance_finalize_context = _tmp21_;
	_tmp22_ = vala_class_get_is_compact (cl);
	_tmp23_ = _tmp22_;
	is_gtypeinstance = !_tmp23_;
	if (is_gtypeinstance) {
		ValaTypeSymbol* _tmp25_;
		_tmp25_ = ((ValaCCodeBaseModule*) self)->gobject_type;
		_tmp24_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, _tmp25_);
	} else {
		_tmp24_ = FALSE;
	}
	is_gobject = _tmp24_;
	if (is_gtypeinstance) {
		ValaClass* _tmp27_;
		ValaClass* _tmp28_;
		_tmp27_ = vala_class_get_base_class (cl);
		_tmp28_ = _tmp27_;
		_tmp26_ = _tmp28_ == NULL;
	} else {
		_tmp26_ = FALSE;
	}
	is_fundamental = _tmp26_;
	_tmp29_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp30_ = _tmp29_;
	_tmp31_ = strlen (_tmp30_);
	_tmp32_ = _tmp31_;
	_tmp33_ = _tmp32_ < 3;
	_g_free0 (_tmp30_);
	if (_tmp33_) {
		ValaSourceReference* _tmp34_;
		ValaSourceReference* _tmp35_;
		gchar* _tmp36_;
		gchar* _tmp37_;
		vala_code_node_set_error ((ValaCodeNode*) cl, TRUE);
		_tmp34_ = vala_code_node_get_source_reference ((ValaCodeNode*) cl);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp37_ = _tmp36_;
		vala_report_error (_tmp35_, "Class name `%s' is too short", _tmp37_);
		_g_free0 (_tmp37_);
		_vala_ccode_base_module_emit_context_unref0 (old_instance_finalize_context);
		_vala_ccode_base_module_emit_context_unref0 (old_instance_init_context);
		_vala_ccode_base_module_emit_context_unref0 (old_base_finalize_context);
		_vala_ccode_base_module_emit_context_unref0 (old_class_finalize_context);
		_vala_ccode_base_module_emit_context_unref0 (old_base_init_context);
		_vala_ccode_base_module_emit_context_unref0 (old_class_init_context);
		_vala_ccode_node_unref0 (old_signal_enum);
		_vala_ccode_node_unref0 (old_prop_enum);
		_vala_ccode_node_unref0 (old_param_spec_struct);
		return;
	}
	_tmp38_ = vala_ccode_enum_new (NULL);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->prop_enum);
	((ValaCCodeBaseModule*) self)->prop_enum = _tmp38_;
	_tmp39_ = ((ValaCCodeBaseModule*) self)->prop_enum;
	_tmp40_ = vala_get_ccode_upper_case_name ((ValaSymbol*) cl, NULL);
	_tmp41_ = _tmp40_;
	_tmp42_ = g_strdup_printf ("%s_0_PROPERTY", _tmp41_);
	_tmp43_ = _tmp42_;
	_tmp44_ = vala_ccode_enum_value_new (_tmp43_, NULL);
	_tmp45_ = _tmp44_;
	vala_ccode_enum_add_value (_tmp39_, _tmp45_);
	_vala_ccode_node_unref0 (_tmp45_);
	_g_free0 (_tmp43_);
	_g_free0 (_tmp41_);
	_tmp46_ = vala_ccode_enum_new (NULL);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp46_;
	_tmp47_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) cl);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->class_init_context);
	((ValaCCodeBaseModule*) self)->class_init_context = _tmp47_;
	_tmp48_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) cl);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->base_init_context);
	((ValaCCodeBaseModule*) self)->base_init_context = _tmp48_;
	_tmp49_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) cl);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->class_finalize_context);
	((ValaCCodeBaseModule*) self)->class_finalize_context = _tmp49_;
	_tmp50_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) cl);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->base_finalize_context);
	((ValaCCodeBaseModule*) self)->base_finalize_context = _tmp50_;
	_tmp51_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) cl);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->instance_init_context);
	((ValaCCodeBaseModule*) self)->instance_init_context = _tmp51_;
	_tmp52_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) cl);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->instance_finalize_context);
	((ValaCCodeBaseModule*) self)->instance_finalize_context = _tmp52_;
	_tmp53_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, cl, _tmp53_);
	_tmp54_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_gtype_module_generate_class_private_declaration (self, cl, _tmp54_);
	_tmp55_ = vala_get_ccode_upper_case_name ((ValaSymbol*) cl, NULL);
	_tmp56_ = _tmp55_;
	_tmp57_ = g_strdup_printf ("%s_NUM_PROPERTIES", _tmp56_);
	_tmp58_ = _tmp57_;
	_g_free0 (_tmp56_);
	last_prop = _tmp58_;
	if (is_gobject) {
		ValaCCodeFile* _tmp59_;
		ValaCCodeEnum* _tmp60_;
		ValaCCodeDeclaration* prop_array_decl = NULL;
		ValaCCodeDeclaration* _tmp61_;
		ValaCCodeDeclaration* _tmp62_;
		ValaCCodeDeclaration* _tmp63_;
		ValaCCodeModifiers _tmp64_;
		ValaCCodeModifiers _tmp65_;
		ValaCCodeDeclaration* _tmp66_;
		gchar* _tmp67_;
		gchar* _tmp68_;
		gchar* _tmp69_;
		gchar* _tmp70_;
		const gchar* _tmp71_;
		ValaCCodeIdentifier* _tmp72_;
		ValaCCodeIdentifier* _tmp73_;
		ValaCCodeDeclaratorSuffix* _tmp74_;
		ValaCCodeDeclaratorSuffix* _tmp75_;
		ValaCCodeVariableDeclarator* _tmp76_;
		ValaCCodeVariableDeclarator* _tmp77_;
		ValaCCodeFile* _tmp78_;
		ValaCCodeDeclaration* _tmp79_;
		_tmp59_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp60_ = ((ValaCCodeBaseModule*) self)->prop_enum;
		vala_ccode_file_add_type_declaration (_tmp59_, (ValaCCodeNode*) _tmp60_);
		_tmp61_ = vala_ccode_declaration_new ("GParamSpec*");
		prop_array_decl = _tmp61_;
		_tmp62_ = prop_array_decl;
		_tmp63_ = prop_array_decl;
		_tmp64_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp63_);
		_tmp65_ = _tmp64_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp63_, _tmp65_ | VALA_CCODE_MODIFIERS_STATIC);
		_tmp66_ = prop_array_decl;
		_tmp67_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
		_tmp68_ = _tmp67_;
		_tmp69_ = g_strdup_printf ("%s_properties", _tmp68_);
		_tmp70_ = _tmp69_;
		_tmp71_ = last_prop;
		_tmp72_ = vala_ccode_identifier_new (_tmp71_);
		_tmp73_ = _tmp72_;
		_tmp74_ = vala_ccode_declarator_suffix_new_with_array ((ValaCCodeExpression*) _tmp73_);
		_tmp75_ = _tmp74_;
		_tmp76_ = vala_ccode_variable_declarator_new (_tmp70_, NULL, _tmp75_);
		_tmp77_ = _tmp76_;
		vala_ccode_declaration_add_declarator (_tmp66_, (ValaCCodeDeclarator*) _tmp77_);
		_vala_ccode_node_unref0 (_tmp77_);
		_vala_ccode_declarator_suffix_unref0 (_tmp75_);
		_vala_ccode_node_unref0 (_tmp73_);
		_g_free0 (_tmp70_);
		_g_free0 (_tmp68_);
		_tmp78_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp79_ = prop_array_decl;
		vala_ccode_file_add_type_declaration (_tmp78_, (ValaCCodeNode*) _tmp79_);
		_vala_ccode_node_unref0 (prop_array_decl);
	}
	if (!vala_symbol_is_internal_symbol ((ValaSymbol*) cl)) {
		_tmp80_ = TRUE;
	} else {
		gboolean _tmp81_;
		gboolean _tmp82_;
		_tmp81_ = vala_class_get_is_sealed (cl);
		_tmp82_ = _tmp81_;
		_tmp80_ = _tmp82_;
	}
	if (_tmp80_) {
		gboolean _tmp83_ = FALSE;
		gboolean _tmp84_;
		gboolean _tmp85_;
		_tmp84_ = vala_class_get_is_opaque (cl);
		_tmp85_ = _tmp84_;
		if (!_tmp85_) {
			gboolean _tmp86_;
			gboolean _tmp87_;
			_tmp86_ = vala_class_get_is_sealed (cl);
			_tmp87_ = _tmp86_;
			_tmp83_ = !_tmp87_;
		} else {
			_tmp83_ = FALSE;
		}
		if (_tmp83_) {
			ValaCCodeFile* _tmp88_;
			_tmp88_ = ((ValaCCodeBaseModule*) self)->header_file;
			vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, cl, _tmp88_);
		} else {
			ValaCCodeFile* _tmp89_;
			_tmp89_ = ((ValaCCodeBaseModule*) self)->header_file;
			vala_ccode_base_module_generate_class_declaration ((ValaCCodeBaseModule*) self, cl, _tmp89_);
		}
	}
	if (!vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
		_tmp90_ = TRUE;
	} else {
		gboolean _tmp91_;
		gboolean _tmp92_;
		_tmp91_ = vala_class_get_is_sealed (cl);
		_tmp92_ = _tmp91_;
		_tmp90_ = _tmp92_;
	}
	if (_tmp90_) {
		ValaCCodeFile* _tmp93_;
		_tmp93_ = ((ValaCCodeBaseModule*) self)->internal_header_file;
		vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, cl, _tmp93_);
	}
	if (is_gtypeinstance) {
		vala_gtype_module_begin_base_init_function (self, cl);
		vala_gtype_module_begin_class_init_function (self, cl);
		vala_gtype_module_begin_instance_init_function (self, cl);
		vala_gtype_module_begin_base_finalize_function (self, cl);
		vala_gtype_module_begin_class_finalize_function (self, cl);
		vala_gtype_module_begin_finalize_function (self, cl);
	} else {
		gboolean _tmp94_ = FALSE;
		gboolean _tmp95_ = FALSE;
		gboolean _tmp96_;
		gboolean _tmp97_;
		_tmp96_ = vala_class_get_is_compact (cl);
		_tmp97_ = _tmp96_;
		if (_tmp97_) {
			_tmp95_ = TRUE;
		} else {
			ValaClass* _tmp98_;
			ValaClass* _tmp99_;
			_tmp98_ = vala_class_get_base_class (cl);
			_tmp99_ = _tmp98_;
			_tmp95_ = _tmp99_ == NULL;
		}
		if (_tmp95_) {
			_tmp94_ = TRUE;
		} else {
			ValaClass* _tmp100_;
			_tmp100_ = ((ValaCCodeBaseModule*) self)->gsource_type;
			_tmp94_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, (ValaTypeSymbol*) _tmp100_);
		}
		if (_tmp94_) {
			vala_gtype_module_begin_instance_init_function (self, cl);
			vala_gtype_module_begin_finalize_function (self, cl);
		}
	}
	vala_code_node_accept_children ((ValaCodeNode*) cl, (ValaCodeVisitor*) self);
	if (is_gtypeinstance) {
		ValaList* _tmp147_;
		gint _tmp148_;
		gint _tmp149_;
		ValaConstructor* _tmp181_;
		ValaConstructor* _tmp182_;
		ValaDestructor* _tmp183_;
		ValaDestructor* _tmp184_;
		ValaDestructor* _tmp185_;
		ValaDestructor* _tmp186_;
		gboolean _tmp201_ = FALSE;
		gboolean _tmp202_;
		gboolean _tmp203_;
		ValaComment* _tmp211_;
		ValaComment* _tmp212_;
		ValaClassRegisterFunction* type_fun = NULL;
		ValaClassRegisterFunction* _tmp220_;
		ValaClassRegisterFunction* _tmp221_;
		ValaCodeContext* _tmp222_;
		ValaCodeContext* _tmp223_;
		ValaCCodeFile* _tmp224_;
		ValaClassRegisterFunction* _tmp225_;
		ValaCCodeFragment* _tmp226_;
		ValaCCodeFragment* _tmp227_;
		ValaCCodeFile* _tmp228_;
		ValaClassRegisterFunction* _tmp229_;
		ValaCCodeFragment* _tmp230_;
		ValaCCodeFragment* _tmp231_;
		if (is_fundamental) {
			ValaSymbol* _tmp101_;
			ValaSymbol* _tmp102_;
			gchar* _tmp103_;
			gchar* _tmp104_;
			const gchar* _tmp105_;
			const gchar* _tmp106_;
			gchar* _tmp107_;
			gchar* _tmp108_;
			ValaCCodeStruct* _tmp109_;
			ValaCCodeStruct* _tmp110_;
			ValaCCodeFile* _tmp111_;
			ValaCCodeStruct* _tmp112_;
			ValaCCodeFile* _tmp113_;
			ValaCCodeStruct* _tmp114_;
			const gchar* _tmp115_;
			const gchar* _tmp116_;
			gchar* _tmp117_;
			gchar* _tmp118_;
			ValaSymbol* _tmp119_;
			ValaSymbol* _tmp120_;
			gchar* _tmp121_;
			gchar* _tmp122_;
			const gchar* _tmp123_;
			const gchar* _tmp124_;
			gchar* _tmp125_;
			gchar* _tmp126_;
			ValaCCodeVariableDeclarator* _tmp127_;
			ValaCCodeVariableDeclarator* _tmp128_;
			ValaCCodeTypeDefinition* _tmp129_;
			ValaCCodeTypeDefinition* _tmp130_;
			ValaCCodeAssignment* ref_count = NULL;
			ValaCCodeIdentifier* _tmp131_;
			ValaCCodeIdentifier* _tmp132_;
			ValaCCodeMemberAccess* _tmp133_;
			ValaCCodeMemberAccess* _tmp134_;
			ValaCCodeConstant* _tmp135_;
			ValaCCodeConstant* _tmp136_;
			ValaCCodeAssignment* _tmp137_;
			ValaCCodeAssignment* _tmp138_;
			ValaCCodeBaseModuleEmitContext* _tmp139_;
			ValaCCodeFunction* _tmp140_;
			ValaCCodeFunction* _tmp141_;
			ValaCCodeAssignment* _tmp142_;
			_tmp101_ = vala_symbol_get_parent_symbol ((ValaSymbol*) cl);
			_tmp102_ = _tmp101_;
			_tmp103_ = vala_get_ccode_prefix (_tmp102_);
			_tmp104_ = _tmp103_;
			_tmp105_ = vala_symbol_get_name ((ValaSymbol*) cl);
			_tmp106_ = _tmp105_;
			_tmp107_ = g_strdup_printf ("_%sParamSpec%s", _tmp104_, _tmp106_);
			_tmp108_ = _tmp107_;
			_tmp109_ = vala_ccode_struct_new (_tmp108_);
			_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->param_spec_struct);
			((ValaCCodeBaseModule*) self)->param_spec_struct = _tmp109_;
			_g_free0 (_tmp108_);
			_g_free0 (_tmp104_);
			_tmp110_ = ((ValaCCodeBaseModule*) self)->param_spec_struct;
			vala_ccode_struct_add_field (_tmp110_, "GParamSpec", "parent_instance", 0, NULL);
			_tmp111_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp112_ = ((ValaCCodeBaseModule*) self)->param_spec_struct;
			vala_ccode_file_add_type_definition (_tmp111_, (ValaCCodeNode*) _tmp112_);
			_tmp113_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp114_ = ((ValaCCodeBaseModule*) self)->param_spec_struct;
			_tmp115_ = vala_ccode_struct_get_name (_tmp114_);
			_tmp116_ = _tmp115_;
			_tmp117_ = g_strdup_printf ("struct %s", _tmp116_);
			_tmp118_ = _tmp117_;
			_tmp119_ = vala_symbol_get_parent_symbol ((ValaSymbol*) cl);
			_tmp120_ = _tmp119_;
			_tmp121_ = vala_get_ccode_prefix (_tmp120_);
			_tmp122_ = _tmp121_;
			_tmp123_ = vala_symbol_get_name ((ValaSymbol*) cl);
			_tmp124_ = _tmp123_;
			_tmp125_ = g_strdup_printf ("%sParamSpec%s", _tmp122_, _tmp124_);
			_tmp126_ = _tmp125_;
			_tmp127_ = vala_ccode_variable_declarator_new (_tmp126_, NULL, NULL);
			_tmp128_ = _tmp127_;
			_tmp129_ = vala_ccode_type_definition_new (_tmp118_, (ValaCCodeDeclarator*) _tmp128_);
			_tmp130_ = _tmp129_;
			vala_ccode_file_add_type_declaration (_tmp113_, (ValaCCodeNode*) _tmp130_);
			_vala_ccode_node_unref0 (_tmp130_);
			_vala_ccode_node_unref0 (_tmp128_);
			_g_free0 (_tmp126_);
			_g_free0 (_tmp122_);
			_g_free0 (_tmp118_);
			vala_gtype_module_add_type_value_table_init_function (self, cl);
			vala_gtype_module_add_type_value_table_free_function (self, cl);
			vala_gtype_module_add_type_value_table_copy_function (self, cl);
			vala_gtype_module_add_type_value_table_peek_pointer_function (self, cl);
			vala_gtype_module_add_type_value_table_collect_value_function (self, cl);
			vala_gtype_module_add_type_value_table_lcopy_value_function (self, cl);
			vala_gtype_module_add_g_param_spec_type_function (self, cl);
			vala_gtype_module_add_g_value_get_function (self, cl);
			vala_gtype_module_add_g_value_set_function (self, cl);
			vala_gtype_module_add_g_value_take_function (self, cl);
			_tmp131_ = vala_ccode_identifier_new ("self");
			_tmp132_ = _tmp131_;
			_tmp133_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp132_, "ref_count");
			_tmp134_ = _tmp133_;
			_tmp135_ = vala_ccode_constant_new ("1");
			_tmp136_ = _tmp135_;
			_tmp137_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp134_, (ValaCCodeExpression*) _tmp136_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
			_tmp138_ = _tmp137_;
			_vala_ccode_node_unref0 (_tmp136_);
			_vala_ccode_node_unref0 (_tmp134_);
			_vala_ccode_node_unref0 (_tmp132_);
			ref_count = _tmp138_;
			_tmp139_ = ((ValaCCodeBaseModule*) self)->instance_init_context;
			vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp139_);
			_tmp140_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp141_ = _tmp140_;
			_tmp142_ = ref_count;
			vala_ccode_function_add_expression (_tmp141_, (ValaCCodeExpression*) _tmp142_);
			vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
			_vala_ccode_node_unref0 (ref_count);
		}
		if (is_gobject) {
			ValaCCodeEnum* _tmp143_;
			const gchar* _tmp144_;
			ValaCCodeEnumValue* _tmp145_;
			ValaCCodeEnumValue* _tmp146_;
			_tmp143_ = ((ValaCCodeBaseModule*) self)->prop_enum;
			_tmp144_ = last_prop;
			_tmp145_ = vala_ccode_enum_value_new (_tmp144_, NULL);
			_tmp146_ = _tmp145_;
			vala_ccode_enum_add_value (_tmp143_, _tmp146_);
			_vala_ccode_node_unref0 (_tmp146_);
		}
		_tmp147_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
		_tmp148_ = vala_collection_get_size ((ValaCollection*) _tmp147_);
		_tmp149_ = _tmp148_;
		if (_tmp149_ > 0) {
			gchar* last_signal = NULL;
			gchar* _tmp150_;
			gchar* _tmp151_;
			gchar* _tmp152_;
			gchar* _tmp153_;
			ValaCCodeEnum* _tmp154_;
			const gchar* _tmp155_;
			ValaCCodeEnumValue* _tmp156_;
			ValaCCodeEnumValue* _tmp157_;
			ValaCCodeFile* _tmp158_;
			ValaCCodeEnum* _tmp159_;
			ValaCCodeDeclaration* signal_array_decl = NULL;
			ValaCCodeDeclaration* _tmp160_;
			ValaCCodeDeclaration* _tmp161_;
			ValaCCodeDeclaration* _tmp162_;
			ValaCCodeModifiers _tmp163_;
			ValaCCodeModifiers _tmp164_;
			ValaCCodeDeclaration* _tmp165_;
			gchar* _tmp166_;
			gchar* _tmp167_;
			gchar* _tmp168_;
			gchar* _tmp169_;
			ValaCCodeConstant* _tmp170_;
			ValaCCodeConstant* _tmp171_;
			const gchar* _tmp172_;
			ValaCCodeIdentifier* _tmp173_;
			ValaCCodeIdentifier* _tmp174_;
			ValaCCodeDeclaratorSuffix* _tmp175_;
			ValaCCodeDeclaratorSuffix* _tmp176_;
			ValaCCodeVariableDeclarator* _tmp177_;
			ValaCCodeVariableDeclarator* _tmp178_;
			ValaCCodeFile* _tmp179_;
			ValaCCodeDeclaration* _tmp180_;
			_tmp150_ = vala_get_ccode_upper_case_name ((ValaSymbol*) cl, NULL);
			_tmp151_ = _tmp150_;
			_tmp152_ = g_strdup_printf ("%s_NUM_SIGNALS", _tmp151_);
			_tmp153_ = _tmp152_;
			_g_free0 (_tmp151_);
			last_signal = _tmp153_;
			_tmp154_ = ((ValaCCodeBaseModule*) self)->signal_enum;
			_tmp155_ = last_signal;
			_tmp156_ = vala_ccode_enum_value_new (_tmp155_, NULL);
			_tmp157_ = _tmp156_;
			vala_ccode_enum_add_value (_tmp154_, _tmp157_);
			_vala_ccode_node_unref0 (_tmp157_);
			_tmp158_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp159_ = ((ValaCCodeBaseModule*) self)->signal_enum;
			vala_ccode_file_add_type_declaration (_tmp158_, (ValaCCodeNode*) _tmp159_);
			_tmp160_ = vala_ccode_declaration_new ("guint");
			signal_array_decl = _tmp160_;
			_tmp161_ = signal_array_decl;
			_tmp162_ = signal_array_decl;
			_tmp163_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp162_);
			_tmp164_ = _tmp163_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp162_, _tmp164_ | VALA_CCODE_MODIFIERS_STATIC);
			_tmp165_ = signal_array_decl;
			_tmp166_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
			_tmp167_ = _tmp166_;
			_tmp168_ = g_strdup_printf ("%s_signals", _tmp167_);
			_tmp169_ = _tmp168_;
			_tmp170_ = vala_ccode_constant_new ("{0}");
			_tmp171_ = _tmp170_;
			_tmp172_ = last_signal;
			_tmp173_ = vala_ccode_identifier_new (_tmp172_);
			_tmp174_ = _tmp173_;
			_tmp175_ = vala_ccode_declarator_suffix_new_with_array ((ValaCCodeExpression*) _tmp174_);
			_tmp176_ = _tmp175_;
			_tmp177_ = vala_ccode_variable_declarator_new (_tmp169_, (ValaCCodeExpression*) _tmp171_, _tmp176_);
			_tmp178_ = _tmp177_;
			vala_ccode_declaration_add_declarator (_tmp165_, (ValaCCodeDeclarator*) _tmp178_);
			_vala_ccode_node_unref0 (_tmp178_);
			_vala_ccode_declarator_suffix_unref0 (_tmp176_);
			_vala_ccode_node_unref0 (_tmp174_);
			_vala_ccode_node_unref0 (_tmp171_);
			_g_free0 (_tmp169_);
			_g_free0 (_tmp167_);
			_tmp179_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp180_ = signal_array_decl;
			vala_ccode_file_add_type_declaration (_tmp179_, (ValaCCodeNode*) _tmp180_);
			_vala_ccode_node_unref0 (signal_array_decl);
			_g_free0 (last_signal);
		}
		_tmp181_ = vala_class_get_class_constructor (cl);
		_tmp182_ = _tmp181_;
		if (_tmp182_ != NULL) {
			vala_gtype_module_add_base_init_function (self, cl);
		}
		vala_gtype_module_add_class_init_function (self, cl);
		_tmp183_ = vala_class_get_class_destructor (cl);
		_tmp184_ = _tmp183_;
		if (_tmp184_ != NULL) {
			vala_gtype_module_add_base_finalize_function (self, cl);
		}
		_tmp185_ = vala_class_get_static_destructor (cl);
		_tmp186_ = _tmp185_;
		if (_tmp186_ != NULL) {
			vala_gtype_module_add_class_finalize_function (self, cl);
		}
		{
			ValaList* _base_type_list = NULL;
			ValaList* _tmp187_;
			gint _base_type_size = 0;
			ValaList* _tmp188_;
			gint _tmp189_;
			gint _tmp190_;
			gint _base_type_index = 0;
			_tmp187_ = vala_class_get_base_types (cl);
			_base_type_list = _tmp187_;
			_tmp188_ = _base_type_list;
			_tmp189_ = vala_collection_get_size ((ValaCollection*) _tmp188_);
			_tmp190_ = _tmp189_;
			_base_type_size = _tmp190_;
			_base_type_index = -1;
			while (TRUE) {
				gint _tmp191_;
				gint _tmp192_;
				ValaDataType* base_type = NULL;
				ValaList* _tmp193_;
				gpointer _tmp194_;
				ValaDataType* _tmp195_;
				ValaTypeSymbol* _tmp196_;
				ValaTypeSymbol* _tmp197_;
				_base_type_index = _base_type_index + 1;
				_tmp191_ = _base_type_index;
				_tmp192_ = _base_type_size;
				if (!(_tmp191_ < _tmp192_)) {
					break;
				}
				_tmp193_ = _base_type_list;
				_tmp194_ = vala_list_get (_tmp193_, _base_type_index);
				base_type = (ValaDataType*) _tmp194_;
				_tmp195_ = base_type;
				_tmp196_ = vala_data_type_get_type_symbol (_tmp195_);
				_tmp197_ = _tmp196_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp197_, VALA_TYPE_INTERFACE)) {
					ValaDataType* _tmp198_;
					ValaTypeSymbol* _tmp199_;
					ValaTypeSymbol* _tmp200_;
					_tmp198_ = base_type;
					_tmp199_ = vala_data_type_get_type_symbol (_tmp198_);
					_tmp200_ = _tmp199_;
					vala_gtype_module_add_interface_init_function (self, cl, G_TYPE_CHECK_INSTANCE_CAST (_tmp200_, VALA_TYPE_INTERFACE, ValaInterface));
				}
				_vala_code_node_unref0 (base_type);
			}
		}
		vala_gtype_module_add_instance_init_function (self, cl);
		_tmp202_ = vala_class_get_is_compact (cl);
		_tmp203_ = _tmp202_;
		if (!_tmp203_) {
			gboolean _tmp204_ = FALSE;
			gboolean _tmp205_ = FALSE;
			ValaList* _tmp206_;
			gint _tmp207_;
			gint _tmp208_;
			_tmp206_ = vala_object_type_symbol_get_fields ((ValaObjectTypeSymbol*) cl);
			_tmp207_ = vala_collection_get_size ((ValaCollection*) _tmp206_);
			_tmp208_ = _tmp207_;
			if (_tmp208_ > 0) {
				_tmp205_ = TRUE;
			} else {
				ValaDestructor* _tmp209_;
				ValaDestructor* _tmp210_;
				_tmp209_ = vala_class_get_destructor (cl);
				_tmp210_ = _tmp209_;
				_tmp205_ = _tmp210_ != NULL;
			}
			if (_tmp205_) {
				_tmp204_ = TRUE;
			} else {
				_tmp204_ = vala_class_is_fundamental (cl);
			}
			_tmp201_ = _tmp204_;
		} else {
			_tmp201_ = FALSE;
		}
		if (_tmp201_) {
			vala_gtype_module_add_finalize_function (self, cl);
		}
		_tmp211_ = vala_symbol_get_comment ((ValaSymbol*) cl);
		_tmp212_ = _tmp211_;
		if (_tmp212_ != NULL) {
			ValaCCodeFile* _tmp213_;
			ValaComment* _tmp214_;
			ValaComment* _tmp215_;
			const gchar* _tmp216_;
			const gchar* _tmp217_;
			ValaCCodeComment* _tmp218_;
			ValaCCodeComment* _tmp219_;
			_tmp213_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp214_ = vala_symbol_get_comment ((ValaSymbol*) cl);
			_tmp215_ = _tmp214_;
			_tmp216_ = vala_comment_get_content (_tmp215_);
			_tmp217_ = _tmp216_;
			_tmp218_ = vala_ccode_comment_new (_tmp217_);
			_tmp219_ = _tmp218_;
			vala_ccode_file_add_type_member_definition (_tmp213_, (ValaCCodeNode*) _tmp219_);
			_vala_ccode_node_unref0 (_tmp219_);
		}
		_tmp220_ = vala_class_register_function_new (cl);
		type_fun = _tmp220_;
		_tmp221_ = type_fun;
		_tmp222_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp223_ = _tmp222_;
		vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp221_, _tmp223_, ((ValaCCodeBaseModule*) self)->in_plugin, FALSE);
		_tmp224_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp225_ = type_fun;
		_tmp226_ = vala_typeregister_function_get_source_declaration ((ValaTypeRegisterFunction*) _tmp225_);
		_tmp227_ = _tmp226_;
		vala_ccode_file_add_type_member_declaration (_tmp224_, (ValaCCodeNode*) _tmp227_);
		_vala_ccode_node_unref0 (_tmp227_);
		_tmp228_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp229_ = type_fun;
		_tmp230_ = vala_typeregister_function_get_definition ((ValaTypeRegisterFunction*) _tmp229_);
		_tmp231_ = _tmp230_;
		vala_ccode_file_add_type_member_definition (_tmp228_, (ValaCCodeNode*) _tmp231_);
		_vala_ccode_node_unref0 (_tmp231_);
		if (is_fundamental) {
			ValaCCodeMemberAccess* ref_count = NULL;
			ValaCCodeIdentifier* _tmp232_;
			ValaCCodeIdentifier* _tmp233_;
			ValaCCodeMemberAccess* _tmp234_;
			ValaCCodeMemberAccess* _tmp235_;
			ValaCCodeFunction* ref_fun = NULL;
			gchar* _tmp236_;
			gchar* _tmp237_;
			ValaCCodeFunction* _tmp238_;
			ValaCCodeFunction* _tmp239_;
			ValaCCodeFunction* _tmp240_;
			ValaCCodeParameter* _tmp241_;
			ValaCCodeParameter* _tmp242_;
			ValaCCodeFunction* _tmp250_;
			ValaCCodeFunction* _tmp251_;
			ValaCCodeFunction* _tmp252_;
			gchar* _tmp253_;
			gchar* _tmp254_;
			gchar* _tmp255_;
			gchar* _tmp256_;
			ValaCCodeIdentifier* _tmp257_;
			ValaCCodeIdentifier* _tmp258_;
			ValaCCodeVariableDeclarator* _tmp259_;
			ValaCCodeVariableDeclarator* _tmp260_;
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeIdentifier* _tmp261_;
			ValaCCodeIdentifier* _tmp262_;
			ValaCCodeFunctionCall* _tmp263_;
			ValaCCodeFunctionCall* _tmp264_;
			ValaCCodeFunctionCall* _tmp265_;
			ValaCCodeMemberAccess* _tmp266_;
			ValaCCodeUnaryExpression* _tmp267_;
			ValaCCodeUnaryExpression* _tmp268_;
			ValaCCodeFunction* _tmp269_;
			ValaCCodeFunction* _tmp270_;
			ValaCCodeFunctionCall* _tmp271_;
			ValaCCodeFunction* _tmp272_;
			ValaCCodeFunction* _tmp273_;
			ValaCCodeIdentifier* _tmp274_;
			ValaCCodeIdentifier* _tmp275_;
			ValaCCodeFile* _tmp276_;
			ValaCCodeFunction* _tmp277_;
			ValaCCodeFunction* unref_fun = NULL;
			gchar* _tmp278_;
			gchar* _tmp279_;
			ValaCCodeFunction* _tmp280_;
			ValaCCodeFunction* _tmp281_;
			ValaCCodeFunction* _tmp282_;
			ValaCCodeParameter* _tmp283_;
			ValaCCodeParameter* _tmp284_;
			ValaCCodeFunction* _tmp292_;
			ValaCCodeFunction* _tmp293_;
			ValaCCodeFunction* _tmp294_;
			gchar* _tmp295_;
			gchar* _tmp296_;
			gchar* _tmp297_;
			gchar* _tmp298_;
			ValaCCodeIdentifier* _tmp299_;
			ValaCCodeIdentifier* _tmp300_;
			ValaCCodeVariableDeclarator* _tmp301_;
			ValaCCodeVariableDeclarator* _tmp302_;
			ValaCCodeIdentifier* _tmp303_;
			ValaCCodeIdentifier* _tmp304_;
			ValaCCodeFunctionCall* _tmp305_;
			ValaCCodeFunctionCall* _tmp306_;
			ValaCCodeMemberAccess* _tmp307_;
			ValaCCodeUnaryExpression* _tmp308_;
			ValaCCodeUnaryExpression* _tmp309_;
			ValaCCodeFunction* _tmp310_;
			ValaCCodeFunction* _tmp311_;
			ValaCCodeFunctionCall* _tmp312_;
			ValaCCodeFunctionCall* get_class = NULL;
			gchar* _tmp313_;
			gchar* _tmp314_;
			ValaCCodeIdentifier* _tmp315_;
			ValaCCodeIdentifier* _tmp316_;
			ValaCCodeFunctionCall* _tmp317_;
			ValaCCodeFunctionCall* _tmp318_;
			ValaCCodeFunctionCall* _tmp319_;
			ValaCCodeIdentifier* _tmp320_;
			ValaCCodeIdentifier* _tmp321_;
			ValaCCodeFunctionCall* ccast = NULL;
			gchar* _tmp322_;
			gchar* _tmp323_;
			ValaCCodeIdentifier* _tmp324_;
			ValaCCodeIdentifier* _tmp325_;
			ValaCCodeFunctionCall* _tmp326_;
			ValaCCodeFunctionCall* _tmp327_;
			ValaCCodeFunctionCall* _tmp328_;
			ValaCCodeIdentifier* _tmp329_;
			ValaCCodeIdentifier* _tmp330_;
			ValaCCodeFunctionCall* _tmp331_;
			ValaCCodeMemberAccess* _tmp332_;
			ValaCCodeMemberAccess* _tmp333_;
			ValaCCodeFunctionCall* _tmp334_;
			ValaCCodeFunctionCall* _tmp335_;
			ValaCCodeIdentifier* _tmp336_;
			ValaCCodeIdentifier* _tmp337_;
			ValaCCodeFunction* _tmp338_;
			ValaCCodeFunction* _tmp339_;
			ValaCCodeFunctionCall* _tmp340_;
			ValaCCodeFunctionCall* free = NULL;
			ValaCCodeIdentifier* _tmp341_;
			ValaCCodeIdentifier* _tmp342_;
			ValaCCodeFunctionCall* _tmp343_;
			ValaCCodeFunctionCall* _tmp344_;
			ValaCCodeFunctionCall* _tmp345_;
			ValaCCodeIdentifier* _tmp346_;
			ValaCCodeIdentifier* _tmp347_;
			ValaCCodeCastExpression* _tmp348_;
			ValaCCodeCastExpression* _tmp349_;
			ValaCCodeFunction* _tmp350_;
			ValaCCodeFunction* _tmp351_;
			ValaCCodeFunctionCall* _tmp352_;
			ValaCCodeFunction* _tmp353_;
			ValaCCodeFunction* _tmp354_;
			ValaCCodeFile* _tmp355_;
			ValaCCodeFunction* _tmp356_;
			_tmp232_ = vala_ccode_identifier_new ("self");
			_tmp233_ = _tmp232_;
			_tmp234_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp233_, "ref_count");
			_tmp235_ = _tmp234_;
			_vala_ccode_node_unref0 (_tmp233_);
			ref_count = _tmp235_;
			_tmp236_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
			_tmp237_ = _tmp236_;
			_tmp238_ = vala_ccode_function_new (_tmp237_, "gpointer");
			_tmp239_ = _tmp238_;
			_g_free0 (_tmp237_);
			ref_fun = _tmp239_;
			_tmp240_ = ref_fun;
			_tmp241_ = vala_ccode_parameter_new ("instance", "gpointer");
			_tmp242_ = _tmp241_;
			vala_ccode_function_add_parameter (_tmp240_, _tmp242_);
			_vala_ccode_node_unref0 (_tmp242_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp243_;
				_tmp243_ = ref_fun;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp243_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp244_ = FALSE;
				ValaCodeContext* _tmp245_;
				ValaCodeContext* _tmp246_;
				gboolean _tmp247_;
				gboolean _tmp248_;
				_tmp245_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp246_ = _tmp245_;
				_tmp247_ = vala_code_context_get_hide_internal (_tmp246_);
				_tmp248_ = _tmp247_;
				if (_tmp248_) {
					_tmp244_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp244_ = FALSE;
				}
				if (_tmp244_) {
					ValaCCodeFunction* _tmp249_;
					_tmp249_ = ref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp249_, VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp250_ = ref_fun;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp250_);
			_tmp251_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp252_ = _tmp251_;
			_tmp253_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp254_ = _tmp253_;
			_tmp255_ = g_strdup_printf ("%s *", _tmp254_);
			_tmp256_ = _tmp255_;
			_tmp257_ = vala_ccode_identifier_new ("instance");
			_tmp258_ = _tmp257_;
			_tmp259_ = vala_ccode_variable_declarator_new ("self", (ValaCCodeExpression*) _tmp258_, NULL);
			_tmp260_ = _tmp259_;
			vala_ccode_function_add_declaration (_tmp252_, _tmp256_, (ValaCCodeDeclarator*) _tmp260_, 0);
			_vala_ccode_node_unref0 (_tmp260_);
			_vala_ccode_node_unref0 (_tmp258_);
			_g_free0 (_tmp256_);
			_g_free0 (_tmp254_);
			_tmp261_ = vala_ccode_identifier_new ("g_atomic_int_inc");
			_tmp262_ = _tmp261_;
			_tmp263_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp262_);
			_tmp264_ = _tmp263_;
			_vala_ccode_node_unref0 (_tmp262_);
			ccall = _tmp264_;
			_tmp265_ = ccall;
			_tmp266_ = ref_count;
			_tmp267_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp266_);
			_tmp268_ = _tmp267_;
			vala_ccode_function_call_add_argument (_tmp265_, (ValaCCodeExpression*) _tmp268_);
			_vala_ccode_node_unref0 (_tmp268_);
			_tmp269_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp270_ = _tmp269_;
			_tmp271_ = ccall;
			vala_ccode_function_add_expression (_tmp270_, (ValaCCodeExpression*) _tmp271_);
			_tmp272_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp273_ = _tmp272_;
			_tmp274_ = vala_ccode_identifier_new ("instance");
			_tmp275_ = _tmp274_;
			vala_ccode_function_add_return (_tmp273_, (ValaCCodeExpression*) _tmp275_);
			_vala_ccode_node_unref0 (_tmp275_);
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp276_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp277_ = ref_fun;
			vala_ccode_file_add_function (_tmp276_, _tmp277_);
			_tmp278_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
			_tmp279_ = _tmp278_;
			_tmp280_ = vala_ccode_function_new (_tmp279_, "void");
			_tmp281_ = _tmp280_;
			_g_free0 (_tmp279_);
			unref_fun = _tmp281_;
			_tmp282_ = unref_fun;
			_tmp283_ = vala_ccode_parameter_new ("instance", "gpointer");
			_tmp284_ = _tmp283_;
			vala_ccode_function_add_parameter (_tmp282_, _tmp284_);
			_vala_ccode_node_unref0 (_tmp284_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp285_;
				_tmp285_ = unref_fun;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp285_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp286_ = FALSE;
				ValaCodeContext* _tmp287_;
				ValaCodeContext* _tmp288_;
				gboolean _tmp289_;
				gboolean _tmp290_;
				_tmp287_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp288_ = _tmp287_;
				_tmp289_ = vala_code_context_get_hide_internal (_tmp288_);
				_tmp290_ = _tmp289_;
				if (_tmp290_) {
					_tmp286_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp286_ = FALSE;
				}
				if (_tmp286_) {
					ValaCCodeFunction* _tmp291_;
					_tmp291_ = unref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp291_, VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp292_ = unref_fun;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp292_);
			_tmp293_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp294_ = _tmp293_;
			_tmp295_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp296_ = _tmp295_;
			_tmp297_ = g_strdup_printf ("%s *", _tmp296_);
			_tmp298_ = _tmp297_;
			_tmp299_ = vala_ccode_identifier_new ("instance");
			_tmp300_ = _tmp299_;
			_tmp301_ = vala_ccode_variable_declarator_new ("self", (ValaCCodeExpression*) _tmp300_, NULL);
			_tmp302_ = _tmp301_;
			vala_ccode_function_add_declaration (_tmp294_, _tmp298_, (ValaCCodeDeclarator*) _tmp302_, 0);
			_vala_ccode_node_unref0 (_tmp302_);
			_vala_ccode_node_unref0 (_tmp300_);
			_g_free0 (_tmp298_);
			_g_free0 (_tmp296_);
			_tmp303_ = vala_ccode_identifier_new ("g_atomic_int_dec_and_test");
			_tmp304_ = _tmp303_;
			_tmp305_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp304_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp305_;
			_vala_ccode_node_unref0 (_tmp304_);
			_tmp306_ = ccall;
			_tmp307_ = ref_count;
			_tmp308_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp307_);
			_tmp309_ = _tmp308_;
			vala_ccode_function_call_add_argument (_tmp306_, (ValaCCodeExpression*) _tmp309_);
			_vala_ccode_node_unref0 (_tmp309_);
			_tmp310_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp311_ = _tmp310_;
			_tmp312_ = ccall;
			vala_ccode_function_open_if (_tmp311_, (ValaCCodeExpression*) _tmp312_);
			_tmp313_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) cl);
			_tmp314_ = _tmp313_;
			_tmp315_ = vala_ccode_identifier_new (_tmp314_);
			_tmp316_ = _tmp315_;
			_tmp317_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp316_);
			_tmp318_ = _tmp317_;
			_vala_ccode_node_unref0 (_tmp316_);
			_g_free0 (_tmp314_);
			get_class = _tmp318_;
			_tmp319_ = get_class;
			_tmp320_ = vala_ccode_identifier_new ("self");
			_tmp321_ = _tmp320_;
			vala_ccode_function_call_add_argument (_tmp319_, (ValaCCodeExpression*) _tmp321_);
			_vala_ccode_node_unref0 (_tmp321_);
			_tmp322_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) cl);
			_tmp323_ = _tmp322_;
			_tmp324_ = vala_ccode_identifier_new (_tmp323_);
			_tmp325_ = _tmp324_;
			_tmp326_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp325_);
			_tmp327_ = _tmp326_;
			_vala_ccode_node_unref0 (_tmp325_);
			_g_free0 (_tmp323_);
			ccast = _tmp327_;
			_tmp328_ = ccast;
			_tmp329_ = vala_ccode_identifier_new ("self");
			_tmp330_ = _tmp329_;
			vala_ccode_function_call_add_argument (_tmp328_, (ValaCCodeExpression*) _tmp330_);
			_vala_ccode_node_unref0 (_tmp330_);
			_tmp331_ = ccast;
			_tmp332_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp331_, "finalize");
			_tmp333_ = _tmp332_;
			_tmp334_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp333_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp334_;
			_vala_ccode_node_unref0 (_tmp333_);
			_tmp335_ = ccall;
			_tmp336_ = vala_ccode_identifier_new ("self");
			_tmp337_ = _tmp336_;
			vala_ccode_function_call_add_argument (_tmp335_, (ValaCCodeExpression*) _tmp337_);
			_vala_ccode_node_unref0 (_tmp337_);
			_tmp338_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp339_ = _tmp338_;
			_tmp340_ = ccall;
			vala_ccode_function_add_expression (_tmp339_, (ValaCCodeExpression*) _tmp340_);
			_tmp341_ = vala_ccode_identifier_new ("g_type_free_instance");
			_tmp342_ = _tmp341_;
			_tmp343_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp342_);
			_tmp344_ = _tmp343_;
			_vala_ccode_node_unref0 (_tmp342_);
			free = _tmp344_;
			_tmp345_ = free;
			_tmp346_ = vala_ccode_identifier_new ("self");
			_tmp347_ = _tmp346_;
			_tmp348_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp347_, "GTypeInstance *");
			_tmp349_ = _tmp348_;
			vala_ccode_function_call_add_argument (_tmp345_, (ValaCCodeExpression*) _tmp349_);
			_vala_ccode_node_unref0 (_tmp349_);
			_vala_ccode_node_unref0 (_tmp347_);
			_tmp350_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp351_ = _tmp350_;
			_tmp352_ = free;
			vala_ccode_function_add_expression (_tmp351_, (ValaCCodeExpression*) _tmp352_);
			_tmp353_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp354_ = _tmp353_;
			vala_ccode_function_close (_tmp354_);
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp355_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp356_ = unref_fun;
			vala_ccode_file_add_function (_tmp355_, _tmp356_);
			_vala_ccode_node_unref0 (free);
			_vala_ccode_node_unref0 (ccast);
			_vala_ccode_node_unref0 (get_class);
			_vala_ccode_node_unref0 (unref_fun);
			_vala_ccode_node_unref0 (ccall);
			_vala_ccode_node_unref0 (ref_fun);
			_vala_ccode_node_unref0 (ref_count);
		}
		_vala_typeregister_function_unref0 (type_fun);
	} else {
		gboolean _tmp357_ = FALSE;
		gboolean _tmp358_ = FALSE;
		gboolean _tmp359_;
		gboolean _tmp360_;
		_tmp359_ = vala_class_get_is_compact (cl);
		_tmp360_ = _tmp359_;
		if (_tmp360_) {
			_tmp358_ = TRUE;
		} else {
			ValaClass* _tmp361_;
			ValaClass* _tmp362_;
			_tmp361_ = vala_class_get_base_class (cl);
			_tmp362_ = _tmp361_;
			_tmp358_ = _tmp362_ == NULL;
		}
		if (_tmp358_) {
			_tmp357_ = TRUE;
		} else {
			ValaClass* _tmp363_;
			_tmp363_ = ((ValaCCodeBaseModule*) self)->gsource_type;
			_tmp357_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, (ValaTypeSymbol*) _tmp363_);
		}
		if (_tmp357_) {
			vala_gtype_module_add_instance_init_function (self, cl);
			vala_gtype_module_add_finalize_function (self, cl);
		}
	}
	_tmp364_ = old_param_spec_struct;
	_tmp365_ = _vala_ccode_node_ref0 (_tmp364_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->param_spec_struct);
	((ValaCCodeBaseModule*) self)->param_spec_struct = _tmp365_;
	_tmp366_ = old_prop_enum;
	_tmp367_ = _vala_ccode_node_ref0 (_tmp366_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->prop_enum);
	((ValaCCodeBaseModule*) self)->prop_enum = _tmp367_;
	_tmp368_ = old_signal_enum;
	_tmp369_ = _vala_ccode_node_ref0 (_tmp368_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp369_;
	_tmp370_ = old_class_init_context;
	_tmp371_ = _vala_ccode_base_module_emit_context_ref0 (_tmp370_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->class_init_context);
	((ValaCCodeBaseModule*) self)->class_init_context = _tmp371_;
	_tmp372_ = old_base_init_context;
	_tmp373_ = _vala_ccode_base_module_emit_context_ref0 (_tmp372_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->base_init_context);
	((ValaCCodeBaseModule*) self)->base_init_context = _tmp373_;
	_tmp374_ = old_class_finalize_context;
	_tmp375_ = _vala_ccode_base_module_emit_context_ref0 (_tmp374_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->class_finalize_context);
	((ValaCCodeBaseModule*) self)->class_finalize_context = _tmp375_;
	_tmp376_ = old_base_finalize_context;
	_tmp377_ = _vala_ccode_base_module_emit_context_ref0 (_tmp376_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->base_finalize_context);
	((ValaCCodeBaseModule*) self)->base_finalize_context = _tmp377_;
	_tmp378_ = old_instance_init_context;
	_tmp379_ = _vala_ccode_base_module_emit_context_ref0 (_tmp378_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->instance_init_context);
	((ValaCCodeBaseModule*) self)->instance_init_context = _tmp379_;
	_tmp380_ = old_instance_finalize_context;
	_tmp381_ = _vala_ccode_base_module_emit_context_ref0 (_tmp380_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->instance_finalize_context);
	((ValaCCodeBaseModule*) self)->instance_finalize_context = _tmp381_;
	vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_g_free0 (last_prop);
	_vala_ccode_base_module_emit_context_unref0 (old_instance_finalize_context);
	_vala_ccode_base_module_emit_context_unref0 (old_instance_init_context);
	_vala_ccode_base_module_emit_context_unref0 (old_base_finalize_context);
	_vala_ccode_base_module_emit_context_unref0 (old_class_finalize_context);
	_vala_ccode_base_module_emit_context_unref0 (old_base_init_context);
	_vala_ccode_base_module_emit_context_unref0 (old_class_init_context);
	_vala_ccode_node_unref0 (old_signal_enum);
	_vala_ccode_node_unref0 (old_prop_enum);
	_vala_ccode_node_unref0 (old_param_spec_struct);
}

static void
vala_gtype_module_add_type_value_table_init_function (ValaGTypeModule* self,
                                                      ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeMemberAccess* _tmp12_;
	ValaCCodeMemberAccess* _tmp13_;
	ValaCCodeMemberAccess* _tmp14_;
	ValaCCodeMemberAccess* _tmp15_;
	ValaCCodeConstant* _tmp16_;
	ValaCCodeConstant* _tmp17_;
	ValaCCodeFile* _tmp18_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, "value_");
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_init", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_function_new (_tmp3_, "void");
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	function = _tmp5_;
	_tmp6_ = vala_ccode_parameter_new ("value", "GValue*");
	_tmp7_ = _tmp6_;
	vala_ccode_function_add_parameter (function, _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp8_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_identifier_new ("value");
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp11_, "data[0]");
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp13_, "v_pointer", FALSE);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_constant_new ("NULL");
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_assignment (_tmp9_, (ValaCCodeExpression*) _tmp15_, (ValaCCodeExpression*) _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_vala_ccode_node_unref0 (_tmp15_);
	_vala_ccode_node_unref0 (_tmp13_);
	_vala_ccode_node_unref0 (_tmp11_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp18_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp18_, function);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_type_value_table_free_function (ValaGTypeModule* self,
                                                      ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeMemberAccess* vpointer = NULL;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeMemberAccess* _tmp10_;
	ValaCCodeMemberAccess* _tmp11_;
	ValaCCodeMemberAccess* _tmp12_;
	ValaCCodeMemberAccess* _tmp13_;
	ValaCCodeFunctionCall* ccall = NULL;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeIdentifier* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaCCodeFunctionCall* _tmp19_;
	ValaCCodeFunction* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	ValaCCodeFile* _tmp26_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, "value_");
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_free_value", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_function_new (_tmp3_, "void");
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	function = _tmp5_;
	_tmp6_ = vala_ccode_parameter_new ("value", "GValue*");
	_tmp7_ = _tmp6_;
	vala_ccode_function_add_parameter (function, _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp8_ = vala_ccode_identifier_new ("value");
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp9_, "data[0]");
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp11_, "v_pointer", FALSE);
	_tmp13_ = _tmp12_;
	_vala_ccode_node_unref0 (_tmp11_);
	_vala_ccode_node_unref0 (_tmp9_);
	vpointer = _tmp13_;
	_tmp14_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_identifier_new (_tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp17_);
	_tmp19_ = _tmp18_;
	_vala_ccode_node_unref0 (_tmp17_);
	_g_free0 (_tmp15_);
	ccall = _tmp19_;
	vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) vpointer);
	_tmp20_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp21_ = _tmp20_;
	vala_ccode_function_open_if (_tmp21_, (ValaCCodeExpression*) vpointer);
	_tmp22_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp23_ = _tmp22_;
	vala_ccode_function_add_expression (_tmp23_, (ValaCCodeExpression*) ccall);
	_tmp24_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp25_ = _tmp24_;
	vala_ccode_function_close (_tmp25_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp26_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp26_, function);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_type_value_table_copy_function (ValaGTypeModule* self,
                                                      ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeMemberAccess* dest_vpointer = NULL;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeMemberAccess* _tmp12_;
	ValaCCodeMemberAccess* _tmp13_;
	ValaCCodeMemberAccess* _tmp14_;
	ValaCCodeMemberAccess* _tmp15_;
	ValaCCodeMemberAccess* src_vpointer = NULL;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeIdentifier* _tmp17_;
	ValaCCodeMemberAccess* _tmp18_;
	ValaCCodeMemberAccess* _tmp19_;
	ValaCCodeMemberAccess* _tmp20_;
	ValaCCodeMemberAccess* _tmp21_;
	ValaCCodeFunctionCall* ref_ccall = NULL;
	gchar* _tmp22_;
	gchar* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeFunctionCall* _tmp26_;
	ValaCCodeFunctionCall* _tmp27_;
	ValaCCodeFunction* _tmp28_;
	ValaCCodeFunction* _tmp29_;
	ValaCCodeFunction* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeConstant* _tmp36_;
	ValaCCodeConstant* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	ValaCCodeFile* _tmp40_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, "value_");
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_copy_value", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_function_new (_tmp3_, "void");
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	function = _tmp5_;
	_tmp6_ = vala_ccode_parameter_new ("src_value", "const GValue*");
	_tmp7_ = _tmp6_;
	vala_ccode_function_add_parameter (function, _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	_tmp8_ = vala_ccode_parameter_new ("dest_value", "GValue*");
	_tmp9_ = _tmp8_;
	vala_ccode_function_add_parameter (function, _tmp9_);
	_vala_ccode_node_unref0 (_tmp9_);
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp10_ = vala_ccode_identifier_new ("dest_value");
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp11_, "data[0]");
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp13_, "v_pointer", FALSE);
	_tmp15_ = _tmp14_;
	_vala_ccode_node_unref0 (_tmp13_);
	_vala_ccode_node_unref0 (_tmp11_);
	dest_vpointer = _tmp15_;
	_tmp16_ = vala_ccode_identifier_new ("src_value");
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp17_, "data[0]");
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp19_, "v_pointer", FALSE);
	_tmp21_ = _tmp20_;
	_vala_ccode_node_unref0 (_tmp19_);
	_vala_ccode_node_unref0 (_tmp17_);
	src_vpointer = _tmp21_;
	_tmp22_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
	_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_);
	ref_ccall = _tmp27_;
	vala_ccode_function_call_add_argument (ref_ccall, (ValaCCodeExpression*) src_vpointer);
	_tmp28_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp29_ = _tmp28_;
	vala_ccode_function_open_if (_tmp29_, (ValaCCodeExpression*) src_vpointer);
	_tmp30_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp31_ = _tmp30_;
	vala_ccode_function_add_assignment (_tmp31_, (ValaCCodeExpression*) dest_vpointer, (ValaCCodeExpression*) ref_ccall);
	_tmp32_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp33_ = _tmp32_;
	vala_ccode_function_add_else (_tmp33_);
	_tmp34_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp35_ = _tmp34_;
	_tmp36_ = vala_ccode_constant_new ("NULL");
	_tmp37_ = _tmp36_;
	vala_ccode_function_add_assignment (_tmp35_, (ValaCCodeExpression*) dest_vpointer, (ValaCCodeExpression*) _tmp37_);
	_vala_ccode_node_unref0 (_tmp37_);
	_tmp38_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp39_ = _tmp38_;
	vala_ccode_function_close (_tmp39_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp40_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp40_, function);
	_vala_ccode_node_unref0 (ref_ccall);
	_vala_ccode_node_unref0 (src_vpointer);
	_vala_ccode_node_unref0 (dest_vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_type_value_table_peek_pointer_function (ValaGTypeModule* self,
                                                              ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeMemberAccess* vpointer = NULL;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeMemberAccess* _tmp10_;
	ValaCCodeMemberAccess* _tmp11_;
	ValaCCodeMemberAccess* _tmp12_;
	ValaCCodeMemberAccess* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeFile* _tmp16_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, "value_");
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_peek_pointer", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_function_new (_tmp3_, "gpointer");
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	function = _tmp5_;
	_tmp6_ = vala_ccode_parameter_new ("value", "const GValue*");
	_tmp7_ = _tmp6_;
	vala_ccode_function_add_parameter (function, _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp8_ = vala_ccode_identifier_new ("value");
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp9_, "data[0]");
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp11_, "v_pointer", FALSE);
	_tmp13_ = _tmp12_;
	_vala_ccode_node_unref0 (_tmp11_);
	_vala_ccode_node_unref0 (_tmp9_);
	vpointer = _tmp13_;
	_tmp14_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_return (_tmp15_, (ValaCCodeExpression*) vpointer);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp16_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp16_, function);
	_vala_ccode_node_unref0 (vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_type_value_table_lcopy_value_function (ValaGTypeModule* self,
                                                             ValaClass* cl)
{
	ValaCCodeFile* _tmp0_;
	ValaCCodeFunction* function = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeMemberAccess* vpointer = NULL;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeMemberAccess* _tmp17_;
	ValaCCodeMemberAccess* _tmp18_;
	ValaCCodeMemberAccess* _tmp19_;
	ValaCCodeMemberAccess* _tmp20_;
	ValaCCodeIdentifier* object_p_ptr = NULL;
	ValaCCodeIdentifier* _tmp21_;
	ValaCCodeConstant* null_ = NULL;
	ValaCCodeConstant* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeMemberAccess* _tmp31_;
	ValaCCodeMemberAccess* _tmp32_;
	ValaCCodeVariableDeclarator* _tmp33_;
	ValaCCodeVariableDeclarator* _tmp34_;
	ValaCCodeFunctionCall* value_type_name_fct = NULL;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeIdentifier* _tmp36_;
	ValaCCodeFunctionCall* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	ValaCCodeConstant* _tmp39_;
	ValaCCodeConstant* _tmp40_;
	ValaCCodeUnaryExpression* assert_condition = NULL;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeUnaryExpression* _tmp43_;
	ValaCCodeUnaryExpression* _tmp44_;
	ValaCCodeFunction* _tmp45_;
	ValaCCodeFunction* _tmp46_;
	ValaCCodeFunctionCall* assert_printf = NULL;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeFunctionCall* _tmp49_;
	ValaCCodeFunctionCall* _tmp50_;
	ValaCCodeConstant* _tmp51_;
	ValaCCodeConstant* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeFunction* _tmp54_;
	ValaCCodeFunction* _tmp55_;
	ValaCCodeFunction* _tmp56_;
	ValaCCodeUnaryExpression* main_condition = NULL;
	ValaCCodeUnaryExpression* _tmp57_;
	ValaCCodeBinaryExpression* main_else_if_condition = NULL;
	ValaCCodeIdentifier* _tmp58_;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeIdentifier* _tmp60_;
	ValaCCodeIdentifier* _tmp61_;
	ValaCCodeBinaryExpression* _tmp62_;
	ValaCCodeBinaryExpression* _tmp63_;
	ValaCCodeFunctionCall* ref_fct = NULL;
	gchar* _tmp64_;
	gchar* _tmp65_;
	ValaCCodeIdentifier* _tmp66_;
	ValaCCodeIdentifier* _tmp67_;
	ValaCCodeFunctionCall* _tmp68_;
	ValaCCodeFunctionCall* _tmp69_;
	ValaCCodeFunction* _tmp70_;
	ValaCCodeFunction* _tmp71_;
	ValaCCodeFunction* _tmp72_;
	ValaCCodeFunction* _tmp73_;
	ValaCCodeFunction* _tmp74_;
	ValaCCodeFunction* _tmp75_;
	ValaCCodeFunction* _tmp76_;
	ValaCCodeFunction* _tmp77_;
	ValaCCodeFunction* _tmp78_;
	ValaCCodeFunction* _tmp79_;
	ValaCCodeFunction* _tmp80_;
	ValaCCodeFunction* _tmp81_;
	ValaCCodeFunction* _tmp82_;
	ValaCCodeFunction* _tmp83_;
	ValaCCodeFunction* _tmp84_;
	ValaCCodeFunction* _tmp85_;
	ValaCCodeFile* _tmp86_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_include (_tmp0_, "gobject/gvaluecollector.h", FALSE);
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, "value_");
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_lcopy_value", _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "gchar*");
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	function = _tmp6_;
	_tmp7_ = vala_ccode_parameter_new ("value", "const GValue*");
	_tmp8_ = _tmp7_;
	vala_ccode_function_add_parameter (function, _tmp8_);
	_vala_ccode_node_unref0 (_tmp8_);
	_tmp9_ = vala_ccode_parameter_new ("n_collect_values", "guint");
	_tmp10_ = _tmp9_;
	vala_ccode_function_add_parameter (function, _tmp10_);
	_vala_ccode_node_unref0 (_tmp10_);
	_tmp11_ = vala_ccode_parameter_new ("collect_values", "GTypeCValue*");
	_tmp12_ = _tmp11_;
	vala_ccode_function_add_parameter (function, _tmp12_);
	_vala_ccode_node_unref0 (_tmp12_);
	_tmp13_ = vala_ccode_parameter_new ("collect_flags", "guint");
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (function, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	_tmp15_ = vala_ccode_identifier_new ("value");
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp16_, "data[0]");
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp18_, "v_pointer", FALSE);
	_tmp20_ = _tmp19_;
	_vala_ccode_node_unref0 (_tmp18_);
	_vala_ccode_node_unref0 (_tmp16_);
	vpointer = _tmp20_;
	_tmp21_ = vala_ccode_identifier_new ("*object_p");
	object_p_ptr = _tmp21_;
	_tmp22_ = vala_ccode_constant_new ("NULL");
	null_ = _tmp22_;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp23_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp24_ = _tmp23_;
	_tmp25_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp26_ = _tmp25_;
	_tmp27_ = g_strdup_printf ("%s **", _tmp26_);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_identifier_new ("collect_values[0]");
	_tmp30_ = _tmp29_;
	_tmp31_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp30_, "v_pointer", FALSE);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_ccode_variable_declarator_new ("object_p", (ValaCCodeExpression*) _tmp32_, NULL);
	_tmp34_ = _tmp33_;
	vala_ccode_function_add_declaration (_tmp24_, _tmp28_, (ValaCCodeDeclarator*) _tmp34_, 0);
	_vala_ccode_node_unref0 (_tmp34_);
	_vala_ccode_node_unref0 (_tmp32_);
	_vala_ccode_node_unref0 (_tmp30_);
	_g_free0 (_tmp28_);
	_g_free0 (_tmp26_);
	_tmp35_ = vala_ccode_identifier_new ("G_VALUE_TYPE_NAME");
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp36_);
	_tmp38_ = _tmp37_;
	_vala_ccode_node_unref0 (_tmp36_);
	value_type_name_fct = _tmp38_;
	_tmp39_ = vala_ccode_constant_new ("value");
	_tmp40_ = _tmp39_;
	vala_ccode_function_call_add_argument (value_type_name_fct, (ValaCCodeExpression*) _tmp40_);
	_vala_ccode_node_unref0 (_tmp40_);
	_tmp41_ = vala_ccode_identifier_new ("object_p");
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp42_);
	_tmp44_ = _tmp43_;
	_vala_ccode_node_unref0 (_tmp42_);
	assert_condition = _tmp44_;
	_tmp45_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp46_ = _tmp45_;
	vala_ccode_function_open_if (_tmp46_, (ValaCCodeExpression*) assert_condition);
	_tmp47_ = vala_ccode_identifier_new ("g_strdup_printf");
	_tmp48_ = _tmp47_;
	_tmp49_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp48_);
	_tmp50_ = _tmp49_;
	_vala_ccode_node_unref0 (_tmp48_);
	assert_printf = _tmp50_;
	_tmp51_ = vala_ccode_constant_new ("\"value location for `%s' passed as NULL\"");
	_tmp52_ = _tmp51_;
	vala_ccode_function_call_add_argument (assert_printf, (ValaCCodeExpression*) _tmp52_);
	_vala_ccode_node_unref0 (_tmp52_);
	vala_ccode_function_call_add_argument (assert_printf, (ValaCCodeExpression*) value_type_name_fct);
	_tmp53_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp54_ = _tmp53_;
	vala_ccode_function_add_return (_tmp54_, (ValaCCodeExpression*) assert_printf);
	_tmp55_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp56_ = _tmp55_;
	vala_ccode_function_close (_tmp56_);
	_tmp57_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) vpointer);
	main_condition = _tmp57_;
	_tmp58_ = vala_ccode_identifier_new ("collect_flags");
	_tmp59_ = _tmp58_;
	_tmp60_ = vala_ccode_identifier_new ("G_VALUE_NOCOPY_CONTENTS");
	_tmp61_ = _tmp60_;
	_tmp62_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_BITWISE_AND, (ValaCCodeExpression*) _tmp59_, (ValaCCodeExpression*) _tmp61_);
	_tmp63_ = _tmp62_;
	_vala_ccode_node_unref0 (_tmp61_);
	_vala_ccode_node_unref0 (_tmp59_);
	main_else_if_condition = _tmp63_;
	_tmp64_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
	_tmp65_ = _tmp64_;
	_tmp66_ = vala_ccode_identifier_new (_tmp65_);
	_tmp67_ = _tmp66_;
	_tmp68_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp67_);
	_tmp69_ = _tmp68_;
	_vala_ccode_node_unref0 (_tmp67_);
	_g_free0 (_tmp65_);
	ref_fct = _tmp69_;
	vala_ccode_function_call_add_argument (ref_fct, (ValaCCodeExpression*) vpointer);
	_tmp70_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp71_ = _tmp70_;
	vala_ccode_function_open_if (_tmp71_, (ValaCCodeExpression*) main_condition);
	_tmp72_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp73_ = _tmp72_;
	vala_ccode_function_add_assignment (_tmp73_, (ValaCCodeExpression*) object_p_ptr, (ValaCCodeExpression*) null_);
	_tmp74_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp75_ = _tmp74_;
	vala_ccode_function_else_if (_tmp75_, (ValaCCodeExpression*) main_else_if_condition);
	_tmp76_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp77_ = _tmp76_;
	vala_ccode_function_add_assignment (_tmp77_, (ValaCCodeExpression*) object_p_ptr, (ValaCCodeExpression*) vpointer);
	_tmp78_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp79_ = _tmp78_;
	vala_ccode_function_add_else (_tmp79_);
	_tmp80_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp81_ = _tmp80_;
	vala_ccode_function_add_assignment (_tmp81_, (ValaCCodeExpression*) object_p_ptr, (ValaCCodeExpression*) ref_fct);
	_tmp82_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp83_ = _tmp82_;
	vala_ccode_function_close (_tmp83_);
	_tmp84_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp85_ = _tmp84_;
	vala_ccode_function_add_return (_tmp85_, (ValaCCodeExpression*) null_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp86_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp86_, function);
	_vala_ccode_node_unref0 (ref_fct);
	_vala_ccode_node_unref0 (main_else_if_condition);
	_vala_ccode_node_unref0 (main_condition);
	_vala_ccode_node_unref0 (assert_printf);
	_vala_ccode_node_unref0 (assert_condition);
	_vala_ccode_node_unref0 (value_type_name_fct);
	_vala_ccode_node_unref0 (null_);
	_vala_ccode_node_unref0 (object_p_ptr);
	_vala_ccode_node_unref0 (vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_type_value_table_collect_value_function (ValaGTypeModule* self,
                                                               ValaClass* cl)
{
	ValaCCodeFile* _tmp0_;
	ValaCCodeFunction* function = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeMemberAccess* vpointer = NULL;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeMemberAccess* _tmp17_;
	ValaCCodeMemberAccess* _tmp18_;
	ValaCCodeMemberAccess* _tmp19_;
	ValaCCodeMemberAccess* _tmp20_;
	ValaCCodeMemberAccess* collect_vpointer = NULL;
	ValaCCodeIdentifier* _tmp21_;
	ValaCCodeIdentifier* _tmp22_;
	ValaCCodeMemberAccess* _tmp23_;
	ValaCCodeMemberAccess* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	ValaCCodeFunction* _tmp26_;
	ValaCCodeFunction* _tmp27_;
	ValaCCodeFunction* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	gchar* _tmp31_;
	gchar* _tmp32_;
	ValaCCodeVariableDeclarator* _tmp33_;
	ValaCCodeVariableDeclarator* _tmp34_;
	ValaCCodeIdentifier* obj_identifier = NULL;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeMemberAccess* l_expression = NULL;
	ValaCCodeMemberAccess* _tmp36_;
	ValaCCodeMemberAccess* _tmp37_;
	ValaCCodeMemberAccess* _tmp38_;
	ValaCCodeMemberAccess* _tmp39_;
	ValaCCodeBinaryExpression* sub_condition = NULL;
	ValaCCodeConstant* _tmp40_;
	ValaCCodeConstant* _tmp41_;
	ValaCCodeBinaryExpression* _tmp42_;
	ValaCCodeBinaryExpression* _tmp43_;
	ValaCCodeFunctionCall* value_type_name_fct = NULL;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeFunctionCall* _tmp46_;
	ValaCCodeFunctionCall* _tmp47_;
	ValaCCodeConstant* _tmp48_;
	ValaCCodeConstant* _tmp49_;
	ValaCCodeFunction* _tmp50_;
	ValaCCodeFunction* _tmp51_;
	ValaCCodeFunctionCall* true_return = NULL;
	ValaCCodeIdentifier* _tmp52_;
	ValaCCodeIdentifier* _tmp53_;
	ValaCCodeFunctionCall* _tmp54_;
	ValaCCodeFunctionCall* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeConstant* _tmp57_;
	ValaCCodeConstant* _tmp58_;
	ValaCCodeConstant* _tmp59_;
	ValaCCodeConstant* _tmp60_;
	ValaCCodeConstant* _tmp61_;
	ValaCCodeFunction* _tmp62_;
	ValaCCodeFunction* _tmp63_;
	ValaCCodeFunctionCall* reg_call = NULL;
	ValaCCodeIdentifier* _tmp64_;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeFunctionCall* _tmp66_;
	ValaCCodeFunctionCall* _tmp67_;
	ValaCCodeFunctionCall* type_check = NULL;
	ValaCCodeIdentifier* _tmp68_;
	ValaCCodeIdentifier* _tmp69_;
	ValaCCodeFunctionCall* _tmp70_;
	ValaCCodeFunctionCall* _tmp71_;
	ValaCCodeIdentifier* _tmp72_;
	ValaCCodeIdentifier* _tmp73_;
	ValaCCodeFunctionCall* stored_type = NULL;
	ValaCCodeIdentifier* _tmp74_;
	ValaCCodeIdentifier* _tmp75_;
	ValaCCodeFunctionCall* _tmp76_;
	ValaCCodeFunctionCall* _tmp77_;
	ValaCCodeIdentifier* _tmp78_;
	ValaCCodeIdentifier* _tmp79_;
	ValaCCodeFunction* _tmp80_;
	ValaCCodeFunction* _tmp81_;
	ValaCCodeUnaryExpression* _tmp82_;
	ValaCCodeUnaryExpression* _tmp83_;
	ValaCCodeFunctionCall* false_return = NULL;
	ValaCCodeIdentifier* _tmp84_;
	ValaCCodeIdentifier* _tmp85_;
	ValaCCodeFunctionCall* _tmp86_;
	ValaCCodeFunctionCall* _tmp87_;
	ValaCCodeFunctionCall* type_name_fct = NULL;
	ValaCCodeIdentifier* _tmp88_;
	ValaCCodeIdentifier* _tmp89_;
	ValaCCodeFunctionCall* _tmp90_;
	ValaCCodeFunctionCall* _tmp91_;
	ValaCCodeConstant* _tmp92_;
	ValaCCodeConstant* _tmp93_;
	ValaCCodeConstant* _tmp94_;
	ValaCCodeConstant* _tmp95_;
	ValaCCodeConstant* _tmp96_;
	ValaCCodeConstant* _tmp97_;
	ValaCCodeConstant* _tmp98_;
	ValaCCodeConstant* _tmp99_;
	ValaCCodeFunction* _tmp100_;
	ValaCCodeFunction* _tmp101_;
	ValaCCodeFunction* _tmp102_;
	ValaCCodeFunction* _tmp103_;
	ValaCCodeFunctionCall* ref_call = NULL;
	gchar* _tmp104_;
	gchar* _tmp105_;
	ValaCCodeIdentifier* _tmp106_;
	ValaCCodeIdentifier* _tmp107_;
	ValaCCodeFunctionCall* _tmp108_;
	ValaCCodeFunctionCall* _tmp109_;
	ValaCCodeIdentifier* _tmp110_;
	ValaCCodeIdentifier* _tmp111_;
	ValaCCodeFunction* _tmp112_;
	ValaCCodeFunction* _tmp113_;
	ValaCCodeFunction* _tmp114_;
	ValaCCodeFunction* _tmp115_;
	ValaCCodeFunction* _tmp116_;
	ValaCCodeFunction* _tmp117_;
	ValaCCodeConstant* _tmp118_;
	ValaCCodeConstant* _tmp119_;
	ValaCCodeFunction* _tmp120_;
	ValaCCodeFunction* _tmp121_;
	ValaCCodeFunction* _tmp122_;
	ValaCCodeFunction* _tmp123_;
	ValaCCodeConstant* _tmp124_;
	ValaCCodeConstant* _tmp125_;
	ValaCCodeFile* _tmp126_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_include (_tmp0_, "gobject/gvaluecollector.h", FALSE);
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, "value_");
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_collect_value", _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "gchar*");
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	function = _tmp6_;
	_tmp7_ = vala_ccode_parameter_new ("value", "GValue*");
	_tmp8_ = _tmp7_;
	vala_ccode_function_add_parameter (function, _tmp8_);
	_vala_ccode_node_unref0 (_tmp8_);
	_tmp9_ = vala_ccode_parameter_new ("n_collect_values", "guint");
	_tmp10_ = _tmp9_;
	vala_ccode_function_add_parameter (function, _tmp10_);
	_vala_ccode_node_unref0 (_tmp10_);
	_tmp11_ = vala_ccode_parameter_new ("collect_values", "GTypeCValue*");
	_tmp12_ = _tmp11_;
	vala_ccode_function_add_parameter (function, _tmp12_);
	_vala_ccode_node_unref0 (_tmp12_);
	_tmp13_ = vala_ccode_parameter_new ("collect_flags", "guint");
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (function, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	_tmp15_ = vala_ccode_identifier_new ("value");
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp16_, "data[0]");
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp18_, "v_pointer", FALSE);
	_tmp20_ = _tmp19_;
	_vala_ccode_node_unref0 (_tmp18_);
	_vala_ccode_node_unref0 (_tmp16_);
	vpointer = _tmp20_;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp21_ = vala_ccode_identifier_new ("collect_values[0]");
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp22_, "v_pointer", FALSE);
	_tmp24_ = _tmp23_;
	_vala_ccode_node_unref0 (_tmp22_);
	collect_vpointer = _tmp24_;
	_tmp25_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp26_ = _tmp25_;
	vala_ccode_function_open_if (_tmp26_, (ValaCCodeExpression*) collect_vpointer);
	_tmp27_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp30_ = _tmp29_;
	_tmp31_ = g_strdup_printf ("%s *", _tmp30_);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_ccode_variable_declarator_new ("object", (ValaCCodeExpression*) collect_vpointer, NULL);
	_tmp34_ = _tmp33_;
	vala_ccode_function_add_declaration (_tmp28_, _tmp32_, (ValaCCodeDeclarator*) _tmp34_, 0);
	_vala_ccode_node_unref0 (_tmp34_);
	_g_free0 (_tmp32_);
	_g_free0 (_tmp30_);
	_tmp35_ = vala_ccode_identifier_new ("object");
	obj_identifier = _tmp35_;
	_tmp36_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) obj_identifier, "parent_instance");
	_tmp37_ = _tmp36_;
	_tmp38_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp37_, "g_class", FALSE);
	_tmp39_ = _tmp38_;
	_vala_ccode_node_unref0 (_tmp37_);
	l_expression = _tmp39_;
	_tmp40_ = vala_ccode_constant_new ("NULL");
	_tmp41_ = _tmp40_;
	_tmp42_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) l_expression, (ValaCCodeExpression*) _tmp41_);
	_tmp43_ = _tmp42_;
	_vala_ccode_node_unref0 (_tmp41_);
	sub_condition = _tmp43_;
	_tmp44_ = vala_ccode_identifier_new ("G_VALUE_TYPE_NAME");
	_tmp45_ = _tmp44_;
	_tmp46_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp45_);
	_tmp47_ = _tmp46_;
	_vala_ccode_node_unref0 (_tmp45_);
	value_type_name_fct = _tmp47_;
	_tmp48_ = vala_ccode_constant_new ("value");
	_tmp49_ = _tmp48_;
	vala_ccode_function_call_add_argument (value_type_name_fct, (ValaCCodeExpression*) _tmp49_);
	_vala_ccode_node_unref0 (_tmp49_);
	_tmp50_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp51_ = _tmp50_;
	vala_ccode_function_open_if (_tmp51_, (ValaCCodeExpression*) sub_condition);
	_tmp52_ = vala_ccode_identifier_new ("g_strconcat");
	_tmp53_ = _tmp52_;
	_tmp54_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp53_);
	_tmp55_ = _tmp54_;
	_vala_ccode_node_unref0 (_tmp53_);
	true_return = _tmp55_;
	_tmp56_ = vala_ccode_constant_new ("\"invalid unclassed object pointer for value type `\"");
	_tmp57_ = _tmp56_;
	vala_ccode_function_call_add_argument (true_return, (ValaCCodeExpression*) _tmp57_);
	_vala_ccode_node_unref0 (_tmp57_);
	vala_ccode_function_call_add_argument (true_return, (ValaCCodeExpression*) value_type_name_fct);
	_tmp58_ = vala_ccode_constant_new ("\"'\"");
	_tmp59_ = _tmp58_;
	vala_ccode_function_call_add_argument (true_return, (ValaCCodeExpression*) _tmp59_);
	_vala_ccode_node_unref0 (_tmp59_);
	_tmp60_ = vala_ccode_constant_new ("NULL");
	_tmp61_ = _tmp60_;
	vala_ccode_function_call_add_argument (true_return, (ValaCCodeExpression*) _tmp61_);
	_vala_ccode_node_unref0 (_tmp61_);
	_tmp62_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp63_ = _tmp62_;
	vala_ccode_function_add_return (_tmp63_, (ValaCCodeExpression*) true_return);
	_tmp64_ = vala_ccode_identifier_new ("g_value_type_compatible");
	_tmp65_ = _tmp64_;
	_tmp66_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp65_);
	_tmp67_ = _tmp66_;
	_vala_ccode_node_unref0 (_tmp65_);
	reg_call = _tmp67_;
	_tmp68_ = vala_ccode_identifier_new ("G_TYPE_FROM_INSTANCE");
	_tmp69_ = _tmp68_;
	_tmp70_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp69_);
	_tmp71_ = _tmp70_;
	_vala_ccode_node_unref0 (_tmp69_);
	type_check = _tmp71_;
	_tmp72_ = vala_ccode_identifier_new ("object");
	_tmp73_ = _tmp72_;
	vala_ccode_function_call_add_argument (type_check, (ValaCCodeExpression*) _tmp73_);
	_vala_ccode_node_unref0 (_tmp73_);
	vala_ccode_function_call_add_argument (reg_call, (ValaCCodeExpression*) type_check);
	_tmp74_ = vala_ccode_identifier_new ("G_VALUE_TYPE");
	_tmp75_ = _tmp74_;
	_tmp76_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp75_);
	_tmp77_ = _tmp76_;
	_vala_ccode_node_unref0 (_tmp75_);
	stored_type = _tmp77_;
	_tmp78_ = vala_ccode_identifier_new ("value");
	_tmp79_ = _tmp78_;
	vala_ccode_function_call_add_argument (stored_type, (ValaCCodeExpression*) _tmp79_);
	_vala_ccode_node_unref0 (_tmp79_);
	vala_ccode_function_call_add_argument (reg_call, (ValaCCodeExpression*) stored_type);
	_tmp80_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp81_ = _tmp80_;
	_tmp82_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) reg_call);
	_tmp83_ = _tmp82_;
	vala_ccode_function_else_if (_tmp81_, (ValaCCodeExpression*) _tmp83_);
	_vala_ccode_node_unref0 (_tmp83_);
	_tmp84_ = vala_ccode_identifier_new ("g_strconcat");
	_tmp85_ = _tmp84_;
	_tmp86_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp85_);
	_tmp87_ = _tmp86_;
	_vala_ccode_node_unref0 (_tmp85_);
	false_return = _tmp87_;
	_tmp88_ = vala_ccode_identifier_new ("g_type_name");
	_tmp89_ = _tmp88_;
	_tmp90_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp89_);
	_tmp91_ = _tmp90_;
	_vala_ccode_node_unref0 (_tmp89_);
	type_name_fct = _tmp91_;
	vala_ccode_function_call_add_argument (type_name_fct, (ValaCCodeExpression*) type_check);
	_tmp92_ = vala_ccode_constant_new ("\"invalid object type `\"");
	_tmp93_ = _tmp92_;
	vala_ccode_function_call_add_argument (false_return, (ValaCCodeExpression*) _tmp93_);
	_vala_ccode_node_unref0 (_tmp93_);
	vala_ccode_function_call_add_argument (false_return, (ValaCCodeExpression*) type_name_fct);
	_tmp94_ = vala_ccode_constant_new ("\"' for value type `\"");
	_tmp95_ = _tmp94_;
	vala_ccode_function_call_add_argument (false_return, (ValaCCodeExpression*) _tmp95_);
	_vala_ccode_node_unref0 (_tmp95_);
	vala_ccode_function_call_add_argument (false_return, (ValaCCodeExpression*) value_type_name_fct);
	_tmp96_ = vala_ccode_constant_new ("\"'\"");
	_tmp97_ = _tmp96_;
	vala_ccode_function_call_add_argument (false_return, (ValaCCodeExpression*) _tmp97_);
	_vala_ccode_node_unref0 (_tmp97_);
	_tmp98_ = vala_ccode_constant_new ("NULL");
	_tmp99_ = _tmp98_;
	vala_ccode_function_call_add_argument (false_return, (ValaCCodeExpression*) _tmp99_);
	_vala_ccode_node_unref0 (_tmp99_);
	_tmp100_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp101_ = _tmp100_;
	vala_ccode_function_add_return (_tmp101_, (ValaCCodeExpression*) false_return);
	_tmp102_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp103_ = _tmp102_;
	vala_ccode_function_close (_tmp103_);
	_tmp104_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
	_tmp105_ = _tmp104_;
	_tmp106_ = vala_ccode_identifier_new (_tmp105_);
	_tmp107_ = _tmp106_;
	_tmp108_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp107_);
	_tmp109_ = _tmp108_;
	_vala_ccode_node_unref0 (_tmp107_);
	_g_free0 (_tmp105_);
	ref_call = _tmp109_;
	_tmp110_ = vala_ccode_identifier_new ("object");
	_tmp111_ = _tmp110_;
	vala_ccode_function_call_add_argument (ref_call, (ValaCCodeExpression*) _tmp111_);
	_vala_ccode_node_unref0 (_tmp111_);
	_tmp112_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp113_ = _tmp112_;
	vala_ccode_function_add_assignment (_tmp113_, (ValaCCodeExpression*) vpointer, (ValaCCodeExpression*) ref_call);
	_tmp114_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp115_ = _tmp114_;
	vala_ccode_function_add_else (_tmp115_);
	_tmp116_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp117_ = _tmp116_;
	_tmp118_ = vala_ccode_constant_new ("NULL");
	_tmp119_ = _tmp118_;
	vala_ccode_function_add_assignment (_tmp117_, (ValaCCodeExpression*) vpointer, (ValaCCodeExpression*) _tmp119_);
	_vala_ccode_node_unref0 (_tmp119_);
	_tmp120_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp121_ = _tmp120_;
	vala_ccode_function_close (_tmp121_);
	_tmp122_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp123_ = _tmp122_;
	_tmp124_ = vala_ccode_constant_new ("NULL");
	_tmp125_ = _tmp124_;
	vala_ccode_function_add_return (_tmp123_, (ValaCCodeExpression*) _tmp125_);
	_vala_ccode_node_unref0 (_tmp125_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp126_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp126_, function);
	_vala_ccode_node_unref0 (ref_call);
	_vala_ccode_node_unref0 (type_name_fct);
	_vala_ccode_node_unref0 (false_return);
	_vala_ccode_node_unref0 (stored_type);
	_vala_ccode_node_unref0 (type_check);
	_vala_ccode_node_unref0 (reg_call);
	_vala_ccode_node_unref0 (true_return);
	_vala_ccode_node_unref0 (value_type_name_fct);
	_vala_ccode_node_unref0 (sub_condition);
	_vala_ccode_node_unref0 (l_expression);
	_vala_ccode_node_unref0 (obj_identifier);
	_vala_ccode_node_unref0 (collect_vpointer);
	_vala_ccode_node_unref0 (vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_g_param_spec_type_function (ValaGTypeModule* self,
                                                  ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeParameter* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeParameter* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeParameter* _tmp18_;
	ValaCCodeFunction* _tmp26_;
	ValaCCodeFunction* _tmp27_;
	ValaCCodeFunction* _tmp28_;
	ValaSymbol* _tmp29_;
	ValaSymbol* _tmp30_;
	gchar* _tmp31_;
	gchar* _tmp32_;
	const gchar* _tmp33_;
	const gchar* _tmp34_;
	gchar* _tmp35_;
	gchar* _tmp36_;
	ValaCCodeVariableDeclarator* _tmp37_;
	ValaCCodeVariableDeclarator* _tmp38_;
	ValaCCodeFunctionCall* subccall = NULL;
	ValaCCodeIdentifier* _tmp39_;
	ValaCCodeIdentifier* _tmp40_;
	ValaCCodeFunctionCall* _tmp41_;
	ValaCCodeFunctionCall* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeIdentifier* _tmp44_;
	gchar* _tmp45_;
	gchar* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp49_;
	ValaCCodeIdentifier* _tmp50_;
	ValaCCodeFunctionCall* _tmp51_;
	ValaCCodeFunctionCall* _tmp52_;
	ValaCCodeFunctionCall* _tmp53_;
	ValaCCodeFunctionCall* _tmp54_;
	ValaCCodeConstant* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeFunction* _tmp57_;
	ValaCCodeFunction* _tmp58_;
	ValaCCodeFunctionCall* _tmp59_;
	ValaCCodeIdentifier* _tmp60_;
	ValaCCodeIdentifier* _tmp61_;
	ValaCCodeFunctionCall* _tmp62_;
	ValaCCodeFunctionCall* _tmp63_;
	ValaCCodeIdentifier* _tmp64_;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeFunctionCall* _tmp66_;
	ValaCCodeIdentifier* _tmp67_;
	ValaCCodeIdentifier* _tmp68_;
	ValaCCodeFunctionCall* _tmp69_;
	ValaCCodeIdentifier* _tmp70_;
	ValaCCodeIdentifier* _tmp71_;
	ValaCCodeFunctionCall* _tmp72_;
	ValaCCodeIdentifier* _tmp73_;
	ValaCCodeIdentifier* _tmp74_;
	ValaCCodeFunctionCall* _tmp75_;
	ValaCCodeIdentifier* _tmp76_;
	ValaCCodeIdentifier* _tmp77_;
	ValaCCodeFunction* _tmp78_;
	ValaCCodeFunction* _tmp79_;
	ValaCCodeIdentifier* _tmp80_;
	ValaCCodeIdentifier* _tmp81_;
	ValaCCodeFunctionCall* _tmp82_;
	ValaCCodeIdentifier* _tmp83_;
	ValaCCodeIdentifier* _tmp84_;
	ValaCCodeFunctionCall* _tmp85_;
	ValaCCodeFunctionCall* _tmp86_;
	ValaCCodeIdentifier* _tmp87_;
	ValaCCodeIdentifier* _tmp88_;
	ValaCCodeFunction* _tmp89_;
	ValaCCodeFunction* _tmp90_;
	ValaCCodeFunctionCall* _tmp91_;
	ValaCCodeMemberAccess* _tmp92_;
	ValaCCodeMemberAccess* _tmp93_;
	ValaCCodeIdentifier* _tmp94_;
	ValaCCodeIdentifier* _tmp95_;
	ValaCCodeFunction* _tmp96_;
	ValaCCodeFunction* _tmp97_;
	ValaCCodeFunctionCall* _tmp98_;
	ValaCCodeFile* _tmp99_;
	ValaCCodeFunction* _tmp100_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_param_spec_function ((ValaCodeNode*) cl);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_new (_tmp1_, "GParamSpec*");
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	function = _tmp3_;
	_tmp4_ = function;
	_tmp5_ = vala_ccode_parameter_new ("name", "const gchar*");
	_tmp6_ = _tmp5_;
	vala_ccode_function_add_parameter (_tmp4_, _tmp6_);
	_vala_ccode_node_unref0 (_tmp6_);
	_tmp7_ = function;
	_tmp8_ = vala_ccode_parameter_new ("nick", "const gchar*");
	_tmp9_ = _tmp8_;
	vala_ccode_function_add_parameter (_tmp7_, _tmp9_);
	_vala_ccode_node_unref0 (_tmp9_);
	_tmp10_ = function;
	_tmp11_ = vala_ccode_parameter_new ("blurb", "const gchar*");
	_tmp12_ = _tmp11_;
	vala_ccode_function_add_parameter (_tmp10_, _tmp12_);
	_vala_ccode_node_unref0 (_tmp12_);
	_tmp13_ = function;
	_tmp14_ = vala_ccode_parameter_new ("object_type", "GType");
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_parameter (_tmp13_, _tmp15_);
	_vala_ccode_node_unref0 (_tmp15_);
	_tmp16_ = function;
	_tmp17_ = vala_ccode_parameter_new ("flags", "GParamFlags");
	_tmp18_ = _tmp17_;
	vala_ccode_function_add_parameter (_tmp16_, _tmp18_);
	_vala_ccode_node_unref0 (_tmp18_);
	if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
		ValaCCodeFunction* _tmp19_;
		_tmp19_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp19_, VALA_CCODE_MODIFIERS_STATIC);
	} else {
		gboolean _tmp20_ = FALSE;
		ValaCodeContext* _tmp21_;
		ValaCodeContext* _tmp22_;
		gboolean _tmp23_;
		gboolean _tmp24_;
		_tmp21_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_code_context_get_hide_internal (_tmp22_);
		_tmp24_ = _tmp23_;
		if (_tmp24_) {
			_tmp20_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
		} else {
			_tmp20_ = FALSE;
		}
		if (_tmp20_) {
			ValaCCodeFunction* _tmp25_;
			_tmp25_ = function;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp25_, VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp26_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp26_);
	_tmp27_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_symbol_get_parent_symbol ((ValaSymbol*) cl);
	_tmp30_ = _tmp29_;
	_tmp31_ = vala_get_ccode_prefix (_tmp30_);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_symbol_get_name ((ValaSymbol*) cl);
	_tmp34_ = _tmp33_;
	_tmp35_ = g_strdup_printf ("%sParamSpec%s*", _tmp32_, _tmp34_);
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_variable_declarator_new ("spec", NULL, NULL);
	_tmp38_ = _tmp37_;
	vala_ccode_function_add_declaration (_tmp28_, _tmp36_, (ValaCCodeDeclarator*) _tmp38_, 0);
	_vala_ccode_node_unref0 (_tmp38_);
	_g_free0 (_tmp36_);
	_g_free0 (_tmp32_);
	_tmp39_ = vala_ccode_identifier_new ("g_type_is_a");
	_tmp40_ = _tmp39_;
	_tmp41_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp40_);
	_tmp42_ = _tmp41_;
	_vala_ccode_node_unref0 (_tmp40_);
	subccall = _tmp42_;
	_tmp43_ = vala_ccode_identifier_new ("object_type");
	_tmp44_ = _tmp43_;
	vala_ccode_function_call_add_argument (subccall, (ValaCCodeExpression*) _tmp44_);
	_vala_ccode_node_unref0 (_tmp44_);
	_tmp45_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
	_tmp46_ = _tmp45_;
	_tmp47_ = vala_ccode_identifier_new (_tmp46_);
	_tmp48_ = _tmp47_;
	vala_ccode_function_call_add_argument (subccall, (ValaCCodeExpression*) _tmp48_);
	_vala_ccode_node_unref0 (_tmp48_);
	_g_free0 (_tmp46_);
	_tmp49_ = vala_ccode_identifier_new ("g_return_val_if_fail");
	_tmp50_ = _tmp49_;
	_tmp51_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp50_);
	_tmp52_ = _tmp51_;
	_vala_ccode_node_unref0 (_tmp50_);
	ccall = _tmp52_;
	_tmp53_ = ccall;
	vala_ccode_function_call_add_argument (_tmp53_, (ValaCCodeExpression*) subccall);
	_tmp54_ = ccall;
	_tmp55_ = vala_ccode_constant_new ("NULL");
	_tmp56_ = _tmp55_;
	vala_ccode_function_call_add_argument (_tmp54_, (ValaCCodeExpression*) _tmp56_);
	_vala_ccode_node_unref0 (_tmp56_);
	_tmp57_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp58_ = _tmp57_;
	_tmp59_ = ccall;
	vala_ccode_function_add_expression (_tmp58_, (ValaCCodeExpression*) _tmp59_);
	_tmp60_ = vala_ccode_identifier_new ("g_param_spec_internal");
	_tmp61_ = _tmp60_;
	_tmp62_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp61_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp62_;
	_vala_ccode_node_unref0 (_tmp61_);
	_tmp63_ = ccall;
	_tmp64_ = vala_ccode_identifier_new ("G_TYPE_PARAM_OBJECT");
	_tmp65_ = _tmp64_;
	vala_ccode_function_call_add_argument (_tmp63_, (ValaCCodeExpression*) _tmp65_);
	_vala_ccode_node_unref0 (_tmp65_);
	_tmp66_ = ccall;
	_tmp67_ = vala_ccode_identifier_new ("name");
	_tmp68_ = _tmp67_;
	vala_ccode_function_call_add_argument (_tmp66_, (ValaCCodeExpression*) _tmp68_);
	_vala_ccode_node_unref0 (_tmp68_);
	_tmp69_ = ccall;
	_tmp70_ = vala_ccode_identifier_new ("nick");
	_tmp71_ = _tmp70_;
	vala_ccode_function_call_add_argument (_tmp69_, (ValaCCodeExpression*) _tmp71_);
	_vala_ccode_node_unref0 (_tmp71_);
	_tmp72_ = ccall;
	_tmp73_ = vala_ccode_identifier_new ("blurb");
	_tmp74_ = _tmp73_;
	vala_ccode_function_call_add_argument (_tmp72_, (ValaCCodeExpression*) _tmp74_);
	_vala_ccode_node_unref0 (_tmp74_);
	_tmp75_ = ccall;
	_tmp76_ = vala_ccode_identifier_new ("flags");
	_tmp77_ = _tmp76_;
	vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp77_);
	_vala_ccode_node_unref0 (_tmp77_);
	_tmp78_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp79_ = _tmp78_;
	_tmp80_ = vala_ccode_identifier_new ("spec");
	_tmp81_ = _tmp80_;
	_tmp82_ = ccall;
	vala_ccode_function_add_assignment (_tmp79_, (ValaCCodeExpression*) _tmp81_, (ValaCCodeExpression*) _tmp82_);
	_vala_ccode_node_unref0 (_tmp81_);
	_tmp83_ = vala_ccode_identifier_new ("G_PARAM_SPEC");
	_tmp84_ = _tmp83_;
	_tmp85_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp84_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp85_;
	_vala_ccode_node_unref0 (_tmp84_);
	_tmp86_ = ccall;
	_tmp87_ = vala_ccode_identifier_new ("spec");
	_tmp88_ = _tmp87_;
	vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp88_);
	_vala_ccode_node_unref0 (_tmp88_);
	_tmp89_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp90_ = _tmp89_;
	_tmp91_ = ccall;
	_tmp92_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp91_, "value_type");
	_tmp93_ = _tmp92_;
	_tmp94_ = vala_ccode_identifier_new ("object_type");
	_tmp95_ = _tmp94_;
	vala_ccode_function_add_assignment (_tmp90_, (ValaCCodeExpression*) _tmp93_, (ValaCCodeExpression*) _tmp95_);
	_vala_ccode_node_unref0 (_tmp95_);
	_vala_ccode_node_unref0 (_tmp93_);
	_tmp96_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp97_ = _tmp96_;
	_tmp98_ = ccall;
	vala_ccode_function_add_return (_tmp97_, (ValaCCodeExpression*) _tmp98_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp99_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp100_ = function;
	vala_ccode_file_add_function (_tmp99_, _tmp100_);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (subccall);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_g_value_set_function (ValaGTypeModule* self,
                                            ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeParameter* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeMemberAccess* vpointer = NULL;
	ValaCCodeIdentifier* _tmp17_;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeMemberAccess* _tmp19_;
	ValaCCodeMemberAccess* _tmp20_;
	ValaCCodeMemberAccess* _tmp21_;
	ValaCCodeMemberAccess* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	ValaCCodeVariableDeclarator* _tmp30_;
	ValaCCodeVariableDeclarator* _tmp31_;
	ValaCCodeFunctionCall* ccall_typecheck = NULL;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeFunctionCall* _tmp34_;
	ValaCCodeFunctionCall* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeIdentifier* _tmp37_;
	ValaCCodeIdentifier* _tmp38_;
	ValaCCodeFunctionCall* _tmp39_;
	gchar* _tmp40_;
	gchar* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeFunctionCall* _tmp46_;
	ValaCCodeFunctionCall* _tmp47_;
	ValaCCodeFunctionCall* _tmp48_;
	ValaCCodeFunctionCall* _tmp49_;
	ValaCCodeFunction* _tmp50_;
	ValaCCodeFunction* _tmp51_;
	ValaCCodeFunctionCall* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeFunction* _tmp54_;
	ValaCCodeConstant* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeFunction* _tmp57_;
	ValaCCodeFunction* _tmp58_;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeIdentifier* _tmp60_;
	ValaCCodeIdentifier* _tmp61_;
	ValaCCodeIdentifier* _tmp62_;
	ValaCCodeFunctionCall* _tmp63_;
	ValaCCodeFunctionCall* _tmp64_;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeIdentifier* _tmp66_;
	ValaCCodeFunctionCall* _tmp67_;
	gchar* _tmp68_;
	gchar* _tmp69_;
	ValaCCodeIdentifier* _tmp70_;
	ValaCCodeIdentifier* _tmp71_;
	ValaCCodeIdentifier* _tmp72_;
	ValaCCodeIdentifier* _tmp73_;
	ValaCCodeFunctionCall* _tmp74_;
	ValaCCodeFunctionCall* _tmp75_;
	ValaCCodeFunctionCall* _tmp76_;
	ValaCCodeFunction* _tmp77_;
	ValaCCodeFunction* _tmp78_;
	ValaCCodeFunctionCall* _tmp79_;
	ValaCCodeFunctionCall* ccall_typefrominstance = NULL;
	ValaCCodeIdentifier* _tmp80_;
	ValaCCodeIdentifier* _tmp81_;
	ValaCCodeFunctionCall* _tmp82_;
	ValaCCodeFunctionCall* _tmp83_;
	ValaCCodeIdentifier* _tmp84_;
	ValaCCodeIdentifier* _tmp85_;
	ValaCCodeFunctionCall* ccall_gvaluetype = NULL;
	ValaCCodeIdentifier* _tmp86_;
	ValaCCodeIdentifier* _tmp87_;
	ValaCCodeFunctionCall* _tmp88_;
	ValaCCodeFunctionCall* _tmp89_;
	ValaCCodeIdentifier* _tmp90_;
	ValaCCodeIdentifier* _tmp91_;
	ValaCCodeFunctionCall* ccall_typecompatible = NULL;
	ValaCCodeIdentifier* _tmp92_;
	ValaCCodeIdentifier* _tmp93_;
	ValaCCodeFunctionCall* _tmp94_;
	ValaCCodeFunctionCall* _tmp95_;
	ValaCCodeIdentifier* _tmp96_;
	ValaCCodeIdentifier* _tmp97_;
	ValaCCodeFunctionCall* _tmp98_;
	ValaCCodeFunctionCall* _tmp99_;
	ValaCCodeFunction* _tmp100_;
	ValaCCodeFunction* _tmp101_;
	ValaCCodeFunctionCall* _tmp102_;
	ValaCCodeFunction* _tmp103_;
	ValaCCodeFunction* _tmp104_;
	ValaCCodeConstant* _tmp105_;
	ValaCCodeConstant* _tmp106_;
	gchar* _tmp107_;
	gchar* _tmp108_;
	ValaCCodeIdentifier* _tmp109_;
	ValaCCodeIdentifier* _tmp110_;
	ValaCCodeFunctionCall* _tmp111_;
	ValaCCodeFunctionCall* _tmp112_;
	ValaCCodeFunction* _tmp113_;
	ValaCCodeFunction* _tmp114_;
	ValaCCodeFunctionCall* _tmp115_;
	ValaCCodeFunction* _tmp116_;
	ValaCCodeFunction* _tmp117_;
	ValaCCodeFunction* _tmp118_;
	ValaCCodeFunction* _tmp119_;
	ValaCCodeConstant* _tmp120_;
	ValaCCodeConstant* _tmp121_;
	ValaCCodeFunction* _tmp122_;
	ValaCCodeFunction* _tmp123_;
	ValaCCodeFunction* _tmp124_;
	ValaCCodeFunction* _tmp125_;
	ValaCCodeIdentifier* _tmp126_;
	ValaCCodeIdentifier* _tmp127_;
	gchar* _tmp128_;
	gchar* _tmp129_;
	ValaCCodeIdentifier* _tmp130_;
	ValaCCodeIdentifier* _tmp131_;
	ValaCCodeFunctionCall* _tmp132_;
	ValaCCodeFunctionCall* _tmp133_;
	ValaCCodeIdentifier* _tmp134_;
	ValaCCodeIdentifier* _tmp135_;
	ValaCCodeFunction* _tmp136_;
	ValaCCodeFunction* _tmp137_;
	ValaCCodeFunctionCall* _tmp138_;
	ValaCCodeFunction* _tmp139_;
	ValaCCodeFunction* _tmp140_;
	ValaCCodeFile* _tmp141_;
	ValaCCodeFunction* _tmp142_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_set_value_function ((ValaCodeNode*) cl);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_new (_tmp1_, "void");
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	function = _tmp3_;
	_tmp4_ = function;
	_tmp5_ = vala_ccode_parameter_new ("value", "GValue*");
	_tmp6_ = _tmp5_;
	vala_ccode_function_add_parameter (_tmp4_, _tmp6_);
	_vala_ccode_node_unref0 (_tmp6_);
	_tmp7_ = function;
	_tmp8_ = vala_ccode_parameter_new ("v_object", "gpointer");
	_tmp9_ = _tmp8_;
	vala_ccode_function_add_parameter (_tmp7_, _tmp9_);
	_vala_ccode_node_unref0 (_tmp9_);
	if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
		ValaCCodeFunction* _tmp10_;
		_tmp10_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp10_, VALA_CCODE_MODIFIERS_STATIC);
	} else {
		gboolean _tmp11_ = FALSE;
		ValaCodeContext* _tmp12_;
		ValaCodeContext* _tmp13_;
		gboolean _tmp14_;
		gboolean _tmp15_;
		_tmp12_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_code_context_get_hide_internal (_tmp13_);
		_tmp15_ = _tmp14_;
		if (_tmp15_) {
			_tmp11_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
		} else {
			_tmp11_ = FALSE;
		}
		if (_tmp11_) {
			ValaCCodeFunction* _tmp16_;
			_tmp16_ = function;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp16_, VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp17_ = vala_ccode_identifier_new ("value");
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp18_, "data[0]");
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp20_, "v_pointer", FALSE);
	_tmp22_ = _tmp21_;
	_vala_ccode_node_unref0 (_tmp20_);
	_vala_ccode_node_unref0 (_tmp18_);
	vpointer = _tmp22_;
	_tmp23_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp23_);
	_tmp24_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp27_ = _tmp26_;
	_tmp28_ = g_strdup_printf ("%s *", _tmp27_);
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_ccode_variable_declarator_new ("old", NULL, NULL);
	_tmp31_ = _tmp30_;
	vala_ccode_function_add_declaration (_tmp25_, _tmp29_, (ValaCCodeDeclarator*) _tmp31_, 0);
	_vala_ccode_node_unref0 (_tmp31_);
	_g_free0 (_tmp29_);
	_g_free0 (_tmp27_);
	_tmp32_ = vala_ccode_identifier_new ("G_TYPE_CHECK_VALUE_TYPE");
	_tmp33_ = _tmp32_;
	_tmp34_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp33_);
	_tmp35_ = _tmp34_;
	_vala_ccode_node_unref0 (_tmp33_);
	ccall_typecheck = _tmp35_;
	_tmp36_ = ccall_typecheck;
	_tmp37_ = vala_ccode_identifier_new ("value");
	_tmp38_ = _tmp37_;
	vala_ccode_function_call_add_argument (_tmp36_, (ValaCCodeExpression*) _tmp38_);
	_vala_ccode_node_unref0 (_tmp38_);
	_tmp39_ = ccall_typecheck;
	_tmp40_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
	_tmp41_ = _tmp40_;
	_tmp42_ = vala_ccode_identifier_new (_tmp41_);
	_tmp43_ = _tmp42_;
	vala_ccode_function_call_add_argument (_tmp39_, (ValaCCodeExpression*) _tmp43_);
	_vala_ccode_node_unref0 (_tmp43_);
	_g_free0 (_tmp41_);
	_tmp44_ = vala_ccode_identifier_new ("g_return_if_fail");
	_tmp45_ = _tmp44_;
	_tmp46_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp45_);
	_tmp47_ = _tmp46_;
	_vala_ccode_node_unref0 (_tmp45_);
	ccall = _tmp47_;
	_tmp48_ = ccall;
	_tmp49_ = ccall_typecheck;
	vala_ccode_function_call_add_argument (_tmp48_, (ValaCCodeExpression*) _tmp49_);
	_tmp50_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp51_ = _tmp50_;
	_tmp52_ = ccall;
	vala_ccode_function_add_expression (_tmp51_, (ValaCCodeExpression*) _tmp52_);
	_tmp53_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_constant_new ("old");
	_tmp56_ = _tmp55_;
	vala_ccode_function_add_assignment (_tmp54_, (ValaCCodeExpression*) _tmp56_, (ValaCCodeExpression*) vpointer);
	_vala_ccode_node_unref0 (_tmp56_);
	_tmp57_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp58_ = _tmp57_;
	_tmp59_ = vala_ccode_identifier_new ("v_object");
	_tmp60_ = _tmp59_;
	vala_ccode_function_open_if (_tmp58_, (ValaCCodeExpression*) _tmp60_);
	_vala_ccode_node_unref0 (_tmp60_);
	_tmp61_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_TYPE");
	_tmp62_ = _tmp61_;
	_tmp63_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp62_);
	_vala_ccode_node_unref0 (ccall_typecheck);
	ccall_typecheck = _tmp63_;
	_vala_ccode_node_unref0 (_tmp62_);
	_tmp64_ = ccall_typecheck;
	_tmp65_ = vala_ccode_identifier_new ("v_object");
	_tmp66_ = _tmp65_;
	vala_ccode_function_call_add_argument (_tmp64_, (ValaCCodeExpression*) _tmp66_);
	_vala_ccode_node_unref0 (_tmp66_);
	_tmp67_ = ccall_typecheck;
	_tmp68_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
	_tmp69_ = _tmp68_;
	_tmp70_ = vala_ccode_identifier_new (_tmp69_);
	_tmp71_ = _tmp70_;
	vala_ccode_function_call_add_argument (_tmp67_, (ValaCCodeExpression*) _tmp71_);
	_vala_ccode_node_unref0 (_tmp71_);
	_g_free0 (_tmp69_);
	_tmp72_ = vala_ccode_identifier_new ("g_return_if_fail");
	_tmp73_ = _tmp72_;
	_tmp74_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp73_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp74_;
	_vala_ccode_node_unref0 (_tmp73_);
	_tmp75_ = ccall;
	_tmp76_ = ccall_typecheck;
	vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp76_);
	_tmp77_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp78_ = _tmp77_;
	_tmp79_ = ccall;
	vala_ccode_function_add_expression (_tmp78_, (ValaCCodeExpression*) _tmp79_);
	_tmp80_ = vala_ccode_identifier_new ("G_TYPE_FROM_INSTANCE");
	_tmp81_ = _tmp80_;
	_tmp82_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp81_);
	_tmp83_ = _tmp82_;
	_vala_ccode_node_unref0 (_tmp81_);
	ccall_typefrominstance = _tmp83_;
	_tmp84_ = vala_ccode_identifier_new ("v_object");
	_tmp85_ = _tmp84_;
	vala_ccode_function_call_add_argument (ccall_typefrominstance, (ValaCCodeExpression*) _tmp85_);
	_vala_ccode_node_unref0 (_tmp85_);
	_tmp86_ = vala_ccode_identifier_new ("G_VALUE_TYPE");
	_tmp87_ = _tmp86_;
	_tmp88_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp87_);
	_tmp89_ = _tmp88_;
	_vala_ccode_node_unref0 (_tmp87_);
	ccall_gvaluetype = _tmp89_;
	_tmp90_ = vala_ccode_identifier_new ("value");
	_tmp91_ = _tmp90_;
	vala_ccode_function_call_add_argument (ccall_gvaluetype, (ValaCCodeExpression*) _tmp91_);
	_vala_ccode_node_unref0 (_tmp91_);
	_tmp92_ = vala_ccode_identifier_new ("g_value_type_compatible");
	_tmp93_ = _tmp92_;
	_tmp94_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp93_);
	_tmp95_ = _tmp94_;
	_vala_ccode_node_unref0 (_tmp93_);
	ccall_typecompatible = _tmp95_;
	vala_ccode_function_call_add_argument (ccall_typecompatible, (ValaCCodeExpression*) ccall_typefrominstance);
	vala_ccode_function_call_add_argument (ccall_typecompatible, (ValaCCodeExpression*) ccall_gvaluetype);
	_tmp96_ = vala_ccode_identifier_new ("g_return_if_fail");
	_tmp97_ = _tmp96_;
	_tmp98_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp97_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp98_;
	_vala_ccode_node_unref0 (_tmp97_);
	_tmp99_ = ccall;
	vala_ccode_function_call_add_argument (_tmp99_, (ValaCCodeExpression*) ccall_typecompatible);
	_tmp100_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp101_ = _tmp100_;
	_tmp102_ = ccall;
	vala_ccode_function_add_expression (_tmp101_, (ValaCCodeExpression*) _tmp102_);
	_tmp103_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp104_ = _tmp103_;
	_tmp105_ = vala_ccode_constant_new ("v_object");
	_tmp106_ = _tmp105_;
	vala_ccode_function_add_assignment (_tmp104_, (ValaCCodeExpression*) vpointer, (ValaCCodeExpression*) _tmp106_);
	_vala_ccode_node_unref0 (_tmp106_);
	_tmp107_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
	_tmp108_ = _tmp107_;
	_tmp109_ = vala_ccode_identifier_new (_tmp108_);
	_tmp110_ = _tmp109_;
	_tmp111_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp110_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp111_;
	_vala_ccode_node_unref0 (_tmp110_);
	_g_free0 (_tmp108_);
	_tmp112_ = ccall;
	vala_ccode_function_call_add_argument (_tmp112_, (ValaCCodeExpression*) vpointer);
	_tmp113_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp114_ = _tmp113_;
	_tmp115_ = ccall;
	vala_ccode_function_add_expression (_tmp114_, (ValaCCodeExpression*) _tmp115_);
	_tmp116_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp117_ = _tmp116_;
	vala_ccode_function_add_else (_tmp117_);
	_tmp118_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp119_ = _tmp118_;
	_tmp120_ = vala_ccode_constant_new ("NULL");
	_tmp121_ = _tmp120_;
	vala_ccode_function_add_assignment (_tmp119_, (ValaCCodeExpression*) vpointer, (ValaCCodeExpression*) _tmp121_);
	_vala_ccode_node_unref0 (_tmp121_);
	_tmp122_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp123_ = _tmp122_;
	vala_ccode_function_close (_tmp123_);
	_tmp124_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp125_ = _tmp124_;
	_tmp126_ = vala_ccode_identifier_new ("old");
	_tmp127_ = _tmp126_;
	vala_ccode_function_open_if (_tmp125_, (ValaCCodeExpression*) _tmp127_);
	_vala_ccode_node_unref0 (_tmp127_);
	_tmp128_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
	_tmp129_ = _tmp128_;
	_tmp130_ = vala_ccode_identifier_new (_tmp129_);
	_tmp131_ = _tmp130_;
	_tmp132_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp131_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp132_;
	_vala_ccode_node_unref0 (_tmp131_);
	_g_free0 (_tmp129_);
	_tmp133_ = ccall;
	_tmp134_ = vala_ccode_identifier_new ("old");
	_tmp135_ = _tmp134_;
	vala_ccode_function_call_add_argument (_tmp133_, (ValaCCodeExpression*) _tmp135_);
	_vala_ccode_node_unref0 (_tmp135_);
	_tmp136_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp137_ = _tmp136_;
	_tmp138_ = ccall;
	vala_ccode_function_add_expression (_tmp137_, (ValaCCodeExpression*) _tmp138_);
	_tmp139_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp140_ = _tmp139_;
	vala_ccode_function_close (_tmp140_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp141_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp142_ = function;
	vala_ccode_file_add_function (_tmp141_, _tmp142_);
	_vala_ccode_node_unref0 (ccall_typecompatible);
	_vala_ccode_node_unref0 (ccall_gvaluetype);
	_vala_ccode_node_unref0 (ccall_typefrominstance);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (ccall_typecheck);
	_vala_ccode_node_unref0 (vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_g_value_take_function (ValaGTypeModule* self,
                                             ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeParameter* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeMemberAccess* vpointer = NULL;
	ValaCCodeIdentifier* _tmp17_;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeMemberAccess* _tmp19_;
	ValaCCodeMemberAccess* _tmp20_;
	ValaCCodeMemberAccess* _tmp21_;
	ValaCCodeMemberAccess* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	ValaCCodeVariableDeclarator* _tmp30_;
	ValaCCodeVariableDeclarator* _tmp31_;
	ValaCCodeFunctionCall* ccall_typecheck = NULL;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeFunctionCall* _tmp34_;
	ValaCCodeFunctionCall* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeIdentifier* _tmp37_;
	ValaCCodeIdentifier* _tmp38_;
	ValaCCodeFunctionCall* _tmp39_;
	gchar* _tmp40_;
	gchar* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeFunctionCall* _tmp46_;
	ValaCCodeFunctionCall* _tmp47_;
	ValaCCodeFunctionCall* _tmp48_;
	ValaCCodeFunctionCall* _tmp49_;
	ValaCCodeFunction* _tmp50_;
	ValaCCodeFunction* _tmp51_;
	ValaCCodeFunctionCall* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeFunction* _tmp54_;
	ValaCCodeConstant* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeFunction* _tmp57_;
	ValaCCodeFunction* _tmp58_;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeIdentifier* _tmp60_;
	ValaCCodeIdentifier* _tmp61_;
	ValaCCodeIdentifier* _tmp62_;
	ValaCCodeFunctionCall* _tmp63_;
	ValaCCodeFunctionCall* _tmp64_;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeIdentifier* _tmp66_;
	ValaCCodeFunctionCall* _tmp67_;
	gchar* _tmp68_;
	gchar* _tmp69_;
	ValaCCodeIdentifier* _tmp70_;
	ValaCCodeIdentifier* _tmp71_;
	ValaCCodeIdentifier* _tmp72_;
	ValaCCodeIdentifier* _tmp73_;
	ValaCCodeFunctionCall* _tmp74_;
	ValaCCodeFunctionCall* _tmp75_;
	ValaCCodeFunctionCall* _tmp76_;
	ValaCCodeFunction* _tmp77_;
	ValaCCodeFunction* _tmp78_;
	ValaCCodeFunctionCall* _tmp79_;
	ValaCCodeFunctionCall* ccall_typefrominstance = NULL;
	ValaCCodeIdentifier* _tmp80_;
	ValaCCodeIdentifier* _tmp81_;
	ValaCCodeFunctionCall* _tmp82_;
	ValaCCodeFunctionCall* _tmp83_;
	ValaCCodeIdentifier* _tmp84_;
	ValaCCodeIdentifier* _tmp85_;
	ValaCCodeFunctionCall* ccall_gvaluetype = NULL;
	ValaCCodeIdentifier* _tmp86_;
	ValaCCodeIdentifier* _tmp87_;
	ValaCCodeFunctionCall* _tmp88_;
	ValaCCodeFunctionCall* _tmp89_;
	ValaCCodeIdentifier* _tmp90_;
	ValaCCodeIdentifier* _tmp91_;
	ValaCCodeFunctionCall* ccall_typecompatible = NULL;
	ValaCCodeIdentifier* _tmp92_;
	ValaCCodeIdentifier* _tmp93_;
	ValaCCodeFunctionCall* _tmp94_;
	ValaCCodeFunctionCall* _tmp95_;
	ValaCCodeIdentifier* _tmp96_;
	ValaCCodeIdentifier* _tmp97_;
	ValaCCodeFunctionCall* _tmp98_;
	ValaCCodeFunctionCall* _tmp99_;
	ValaCCodeFunction* _tmp100_;
	ValaCCodeFunction* _tmp101_;
	ValaCCodeFunctionCall* _tmp102_;
	ValaCCodeFunction* _tmp103_;
	ValaCCodeFunction* _tmp104_;
	ValaCCodeConstant* _tmp105_;
	ValaCCodeConstant* _tmp106_;
	ValaCCodeFunction* _tmp107_;
	ValaCCodeFunction* _tmp108_;
	ValaCCodeFunction* _tmp109_;
	ValaCCodeFunction* _tmp110_;
	ValaCCodeConstant* _tmp111_;
	ValaCCodeConstant* _tmp112_;
	ValaCCodeFunction* _tmp113_;
	ValaCCodeFunction* _tmp114_;
	ValaCCodeFunction* _tmp115_;
	ValaCCodeFunction* _tmp116_;
	ValaCCodeIdentifier* _tmp117_;
	ValaCCodeIdentifier* _tmp118_;
	gchar* _tmp119_;
	gchar* _tmp120_;
	ValaCCodeIdentifier* _tmp121_;
	ValaCCodeIdentifier* _tmp122_;
	ValaCCodeFunctionCall* _tmp123_;
	ValaCCodeFunctionCall* _tmp124_;
	ValaCCodeIdentifier* _tmp125_;
	ValaCCodeIdentifier* _tmp126_;
	ValaCCodeFunction* _tmp127_;
	ValaCCodeFunction* _tmp128_;
	ValaCCodeFunctionCall* _tmp129_;
	ValaCCodeFunction* _tmp130_;
	ValaCCodeFunction* _tmp131_;
	ValaCCodeFile* _tmp132_;
	ValaCCodeFunction* _tmp133_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_take_value_function ((ValaCodeNode*) cl);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_new (_tmp1_, "void");
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	function = _tmp3_;
	_tmp4_ = function;
	_tmp5_ = vala_ccode_parameter_new ("value", "GValue*");
	_tmp6_ = _tmp5_;
	vala_ccode_function_add_parameter (_tmp4_, _tmp6_);
	_vala_ccode_node_unref0 (_tmp6_);
	_tmp7_ = function;
	_tmp8_ = vala_ccode_parameter_new ("v_object", "gpointer");
	_tmp9_ = _tmp8_;
	vala_ccode_function_add_parameter (_tmp7_, _tmp9_);
	_vala_ccode_node_unref0 (_tmp9_);
	if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
		ValaCCodeFunction* _tmp10_;
		_tmp10_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp10_, VALA_CCODE_MODIFIERS_STATIC);
	} else {
		gboolean _tmp11_ = FALSE;
		ValaCodeContext* _tmp12_;
		ValaCodeContext* _tmp13_;
		gboolean _tmp14_;
		gboolean _tmp15_;
		_tmp12_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_code_context_get_hide_internal (_tmp13_);
		_tmp15_ = _tmp14_;
		if (_tmp15_) {
			_tmp11_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
		} else {
			_tmp11_ = FALSE;
		}
		if (_tmp11_) {
			ValaCCodeFunction* _tmp16_;
			_tmp16_ = function;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp16_, VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp17_ = vala_ccode_identifier_new ("value");
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp18_, "data[0]");
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp20_, "v_pointer", FALSE);
	_tmp22_ = _tmp21_;
	_vala_ccode_node_unref0 (_tmp20_);
	_vala_ccode_node_unref0 (_tmp18_);
	vpointer = _tmp22_;
	_tmp23_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp23_);
	_tmp24_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp27_ = _tmp26_;
	_tmp28_ = g_strdup_printf ("%s *", _tmp27_);
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_ccode_variable_declarator_new ("old", NULL, NULL);
	_tmp31_ = _tmp30_;
	vala_ccode_function_add_declaration (_tmp25_, _tmp29_, (ValaCCodeDeclarator*) _tmp31_, 0);
	_vala_ccode_node_unref0 (_tmp31_);
	_g_free0 (_tmp29_);
	_g_free0 (_tmp27_);
	_tmp32_ = vala_ccode_identifier_new ("G_TYPE_CHECK_VALUE_TYPE");
	_tmp33_ = _tmp32_;
	_tmp34_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp33_);
	_tmp35_ = _tmp34_;
	_vala_ccode_node_unref0 (_tmp33_);
	ccall_typecheck = _tmp35_;
	_tmp36_ = ccall_typecheck;
	_tmp37_ = vala_ccode_identifier_new ("value");
	_tmp38_ = _tmp37_;
	vala_ccode_function_call_add_argument (_tmp36_, (ValaCCodeExpression*) _tmp38_);
	_vala_ccode_node_unref0 (_tmp38_);
	_tmp39_ = ccall_typecheck;
	_tmp40_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
	_tmp41_ = _tmp40_;
	_tmp42_ = vala_ccode_identifier_new (_tmp41_);
	_tmp43_ = _tmp42_;
	vala_ccode_function_call_add_argument (_tmp39_, (ValaCCodeExpression*) _tmp43_);
	_vala_ccode_node_unref0 (_tmp43_);
	_g_free0 (_tmp41_);
	_tmp44_ = vala_ccode_identifier_new ("g_return_if_fail");
	_tmp45_ = _tmp44_;
	_tmp46_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp45_);
	_tmp47_ = _tmp46_;
	_vala_ccode_node_unref0 (_tmp45_);
	ccall = _tmp47_;
	_tmp48_ = ccall;
	_tmp49_ = ccall_typecheck;
	vala_ccode_function_call_add_argument (_tmp48_, (ValaCCodeExpression*) _tmp49_);
	_tmp50_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp51_ = _tmp50_;
	_tmp52_ = ccall;
	vala_ccode_function_add_expression (_tmp51_, (ValaCCodeExpression*) _tmp52_);
	_tmp53_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_constant_new ("old");
	_tmp56_ = _tmp55_;
	vala_ccode_function_add_assignment (_tmp54_, (ValaCCodeExpression*) _tmp56_, (ValaCCodeExpression*) vpointer);
	_vala_ccode_node_unref0 (_tmp56_);
	_tmp57_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp58_ = _tmp57_;
	_tmp59_ = vala_ccode_identifier_new ("v_object");
	_tmp60_ = _tmp59_;
	vala_ccode_function_open_if (_tmp58_, (ValaCCodeExpression*) _tmp60_);
	_vala_ccode_node_unref0 (_tmp60_);
	_tmp61_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_TYPE");
	_tmp62_ = _tmp61_;
	_tmp63_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp62_);
	_vala_ccode_node_unref0 (ccall_typecheck);
	ccall_typecheck = _tmp63_;
	_vala_ccode_node_unref0 (_tmp62_);
	_tmp64_ = ccall_typecheck;
	_tmp65_ = vala_ccode_identifier_new ("v_object");
	_tmp66_ = _tmp65_;
	vala_ccode_function_call_add_argument (_tmp64_, (ValaCCodeExpression*) _tmp66_);
	_vala_ccode_node_unref0 (_tmp66_);
	_tmp67_ = ccall_typecheck;
	_tmp68_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
	_tmp69_ = _tmp68_;
	_tmp70_ = vala_ccode_identifier_new (_tmp69_);
	_tmp71_ = _tmp70_;
	vala_ccode_function_call_add_argument (_tmp67_, (ValaCCodeExpression*) _tmp71_);
	_vala_ccode_node_unref0 (_tmp71_);
	_g_free0 (_tmp69_);
	_tmp72_ = vala_ccode_identifier_new ("g_return_if_fail");
	_tmp73_ = _tmp72_;
	_tmp74_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp73_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp74_;
	_vala_ccode_node_unref0 (_tmp73_);
	_tmp75_ = ccall;
	_tmp76_ = ccall_typecheck;
	vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp76_);
	_tmp77_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp78_ = _tmp77_;
	_tmp79_ = ccall;
	vala_ccode_function_add_expression (_tmp78_, (ValaCCodeExpression*) _tmp79_);
	_tmp80_ = vala_ccode_identifier_new ("G_TYPE_FROM_INSTANCE");
	_tmp81_ = _tmp80_;
	_tmp82_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp81_);
	_tmp83_ = _tmp82_;
	_vala_ccode_node_unref0 (_tmp81_);
	ccall_typefrominstance = _tmp83_;
	_tmp84_ = vala_ccode_identifier_new ("v_object");
	_tmp85_ = _tmp84_;
	vala_ccode_function_call_add_argument (ccall_typefrominstance, (ValaCCodeExpression*) _tmp85_);
	_vala_ccode_node_unref0 (_tmp85_);
	_tmp86_ = vala_ccode_identifier_new ("G_VALUE_TYPE");
	_tmp87_ = _tmp86_;
	_tmp88_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp87_);
	_tmp89_ = _tmp88_;
	_vala_ccode_node_unref0 (_tmp87_);
	ccall_gvaluetype = _tmp89_;
	_tmp90_ = vala_ccode_identifier_new ("value");
	_tmp91_ = _tmp90_;
	vala_ccode_function_call_add_argument (ccall_gvaluetype, (ValaCCodeExpression*) _tmp91_);
	_vala_ccode_node_unref0 (_tmp91_);
	_tmp92_ = vala_ccode_identifier_new ("g_value_type_compatible");
	_tmp93_ = _tmp92_;
	_tmp94_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp93_);
	_tmp95_ = _tmp94_;
	_vala_ccode_node_unref0 (_tmp93_);
	ccall_typecompatible = _tmp95_;
	vala_ccode_function_call_add_argument (ccall_typecompatible, (ValaCCodeExpression*) ccall_typefrominstance);
	vala_ccode_function_call_add_argument (ccall_typecompatible, (ValaCCodeExpression*) ccall_gvaluetype);
	_tmp96_ = vala_ccode_identifier_new ("g_return_if_fail");
	_tmp97_ = _tmp96_;
	_tmp98_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp97_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp98_;
	_vala_ccode_node_unref0 (_tmp97_);
	_tmp99_ = ccall;
	vala_ccode_function_call_add_argument (_tmp99_, (ValaCCodeExpression*) ccall_typecompatible);
	_tmp100_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp101_ = _tmp100_;
	_tmp102_ = ccall;
	vala_ccode_function_add_expression (_tmp101_, (ValaCCodeExpression*) _tmp102_);
	_tmp103_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp104_ = _tmp103_;
	_tmp105_ = vala_ccode_constant_new ("v_object");
	_tmp106_ = _tmp105_;
	vala_ccode_function_add_assignment (_tmp104_, (ValaCCodeExpression*) vpointer, (ValaCCodeExpression*) _tmp106_);
	_vala_ccode_node_unref0 (_tmp106_);
	_tmp107_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp108_ = _tmp107_;
	vala_ccode_function_add_else (_tmp108_);
	_tmp109_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp110_ = _tmp109_;
	_tmp111_ = vala_ccode_constant_new ("NULL");
	_tmp112_ = _tmp111_;
	vala_ccode_function_add_assignment (_tmp110_, (ValaCCodeExpression*) vpointer, (ValaCCodeExpression*) _tmp112_);
	_vala_ccode_node_unref0 (_tmp112_);
	_tmp113_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp114_ = _tmp113_;
	vala_ccode_function_close (_tmp114_);
	_tmp115_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp116_ = _tmp115_;
	_tmp117_ = vala_ccode_identifier_new ("old");
	_tmp118_ = _tmp117_;
	vala_ccode_function_open_if (_tmp116_, (ValaCCodeExpression*) _tmp118_);
	_vala_ccode_node_unref0 (_tmp118_);
	_tmp119_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
	_tmp120_ = _tmp119_;
	_tmp121_ = vala_ccode_identifier_new (_tmp120_);
	_tmp122_ = _tmp121_;
	_tmp123_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp122_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp123_;
	_vala_ccode_node_unref0 (_tmp122_);
	_g_free0 (_tmp120_);
	_tmp124_ = ccall;
	_tmp125_ = vala_ccode_identifier_new ("old");
	_tmp126_ = _tmp125_;
	vala_ccode_function_call_add_argument (_tmp124_, (ValaCCodeExpression*) _tmp126_);
	_vala_ccode_node_unref0 (_tmp126_);
	_tmp127_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp128_ = _tmp127_;
	_tmp129_ = ccall;
	vala_ccode_function_add_expression (_tmp128_, (ValaCCodeExpression*) _tmp129_);
	_tmp130_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp131_ = _tmp130_;
	vala_ccode_function_close (_tmp131_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp132_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp133_ = function;
	vala_ccode_file_add_function (_tmp132_, _tmp133_);
	_vala_ccode_node_unref0 (ccall_typecompatible);
	_vala_ccode_node_unref0 (ccall_gvaluetype);
	_vala_ccode_node_unref0 (ccall_typefrominstance);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (ccall_typecheck);
	_vala_ccode_node_unref0 (vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_g_value_get_function (ValaGTypeModule* self,
                                            ValaClass* cl)
{
	ValaCCodeFunction* function = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeParameter* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeMemberAccess* vpointer = NULL;
	ValaCCodeIdentifier* _tmp14_;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeMemberAccess* _tmp16_;
	ValaCCodeMemberAccess* _tmp17_;
	ValaCCodeMemberAccess* _tmp18_;
	ValaCCodeMemberAccess* _tmp19_;
	ValaCCodeFunction* _tmp20_;
	ValaCCodeFunctionCall* ccall_typecheck = NULL;
	ValaCCodeIdentifier* _tmp21_;
	ValaCCodeIdentifier* _tmp22_;
	ValaCCodeFunctionCall* _tmp23_;
	ValaCCodeFunctionCall* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeIdentifier* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp31_;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeFunctionCall* _tmp33_;
	ValaCCodeFunctionCall* _tmp34_;
	ValaCCodeConstant* _tmp35_;
	ValaCCodeConstant* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	ValaCCodeFunction* _tmp40_;
	ValaCCodeFile* _tmp41_;
	ValaCCodeFunction* _tmp42_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_get_ccode_get_value_function ((ValaCodeNode*) cl);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_new (_tmp1_, "gpointer");
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	function = _tmp3_;
	_tmp4_ = function;
	_tmp5_ = vala_ccode_parameter_new ("value", "const GValue*");
	_tmp6_ = _tmp5_;
	vala_ccode_function_add_parameter (_tmp4_, _tmp6_);
	_vala_ccode_node_unref0 (_tmp6_);
	if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
		ValaCCodeFunction* _tmp7_;
		_tmp7_ = function;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp7_, VALA_CCODE_MODIFIERS_STATIC);
	} else {
		gboolean _tmp8_ = FALSE;
		ValaCodeContext* _tmp9_;
		ValaCodeContext* _tmp10_;
		gboolean _tmp11_;
		gboolean _tmp12_;
		_tmp9_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_code_context_get_hide_internal (_tmp10_);
		_tmp12_ = _tmp11_;
		if (_tmp12_) {
			_tmp8_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
		} else {
			_tmp8_ = FALSE;
		}
		if (_tmp8_) {
			ValaCCodeFunction* _tmp13_;
			_tmp13_ = function;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp13_, VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp14_ = vala_ccode_identifier_new ("value");
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp15_, "data[0]");
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp17_, "v_pointer", FALSE);
	_tmp19_ = _tmp18_;
	_vala_ccode_node_unref0 (_tmp17_);
	_vala_ccode_node_unref0 (_tmp15_);
	vpointer = _tmp19_;
	_tmp20_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp20_);
	_tmp21_ = vala_ccode_identifier_new ("G_TYPE_CHECK_VALUE_TYPE");
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp22_);
	_tmp24_ = _tmp23_;
	_vala_ccode_node_unref0 (_tmp22_);
	ccall_typecheck = _tmp24_;
	_tmp25_ = vala_ccode_identifier_new ("value");
	_tmp26_ = _tmp25_;
	vala_ccode_function_call_add_argument (ccall_typecheck, (ValaCCodeExpression*) _tmp26_);
	_vala_ccode_node_unref0 (_tmp26_);
	_tmp27_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_identifier_new (_tmp28_);
	_tmp30_ = _tmp29_;
	vala_ccode_function_call_add_argument (ccall_typecheck, (ValaCCodeExpression*) _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_g_free0 (_tmp28_);
	_tmp31_ = vala_ccode_identifier_new ("g_return_val_if_fail");
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp32_);
	_tmp34_ = _tmp33_;
	_vala_ccode_node_unref0 (_tmp32_);
	ccall = _tmp34_;
	vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) ccall_typecheck);
	_tmp35_ = vala_ccode_constant_new ("NULL");
	_tmp36_ = _tmp35_;
	vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp36_);
	_vala_ccode_node_unref0 (_tmp36_);
	_tmp37_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp38_ = _tmp37_;
	vala_ccode_function_add_expression (_tmp38_, (ValaCCodeExpression*) ccall);
	_tmp39_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp40_ = _tmp39_;
	vala_ccode_function_add_return (_tmp40_, (ValaCCodeExpression*) vpointer);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp41_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp42_ = function;
	vala_ccode_file_add_function (_tmp41_, _tmp42_);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (ccall_typecheck);
	_vala_ccode_node_unref0 (vpointer);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_begin_base_init_function (ValaGTypeModule* self,
                                            ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFunction* base_init = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->base_init_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_base_init", _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "void");
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	base_init = _tmp6_;
	_tmp7_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
	_tmp8_ = _tmp7_;
	_tmp9_ = g_strdup_printf ("%s *", _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_parameter_new ("klass", _tmp10_);
	_tmp12_ = _tmp11_;
	vala_ccode_function_add_parameter (base_init, _tmp12_);
	_vala_ccode_node_unref0 (_tmp12_);
	_g_free0 (_tmp10_);
	_g_free0 (_tmp8_);
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) base_init, VALA_CCODE_MODIFIERS_STATIC);
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, base_init);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (base_init);
}

static void
vala_gtype_module_add_base_init_function (ValaGTypeModule* self,
                                          ValaClass* cl)
{
	ValaCCodeFile* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp1_ = ((ValaCCodeBaseModule*) self)->base_init_context;
	_tmp2_ = _tmp1_->ccode;
	vala_ccode_file_add_function (_tmp0_, _tmp2_);
}

static void
vala_gtype_module_real_generate_class_init (ValaGTypeModule* self,
                                            ValaClass* cl)
{
	g_return_if_fail (cl != NULL);
}

void
vala_gtype_module_generate_class_init (ValaGTypeModule* self,
                                       ValaClass* cl)
{
	ValaGTypeModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_GTYPE_MODULE_GET_CLASS (self);
	if (_klass_->generate_class_init) {
		_klass_->generate_class_init (self, cl);
	}
}

static void
vala_gtype_module_real_end_instance_init (ValaGTypeModule* self,
                                          ValaClass* cl)
{
	g_return_if_fail (cl != NULL);
}

void
vala_gtype_module_end_instance_init (ValaGTypeModule* self,
                                     ValaClass* cl)
{
	ValaGTypeModuleClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_GTYPE_MODULE_GET_CLASS (self);
	if (_klass_->end_instance_init) {
		_klass_->end_instance_init (self, cl);
	}
}

static void
vala_gtype_module_begin_class_init_function (ValaGTypeModule* self,
                                             ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFunction* func = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeParameter* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeDeclaration* parent_decl = NULL;
	ValaCCodeDeclaration* _tmp18_;
	ValaCCodeVariableDeclarator* parent_var_decl = NULL;
	gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	ValaCCodeVariableDeclarator* _tmp23_;
	ValaCCodeVariableDeclarator* _tmp24_;
	ValaCCodeVariableDeclarator* _tmp25_;
	ValaCCodeConstant* _tmp26_;
	ValaCCodeConstant* _tmp27_;
	ValaCCodeDeclaration* _tmp28_;
	ValaCCodeVariableDeclarator* _tmp29_;
	ValaCCodeDeclaration* _tmp30_;
	ValaCCodeFile* _tmp31_;
	ValaCCodeDeclaration* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeIdentifier* _tmp34_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeFunctionCall* _tmp37_;
	ValaCCodeIdentifier* _tmp38_;
	ValaCCodeIdentifier* _tmp39_;
	ValaCCodeAssignment* parent_assignment = NULL;
	gchar* _tmp40_;
	gchar* _tmp41_;
	gchar* _tmp42_;
	gchar* _tmp43_;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeFunctionCall* _tmp46_;
	ValaCCodeAssignment* _tmp47_;
	ValaCCodeAssignment* _tmp48_;
	ValaCCodeFunction* _tmp49_;
	ValaCCodeFunction* _tmp50_;
	ValaCCodeAssignment* _tmp51_;
	gboolean _tmp52_ = FALSE;
	gboolean _tmp53_ = FALSE;
	gboolean _tmp54_;
	gboolean _tmp55_;
	gboolean _tmp95_ = FALSE;
	gboolean _tmp96_;
	gboolean _tmp97_;
	gboolean _tmp349_;
	gboolean _tmp350_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->class_init_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_class_init", _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "void");
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	func = _tmp6_;
	_tmp7_ = func;
	_tmp8_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strdup_printf ("%s *", _tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_parameter_new ("klass", _tmp11_);
	_tmp13_ = _tmp12_;
	vala_ccode_function_add_parameter (_tmp7_, _tmp13_);
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp11_);
	_g_free0 (_tmp9_);
	_tmp14_ = func;
	_tmp15_ = vala_ccode_parameter_new ("klass_data", "gpointer");
	_tmp16_ = _tmp15_;
	vala_ccode_function_add_parameter (_tmp14_, _tmp16_);
	_vala_ccode_node_unref0 (_tmp16_);
	_tmp17_ = func;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp17_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp18_ = vala_ccode_declaration_new ("gpointer");
	parent_decl = _tmp18_;
	_tmp19_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp20_ = _tmp19_;
	_tmp21_ = g_strdup_printf ("%s_parent_class", _tmp20_);
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_ccode_variable_declarator_new (_tmp22_, NULL, NULL);
	_tmp24_ = _tmp23_;
	_g_free0 (_tmp22_);
	_g_free0 (_tmp20_);
	parent_var_decl = _tmp24_;
	_tmp25_ = parent_var_decl;
	_tmp26_ = vala_ccode_constant_new ("NULL");
	_tmp27_ = _tmp26_;
	vala_ccode_variable_declarator_set_initializer (_tmp25_, (ValaCCodeExpression*) _tmp27_);
	_vala_ccode_node_unref0 (_tmp27_);
	_tmp28_ = parent_decl;
	_tmp29_ = parent_var_decl;
	vala_ccode_declaration_add_declarator (_tmp28_, (ValaCCodeDeclarator*) _tmp29_);
	_tmp30_ = parent_decl;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp30_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp31_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp32_ = parent_decl;
	vala_ccode_file_add_type_member_declaration (_tmp31_, (ValaCCodeNode*) _tmp32_);
	_tmp33_ = func;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp33_);
	_tmp34_ = vala_ccode_identifier_new ("g_type_class_peek_parent");
	_tmp35_ = _tmp34_;
	_tmp36_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp35_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp36_;
	_vala_ccode_node_unref0 (_tmp35_);
	_tmp37_ = ccall;
	_tmp38_ = vala_ccode_identifier_new ("klass");
	_tmp39_ = _tmp38_;
	vala_ccode_function_call_add_argument (_tmp37_, (ValaCCodeExpression*) _tmp39_);
	_vala_ccode_node_unref0 (_tmp39_);
	_tmp40_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp41_ = _tmp40_;
	_tmp42_ = g_strdup_printf ("%s_parent_class", _tmp41_);
	_tmp43_ = _tmp42_;
	_tmp44_ = vala_ccode_identifier_new (_tmp43_);
	_tmp45_ = _tmp44_;
	_tmp46_ = ccall;
	_tmp47_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp45_, (ValaCCodeExpression*) _tmp46_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp48_ = _tmp47_;
	_vala_ccode_node_unref0 (_tmp45_);
	_g_free0 (_tmp43_);
	_g_free0 (_tmp41_);
	parent_assignment = _tmp48_;
	_tmp49_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp50_ = _tmp49_;
	_tmp51_ = parent_assignment;
	vala_ccode_function_add_expression (_tmp50_, (ValaCCodeExpression*) _tmp51_);
	_tmp54_ = vala_class_get_is_compact (cl);
	_tmp55_ = _tmp54_;
	if (!_tmp55_) {
		ValaTypeSymbol* _tmp56_;
		_tmp56_ = ((ValaCCodeBaseModule*) self)->gobject_type;
		_tmp53_ = !vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, _tmp56_);
	} else {
		_tmp53_ = FALSE;
	}
	if (_tmp53_) {
		gboolean _tmp57_ = FALSE;
		gboolean _tmp58_ = FALSE;
		ValaList* _tmp59_;
		gint _tmp60_;
		gint _tmp61_;
		_tmp59_ = vala_object_type_symbol_get_fields ((ValaObjectTypeSymbol*) cl);
		_tmp60_ = vala_collection_get_size ((ValaCollection*) _tmp59_);
		_tmp61_ = _tmp60_;
		if (_tmp61_ > 0) {
			_tmp58_ = TRUE;
		} else {
			ValaDestructor* _tmp62_;
			ValaDestructor* _tmp63_;
			_tmp62_ = vala_class_get_destructor (cl);
			_tmp63_ = _tmp62_;
			_tmp58_ = _tmp63_ != NULL;
		}
		if (_tmp58_) {
			_tmp57_ = TRUE;
		} else {
			_tmp57_ = vala_class_is_fundamental (cl);
		}
		_tmp52_ = _tmp57_;
	} else {
		_tmp52_ = FALSE;
	}
	if (_tmp52_) {
		ValaClass* fundamental_class = NULL;
		ValaClass* _tmp64_;
		ValaCCodeCastExpression* ccast = NULL;
		ValaCCodeIdentifier* _tmp72_;
		ValaCCodeIdentifier* _tmp73_;
		ValaClass* _tmp74_;
		gchar* _tmp75_;
		gchar* _tmp76_;
		gchar* _tmp77_;
		gchar* _tmp78_;
		ValaCCodeCastExpression* _tmp79_;
		ValaCCodeCastExpression* _tmp80_;
		ValaCCodeAssignment* finalize_assignment = NULL;
		ValaCCodeCastExpression* _tmp81_;
		ValaCCodeMemberAccess* _tmp82_;
		ValaCCodeMemberAccess* _tmp83_;
		gchar* _tmp84_;
		gchar* _tmp85_;
		gchar* _tmp86_;
		gchar* _tmp87_;
		ValaCCodeIdentifier* _tmp88_;
		ValaCCodeIdentifier* _tmp89_;
		ValaCCodeAssignment* _tmp90_;
		ValaCCodeAssignment* _tmp91_;
		ValaCCodeFunction* _tmp92_;
		ValaCCodeFunction* _tmp93_;
		ValaCCodeAssignment* _tmp94_;
		_tmp64_ = _vala_code_node_ref0 (cl);
		fundamental_class = _tmp64_;
		while (TRUE) {
			ValaClass* _tmp65_;
			ValaClass* _tmp66_;
			ValaClass* _tmp67_;
			ValaClass* _tmp68_;
			ValaClass* _tmp69_;
			ValaClass* _tmp70_;
			ValaClass* _tmp71_;
			_tmp65_ = fundamental_class;
			_tmp66_ = vala_class_get_base_class (_tmp65_);
			_tmp67_ = _tmp66_;
			if (!(_tmp67_ != NULL)) {
				break;
			}
			_tmp68_ = fundamental_class;
			_tmp69_ = vala_class_get_base_class (_tmp68_);
			_tmp70_ = _tmp69_;
			_tmp71_ = _vala_code_node_ref0 (_tmp70_);
			_vala_code_node_unref0 (fundamental_class);
			fundamental_class = _tmp71_;
		}
		_tmp72_ = vala_ccode_identifier_new ("klass");
		_tmp73_ = _tmp72_;
		_tmp74_ = fundamental_class;
		_tmp75_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) _tmp74_);
		_tmp76_ = _tmp75_;
		_tmp77_ = g_strdup_printf ("%s *", _tmp76_);
		_tmp78_ = _tmp77_;
		_tmp79_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp73_, _tmp78_);
		_tmp80_ = _tmp79_;
		_g_free0 (_tmp78_);
		_g_free0 (_tmp76_);
		_vala_ccode_node_unref0 (_tmp73_);
		ccast = _tmp80_;
		_tmp81_ = ccast;
		_tmp82_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp81_, "finalize");
		_tmp83_ = _tmp82_;
		_tmp84_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) cl);
		_tmp85_ = _tmp84_;
		_tmp86_ = g_strdup_printf ("%sfinalize", _tmp85_);
		_tmp87_ = _tmp86_;
		_tmp88_ = vala_ccode_identifier_new (_tmp87_);
		_tmp89_ = _tmp88_;
		_tmp90_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp83_, (ValaCCodeExpression*) _tmp89_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp91_ = _tmp90_;
		_vala_ccode_node_unref0 (_tmp89_);
		_g_free0 (_tmp87_);
		_g_free0 (_tmp85_);
		_vala_ccode_node_unref0 (_tmp83_);
		finalize_assignment = _tmp91_;
		_tmp92_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp93_ = _tmp92_;
		_tmp94_ = finalize_assignment;
		vala_ccode_function_add_expression (_tmp93_, (ValaCCodeExpression*) _tmp94_);
		_vala_ccode_node_unref0 (finalize_assignment);
		_vala_ccode_node_unref0 (ccast);
		_vala_code_node_unref0 (fundamental_class);
	}
	_tmp96_ = vala_class_get_has_private_fields (cl);
	_tmp97_ = _tmp96_;
	if (_tmp97_) {
		_tmp95_ = TRUE;
	} else {
		_tmp95_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) cl);
	}
	if (_tmp95_) {
		ValaCCodeIdentifier* _tmp98_;
		ValaCCodeIdentifier* _tmp99_;
		ValaCCodeFunctionCall* _tmp100_;
		ValaCCodeFunctionCall* _tmp101_;
		ValaCCodeIdentifier* _tmp102_;
		ValaCCodeIdentifier* _tmp103_;
		ValaCCodeFunctionCall* _tmp104_;
		gchar* _tmp105_;
		gchar* _tmp106_;
		gchar* _tmp107_;
		gchar* _tmp108_;
		ValaCCodeIdentifier* _tmp109_;
		ValaCCodeIdentifier* _tmp110_;
		ValaCCodeFunction* _tmp111_;
		ValaCCodeFunction* _tmp112_;
		ValaCCodeFunctionCall* _tmp113_;
		_tmp98_ = vala_ccode_identifier_new ("g_type_class_adjust_private_offset");
		_tmp99_ = _tmp98_;
		_tmp100_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp99_);
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp100_;
		_vala_ccode_node_unref0 (_tmp99_);
		_tmp101_ = ccall;
		_tmp102_ = vala_ccode_identifier_new ("klass");
		_tmp103_ = _tmp102_;
		vala_ccode_function_call_add_argument (_tmp101_, (ValaCCodeExpression*) _tmp103_);
		_vala_ccode_node_unref0 (_tmp103_);
		_tmp104_ = ccall;
		_tmp105_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp106_ = _tmp105_;
		_tmp107_ = g_strdup_printf ("&%s_private_offset", _tmp106_);
		_tmp108_ = _tmp107_;
		_tmp109_ = vala_ccode_identifier_new (_tmp108_);
		_tmp110_ = _tmp109_;
		vala_ccode_function_call_add_argument (_tmp104_, (ValaCCodeExpression*) _tmp110_);
		_vala_ccode_node_unref0 (_tmp110_);
		_g_free0 (_tmp108_);
		_g_free0 (_tmp106_);
		_tmp111_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp112_ = _tmp111_;
		_tmp113_ = ccall;
		vala_ccode_function_add_expression (_tmp112_, (ValaCCodeExpression*) _tmp113_);
	}
	{
		ValaList* _m_list = NULL;
		ValaList* _tmp114_;
		gint _m_size = 0;
		ValaList* _tmp115_;
		gint _tmp116_;
		gint _tmp117_;
		gint _m_index = 0;
		_tmp114_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
		_m_list = _tmp114_;
		_tmp115_ = _m_list;
		_tmp116_ = vala_collection_get_size ((ValaCollection*) _tmp115_);
		_tmp117_ = _tmp116_;
		_m_size = _tmp117_;
		_m_index = -1;
		while (TRUE) {
			gint _tmp118_;
			gint _tmp119_;
			ValaMethod* m = NULL;
			ValaList* _tmp120_;
			gpointer _tmp121_;
			ValaMethod* _tmp122_;
			ValaMethod* _tmp123_;
			ValaMethod* _tmp124_;
			ValaObjectTypeSymbol* base_type = NULL;
			ValaMethod* _tmp125_;
			ValaMethod* _tmp126_;
			ValaMethod* _tmp127_;
			ValaSymbol* _tmp128_;
			ValaSymbol* _tmp129_;
			ValaObjectTypeSymbol* _tmp130_;
			gboolean _tmp131_ = FALSE;
			ValaMethod* _tmp132_;
			gboolean _tmp133_;
			gboolean _tmp134_;
			_m_index = _m_index + 1;
			_tmp118_ = _m_index;
			_tmp119_ = _m_size;
			if (!(_tmp118_ < _tmp119_)) {
				break;
			}
			_tmp120_ = _m_list;
			_tmp121_ = vala_list_get (_tmp120_, _m_index);
			m = (ValaMethod*) _tmp121_;
			_tmp122_ = m;
			_tmp123_ = vala_method_get_base_method (_tmp122_);
			_tmp124_ = _tmp123_;
			if (_tmp124_ == NULL) {
				_vala_code_node_unref0 (m);
				continue;
			}
			_tmp125_ = m;
			_tmp126_ = vala_method_get_base_method (_tmp125_);
			_tmp127_ = _tmp126_;
			_tmp128_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp127_);
			_tmp129_ = _tmp128_;
			_tmp130_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp129_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
			base_type = _tmp130_;
			_tmp132_ = m;
			_tmp133_ = vala_method_get_is_abstract (_tmp132_);
			_tmp134_ = _tmp133_;
			if (!_tmp134_) {
				_tmp131_ = TRUE;
			} else {
				ValaMethod* _tmp135_;
				gboolean _tmp136_;
				gboolean _tmp137_;
				_tmp135_ = m;
				_tmp136_ = vala_method_get_coroutine (_tmp135_);
				_tmp137_ = _tmp136_;
				_tmp131_ = !_tmp137_;
			}
			if (_tmp131_) {
				ValaMethod* _tmp138_;
				ValaMethod* _tmp139_;
				ValaMethod* _tmp140_;
				ValaCCodeFile* _tmp141_;
				ValaCCodeExpression* cfunc = NULL;
				ValaMethod* _tmp142_;
				gchar* _tmp143_;
				gchar* _tmp144_;
				ValaCCodeIdentifier* _tmp145_;
				ValaCCodeExpression* _tmp146_;
				gint _tmp147_ = 0;
				ValaMethod* _tmp148_;
				gboolean _tmp149_;
				gboolean _tmp150_;
				ValaMethod* _tmp151_;
				ValaMethod* _tmp152_;
				ValaMethod* _tmp153_;
				ValaCCodeExpression* _tmp154_;
				ValaObjectTypeSymbol* _tmp155_;
				ValaCCodeExpression* _tmp156_;
				ValaCCodeCastExpression* ccast = NULL;
				ValaCCodeIdentifier* _tmp157_;
				ValaCCodeIdentifier* _tmp158_;
				ValaObjectTypeSymbol* _tmp159_;
				gchar* _tmp160_;
				gchar* _tmp161_;
				gchar* _tmp162_;
				gchar* _tmp163_;
				ValaCCodeCastExpression* _tmp164_;
				ValaCCodeCastExpression* _tmp165_;
				ValaCCodeFunction* _tmp166_;
				ValaCCodeFunction* _tmp167_;
				ValaCCodeCastExpression* _tmp168_;
				ValaMethod* _tmp169_;
				ValaMethod* _tmp170_;
				ValaMethod* _tmp171_;
				gchar* _tmp172_;
				gchar* _tmp173_;
				ValaCCodeMemberAccess* _tmp174_;
				ValaCCodeMemberAccess* _tmp175_;
				ValaCCodeExpression* _tmp176_;
				ValaMethod* _tmp177_;
				gboolean _tmp178_;
				gboolean _tmp179_;
				_tmp138_ = m;
				_tmp139_ = vala_method_get_base_method (_tmp138_);
				_tmp140_ = _tmp139_;
				_tmp141_ = ((ValaCCodeBaseModule*) self)->cfile;
				vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp140_, _tmp141_);
				_tmp142_ = m;
				_tmp143_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp142_);
				_tmp144_ = _tmp143_;
				_tmp145_ = vala_ccode_identifier_new (_tmp144_);
				_tmp146_ = (ValaCCodeExpression*) _tmp145_;
				_g_free0 (_tmp144_);
				cfunc = _tmp146_;
				_tmp148_ = m;
				_tmp149_ = vala_method_get_coroutine (_tmp148_);
				_tmp150_ = _tmp149_;
				if (_tmp150_) {
					_tmp147_ = 1;
				} else {
					_tmp147_ = 3;
				}
				_tmp151_ = m;
				_tmp152_ = vala_method_get_base_method (_tmp151_);
				_tmp153_ = _tmp152_;
				_tmp154_ = cfunc;
				_tmp155_ = base_type;
				_tmp156_ = vala_gtype_module_cast_method_pointer (self, _tmp153_, _tmp154_, _tmp155_, _tmp147_);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = _tmp156_;
				_tmp157_ = vala_ccode_identifier_new ("klass");
				_tmp158_ = _tmp157_;
				_tmp159_ = base_type;
				_tmp160_ = vala_get_ccode_type_name (_tmp159_);
				_tmp161_ = _tmp160_;
				_tmp162_ = g_strdup_printf ("%s *", _tmp161_);
				_tmp163_ = _tmp162_;
				_tmp164_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp158_, _tmp163_);
				_tmp165_ = _tmp164_;
				_g_free0 (_tmp163_);
				_g_free0 (_tmp161_);
				_vala_ccode_node_unref0 (_tmp158_);
				ccast = _tmp165_;
				_tmp166_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp167_ = _tmp166_;
				_tmp168_ = ccast;
				_tmp169_ = m;
				_tmp170_ = vala_method_get_base_method (_tmp169_);
				_tmp171_ = _tmp170_;
				_tmp172_ = vala_get_ccode_vfunc_name (_tmp171_);
				_tmp173_ = _tmp172_;
				_tmp174_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp168_, _tmp173_);
				_tmp175_ = _tmp174_;
				_tmp176_ = cfunc;
				vala_ccode_function_add_assignment (_tmp167_, (ValaCCodeExpression*) _tmp175_, _tmp176_);
				_vala_ccode_node_unref0 (_tmp175_);
				_g_free0 (_tmp173_);
				_tmp177_ = m;
				_tmp178_ = vala_method_get_coroutine (_tmp177_);
				_tmp179_ = _tmp178_;
				if (_tmp179_) {
					ValaMethod* _tmp180_;
					gchar* _tmp181_;
					gchar* _tmp182_;
					ValaCCodeIdentifier* _tmp183_;
					ValaMethod* _tmp184_;
					ValaMethod* _tmp185_;
					ValaMethod* _tmp186_;
					ValaCCodeExpression* _tmp187_;
					ValaObjectTypeSymbol* _tmp188_;
					ValaCCodeExpression* _tmp189_;
					ValaCCodeFunction* _tmp190_;
					ValaCCodeFunction* _tmp191_;
					ValaCCodeCastExpression* _tmp192_;
					ValaMethod* _tmp193_;
					ValaMethod* _tmp194_;
					ValaMethod* _tmp195_;
					gchar* _tmp196_;
					gchar* _tmp197_;
					ValaCCodeMemberAccess* _tmp198_;
					ValaCCodeMemberAccess* _tmp199_;
					ValaCCodeExpression* _tmp200_;
					_tmp180_ = m;
					_tmp181_ = vala_get_ccode_finish_real_name (_tmp180_);
					_tmp182_ = _tmp181_;
					_tmp183_ = vala_ccode_identifier_new (_tmp182_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = (ValaCCodeExpression*) _tmp183_;
					_g_free0 (_tmp182_);
					_tmp184_ = m;
					_tmp185_ = vala_method_get_base_method (_tmp184_);
					_tmp186_ = _tmp185_;
					_tmp187_ = cfunc;
					_tmp188_ = base_type;
					_tmp189_ = vala_gtype_module_cast_method_pointer (self, _tmp186_, _tmp187_, _tmp188_, 2);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp189_;
					_tmp190_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp191_ = _tmp190_;
					_tmp192_ = ccast;
					_tmp193_ = m;
					_tmp194_ = vala_method_get_base_method (_tmp193_);
					_tmp195_ = _tmp194_;
					_tmp196_ = vala_get_ccode_finish_vfunc_name (_tmp195_);
					_tmp197_ = _tmp196_;
					_tmp198_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp192_, _tmp197_);
					_tmp199_ = _tmp198_;
					_tmp200_ = cfunc;
					vala_ccode_function_add_assignment (_tmp191_, (ValaCCodeExpression*) _tmp199_, _tmp200_);
					_vala_ccode_node_unref0 (_tmp199_);
					_g_free0 (_tmp197_);
				}
				_vala_ccode_node_unref0 (ccast);
				_vala_ccode_node_unref0 (cfunc);
			}
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (m);
		}
	}
	{
		ValaList* _sig_list = NULL;
		ValaList* _tmp201_;
		gint _sig_size = 0;
		ValaList* _tmp202_;
		gint _tmp203_;
		gint _tmp204_;
		gint _sig_index = 0;
		_tmp201_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
		_sig_list = _tmp201_;
		_tmp202_ = _sig_list;
		_tmp203_ = vala_collection_get_size ((ValaCollection*) _tmp202_);
		_tmp204_ = _tmp203_;
		_sig_size = _tmp204_;
		_sig_index = -1;
		while (TRUE) {
			gint _tmp205_;
			gint _tmp206_;
			ValaSignal* sig = NULL;
			ValaList* _tmp207_;
			gpointer _tmp208_;
			gboolean _tmp209_ = FALSE;
			ValaSignal* _tmp210_;
			ValaMethod* _tmp211_;
			ValaMethod* _tmp212_;
			ValaCCodeCastExpression* ccast = NULL;
			ValaCCodeIdentifier* _tmp216_;
			ValaCCodeIdentifier* _tmp217_;
			gchar* _tmp218_;
			gchar* _tmp219_;
			gchar* _tmp220_;
			gchar* _tmp221_;
			ValaCCodeCastExpression* _tmp222_;
			ValaCCodeCastExpression* _tmp223_;
			ValaCCodeFunction* _tmp224_;
			ValaCCodeFunction* _tmp225_;
			ValaCCodeCastExpression* _tmp226_;
			ValaSignal* _tmp227_;
			ValaMethod* _tmp228_;
			ValaMethod* _tmp229_;
			gchar* _tmp230_;
			gchar* _tmp231_;
			ValaCCodeMemberAccess* _tmp232_;
			ValaCCodeMemberAccess* _tmp233_;
			ValaSignal* _tmp234_;
			ValaMethod* _tmp235_;
			ValaMethod* _tmp236_;
			gchar* _tmp237_;
			gchar* _tmp238_;
			ValaCCodeIdentifier* _tmp239_;
			ValaCCodeIdentifier* _tmp240_;
			_sig_index = _sig_index + 1;
			_tmp205_ = _sig_index;
			_tmp206_ = _sig_size;
			if (!(_tmp205_ < _tmp206_)) {
				break;
			}
			_tmp207_ = _sig_list;
			_tmp208_ = vala_list_get (_tmp207_, _sig_index);
			sig = (ValaSignal*) _tmp208_;
			_tmp210_ = sig;
			_tmp211_ = vala_signal_get_default_handler (_tmp210_);
			_tmp212_ = _tmp211_;
			if (_tmp212_ == NULL) {
				_tmp209_ = TRUE;
			} else {
				ValaSignal* _tmp213_;
				gboolean _tmp214_;
				gboolean _tmp215_;
				_tmp213_ = sig;
				_tmp214_ = vala_signal_get_is_virtual (_tmp213_);
				_tmp215_ = _tmp214_;
				_tmp209_ = !_tmp215_;
			}
			if (_tmp209_) {
				_vala_code_node_unref0 (sig);
				continue;
			}
			_tmp216_ = vala_ccode_identifier_new ("klass");
			_tmp217_ = _tmp216_;
			_tmp218_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
			_tmp219_ = _tmp218_;
			_tmp220_ = g_strdup_printf ("%s *", _tmp219_);
			_tmp221_ = _tmp220_;
			_tmp222_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp217_, _tmp221_);
			_tmp223_ = _tmp222_;
			_g_free0 (_tmp221_);
			_g_free0 (_tmp219_);
			_vala_ccode_node_unref0 (_tmp217_);
			ccast = _tmp223_;
			_tmp224_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp225_ = _tmp224_;
			_tmp226_ = ccast;
			_tmp227_ = sig;
			_tmp228_ = vala_signal_get_default_handler (_tmp227_);
			_tmp229_ = _tmp228_;
			_tmp230_ = vala_get_ccode_vfunc_name (_tmp229_);
			_tmp231_ = _tmp230_;
			_tmp232_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp226_, _tmp231_);
			_tmp233_ = _tmp232_;
			_tmp234_ = sig;
			_tmp235_ = vala_signal_get_default_handler (_tmp234_);
			_tmp236_ = _tmp235_;
			_tmp237_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp236_);
			_tmp238_ = _tmp237_;
			_tmp239_ = vala_ccode_identifier_new (_tmp238_);
			_tmp240_ = _tmp239_;
			vala_ccode_function_add_assignment (_tmp225_, (ValaCCodeExpression*) _tmp233_, (ValaCCodeExpression*) _tmp240_);
			_vala_ccode_node_unref0 (_tmp240_);
			_g_free0 (_tmp238_);
			_vala_ccode_node_unref0 (_tmp233_);
			_g_free0 (_tmp231_);
			_vala_ccode_node_unref0 (ccast);
			_vala_code_node_unref0 (sig);
		}
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp241_;
		gint _prop_size = 0;
		ValaList* _tmp242_;
		gint _tmp243_;
		gint _tmp244_;
		gint _prop_index = 0;
		_tmp241_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
		_prop_list = _tmp241_;
		_tmp242_ = _prop_list;
		_tmp243_ = vala_collection_get_size ((ValaCollection*) _tmp242_);
		_tmp244_ = _tmp243_;
		_prop_size = _tmp244_;
		_prop_index = -1;
		while (TRUE) {
			gint _tmp245_;
			gint _tmp246_;
			ValaProperty* prop = NULL;
			ValaList* _tmp247_;
			gpointer _tmp248_;
			ValaProperty* _tmp249_;
			ValaProperty* _tmp250_;
			ValaProperty* _tmp251_;
			ValaClass* base_type = NULL;
			ValaProperty* _tmp252_;
			ValaProperty* _tmp253_;
			ValaProperty* _tmp254_;
			ValaSymbol* _tmp255_;
			ValaSymbol* _tmp256_;
			ValaClass* _tmp257_;
			ValaCCodeFunctionCall* ccast = NULL;
			ValaClass* _tmp258_;
			gchar* _tmp259_;
			gchar* _tmp260_;
			ValaCCodeIdentifier* _tmp261_;
			ValaCCodeIdentifier* _tmp262_;
			ValaCCodeFunctionCall* _tmp263_;
			ValaCCodeFunctionCall* _tmp264_;
			ValaCCodeFunctionCall* _tmp265_;
			ValaCCodeIdentifier* _tmp266_;
			ValaCCodeIdentifier* _tmp267_;
			gboolean _tmp268_ = FALSE;
			ValaProperty* _tmp269_;
			ValaProperty* _tmp270_;
			ValaProperty* _tmp271_;
			_prop_index = _prop_index + 1;
			_tmp245_ = _prop_index;
			_tmp246_ = _prop_size;
			if (!(_tmp245_ < _tmp246_)) {
				break;
			}
			_tmp247_ = _prop_list;
			_tmp248_ = vala_list_get (_tmp247_, _prop_index);
			prop = (ValaProperty*) _tmp248_;
			_tmp249_ = prop;
			_tmp250_ = vala_property_get_base_property (_tmp249_);
			_tmp251_ = _tmp250_;
			if (_tmp251_ == NULL) {
				_vala_code_node_unref0 (prop);
				continue;
			}
			_tmp252_ = prop;
			_tmp253_ = vala_property_get_base_property (_tmp252_);
			_tmp254_ = _tmp253_;
			_tmp255_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp254_);
			_tmp256_ = _tmp255_;
			_tmp257_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp256_, VALA_TYPE_CLASS, ValaClass));
			base_type = _tmp257_;
			_tmp258_ = base_type;
			_tmp259_ = vala_get_ccode_class_type_function (_tmp258_);
			_tmp260_ = _tmp259_;
			_tmp261_ = vala_ccode_identifier_new (_tmp260_);
			_tmp262_ = _tmp261_;
			_tmp263_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp262_);
			_tmp264_ = _tmp263_;
			_vala_ccode_node_unref0 (_tmp262_);
			_g_free0 (_tmp260_);
			ccast = _tmp264_;
			_tmp265_ = ccast;
			_tmp266_ = vala_ccode_identifier_new ("klass");
			_tmp267_ = _tmp266_;
			vala_ccode_function_call_add_argument (_tmp265_, (ValaCCodeExpression*) _tmp267_);
			_vala_ccode_node_unref0 (_tmp267_);
			_tmp269_ = prop;
			_tmp270_ = vala_property_get_base_property (_tmp269_);
			_tmp271_ = _tmp270_;
			if (!vala_get_ccode_no_accessor_method (_tmp271_)) {
				ValaProperty* _tmp272_;
				ValaProperty* _tmp273_;
				ValaProperty* _tmp274_;
				_tmp272_ = prop;
				_tmp273_ = vala_property_get_base_property (_tmp272_);
				_tmp274_ = _tmp273_;
				_tmp268_ = !vala_get_ccode_concrete_accessor (_tmp274_);
			} else {
				_tmp268_ = FALSE;
			}
			if (_tmp268_) {
				ValaProperty* _tmp275_;
				ValaPropertyAccessor* _tmp276_;
				ValaPropertyAccessor* _tmp277_;
				ValaProperty* _tmp312_;
				ValaPropertyAccessor* _tmp313_;
				ValaPropertyAccessor* _tmp314_;
				_tmp275_ = prop;
				_tmp276_ = vala_property_get_get_accessor (_tmp275_);
				_tmp277_ = _tmp276_;
				if (_tmp277_ != NULL) {
					ValaProperty* _tmp278_;
					ValaProperty* _tmp279_;
					ValaProperty* _tmp280_;
					ValaPropertyAccessor* _tmp281_;
					ValaPropertyAccessor* _tmp282_;
					ValaCCodeFile* _tmp283_;
					ValaCCodeExpression* cfunc = NULL;
					ValaProperty* _tmp284_;
					ValaPropertyAccessor* _tmp285_;
					ValaPropertyAccessor* _tmp286_;
					gchar* _tmp287_;
					gchar* _tmp288_;
					ValaCCodeIdentifier* _tmp289_;
					ValaCCodeExpression* _tmp290_;
					ValaProperty* _tmp291_;
					ValaProperty* _tmp292_;
					ValaProperty* _tmp293_;
					ValaPropertyAccessor* _tmp294_;
					ValaPropertyAccessor* _tmp295_;
					ValaMethod* _tmp296_;
					ValaMethod* _tmp297_;
					ValaCCodeExpression* _tmp298_;
					ValaClass* _tmp299_;
					ValaCCodeExpression* _tmp300_;
					ValaCCodeFunction* _tmp301_;
					ValaCCodeFunction* _tmp302_;
					ValaCCodeFunctionCall* _tmp303_;
					ValaProperty* _tmp304_;
					const gchar* _tmp305_;
					const gchar* _tmp306_;
					gchar* _tmp307_;
					gchar* _tmp308_;
					ValaCCodeMemberAccess* _tmp309_;
					ValaCCodeMemberAccess* _tmp310_;
					ValaCCodeExpression* _tmp311_;
					_tmp278_ = prop;
					_tmp279_ = vala_property_get_base_property (_tmp278_);
					_tmp280_ = _tmp279_;
					_tmp281_ = vala_property_get_get_accessor (_tmp280_);
					_tmp282_ = _tmp281_;
					_tmp283_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp282_, _tmp283_);
					_tmp284_ = prop;
					_tmp285_ = vala_property_get_get_accessor (_tmp284_);
					_tmp286_ = _tmp285_;
					_tmp287_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp286_);
					_tmp288_ = _tmp287_;
					_tmp289_ = vala_ccode_identifier_new (_tmp288_);
					_tmp290_ = (ValaCCodeExpression*) _tmp289_;
					_g_free0 (_tmp288_);
					cfunc = _tmp290_;
					_tmp291_ = prop;
					_tmp292_ = vala_property_get_base_property (_tmp291_);
					_tmp293_ = _tmp292_;
					_tmp294_ = vala_property_get_get_accessor (_tmp293_);
					_tmp295_ = _tmp294_;
					_tmp296_ = vala_property_accessor_get_method (_tmp295_);
					_tmp297_ = _tmp296_;
					_tmp298_ = cfunc;
					_tmp299_ = base_type;
					_tmp300_ = vala_gtype_module_cast_method_pointer (self, _tmp297_, _tmp298_, (ValaObjectTypeSymbol*) _tmp299_, 3);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp300_;
					_vala_code_node_unref0 (_tmp297_);
					_tmp301_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp302_ = _tmp301_;
					_tmp303_ = ccast;
					_tmp304_ = prop;
					_tmp305_ = vala_symbol_get_name ((ValaSymbol*) _tmp304_);
					_tmp306_ = _tmp305_;
					_tmp307_ = g_strdup_printf ("get_%s", _tmp306_);
					_tmp308_ = _tmp307_;
					_tmp309_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp303_, _tmp308_);
					_tmp310_ = _tmp309_;
					_tmp311_ = cfunc;
					vala_ccode_function_add_assignment (_tmp302_, (ValaCCodeExpression*) _tmp310_, _tmp311_);
					_vala_ccode_node_unref0 (_tmp310_);
					_g_free0 (_tmp308_);
					_vala_ccode_node_unref0 (cfunc);
				}
				_tmp312_ = prop;
				_tmp313_ = vala_property_get_set_accessor (_tmp312_);
				_tmp314_ = _tmp313_;
				if (_tmp314_ != NULL) {
					ValaProperty* _tmp315_;
					ValaProperty* _tmp316_;
					ValaProperty* _tmp317_;
					ValaPropertyAccessor* _tmp318_;
					ValaPropertyAccessor* _tmp319_;
					ValaCCodeFile* _tmp320_;
					ValaCCodeExpression* cfunc = NULL;
					ValaProperty* _tmp321_;
					ValaPropertyAccessor* _tmp322_;
					ValaPropertyAccessor* _tmp323_;
					gchar* _tmp324_;
					gchar* _tmp325_;
					ValaCCodeIdentifier* _tmp326_;
					ValaCCodeExpression* _tmp327_;
					ValaProperty* _tmp328_;
					ValaProperty* _tmp329_;
					ValaProperty* _tmp330_;
					ValaPropertyAccessor* _tmp331_;
					ValaPropertyAccessor* _tmp332_;
					ValaMethod* _tmp333_;
					ValaMethod* _tmp334_;
					ValaCCodeExpression* _tmp335_;
					ValaClass* _tmp336_;
					ValaCCodeExpression* _tmp337_;
					ValaCCodeFunction* _tmp338_;
					ValaCCodeFunction* _tmp339_;
					ValaCCodeFunctionCall* _tmp340_;
					ValaProperty* _tmp341_;
					const gchar* _tmp342_;
					const gchar* _tmp343_;
					gchar* _tmp344_;
					gchar* _tmp345_;
					ValaCCodeMemberAccess* _tmp346_;
					ValaCCodeMemberAccess* _tmp347_;
					ValaCCodeExpression* _tmp348_;
					_tmp315_ = prop;
					_tmp316_ = vala_property_get_base_property (_tmp315_);
					_tmp317_ = _tmp316_;
					_tmp318_ = vala_property_get_set_accessor (_tmp317_);
					_tmp319_ = _tmp318_;
					_tmp320_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp319_, _tmp320_);
					_tmp321_ = prop;
					_tmp322_ = vala_property_get_set_accessor (_tmp321_);
					_tmp323_ = _tmp322_;
					_tmp324_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp323_);
					_tmp325_ = _tmp324_;
					_tmp326_ = vala_ccode_identifier_new (_tmp325_);
					_tmp327_ = (ValaCCodeExpression*) _tmp326_;
					_g_free0 (_tmp325_);
					cfunc = _tmp327_;
					_tmp328_ = prop;
					_tmp329_ = vala_property_get_base_property (_tmp328_);
					_tmp330_ = _tmp329_;
					_tmp331_ = vala_property_get_set_accessor (_tmp330_);
					_tmp332_ = _tmp331_;
					_tmp333_ = vala_property_accessor_get_method (_tmp332_);
					_tmp334_ = _tmp333_;
					_tmp335_ = cfunc;
					_tmp336_ = base_type;
					_tmp337_ = vala_gtype_module_cast_method_pointer (self, _tmp334_, _tmp335_, (ValaObjectTypeSymbol*) _tmp336_, 3);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp337_;
					_vala_code_node_unref0 (_tmp334_);
					_tmp338_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp339_ = _tmp338_;
					_tmp340_ = ccast;
					_tmp341_ = prop;
					_tmp342_ = vala_symbol_get_name ((ValaSymbol*) _tmp341_);
					_tmp343_ = _tmp342_;
					_tmp344_ = g_strdup_printf ("set_%s", _tmp343_);
					_tmp345_ = _tmp344_;
					_tmp346_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp340_, _tmp345_);
					_tmp347_ = _tmp346_;
					_tmp348_ = cfunc;
					vala_ccode_function_add_assignment (_tmp339_, (ValaCCodeExpression*) _tmp347_, _tmp348_);
					_vala_ccode_node_unref0 (_tmp347_);
					_g_free0 (_tmp345_);
					_vala_ccode_node_unref0 (cfunc);
				}
			}
			_vala_ccode_node_unref0 (ccast);
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (prop);
		}
	}
	vala_gtype_module_generate_class_init (self, cl);
	_tmp349_ = vala_class_get_is_compact (cl);
	_tmp350_ = _tmp349_;
	if (!_tmp350_) {
		{
			ValaList* _sig_list = NULL;
			ValaList* _tmp351_;
			gint _sig_size = 0;
			ValaList* _tmp352_;
			gint _tmp353_;
			gint _tmp354_;
			gint _sig_index = 0;
			_tmp351_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
			_sig_list = _tmp351_;
			_tmp352_ = _sig_list;
			_tmp353_ = vala_collection_get_size ((ValaCollection*) _tmp352_);
			_tmp354_ = _tmp353_;
			_sig_size = _tmp354_;
			_sig_index = -1;
			while (TRUE) {
				gint _tmp355_;
				gint _tmp356_;
				ValaSignal* sig = NULL;
				ValaList* _tmp357_;
				gpointer _tmp358_;
				ValaSignal* _tmp359_;
				ValaComment* _tmp360_;
				ValaComment* _tmp361_;
				ValaCCodeFunction* _tmp371_;
				ValaCCodeFunction* _tmp372_;
				ValaSignal* _tmp373_;
				ValaCCodeExpression* _tmp374_;
				ValaCCodeExpression* _tmp375_;
				_sig_index = _sig_index + 1;
				_tmp355_ = _sig_index;
				_tmp356_ = _sig_size;
				if (!(_tmp355_ < _tmp356_)) {
					break;
				}
				_tmp357_ = _sig_list;
				_tmp358_ = vala_list_get (_tmp357_, _sig_index);
				sig = (ValaSignal*) _tmp358_;
				_tmp359_ = sig;
				_tmp360_ = vala_symbol_get_comment ((ValaSymbol*) _tmp359_);
				_tmp361_ = _tmp360_;
				if (_tmp361_ != NULL) {
					ValaCCodeFunction* _tmp362_;
					ValaCCodeFunction* _tmp363_;
					ValaSignal* _tmp364_;
					ValaComment* _tmp365_;
					ValaComment* _tmp366_;
					const gchar* _tmp367_;
					const gchar* _tmp368_;
					ValaCCodeComment* _tmp369_;
					ValaCCodeComment* _tmp370_;
					_tmp362_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp363_ = _tmp362_;
					_tmp364_ = sig;
					_tmp365_ = vala_symbol_get_comment ((ValaSymbol*) _tmp364_);
					_tmp366_ = _tmp365_;
					_tmp367_ = vala_comment_get_content (_tmp366_);
					_tmp368_ = _tmp367_;
					_tmp369_ = vala_ccode_comment_new (_tmp368_);
					_tmp370_ = _tmp369_;
					vala_ccode_function_add_statement (_tmp363_, (ValaCCodeNode*) _tmp370_);
					_vala_ccode_node_unref0 (_tmp370_);
				}
				_tmp371_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp372_ = _tmp371_;
				_tmp373_ = sig;
				_tmp374_ = vala_ccode_base_module_get_signal_creation ((ValaCCodeBaseModule*) self, _tmp373_, (ValaObjectTypeSymbol*) cl);
				_tmp375_ = _tmp374_;
				vala_ccode_function_add_expression (_tmp372_, _tmp375_);
				_vala_ccode_node_unref0 (_tmp375_);
				_vala_code_node_unref0 (sig);
			}
		}
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (parent_assignment);
	_vala_ccode_node_unref0 (parent_var_decl);
	_vala_ccode_node_unref0 (parent_decl);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (func);
}

static void
vala_gtype_module_add_class_init_function (ValaGTypeModule* self,
                                           ValaClass* cl)
{
	ValaCCodeFile* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp1_ = ((ValaCCodeBaseModule*) self)->class_init_context;
	_tmp2_ = _tmp1_->ccode;
	vala_ccode_file_add_function (_tmp0_, _tmp2_);
}

static void
vala_gtype_module_add_generic_accessor_function (ValaGTypeModule* self,
                                                 const gchar* base_name,
                                                 const gchar* return_type,
                                                 ValaCCodeExpression* expression,
                                                 ValaTypeParameter* p,
                                                 ValaClass* cl,
                                                 ValaInterface* iface)
{
	gchar* name = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* function = NULL;
	ValaCCodeFunction* _tmp6_;
	ValaDataType* this_type = NULL;
	ValaDataType* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeCastExpression* _tmp14_;
	ValaCCodeCastExpression* _tmp15_;
	ValaCCodeFile* _tmp16_;
	ValaCCodeExpression* cfunc = NULL;
	const gchar* _tmp17_;
	const gchar* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	gchar* cast = NULL;
	gchar* _tmp20_;
	gchar* cast_args = NULL;
	gchar* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	const gchar* _tmp25_;
	gchar* _tmp26_;
	ValaCCodeExpression* _tmp27_;
	const gchar* _tmp28_;
	ValaCCodeCastExpression* _tmp29_;
	ValaCCodeIdentifier* ciface = NULL;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeMemberAccess* _tmp33_;
	ValaCCodeMemberAccess* _tmp34_;
	ValaCCodeExpression* _tmp35_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (base_name != NULL);
	g_return_if_fail (return_type != NULL);
	g_return_if_fail (p != NULL);
	g_return_if_fail (cl != NULL);
	g_return_if_fail (iface != NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("%s_%s_%s", _tmp1_, _tmp3_, base_name);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	name = _tmp5_;
	_tmp6_ = vala_ccode_function_new (name, return_type);
	function = _tmp6_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	_tmp7_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) cl);
	this_type = _tmp7_;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) this_type);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_parameter_new ("self", _tmp9_);
	_tmp11_ = _tmp10_;
	vala_ccode_function_add_parameter (function, _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_g_free0 (_tmp9_);
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp12_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_cast_expression_new (expression, return_type);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_return (_tmp13_, (ValaCCodeExpression*) _tmp15_);
	_vala_ccode_node_unref0 (_tmp15_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp16_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp16_, function);
	_tmp17_ = vala_ccode_function_get_name (function);
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_ccode_identifier_new (_tmp18_);
	cfunc = (ValaCCodeExpression*) _tmp19_;
	_tmp20_ = g_strdup_printf ("%s (*)", return_type);
	cast = _tmp20_;
	_tmp21_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp22_ = _tmp21_;
	_tmp23_ = g_strdup_printf ("%s *", _tmp22_);
	_tmp24_ = _tmp23_;
	_g_free0 (_tmp22_);
	cast_args = _tmp24_;
	_tmp25_ = cast;
	_tmp26_ = g_strdup_printf ("%s (%s)", _tmp25_, cast_args);
	_g_free0 (cast);
	cast = _tmp26_;
	_tmp27_ = cfunc;
	_tmp28_ = cast;
	_tmp29_ = vala_ccode_cast_expression_new (_tmp27_, _tmp28_);
	_vala_ccode_node_unref0 (cfunc);
	cfunc = (ValaCCodeExpression*) _tmp29_;
	_tmp30_ = vala_ccode_identifier_new ("iface");
	ciface = _tmp30_;
	_tmp31_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) ciface, base_name);
	_tmp34_ = _tmp33_;
	_tmp35_ = cfunc;
	vala_ccode_function_add_assignment (_tmp32_, (ValaCCodeExpression*) _tmp34_, _tmp35_);
	_vala_ccode_node_unref0 (_tmp34_);
	_vala_ccode_node_unref0 (ciface);
	_g_free0 (cast_args);
	_g_free0 (cast);
	_vala_ccode_node_unref0 (cfunc);
	_vala_code_node_unref0 (this_type);
	_vala_ccode_node_unref0 (function);
	_g_free0 (name);
}

static void
vala_gtype_module_add_interface_init_function (ValaGTypeModule* self,
                                               ValaClass* cl,
                                               ValaInterface* iface)
{
	ValaCCodeFunction* iface_init = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeFunction* _tmp18_;
	ValaCCodeFunction* _tmp19_;
	ValaCCodeFunctionCall* ccall = NULL;
	gchar* parent_iface_var = NULL;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	ValaCCodeDeclaration* parent_decl = NULL;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	ValaCCodeDeclaration* _tmp30_;
	ValaCCodeDeclaration* _tmp31_;
	ValaCCodeVariableDeclarator* parent_var_decl = NULL;
	const gchar* _tmp32_;
	ValaCCodeVariableDeclarator* _tmp33_;
	ValaCCodeVariableDeclarator* _tmp34_;
	ValaCCodeConstant* _tmp35_;
	ValaCCodeConstant* _tmp36_;
	ValaCCodeDeclaration* _tmp37_;
	ValaCCodeVariableDeclarator* _tmp38_;
	ValaCCodeDeclaration* _tmp39_;
	ValaCCodeFile* _tmp40_;
	ValaCCodeDeclaration* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeFunctionCall* _tmp44_;
	ValaCCodeFunctionCall* _tmp45_;
	ValaCCodeIdentifier* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeFunction* _tmp48_;
	ValaCCodeFunction* _tmp49_;
	const gchar* _tmp50_;
	ValaCCodeIdentifier* _tmp51_;
	ValaCCodeIdentifier* _tmp52_;
	ValaCCodeFunctionCall* _tmp53_;
	ValaMapIterator* it = NULL;
	ValaHashMap* _tmp191_;
	ValaHashMap* _tmp192_;
	ValaMapIterator* _tmp193_;
	ValaMapIterator* _tmp194_;
	ValaCCodeFile* _tmp478_;
	ValaCCodeFunction* _tmp479_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	g_return_if_fail (iface != NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("%s_%s_interface_init", _tmp1_, _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_function_new (_tmp5_, "void");
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	iface_init = _tmp7_;
	_tmp8_ = iface_init;
	_tmp9_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%s *", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_parameter_new ("iface", _tmp12_);
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp8_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_g_free0 (_tmp12_);
	_g_free0 (_tmp10_);
	_tmp15_ = iface_init;
	_tmp16_ = vala_ccode_parameter_new ("iface_data", "gpointer");
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_parameter (_tmp15_, _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_tmp18_ = iface_init;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp18_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp19_ = iface_init;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp19_);
	_tmp20_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
	_tmp23_ = _tmp22_;
	_tmp24_ = g_strdup_printf ("%s_%s_parent_iface", _tmp21_, _tmp23_);
	_tmp25_ = _tmp24_;
	_g_free0 (_tmp23_);
	_g_free0 (_tmp21_);
	parent_iface_var = _tmp25_;
	_tmp26_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
	_tmp27_ = _tmp26_;
	_tmp28_ = g_strdup_printf ("%s *", _tmp27_);
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_ccode_declaration_new (_tmp29_);
	_tmp31_ = _tmp30_;
	_g_free0 (_tmp29_);
	_g_free0 (_tmp27_);
	parent_decl = _tmp31_;
	_tmp32_ = parent_iface_var;
	_tmp33_ = vala_ccode_variable_declarator_new (_tmp32_, NULL, NULL);
	parent_var_decl = _tmp33_;
	_tmp34_ = parent_var_decl;
	_tmp35_ = vala_ccode_constant_new ("NULL");
	_tmp36_ = _tmp35_;
	vala_ccode_variable_declarator_set_initializer (_tmp34_, (ValaCCodeExpression*) _tmp36_);
	_vala_ccode_node_unref0 (_tmp36_);
	_tmp37_ = parent_decl;
	_tmp38_ = parent_var_decl;
	vala_ccode_declaration_add_declarator (_tmp37_, (ValaCCodeDeclarator*) _tmp38_);
	_tmp39_ = parent_decl;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp39_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp40_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp41_ = parent_decl;
	vala_ccode_file_add_type_member_declaration (_tmp40_, (ValaCCodeNode*) _tmp41_);
	_tmp42_ = vala_ccode_identifier_new ("g_type_interface_peek_parent");
	_tmp43_ = _tmp42_;
	_tmp44_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp43_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp44_;
	_vala_ccode_node_unref0 (_tmp43_);
	_tmp45_ = ccall;
	_tmp46_ = vala_ccode_identifier_new ("iface");
	_tmp47_ = _tmp46_;
	vala_ccode_function_call_add_argument (_tmp45_, (ValaCCodeExpression*) _tmp47_);
	_vala_ccode_node_unref0 (_tmp47_);
	_tmp48_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp49_ = _tmp48_;
	_tmp50_ = parent_iface_var;
	_tmp51_ = vala_ccode_identifier_new (_tmp50_);
	_tmp52_ = _tmp51_;
	_tmp53_ = ccall;
	vala_ccode_function_add_assignment (_tmp49_, (ValaCCodeExpression*) _tmp52_, (ValaCCodeExpression*) _tmp53_);
	_vala_ccode_node_unref0 (_tmp52_);
	{
		ValaList* _m_list = NULL;
		ValaList* _tmp54_;
		gint _m_size = 0;
		ValaList* _tmp55_;
		gint _tmp56_;
		gint _tmp57_;
		gint _m_index = 0;
		_tmp54_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
		_m_list = _tmp54_;
		_tmp55_ = _m_list;
		_tmp56_ = vala_collection_get_size ((ValaCollection*) _tmp55_);
		_tmp57_ = _tmp56_;
		_m_size = _tmp57_;
		_m_index = -1;
		while (TRUE) {
			gint _tmp58_;
			gint _tmp59_;
			ValaMethod* m = NULL;
			ValaList* _tmp60_;
			gpointer _tmp61_;
			ValaMethod* _tmp62_;
			ValaMethod* _tmp63_;
			ValaMethod* _tmp64_;
			ValaSymbol* base_type = NULL;
			ValaMethod* _tmp65_;
			ValaMethod* _tmp66_;
			ValaMethod* _tmp67_;
			ValaSymbol* _tmp68_;
			ValaSymbol* _tmp69_;
			ValaSymbol* _tmp70_;
			ValaSymbol* _tmp71_;
			ValaMethod* _tmp72_;
			ValaMethod* _tmp73_;
			ValaMethod* _tmp74_;
			ValaCCodeFile* _tmp75_;
			ValaCCodeIdentifier* ciface = NULL;
			ValaCCodeIdentifier* _tmp76_;
			ValaCCodeExpression* cfunc = NULL;
			gboolean _tmp77_ = FALSE;
			ValaMethod* _tmp78_;
			gboolean _tmp79_;
			gboolean _tmp80_;
			gint _tmp92_ = 0;
			ValaMethod* _tmp93_;
			gboolean _tmp94_;
			gboolean _tmp95_;
			ValaMethod* _tmp96_;
			ValaMethod* _tmp97_;
			ValaMethod* _tmp98_;
			ValaCCodeExpression* _tmp99_;
			ValaCCodeExpression* _tmp100_;
			ValaCCodeFunction* _tmp101_;
			ValaCCodeFunction* _tmp102_;
			ValaCCodeIdentifier* _tmp103_;
			ValaMethod* _tmp104_;
			ValaMethod* _tmp105_;
			ValaMethod* _tmp106_;
			gchar* _tmp107_;
			gchar* _tmp108_;
			ValaCCodeMemberAccess* _tmp109_;
			ValaCCodeMemberAccess* _tmp110_;
			ValaCCodeExpression* _tmp111_;
			ValaMethod* _tmp112_;
			gboolean _tmp113_;
			gboolean _tmp114_;
			_m_index = _m_index + 1;
			_tmp58_ = _m_index;
			_tmp59_ = _m_size;
			if (!(_tmp58_ < _tmp59_)) {
				break;
			}
			_tmp60_ = _m_list;
			_tmp61_ = vala_list_get (_tmp60_, _m_index);
			m = (ValaMethod*) _tmp61_;
			_tmp62_ = m;
			_tmp63_ = vala_method_get_base_interface_method (_tmp62_);
			_tmp64_ = _tmp63_;
			if (_tmp64_ == NULL) {
				_vala_code_node_unref0 (m);
				continue;
			}
			_tmp65_ = m;
			_tmp66_ = vala_method_get_base_interface_method (_tmp65_);
			_tmp67_ = _tmp66_;
			_tmp68_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp67_);
			_tmp69_ = _tmp68_;
			_tmp70_ = _vala_code_node_ref0 (_tmp69_);
			base_type = _tmp70_;
			_tmp71_ = base_type;
			if (_tmp71_ != G_TYPE_CHECK_INSTANCE_CAST (iface, VALA_TYPE_SYMBOL, ValaSymbol)) {
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (m);
				continue;
			}
			_tmp72_ = m;
			_tmp73_ = vala_method_get_base_interface_method (_tmp72_);
			_tmp74_ = _tmp73_;
			_tmp75_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp74_, _tmp75_);
			_tmp76_ = vala_ccode_identifier_new ("iface");
			ciface = _tmp76_;
			_tmp78_ = m;
			_tmp79_ = vala_method_get_is_abstract (_tmp78_);
			_tmp80_ = _tmp79_;
			if (_tmp80_) {
				_tmp77_ = TRUE;
			} else {
				ValaMethod* _tmp81_;
				gboolean _tmp82_;
				gboolean _tmp83_;
				_tmp81_ = m;
				_tmp82_ = vala_method_get_is_virtual (_tmp81_);
				_tmp83_ = _tmp82_;
				_tmp77_ = _tmp83_;
			}
			if (_tmp77_) {
				ValaMethod* _tmp84_;
				gchar* _tmp85_;
				gchar* _tmp86_;
				ValaCCodeIdentifier* _tmp87_;
				_tmp84_ = m;
				_tmp85_ = vala_get_ccode_name ((ValaCodeNode*) _tmp84_);
				_tmp86_ = _tmp85_;
				_tmp87_ = vala_ccode_identifier_new (_tmp86_);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = (ValaCCodeExpression*) _tmp87_;
				_g_free0 (_tmp86_);
			} else {
				ValaMethod* _tmp88_;
				gchar* _tmp89_;
				gchar* _tmp90_;
				ValaCCodeIdentifier* _tmp91_;
				_tmp88_ = m;
				_tmp89_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp88_);
				_tmp90_ = _tmp89_;
				_tmp91_ = vala_ccode_identifier_new (_tmp90_);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = (ValaCCodeExpression*) _tmp91_;
				_g_free0 (_tmp90_);
			}
			_tmp93_ = m;
			_tmp94_ = vala_method_get_coroutine (_tmp93_);
			_tmp95_ = _tmp94_;
			if (_tmp95_) {
				_tmp92_ = 1;
			} else {
				_tmp92_ = 3;
			}
			_tmp96_ = m;
			_tmp97_ = vala_method_get_base_interface_method (_tmp96_);
			_tmp98_ = _tmp97_;
			_tmp99_ = cfunc;
			_tmp100_ = vala_gtype_module_cast_method_pointer (self, _tmp98_, _tmp99_, (ValaObjectTypeSymbol*) iface, _tmp92_);
			_vala_ccode_node_unref0 (cfunc);
			cfunc = _tmp100_;
			_tmp101_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp102_ = _tmp101_;
			_tmp103_ = ciface;
			_tmp104_ = m;
			_tmp105_ = vala_method_get_base_interface_method (_tmp104_);
			_tmp106_ = _tmp105_;
			_tmp107_ = vala_get_ccode_vfunc_name (_tmp106_);
			_tmp108_ = _tmp107_;
			_tmp109_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp103_, _tmp108_);
			_tmp110_ = _tmp109_;
			_tmp111_ = cfunc;
			vala_ccode_function_add_assignment (_tmp102_, (ValaCCodeExpression*) _tmp110_, _tmp111_);
			_vala_ccode_node_unref0 (_tmp110_);
			_g_free0 (_tmp108_);
			_tmp112_ = m;
			_tmp113_ = vala_method_get_coroutine (_tmp112_);
			_tmp114_ = _tmp113_;
			if (_tmp114_) {
				gboolean _tmp115_ = FALSE;
				ValaMethod* _tmp116_;
				gboolean _tmp117_;
				gboolean _tmp118_;
				ValaMethod* _tmp130_;
				ValaMethod* _tmp131_;
				ValaMethod* _tmp132_;
				ValaCCodeExpression* _tmp133_;
				ValaCCodeExpression* _tmp134_;
				ValaCCodeFunction* _tmp135_;
				ValaCCodeFunction* _tmp136_;
				ValaCCodeIdentifier* _tmp137_;
				ValaMethod* _tmp138_;
				ValaMethod* _tmp139_;
				ValaMethod* _tmp140_;
				gchar* _tmp141_;
				gchar* _tmp142_;
				ValaCCodeMemberAccess* _tmp143_;
				ValaCCodeMemberAccess* _tmp144_;
				ValaCCodeExpression* _tmp145_;
				_tmp116_ = m;
				_tmp117_ = vala_method_get_is_abstract (_tmp116_);
				_tmp118_ = _tmp117_;
				if (_tmp118_) {
					_tmp115_ = TRUE;
				} else {
					ValaMethod* _tmp119_;
					gboolean _tmp120_;
					gboolean _tmp121_;
					_tmp119_ = m;
					_tmp120_ = vala_method_get_is_virtual (_tmp119_);
					_tmp121_ = _tmp120_;
					_tmp115_ = _tmp121_;
				}
				if (_tmp115_) {
					ValaMethod* _tmp122_;
					gchar* _tmp123_;
					gchar* _tmp124_;
					ValaCCodeIdentifier* _tmp125_;
					_tmp122_ = m;
					_tmp123_ = vala_get_ccode_finish_name (_tmp122_);
					_tmp124_ = _tmp123_;
					_tmp125_ = vala_ccode_identifier_new (_tmp124_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = (ValaCCodeExpression*) _tmp125_;
					_g_free0 (_tmp124_);
				} else {
					ValaMethod* _tmp126_;
					gchar* _tmp127_;
					gchar* _tmp128_;
					ValaCCodeIdentifier* _tmp129_;
					_tmp126_ = m;
					_tmp127_ = vala_get_ccode_finish_real_name (_tmp126_);
					_tmp128_ = _tmp127_;
					_tmp129_ = vala_ccode_identifier_new (_tmp128_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = (ValaCCodeExpression*) _tmp129_;
					_g_free0 (_tmp128_);
				}
				_tmp130_ = m;
				_tmp131_ = vala_method_get_base_interface_method (_tmp130_);
				_tmp132_ = _tmp131_;
				_tmp133_ = cfunc;
				_tmp134_ = vala_gtype_module_cast_method_pointer (self, _tmp132_, _tmp133_, (ValaObjectTypeSymbol*) iface, 2);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = _tmp134_;
				_tmp135_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp136_ = _tmp135_;
				_tmp137_ = ciface;
				_tmp138_ = m;
				_tmp139_ = vala_method_get_base_interface_method (_tmp138_);
				_tmp140_ = _tmp139_;
				_tmp141_ = vala_get_ccode_finish_vfunc_name (_tmp140_);
				_tmp142_ = _tmp141_;
				_tmp143_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp137_, _tmp142_);
				_tmp144_ = _tmp143_;
				_tmp145_ = cfunc;
				vala_ccode_function_add_assignment (_tmp136_, (ValaCCodeExpression*) _tmp144_, _tmp145_);
				_vala_ccode_node_unref0 (_tmp144_);
				_g_free0 (_tmp142_);
			}
			_vala_ccode_node_unref0 (cfunc);
			_vala_ccode_node_unref0 (ciface);
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (m);
		}
	}
	if (vala_code_node_has_attribute ((ValaCodeNode*) iface, "GenericAccessors")) {
		{
			ValaList* _p_list = NULL;
			ValaList* _tmp146_;
			gint _p_size = 0;
			ValaList* _tmp147_;
			gint _tmp148_;
			gint _tmp149_;
			gint _p_index = 0;
			_tmp146_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
			_p_list = _tmp146_;
			_tmp147_ = _p_list;
			_tmp148_ = vala_collection_get_size ((ValaCollection*) _tmp147_);
			_tmp149_ = _tmp148_;
			_p_size = _tmp149_;
			_p_index = -1;
			while (TRUE) {
				gint _tmp150_;
				gint _tmp151_;
				ValaTypeParameter* p = NULL;
				ValaList* _tmp152_;
				gpointer _tmp153_;
				ValaGenericType* p_type = NULL;
				ValaTypeParameter* _tmp154_;
				ValaGenericType* _tmp155_;
				ValaDataType* p_data_type = NULL;
				ValaGenericType* _tmp156_;
				ValaDataType* _tmp157_;
				ValaDataType* _tmp158_;
				ValaDataType* _tmp159_;
				ValaDataType* _tmp160_;
				ValaTypeParameter* _tmp161_;
				gchar* _tmp162_;
				gchar* _tmp163_;
				gchar* _tmp164_;
				gchar* _tmp165_;
				ValaDataType* _tmp166_;
				ValaCCodeExpression* _tmp167_;
				ValaCCodeExpression* _tmp168_;
				ValaTypeParameter* _tmp169_;
				ValaTypeParameter* _tmp170_;
				gchar* _tmp171_;
				gchar* _tmp172_;
				gchar* _tmp173_;
				gchar* _tmp174_;
				ValaDataType* _tmp175_;
				ValaDataType* _tmp176_;
				ValaSourceReference* _tmp177_;
				ValaSourceReference* _tmp178_;
				ValaCCodeExpression* _tmp179_;
				ValaCCodeExpression* _tmp180_;
				ValaTypeParameter* _tmp181_;
				ValaTypeParameter* _tmp182_;
				gchar* _tmp183_;
				gchar* _tmp184_;
				gchar* _tmp185_;
				gchar* _tmp186_;
				ValaDataType* _tmp187_;
				ValaCCodeExpression* _tmp188_;
				ValaCCodeExpression* _tmp189_;
				ValaTypeParameter* _tmp190_;
				_p_index = _p_index + 1;
				_tmp150_ = _p_index;
				_tmp151_ = _p_size;
				if (!(_tmp150_ < _tmp151_)) {
					break;
				}
				_tmp152_ = _p_list;
				_tmp153_ = vala_list_get (_tmp152_, _p_index);
				p = (ValaTypeParameter*) _tmp153_;
				_tmp154_ = p;
				_tmp155_ = vala_generic_type_new (_tmp154_, NULL);
				p_type = _tmp155_;
				_tmp156_ = p_type;
				_tmp157_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) cl);
				_tmp158_ = _tmp157_;
				_tmp159_ = vala_data_type_get_actual_type ((ValaDataType*) _tmp156_, _tmp158_, NULL, (ValaCodeNode*) cl);
				_tmp160_ = _tmp159_;
				_vala_code_node_unref0 (_tmp158_);
				p_data_type = _tmp160_;
				_tmp161_ = p;
				_tmp162_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp161_);
				_tmp163_ = _tmp162_;
				_tmp164_ = g_strdup_printf ("get_%s", _tmp163_);
				_tmp165_ = _tmp164_;
				_tmp166_ = p_data_type;
				_tmp167_ = vala_ccode_base_module_get_type_id_expression ((ValaCCodeBaseModule*) self, _tmp166_, FALSE);
				_tmp168_ = _tmp167_;
				_tmp169_ = p;
				vala_gtype_module_add_generic_accessor_function (self, _tmp165_, "GType", _tmp168_, _tmp169_, cl, iface);
				_vala_ccode_node_unref0 (_tmp168_);
				_g_free0 (_tmp165_);
				_g_free0 (_tmp163_);
				_tmp170_ = p;
				_tmp171_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp170_);
				_tmp172_ = _tmp171_;
				_tmp173_ = g_strdup_printf ("get_%s", _tmp172_);
				_tmp174_ = _tmp173_;
				_tmp175_ = p_data_type;
				_tmp176_ = p_data_type;
				_tmp177_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp176_);
				_tmp178_ = _tmp177_;
				_tmp179_ = vala_ccode_base_module_get_dup_func_expression ((ValaCCodeBaseModule*) self, _tmp175_, _tmp178_, FALSE);
				_tmp180_ = _tmp179_;
				_tmp181_ = p;
				vala_gtype_module_add_generic_accessor_function (self, _tmp174_, "GBoxedCopyFunc", _tmp180_, _tmp181_, cl, iface);
				_vala_ccode_node_unref0 (_tmp180_);
				_g_free0 (_tmp174_);
				_g_free0 (_tmp172_);
				_tmp182_ = p;
				_tmp183_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp182_);
				_tmp184_ = _tmp183_;
				_tmp185_ = g_strdup_printf ("get_%s", _tmp184_);
				_tmp186_ = _tmp185_;
				_tmp187_ = p_data_type;
				_tmp188_ = vala_ccode_base_module_get_destroy_func_expression ((ValaCCodeBaseModule*) self, _tmp187_, FALSE);
				_tmp189_ = _tmp188_;
				_tmp190_ = p;
				vala_gtype_module_add_generic_accessor_function (self, _tmp186_, "GDestroyNotify", _tmp189_, _tmp190_, cl, iface);
				_vala_ccode_node_unref0 (_tmp189_);
				_g_free0 (_tmp186_);
				_g_free0 (_tmp184_);
				_vala_code_node_unref0 (p_data_type);
				_vala_code_node_unref0 (p_type);
				_vala_code_node_unref0 (p);
			}
		}
	}
	_tmp191_ = vala_class_get_implicit_implementations (cl);
	_tmp192_ = _tmp191_;
	_tmp193_ = vala_map_map_iterator ((ValaMap*) _tmp192_);
	_tmp194_ = _tmp193_;
	_vala_map_unref0 (_tmp192_);
	it = _tmp194_;
	while (TRUE) {
		ValaMapIterator* _tmp195_;
		ValaMethod* m = NULL;
		ValaMapIterator* _tmp196_;
		gpointer _tmp197_;
		ValaMethod* _tmp198_;
		ValaSymbol* _tmp199_;
		ValaSymbol* _tmp200_;
		_tmp195_ = it;
		if (!vala_map_iterator_next (_tmp195_)) {
			break;
		}
		_tmp196_ = it;
		_tmp197_ = vala_map_iterator_get_key (_tmp196_);
		m = (ValaMethod*) _tmp197_;
		_tmp198_ = m;
		_tmp199_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp198_);
		_tmp200_ = _tmp199_;
		if (_tmp200_ == G_TYPE_CHECK_INSTANCE_CAST (iface, VALA_TYPE_SYMBOL, ValaSymbol)) {
			ValaMethod* base_method = NULL;
			ValaMapIterator* _tmp201_;
			gpointer _tmp202_;
			ValaMethod* _tmp203_;
			ValaCCodeFile* _tmp204_;
			ValaCCodeExpression* cfunc = NULL;
			ValaMethod* _tmp205_;
			gchar* _tmp206_;
			gchar* _tmp207_;
			ValaCCodeIdentifier* _tmp208_;
			ValaCCodeExpression* _tmp209_;
			ValaMethod* _tmp210_;
			ValaCCodeExpression* _tmp211_;
			ValaCCodeExpression* _tmp212_;
			ValaCCodeIdentifier* ciface = NULL;
			ValaCCodeIdentifier* _tmp213_;
			ValaCCodeFunction* _tmp214_;
			ValaCCodeFunction* _tmp215_;
			ValaCCodeIdentifier* _tmp216_;
			ValaMethod* _tmp217_;
			gchar* _tmp218_;
			gchar* _tmp219_;
			ValaCCodeMemberAccess* _tmp220_;
			ValaCCodeMemberAccess* _tmp221_;
			ValaCCodeExpression* _tmp222_;
			_tmp201_ = it;
			_tmp202_ = vala_map_iterator_get_value (_tmp201_);
			base_method = (ValaMethod*) _tmp202_;
			_tmp203_ = base_method;
			_tmp204_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp203_, _tmp204_);
			_tmp205_ = base_method;
			_tmp206_ = vala_get_ccode_name ((ValaCodeNode*) _tmp205_);
			_tmp207_ = _tmp206_;
			_tmp208_ = vala_ccode_identifier_new (_tmp207_);
			_tmp209_ = (ValaCCodeExpression*) _tmp208_;
			_g_free0 (_tmp207_);
			cfunc = _tmp209_;
			_tmp210_ = m;
			_tmp211_ = cfunc;
			_tmp212_ = vala_gtype_module_cast_method_pointer (self, _tmp210_, _tmp211_, (ValaObjectTypeSymbol*) iface, 3);
			_vala_ccode_node_unref0 (cfunc);
			cfunc = _tmp212_;
			_tmp213_ = vala_ccode_identifier_new ("iface");
			ciface = _tmp213_;
			_tmp214_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp215_ = _tmp214_;
			_tmp216_ = ciface;
			_tmp217_ = m;
			_tmp218_ = vala_get_ccode_vfunc_name (_tmp217_);
			_tmp219_ = _tmp218_;
			_tmp220_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp216_, _tmp219_);
			_tmp221_ = _tmp220_;
			_tmp222_ = cfunc;
			vala_ccode_function_add_assignment (_tmp215_, (ValaCCodeExpression*) _tmp221_, _tmp222_);
			_vala_ccode_node_unref0 (_tmp221_);
			_g_free0 (_tmp219_);
			_vala_ccode_node_unref0 (ciface);
			_vala_ccode_node_unref0 (cfunc);
			_vala_code_node_unref0 (base_method);
		}
		_vala_code_node_unref0 (m);
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp223_;
		gint _prop_size = 0;
		ValaList* _tmp224_;
		gint _tmp225_;
		gint _tmp226_;
		gint _prop_index = 0;
		_tmp223_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
		_prop_list = _tmp223_;
		_tmp224_ = _prop_list;
		_tmp225_ = vala_collection_get_size ((ValaCollection*) _tmp224_);
		_tmp226_ = _tmp225_;
		_prop_size = _tmp226_;
		_prop_index = -1;
		while (TRUE) {
			gint _tmp227_;
			gint _tmp228_;
			ValaProperty* prop = NULL;
			ValaList* _tmp229_;
			gpointer _tmp230_;
			ValaProperty* _tmp231_;
			ValaProperty* _tmp232_;
			ValaProperty* _tmp233_;
			ValaObjectTypeSymbol* base_type = NULL;
			ValaProperty* _tmp234_;
			ValaProperty* _tmp235_;
			ValaProperty* _tmp236_;
			ValaSymbol* _tmp237_;
			ValaSymbol* _tmp238_;
			ValaObjectTypeSymbol* _tmp239_;
			ValaObjectTypeSymbol* _tmp240_;
			ValaCCodeIdentifier* ciface = NULL;
			ValaCCodeIdentifier* _tmp241_;
			gboolean _tmp242_ = FALSE;
			ValaProperty* _tmp243_;
			ValaProperty* _tmp244_;
			ValaProperty* _tmp245_;
			_prop_index = _prop_index + 1;
			_tmp227_ = _prop_index;
			_tmp228_ = _prop_size;
			if (!(_tmp227_ < _tmp228_)) {
				break;
			}
			_tmp229_ = _prop_list;
			_tmp230_ = vala_list_get (_tmp229_, _prop_index);
			prop = (ValaProperty*) _tmp230_;
			_tmp231_ = prop;
			_tmp232_ = vala_property_get_base_interface_property (_tmp231_);
			_tmp233_ = _tmp232_;
			if (_tmp233_ == NULL) {
				_vala_code_node_unref0 (prop);
				continue;
			}
			_tmp234_ = prop;
			_tmp235_ = vala_property_get_base_interface_property (_tmp234_);
			_tmp236_ = _tmp235_;
			_tmp237_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp236_);
			_tmp238_ = _tmp237_;
			_tmp239_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp238_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
			base_type = _tmp239_;
			_tmp240_ = base_type;
			if (_tmp240_ != G_TYPE_CHECK_INSTANCE_CAST (iface, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol)) {
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (prop);
				continue;
			}
			_tmp241_ = vala_ccode_identifier_new ("iface");
			ciface = _tmp241_;
			_tmp243_ = prop;
			_tmp244_ = vala_property_get_base_interface_property (_tmp243_);
			_tmp245_ = _tmp244_;
			if (!vala_get_ccode_no_accessor_method (_tmp245_)) {
				ValaProperty* _tmp246_;
				ValaProperty* _tmp247_;
				ValaProperty* _tmp248_;
				_tmp246_ = prop;
				_tmp247_ = vala_property_get_base_interface_property (_tmp246_);
				_tmp248_ = _tmp247_;
				_tmp242_ = !vala_get_ccode_concrete_accessor (_tmp248_);
			} else {
				_tmp242_ = FALSE;
			}
			if (_tmp242_) {
				ValaProperty* _tmp249_;
				ValaPropertyAccessor* _tmp250_;
				ValaPropertyAccessor* _tmp251_;
				ValaProperty* _tmp303_;
				ValaPropertyAccessor* _tmp304_;
				ValaPropertyAccessor* _tmp305_;
				_tmp249_ = prop;
				_tmp250_ = vala_property_get_get_accessor (_tmp249_);
				_tmp251_ = _tmp250_;
				if (_tmp251_ != NULL) {
					ValaProperty* _tmp252_;
					ValaProperty* _tmp253_;
					ValaProperty* _tmp254_;
					ValaPropertyAccessor* _tmp255_;
					ValaPropertyAccessor* _tmp256_;
					ValaCCodeFile* _tmp257_;
					gchar* cname = NULL;
					ValaProperty* _tmp258_;
					ValaPropertyAccessor* _tmp259_;
					ValaPropertyAccessor* _tmp260_;
					gchar* _tmp261_;
					gboolean _tmp262_ = FALSE;
					ValaProperty* _tmp263_;
					gboolean _tmp264_;
					gboolean _tmp265_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp273_;
					ValaCCodeIdentifier* _tmp274_;
					gboolean _tmp275_ = FALSE;
					ValaProperty* _tmp276_;
					gboolean _tmp277_;
					gboolean _tmp278_;
					ValaCCodeFunction* _tmp292_;
					ValaCCodeFunction* _tmp293_;
					ValaCCodeIdentifier* _tmp294_;
					ValaProperty* _tmp295_;
					const gchar* _tmp296_;
					const gchar* _tmp297_;
					gchar* _tmp298_;
					gchar* _tmp299_;
					ValaCCodeMemberAccess* _tmp300_;
					ValaCCodeMemberAccess* _tmp301_;
					ValaCCodeExpression* _tmp302_;
					_tmp252_ = prop;
					_tmp253_ = vala_property_get_base_interface_property (_tmp252_);
					_tmp254_ = _tmp253_;
					_tmp255_ = vala_property_get_get_accessor (_tmp254_);
					_tmp256_ = _tmp255_;
					_tmp257_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp256_, _tmp257_);
					_tmp258_ = prop;
					_tmp259_ = vala_property_get_get_accessor (_tmp258_);
					_tmp260_ = _tmp259_;
					_tmp261_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp260_);
					cname = _tmp261_;
					_tmp263_ = prop;
					_tmp264_ = vala_property_get_is_abstract (_tmp263_);
					_tmp265_ = _tmp264_;
					if (_tmp265_) {
						_tmp262_ = TRUE;
					} else {
						ValaProperty* _tmp266_;
						gboolean _tmp267_;
						gboolean _tmp268_;
						_tmp266_ = prop;
						_tmp267_ = vala_property_get_is_virtual (_tmp266_);
						_tmp268_ = _tmp267_;
						_tmp262_ = _tmp268_;
					}
					if (_tmp262_) {
						ValaProperty* _tmp269_;
						ValaPropertyAccessor* _tmp270_;
						ValaPropertyAccessor* _tmp271_;
						gchar* _tmp272_;
						_tmp269_ = prop;
						_tmp270_ = vala_property_get_get_accessor (_tmp269_);
						_tmp271_ = _tmp270_;
						_tmp272_ = vala_get_ccode_name ((ValaCodeNode*) _tmp271_);
						_g_free0 (cname);
						cname = _tmp272_;
					}
					_tmp273_ = cname;
					_tmp274_ = vala_ccode_identifier_new (_tmp273_);
					cfunc = (ValaCCodeExpression*) _tmp274_;
					_tmp276_ = prop;
					_tmp277_ = vala_property_get_is_abstract (_tmp276_);
					_tmp278_ = _tmp277_;
					if (_tmp278_) {
						_tmp275_ = TRUE;
					} else {
						ValaProperty* _tmp279_;
						gboolean _tmp280_;
						gboolean _tmp281_;
						_tmp279_ = prop;
						_tmp280_ = vala_property_get_is_virtual (_tmp279_);
						_tmp281_ = _tmp280_;
						_tmp275_ = _tmp281_;
					}
					if (_tmp275_) {
						ValaProperty* _tmp282_;
						ValaProperty* _tmp283_;
						ValaProperty* _tmp284_;
						ValaPropertyAccessor* _tmp285_;
						ValaPropertyAccessor* _tmp286_;
						ValaMethod* _tmp287_;
						ValaMethod* _tmp288_;
						ValaCCodeExpression* _tmp289_;
						ValaObjectTypeSymbol* _tmp290_;
						ValaCCodeExpression* _tmp291_;
						_tmp282_ = prop;
						_tmp283_ = vala_property_get_base_interface_property (_tmp282_);
						_tmp284_ = _tmp283_;
						_tmp285_ = vala_property_get_get_accessor (_tmp284_);
						_tmp286_ = _tmp285_;
						_tmp287_ = vala_property_accessor_get_method (_tmp286_);
						_tmp288_ = _tmp287_;
						_tmp289_ = cfunc;
						_tmp290_ = base_type;
						_tmp291_ = vala_gtype_module_cast_method_pointer (self, _tmp288_, _tmp289_, _tmp290_, 3);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp291_;
						_vala_code_node_unref0 (_tmp288_);
					}
					_tmp292_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp293_ = _tmp292_;
					_tmp294_ = ciface;
					_tmp295_ = prop;
					_tmp296_ = vala_symbol_get_name ((ValaSymbol*) _tmp295_);
					_tmp297_ = _tmp296_;
					_tmp298_ = g_strdup_printf ("get_%s", _tmp297_);
					_tmp299_ = _tmp298_;
					_tmp300_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp294_, _tmp299_);
					_tmp301_ = _tmp300_;
					_tmp302_ = cfunc;
					vala_ccode_function_add_assignment (_tmp293_, (ValaCCodeExpression*) _tmp301_, _tmp302_);
					_vala_ccode_node_unref0 (_tmp301_);
					_g_free0 (_tmp299_);
					_vala_ccode_node_unref0 (cfunc);
					_g_free0 (cname);
				}
				_tmp303_ = prop;
				_tmp304_ = vala_property_get_set_accessor (_tmp303_);
				_tmp305_ = _tmp304_;
				if (_tmp305_ != NULL) {
					ValaProperty* _tmp306_;
					ValaProperty* _tmp307_;
					ValaProperty* _tmp308_;
					ValaPropertyAccessor* _tmp309_;
					ValaPropertyAccessor* _tmp310_;
					ValaCCodeFile* _tmp311_;
					gchar* cname = NULL;
					ValaProperty* _tmp312_;
					ValaPropertyAccessor* _tmp313_;
					ValaPropertyAccessor* _tmp314_;
					gchar* _tmp315_;
					gboolean _tmp316_ = FALSE;
					ValaProperty* _tmp317_;
					gboolean _tmp318_;
					gboolean _tmp319_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp327_;
					ValaCCodeIdentifier* _tmp328_;
					gboolean _tmp329_ = FALSE;
					ValaProperty* _tmp330_;
					gboolean _tmp331_;
					gboolean _tmp332_;
					ValaCCodeFunction* _tmp346_;
					ValaCCodeFunction* _tmp347_;
					ValaCCodeIdentifier* _tmp348_;
					ValaProperty* _tmp349_;
					const gchar* _tmp350_;
					const gchar* _tmp351_;
					gchar* _tmp352_;
					gchar* _tmp353_;
					ValaCCodeMemberAccess* _tmp354_;
					ValaCCodeMemberAccess* _tmp355_;
					ValaCCodeExpression* _tmp356_;
					_tmp306_ = prop;
					_tmp307_ = vala_property_get_base_interface_property (_tmp306_);
					_tmp308_ = _tmp307_;
					_tmp309_ = vala_property_get_set_accessor (_tmp308_);
					_tmp310_ = _tmp309_;
					_tmp311_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp310_, _tmp311_);
					_tmp312_ = prop;
					_tmp313_ = vala_property_get_set_accessor (_tmp312_);
					_tmp314_ = _tmp313_;
					_tmp315_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp314_);
					cname = _tmp315_;
					_tmp317_ = prop;
					_tmp318_ = vala_property_get_is_abstract (_tmp317_);
					_tmp319_ = _tmp318_;
					if (_tmp319_) {
						_tmp316_ = TRUE;
					} else {
						ValaProperty* _tmp320_;
						gboolean _tmp321_;
						gboolean _tmp322_;
						_tmp320_ = prop;
						_tmp321_ = vala_property_get_is_virtual (_tmp320_);
						_tmp322_ = _tmp321_;
						_tmp316_ = _tmp322_;
					}
					if (_tmp316_) {
						ValaProperty* _tmp323_;
						ValaPropertyAccessor* _tmp324_;
						ValaPropertyAccessor* _tmp325_;
						gchar* _tmp326_;
						_tmp323_ = prop;
						_tmp324_ = vala_property_get_set_accessor (_tmp323_);
						_tmp325_ = _tmp324_;
						_tmp326_ = vala_get_ccode_name ((ValaCodeNode*) _tmp325_);
						_g_free0 (cname);
						cname = _tmp326_;
					}
					_tmp327_ = cname;
					_tmp328_ = vala_ccode_identifier_new (_tmp327_);
					cfunc = (ValaCCodeExpression*) _tmp328_;
					_tmp330_ = prop;
					_tmp331_ = vala_property_get_is_abstract (_tmp330_);
					_tmp332_ = _tmp331_;
					if (_tmp332_) {
						_tmp329_ = TRUE;
					} else {
						ValaProperty* _tmp333_;
						gboolean _tmp334_;
						gboolean _tmp335_;
						_tmp333_ = prop;
						_tmp334_ = vala_property_get_is_virtual (_tmp333_);
						_tmp335_ = _tmp334_;
						_tmp329_ = _tmp335_;
					}
					if (_tmp329_) {
						ValaProperty* _tmp336_;
						ValaProperty* _tmp337_;
						ValaProperty* _tmp338_;
						ValaPropertyAccessor* _tmp339_;
						ValaPropertyAccessor* _tmp340_;
						ValaMethod* _tmp341_;
						ValaMethod* _tmp342_;
						ValaCCodeExpression* _tmp343_;
						ValaObjectTypeSymbol* _tmp344_;
						ValaCCodeExpression* _tmp345_;
						_tmp336_ = prop;
						_tmp337_ = vala_property_get_base_interface_property (_tmp336_);
						_tmp338_ = _tmp337_;
						_tmp339_ = vala_property_get_set_accessor (_tmp338_);
						_tmp340_ = _tmp339_;
						_tmp341_ = vala_property_accessor_get_method (_tmp340_);
						_tmp342_ = _tmp341_;
						_tmp343_ = cfunc;
						_tmp344_ = base_type;
						_tmp345_ = vala_gtype_module_cast_method_pointer (self, _tmp342_, _tmp343_, _tmp344_, 3);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp345_;
						_vala_code_node_unref0 (_tmp342_);
					}
					_tmp346_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp347_ = _tmp346_;
					_tmp348_ = ciface;
					_tmp349_ = prop;
					_tmp350_ = vala_symbol_get_name ((ValaSymbol*) _tmp349_);
					_tmp351_ = _tmp350_;
					_tmp352_ = g_strdup_printf ("set_%s", _tmp351_);
					_tmp353_ = _tmp352_;
					_tmp354_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp348_, _tmp353_);
					_tmp355_ = _tmp354_;
					_tmp356_ = cfunc;
					vala_ccode_function_add_assignment (_tmp347_, (ValaCCodeExpression*) _tmp355_, _tmp356_);
					_vala_ccode_node_unref0 (_tmp355_);
					_g_free0 (_tmp353_);
					_vala_ccode_node_unref0 (cfunc);
					_g_free0 (cname);
				}
			}
			_vala_ccode_node_unref0 (ciface);
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (prop);
		}
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp357_;
		gint _prop_size = 0;
		ValaList* _tmp358_;
		gint _tmp359_;
		gint _tmp360_;
		gint _prop_index = 0;
		_tmp357_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) iface);
		_prop_list = _tmp357_;
		_tmp358_ = _prop_list;
		_tmp359_ = vala_collection_get_size ((ValaCollection*) _tmp358_);
		_tmp360_ = _tmp359_;
		_prop_size = _tmp360_;
		_prop_index = -1;
		while (TRUE) {
			gint _tmp361_;
			gint _tmp362_;
			ValaProperty* prop = NULL;
			ValaList* _tmp363_;
			gpointer _tmp364_;
			ValaProperty* _tmp365_;
			gboolean _tmp366_;
			gboolean _tmp367_;
			ValaProperty* cl_prop = NULL;
			ValaClass* base_class = NULL;
			ValaClass* _tmp368_;
			gboolean _tmp384_ = FALSE;
			ValaClass* _tmp385_;
			_prop_index = _prop_index + 1;
			_tmp361_ = _prop_index;
			_tmp362_ = _prop_size;
			if (!(_tmp361_ < _tmp362_)) {
				break;
			}
			_tmp363_ = _prop_list;
			_tmp364_ = vala_list_get (_tmp363_, _prop_index);
			prop = (ValaProperty*) _tmp364_;
			_tmp365_ = prop;
			_tmp366_ = vala_property_get_is_abstract (_tmp365_);
			_tmp367_ = _tmp366_;
			if (!_tmp367_) {
				_vala_code_node_unref0 (prop);
				continue;
			}
			cl_prop = NULL;
			_tmp368_ = _vala_code_node_ref0 (cl);
			base_class = _tmp368_;
			while (TRUE) {
				gboolean _tmp369_ = FALSE;
				ValaClass* _tmp370_;
				ValaClass* _tmp372_;
				ValaScope* _tmp373_;
				ValaScope* _tmp374_;
				ValaProperty* _tmp375_;
				const gchar* _tmp376_;
				const gchar* _tmp377_;
				ValaSymbol* _tmp378_;
				ValaProperty* _tmp379_;
				ValaClass* _tmp380_;
				ValaClass* _tmp381_;
				ValaClass* _tmp382_;
				ValaClass* _tmp383_;
				_tmp370_ = base_class;
				if (_tmp370_ != NULL) {
					ValaProperty* _tmp371_;
					_tmp371_ = cl_prop;
					_tmp369_ = _tmp371_ == NULL;
				} else {
					_tmp369_ = FALSE;
				}
				if (!_tmp369_) {
					break;
				}
				_tmp372_ = base_class;
				_tmp373_ = vala_symbol_get_scope ((ValaSymbol*) _tmp372_);
				_tmp374_ = _tmp373_;
				_tmp375_ = prop;
				_tmp376_ = vala_symbol_get_name ((ValaSymbol*) _tmp375_);
				_tmp377_ = _tmp376_;
				_tmp378_ = vala_scope_lookup (_tmp374_, _tmp377_);
				_tmp379_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp378_, VALA_TYPE_PROPERTY) ? ((ValaProperty*) _tmp378_) : NULL;
				if (_tmp379_ == NULL) {
					_vala_code_node_unref0 (_tmp378_);
				}
				_vala_code_node_unref0 (cl_prop);
				cl_prop = _tmp379_;
				_tmp380_ = base_class;
				_tmp381_ = vala_class_get_base_class (_tmp380_);
				_tmp382_ = _tmp381_;
				_tmp383_ = _vala_code_node_ref0 (_tmp382_);
				_vala_code_node_unref0 (base_class);
				base_class = _tmp383_;
			}
			_tmp385_ = base_class;
			if (_tmp385_ != NULL) {
				ValaProperty* _tmp386_;
				ValaSymbol* _tmp387_;
				ValaSymbol* _tmp388_;
				_tmp386_ = cl_prop;
				_tmp387_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp386_);
				_tmp388_ = _tmp387_;
				_tmp384_ = _tmp388_ != G_TYPE_CHECK_INSTANCE_CAST (cl, VALA_TYPE_SYMBOL, ValaSymbol);
			} else {
				_tmp384_ = FALSE;
			}
			if (_tmp384_) {
				ValaProperty* base_property = NULL;
				ValaProperty* _tmp389_;
				ValaProperty* _tmp390_;
				ValaProperty* _tmp391_;
				ValaProperty* _tmp392_;
				ValaProperty* _tmp393_;
				ValaProperty* _tmp405_;
				ValaProperty* _tmp406_;
				ValaCCodeIdentifier* ciface = NULL;
				ValaCCodeIdentifier* _tmp407_;
				gboolean _tmp408_ = FALSE;
				ValaProperty* _tmp409_;
				ValaPropertyAccessor* _tmp410_;
				ValaPropertyAccessor* _tmp411_;
				gboolean _tmp443_ = FALSE;
				ValaProperty* _tmp444_;
				ValaPropertyAccessor* _tmp445_;
				ValaPropertyAccessor* _tmp446_;
				_tmp389_ = cl_prop;
				_tmp390_ = _vala_code_node_ref0 (_tmp389_);
				base_property = _tmp390_;
				_tmp391_ = cl_prop;
				_tmp392_ = vala_property_get_base_property (_tmp391_);
				_tmp393_ = _tmp392_;
				if (_tmp393_ != NULL) {
					ValaProperty* _tmp394_;
					ValaProperty* _tmp395_;
					ValaProperty* _tmp396_;
					ValaProperty* _tmp397_;
					_tmp394_ = cl_prop;
					_tmp395_ = vala_property_get_base_property (_tmp394_);
					_tmp396_ = _tmp395_;
					_tmp397_ = _vala_code_node_ref0 (_tmp396_);
					_vala_code_node_unref0 (base_property);
					base_property = _tmp397_;
				} else {
					ValaProperty* _tmp398_;
					ValaProperty* _tmp399_;
					ValaProperty* _tmp400_;
					_tmp398_ = cl_prop;
					_tmp399_ = vala_property_get_base_interface_property (_tmp398_);
					_tmp400_ = _tmp399_;
					if (_tmp400_ != NULL) {
						ValaProperty* _tmp401_;
						ValaProperty* _tmp402_;
						ValaProperty* _tmp403_;
						ValaProperty* _tmp404_;
						_tmp401_ = cl_prop;
						_tmp402_ = vala_property_get_base_interface_property (_tmp401_);
						_tmp403_ = _tmp402_;
						_tmp404_ = _vala_code_node_ref0 (_tmp403_);
						_vala_code_node_unref0 (base_property);
						base_property = _tmp404_;
					}
				}
				_tmp405_ = prop;
				_tmp406_ = base_property;
				if (_tmp405_ == _tmp406_) {
					_vala_code_node_unref0 (base_property);
					_vala_code_node_unref0 (base_class);
					_vala_code_node_unref0 (cl_prop);
					_vala_code_node_unref0 (prop);
					continue;
				}
				_tmp407_ = vala_ccode_identifier_new ("iface");
				ciface = _tmp407_;
				_tmp409_ = base_property;
				_tmp410_ = vala_property_get_get_accessor (_tmp409_);
				_tmp411_ = _tmp410_;
				if (_tmp411_ != NULL) {
					ValaProperty* _tmp412_;
					ValaPropertyAccessor* _tmp413_;
					ValaPropertyAccessor* _tmp414_;
					_tmp412_ = prop;
					_tmp413_ = vala_property_get_get_accessor (_tmp412_);
					_tmp414_ = _tmp413_;
					_tmp408_ = _tmp414_ != NULL;
				} else {
					_tmp408_ = FALSE;
				}
				if (_tmp408_) {
					ValaProperty* _tmp415_;
					ValaPropertyAccessor* _tmp416_;
					ValaPropertyAccessor* _tmp417_;
					ValaCCodeFile* _tmp418_;
					gchar* cname = NULL;
					ValaProperty* _tmp419_;
					ValaPropertyAccessor* _tmp420_;
					ValaPropertyAccessor* _tmp421_;
					gchar* _tmp422_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp423_;
					ValaCCodeIdentifier* _tmp424_;
					ValaProperty* _tmp425_;
					ValaPropertyAccessor* _tmp426_;
					ValaPropertyAccessor* _tmp427_;
					ValaMethod* _tmp428_;
					ValaMethod* _tmp429_;
					ValaCCodeExpression* _tmp430_;
					ValaCCodeExpression* _tmp431_;
					ValaCCodeFunction* _tmp432_;
					ValaCCodeFunction* _tmp433_;
					ValaCCodeIdentifier* _tmp434_;
					ValaProperty* _tmp435_;
					const gchar* _tmp436_;
					const gchar* _tmp437_;
					gchar* _tmp438_;
					gchar* _tmp439_;
					ValaCCodeMemberAccess* _tmp440_;
					ValaCCodeMemberAccess* _tmp441_;
					ValaCCodeExpression* _tmp442_;
					_tmp415_ = base_property;
					_tmp416_ = vala_property_get_get_accessor (_tmp415_);
					_tmp417_ = _tmp416_;
					_tmp418_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp417_, _tmp418_);
					_tmp419_ = base_property;
					_tmp420_ = vala_property_get_get_accessor (_tmp419_);
					_tmp421_ = _tmp420_;
					_tmp422_ = vala_get_ccode_name ((ValaCodeNode*) _tmp421_);
					cname = _tmp422_;
					_tmp423_ = cname;
					_tmp424_ = vala_ccode_identifier_new (_tmp423_);
					cfunc = (ValaCCodeExpression*) _tmp424_;
					_tmp425_ = base_property;
					_tmp426_ = vala_property_get_get_accessor (_tmp425_);
					_tmp427_ = _tmp426_;
					_tmp428_ = vala_property_accessor_get_method (_tmp427_);
					_tmp429_ = _tmp428_;
					_tmp430_ = cfunc;
					_tmp431_ = vala_gtype_module_cast_method_pointer (self, _tmp429_, _tmp430_, (ValaObjectTypeSymbol*) iface, 3);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp431_;
					_vala_code_node_unref0 (_tmp429_);
					_tmp432_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp433_ = _tmp432_;
					_tmp434_ = ciface;
					_tmp435_ = prop;
					_tmp436_ = vala_symbol_get_name ((ValaSymbol*) _tmp435_);
					_tmp437_ = _tmp436_;
					_tmp438_ = g_strdup_printf ("get_%s", _tmp437_);
					_tmp439_ = _tmp438_;
					_tmp440_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp434_, _tmp439_);
					_tmp441_ = _tmp440_;
					_tmp442_ = cfunc;
					vala_ccode_function_add_assignment (_tmp433_, (ValaCCodeExpression*) _tmp441_, _tmp442_);
					_vala_ccode_node_unref0 (_tmp441_);
					_g_free0 (_tmp439_);
					_vala_ccode_node_unref0 (cfunc);
					_g_free0 (cname);
				}
				_tmp444_ = base_property;
				_tmp445_ = vala_property_get_set_accessor (_tmp444_);
				_tmp446_ = _tmp445_;
				if (_tmp446_ != NULL) {
					ValaProperty* _tmp447_;
					ValaPropertyAccessor* _tmp448_;
					ValaPropertyAccessor* _tmp449_;
					_tmp447_ = prop;
					_tmp448_ = vala_property_get_set_accessor (_tmp447_);
					_tmp449_ = _tmp448_;
					_tmp443_ = _tmp449_ != NULL;
				} else {
					_tmp443_ = FALSE;
				}
				if (_tmp443_) {
					ValaProperty* _tmp450_;
					ValaPropertyAccessor* _tmp451_;
					ValaPropertyAccessor* _tmp452_;
					ValaCCodeFile* _tmp453_;
					gchar* cname = NULL;
					ValaProperty* _tmp454_;
					ValaPropertyAccessor* _tmp455_;
					ValaPropertyAccessor* _tmp456_;
					gchar* _tmp457_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp458_;
					ValaCCodeIdentifier* _tmp459_;
					ValaProperty* _tmp460_;
					ValaPropertyAccessor* _tmp461_;
					ValaPropertyAccessor* _tmp462_;
					ValaMethod* _tmp463_;
					ValaMethod* _tmp464_;
					ValaCCodeExpression* _tmp465_;
					ValaCCodeExpression* _tmp466_;
					ValaCCodeFunction* _tmp467_;
					ValaCCodeFunction* _tmp468_;
					ValaCCodeIdentifier* _tmp469_;
					ValaProperty* _tmp470_;
					const gchar* _tmp471_;
					const gchar* _tmp472_;
					gchar* _tmp473_;
					gchar* _tmp474_;
					ValaCCodeMemberAccess* _tmp475_;
					ValaCCodeMemberAccess* _tmp476_;
					ValaCCodeExpression* _tmp477_;
					_tmp450_ = base_property;
					_tmp451_ = vala_property_get_set_accessor (_tmp450_);
					_tmp452_ = _tmp451_;
					_tmp453_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp452_, _tmp453_);
					_tmp454_ = base_property;
					_tmp455_ = vala_property_get_set_accessor (_tmp454_);
					_tmp456_ = _tmp455_;
					_tmp457_ = vala_get_ccode_name ((ValaCodeNode*) _tmp456_);
					cname = _tmp457_;
					_tmp458_ = cname;
					_tmp459_ = vala_ccode_identifier_new (_tmp458_);
					cfunc = (ValaCCodeExpression*) _tmp459_;
					_tmp460_ = base_property;
					_tmp461_ = vala_property_get_set_accessor (_tmp460_);
					_tmp462_ = _tmp461_;
					_tmp463_ = vala_property_accessor_get_method (_tmp462_);
					_tmp464_ = _tmp463_;
					_tmp465_ = cfunc;
					_tmp466_ = vala_gtype_module_cast_method_pointer (self, _tmp464_, _tmp465_, (ValaObjectTypeSymbol*) iface, 3);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp466_;
					_vala_code_node_unref0 (_tmp464_);
					_tmp467_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp468_ = _tmp467_;
					_tmp469_ = ciface;
					_tmp470_ = prop;
					_tmp471_ = vala_symbol_get_name ((ValaSymbol*) _tmp470_);
					_tmp472_ = _tmp471_;
					_tmp473_ = g_strdup_printf ("set_%s", _tmp472_);
					_tmp474_ = _tmp473_;
					_tmp475_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp469_, _tmp474_);
					_tmp476_ = _tmp475_;
					_tmp477_ = cfunc;
					vala_ccode_function_add_assignment (_tmp468_, (ValaCCodeExpression*) _tmp476_, _tmp477_);
					_vala_ccode_node_unref0 (_tmp476_);
					_g_free0 (_tmp474_);
					_vala_ccode_node_unref0 (cfunc);
					_g_free0 (cname);
				}
				_vala_ccode_node_unref0 (ciface);
				_vala_code_node_unref0 (base_property);
			}
			_vala_code_node_unref0 (base_class);
			_vala_code_node_unref0 (cl_prop);
			_vala_code_node_unref0 (prop);
		}
	}
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp478_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp479_ = iface_init;
	vala_ccode_file_add_function (_tmp478_, _tmp479_);
	_vala_map_iterator_unref0 (it);
	_vala_ccode_node_unref0 (parent_var_decl);
	_vala_ccode_node_unref0 (parent_decl);
	_g_free0 (parent_iface_var);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (iface_init);
}

static ValaCCodeExpression*
vala_gtype_module_cast_method_pointer (ValaGTypeModule* self,
                                       ValaMethod* m,
                                       ValaCCodeExpression* cfunc,
                                       ValaObjectTypeSymbol* base_type,
                                       gint direction)
{
	gchar* cast = NULL;
	gboolean _tmp0_ = FALSE;
	ValaCCodeFunctionDeclarator* vdeclarator = NULL;
	gchar* _tmp9_;
	gchar* _tmp10_;
	ValaCCodeFunctionDeclarator* _tmp11_;
	ValaCCodeFunctionDeclarator* _tmp12_;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp13_;
	GEqualFunc _tmp14_;
	GEqualFunc _tmp15_;
	ValaHashMap* _tmp16_;
	ValaCCodeFile* _tmp17_;
	ValaHashMap* _tmp18_;
	ValaCCodeFunction* _tmp19_;
	ValaCCodeFunction* _tmp20_;
	ValaCCodeFunctionDeclarator* _tmp21_;
	gint last_pos = 0;
	gint min_pos = 0;
	gchar* cast_args = NULL;
	gchar* _tmp22_;
	const gchar* _tmp47_;
	const gchar* _tmp48_;
	gchar* _tmp49_;
	const gchar* _tmp50_;
	ValaCCodeCastExpression* _tmp51_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (m != NULL, NULL);
	g_return_val_if_fail (cfunc != NULL, NULL);
	g_return_val_if_fail (base_type != NULL, NULL);
	if (direction == 1) {
		_tmp0_ = TRUE;
	} else {
		ValaDataType* _tmp1_;
		ValaDataType* _tmp2_;
		_tmp1_ = vala_callable_get_return_type ((ValaCallable*) m);
		_tmp2_ = _tmp1_;
		_tmp0_ = vala_data_type_is_real_non_null_struct_type (_tmp2_);
	}
	if (_tmp0_) {
		gchar* _tmp3_;
		_tmp3_ = g_strdup ("void (*)");
		_g_free0 (cast);
		cast = _tmp3_;
	} else {
		ValaDataType* _tmp4_;
		ValaDataType* _tmp5_;
		gchar* _tmp6_;
		gchar* _tmp7_;
		gchar* _tmp8_;
		_tmp4_ = vala_callable_get_return_type ((ValaCallable*) m);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_get_ccode_name ((ValaCodeNode*) _tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = g_strdup_printf ("%s (*)", _tmp7_);
		_g_free0 (cast);
		cast = _tmp8_;
		_g_free0 (_tmp7_);
	}
	_tmp9_ = vala_get_ccode_vfunc_name (m);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_function_declarator_new (_tmp10_);
	_tmp12_ = _tmp11_;
	_g_free0 (_tmp10_);
	vdeclarator = _tmp12_;
	_tmp13_ = g_direct_hash;
	_tmp14_ = g_direct_equal;
	_tmp15_ = g_direct_equal;
	_tmp16_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp13_, _tmp14_, _tmp15_);
	cparam_map = _tmp16_;
	_tmp17_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp18_ = cparam_map;
	_tmp19_ = vala_ccode_function_new ("fake", "void");
	_tmp20_ = _tmp19_;
	_tmp21_ = vdeclarator;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, m, _tmp17_, (ValaMap*) _tmp18_, _tmp20_, _tmp21_, NULL, NULL, direction);
	_vala_ccode_node_unref0 (_tmp20_);
	last_pos = -1;
	_tmp22_ = g_strdup ("");
	cast_args = _tmp22_;
	while (TRUE) {
		ValaCCodeParameter* cparam = NULL;
		ValaHashMap* _tmp35_;
		gpointer _tmp36_;
		ValaCCodeParameter* _tmp37_;
		gboolean _tmp38_;
		gboolean _tmp39_;
		min_pos = -1;
		{
			ValaIterator* _pos_it = NULL;
			ValaHashMap* _tmp23_;
			ValaSet* _tmp24_;
			ValaSet* _tmp25_;
			ValaIterator* _tmp26_;
			ValaIterator* _tmp27_;
			_tmp23_ = cparam_map;
			_tmp24_ = vala_map_get_keys ((ValaMap*) _tmp23_);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_iterable_iterator ((ValaIterable*) _tmp25_);
			_tmp27_ = _tmp26_;
			_vala_iterable_unref0 (_tmp25_);
			_pos_it = _tmp27_;
			while (TRUE) {
				ValaIterator* _tmp28_;
				gint pos = 0;
				ValaIterator* _tmp29_;
				gpointer _tmp30_;
				gboolean _tmp31_ = FALSE;
				_tmp28_ = _pos_it;
				if (!vala_iterator_next (_tmp28_)) {
					break;
				}
				_tmp29_ = _pos_it;
				_tmp30_ = vala_iterator_get (_tmp29_);
				pos = (gint) ((gintptr) _tmp30_);
				if (pos > last_pos) {
					gboolean _tmp32_ = FALSE;
					if (min_pos == -1) {
						_tmp32_ = TRUE;
					} else {
						_tmp32_ = pos < min_pos;
					}
					_tmp31_ = _tmp32_;
				} else {
					_tmp31_ = FALSE;
				}
				if (_tmp31_) {
					min_pos = pos;
				}
			}
			_vala_iterator_unref0 (_pos_it);
		}
		if (min_pos == -1) {
			break;
		}
		if (last_pos != -1) {
			const gchar* _tmp33_;
			gchar* _tmp34_;
			_tmp33_ = cast_args;
			_tmp34_ = g_strdup_printf ("%s, ", _tmp33_);
			_g_free0 (cast_args);
			cast_args = _tmp34_;
		}
		_tmp35_ = cparam_map;
		_tmp36_ = vala_map_get ((ValaMap*) _tmp35_, (gpointer) ((gintptr) min_pos));
		cparam = (ValaCCodeParameter*) _tmp36_;
		_tmp37_ = cparam;
		_tmp38_ = vala_ccode_parameter_get_ellipsis (_tmp37_);
		_tmp39_ = _tmp38_;
		if (_tmp39_) {
			const gchar* _tmp40_;
			gchar* _tmp41_;
			_tmp40_ = cast_args;
			_tmp41_ = g_strdup_printf ("%s...", _tmp40_);
			_g_free0 (cast_args);
			cast_args = _tmp41_;
		} else {
			const gchar* _tmp42_;
			ValaCCodeParameter* _tmp43_;
			const gchar* _tmp44_;
			const gchar* _tmp45_;
			gchar* _tmp46_;
			_tmp42_ = cast_args;
			_tmp43_ = cparam;
			_tmp44_ = vala_ccode_parameter_get_type_name (_tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = g_strdup_printf ("%s%s", _tmp42_, _tmp45_);
			_g_free0 (cast_args);
			cast_args = _tmp46_;
		}
		last_pos = min_pos;
		_vala_ccode_node_unref0 (cparam);
	}
	_tmp47_ = cast;
	_tmp48_ = cast_args;
	_tmp49_ = g_strdup_printf ("%s (%s)", _tmp47_, _tmp48_);
	_g_free0 (cast);
	cast = _tmp49_;
	_tmp50_ = cast;
	_tmp51_ = vala_ccode_cast_expression_new (cfunc, _tmp50_);
	result = (ValaCCodeExpression*) _tmp51_;
	_g_free0 (cast_args);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (vdeclarator);
	_g_free0 (cast);
	return result;
}

static void
vala_gtype_module_begin_instance_init_function (ValaGTypeModule* self,
                                                ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFunction* func = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	gboolean _tmp14_;
	gboolean _tmp15_;
	ValaCCodeFunction* _tmp19_;
	ValaCCodeFunction* _tmp20_;
	gboolean is_gsource = FALSE;
	ValaClass* _tmp21_;
	gboolean _tmp22_;
	gboolean _tmp23_;
	gboolean _tmp221_ = FALSE;
	gboolean _tmp222_;
	gboolean _tmp223_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->instance_init_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_instance_init", _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "void");
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	func = _tmp6_;
	_tmp7_ = func;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strdup_printf ("%s *", _tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_parameter_new ("self", _tmp11_);
	_tmp13_ = _tmp12_;
	vala_ccode_function_add_parameter (_tmp7_, _tmp13_);
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp11_);
	_g_free0 (_tmp9_);
	_tmp14_ = vala_class_get_is_compact (cl);
	_tmp15_ = _tmp14_;
	if (!_tmp15_) {
		ValaCCodeFunction* _tmp16_;
		ValaCCodeParameter* _tmp17_;
		ValaCCodeParameter* _tmp18_;
		_tmp16_ = func;
		_tmp17_ = vala_ccode_parameter_new ("klass", "gpointer");
		_tmp18_ = _tmp17_;
		vala_ccode_function_add_parameter (_tmp16_, _tmp18_);
		_vala_ccode_node_unref0 (_tmp18_);
	}
	_tmp19_ = func;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp19_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp20_ = func;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp20_);
	_tmp21_ = ((ValaCCodeBaseModule*) self)->gsource_type;
	is_gsource = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, (ValaTypeSymbol*) _tmp21_);
	_tmp22_ = vala_class_get_is_compact (cl);
	_tmp23_ = _tmp22_;
	if (_tmp23_) {
		ValaCCodeFile* _tmp24_;
		ValaCCodeFunction* _tmp25_;
		_tmp24_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp25_ = func;
		vala_ccode_file_add_function_declaration (_tmp24_, _tmp25_);
		{
			ValaList* _m_list = NULL;
			ValaList* _tmp26_;
			gint _m_size = 0;
			ValaList* _tmp27_;
			gint _tmp28_;
			gint _tmp29_;
			gint _m_index = 0;
			_tmp26_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
			_m_list = _tmp26_;
			_tmp27_ = _m_list;
			_tmp28_ = vala_collection_get_size ((ValaCollection*) _tmp27_);
			_tmp29_ = _tmp28_;
			_m_size = _tmp29_;
			_m_index = -1;
			while (TRUE) {
				gint _tmp30_;
				gint _tmp31_;
				ValaMethod* m = NULL;
				ValaList* _tmp32_;
				gpointer _tmp33_;
				gboolean _tmp34_ = FALSE;
				ValaMethod* _tmp35_;
				ValaMethod* _tmp36_;
				ValaMethod* _tmp37_;
				ValaObjectTypeSymbol* base_type = NULL;
				ValaMethod* _tmp38_;
				ValaMethod* _tmp39_;
				ValaMethod* _tmp40_;
				ValaSymbol* _tmp41_;
				ValaSymbol* _tmp42_;
				ValaObjectTypeSymbol* _tmp43_;
				gboolean _tmp44_ = FALSE;
				ValaMethod* _tmp45_;
				gboolean _tmp46_;
				gboolean _tmp47_;
				_m_index = _m_index + 1;
				_tmp30_ = _m_index;
				_tmp31_ = _m_size;
				if (!(_tmp30_ < _tmp31_)) {
					break;
				}
				_tmp32_ = _m_list;
				_tmp33_ = vala_list_get (_tmp32_, _m_index);
				m = (ValaMethod*) _tmp33_;
				_tmp35_ = m;
				_tmp36_ = vala_method_get_base_method (_tmp35_);
				_tmp37_ = _tmp36_;
				if (_tmp37_ == NULL) {
					_tmp34_ = TRUE;
				} else {
					_tmp34_ = is_gsource;
				}
				if (_tmp34_) {
					_vala_code_node_unref0 (m);
					continue;
				}
				_tmp38_ = m;
				_tmp39_ = vala_method_get_base_method (_tmp38_);
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp40_);
				_tmp42_ = _tmp41_;
				_tmp43_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
				base_type = _tmp43_;
				_tmp45_ = m;
				_tmp46_ = vala_method_get_is_abstract (_tmp45_);
				_tmp47_ = _tmp46_;
				if (!_tmp47_) {
					_tmp44_ = TRUE;
				} else {
					ValaMethod* _tmp48_;
					gboolean _tmp49_;
					gboolean _tmp50_;
					_tmp48_ = m;
					_tmp49_ = vala_method_get_coroutine (_tmp48_);
					_tmp50_ = _tmp49_;
					_tmp44_ = !_tmp50_;
				}
				if (_tmp44_) {
					ValaMethod* _tmp51_;
					ValaMethod* _tmp52_;
					ValaMethod* _tmp53_;
					ValaCCodeFile* _tmp54_;
					ValaCCodeExpression* cfunc = NULL;
					ValaMethod* _tmp55_;
					gchar* _tmp56_;
					gchar* _tmp57_;
					ValaCCodeIdentifier* _tmp58_;
					ValaCCodeExpression* _tmp59_;
					gint _tmp60_ = 0;
					ValaMethod* _tmp61_;
					gboolean _tmp62_;
					gboolean _tmp63_;
					ValaMethod* _tmp64_;
					ValaMethod* _tmp65_;
					ValaMethod* _tmp66_;
					ValaCCodeExpression* _tmp67_;
					ValaObjectTypeSymbol* _tmp68_;
					ValaCCodeExpression* _tmp69_;
					ValaCCodeCastExpression* ccast = NULL;
					ValaCCodeIdentifier* _tmp70_;
					ValaCCodeIdentifier* _tmp71_;
					ValaObjectTypeSymbol* _tmp72_;
					gchar* _tmp73_;
					gchar* _tmp74_;
					gchar* _tmp75_;
					gchar* _tmp76_;
					ValaCCodeCastExpression* _tmp77_;
					ValaCCodeCastExpression* _tmp78_;
					ValaCCodeFunction* _tmp79_;
					ValaCCodeCastExpression* _tmp80_;
					ValaMethod* _tmp81_;
					ValaMethod* _tmp82_;
					ValaMethod* _tmp83_;
					gchar* _tmp84_;
					gchar* _tmp85_;
					ValaCCodeMemberAccess* _tmp86_;
					ValaCCodeMemberAccess* _tmp87_;
					ValaCCodeExpression* _tmp88_;
					ValaMethod* _tmp89_;
					gboolean _tmp90_;
					gboolean _tmp91_;
					_tmp51_ = m;
					_tmp52_ = vala_method_get_base_method (_tmp51_);
					_tmp53_ = _tmp52_;
					_tmp54_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp53_, _tmp54_);
					_tmp55_ = m;
					_tmp56_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp55_);
					_tmp57_ = _tmp56_;
					_tmp58_ = vala_ccode_identifier_new (_tmp57_);
					_tmp59_ = (ValaCCodeExpression*) _tmp58_;
					_g_free0 (_tmp57_);
					cfunc = _tmp59_;
					_tmp61_ = m;
					_tmp62_ = vala_method_get_coroutine (_tmp61_);
					_tmp63_ = _tmp62_;
					if (_tmp63_) {
						_tmp60_ = 1;
					} else {
						_tmp60_ = 3;
					}
					_tmp64_ = m;
					_tmp65_ = vala_method_get_base_method (_tmp64_);
					_tmp66_ = _tmp65_;
					_tmp67_ = cfunc;
					_tmp68_ = base_type;
					_tmp69_ = vala_gtype_module_cast_method_pointer (self, _tmp66_, _tmp67_, _tmp68_, _tmp60_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp69_;
					_tmp70_ = vala_ccode_identifier_new ("self");
					_tmp71_ = _tmp70_;
					_tmp72_ = base_type;
					_tmp73_ = vala_get_ccode_name ((ValaCodeNode*) _tmp72_);
					_tmp74_ = _tmp73_;
					_tmp75_ = g_strdup_printf ("%s *", _tmp74_);
					_tmp76_ = _tmp75_;
					_tmp77_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp71_, _tmp76_);
					_tmp78_ = _tmp77_;
					_g_free0 (_tmp76_);
					_g_free0 (_tmp74_);
					_vala_ccode_node_unref0 (_tmp71_);
					ccast = _tmp78_;
					_tmp79_ = func;
					_tmp80_ = ccast;
					_tmp81_ = m;
					_tmp82_ = vala_method_get_base_method (_tmp81_);
					_tmp83_ = _tmp82_;
					_tmp84_ = vala_get_ccode_vfunc_name (_tmp83_);
					_tmp85_ = _tmp84_;
					_tmp86_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp80_, _tmp85_);
					_tmp87_ = _tmp86_;
					_tmp88_ = cfunc;
					vala_ccode_function_add_assignment (_tmp79_, (ValaCCodeExpression*) _tmp87_, _tmp88_);
					_vala_ccode_node_unref0 (_tmp87_);
					_g_free0 (_tmp85_);
					_tmp89_ = m;
					_tmp90_ = vala_method_get_coroutine (_tmp89_);
					_tmp91_ = _tmp90_;
					if (_tmp91_) {
						ValaMethod* _tmp92_;
						gchar* _tmp93_;
						gchar* _tmp94_;
						ValaCCodeIdentifier* _tmp95_;
						ValaMethod* _tmp96_;
						ValaMethod* _tmp97_;
						ValaMethod* _tmp98_;
						ValaCCodeExpression* _tmp99_;
						ValaObjectTypeSymbol* _tmp100_;
						ValaCCodeExpression* _tmp101_;
						ValaCCodeFunction* _tmp102_;
						ValaCCodeFunction* _tmp103_;
						ValaCCodeCastExpression* _tmp104_;
						ValaMethod* _tmp105_;
						ValaMethod* _tmp106_;
						ValaMethod* _tmp107_;
						gchar* _tmp108_;
						gchar* _tmp109_;
						ValaCCodeMemberAccess* _tmp110_;
						ValaCCodeMemberAccess* _tmp111_;
						ValaCCodeExpression* _tmp112_;
						_tmp92_ = m;
						_tmp93_ = vala_get_ccode_finish_real_name (_tmp92_);
						_tmp94_ = _tmp93_;
						_tmp95_ = vala_ccode_identifier_new (_tmp94_);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = (ValaCCodeExpression*) _tmp95_;
						_g_free0 (_tmp94_);
						_tmp96_ = m;
						_tmp97_ = vala_method_get_base_method (_tmp96_);
						_tmp98_ = _tmp97_;
						_tmp99_ = cfunc;
						_tmp100_ = base_type;
						_tmp101_ = vala_gtype_module_cast_method_pointer (self, _tmp98_, _tmp99_, _tmp100_, 2);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp101_;
						_tmp102_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp103_ = _tmp102_;
						_tmp104_ = ccast;
						_tmp105_ = m;
						_tmp106_ = vala_method_get_base_method (_tmp105_);
						_tmp107_ = _tmp106_;
						_tmp108_ = vala_get_ccode_finish_vfunc_name (_tmp107_);
						_tmp109_ = _tmp108_;
						_tmp110_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp104_, _tmp109_);
						_tmp111_ = _tmp110_;
						_tmp112_ = cfunc;
						vala_ccode_function_add_assignment (_tmp103_, (ValaCCodeExpression*) _tmp111_, _tmp112_);
						_vala_ccode_node_unref0 (_tmp111_);
						_g_free0 (_tmp109_);
					}
					_vala_ccode_node_unref0 (ccast);
					_vala_ccode_node_unref0 (cfunc);
				}
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (m);
			}
		}
		{
			ValaList* _prop_list = NULL;
			ValaList* _tmp113_;
			gint _prop_size = 0;
			ValaList* _tmp114_;
			gint _tmp115_;
			gint _tmp116_;
			gint _prop_index = 0;
			_tmp113_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
			_prop_list = _tmp113_;
			_tmp114_ = _prop_list;
			_tmp115_ = vala_collection_get_size ((ValaCollection*) _tmp114_);
			_tmp116_ = _tmp115_;
			_prop_size = _tmp116_;
			_prop_index = -1;
			while (TRUE) {
				gint _tmp117_;
				gint _tmp118_;
				ValaProperty* prop = NULL;
				ValaList* _tmp119_;
				gpointer _tmp120_;
				gboolean _tmp121_ = FALSE;
				ValaProperty* _tmp122_;
				ValaProperty* _tmp123_;
				ValaProperty* _tmp124_;
				ValaObjectTypeSymbol* base_type = NULL;
				ValaProperty* _tmp125_;
				ValaProperty* _tmp126_;
				ValaProperty* _tmp127_;
				ValaSymbol* _tmp128_;
				ValaSymbol* _tmp129_;
				ValaObjectTypeSymbol* _tmp130_;
				ValaCCodeCastExpression* ccast = NULL;
				ValaCCodeIdentifier* _tmp131_;
				ValaCCodeIdentifier* _tmp132_;
				ValaObjectTypeSymbol* _tmp133_;
				gchar* _tmp134_;
				gchar* _tmp135_;
				gchar* _tmp136_;
				gchar* _tmp137_;
				ValaCCodeCastExpression* _tmp138_;
				ValaCCodeCastExpression* _tmp139_;
				gboolean _tmp140_ = FALSE;
				ValaProperty* _tmp141_;
				ValaProperty* _tmp142_;
				ValaProperty* _tmp143_;
				_prop_index = _prop_index + 1;
				_tmp117_ = _prop_index;
				_tmp118_ = _prop_size;
				if (!(_tmp117_ < _tmp118_)) {
					break;
				}
				_tmp119_ = _prop_list;
				_tmp120_ = vala_list_get (_tmp119_, _prop_index);
				prop = (ValaProperty*) _tmp120_;
				_tmp122_ = prop;
				_tmp123_ = vala_property_get_base_property (_tmp122_);
				_tmp124_ = _tmp123_;
				if (_tmp124_ == NULL) {
					_tmp121_ = TRUE;
				} else {
					_tmp121_ = is_gsource;
				}
				if (_tmp121_) {
					_vala_code_node_unref0 (prop);
					continue;
				}
				_tmp125_ = prop;
				_tmp126_ = vala_property_get_base_property (_tmp125_);
				_tmp127_ = _tmp126_;
				_tmp128_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp127_);
				_tmp129_ = _tmp128_;
				_tmp130_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp129_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
				base_type = _tmp130_;
				_tmp131_ = vala_ccode_identifier_new ("self");
				_tmp132_ = _tmp131_;
				_tmp133_ = base_type;
				_tmp134_ = vala_get_ccode_name ((ValaCodeNode*) _tmp133_);
				_tmp135_ = _tmp134_;
				_tmp136_ = g_strdup_printf ("%s *", _tmp135_);
				_tmp137_ = _tmp136_;
				_tmp138_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp132_, _tmp137_);
				_tmp139_ = _tmp138_;
				_g_free0 (_tmp137_);
				_g_free0 (_tmp135_);
				_vala_ccode_node_unref0 (_tmp132_);
				ccast = _tmp139_;
				_tmp141_ = prop;
				_tmp142_ = vala_property_get_base_property (_tmp141_);
				_tmp143_ = _tmp142_;
				if (!vala_get_ccode_no_accessor_method (_tmp143_)) {
					ValaProperty* _tmp144_;
					ValaProperty* _tmp145_;
					ValaProperty* _tmp146_;
					_tmp144_ = prop;
					_tmp145_ = vala_property_get_base_property (_tmp144_);
					_tmp146_ = _tmp145_;
					_tmp140_ = !vala_get_ccode_concrete_accessor (_tmp146_);
				} else {
					_tmp140_ = FALSE;
				}
				if (_tmp140_) {
					ValaProperty* _tmp147_;
					ValaPropertyAccessor* _tmp148_;
					ValaPropertyAccessor* _tmp149_;
					ValaProperty* _tmp184_;
					ValaPropertyAccessor* _tmp185_;
					ValaPropertyAccessor* _tmp186_;
					_tmp147_ = prop;
					_tmp148_ = vala_property_get_get_accessor (_tmp147_);
					_tmp149_ = _tmp148_;
					if (_tmp149_ != NULL) {
						ValaProperty* _tmp150_;
						ValaProperty* _tmp151_;
						ValaProperty* _tmp152_;
						ValaPropertyAccessor* _tmp153_;
						ValaPropertyAccessor* _tmp154_;
						ValaCCodeFile* _tmp155_;
						ValaCCodeExpression* cfunc = NULL;
						ValaProperty* _tmp156_;
						ValaPropertyAccessor* _tmp157_;
						ValaPropertyAccessor* _tmp158_;
						gchar* _tmp159_;
						gchar* _tmp160_;
						ValaCCodeIdentifier* _tmp161_;
						ValaCCodeExpression* _tmp162_;
						ValaProperty* _tmp163_;
						ValaProperty* _tmp164_;
						ValaProperty* _tmp165_;
						ValaPropertyAccessor* _tmp166_;
						ValaPropertyAccessor* _tmp167_;
						ValaMethod* _tmp168_;
						ValaMethod* _tmp169_;
						ValaCCodeExpression* _tmp170_;
						ValaObjectTypeSymbol* _tmp171_;
						ValaCCodeExpression* _tmp172_;
						ValaCCodeFunction* _tmp173_;
						ValaCCodeFunction* _tmp174_;
						ValaCCodeCastExpression* _tmp175_;
						ValaProperty* _tmp176_;
						const gchar* _tmp177_;
						const gchar* _tmp178_;
						gchar* _tmp179_;
						gchar* _tmp180_;
						ValaCCodeMemberAccess* _tmp181_;
						ValaCCodeMemberAccess* _tmp182_;
						ValaCCodeExpression* _tmp183_;
						_tmp150_ = prop;
						_tmp151_ = vala_property_get_base_property (_tmp150_);
						_tmp152_ = _tmp151_;
						_tmp153_ = vala_property_get_get_accessor (_tmp152_);
						_tmp154_ = _tmp153_;
						_tmp155_ = ((ValaCCodeBaseModule*) self)->cfile;
						vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp154_, _tmp155_);
						_tmp156_ = prop;
						_tmp157_ = vala_property_get_get_accessor (_tmp156_);
						_tmp158_ = _tmp157_;
						_tmp159_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp158_);
						_tmp160_ = _tmp159_;
						_tmp161_ = vala_ccode_identifier_new (_tmp160_);
						_tmp162_ = (ValaCCodeExpression*) _tmp161_;
						_g_free0 (_tmp160_);
						cfunc = _tmp162_;
						_tmp163_ = prop;
						_tmp164_ = vala_property_get_base_property (_tmp163_);
						_tmp165_ = _tmp164_;
						_tmp166_ = vala_property_get_get_accessor (_tmp165_);
						_tmp167_ = _tmp166_;
						_tmp168_ = vala_property_accessor_get_method (_tmp167_);
						_tmp169_ = _tmp168_;
						_tmp170_ = cfunc;
						_tmp171_ = base_type;
						_tmp172_ = vala_gtype_module_cast_method_pointer (self, _tmp169_, _tmp170_, _tmp171_, 3);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp172_;
						_vala_code_node_unref0 (_tmp169_);
						_tmp173_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp174_ = _tmp173_;
						_tmp175_ = ccast;
						_tmp176_ = prop;
						_tmp177_ = vala_symbol_get_name ((ValaSymbol*) _tmp176_);
						_tmp178_ = _tmp177_;
						_tmp179_ = g_strdup_printf ("get_%s", _tmp178_);
						_tmp180_ = _tmp179_;
						_tmp181_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp175_, _tmp180_);
						_tmp182_ = _tmp181_;
						_tmp183_ = cfunc;
						vala_ccode_function_add_assignment (_tmp174_, (ValaCCodeExpression*) _tmp182_, _tmp183_);
						_vala_ccode_node_unref0 (_tmp182_);
						_g_free0 (_tmp180_);
						_vala_ccode_node_unref0 (cfunc);
					}
					_tmp184_ = prop;
					_tmp185_ = vala_property_get_set_accessor (_tmp184_);
					_tmp186_ = _tmp185_;
					if (_tmp186_ != NULL) {
						ValaProperty* _tmp187_;
						ValaProperty* _tmp188_;
						ValaProperty* _tmp189_;
						ValaPropertyAccessor* _tmp190_;
						ValaPropertyAccessor* _tmp191_;
						ValaCCodeFile* _tmp192_;
						ValaCCodeExpression* cfunc = NULL;
						ValaProperty* _tmp193_;
						ValaPropertyAccessor* _tmp194_;
						ValaPropertyAccessor* _tmp195_;
						gchar* _tmp196_;
						gchar* _tmp197_;
						ValaCCodeIdentifier* _tmp198_;
						ValaCCodeExpression* _tmp199_;
						ValaProperty* _tmp200_;
						ValaProperty* _tmp201_;
						ValaProperty* _tmp202_;
						ValaPropertyAccessor* _tmp203_;
						ValaPropertyAccessor* _tmp204_;
						ValaMethod* _tmp205_;
						ValaMethod* _tmp206_;
						ValaCCodeExpression* _tmp207_;
						ValaObjectTypeSymbol* _tmp208_;
						ValaCCodeExpression* _tmp209_;
						ValaCCodeFunction* _tmp210_;
						ValaCCodeFunction* _tmp211_;
						ValaCCodeCastExpression* _tmp212_;
						ValaProperty* _tmp213_;
						const gchar* _tmp214_;
						const gchar* _tmp215_;
						gchar* _tmp216_;
						gchar* _tmp217_;
						ValaCCodeMemberAccess* _tmp218_;
						ValaCCodeMemberAccess* _tmp219_;
						ValaCCodeExpression* _tmp220_;
						_tmp187_ = prop;
						_tmp188_ = vala_property_get_base_property (_tmp187_);
						_tmp189_ = _tmp188_;
						_tmp190_ = vala_property_get_set_accessor (_tmp189_);
						_tmp191_ = _tmp190_;
						_tmp192_ = ((ValaCCodeBaseModule*) self)->cfile;
						vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp191_, _tmp192_);
						_tmp193_ = prop;
						_tmp194_ = vala_property_get_set_accessor (_tmp193_);
						_tmp195_ = _tmp194_;
						_tmp196_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp195_);
						_tmp197_ = _tmp196_;
						_tmp198_ = vala_ccode_identifier_new (_tmp197_);
						_tmp199_ = (ValaCCodeExpression*) _tmp198_;
						_g_free0 (_tmp197_);
						cfunc = _tmp199_;
						_tmp200_ = prop;
						_tmp201_ = vala_property_get_base_property (_tmp200_);
						_tmp202_ = _tmp201_;
						_tmp203_ = vala_property_get_set_accessor (_tmp202_);
						_tmp204_ = _tmp203_;
						_tmp205_ = vala_property_accessor_get_method (_tmp204_);
						_tmp206_ = _tmp205_;
						_tmp207_ = cfunc;
						_tmp208_ = base_type;
						_tmp209_ = vala_gtype_module_cast_method_pointer (self, _tmp206_, _tmp207_, _tmp208_, 3);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp209_;
						_vala_code_node_unref0 (_tmp206_);
						_tmp210_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp211_ = _tmp210_;
						_tmp212_ = ccast;
						_tmp213_ = prop;
						_tmp214_ = vala_symbol_get_name ((ValaSymbol*) _tmp213_);
						_tmp215_ = _tmp214_;
						_tmp216_ = g_strdup_printf ("set_%s", _tmp215_);
						_tmp217_ = _tmp216_;
						_tmp218_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp212_, _tmp217_);
						_tmp219_ = _tmp218_;
						_tmp220_ = cfunc;
						vala_ccode_function_add_assignment (_tmp211_, (ValaCCodeExpression*) _tmp219_, _tmp220_);
						_vala_ccode_node_unref0 (_tmp219_);
						_g_free0 (_tmp217_);
						_vala_ccode_node_unref0 (cfunc);
					}
				}
				_vala_ccode_node_unref0 (ccast);
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (prop);
			}
		}
	}
	_tmp222_ = vala_class_get_is_compact (cl);
	_tmp223_ = _tmp222_;
	if (!_tmp223_) {
		gboolean _tmp224_ = FALSE;
		gboolean _tmp225_;
		gboolean _tmp226_;
		_tmp225_ = vala_class_get_has_private_fields (cl);
		_tmp226_ = _tmp225_;
		if (_tmp226_) {
			_tmp224_ = TRUE;
		} else {
			_tmp224_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) cl);
		}
		_tmp221_ = _tmp224_;
	} else {
		_tmp221_ = FALSE;
	}
	if (_tmp221_) {
		ValaCCodeFunctionCall* ccall = NULL;
		gchar* _tmp227_;
		gchar* _tmp228_;
		gchar* _tmp229_;
		gchar* _tmp230_;
		ValaCCodeIdentifier* _tmp231_;
		ValaCCodeIdentifier* _tmp232_;
		ValaCCodeFunctionCall* _tmp233_;
		ValaCCodeFunctionCall* _tmp234_;
		ValaCCodeFunctionCall* _tmp235_;
		ValaCCodeIdentifier* _tmp236_;
		ValaCCodeIdentifier* _tmp237_;
		ValaCCodeFunction* _tmp238_;
		ValaCCodeIdentifier* _tmp239_;
		ValaCCodeIdentifier* _tmp240_;
		ValaCCodeMemberAccess* _tmp241_;
		ValaCCodeMemberAccess* _tmp242_;
		ValaCCodeFunctionCall* _tmp243_;
		_tmp227_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
		_tmp228_ = _tmp227_;
		_tmp229_ = g_strdup_printf ("%s_get_instance_private", _tmp228_);
		_tmp230_ = _tmp229_;
		_tmp231_ = vala_ccode_identifier_new (_tmp230_);
		_tmp232_ = _tmp231_;
		_tmp233_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp232_);
		_tmp234_ = _tmp233_;
		_vala_ccode_node_unref0 (_tmp232_);
		_g_free0 (_tmp230_);
		_g_free0 (_tmp228_);
		ccall = _tmp234_;
		_tmp235_ = ccall;
		_tmp236_ = vala_ccode_identifier_new ("self");
		_tmp237_ = _tmp236_;
		vala_ccode_function_call_add_argument (_tmp235_, (ValaCCodeExpression*) _tmp237_);
		_vala_ccode_node_unref0 (_tmp237_);
		_tmp238_ = func;
		_tmp239_ = vala_ccode_identifier_new ("self");
		_tmp240_ = _tmp239_;
		_tmp241_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp240_, "priv");
		_tmp242_ = _tmp241_;
		_tmp243_ = ccall;
		vala_ccode_function_add_assignment (_tmp238_, (ValaCCodeExpression*) _tmp242_, (ValaCCodeExpression*) _tmp243_);
		_vala_ccode_node_unref0 (_tmp242_);
		_vala_ccode_node_unref0 (_tmp240_);
		_vala_ccode_node_unref0 (ccall);
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (func);
}

static void
vala_gtype_module_add_instance_init_function (ValaGTypeModule* self,
                                              ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFile* _tmp1_;
	ValaCCodeBaseModuleEmitContext* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->instance_init_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	vala_gtype_module_end_instance_init (self, cl);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_tmp1_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp2_ = ((ValaCCodeBaseModule*) self)->instance_init_context;
	_tmp3_ = _tmp2_->ccode;
	vala_ccode_file_add_function (_tmp1_, _tmp3_);
}

static void
vala_gtype_module_begin_class_finalize_function (ValaGTypeModule* self,
                                                 ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFunction* function = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaDestructor* _tmp16_;
	ValaDestructor* _tmp17_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->class_finalize_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_class_finalize", _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "void");
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	function = _tmp6_;
	_tmp7_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp7_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp8_ = function;
	_tmp9_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%s *", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_parameter_new ("klass", _tmp12_);
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp8_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_g_free0 (_tmp12_);
	_g_free0 (_tmp10_);
	_tmp15_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp15_);
	_tmp16_ = vala_class_get_static_destructor (cl);
	_tmp17_ = _tmp16_;
	if (_tmp17_ != NULL) {
		ValaDestructor* _tmp18_;
		ValaDestructor* _tmp19_;
		ValaBlock* _tmp20_;
		ValaBlock* _tmp21_;
		gboolean _tmp22_;
		gboolean _tmp23_;
		gboolean _tmp34_;
		gboolean _tmp35_;
		_tmp18_ = vala_class_get_static_destructor (cl);
		_tmp19_ = _tmp18_;
		_tmp20_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp19_);
		_tmp21_ = _tmp20_;
		vala_code_node_emit ((ValaCodeNode*) _tmp21_, (ValaCodeGenerator*) self);
		_tmp22_ = vala_ccode_base_module_get_current_method_inner_error ((ValaCCodeBaseModule*) self);
		_tmp23_ = _tmp22_;
		if (_tmp23_) {
			ValaCCodeFunction* _tmp24_;
			ValaCCodeFunction* _tmp25_;
			gint _tmp26_;
			gint _tmp27_;
			gchar* _tmp28_;
			gchar* _tmp29_;
			ValaCCodeConstant* _tmp30_;
			ValaCCodeConstant* _tmp31_;
			ValaCCodeVariableDeclarator* _tmp32_;
			ValaCCodeVariableDeclarator* _tmp33_;
			_tmp24_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp25_ = _tmp24_;
			_tmp26_ = vala_ccode_base_module_get_current_inner_error_id ((ValaCCodeBaseModule*) self);
			_tmp27_ = _tmp26_;
			_tmp28_ = g_strdup_printf ("_inner_error%d_", _tmp27_);
			_tmp29_ = _tmp28_;
			_tmp30_ = vala_ccode_constant_new ("NULL");
			_tmp31_ = _tmp30_;
			_tmp32_ = vala_ccode_variable_declarator_new_zero (_tmp29_, (ValaCCodeExpression*) _tmp31_, NULL);
			_tmp33_ = _tmp32_;
			vala_ccode_function_add_declaration (_tmp25_, "GError*", (ValaCCodeDeclarator*) _tmp33_, 0);
			_vala_ccode_node_unref0 (_tmp33_);
			_vala_ccode_node_unref0 (_tmp31_);
			_g_free0 (_tmp29_);
		}
		_tmp34_ = vala_ccode_base_module_get_current_method_return ((ValaCCodeBaseModule*) self);
		_tmp35_ = _tmp34_;
		if (_tmp35_) {
			ValaCCodeFunction* _tmp36_;
			ValaCCodeFunction* _tmp37_;
			ValaCCodeFunction* _tmp38_;
			ValaCCodeFunction* _tmp39_;
			ValaCCodeEmptyStatement* _tmp40_;
			ValaCCodeEmptyStatement* _tmp41_;
			_tmp36_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp37_ = _tmp36_;
			vala_ccode_function_add_label (_tmp37_, "_return");
			_tmp38_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp39_ = _tmp38_;
			_tmp40_ = vala_ccode_empty_statement_new ();
			_tmp41_ = _tmp40_;
			vala_ccode_function_add_statement (_tmp39_, (ValaCCodeNode*) _tmp41_);
			_vala_ccode_node_unref0 (_tmp41_);
		}
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_class_finalize_function (ValaGTypeModule* self,
                                               ValaClass* cl)
{
	ValaCCodeFile* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeFile* _tmp3_;
	ValaCCodeBaseModuleEmitContext* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp1_ = ((ValaCCodeBaseModule*) self)->class_finalize_context;
	_tmp2_ = _tmp1_->ccode;
	vala_ccode_file_add_function_declaration (_tmp0_, _tmp2_);
	_tmp3_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp4_ = ((ValaCCodeBaseModule*) self)->class_finalize_context;
	_tmp5_ = _tmp4_->ccode;
	vala_ccode_file_add_function (_tmp3_, _tmp5_);
}

static void
vala_gtype_module_begin_base_finalize_function (ValaGTypeModule* self,
                                                ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFunction* function = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeFunction* _tmp18_;
	ValaDestructor* _tmp19_;
	ValaDestructor* _tmp20_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->base_finalize_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_base_finalize", _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "void");
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	function = _tmp6_;
	_tmp7_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp7_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp8_ = function;
	_tmp9_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) cl);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%s *", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_parameter_new ("klass", _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_ccode_parameter_new ("klass_data", "gpointer");
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_parameter (_tmp15_, _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_tmp18_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp18_);
	_tmp19_ = vala_class_get_class_destructor (cl);
	_tmp20_ = _tmp19_;
	if (_tmp20_ != NULL) {
		ValaDestructor* _tmp21_;
		ValaDestructor* _tmp22_;
		ValaBlock* _tmp23_;
		ValaBlock* _tmp24_;
		gboolean _tmp25_;
		gboolean _tmp26_;
		gboolean _tmp37_;
		gboolean _tmp38_;
		_tmp21_ = vala_class_get_class_destructor (cl);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp22_);
		_tmp24_ = _tmp23_;
		vala_code_node_emit ((ValaCodeNode*) _tmp24_, (ValaCodeGenerator*) self);
		_tmp25_ = vala_ccode_base_module_get_current_method_inner_error ((ValaCCodeBaseModule*) self);
		_tmp26_ = _tmp25_;
		if (_tmp26_) {
			ValaCCodeFunction* _tmp27_;
			ValaCCodeFunction* _tmp28_;
			gint _tmp29_;
			gint _tmp30_;
			gchar* _tmp31_;
			gchar* _tmp32_;
			ValaCCodeConstant* _tmp33_;
			ValaCCodeConstant* _tmp34_;
			ValaCCodeVariableDeclarator* _tmp35_;
			ValaCCodeVariableDeclarator* _tmp36_;
			_tmp27_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp28_ = _tmp27_;
			_tmp29_ = vala_ccode_base_module_get_current_inner_error_id ((ValaCCodeBaseModule*) self);
			_tmp30_ = _tmp29_;
			_tmp31_ = g_strdup_printf ("_inner_error%d_", _tmp30_);
			_tmp32_ = _tmp31_;
			_tmp33_ = vala_ccode_constant_new ("NULL");
			_tmp34_ = _tmp33_;
			_tmp35_ = vala_ccode_variable_declarator_new_zero (_tmp32_, (ValaCCodeExpression*) _tmp34_, NULL);
			_tmp36_ = _tmp35_;
			vala_ccode_function_add_declaration (_tmp28_, "GError*", (ValaCCodeDeclarator*) _tmp36_, 0);
			_vala_ccode_node_unref0 (_tmp36_);
			_vala_ccode_node_unref0 (_tmp34_);
			_g_free0 (_tmp32_);
		}
		_tmp37_ = vala_ccode_base_module_get_current_method_return ((ValaCCodeBaseModule*) self);
		_tmp38_ = _tmp37_;
		if (_tmp38_) {
			ValaCCodeFunction* _tmp39_;
			ValaCCodeFunction* _tmp40_;
			ValaCCodeFunction* _tmp41_;
			ValaCCodeFunction* _tmp42_;
			ValaCCodeEmptyStatement* _tmp43_;
			ValaCCodeEmptyStatement* _tmp44_;
			_tmp39_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp40_ = _tmp39_;
			vala_ccode_function_add_label (_tmp40_, "_return");
			_tmp41_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp42_ = _tmp41_;
			_tmp43_ = vala_ccode_empty_statement_new ();
			_tmp44_ = _tmp43_;
			vala_ccode_function_add_statement (_tmp42_, (ValaCCodeNode*) _tmp44_);
			_vala_ccode_node_unref0 (_tmp44_);
		}
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (function);
}

static void
vala_gtype_module_add_base_finalize_function (ValaGTypeModule* self,
                                              ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeFile* _tmp1_;
	ValaCCodeFunction* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFile* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->base_finalize_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	_tmp1_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp2_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp3_ = _tmp2_;
	vala_ccode_file_add_function_declaration (_tmp1_, _tmp3_);
	_tmp4_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp5_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp6_ = _tmp5_;
	vala_ccode_file_add_function (_tmp4_, _tmp6_);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
}

static void
vala_gtype_module_begin_finalize_function (ValaGTypeModule* self,
                                           ValaClass* cl)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	gboolean is_gsource = FALSE;
	ValaClass* _tmp1_;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_;
	gboolean _tmp4_;
	ValaDestructor* _tmp92_;
	ValaDestructor* _tmp93_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp0_);
	_tmp1_ = ((ValaCCodeBaseModule*) self)->gsource_type;
	is_gsource = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, (ValaTypeSymbol*) _tmp1_);
	_tmp3_ = vala_class_get_is_compact (cl);
	_tmp4_ = _tmp3_;
	if (!_tmp4_) {
		_tmp2_ = TRUE;
	} else {
		_tmp2_ = is_gsource;
	}
	if (_tmp2_) {
		ValaClass* fundamental_class = NULL;
		ValaClass* _tmp5_;
		ValaCCodeFunction* func = NULL;
		gchar* _tmp13_;
		gchar* _tmp14_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		ValaCCodeFunction* _tmp17_;
		ValaCCodeFunction* _tmp18_;
		ValaCCodeFunction* _tmp19_;
		ValaClass* _tmp20_;
		gchar* _tmp21_;
		gchar* _tmp22_;
		gchar* _tmp23_;
		gchar* _tmp24_;
		ValaCCodeParameter* _tmp25_;
		ValaCCodeParameter* _tmp26_;
		ValaCCodeFunction* _tmp27_;
		ValaCCodeFunction* _tmp28_;
		ValaCCodeExpression* ccast = NULL;
		gboolean _tmp31_;
		gboolean _tmp32_;
		ValaCCodeFunction* _tmp43_;
		ValaCCodeFunction* _tmp44_;
		gchar* _tmp45_;
		gchar* _tmp46_;
		gchar* _tmp47_;
		gchar* _tmp48_;
		ValaCCodeVariableDeclarator* _tmp49_;
		ValaCCodeVariableDeclarator* _tmp50_;
		ValaCCodeFunction* _tmp51_;
		ValaCCodeFunction* _tmp52_;
		ValaCCodeIdentifier* _tmp53_;
		ValaCCodeIdentifier* _tmp54_;
		ValaCCodeExpression* _tmp55_;
		gboolean _tmp56_ = FALSE;
		gboolean _tmp57_;
		gboolean _tmp58_;
		_tmp5_ = _vala_code_node_ref0 (cl);
		fundamental_class = _tmp5_;
		while (TRUE) {
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			ValaClass* _tmp8_;
			ValaClass* _tmp9_;
			ValaClass* _tmp10_;
			ValaClass* _tmp11_;
			ValaClass* _tmp12_;
			_tmp6_ = fundamental_class;
			_tmp7_ = vala_class_get_base_class (_tmp6_);
			_tmp8_ = _tmp7_;
			if (!(_tmp8_ != NULL)) {
				break;
			}
			_tmp9_ = fundamental_class;
			_tmp10_ = vala_class_get_base_class (_tmp9_);
			_tmp11_ = _tmp10_;
			_tmp12_ = _vala_code_node_ref0 (_tmp11_);
			_vala_code_node_unref0 (fundamental_class);
			fundamental_class = _tmp12_;
		}
		_tmp13_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) cl);
		_tmp14_ = _tmp13_;
		_tmp15_ = g_strdup_printf ("%sfinalize", _tmp14_);
		_tmp16_ = _tmp15_;
		_tmp17_ = vala_ccode_function_new (_tmp16_, "void");
		_tmp18_ = _tmp17_;
		_g_free0 (_tmp16_);
		_g_free0 (_tmp14_);
		func = _tmp18_;
		_tmp19_ = func;
		_tmp20_ = fundamental_class;
		_tmp21_ = vala_get_ccode_name ((ValaCodeNode*) _tmp20_);
		_tmp22_ = _tmp21_;
		_tmp23_ = g_strdup_printf ("%s *", _tmp22_);
		_tmp24_ = _tmp23_;
		_tmp25_ = vala_ccode_parameter_new ("obj", _tmp24_);
		_tmp26_ = _tmp25_;
		vala_ccode_function_add_parameter (_tmp19_, _tmp26_);
		_vala_ccode_node_unref0 (_tmp26_);
		_g_free0 (_tmp24_);
		_g_free0 (_tmp22_);
		_tmp27_ = func;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp27_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp28_ = func;
		vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp28_);
		if (is_gsource) {
			ValaCCodeFile* _tmp29_;
			ValaCCodeFunction* _tmp30_;
			_tmp29_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp30_ = func;
			vala_ccode_file_add_function_declaration (_tmp29_, _tmp30_);
		}
		_tmp31_ = vala_class_get_is_compact (cl);
		_tmp32_ = _tmp31_;
		if (!_tmp32_) {
			ValaCCodeIdentifier* _tmp33_;
			ValaCCodeIdentifier* _tmp34_;
			ValaCCodeFunctionCall* _tmp35_;
			_tmp33_ = vala_ccode_identifier_new ("obj");
			_tmp34_ = _tmp33_;
			_tmp35_ = vala_ccode_base_module_generate_instance_cast ((ValaCCodeBaseModule*) self, (ValaCCodeExpression*) _tmp34_, (ValaTypeSymbol*) cl);
			_vala_ccode_node_unref0 (ccast);
			ccast = (ValaCCodeExpression*) _tmp35_;
			_vala_ccode_node_unref0 (_tmp34_);
		} else {
			ValaCCodeIdentifier* _tmp36_;
			ValaCCodeIdentifier* _tmp37_;
			gchar* _tmp38_;
			gchar* _tmp39_;
			gchar* _tmp40_;
			gchar* _tmp41_;
			ValaCCodeCastExpression* _tmp42_;
			_tmp36_ = vala_ccode_identifier_new ("obj");
			_tmp37_ = _tmp36_;
			_tmp38_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp39_ = _tmp38_;
			_tmp40_ = g_strdup_printf ("%s *", _tmp39_);
			_tmp41_ = _tmp40_;
			_tmp42_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp37_, _tmp41_);
			_vala_ccode_node_unref0 (ccast);
			ccast = (ValaCCodeExpression*) _tmp42_;
			_g_free0 (_tmp41_);
			_g_free0 (_tmp39_);
			_vala_ccode_node_unref0 (_tmp37_);
		}
		_tmp43_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp44_ = _tmp43_;
		_tmp45_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp46_ = _tmp45_;
		_tmp47_ = g_strdup_printf ("%s *", _tmp46_);
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
		_tmp50_ = _tmp49_;
		vala_ccode_function_add_declaration (_tmp44_, _tmp48_, (ValaCCodeDeclarator*) _tmp50_, 0);
		_vala_ccode_node_unref0 (_tmp50_);
		_g_free0 (_tmp48_);
		_g_free0 (_tmp46_);
		_tmp51_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_ccode_identifier_new ("self");
		_tmp54_ = _tmp53_;
		_tmp55_ = ccast;
		vala_ccode_function_add_assignment (_tmp52_, (ValaCCodeExpression*) _tmp54_, _tmp55_);
		_vala_ccode_node_unref0 (_tmp54_);
		_tmp57_ = vala_class_get_is_compact (cl);
		_tmp58_ = _tmp57_;
		if (!_tmp58_) {
			ValaClass* _tmp59_;
			ValaClass* _tmp60_;
			_tmp59_ = vala_class_get_base_class (cl);
			_tmp60_ = _tmp59_;
			_tmp56_ = _tmp60_ == NULL;
		} else {
			_tmp56_ = FALSE;
		}
		if (_tmp56_) {
			ValaCCodeFunctionCall* call = NULL;
			ValaCCodeIdentifier* _tmp61_;
			ValaCCodeIdentifier* _tmp62_;
			ValaCCodeFunctionCall* _tmp63_;
			ValaCCodeFunctionCall* _tmp64_;
			ValaCCodeFunctionCall* _tmp65_;
			ValaCCodeIdentifier* _tmp66_;
			ValaCCodeIdentifier* _tmp67_;
			ValaCCodeFunction* _tmp68_;
			ValaCCodeFunction* _tmp69_;
			ValaCCodeFunctionCall* _tmp70_;
			_tmp61_ = vala_ccode_identifier_new ("g_signal_handlers_destroy");
			_tmp62_ = _tmp61_;
			_tmp63_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp62_);
			_tmp64_ = _tmp63_;
			_vala_ccode_node_unref0 (_tmp62_);
			call = _tmp64_;
			_tmp65_ = call;
			_tmp66_ = vala_ccode_identifier_new ("self");
			_tmp67_ = _tmp66_;
			vala_ccode_function_call_add_argument (_tmp65_, (ValaCCodeExpression*) _tmp67_);
			_vala_ccode_node_unref0 (_tmp67_);
			_tmp68_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp69_ = _tmp68_;
			_tmp70_ = call;
			vala_ccode_function_add_expression (_tmp69_, (ValaCCodeExpression*) _tmp70_);
			_vala_ccode_node_unref0 (call);
		}
		_vala_ccode_node_unref0 (ccast);
		_vala_ccode_node_unref0 (func);
		_vala_code_node_unref0 (fundamental_class);
	} else {
		ValaClass* _tmp71_;
		ValaClass* _tmp72_;
		_tmp71_ = vala_class_get_base_class (cl);
		_tmp72_ = _tmp71_;
		if (_tmp72_ == NULL) {
			ValaCCodeFunction* function = NULL;
			gchar* _tmp73_;
			gchar* _tmp74_;
			ValaCCodeFunction* _tmp75_;
			ValaCCodeFunction* _tmp76_;
			ValaCCodeFunction* _tmp84_;
			gchar* _tmp85_;
			gchar* _tmp86_;
			gchar* _tmp87_;
			gchar* _tmp88_;
			ValaCCodeParameter* _tmp89_;
			ValaCCodeParameter* _tmp90_;
			ValaCCodeFunction* _tmp91_;
			_tmp73_ = vala_get_ccode_free_function ((ValaTypeSymbol*) cl);
			_tmp74_ = _tmp73_;
			_tmp75_ = vala_ccode_function_new (_tmp74_, "void");
			_tmp76_ = _tmp75_;
			_g_free0 (_tmp74_);
			function = _tmp76_;
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp77_;
				_tmp77_ = function;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp77_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp78_ = FALSE;
				ValaCodeContext* _tmp79_;
				ValaCodeContext* _tmp80_;
				gboolean _tmp81_;
				gboolean _tmp82_;
				_tmp79_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp80_ = _tmp79_;
				_tmp81_ = vala_code_context_get_hide_internal (_tmp80_);
				_tmp82_ = _tmp81_;
				if (_tmp82_) {
					_tmp78_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp78_ = FALSE;
				}
				if (_tmp78_) {
					ValaCCodeFunction* _tmp83_;
					_tmp83_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp83_, VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp84_ = function;
			_tmp85_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp86_ = _tmp85_;
			_tmp87_ = g_strdup_printf ("%s *", _tmp86_);
			_tmp88_ = _tmp87_;
			_tmp89_ = vala_ccode_parameter_new ("self", _tmp88_);
			_tmp90_ = _tmp89_;
			vala_ccode_function_add_parameter (_tmp84_, _tmp90_);
			_vala_ccode_node_unref0 (_tmp90_);
			_g_free0 (_tmp88_);
			_g_free0 (_tmp86_);
			_tmp91_ = function;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp91_);
			_vala_ccode_node_unref0 (function);
		}
	}
	_tmp92_ = vala_class_get_destructor (cl);
	_tmp93_ = _tmp92_;
	if (_tmp93_ != NULL) {
		ValaDestructor* _tmp94_;
		ValaDestructor* _tmp95_;
		ValaBlock* _tmp96_;
		ValaBlock* _tmp97_;
		gboolean _tmp98_;
		gboolean _tmp99_;
		gboolean _tmp110_;
		gboolean _tmp111_;
		_tmp94_ = vala_class_get_destructor (cl);
		_tmp95_ = _tmp94_;
		_tmp96_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp95_);
		_tmp97_ = _tmp96_;
		vala_code_node_emit ((ValaCodeNode*) _tmp97_, (ValaCodeGenerator*) self);
		_tmp98_ = vala_ccode_base_module_get_current_method_inner_error ((ValaCCodeBaseModule*) self);
		_tmp99_ = _tmp98_;
		if (_tmp99_) {
			ValaCCodeFunction* _tmp100_;
			ValaCCodeFunction* _tmp101_;
			gint _tmp102_;
			gint _tmp103_;
			gchar* _tmp104_;
			gchar* _tmp105_;
			ValaCCodeConstant* _tmp106_;
			ValaCCodeConstant* _tmp107_;
			ValaCCodeVariableDeclarator* _tmp108_;
			ValaCCodeVariableDeclarator* _tmp109_;
			_tmp100_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp101_ = _tmp100_;
			_tmp102_ = vala_ccode_base_module_get_current_inner_error_id ((ValaCCodeBaseModule*) self);
			_tmp103_ = _tmp102_;
			_tmp104_ = g_strdup_printf ("_inner_error%d_", _tmp103_);
			_tmp105_ = _tmp104_;
			_tmp106_ = vala_ccode_constant_new ("NULL");
			_tmp107_ = _tmp106_;
			_tmp108_ = vala_ccode_variable_declarator_new_zero (_tmp105_, (ValaCCodeExpression*) _tmp107_, NULL);
			_tmp109_ = _tmp108_;
			vala_ccode_function_add_declaration (_tmp101_, "GError*", (ValaCCodeDeclarator*) _tmp109_, 0);
			_vala_ccode_node_unref0 (_tmp109_);
			_vala_ccode_node_unref0 (_tmp107_);
			_g_free0 (_tmp105_);
		}
		_tmp110_ = vala_ccode_base_module_get_current_method_return ((ValaCCodeBaseModule*) self);
		_tmp111_ = _tmp110_;
		if (_tmp111_) {
			ValaCCodeFunction* _tmp112_;
			ValaCCodeFunction* _tmp113_;
			_tmp112_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp113_ = _tmp112_;
			vala_ccode_function_add_label (_tmp113_, "_return");
		}
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
}

static void
vala_gtype_module_add_finalize_function (ValaGTypeModule* self,
                                         ValaClass* cl)
{
	gboolean _tmp0_;
	gboolean _tmp1_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != NULL);
	_tmp0_ = vala_class_get_is_compact (cl);
	_tmp1_ = _tmp0_;
	if (!_tmp1_) {
		ValaClass* fundamental_class = NULL;
		ValaClass* _tmp2_;
		ValaClass* _tmp10_;
		ValaClass* _tmp11_;
		ValaCCodeFile* _tmp38_;
		ValaCCodeBaseModuleEmitContext* _tmp39_;
		ValaCCodeFunction* _tmp40_;
		ValaCCodeFile* _tmp41_;
		ValaCCodeBaseModuleEmitContext* _tmp42_;
		ValaCCodeFunction* _tmp43_;
		_tmp2_ = _vala_code_node_ref0 (cl);
		fundamental_class = _tmp2_;
		while (TRUE) {
			ValaClass* _tmp3_;
			ValaClass* _tmp4_;
			ValaClass* _tmp5_;
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			ValaClass* _tmp8_;
			ValaClass* _tmp9_;
			_tmp3_ = fundamental_class;
			_tmp4_ = vala_class_get_base_class (_tmp3_);
			_tmp5_ = _tmp4_;
			if (!(_tmp5_ != NULL)) {
				break;
			}
			_tmp6_ = fundamental_class;
			_tmp7_ = vala_class_get_base_class (_tmp6_);
			_tmp8_ = _tmp7_;
			_tmp9_ = _vala_code_node_ref0 (_tmp8_);
			_vala_code_node_unref0 (fundamental_class);
			fundamental_class = _tmp9_;
		}
		_tmp10_ = vala_class_get_base_class (cl);
		_tmp11_ = _tmp10_;
		if (_tmp11_ != NULL) {
			ValaCCodeFunctionCall* ccast = NULL;
			ValaClass* _tmp12_;
			gchar* _tmp13_;
			gchar* _tmp14_;
			ValaCCodeIdentifier* _tmp15_;
			ValaCCodeIdentifier* _tmp16_;
			ValaCCodeFunctionCall* _tmp17_;
			ValaCCodeFunctionCall* _tmp18_;
			ValaCCodeFunctionCall* _tmp19_;
			gchar* _tmp20_;
			gchar* _tmp21_;
			gchar* _tmp22_;
			gchar* _tmp23_;
			ValaCCodeIdentifier* _tmp24_;
			ValaCCodeIdentifier* _tmp25_;
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeFunctionCall* _tmp26_;
			ValaCCodeMemberAccess* _tmp27_;
			ValaCCodeMemberAccess* _tmp28_;
			ValaCCodeFunctionCall* _tmp29_;
			ValaCCodeFunctionCall* _tmp30_;
			ValaCCodeFunctionCall* _tmp31_;
			ValaCCodeIdentifier* _tmp32_;
			ValaCCodeIdentifier* _tmp33_;
			ValaCCodeBaseModuleEmitContext* _tmp34_;
			ValaCCodeFunction* _tmp35_;
			ValaCCodeFunction* _tmp36_;
			ValaCCodeFunctionCall* _tmp37_;
			_tmp12_ = fundamental_class;
			_tmp13_ = vala_get_ccode_class_type_function (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp15_ = vala_ccode_identifier_new (_tmp14_);
			_tmp16_ = _tmp15_;
			_tmp17_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp16_);
			_tmp18_ = _tmp17_;
			_vala_ccode_node_unref0 (_tmp16_);
			_g_free0 (_tmp14_);
			ccast = _tmp18_;
			_tmp19_ = ccast;
			_tmp20_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
			_tmp21_ = _tmp20_;
			_tmp22_ = g_strdup_printf ("%s_parent_class", _tmp21_);
			_tmp23_ = _tmp22_;
			_tmp24_ = vala_ccode_identifier_new (_tmp23_);
			_tmp25_ = _tmp24_;
			vala_ccode_function_call_add_argument (_tmp19_, (ValaCCodeExpression*) _tmp25_);
			_vala_ccode_node_unref0 (_tmp25_);
			_g_free0 (_tmp23_);
			_g_free0 (_tmp21_);
			_tmp26_ = ccast;
			_tmp27_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp26_, "finalize");
			_tmp28_ = _tmp27_;
			_tmp29_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp28_);
			_tmp30_ = _tmp29_;
			_vala_ccode_node_unref0 (_tmp28_);
			ccall = _tmp30_;
			_tmp31_ = ccall;
			_tmp32_ = vala_ccode_identifier_new ("obj");
			_tmp33_ = _tmp32_;
			vala_ccode_function_call_add_argument (_tmp31_, (ValaCCodeExpression*) _tmp33_);
			_vala_ccode_node_unref0 (_tmp33_);
			_tmp34_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
			vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp34_);
			_tmp35_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp36_ = _tmp35_;
			_tmp37_ = ccall;
			vala_ccode_function_add_expression (_tmp36_, (ValaCCodeExpression*) _tmp37_);
			vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
			_vala_ccode_node_unref0 (ccall);
			_vala_ccode_node_unref0 (ccast);
		}
		_tmp38_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp39_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
		_tmp40_ = _tmp39_->ccode;
		vala_ccode_file_add_function_declaration (_tmp38_, _tmp40_);
		_tmp41_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp42_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
		_tmp43_ = _tmp42_->ccode;
		vala_ccode_file_add_function (_tmp41_, _tmp43_);
		_vala_code_node_unref0 (fundamental_class);
	} else {
		ValaClass* _tmp44_;
		ValaClass* _tmp45_;
		_tmp44_ = vala_class_get_base_class (cl);
		_tmp45_ = _tmp44_;
		if (_tmp45_ == NULL) {
			ValaCCodeFile* _tmp46_;
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeIdentifier* _tmp47_;
			ValaCCodeIdentifier* _tmp48_;
			ValaCCodeFunctionCall* _tmp49_;
			ValaCCodeFunctionCall* _tmp50_;
			ValaCCodeFunctionCall* _tmp51_;
			gchar* _tmp52_;
			gchar* _tmp53_;
			ValaCCodeIdentifier* _tmp54_;
			ValaCCodeIdentifier* _tmp55_;
			ValaCCodeFunctionCall* _tmp56_;
			ValaCCodeIdentifier* _tmp57_;
			ValaCCodeIdentifier* _tmp58_;
			ValaCCodeBaseModuleEmitContext* _tmp59_;
			ValaCCodeFunction* _tmp60_;
			ValaCCodeFunction* _tmp61_;
			ValaCCodeFunctionCall* _tmp62_;
			ValaCCodeFile* _tmp63_;
			ValaCCodeBaseModuleEmitContext* _tmp64_;
			ValaCCodeFunction* _tmp65_;
			_tmp46_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_file_add_include (_tmp46_, "glib.h", FALSE);
			_tmp47_ = vala_ccode_identifier_new ("g_slice_free");
			_tmp48_ = _tmp47_;
			_tmp49_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp48_);
			_tmp50_ = _tmp49_;
			_vala_ccode_node_unref0 (_tmp48_);
			ccall = _tmp50_;
			_tmp51_ = ccall;
			_tmp52_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp53_ = _tmp52_;
			_tmp54_ = vala_ccode_identifier_new (_tmp53_);
			_tmp55_ = _tmp54_;
			vala_ccode_function_call_add_argument (_tmp51_, (ValaCCodeExpression*) _tmp55_);
			_vala_ccode_node_unref0 (_tmp55_);
			_g_free0 (_tmp53_);
			_tmp56_ = ccall;
			_tmp57_ = vala_ccode_identifier_new ("self");
			_tmp58_ = _tmp57_;
			vala_ccode_function_call_add_argument (_tmp56_, (ValaCCodeExpression*) _tmp58_);
			_vala_ccode_node_unref0 (_tmp58_);
			_tmp59_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
			vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp59_);
			_tmp60_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp61_ = _tmp60_;
			_tmp62_ = ccall;
			vala_ccode_function_add_expression (_tmp61_, (ValaCCodeExpression*) _tmp62_);
			vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
			_tmp63_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp64_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
			_tmp65_ = _tmp64_->ccode;
			vala_ccode_file_add_function (_tmp63_, _tmp65_);
			_vala_ccode_node_unref0 (ccall);
		} else {
			ValaClass* _tmp66_;
			_tmp66_ = ((ValaCCodeBaseModule*) self)->gsource_type;
			if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) cl, (ValaTypeSymbol*) _tmp66_)) {
				ValaCCodeFile* _tmp67_;
				ValaCCodeBaseModuleEmitContext* _tmp68_;
				ValaCCodeFunction* _tmp69_;
				_tmp67_ = ((ValaCCodeBaseModule*) self)->cfile;
				_tmp68_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
				_tmp69_ = _tmp68_->ccode;
				vala_ccode_file_add_function (_tmp67_, _tmp69_);
			}
		}
	}
}

static ValaCCodeExpression*
vala_gtype_module_real_get_param_spec_cexpression (ValaCCodeBaseModule* base,
                                                   ValaProperty* prop)
{
	ValaGTypeModule * self;
	ValaTypeSymbol* cl = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaCCodeIdentifier* prop_array = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeIdentifier* _tmp7_;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeIdentifier* prop_enum_value = NULL;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeIdentifier* _tmp13_;
	ValaCCodeIdentifier* _tmp14_;
	ValaCCodeElementAccess* _tmp15_;
	ValaCCodeExpression* result;
	self = (ValaGTypeModule*) base;
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
	cl = _tmp2_;
	_tmp3_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strdup_printf ("%s_properties", _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_ccode_identifier_new (_tmp6_);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	_g_free0 (_tmp4_);
	prop_array = _tmp8_;
	_tmp9_ = vala_get_ccode_upper_case_name ((ValaSymbol*) prop, NULL);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%s_PROPERTY", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_identifier_new (_tmp12_);
	_tmp14_ = _tmp13_;
	_g_free0 (_tmp12_);
	_g_free0 (_tmp10_);
	prop_enum_value = _tmp14_;
	_tmp15_ = vala_ccode_element_access_new ((ValaCCodeExpression*) prop_array, (ValaCCodeExpression*) prop_enum_value);
	result = (ValaCCodeExpression*) _tmp15_;
	_vala_ccode_node_unref0 (prop_enum_value);
	_vala_ccode_node_unref0 (prop_array);
	_vala_code_node_unref0 (cl);
	return result;
}

static ValaCCodeExpression*
vala_gtype_module_real_get_param_spec (ValaCCodeBaseModule* base,
                                       ValaProperty* prop)
{
	ValaGTypeModule * self;
	ValaCCodeFunctionCall* cspec = NULL;
	ValaCCodeFunctionCall* _tmp0_;
	ValaCCodeFunctionCall* _tmp1_;
	ValaCCodeConstant* _tmp2_;
	ValaCCodeConstant* _tmp3_;
	ValaCCodeFunctionCall* _tmp4_;
	const gchar* _tmp5_;
	const gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	ValaCCodeConstant* _tmp9_;
	ValaCCodeConstant* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	const gchar* _tmp12_;
	const gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaCCodeConstant* _tmp16_;
	ValaCCodeConstant* _tmp17_;
	ValaTypeSymbol* type_symbol = NULL;
	ValaDataType* _tmp18_;
	ValaDataType* _tmp19_;
	ValaTypeSymbol* _tmp20_;
	ValaTypeSymbol* _tmp21_;
	gboolean _tmp22_ = FALSE;
	ValaTypeSymbol* _tmp23_;
	gchar* pflags = NULL;
	gchar* _tmp372_;
	gboolean _tmp373_ = FALSE;
	ValaPropertyAccessor* _tmp374_;
	ValaPropertyAccessor* _tmp375_;
	gboolean _tmp382_ = FALSE;
	ValaPropertyAccessor* _tmp383_;
	ValaPropertyAccessor* _tmp384_;
	gboolean _tmp403_;
	gboolean _tmp404_;
	ValaVersionAttribute* _tmp407_;
	ValaVersionAttribute* _tmp408_;
	gboolean _tmp409_;
	gboolean _tmp410_;
	ValaCCodeFunctionCall* _tmp413_;
	const gchar* _tmp414_;
	ValaCCodeConstant* _tmp415_;
	ValaCCodeConstant* _tmp416_;
	ValaSymbol* _tmp417_;
	ValaSymbol* _tmp418_;
	ValaCCodeExpression* result;
	self = (ValaGTypeModule*) base;
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = vala_ccode_function_call_new (NULL);
	cspec = _tmp0_;
	_tmp1_ = cspec;
	_tmp2_ = vala_ccode_base_module_get_property_canonical_cconstant ((ValaCCodeBaseModule*) self, prop);
	_tmp3_ = _tmp2_;
	vala_ccode_function_call_add_argument (_tmp1_, (ValaCCodeExpression*) _tmp3_);
	_vala_ccode_node_unref0 (_tmp3_);
	_tmp4_ = cspec;
	_tmp5_ = vala_property_get_nick (prop);
	_tmp6_ = _tmp5_;
	_tmp7_ = g_strdup_printf ("\"%s\"", _tmp6_);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_ccode_constant_new (_tmp8_);
	_tmp10_ = _tmp9_;
	vala_ccode_function_call_add_argument (_tmp4_, (ValaCCodeExpression*) _tmp10_);
	_vala_ccode_node_unref0 (_tmp10_);
	_g_free0 (_tmp8_);
	_tmp11_ = cspec;
	_tmp12_ = vala_property_get_blurb (prop);
	_tmp13_ = _tmp12_;
	_tmp14_ = g_strdup_printf ("\"%s\"", _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_constant_new (_tmp15_);
	_tmp17_ = _tmp16_;
	vala_ccode_function_call_add_argument (_tmp11_, (ValaCCodeExpression*) _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_g_free0 (_tmp15_);
	_tmp18_ = vala_property_get_property_type (prop);
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_data_type_get_type_symbol (_tmp19_);
	_tmp21_ = _tmp20_;
	type_symbol = _tmp21_;
	_tmp23_ = type_symbol;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_CLASS)) {
		_tmp22_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp24_;
		_tmp24_ = type_symbol;
		_tmp22_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_INTERFACE);
	}
	if (_tmp22_) {
		gchar* param_spec_name = NULL;
		ValaTypeSymbol* _tmp25_;
		gchar* _tmp26_;
		ValaCCodeFunctionCall* _tmp27_;
		const gchar* _tmp28_;
		ValaCCodeIdentifier* _tmp29_;
		ValaCCodeIdentifier* _tmp30_;
		const gchar* _tmp31_;
		_tmp25_ = type_symbol;
		_tmp26_ = vala_get_ccode_param_spec_function ((ValaCodeNode*) _tmp25_);
		param_spec_name = _tmp26_;
		_tmp27_ = cspec;
		_tmp28_ = param_spec_name;
		_tmp29_ = vala_ccode_identifier_new (_tmp28_);
		_tmp30_ = _tmp29_;
		vala_ccode_function_call_set_call (_tmp27_, (ValaCCodeExpression*) _tmp30_);
		_vala_ccode_node_unref0 (_tmp30_);
		_tmp31_ = param_spec_name;
		if (g_strcmp0 (_tmp31_, "g_param_spec_string") == 0) {
			ValaCCodeFunctionCall* _tmp32_;
			ValaCCodeConstant* _tmp33_;
			ValaCCodeConstant* _tmp34_;
			_tmp32_ = cspec;
			_tmp33_ = vala_ccode_constant_new ("NULL");
			_tmp34_ = _tmp33_;
			vala_ccode_function_call_add_argument (_tmp32_, (ValaCCodeExpression*) _tmp34_);
			_vala_ccode_node_unref0 (_tmp34_);
		} else {
			const gchar* _tmp35_;
			_tmp35_ = param_spec_name;
			if (g_strcmp0 (_tmp35_, "g_param_spec_variant") == 0) {
				ValaCCodeFunctionCall* _tmp36_;
				ValaCCodeConstant* _tmp37_;
				ValaCCodeConstant* _tmp38_;
				ValaCCodeFunctionCall* _tmp39_;
				ValaCCodeConstant* _tmp40_;
				ValaCCodeConstant* _tmp41_;
				_tmp36_ = cspec;
				_tmp37_ = vala_ccode_constant_new ("G_VARIANT_TYPE_ANY");
				_tmp38_ = _tmp37_;
				vala_ccode_function_call_add_argument (_tmp36_, (ValaCCodeExpression*) _tmp38_);
				_vala_ccode_node_unref0 (_tmp38_);
				_tmp39_ = cspec;
				_tmp40_ = vala_ccode_constant_new ("NULL");
				_tmp41_ = _tmp40_;
				vala_ccode_function_call_add_argument (_tmp39_, (ValaCCodeExpression*) _tmp41_);
				_vala_ccode_node_unref0 (_tmp41_);
			} else {
				const gchar* _tmp42_;
				_tmp42_ = param_spec_name;
				if (g_strcmp0 (_tmp42_, "gtk_param_spec_expression") == 0) {
				} else {
					ValaTypeSymbol* _tmp43_;
					gchar* _tmp44_;
					gchar* _tmp45_;
					gboolean _tmp46_;
					_tmp43_ = type_symbol;
					_tmp44_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp43_);
					_tmp45_ = _tmp44_;
					_tmp46_ = g_strcmp0 (_tmp45_, "G_TYPE_POINTER") != 0;
					_g_free0 (_tmp45_);
					if (_tmp46_) {
						ValaCCodeFunctionCall* _tmp47_;
						ValaTypeSymbol* _tmp48_;
						gchar* _tmp49_;
						gchar* _tmp50_;
						ValaCCodeIdentifier* _tmp51_;
						ValaCCodeIdentifier* _tmp52_;
						_tmp47_ = cspec;
						_tmp48_ = type_symbol;
						_tmp49_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp48_);
						_tmp50_ = _tmp49_;
						_tmp51_ = vala_ccode_identifier_new (_tmp50_);
						_tmp52_ = _tmp51_;
						vala_ccode_function_call_add_argument (_tmp47_, (ValaCCodeExpression*) _tmp52_);
						_vala_ccode_node_unref0 (_tmp52_);
						_g_free0 (_tmp50_);
					}
				}
			}
		}
		_g_free0 (param_spec_name);
	} else {
		ValaTypeSymbol* _tmp53_;
		_tmp53_ = type_symbol;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp53_, VALA_TYPE_ENUM)) {
			ValaEnum* e = NULL;
			ValaTypeSymbol* _tmp54_;
			ValaEnum* _tmp55_;
			ValaExpression* _tmp92_;
			ValaExpression* _tmp93_;
			_tmp54_ = type_symbol;
			e = G_TYPE_CHECK_INSTANCE_CAST (_tmp54_, VALA_TYPE_ENUM, ValaEnum);
			_tmp55_ = e;
			if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp55_)) {
				ValaEnum* _tmp56_;
				gboolean _tmp57_;
				gboolean _tmp58_;
				ValaCCodeFunctionCall* _tmp65_;
				ValaEnum* _tmp66_;
				gchar* _tmp67_;
				gchar* _tmp68_;
				ValaCCodeIdentifier* _tmp69_;
				ValaCCodeIdentifier* _tmp70_;
				_tmp56_ = e;
				_tmp57_ = vala_enum_get_is_flags (_tmp56_);
				_tmp58_ = _tmp57_;
				if (_tmp58_) {
					ValaCCodeFunctionCall* _tmp59_;
					ValaCCodeIdentifier* _tmp60_;
					ValaCCodeIdentifier* _tmp61_;
					_tmp59_ = cspec;
					_tmp60_ = vala_ccode_identifier_new ("g_param_spec_flags");
					_tmp61_ = _tmp60_;
					vala_ccode_function_call_set_call (_tmp59_, (ValaCCodeExpression*) _tmp61_);
					_vala_ccode_node_unref0 (_tmp61_);
				} else {
					ValaCCodeFunctionCall* _tmp62_;
					ValaCCodeIdentifier* _tmp63_;
					ValaCCodeIdentifier* _tmp64_;
					_tmp62_ = cspec;
					_tmp63_ = vala_ccode_identifier_new ("g_param_spec_enum");
					_tmp64_ = _tmp63_;
					vala_ccode_function_call_set_call (_tmp62_, (ValaCCodeExpression*) _tmp64_);
					_vala_ccode_node_unref0 (_tmp64_);
				}
				_tmp65_ = cspec;
				_tmp66_ = e;
				_tmp67_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp66_);
				_tmp68_ = _tmp67_;
				_tmp69_ = vala_ccode_identifier_new (_tmp68_);
				_tmp70_ = _tmp69_;
				vala_ccode_function_call_add_argument (_tmp65_, (ValaCCodeExpression*) _tmp70_);
				_vala_ccode_node_unref0 (_tmp70_);
				_g_free0 (_tmp68_);
			} else {
				ValaEnum* _tmp71_;
				gboolean _tmp72_;
				gboolean _tmp73_;
				_tmp71_ = e;
				_tmp72_ = vala_enum_get_is_flags (_tmp71_);
				_tmp73_ = _tmp72_;
				if (_tmp73_) {
					ValaCCodeFunctionCall* _tmp74_;
					ValaCCodeIdentifier* _tmp75_;
					ValaCCodeIdentifier* _tmp76_;
					ValaCCodeFunctionCall* _tmp77_;
					ValaCCodeConstant* _tmp78_;
					ValaCCodeConstant* _tmp79_;
					ValaCCodeFunctionCall* _tmp80_;
					ValaCCodeConstant* _tmp81_;
					ValaCCodeConstant* _tmp82_;
					_tmp74_ = cspec;
					_tmp75_ = vala_ccode_identifier_new ("g_param_spec_uint");
					_tmp76_ = _tmp75_;
					vala_ccode_function_call_set_call (_tmp74_, (ValaCCodeExpression*) _tmp76_);
					_vala_ccode_node_unref0 (_tmp76_);
					_tmp77_ = cspec;
					_tmp78_ = vala_ccode_constant_new ("0");
					_tmp79_ = _tmp78_;
					vala_ccode_function_call_add_argument (_tmp77_, (ValaCCodeExpression*) _tmp79_);
					_vala_ccode_node_unref0 (_tmp79_);
					_tmp80_ = cspec;
					_tmp81_ = vala_ccode_constant_new ("G_MAXUINT");
					_tmp82_ = _tmp81_;
					vala_ccode_function_call_add_argument (_tmp80_, (ValaCCodeExpression*) _tmp82_);
					_vala_ccode_node_unref0 (_tmp82_);
				} else {
					ValaCCodeFunctionCall* _tmp83_;
					ValaCCodeIdentifier* _tmp84_;
					ValaCCodeIdentifier* _tmp85_;
					ValaCCodeFunctionCall* _tmp86_;
					ValaCCodeConstant* _tmp87_;
					ValaCCodeConstant* _tmp88_;
					ValaCCodeFunctionCall* _tmp89_;
					ValaCCodeConstant* _tmp90_;
					ValaCCodeConstant* _tmp91_;
					_tmp83_ = cspec;
					_tmp84_ = vala_ccode_identifier_new ("g_param_spec_int");
					_tmp85_ = _tmp84_;
					vala_ccode_function_call_set_call (_tmp83_, (ValaCCodeExpression*) _tmp85_);
					_vala_ccode_node_unref0 (_tmp85_);
					_tmp86_ = cspec;
					_tmp87_ = vala_ccode_constant_new ("G_MININT");
					_tmp88_ = _tmp87_;
					vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp88_);
					_vala_ccode_node_unref0 (_tmp88_);
					_tmp89_ = cspec;
					_tmp90_ = vala_ccode_constant_new ("G_MAXINT");
					_tmp91_ = _tmp90_;
					vala_ccode_function_call_add_argument (_tmp89_, (ValaCCodeExpression*) _tmp91_);
					_vala_ccode_node_unref0 (_tmp91_);
				}
			}
			_tmp92_ = vala_property_get_initializer (prop);
			_tmp93_ = _tmp92_;
			if (_tmp93_ != NULL) {
				ValaCCodeFunctionCall* _tmp94_;
				ValaExpression* _tmp95_;
				ValaExpression* _tmp96_;
				ValaCCodeExpression* _tmp97_;
				ValaCCodeExpression* _tmp98_;
				_tmp94_ = cspec;
				_tmp95_ = vala_property_get_initializer (prop);
				_tmp96_ = _tmp95_;
				_tmp97_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp96_);
				_tmp98_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp97_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
				vala_ccode_function_call_add_argument (_tmp94_, _tmp98_);
				_vala_ccode_node_unref0 (_tmp98_);
			} else {
				ValaCCodeFunctionCall* _tmp99_;
				ValaTypeSymbol* _tmp100_;
				gchar* _tmp101_;
				gchar* _tmp102_;
				ValaCCodeConstant* _tmp103_;
				ValaCCodeConstant* _tmp104_;
				_tmp99_ = cspec;
				_tmp100_ = type_symbol;
				_tmp101_ = vala_get_ccode_default_value (_tmp100_);
				_tmp102_ = _tmp101_;
				_tmp103_ = vala_ccode_constant_new (_tmp102_);
				_tmp104_ = _tmp103_;
				vala_ccode_function_call_add_argument (_tmp99_, (ValaCCodeExpression*) _tmp104_);
				_vala_ccode_node_unref0 (_tmp104_);
				_g_free0 (_tmp102_);
			}
		} else {
			ValaTypeSymbol* _tmp105_;
			_tmp105_ = type_symbol;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp105_, VALA_TYPE_ERROR_DOMAIN)) {
				ValaCCodeFunctionCall* _tmp106_;
				ValaCCodeIdentifier* _tmp107_;
				ValaCCodeIdentifier* _tmp108_;
				ValaCCodeFunctionCall* _tmp109_;
				ValaCCodeIdentifier* _tmp110_;
				ValaCCodeIdentifier* _tmp111_;
				_tmp106_ = cspec;
				_tmp107_ = vala_ccode_identifier_new ("g_param_spec_boxed");
				_tmp108_ = _tmp107_;
				vala_ccode_function_call_set_call (_tmp106_, (ValaCCodeExpression*) _tmp108_);
				_vala_ccode_node_unref0 (_tmp108_);
				_tmp109_ = cspec;
				_tmp110_ = vala_ccode_identifier_new ("G_TYPE_ERROR");
				_tmp111_ = _tmp110_;
				vala_ccode_function_call_add_argument (_tmp109_, (ValaCCodeExpression*) _tmp111_);
				_vala_ccode_node_unref0 (_tmp111_);
			} else {
				ValaTypeSymbol* _tmp112_;
				_tmp112_ = type_symbol;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp112_, VALA_TYPE_STRUCT)) {
					ValaStruct* st = NULL;
					ValaTypeSymbol* _tmp113_;
					gchar* type_id = NULL;
					ValaStruct* _tmp114_;
					gchar* _tmp115_;
					const gchar* _tmp116_;
					_tmp113_ = type_symbol;
					st = G_TYPE_CHECK_INSTANCE_CAST (_tmp113_, VALA_TYPE_STRUCT, ValaStruct);
					_tmp114_ = st;
					_tmp115_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp114_);
					type_id = _tmp115_;
					_tmp116_ = type_id;
					if (g_strcmp0 (_tmp116_, "G_TYPE_INT") == 0) {
						ValaCCodeFunctionCall* _tmp117_;
						ValaCCodeIdentifier* _tmp118_;
						ValaCCodeIdentifier* _tmp119_;
						ValaCCodeFunctionCall* _tmp120_;
						ValaCCodeConstant* _tmp121_;
						ValaCCodeConstant* _tmp122_;
						ValaCCodeFunctionCall* _tmp123_;
						ValaCCodeConstant* _tmp124_;
						ValaCCodeConstant* _tmp125_;
						ValaExpression* _tmp126_;
						ValaExpression* _tmp127_;
						_tmp117_ = cspec;
						_tmp118_ = vala_ccode_identifier_new ("g_param_spec_int");
						_tmp119_ = _tmp118_;
						vala_ccode_function_call_set_call (_tmp117_, (ValaCCodeExpression*) _tmp119_);
						_vala_ccode_node_unref0 (_tmp119_);
						_tmp120_ = cspec;
						_tmp121_ = vala_ccode_constant_new ("G_MININT");
						_tmp122_ = _tmp121_;
						vala_ccode_function_call_add_argument (_tmp120_, (ValaCCodeExpression*) _tmp122_);
						_vala_ccode_node_unref0 (_tmp122_);
						_tmp123_ = cspec;
						_tmp124_ = vala_ccode_constant_new ("G_MAXINT");
						_tmp125_ = _tmp124_;
						vala_ccode_function_call_add_argument (_tmp123_, (ValaCCodeExpression*) _tmp125_);
						_vala_ccode_node_unref0 (_tmp125_);
						_tmp126_ = vala_property_get_initializer (prop);
						_tmp127_ = _tmp126_;
						if (_tmp127_ != NULL) {
							ValaCCodeFunctionCall* _tmp128_;
							ValaExpression* _tmp129_;
							ValaExpression* _tmp130_;
							ValaCCodeExpression* _tmp131_;
							ValaCCodeExpression* _tmp132_;
							_tmp128_ = cspec;
							_tmp129_ = vala_property_get_initializer (prop);
							_tmp130_ = _tmp129_;
							_tmp131_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp130_);
							_tmp132_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp131_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
							vala_ccode_function_call_add_argument (_tmp128_, _tmp132_);
							_vala_ccode_node_unref0 (_tmp132_);
						} else {
							ValaCCodeFunctionCall* _tmp133_;
							ValaCCodeConstant* _tmp134_;
							ValaCCodeConstant* _tmp135_;
							_tmp133_ = cspec;
							_tmp134_ = vala_ccode_constant_new ("0");
							_tmp135_ = _tmp134_;
							vala_ccode_function_call_add_argument (_tmp133_, (ValaCCodeExpression*) _tmp135_);
							_vala_ccode_node_unref0 (_tmp135_);
						}
					} else {
						const gchar* _tmp136_;
						_tmp136_ = type_id;
						if (g_strcmp0 (_tmp136_, "G_TYPE_UINT") == 0) {
							ValaCCodeFunctionCall* _tmp137_;
							ValaCCodeIdentifier* _tmp138_;
							ValaCCodeIdentifier* _tmp139_;
							ValaCCodeFunctionCall* _tmp140_;
							ValaCCodeConstant* _tmp141_;
							ValaCCodeConstant* _tmp142_;
							ValaCCodeFunctionCall* _tmp143_;
							ValaCCodeConstant* _tmp144_;
							ValaCCodeConstant* _tmp145_;
							ValaExpression* _tmp146_;
							ValaExpression* _tmp147_;
							_tmp137_ = cspec;
							_tmp138_ = vala_ccode_identifier_new ("g_param_spec_uint");
							_tmp139_ = _tmp138_;
							vala_ccode_function_call_set_call (_tmp137_, (ValaCCodeExpression*) _tmp139_);
							_vala_ccode_node_unref0 (_tmp139_);
							_tmp140_ = cspec;
							_tmp141_ = vala_ccode_constant_new ("0");
							_tmp142_ = _tmp141_;
							vala_ccode_function_call_add_argument (_tmp140_, (ValaCCodeExpression*) _tmp142_);
							_vala_ccode_node_unref0 (_tmp142_);
							_tmp143_ = cspec;
							_tmp144_ = vala_ccode_constant_new ("G_MAXUINT");
							_tmp145_ = _tmp144_;
							vala_ccode_function_call_add_argument (_tmp143_, (ValaCCodeExpression*) _tmp145_);
							_vala_ccode_node_unref0 (_tmp145_);
							_tmp146_ = vala_property_get_initializer (prop);
							_tmp147_ = _tmp146_;
							if (_tmp147_ != NULL) {
								ValaCCodeFunctionCall* _tmp148_;
								ValaExpression* _tmp149_;
								ValaExpression* _tmp150_;
								ValaCCodeExpression* _tmp151_;
								ValaCCodeExpression* _tmp152_;
								_tmp148_ = cspec;
								_tmp149_ = vala_property_get_initializer (prop);
								_tmp150_ = _tmp149_;
								_tmp151_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp150_);
								_tmp152_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp151_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
								vala_ccode_function_call_add_argument (_tmp148_, _tmp152_);
								_vala_ccode_node_unref0 (_tmp152_);
							} else {
								ValaCCodeFunctionCall* _tmp153_;
								ValaCCodeConstant* _tmp154_;
								ValaCCodeConstant* _tmp155_;
								_tmp153_ = cspec;
								_tmp154_ = vala_ccode_constant_new ("0U");
								_tmp155_ = _tmp154_;
								vala_ccode_function_call_add_argument (_tmp153_, (ValaCCodeExpression*) _tmp155_);
								_vala_ccode_node_unref0 (_tmp155_);
							}
						} else {
							const gchar* _tmp156_;
							_tmp156_ = type_id;
							if (g_strcmp0 (_tmp156_, "G_TYPE_INT64") == 0) {
								ValaCCodeFunctionCall* _tmp157_;
								ValaCCodeIdentifier* _tmp158_;
								ValaCCodeIdentifier* _tmp159_;
								ValaCCodeFunctionCall* _tmp160_;
								ValaCCodeConstant* _tmp161_;
								ValaCCodeConstant* _tmp162_;
								ValaCCodeFunctionCall* _tmp163_;
								ValaCCodeConstant* _tmp164_;
								ValaCCodeConstant* _tmp165_;
								ValaExpression* _tmp166_;
								ValaExpression* _tmp167_;
								_tmp157_ = cspec;
								_tmp158_ = vala_ccode_identifier_new ("g_param_spec_int64");
								_tmp159_ = _tmp158_;
								vala_ccode_function_call_set_call (_tmp157_, (ValaCCodeExpression*) _tmp159_);
								_vala_ccode_node_unref0 (_tmp159_);
								_tmp160_ = cspec;
								_tmp161_ = vala_ccode_constant_new ("G_MININT64");
								_tmp162_ = _tmp161_;
								vala_ccode_function_call_add_argument (_tmp160_, (ValaCCodeExpression*) _tmp162_);
								_vala_ccode_node_unref0 (_tmp162_);
								_tmp163_ = cspec;
								_tmp164_ = vala_ccode_constant_new ("G_MAXINT64");
								_tmp165_ = _tmp164_;
								vala_ccode_function_call_add_argument (_tmp163_, (ValaCCodeExpression*) _tmp165_);
								_vala_ccode_node_unref0 (_tmp165_);
								_tmp166_ = vala_property_get_initializer (prop);
								_tmp167_ = _tmp166_;
								if (_tmp167_ != NULL) {
									ValaCCodeFunctionCall* _tmp168_;
									ValaExpression* _tmp169_;
									ValaExpression* _tmp170_;
									ValaCCodeExpression* _tmp171_;
									ValaCCodeExpression* _tmp172_;
									_tmp168_ = cspec;
									_tmp169_ = vala_property_get_initializer (prop);
									_tmp170_ = _tmp169_;
									_tmp171_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp170_);
									_tmp172_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp171_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
									vala_ccode_function_call_add_argument (_tmp168_, _tmp172_);
									_vala_ccode_node_unref0 (_tmp172_);
								} else {
									ValaCCodeFunctionCall* _tmp173_;
									ValaCCodeConstant* _tmp174_;
									ValaCCodeConstant* _tmp175_;
									_tmp173_ = cspec;
									_tmp174_ = vala_ccode_constant_new ("0");
									_tmp175_ = _tmp174_;
									vala_ccode_function_call_add_argument (_tmp173_, (ValaCCodeExpression*) _tmp175_);
									_vala_ccode_node_unref0 (_tmp175_);
								}
							} else {
								const gchar* _tmp176_;
								_tmp176_ = type_id;
								if (g_strcmp0 (_tmp176_, "G_TYPE_UINT64") == 0) {
									ValaCCodeFunctionCall* _tmp177_;
									ValaCCodeIdentifier* _tmp178_;
									ValaCCodeIdentifier* _tmp179_;
									ValaCCodeFunctionCall* _tmp180_;
									ValaCCodeConstant* _tmp181_;
									ValaCCodeConstant* _tmp182_;
									ValaCCodeFunctionCall* _tmp183_;
									ValaCCodeConstant* _tmp184_;
									ValaCCodeConstant* _tmp185_;
									ValaExpression* _tmp186_;
									ValaExpression* _tmp187_;
									_tmp177_ = cspec;
									_tmp178_ = vala_ccode_identifier_new ("g_param_spec_uint64");
									_tmp179_ = _tmp178_;
									vala_ccode_function_call_set_call (_tmp177_, (ValaCCodeExpression*) _tmp179_);
									_vala_ccode_node_unref0 (_tmp179_);
									_tmp180_ = cspec;
									_tmp181_ = vala_ccode_constant_new ("0");
									_tmp182_ = _tmp181_;
									vala_ccode_function_call_add_argument (_tmp180_, (ValaCCodeExpression*) _tmp182_);
									_vala_ccode_node_unref0 (_tmp182_);
									_tmp183_ = cspec;
									_tmp184_ = vala_ccode_constant_new ("G_MAXUINT64");
									_tmp185_ = _tmp184_;
									vala_ccode_function_call_add_argument (_tmp183_, (ValaCCodeExpression*) _tmp185_);
									_vala_ccode_node_unref0 (_tmp185_);
									_tmp186_ = vala_property_get_initializer (prop);
									_tmp187_ = _tmp186_;
									if (_tmp187_ != NULL) {
										ValaCCodeFunctionCall* _tmp188_;
										ValaExpression* _tmp189_;
										ValaExpression* _tmp190_;
										ValaCCodeExpression* _tmp191_;
										ValaCCodeExpression* _tmp192_;
										_tmp188_ = cspec;
										_tmp189_ = vala_property_get_initializer (prop);
										_tmp190_ = _tmp189_;
										_tmp191_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp190_);
										_tmp192_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp191_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
										vala_ccode_function_call_add_argument (_tmp188_, _tmp192_);
										_vala_ccode_node_unref0 (_tmp192_);
									} else {
										ValaCCodeFunctionCall* _tmp193_;
										ValaCCodeConstant* _tmp194_;
										ValaCCodeConstant* _tmp195_;
										_tmp193_ = cspec;
										_tmp194_ = vala_ccode_constant_new ("0U");
										_tmp195_ = _tmp194_;
										vala_ccode_function_call_add_argument (_tmp193_, (ValaCCodeExpression*) _tmp195_);
										_vala_ccode_node_unref0 (_tmp195_);
									}
								} else {
									const gchar* _tmp196_;
									_tmp196_ = type_id;
									if (g_strcmp0 (_tmp196_, "G_TYPE_LONG") == 0) {
										ValaCCodeFunctionCall* _tmp197_;
										ValaCCodeIdentifier* _tmp198_;
										ValaCCodeIdentifier* _tmp199_;
										ValaCCodeFunctionCall* _tmp200_;
										ValaCCodeConstant* _tmp201_;
										ValaCCodeConstant* _tmp202_;
										ValaCCodeFunctionCall* _tmp203_;
										ValaCCodeConstant* _tmp204_;
										ValaCCodeConstant* _tmp205_;
										ValaExpression* _tmp206_;
										ValaExpression* _tmp207_;
										_tmp197_ = cspec;
										_tmp198_ = vala_ccode_identifier_new ("g_param_spec_long");
										_tmp199_ = _tmp198_;
										vala_ccode_function_call_set_call (_tmp197_, (ValaCCodeExpression*) _tmp199_);
										_vala_ccode_node_unref0 (_tmp199_);
										_tmp200_ = cspec;
										_tmp201_ = vala_ccode_constant_new ("G_MINLONG");
										_tmp202_ = _tmp201_;
										vala_ccode_function_call_add_argument (_tmp200_, (ValaCCodeExpression*) _tmp202_);
										_vala_ccode_node_unref0 (_tmp202_);
										_tmp203_ = cspec;
										_tmp204_ = vala_ccode_constant_new ("G_MAXLONG");
										_tmp205_ = _tmp204_;
										vala_ccode_function_call_add_argument (_tmp203_, (ValaCCodeExpression*) _tmp205_);
										_vala_ccode_node_unref0 (_tmp205_);
										_tmp206_ = vala_property_get_initializer (prop);
										_tmp207_ = _tmp206_;
										if (_tmp207_ != NULL) {
											ValaCCodeFunctionCall* _tmp208_;
											ValaExpression* _tmp209_;
											ValaExpression* _tmp210_;
											ValaCCodeExpression* _tmp211_;
											ValaCCodeExpression* _tmp212_;
											_tmp208_ = cspec;
											_tmp209_ = vala_property_get_initializer (prop);
											_tmp210_ = _tmp209_;
											_tmp211_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp210_);
											_tmp212_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp211_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
											vala_ccode_function_call_add_argument (_tmp208_, _tmp212_);
											_vala_ccode_node_unref0 (_tmp212_);
										} else {
											ValaCCodeFunctionCall* _tmp213_;
											ValaCCodeConstant* _tmp214_;
											ValaCCodeConstant* _tmp215_;
											_tmp213_ = cspec;
											_tmp214_ = vala_ccode_constant_new ("0L");
											_tmp215_ = _tmp214_;
											vala_ccode_function_call_add_argument (_tmp213_, (ValaCCodeExpression*) _tmp215_);
											_vala_ccode_node_unref0 (_tmp215_);
										}
									} else {
										const gchar* _tmp216_;
										_tmp216_ = type_id;
										if (g_strcmp0 (_tmp216_, "G_TYPE_ULONG") == 0) {
											ValaCCodeFunctionCall* _tmp217_;
											ValaCCodeIdentifier* _tmp218_;
											ValaCCodeIdentifier* _tmp219_;
											ValaCCodeFunctionCall* _tmp220_;
											ValaCCodeConstant* _tmp221_;
											ValaCCodeConstant* _tmp222_;
											ValaCCodeFunctionCall* _tmp223_;
											ValaCCodeConstant* _tmp224_;
											ValaCCodeConstant* _tmp225_;
											ValaExpression* _tmp226_;
											ValaExpression* _tmp227_;
											_tmp217_ = cspec;
											_tmp218_ = vala_ccode_identifier_new ("g_param_spec_ulong");
											_tmp219_ = _tmp218_;
											vala_ccode_function_call_set_call (_tmp217_, (ValaCCodeExpression*) _tmp219_);
											_vala_ccode_node_unref0 (_tmp219_);
											_tmp220_ = cspec;
											_tmp221_ = vala_ccode_constant_new ("0");
											_tmp222_ = _tmp221_;
											vala_ccode_function_call_add_argument (_tmp220_, (ValaCCodeExpression*) _tmp222_);
											_vala_ccode_node_unref0 (_tmp222_);
											_tmp223_ = cspec;
											_tmp224_ = vala_ccode_constant_new ("G_MAXULONG");
											_tmp225_ = _tmp224_;
											vala_ccode_function_call_add_argument (_tmp223_, (ValaCCodeExpression*) _tmp225_);
											_vala_ccode_node_unref0 (_tmp225_);
											_tmp226_ = vala_property_get_initializer (prop);
											_tmp227_ = _tmp226_;
											if (_tmp227_ != NULL) {
												ValaCCodeFunctionCall* _tmp228_;
												ValaExpression* _tmp229_;
												ValaExpression* _tmp230_;
												ValaCCodeExpression* _tmp231_;
												ValaCCodeExpression* _tmp232_;
												_tmp228_ = cspec;
												_tmp229_ = vala_property_get_initializer (prop);
												_tmp230_ = _tmp229_;
												_tmp231_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp230_);
												_tmp232_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp231_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
												vala_ccode_function_call_add_argument (_tmp228_, _tmp232_);
												_vala_ccode_node_unref0 (_tmp232_);
											} else {
												ValaCCodeFunctionCall* _tmp233_;
												ValaCCodeConstant* _tmp234_;
												ValaCCodeConstant* _tmp235_;
												_tmp233_ = cspec;
												_tmp234_ = vala_ccode_constant_new ("0UL");
												_tmp235_ = _tmp234_;
												vala_ccode_function_call_add_argument (_tmp233_, (ValaCCodeExpression*) _tmp235_);
												_vala_ccode_node_unref0 (_tmp235_);
											}
										} else {
											const gchar* _tmp236_;
											_tmp236_ = type_id;
											if (g_strcmp0 (_tmp236_, "G_TYPE_BOOLEAN") == 0) {
												ValaCCodeFunctionCall* _tmp237_;
												ValaCCodeIdentifier* _tmp238_;
												ValaCCodeIdentifier* _tmp239_;
												ValaExpression* _tmp240_;
												ValaExpression* _tmp241_;
												_tmp237_ = cspec;
												_tmp238_ = vala_ccode_identifier_new ("g_param_spec_boolean");
												_tmp239_ = _tmp238_;
												vala_ccode_function_call_set_call (_tmp237_, (ValaCCodeExpression*) _tmp239_);
												_vala_ccode_node_unref0 (_tmp239_);
												_tmp240_ = vala_property_get_initializer (prop);
												_tmp241_ = _tmp240_;
												if (_tmp241_ != NULL) {
													ValaCCodeFunctionCall* _tmp242_;
													ValaExpression* _tmp243_;
													ValaExpression* _tmp244_;
													ValaCCodeExpression* _tmp245_;
													ValaCCodeExpression* _tmp246_;
													_tmp242_ = cspec;
													_tmp243_ = vala_property_get_initializer (prop);
													_tmp244_ = _tmp243_;
													_tmp245_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp244_);
													_tmp246_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp245_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
													vala_ccode_function_call_add_argument (_tmp242_, _tmp246_);
													_vala_ccode_node_unref0 (_tmp246_);
												} else {
													ValaCCodeFunctionCall* _tmp247_;
													ValaCCodeConstant* _tmp248_;
													ValaCCodeConstant* _tmp249_;
													_tmp247_ = cspec;
													_tmp248_ = vala_ccode_constant_new ("FALSE");
													_tmp249_ = _tmp248_;
													vala_ccode_function_call_add_argument (_tmp247_, (ValaCCodeExpression*) _tmp249_);
													_vala_ccode_node_unref0 (_tmp249_);
												}
											} else {
												const gchar* _tmp250_;
												_tmp250_ = type_id;
												if (g_strcmp0 (_tmp250_, "G_TYPE_CHAR") == 0) {
													ValaCCodeFunctionCall* _tmp251_;
													ValaCCodeIdentifier* _tmp252_;
													ValaCCodeIdentifier* _tmp253_;
													ValaCCodeFunctionCall* _tmp254_;
													ValaCCodeConstant* _tmp255_;
													ValaCCodeConstant* _tmp256_;
													ValaCCodeFunctionCall* _tmp257_;
													ValaCCodeConstant* _tmp258_;
													ValaCCodeConstant* _tmp259_;
													ValaExpression* _tmp260_;
													ValaExpression* _tmp261_;
													_tmp251_ = cspec;
													_tmp252_ = vala_ccode_identifier_new ("g_param_spec_char");
													_tmp253_ = _tmp252_;
													vala_ccode_function_call_set_call (_tmp251_, (ValaCCodeExpression*) _tmp253_);
													_vala_ccode_node_unref0 (_tmp253_);
													_tmp254_ = cspec;
													_tmp255_ = vala_ccode_constant_new ("G_MININT8");
													_tmp256_ = _tmp255_;
													vala_ccode_function_call_add_argument (_tmp254_, (ValaCCodeExpression*) _tmp256_);
													_vala_ccode_node_unref0 (_tmp256_);
													_tmp257_ = cspec;
													_tmp258_ = vala_ccode_constant_new ("G_MAXINT8");
													_tmp259_ = _tmp258_;
													vala_ccode_function_call_add_argument (_tmp257_, (ValaCCodeExpression*) _tmp259_);
													_vala_ccode_node_unref0 (_tmp259_);
													_tmp260_ = vala_property_get_initializer (prop);
													_tmp261_ = _tmp260_;
													if (_tmp261_ != NULL) {
														ValaCCodeFunctionCall* _tmp262_;
														ValaExpression* _tmp263_;
														ValaExpression* _tmp264_;
														ValaCCodeExpression* _tmp265_;
														ValaCCodeExpression* _tmp266_;
														_tmp262_ = cspec;
														_tmp263_ = vala_property_get_initializer (prop);
														_tmp264_ = _tmp263_;
														_tmp265_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp264_);
														_tmp266_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp265_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
														vala_ccode_function_call_add_argument (_tmp262_, _tmp266_);
														_vala_ccode_node_unref0 (_tmp266_);
													} else {
														ValaCCodeFunctionCall* _tmp267_;
														ValaCCodeConstant* _tmp268_;
														ValaCCodeConstant* _tmp269_;
														_tmp267_ = cspec;
														_tmp268_ = vala_ccode_constant_new ("0");
														_tmp269_ = _tmp268_;
														vala_ccode_function_call_add_argument (_tmp267_, (ValaCCodeExpression*) _tmp269_);
														_vala_ccode_node_unref0 (_tmp269_);
													}
												} else {
													const gchar* _tmp270_;
													_tmp270_ = type_id;
													if (g_strcmp0 (_tmp270_, "G_TYPE_UCHAR") == 0) {
														ValaCCodeFunctionCall* _tmp271_;
														ValaCCodeIdentifier* _tmp272_;
														ValaCCodeIdentifier* _tmp273_;
														ValaCCodeFunctionCall* _tmp274_;
														ValaCCodeConstant* _tmp275_;
														ValaCCodeConstant* _tmp276_;
														ValaCCodeFunctionCall* _tmp277_;
														ValaCCodeConstant* _tmp278_;
														ValaCCodeConstant* _tmp279_;
														ValaExpression* _tmp280_;
														ValaExpression* _tmp281_;
														_tmp271_ = cspec;
														_tmp272_ = vala_ccode_identifier_new ("g_param_spec_uchar");
														_tmp273_ = _tmp272_;
														vala_ccode_function_call_set_call (_tmp271_, (ValaCCodeExpression*) _tmp273_);
														_vala_ccode_node_unref0 (_tmp273_);
														_tmp274_ = cspec;
														_tmp275_ = vala_ccode_constant_new ("0");
														_tmp276_ = _tmp275_;
														vala_ccode_function_call_add_argument (_tmp274_, (ValaCCodeExpression*) _tmp276_);
														_vala_ccode_node_unref0 (_tmp276_);
														_tmp277_ = cspec;
														_tmp278_ = vala_ccode_constant_new ("G_MAXUINT8");
														_tmp279_ = _tmp278_;
														vala_ccode_function_call_add_argument (_tmp277_, (ValaCCodeExpression*) _tmp279_);
														_vala_ccode_node_unref0 (_tmp279_);
														_tmp280_ = vala_property_get_initializer (prop);
														_tmp281_ = _tmp280_;
														if (_tmp281_ != NULL) {
															ValaCCodeFunctionCall* _tmp282_;
															ValaExpression* _tmp283_;
															ValaExpression* _tmp284_;
															ValaCCodeExpression* _tmp285_;
															ValaCCodeExpression* _tmp286_;
															_tmp282_ = cspec;
															_tmp283_ = vala_property_get_initializer (prop);
															_tmp284_ = _tmp283_;
															_tmp285_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp284_);
															_tmp286_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp285_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
															vala_ccode_function_call_add_argument (_tmp282_, _tmp286_);
															_vala_ccode_node_unref0 (_tmp286_);
														} else {
															ValaCCodeFunctionCall* _tmp287_;
															ValaCCodeConstant* _tmp288_;
															ValaCCodeConstant* _tmp289_;
															_tmp287_ = cspec;
															_tmp288_ = vala_ccode_constant_new ("0");
															_tmp289_ = _tmp288_;
															vala_ccode_function_call_add_argument (_tmp287_, (ValaCCodeExpression*) _tmp289_);
															_vala_ccode_node_unref0 (_tmp289_);
														}
													} else {
														const gchar* _tmp290_;
														_tmp290_ = type_id;
														if (g_strcmp0 (_tmp290_, "G_TYPE_FLOAT") == 0) {
															ValaCCodeFunctionCall* _tmp291_;
															ValaCCodeIdentifier* _tmp292_;
															ValaCCodeIdentifier* _tmp293_;
															ValaCCodeFunctionCall* _tmp294_;
															ValaCCodeConstant* _tmp295_;
															ValaCCodeConstant* _tmp296_;
															ValaCCodeFunctionCall* _tmp297_;
															ValaCCodeConstant* _tmp298_;
															ValaCCodeConstant* _tmp299_;
															ValaExpression* _tmp300_;
															ValaExpression* _tmp301_;
															_tmp291_ = cspec;
															_tmp292_ = vala_ccode_identifier_new ("g_param_spec_float");
															_tmp293_ = _tmp292_;
															vala_ccode_function_call_set_call (_tmp291_, (ValaCCodeExpression*) _tmp293_);
															_vala_ccode_node_unref0 (_tmp293_);
															_tmp294_ = cspec;
															_tmp295_ = vala_ccode_constant_new ("-G_MAXFLOAT");
															_tmp296_ = _tmp295_;
															vala_ccode_function_call_add_argument (_tmp294_, (ValaCCodeExpression*) _tmp296_);
															_vala_ccode_node_unref0 (_tmp296_);
															_tmp297_ = cspec;
															_tmp298_ = vala_ccode_constant_new ("G_MAXFLOAT");
															_tmp299_ = _tmp298_;
															vala_ccode_function_call_add_argument (_tmp297_, (ValaCCodeExpression*) _tmp299_);
															_vala_ccode_node_unref0 (_tmp299_);
															_tmp300_ = vala_property_get_initializer (prop);
															_tmp301_ = _tmp300_;
															if (_tmp301_ != NULL) {
																ValaCCodeFunctionCall* _tmp302_;
																ValaExpression* _tmp303_;
																ValaExpression* _tmp304_;
																ValaCCodeExpression* _tmp305_;
																ValaCCodeExpression* _tmp306_;
																_tmp302_ = cspec;
																_tmp303_ = vala_property_get_initializer (prop);
																_tmp304_ = _tmp303_;
																_tmp305_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp304_);
																_tmp306_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp305_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
																vala_ccode_function_call_add_argument (_tmp302_, _tmp306_);
																_vala_ccode_node_unref0 (_tmp306_);
															} else {
																ValaCCodeFunctionCall* _tmp307_;
																ValaCCodeConstant* _tmp308_;
																ValaCCodeConstant* _tmp309_;
																_tmp307_ = cspec;
																_tmp308_ = vala_ccode_constant_new ("0.0F");
																_tmp309_ = _tmp308_;
																vala_ccode_function_call_add_argument (_tmp307_, (ValaCCodeExpression*) _tmp309_);
																_vala_ccode_node_unref0 (_tmp309_);
															}
														} else {
															const gchar* _tmp310_;
															_tmp310_ = type_id;
															if (g_strcmp0 (_tmp310_, "G_TYPE_DOUBLE") == 0) {
																ValaCCodeFunctionCall* _tmp311_;
																ValaCCodeIdentifier* _tmp312_;
																ValaCCodeIdentifier* _tmp313_;
																ValaCCodeFunctionCall* _tmp314_;
																ValaCCodeConstant* _tmp315_;
																ValaCCodeConstant* _tmp316_;
																ValaCCodeFunctionCall* _tmp317_;
																ValaCCodeConstant* _tmp318_;
																ValaCCodeConstant* _tmp319_;
																ValaExpression* _tmp320_;
																ValaExpression* _tmp321_;
																_tmp311_ = cspec;
																_tmp312_ = vala_ccode_identifier_new ("g_param_spec_double");
																_tmp313_ = _tmp312_;
																vala_ccode_function_call_set_call (_tmp311_, (ValaCCodeExpression*) _tmp313_);
																_vala_ccode_node_unref0 (_tmp313_);
																_tmp314_ = cspec;
																_tmp315_ = vala_ccode_constant_new ("-G_MAXDOUBLE");
																_tmp316_ = _tmp315_;
																vala_ccode_function_call_add_argument (_tmp314_, (ValaCCodeExpression*) _tmp316_);
																_vala_ccode_node_unref0 (_tmp316_);
																_tmp317_ = cspec;
																_tmp318_ = vala_ccode_constant_new ("G_MAXDOUBLE");
																_tmp319_ = _tmp318_;
																vala_ccode_function_call_add_argument (_tmp317_, (ValaCCodeExpression*) _tmp319_);
																_vala_ccode_node_unref0 (_tmp319_);
																_tmp320_ = vala_property_get_initializer (prop);
																_tmp321_ = _tmp320_;
																if (_tmp321_ != NULL) {
																	ValaCCodeFunctionCall* _tmp322_;
																	ValaExpression* _tmp323_;
																	ValaExpression* _tmp324_;
																	ValaCCodeExpression* _tmp325_;
																	ValaCCodeExpression* _tmp326_;
																	_tmp322_ = cspec;
																	_tmp323_ = vala_property_get_initializer (prop);
																	_tmp324_ = _tmp323_;
																	_tmp325_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp324_);
																	_tmp326_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp325_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
																	vala_ccode_function_call_add_argument (_tmp322_, _tmp326_);
																	_vala_ccode_node_unref0 (_tmp326_);
																} else {
																	ValaCCodeFunctionCall* _tmp327_;
																	ValaCCodeConstant* _tmp328_;
																	ValaCCodeConstant* _tmp329_;
																	_tmp327_ = cspec;
																	_tmp328_ = vala_ccode_constant_new ("0.0");
																	_tmp329_ = _tmp328_;
																	vala_ccode_function_call_add_argument (_tmp327_, (ValaCCodeExpression*) _tmp329_);
																	_vala_ccode_node_unref0 (_tmp329_);
																}
															} else {
																const gchar* _tmp330_;
																_tmp330_ = type_id;
																if (g_strcmp0 (_tmp330_, "G_TYPE_GTYPE") == 0) {
																	ValaCCodeFunctionCall* _tmp331_;
																	ValaCCodeIdentifier* _tmp332_;
																	ValaCCodeIdentifier* _tmp333_;
																	ValaExpression* _tmp334_;
																	ValaExpression* _tmp335_;
																	_tmp331_ = cspec;
																	_tmp332_ = vala_ccode_identifier_new ("g_param_spec_gtype");
																	_tmp333_ = _tmp332_;
																	vala_ccode_function_call_set_call (_tmp331_, (ValaCCodeExpression*) _tmp333_);
																	_vala_ccode_node_unref0 (_tmp333_);
																	_tmp334_ = vala_property_get_initializer (prop);
																	_tmp335_ = _tmp334_;
																	if (_tmp335_ != NULL) {
																		ValaCCodeFunctionCall* _tmp336_;
																		ValaExpression* _tmp337_;
																		ValaExpression* _tmp338_;
																		ValaCCodeExpression* _tmp339_;
																		ValaCCodeExpression* _tmp340_;
																		_tmp336_ = cspec;
																		_tmp337_ = vala_property_get_initializer (prop);
																		_tmp338_ = _tmp337_;
																		_tmp339_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp338_);
																		_tmp340_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp339_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
																		vala_ccode_function_call_add_argument (_tmp336_, _tmp340_);
																		_vala_ccode_node_unref0 (_tmp340_);
																	} else {
																		ValaCCodeFunctionCall* _tmp341_;
																		ValaCCodeConstant* _tmp342_;
																		ValaCCodeConstant* _tmp343_;
																		_tmp341_ = cspec;
																		_tmp342_ = vala_ccode_constant_new ("G_TYPE_NONE");
																		_tmp343_ = _tmp342_;
																		vala_ccode_function_call_add_argument (_tmp341_, (ValaCCodeExpression*) _tmp343_);
																		_vala_ccode_node_unref0 (_tmp343_);
																	}
																} else {
																	ValaCCodeFunctionCall* _tmp344_;
																	ValaCCodeIdentifier* _tmp345_;
																	ValaCCodeIdentifier* _tmp346_;
																	ValaCCodeFunctionCall* _tmp347_;
																	const gchar* _tmp348_;
																	ValaCCodeIdentifier* _tmp349_;
																	ValaCCodeIdentifier* _tmp350_;
																	_tmp344_ = cspec;
																	_tmp345_ = vala_ccode_identifier_new ("g_param_spec_boxed");
																	_tmp346_ = _tmp345_;
																	vala_ccode_function_call_set_call (_tmp344_, (ValaCCodeExpression*) _tmp346_);
																	_vala_ccode_node_unref0 (_tmp346_);
																	_tmp347_ = cspec;
																	_tmp348_ = type_id;
																	_tmp349_ = vala_ccode_identifier_new (_tmp348_);
																	_tmp350_ = _tmp349_;
																	vala_ccode_function_call_add_argument (_tmp347_, (ValaCCodeExpression*) _tmp350_);
																	_vala_ccode_node_unref0 (_tmp350_);
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
					_g_free0 (type_id);
				} else {
					gboolean _tmp351_ = FALSE;
					ValaDataType* _tmp352_;
					ValaDataType* _tmp353_;
					_tmp352_ = vala_property_get_property_type (prop);
					_tmp353_ = _tmp352_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp353_, VALA_TYPE_ARRAY_TYPE)) {
						ValaDataType* _tmp354_;
						ValaDataType* _tmp355_;
						ValaDataType* _tmp356_;
						ValaDataType* _tmp357_;
						ValaTypeSymbol* _tmp358_;
						ValaTypeSymbol* _tmp359_;
						ValaDataType* _tmp360_;
						ValaTypeSymbol* _tmp361_;
						ValaTypeSymbol* _tmp362_;
						_tmp354_ = vala_property_get_property_type (prop);
						_tmp355_ = _tmp354_;
						_tmp356_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp355_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
						_tmp357_ = _tmp356_;
						_tmp358_ = vala_data_type_get_type_symbol (_tmp357_);
						_tmp359_ = _tmp358_;
						_tmp360_ = ((ValaCCodeBaseModule*) self)->string_type;
						_tmp361_ = vala_data_type_get_type_symbol (_tmp360_);
						_tmp362_ = _tmp361_;
						_tmp351_ = _tmp359_ == _tmp362_;
					} else {
						_tmp351_ = FALSE;
					}
					if (_tmp351_) {
						ValaCCodeFunctionCall* _tmp363_;
						ValaCCodeIdentifier* _tmp364_;
						ValaCCodeIdentifier* _tmp365_;
						ValaCCodeFunctionCall* _tmp366_;
						ValaCCodeIdentifier* _tmp367_;
						ValaCCodeIdentifier* _tmp368_;
						_tmp363_ = cspec;
						_tmp364_ = vala_ccode_identifier_new ("g_param_spec_boxed");
						_tmp365_ = _tmp364_;
						vala_ccode_function_call_set_call (_tmp363_, (ValaCCodeExpression*) _tmp365_);
						_vala_ccode_node_unref0 (_tmp365_);
						_tmp366_ = cspec;
						_tmp367_ = vala_ccode_identifier_new ("G_TYPE_STRV");
						_tmp368_ = _tmp367_;
						vala_ccode_function_call_add_argument (_tmp366_, (ValaCCodeExpression*) _tmp368_);
						_vala_ccode_node_unref0 (_tmp368_);
					} else {
						ValaCCodeFunctionCall* _tmp369_;
						ValaCCodeIdentifier* _tmp370_;
						ValaCCodeIdentifier* _tmp371_;
						_tmp369_ = cspec;
						_tmp370_ = vala_ccode_identifier_new ("g_param_spec_pointer");
						_tmp371_ = _tmp370_;
						vala_ccode_function_call_set_call (_tmp369_, (ValaCCodeExpression*) _tmp371_);
						_vala_ccode_node_unref0 (_tmp371_);
					}
				}
			}
		}
	}
	_tmp372_ = g_strdup ("G_PARAM_STATIC_STRINGS");
	pflags = _tmp372_;
	_tmp374_ = vala_property_get_get_accessor (prop);
	_tmp375_ = _tmp374_;
	if (_tmp375_ != NULL) {
		ValaPropertyAccessor* _tmp376_;
		ValaPropertyAccessor* _tmp377_;
		ValaSymbolAccessibility _tmp378_;
		ValaSymbolAccessibility _tmp379_;
		_tmp376_ = vala_property_get_get_accessor (prop);
		_tmp377_ = _tmp376_;
		_tmp378_ = vala_symbol_get_access ((ValaSymbol*) _tmp377_);
		_tmp379_ = _tmp378_;
		_tmp373_ = _tmp379_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
	} else {
		_tmp373_ = FALSE;
	}
	if (_tmp373_) {
		const gchar* _tmp380_;
		gchar* _tmp381_;
		_tmp380_ = pflags;
		_tmp381_ = g_strdup_printf ("%s%s", _tmp380_, " | G_PARAM_READABLE");
		_g_free0 (pflags);
		pflags = _tmp381_;
	}
	_tmp383_ = vala_property_get_set_accessor (prop);
	_tmp384_ = _tmp383_;
	if (_tmp384_ != NULL) {
		ValaPropertyAccessor* _tmp385_;
		ValaPropertyAccessor* _tmp386_;
		ValaSymbolAccessibility _tmp387_;
		ValaSymbolAccessibility _tmp388_;
		_tmp385_ = vala_property_get_set_accessor (prop);
		_tmp386_ = _tmp385_;
		_tmp387_ = vala_symbol_get_access ((ValaSymbol*) _tmp386_);
		_tmp388_ = _tmp387_;
		_tmp382_ = _tmp388_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
	} else {
		_tmp382_ = FALSE;
	}
	if (_tmp382_) {
		const gchar* _tmp389_;
		gchar* _tmp390_;
		ValaPropertyAccessor* _tmp391_;
		ValaPropertyAccessor* _tmp392_;
		gboolean _tmp393_;
		gboolean _tmp394_;
		_tmp389_ = pflags;
		_tmp390_ = g_strdup_printf ("%s%s", _tmp389_, " | G_PARAM_WRITABLE");
		_g_free0 (pflags);
		pflags = _tmp390_;
		_tmp391_ = vala_property_get_set_accessor (prop);
		_tmp392_ = _tmp391_;
		_tmp393_ = vala_property_accessor_get_construction (_tmp392_);
		_tmp394_ = _tmp393_;
		if (_tmp394_) {
			ValaPropertyAccessor* _tmp395_;
			ValaPropertyAccessor* _tmp396_;
			gboolean _tmp397_;
			gboolean _tmp398_;
			_tmp395_ = vala_property_get_set_accessor (prop);
			_tmp396_ = _tmp395_;
			_tmp397_ = vala_property_accessor_get_writable (_tmp396_);
			_tmp398_ = _tmp397_;
			if (_tmp398_) {
				const gchar* _tmp399_;
				gchar* _tmp400_;
				_tmp399_ = pflags;
				_tmp400_ = g_strdup_printf ("%s%s", _tmp399_, " | G_PARAM_CONSTRUCT");
				_g_free0 (pflags);
				pflags = _tmp400_;
			} else {
				const gchar* _tmp401_;
				gchar* _tmp402_;
				_tmp401_ = pflags;
				_tmp402_ = g_strdup_printf ("%s%s", _tmp401_, " | G_PARAM_CONSTRUCT_ONLY");
				_g_free0 (pflags);
				pflags = _tmp402_;
			}
		}
	}
	_tmp403_ = vala_property_get_notify (prop);
	_tmp404_ = _tmp403_;
	if (!_tmp404_) {
		const gchar* _tmp405_;
		gchar* _tmp406_;
		_tmp405_ = pflags;
		_tmp406_ = g_strdup_printf ("%s%s", _tmp405_, " | G_PARAM_EXPLICIT_NOTIFY");
		_g_free0 (pflags);
		pflags = _tmp406_;
	}
	_tmp407_ = vala_symbol_get_version ((ValaSymbol*) prop);
	_tmp408_ = _tmp407_;
	_tmp409_ = vala_version_attribute_get_deprecated (_tmp408_);
	_tmp410_ = _tmp409_;
	if (_tmp410_) {
		const gchar* _tmp411_;
		gchar* _tmp412_;
		_tmp411_ = pflags;
		_tmp412_ = g_strdup_printf ("%s%s", _tmp411_, " | G_PARAM_DEPRECATED");
		_g_free0 (pflags);
		pflags = _tmp412_;
	}
	_tmp413_ = cspec;
	_tmp414_ = pflags;
	_tmp415_ = vala_ccode_constant_new (_tmp414_);
	_tmp416_ = _tmp415_;
	vala_ccode_function_call_add_argument (_tmp413_, (ValaCCodeExpression*) _tmp416_);
	_vala_ccode_node_unref0 (_tmp416_);
	_tmp417_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
	_tmp418_ = _tmp417_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp418_, VALA_TYPE_INTERFACE)) {
		result = (ValaCCodeExpression*) cspec;
		_g_free0 (pflags);
		return result;
	} else {
		ValaCCodeExpression* _tmp419_;
		ValaCCodeExpression* _tmp420_;
		ValaCCodeFunctionCall* _tmp421_;
		ValaCCodeAssignment* _tmp422_;
		ValaCCodeExpression* _tmp423_;
		_tmp419_ = vala_ccode_base_module_get_param_spec_cexpression ((ValaCCodeBaseModule*) self, prop);
		_tmp420_ = _tmp419_;
		_tmp421_ = cspec;
		_tmp422_ = vala_ccode_assignment_new (_tmp420_, (ValaCCodeExpression*) _tmp421_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp423_ = (ValaCCodeExpression*) _tmp422_;
		_vala_ccode_node_unref0 (_tmp420_);
		result = _tmp423_;
		_g_free0 (pflags);
		_vala_ccode_node_unref0 (cspec);
		return result;
	}
}

static void
vala_gtype_module_real_generate_interface_declaration (ValaCCodeBaseModule* base,
                                                       ValaInterface* iface,
                                                       ValaCCodeFile* decl_space)
{
	ValaGTypeModule * self;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gboolean _tmp2_;
	ValaCCodeStruct* instance_struct = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeStruct* _tmp7_;
	ValaCCodeStruct* _tmp8_;
	ValaCCodeStruct* type_struct = NULL;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeStruct* _tmp13_;
	ValaCCodeStruct* _tmp14_;
	ValaCCodeNewline* _tmp15_;
	ValaCCodeNewline* _tmp16_;
	gchar* macro = NULL;
	gchar* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	const gchar* _tmp23_;
	ValaCCodeMacroReplacement* _tmp24_;
	ValaCCodeMacroReplacement* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	gchar* _tmp31_;
	gchar* _tmp32_;
	gchar* _tmp33_;
	gchar* _tmp34_;
	const gchar* _tmp35_;
	ValaCCodeMacroReplacement* _tmp36_;
	ValaCCodeMacroReplacement* _tmp37_;
	gchar* _tmp38_;
	gchar* _tmp39_;
	gchar* _tmp40_;
	gchar* _tmp41_;
	gchar* _tmp42_;
	gchar* _tmp43_;
	gchar* _tmp44_;
	const gchar* _tmp45_;
	ValaCCodeMacroReplacement* _tmp46_;
	ValaCCodeMacroReplacement* _tmp47_;
	gchar* _tmp48_;
	gchar* _tmp49_;
	gchar* _tmp50_;
	gchar* _tmp51_;
	gchar* _tmp52_;
	gchar* _tmp53_;
	gchar* _tmp54_;
	gchar* _tmp55_;
	gchar* _tmp56_;
	const gchar* _tmp57_;
	ValaCCodeMacroReplacement* _tmp58_;
	ValaCCodeMacroReplacement* _tmp59_;
	ValaCCodeNewline* _tmp60_;
	ValaCCodeNewline* _tmp61_;
	gchar* _tmp62_;
	gchar* _tmp63_;
	gchar* _tmp64_;
	gchar* _tmp65_;
	gchar* _tmp66_;
	gchar* _tmp67_;
	ValaCCodeVariableDeclarator* _tmp68_;
	ValaCCodeVariableDeclarator* _tmp69_;
	ValaCCodeTypeDefinition* _tmp70_;
	ValaCCodeTypeDefinition* _tmp71_;
	ValaCCodeStruct* _tmp72_;
	const gchar* _tmp73_;
	const gchar* _tmp74_;
	gchar* _tmp75_;
	gchar* _tmp76_;
	gchar* _tmp77_;
	gchar* _tmp78_;
	ValaCCodeVariableDeclarator* _tmp79_;
	ValaCCodeVariableDeclarator* _tmp80_;
	ValaCCodeTypeDefinition* _tmp81_;
	ValaCCodeTypeDefinition* _tmp82_;
	ValaClass* prereq_cl = NULL;
	ValaCCodeStruct* _tmp101_;
	ValaCCodeStruct* _tmp205_;
	ValaInterfaceRegisterFunction* type_fun = NULL;
	ValaInterfaceRegisterFunction* _tmp206_;
	ValaInterfaceRegisterFunction* _tmp207_;
	ValaCodeContext* _tmp208_;
	ValaCodeContext* _tmp209_;
	ValaInterfaceRegisterFunction* _tmp210_;
	ValaCCodeFragment* _tmp211_;
	ValaCCodeFragment* _tmp212_;
	ValaClass* _tmp213_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (iface != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_add_symbol_declaration ((ValaCCodeBaseModule*) self, decl_space, (ValaSymbol*) iface, _tmp1_);
	_g_free0 (_tmp1_);
	if (_tmp2_) {
		return;
	}
	vala_ccode_file_add_include (decl_space, "glib-object.h", FALSE);
	_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strdup_printf ("_%s", _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_ccode_struct_new (_tmp6_);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	_g_free0 (_tmp4_);
	instance_struct = _tmp8_;
	_tmp9_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("_%s", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_struct_new (_tmp12_);
	_tmp14_ = _tmp13_;
	_g_free0 (_tmp12_);
	_g_free0 (_tmp10_);
	type_struct = _tmp14_;
	_tmp15_ = vala_ccode_newline_new ();
	_tmp16_ = _tmp15_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp16_);
	_vala_ccode_node_unref0 (_tmp16_);
	_tmp17_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
	_tmp18_ = _tmp17_;
	_tmp19_ = g_strdup_printf ("(%s_get_type ())", _tmp18_);
	_tmp20_ = _tmp19_;
	_g_free0 (_tmp18_);
	macro = _tmp20_;
	_tmp21_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp22_ = _tmp21_;
	_tmp23_ = macro;
	_tmp24_ = vala_ccode_macro_replacement_new (_tmp22_, _tmp23_);
	_tmp25_ = _tmp24_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp25_);
	_vala_ccode_node_unref0 (_tmp25_);
	_g_free0 (_tmp22_);
	_tmp26_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp29_ = _tmp28_;
	_tmp30_ = g_strdup_printf ("(G_TYPE_CHECK_INSTANCE_CAST ((obj), %s, %s))", _tmp27_, _tmp29_);
	_g_free0 (macro);
	macro = _tmp30_;
	_g_free0 (_tmp29_);
	_g_free0 (_tmp27_);
	_tmp31_ = vala_get_ccode_type_cast_function ((ValaObjectTypeSymbol*) iface);
	_tmp32_ = _tmp31_;
	_tmp33_ = g_strdup_printf ("%s(obj)", _tmp32_);
	_tmp34_ = _tmp33_;
	_tmp35_ = macro;
	_tmp36_ = vala_ccode_macro_replacement_new (_tmp34_, _tmp35_);
	_tmp37_ = _tmp36_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp37_);
	_vala_ccode_node_unref0 (_tmp37_);
	_g_free0 (_tmp34_);
	_g_free0 (_tmp32_);
	_tmp38_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp39_ = _tmp38_;
	_tmp40_ = g_strdup_printf ("(G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))", _tmp39_);
	_g_free0 (macro);
	macro = _tmp40_;
	_g_free0 (_tmp39_);
	_tmp41_ = vala_get_ccode_type_check_function ((ValaTypeSymbol*) iface);
	_tmp42_ = _tmp41_;
	_tmp43_ = g_strdup_printf ("%s(obj)", _tmp42_);
	_tmp44_ = _tmp43_;
	_tmp45_ = macro;
	_tmp46_ = vala_ccode_macro_replacement_new (_tmp44_, _tmp45_);
	_tmp47_ = _tmp46_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp47_);
	_vala_ccode_node_unref0 (_tmp47_);
	_g_free0 (_tmp44_);
	_g_free0 (_tmp42_);
	_tmp48_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp49_ = _tmp48_;
	_tmp50_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
	_tmp51_ = _tmp50_;
	_tmp52_ = g_strdup_printf ("(G_TYPE_INSTANCE_GET_INTERFACE ((obj), %s, %s))", _tmp49_, _tmp51_);
	_g_free0 (macro);
	macro = _tmp52_;
	_g_free0 (_tmp51_);
	_g_free0 (_tmp49_);
	_tmp53_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) iface);
	_tmp54_ = _tmp53_;
	_tmp55_ = g_strdup_printf ("%s(obj)", _tmp54_);
	_tmp56_ = _tmp55_;
	_tmp57_ = macro;
	_tmp58_ = vala_ccode_macro_replacement_new (_tmp56_, _tmp57_);
	_tmp59_ = _tmp58_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp59_);
	_vala_ccode_node_unref0 (_tmp59_);
	_g_free0 (_tmp56_);
	_g_free0 (_tmp54_);
	_tmp60_ = vala_ccode_newline_new ();
	_tmp61_ = _tmp60_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp61_);
	_vala_ccode_node_unref0 (_tmp61_);
	_tmp62_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp63_ = _tmp62_;
	_tmp64_ = g_strdup_printf ("struct _%s", _tmp63_);
	_tmp65_ = _tmp64_;
	_tmp66_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp67_ = _tmp66_;
	_tmp68_ = vala_ccode_variable_declarator_new (_tmp67_, NULL, NULL);
	_tmp69_ = _tmp68_;
	_tmp70_ = vala_ccode_type_definition_new (_tmp65_, (ValaCCodeDeclarator*) _tmp69_);
	_tmp71_ = _tmp70_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp71_);
	_vala_ccode_node_unref0 (_tmp71_);
	_vala_ccode_node_unref0 (_tmp69_);
	_g_free0 (_tmp67_);
	_g_free0 (_tmp65_);
	_g_free0 (_tmp63_);
	_tmp72_ = type_struct;
	_tmp73_ = vala_ccode_struct_get_name (_tmp72_);
	_tmp74_ = _tmp73_;
	_tmp75_ = g_strdup_printf ("struct %s", _tmp74_);
	_tmp76_ = _tmp75_;
	_tmp77_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
	_tmp78_ = _tmp77_;
	_tmp79_ = vala_ccode_variable_declarator_new (_tmp78_, NULL, NULL);
	_tmp80_ = _tmp79_;
	_tmp81_ = vala_ccode_type_definition_new (_tmp76_, (ValaCCodeDeclarator*) _tmp80_);
	_tmp82_ = _tmp81_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp82_);
	_vala_ccode_node_unref0 (_tmp82_);
	_vala_ccode_node_unref0 (_tmp80_);
	_g_free0 (_tmp78_);
	_g_free0 (_tmp76_);
	prereq_cl = NULL;
	{
		ValaList* _prerequisite_list = NULL;
		ValaList* _tmp83_;
		gint _prerequisite_size = 0;
		ValaList* _tmp84_;
		gint _tmp85_;
		gint _tmp86_;
		gint _prerequisite_index = 0;
		_tmp83_ = vala_interface_get_prerequisites (iface);
		_prerequisite_list = _tmp83_;
		_tmp84_ = _prerequisite_list;
		_tmp85_ = vala_collection_get_size ((ValaCollection*) _tmp84_);
		_tmp86_ = _tmp85_;
		_prerequisite_size = _tmp86_;
		_prerequisite_index = -1;
		while (TRUE) {
			gint _tmp87_;
			gint _tmp88_;
			ValaDataType* prerequisite = NULL;
			ValaList* _tmp89_;
			gpointer _tmp90_;
			ValaDataType* _tmp91_;
			ValaTypeSymbol* _tmp92_;
			ValaTypeSymbol* _tmp93_;
			ValaInterface* prereq_iface = NULL;
			ValaDataType* _tmp94_;
			ValaTypeSymbol* _tmp95_;
			ValaTypeSymbol* _tmp96_;
			ValaClass* _tmp97_;
			_prerequisite_index = _prerequisite_index + 1;
			_tmp87_ = _prerequisite_index;
			_tmp88_ = _prerequisite_size;
			if (!(_tmp87_ < _tmp88_)) {
				break;
			}
			_tmp89_ = _prerequisite_list;
			_tmp90_ = vala_list_get (_tmp89_, _prerequisite_index);
			prerequisite = (ValaDataType*) _tmp90_;
			_tmp91_ = prerequisite;
			_tmp92_ = vala_data_type_get_type_symbol (_tmp91_);
			_tmp93_ = _tmp92_;
			prereq_cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp93_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp93_) : NULL;
			_tmp94_ = prerequisite;
			_tmp95_ = vala_data_type_get_type_symbol (_tmp94_);
			_tmp96_ = _tmp95_;
			prereq_iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp96_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp96_) : NULL;
			_tmp97_ = prereq_cl;
			if (_tmp97_ != NULL) {
				ValaClass* _tmp98_;
				_tmp98_ = prereq_cl;
				vala_ccode_base_module_generate_class_declaration ((ValaCCodeBaseModule*) self, _tmp98_, decl_space);
			} else {
				ValaInterface* _tmp99_;
				_tmp99_ = prereq_iface;
				if (_tmp99_ != NULL) {
					ValaInterface* _tmp100_;
					_tmp100_ = prereq_iface;
					vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, _tmp100_, decl_space);
				}
			}
			_vala_code_node_unref0 (prerequisite);
		}
	}
	_tmp101_ = type_struct;
	vala_ccode_struct_add_field (_tmp101_, "GTypeInterface", "parent_iface", 0, NULL);
	if (vala_code_node_has_attribute ((ValaCodeNode*) iface, "GenericAccessors")) {
		{
			ValaList* _p_list = NULL;
			ValaList* _tmp102_;
			gint _p_size = 0;
			ValaList* _tmp103_;
			gint _tmp104_;
			gint _tmp105_;
			gint _p_index = 0;
			_tmp102_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
			_p_list = _tmp102_;
			_tmp103_ = _p_list;
			_tmp104_ = vala_collection_get_size ((ValaCollection*) _tmp103_);
			_tmp105_ = _tmp104_;
			_p_size = _tmp105_;
			_p_index = -1;
			while (TRUE) {
				gint _tmp106_;
				gint _tmp107_;
				ValaTypeParameter* p = NULL;
				ValaList* _tmp108_;
				gpointer _tmp109_;
				ValaCCodeFunctionDeclarator* vdeclarator = NULL;
				ValaTypeParameter* _tmp110_;
				gchar* _tmp111_;
				gchar* _tmp112_;
				gchar* _tmp113_;
				gchar* _tmp114_;
				ValaCCodeFunctionDeclarator* _tmp115_;
				ValaCCodeFunctionDeclarator* _tmp116_;
				ValaDataType* this_type = NULL;
				ValaDataType* _tmp117_;
				ValaCCodeFunctionDeclarator* _tmp118_;
				ValaDataType* _tmp119_;
				gchar* _tmp120_;
				gchar* _tmp121_;
				ValaCCodeParameter* _tmp122_;
				ValaCCodeParameter* _tmp123_;
				ValaCCodeDeclaration* vdecl = NULL;
				ValaCCodeDeclaration* _tmp124_;
				ValaCCodeDeclaration* _tmp125_;
				ValaCCodeFunctionDeclarator* _tmp126_;
				ValaCCodeStruct* _tmp127_;
				ValaCCodeDeclaration* _tmp128_;
				ValaTypeParameter* _tmp129_;
				gchar* _tmp130_;
				gchar* _tmp131_;
				gchar* _tmp132_;
				gchar* _tmp133_;
				ValaCCodeFunctionDeclarator* _tmp134_;
				ValaDataType* _tmp135_;
				ValaCCodeFunctionDeclarator* _tmp136_;
				ValaDataType* _tmp137_;
				gchar* _tmp138_;
				gchar* _tmp139_;
				ValaCCodeParameter* _tmp140_;
				ValaCCodeParameter* _tmp141_;
				ValaCCodeDeclaration* _tmp142_;
				ValaCCodeDeclaration* _tmp143_;
				ValaCCodeFunctionDeclarator* _tmp144_;
				ValaCCodeStruct* _tmp145_;
				ValaCCodeDeclaration* _tmp146_;
				ValaTypeParameter* _tmp147_;
				gchar* _tmp148_;
				gchar* _tmp149_;
				gchar* _tmp150_;
				gchar* _tmp151_;
				ValaCCodeFunctionDeclarator* _tmp152_;
				ValaDataType* _tmp153_;
				ValaCCodeFunctionDeclarator* _tmp154_;
				ValaDataType* _tmp155_;
				gchar* _tmp156_;
				gchar* _tmp157_;
				ValaCCodeParameter* _tmp158_;
				ValaCCodeParameter* _tmp159_;
				ValaCCodeDeclaration* _tmp160_;
				ValaCCodeDeclaration* _tmp161_;
				ValaCCodeFunctionDeclarator* _tmp162_;
				ValaCCodeStruct* _tmp163_;
				ValaCCodeDeclaration* _tmp164_;
				_p_index = _p_index + 1;
				_tmp106_ = _p_index;
				_tmp107_ = _p_size;
				if (!(_tmp106_ < _tmp107_)) {
					break;
				}
				_tmp108_ = _p_list;
				_tmp109_ = vala_list_get (_tmp108_, _p_index);
				p = (ValaTypeParameter*) _tmp109_;
				_tmp110_ = p;
				_tmp111_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp110_);
				_tmp112_ = _tmp111_;
				_tmp113_ = g_strdup_printf ("get_%s", _tmp112_);
				_tmp114_ = _tmp113_;
				_tmp115_ = vala_ccode_function_declarator_new (_tmp114_);
				_tmp116_ = _tmp115_;
				_g_free0 (_tmp114_);
				_g_free0 (_tmp112_);
				vdeclarator = _tmp116_;
				_tmp117_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) iface);
				this_type = _tmp117_;
				_tmp118_ = vdeclarator;
				_tmp119_ = this_type;
				_tmp120_ = vala_get_ccode_name ((ValaCodeNode*) _tmp119_);
				_tmp121_ = _tmp120_;
				_tmp122_ = vala_ccode_parameter_new ("self", _tmp121_);
				_tmp123_ = _tmp122_;
				vala_ccode_function_declarator_add_parameter (_tmp118_, _tmp123_);
				_vala_ccode_node_unref0 (_tmp123_);
				_g_free0 (_tmp121_);
				_tmp124_ = vala_ccode_declaration_new ("GType");
				vdecl = _tmp124_;
				_tmp125_ = vdecl;
				_tmp126_ = vdeclarator;
				vala_ccode_declaration_add_declarator (_tmp125_, (ValaCCodeDeclarator*) _tmp126_);
				_tmp127_ = type_struct;
				_tmp128_ = vdecl;
				vala_ccode_struct_add_declaration (_tmp127_, _tmp128_);
				_tmp129_ = p;
				_tmp130_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp129_);
				_tmp131_ = _tmp130_;
				_tmp132_ = g_strdup_printf ("get_%s", _tmp131_);
				_tmp133_ = _tmp132_;
				_tmp134_ = vala_ccode_function_declarator_new (_tmp133_);
				_vala_ccode_node_unref0 (vdeclarator);
				vdeclarator = _tmp134_;
				_g_free0 (_tmp133_);
				_g_free0 (_tmp131_);
				_tmp135_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) iface);
				_vala_code_node_unref0 (this_type);
				this_type = _tmp135_;
				_tmp136_ = vdeclarator;
				_tmp137_ = this_type;
				_tmp138_ = vala_get_ccode_name ((ValaCodeNode*) _tmp137_);
				_tmp139_ = _tmp138_;
				_tmp140_ = vala_ccode_parameter_new ("self", _tmp139_);
				_tmp141_ = _tmp140_;
				vala_ccode_function_declarator_add_parameter (_tmp136_, _tmp141_);
				_vala_ccode_node_unref0 (_tmp141_);
				_g_free0 (_tmp139_);
				_tmp142_ = vala_ccode_declaration_new ("GBoxedCopyFunc");
				_vala_ccode_node_unref0 (vdecl);
				vdecl = _tmp142_;
				_tmp143_ = vdecl;
				_tmp144_ = vdeclarator;
				vala_ccode_declaration_add_declarator (_tmp143_, (ValaCCodeDeclarator*) _tmp144_);
				_tmp145_ = type_struct;
				_tmp146_ = vdecl;
				vala_ccode_struct_add_declaration (_tmp145_, _tmp146_);
				_tmp147_ = p;
				_tmp148_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp147_);
				_tmp149_ = _tmp148_;
				_tmp150_ = g_strdup_printf ("get_%s", _tmp149_);
				_tmp151_ = _tmp150_;
				_tmp152_ = vala_ccode_function_declarator_new (_tmp151_);
				_vala_ccode_node_unref0 (vdeclarator);
				vdeclarator = _tmp152_;
				_g_free0 (_tmp151_);
				_g_free0 (_tmp149_);
				_tmp153_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) iface);
				_vala_code_node_unref0 (this_type);
				this_type = _tmp153_;
				_tmp154_ = vdeclarator;
				_tmp155_ = this_type;
				_tmp156_ = vala_get_ccode_name ((ValaCodeNode*) _tmp155_);
				_tmp157_ = _tmp156_;
				_tmp158_ = vala_ccode_parameter_new ("self", _tmp157_);
				_tmp159_ = _tmp158_;
				vala_ccode_function_declarator_add_parameter (_tmp154_, _tmp159_);
				_vala_ccode_node_unref0 (_tmp159_);
				_g_free0 (_tmp157_);
				_tmp160_ = vala_ccode_declaration_new ("GDestroyNotify");
				_vala_ccode_node_unref0 (vdecl);
				vdecl = _tmp160_;
				_tmp161_ = vdecl;
				_tmp162_ = vdeclarator;
				vala_ccode_declaration_add_declarator (_tmp161_, (ValaCCodeDeclarator*) _tmp162_);
				_tmp163_ = type_struct;
				_tmp164_ = vdecl;
				vala_ccode_struct_add_declaration (_tmp163_, _tmp164_);
				_vala_ccode_node_unref0 (vdecl);
				_vala_code_node_unref0 (this_type);
				_vala_ccode_node_unref0 (vdeclarator);
				_vala_code_node_unref0 (p);
			}
		}
	}
	{
		ValaList* _sym_list = NULL;
		ValaList* _tmp165_;
		gint _sym_size = 0;
		ValaList* _tmp166_;
		gint _tmp167_;
		gint _tmp168_;
		gint _sym_index = 0;
		_tmp165_ = vala_interface_get_virtuals (iface);
		_sym_list = _tmp165_;
		_tmp166_ = _sym_list;
		_tmp167_ = vala_collection_get_size ((ValaCollection*) _tmp166_);
		_tmp168_ = _tmp167_;
		_sym_size = _tmp168_;
		_sym_index = -1;
		while (TRUE) {
			gint _tmp169_;
			gint _tmp170_;
			ValaSymbol* sym = NULL;
			ValaList* _tmp171_;
			gpointer _tmp172_;
			ValaMethod* m = NULL;
			ValaSignal* sig = NULL;
			ValaProperty* prop = NULL;
			ValaSymbol* _tmp173_;
			ValaMethod* _tmp174_;
			ValaMethod* _tmp175_;
			_sym_index = _sym_index + 1;
			_tmp169_ = _sym_index;
			_tmp170_ = _sym_size;
			if (!(_tmp169_ < _tmp170_)) {
				break;
			}
			_tmp171_ = _sym_list;
			_tmp172_ = vala_list_get (_tmp171_, _sym_index);
			sym = (ValaSymbol*) _tmp172_;
			_tmp173_ = sym;
			_tmp174_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp173_, VALA_TYPE_METHOD) ? ((ValaMethod*) _tmp173_) : NULL);
			_vala_code_node_unref0 (m);
			m = _tmp174_;
			_tmp175_ = m;
			if (_tmp175_ != NULL) {
				ValaMethod* _tmp176_;
				ValaCCodeStruct* _tmp177_;
				ValaCCodeStruct* _tmp178_;
				_tmp176_ = m;
				_tmp177_ = instance_struct;
				_tmp178_ = type_struct;
				vala_gtype_module_generate_struct_method_declaration (self, (ValaObjectTypeSymbol*) iface, _tmp176_, _tmp177_, _tmp178_, decl_space);
			} else {
				ValaSymbol* _tmp179_;
				ValaSignal* _tmp180_;
				ValaSignal* _tmp181_;
				_tmp179_ = sym;
				_tmp180_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp179_, VALA_TYPE_SIGNAL) ? ((ValaSignal*) _tmp179_) : NULL);
				_vala_code_node_unref0 (sig);
				sig = _tmp180_;
				_tmp181_ = sig;
				if (_tmp181_ != NULL) {
					ValaSignal* _tmp182_;
					ValaMethod* _tmp183_;
					ValaMethod* _tmp184_;
					_tmp182_ = sig;
					_tmp183_ = vala_signal_get_default_handler (_tmp182_);
					_tmp184_ = _tmp183_;
					if (_tmp184_ != NULL) {
						ValaSignal* _tmp185_;
						gboolean _tmp186_;
						gboolean _tmp187_;
						_tmp185_ = sig;
						_tmp186_ = vala_signal_get_is_virtual (_tmp185_);
						_tmp187_ = _tmp186_;
						if (_tmp187_) {
							ValaSignal* _tmp188_;
							ValaMethod* _tmp189_;
							ValaMethod* _tmp190_;
							ValaCCodeStruct* _tmp191_;
							_tmp188_ = sig;
							_tmp189_ = vala_signal_get_default_handler (_tmp188_);
							_tmp190_ = _tmp189_;
							_tmp191_ = type_struct;
							vala_gtype_module_generate_virtual_method_declaration (self, _tmp190_, decl_space, _tmp191_);
						} else {
							ValaSignal* _tmp192_;
							ValaMethod* _tmp193_;
							ValaMethod* _tmp194_;
							ValaCCodeFile* _tmp195_;
							_tmp192_ = sig;
							_tmp193_ = vala_signal_get_default_handler (_tmp192_);
							_tmp194_ = _tmp193_;
							_tmp195_ = ((ValaCCodeBaseModule*) self)->cfile;
							vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp194_, _tmp195_);
						}
					}
				} else {
					ValaSymbol* _tmp196_;
					ValaProperty* _tmp197_;
					ValaProperty* _tmp198_;
					_tmp196_ = sym;
					_tmp197_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp196_, VALA_TYPE_PROPERTY) ? ((ValaProperty*) _tmp196_) : NULL);
					_vala_code_node_unref0 (prop);
					prop = _tmp197_;
					_tmp198_ = prop;
					if (_tmp198_ != NULL) {
						ValaProperty* _tmp199_;
						ValaCCodeStruct* _tmp200_;
						ValaCCodeStruct* _tmp201_;
						_tmp199_ = prop;
						_tmp200_ = instance_struct;
						_tmp201_ = type_struct;
						vala_gtype_module_generate_struct_property_declaration (self, (ValaObjectTypeSymbol*) iface, _tmp199_, _tmp200_, _tmp201_, decl_space);
					} else {
						ValaSymbol* _tmp202_;
						ValaSourceReference* _tmp203_;
						ValaSourceReference* _tmp204_;
						_tmp202_ = sym;
						_tmp203_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp202_);
						_tmp204_ = _tmp203_;
						vala_report_error (_tmp204_, "internal: Unsupported symbol");
					}
				}
			}
			_vala_code_node_unref0 (prop);
			_vala_code_node_unref0 (sig);
			_vala_code_node_unref0 (m);
			_vala_code_node_unref0 (sym);
		}
		_vala_iterable_unref0 (_sym_list);
	}
	_tmp205_ = type_struct;
	vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp205_);
	_tmp206_ = vala_interface_register_function_new (iface);
	type_fun = _tmp206_;
	_tmp207_ = type_fun;
	_tmp208_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp209_ = _tmp208_;
	vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp207_, _tmp209_, ((ValaCCodeBaseModule*) self)->in_plugin, TRUE);
	_tmp210_ = type_fun;
	_tmp211_ = vala_typeregister_function_get_declaration ((ValaTypeRegisterFunction*) _tmp210_);
	_tmp212_ = _tmp211_;
	vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp212_);
	_vala_ccode_node_unref0 (_tmp212_);
	((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
	_tmp213_ = prereq_cl;
	if (_tmp213_ != NULL) {
		ValaClass* base_class = NULL;
		ValaClass* _tmp214_;
		ValaClass* _tmp215_;
		ValaClass* _tmp223_;
		_tmp214_ = prereq_cl;
		_tmp215_ = _vala_code_node_ref0 (_tmp214_);
		base_class = _tmp215_;
		while (TRUE) {
			ValaClass* _tmp216_;
			ValaClass* _tmp217_;
			ValaClass* _tmp218_;
			ValaClass* _tmp219_;
			ValaClass* _tmp220_;
			ValaClass* _tmp221_;
			ValaClass* _tmp222_;
			_tmp216_ = base_class;
			_tmp217_ = vala_class_get_base_class (_tmp216_);
			_tmp218_ = _tmp217_;
			if (!(_tmp218_ != NULL)) {
				break;
			}
			_tmp219_ = base_class;
			_tmp220_ = vala_class_get_base_class (_tmp219_);
			_tmp221_ = _tmp220_;
			_tmp222_ = _vala_code_node_ref0 (_tmp221_);
			_vala_code_node_unref0 (base_class);
			base_class = _tmp222_;
		}
		_tmp223_ = base_class;
		vala_gtype_module_generate_autoptr_cleanup (self, (ValaObjectTypeSymbol*) iface, _tmp223_, decl_space);
		_vala_code_node_unref0 (base_class);
	}
	_vala_typeregister_function_unref0 (type_fun);
	_g_free0 (macro);
	_vala_ccode_node_unref0 (type_struct);
	_vala_ccode_node_unref0 (instance_struct);
}

static void
vala_gtype_module_real_visit_interface (ValaCodeVisitor* base,
                                        ValaInterface* iface)
{
	ValaGTypeModule * self;
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaSourceReference* _tmp2_;
	ValaSourceReference* _tmp3_;
	ValaCCodeEnum* old_signal_enum = NULL;
	ValaCCodeEnum* _tmp4_;
	ValaCCodeEnum* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gint _tmp8_;
	gint _tmp9_;
	gboolean _tmp10_;
	ValaCCodeEnum* _tmp15_;
	ValaCCodeFile* _tmp16_;
	ValaList* _tmp19_;
	gint _tmp20_;
	gint _tmp21_;
	ValaComment* _tmp53_;
	ValaComment* _tmp54_;
	ValaInterfaceRegisterFunction* type_fun = NULL;
	ValaInterfaceRegisterFunction* _tmp62_;
	ValaInterfaceRegisterFunction* _tmp63_;
	ValaCodeContext* _tmp64_;
	ValaCodeContext* _tmp65_;
	ValaCCodeFile* _tmp66_;
	ValaInterfaceRegisterFunction* _tmp67_;
	ValaCCodeFragment* _tmp68_;
	ValaCCodeFragment* _tmp69_;
	ValaCCodeFile* _tmp70_;
	ValaInterfaceRegisterFunction* _tmp71_;
	ValaCCodeFragment* _tmp72_;
	ValaCCodeFragment* _tmp73_;
	ValaCCodeEnum* _tmp74_;
	ValaCCodeEnum* _tmp75_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (iface != NULL);
	_tmp0_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) iface);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp1_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
	_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) iface);
	_tmp3_ = _tmp2_;
	vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp3_);
	_tmp4_ = ((ValaCCodeBaseModule*) self)->signal_enum;
	_tmp5_ = _vala_ccode_node_ref0 (_tmp4_);
	old_signal_enum = _tmp5_;
	_tmp6_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp7_ = _tmp6_;
	_tmp8_ = strlen (_tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = _tmp9_ < 3;
	_g_free0 (_tmp7_);
	if (_tmp10_) {
		ValaSourceReference* _tmp11_;
		ValaSourceReference* _tmp12_;
		gchar* _tmp13_;
		gchar* _tmp14_;
		vala_code_node_set_error ((ValaCodeNode*) iface, TRUE);
		_tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) iface);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_get_ccode_name ((ValaCodeNode*) iface);
		_tmp14_ = _tmp13_;
		vala_report_error (_tmp12_, "Interface name `%s' is too short", _tmp14_);
		_g_free0 (_tmp14_);
		_vala_ccode_node_unref0 (old_signal_enum);
		return;
	}
	_tmp15_ = vala_ccode_enum_new (NULL);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp15_;
	_tmp16_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, iface, _tmp16_);
	if (!vala_symbol_is_internal_symbol ((ValaSymbol*) iface)) {
		ValaCCodeFile* _tmp17_;
		_tmp17_ = ((ValaCCodeBaseModule*) self)->header_file;
		vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, iface, _tmp17_);
	}
	if (!vala_symbol_is_private_symbol ((ValaSymbol*) iface)) {
		ValaCCodeFile* _tmp18_;
		_tmp18_ = ((ValaCCodeBaseModule*) self)->internal_header_file;
		vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, iface, _tmp18_);
	}
	vala_code_node_accept_children ((ValaCodeNode*) iface, (ValaCodeVisitor*) self);
	_tmp19_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) iface);
	_tmp20_ = vala_collection_get_size ((ValaCollection*) _tmp19_);
	_tmp21_ = _tmp20_;
	if (_tmp21_ > 0) {
		gchar* last_signal = NULL;
		gchar* _tmp22_;
		gchar* _tmp23_;
		gchar* _tmp24_;
		gchar* _tmp25_;
		ValaCCodeEnum* _tmp26_;
		const gchar* _tmp27_;
		ValaCCodeEnumValue* _tmp28_;
		ValaCCodeEnumValue* _tmp29_;
		ValaCCodeFile* _tmp30_;
		ValaCCodeEnum* _tmp31_;
		ValaCCodeDeclaration* signal_array_decl = NULL;
		ValaCCodeDeclaration* _tmp32_;
		ValaCCodeDeclaration* _tmp33_;
		ValaCCodeDeclaration* _tmp34_;
		ValaCCodeModifiers _tmp35_;
		ValaCCodeModifiers _tmp36_;
		ValaCCodeDeclaration* _tmp37_;
		gchar* _tmp38_;
		gchar* _tmp39_;
		gchar* _tmp40_;
		gchar* _tmp41_;
		ValaCCodeConstant* _tmp42_;
		ValaCCodeConstant* _tmp43_;
		const gchar* _tmp44_;
		ValaCCodeIdentifier* _tmp45_;
		ValaCCodeIdentifier* _tmp46_;
		ValaCCodeDeclaratorSuffix* _tmp47_;
		ValaCCodeDeclaratorSuffix* _tmp48_;
		ValaCCodeVariableDeclarator* _tmp49_;
		ValaCCodeVariableDeclarator* _tmp50_;
		ValaCCodeFile* _tmp51_;
		ValaCCodeDeclaration* _tmp52_;
		_tmp22_ = vala_get_ccode_upper_case_name ((ValaSymbol*) iface, NULL);
		_tmp23_ = _tmp22_;
		_tmp24_ = g_strdup_printf ("%s_NUM_SIGNALS", _tmp23_);
		_tmp25_ = _tmp24_;
		_g_free0 (_tmp23_);
		last_signal = _tmp25_;
		_tmp26_ = ((ValaCCodeBaseModule*) self)->signal_enum;
		_tmp27_ = last_signal;
		_tmp28_ = vala_ccode_enum_value_new (_tmp27_, NULL);
		_tmp29_ = _tmp28_;
		vala_ccode_enum_add_value (_tmp26_, _tmp29_);
		_vala_ccode_node_unref0 (_tmp29_);
		_tmp30_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp31_ = ((ValaCCodeBaseModule*) self)->signal_enum;
		vala_ccode_file_add_type_declaration (_tmp30_, (ValaCCodeNode*) _tmp31_);
		_tmp32_ = vala_ccode_declaration_new ("guint");
		signal_array_decl = _tmp32_;
		_tmp33_ = signal_array_decl;
		_tmp34_ = signal_array_decl;
		_tmp35_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp34_);
		_tmp36_ = _tmp35_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp34_, _tmp36_ | VALA_CCODE_MODIFIERS_STATIC);
		_tmp37_ = signal_array_decl;
		_tmp38_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
		_tmp39_ = _tmp38_;
		_tmp40_ = g_strdup_printf ("%s_signals", _tmp39_);
		_tmp41_ = _tmp40_;
		_tmp42_ = vala_ccode_constant_new ("{0}");
		_tmp43_ = _tmp42_;
		_tmp44_ = last_signal;
		_tmp45_ = vala_ccode_identifier_new (_tmp44_);
		_tmp46_ = _tmp45_;
		_tmp47_ = vala_ccode_declarator_suffix_new_with_array ((ValaCCodeExpression*) _tmp46_);
		_tmp48_ = _tmp47_;
		_tmp49_ = vala_ccode_variable_declarator_new (_tmp41_, (ValaCCodeExpression*) _tmp43_, _tmp48_);
		_tmp50_ = _tmp49_;
		vala_ccode_declaration_add_declarator (_tmp37_, (ValaCCodeDeclarator*) _tmp50_);
		_vala_ccode_node_unref0 (_tmp50_);
		_vala_ccode_declarator_suffix_unref0 (_tmp48_);
		_vala_ccode_node_unref0 (_tmp46_);
		_vala_ccode_node_unref0 (_tmp43_);
		_g_free0 (_tmp41_);
		_g_free0 (_tmp39_);
		_tmp51_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp52_ = signal_array_decl;
		vala_ccode_file_add_type_declaration (_tmp51_, (ValaCCodeNode*) _tmp52_);
		_vala_ccode_node_unref0 (signal_array_decl);
		_g_free0 (last_signal);
	}
	vala_gtype_module_add_interface_default_init_function (self, iface);
	_tmp53_ = vala_symbol_get_comment ((ValaSymbol*) iface);
	_tmp54_ = _tmp53_;
	if (_tmp54_ != NULL) {
		ValaCCodeFile* _tmp55_;
		ValaComment* _tmp56_;
		ValaComment* _tmp57_;
		const gchar* _tmp58_;
		const gchar* _tmp59_;
		ValaCCodeComment* _tmp60_;
		ValaCCodeComment* _tmp61_;
		_tmp55_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp56_ = vala_symbol_get_comment ((ValaSymbol*) iface);
		_tmp57_ = _tmp56_;
		_tmp58_ = vala_comment_get_content (_tmp57_);
		_tmp59_ = _tmp58_;
		_tmp60_ = vala_ccode_comment_new (_tmp59_);
		_tmp61_ = _tmp60_;
		vala_ccode_file_add_type_member_definition (_tmp55_, (ValaCCodeNode*) _tmp61_);
		_vala_ccode_node_unref0 (_tmp61_);
	}
	_tmp62_ = vala_interface_register_function_new (iface);
	type_fun = _tmp62_;
	_tmp63_ = type_fun;
	_tmp64_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp65_ = _tmp64_;
	vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp63_, _tmp65_, ((ValaCCodeBaseModule*) self)->in_plugin, FALSE);
	_tmp66_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp67_ = type_fun;
	_tmp68_ = vala_typeregister_function_get_source_declaration ((ValaTypeRegisterFunction*) _tmp67_);
	_tmp69_ = _tmp68_;
	vala_ccode_file_add_type_member_declaration (_tmp66_, (ValaCCodeNode*) _tmp69_);
	_vala_ccode_node_unref0 (_tmp69_);
	_tmp70_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp71_ = type_fun;
	_tmp72_ = vala_typeregister_function_get_definition ((ValaTypeRegisterFunction*) _tmp71_);
	_tmp73_ = _tmp72_;
	vala_ccode_file_add_type_member_definition (_tmp70_, (ValaCCodeNode*) _tmp73_);
	_vala_ccode_node_unref0 (_tmp73_);
	_tmp74_ = old_signal_enum;
	_tmp75_ = _vala_ccode_node_ref0 (_tmp74_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp75_;
	vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_typeregister_function_unref0 (type_fun);
	_vala_ccode_node_unref0 (old_signal_enum);
}

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

static void
vala_gtype_module_add_interface_default_init_function (ValaGTypeModule* self,
                                                       ValaInterface* iface)
{
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	ValaCCodeFunction* default_init = NULL;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaCCodeFunction* _tmp18_;
	ValaCCodeFunction* _tmp19_;
	ValaTypeSymbol* _tmp20_;
	ValaCCodeIdentifier* ciface = NULL;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeFile* _tmp214_;
	ValaCCodeFunction* _tmp215_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (iface != NULL);
	_tmp0_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) iface);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp1_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
	_tmp2_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("%s_default_init", _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_function_new (_tmp5_, "void");
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	_g_free0 (_tmp3_);
	default_init = _tmp7_;
	_tmp8_ = default_init;
	_tmp9_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%s *", _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_parameter_new ("iface", _tmp12_);
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp8_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_g_free0 (_tmp12_);
	_g_free0 (_tmp10_);
	_tmp15_ = default_init;
	_tmp16_ = vala_ccode_parameter_new ("iface_data", "gpointer");
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_parameter (_tmp15_, _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_tmp18_ = default_init;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp18_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp19_ = default_init;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp19_);
	_tmp20_ = ((ValaCCodeBaseModule*) self)->gobject_type;
	if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) iface, _tmp20_)) {
		ValaList* props = NULL;
		ValaList* _tmp21_;
		ValaList* _tmp22_;
		_tmp21_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) iface);
		_tmp22_ = _vala_iterable_ref0 (_tmp21_);
		props = _tmp22_;
		{
			ValaList* _prop_list = NULL;
			ValaList* _tmp23_;
			gint _prop_size = 0;
			ValaList* _tmp24_;
			gint _tmp25_;
			gint _tmp26_;
			gint _prop_index = 0;
			_tmp23_ = props;
			_prop_list = _tmp23_;
			_tmp24_ = _prop_list;
			_tmp25_ = vala_collection_get_size ((ValaCollection*) _tmp24_);
			_tmp26_ = _tmp25_;
			_prop_size = _tmp26_;
			_prop_index = -1;
			while (TRUE) {
				gint _tmp27_;
				gint _tmp28_;
				ValaProperty* prop = NULL;
				ValaList* _tmp29_;
				gpointer _tmp30_;
				ValaProperty* _tmp31_;
				gboolean _tmp32_;
				gboolean _tmp33_;
				_prop_index = _prop_index + 1;
				_tmp27_ = _prop_index;
				_tmp28_ = _prop_size;
				if (!(_tmp27_ < _tmp28_)) {
					break;
				}
				_tmp29_ = _prop_list;
				_tmp30_ = vala_list_get (_tmp29_, _prop_index);
				prop = (ValaProperty*) _tmp30_;
				_tmp31_ = prop;
				_tmp32_ = vala_property_get_is_abstract (_tmp31_);
				_tmp33_ = _tmp32_;
				if (_tmp33_) {
					ValaCodeContext* _tmp34_;
					ValaCodeContext* _tmp35_;
					ValaSemanticAnalyzer* _tmp36_;
					ValaSemanticAnalyzer* _tmp37_;
					ValaProperty* _tmp38_;
					ValaProperty* _tmp39_;
					ValaComment* _tmp40_;
					ValaComment* _tmp41_;
					ValaCCodeFunctionCall* cinst = NULL;
					ValaCCodeIdentifier* _tmp51_;
					ValaCCodeIdentifier* _tmp52_;
					ValaCCodeFunctionCall* _tmp53_;
					ValaCCodeFunctionCall* _tmp54_;
					ValaCCodeFunctionCall* _tmp55_;
					ValaCCodeIdentifier* _tmp56_;
					ValaCCodeIdentifier* _tmp57_;
					ValaCCodeFunctionCall* _tmp58_;
					ValaProperty* _tmp59_;
					ValaCCodeExpression* _tmp60_;
					ValaCCodeExpression* _tmp61_;
					ValaCCodeFunction* _tmp62_;
					ValaCCodeFunction* _tmp63_;
					ValaCCodeFunctionCall* _tmp64_;
					_tmp34_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
					_tmp35_ = _tmp34_;
					_tmp36_ = vala_code_context_get_analyzer (_tmp35_);
					_tmp37_ = _tmp36_;
					_tmp38_ = prop;
					if (!vala_semantic_analyzer_is_gobject_property (_tmp37_, _tmp38_)) {
						_vala_code_node_unref0 (prop);
						continue;
					}
					_tmp39_ = prop;
					_tmp40_ = vala_symbol_get_comment ((ValaSymbol*) _tmp39_);
					_tmp41_ = _tmp40_;
					if (_tmp41_ != NULL) {
						ValaCCodeFunction* _tmp42_;
						ValaCCodeFunction* _tmp43_;
						ValaProperty* _tmp44_;
						ValaComment* _tmp45_;
						ValaComment* _tmp46_;
						const gchar* _tmp47_;
						const gchar* _tmp48_;
						ValaCCodeComment* _tmp49_;
						ValaCCodeComment* _tmp50_;
						_tmp42_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp43_ = _tmp42_;
						_tmp44_ = prop;
						_tmp45_ = vala_symbol_get_comment ((ValaSymbol*) _tmp44_);
						_tmp46_ = _tmp45_;
						_tmp47_ = vala_comment_get_content (_tmp46_);
						_tmp48_ = _tmp47_;
						_tmp49_ = vala_ccode_comment_new (_tmp48_);
						_tmp50_ = _tmp49_;
						vala_ccode_function_add_statement (_tmp43_, (ValaCCodeNode*) _tmp50_);
						_vala_ccode_node_unref0 (_tmp50_);
					}
					_tmp51_ = vala_ccode_identifier_new ("g_object_interface_install_property");
					_tmp52_ = _tmp51_;
					_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
					_tmp54_ = _tmp53_;
					_vala_ccode_node_unref0 (_tmp52_);
					cinst = _tmp54_;
					_tmp55_ = cinst;
					_tmp56_ = vala_ccode_identifier_new ("iface");
					_tmp57_ = _tmp56_;
					vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp57_);
					_vala_ccode_node_unref0 (_tmp57_);
					_tmp58_ = cinst;
					_tmp59_ = prop;
					_tmp60_ = vala_ccode_base_module_get_param_spec ((ValaCCodeBaseModule*) self, _tmp59_);
					_tmp61_ = _tmp60_;
					vala_ccode_function_call_add_argument (_tmp58_, _tmp61_);
					_vala_ccode_node_unref0 (_tmp61_);
					_tmp62_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp63_ = _tmp62_;
					_tmp64_ = cinst;
					vala_ccode_function_add_expression (_tmp63_, (ValaCCodeExpression*) _tmp64_);
					_vala_ccode_node_unref0 (cinst);
				}
				_vala_code_node_unref0 (prop);
			}
		}
		_vala_iterable_unref0 (props);
	}
	_tmp65_ = vala_ccode_identifier_new ("iface");
	ciface = _tmp65_;
	{
		ValaList* _sig_list = NULL;
		ValaList* _tmp66_;
		gint _sig_size = 0;
		ValaList* _tmp67_;
		gint _tmp68_;
		gint _tmp69_;
		gint _sig_index = 0;
		_tmp66_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) iface);
		_sig_list = _tmp66_;
		_tmp67_ = _sig_list;
		_tmp68_ = vala_collection_get_size ((ValaCollection*) _tmp67_);
		_tmp69_ = _tmp68_;
		_sig_size = _tmp69_;
		_sig_index = -1;
		while (TRUE) {
			gint _tmp70_;
			gint _tmp71_;
			ValaSignal* sig = NULL;
			ValaList* _tmp72_;
			gpointer _tmp73_;
			gboolean _tmp74_ = FALSE;
			ValaSignal* _tmp75_;
			ValaMethod* _tmp76_;
			ValaMethod* _tmp77_;
			gchar* cname = NULL;
			ValaSignal* _tmp81_;
			ValaMethod* _tmp82_;
			ValaMethod* _tmp83_;
			gchar* _tmp84_;
			ValaCCodeFunction* _tmp85_;
			ValaCCodeFunction* _tmp86_;
			ValaCCodeIdentifier* _tmp87_;
			ValaSignal* _tmp88_;
			ValaMethod* _tmp89_;
			ValaMethod* _tmp90_;
			gchar* _tmp91_;
			gchar* _tmp92_;
			ValaCCodeMemberAccess* _tmp93_;
			ValaCCodeMemberAccess* _tmp94_;
			const gchar* _tmp95_;
			ValaCCodeIdentifier* _tmp96_;
			ValaCCodeIdentifier* _tmp97_;
			_sig_index = _sig_index + 1;
			_tmp70_ = _sig_index;
			_tmp71_ = _sig_size;
			if (!(_tmp70_ < _tmp71_)) {
				break;
			}
			_tmp72_ = _sig_list;
			_tmp73_ = vala_list_get (_tmp72_, _sig_index);
			sig = (ValaSignal*) _tmp73_;
			_tmp75_ = sig;
			_tmp76_ = vala_signal_get_default_handler (_tmp75_);
			_tmp77_ = _tmp76_;
			if (_tmp77_ == NULL) {
				_tmp74_ = TRUE;
			} else {
				ValaSignal* _tmp78_;
				gboolean _tmp79_;
				gboolean _tmp80_;
				_tmp78_ = sig;
				_tmp79_ = vala_signal_get_is_virtual (_tmp78_);
				_tmp80_ = _tmp79_;
				_tmp74_ = !_tmp80_;
			}
			if (_tmp74_) {
				_vala_code_node_unref0 (sig);
				continue;
			}
			_tmp81_ = sig;
			_tmp82_ = vala_signal_get_default_handler (_tmp81_);
			_tmp83_ = _tmp82_;
			_tmp84_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp83_);
			cname = _tmp84_;
			_tmp85_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp86_ = _tmp85_;
			_tmp87_ = ciface;
			_tmp88_ = sig;
			_tmp89_ = vala_signal_get_default_handler (_tmp88_);
			_tmp90_ = _tmp89_;
			_tmp91_ = vala_get_ccode_vfunc_name (_tmp90_);
			_tmp92_ = _tmp91_;
			_tmp93_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp87_, _tmp92_);
			_tmp94_ = _tmp93_;
			_tmp95_ = cname;
			_tmp96_ = vala_ccode_identifier_new (_tmp95_);
			_tmp97_ = _tmp96_;
			vala_ccode_function_add_assignment (_tmp86_, (ValaCCodeExpression*) _tmp94_, (ValaCCodeExpression*) _tmp97_);
			_vala_ccode_node_unref0 (_tmp97_);
			_vala_ccode_node_unref0 (_tmp94_);
			_g_free0 (_tmp92_);
			_g_free0 (cname);
			_vala_code_node_unref0 (sig);
		}
	}
	{
		ValaList* _sig_list = NULL;
		ValaList* _tmp98_;
		gint _sig_size = 0;
		ValaList* _tmp99_;
		gint _tmp100_;
		gint _tmp101_;
		gint _sig_index = 0;
		_tmp98_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) iface);
		_sig_list = _tmp98_;
		_tmp99_ = _sig_list;
		_tmp100_ = vala_collection_get_size ((ValaCollection*) _tmp99_);
		_tmp101_ = _tmp100_;
		_sig_size = _tmp101_;
		_sig_index = -1;
		while (TRUE) {
			gint _tmp102_;
			gint _tmp103_;
			ValaSignal* sig = NULL;
			ValaList* _tmp104_;
			gpointer _tmp105_;
			ValaSignal* _tmp106_;
			ValaComment* _tmp107_;
			ValaComment* _tmp108_;
			ValaCCodeFunction* _tmp118_;
			ValaCCodeFunction* _tmp119_;
			ValaSignal* _tmp120_;
			ValaCCodeExpression* _tmp121_;
			ValaCCodeExpression* _tmp122_;
			_sig_index = _sig_index + 1;
			_tmp102_ = _sig_index;
			_tmp103_ = _sig_size;
			if (!(_tmp102_ < _tmp103_)) {
				break;
			}
			_tmp104_ = _sig_list;
			_tmp105_ = vala_list_get (_tmp104_, _sig_index);
			sig = (ValaSignal*) _tmp105_;
			_tmp106_ = sig;
			_tmp107_ = vala_symbol_get_comment ((ValaSymbol*) _tmp106_);
			_tmp108_ = _tmp107_;
			if (_tmp108_ != NULL) {
				ValaCCodeFunction* _tmp109_;
				ValaCCodeFunction* _tmp110_;
				ValaSignal* _tmp111_;
				ValaComment* _tmp112_;
				ValaComment* _tmp113_;
				const gchar* _tmp114_;
				const gchar* _tmp115_;
				ValaCCodeComment* _tmp116_;
				ValaCCodeComment* _tmp117_;
				_tmp109_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp110_ = _tmp109_;
				_tmp111_ = sig;
				_tmp112_ = vala_symbol_get_comment ((ValaSymbol*) _tmp111_);
				_tmp113_ = _tmp112_;
				_tmp114_ = vala_comment_get_content (_tmp113_);
				_tmp115_ = _tmp114_;
				_tmp116_ = vala_ccode_comment_new (_tmp115_);
				_tmp117_ = _tmp116_;
				vala_ccode_function_add_statement (_tmp110_, (ValaCCodeNode*) _tmp117_);
				_vala_ccode_node_unref0 (_tmp117_);
			}
			_tmp118_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp119_ = _tmp118_;
			_tmp120_ = sig;
			_tmp121_ = vala_ccode_base_module_get_signal_creation ((ValaCCodeBaseModule*) self, _tmp120_, (ValaObjectTypeSymbol*) iface);
			_tmp122_ = _tmp121_;
			vala_ccode_function_add_expression (_tmp119_, _tmp122_);
			_vala_ccode_node_unref0 (_tmp122_);
			_vala_code_node_unref0 (sig);
		}
	}
	{
		ValaList* _m_list = NULL;
		ValaList* _tmp123_;
		gint _m_size = 0;
		ValaList* _tmp124_;
		gint _tmp125_;
		gint _tmp126_;
		gint _m_index = 0;
		_tmp123_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) iface);
		_m_list = _tmp123_;
		_tmp124_ = _m_list;
		_tmp125_ = vala_collection_get_size ((ValaCollection*) _tmp124_);
		_tmp126_ = _tmp125_;
		_m_size = _tmp126_;
		_m_index = -1;
		while (TRUE) {
			gint _tmp127_;
			gint _tmp128_;
			ValaMethod* m = NULL;
			ValaList* _tmp129_;
			gpointer _tmp130_;
			ValaMethod* _tmp131_;
			gboolean _tmp132_;
			gboolean _tmp133_;
			_m_index = _m_index + 1;
			_tmp127_ = _m_index;
			_tmp128_ = _m_size;
			if (!(_tmp127_ < _tmp128_)) {
				break;
			}
			_tmp129_ = _m_list;
			_tmp130_ = vala_list_get (_tmp129_, _m_index);
			m = (ValaMethod*) _tmp130_;
			_tmp131_ = m;
			_tmp132_ = vala_method_get_is_virtual (_tmp131_);
			_tmp133_ = _tmp132_;
			if (_tmp133_) {
				gchar* cname = NULL;
				ValaMethod* _tmp134_;
				gchar* _tmp135_;
				ValaCCodeFunction* _tmp136_;
				ValaCCodeFunction* _tmp137_;
				ValaCCodeIdentifier* _tmp138_;
				ValaMethod* _tmp139_;
				gchar* _tmp140_;
				gchar* _tmp141_;
				ValaCCodeMemberAccess* _tmp142_;
				ValaCCodeMemberAccess* _tmp143_;
				const gchar* _tmp144_;
				ValaCCodeIdentifier* _tmp145_;
				ValaCCodeIdentifier* _tmp146_;
				ValaMethod* _tmp147_;
				gboolean _tmp148_;
				gboolean _tmp149_;
				_tmp134_ = m;
				_tmp135_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp134_);
				cname = _tmp135_;
				_tmp136_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp137_ = _tmp136_;
				_tmp138_ = ciface;
				_tmp139_ = m;
				_tmp140_ = vala_get_ccode_vfunc_name (_tmp139_);
				_tmp141_ = _tmp140_;
				_tmp142_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp138_, _tmp141_);
				_tmp143_ = _tmp142_;
				_tmp144_ = cname;
				_tmp145_ = vala_ccode_identifier_new (_tmp144_);
				_tmp146_ = _tmp145_;
				vala_ccode_function_add_assignment (_tmp137_, (ValaCCodeExpression*) _tmp143_, (ValaCCodeExpression*) _tmp146_);
				_vala_ccode_node_unref0 (_tmp146_);
				_vala_ccode_node_unref0 (_tmp143_);
				_g_free0 (_tmp141_);
				_tmp147_ = m;
				_tmp148_ = vala_method_get_coroutine (_tmp147_);
				_tmp149_ = _tmp148_;
				if (_tmp149_) {
					ValaCCodeFunction* _tmp150_;
					ValaCCodeFunction* _tmp151_;
					ValaCCodeIdentifier* _tmp152_;
					ValaMethod* _tmp153_;
					gchar* _tmp154_;
					gchar* _tmp155_;
					ValaCCodeMemberAccess* _tmp156_;
					ValaCCodeMemberAccess* _tmp157_;
					ValaMethod* _tmp158_;
					gchar* _tmp159_;
					gchar* _tmp160_;
					ValaCCodeIdentifier* _tmp161_;
					ValaCCodeIdentifier* _tmp162_;
					_tmp150_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp151_ = _tmp150_;
					_tmp152_ = ciface;
					_tmp153_ = m;
					_tmp154_ = vala_get_ccode_finish_vfunc_name (_tmp153_);
					_tmp155_ = _tmp154_;
					_tmp156_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp152_, _tmp155_);
					_tmp157_ = _tmp156_;
					_tmp158_ = m;
					_tmp159_ = vala_get_ccode_finish_real_name (_tmp158_);
					_tmp160_ = _tmp159_;
					_tmp161_ = vala_ccode_identifier_new (_tmp160_);
					_tmp162_ = _tmp161_;
					vala_ccode_function_add_assignment (_tmp151_, (ValaCCodeExpression*) _tmp157_, (ValaCCodeExpression*) _tmp162_);
					_vala_ccode_node_unref0 (_tmp162_);
					_g_free0 (_tmp160_);
					_vala_ccode_node_unref0 (_tmp157_);
					_g_free0 (_tmp155_);
				}
				_g_free0 (cname);
			}
			_vala_code_node_unref0 (m);
		}
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp163_;
		gint _prop_size = 0;
		ValaList* _tmp164_;
		gint _tmp165_;
		gint _tmp166_;
		gint _prop_index = 0;
		_tmp163_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) iface);
		_prop_list = _tmp163_;
		_tmp164_ = _prop_list;
		_tmp165_ = vala_collection_get_size ((ValaCollection*) _tmp164_);
		_tmp166_ = _tmp165_;
		_prop_size = _tmp166_;
		_prop_index = -1;
		while (TRUE) {
			gint _tmp167_;
			gint _tmp168_;
			ValaProperty* prop = NULL;
			ValaList* _tmp169_;
			gpointer _tmp170_;
			ValaProperty* _tmp171_;
			gboolean _tmp172_;
			gboolean _tmp173_;
			_prop_index = _prop_index + 1;
			_tmp167_ = _prop_index;
			_tmp168_ = _prop_size;
			if (!(_tmp167_ < _tmp168_)) {
				break;
			}
			_tmp169_ = _prop_list;
			_tmp170_ = vala_list_get (_tmp169_, _prop_index);
			prop = (ValaProperty*) _tmp170_;
			_tmp171_ = prop;
			_tmp172_ = vala_property_get_is_virtual (_tmp171_);
			_tmp173_ = _tmp172_;
			if (_tmp173_) {
				ValaProperty* _tmp174_;
				ValaPropertyAccessor* _tmp175_;
				ValaPropertyAccessor* _tmp176_;
				ValaProperty* _tmp194_;
				ValaPropertyAccessor* _tmp195_;
				ValaPropertyAccessor* _tmp196_;
				_tmp174_ = prop;
				_tmp175_ = vala_property_get_get_accessor (_tmp174_);
				_tmp176_ = _tmp175_;
				if (_tmp176_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp177_;
					ValaPropertyAccessor* _tmp178_;
					ValaPropertyAccessor* _tmp179_;
					gchar* _tmp180_;
					ValaCCodeFunction* _tmp181_;
					ValaCCodeFunction* _tmp182_;
					ValaCCodeIdentifier* _tmp183_;
					ValaProperty* _tmp184_;
					const gchar* _tmp185_;
					const gchar* _tmp186_;
					gchar* _tmp187_;
					gchar* _tmp188_;
					ValaCCodeMemberAccess* _tmp189_;
					ValaCCodeMemberAccess* _tmp190_;
					const gchar* _tmp191_;
					ValaCCodeIdentifier* _tmp192_;
					ValaCCodeIdentifier* _tmp193_;
					_tmp177_ = prop;
					_tmp178_ = vala_property_get_get_accessor (_tmp177_);
					_tmp179_ = _tmp178_;
					_tmp180_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp179_);
					cname = _tmp180_;
					_tmp181_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp182_ = _tmp181_;
					_tmp183_ = ciface;
					_tmp184_ = prop;
					_tmp185_ = vala_symbol_get_name ((ValaSymbol*) _tmp184_);
					_tmp186_ = _tmp185_;
					_tmp187_ = g_strdup_printf ("get_%s", _tmp186_);
					_tmp188_ = _tmp187_;
					_tmp189_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp183_, _tmp188_);
					_tmp190_ = _tmp189_;
					_tmp191_ = cname;
					_tmp192_ = vala_ccode_identifier_new (_tmp191_);
					_tmp193_ = _tmp192_;
					vala_ccode_function_add_assignment (_tmp182_, (ValaCCodeExpression*) _tmp190_, (ValaCCodeExpression*) _tmp193_);
					_vala_ccode_node_unref0 (_tmp193_);
					_vala_ccode_node_unref0 (_tmp190_);
					_g_free0 (_tmp188_);
					_g_free0 (cname);
				}
				_tmp194_ = prop;
				_tmp195_ = vala_property_get_set_accessor (_tmp194_);
				_tmp196_ = _tmp195_;
				if (_tmp196_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp197_;
					ValaPropertyAccessor* _tmp198_;
					ValaPropertyAccessor* _tmp199_;
					gchar* _tmp200_;
					ValaCCodeFunction* _tmp201_;
					ValaCCodeFunction* _tmp202_;
					ValaCCodeIdentifier* _tmp203_;
					ValaProperty* _tmp204_;
					const gchar* _tmp205_;
					const gchar* _tmp206_;
					gchar* _tmp207_;
					gchar* _tmp208_;
					ValaCCodeMemberAccess* _tmp209_;
					ValaCCodeMemberAccess* _tmp210_;
					const gchar* _tmp211_;
					ValaCCodeIdentifier* _tmp212_;
					ValaCCodeIdentifier* _tmp213_;
					_tmp197_ = prop;
					_tmp198_ = vala_property_get_set_accessor (_tmp197_);
					_tmp199_ = _tmp198_;
					_tmp200_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp199_);
					cname = _tmp200_;
					_tmp201_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp202_ = _tmp201_;
					_tmp203_ = ciface;
					_tmp204_ = prop;
					_tmp205_ = vala_symbol_get_name ((ValaSymbol*) _tmp204_);
					_tmp206_ = _tmp205_;
					_tmp207_ = g_strdup_printf ("set_%s", _tmp206_);
					_tmp208_ = _tmp207_;
					_tmp209_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp203_, _tmp208_);
					_tmp210_ = _tmp209_;
					_tmp211_ = cname;
					_tmp212_ = vala_ccode_identifier_new (_tmp211_);
					_tmp213_ = _tmp212_;
					vala_ccode_function_add_assignment (_tmp202_, (ValaCCodeExpression*) _tmp210_, (ValaCCodeExpression*) _tmp213_);
					_vala_ccode_node_unref0 (_tmp213_);
					_vala_ccode_node_unref0 (_tmp210_);
					_g_free0 (_tmp208_);
					_g_free0 (cname);
				}
			}
			_vala_code_node_unref0 (prop);
		}
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_tmp214_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp215_ = default_init;
	vala_ccode_file_add_function (_tmp214_, _tmp215_);
	_vala_ccode_node_unref0 (ciface);
	_vala_ccode_node_unref0 (default_init);
}

static void
vala_gtype_module_real_visit_struct (ValaCodeVisitor* base,
                                     ValaStruct* st)
{
	ValaGTypeModule * self;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (st != NULL);
	if (vala_code_node_has_attribute ((ValaCodeNode*) st, "SimpleType")) {
		_tmp0_ = !vala_code_node_has_attribute_argument ((ValaCodeNode*) st, "CCode", "type_id");
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		vala_code_node_set_attribute_bool ((ValaCodeNode*) st, "CCode", "has_type_id", FALSE, NULL);
	}
	VALA_CODE_VISITOR_CLASS (vala_gtype_module_parent_class)->visit_struct ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), st);
	if (vala_struct_is_boolean_type (st)) {
		_tmp2_ = TRUE;
	} else {
		_tmp2_ = vala_struct_is_integer_type (st);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		_tmp1_ = vala_struct_is_floating_type (st);
	}
	if (_tmp1_) {
		return;
	}
	if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) st)) {
		gchar* _tmp3_;
		gchar* _tmp4_;
		gint _tmp5_;
		gint _tmp6_;
		gboolean _tmp7_;
		ValaSourceReference* _tmp12_;
		ValaSourceReference* _tmp13_;
		ValaStructRegisterFunction* type_fun = NULL;
		ValaStructRegisterFunction* _tmp14_;
		ValaStructRegisterFunction* _tmp15_;
		ValaCodeContext* _tmp16_;
		ValaCodeContext* _tmp17_;
		ValaCCodeFile* _tmp18_;
		ValaStructRegisterFunction* _tmp19_;
		ValaCCodeFragment* _tmp20_;
		ValaCCodeFragment* _tmp21_;
		_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) st);
		_tmp4_ = _tmp3_;
		_tmp5_ = strlen (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = _tmp6_ < 3;
		_g_free0 (_tmp4_);
		if (_tmp7_) {
			ValaSourceReference* _tmp8_;
			ValaSourceReference* _tmp9_;
			gchar* _tmp10_;
			gchar* _tmp11_;
			vala_code_node_set_error ((ValaCodeNode*) st, TRUE);
			_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) st);
			_tmp9_ = _tmp8_;
			_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) st);
			_tmp11_ = _tmp10_;
			vala_report_error (_tmp9_, "Struct name `%s' is too short", _tmp11_);
			_g_free0 (_tmp11_);
			return;
		}
		_tmp12_ = vala_code_node_get_source_reference ((ValaCodeNode*) st);
		_tmp13_ = _tmp12_;
		vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp13_);
		_tmp14_ = vala_struct_register_function_new (st);
		type_fun = _tmp14_;
		_tmp15_ = type_fun;
		_tmp16_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp17_ = _tmp16_;
		vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp15_, _tmp17_, FALSE, FALSE);
		_tmp18_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp19_ = type_fun;
		_tmp20_ = vala_typeregister_function_get_definition ((ValaTypeRegisterFunction*) _tmp19_);
		_tmp21_ = _tmp20_;
		vala_ccode_file_add_type_member_definition (_tmp18_, (ValaCCodeNode*) _tmp21_);
		_vala_ccode_node_unref0 (_tmp21_);
		vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
		_vala_typeregister_function_unref0 (type_fun);
	}
}

static void
vala_gtype_module_real_visit_enum (ValaCodeVisitor* base,
                                   ValaEnum* en)
{
	ValaGTypeModule * self;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (en != NULL);
	VALA_CODE_VISITOR_CLASS (vala_gtype_module_parent_class)->visit_enum ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), en);
	if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) en)) {
		gchar* _tmp0_;
		gchar* _tmp1_;
		gint _tmp2_;
		gint _tmp3_;
		gboolean _tmp4_;
		ValaSourceReference* _tmp9_;
		ValaSourceReference* _tmp10_;
		ValaEnumRegisterFunction* type_fun = NULL;
		ValaEnumRegisterFunction* _tmp11_;
		ValaEnumRegisterFunction* _tmp12_;
		ValaCodeContext* _tmp13_;
		ValaCodeContext* _tmp14_;
		ValaCCodeFile* _tmp15_;
		ValaEnumRegisterFunction* _tmp16_;
		ValaCCodeFragment* _tmp17_;
		ValaCCodeFragment* _tmp18_;
		_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) en);
		_tmp1_ = _tmp0_;
		_tmp2_ = strlen (_tmp1_);
		_tmp3_ = _tmp2_;
		_tmp4_ = _tmp3_ < 3;
		_g_free0 (_tmp1_);
		if (_tmp4_) {
			ValaSourceReference* _tmp5_;
			ValaSourceReference* _tmp6_;
			gchar* _tmp7_;
			gchar* _tmp8_;
			vala_code_node_set_error ((ValaCodeNode*) en, TRUE);
			_tmp5_ = vala_code_node_get_source_reference ((ValaCodeNode*) en);
			_tmp6_ = _tmp5_;
			_tmp7_ = vala_get_ccode_name ((ValaCodeNode*) en);
			_tmp8_ = _tmp7_;
			vala_report_error (_tmp6_, "Enum name `%s' is too short", _tmp8_);
			_g_free0 (_tmp8_);
			return;
		}
		_tmp9_ = vala_code_node_get_source_reference ((ValaCodeNode*) en);
		_tmp10_ = _tmp9_;
		vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp10_);
		_tmp11_ = vala_enum_register_function_new (en);
		type_fun = _tmp11_;
		_tmp12_ = type_fun;
		_tmp13_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp14_ = _tmp13_;
		vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp12_, _tmp14_, FALSE, FALSE);
		_tmp15_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp16_ = type_fun;
		_tmp17_ = vala_typeregister_function_get_definition ((ValaTypeRegisterFunction*) _tmp16_);
		_tmp18_ = _tmp17_;
		vala_ccode_file_add_type_member_definition (_tmp15_, (ValaCCodeNode*) _tmp18_);
		_vala_ccode_node_unref0 (_tmp18_);
		vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
		_vala_typeregister_function_unref0 (type_fun);
	}
}

static void
vala_gtype_module_real_visit_error_domain (ValaCodeVisitor* base,
                                           ValaErrorDomain* edomain)
{
	ValaGTypeModule * self;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (edomain != NULL);
	VALA_CODE_VISITOR_CLASS (vala_gtype_module_parent_class)->visit_error_domain ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), edomain);
	if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) edomain)) {
		ValaSourceReference* _tmp0_;
		ValaSourceReference* _tmp1_;
		ValaErrorDomainRegisterFunction* type_fun = NULL;
		ValaErrorDomainRegisterFunction* _tmp2_;
		ValaErrorDomainRegisterFunction* _tmp3_;
		ValaCodeContext* _tmp4_;
		ValaCodeContext* _tmp5_;
		ValaCCodeFile* _tmp6_;
		ValaErrorDomainRegisterFunction* _tmp7_;
		ValaCCodeFragment* _tmp8_;
		ValaCCodeFragment* _tmp9_;
		_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) edomain);
		_tmp1_ = _tmp0_;
		vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp1_);
		_tmp2_ = vala_error_domain_register_function_new (edomain);
		type_fun = _tmp2_;
		_tmp3_ = type_fun;
		_tmp4_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp5_ = _tmp4_;
		vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp3_, _tmp5_, FALSE, FALSE);
		_tmp6_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp7_ = type_fun;
		_tmp8_ = vala_typeregister_function_get_definition ((ValaTypeRegisterFunction*) _tmp7_);
		_tmp9_ = _tmp8_;
		vala_ccode_file_add_type_member_definition (_tmp6_, (ValaCCodeNode*) _tmp9_);
		_vala_ccode_node_unref0 (_tmp9_);
		vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
		_vala_typeregister_function_unref0 (type_fun);
	}
}

static void
vala_gtype_module_real_visit_method_call (ValaCodeVisitor* base,
                                          ValaMethodCall* expr)
{
	ValaGTypeModule * self;
	ValaMemberAccess* ma = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaMemberAccess* _tmp2_;
	ValaMethodType* mtype = NULL;
	ValaExpression* _tmp3_;
	ValaExpression* _tmp4_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaMethodType* _tmp7_;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	gboolean _tmp10_ = FALSE;
	gboolean _tmp11_ = FALSE;
	gboolean _tmp12_ = FALSE;
	ValaMethodType* _tmp13_;
	gboolean is_flags = FALSE;
	ValaMemberAccess* _tmp39_;
	ValaExpression* _tmp40_;
	ValaExpression* _tmp41_;
	ValaDataType* _tmp42_;
	ValaDataType* _tmp43_;
	ValaTypeSymbol* _tmp44_;
	ValaTypeSymbol* _tmp45_;
	gboolean _tmp46_;
	gboolean _tmp47_;
	ValaSourceReference* _tmp48_;
	ValaSourceReference* _tmp49_;
	ValaCodeContext* _tmp50_;
	ValaCodeContext* _tmp51_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_callable_expression_get_call ((ValaCallableExpression*) expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_MEMBER_ACCESS) ? ((ValaMemberAccess*) _tmp1_) : NULL);
	ma = _tmp2_;
	_tmp3_ = vala_callable_expression_get_call ((ValaCallableExpression*) expr);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_expression_get_value_type (_tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_METHOD_TYPE) ? ((ValaMethodType*) _tmp6_) : NULL);
	mtype = _tmp7_;
	_tmp13_ = mtype;
	if (_tmp13_ == NULL) {
		_tmp12_ = TRUE;
	} else {
		ValaMemberAccess* _tmp14_;
		_tmp14_ = ma;
		_tmp12_ = _tmp14_ == NULL;
	}
	if (_tmp12_) {
		_tmp11_ = TRUE;
	} else {
		ValaMemberAccess* _tmp15_;
		ValaExpression* _tmp16_;
		ValaExpression* _tmp17_;
		_tmp15_ = ma;
		_tmp16_ = vala_member_access_get_inner (_tmp15_);
		_tmp17_ = _tmp16_;
		_tmp11_ = _tmp17_ == NULL;
	}
	if (_tmp11_) {
		_tmp10_ = TRUE;
	} else {
		ValaMemberAccess* _tmp18_;
		ValaExpression* _tmp19_;
		ValaExpression* _tmp20_;
		ValaDataType* _tmp21_;
		ValaDataType* _tmp22_;
		_tmp18_ = ma;
		_tmp19_ = vala_member_access_get_inner (_tmp18_);
		_tmp20_ = _tmp19_;
		_tmp21_ = vala_expression_get_value_type (_tmp20_);
		_tmp22_ = _tmp21_;
		_tmp10_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_ENUM_VALUE_TYPE);
	}
	if (_tmp10_) {
		_tmp9_ = TRUE;
	} else {
		ValaMemberAccess* _tmp23_;
		ValaExpression* _tmp24_;
		ValaExpression* _tmp25_;
		ValaDataType* _tmp26_;
		ValaDataType* _tmp27_;
		ValaTypeSymbol* _tmp28_;
		ValaTypeSymbol* _tmp29_;
		_tmp23_ = ma;
		_tmp24_ = vala_member_access_get_inner (_tmp23_);
		_tmp25_ = _tmp24_;
		_tmp26_ = vala_expression_get_value_type (_tmp25_);
		_tmp27_ = _tmp26_;
		_tmp28_ = vala_data_type_get_type_symbol (_tmp27_);
		_tmp29_ = _tmp28_;
		_tmp9_ = !vala_get_ccode_has_type_id (_tmp29_);
	}
	if (_tmp9_) {
		_tmp8_ = TRUE;
	} else {
		ValaMethodType* _tmp30_;
		ValaMethod* _tmp31_;
		ValaMethod* _tmp32_;
		ValaMemberAccess* _tmp33_;
		ValaExpression* _tmp34_;
		ValaExpression* _tmp35_;
		ValaDataType* _tmp36_;
		ValaDataType* _tmp37_;
		ValaMethod* _tmp38_;
		_tmp30_ = mtype;
		_tmp31_ = vala_method_type_get_method_symbol (_tmp30_);
		_tmp32_ = _tmp31_;
		_tmp33_ = ma;
		_tmp34_ = vala_member_access_get_inner (_tmp33_);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_expression_get_value_type (_tmp35_);
		_tmp37_ = _tmp36_;
		_tmp38_ = vala_enum_value_type_get_to_string_method (G_TYPE_CHECK_INSTANCE_CAST (_tmp37_, VALA_TYPE_ENUM_VALUE_TYPE, ValaEnumValueType));
		_tmp8_ = _tmp32_ != _tmp38_;
	}
	if (_tmp8_) {
		VALA_CODE_VISITOR_CLASS (vala_gtype_module_parent_class)->visit_method_call ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), expr);
		_vala_code_node_unref0 (mtype);
		_vala_code_node_unref0 (ma);
		return;
	}
	_tmp39_ = ma;
	_tmp40_ = vala_member_access_get_inner (_tmp39_);
	_tmp41_ = _tmp40_;
	_tmp42_ = vala_expression_get_value_type (_tmp41_);
	_tmp43_ = _tmp42_;
	_tmp44_ = vala_data_type_get_type_symbol ((ValaDataType*) G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, VALA_TYPE_ENUM_VALUE_TYPE, ValaEnumValueType));
	_tmp45_ = _tmp44_;
	_tmp46_ = vala_enum_get_is_flags (G_TYPE_CHECK_INSTANCE_CAST (_tmp45_, VALA_TYPE_ENUM, ValaEnum));
	_tmp47_ = _tmp46_;
	is_flags = _tmp47_;
	_tmp48_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
	_tmp49_ = _tmp48_;
	vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp49_);
	_tmp50_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp51_ = _tmp50_;
	if (vala_code_context_require_glib_version (_tmp51_, 2, 54)) {
		const gchar* _tmp52_ = NULL;
		ValaCCodeFunctionCall* to_string = NULL;
		ValaCCodeIdentifier* _tmp53_;
		ValaCCodeIdentifier* _tmp54_;
		ValaCCodeFunctionCall* _tmp55_;
		ValaCCodeFunctionCall* _tmp56_;
		ValaCCodeFunctionCall* _tmp57_;
		ValaMemberAccess* _tmp58_;
		ValaExpression* _tmp59_;
		ValaExpression* _tmp60_;
		ValaDataType* _tmp61_;
		ValaDataType* _tmp62_;
		gchar* _tmp63_;
		gchar* _tmp64_;
		ValaCCodeIdentifier* _tmp65_;
		ValaCCodeIdentifier* _tmp66_;
		ValaCCodeFunctionCall* _tmp67_;
		ValaExpression* _tmp68_;
		ValaExpression* _tmp69_;
		ValaExpression* _tmp70_;
		ValaExpression* _tmp71_;
		ValaCCodeExpression* _tmp72_;
		ValaCCodeExpression* _tmp73_;
		ValaDataType* _tmp74_;
		ValaDataType* _tmp75_;
		ValaCCodeFunctionCall* _tmp76_;
		if (is_flags) {
			_tmp52_ = "g_flags_to_string";
		} else {
			_tmp52_ = "g_enum_to_string";
		}
		_tmp53_ = vala_ccode_identifier_new (_tmp52_);
		_tmp54_ = _tmp53_;
		_tmp55_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp54_);
		_tmp56_ = _tmp55_;
		_vala_ccode_node_unref0 (_tmp54_);
		to_string = _tmp56_;
		_tmp57_ = to_string;
		_tmp58_ = ma;
		_tmp59_ = vala_member_access_get_inner (_tmp58_);
		_tmp60_ = _tmp59_;
		_tmp61_ = vala_expression_get_value_type (_tmp60_);
		_tmp62_ = _tmp61_;
		_tmp63_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp62_);
		_tmp64_ = _tmp63_;
		_tmp65_ = vala_ccode_identifier_new (_tmp64_);
		_tmp66_ = _tmp65_;
		vala_ccode_function_call_add_argument (_tmp57_, (ValaCCodeExpression*) _tmp66_);
		_vala_ccode_node_unref0 (_tmp66_);
		_g_free0 (_tmp64_);
		_tmp67_ = to_string;
		_tmp68_ = vala_callable_expression_get_call ((ValaCallableExpression*) expr);
		_tmp69_ = _tmp68_;
		_tmp70_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_tmp71_ = _tmp70_;
		_tmp72_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp71_);
		_tmp73_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
		vala_ccode_function_call_add_argument (_tmp67_, _tmp73_);
		_vala_ccode_node_unref0 (_tmp73_);
		_tmp74_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp75_ = _tmp74_;
		vala_data_type_set_value_owned (_tmp75_, TRUE);
		_tmp76_ = to_string;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp76_);
		_vala_ccode_node_unref0 (to_string);
	} else {
		const gchar* _tmp77_ = NULL;
		ValaLocalVariable* temp_var = NULL;
		ValaCType* _tmp78_;
		ValaCType* _tmp79_;
		ValaLocalVariable* _tmp80_;
		ValaLocalVariable* _tmp81_;
		ValaLocalVariable* _tmp82_;
		ValaCCodeFunctionCall* class_ref = NULL;
		ValaCCodeIdentifier* _tmp83_;
		ValaCCodeIdentifier* _tmp84_;
		ValaCCodeFunctionCall* _tmp85_;
		ValaCCodeFunctionCall* _tmp86_;
		ValaCCodeFunctionCall* _tmp87_;
		ValaMemberAccess* _tmp88_;
		ValaExpression* _tmp89_;
		ValaExpression* _tmp90_;
		ValaDataType* _tmp91_;
		ValaDataType* _tmp92_;
		gchar* _tmp93_;
		gchar* _tmp94_;
		ValaCCodeIdentifier* _tmp95_;
		ValaCCodeIdentifier* _tmp96_;
		const gchar* _tmp97_ = NULL;
		ValaCCodeFunctionCall* get_value = NULL;
		ValaCCodeIdentifier* _tmp98_;
		ValaCCodeIdentifier* _tmp99_;
		ValaCCodeFunctionCall* _tmp100_;
		ValaCCodeFunctionCall* _tmp101_;
		ValaCCodeFunctionCall* _tmp102_;
		ValaCCodeFunctionCall* _tmp103_;
		ValaCCodeFunctionCall* _tmp104_;
		ValaExpression* _tmp105_;
		ValaExpression* _tmp106_;
		ValaExpression* _tmp107_;
		ValaExpression* _tmp108_;
		ValaCCodeExpression* _tmp109_;
		ValaCCodeExpression* _tmp110_;
		ValaCCodeFunction* _tmp111_;
		ValaCCodeFunction* _tmp112_;
		ValaLocalVariable* _tmp113_;
		const gchar* _tmp114_;
		const gchar* _tmp115_;
		ValaCCodeExpression* _tmp116_;
		ValaCCodeExpression* _tmp117_;
		ValaCCodeFunctionCall* _tmp118_;
		ValaCCodeBinaryExpression* is_null_value = NULL;
		ValaLocalVariable* _tmp119_;
		const gchar* _tmp120_;
		const gchar* _tmp121_;
		ValaCCodeExpression* _tmp122_;
		ValaCCodeExpression* _tmp123_;
		ValaCCodeConstant* _tmp124_;
		ValaCCodeConstant* _tmp125_;
		ValaCCodeBinaryExpression* _tmp126_;
		ValaCCodeBinaryExpression* _tmp127_;
		ValaCCodeBinaryExpression* _tmp128_;
		ValaLocalVariable* _tmp129_;
		const gchar* _tmp130_;
		const gchar* _tmp131_;
		ValaCCodeExpression* _tmp132_;
		ValaCCodeExpression* _tmp133_;
		ValaCCodeMemberAccess* _tmp134_;
		ValaCCodeMemberAccess* _tmp135_;
		ValaCCodeConstant* _tmp136_;
		ValaCCodeConstant* _tmp137_;
		ValaCCodeConditionalExpression* _tmp138_;
		ValaCCodeConditionalExpression* _tmp139_;
		if (is_flags) {
			_tmp77_ = "GFlagsValue*";
		} else {
			_tmp77_ = "GEnumValue*";
		}
		_tmp78_ = vala_ctype_new (_tmp77_, "NULL");
		_tmp79_ = _tmp78_;
		_tmp80_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, (ValaDataType*) _tmp79_, FALSE, (ValaCodeNode*) expr, FALSE);
		_tmp81_ = _tmp80_;
		_vala_code_node_unref0 (_tmp79_);
		temp_var = _tmp81_;
		_tmp82_ = temp_var;
		vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp82_, FALSE);
		_tmp83_ = vala_ccode_identifier_new ("g_type_class_ref");
		_tmp84_ = _tmp83_;
		_tmp85_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp84_);
		_tmp86_ = _tmp85_;
		_vala_ccode_node_unref0 (_tmp84_);
		class_ref = _tmp86_;
		_tmp87_ = class_ref;
		_tmp88_ = ma;
		_tmp89_ = vala_member_access_get_inner (_tmp88_);
		_tmp90_ = _tmp89_;
		_tmp91_ = vala_expression_get_value_type (_tmp90_);
		_tmp92_ = _tmp91_;
		_tmp93_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp92_);
		_tmp94_ = _tmp93_;
		_tmp95_ = vala_ccode_identifier_new (_tmp94_);
		_tmp96_ = _tmp95_;
		vala_ccode_function_call_add_argument (_tmp87_, (ValaCCodeExpression*) _tmp96_);
		_vala_ccode_node_unref0 (_tmp96_);
		_g_free0 (_tmp94_);
		if (is_flags) {
			_tmp97_ = "g_flags_get_first_value";
		} else {
			_tmp97_ = "g_enum_get_value";
		}
		_tmp98_ = vala_ccode_identifier_new (_tmp97_);
		_tmp99_ = _tmp98_;
		_tmp100_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp99_);
		_tmp101_ = _tmp100_;
		_vala_ccode_node_unref0 (_tmp99_);
		get_value = _tmp101_;
		_tmp102_ = get_value;
		_tmp103_ = class_ref;
		vala_ccode_function_call_add_argument (_tmp102_, (ValaCCodeExpression*) _tmp103_);
		_tmp104_ = get_value;
		_tmp105_ = vala_callable_expression_get_call ((ValaCallableExpression*) expr);
		_tmp106_ = _tmp105_;
		_tmp107_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp106_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_tmp108_ = _tmp107_;
		_tmp109_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp108_);
		_tmp110_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp109_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
		vala_ccode_function_call_add_argument (_tmp104_, _tmp110_);
		_vala_ccode_node_unref0 (_tmp110_);
		_tmp111_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp112_ = _tmp111_;
		_tmp113_ = temp_var;
		_tmp114_ = vala_symbol_get_name ((ValaSymbol*) _tmp113_);
		_tmp115_ = _tmp114_;
		_tmp116_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp115_);
		_tmp117_ = _tmp116_;
		_tmp118_ = get_value;
		vala_ccode_function_add_assignment (_tmp112_, _tmp117_, (ValaCCodeExpression*) _tmp118_);
		_vala_ccode_node_unref0 (_tmp117_);
		_tmp119_ = temp_var;
		_tmp120_ = vala_symbol_get_name ((ValaSymbol*) _tmp119_);
		_tmp121_ = _tmp120_;
		_tmp122_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp121_);
		_tmp123_ = _tmp122_;
		_tmp124_ = vala_ccode_constant_new ("NULL");
		_tmp125_ = _tmp124_;
		_tmp126_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp123_, (ValaCCodeExpression*) _tmp125_);
		_tmp127_ = _tmp126_;
		_vala_ccode_node_unref0 (_tmp125_);
		_vala_ccode_node_unref0 (_tmp123_);
		is_null_value = _tmp127_;
		_tmp128_ = is_null_value;
		_tmp129_ = temp_var;
		_tmp130_ = vala_symbol_get_name ((ValaSymbol*) _tmp129_);
		_tmp131_ = _tmp130_;
		_tmp132_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp131_);
		_tmp133_ = _tmp132_;
		_tmp134_ = vala_ccode_member_access_new_pointer (_tmp133_, "value_name");
		_tmp135_ = _tmp134_;
		_tmp136_ = vala_ccode_constant_new ("NULL");
		_tmp137_ = _tmp136_;
		_tmp138_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp128_, (ValaCCodeExpression*) _tmp135_, (ValaCCodeExpression*) _tmp137_);
		_tmp139_ = _tmp138_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp139_);
		_vala_ccode_node_unref0 (_tmp139_);
		_vala_ccode_node_unref0 (_tmp137_);
		_vala_ccode_node_unref0 (_tmp135_);
		_vala_ccode_node_unref0 (_tmp133_);
		_vala_ccode_node_unref0 (is_null_value);
		_vala_ccode_node_unref0 (get_value);
		_vala_ccode_node_unref0 (class_ref);
		_vala_code_node_unref0 (temp_var);
	}
	vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
	_vala_code_node_unref0 (mtype);
	_vala_code_node_unref0 (ma);
}

static void
vala_gtype_module_real_visit_property (ValaCodeVisitor* base,
                                       ValaProperty* prop)
{
	ValaGTypeModule * self;
	ValaClass* cl = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaClass* _tmp2_;
	ValaStruct* st = NULL;
	ValaTypeSymbol* _tmp3_;
	ValaTypeSymbol* _tmp4_;
	ValaStruct* _tmp5_;
	ValaProperty* base_prop = NULL;
	ValaProperty* _tmp6_;
	ValaProperty* _tmp7_;
	ValaProperty* _tmp8_;
	gboolean _tmp17_ = FALSE;
	gboolean _tmp18_ = FALSE;
	ValaProperty* _tmp19_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (prop != NULL);
	_tmp0_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL);
	cl = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
	_tmp4_ = _tmp3_;
	_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp4_) : NULL);
	st = _tmp5_;
	_tmp6_ = _vala_code_node_ref0 (prop);
	base_prop = _tmp6_;
	_tmp7_ = vala_property_get_base_property (prop);
	_tmp8_ = _tmp7_;
	if (_tmp8_ != NULL) {
		ValaProperty* _tmp9_;
		ValaProperty* _tmp10_;
		ValaProperty* _tmp11_;
		_tmp9_ = vala_property_get_base_property (prop);
		_tmp10_ = _tmp9_;
		_tmp11_ = _vala_code_node_ref0 (_tmp10_);
		_vala_code_node_unref0 (base_prop);
		base_prop = _tmp11_;
	} else {
		ValaProperty* _tmp12_;
		ValaProperty* _tmp13_;
		_tmp12_ = vala_property_get_base_interface_property (prop);
		_tmp13_ = _tmp12_;
		if (_tmp13_ != NULL) {
			ValaProperty* _tmp14_;
			ValaProperty* _tmp15_;
			ValaProperty* _tmp16_;
			_tmp14_ = vala_property_get_base_interface_property (prop);
			_tmp15_ = _tmp14_;
			_tmp16_ = _vala_code_node_ref0 (_tmp15_);
			_vala_code_node_unref0 (base_prop);
			base_prop = _tmp16_;
		}
	}
	_tmp19_ = base_prop;
	if (!vala_code_node_has_attribute ((ValaCodeNode*) _tmp19_, "NoAccessorMethod")) {
		const gchar* _tmp20_;
		const gchar* _tmp21_;
		_tmp20_ = vala_symbol_get_name ((ValaSymbol*) prop);
		_tmp21_ = _tmp20_;
		_tmp18_ = g_strcmp0 (_tmp21_, "type") == 0;
	} else {
		_tmp18_ = FALSE;
	}
	if (_tmp18_) {
		gboolean _tmp22_ = FALSE;
		gboolean _tmp23_ = FALSE;
		ValaClass* _tmp24_;
		_tmp24_ = cl;
		if (_tmp24_ != NULL) {
			ValaClass* _tmp25_;
			gboolean _tmp26_;
			gboolean _tmp27_;
			_tmp25_ = cl;
			_tmp26_ = vala_class_get_is_compact (_tmp25_);
			_tmp27_ = _tmp26_;
			_tmp23_ = !_tmp27_;
		} else {
			_tmp23_ = FALSE;
		}
		if (_tmp23_) {
			_tmp22_ = TRUE;
		} else {
			gboolean _tmp28_ = FALSE;
			ValaStruct* _tmp29_;
			_tmp29_ = st;
			if (_tmp29_ != NULL) {
				ValaStruct* _tmp30_;
				_tmp30_ = st;
				_tmp28_ = vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp30_);
			} else {
				_tmp28_ = FALSE;
			}
			_tmp22_ = _tmp28_;
		}
		_tmp17_ = _tmp22_;
	} else {
		_tmp17_ = FALSE;
	}
	if (_tmp17_) {
		ValaSourceReference* _tmp31_;
		ValaSourceReference* _tmp32_;
		_tmp31_ = vala_code_node_get_source_reference ((ValaCodeNode*) prop);
		_tmp32_ = _tmp31_;
		vala_report_error (_tmp32_, "Property 'type' not allowed");
		_vala_code_node_unref0 (base_prop);
		_vala_code_node_unref0 (st);
		_vala_code_node_unref0 (cl);
		return;
	}
	VALA_CODE_VISITOR_CLASS (vala_gtype_module_parent_class)->visit_property ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), prop);
	_vala_code_node_unref0 (base_prop);
	_vala_code_node_unref0 (st);
	_vala_code_node_unref0 (cl);
}

static void
vala_gtype_module_real_create_type_check_statement (ValaCCodeBaseModule* base,
                                                    ValaCodeNode* method_node,
                                                    ValaDataType* ret_type,
                                                    ValaTypeSymbol* t,
                                                    gboolean non_null,
                                                    const gchar* var_name)
{
	ValaGTypeModule * self;
	ValaCCodeFunctionCall* ccheck = NULL;
	ValaCCodeFunctionCall* _tmp0_;
	ValaCodeContext* _tmp1_;
	ValaCodeContext* _tmp2_;
	gboolean _tmp3_;
	gboolean _tmp4_;
	ValaCCodeFile* _tmp61_;
	ValaCreationMethod* cm = NULL;
	ValaCreationMethod* _tmp62_;
	gboolean _tmp63_ = FALSE;
	gboolean _tmp64_ = FALSE;
	ValaCreationMethod* _tmp65_;
	ValaCCodeFunction* _tmp96_;
	ValaCCodeFunction* _tmp97_;
	ValaCCodeFunctionCall* _tmp98_;
	self = (ValaGTypeModule*) base;
	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);
	_tmp0_ = vala_ccode_function_call_new (NULL);
	ccheck = _tmp0_;
	_tmp1_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_code_context_get_assert (_tmp2_);
	_tmp4_ = _tmp3_;
	if (!_tmp4_) {
		_vala_ccode_node_unref0 (ccheck);
		return;
	} else {
		gboolean _tmp5_ = FALSE;
		ValaCodeContext* _tmp6_;
		ValaCodeContext* _tmp7_;
		gboolean _tmp8_;
		gboolean _tmp9_;
		_tmp6_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_code_context_get_checking (_tmp7_);
		_tmp9_ = _tmp8_;
		if (_tmp9_) {
			gboolean _tmp10_ = FALSE;
			gboolean _tmp11_ = FALSE;
			if (G_TYPE_CHECK_INSTANCE_TYPE (t, VALA_TYPE_CLASS)) {
				gboolean _tmp12_;
				gboolean _tmp13_;
				_tmp12_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (t, VALA_TYPE_CLASS, ValaClass));
				_tmp13_ = _tmp12_;
				_tmp11_ = !_tmp13_;
			} else {
				_tmp11_ = FALSE;
			}
			if (_tmp11_) {
				_tmp10_ = TRUE;
			} else {
				_tmp10_ = G_TYPE_CHECK_INSTANCE_TYPE (t, VALA_TYPE_INTERFACE);
			}
			_tmp5_ = _tmp10_;
		} else {
			_tmp5_ = FALSE;
		}
		if (_tmp5_) {
			ValaCCodeFunctionCall* ctype_check = NULL;
			gboolean _tmp14_;
			gboolean _tmp15_;
			ValaCCodeExpression* cexpr = NULL;
			ValaCCodeFunctionCall* _tmp35_;
			ValaCCodeExpression* _tmp36_;
			ValaCCodeFunctionCall* _tmp46_;
			ValaCCodeExpression* _tmp47_;
			if (!vala_get_ccode_has_type_id (t)) {
				_vala_ccode_node_unref0 (ccheck);
				return;
			}
			_tmp14_ = vala_symbol_get_external_package ((ValaSymbol*) t);
			_tmp15_ = _tmp14_;
			if (_tmp15_) {
				ValaCCodeIdentifier* _tmp16_;
				ValaCCodeIdentifier* _tmp17_;
				ValaCCodeFunctionCall* _tmp18_;
				ValaCCodeFunctionCall* _tmp19_;
				ValaCCodeIdentifier* _tmp20_;
				ValaCCodeIdentifier* _tmp21_;
				ValaCCodeFunctionCall* _tmp22_;
				gchar* _tmp23_;
				gchar* _tmp24_;
				ValaCCodeIdentifier* _tmp25_;
				ValaCCodeIdentifier* _tmp26_;
				_tmp16_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_TYPE");
				_tmp17_ = _tmp16_;
				_tmp18_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp17_);
				_vala_ccode_node_unref0 (ctype_check);
				ctype_check = _tmp18_;
				_vala_ccode_node_unref0 (_tmp17_);
				_tmp19_ = ctype_check;
				_tmp20_ = vala_ccode_identifier_new (var_name);
				_tmp21_ = _tmp20_;
				vala_ccode_function_call_add_argument (_tmp19_, (ValaCCodeExpression*) _tmp21_);
				_vala_ccode_node_unref0 (_tmp21_);
				_tmp22_ = ctype_check;
				_tmp23_ = vala_get_ccode_type_id ((ValaCodeNode*) t);
				_tmp24_ = _tmp23_;
				_tmp25_ = vala_ccode_identifier_new (_tmp24_);
				_tmp26_ = _tmp25_;
				vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp26_);
				_vala_ccode_node_unref0 (_tmp26_);
				_g_free0 (_tmp24_);
			} else {
				gchar* _tmp27_;
				gchar* _tmp28_;
				ValaCCodeIdentifier* _tmp29_;
				ValaCCodeIdentifier* _tmp30_;
				ValaCCodeFunctionCall* _tmp31_;
				ValaCCodeFunctionCall* _tmp32_;
				ValaCCodeIdentifier* _tmp33_;
				ValaCCodeIdentifier* _tmp34_;
				_tmp27_ = vala_get_ccode_type_check_function (t);
				_tmp28_ = _tmp27_;
				_tmp29_ = vala_ccode_identifier_new (_tmp28_);
				_tmp30_ = _tmp29_;
				_tmp31_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp30_);
				_vala_ccode_node_unref0 (ctype_check);
				ctype_check = _tmp31_;
				_vala_ccode_node_unref0 (_tmp30_);
				_g_free0 (_tmp28_);
				_tmp32_ = ctype_check;
				_tmp33_ = vala_ccode_identifier_new (var_name);
				_tmp34_ = _tmp33_;
				vala_ccode_function_call_add_argument (_tmp32_, (ValaCCodeExpression*) _tmp34_);
				_vala_ccode_node_unref0 (_tmp34_);
			}
			_tmp35_ = ctype_check;
			_tmp36_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp35_);
			cexpr = _tmp36_;
			if (!non_null) {
				ValaCCodeBinaryExpression* cnull = NULL;
				ValaCCodeIdentifier* _tmp37_;
				ValaCCodeIdentifier* _tmp38_;
				ValaCCodeConstant* _tmp39_;
				ValaCCodeConstant* _tmp40_;
				ValaCCodeBinaryExpression* _tmp41_;
				ValaCCodeBinaryExpression* _tmp42_;
				ValaCCodeBinaryExpression* _tmp43_;
				ValaCCodeFunctionCall* _tmp44_;
				ValaCCodeBinaryExpression* _tmp45_;
				_tmp37_ = vala_ccode_identifier_new (var_name);
				_tmp38_ = _tmp37_;
				_tmp39_ = vala_ccode_constant_new ("NULL");
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp38_, (ValaCCodeExpression*) _tmp40_);
				_tmp42_ = _tmp41_;
				_vala_ccode_node_unref0 (_tmp40_);
				_vala_ccode_node_unref0 (_tmp38_);
				cnull = _tmp42_;
				_tmp43_ = cnull;
				_tmp44_ = ctype_check;
				_tmp45_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, (ValaCCodeExpression*) _tmp43_, (ValaCCodeExpression*) _tmp44_);
				_vala_ccode_node_unref0 (cexpr);
				cexpr = (ValaCCodeExpression*) _tmp45_;
				_vala_ccode_node_unref0 (cnull);
			}
			_tmp46_ = ccheck;
			_tmp47_ = cexpr;
			vala_ccode_function_call_add_argument (_tmp46_, _tmp47_);
			_vala_ccode_node_unref0 (cexpr);
			_vala_ccode_node_unref0 (ctype_check);
		} else {
			gboolean _tmp48_ = FALSE;
			if (!non_null) {
				_tmp48_ = TRUE;
			} else {
				gboolean _tmp49_ = FALSE;
				if (G_TYPE_CHECK_INSTANCE_TYPE (t, VALA_TYPE_STRUCT)) {
					_tmp49_ = vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (t, VALA_TYPE_STRUCT, ValaStruct));
				} else {
					_tmp49_ = FALSE;
				}
				_tmp48_ = _tmp49_;
			}
			if (_tmp48_) {
				_vala_ccode_node_unref0 (ccheck);
				return;
			} else {
				gboolean _tmp50_ = FALSE;
				ValaClass* _tmp51_;
				_tmp51_ = ((ValaCCodeBaseModule*) self)->glist_type;
				if (t == G_TYPE_CHECK_INSTANCE_CAST (_tmp51_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
					_tmp50_ = TRUE;
				} else {
					ValaClass* _tmp52_;
					_tmp52_ = ((ValaCCodeBaseModule*) self)->gslist_type;
					_tmp50_ = t == G_TYPE_CHECK_INSTANCE_CAST (_tmp52_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
				}
				if (_tmp50_) {
					_vala_ccode_node_unref0 (ccheck);
					return;
				} else {
					ValaCCodeBinaryExpression* cnonnull = NULL;
					ValaCCodeIdentifier* _tmp53_;
					ValaCCodeIdentifier* _tmp54_;
					ValaCCodeConstant* _tmp55_;
					ValaCCodeConstant* _tmp56_;
					ValaCCodeBinaryExpression* _tmp57_;
					ValaCCodeBinaryExpression* _tmp58_;
					ValaCCodeFunctionCall* _tmp59_;
					ValaCCodeBinaryExpression* _tmp60_;
					_tmp53_ = vala_ccode_identifier_new (var_name);
					_tmp54_ = _tmp53_;
					_tmp55_ = vala_ccode_constant_new ("NULL");
					_tmp56_ = _tmp55_;
					_tmp57_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp54_, (ValaCCodeExpression*) _tmp56_);
					_tmp58_ = _tmp57_;
					_vala_ccode_node_unref0 (_tmp56_);
					_vala_ccode_node_unref0 (_tmp54_);
					cnonnull = _tmp58_;
					_tmp59_ = ccheck;
					_tmp60_ = cnonnull;
					vala_ccode_function_call_add_argument (_tmp59_, (ValaCCodeExpression*) _tmp60_);
					_vala_ccode_node_unref0 (cnonnull);
				}
			}
		}
	}
	_tmp61_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_include (_tmp61_, "glib.h", FALSE);
	_tmp62_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (method_node, VALA_TYPE_CREATION_METHOD) ? ((ValaCreationMethod*) method_node) : NULL);
	cm = _tmp62_;
	_tmp65_ = cm;
	if (_tmp65_ != NULL) {
		ValaCreationMethod* _tmp66_;
		gboolean _tmp67_;
		gboolean _tmp68_;
		_tmp66_ = cm;
		_tmp67_ = vala_method_get_coroutine ((ValaMethod*) _tmp66_);
		_tmp68_ = _tmp67_;
		_tmp64_ = !_tmp68_;
	} else {
		_tmp64_ = FALSE;
	}
	if (_tmp64_) {
		ValaCreationMethod* _tmp69_;
		ValaSymbol* _tmp70_;
		ValaSymbol* _tmp71_;
		_tmp69_ = cm;
		_tmp70_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp69_);
		_tmp71_ = _tmp70_;
		_tmp63_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp71_, VALA_TYPE_OBJECT_TYPE_SYMBOL);
	} else {
		_tmp63_ = FALSE;
	}
	if (_tmp63_) {
		ValaCCodeFunctionCall* _tmp72_;
		ValaCCodeIdentifier* _tmp73_;
		ValaCCodeIdentifier* _tmp74_;
		ValaCCodeFunctionCall* _tmp75_;
		ValaCCodeConstant* _tmp76_;
		ValaCCodeConstant* _tmp77_;
		_tmp72_ = ccheck;
		_tmp73_ = vala_ccode_identifier_new ("g_return_val_if_fail");
		_tmp74_ = _tmp73_;
		vala_ccode_function_call_set_call (_tmp72_, (ValaCCodeExpression*) _tmp74_);
		_vala_ccode_node_unref0 (_tmp74_);
		_tmp75_ = ccheck;
		_tmp76_ = vala_ccode_constant_new ("NULL");
		_tmp77_ = _tmp76_;
		vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp77_);
		_vala_ccode_node_unref0 (_tmp77_);
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (ret_type, VALA_TYPE_VOID_TYPE)) {
			ValaCCodeFunctionCall* _tmp78_;
			ValaCCodeIdentifier* _tmp79_;
			ValaCCodeIdentifier* _tmp80_;
			_tmp78_ = ccheck;
			_tmp79_ = vala_ccode_identifier_new ("g_return_if_fail");
			_tmp80_ = _tmp79_;
			vala_ccode_function_call_set_call (_tmp78_, (ValaCCodeExpression*) _tmp80_);
			_vala_ccode_node_unref0 (_tmp80_);
		} else {
			ValaCCodeFunctionCall* _tmp81_;
			ValaCCodeIdentifier* _tmp82_;
			ValaCCodeIdentifier* _tmp83_;
			ValaCCodeExpression* cdefault = NULL;
			ValaCCodeExpression* _tmp84_;
			ValaCCodeExpression* _tmp85_;
			_tmp81_ = ccheck;
			_tmp82_ = vala_ccode_identifier_new ("g_return_val_if_fail");
			_tmp83_ = _tmp82_;
			vala_ccode_function_call_set_call (_tmp81_, (ValaCCodeExpression*) _tmp83_);
			_vala_ccode_node_unref0 (_tmp83_);
			_tmp84_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, ret_type, FALSE, FALSE);
			cdefault = _tmp84_;
			_tmp85_ = cdefault;
			if (_tmp85_ != NULL) {
				ValaCCodeFunctionCall* _tmp86_;
				ValaCCodeExpression* _tmp87_;
				_tmp86_ = ccheck;
				_tmp87_ = cdefault;
				vala_ccode_function_call_add_argument (_tmp86_, _tmp87_);
			} else {
				gboolean _tmp88_ = FALSE;
				ValaTypeSymbol* _tmp89_;
				ValaTypeSymbol* _tmp90_;
				_tmp89_ = vala_data_type_get_type_symbol (ret_type);
				_tmp90_ = _tmp89_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp90_, VALA_TYPE_STRUCT)) {
					ValaTypeSymbol* _tmp91_;
					ValaTypeSymbol* _tmp92_;
					_tmp91_ = vala_data_type_get_type_symbol (ret_type);
					_tmp92_ = _tmp91_;
					_tmp88_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_STRUCT, ValaStruct));
				} else {
					_tmp88_ = FALSE;
				}
				if (_tmp88_) {
					ValaCCodeFunctionCall* _tmp93_;
					ValaCCodeIdentifier* _tmp94_;
					ValaCCodeIdentifier* _tmp95_;
					_tmp93_ = ccheck;
					_tmp94_ = vala_ccode_identifier_new ("result");
					_tmp95_ = _tmp94_;
					vala_ccode_function_call_add_argument (_tmp93_, (ValaCCodeExpression*) _tmp95_);
					_vala_ccode_node_unref0 (_tmp95_);
				} else {
					_vala_ccode_node_unref0 (cdefault);
					_vala_code_node_unref0 (cm);
					_vala_ccode_node_unref0 (ccheck);
					return;
				}
			}
			_vala_ccode_node_unref0 (cdefault);
		}
	}
	_tmp96_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp97_ = _tmp96_;
	_tmp98_ = ccheck;
	vala_ccode_function_add_expression (_tmp97_, (ValaCCodeExpression*) _tmp98_);
	_vala_code_node_unref0 (cm);
	_vala_ccode_node_unref0 (ccheck);
}

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

static void
vala_gtype_module_real_visit_cast_expression (ValaCodeVisitor* base,
                                              ValaCastExpression* expr)
{
	ValaGTypeModule * self;
	ValaObjectTypeSymbol* type_symbol = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	gboolean _tmp4_ = FALSE;
	ValaObjectTypeSymbol* _tmp5_;
	ValaDataType* _tmp11_;
	ValaDataType* _tmp12_;
	ValaCCodeFile* _tmp13_;
	gboolean _tmp14_;
	gboolean _tmp15_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_cast_expression_get_type_reference (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
	_tmp3_ = _tmp2_;
	type_symbol = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp3_) : NULL;
	_tmp5_ = type_symbol;
	if (_tmp5_ == NULL) {
		_tmp4_ = TRUE;
	} else {
		gboolean _tmp6_ = FALSE;
		ValaObjectTypeSymbol* _tmp7_;
		_tmp7_ = type_symbol;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_CLASS)) {
			ValaObjectTypeSymbol* _tmp8_;
			gboolean _tmp9_;
			gboolean _tmp10_;
			_tmp8_ = type_symbol;
			_tmp9_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_CLASS, ValaClass));
			_tmp10_ = _tmp9_;
			_tmp6_ = _tmp10_;
		} else {
			_tmp6_ = FALSE;
		}
		_tmp4_ = _tmp6_;
	}
	if (_tmp4_) {
		VALA_CODE_VISITOR_CLASS (vala_gtype_module_parent_class)->visit_cast_expression ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GERROR_MODULE, ValaGErrorModule), expr);
		return;
	}
	_tmp11_ = vala_cast_expression_get_type_reference (expr);
	_tmp12_ = _tmp11_;
	_tmp13_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp12_, _tmp13_);
	_tmp14_ = vala_cast_expression_get_is_silent_cast (expr);
	_tmp15_ = _tmp14_;
	if (_tmp15_) {
		ValaTargetValue* to_cast = NULL;
		ValaExpression* _tmp16_;
		ValaExpression* _tmp17_;
		ValaTargetValue* _tmp18_;
		ValaTargetValue* _tmp19_;
		ValaTargetValue* _tmp20_;
		ValaCCodeExpression* cexpr = NULL;
		ValaTargetValue* _tmp21_;
		ValaTargetValue* _tmp24_;
		ValaCCodeExpression* _tmp25_;
		ValaCCodeExpression* _tmp26_;
		ValaCCodeExpression* ccheck = NULL;
		ValaCCodeExpression* _tmp27_;
		ValaDataType* _tmp28_;
		ValaDataType* _tmp29_;
		ValaCCodeExpression* _tmp30_;
		ValaCCodeCastExpression* ccast = NULL;
		ValaCCodeExpression* _tmp31_;
		ValaDataType* _tmp32_;
		ValaDataType* _tmp33_;
		gchar* _tmp34_;
		gchar* _tmp35_;
		ValaCCodeCastExpression* _tmp36_;
		ValaCCodeCastExpression* _tmp37_;
		ValaCCodeConstant* cnull = NULL;
		ValaCCodeConstant* _tmp38_;
		ValaGLibValue* cast_value = NULL;
		ValaDataType* _tmp39_;
		ValaDataType* _tmp40_;
		ValaCCodeExpression* _tmp41_;
		ValaCCodeCastExpression* _tmp42_;
		ValaCCodeConstant* _tmp43_;
		ValaCCodeConditionalExpression* _tmp44_;
		ValaCCodeConditionalExpression* _tmp45_;
		ValaGLibValue* _tmp46_;
		ValaGLibValue* _tmp47_;
		ValaExpression* _tmp48_;
		ValaExpression* _tmp49_;
		ValaDataType* _tmp50_;
		ValaDataType* _tmp51_;
		_tmp16_ = vala_cast_expression_get_inner (expr);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_expression_get_target_value (_tmp17_);
		_tmp19_ = _tmp18_;
		_tmp20_ = _vala_target_value_ref0 (_tmp19_);
		to_cast = _tmp20_;
		_tmp21_ = to_cast;
		if (!vala_get_lvalue (_tmp21_)) {
			ValaTargetValue* _tmp22_;
			ValaTargetValue* _tmp23_;
			_tmp22_ = to_cast;
			_tmp23_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp22_, (ValaCodeNode*) expr, NULL);
			_vala_target_value_unref0 (to_cast);
			to_cast = _tmp23_;
		}
		_tmp24_ = to_cast;
		_tmp25_ = vala_get_cvalue_ (_tmp24_);
		_tmp26_ = _vala_ccode_node_ref0 (_tmp25_);
		_vala_ccode_node_unref0 (cexpr);
		cexpr = _tmp26_;
		_tmp27_ = cexpr;
		_tmp28_ = vala_cast_expression_get_type_reference (expr);
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_ccode_base_module_create_type_check ((ValaCCodeBaseModule*) self, (ValaCCodeNode*) _tmp27_, _tmp29_);
		ccheck = _tmp30_;
		_tmp31_ = cexpr;
		_tmp32_ = vala_cast_expression_get_type_reference (expr);
		_tmp33_ = _tmp32_;
		_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) _tmp33_);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_ccode_cast_expression_new (_tmp31_, _tmp35_);
		_tmp37_ = _tmp36_;
		_g_free0 (_tmp35_);
		ccast = _tmp37_;
		_tmp38_ = vala_ccode_constant_new ("NULL");
		cnull = _tmp38_;
		_tmp39_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp40_ = _tmp39_;
		_tmp41_ = ccheck;
		_tmp42_ = ccast;
		_tmp43_ = cnull;
		_tmp44_ = vala_ccode_conditional_expression_new (_tmp41_, (ValaCCodeExpression*) _tmp42_, (ValaCCodeExpression*) _tmp43_);
		_tmp45_ = _tmp44_;
		_tmp46_ = vala_glib_value_new (_tmp40_, (ValaCCodeExpression*) _tmp45_, FALSE);
		_tmp47_ = _tmp46_;
		_vala_ccode_node_unref0 (_tmp45_);
		cast_value = _tmp47_;
		_tmp48_ = vala_cast_expression_get_inner (expr);
		_tmp49_ = _tmp48_;
		_tmp50_ = vala_expression_get_value_type (_tmp49_);
		_tmp51_ = _tmp50_;
		if (vala_ccode_base_module_requires_destroy (_tmp51_)) {
			ValaTargetValue* casted = NULL;
			ValaGLibValue* _tmp52_;
			ValaTargetValue* _tmp53_;
			ValaCCodeFunction* _tmp54_;
			ValaCCodeFunction* _tmp55_;
			ValaTargetValue* _tmp56_;
			ValaCCodeExpression* _tmp57_;
			ValaCCodeConstant* _tmp58_;
			ValaCCodeConstant* _tmp59_;
			ValaCCodeBinaryExpression* _tmp60_;
			ValaCCodeBinaryExpression* _tmp61_;
			ValaCCodeFunction* _tmp62_;
			ValaCCodeFunction* _tmp63_;
			ValaTargetValue* _tmp64_;
			ValaCCodeExpression* _tmp65_;
			ValaCCodeExpression* _tmp66_;
			ValaCCodeFunction* _tmp67_;
			ValaCCodeFunction* _tmp68_;
			ValaTargetValue* _tmp69_;
			ValaGLibValue* _tmp70_;
			ValaGLibValue* _tmp71_;
			_tmp52_ = cast_value;
			_tmp53_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp52_, (ValaCodeNode*) expr, NULL);
			casted = _tmp53_;
			_tmp54_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp55_ = _tmp54_;
			_tmp56_ = casted;
			_tmp57_ = vala_get_cvalue_ (_tmp56_);
			_tmp58_ = vala_ccode_constant_new ("NULL");
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp57_, (ValaCCodeExpression*) _tmp59_);
			_tmp61_ = _tmp60_;
			vala_ccode_function_open_if (_tmp55_, (ValaCCodeExpression*) _tmp61_);
			_vala_ccode_node_unref0 (_tmp61_);
			_vala_ccode_node_unref0 (_tmp59_);
			_tmp62_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp63_ = _tmp62_;
			_tmp64_ = to_cast;
			_tmp65_ = vala_ccode_base_module_destroy_value ((ValaCCodeBaseModule*) self, _tmp64_, FALSE);
			_tmp66_ = _tmp65_;
			vala_ccode_function_add_expression (_tmp63_, _tmp66_);
			_vala_ccode_node_unref0 (_tmp66_);
			_tmp67_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp68_ = _tmp67_;
			vala_ccode_function_close (_tmp68_);
			_tmp69_ = casted;
			_tmp70_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
			_tmp71_ = _tmp70_;
			vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp71_);
			_vala_target_value_unref0 (_tmp71_);
			_vala_target_value_unref0 (casted);
		} else {
			ValaGLibValue* _tmp72_;
			_tmp72_ = cast_value;
			vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp72_);
		}
		_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* _tmp73_;
		ValaExpression* _tmp74_;
		ValaCCodeExpression* _tmp75_;
		ValaDataType* _tmp76_;
		ValaDataType* _tmp77_;
		ValaTypeSymbol* _tmp78_;
		ValaTypeSymbol* _tmp79_;
		ValaCCodeFunctionCall* _tmp80_;
		ValaCCodeFunctionCall* _tmp81_;
		_tmp73_ = vala_cast_expression_get_inner (expr);
		_tmp74_ = _tmp73_;
		_tmp75_ = vala_get_cvalue (_tmp74_);
		_tmp76_ = vala_cast_expression_get_type_reference (expr);
		_tmp77_ = _tmp76_;
		_tmp78_ = vala_data_type_get_type_symbol (_tmp77_);
		_tmp79_ = _tmp78_;
		_tmp80_ = vala_ccode_base_module_generate_instance_cast ((ValaCCodeBaseModule*) self, _tmp75_, _tmp79_);
		_tmp81_ = _tmp80_;
		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp81_);
		_vala_ccode_node_unref0 (_tmp81_);
	}
}

ValaGTypeModule*
vala_gtype_module_construct (GType object_type)
{
	ValaGTypeModule* self = NULL;
	self = (ValaGTypeModule*) vala_gerror_module_construct (object_type);
	return self;
}

ValaGTypeModule*
vala_gtype_module_new (void)
{
	return vala_gtype_module_construct (VALA_TYPE_GTYPE_MODULE);
}

static void
vala_gtype_module_class_init (ValaGTypeModuleClass * klass,
                              gpointer klass_data)
{
	vala_gtype_module_parent_class = g_type_class_peek_parent (klass);
	((ValaCCodeMethodModuleClass *) klass)->generate_parameter = (ValaCCodeParameter* (*) (ValaCCodeMethodModule*, ValaParameter*, ValaCCodeFile*, ValaMap*, ValaMap*)) vala_gtype_module_real_generate_parameter;
	((ValaCCodeBaseModuleClass *) klass)->generate_class_declaration = (void (*) (ValaCCodeBaseModule*, ValaClass*, ValaCCodeFile*)) vala_gtype_module_real_generate_class_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_class_struct_declaration = (void (*) (ValaCCodeBaseModule*, ValaClass*, ValaCCodeFile*)) vala_gtype_module_real_generate_class_struct_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_method_declaration = (gboolean (*) (ValaCCodeBaseModule*, ValaMethod*, ValaCCodeFile*)) vala_gtype_module_real_generate_method_declaration;
	((ValaGTypeModuleClass *) klass)->generate_virtual_method_declaration = (void (*) (ValaGTypeModule*, ValaMethod*, ValaCCodeFile*, ValaCCodeStruct*)) vala_gtype_module_real_generate_virtual_method_declaration;
	((ValaCodeVisitorClass *) klass)->visit_class = (void (*) (ValaCodeVisitor*, ValaClass*)) vala_gtype_module_real_visit_class;
	((ValaGTypeModuleClass *) klass)->generate_class_init = (void (*) (ValaGTypeModule*, ValaClass*)) vala_gtype_module_real_generate_class_init;
	((ValaGTypeModuleClass *) klass)->end_instance_init = (void (*) (ValaGTypeModule*, ValaClass*)) vala_gtype_module_real_end_instance_init;
	((ValaCCodeBaseModuleClass *) klass)->get_param_spec_cexpression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaProperty*)) vala_gtype_module_real_get_param_spec_cexpression;
	((ValaCCodeBaseModuleClass *) klass)->get_param_spec = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaProperty*)) vala_gtype_module_real_get_param_spec;
	((ValaCCodeBaseModuleClass *) klass)->generate_interface_declaration = (void (*) (ValaCCodeBaseModule*, ValaInterface*, ValaCCodeFile*)) vala_gtype_module_real_generate_interface_declaration;
	((ValaCodeVisitorClass *) klass)->visit_interface = (void (*) (ValaCodeVisitor*, ValaInterface*)) vala_gtype_module_real_visit_interface;
	((ValaCodeVisitorClass *) klass)->visit_struct = (void (*) (ValaCodeVisitor*, ValaStruct*)) vala_gtype_module_real_visit_struct;
	((ValaCodeVisitorClass *) klass)->visit_enum = (void (*) (ValaCodeVisitor*, ValaEnum*)) vala_gtype_module_real_visit_enum;
	((ValaCodeVisitorClass *) klass)->visit_error_domain = (void (*) (ValaCodeVisitor*, ValaErrorDomain*)) vala_gtype_module_real_visit_error_domain;
	((ValaCodeVisitorClass *) klass)->visit_method_call = (void (*) (ValaCodeVisitor*, ValaMethodCall*)) vala_gtype_module_real_visit_method_call;
	((ValaCodeVisitorClass *) klass)->visit_property = (void (*) (ValaCodeVisitor*, ValaProperty*)) vala_gtype_module_real_visit_property;
	((ValaCCodeBaseModuleClass *) klass)->create_type_check_statement = (void (*) (ValaCCodeBaseModule*, ValaCodeNode*, ValaDataType*, ValaTypeSymbol*, gboolean, const gchar*)) vala_gtype_module_real_create_type_check_statement;
	((ValaCodeVisitorClass *) klass)->visit_cast_expression = (void (*) (ValaCodeVisitor*, ValaCastExpression*)) vala_gtype_module_real_visit_cast_expression;
}

static void
vala_gtype_module_instance_init (ValaGTypeModule * self,
                                 gpointer klass)
{
}

static GType
vala_gtype_module_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ValaGTypeModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gtype_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGTypeModule), 0, (GInstanceInitFunc) vala_gtype_module_instance_init, NULL };
	GType vala_gtype_module_type_id;
	vala_gtype_module_type_id = g_type_register_static (VALA_TYPE_GERROR_MODULE, "ValaGTypeModule", &g_define_type_info, 0);
	return vala_gtype_module_type_id;
}

GType
vala_gtype_module_get_type (void)
{
	static volatile gsize vala_gtype_module_type_id__once = 0;
	if (g_once_init_enter (&vala_gtype_module_type_id__once)) {
		GType vala_gtype_module_type_id;
		vala_gtype_module_type_id = vala_gtype_module_get_type_once ();
		g_once_init_leave (&vala_gtype_module_type_id__once, vala_gtype_module_type_id);
	}
	return vala_gtype_module_type_id__once;
}

