/* 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>

#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_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _vala_ccode_declarator_suffix_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_declarator_suffix_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_map_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_iterator_unref (var), NULL)))
#define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))

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

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

static void
vala_gtype_module_generate_struct_method_declaration (ValaGTypeModule* self,
                                                      ValaClass* cl,
                                                      ValaMethod* m,
                                                      ValaCCodeStruct* instance_struct,
                                                      ValaCCodeStruct* type_struct,
                                                      ValaCCodeFile* decl_space,
                                                      gboolean* has_struct_member)
{
	gboolean _tmp0_;
	gboolean _tmp1_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != 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);
	_tmp0_ = vala_class_get_is_compact (cl);
	_tmp1_ = _tmp0_;
	if (!_tmp1_) {
		vala_gtype_module_generate_virtual_method_declaration (self, m, decl_space, type_struct);
	} else {
		gboolean _tmp2_ = FALSE;
		gboolean _tmp3_;
		gboolean _tmp4_;
		_tmp3_ = vala_class_get_is_compact (cl);
		_tmp4_ = _tmp3_;
		if (_tmp4_) {
			ValaClass* _tmp5_;
			ValaClass* _tmp6_;
			_tmp5_ = vala_class_get_base_class (cl);
			_tmp6_ = _tmp5_;
			_tmp2_ = _tmp6_ == NULL;
		} else {
			_tmp2_ = FALSE;
		}
		if (_tmp2_) {
			gboolean _tmp7_ = FALSE;
			gboolean _tmp8_;
			gboolean _tmp9_;
			vala_gtype_module_generate_virtual_method_declaration (self, m, decl_space, instance_struct);
			_tmp8_ = vala_method_get_is_abstract (m);
			_tmp9_ = _tmp8_;
			if (_tmp9_) {
				_tmp7_ = TRUE;
			} else {
				gboolean _tmp10_;
				gboolean _tmp11_;
				_tmp10_ = vala_method_get_is_virtual (m);
				_tmp11_ = _tmp10_;
				_tmp7_ = _tmp11_;
			}
			*has_struct_member = (*has_struct_member) | _tmp7_;
		}
	}
}

static void
vala_gtype_module_generate_struct_property_declaration (ValaGTypeModule* self,
                                                        ValaClass* cl,
                                                        ValaProperty* prop,
                                                        ValaCCodeStruct* instance_struct,
                                                        ValaCCodeStruct* type_struct,
                                                        ValaCCodeFile* decl_space,
                                                        gboolean* has_struct_member)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaObjectTypeSymbol* t = NULL;
	ValaSymbol* _tmp7_;
	ValaSymbol* _tmp8_;
	ValaObjectTypeSymbol* _tmp9_;
	ValaObjectType* this_type = NULL;
	ValaObjectTypeSymbol* _tmp10_;
	ValaObjectType* _tmp11_;
	ValaCCodeParameter* cselfparam = NULL;
	ValaObjectType* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	ValaCCodeParameter* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaPropertyAccessor* _tmp17_;
	ValaPropertyAccessor* _tmp18_;
	ValaPropertyAccessor* _tmp92_;
	ValaPropertyAccessor* _tmp93_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (cl != 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_;
	_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
	t = _tmp9_;
	_tmp10_ = t;
	_tmp11_ = vala_object_type_new (_tmp10_);
	this_type = _tmp11_;
	_tmp12_ = this_type;
	_tmp13_ = vala_get_ccode_name ((ValaCodeNode*) _tmp12_);
	_tmp14_ = _tmp13_;
	_tmp15_ = vala_ccode_parameter_new ("self", _tmp14_);
	_tmp16_ = _tmp15_;
	_g_free0 (_tmp14_);
	cselfparam = _tmp16_;
	_tmp17_ = vala_property_get_get_accessor (prop);
	_tmp18_ = _tmp17_;
	if (_tmp18_ != NULL) {
		ValaCCodeFunctionDeclarator* vdeclarator = NULL;
		const gchar* _tmp19_;
		const gchar* _tmp20_;
		gchar* _tmp21_;
		gchar* _tmp22_;
		ValaCCodeFunctionDeclarator* _tmp23_;
		ValaCCodeFunctionDeclarator* _tmp24_;
		ValaCCodeFunctionDeclarator* _tmp25_;
		ValaCCodeParameter* _tmp26_;
		gchar* creturn_type = NULL;
		ValaDataType* _tmp27_;
		ValaDataType* _tmp28_;
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp47_;
		ValaDataType* _tmp48_;
		ValaArrayType* _tmp49_;
		ValaArrayType* _tmp50_;
		ValaCCodeDeclaration* vdecl = NULL;
		const gchar* _tmp81_;
		ValaCCodeDeclaration* _tmp82_;
		ValaCCodeDeclaration* _tmp83_;
		ValaCCodeFunctionDeclarator* _tmp84_;
		ValaCCodeDeclaration* _tmp85_;
		gboolean _tmp86_ = FALSE;
		gboolean _tmp87_;
		gboolean _tmp88_;
		_tmp19_ = vala_symbol_get_name ((ValaSymbol*) prop);
		_tmp20_ = _tmp19_;
		_tmp21_ = g_strdup_printf ("get_%s", _tmp20_);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_ccode_function_declarator_new (_tmp22_);
		_tmp24_ = _tmp23_;
		_g_free0 (_tmp22_);
		vdeclarator = _tmp24_;
		_tmp25_ = vdeclarator;
		_tmp26_ = cselfparam;
		vala_ccode_function_declarator_add_parameter (_tmp25_, _tmp26_);
		_tmp27_ = vala_property_get_property_type (prop);
		_tmp28_ = _tmp27_;
		if (vala_data_type_is_real_non_null_struct_type (_tmp28_)) {
			ValaCCodeParameter* cvalueparam = NULL;
			ValaPropertyAccessor* _tmp29_;
			ValaPropertyAccessor* _tmp30_;
			ValaDataType* _tmp31_;
			ValaDataType* _tmp32_;
			gchar* _tmp33_;
			gchar* _tmp34_;
			gchar* _tmp35_;
			gchar* _tmp36_;
			ValaCCodeParameter* _tmp37_;
			ValaCCodeParameter* _tmp38_;
			ValaCCodeFunctionDeclarator* _tmp39_;
			ValaCCodeParameter* _tmp40_;
			gchar* _tmp41_;
			_tmp29_ = vala_property_get_get_accessor (prop);
			_tmp30_ = _tmp29_;
			_tmp31_ = vala_property_accessor_get_value_type (_tmp30_);
			_tmp32_ = _tmp31_;
			_tmp33_ = vala_get_ccode_name ((ValaCodeNode*) _tmp32_);
			_tmp34_ = _tmp33_;
			_tmp35_ = g_strdup_printf ("%s *", _tmp34_);
			_tmp36_ = _tmp35_;
			_tmp37_ = vala_ccode_parameter_new ("result", _tmp36_);
			_tmp38_ = _tmp37_;
			_g_free0 (_tmp36_);
			_g_free0 (_tmp34_);
			cvalueparam = _tmp38_;
			_tmp39_ = vdeclarator;
			_tmp40_ = cvalueparam;
			vala_ccode_function_declarator_add_parameter (_tmp39_, _tmp40_);
			_tmp41_ = g_strdup ("void");
			_g_free0 (creturn_type);
			creturn_type = _tmp41_;
			_vala_ccode_node_unref0 (cvalueparam);
		} else {
			ValaPropertyAccessor* _tmp42_;
			ValaPropertyAccessor* _tmp43_;
			ValaDataType* _tmp44_;
			ValaDataType* _tmp45_;
			gchar* _tmp46_;
			_tmp42_ = vala_property_get_get_accessor (prop);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_property_accessor_get_value_type (_tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = vala_get_ccode_name ((ValaCodeNode*) _tmp45_);
			_g_free0 (creturn_type);
			creturn_type = _tmp46_;
		}
		_tmp47_ = vala_property_get_property_type (prop);
		_tmp48_ = _tmp47_;
		_tmp49_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp48_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp48_) : NULL);
		array_type = _tmp49_;
		_tmp50_ = array_type;
		if (_tmp50_ != NULL) {
			gchar* length_ctype = NULL;
			ValaArrayType* _tmp51_;
			gchar* _tmp52_;
			gchar* _tmp53_;
			gchar* _tmp54_;
			gchar* _tmp55_;
			_tmp51_ = array_type;
			_tmp52_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp51_);
			_tmp53_ = _tmp52_;
			_tmp54_ = g_strconcat (_tmp53_, "*", NULL);
			_tmp55_ = _tmp54_;
			_g_free0 (_tmp53_);
			length_ctype = _tmp55_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp56_ = FALSE;
					_tmp56_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp58_;
						gint _tmp59_;
						gint _tmp60_;
						ValaCCodeFunctionDeclarator* _tmp61_;
						gchar* _tmp62_;
						gchar* _tmp63_;
						const gchar* _tmp64_;
						ValaCCodeParameter* _tmp65_;
						ValaCCodeParameter* _tmp66_;
						if (!_tmp56_) {
							gint _tmp57_;
							_tmp57_ = dim;
							dim = _tmp57_ + 1;
						}
						_tmp56_ = FALSE;
						_tmp58_ = array_type;
						_tmp59_ = vala_array_type_get_rank (_tmp58_);
						_tmp60_ = _tmp59_;
						if (!(dim <= _tmp60_)) {
							break;
						}
						_tmp61_ = vdeclarator;
						_tmp62_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", dim);
						_tmp63_ = _tmp62_;
						_tmp64_ = length_ctype;
						_tmp65_ = vala_ccode_parameter_new (_tmp63_, _tmp64_);
						_tmp66_ = _tmp65_;
						vala_ccode_function_declarator_add_parameter (_tmp61_, _tmp66_);
						_vala_ccode_node_unref0 (_tmp66_);
						_g_free0 (_tmp63_);
					}
				}
			}
			_g_free0 (length_ctype);
		} else {
			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)) {
				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_;
				_tmp67_ = _tmp75_;
			} else {
				_tmp67_ = FALSE;
			}
			if (_tmp67_) {
				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_ccode_declaration_new (_tmp81_);
		vdecl = _tmp82_;
		_tmp83_ = vdecl;
		_tmp84_ = vdeclarator;
		vala_ccode_declaration_add_declarator (_tmp83_, (ValaCCodeDeclarator*) _tmp84_);
		_tmp85_ = vdecl;
		vala_ccode_struct_add_declaration (type_struct, _tmp85_);
		_tmp87_ = vala_class_get_is_compact (cl);
		_tmp88_ = _tmp87_;
		if (_tmp88_) {
			ValaClass* _tmp89_;
			ValaClass* _tmp90_;
			_tmp89_ = vala_class_get_base_class (cl);
			_tmp90_ = _tmp89_;
			_tmp86_ = _tmp90_ == NULL;
		} else {
			_tmp86_ = FALSE;
		}
		if (_tmp86_) {
			ValaCCodeDeclaration* _tmp91_;
			_tmp91_ = vdecl;
			vala_ccode_struct_add_declaration (instance_struct, _tmp91_);
			*has_struct_member = TRUE;
		}
		_vala_ccode_node_unref0 (vdecl);
		_vala_code_node_unref0 (array_type);
		_g_free0 (creturn_type);
		_vala_ccode_node_unref0 (vdeclarator);
	}
	_tmp92_ = vala_property_get_set_accessor (prop);
	_tmp93_ = _tmp92_;
	if (_tmp93_ != NULL) {
		ValaCCodeParameter* cvalueparam = NULL;
		ValaDataType* _tmp94_;
		ValaDataType* _tmp95_;
		ValaCCodeFunctionDeclarator* vdeclarator = NULL;
		const gchar* _tmp112_;
		const gchar* _tmp113_;
		gchar* _tmp114_;
		gchar* _tmp115_;
		ValaCCodeFunctionDeclarator* _tmp116_;
		ValaCCodeFunctionDeclarator* _tmp117_;
		ValaCCodeFunctionDeclarator* _tmp118_;
		ValaCCodeParameter* _tmp119_;
		ValaCCodeFunctionDeclarator* _tmp120_;
		ValaCCodeParameter* _tmp121_;
		ValaArrayType* array_type = NULL;
		ValaDataType* _tmp122_;
		ValaDataType* _tmp123_;
		ValaArrayType* _tmp124_;
		ValaArrayType* _tmp125_;
		ValaCCodeDeclaration* vdecl = NULL;
		ValaCCodeDeclaration* _tmp153_;
		ValaCCodeDeclaration* _tmp154_;
		ValaCCodeFunctionDeclarator* _tmp155_;
		ValaCCodeDeclaration* _tmp156_;
		gboolean _tmp157_ = FALSE;
		gboolean _tmp158_;
		gboolean _tmp159_;
		_tmp94_ = vala_property_get_property_type (prop);
		_tmp95_ = _tmp94_;
		if (vala_data_type_is_real_non_null_struct_type (_tmp95_)) {
			ValaPropertyAccessor* _tmp96_;
			ValaPropertyAccessor* _tmp97_;
			ValaDataType* _tmp98_;
			ValaDataType* _tmp99_;
			gchar* _tmp100_;
			gchar* _tmp101_;
			gchar* _tmp102_;
			gchar* _tmp103_;
			ValaCCodeParameter* _tmp104_;
			_tmp96_ = vala_property_get_set_accessor (prop);
			_tmp97_ = _tmp96_;
			_tmp98_ = vala_property_accessor_get_value_type (_tmp97_);
			_tmp99_ = _tmp98_;
			_tmp100_ = vala_get_ccode_name ((ValaCodeNode*) _tmp99_);
			_tmp101_ = _tmp100_;
			_tmp102_ = g_strdup_printf ("%s *", _tmp101_);
			_tmp103_ = _tmp102_;
			_tmp104_ = vala_ccode_parameter_new ("value", _tmp103_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp104_;
			_g_free0 (_tmp103_);
			_g_free0 (_tmp101_);
		} else {
			ValaPropertyAccessor* _tmp105_;
			ValaPropertyAccessor* _tmp106_;
			ValaDataType* _tmp107_;
			ValaDataType* _tmp108_;
			gchar* _tmp109_;
			gchar* _tmp110_;
			ValaCCodeParameter* _tmp111_;
			_tmp105_ = vala_property_get_set_accessor (prop);
			_tmp106_ = _tmp105_;
			_tmp107_ = vala_property_accessor_get_value_type (_tmp106_);
			_tmp108_ = _tmp107_;
			_tmp109_ = vala_get_ccode_name ((ValaCodeNode*) _tmp108_);
			_tmp110_ = _tmp109_;
			_tmp111_ = vala_ccode_parameter_new ("value", _tmp110_);
			_vala_ccode_node_unref0 (cvalueparam);
			cvalueparam = _tmp111_;
			_g_free0 (_tmp110_);
		}
		_tmp112_ = vala_symbol_get_name ((ValaSymbol*) prop);
		_tmp113_ = _tmp112_;
		_tmp114_ = g_strdup_printf ("set_%s", _tmp113_);
		_tmp115_ = _tmp114_;
		_tmp116_ = vala_ccode_function_declarator_new (_tmp115_);
		_tmp117_ = _tmp116_;
		_g_free0 (_tmp115_);
		vdeclarator = _tmp117_;
		_tmp118_ = vdeclarator;
		_tmp119_ = cselfparam;
		vala_ccode_function_declarator_add_parameter (_tmp118_, _tmp119_);
		_tmp120_ = vdeclarator;
		_tmp121_ = cvalueparam;
		vala_ccode_function_declarator_add_parameter (_tmp120_, _tmp121_);
		_tmp122_ = vala_property_get_property_type (prop);
		_tmp123_ = _tmp122_;
		_tmp124_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp123_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp123_) : NULL);
		array_type = _tmp124_;
		_tmp125_ = array_type;
		if (_tmp125_ != NULL) {
			gchar* length_ctype = NULL;
			ValaArrayType* _tmp126_;
			gchar* _tmp127_;
			_tmp126_ = array_type;
			_tmp127_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp126_);
			length_ctype = _tmp127_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp128_ = FALSE;
					_tmp128_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp130_;
						gint _tmp131_;
						gint _tmp132_;
						ValaCCodeFunctionDeclarator* _tmp133_;
						gchar* _tmp134_;
						gchar* _tmp135_;
						const gchar* _tmp136_;
						ValaCCodeParameter* _tmp137_;
						ValaCCodeParameter* _tmp138_;
						if (!_tmp128_) {
							gint _tmp129_;
							_tmp129_ = dim;
							dim = _tmp129_ + 1;
						}
						_tmp128_ = FALSE;
						_tmp130_ = array_type;
						_tmp131_ = vala_array_type_get_rank (_tmp130_);
						_tmp132_ = _tmp131_;
						if (!(dim <= _tmp132_)) {
							break;
						}
						_tmp133_ = vdeclarator;
						_tmp134_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "value", dim);
						_tmp135_ = _tmp134_;
						_tmp136_ = length_ctype;
						_tmp137_ = vala_ccode_parameter_new (_tmp135_, _tmp136_);
						_tmp138_ = _tmp137_;
						vala_ccode_function_declarator_add_parameter (_tmp133_, _tmp138_);
						_vala_ccode_node_unref0 (_tmp138_);
						_g_free0 (_tmp135_);
					}
				}
			}
			_g_free0 (length_ctype);
		} else {
			gboolean _tmp139_ = FALSE;
			ValaDataType* _tmp140_;
			ValaDataType* _tmp141_;
			_tmp140_ = vala_property_get_property_type (prop);
			_tmp141_ = _tmp140_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp141_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaDataType* _tmp142_;
				ValaDataType* _tmp143_;
				ValaDelegate* _tmp144_;
				ValaDelegate* _tmp145_;
				gboolean _tmp146_;
				gboolean _tmp147_;
				_tmp142_ = vala_property_get_property_type (prop);
				_tmp143_ = _tmp142_;
				_tmp144_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp143_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				_tmp145_ = _tmp144_;
				_tmp146_ = vala_delegate_get_has_target (_tmp145_);
				_tmp147_ = _tmp146_;
				_tmp139_ = _tmp147_;
			} else {
				_tmp139_ = FALSE;
			}
			if (_tmp139_) {
				ValaCCodeFunctionDeclarator* _tmp148_;
				gchar* _tmp149_;
				gchar* _tmp150_;
				ValaCCodeParameter* _tmp151_;
				ValaCCodeParameter* _tmp152_;
				_tmp148_ = vdeclarator;
				_tmp149_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "value");
				_tmp150_ = _tmp149_;
				_tmp151_ = vala_ccode_parameter_new (_tmp150_, "gpointer");
				_tmp152_ = _tmp151_;
				vala_ccode_function_declarator_add_parameter (_tmp148_, _tmp152_);
				_vala_ccode_node_unref0 (_tmp152_);
				_g_free0 (_tmp150_);
			}
		}
		_tmp153_ = vala_ccode_declaration_new ("void");
		vdecl = _tmp153_;
		_tmp154_ = vdecl;
		_tmp155_ = vdeclarator;
		vala_ccode_declaration_add_declarator (_tmp154_, (ValaCCodeDeclarator*) _tmp155_);
		_tmp156_ = vdecl;
		vala_ccode_struct_add_declaration (type_struct, _tmp156_);
		_tmp158_ = vala_class_get_is_compact (cl);
		_tmp159_ = _tmp158_;
		if (_tmp159_) {
			ValaClass* _tmp160_;
			ValaClass* _tmp161_;
			_tmp160_ = vala_class_get_base_class (cl);
			_tmp161_ = _tmp160_;
			_tmp157_ = _tmp161_ == NULL;
		} else {
			_tmp157_ = FALSE;
		}
		if (_tmp157_) {
			ValaCCodeDeclaration* _tmp162_;
			_tmp162_ = vdecl;
			vala_ccode_struct_add_declaration (instance_struct, _tmp162_);
			*has_struct_member = TRUE;
		}
		_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);
	_vala_code_node_unref0 (t);
}

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

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_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	ValaDataType* _tmp8_;
	ValaDataType* _tmp9_;
	ValaCCodeFunctionDeclarator* vdeclarator = NULL;
	gchar* _tmp11_;
	gchar* _tmp12_;
	ValaCCodeFunctionDeclarator* _tmp13_;
	ValaCCodeFunctionDeclarator* _tmp14_;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp15_;
	GEqualFunc _tmp16_;
	GEqualFunc _tmp17_;
	ValaHashMap* _tmp18_;
	gboolean _tmp19_;
	gboolean _tmp20_;
	ValaVersionAttribute* _tmp31_;
	ValaVersionAttribute* _tmp32_;
	gboolean _tmp33_;
	gboolean _tmp34_;
	ValaHashMap* _tmp39_;
	ValaCCodeFunction* _tmp40_;
	ValaCCodeFunction* _tmp41_;
	ValaCCodeFunctionDeclarator* _tmp42_;
	ValaCCodeDeclaration* vdecl = NULL;
	ValaDataType* _tmp43_;
	gchar* _tmp44_;
	gchar* _tmp45_;
	ValaCCodeDeclaration* _tmp46_;
	ValaCCodeDeclaration* _tmp47_;
	ValaCCodeDeclaration* _tmp48_;
	ValaCCodeFunctionDeclarator* _tmp49_;
	ValaCCodeDeclaration* _tmp50_;
	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_callable_get_return_type ((ValaCallable*) m);
	_tmp6_ = _tmp5_;
	_tmp7_ = _vala_code_node_ref0 (_tmp6_);
	creturn_type = _tmp7_;
	_tmp8_ = vala_callable_get_return_type ((ValaCallable*) m);
	_tmp9_ = _tmp8_;
	if (vala_data_type_is_real_non_null_struct_type (_tmp9_)) {
		ValaVoidType* _tmp10_;
		_tmp10_ = vala_void_type_new (NULL);
		_vala_code_node_unref0 (creturn_type);
		creturn_type = (ValaDataType*) _tmp10_;
	}
	_tmp11_ = vala_get_ccode_vfunc_name (m);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_function_declarator_new (_tmp12_);
	_tmp14_ = _tmp13_;
	_g_free0 (_tmp12_);
	vdeclarator = _tmp14_;
	_tmp15_ = g_direct_hash;
	_tmp16_ = g_direct_equal;
	_tmp17_ = g_direct_equal;
	_tmp18_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp15_, _tmp16_, _tmp17_);
	cparam_map = _tmp18_;
	_tmp19_ = vala_method_get_printf_format (m);
	_tmp20_ = _tmp19_;
	if (_tmp20_) {
		ValaCCodeFunctionDeclarator* _tmp21_;
		ValaCCodeFunctionDeclarator* _tmp22_;
		ValaCCodeModifiers _tmp23_;
		ValaCCodeModifiers _tmp24_;
		_tmp21_ = vdeclarator;
		_tmp22_ = vdeclarator;
		_tmp23_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp22_);
		_tmp24_ = _tmp23_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp22_, _tmp24_ | VALA_CCODE_MODIFIERS_PRINTF);
	} else {
		gboolean _tmp25_;
		gboolean _tmp26_;
		_tmp25_ = vala_method_get_scanf_format (m);
		_tmp26_ = _tmp25_;
		if (_tmp26_) {
			ValaCCodeFunctionDeclarator* _tmp27_;
			ValaCCodeFunctionDeclarator* _tmp28_;
			ValaCCodeModifiers _tmp29_;
			ValaCCodeModifiers _tmp30_;
			_tmp27_ = vdeclarator;
			_tmp28_ = vdeclarator;
			_tmp29_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp28_);
			_tmp30_ = _tmp29_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp28_, _tmp30_ | VALA_CCODE_MODIFIERS_SCANF);
		}
	}
	_tmp31_ = vala_symbol_get_version ((ValaSymbol*) m);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_version_attribute_get_deprecated (_tmp32_);
	_tmp34_ = _tmp33_;
	if (_tmp34_) {
		ValaCCodeFunctionDeclarator* _tmp35_;
		ValaCCodeFunctionDeclarator* _tmp36_;
		ValaCCodeModifiers _tmp37_;
		ValaCCodeModifiers _tmp38_;
		_tmp35_ = vdeclarator;
		_tmp36_ = vdeclarator;
		_tmp37_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp36_);
		_tmp38_ = _tmp37_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp36_, _tmp38_ | VALA_CCODE_MODIFIERS_DEPRECATED);
	}
	_tmp39_ = cparam_map;
	_tmp40_ = vala_ccode_function_new ("fake", "void");
	_tmp41_ = _tmp40_;
	_tmp42_ = vdeclarator;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, m, decl_space, (ValaMap*) _tmp39_, _tmp41_, _tmp42_, NULL, NULL, 3);
	_vala_ccode_node_unref0 (_tmp41_);
	_tmp43_ = creturn_type;
	_tmp44_ = vala_get_ccode_name ((ValaCodeNode*) _tmp43_);
	_tmp45_ = _tmp44_;
	_tmp46_ = vala_ccode_declaration_new (_tmp45_);
	_tmp47_ = _tmp46_;
	_g_free0 (_tmp45_);
	vdecl = _tmp47_;
	_tmp48_ = vdecl;
	_tmp49_ = vdeclarator;
	vala_ccode_declaration_add_declarator (_tmp48_, (ValaCCodeDeclarator*) _tmp49_);
	_tmp50_ = vdecl;
	vala_ccode_struct_add_declaration (type_struct, _tmp50_);
	_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)
{
	g_return_if_fail (self != NULL);
	VALA_GTYPE_MODULE_GET_CLASS (self)->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)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gboolean _tmp4_;
	gboolean is_gtypeinstance = FALSE;
	gboolean _tmp5_;
	gboolean _tmp6_;
	gboolean has_class_locks = FALSE;
	ValaCCodeStruct* instance_priv_struct = NULL;
	gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	ValaCCodeStruct* _tmp11_;
	ValaCCodeStruct* _tmp12_;
	ValaCCodeStruct* type_priv_struct = NULL;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	ValaCCodeStruct* _tmp17_;
	ValaCCodeStruct* _tmp18_;
	g_return_if_fail (self != NULL);
	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 ("%sPrivate", _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_file_add_declaration (decl_space, _tmp3_);
	_g_free0 (_tmp3_);
	_g_free0 (_tmp1_);
	if (_tmp4_) {
		return;
	}
	_tmp5_ = vala_class_get_is_compact (cl);
	_tmp6_ = _tmp5_;
	is_gtypeinstance = !_tmp6_;
	has_class_locks = FALSE;
	_tmp7_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp8_ = _tmp7_;
	_tmp9_ = g_strdup_printf ("_%sPrivate", _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_struct_new (_tmp10_);
	_tmp12_ = _tmp11_;
	_g_free0 (_tmp10_);
	_g_free0 (_tmp8_);
	instance_priv_struct = _tmp12_;
	_tmp13_ = vala_get_ccode_name ((ValaCodeNode*) cl);
	_tmp14_ = _tmp13_;
	_tmp15_ = g_strdup_printf ("_%sClassPrivate", _tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_struct_new (_tmp16_);
	_tmp18_ = _tmp17_;
	_g_free0 (_tmp16_);
	_g_free0 (_tmp14_);
	type_priv_struct = _tmp18_;
	if (is_gtypeinstance) {
		{
			ValaList* _type_param_list = NULL;
			ValaList* _tmp19_;
			gint _type_param_size = 0;
			ValaList* _tmp20_;
			gint _tmp21_;
			gint _tmp22_;
			gint _type_param_index = 0;
			_tmp19_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
			_type_param_list = _tmp19_;
			_tmp20_ = _type_param_list;
			_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
			_tmp22_ = _tmp21_;
			_type_param_size = _tmp22_;
			_type_param_index = -1;
			while (TRUE) {
				ValaTypeParameter* type_param = NULL;
				ValaList* _tmp23_;
				gpointer _tmp24_;
				gchar* func_name = NULL;
				ValaTypeParameter* _tmp25_;
				const gchar* _tmp26_;
				const gchar* _tmp27_;
				gchar* _tmp28_;
				gchar* _tmp29_;
				gchar* _tmp30_;
				ValaCCodeStruct* _tmp31_;
				const gchar* _tmp32_;
				ValaTypeParameter* _tmp33_;
				const gchar* _tmp34_;
				const gchar* _tmp35_;
				gchar* _tmp36_;
				gchar* _tmp37_;
				gchar* _tmp38_;
				ValaCCodeStruct* _tmp39_;
				const gchar* _tmp40_;
				ValaTypeParameter* _tmp41_;
				const gchar* _tmp42_;
				const gchar* _tmp43_;
				gchar* _tmp44_;
				gchar* _tmp45_;
				gchar* _tmp46_;
				ValaCCodeStruct* _tmp47_;
				const gchar* _tmp48_;
				_type_param_index = _type_param_index + 1;
				if (!(_type_param_index < _type_param_size)) {
					break;
				}
				_tmp23_ = _type_param_list;
				_tmp24_ = vala_list_get (_tmp23_, _type_param_index);
				type_param = (ValaTypeParameter*) _tmp24_;
				_tmp25_ = type_param;
				_tmp26_ = vala_symbol_get_name ((ValaSymbol*) _tmp25_);
				_tmp27_ = _tmp26_;
				_tmp28_ = g_utf8_strdown (_tmp27_, (gssize) -1);
				_tmp29_ = _tmp28_;
				_tmp30_ = g_strdup_printf ("%s_type", _tmp29_);
				_g_free0 (func_name);
				func_name = _tmp30_;
				_g_free0 (_tmp29_);
				_tmp31_ = instance_priv_struct;
				_tmp32_ = func_name;
				vala_ccode_struct_add_field (_tmp31_, "GType", _tmp32_, 0, NULL);
				_tmp33_ = type_param;
				_tmp34_ = vala_symbol_get_name ((ValaSymbol*) _tmp33_);
				_tmp35_ = _tmp34_;
				_tmp36_ = g_utf8_strdown (_tmp35_, (gssize) -1);
				_tmp37_ = _tmp36_;
				_tmp38_ = g_strdup_printf ("%s_dup_func", _tmp37_);
				_g_free0 (func_name);
				func_name = _tmp38_;
				_g_free0 (_tmp37_);
				_tmp39_ = instance_priv_struct;
				_tmp40_ = func_name;
				vala_ccode_struct_add_field (_tmp39_, "GBoxedCopyFunc", _tmp40_, 0, NULL);
				_tmp41_ = type_param;
				_tmp42_ = vala_symbol_get_name ((ValaSymbol*) _tmp41_);
				_tmp43_ = _tmp42_;
				_tmp44_ = g_utf8_strdown (_tmp43_, (gssize) -1);
				_tmp45_ = _tmp44_;
				_tmp46_ = g_strdup_printf ("%s_destroy_func", _tmp45_);
				_g_free0 (func_name);
				func_name = _tmp46_;
				_g_free0 (_tmp45_);
				_tmp47_ = instance_priv_struct;
				_tmp48_ = func_name;
				vala_ccode_struct_add_field (_tmp47_, "GDestroyNotify", _tmp48_, 0, NULL);
				_g_free0 (func_name);
				_vala_code_node_unref0 (type_param);
			}
			_vala_iterable_unref0 (_type_param_list);
		}
	}
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp49_;
		gint _f_size = 0;
		ValaList* _tmp50_;
		gint _tmp51_;
		gint _tmp52_;
		gint _f_index = 0;
		_tmp49_ = vala_object_type_symbol_get_fields ((ValaObjectTypeSymbol*) cl);
		_f_list = _tmp49_;
		_tmp50_ = _f_list;
		_tmp51_ = vala_collection_get_size ((ValaCollection*) _tmp50_);
		_tmp52_ = _tmp51_;
		_f_size = _tmp52_;
		_f_index = -1;
		while (TRUE) {
			ValaField* f = NULL;
			ValaList* _tmp53_;
			gpointer _tmp54_;
			ValaCCodeModifiers _tmp55_ = 0U;
			ValaField* _tmp56_;
			gboolean _tmp57_;
			gboolean _tmp58_;
			ValaCCodeModifiers _tmp59_ = 0U;
			ValaField* _tmp60_;
			ValaVersionAttribute* _tmp61_;
			ValaVersionAttribute* _tmp62_;
			gboolean _tmp63_;
			gboolean _tmp64_;
			ValaCCodeModifiers modifiers = 0U;
			ValaField* _tmp65_;
			ValaMemberBinding _tmp66_;
			ValaMemberBinding _tmp67_;
			_f_index = _f_index + 1;
			if (!(_f_index < _f_size)) {
				break;
			}
			_tmp53_ = _f_list;
			_tmp54_ = vala_list_get (_tmp53_, _f_index);
			f = (ValaField*) _tmp54_;
			_tmp56_ = f;
			_tmp57_ = vala_field_get_is_volatile (_tmp56_);
			_tmp58_ = _tmp57_;
			if (_tmp58_) {
				_tmp55_ = VALA_CCODE_MODIFIERS_VOLATILE;
			} else {
				_tmp55_ = 0;
			}
			_tmp60_ = f;
			_tmp61_ = vala_symbol_get_version ((ValaSymbol*) _tmp60_);
			_tmp62_ = _tmp61_;
			_tmp63_ = vala_version_attribute_get_deprecated (_tmp62_);
			_tmp64_ = _tmp63_;
			if (_tmp64_) {
				_tmp59_ = VALA_CCODE_MODIFIERS_DEPRECATED;
			} else {
				_tmp59_ = 0;
			}
			modifiers = _tmp55_ | _tmp59_;
			_tmp65_ = f;
			_tmp66_ = vala_field_get_binding (_tmp65_);
			_tmp67_ = _tmp66_;
			if (_tmp67_ == VALA_MEMBER_BINDING_INSTANCE) {
				ValaField* _tmp68_;
				ValaSymbolAccessibility _tmp69_;
				ValaSymbolAccessibility _tmp70_;
				ValaField* _tmp150_;
				gboolean _tmp151_;
				gboolean _tmp152_;
				_tmp68_ = f;
				_tmp69_ = vala_symbol_get_access ((ValaSymbol*) _tmp68_);
				_tmp70_ = _tmp69_;
				if (_tmp70_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
					ValaField* _tmp71_;
					ValaDataType* _tmp72_;
					ValaDataType* _tmp73_;
					ValaCCodeStruct* _tmp74_;
					ValaField* _tmp75_;
					ValaDataType* _tmp76_;
					ValaDataType* _tmp77_;
					gchar* _tmp78_;
					gchar* _tmp79_;
					ValaField* _tmp80_;
					gchar* _tmp81_;
					gchar* _tmp82_;
					ValaCCodeModifiers _tmp83_;
					ValaField* _tmp84_;
					ValaDataType* _tmp85_;
					ValaDataType* _tmp86_;
					ValaCCodeDeclaratorSuffix* _tmp87_;
					ValaCCodeDeclaratorSuffix* _tmp88_;
					gboolean _tmp89_ = FALSE;
					ValaField* _tmp90_;
					ValaDataType* _tmp91_;
					ValaDataType* _tmp92_;
					_tmp71_ = f;
					_tmp72_ = vala_variable_get_variable_type ((ValaVariable*) _tmp71_);
					_tmp73_ = _tmp72_;
					vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp73_, decl_space);
					_tmp74_ = instance_priv_struct;
					_tmp75_ = f;
					_tmp76_ = vala_variable_get_variable_type ((ValaVariable*) _tmp75_);
					_tmp77_ = _tmp76_;
					_tmp78_ = vala_get_ccode_name ((ValaCodeNode*) _tmp77_);
					_tmp79_ = _tmp78_;
					_tmp80_ = f;
					_tmp81_ = vala_get_ccode_name ((ValaCodeNode*) _tmp80_);
					_tmp82_ = _tmp81_;
					_tmp83_ = modifiers;
					_tmp84_ = f;
					_tmp85_ = vala_variable_get_variable_type ((ValaVariable*) _tmp84_);
					_tmp86_ = _tmp85_;
					_tmp87_ = vala_ccode_base_module_get_ccode_declarator_suffix ((ValaCCodeBaseModule*) self, _tmp86_);
					_tmp88_ = _tmp87_;
					vala_ccode_struct_add_field (_tmp74_, _tmp79_, _tmp82_, _tmp83_, _tmp88_);
					_vala_ccode_declarator_suffix_unref0 (_tmp88_);
					_g_free0 (_tmp82_);
					_g_free0 (_tmp79_);
					_tmp90_ = f;
					_tmp91_ = vala_variable_get_variable_type ((ValaVariable*) _tmp90_);
					_tmp92_ = _tmp91_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp92_, VALA_TYPE_ARRAY_TYPE)) {
						ValaField* _tmp93_;
						_tmp93_ = f;
						_tmp89_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp93_);
					} else {
						_tmp89_ = FALSE;
					}
					if (_tmp89_) {
						ValaArrayType* array_type = NULL;
						ValaField* _tmp94_;
						ValaDataType* _tmp95_;
						ValaDataType* _tmp96_;
						ValaArrayType* _tmp97_;
						ValaArrayType* _tmp98_;
						gboolean _tmp99_;
						gboolean _tmp100_;
						_tmp94_ = f;
						_tmp95_ = vala_variable_get_variable_type ((ValaVariable*) _tmp94_);
						_tmp96_ = _tmp95_;
						_tmp97_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp96_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
						array_type = _tmp97_;
						_tmp98_ = array_type;
						_tmp99_ = vala_array_type_get_fixed_length (_tmp98_);
						_tmp100_ = _tmp99_;
						if (!_tmp100_) {
							gchar* length_ctype = NULL;
							ValaArrayType* _tmp101_;
							gchar* _tmp102_;
							gboolean _tmp113_ = FALSE;
							ValaArrayType* _tmp114_;
							gint _tmp115_;
							gint _tmp116_;
							_tmp101_ = array_type;
							_tmp102_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp101_);
							length_ctype = _tmp102_;
							{
								gint dim = 0;
								dim = 1;
								{
									gboolean _tmp103_ = FALSE;
									_tmp103_ = TRUE;
									while (TRUE) {
										ValaArrayType* _tmp105_;
										gint _tmp106_;
										gint _tmp107_;
										gchar* length_cname = NULL;
										ValaField* _tmp108_;
										gchar* _tmp109_;
										ValaCCodeStruct* _tmp110_;
										const gchar* _tmp111_;
										const gchar* _tmp112_;
										if (!_tmp103_) {
											gint _tmp104_;
											_tmp104_ = dim;
											dim = _tmp104_ + 1;
										}
										_tmp103_ = FALSE;
										_tmp105_ = array_type;
										_tmp106_ = vala_array_type_get_rank (_tmp105_);
										_tmp107_ = _tmp106_;
										if (!(dim <= _tmp107_)) {
											break;
										}
										_tmp108_ = f;
										_tmp109_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) _tmp108_, dim);
										length_cname = _tmp109_;
										_tmp110_ = instance_priv_struct;
										_tmp111_ = length_ctype;
										_tmp112_ = length_cname;
										vala_ccode_struct_add_field (_tmp110_, _tmp111_, _tmp112_, 0, NULL);
										_g_free0 (length_cname);
									}
								}
							}
							_tmp114_ = array_type;
							_tmp115_ = vala_array_type_get_rank (_tmp114_);
							_tmp116_ = _tmp115_;
							if (_tmp116_ == 1) {
								ValaField* _tmp117_;
								_tmp117_ = f;
								_tmp113_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp117_);
							} else {
								_tmp113_ = FALSE;
							}
							if (_tmp113_) {
								ValaCCodeStruct* _tmp118_;
								const gchar* _tmp119_;
								ValaField* _tmp120_;
								gchar* _tmp121_;
								gchar* _tmp122_;
								gchar* _tmp123_;
								gchar* _tmp124_;
								_tmp118_ = instance_priv_struct;
								_tmp119_ = length_ctype;
								_tmp120_ = f;
								_tmp121_ = vala_get_ccode_name ((ValaCodeNode*) _tmp120_);
								_tmp122_ = _tmp121_;
								_tmp123_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp122_);
								_tmp124_ = _tmp123_;
								vala_ccode_struct_add_field (_tmp118_, _tmp119_, _tmp124_, 0, NULL);
								_g_free0 (_tmp124_);
								_g_free0 (_tmp122_);
							}
							_g_free0 (length_ctype);
						}
						_vala_code_node_unref0 (array_type);
					} else {
						ValaField* _tmp125_;
						_tmp125_ = f;
						if (vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp125_)) {
							ValaDelegateType* delegate_type = NULL;
							ValaField* _tmp126_;
							ValaDataType* _tmp127_;
							ValaDataType* _tmp128_;
							ValaDelegateType* _tmp129_;
							ValaDelegateType* _tmp130_;
							ValaDelegate* _tmp131_;
							ValaDelegate* _tmp132_;
							gboolean _tmp133_;
							gboolean _tmp134_;
							_tmp126_ = f;
							_tmp127_ = vala_variable_get_variable_type ((ValaVariable*) _tmp126_);
							_tmp128_ = _tmp127_;
							_tmp129_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp128_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
							delegate_type = _tmp129_;
							_tmp130_ = delegate_type;
							_tmp131_ = vala_delegate_type_get_delegate_symbol (_tmp130_);
							_tmp132_ = _tmp131_;
							_tmp133_ = vala_delegate_get_has_target (_tmp132_);
							_tmp134_ = _tmp133_;
							if (_tmp134_) {
								ValaCCodeStruct* _tmp135_;
								ValaDataType* _tmp136_;
								gchar* _tmp137_;
								gchar* _tmp138_;
								ValaField* _tmp139_;
								gchar* _tmp140_;
								gchar* _tmp141_;
								ValaDelegateType* _tmp142_;
								_tmp135_ = instance_priv_struct;
								_tmp136_ = ((ValaCCodeBaseModule*) self)->delegate_target_type;
								_tmp137_ = vala_get_ccode_name ((ValaCodeNode*) _tmp136_);
								_tmp138_ = _tmp137_;
								_tmp139_ = f;
								_tmp140_ = vala_get_ccode_delegate_target_name ((ValaVariable*) _tmp139_);
								_tmp141_ = _tmp140_;
								vala_ccode_struct_add_field (_tmp135_, _tmp138_, _tmp141_, 0, NULL);
								_g_free0 (_tmp141_);
								_g_free0 (_tmp138_);
								_tmp142_ = delegate_type;
								if (vala_data_type_is_disposable ((ValaDataType*) _tmp142_)) {
									ValaCCodeStruct* _tmp143_;
									ValaDelegateType* _tmp144_;
									gchar* _tmp145_;
									gchar* _tmp146_;
									ValaField* _tmp147_;
									gchar* _tmp148_;
									gchar* _tmp149_;
									_tmp143_ = instance_priv_struct;
									_tmp144_ = ((ValaCCodeBaseModule*) self)->delegate_target_destroy_type;
									_tmp145_ = vala_get_ccode_name ((ValaCodeNode*) _tmp144_);
									_tmp146_ = _tmp145_;
									_tmp147_ = f;
									_tmp148_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) _tmp147_);
									_tmp149_ = _tmp148_;
									vala_ccode_struct_add_field (_tmp143_, _tmp146_, _tmp149_, 0, NULL);
									_g_free0 (_tmp149_);
									_g_free0 (_tmp146_);
								}
							}
							_vala_code_node_unref0 (delegate_type);
						}
					}
				}
				_tmp150_ = f;
				_tmp151_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp150_);
				_tmp152_ = _tmp151_;
				if (_tmp152_) {
					ValaCCodeStruct* _tmp153_;
					ValaStruct* _tmp154_;
					gchar* _tmp155_;
					gchar* _tmp156_;
					ValaField* _tmp157_;
					gchar* _tmp158_;
					gchar* _tmp159_;
					gchar* _tmp160_;
					gchar* _tmp161_;
					vala_class_set_has_private_fields (cl, TRUE);
					_tmp153_ = instance_priv_struct;
					_tmp154_ = ((ValaCCodeBaseModule*) self)->mutex_type;
					_tmp155_ = vala_get_ccode_name ((ValaCodeNode*) _tmp154_);
					_tmp156_ = _tmp155_;
					_tmp157_ = f;
					_tmp158_ = vala_get_ccode_name ((ValaCodeNode*) _tmp157_);
					_tmp159_ = _tmp158_;
					_tmp160_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp159_);
					_tmp161_ = _tmp160_;
					vala_ccode_struct_add_field (_tmp153_, _tmp156_, _tmp161_, 0, NULL);
					_g_free0 (_tmp161_);
					_g_free0 (_tmp159_);
					_g_free0 (_tmp156_);
				}
			} else {
				ValaField* _tmp162_;
				ValaMemberBinding _tmp163_;
				ValaMemberBinding _tmp164_;
				_tmp162_ = f;
				_tmp163_ = vala_field_get_binding (_tmp162_);
				_tmp164_ = _tmp163_;
				if (_tmp164_ == VALA_MEMBER_BINDING_CLASS) {
					ValaField* _tmp165_;
					ValaSymbolAccessibility _tmp166_;
					ValaSymbolAccessibility _tmp167_;
					ValaField* _tmp178_;
					gboolean _tmp179_;
					gboolean _tmp180_;
					_tmp165_ = f;
					_tmp166_ = vala_symbol_get_access ((ValaSymbol*) _tmp165_);
					_tmp167_ = _tmp166_;
					if (_tmp167_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
						ValaCCodeStruct* _tmp168_;
						ValaField* _tmp169_;
						ValaDataType* _tmp170_;
						ValaDataType* _tmp171_;
						gchar* _tmp172_;
						gchar* _tmp173_;
						ValaField* _tmp174_;
						gchar* _tmp175_;
						gchar* _tmp176_;
						ValaCCodeModifiers _tmp177_;
						_tmp168_ = type_priv_struct;
						_tmp169_ = f;
						_tmp170_ = vala_variable_get_variable_type ((ValaVariable*) _tmp169_);
						_tmp171_ = _tmp170_;
						_tmp172_ = vala_get_ccode_name ((ValaCodeNode*) _tmp171_);
						_tmp173_ = _tmp172_;
						_tmp174_ = f;
						_tmp175_ = vala_get_ccode_name ((ValaCodeNode*) _tmp174_);
						_tmp176_ = _tmp175_;
						_tmp177_ = modifiers;
						vala_ccode_struct_add_field (_tmp168_, _tmp173_, _tmp176_, _tmp177_, NULL);
						_g_free0 (_tmp176_);
						_g_free0 (_tmp173_);
					}
					_tmp178_ = f;
					_tmp179_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp178_);
					_tmp180_ = _tmp179_;
					if (_tmp180_) {
						ValaCCodeStruct* _tmp181_;
						ValaStruct* _tmp182_;
						gchar* _tmp183_;
						gchar* _tmp184_;
						ValaField* _tmp185_;
						gchar* _tmp186_;
						gchar* _tmp187_;
						gchar* _tmp188_;
						gchar* _tmp189_;
						has_class_locks = TRUE;
						_tmp181_ = type_priv_struct;
						_tmp182_ = ((ValaCCodeBaseModule*) self)->mutex_type;
						_tmp183_ = vala_get_ccode_name ((ValaCodeNode*) _tmp182_);
						_tmp184_ = _tmp183_;
						_tmp185_ = f;
						_tmp186_ = vala_get_ccode_name ((ValaCodeNode*) _tmp185_);
						_tmp187_ = _tmp186_;
						_tmp188_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp187_);
						_tmp189_ = _tmp188_;
						vala_ccode_struct_add_field (_tmp181_, _tmp184_, _tmp189_, 0, NULL);
						_g_free0 (_tmp189_);
						_g_free0 (_tmp187_);
						_g_free0 (_tmp184_);
					}
				}
			}
			_vala_code_node_unref0 (f);
		}
		_vala_iterable_unref0 (_f_list);
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp190_;
		gint _prop_size = 0;
		ValaList* _tmp191_;
		gint _tmp192_;
		gint _tmp193_;
		gint _prop_index = 0;
		_tmp190_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
		_prop_list = _tmp190_;
		_tmp191_ = _prop_list;
		_tmp192_ = vala_collection_get_size ((ValaCollection*) _tmp191_);
		_tmp193_ = _tmp192_;
		_prop_size = _tmp193_;
		_prop_index = -1;
		while (TRUE) {
			ValaProperty* prop = NULL;
			ValaList* _tmp194_;
			gpointer _tmp195_;
			ValaProperty* _tmp196_;
			ValaMemberBinding _tmp197_;
			ValaMemberBinding _tmp198_;
			_prop_index = _prop_index + 1;
			if (!(_prop_index < _prop_size)) {
				break;
			}
			_tmp194_ = _prop_list;
			_tmp195_ = vala_list_get (_tmp194_, _prop_index);
			prop = (ValaProperty*) _tmp195_;
			_tmp196_ = prop;
			_tmp197_ = vala_property_get_binding (_tmp196_);
			_tmp198_ = _tmp197_;
			if (_tmp198_ == VALA_MEMBER_BINDING_INSTANCE) {
				ValaProperty* _tmp199_;
				gboolean _tmp200_;
				gboolean _tmp201_;
				_tmp199_ = prop;
				_tmp200_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp199_);
				_tmp201_ = _tmp200_;
				if (_tmp201_) {
					ValaCCodeStruct* _tmp202_;
					ValaStruct* _tmp203_;
					gchar* _tmp204_;
					gchar* _tmp205_;
					ValaProperty* _tmp206_;
					gchar* _tmp207_;
					gchar* _tmp208_;
					gchar* _tmp209_;
					gchar* _tmp210_;
					vala_class_set_has_private_fields (cl, TRUE);
					_tmp202_ = instance_priv_struct;
					_tmp203_ = ((ValaCCodeBaseModule*) self)->mutex_type;
					_tmp204_ = vala_get_ccode_name ((ValaCodeNode*) _tmp203_);
					_tmp205_ = _tmp204_;
					_tmp206_ = prop;
					_tmp207_ = vala_get_ccode_name ((ValaCodeNode*) _tmp206_);
					_tmp208_ = _tmp207_;
					_tmp209_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp208_);
					_tmp210_ = _tmp209_;
					vala_ccode_struct_add_field (_tmp202_, _tmp205_, _tmp210_, 0, NULL);
					_g_free0 (_tmp210_);
					_g_free0 (_tmp208_);
					_g_free0 (_tmp205_);
				}
			} else {
				ValaProperty* _tmp211_;
				ValaMemberBinding _tmp212_;
				ValaMemberBinding _tmp213_;
				_tmp211_ = prop;
				_tmp212_ = vala_property_get_binding (_tmp211_);
				_tmp213_ = _tmp212_;
				if (_tmp213_ == VALA_MEMBER_BINDING_CLASS) {
					ValaProperty* _tmp214_;
					gboolean _tmp215_;
					gboolean _tmp216_;
					_tmp214_ = prop;
					_tmp215_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp214_);
					_tmp216_ = _tmp215_;
					if (_tmp216_) {
						ValaCCodeStruct* _tmp217_;
						ValaStruct* _tmp218_;
						gchar* _tmp219_;
						gchar* _tmp220_;
						ValaProperty* _tmp221_;
						gchar* _tmp222_;
						gchar* _tmp223_;
						gchar* _tmp224_;
						gchar* _tmp225_;
						has_class_locks = TRUE;
						_tmp217_ = type_priv_struct;
						_tmp218_ = ((ValaCCodeBaseModule*) self)->mutex_type;
						_tmp219_ = vala_get_ccode_name ((ValaCodeNode*) _tmp218_);
						_tmp220_ = _tmp219_;
						_tmp221_ = prop;
						_tmp222_ = vala_get_ccode_name ((ValaCodeNode*) _tmp221_);
						_tmp223_ = _tmp222_;
						_tmp224_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp223_);
						_tmp225_ = _tmp224_;
						vala_ccode_struct_add_field (_tmp217_, _tmp220_, _tmp225_, 0, NULL);
						_g_free0 (_tmp225_);
						_g_free0 (_tmp223_);
						_g_free0 (_tmp220_);
					}
				}
			}
			_vala_code_node_unref0 (prop);
		}
		_vala_iterable_unref0 (_prop_list);
	}
	if (is_gtypeinstance) {
		gboolean _tmp226_ = FALSE;
		gboolean _tmp227_;
		gboolean _tmp228_;
		gboolean _tmp242_ = FALSE;
		gboolean _tmp243_;
		gboolean _tmp244_;
		gboolean _tmp298_ = FALSE;
		gboolean _tmp299_;
		gboolean _tmp300_;
		_tmp227_ = vala_class_get_has_class_private_fields (cl);
		_tmp228_ = _tmp227_;
		if (_tmp228_) {
			_tmp226_ = TRUE;
		} else {
			_tmp226_ = has_class_locks;
		}
		if (_tmp226_) {
			ValaCCodeStruct* _tmp229_;
			const gchar* _tmp230_;
			const gchar* _tmp231_;
			gchar* _tmp232_;
			gchar* _tmp233_;
			gchar* _tmp234_;
			gchar* _tmp235_;
			gchar* _tmp236_;
			gchar* _tmp237_;
			ValaCCodeVariableDeclarator* _tmp238_;
			ValaCCodeVariableDeclarator* _tmp239_;
			ValaCCodeTypeDefinition* _tmp240_;
			ValaCCodeTypeDefinition* _tmp241_;
			_tmp229_ = type_priv_struct;
			_tmp230_ = vala_ccode_struct_get_name (_tmp229_);
			_tmp231_ = _tmp230_;
			_tmp232_ = g_strdup_printf ("struct %s", _tmp231_);
			_tmp233_ = _tmp232_;
			_tmp234_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp235_ = _tmp234_;
			_tmp236_ = g_strdup_printf ("%sClassPrivate", _tmp235_);
			_tmp237_ = _tmp236_;
			_tmp238_ = vala_ccode_variable_declarator_new (_tmp237_, NULL, NULL);
			_tmp239_ = _tmp238_;
			_tmp240_ = vala_ccode_type_definition_new (_tmp233_, (ValaCCodeDeclarator*) _tmp239_);
			_tmp241_ = _tmp240_;
			vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp241_);
			_vala_ccode_node_unref0 (_tmp241_);
			_vala_ccode_node_unref0 (_tmp239_);
			_g_free0 (_tmp237_);
			_g_free0 (_tmp235_);
			_g_free0 (_tmp233_);
		}
		_tmp243_ = vala_class_get_has_private_fields (cl);
		_tmp244_ = _tmp243_;
		if (_tmp244_) {
			_tmp242_ = TRUE;
		} else {
			_tmp242_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) cl);
		}
		if (_tmp242_) {
			ValaCCodeStruct* _tmp245_;
			ValaCCodeDeclaration* parent_decl = NULL;
			ValaCCodeDeclaration* _tmp246_;
			ValaCCodeVariableDeclarator* parent_var_decl = NULL;
			gchar* _tmp247_;
			gchar* _tmp248_;
			gchar* _tmp249_;
			gchar* _tmp250_;
			ValaCCodeVariableDeclarator* _tmp251_;
			ValaCCodeVariableDeclarator* _tmp252_;
			ValaCCodeDeclaration* _tmp253_;
			ValaCCodeVariableDeclarator* _tmp254_;
			ValaCCodeDeclaration* _tmp255_;
			ValaCCodeFile* _tmp256_;
			ValaCCodeDeclaration* _tmp257_;
			ValaCCodeFunction* function = NULL;
			gchar* _tmp258_;
			gchar* _tmp259_;
			gchar* _tmp260_;
			gchar* _tmp261_;
			ValaCCodeFunction* _tmp262_;
			ValaCCodeFunction* _tmp263_;
			ValaCCodeFunction* _tmp264_;
			ValaCCodeFunction* _tmp265_;
			gchar* _tmp266_;
			gchar* _tmp267_;
			gchar* _tmp268_;
			gchar* _tmp269_;
			ValaCCodeParameter* _tmp270_;
			ValaCCodeParameter* _tmp271_;
			ValaCCodeFunction* _tmp272_;
			ValaCCodeFunction* _tmp273_;
			ValaCCodeBlock* _tmp274_;
			ValaCCodeBlock* _tmp275_;
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeIdentifier* _tmp276_;
			ValaCCodeIdentifier* _tmp277_;
			ValaCCodeFunctionCall* _tmp278_;
			ValaCCodeFunctionCall* _tmp279_;
			ValaCCodeFunctionCall* _tmp280_;
			ValaCCodeIdentifier* _tmp281_;
			ValaCCodeIdentifier* _tmp282_;
			ValaCCodeFunctionCall* _tmp283_;
			gchar* _tmp284_;
			gchar* _tmp285_;
			gchar* _tmp286_;
			gchar* _tmp287_;
			ValaCCodeIdentifier* _tmp288_;
			ValaCCodeIdentifier* _tmp289_;
			ValaCCodeFunction* _tmp290_;
			ValaCCodeBlock* _tmp291_;
			ValaCCodeBlock* _tmp292_;
			ValaCCodeFunctionCall* _tmp293_;
			ValaCCodeReturnStatement* _tmp294_;
			ValaCCodeReturnStatement* _tmp295_;
			ValaCCodeFile* _tmp296_;
			ValaCCodeFunction* _tmp297_;
			_tmp245_ = instance_priv_struct;
			vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp245_);
			_tmp246_ = vala_ccode_declaration_new ("gint");
			parent_decl = _tmp246_;
			_tmp247_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp248_ = _tmp247_;
			_tmp249_ = g_strdup_printf ("%s_private_offset", _tmp248_);
			_tmp250_ = _tmp249_;
			_tmp251_ = vala_ccode_variable_declarator_new (_tmp250_, NULL, NULL);
			_tmp252_ = _tmp251_;
			_g_free0 (_tmp250_);
			_g_free0 (_tmp248_);
			parent_var_decl = _tmp252_;
			_tmp253_ = parent_decl;
			_tmp254_ = parent_var_decl;
			vala_ccode_declaration_add_declarator (_tmp253_, (ValaCCodeDeclarator*) _tmp254_);
			_tmp255_ = parent_decl;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp255_, VALA_CCODE_MODIFIERS_STATIC);
			_tmp256_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp257_ = parent_decl;
			vala_ccode_file_add_type_member_declaration (_tmp256_, (ValaCCodeNode*) _tmp257_);
			_tmp258_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
			_tmp259_ = _tmp258_;
			_tmp260_ = g_strdup_printf ("%s_get_instance_private", _tmp259_);
			_tmp261_ = _tmp260_;
			_tmp262_ = vala_ccode_function_new (_tmp261_, "gpointer");
			_tmp263_ = _tmp262_;
			_g_free0 (_tmp261_);
			_g_free0 (_tmp259_);
			function = _tmp263_;
			_tmp264_ = function;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp264_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
			_tmp265_ = function;
			_tmp266_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp267_ = _tmp266_;
			_tmp268_ = g_strdup_printf ("%s*", _tmp267_);
			_tmp269_ = _tmp268_;
			_tmp270_ = vala_ccode_parameter_new ("self", _tmp269_);
			_tmp271_ = _tmp270_;
			vala_ccode_function_add_parameter (_tmp265_, _tmp271_);
			_vala_ccode_node_unref0 (_tmp271_);
			_g_free0 (_tmp269_);
			_g_free0 (_tmp267_);
			_tmp272_ = function;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp272_);
			_tmp273_ = function;
			_tmp274_ = vala_ccode_block_new ();
			_tmp275_ = _tmp274_;
			vala_ccode_function_set_block (_tmp273_, _tmp275_);
			_vala_ccode_node_unref0 (_tmp275_);
			_tmp276_ = vala_ccode_identifier_new ("G_STRUCT_MEMBER_P");
			_tmp277_ = _tmp276_;
			_tmp278_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp277_);
			_tmp279_ = _tmp278_;
			_vala_ccode_node_unref0 (_tmp277_);
			ccall = _tmp279_;
			_tmp280_ = ccall;
			_tmp281_ = vala_ccode_identifier_new ("self");
			_tmp282_ = _tmp281_;
			vala_ccode_function_call_add_argument (_tmp280_, (ValaCCodeExpression*) _tmp282_);
			_vala_ccode_node_unref0 (_tmp282_);
			_tmp283_ = ccall;
			_tmp284_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp285_ = _tmp284_;
			_tmp286_ = g_strdup_printf ("%s_private_offset", _tmp285_);
			_tmp287_ = _tmp286_;
			_tmp288_ = vala_ccode_identifier_new (_tmp287_);
			_tmp289_ = _tmp288_;
			vala_ccode_function_call_add_argument (_tmp283_, (ValaCCodeExpression*) _tmp289_);
			_vala_ccode_node_unref0 (_tmp289_);
			_g_free0 (_tmp287_);
			_g_free0 (_tmp285_);
			_tmp290_ = function;
			_tmp291_ = vala_ccode_function_get_block (_tmp290_);
			_tmp292_ = _tmp291_;
			_tmp293_ = ccall;
			_tmp294_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp293_);
			_tmp295_ = _tmp294_;
			vala_ccode_block_add_statement (_tmp292_, (ValaCCodeNode*) _tmp295_);
			_vala_ccode_node_unref0 (_tmp295_);
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp296_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp297_ = function;
			vala_ccode_file_add_function (_tmp296_, _tmp297_);
			_vala_ccode_node_unref0 (ccall);
			_vala_ccode_node_unref0 (function);
			_vala_ccode_node_unref0 (parent_var_decl);
			_vala_ccode_node_unref0 (parent_decl);
		}
		_tmp299_ = vala_class_get_has_class_private_fields (cl);
		_tmp300_ = _tmp299_;
		if (_tmp300_) {
			_tmp298_ = TRUE;
		} else {
			_tmp298_ = has_class_locks;
		}
		if (_tmp298_) {
			ValaCCodeStruct* _tmp301_;
			gchar* macro = NULL;
			gchar* _tmp302_;
			gchar* _tmp303_;
			gchar* _tmp304_;
			gchar* _tmp305_;
			gchar* _tmp306_;
			gchar* _tmp307_;
			gchar* _tmp308_;
			gchar* _tmp309_;
			gchar* _tmp310_;
			gchar* _tmp311_;
			const gchar* _tmp312_;
			ValaCCodeMacroReplacement* _tmp313_;
			ValaCCodeMacroReplacement* _tmp314_;
			_tmp301_ = type_priv_struct;
			vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp301_);
			_tmp302_ = vala_get_ccode_type_id ((ValaCodeNode*) cl);
			_tmp303_ = _tmp302_;
			_tmp304_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp305_ = _tmp304_;
			_tmp306_ = g_strdup_printf ("(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sClassPrivate))", _tmp303_, _tmp305_);
			_tmp307_ = _tmp306_;
			_g_free0 (_tmp305_);
			_g_free0 (_tmp303_);
			macro = _tmp307_;
			_tmp308_ = vala_get_ccode_class_get_private_function (cl);
			_tmp309_ = _tmp308_;
			_tmp310_ = g_strdup_printf ("%s(klass)", _tmp309_);
			_tmp311_ = _tmp310_;
			_tmp312_ = macro;
			_tmp313_ = vala_ccode_macro_replacement_new (_tmp311_, _tmp312_);
			_tmp314_ = _tmp313_;
			vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp314_);
			_vala_ccode_node_unref0 (_tmp314_);
			_g_free0 (_tmp311_);
			_g_free0 (_tmp309_);
			_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* _tmp40_;
	ValaCCodeEnum* _tmp41_;
	gchar* _tmp42_;
	gchar* _tmp43_;
	gchar* _tmp44_;
	gchar* _tmp45_;
	ValaCCodeEnumValue* _tmp46_;
	ValaCCodeEnumValue* _tmp47_;
	ValaCCodeEnum* _tmp48_;
	ValaCCodeBaseModuleEmitContext* _tmp49_;
	ValaCCodeBaseModuleEmitContext* _tmp50_;
	ValaCCodeBaseModuleEmitContext* _tmp51_;
	ValaCCodeBaseModuleEmitContext* _tmp52_;
	ValaCCodeBaseModuleEmitContext* _tmp53_;
	ValaCCodeBaseModuleEmitContext* _tmp54_;
	ValaCCodeFile* _tmp55_;
	ValaCCodeFile* _tmp56_;
	gchar* last_prop = NULL;
	gchar* _tmp57_;
	gchar* _tmp58_;
	gchar* _tmp59_;
	gchar* _tmp60_;
	ValaCCodeStruct* _tmp360_;
	ValaCCodeStruct* _tmp361_;
	ValaCCodeEnum* _tmp362_;
	ValaCCodeEnum* _tmp363_;
	ValaCCodeEnum* _tmp364_;
	ValaCCodeEnum* _tmp365_;
	ValaCCodeBaseModuleEmitContext* _tmp366_;
	ValaCCodeBaseModuleEmitContext* _tmp367_;
	ValaCCodeBaseModuleEmitContext* _tmp368_;
	ValaCCodeBaseModuleEmitContext* _tmp369_;
	ValaCCodeBaseModuleEmitContext* _tmp370_;
	ValaCCodeBaseModuleEmitContext* _tmp371_;
	ValaCCodeBaseModuleEmitContext* _tmp372_;
	ValaCCodeBaseModuleEmitContext* _tmp373_;
	ValaCCodeBaseModuleEmitContext* _tmp374_;
	ValaCCodeBaseModuleEmitContext* _tmp375_;
	ValaCCodeBaseModuleEmitContext* _tmp376_;
	ValaCCodeBaseModuleEmitContext* _tmp377_;
	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_;
		gchar* _tmp38_;
		gchar* _tmp39_;
		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_;
		_tmp38_ = g_strdup_printf ("Class name `%s' is too short", _tmp37_);
		_tmp39_ = _tmp38_;
		vala_report_error (_tmp35_, _tmp39_);
		_g_free0 (_tmp39_);
		_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;
	}
	_tmp40_ = vala_ccode_enum_new (NULL);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->prop_enum);
	((ValaCCodeBaseModule*) self)->prop_enum = _tmp40_;
	_tmp41_ = ((ValaCCodeBaseModule*) self)->prop_enum;
	_tmp42_ = vala_get_ccode_upper_case_name ((ValaSymbol*) cl, NULL);
	_tmp43_ = _tmp42_;
	_tmp44_ = g_strdup_printf ("%s_0_PROPERTY", _tmp43_);
	_tmp45_ = _tmp44_;
	_tmp46_ = vala_ccode_enum_value_new (_tmp45_, NULL);
	_tmp47_ = _tmp46_;
	vala_ccode_enum_add_value (_tmp41_, _tmp47_);
	_vala_ccode_node_unref0 (_tmp47_);
	_g_free0 (_tmp45_);
	_g_free0 (_tmp43_);
	_tmp48_ = vala_ccode_enum_new (NULL);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp48_;
	_tmp49_ = 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 = _tmp49_;
	_tmp50_ = 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 = _tmp50_;
	_tmp51_ = 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 = _tmp51_;
	_tmp52_ = 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 = _tmp52_;
	_tmp53_ = 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 = _tmp53_;
	_tmp54_ = 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 = _tmp54_;
	_tmp55_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, cl, _tmp55_);
	_tmp56_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_gtype_module_generate_class_private_declaration (self, cl, _tmp56_);
	_tmp57_ = vala_get_ccode_upper_case_name ((ValaSymbol*) cl, NULL);
	_tmp58_ = _tmp57_;
	_tmp59_ = g_strdup_printf ("%s_NUM_PROPERTIES", _tmp58_);
	_tmp60_ = _tmp59_;
	_g_free0 (_tmp58_);
	last_prop = _tmp60_;
	if (is_gobject) {
		ValaCCodeFile* _tmp61_;
		ValaCCodeEnum* _tmp62_;
		ValaCCodeDeclaration* prop_array_decl = NULL;
		ValaCCodeDeclaration* _tmp63_;
		ValaCCodeDeclaration* _tmp64_;
		ValaCCodeDeclaration* _tmp65_;
		ValaCCodeModifiers _tmp66_;
		ValaCCodeModifiers _tmp67_;
		ValaCCodeDeclaration* _tmp68_;
		gchar* _tmp69_;
		gchar* _tmp70_;
		gchar* _tmp71_;
		gchar* _tmp72_;
		const gchar* _tmp73_;
		ValaCCodeIdentifier* _tmp74_;
		ValaCCodeIdentifier* _tmp75_;
		ValaCCodeDeclaratorSuffix* _tmp76_;
		ValaCCodeDeclaratorSuffix* _tmp77_;
		ValaCCodeVariableDeclarator* _tmp78_;
		ValaCCodeVariableDeclarator* _tmp79_;
		ValaCCodeFile* _tmp80_;
		ValaCCodeDeclaration* _tmp81_;
		_tmp61_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp62_ = ((ValaCCodeBaseModule*) self)->prop_enum;
		vala_ccode_file_add_type_declaration (_tmp61_, (ValaCCodeNode*) _tmp62_);
		_tmp63_ = vala_ccode_declaration_new ("GParamSpec*");
		prop_array_decl = _tmp63_;
		_tmp64_ = prop_array_decl;
		_tmp65_ = prop_array_decl;
		_tmp66_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp65_);
		_tmp67_ = _tmp66_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp65_, _tmp67_ | VALA_CCODE_MODIFIERS_STATIC);
		_tmp68_ = prop_array_decl;
		_tmp69_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
		_tmp70_ = _tmp69_;
		_tmp71_ = g_strdup_printf ("%s_properties", _tmp70_);
		_tmp72_ = _tmp71_;
		_tmp73_ = last_prop;
		_tmp74_ = vala_ccode_identifier_new (_tmp73_);
		_tmp75_ = _tmp74_;
		_tmp76_ = vala_ccode_declarator_suffix_new_with_array ((ValaCCodeExpression*) _tmp75_);
		_tmp77_ = _tmp76_;
		_tmp78_ = vala_ccode_variable_declarator_new (_tmp72_, NULL, _tmp77_);
		_tmp79_ = _tmp78_;
		vala_ccode_declaration_add_declarator (_tmp68_, (ValaCCodeDeclarator*) _tmp79_);
		_vala_ccode_node_unref0 (_tmp79_);
		_vala_ccode_declarator_suffix_unref0 (_tmp77_);
		_vala_ccode_node_unref0 (_tmp75_);
		_g_free0 (_tmp72_);
		_g_free0 (_tmp70_);
		_tmp80_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp81_ = prop_array_decl;
		vala_ccode_file_add_type_declaration (_tmp80_, (ValaCCodeNode*) _tmp81_);
		_vala_ccode_node_unref0 (prop_array_decl);
	}
	if (!vala_symbol_is_internal_symbol ((ValaSymbol*) cl)) {
		ValaCCodeFile* _tmp82_;
		_tmp82_ = ((ValaCCodeBaseModule*) self)->header_file;
		vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, cl, _tmp82_);
	}
	if (!vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
		ValaCCodeFile* _tmp83_;
		_tmp83_ = ((ValaCCodeBaseModule*) self)->internal_header_file;
		vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, cl, _tmp83_);
	}
	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 _tmp84_ = FALSE;
		gboolean _tmp85_ = FALSE;
		gboolean _tmp86_;
		gboolean _tmp87_;
		_tmp86_ = vala_class_get_is_compact (cl);
		_tmp87_ = _tmp86_;
		if (_tmp87_) {
			_tmp85_ = TRUE;
		} else {
			ValaClass* _tmp88_;
			ValaClass* _tmp89_;
			_tmp88_ = vala_class_get_base_class (cl);
			_tmp89_ = _tmp88_;
			_tmp85_ = _tmp89_ == NULL;
		}
		if (_tmp85_) {
			_tmp84_ = TRUE;
		} else {
			ValaClass* _tmp90_;
			ValaClass* _tmp91_;
			ValaClass* _tmp92_;
			_tmp90_ = vala_class_get_base_class (cl);
			_tmp91_ = _tmp90_;
			_tmp92_ = ((ValaCCodeBaseModule*) self)->gsource_type;
			_tmp84_ = _tmp91_ == _tmp92_;
		}
		if (_tmp84_) {
			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* _tmp139_;
		ValaList* _tmp140_;
		gint _tmp141_;
		gint _tmp142_;
		gboolean _tmp143_;
		ValaConstructor* _tmp175_;
		ValaConstructor* _tmp176_;
		ValaDestructor* _tmp177_;
		ValaDestructor* _tmp178_;
		ValaDestructor* _tmp179_;
		ValaDestructor* _tmp180_;
		gboolean _tmp193_ = FALSE;
		gboolean _tmp194_;
		gboolean _tmp195_;
		ValaComment* _tmp205_;
		ValaComment* _tmp206_;
		ValaClassRegisterFunction* type_fun = NULL;
		ValaClassRegisterFunction* _tmp214_;
		ValaClassRegisterFunction* _tmp215_;
		ValaCodeContext* _tmp216_;
		ValaCodeContext* _tmp217_;
		ValaCCodeFile* _tmp218_;
		ValaClassRegisterFunction* _tmp219_;
		ValaCCodeFragment* _tmp220_;
		ValaCCodeFragment* _tmp221_;
		ValaCCodeFile* _tmp222_;
		ValaClassRegisterFunction* _tmp223_;
		ValaCCodeFragment* _tmp224_;
		ValaCCodeFragment* _tmp225_;
		if (is_fundamental) {
			ValaSymbol* _tmp93_;
			ValaSymbol* _tmp94_;
			gchar* _tmp95_;
			gchar* _tmp96_;
			const gchar* _tmp97_;
			const gchar* _tmp98_;
			gchar* _tmp99_;
			gchar* _tmp100_;
			ValaCCodeStruct* _tmp101_;
			ValaCCodeStruct* _tmp102_;
			ValaCCodeFile* _tmp103_;
			ValaCCodeStruct* _tmp104_;
			ValaCCodeFile* _tmp105_;
			ValaCCodeStruct* _tmp106_;
			const gchar* _tmp107_;
			const gchar* _tmp108_;
			gchar* _tmp109_;
			gchar* _tmp110_;
			ValaSymbol* _tmp111_;
			ValaSymbol* _tmp112_;
			gchar* _tmp113_;
			gchar* _tmp114_;
			const gchar* _tmp115_;
			const gchar* _tmp116_;
			gchar* _tmp117_;
			gchar* _tmp118_;
			ValaCCodeVariableDeclarator* _tmp119_;
			ValaCCodeVariableDeclarator* _tmp120_;
			ValaCCodeTypeDefinition* _tmp121_;
			ValaCCodeTypeDefinition* _tmp122_;
			ValaCCodeAssignment* ref_count = NULL;
			ValaCCodeIdentifier* _tmp123_;
			ValaCCodeIdentifier* _tmp124_;
			ValaCCodeMemberAccess* _tmp125_;
			ValaCCodeMemberAccess* _tmp126_;
			ValaCCodeConstant* _tmp127_;
			ValaCCodeConstant* _tmp128_;
			ValaCCodeAssignment* _tmp129_;
			ValaCCodeAssignment* _tmp130_;
			ValaCCodeBaseModuleEmitContext* _tmp131_;
			ValaCCodeFunction* _tmp132_;
			ValaCCodeFunction* _tmp133_;
			ValaCCodeAssignment* _tmp134_;
			_tmp93_ = vala_symbol_get_parent_symbol ((ValaSymbol*) cl);
			_tmp94_ = _tmp93_;
			_tmp95_ = vala_get_ccode_prefix (_tmp94_);
			_tmp96_ = _tmp95_;
			_tmp97_ = vala_symbol_get_name ((ValaSymbol*) cl);
			_tmp98_ = _tmp97_;
			_tmp99_ = g_strdup_printf ("_%sParamSpec%s", _tmp96_, _tmp98_);
			_tmp100_ = _tmp99_;
			_tmp101_ = vala_ccode_struct_new (_tmp100_);
			_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->param_spec_struct);
			((ValaCCodeBaseModule*) self)->param_spec_struct = _tmp101_;
			_g_free0 (_tmp100_);
			_g_free0 (_tmp96_);
			_tmp102_ = ((ValaCCodeBaseModule*) self)->param_spec_struct;
			vala_ccode_struct_add_field (_tmp102_, "GParamSpec", "parent_instance", 0, NULL);
			_tmp103_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp104_ = ((ValaCCodeBaseModule*) self)->param_spec_struct;
			vala_ccode_file_add_type_definition (_tmp103_, (ValaCCodeNode*) _tmp104_);
			_tmp105_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp106_ = ((ValaCCodeBaseModule*) self)->param_spec_struct;
			_tmp107_ = vala_ccode_struct_get_name (_tmp106_);
			_tmp108_ = _tmp107_;
			_tmp109_ = g_strdup_printf ("struct %s", _tmp108_);
			_tmp110_ = _tmp109_;
			_tmp111_ = vala_symbol_get_parent_symbol ((ValaSymbol*) cl);
			_tmp112_ = _tmp111_;
			_tmp113_ = vala_get_ccode_prefix (_tmp112_);
			_tmp114_ = _tmp113_;
			_tmp115_ = vala_symbol_get_name ((ValaSymbol*) cl);
			_tmp116_ = _tmp115_;
			_tmp117_ = g_strdup_printf ("%sParamSpec%s", _tmp114_, _tmp116_);
			_tmp118_ = _tmp117_;
			_tmp119_ = vala_ccode_variable_declarator_new (_tmp118_, NULL, NULL);
			_tmp120_ = _tmp119_;
			_tmp121_ = vala_ccode_type_definition_new (_tmp110_, (ValaCCodeDeclarator*) _tmp120_);
			_tmp122_ = _tmp121_;
			vala_ccode_file_add_type_declaration (_tmp105_, (ValaCCodeNode*) _tmp122_);
			_vala_ccode_node_unref0 (_tmp122_);
			_vala_ccode_node_unref0 (_tmp120_);
			_g_free0 (_tmp118_);
			_g_free0 (_tmp114_);
			_g_free0 (_tmp110_);
			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);
			_tmp123_ = vala_ccode_identifier_new ("self");
			_tmp124_ = _tmp123_;
			_tmp125_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp124_, "ref_count");
			_tmp126_ = _tmp125_;
			_tmp127_ = vala_ccode_constant_new ("1");
			_tmp128_ = _tmp127_;
			_tmp129_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp126_, (ValaCCodeExpression*) _tmp128_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
			_tmp130_ = _tmp129_;
			_vala_ccode_node_unref0 (_tmp128_);
			_vala_ccode_node_unref0 (_tmp126_);
			_vala_ccode_node_unref0 (_tmp124_);
			ref_count = _tmp130_;
			_tmp131_ = ((ValaCCodeBaseModule*) self)->instance_init_context;
			vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp131_);
			_tmp132_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp133_ = _tmp132_;
			_tmp134_ = ref_count;
			vala_ccode_function_add_expression (_tmp133_, (ValaCCodeExpression*) _tmp134_);
			vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
			_vala_ccode_node_unref0 (ref_count);
		}
		if (is_gobject) {
			ValaCCodeEnum* _tmp135_;
			const gchar* _tmp136_;
			ValaCCodeEnumValue* _tmp137_;
			ValaCCodeEnumValue* _tmp138_;
			_tmp135_ = ((ValaCCodeBaseModule*) self)->prop_enum;
			_tmp136_ = last_prop;
			_tmp137_ = vala_ccode_enum_value_new (_tmp136_, NULL);
			_tmp138_ = _tmp137_;
			vala_ccode_enum_add_value (_tmp135_, _tmp138_);
			_vala_ccode_node_unref0 (_tmp138_);
		}
		_tmp139_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
		_tmp140_ = _tmp139_;
		_tmp141_ = vala_collection_get_size ((ValaCollection*) _tmp140_);
		_tmp142_ = _tmp141_;
		_tmp143_ = _tmp142_ > 0;
		_vala_iterable_unref0 (_tmp140_);
		if (_tmp143_) {
			gchar* last_signal = NULL;
			gchar* _tmp144_;
			gchar* _tmp145_;
			gchar* _tmp146_;
			gchar* _tmp147_;
			ValaCCodeEnum* _tmp148_;
			const gchar* _tmp149_;
			ValaCCodeEnumValue* _tmp150_;
			ValaCCodeEnumValue* _tmp151_;
			ValaCCodeFile* _tmp152_;
			ValaCCodeEnum* _tmp153_;
			ValaCCodeDeclaration* signal_array_decl = NULL;
			ValaCCodeDeclaration* _tmp154_;
			ValaCCodeDeclaration* _tmp155_;
			ValaCCodeDeclaration* _tmp156_;
			ValaCCodeModifiers _tmp157_;
			ValaCCodeModifiers _tmp158_;
			ValaCCodeDeclaration* _tmp159_;
			gchar* _tmp160_;
			gchar* _tmp161_;
			gchar* _tmp162_;
			gchar* _tmp163_;
			ValaCCodeConstant* _tmp164_;
			ValaCCodeConstant* _tmp165_;
			const gchar* _tmp166_;
			ValaCCodeIdentifier* _tmp167_;
			ValaCCodeIdentifier* _tmp168_;
			ValaCCodeDeclaratorSuffix* _tmp169_;
			ValaCCodeDeclaratorSuffix* _tmp170_;
			ValaCCodeVariableDeclarator* _tmp171_;
			ValaCCodeVariableDeclarator* _tmp172_;
			ValaCCodeFile* _tmp173_;
			ValaCCodeDeclaration* _tmp174_;
			_tmp144_ = vala_get_ccode_upper_case_name ((ValaSymbol*) cl, NULL);
			_tmp145_ = _tmp144_;
			_tmp146_ = g_strdup_printf ("%s_NUM_SIGNALS", _tmp145_);
			_tmp147_ = _tmp146_;
			_g_free0 (_tmp145_);
			last_signal = _tmp147_;
			_tmp148_ = ((ValaCCodeBaseModule*) self)->signal_enum;
			_tmp149_ = last_signal;
			_tmp150_ = vala_ccode_enum_value_new (_tmp149_, NULL);
			_tmp151_ = _tmp150_;
			vala_ccode_enum_add_value (_tmp148_, _tmp151_);
			_vala_ccode_node_unref0 (_tmp151_);
			_tmp152_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp153_ = ((ValaCCodeBaseModule*) self)->signal_enum;
			vala_ccode_file_add_type_declaration (_tmp152_, (ValaCCodeNode*) _tmp153_);
			_tmp154_ = vala_ccode_declaration_new ("guint");
			signal_array_decl = _tmp154_;
			_tmp155_ = signal_array_decl;
			_tmp156_ = signal_array_decl;
			_tmp157_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp156_);
			_tmp158_ = _tmp157_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp156_, _tmp158_ | VALA_CCODE_MODIFIERS_STATIC);
			_tmp159_ = signal_array_decl;
			_tmp160_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
			_tmp161_ = _tmp160_;
			_tmp162_ = g_strdup_printf ("%s_signals", _tmp161_);
			_tmp163_ = _tmp162_;
			_tmp164_ = vala_ccode_constant_new ("{0}");
			_tmp165_ = _tmp164_;
			_tmp166_ = last_signal;
			_tmp167_ = vala_ccode_identifier_new (_tmp166_);
			_tmp168_ = _tmp167_;
			_tmp169_ = vala_ccode_declarator_suffix_new_with_array ((ValaCCodeExpression*) _tmp168_);
			_tmp170_ = _tmp169_;
			_tmp171_ = vala_ccode_variable_declarator_new (_tmp163_, (ValaCCodeExpression*) _tmp165_, _tmp170_);
			_tmp172_ = _tmp171_;
			vala_ccode_declaration_add_declarator (_tmp159_, (ValaCCodeDeclarator*) _tmp172_);
			_vala_ccode_node_unref0 (_tmp172_);
			_vala_ccode_declarator_suffix_unref0 (_tmp170_);
			_vala_ccode_node_unref0 (_tmp168_);
			_vala_ccode_node_unref0 (_tmp165_);
			_g_free0 (_tmp163_);
			_g_free0 (_tmp161_);
			_tmp173_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp174_ = signal_array_decl;
			vala_ccode_file_add_type_declaration (_tmp173_, (ValaCCodeNode*) _tmp174_);
			_vala_ccode_node_unref0 (signal_array_decl);
			_g_free0 (last_signal);
		}
		_tmp175_ = vala_class_get_class_constructor (cl);
		_tmp176_ = _tmp175_;
		if (_tmp176_ != NULL) {
			vala_gtype_module_add_base_init_function (self, cl);
		}
		vala_gtype_module_add_class_init_function (self, cl);
		_tmp177_ = vala_class_get_class_destructor (cl);
		_tmp178_ = _tmp177_;
		if (_tmp178_ != NULL) {
			vala_gtype_module_add_base_finalize_function (self, cl);
		}
		_tmp179_ = vala_class_get_static_destructor (cl);
		_tmp180_ = _tmp179_;
		if (_tmp180_ != NULL) {
			vala_gtype_module_add_class_finalize_function (self, cl);
		}
		{
			ValaList* _base_type_list = NULL;
			ValaList* _tmp181_;
			gint _base_type_size = 0;
			ValaList* _tmp182_;
			gint _tmp183_;
			gint _tmp184_;
			gint _base_type_index = 0;
			_tmp181_ = vala_class_get_base_types (cl);
			_base_type_list = _tmp181_;
			_tmp182_ = _base_type_list;
			_tmp183_ = vala_collection_get_size ((ValaCollection*) _tmp182_);
			_tmp184_ = _tmp183_;
			_base_type_size = _tmp184_;
			_base_type_index = -1;
			while (TRUE) {
				ValaDataType* base_type = NULL;
				ValaList* _tmp185_;
				gpointer _tmp186_;
				ValaDataType* _tmp187_;
				ValaTypeSymbol* _tmp188_;
				ValaTypeSymbol* _tmp189_;
				_base_type_index = _base_type_index + 1;
				if (!(_base_type_index < _base_type_size)) {
					break;
				}
				_tmp185_ = _base_type_list;
				_tmp186_ = vala_list_get (_tmp185_, _base_type_index);
				base_type = (ValaDataType*) _tmp186_;
				_tmp187_ = base_type;
				_tmp188_ = vala_data_type_get_data_type (_tmp187_);
				_tmp189_ = _tmp188_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, VALA_TYPE_INTERFACE)) {
					ValaDataType* _tmp190_;
					ValaTypeSymbol* _tmp191_;
					ValaTypeSymbol* _tmp192_;
					_tmp190_ = base_type;
					_tmp191_ = vala_data_type_get_data_type (_tmp190_);
					_tmp192_ = _tmp191_;
					vala_gtype_module_add_interface_init_function (self, cl, G_TYPE_CHECK_INSTANCE_CAST (_tmp192_, VALA_TYPE_INTERFACE, ValaInterface));
				}
				_vala_code_node_unref0 (base_type);
			}
			_vala_iterable_unref0 (_base_type_list);
		}
		vala_gtype_module_add_instance_init_function (self, cl);
		_tmp194_ = vala_class_get_is_compact (cl);
		_tmp195_ = _tmp194_;
		if (!_tmp195_) {
			gboolean _tmp196_ = FALSE;
			gboolean _tmp197_ = FALSE;
			ValaList* _tmp198_;
			ValaList* _tmp199_;
			gint _tmp200_;
			gint _tmp201_;
			gboolean _tmp202_;
			_tmp198_ = vala_object_type_symbol_get_fields ((ValaObjectTypeSymbol*) cl);
			_tmp199_ = _tmp198_;
			_tmp200_ = vala_collection_get_size ((ValaCollection*) _tmp199_);
			_tmp201_ = _tmp200_;
			_tmp202_ = _tmp201_ > 0;
			_vala_iterable_unref0 (_tmp199_);
			if (_tmp202_) {
				_tmp197_ = TRUE;
			} else {
				ValaDestructor* _tmp203_;
				ValaDestructor* _tmp204_;
				_tmp203_ = vala_class_get_destructor (cl);
				_tmp204_ = _tmp203_;
				_tmp197_ = _tmp204_ != NULL;
			}
			if (_tmp197_) {
				_tmp196_ = TRUE;
			} else {
				_tmp196_ = vala_class_is_fundamental (cl);
			}
			_tmp193_ = _tmp196_;
		} else {
			_tmp193_ = FALSE;
		}
		if (_tmp193_) {
			vala_gtype_module_add_finalize_function (self, cl);
		}
		_tmp205_ = vala_symbol_get_comment ((ValaSymbol*) cl);
		_tmp206_ = _tmp205_;
		if (_tmp206_ != NULL) {
			ValaCCodeFile* _tmp207_;
			ValaComment* _tmp208_;
			ValaComment* _tmp209_;
			const gchar* _tmp210_;
			const gchar* _tmp211_;
			ValaCCodeComment* _tmp212_;
			ValaCCodeComment* _tmp213_;
			_tmp207_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp208_ = vala_symbol_get_comment ((ValaSymbol*) cl);
			_tmp209_ = _tmp208_;
			_tmp210_ = vala_comment_get_content (_tmp209_);
			_tmp211_ = _tmp210_;
			_tmp212_ = vala_ccode_comment_new (_tmp211_);
			_tmp213_ = _tmp212_;
			vala_ccode_file_add_type_member_definition (_tmp207_, (ValaCCodeNode*) _tmp213_);
			_vala_ccode_node_unref0 (_tmp213_);
		}
		_tmp214_ = vala_class_register_function_new (cl);
		type_fun = _tmp214_;
		_tmp215_ = type_fun;
		_tmp216_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp217_ = _tmp216_;
		vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp215_, _tmp217_, ((ValaCCodeBaseModule*) self)->in_plugin, FALSE);
		_tmp218_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp219_ = type_fun;
		_tmp220_ = vala_typeregister_function_get_source_declaration ((ValaTypeRegisterFunction*) _tmp219_);
		_tmp221_ = _tmp220_;
		vala_ccode_file_add_type_member_declaration (_tmp218_, (ValaCCodeNode*) _tmp221_);
		_vala_ccode_node_unref0 (_tmp221_);
		_tmp222_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp223_ = type_fun;
		_tmp224_ = vala_typeregister_function_get_definition ((ValaTypeRegisterFunction*) _tmp223_);
		_tmp225_ = _tmp224_;
		vala_ccode_file_add_type_member_definition (_tmp222_, (ValaCCodeNode*) _tmp225_);
		_vala_ccode_node_unref0 (_tmp225_);
		if (is_fundamental) {
			ValaCCodeMemberAccess* ref_count = NULL;
			ValaCCodeIdentifier* _tmp226_;
			ValaCCodeIdentifier* _tmp227_;
			ValaCCodeMemberAccess* _tmp228_;
			ValaCCodeMemberAccess* _tmp229_;
			ValaCCodeFunction* ref_fun = NULL;
			gchar* _tmp230_;
			gchar* _tmp231_;
			ValaCCodeFunction* _tmp232_;
			ValaCCodeFunction* _tmp233_;
			ValaCCodeFunction* _tmp234_;
			ValaCCodeParameter* _tmp235_;
			ValaCCodeParameter* _tmp236_;
			ValaCCodeFunction* _tmp244_;
			ValaCCodeFunction* _tmp245_;
			ValaCCodeFunction* _tmp246_;
			gchar* _tmp247_;
			gchar* _tmp248_;
			gchar* _tmp249_;
			gchar* _tmp250_;
			ValaCCodeIdentifier* _tmp251_;
			ValaCCodeIdentifier* _tmp252_;
			ValaCCodeVariableDeclarator* _tmp253_;
			ValaCCodeVariableDeclarator* _tmp254_;
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeIdentifier* _tmp255_;
			ValaCCodeIdentifier* _tmp256_;
			ValaCCodeFunctionCall* _tmp257_;
			ValaCCodeFunctionCall* _tmp258_;
			ValaCCodeFunctionCall* _tmp259_;
			ValaCCodeMemberAccess* _tmp260_;
			ValaCCodeUnaryExpression* _tmp261_;
			ValaCCodeUnaryExpression* _tmp262_;
			ValaCCodeFunction* _tmp263_;
			ValaCCodeFunction* _tmp264_;
			ValaCCodeFunctionCall* _tmp265_;
			ValaCCodeFunction* _tmp266_;
			ValaCCodeFunction* _tmp267_;
			ValaCCodeIdentifier* _tmp268_;
			ValaCCodeIdentifier* _tmp269_;
			ValaCCodeFile* _tmp270_;
			ValaCCodeFunction* _tmp271_;
			ValaCCodeFunction* unref_fun = NULL;
			gchar* _tmp272_;
			gchar* _tmp273_;
			ValaCCodeFunction* _tmp274_;
			ValaCCodeFunction* _tmp275_;
			ValaCCodeFunction* _tmp276_;
			ValaCCodeParameter* _tmp277_;
			ValaCCodeParameter* _tmp278_;
			ValaCCodeFunction* _tmp286_;
			ValaCCodeFunction* _tmp287_;
			ValaCCodeFunction* _tmp288_;
			gchar* _tmp289_;
			gchar* _tmp290_;
			gchar* _tmp291_;
			gchar* _tmp292_;
			ValaCCodeIdentifier* _tmp293_;
			ValaCCodeIdentifier* _tmp294_;
			ValaCCodeVariableDeclarator* _tmp295_;
			ValaCCodeVariableDeclarator* _tmp296_;
			ValaCCodeIdentifier* _tmp297_;
			ValaCCodeIdentifier* _tmp298_;
			ValaCCodeFunctionCall* _tmp299_;
			ValaCCodeFunctionCall* _tmp300_;
			ValaCCodeMemberAccess* _tmp301_;
			ValaCCodeUnaryExpression* _tmp302_;
			ValaCCodeUnaryExpression* _tmp303_;
			ValaCCodeFunction* _tmp304_;
			ValaCCodeFunction* _tmp305_;
			ValaCCodeFunctionCall* _tmp306_;
			ValaCCodeFunctionCall* get_class = NULL;
			gchar* _tmp307_;
			gchar* _tmp308_;
			ValaCCodeIdentifier* _tmp309_;
			ValaCCodeIdentifier* _tmp310_;
			ValaCCodeFunctionCall* _tmp311_;
			ValaCCodeFunctionCall* _tmp312_;
			ValaCCodeFunctionCall* _tmp313_;
			ValaCCodeIdentifier* _tmp314_;
			ValaCCodeIdentifier* _tmp315_;
			ValaCCodeFunctionCall* ccast = NULL;
			gchar* _tmp316_;
			gchar* _tmp317_;
			ValaCCodeIdentifier* _tmp318_;
			ValaCCodeIdentifier* _tmp319_;
			ValaCCodeFunctionCall* _tmp320_;
			ValaCCodeFunctionCall* _tmp321_;
			ValaCCodeFunctionCall* _tmp322_;
			ValaCCodeIdentifier* _tmp323_;
			ValaCCodeIdentifier* _tmp324_;
			ValaCCodeFunctionCall* _tmp325_;
			ValaCCodeMemberAccess* _tmp326_;
			ValaCCodeMemberAccess* _tmp327_;
			ValaCCodeFunctionCall* _tmp328_;
			ValaCCodeFunctionCall* _tmp329_;
			ValaCCodeIdentifier* _tmp330_;
			ValaCCodeIdentifier* _tmp331_;
			ValaCCodeFunction* _tmp332_;
			ValaCCodeFunction* _tmp333_;
			ValaCCodeFunctionCall* _tmp334_;
			ValaCCodeFunctionCall* free = NULL;
			ValaCCodeIdentifier* _tmp335_;
			ValaCCodeIdentifier* _tmp336_;
			ValaCCodeFunctionCall* _tmp337_;
			ValaCCodeFunctionCall* _tmp338_;
			ValaCCodeFunctionCall* _tmp339_;
			ValaCCodeIdentifier* _tmp340_;
			ValaCCodeIdentifier* _tmp341_;
			ValaCCodeCastExpression* _tmp342_;
			ValaCCodeCastExpression* _tmp343_;
			ValaCCodeFunction* _tmp344_;
			ValaCCodeFunction* _tmp345_;
			ValaCCodeFunctionCall* _tmp346_;
			ValaCCodeFunction* _tmp347_;
			ValaCCodeFunction* _tmp348_;
			ValaCCodeFile* _tmp349_;
			ValaCCodeFunction* _tmp350_;
			_tmp226_ = vala_ccode_identifier_new ("self");
			_tmp227_ = _tmp226_;
			_tmp228_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp227_, "ref_count");
			_tmp229_ = _tmp228_;
			_vala_ccode_node_unref0 (_tmp227_);
			ref_count = _tmp229_;
			_tmp230_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
			_tmp231_ = _tmp230_;
			_tmp232_ = vala_ccode_function_new (_tmp231_, "gpointer");
			_tmp233_ = _tmp232_;
			_g_free0 (_tmp231_);
			ref_fun = _tmp233_;
			_tmp234_ = ref_fun;
			_tmp235_ = vala_ccode_parameter_new ("instance", "gpointer");
			_tmp236_ = _tmp235_;
			vala_ccode_function_add_parameter (_tmp234_, _tmp236_);
			_vala_ccode_node_unref0 (_tmp236_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp237_;
				_tmp237_ = ref_fun;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp237_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp238_ = FALSE;
				ValaCodeContext* _tmp239_;
				ValaCodeContext* _tmp240_;
				gboolean _tmp241_;
				gboolean _tmp242_;
				_tmp239_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp240_ = _tmp239_;
				_tmp241_ = vala_code_context_get_hide_internal (_tmp240_);
				_tmp242_ = _tmp241_;
				if (_tmp242_) {
					_tmp238_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp238_ = FALSE;
				}
				if (_tmp238_) {
					ValaCCodeFunction* _tmp243_;
					_tmp243_ = ref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp243_, VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp244_ = ref_fun;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp244_);
			_tmp245_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp246_ = _tmp245_;
			_tmp247_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp248_ = _tmp247_;
			_tmp249_ = g_strdup_printf ("%s *", _tmp248_);
			_tmp250_ = _tmp249_;
			_tmp251_ = vala_ccode_identifier_new ("instance");
			_tmp252_ = _tmp251_;
			_tmp253_ = vala_ccode_variable_declarator_new ("self", (ValaCCodeExpression*) _tmp252_, NULL);
			_tmp254_ = _tmp253_;
			vala_ccode_function_add_declaration (_tmp246_, _tmp250_, (ValaCCodeDeclarator*) _tmp254_, 0);
			_vala_ccode_node_unref0 (_tmp254_);
			_vala_ccode_node_unref0 (_tmp252_);
			_g_free0 (_tmp250_);
			_g_free0 (_tmp248_);
			_tmp255_ = vala_ccode_identifier_new ("g_atomic_int_inc");
			_tmp256_ = _tmp255_;
			_tmp257_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp256_);
			_tmp258_ = _tmp257_;
			_vala_ccode_node_unref0 (_tmp256_);
			ccall = _tmp258_;
			_tmp259_ = ccall;
			_tmp260_ = ref_count;
			_tmp261_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp260_);
			_tmp262_ = _tmp261_;
			vala_ccode_function_call_add_argument (_tmp259_, (ValaCCodeExpression*) _tmp262_);
			_vala_ccode_node_unref0 (_tmp262_);
			_tmp263_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp264_ = _tmp263_;
			_tmp265_ = ccall;
			vala_ccode_function_add_expression (_tmp264_, (ValaCCodeExpression*) _tmp265_);
			_tmp266_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp267_ = _tmp266_;
			_tmp268_ = vala_ccode_identifier_new ("instance");
			_tmp269_ = _tmp268_;
			vala_ccode_function_add_return (_tmp267_, (ValaCCodeExpression*) _tmp269_);
			_vala_ccode_node_unref0 (_tmp269_);
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp270_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp271_ = ref_fun;
			vala_ccode_file_add_function (_tmp270_, _tmp271_);
			_tmp272_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
			_tmp273_ = _tmp272_;
			_tmp274_ = vala_ccode_function_new (_tmp273_, "void");
			_tmp275_ = _tmp274_;
			_g_free0 (_tmp273_);
			unref_fun = _tmp275_;
			_tmp276_ = unref_fun;
			_tmp277_ = vala_ccode_parameter_new ("instance", "gpointer");
			_tmp278_ = _tmp277_;
			vala_ccode_function_add_parameter (_tmp276_, _tmp278_);
			_vala_ccode_node_unref0 (_tmp278_);
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp279_;
				_tmp279_ = unref_fun;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp279_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp280_ = FALSE;
				ValaCodeContext* _tmp281_;
				ValaCodeContext* _tmp282_;
				gboolean _tmp283_;
				gboolean _tmp284_;
				_tmp281_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp282_ = _tmp281_;
				_tmp283_ = vala_code_context_get_hide_internal (_tmp282_);
				_tmp284_ = _tmp283_;
				if (_tmp284_) {
					_tmp280_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp280_ = FALSE;
				}
				if (_tmp280_) {
					ValaCCodeFunction* _tmp285_;
					_tmp285_ = unref_fun;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp285_, VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp286_ = unref_fun;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp286_);
			_tmp287_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp288_ = _tmp287_;
			_tmp289_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp290_ = _tmp289_;
			_tmp291_ = g_strdup_printf ("%s *", _tmp290_);
			_tmp292_ = _tmp291_;
			_tmp293_ = vala_ccode_identifier_new ("instance");
			_tmp294_ = _tmp293_;
			_tmp295_ = vala_ccode_variable_declarator_new ("self", (ValaCCodeExpression*) _tmp294_, NULL);
			_tmp296_ = _tmp295_;
			vala_ccode_function_add_declaration (_tmp288_, _tmp292_, (ValaCCodeDeclarator*) _tmp296_, 0);
			_vala_ccode_node_unref0 (_tmp296_);
			_vala_ccode_node_unref0 (_tmp294_);
			_g_free0 (_tmp292_);
			_g_free0 (_tmp290_);
			_tmp297_ = vala_ccode_identifier_new ("g_atomic_int_dec_and_test");
			_tmp298_ = _tmp297_;
			_tmp299_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp298_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp299_;
			_vala_ccode_node_unref0 (_tmp298_);
			_tmp300_ = ccall;
			_tmp301_ = ref_count;
			_tmp302_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp301_);
			_tmp303_ = _tmp302_;
			vala_ccode_function_call_add_argument (_tmp300_, (ValaCCodeExpression*) _tmp303_);
			_vala_ccode_node_unref0 (_tmp303_);
			_tmp304_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp305_ = _tmp304_;
			_tmp306_ = ccall;
			vala_ccode_function_open_if (_tmp305_, (ValaCCodeExpression*) _tmp306_);
			_tmp307_ = vala_get_ccode_class_get_function (cl);
			_tmp308_ = _tmp307_;
			_tmp309_ = vala_ccode_identifier_new (_tmp308_);
			_tmp310_ = _tmp309_;
			_tmp311_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp310_);
			_tmp312_ = _tmp311_;
			_vala_ccode_node_unref0 (_tmp310_);
			_g_free0 (_tmp308_);
			get_class = _tmp312_;
			_tmp313_ = get_class;
			_tmp314_ = vala_ccode_identifier_new ("self");
			_tmp315_ = _tmp314_;
			vala_ccode_function_call_add_argument (_tmp313_, (ValaCCodeExpression*) _tmp315_);
			_vala_ccode_node_unref0 (_tmp315_);
			_tmp316_ = vala_get_ccode_class_get_function (cl);
			_tmp317_ = _tmp316_;
			_tmp318_ = vala_ccode_identifier_new (_tmp317_);
			_tmp319_ = _tmp318_;
			_tmp320_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp319_);
			_tmp321_ = _tmp320_;
			_vala_ccode_node_unref0 (_tmp319_);
			_g_free0 (_tmp317_);
			ccast = _tmp321_;
			_tmp322_ = ccast;
			_tmp323_ = vala_ccode_identifier_new ("self");
			_tmp324_ = _tmp323_;
			vala_ccode_function_call_add_argument (_tmp322_, (ValaCCodeExpression*) _tmp324_);
			_vala_ccode_node_unref0 (_tmp324_);
			_tmp325_ = ccast;
			_tmp326_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp325_, "finalize");
			_tmp327_ = _tmp326_;
			_tmp328_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp327_);
			_vala_ccode_node_unref0 (ccall);
			ccall = _tmp328_;
			_vala_ccode_node_unref0 (_tmp327_);
			_tmp329_ = ccall;
			_tmp330_ = vala_ccode_identifier_new ("self");
			_tmp331_ = _tmp330_;
			vala_ccode_function_call_add_argument (_tmp329_, (ValaCCodeExpression*) _tmp331_);
			_vala_ccode_node_unref0 (_tmp331_);
			_tmp332_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp333_ = _tmp332_;
			_tmp334_ = ccall;
			vala_ccode_function_add_expression (_tmp333_, (ValaCCodeExpression*) _tmp334_);
			_tmp335_ = vala_ccode_identifier_new ("g_type_free_instance");
			_tmp336_ = _tmp335_;
			_tmp337_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp336_);
			_tmp338_ = _tmp337_;
			_vala_ccode_node_unref0 (_tmp336_);
			free = _tmp338_;
			_tmp339_ = free;
			_tmp340_ = vala_ccode_identifier_new ("self");
			_tmp341_ = _tmp340_;
			_tmp342_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp341_, "GTypeInstance *");
			_tmp343_ = _tmp342_;
			vala_ccode_function_call_add_argument (_tmp339_, (ValaCCodeExpression*) _tmp343_);
			_vala_ccode_node_unref0 (_tmp343_);
			_vala_ccode_node_unref0 (_tmp341_);
			_tmp344_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp345_ = _tmp344_;
			_tmp346_ = free;
			vala_ccode_function_add_expression (_tmp345_, (ValaCCodeExpression*) _tmp346_);
			_tmp347_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp348_ = _tmp347_;
			vala_ccode_function_close (_tmp348_);
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp349_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp350_ = unref_fun;
			vala_ccode_file_add_function (_tmp349_, _tmp350_);
			_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 _tmp351_ = FALSE;
		gboolean _tmp352_ = FALSE;
		gboolean _tmp353_;
		gboolean _tmp354_;
		_tmp353_ = vala_class_get_is_compact (cl);
		_tmp354_ = _tmp353_;
		if (_tmp354_) {
			_tmp352_ = TRUE;
		} else {
			ValaClass* _tmp355_;
			ValaClass* _tmp356_;
			_tmp355_ = vala_class_get_base_class (cl);
			_tmp356_ = _tmp355_;
			_tmp352_ = _tmp356_ == NULL;
		}
		if (_tmp352_) {
			_tmp351_ = TRUE;
		} else {
			ValaClass* _tmp357_;
			ValaClass* _tmp358_;
			ValaClass* _tmp359_;
			_tmp357_ = vala_class_get_base_class (cl);
			_tmp358_ = _tmp357_;
			_tmp359_ = ((ValaCCodeBaseModule*) self)->gsource_type;
			_tmp351_ = _tmp358_ == _tmp359_;
		}
		if (_tmp351_) {
			vala_gtype_module_add_instance_init_function (self, cl);
			vala_gtype_module_add_finalize_function (self, cl);
		}
	}
	_tmp360_ = old_param_spec_struct;
	_tmp361_ = _vala_ccode_node_ref0 (_tmp360_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->param_spec_struct);
	((ValaCCodeBaseModule*) self)->param_spec_struct = _tmp361_;
	_tmp362_ = old_prop_enum;
	_tmp363_ = _vala_ccode_node_ref0 (_tmp362_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->prop_enum);
	((ValaCCodeBaseModule*) self)->prop_enum = _tmp363_;
	_tmp364_ = old_signal_enum;
	_tmp365_ = _vala_ccode_node_ref0 (_tmp364_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp365_;
	_tmp366_ = old_class_init_context;
	_tmp367_ = _vala_ccode_base_module_emit_context_ref0 (_tmp366_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->class_init_context);
	((ValaCCodeBaseModule*) self)->class_init_context = _tmp367_;
	_tmp368_ = old_base_init_context;
	_tmp369_ = _vala_ccode_base_module_emit_context_ref0 (_tmp368_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->base_init_context);
	((ValaCCodeBaseModule*) self)->base_init_context = _tmp369_;
	_tmp370_ = old_class_finalize_context;
	_tmp371_ = _vala_ccode_base_module_emit_context_ref0 (_tmp370_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->class_finalize_context);
	((ValaCCodeBaseModule*) self)->class_finalize_context = _tmp371_;
	_tmp372_ = old_base_finalize_context;
	_tmp373_ = _vala_ccode_base_module_emit_context_ref0 (_tmp372_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->base_finalize_context);
	((ValaCCodeBaseModule*) self)->base_finalize_context = _tmp373_;
	_tmp374_ = old_instance_init_context;
	_tmp375_ = _vala_ccode_base_module_emit_context_ref0 (_tmp374_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->instance_init_context);
	((ValaCCodeBaseModule*) self)->instance_init_context = _tmp375_;
	_tmp376_ = old_instance_finalize_context;
	_tmp377_ = _vala_ccode_base_module_emit_context_ref0 (_tmp376_);
	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->instance_finalize_context);
	((ValaCCodeBaseModule*) self)->instance_finalize_context = _tmp377_;
	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_;
	ValaCCodeIdentifier* _tmp55_;
	ValaCCodeIdentifier* _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_identifier_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_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeIdentifier* _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_identifier_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_name ((ValaCodeNode*) cl);
	_tmp8_ = _tmp7_;
	_tmp9_ = g_strdup_printf ("%sClass *", _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)
{
	g_return_if_fail (self != NULL);
	VALA_GTYPE_MODULE_GET_CLASS (self)->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)
{
	g_return_if_fail (self != NULL);
	VALA_GTYPE_MODULE_GET_CLASS (self)->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 _tmp97_ = FALSE;
	gboolean _tmp98_;
	gboolean _tmp99_;
	gboolean _tmp303_;
	gboolean _tmp304_;
	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_name ((ValaCodeNode*) cl);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strdup_printf ("%sClass *", _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_;
		ValaList* _tmp60_;
		gint _tmp61_;
		gint _tmp62_;
		gboolean _tmp63_;
		_tmp59_ = vala_object_type_symbol_get_fields ((ValaObjectTypeSymbol*) cl);
		_tmp60_ = _tmp59_;
		_tmp61_ = vala_collection_get_size ((ValaCollection*) _tmp60_);
		_tmp62_ = _tmp61_;
		_tmp63_ = _tmp62_ > 0;
		_vala_iterable_unref0 (_tmp60_);
		if (_tmp63_) {
			_tmp58_ = TRUE;
		} else {
			ValaDestructor* _tmp64_;
			ValaDestructor* _tmp65_;
			_tmp64_ = vala_class_get_destructor (cl);
			_tmp65_ = _tmp64_;
			_tmp58_ = _tmp65_ != NULL;
		}
		if (_tmp58_) {
			_tmp57_ = TRUE;
		} else {
			_tmp57_ = vala_class_is_fundamental (cl);
		}
		_tmp52_ = _tmp57_;
	} else {
		_tmp52_ = FALSE;
	}
	if (_tmp52_) {
		ValaClass* fundamental_class = NULL;
		ValaClass* _tmp66_;
		ValaCCodeCastExpression* ccast = NULL;
		ValaCCodeIdentifier* _tmp74_;
		ValaCCodeIdentifier* _tmp75_;
		ValaClass* _tmp76_;
		gchar* _tmp77_;
		gchar* _tmp78_;
		gchar* _tmp79_;
		gchar* _tmp80_;
		ValaCCodeCastExpression* _tmp81_;
		ValaCCodeCastExpression* _tmp82_;
		ValaCCodeAssignment* finalize_assignment = NULL;
		ValaCCodeCastExpression* _tmp83_;
		ValaCCodeMemberAccess* _tmp84_;
		ValaCCodeMemberAccess* _tmp85_;
		gchar* _tmp86_;
		gchar* _tmp87_;
		gchar* _tmp88_;
		gchar* _tmp89_;
		ValaCCodeIdentifier* _tmp90_;
		ValaCCodeIdentifier* _tmp91_;
		ValaCCodeAssignment* _tmp92_;
		ValaCCodeAssignment* _tmp93_;
		ValaCCodeFunction* _tmp94_;
		ValaCCodeFunction* _tmp95_;
		ValaCCodeAssignment* _tmp96_;
		_tmp66_ = _vala_code_node_ref0 (cl);
		fundamental_class = _tmp66_;
		while (TRUE) {
			ValaClass* _tmp67_;
			ValaClass* _tmp68_;
			ValaClass* _tmp69_;
			ValaClass* _tmp70_;
			ValaClass* _tmp71_;
			ValaClass* _tmp72_;
			ValaClass* _tmp73_;
			_tmp67_ = fundamental_class;
			_tmp68_ = vala_class_get_base_class (_tmp67_);
			_tmp69_ = _tmp68_;
			if (!(_tmp69_ != NULL)) {
				break;
			}
			_tmp70_ = fundamental_class;
			_tmp71_ = vala_class_get_base_class (_tmp70_);
			_tmp72_ = _tmp71_;
			_tmp73_ = _vala_code_node_ref0 (_tmp72_);
			_vala_code_node_unref0 (fundamental_class);
			fundamental_class = _tmp73_;
		}
		_tmp74_ = vala_ccode_identifier_new ("klass");
		_tmp75_ = _tmp74_;
		_tmp76_ = fundamental_class;
		_tmp77_ = vala_get_ccode_name ((ValaCodeNode*) _tmp76_);
		_tmp78_ = _tmp77_;
		_tmp79_ = g_strdup_printf ("%sClass *", _tmp78_);
		_tmp80_ = _tmp79_;
		_tmp81_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp75_, _tmp80_);
		_tmp82_ = _tmp81_;
		_g_free0 (_tmp80_);
		_g_free0 (_tmp78_);
		_vala_ccode_node_unref0 (_tmp75_);
		ccast = _tmp82_;
		_tmp83_ = ccast;
		_tmp84_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp83_, "finalize");
		_tmp85_ = _tmp84_;
		_tmp86_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) cl);
		_tmp87_ = _tmp86_;
		_tmp88_ = g_strdup_printf ("%sfinalize", _tmp87_);
		_tmp89_ = _tmp88_;
		_tmp90_ = vala_ccode_identifier_new (_tmp89_);
		_tmp91_ = _tmp90_;
		_tmp92_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp85_, (ValaCCodeExpression*) _tmp91_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp93_ = _tmp92_;
		_vala_ccode_node_unref0 (_tmp91_);
		_g_free0 (_tmp89_);
		_g_free0 (_tmp87_);
		_vala_ccode_node_unref0 (_tmp85_);
		finalize_assignment = _tmp93_;
		_tmp94_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp95_ = _tmp94_;
		_tmp96_ = finalize_assignment;
		vala_ccode_function_add_expression (_tmp95_, (ValaCCodeExpression*) _tmp96_);
		_vala_ccode_node_unref0 (finalize_assignment);
		_vala_ccode_node_unref0 (ccast);
		_vala_code_node_unref0 (fundamental_class);
	}
	_tmp98_ = vala_class_get_has_private_fields (cl);
	_tmp99_ = _tmp98_;
	if (_tmp99_) {
		_tmp97_ = TRUE;
	} else {
		_tmp97_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) cl);
	}
	if (_tmp97_) {
		ValaCCodeIdentifier* _tmp100_;
		ValaCCodeIdentifier* _tmp101_;
		ValaCCodeFunctionCall* _tmp102_;
		ValaCCodeFunctionCall* _tmp103_;
		ValaCCodeIdentifier* _tmp104_;
		ValaCCodeIdentifier* _tmp105_;
		ValaCCodeFunctionCall* _tmp106_;
		gchar* _tmp107_;
		gchar* _tmp108_;
		gchar* _tmp109_;
		gchar* _tmp110_;
		ValaCCodeIdentifier* _tmp111_;
		ValaCCodeIdentifier* _tmp112_;
		ValaCCodeFunction* _tmp113_;
		ValaCCodeFunction* _tmp114_;
		ValaCCodeFunctionCall* _tmp115_;
		_tmp100_ = vala_ccode_identifier_new ("g_type_class_adjust_private_offset");
		_tmp101_ = _tmp100_;
		_tmp102_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp101_);
		_vala_ccode_node_unref0 (ccall);
		ccall = _tmp102_;
		_vala_ccode_node_unref0 (_tmp101_);
		_tmp103_ = ccall;
		_tmp104_ = vala_ccode_identifier_new ("klass");
		_tmp105_ = _tmp104_;
		vala_ccode_function_call_add_argument (_tmp103_, (ValaCCodeExpression*) _tmp105_);
		_vala_ccode_node_unref0 (_tmp105_);
		_tmp106_ = ccall;
		_tmp107_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp108_ = _tmp107_;
		_tmp109_ = g_strdup_printf ("&%s_private_offset", _tmp108_);
		_tmp110_ = _tmp109_;
		_tmp111_ = vala_ccode_identifier_new (_tmp110_);
		_tmp112_ = _tmp111_;
		vala_ccode_function_call_add_argument (_tmp106_, (ValaCCodeExpression*) _tmp112_);
		_vala_ccode_node_unref0 (_tmp112_);
		_g_free0 (_tmp110_);
		_g_free0 (_tmp108_);
		_tmp113_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp114_ = _tmp113_;
		_tmp115_ = ccall;
		vala_ccode_function_add_expression (_tmp114_, (ValaCCodeExpression*) _tmp115_);
	}
	{
		ValaList* _m_list = NULL;
		ValaList* _tmp116_;
		gint _m_size = 0;
		ValaList* _tmp117_;
		gint _tmp118_;
		gint _tmp119_;
		gint _m_index = 0;
		_tmp116_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
		_m_list = _tmp116_;
		_tmp117_ = _m_list;
		_tmp118_ = vala_collection_get_size ((ValaCollection*) _tmp117_);
		_tmp119_ = _tmp118_;
		_m_size = _tmp119_;
		_m_index = -1;
		while (TRUE) {
			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;
			if (!(_m_index < _m_size)) {
				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_) {
				ValaCCodeExpression* cfunc = NULL;
				ValaMethod* _tmp138_;
				gchar* _tmp139_;
				gchar* _tmp140_;
				ValaCCodeIdentifier* _tmp141_;
				ValaCCodeExpression* _tmp142_;
				gint _tmp143_ = 0;
				ValaMethod* _tmp144_;
				gboolean _tmp145_;
				gboolean _tmp146_;
				ValaMethod* _tmp147_;
				ValaMethod* _tmp148_;
				ValaMethod* _tmp149_;
				ValaCCodeExpression* _tmp150_;
				ValaObjectTypeSymbol* _tmp151_;
				ValaCCodeExpression* _tmp152_;
				ValaCCodeCastExpression* ccast = NULL;
				ValaCCodeIdentifier* _tmp153_;
				ValaCCodeIdentifier* _tmp154_;
				ValaObjectTypeSymbol* _tmp155_;
				gchar* _tmp156_;
				gchar* _tmp157_;
				gchar* _tmp158_;
				gchar* _tmp159_;
				ValaCCodeCastExpression* _tmp160_;
				ValaCCodeCastExpression* _tmp161_;
				ValaCCodeFunction* _tmp162_;
				ValaCCodeFunction* _tmp163_;
				ValaCCodeCastExpression* _tmp164_;
				ValaMethod* _tmp165_;
				ValaMethod* _tmp166_;
				ValaMethod* _tmp167_;
				gchar* _tmp168_;
				gchar* _tmp169_;
				ValaCCodeMemberAccess* _tmp170_;
				ValaCCodeMemberAccess* _tmp171_;
				ValaCCodeExpression* _tmp172_;
				ValaMethod* _tmp173_;
				gboolean _tmp174_;
				gboolean _tmp175_;
				_tmp138_ = m;
				_tmp139_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp138_);
				_tmp140_ = _tmp139_;
				_tmp141_ = vala_ccode_identifier_new (_tmp140_);
				_tmp142_ = (ValaCCodeExpression*) _tmp141_;
				_g_free0 (_tmp140_);
				cfunc = _tmp142_;
				_tmp144_ = m;
				_tmp145_ = vala_method_get_coroutine (_tmp144_);
				_tmp146_ = _tmp145_;
				if (_tmp146_) {
					_tmp143_ = 1;
				} else {
					_tmp143_ = 3;
				}
				_tmp147_ = m;
				_tmp148_ = vala_method_get_base_method (_tmp147_);
				_tmp149_ = _tmp148_;
				_tmp150_ = cfunc;
				_tmp151_ = base_type;
				_tmp152_ = vala_gtype_module_cast_method_pointer (self, _tmp149_, _tmp150_, _tmp151_, _tmp143_);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = _tmp152_;
				_tmp153_ = vala_ccode_identifier_new ("klass");
				_tmp154_ = _tmp153_;
				_tmp155_ = base_type;
				_tmp156_ = vala_get_ccode_name ((ValaCodeNode*) _tmp155_);
				_tmp157_ = _tmp156_;
				_tmp158_ = g_strdup_printf ("%sClass *", _tmp157_);
				_tmp159_ = _tmp158_;
				_tmp160_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp154_, _tmp159_);
				_tmp161_ = _tmp160_;
				_g_free0 (_tmp159_);
				_g_free0 (_tmp157_);
				_vala_ccode_node_unref0 (_tmp154_);
				ccast = _tmp161_;
				_tmp162_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp163_ = _tmp162_;
				_tmp164_ = ccast;
				_tmp165_ = m;
				_tmp166_ = vala_method_get_base_method (_tmp165_);
				_tmp167_ = _tmp166_;
				_tmp168_ = vala_get_ccode_vfunc_name (_tmp167_);
				_tmp169_ = _tmp168_;
				_tmp170_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp164_, _tmp169_);
				_tmp171_ = _tmp170_;
				_tmp172_ = cfunc;
				vala_ccode_function_add_assignment (_tmp163_, (ValaCCodeExpression*) _tmp171_, _tmp172_);
				_vala_ccode_node_unref0 (_tmp171_);
				_g_free0 (_tmp169_);
				_tmp173_ = m;
				_tmp174_ = vala_method_get_coroutine (_tmp173_);
				_tmp175_ = _tmp174_;
				if (_tmp175_) {
					ValaMethod* _tmp176_;
					gchar* _tmp177_;
					gchar* _tmp178_;
					ValaCCodeIdentifier* _tmp179_;
					ValaMethod* _tmp180_;
					ValaMethod* _tmp181_;
					ValaMethod* _tmp182_;
					ValaCCodeExpression* _tmp183_;
					ValaObjectTypeSymbol* _tmp184_;
					ValaCCodeExpression* _tmp185_;
					ValaCCodeFunction* _tmp186_;
					ValaCCodeFunction* _tmp187_;
					ValaCCodeCastExpression* _tmp188_;
					ValaMethod* _tmp189_;
					ValaMethod* _tmp190_;
					ValaMethod* _tmp191_;
					gchar* _tmp192_;
					gchar* _tmp193_;
					ValaCCodeMemberAccess* _tmp194_;
					ValaCCodeMemberAccess* _tmp195_;
					ValaCCodeExpression* _tmp196_;
					_tmp176_ = m;
					_tmp177_ = vala_get_ccode_finish_real_name (_tmp176_);
					_tmp178_ = _tmp177_;
					_tmp179_ = vala_ccode_identifier_new (_tmp178_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = (ValaCCodeExpression*) _tmp179_;
					_g_free0 (_tmp178_);
					_tmp180_ = m;
					_tmp181_ = vala_method_get_base_method (_tmp180_);
					_tmp182_ = _tmp181_;
					_tmp183_ = cfunc;
					_tmp184_ = base_type;
					_tmp185_ = vala_gtype_module_cast_method_pointer (self, _tmp182_, _tmp183_, _tmp184_, 2);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp185_;
					_tmp186_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp187_ = _tmp186_;
					_tmp188_ = ccast;
					_tmp189_ = m;
					_tmp190_ = vala_method_get_base_method (_tmp189_);
					_tmp191_ = _tmp190_;
					_tmp192_ = vala_get_ccode_finish_vfunc_name (_tmp191_);
					_tmp193_ = _tmp192_;
					_tmp194_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp188_, _tmp193_);
					_tmp195_ = _tmp194_;
					_tmp196_ = cfunc;
					vala_ccode_function_add_assignment (_tmp187_, (ValaCCodeExpression*) _tmp195_, _tmp196_);
					_vala_ccode_node_unref0 (_tmp195_);
					_g_free0 (_tmp193_);
				}
				_vala_ccode_node_unref0 (ccast);
				_vala_ccode_node_unref0 (cfunc);
			}
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (m);
		}
		_vala_iterable_unref0 (_m_list);
	}
	{
		ValaList* _sig_list = NULL;
		ValaList* _tmp197_;
		gint _sig_size = 0;
		ValaList* _tmp198_;
		gint _tmp199_;
		gint _tmp200_;
		gint _sig_index = 0;
		_tmp197_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
		_sig_list = _tmp197_;
		_tmp198_ = _sig_list;
		_tmp199_ = vala_collection_get_size ((ValaCollection*) _tmp198_);
		_tmp200_ = _tmp199_;
		_sig_size = _tmp200_;
		_sig_index = -1;
		while (TRUE) {
			ValaSignal* sig = NULL;
			ValaList* _tmp201_;
			gpointer _tmp202_;
			ValaSignal* _tmp203_;
			ValaMethod* _tmp204_;
			ValaMethod* _tmp205_;
			ValaCCodeCastExpression* ccast = NULL;
			ValaCCodeIdentifier* _tmp206_;
			ValaCCodeIdentifier* _tmp207_;
			gchar* _tmp208_;
			gchar* _tmp209_;
			gchar* _tmp210_;
			gchar* _tmp211_;
			ValaCCodeCastExpression* _tmp212_;
			ValaCCodeCastExpression* _tmp213_;
			ValaCCodeFunction* _tmp214_;
			ValaCCodeFunction* _tmp215_;
			ValaCCodeCastExpression* _tmp216_;
			ValaSignal* _tmp217_;
			ValaMethod* _tmp218_;
			ValaMethod* _tmp219_;
			gchar* _tmp220_;
			gchar* _tmp221_;
			ValaCCodeMemberAccess* _tmp222_;
			ValaCCodeMemberAccess* _tmp223_;
			ValaSignal* _tmp224_;
			ValaMethod* _tmp225_;
			ValaMethod* _tmp226_;
			gchar* _tmp227_;
			gchar* _tmp228_;
			ValaCCodeIdentifier* _tmp229_;
			ValaCCodeIdentifier* _tmp230_;
			_sig_index = _sig_index + 1;
			if (!(_sig_index < _sig_size)) {
				break;
			}
			_tmp201_ = _sig_list;
			_tmp202_ = vala_list_get (_tmp201_, _sig_index);
			sig = (ValaSignal*) _tmp202_;
			_tmp203_ = sig;
			_tmp204_ = vala_signal_get_default_handler (_tmp203_);
			_tmp205_ = _tmp204_;
			if (_tmp205_ == NULL) {
				_vala_code_node_unref0 (sig);
				continue;
			}
			_tmp206_ = vala_ccode_identifier_new ("klass");
			_tmp207_ = _tmp206_;
			_tmp208_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp209_ = _tmp208_;
			_tmp210_ = g_strdup_printf ("%sClass *", _tmp209_);
			_tmp211_ = _tmp210_;
			_tmp212_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp207_, _tmp211_);
			_tmp213_ = _tmp212_;
			_g_free0 (_tmp211_);
			_g_free0 (_tmp209_);
			_vala_ccode_node_unref0 (_tmp207_);
			ccast = _tmp213_;
			_tmp214_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp215_ = _tmp214_;
			_tmp216_ = ccast;
			_tmp217_ = sig;
			_tmp218_ = vala_signal_get_default_handler (_tmp217_);
			_tmp219_ = _tmp218_;
			_tmp220_ = vala_get_ccode_vfunc_name (_tmp219_);
			_tmp221_ = _tmp220_;
			_tmp222_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp216_, _tmp221_);
			_tmp223_ = _tmp222_;
			_tmp224_ = sig;
			_tmp225_ = vala_signal_get_default_handler (_tmp224_);
			_tmp226_ = _tmp225_;
			_tmp227_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp226_);
			_tmp228_ = _tmp227_;
			_tmp229_ = vala_ccode_identifier_new (_tmp228_);
			_tmp230_ = _tmp229_;
			vala_ccode_function_add_assignment (_tmp215_, (ValaCCodeExpression*) _tmp223_, (ValaCCodeExpression*) _tmp230_);
			_vala_ccode_node_unref0 (_tmp230_);
			_g_free0 (_tmp228_);
			_vala_ccode_node_unref0 (_tmp223_);
			_g_free0 (_tmp221_);
			_vala_ccode_node_unref0 (ccast);
			_vala_code_node_unref0 (sig);
		}
		_vala_iterable_unref0 (_sig_list);
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp231_;
		gint _prop_size = 0;
		ValaList* _tmp232_;
		gint _tmp233_;
		gint _tmp234_;
		gint _prop_index = 0;
		_tmp231_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
		_prop_list = _tmp231_;
		_tmp232_ = _prop_list;
		_tmp233_ = vala_collection_get_size ((ValaCollection*) _tmp232_);
		_tmp234_ = _tmp233_;
		_prop_size = _tmp234_;
		_prop_index = -1;
		while (TRUE) {
			ValaProperty* prop = NULL;
			ValaList* _tmp235_;
			gpointer _tmp236_;
			ValaProperty* _tmp237_;
			ValaProperty* _tmp238_;
			ValaProperty* _tmp239_;
			ValaClass* base_type = NULL;
			ValaProperty* _tmp240_;
			ValaProperty* _tmp241_;
			ValaProperty* _tmp242_;
			ValaSymbol* _tmp243_;
			ValaSymbol* _tmp244_;
			ValaClass* _tmp245_;
			ValaCCodeFunctionCall* ccast = NULL;
			ValaClass* _tmp246_;
			gchar* _tmp247_;
			gchar* _tmp248_;
			ValaCCodeIdentifier* _tmp249_;
			ValaCCodeIdentifier* _tmp250_;
			ValaCCodeFunctionCall* _tmp251_;
			ValaCCodeFunctionCall* _tmp252_;
			ValaCCodeFunctionCall* _tmp253_;
			ValaCCodeIdentifier* _tmp254_;
			ValaCCodeIdentifier* _tmp255_;
			gboolean _tmp256_ = FALSE;
			ValaProperty* _tmp257_;
			ValaProperty* _tmp258_;
			ValaProperty* _tmp259_;
			_prop_index = _prop_index + 1;
			if (!(_prop_index < _prop_size)) {
				break;
			}
			_tmp235_ = _prop_list;
			_tmp236_ = vala_list_get (_tmp235_, _prop_index);
			prop = (ValaProperty*) _tmp236_;
			_tmp237_ = prop;
			_tmp238_ = vala_property_get_base_property (_tmp237_);
			_tmp239_ = _tmp238_;
			if (_tmp239_ == NULL) {
				_vala_code_node_unref0 (prop);
				continue;
			}
			_tmp240_ = prop;
			_tmp241_ = vala_property_get_base_property (_tmp240_);
			_tmp242_ = _tmp241_;
			_tmp243_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp242_);
			_tmp244_ = _tmp243_;
			_tmp245_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp244_, VALA_TYPE_CLASS, ValaClass));
			base_type = _tmp245_;
			_tmp246_ = base_type;
			_tmp247_ = vala_get_ccode_class_type_function (_tmp246_);
			_tmp248_ = _tmp247_;
			_tmp249_ = vala_ccode_identifier_new (_tmp248_);
			_tmp250_ = _tmp249_;
			_tmp251_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp250_);
			_tmp252_ = _tmp251_;
			_vala_ccode_node_unref0 (_tmp250_);
			_g_free0 (_tmp248_);
			ccast = _tmp252_;
			_tmp253_ = ccast;
			_tmp254_ = vala_ccode_identifier_new ("klass");
			_tmp255_ = _tmp254_;
			vala_ccode_function_call_add_argument (_tmp253_, (ValaCCodeExpression*) _tmp255_);
			_vala_ccode_node_unref0 (_tmp255_);
			_tmp257_ = prop;
			_tmp258_ = vala_property_get_base_property (_tmp257_);
			_tmp259_ = _tmp258_;
			if (!vala_get_ccode_no_accessor_method (_tmp259_)) {
				ValaProperty* _tmp260_;
				ValaProperty* _tmp261_;
				ValaProperty* _tmp262_;
				_tmp260_ = prop;
				_tmp261_ = vala_property_get_base_property (_tmp260_);
				_tmp262_ = _tmp261_;
				_tmp256_ = !vala_get_ccode_concrete_accessor (_tmp262_);
			} else {
				_tmp256_ = FALSE;
			}
			if (_tmp256_) {
				ValaProperty* _tmp263_;
				ValaPropertyAccessor* _tmp264_;
				ValaPropertyAccessor* _tmp265_;
				ValaProperty* _tmp283_;
				ValaPropertyAccessor* _tmp284_;
				ValaPropertyAccessor* _tmp285_;
				_tmp263_ = prop;
				_tmp264_ = vala_property_get_get_accessor (_tmp263_);
				_tmp265_ = _tmp264_;
				if (_tmp265_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp266_;
					ValaPropertyAccessor* _tmp267_;
					ValaPropertyAccessor* _tmp268_;
					gchar* _tmp269_;
					ValaCCodeFunction* _tmp270_;
					ValaCCodeFunction* _tmp271_;
					ValaCCodeFunctionCall* _tmp272_;
					ValaProperty* _tmp273_;
					const gchar* _tmp274_;
					const gchar* _tmp275_;
					gchar* _tmp276_;
					gchar* _tmp277_;
					ValaCCodeMemberAccess* _tmp278_;
					ValaCCodeMemberAccess* _tmp279_;
					const gchar* _tmp280_;
					ValaCCodeIdentifier* _tmp281_;
					ValaCCodeIdentifier* _tmp282_;
					_tmp266_ = prop;
					_tmp267_ = vala_property_get_get_accessor (_tmp266_);
					_tmp268_ = _tmp267_;
					_tmp269_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp268_);
					cname = _tmp269_;
					_tmp270_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp271_ = _tmp270_;
					_tmp272_ = ccast;
					_tmp273_ = prop;
					_tmp274_ = vala_symbol_get_name ((ValaSymbol*) _tmp273_);
					_tmp275_ = _tmp274_;
					_tmp276_ = g_strdup_printf ("get_%s", _tmp275_);
					_tmp277_ = _tmp276_;
					_tmp278_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp272_, _tmp277_);
					_tmp279_ = _tmp278_;
					_tmp280_ = cname;
					_tmp281_ = vala_ccode_identifier_new (_tmp280_);
					_tmp282_ = _tmp281_;
					vala_ccode_function_add_assignment (_tmp271_, (ValaCCodeExpression*) _tmp279_, (ValaCCodeExpression*) _tmp282_);
					_vala_ccode_node_unref0 (_tmp282_);
					_vala_ccode_node_unref0 (_tmp279_);
					_g_free0 (_tmp277_);
					_g_free0 (cname);
				}
				_tmp283_ = prop;
				_tmp284_ = vala_property_get_set_accessor (_tmp283_);
				_tmp285_ = _tmp284_;
				if (_tmp285_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp286_;
					ValaPropertyAccessor* _tmp287_;
					ValaPropertyAccessor* _tmp288_;
					gchar* _tmp289_;
					ValaCCodeFunction* _tmp290_;
					ValaCCodeFunction* _tmp291_;
					ValaCCodeFunctionCall* _tmp292_;
					ValaProperty* _tmp293_;
					const gchar* _tmp294_;
					const gchar* _tmp295_;
					gchar* _tmp296_;
					gchar* _tmp297_;
					ValaCCodeMemberAccess* _tmp298_;
					ValaCCodeMemberAccess* _tmp299_;
					const gchar* _tmp300_;
					ValaCCodeIdentifier* _tmp301_;
					ValaCCodeIdentifier* _tmp302_;
					_tmp286_ = prop;
					_tmp287_ = vala_property_get_set_accessor (_tmp286_);
					_tmp288_ = _tmp287_;
					_tmp289_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp288_);
					cname = _tmp289_;
					_tmp290_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp291_ = _tmp290_;
					_tmp292_ = ccast;
					_tmp293_ = prop;
					_tmp294_ = vala_symbol_get_name ((ValaSymbol*) _tmp293_);
					_tmp295_ = _tmp294_;
					_tmp296_ = g_strdup_printf ("set_%s", _tmp295_);
					_tmp297_ = _tmp296_;
					_tmp298_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp292_, _tmp297_);
					_tmp299_ = _tmp298_;
					_tmp300_ = cname;
					_tmp301_ = vala_ccode_identifier_new (_tmp300_);
					_tmp302_ = _tmp301_;
					vala_ccode_function_add_assignment (_tmp291_, (ValaCCodeExpression*) _tmp299_, (ValaCCodeExpression*) _tmp302_);
					_vala_ccode_node_unref0 (_tmp302_);
					_vala_ccode_node_unref0 (_tmp299_);
					_g_free0 (_tmp297_);
					_g_free0 (cname);
				}
			}
			_vala_ccode_node_unref0 (ccast);
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (prop);
		}
		_vala_iterable_unref0 (_prop_list);
	}
	vala_gtype_module_generate_class_init (self, cl);
	_tmp303_ = vala_class_get_is_compact (cl);
	_tmp304_ = _tmp303_;
	if (!_tmp304_) {
		{
			ValaList* _sig_list = NULL;
			ValaList* _tmp305_;
			gint _sig_size = 0;
			ValaList* _tmp306_;
			gint _tmp307_;
			gint _tmp308_;
			gint _sig_index = 0;
			_tmp305_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
			_sig_list = _tmp305_;
			_tmp306_ = _sig_list;
			_tmp307_ = vala_collection_get_size ((ValaCollection*) _tmp306_);
			_tmp308_ = _tmp307_;
			_sig_size = _tmp308_;
			_sig_index = -1;
			while (TRUE) {
				ValaSignal* sig = NULL;
				ValaList* _tmp309_;
				gpointer _tmp310_;
				ValaSignal* _tmp311_;
				ValaComment* _tmp312_;
				ValaComment* _tmp313_;
				ValaCCodeFunction* _tmp323_;
				ValaCCodeFunction* _tmp324_;
				ValaSignal* _tmp325_;
				ValaCCodeExpression* _tmp326_;
				ValaCCodeExpression* _tmp327_;
				_sig_index = _sig_index + 1;
				if (!(_sig_index < _sig_size)) {
					break;
				}
				_tmp309_ = _sig_list;
				_tmp310_ = vala_list_get (_tmp309_, _sig_index);
				sig = (ValaSignal*) _tmp310_;
				_tmp311_ = sig;
				_tmp312_ = vala_symbol_get_comment ((ValaSymbol*) _tmp311_);
				_tmp313_ = _tmp312_;
				if (_tmp313_ != NULL) {
					ValaCCodeFunction* _tmp314_;
					ValaCCodeFunction* _tmp315_;
					ValaSignal* _tmp316_;
					ValaComment* _tmp317_;
					ValaComment* _tmp318_;
					const gchar* _tmp319_;
					const gchar* _tmp320_;
					ValaCCodeComment* _tmp321_;
					ValaCCodeComment* _tmp322_;
					_tmp314_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp315_ = _tmp314_;
					_tmp316_ = sig;
					_tmp317_ = vala_symbol_get_comment ((ValaSymbol*) _tmp316_);
					_tmp318_ = _tmp317_;
					_tmp319_ = vala_comment_get_content (_tmp318_);
					_tmp320_ = _tmp319_;
					_tmp321_ = vala_ccode_comment_new (_tmp320_);
					_tmp322_ = _tmp321_;
					vala_ccode_function_add_statement (_tmp315_, (ValaCCodeNode*) _tmp322_);
					_vala_ccode_node_unref0 (_tmp322_);
				}
				_tmp323_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp324_ = _tmp323_;
				_tmp325_ = sig;
				_tmp326_ = vala_ccode_base_module_get_signal_creation ((ValaCCodeBaseModule*) self, _tmp325_, (ValaTypeSymbol*) cl);
				_tmp327_ = _tmp326_;
				vala_ccode_function_add_expression (_tmp324_, _tmp327_);
				_vala_ccode_node_unref0 (_tmp327_);
				_vala_code_node_unref0 (sig);
			}
			_vala_iterable_unref0 (_sig_list);
		}
	}
	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_;
	ValaCCodeFile* _tmp14_;
	ValaCCodeExpression* cfunc = NULL;
	const gchar* _tmp15_;
	const gchar* _tmp16_;
	ValaCCodeIdentifier* _tmp17_;
	gchar* cast = NULL;
	gchar* _tmp18_;
	gchar* cast_args = NULL;
	gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	const gchar* _tmp23_;
	gchar* _tmp24_;
	ValaCCodeExpression* _tmp25_;
	const gchar* _tmp26_;
	ValaCCodeCastExpression* _tmp27_;
	ValaCCodeIdentifier* ciface = NULL;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeFunction* _tmp29_;
	ValaCCodeFunction* _tmp30_;
	ValaCCodeMemberAccess* _tmp31_;
	ValaCCodeMemberAccess* _tmp32_;
	ValaCCodeExpression* _tmp33_;
	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_ccode_base_module_get_data_type_for_symbol ((ValaTypeSymbol*) 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_;
	vala_ccode_function_add_return (_tmp13_, expression);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp14_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp14_, function);
	_tmp15_ = vala_ccode_function_get_name (function);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_identifier_new (_tmp16_);
	cfunc = (ValaCCodeExpression*) _tmp17_;
	_tmp18_ = g_strdup_printf ("%s (*)", return_type);
	cast = _tmp18_;
	_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp20_ = _tmp19_;
	_tmp21_ = g_strdup_printf ("%s *", _tmp20_);
	_tmp22_ = _tmp21_;
	_g_free0 (_tmp20_);
	cast_args = _tmp22_;
	_tmp23_ = cast;
	_tmp24_ = g_strdup_printf ("%s (%s)", _tmp23_, cast_args);
	_g_free0 (cast);
	cast = _tmp24_;
	_tmp25_ = cfunc;
	_tmp26_ = cast;
	_tmp27_ = vala_ccode_cast_expression_new (_tmp25_, _tmp26_);
	_vala_ccode_node_unref0 (cfunc);
	cfunc = (ValaCCodeExpression*) _tmp27_;
	_tmp28_ = vala_ccode_identifier_new ("iface");
	ciface = _tmp28_;
	_tmp29_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp30_ = _tmp29_;
	_tmp31_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) ciface, base_name);
	_tmp32_ = _tmp31_;
	_tmp33_ = cfunc;
	vala_ccode_function_add_assignment (_tmp30_, (ValaCCodeExpression*) _tmp32_, _tmp33_);
	_vala_ccode_node_unref0 (_tmp32_);
	_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_;
	ValaAttribute* _tmp140_;
	ValaMapIterator* it = NULL;
	ValaHashMap* _tmp187_;
	ValaHashMap* _tmp188_;
	ValaMapIterator* _tmp189_;
	ValaMapIterator* _tmp190_;
	ValaCCodeFile* _tmp444_;
	ValaCCodeFunction* _tmp445_;
	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 (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 (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) {
			ValaMethod* m = NULL;
			ValaList* _tmp58_;
			gpointer _tmp59_;
			ValaMethod* _tmp60_;
			ValaMethod* _tmp61_;
			ValaMethod* _tmp62_;
			ValaSymbol* base_type = NULL;
			ValaMethod* _tmp63_;
			ValaMethod* _tmp64_;
			ValaMethod* _tmp65_;
			ValaSymbol* _tmp66_;
			ValaSymbol* _tmp67_;
			ValaSymbol* _tmp68_;
			ValaSymbol* _tmp69_;
			ValaCCodeIdentifier* ciface = NULL;
			ValaCCodeIdentifier* _tmp70_;
			ValaCCodeExpression* cfunc = NULL;
			gboolean _tmp71_ = FALSE;
			ValaMethod* _tmp72_;
			gboolean _tmp73_;
			gboolean _tmp74_;
			gint _tmp86_ = 0;
			ValaMethod* _tmp87_;
			gboolean _tmp88_;
			gboolean _tmp89_;
			ValaMethod* _tmp90_;
			ValaMethod* _tmp91_;
			ValaMethod* _tmp92_;
			ValaCCodeExpression* _tmp93_;
			ValaCCodeExpression* _tmp94_;
			ValaCCodeFunction* _tmp95_;
			ValaCCodeFunction* _tmp96_;
			ValaCCodeIdentifier* _tmp97_;
			ValaMethod* _tmp98_;
			ValaMethod* _tmp99_;
			ValaMethod* _tmp100_;
			gchar* _tmp101_;
			gchar* _tmp102_;
			ValaCCodeMemberAccess* _tmp103_;
			ValaCCodeMemberAccess* _tmp104_;
			ValaCCodeExpression* _tmp105_;
			ValaMethod* _tmp106_;
			gboolean _tmp107_;
			gboolean _tmp108_;
			_m_index = _m_index + 1;
			if (!(_m_index < _m_size)) {
				break;
			}
			_tmp58_ = _m_list;
			_tmp59_ = vala_list_get (_tmp58_, _m_index);
			m = (ValaMethod*) _tmp59_;
			_tmp60_ = m;
			_tmp61_ = vala_method_get_base_interface_method (_tmp60_);
			_tmp62_ = _tmp61_;
			if (_tmp62_ == NULL) {
				_vala_code_node_unref0 (m);
				continue;
			}
			_tmp63_ = m;
			_tmp64_ = vala_method_get_base_interface_method (_tmp63_);
			_tmp65_ = _tmp64_;
			_tmp66_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp65_);
			_tmp67_ = _tmp66_;
			_tmp68_ = _vala_code_node_ref0 (_tmp67_);
			base_type = _tmp68_;
			_tmp69_ = base_type;
			if (_tmp69_ != G_TYPE_CHECK_INSTANCE_CAST (iface, VALA_TYPE_SYMBOL, ValaSymbol)) {
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (m);
				continue;
			}
			_tmp70_ = vala_ccode_identifier_new ("iface");
			ciface = _tmp70_;
			_tmp72_ = m;
			_tmp73_ = vala_method_get_is_abstract (_tmp72_);
			_tmp74_ = _tmp73_;
			if (_tmp74_) {
				_tmp71_ = TRUE;
			} else {
				ValaMethod* _tmp75_;
				gboolean _tmp76_;
				gboolean _tmp77_;
				_tmp75_ = m;
				_tmp76_ = vala_method_get_is_virtual (_tmp75_);
				_tmp77_ = _tmp76_;
				_tmp71_ = _tmp77_;
			}
			if (_tmp71_) {
				ValaMethod* _tmp78_;
				gchar* _tmp79_;
				gchar* _tmp80_;
				ValaCCodeIdentifier* _tmp81_;
				_tmp78_ = m;
				_tmp79_ = vala_get_ccode_name ((ValaCodeNode*) _tmp78_);
				_tmp80_ = _tmp79_;
				_tmp81_ = vala_ccode_identifier_new (_tmp80_);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = (ValaCCodeExpression*) _tmp81_;
				_g_free0 (_tmp80_);
			} else {
				ValaMethod* _tmp82_;
				gchar* _tmp83_;
				gchar* _tmp84_;
				ValaCCodeIdentifier* _tmp85_;
				_tmp82_ = m;
				_tmp83_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp82_);
				_tmp84_ = _tmp83_;
				_tmp85_ = vala_ccode_identifier_new (_tmp84_);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = (ValaCCodeExpression*) _tmp85_;
				_g_free0 (_tmp84_);
			}
			_tmp87_ = m;
			_tmp88_ = vala_method_get_coroutine (_tmp87_);
			_tmp89_ = _tmp88_;
			if (_tmp89_) {
				_tmp86_ = 1;
			} else {
				_tmp86_ = 3;
			}
			_tmp90_ = m;
			_tmp91_ = vala_method_get_base_interface_method (_tmp90_);
			_tmp92_ = _tmp91_;
			_tmp93_ = cfunc;
			_tmp94_ = vala_gtype_module_cast_method_pointer (self, _tmp92_, _tmp93_, (ValaObjectTypeSymbol*) iface, _tmp86_);
			_vala_ccode_node_unref0 (cfunc);
			cfunc = _tmp94_;
			_tmp95_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp96_ = _tmp95_;
			_tmp97_ = ciface;
			_tmp98_ = m;
			_tmp99_ = vala_method_get_base_interface_method (_tmp98_);
			_tmp100_ = _tmp99_;
			_tmp101_ = vala_get_ccode_vfunc_name (_tmp100_);
			_tmp102_ = _tmp101_;
			_tmp103_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp97_, _tmp102_);
			_tmp104_ = _tmp103_;
			_tmp105_ = cfunc;
			vala_ccode_function_add_assignment (_tmp96_, (ValaCCodeExpression*) _tmp104_, _tmp105_);
			_vala_ccode_node_unref0 (_tmp104_);
			_g_free0 (_tmp102_);
			_tmp106_ = m;
			_tmp107_ = vala_method_get_coroutine (_tmp106_);
			_tmp108_ = _tmp107_;
			if (_tmp108_) {
				gboolean _tmp109_ = FALSE;
				ValaMethod* _tmp110_;
				gboolean _tmp111_;
				gboolean _tmp112_;
				ValaMethod* _tmp124_;
				ValaMethod* _tmp125_;
				ValaMethod* _tmp126_;
				ValaCCodeExpression* _tmp127_;
				ValaCCodeExpression* _tmp128_;
				ValaCCodeFunction* _tmp129_;
				ValaCCodeFunction* _tmp130_;
				ValaCCodeIdentifier* _tmp131_;
				ValaMethod* _tmp132_;
				ValaMethod* _tmp133_;
				ValaMethod* _tmp134_;
				gchar* _tmp135_;
				gchar* _tmp136_;
				ValaCCodeMemberAccess* _tmp137_;
				ValaCCodeMemberAccess* _tmp138_;
				ValaCCodeExpression* _tmp139_;
				_tmp110_ = m;
				_tmp111_ = vala_method_get_is_abstract (_tmp110_);
				_tmp112_ = _tmp111_;
				if (_tmp112_) {
					_tmp109_ = TRUE;
				} else {
					ValaMethod* _tmp113_;
					gboolean _tmp114_;
					gboolean _tmp115_;
					_tmp113_ = m;
					_tmp114_ = vala_method_get_is_virtual (_tmp113_);
					_tmp115_ = _tmp114_;
					_tmp109_ = _tmp115_;
				}
				if (_tmp109_) {
					ValaMethod* _tmp116_;
					gchar* _tmp117_;
					gchar* _tmp118_;
					ValaCCodeIdentifier* _tmp119_;
					_tmp116_ = m;
					_tmp117_ = vala_get_ccode_finish_name (_tmp116_);
					_tmp118_ = _tmp117_;
					_tmp119_ = vala_ccode_identifier_new (_tmp118_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = (ValaCCodeExpression*) _tmp119_;
					_g_free0 (_tmp118_);
				} else {
					ValaMethod* _tmp120_;
					gchar* _tmp121_;
					gchar* _tmp122_;
					ValaCCodeIdentifier* _tmp123_;
					_tmp120_ = m;
					_tmp121_ = vala_get_ccode_finish_real_name (_tmp120_);
					_tmp122_ = _tmp121_;
					_tmp123_ = vala_ccode_identifier_new (_tmp122_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = (ValaCCodeExpression*) _tmp123_;
					_g_free0 (_tmp122_);
				}
				_tmp124_ = m;
				_tmp125_ = vala_method_get_base_interface_method (_tmp124_);
				_tmp126_ = _tmp125_;
				_tmp127_ = cfunc;
				_tmp128_ = vala_gtype_module_cast_method_pointer (self, _tmp126_, _tmp127_, (ValaObjectTypeSymbol*) iface, 2);
				_vala_ccode_node_unref0 (cfunc);
				cfunc = _tmp128_;
				_tmp129_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp130_ = _tmp129_;
				_tmp131_ = ciface;
				_tmp132_ = m;
				_tmp133_ = vala_method_get_base_interface_method (_tmp132_);
				_tmp134_ = _tmp133_;
				_tmp135_ = vala_get_ccode_finish_vfunc_name (_tmp134_);
				_tmp136_ = _tmp135_;
				_tmp137_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp131_, _tmp136_);
				_tmp138_ = _tmp137_;
				_tmp139_ = cfunc;
				vala_ccode_function_add_assignment (_tmp130_, (ValaCCodeExpression*) _tmp138_, _tmp139_);
				_vala_ccode_node_unref0 (_tmp138_);
				_g_free0 (_tmp136_);
			}
			_vala_ccode_node_unref0 (cfunc);
			_vala_ccode_node_unref0 (ciface);
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (m);
		}
		_vala_iterable_unref0 (_m_list);
	}
	_tmp140_ = vala_code_node_get_attribute ((ValaCodeNode*) iface, "GenericAccessors");
	if (_tmp140_ != NULL) {
		{
			ValaList* _p_list = NULL;
			ValaList* _tmp141_;
			gint _p_size = 0;
			ValaList* _tmp142_;
			gint _tmp143_;
			gint _tmp144_;
			gint _p_index = 0;
			_tmp141_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
			_p_list = _tmp141_;
			_tmp142_ = _p_list;
			_tmp143_ = vala_collection_get_size ((ValaCollection*) _tmp142_);
			_tmp144_ = _tmp143_;
			_p_size = _tmp144_;
			_p_index = -1;
			while (TRUE) {
				ValaTypeParameter* p = NULL;
				ValaList* _tmp145_;
				gpointer _tmp146_;
				ValaGenericType* p_type = NULL;
				ValaTypeParameter* _tmp147_;
				ValaGenericType* _tmp148_;
				ValaDataType* p_data_type = NULL;
				ValaGenericType* _tmp149_;
				ValaDataType* _tmp150_;
				ValaDataType* _tmp151_;
				ValaDataType* _tmp152_;
				ValaDataType* _tmp153_;
				ValaTypeParameter* _tmp154_;
				const gchar* _tmp155_;
				const gchar* _tmp156_;
				gchar* _tmp157_;
				gchar* _tmp158_;
				gchar* _tmp159_;
				gchar* _tmp160_;
				ValaDataType* _tmp161_;
				ValaCCodeExpression* _tmp162_;
				ValaCCodeExpression* _tmp163_;
				ValaTypeParameter* _tmp164_;
				ValaTypeParameter* _tmp165_;
				const gchar* _tmp166_;
				const gchar* _tmp167_;
				gchar* _tmp168_;
				gchar* _tmp169_;
				gchar* _tmp170_;
				gchar* _tmp171_;
				ValaDataType* _tmp172_;
				ValaCCodeExpression* _tmp173_;
				ValaCCodeExpression* _tmp174_;
				ValaTypeParameter* _tmp175_;
				ValaTypeParameter* _tmp176_;
				const gchar* _tmp177_;
				const gchar* _tmp178_;
				gchar* _tmp179_;
				gchar* _tmp180_;
				gchar* _tmp181_;
				gchar* _tmp182_;
				ValaDataType* _tmp183_;
				ValaCCodeExpression* _tmp184_;
				ValaCCodeExpression* _tmp185_;
				ValaTypeParameter* _tmp186_;
				_p_index = _p_index + 1;
				if (!(_p_index < _p_size)) {
					break;
				}
				_tmp145_ = _p_list;
				_tmp146_ = vala_list_get (_tmp145_, _p_index);
				p = (ValaTypeParameter*) _tmp146_;
				_tmp147_ = p;
				_tmp148_ = vala_generic_type_new (_tmp147_);
				p_type = _tmp148_;
				_tmp149_ = p_type;
				_tmp150_ = vala_ccode_base_module_get_data_type_for_symbol ((ValaTypeSymbol*) cl);
				_tmp151_ = _tmp150_;
				_tmp152_ = vala_data_type_get_actual_type ((ValaDataType*) _tmp149_, _tmp151_, NULL, (ValaCodeNode*) cl);
				_tmp153_ = _tmp152_;
				_vala_code_node_unref0 (_tmp151_);
				p_data_type = _tmp153_;
				_tmp154_ = p;
				_tmp155_ = vala_symbol_get_name ((ValaSymbol*) _tmp154_);
				_tmp156_ = _tmp155_;
				_tmp157_ = g_utf8_strdown (_tmp156_, (gssize) -1);
				_tmp158_ = _tmp157_;
				_tmp159_ = g_strdup_printf ("get_%s_type", _tmp158_);
				_tmp160_ = _tmp159_;
				_tmp161_ = p_data_type;
				_tmp162_ = vala_ccode_base_module_get_type_id_expression ((ValaCCodeBaseModule*) self, _tmp161_, FALSE);
				_tmp163_ = _tmp162_;
				_tmp164_ = p;
				vala_gtype_module_add_generic_accessor_function (self, _tmp160_, "GType", _tmp163_, _tmp164_, cl, iface);
				_vala_ccode_node_unref0 (_tmp163_);
				_g_free0 (_tmp160_);
				_g_free0 (_tmp158_);
				_tmp165_ = p;
				_tmp166_ = vala_symbol_get_name ((ValaSymbol*) _tmp165_);
				_tmp167_ = _tmp166_;
				_tmp168_ = g_utf8_strdown (_tmp167_, (gssize) -1);
				_tmp169_ = _tmp168_;
				_tmp170_ = g_strdup_printf ("get_%s_dup_func", _tmp169_);
				_tmp171_ = _tmp170_;
				_tmp172_ = p_data_type;
				_tmp173_ = vala_ccode_base_module_get_dup_func_expression ((ValaCCodeBaseModule*) self, _tmp172_, NULL, FALSE);
				_tmp174_ = _tmp173_;
				_tmp175_ = p;
				vala_gtype_module_add_generic_accessor_function (self, _tmp171_, "GBoxedCopyFunc", _tmp174_, _tmp175_, cl, iface);
				_vala_ccode_node_unref0 (_tmp174_);
				_g_free0 (_tmp171_);
				_g_free0 (_tmp169_);
				_tmp176_ = p;
				_tmp177_ = vala_symbol_get_name ((ValaSymbol*) _tmp176_);
				_tmp178_ = _tmp177_;
				_tmp179_ = g_utf8_strdown (_tmp178_, (gssize) -1);
				_tmp180_ = _tmp179_;
				_tmp181_ = g_strdup_printf ("get_%s_destroy_func", _tmp180_);
				_tmp182_ = _tmp181_;
				_tmp183_ = p_data_type;
				_tmp184_ = vala_ccode_base_module_get_destroy_func_expression ((ValaCCodeBaseModule*) self, _tmp183_, FALSE);
				_tmp185_ = _tmp184_;
				_tmp186_ = p;
				vala_gtype_module_add_generic_accessor_function (self, _tmp182_, "GDestroyNotify", _tmp185_, _tmp186_, cl, iface);
				_vala_ccode_node_unref0 (_tmp185_);
				_g_free0 (_tmp182_);
				_g_free0 (_tmp180_);
				_vala_code_node_unref0 (p_data_type);
				_vala_code_node_unref0 (p_type);
				_vala_code_node_unref0 (p);
			}
			_vala_iterable_unref0 (_p_list);
		}
	}
	_tmp187_ = vala_class_get_implicit_implementations (cl);
	_tmp188_ = _tmp187_;
	_tmp189_ = vala_map_map_iterator ((ValaMap*) _tmp188_);
	_tmp190_ = _tmp189_;
	_vala_map_unref0 (_tmp188_);
	it = _tmp190_;
	while (TRUE) {
		ValaMapIterator* _tmp191_;
		ValaMethod* m = NULL;
		ValaMapIterator* _tmp192_;
		gpointer _tmp193_;
		ValaMethod* _tmp194_;
		ValaSymbol* _tmp195_;
		ValaSymbol* _tmp196_;
		_tmp191_ = it;
		if (!vala_map_iterator_next (_tmp191_)) {
			break;
		}
		_tmp192_ = it;
		_tmp193_ = vala_map_iterator_get_key (_tmp192_);
		m = (ValaMethod*) _tmp193_;
		_tmp194_ = m;
		_tmp195_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp194_);
		_tmp196_ = _tmp195_;
		if (_tmp196_ == G_TYPE_CHECK_INSTANCE_CAST (iface, VALA_TYPE_SYMBOL, ValaSymbol)) {
			ValaMethod* base_method = NULL;
			ValaMapIterator* _tmp197_;
			gpointer _tmp198_;
			ValaMethod* _tmp199_;
			ValaCCodeFile* _tmp200_;
			ValaCCodeExpression* cfunc = NULL;
			ValaMethod* _tmp201_;
			gchar* _tmp202_;
			gchar* _tmp203_;
			ValaCCodeIdentifier* _tmp204_;
			ValaCCodeExpression* _tmp205_;
			ValaMethod* _tmp206_;
			ValaCCodeExpression* _tmp207_;
			ValaCCodeExpression* _tmp208_;
			ValaCCodeIdentifier* ciface = NULL;
			ValaCCodeIdentifier* _tmp209_;
			ValaCCodeFunction* _tmp210_;
			ValaCCodeFunction* _tmp211_;
			ValaCCodeIdentifier* _tmp212_;
			ValaMethod* _tmp213_;
			gchar* _tmp214_;
			gchar* _tmp215_;
			ValaCCodeMemberAccess* _tmp216_;
			ValaCCodeMemberAccess* _tmp217_;
			ValaCCodeExpression* _tmp218_;
			_tmp197_ = it;
			_tmp198_ = vala_map_iterator_get_value (_tmp197_);
			base_method = (ValaMethod*) _tmp198_;
			_tmp199_ = base_method;
			_tmp200_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp199_, _tmp200_);
			_tmp201_ = base_method;
			_tmp202_ = vala_get_ccode_name ((ValaCodeNode*) _tmp201_);
			_tmp203_ = _tmp202_;
			_tmp204_ = vala_ccode_identifier_new (_tmp203_);
			_tmp205_ = (ValaCCodeExpression*) _tmp204_;
			_g_free0 (_tmp203_);
			cfunc = _tmp205_;
			_tmp206_ = m;
			_tmp207_ = cfunc;
			_tmp208_ = vala_gtype_module_cast_method_pointer (self, _tmp206_, _tmp207_, (ValaObjectTypeSymbol*) iface, 3);
			_vala_ccode_node_unref0 (cfunc);
			cfunc = _tmp208_;
			_tmp209_ = vala_ccode_identifier_new ("iface");
			ciface = _tmp209_;
			_tmp210_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp211_ = _tmp210_;
			_tmp212_ = ciface;
			_tmp213_ = m;
			_tmp214_ = vala_get_ccode_vfunc_name (_tmp213_);
			_tmp215_ = _tmp214_;
			_tmp216_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp212_, _tmp215_);
			_tmp217_ = _tmp216_;
			_tmp218_ = cfunc;
			vala_ccode_function_add_assignment (_tmp211_, (ValaCCodeExpression*) _tmp217_, _tmp218_);
			_vala_ccode_node_unref0 (_tmp217_);
			_g_free0 (_tmp215_);
			_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* _tmp219_;
		gint _prop_size = 0;
		ValaList* _tmp220_;
		gint _tmp221_;
		gint _tmp222_;
		gint _prop_index = 0;
		_tmp219_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
		_prop_list = _tmp219_;
		_tmp220_ = _prop_list;
		_tmp221_ = vala_collection_get_size ((ValaCollection*) _tmp220_);
		_tmp222_ = _tmp221_;
		_prop_size = _tmp222_;
		_prop_index = -1;
		while (TRUE) {
			ValaProperty* prop = NULL;
			ValaList* _tmp223_;
			gpointer _tmp224_;
			ValaProperty* _tmp225_;
			ValaProperty* _tmp226_;
			ValaProperty* _tmp227_;
			ValaObjectTypeSymbol* base_type = NULL;
			ValaProperty* _tmp228_;
			ValaProperty* _tmp229_;
			ValaProperty* _tmp230_;
			ValaSymbol* _tmp231_;
			ValaSymbol* _tmp232_;
			ValaObjectTypeSymbol* _tmp233_;
			ValaObjectTypeSymbol* _tmp234_;
			ValaCCodeIdentifier* ciface = NULL;
			ValaCCodeIdentifier* _tmp235_;
			gboolean _tmp236_ = FALSE;
			ValaProperty* _tmp237_;
			ValaProperty* _tmp238_;
			ValaProperty* _tmp239_;
			_prop_index = _prop_index + 1;
			if (!(_prop_index < _prop_size)) {
				break;
			}
			_tmp223_ = _prop_list;
			_tmp224_ = vala_list_get (_tmp223_, _prop_index);
			prop = (ValaProperty*) _tmp224_;
			_tmp225_ = prop;
			_tmp226_ = vala_property_get_base_interface_property (_tmp225_);
			_tmp227_ = _tmp226_;
			if (_tmp227_ == NULL) {
				_vala_code_node_unref0 (prop);
				continue;
			}
			_tmp228_ = prop;
			_tmp229_ = vala_property_get_base_interface_property (_tmp228_);
			_tmp230_ = _tmp229_;
			_tmp231_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp230_);
			_tmp232_ = _tmp231_;
			_tmp233_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp232_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
			base_type = _tmp233_;
			_tmp234_ = base_type;
			if (_tmp234_ != G_TYPE_CHECK_INSTANCE_CAST (iface, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol)) {
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (prop);
				continue;
			}
			_tmp235_ = vala_ccode_identifier_new ("iface");
			ciface = _tmp235_;
			_tmp237_ = prop;
			_tmp238_ = vala_property_get_base_interface_property (_tmp237_);
			_tmp239_ = _tmp238_;
			if (!vala_get_ccode_no_accessor_method (_tmp239_)) {
				ValaProperty* _tmp240_;
				ValaProperty* _tmp241_;
				ValaProperty* _tmp242_;
				_tmp240_ = prop;
				_tmp241_ = vala_property_get_base_interface_property (_tmp240_);
				_tmp242_ = _tmp241_;
				_tmp236_ = !vala_get_ccode_concrete_accessor (_tmp242_);
			} else {
				_tmp236_ = FALSE;
			}
			if (_tmp236_) {
				ValaProperty* _tmp243_;
				ValaPropertyAccessor* _tmp244_;
				ValaPropertyAccessor* _tmp245_;
				ValaProperty* _tmp287_;
				ValaPropertyAccessor* _tmp288_;
				ValaPropertyAccessor* _tmp289_;
				_tmp243_ = prop;
				_tmp244_ = vala_property_get_get_accessor (_tmp243_);
				_tmp245_ = _tmp244_;
				if (_tmp245_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp246_;
					ValaPropertyAccessor* _tmp247_;
					ValaPropertyAccessor* _tmp248_;
					gchar* _tmp249_;
					gboolean _tmp250_ = FALSE;
					ValaProperty* _tmp251_;
					gboolean _tmp252_;
					gboolean _tmp253_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp261_;
					ValaCCodeIdentifier* _tmp262_;
					gboolean _tmp263_ = FALSE;
					ValaProperty* _tmp264_;
					gboolean _tmp265_;
					gboolean _tmp266_;
					ValaCCodeFunction* _tmp276_;
					ValaCCodeFunction* _tmp277_;
					ValaCCodeIdentifier* _tmp278_;
					ValaProperty* _tmp279_;
					const gchar* _tmp280_;
					const gchar* _tmp281_;
					gchar* _tmp282_;
					gchar* _tmp283_;
					ValaCCodeMemberAccess* _tmp284_;
					ValaCCodeMemberAccess* _tmp285_;
					ValaCCodeExpression* _tmp286_;
					_tmp246_ = prop;
					_tmp247_ = vala_property_get_get_accessor (_tmp246_);
					_tmp248_ = _tmp247_;
					_tmp249_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp248_);
					cname = _tmp249_;
					_tmp251_ = prop;
					_tmp252_ = vala_property_get_is_abstract (_tmp251_);
					_tmp253_ = _tmp252_;
					if (_tmp253_) {
						_tmp250_ = TRUE;
					} else {
						ValaProperty* _tmp254_;
						gboolean _tmp255_;
						gboolean _tmp256_;
						_tmp254_ = prop;
						_tmp255_ = vala_property_get_is_virtual (_tmp254_);
						_tmp256_ = _tmp255_;
						_tmp250_ = _tmp256_;
					}
					if (_tmp250_) {
						ValaProperty* _tmp257_;
						ValaPropertyAccessor* _tmp258_;
						ValaPropertyAccessor* _tmp259_;
						gchar* _tmp260_;
						_tmp257_ = prop;
						_tmp258_ = vala_property_get_get_accessor (_tmp257_);
						_tmp259_ = _tmp258_;
						_tmp260_ = vala_get_ccode_name ((ValaCodeNode*) _tmp259_);
						_g_free0 (cname);
						cname = _tmp260_;
					}
					_tmp261_ = cname;
					_tmp262_ = vala_ccode_identifier_new (_tmp261_);
					cfunc = (ValaCCodeExpression*) _tmp262_;
					_tmp264_ = prop;
					_tmp265_ = vala_property_get_is_abstract (_tmp264_);
					_tmp266_ = _tmp265_;
					if (_tmp266_) {
						_tmp263_ = TRUE;
					} else {
						ValaProperty* _tmp267_;
						gboolean _tmp268_;
						gboolean _tmp269_;
						_tmp267_ = prop;
						_tmp268_ = vala_property_get_is_virtual (_tmp267_);
						_tmp269_ = _tmp268_;
						_tmp263_ = _tmp269_;
					}
					if (_tmp263_) {
						ValaProperty* _tmp270_;
						ValaPropertyAccessor* _tmp271_;
						ValaPropertyAccessor* _tmp272_;
						ValaCCodeExpression* _tmp273_;
						ValaObjectTypeSymbol* _tmp274_;
						ValaCCodeExpression* _tmp275_;
						_tmp270_ = prop;
						_tmp271_ = vala_property_get_get_accessor (_tmp270_);
						_tmp272_ = _tmp271_;
						_tmp273_ = cfunc;
						_tmp274_ = base_type;
						_tmp275_ = vala_gtype_module_cast_property_accessor_pointer (self, _tmp272_, _tmp273_, _tmp274_);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp275_;
					}
					_tmp276_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp277_ = _tmp276_;
					_tmp278_ = ciface;
					_tmp279_ = prop;
					_tmp280_ = vala_symbol_get_name ((ValaSymbol*) _tmp279_);
					_tmp281_ = _tmp280_;
					_tmp282_ = g_strdup_printf ("get_%s", _tmp281_);
					_tmp283_ = _tmp282_;
					_tmp284_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp278_, _tmp283_);
					_tmp285_ = _tmp284_;
					_tmp286_ = cfunc;
					vala_ccode_function_add_assignment (_tmp277_, (ValaCCodeExpression*) _tmp285_, _tmp286_);
					_vala_ccode_node_unref0 (_tmp285_);
					_g_free0 (_tmp283_);
					_vala_ccode_node_unref0 (cfunc);
					_g_free0 (cname);
				}
				_tmp287_ = prop;
				_tmp288_ = vala_property_get_set_accessor (_tmp287_);
				_tmp289_ = _tmp288_;
				if (_tmp289_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp290_;
					ValaPropertyAccessor* _tmp291_;
					ValaPropertyAccessor* _tmp292_;
					gchar* _tmp293_;
					gboolean _tmp294_ = FALSE;
					ValaProperty* _tmp295_;
					gboolean _tmp296_;
					gboolean _tmp297_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp305_;
					ValaCCodeIdentifier* _tmp306_;
					gboolean _tmp307_ = FALSE;
					ValaProperty* _tmp308_;
					gboolean _tmp309_;
					gboolean _tmp310_;
					ValaCCodeFunction* _tmp320_;
					ValaCCodeFunction* _tmp321_;
					ValaCCodeIdentifier* _tmp322_;
					ValaProperty* _tmp323_;
					const gchar* _tmp324_;
					const gchar* _tmp325_;
					gchar* _tmp326_;
					gchar* _tmp327_;
					ValaCCodeMemberAccess* _tmp328_;
					ValaCCodeMemberAccess* _tmp329_;
					ValaCCodeExpression* _tmp330_;
					_tmp290_ = prop;
					_tmp291_ = vala_property_get_set_accessor (_tmp290_);
					_tmp292_ = _tmp291_;
					_tmp293_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp292_);
					cname = _tmp293_;
					_tmp295_ = prop;
					_tmp296_ = vala_property_get_is_abstract (_tmp295_);
					_tmp297_ = _tmp296_;
					if (_tmp297_) {
						_tmp294_ = TRUE;
					} else {
						ValaProperty* _tmp298_;
						gboolean _tmp299_;
						gboolean _tmp300_;
						_tmp298_ = prop;
						_tmp299_ = vala_property_get_is_virtual (_tmp298_);
						_tmp300_ = _tmp299_;
						_tmp294_ = _tmp300_;
					}
					if (_tmp294_) {
						ValaProperty* _tmp301_;
						ValaPropertyAccessor* _tmp302_;
						ValaPropertyAccessor* _tmp303_;
						gchar* _tmp304_;
						_tmp301_ = prop;
						_tmp302_ = vala_property_get_set_accessor (_tmp301_);
						_tmp303_ = _tmp302_;
						_tmp304_ = vala_get_ccode_name ((ValaCodeNode*) _tmp303_);
						_g_free0 (cname);
						cname = _tmp304_;
					}
					_tmp305_ = cname;
					_tmp306_ = vala_ccode_identifier_new (_tmp305_);
					cfunc = (ValaCCodeExpression*) _tmp306_;
					_tmp308_ = prop;
					_tmp309_ = vala_property_get_is_abstract (_tmp308_);
					_tmp310_ = _tmp309_;
					if (_tmp310_) {
						_tmp307_ = TRUE;
					} else {
						ValaProperty* _tmp311_;
						gboolean _tmp312_;
						gboolean _tmp313_;
						_tmp311_ = prop;
						_tmp312_ = vala_property_get_is_virtual (_tmp311_);
						_tmp313_ = _tmp312_;
						_tmp307_ = _tmp313_;
					}
					if (_tmp307_) {
						ValaProperty* _tmp314_;
						ValaPropertyAccessor* _tmp315_;
						ValaPropertyAccessor* _tmp316_;
						ValaCCodeExpression* _tmp317_;
						ValaObjectTypeSymbol* _tmp318_;
						ValaCCodeExpression* _tmp319_;
						_tmp314_ = prop;
						_tmp315_ = vala_property_get_set_accessor (_tmp314_);
						_tmp316_ = _tmp315_;
						_tmp317_ = cfunc;
						_tmp318_ = base_type;
						_tmp319_ = vala_gtype_module_cast_property_accessor_pointer (self, _tmp316_, _tmp317_, _tmp318_);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp319_;
					}
					_tmp320_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp321_ = _tmp320_;
					_tmp322_ = ciface;
					_tmp323_ = prop;
					_tmp324_ = vala_symbol_get_name ((ValaSymbol*) _tmp323_);
					_tmp325_ = _tmp324_;
					_tmp326_ = g_strdup_printf ("set_%s", _tmp325_);
					_tmp327_ = _tmp326_;
					_tmp328_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp322_, _tmp327_);
					_tmp329_ = _tmp328_;
					_tmp330_ = cfunc;
					vala_ccode_function_add_assignment (_tmp321_, (ValaCCodeExpression*) _tmp329_, _tmp330_);
					_vala_ccode_node_unref0 (_tmp329_);
					_g_free0 (_tmp327_);
					_vala_ccode_node_unref0 (cfunc);
					_g_free0 (cname);
				}
			}
			_vala_ccode_node_unref0 (ciface);
			_vala_code_node_unref0 (base_type);
			_vala_code_node_unref0 (prop);
		}
		_vala_iterable_unref0 (_prop_list);
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp331_;
		gint _prop_size = 0;
		ValaList* _tmp332_;
		gint _tmp333_;
		gint _tmp334_;
		gint _prop_index = 0;
		_tmp331_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) iface);
		_prop_list = _tmp331_;
		_tmp332_ = _prop_list;
		_tmp333_ = vala_collection_get_size ((ValaCollection*) _tmp332_);
		_tmp334_ = _tmp333_;
		_prop_size = _tmp334_;
		_prop_index = -1;
		while (TRUE) {
			ValaProperty* prop = NULL;
			ValaList* _tmp335_;
			gpointer _tmp336_;
			ValaProperty* _tmp337_;
			gboolean _tmp338_;
			gboolean _tmp339_;
			ValaProperty* cl_prop = NULL;
			ValaClass* base_class = NULL;
			ValaClass* _tmp340_;
			gboolean _tmp356_ = FALSE;
			ValaClass* _tmp357_;
			_prop_index = _prop_index + 1;
			if (!(_prop_index < _prop_size)) {
				break;
			}
			_tmp335_ = _prop_list;
			_tmp336_ = vala_list_get (_tmp335_, _prop_index);
			prop = (ValaProperty*) _tmp336_;
			_tmp337_ = prop;
			_tmp338_ = vala_property_get_is_abstract (_tmp337_);
			_tmp339_ = _tmp338_;
			if (!_tmp339_) {
				_vala_code_node_unref0 (prop);
				continue;
			}
			cl_prop = NULL;
			_tmp340_ = _vala_code_node_ref0 (cl);
			base_class = _tmp340_;
			while (TRUE) {
				gboolean _tmp341_ = FALSE;
				ValaClass* _tmp342_;
				ValaClass* _tmp344_;
				ValaScope* _tmp345_;
				ValaScope* _tmp346_;
				ValaProperty* _tmp347_;
				const gchar* _tmp348_;
				const gchar* _tmp349_;
				ValaSymbol* _tmp350_;
				ValaProperty* _tmp351_;
				ValaClass* _tmp352_;
				ValaClass* _tmp353_;
				ValaClass* _tmp354_;
				ValaClass* _tmp355_;
				_tmp342_ = base_class;
				if (_tmp342_ != NULL) {
					ValaProperty* _tmp343_;
					_tmp343_ = cl_prop;
					_tmp341_ = _tmp343_ == NULL;
				} else {
					_tmp341_ = FALSE;
				}
				if (!_tmp341_) {
					break;
				}
				_tmp344_ = base_class;
				_tmp345_ = vala_symbol_get_scope ((ValaSymbol*) _tmp344_);
				_tmp346_ = _tmp345_;
				_tmp347_ = prop;
				_tmp348_ = vala_symbol_get_name ((ValaSymbol*) _tmp347_);
				_tmp349_ = _tmp348_;
				_tmp350_ = vala_scope_lookup (_tmp346_, _tmp349_);
				_tmp351_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp350_, VALA_TYPE_PROPERTY) ? ((ValaProperty*) _tmp350_) : NULL;
				if (_tmp351_ == NULL) {
					_vala_code_node_unref0 (_tmp350_);
				}
				_vala_code_node_unref0 (cl_prop);
				cl_prop = _tmp351_;
				_tmp352_ = base_class;
				_tmp353_ = vala_class_get_base_class (_tmp352_);
				_tmp354_ = _tmp353_;
				_tmp355_ = _vala_code_node_ref0 (_tmp354_);
				_vala_code_node_unref0 (base_class);
				base_class = _tmp355_;
			}
			_tmp357_ = base_class;
			if (_tmp357_ != NULL) {
				ValaProperty* _tmp358_;
				ValaSymbol* _tmp359_;
				ValaSymbol* _tmp360_;
				_tmp358_ = cl_prop;
				_tmp359_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp358_);
				_tmp360_ = _tmp359_;
				_tmp356_ = _tmp360_ != G_TYPE_CHECK_INSTANCE_CAST (cl, VALA_TYPE_SYMBOL, ValaSymbol);
			} else {
				_tmp356_ = FALSE;
			}
			if (_tmp356_) {
				ValaProperty* base_property = NULL;
				ValaProperty* _tmp361_;
				ValaProperty* _tmp362_;
				ValaProperty* _tmp363_;
				ValaProperty* _tmp364_;
				ValaProperty* _tmp365_;
				ValaCCodeIdentifier* ciface = NULL;
				ValaCCodeIdentifier* _tmp377_;
				gboolean _tmp378_ = FALSE;
				ValaProperty* _tmp379_;
				ValaPropertyAccessor* _tmp380_;
				ValaPropertyAccessor* _tmp381_;
				gboolean _tmp411_ = FALSE;
				ValaProperty* _tmp412_;
				ValaPropertyAccessor* _tmp413_;
				ValaPropertyAccessor* _tmp414_;
				_tmp361_ = cl_prop;
				_tmp362_ = _vala_code_node_ref0 (_tmp361_);
				base_property = _tmp362_;
				_tmp363_ = cl_prop;
				_tmp364_ = vala_property_get_base_property (_tmp363_);
				_tmp365_ = _tmp364_;
				if (_tmp365_ != NULL) {
					ValaProperty* _tmp366_;
					ValaProperty* _tmp367_;
					ValaProperty* _tmp368_;
					ValaProperty* _tmp369_;
					_tmp366_ = cl_prop;
					_tmp367_ = vala_property_get_base_property (_tmp366_);
					_tmp368_ = _tmp367_;
					_tmp369_ = _vala_code_node_ref0 (_tmp368_);
					_vala_code_node_unref0 (base_property);
					base_property = _tmp369_;
				} else {
					ValaProperty* _tmp370_;
					ValaProperty* _tmp371_;
					ValaProperty* _tmp372_;
					_tmp370_ = cl_prop;
					_tmp371_ = vala_property_get_base_interface_property (_tmp370_);
					_tmp372_ = _tmp371_;
					if (_tmp372_ != NULL) {
						ValaProperty* _tmp373_;
						ValaProperty* _tmp374_;
						ValaProperty* _tmp375_;
						ValaProperty* _tmp376_;
						_tmp373_ = cl_prop;
						_tmp374_ = vala_property_get_base_interface_property (_tmp373_);
						_tmp375_ = _tmp374_;
						_tmp376_ = _vala_code_node_ref0 (_tmp375_);
						_vala_code_node_unref0 (base_property);
						base_property = _tmp376_;
					}
				}
				_tmp377_ = vala_ccode_identifier_new ("iface");
				ciface = _tmp377_;
				_tmp379_ = base_property;
				_tmp380_ = vala_property_get_get_accessor (_tmp379_);
				_tmp381_ = _tmp380_;
				if (_tmp381_ != NULL) {
					ValaProperty* _tmp382_;
					ValaPropertyAccessor* _tmp383_;
					ValaPropertyAccessor* _tmp384_;
					_tmp382_ = prop;
					_tmp383_ = vala_property_get_get_accessor (_tmp382_);
					_tmp384_ = _tmp383_;
					_tmp378_ = _tmp384_ != NULL;
				} else {
					_tmp378_ = FALSE;
				}
				if (_tmp378_) {
					ValaProperty* _tmp385_;
					ValaPropertyAccessor* _tmp386_;
					ValaPropertyAccessor* _tmp387_;
					ValaCCodeFile* _tmp388_;
					gchar* cname = NULL;
					ValaProperty* _tmp389_;
					ValaPropertyAccessor* _tmp390_;
					ValaPropertyAccessor* _tmp391_;
					gchar* _tmp392_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp393_;
					ValaCCodeIdentifier* _tmp394_;
					ValaProperty* _tmp395_;
					ValaPropertyAccessor* _tmp396_;
					ValaPropertyAccessor* _tmp397_;
					ValaCCodeExpression* _tmp398_;
					ValaCCodeExpression* _tmp399_;
					ValaCCodeFunction* _tmp400_;
					ValaCCodeFunction* _tmp401_;
					ValaCCodeIdentifier* _tmp402_;
					ValaProperty* _tmp403_;
					const gchar* _tmp404_;
					const gchar* _tmp405_;
					gchar* _tmp406_;
					gchar* _tmp407_;
					ValaCCodeMemberAccess* _tmp408_;
					ValaCCodeMemberAccess* _tmp409_;
					ValaCCodeExpression* _tmp410_;
					_tmp385_ = base_property;
					_tmp386_ = vala_property_get_get_accessor (_tmp385_);
					_tmp387_ = _tmp386_;
					_tmp388_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp387_, _tmp388_);
					_tmp389_ = base_property;
					_tmp390_ = vala_property_get_get_accessor (_tmp389_);
					_tmp391_ = _tmp390_;
					_tmp392_ = vala_get_ccode_name ((ValaCodeNode*) _tmp391_);
					cname = _tmp392_;
					_tmp393_ = cname;
					_tmp394_ = vala_ccode_identifier_new (_tmp393_);
					cfunc = (ValaCCodeExpression*) _tmp394_;
					_tmp395_ = prop;
					_tmp396_ = vala_property_get_get_accessor (_tmp395_);
					_tmp397_ = _tmp396_;
					_tmp398_ = cfunc;
					_tmp399_ = vala_gtype_module_cast_property_accessor_pointer (self, _tmp397_, _tmp398_, (ValaObjectTypeSymbol*) iface);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp399_;
					_tmp400_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp401_ = _tmp400_;
					_tmp402_ = ciface;
					_tmp403_ = prop;
					_tmp404_ = vala_symbol_get_name ((ValaSymbol*) _tmp403_);
					_tmp405_ = _tmp404_;
					_tmp406_ = g_strdup_printf ("get_%s", _tmp405_);
					_tmp407_ = _tmp406_;
					_tmp408_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp402_, _tmp407_);
					_tmp409_ = _tmp408_;
					_tmp410_ = cfunc;
					vala_ccode_function_add_assignment (_tmp401_, (ValaCCodeExpression*) _tmp409_, _tmp410_);
					_vala_ccode_node_unref0 (_tmp409_);
					_g_free0 (_tmp407_);
					_vala_ccode_node_unref0 (cfunc);
					_g_free0 (cname);
				}
				_tmp412_ = base_property;
				_tmp413_ = vala_property_get_set_accessor (_tmp412_);
				_tmp414_ = _tmp413_;
				if (_tmp414_ != NULL) {
					ValaProperty* _tmp415_;
					ValaPropertyAccessor* _tmp416_;
					ValaPropertyAccessor* _tmp417_;
					_tmp415_ = prop;
					_tmp416_ = vala_property_get_set_accessor (_tmp415_);
					_tmp417_ = _tmp416_;
					_tmp411_ = _tmp417_ != NULL;
				} else {
					_tmp411_ = FALSE;
				}
				if (_tmp411_) {
					ValaProperty* _tmp418_;
					ValaPropertyAccessor* _tmp419_;
					ValaPropertyAccessor* _tmp420_;
					ValaCCodeFile* _tmp421_;
					gchar* cname = NULL;
					ValaProperty* _tmp422_;
					ValaPropertyAccessor* _tmp423_;
					ValaPropertyAccessor* _tmp424_;
					gchar* _tmp425_;
					ValaCCodeExpression* cfunc = NULL;
					const gchar* _tmp426_;
					ValaCCodeIdentifier* _tmp427_;
					ValaProperty* _tmp428_;
					ValaPropertyAccessor* _tmp429_;
					ValaPropertyAccessor* _tmp430_;
					ValaCCodeExpression* _tmp431_;
					ValaCCodeExpression* _tmp432_;
					ValaCCodeFunction* _tmp433_;
					ValaCCodeFunction* _tmp434_;
					ValaCCodeIdentifier* _tmp435_;
					ValaProperty* _tmp436_;
					const gchar* _tmp437_;
					const gchar* _tmp438_;
					gchar* _tmp439_;
					gchar* _tmp440_;
					ValaCCodeMemberAccess* _tmp441_;
					ValaCCodeMemberAccess* _tmp442_;
					ValaCCodeExpression* _tmp443_;
					_tmp418_ = base_property;
					_tmp419_ = vala_property_get_set_accessor (_tmp418_);
					_tmp420_ = _tmp419_;
					_tmp421_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp420_, _tmp421_);
					_tmp422_ = base_property;
					_tmp423_ = vala_property_get_set_accessor (_tmp422_);
					_tmp424_ = _tmp423_;
					_tmp425_ = vala_get_ccode_name ((ValaCodeNode*) _tmp424_);
					cname = _tmp425_;
					_tmp426_ = cname;
					_tmp427_ = vala_ccode_identifier_new (_tmp426_);
					cfunc = (ValaCCodeExpression*) _tmp427_;
					_tmp428_ = prop;
					_tmp429_ = vala_property_get_set_accessor (_tmp428_);
					_tmp430_ = _tmp429_;
					_tmp431_ = cfunc;
					_tmp432_ = vala_gtype_module_cast_property_accessor_pointer (self, _tmp430_, _tmp431_, (ValaObjectTypeSymbol*) iface);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp432_;
					_tmp433_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp434_ = _tmp433_;
					_tmp435_ = ciface;
					_tmp436_ = prop;
					_tmp437_ = vala_symbol_get_name ((ValaSymbol*) _tmp436_);
					_tmp438_ = _tmp437_;
					_tmp439_ = g_strdup_printf ("set_%s", _tmp438_);
					_tmp440_ = _tmp439_;
					_tmp441_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp435_, _tmp440_);
					_tmp442_ = _tmp441_;
					_tmp443_ = cfunc;
					vala_ccode_function_add_assignment (_tmp434_, (ValaCCodeExpression*) _tmp442_, _tmp443_);
					_vala_ccode_node_unref0 (_tmp442_);
					_g_free0 (_tmp440_);
					_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_iterable_unref0 (_prop_list);
	}
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp444_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp445_ = iface_init;
	vala_ccode_file_add_function (_tmp444_, _tmp445_);
	_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_property_accessor_pointer (ValaGTypeModule* self,
                                                  ValaPropertyAccessor* acc,
                                                  ValaCCodeExpression* cfunc,
                                                  ValaObjectTypeSymbol* base_type)
{
	gchar* cast = NULL;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_;
	gboolean _tmp2_;
	const gchar* _tmp37_;
	ValaCCodeCastExpression* _tmp38_;
	ValaCCodeExpression* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (acc != NULL, NULL);
	g_return_val_if_fail (cfunc != NULL, NULL);
	g_return_val_if_fail (base_type != NULL, NULL);
	_tmp1_ = vala_property_accessor_get_readable (acc);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		ValaDataType* _tmp3_;
		ValaDataType* _tmp4_;
		_tmp3_ = vala_property_accessor_get_value_type (acc);
		_tmp4_ = _tmp3_;
		_tmp0_ = vala_data_type_is_real_non_null_struct_type (_tmp4_);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gchar* _tmp5_;
		gchar* _tmp6_;
		ValaDataType* _tmp7_;
		ValaDataType* _tmp8_;
		gchar* _tmp9_;
		gchar* _tmp10_;
		gchar* _tmp11_;
		_tmp5_ = vala_get_ccode_name ((ValaCodeNode*) base_type);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_property_accessor_get_value_type (acc);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = g_strdup_printf ("void (*) (%s *, %s *)", _tmp6_, _tmp10_);
		_g_free0 (cast);
		cast = _tmp11_;
		_g_free0 (_tmp10_);
		_g_free0 (_tmp6_);
	} else {
		gboolean _tmp12_;
		gboolean _tmp13_;
		_tmp12_ = vala_property_accessor_get_readable (acc);
		_tmp13_ = _tmp12_;
		if (_tmp13_) {
			ValaDataType* _tmp14_;
			ValaDataType* _tmp15_;
			gchar* _tmp16_;
			gchar* _tmp17_;
			gchar* _tmp18_;
			gchar* _tmp19_;
			gchar* _tmp20_;
			_tmp14_ = vala_property_accessor_get_value_type (acc);
			_tmp15_ = _tmp14_;
			_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) _tmp15_);
			_tmp17_ = _tmp16_;
			_tmp18_ = vala_get_ccode_name ((ValaCodeNode*) base_type);
			_tmp19_ = _tmp18_;
			_tmp20_ = g_strdup_printf ("%s (*) (%s *)", _tmp17_, _tmp19_);
			_g_free0 (cast);
			cast = _tmp20_;
			_g_free0 (_tmp19_);
			_g_free0 (_tmp17_);
		} else {
			ValaDataType* _tmp21_;
			ValaDataType* _tmp22_;
			_tmp21_ = vala_property_accessor_get_value_type (acc);
			_tmp22_ = _tmp21_;
			if (vala_data_type_is_real_non_null_struct_type (_tmp22_)) {
				gchar* _tmp23_;
				gchar* _tmp24_;
				ValaDataType* _tmp25_;
				ValaDataType* _tmp26_;
				gchar* _tmp27_;
				gchar* _tmp28_;
				gchar* _tmp29_;
				_tmp23_ = vala_get_ccode_name ((ValaCodeNode*) base_type);
				_tmp24_ = _tmp23_;
				_tmp25_ = vala_property_accessor_get_value_type (acc);
				_tmp26_ = _tmp25_;
				_tmp27_ = vala_get_ccode_name ((ValaCodeNode*) _tmp26_);
				_tmp28_ = _tmp27_;
				_tmp29_ = g_strdup_printf ("void (*) (%s *, %s *)", _tmp24_, _tmp28_);
				_g_free0 (cast);
				cast = _tmp29_;
				_g_free0 (_tmp28_);
				_g_free0 (_tmp24_);
			} else {
				gchar* _tmp30_;
				gchar* _tmp31_;
				ValaDataType* _tmp32_;
				ValaDataType* _tmp33_;
				gchar* _tmp34_;
				gchar* _tmp35_;
				gchar* _tmp36_;
				_tmp30_ = vala_get_ccode_name ((ValaCodeNode*) base_type);
				_tmp31_ = _tmp30_;
				_tmp32_ = vala_property_accessor_get_value_type (acc);
				_tmp33_ = _tmp32_;
				_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) _tmp33_);
				_tmp35_ = _tmp34_;
				_tmp36_ = g_strdup_printf ("void (*) (%s *, %s)", _tmp31_, _tmp35_);
				_g_free0 (cast);
				cast = _tmp36_;
				_g_free0 (_tmp35_);
				_g_free0 (_tmp31_);
			}
		}
	}
	_tmp37_ = cast;
	_tmp38_ = vala_ccode_cast_expression_new (cfunc, _tmp37_);
	result = (ValaCCodeExpression*) _tmp38_;
	_g_free0 (cast);
	return result;
}

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 = NULL;
	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_;
	ValaClass* _tmp22_;
	ValaClass* _tmp23_;
	gboolean _tmp24_;
	gboolean _tmp25_;
	gboolean _tmp181_ = FALSE;
	gboolean _tmp182_;
	gboolean _tmp183_;
	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_ = vala_class_get_base_class (cl);
	_tmp22_ = _tmp21_;
	_tmp23_ = ((ValaCCodeBaseModule*) self)->gsource_type;
	is_gsource = _tmp22_ == _tmp23_;
	_tmp24_ = vala_class_get_is_compact (cl);
	_tmp25_ = _tmp24_;
	if (_tmp25_) {
		ValaCCodeFile* _tmp26_;
		ValaCCodeFunction* _tmp27_;
		_tmp26_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp27_ = func;
		vala_ccode_file_add_function_declaration (_tmp26_, _tmp27_);
		{
			ValaList* _m_list = NULL;
			ValaList* _tmp28_;
			gint _m_size = 0;
			ValaList* _tmp29_;
			gint _tmp30_;
			gint _tmp31_;
			gint _m_index = 0;
			_tmp28_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
			_m_list = _tmp28_;
			_tmp29_ = _m_list;
			_tmp30_ = vala_collection_get_size ((ValaCollection*) _tmp29_);
			_tmp31_ = _tmp30_;
			_m_size = _tmp31_;
			_m_index = -1;
			while (TRUE) {
				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;
				if (!(_m_index < _m_size)) {
					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_) {
					ValaCCodeExpression* cfunc = NULL;
					ValaMethod* _tmp51_;
					gchar* _tmp52_;
					gchar* _tmp53_;
					ValaCCodeIdentifier* _tmp54_;
					ValaCCodeExpression* _tmp55_;
					gint _tmp56_ = 0;
					ValaMethod* _tmp57_;
					gboolean _tmp58_;
					gboolean _tmp59_;
					ValaMethod* _tmp60_;
					ValaMethod* _tmp61_;
					ValaMethod* _tmp62_;
					ValaCCodeExpression* _tmp63_;
					ValaObjectTypeSymbol* _tmp64_;
					ValaCCodeExpression* _tmp65_;
					ValaCCodeCastExpression* ccast = NULL;
					ValaCCodeIdentifier* _tmp66_;
					ValaCCodeIdentifier* _tmp67_;
					ValaObjectTypeSymbol* _tmp68_;
					gchar* _tmp69_;
					gchar* _tmp70_;
					gchar* _tmp71_;
					gchar* _tmp72_;
					ValaCCodeCastExpression* _tmp73_;
					ValaCCodeCastExpression* _tmp74_;
					ValaCCodeFunction* _tmp75_;
					ValaCCodeCastExpression* _tmp76_;
					ValaMethod* _tmp77_;
					ValaMethod* _tmp78_;
					ValaMethod* _tmp79_;
					gchar* _tmp80_;
					gchar* _tmp81_;
					ValaCCodeMemberAccess* _tmp82_;
					ValaCCodeMemberAccess* _tmp83_;
					ValaCCodeExpression* _tmp84_;
					ValaMethod* _tmp85_;
					gboolean _tmp86_;
					gboolean _tmp87_;
					_tmp51_ = m;
					_tmp52_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp51_);
					_tmp53_ = _tmp52_;
					_tmp54_ = vala_ccode_identifier_new (_tmp53_);
					_tmp55_ = (ValaCCodeExpression*) _tmp54_;
					_g_free0 (_tmp53_);
					cfunc = _tmp55_;
					_tmp57_ = m;
					_tmp58_ = vala_method_get_coroutine (_tmp57_);
					_tmp59_ = _tmp58_;
					if (_tmp59_) {
						_tmp56_ = 1;
					} else {
						_tmp56_ = 3;
					}
					_tmp60_ = m;
					_tmp61_ = vala_method_get_base_method (_tmp60_);
					_tmp62_ = _tmp61_;
					_tmp63_ = cfunc;
					_tmp64_ = base_type;
					_tmp65_ = vala_gtype_module_cast_method_pointer (self, _tmp62_, _tmp63_, _tmp64_, _tmp56_);
					_vala_ccode_node_unref0 (cfunc);
					cfunc = _tmp65_;
					_tmp66_ = vala_ccode_identifier_new ("self");
					_tmp67_ = _tmp66_;
					_tmp68_ = base_type;
					_tmp69_ = vala_get_ccode_name ((ValaCodeNode*) _tmp68_);
					_tmp70_ = _tmp69_;
					_tmp71_ = g_strdup_printf ("%s *", _tmp70_);
					_tmp72_ = _tmp71_;
					_tmp73_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp67_, _tmp72_);
					_tmp74_ = _tmp73_;
					_g_free0 (_tmp72_);
					_g_free0 (_tmp70_);
					_vala_ccode_node_unref0 (_tmp67_);
					ccast = _tmp74_;
					_tmp75_ = func;
					_tmp76_ = ccast;
					_tmp77_ = m;
					_tmp78_ = vala_method_get_base_method (_tmp77_);
					_tmp79_ = _tmp78_;
					_tmp80_ = vala_get_ccode_vfunc_name (_tmp79_);
					_tmp81_ = _tmp80_;
					_tmp82_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp76_, _tmp81_);
					_tmp83_ = _tmp82_;
					_tmp84_ = cfunc;
					vala_ccode_function_add_assignment (_tmp75_, (ValaCCodeExpression*) _tmp83_, _tmp84_);
					_vala_ccode_node_unref0 (_tmp83_);
					_g_free0 (_tmp81_);
					_tmp85_ = m;
					_tmp86_ = vala_method_get_coroutine (_tmp85_);
					_tmp87_ = _tmp86_;
					if (_tmp87_) {
						ValaMethod* _tmp88_;
						gchar* _tmp89_;
						gchar* _tmp90_;
						ValaCCodeIdentifier* _tmp91_;
						ValaMethod* _tmp92_;
						ValaMethod* _tmp93_;
						ValaMethod* _tmp94_;
						ValaCCodeExpression* _tmp95_;
						ValaObjectTypeSymbol* _tmp96_;
						ValaCCodeExpression* _tmp97_;
						ValaCCodeFunction* _tmp98_;
						ValaCCodeFunction* _tmp99_;
						ValaCCodeCastExpression* _tmp100_;
						ValaMethod* _tmp101_;
						ValaMethod* _tmp102_;
						ValaMethod* _tmp103_;
						gchar* _tmp104_;
						gchar* _tmp105_;
						ValaCCodeMemberAccess* _tmp106_;
						ValaCCodeMemberAccess* _tmp107_;
						ValaCCodeExpression* _tmp108_;
						_tmp88_ = m;
						_tmp89_ = vala_get_ccode_finish_real_name (_tmp88_);
						_tmp90_ = _tmp89_;
						_tmp91_ = vala_ccode_identifier_new (_tmp90_);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = (ValaCCodeExpression*) _tmp91_;
						_g_free0 (_tmp90_);
						_tmp92_ = m;
						_tmp93_ = vala_method_get_base_method (_tmp92_);
						_tmp94_ = _tmp93_;
						_tmp95_ = cfunc;
						_tmp96_ = base_type;
						_tmp97_ = vala_gtype_module_cast_method_pointer (self, _tmp94_, _tmp95_, _tmp96_, 2);
						_vala_ccode_node_unref0 (cfunc);
						cfunc = _tmp97_;
						_tmp98_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp99_ = _tmp98_;
						_tmp100_ = ccast;
						_tmp101_ = m;
						_tmp102_ = vala_method_get_base_method (_tmp101_);
						_tmp103_ = _tmp102_;
						_tmp104_ = vala_get_ccode_finish_vfunc_name (_tmp103_);
						_tmp105_ = _tmp104_;
						_tmp106_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp100_, _tmp105_);
						_tmp107_ = _tmp106_;
						_tmp108_ = cfunc;
						vala_ccode_function_add_assignment (_tmp99_, (ValaCCodeExpression*) _tmp107_, _tmp108_);
						_vala_ccode_node_unref0 (_tmp107_);
						_g_free0 (_tmp105_);
					}
					_vala_ccode_node_unref0 (ccast);
					_vala_ccode_node_unref0 (cfunc);
				}
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (m);
			}
			_vala_iterable_unref0 (_m_list);
		}
		{
			ValaList* _prop_list = NULL;
			ValaList* _tmp109_;
			gint _prop_size = 0;
			ValaList* _tmp110_;
			gint _tmp111_;
			gint _tmp112_;
			gint _prop_index = 0;
			_tmp109_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
			_prop_list = _tmp109_;
			_tmp110_ = _prop_list;
			_tmp111_ = vala_collection_get_size ((ValaCollection*) _tmp110_);
			_tmp112_ = _tmp111_;
			_prop_size = _tmp112_;
			_prop_index = -1;
			while (TRUE) {
				ValaProperty* prop = NULL;
				ValaList* _tmp113_;
				gpointer _tmp114_;
				gboolean _tmp115_ = FALSE;
				ValaProperty* _tmp116_;
				ValaProperty* _tmp117_;
				ValaProperty* _tmp118_;
				ValaSymbol* base_type = NULL;
				ValaProperty* _tmp119_;
				ValaProperty* _tmp120_;
				ValaProperty* _tmp121_;
				ValaSymbol* _tmp122_;
				ValaSymbol* _tmp123_;
				ValaSymbol* _tmp124_;
				ValaCCodeCastExpression* ccast = NULL;
				ValaCCodeIdentifier* _tmp125_;
				ValaCCodeIdentifier* _tmp126_;
				ValaSymbol* _tmp127_;
				gchar* _tmp128_;
				gchar* _tmp129_;
				gchar* _tmp130_;
				gchar* _tmp131_;
				ValaCCodeCastExpression* _tmp132_;
				ValaCCodeCastExpression* _tmp133_;
				gboolean _tmp134_ = FALSE;
				ValaProperty* _tmp135_;
				ValaProperty* _tmp136_;
				ValaProperty* _tmp137_;
				_prop_index = _prop_index + 1;
				if (!(_prop_index < _prop_size)) {
					break;
				}
				_tmp113_ = _prop_list;
				_tmp114_ = vala_list_get (_tmp113_, _prop_index);
				prop = (ValaProperty*) _tmp114_;
				_tmp116_ = prop;
				_tmp117_ = vala_property_get_base_property (_tmp116_);
				_tmp118_ = _tmp117_;
				if (_tmp118_ == NULL) {
					_tmp115_ = TRUE;
				} else {
					_tmp115_ = is_gsource;
				}
				if (_tmp115_) {
					_vala_code_node_unref0 (prop);
					continue;
				}
				_tmp119_ = prop;
				_tmp120_ = vala_property_get_base_property (_tmp119_);
				_tmp121_ = _tmp120_;
				_tmp122_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp121_);
				_tmp123_ = _tmp122_;
				_tmp124_ = _vala_code_node_ref0 (_tmp123_);
				base_type = _tmp124_;
				_tmp125_ = vala_ccode_identifier_new ("self");
				_tmp126_ = _tmp125_;
				_tmp127_ = base_type;
				_tmp128_ = vala_get_ccode_name ((ValaCodeNode*) _tmp127_);
				_tmp129_ = _tmp128_;
				_tmp130_ = g_strdup_printf ("%s *", _tmp129_);
				_tmp131_ = _tmp130_;
				_tmp132_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp126_, _tmp131_);
				_tmp133_ = _tmp132_;
				_g_free0 (_tmp131_);
				_g_free0 (_tmp129_);
				_vala_ccode_node_unref0 (_tmp126_);
				ccast = _tmp133_;
				_tmp135_ = prop;
				_tmp136_ = vala_property_get_base_property (_tmp135_);
				_tmp137_ = _tmp136_;
				if (!vala_get_ccode_no_accessor_method (_tmp137_)) {
					ValaProperty* _tmp138_;
					ValaProperty* _tmp139_;
					ValaProperty* _tmp140_;
					_tmp138_ = prop;
					_tmp139_ = vala_property_get_base_property (_tmp138_);
					_tmp140_ = _tmp139_;
					_tmp134_ = !vala_get_ccode_concrete_accessor (_tmp140_);
				} else {
					_tmp134_ = FALSE;
				}
				if (_tmp134_) {
					ValaProperty* _tmp141_;
					ValaPropertyAccessor* _tmp142_;
					ValaPropertyAccessor* _tmp143_;
					ValaProperty* _tmp161_;
					ValaPropertyAccessor* _tmp162_;
					ValaPropertyAccessor* _tmp163_;
					_tmp141_ = prop;
					_tmp142_ = vala_property_get_get_accessor (_tmp141_);
					_tmp143_ = _tmp142_;
					if (_tmp143_ != NULL) {
						gchar* cname = NULL;
						ValaProperty* _tmp144_;
						ValaPropertyAccessor* _tmp145_;
						ValaPropertyAccessor* _tmp146_;
						gchar* _tmp147_;
						ValaCCodeFunction* _tmp148_;
						ValaCCodeFunction* _tmp149_;
						ValaCCodeCastExpression* _tmp150_;
						ValaProperty* _tmp151_;
						const gchar* _tmp152_;
						const gchar* _tmp153_;
						gchar* _tmp154_;
						gchar* _tmp155_;
						ValaCCodeMemberAccess* _tmp156_;
						ValaCCodeMemberAccess* _tmp157_;
						const gchar* _tmp158_;
						ValaCCodeIdentifier* _tmp159_;
						ValaCCodeIdentifier* _tmp160_;
						_tmp144_ = prop;
						_tmp145_ = vala_property_get_get_accessor (_tmp144_);
						_tmp146_ = _tmp145_;
						_tmp147_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp146_);
						cname = _tmp147_;
						_tmp148_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp149_ = _tmp148_;
						_tmp150_ = ccast;
						_tmp151_ = prop;
						_tmp152_ = vala_symbol_get_name ((ValaSymbol*) _tmp151_);
						_tmp153_ = _tmp152_;
						_tmp154_ = g_strdup_printf ("get_%s", _tmp153_);
						_tmp155_ = _tmp154_;
						_tmp156_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp150_, _tmp155_);
						_tmp157_ = _tmp156_;
						_tmp158_ = cname;
						_tmp159_ = vala_ccode_identifier_new (_tmp158_);
						_tmp160_ = _tmp159_;
						vala_ccode_function_add_assignment (_tmp149_, (ValaCCodeExpression*) _tmp157_, (ValaCCodeExpression*) _tmp160_);
						_vala_ccode_node_unref0 (_tmp160_);
						_vala_ccode_node_unref0 (_tmp157_);
						_g_free0 (_tmp155_);
						_g_free0 (cname);
					}
					_tmp161_ = prop;
					_tmp162_ = vala_property_get_set_accessor (_tmp161_);
					_tmp163_ = _tmp162_;
					if (_tmp163_ != NULL) {
						gchar* cname = NULL;
						ValaProperty* _tmp164_;
						ValaPropertyAccessor* _tmp165_;
						ValaPropertyAccessor* _tmp166_;
						gchar* _tmp167_;
						ValaCCodeFunction* _tmp168_;
						ValaCCodeFunction* _tmp169_;
						ValaCCodeCastExpression* _tmp170_;
						ValaProperty* _tmp171_;
						const gchar* _tmp172_;
						const gchar* _tmp173_;
						gchar* _tmp174_;
						gchar* _tmp175_;
						ValaCCodeMemberAccess* _tmp176_;
						ValaCCodeMemberAccess* _tmp177_;
						const gchar* _tmp178_;
						ValaCCodeIdentifier* _tmp179_;
						ValaCCodeIdentifier* _tmp180_;
						_tmp164_ = prop;
						_tmp165_ = vala_property_get_set_accessor (_tmp164_);
						_tmp166_ = _tmp165_;
						_tmp167_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp166_);
						cname = _tmp167_;
						_tmp168_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp169_ = _tmp168_;
						_tmp170_ = ccast;
						_tmp171_ = prop;
						_tmp172_ = vala_symbol_get_name ((ValaSymbol*) _tmp171_);
						_tmp173_ = _tmp172_;
						_tmp174_ = g_strdup_printf ("set_%s", _tmp173_);
						_tmp175_ = _tmp174_;
						_tmp176_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp170_, _tmp175_);
						_tmp177_ = _tmp176_;
						_tmp178_ = cname;
						_tmp179_ = vala_ccode_identifier_new (_tmp178_);
						_tmp180_ = _tmp179_;
						vala_ccode_function_add_assignment (_tmp169_, (ValaCCodeExpression*) _tmp177_, (ValaCCodeExpression*) _tmp180_);
						_vala_ccode_node_unref0 (_tmp180_);
						_vala_ccode_node_unref0 (_tmp177_);
						_g_free0 (_tmp175_);
						_g_free0 (cname);
					}
				}
				_vala_ccode_node_unref0 (ccast);
				_vala_code_node_unref0 (base_type);
				_vala_code_node_unref0 (prop);
			}
			_vala_iterable_unref0 (_prop_list);
		}
	}
	_tmp182_ = vala_class_get_is_compact (cl);
	_tmp183_ = _tmp182_;
	if (!_tmp183_) {
		gboolean _tmp184_ = FALSE;
		gboolean _tmp185_;
		gboolean _tmp186_;
		_tmp185_ = vala_class_get_has_private_fields (cl);
		_tmp186_ = _tmp185_;
		if (_tmp186_) {
			_tmp184_ = TRUE;
		} else {
			_tmp184_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) cl);
		}
		_tmp181_ = _tmp184_;
	} else {
		_tmp181_ = FALSE;
	}
	if (_tmp181_) {
		ValaCCodeFunctionCall* ccall = NULL;
		gchar* _tmp187_;
		gchar* _tmp188_;
		gchar* _tmp189_;
		gchar* _tmp190_;
		ValaCCodeIdentifier* _tmp191_;
		ValaCCodeIdentifier* _tmp192_;
		ValaCCodeFunctionCall* _tmp193_;
		ValaCCodeFunctionCall* _tmp194_;
		ValaCCodeFunctionCall* _tmp195_;
		ValaCCodeIdentifier* _tmp196_;
		ValaCCodeIdentifier* _tmp197_;
		ValaCCodeFunction* _tmp198_;
		ValaCCodeIdentifier* _tmp199_;
		ValaCCodeIdentifier* _tmp200_;
		ValaCCodeMemberAccess* _tmp201_;
		ValaCCodeMemberAccess* _tmp202_;
		ValaCCodeFunctionCall* _tmp203_;
		_tmp187_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
		_tmp188_ = _tmp187_;
		_tmp189_ = g_strdup_printf ("%s_get_instance_private", _tmp188_);
		_tmp190_ = _tmp189_;
		_tmp191_ = vala_ccode_identifier_new (_tmp190_);
		_tmp192_ = _tmp191_;
		_tmp193_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp192_);
		_tmp194_ = _tmp193_;
		_vala_ccode_node_unref0 (_tmp192_);
		_g_free0 (_tmp190_);
		_g_free0 (_tmp188_);
		ccall = _tmp194_;
		_tmp195_ = ccall;
		_tmp196_ = vala_ccode_identifier_new ("self");
		_tmp197_ = _tmp196_;
		vala_ccode_function_call_add_argument (_tmp195_, (ValaCCodeExpression*) _tmp197_);
		_vala_ccode_node_unref0 (_tmp197_);
		_tmp198_ = func;
		_tmp199_ = vala_ccode_identifier_new ("self");
		_tmp200_ = _tmp199_;
		_tmp201_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp200_, "priv");
		_tmp202_ = _tmp201_;
		_tmp203_ = ccall;
		vala_ccode_function_add_assignment (_tmp198_, (ValaCCodeExpression*) _tmp202_, (ValaCCodeExpression*) _tmp203_);
		_vala_ccode_node_unref0 (_tmp202_);
		_vala_ccode_node_unref0 (_tmp200_);
		_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_name ((ValaCodeNode*) cl);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%sClass *", _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_;
		_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);
	}
	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_name ((ValaCodeNode*) cl);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%sClass *", _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_;
		_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);
	}
	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_;
	ValaClass* _tmp2_;
	ValaClass* _tmp3_;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_;
	gboolean _tmp6_;
	ValaDestructor* _tmp94_;
	ValaDestructor* _tmp95_;
	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_ = vala_class_get_base_class (cl);
	_tmp2_ = _tmp1_;
	_tmp3_ = ((ValaCCodeBaseModule*) self)->gsource_type;
	is_gsource = _tmp2_ == _tmp3_;
	_tmp5_ = vala_class_get_is_compact (cl);
	_tmp6_ = _tmp5_;
	if (!_tmp6_) {
		_tmp4_ = TRUE;
	} else {
		_tmp4_ = is_gsource;
	}
	if (_tmp4_) {
		ValaClass* fundamental_class = NULL;
		ValaClass* _tmp7_;
		ValaCCodeFunction* func = NULL;
		gchar* _tmp15_;
		gchar* _tmp16_;
		gchar* _tmp17_;
		gchar* _tmp18_;
		ValaCCodeFunction* _tmp19_;
		ValaCCodeFunction* _tmp20_;
		ValaCCodeFunction* _tmp21_;
		ValaClass* _tmp22_;
		gchar* _tmp23_;
		gchar* _tmp24_;
		gchar* _tmp25_;
		gchar* _tmp26_;
		ValaCCodeParameter* _tmp27_;
		ValaCCodeParameter* _tmp28_;
		ValaCCodeFunction* _tmp29_;
		ValaCCodeFunction* _tmp30_;
		ValaCCodeExpression* ccast = NULL;
		gboolean _tmp33_;
		gboolean _tmp34_;
		ValaCCodeFunction* _tmp45_;
		ValaCCodeFunction* _tmp46_;
		gchar* _tmp47_;
		gchar* _tmp48_;
		gchar* _tmp49_;
		gchar* _tmp50_;
		ValaCCodeVariableDeclarator* _tmp51_;
		ValaCCodeVariableDeclarator* _tmp52_;
		ValaCCodeFunction* _tmp53_;
		ValaCCodeFunction* _tmp54_;
		ValaCCodeIdentifier* _tmp55_;
		ValaCCodeIdentifier* _tmp56_;
		ValaCCodeExpression* _tmp57_;
		gboolean _tmp58_ = FALSE;
		gboolean _tmp59_;
		gboolean _tmp60_;
		_tmp7_ = _vala_code_node_ref0 (cl);
		fundamental_class = _tmp7_;
		while (TRUE) {
			ValaClass* _tmp8_;
			ValaClass* _tmp9_;
			ValaClass* _tmp10_;
			ValaClass* _tmp11_;
			ValaClass* _tmp12_;
			ValaClass* _tmp13_;
			ValaClass* _tmp14_;
			_tmp8_ = fundamental_class;
			_tmp9_ = vala_class_get_base_class (_tmp8_);
			_tmp10_ = _tmp9_;
			if (!(_tmp10_ != NULL)) {
				break;
			}
			_tmp11_ = fundamental_class;
			_tmp12_ = vala_class_get_base_class (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = _vala_code_node_ref0 (_tmp13_);
			_vala_code_node_unref0 (fundamental_class);
			fundamental_class = _tmp14_;
		}
		_tmp15_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
		_tmp16_ = _tmp15_;
		_tmp17_ = g_strdup_printf ("%s_finalize", _tmp16_);
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_ccode_function_new (_tmp18_, "void");
		_tmp20_ = _tmp19_;
		_g_free0 (_tmp18_);
		_g_free0 (_tmp16_);
		func = _tmp20_;
		_tmp21_ = func;
		_tmp22_ = fundamental_class;
		_tmp23_ = vala_get_ccode_name ((ValaCodeNode*) _tmp22_);
		_tmp24_ = _tmp23_;
		_tmp25_ = g_strdup_printf ("%s *", _tmp24_);
		_tmp26_ = _tmp25_;
		_tmp27_ = vala_ccode_parameter_new ("obj", _tmp26_);
		_tmp28_ = _tmp27_;
		vala_ccode_function_add_parameter (_tmp21_, _tmp28_);
		_vala_ccode_node_unref0 (_tmp28_);
		_g_free0 (_tmp26_);
		_g_free0 (_tmp24_);
		_tmp29_ = func;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp29_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp30_ = func;
		vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp30_);
		if (is_gsource) {
			ValaCCodeFile* _tmp31_;
			ValaCCodeFunction* _tmp32_;
			_tmp31_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp32_ = func;
			vala_ccode_file_add_function_declaration (_tmp31_, _tmp32_);
		}
		_tmp33_ = vala_class_get_is_compact (cl);
		_tmp34_ = _tmp33_;
		if (!_tmp34_) {
			ValaCCodeIdentifier* _tmp35_;
			ValaCCodeIdentifier* _tmp36_;
			ValaCCodeFunctionCall* _tmp37_;
			_tmp35_ = vala_ccode_identifier_new ("obj");
			_tmp36_ = _tmp35_;
			_tmp37_ = vala_ccode_base_module_generate_instance_cast ((ValaCCodeBaseModule*) self, (ValaCCodeExpression*) _tmp36_, (ValaTypeSymbol*) cl);
			_vala_ccode_node_unref0 (ccast);
			ccast = (ValaCCodeExpression*) _tmp37_;
			_vala_ccode_node_unref0 (_tmp36_);
		} else {
			ValaCCodeIdentifier* _tmp38_;
			ValaCCodeIdentifier* _tmp39_;
			gchar* _tmp40_;
			gchar* _tmp41_;
			gchar* _tmp42_;
			gchar* _tmp43_;
			ValaCCodeCastExpression* _tmp44_;
			_tmp38_ = vala_ccode_identifier_new ("obj");
			_tmp39_ = _tmp38_;
			_tmp40_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp41_ = _tmp40_;
			_tmp42_ = g_strdup_printf ("%s *", _tmp41_);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp39_, _tmp43_);
			_vala_ccode_node_unref0 (ccast);
			ccast = (ValaCCodeExpression*) _tmp44_;
			_g_free0 (_tmp43_);
			_g_free0 (_tmp41_);
			_vala_ccode_node_unref0 (_tmp39_);
		}
		_tmp45_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp46_ = _tmp45_;
		_tmp47_ = vala_get_ccode_name ((ValaCodeNode*) cl);
		_tmp48_ = _tmp47_;
		_tmp49_ = g_strdup_printf ("%s *", _tmp48_);
		_tmp50_ = _tmp49_;
		_tmp51_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
		_tmp52_ = _tmp51_;
		vala_ccode_function_add_declaration (_tmp46_, _tmp50_, (ValaCCodeDeclarator*) _tmp52_, 0);
		_vala_ccode_node_unref0 (_tmp52_);
		_g_free0 (_tmp50_);
		_g_free0 (_tmp48_);
		_tmp53_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp54_ = _tmp53_;
		_tmp55_ = vala_ccode_identifier_new ("self");
		_tmp56_ = _tmp55_;
		_tmp57_ = ccast;
		vala_ccode_function_add_assignment (_tmp54_, (ValaCCodeExpression*) _tmp56_, _tmp57_);
		_vala_ccode_node_unref0 (_tmp56_);
		_tmp59_ = vala_class_get_is_compact (cl);
		_tmp60_ = _tmp59_;
		if (!_tmp60_) {
			ValaClass* _tmp61_;
			ValaClass* _tmp62_;
			_tmp61_ = vala_class_get_base_class (cl);
			_tmp62_ = _tmp61_;
			_tmp58_ = _tmp62_ == NULL;
		} else {
			_tmp58_ = FALSE;
		}
		if (_tmp58_) {
			ValaCCodeFunctionCall* call = NULL;
			ValaCCodeIdentifier* _tmp63_;
			ValaCCodeIdentifier* _tmp64_;
			ValaCCodeFunctionCall* _tmp65_;
			ValaCCodeFunctionCall* _tmp66_;
			ValaCCodeFunctionCall* _tmp67_;
			ValaCCodeIdentifier* _tmp68_;
			ValaCCodeIdentifier* _tmp69_;
			ValaCCodeFunction* _tmp70_;
			ValaCCodeFunction* _tmp71_;
			ValaCCodeFunctionCall* _tmp72_;
			_tmp63_ = vala_ccode_identifier_new ("g_signal_handlers_destroy");
			_tmp64_ = _tmp63_;
			_tmp65_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp64_);
			_tmp66_ = _tmp65_;
			_vala_ccode_node_unref0 (_tmp64_);
			call = _tmp66_;
			_tmp67_ = call;
			_tmp68_ = vala_ccode_identifier_new ("self");
			_tmp69_ = _tmp68_;
			vala_ccode_function_call_add_argument (_tmp67_, (ValaCCodeExpression*) _tmp69_);
			_vala_ccode_node_unref0 (_tmp69_);
			_tmp70_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp71_ = _tmp70_;
			_tmp72_ = call;
			vala_ccode_function_add_expression (_tmp71_, (ValaCCodeExpression*) _tmp72_);
			_vala_ccode_node_unref0 (call);
		}
		_vala_ccode_node_unref0 (ccast);
		_vala_ccode_node_unref0 (func);
		_vala_code_node_unref0 (fundamental_class);
	} else {
		ValaClass* _tmp73_;
		ValaClass* _tmp74_;
		_tmp73_ = vala_class_get_base_class (cl);
		_tmp74_ = _tmp73_;
		if (_tmp74_ == NULL) {
			ValaCCodeFunction* function = NULL;
			gchar* _tmp75_;
			gchar* _tmp76_;
			ValaCCodeFunction* _tmp77_;
			ValaCCodeFunction* _tmp78_;
			ValaCCodeFunction* _tmp86_;
			gchar* _tmp87_;
			gchar* _tmp88_;
			gchar* _tmp89_;
			gchar* _tmp90_;
			ValaCCodeParameter* _tmp91_;
			ValaCCodeParameter* _tmp92_;
			ValaCCodeFunction* _tmp93_;
			_tmp75_ = vala_get_ccode_free_function ((ValaTypeSymbol*) cl);
			_tmp76_ = _tmp75_;
			_tmp77_ = vala_ccode_function_new (_tmp76_, "void");
			_tmp78_ = _tmp77_;
			_g_free0 (_tmp76_);
			function = _tmp78_;
			if (vala_symbol_is_private_symbol ((ValaSymbol*) cl)) {
				ValaCCodeFunction* _tmp79_;
				_tmp79_ = function;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp79_, VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp80_ = FALSE;
				ValaCodeContext* _tmp81_;
				ValaCodeContext* _tmp82_;
				gboolean _tmp83_;
				gboolean _tmp84_;
				_tmp81_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp82_ = _tmp81_;
				_tmp83_ = vala_code_context_get_hide_internal (_tmp82_);
				_tmp84_ = _tmp83_;
				if (_tmp84_) {
					_tmp80_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
				} else {
					_tmp80_ = FALSE;
				}
				if (_tmp80_) {
					ValaCCodeFunction* _tmp85_;
					_tmp85_ = function;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp85_, VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp86_ = function;
			_tmp87_ = vala_get_ccode_name ((ValaCodeNode*) cl);
			_tmp88_ = _tmp87_;
			_tmp89_ = g_strdup_printf ("%s *", _tmp88_);
			_tmp90_ = _tmp89_;
			_tmp91_ = vala_ccode_parameter_new ("self", _tmp90_);
			_tmp92_ = _tmp91_;
			vala_ccode_function_add_parameter (_tmp86_, _tmp92_);
			_vala_ccode_node_unref0 (_tmp92_);
			_g_free0 (_tmp90_);
			_g_free0 (_tmp88_);
			_tmp93_ = function;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp93_);
			_vala_ccode_node_unref0 (function);
		}
	}
	_tmp94_ = vala_class_get_destructor (cl);
	_tmp95_ = _tmp94_;
	if (_tmp95_ != NULL) {
		ValaDestructor* _tmp96_;
		ValaDestructor* _tmp97_;
		ValaBlock* _tmp98_;
		ValaBlock* _tmp99_;
		gboolean _tmp100_;
		gboolean _tmp101_;
		gboolean _tmp112_;
		gboolean _tmp113_;
		_tmp96_ = vala_class_get_destructor (cl);
		_tmp97_ = _tmp96_;
		_tmp98_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp97_);
		_tmp99_ = _tmp98_;
		vala_code_node_emit ((ValaCodeNode*) _tmp99_, (ValaCodeGenerator*) self);
		_tmp100_ = vala_ccode_base_module_get_current_method_inner_error ((ValaCCodeBaseModule*) self);
		_tmp101_ = _tmp100_;
		if (_tmp101_) {
			ValaCCodeFunction* _tmp102_;
			ValaCCodeFunction* _tmp103_;
			gint _tmp104_;
			gint _tmp105_;
			gchar* _tmp106_;
			gchar* _tmp107_;
			ValaCCodeConstant* _tmp108_;
			ValaCCodeConstant* _tmp109_;
			ValaCCodeVariableDeclarator* _tmp110_;
			ValaCCodeVariableDeclarator* _tmp111_;
			_tmp102_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp103_ = _tmp102_;
			_tmp104_ = vala_ccode_base_module_get_current_inner_error_id ((ValaCCodeBaseModule*) self);
			_tmp105_ = _tmp104_;
			_tmp106_ = g_strdup_printf ("_inner_error%d_", _tmp105_);
			_tmp107_ = _tmp106_;
			_tmp108_ = vala_ccode_constant_new ("NULL");
			_tmp109_ = _tmp108_;
			_tmp110_ = vala_ccode_variable_declarator_new_zero (_tmp107_, (ValaCCodeExpression*) _tmp109_, NULL);
			_tmp111_ = _tmp110_;
			vala_ccode_function_add_declaration (_tmp103_, "GError*", (ValaCCodeDeclarator*) _tmp111_, 0);
			_vala_ccode_node_unref0 (_tmp111_);
			_vala_ccode_node_unref0 (_tmp109_);
			_g_free0 (_tmp107_);
		}
		_tmp112_ = vala_ccode_base_module_get_current_method_return ((ValaCCodeBaseModule*) self);
		_tmp113_ = _tmp112_;
		if (_tmp113_) {
			ValaCCodeFunction* _tmp114_;
			ValaCCodeFunction* _tmp115_;
			_tmp114_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp115_ = _tmp114_;
			vala_ccode_function_add_label (_tmp115_, "_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_;
			ValaClass* _tmp67_;
			ValaClass* _tmp68_;
			_tmp66_ = vala_class_get_base_class (cl);
			_tmp67_ = _tmp66_;
			_tmp68_ = ((ValaCCodeBaseModule*) self)->gsource_type;
			if (_tmp67_ == _tmp68_) {
				ValaCCodeFile* _tmp69_;
				ValaCCodeBaseModuleEmitContext* _tmp70_;
				ValaCCodeFunction* _tmp71_;
				_tmp69_ = ((ValaCCodeBaseModule*) self)->cfile;
				_tmp70_ = ((ValaCCodeBaseModule*) self)->instance_finalize_context;
				_tmp71_ = _tmp70_->ccode;
				vala_ccode_file_add_function (_tmp69_, _tmp71_);
			}
		}
	}
}

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 = NULL;
	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_;
	gboolean _tmp18_ = FALSE;
	ValaDataType* _tmp19_;
	ValaDataType* _tmp20_;
	ValaTypeSymbol* _tmp21_;
	ValaTypeSymbol* _tmp22_;
	gchar* pflags = NULL;
	gchar* _tmp392_;
	gboolean _tmp393_ = FALSE;
	ValaPropertyAccessor* _tmp394_;
	ValaPropertyAccessor* _tmp395_;
	gboolean _tmp402_ = FALSE;
	ValaPropertyAccessor* _tmp403_;
	ValaPropertyAccessor* _tmp404_;
	gboolean _tmp423_;
	gboolean _tmp424_;
	ValaVersionAttribute* _tmp427_;
	ValaVersionAttribute* _tmp428_;
	gboolean _tmp429_;
	gboolean _tmp430_;
	ValaCCodeFunctionCall* _tmp433_;
	const gchar* _tmp434_;
	ValaCCodeConstant* _tmp435_;
	ValaCCodeConstant* _tmp436_;
	ValaSymbol* _tmp437_;
	ValaSymbol* _tmp438_;
	ValaCCodeExpression* result = NULL;
	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_);
	_tmp19_ = vala_property_get_property_type (prop);
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_data_type_get_data_type (_tmp20_);
	_tmp22_ = _tmp21_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_CLASS)) {
		_tmp18_ = TRUE;
	} else {
		ValaDataType* _tmp23_;
		ValaDataType* _tmp24_;
		ValaTypeSymbol* _tmp25_;
		ValaTypeSymbol* _tmp26_;
		_tmp23_ = vala_property_get_property_type (prop);
		_tmp24_ = _tmp23_;
		_tmp25_ = vala_data_type_get_data_type (_tmp24_);
		_tmp26_ = _tmp25_;
		_tmp18_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp26_, VALA_TYPE_INTERFACE);
	}
	if (_tmp18_) {
		gchar* param_spec_name = NULL;
		ValaDataType* _tmp27_;
		ValaDataType* _tmp28_;
		ValaTypeSymbol* _tmp29_;
		ValaTypeSymbol* _tmp30_;
		gchar* _tmp31_;
		ValaCCodeFunctionCall* _tmp32_;
		const gchar* _tmp33_;
		ValaCCodeIdentifier* _tmp34_;
		ValaCCodeIdentifier* _tmp35_;
		const gchar* _tmp36_;
		_tmp27_ = vala_property_get_property_type (prop);
		_tmp28_ = _tmp27_;
		_tmp29_ = vala_data_type_get_data_type (_tmp28_);
		_tmp30_ = _tmp29_;
		_tmp31_ = vala_get_ccode_param_spec_function ((ValaCodeNode*) _tmp30_);
		param_spec_name = _tmp31_;
		_tmp32_ = cspec;
		_tmp33_ = param_spec_name;
		_tmp34_ = vala_ccode_identifier_new (_tmp33_);
		_tmp35_ = _tmp34_;
		vala_ccode_function_call_set_call (_tmp32_, (ValaCCodeExpression*) _tmp35_);
		_vala_ccode_node_unref0 (_tmp35_);
		_tmp36_ = param_spec_name;
		if (g_strcmp0 (_tmp36_, "g_param_spec_string") == 0) {
			ValaCCodeFunctionCall* _tmp37_;
			ValaCCodeConstant* _tmp38_;
			ValaCCodeConstant* _tmp39_;
			_tmp37_ = cspec;
			_tmp38_ = vala_ccode_constant_new ("NULL");
			_tmp39_ = _tmp38_;
			vala_ccode_function_call_add_argument (_tmp37_, (ValaCCodeExpression*) _tmp39_);
			_vala_ccode_node_unref0 (_tmp39_);
		} else {
			const gchar* _tmp40_;
			_tmp40_ = param_spec_name;
			if (g_strcmp0 (_tmp40_, "g_param_spec_variant") == 0) {
				ValaCCodeFunctionCall* _tmp41_;
				ValaCCodeConstant* _tmp42_;
				ValaCCodeConstant* _tmp43_;
				ValaCCodeFunctionCall* _tmp44_;
				ValaCCodeConstant* _tmp45_;
				ValaCCodeConstant* _tmp46_;
				_tmp41_ = cspec;
				_tmp42_ = vala_ccode_constant_new ("G_VARIANT_TYPE_ANY");
				_tmp43_ = _tmp42_;
				vala_ccode_function_call_add_argument (_tmp41_, (ValaCCodeExpression*) _tmp43_);
				_vala_ccode_node_unref0 (_tmp43_);
				_tmp44_ = cspec;
				_tmp45_ = vala_ccode_constant_new ("NULL");
				_tmp46_ = _tmp45_;
				vala_ccode_function_call_add_argument (_tmp44_, (ValaCCodeExpression*) _tmp46_);
				_vala_ccode_node_unref0 (_tmp46_);
			} else {
				ValaDataType* _tmp47_;
				ValaDataType* _tmp48_;
				ValaTypeSymbol* _tmp49_;
				ValaTypeSymbol* _tmp50_;
				gchar* _tmp51_;
				gchar* _tmp52_;
				gboolean _tmp53_;
				_tmp47_ = vala_property_get_property_type (prop);
				_tmp48_ = _tmp47_;
				_tmp49_ = vala_data_type_get_data_type (_tmp48_);
				_tmp50_ = _tmp49_;
				_tmp51_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp50_);
				_tmp52_ = _tmp51_;
				_tmp53_ = g_strcmp0 (_tmp52_, "G_TYPE_POINTER") != 0;
				_g_free0 (_tmp52_);
				if (_tmp53_) {
					ValaCCodeFunctionCall* _tmp54_;
					ValaDataType* _tmp55_;
					ValaDataType* _tmp56_;
					ValaTypeSymbol* _tmp57_;
					ValaTypeSymbol* _tmp58_;
					gchar* _tmp59_;
					gchar* _tmp60_;
					ValaCCodeIdentifier* _tmp61_;
					ValaCCodeIdentifier* _tmp62_;
					_tmp54_ = cspec;
					_tmp55_ = vala_property_get_property_type (prop);
					_tmp56_ = _tmp55_;
					_tmp57_ = vala_data_type_get_data_type (_tmp56_);
					_tmp58_ = _tmp57_;
					_tmp59_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp58_);
					_tmp60_ = _tmp59_;
					_tmp61_ = vala_ccode_identifier_new (_tmp60_);
					_tmp62_ = _tmp61_;
					vala_ccode_function_call_add_argument (_tmp54_, (ValaCCodeExpression*) _tmp62_);
					_vala_ccode_node_unref0 (_tmp62_);
					_g_free0 (_tmp60_);
				}
			}
		}
		_g_free0 (param_spec_name);
	} else {
		ValaDataType* _tmp63_;
		ValaDataType* _tmp64_;
		ValaTypeSymbol* _tmp65_;
		ValaTypeSymbol* _tmp66_;
		_tmp63_ = vala_property_get_property_type (prop);
		_tmp64_ = _tmp63_;
		_tmp65_ = vala_data_type_get_data_type (_tmp64_);
		_tmp66_ = _tmp65_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp66_, VALA_TYPE_ENUM)) {
			ValaEnum* e = NULL;
			ValaDataType* _tmp67_;
			ValaDataType* _tmp68_;
			ValaTypeSymbol* _tmp69_;
			ValaTypeSymbol* _tmp70_;
			ValaEnum* _tmp71_;
			ValaEnum* _tmp72_;
			ValaExpression* _tmp109_;
			ValaExpression* _tmp110_;
			_tmp67_ = vala_property_get_property_type (prop);
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_data_type_get_data_type (_tmp68_);
			_tmp70_ = _tmp69_;
			_tmp71_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp70_, VALA_TYPE_ENUM) ? ((ValaEnum*) _tmp70_) : NULL);
			e = _tmp71_;
			_tmp72_ = e;
			if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp72_)) {
				ValaEnum* _tmp73_;
				gboolean _tmp74_;
				gboolean _tmp75_;
				ValaCCodeFunctionCall* _tmp82_;
				ValaEnum* _tmp83_;
				gchar* _tmp84_;
				gchar* _tmp85_;
				ValaCCodeIdentifier* _tmp86_;
				ValaCCodeIdentifier* _tmp87_;
				_tmp73_ = e;
				_tmp74_ = vala_enum_get_is_flags (_tmp73_);
				_tmp75_ = _tmp74_;
				if (_tmp75_) {
					ValaCCodeFunctionCall* _tmp76_;
					ValaCCodeIdentifier* _tmp77_;
					ValaCCodeIdentifier* _tmp78_;
					_tmp76_ = cspec;
					_tmp77_ = vala_ccode_identifier_new ("g_param_spec_flags");
					_tmp78_ = _tmp77_;
					vala_ccode_function_call_set_call (_tmp76_, (ValaCCodeExpression*) _tmp78_);
					_vala_ccode_node_unref0 (_tmp78_);
				} else {
					ValaCCodeFunctionCall* _tmp79_;
					ValaCCodeIdentifier* _tmp80_;
					ValaCCodeIdentifier* _tmp81_;
					_tmp79_ = cspec;
					_tmp80_ = vala_ccode_identifier_new ("g_param_spec_enum");
					_tmp81_ = _tmp80_;
					vala_ccode_function_call_set_call (_tmp79_, (ValaCCodeExpression*) _tmp81_);
					_vala_ccode_node_unref0 (_tmp81_);
				}
				_tmp82_ = cspec;
				_tmp83_ = e;
				_tmp84_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp83_);
				_tmp85_ = _tmp84_;
				_tmp86_ = vala_ccode_identifier_new (_tmp85_);
				_tmp87_ = _tmp86_;
				vala_ccode_function_call_add_argument (_tmp82_, (ValaCCodeExpression*) _tmp87_);
				_vala_ccode_node_unref0 (_tmp87_);
				_g_free0 (_tmp85_);
			} else {
				ValaEnum* _tmp88_;
				gboolean _tmp89_;
				gboolean _tmp90_;
				_tmp88_ = e;
				_tmp89_ = vala_enum_get_is_flags (_tmp88_);
				_tmp90_ = _tmp89_;
				if (_tmp90_) {
					ValaCCodeFunctionCall* _tmp91_;
					ValaCCodeIdentifier* _tmp92_;
					ValaCCodeIdentifier* _tmp93_;
					ValaCCodeFunctionCall* _tmp94_;
					ValaCCodeConstant* _tmp95_;
					ValaCCodeConstant* _tmp96_;
					ValaCCodeFunctionCall* _tmp97_;
					ValaCCodeConstant* _tmp98_;
					ValaCCodeConstant* _tmp99_;
					_tmp91_ = cspec;
					_tmp92_ = vala_ccode_identifier_new ("g_param_spec_uint");
					_tmp93_ = _tmp92_;
					vala_ccode_function_call_set_call (_tmp91_, (ValaCCodeExpression*) _tmp93_);
					_vala_ccode_node_unref0 (_tmp93_);
					_tmp94_ = cspec;
					_tmp95_ = vala_ccode_constant_new ("0");
					_tmp96_ = _tmp95_;
					vala_ccode_function_call_add_argument (_tmp94_, (ValaCCodeExpression*) _tmp96_);
					_vala_ccode_node_unref0 (_tmp96_);
					_tmp97_ = cspec;
					_tmp98_ = vala_ccode_constant_new ("G_MAXUINT");
					_tmp99_ = _tmp98_;
					vala_ccode_function_call_add_argument (_tmp97_, (ValaCCodeExpression*) _tmp99_);
					_vala_ccode_node_unref0 (_tmp99_);
				} else {
					ValaCCodeFunctionCall* _tmp100_;
					ValaCCodeIdentifier* _tmp101_;
					ValaCCodeIdentifier* _tmp102_;
					ValaCCodeFunctionCall* _tmp103_;
					ValaCCodeConstant* _tmp104_;
					ValaCCodeConstant* _tmp105_;
					ValaCCodeFunctionCall* _tmp106_;
					ValaCCodeConstant* _tmp107_;
					ValaCCodeConstant* _tmp108_;
					_tmp100_ = cspec;
					_tmp101_ = vala_ccode_identifier_new ("g_param_spec_int");
					_tmp102_ = _tmp101_;
					vala_ccode_function_call_set_call (_tmp100_, (ValaCCodeExpression*) _tmp102_);
					_vala_ccode_node_unref0 (_tmp102_);
					_tmp103_ = cspec;
					_tmp104_ = vala_ccode_constant_new ("G_MININT");
					_tmp105_ = _tmp104_;
					vala_ccode_function_call_add_argument (_tmp103_, (ValaCCodeExpression*) _tmp105_);
					_vala_ccode_node_unref0 (_tmp105_);
					_tmp106_ = cspec;
					_tmp107_ = vala_ccode_constant_new ("G_MAXINT");
					_tmp108_ = _tmp107_;
					vala_ccode_function_call_add_argument (_tmp106_, (ValaCCodeExpression*) _tmp108_);
					_vala_ccode_node_unref0 (_tmp108_);
				}
			}
			_tmp109_ = vala_property_get_initializer (prop);
			_tmp110_ = _tmp109_;
			if (_tmp110_ != NULL) {
				ValaCCodeFunctionCall* _tmp111_;
				ValaExpression* _tmp112_;
				ValaExpression* _tmp113_;
				ValaCCodeExpression* _tmp114_;
				ValaCCodeExpression* _tmp115_;
				_tmp111_ = cspec;
				_tmp112_ = vala_property_get_initializer (prop);
				_tmp113_ = _tmp112_;
				_tmp114_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp113_);
				_tmp115_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
				vala_ccode_function_call_add_argument (_tmp111_, _tmp115_);
				_vala_ccode_node_unref0 (_tmp115_);
			} else {
				ValaCCodeFunctionCall* _tmp116_;
				ValaDataType* _tmp117_;
				ValaDataType* _tmp118_;
				ValaTypeSymbol* _tmp119_;
				ValaTypeSymbol* _tmp120_;
				gchar* _tmp121_;
				gchar* _tmp122_;
				ValaCCodeConstant* _tmp123_;
				ValaCCodeConstant* _tmp124_;
				_tmp116_ = cspec;
				_tmp117_ = vala_property_get_property_type (prop);
				_tmp118_ = _tmp117_;
				_tmp119_ = vala_data_type_get_data_type (_tmp118_);
				_tmp120_ = _tmp119_;
				_tmp121_ = vala_get_ccode_default_value (_tmp120_);
				_tmp122_ = _tmp121_;
				_tmp123_ = vala_ccode_constant_new (_tmp122_);
				_tmp124_ = _tmp123_;
				vala_ccode_function_call_add_argument (_tmp116_, (ValaCCodeExpression*) _tmp124_);
				_vala_ccode_node_unref0 (_tmp124_);
				_g_free0 (_tmp122_);
			}
			_vala_code_node_unref0 (e);
		} else {
			ValaDataType* _tmp125_;
			ValaDataType* _tmp126_;
			ValaTypeSymbol* _tmp127_;
			ValaTypeSymbol* _tmp128_;
			_tmp125_ = vala_property_get_property_type (prop);
			_tmp126_ = _tmp125_;
			_tmp127_ = vala_data_type_get_data_type (_tmp126_);
			_tmp128_ = _tmp127_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp128_, VALA_TYPE_STRUCT)) {
				ValaStruct* st = NULL;
				ValaDataType* _tmp129_;
				ValaDataType* _tmp130_;
				ValaTypeSymbol* _tmp131_;
				ValaTypeSymbol* _tmp132_;
				ValaStruct* _tmp133_;
				gchar* type_id = NULL;
				ValaStruct* _tmp134_;
				gchar* _tmp135_;
				const gchar* _tmp136_;
				_tmp129_ = vala_property_get_property_type (prop);
				_tmp130_ = _tmp129_;
				_tmp131_ = vala_data_type_get_data_type (_tmp130_);
				_tmp132_ = _tmp131_;
				_tmp133_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp132_, VALA_TYPE_STRUCT, ValaStruct));
				st = _tmp133_;
				_tmp134_ = st;
				_tmp135_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp134_);
				type_id = _tmp135_;
				_tmp136_ = type_id;
				if (g_strcmp0 (_tmp136_, "G_TYPE_INT") == 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_int");
					_tmp139_ = _tmp138_;
					vala_ccode_function_call_set_call (_tmp137_, (ValaCCodeExpression*) _tmp139_);
					_vala_ccode_node_unref0 (_tmp139_);
					_tmp140_ = cspec;
					_tmp141_ = vala_ccode_constant_new ("G_MININT");
					_tmp142_ = _tmp141_;
					vala_ccode_function_call_add_argument (_tmp140_, (ValaCCodeExpression*) _tmp142_);
					_vala_ccode_node_unref0 (_tmp142_);
					_tmp143_ = cspec;
					_tmp144_ = vala_ccode_constant_new ("G_MAXINT");
					_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 ("0");
						_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_UINT") == 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_uint");
						_tmp159_ = _tmp158_;
						vala_ccode_function_call_set_call (_tmp157_, (ValaCCodeExpression*) _tmp159_);
						_vala_ccode_node_unref0 (_tmp159_);
						_tmp160_ = cspec;
						_tmp161_ = vala_ccode_constant_new ("0");
						_tmp162_ = _tmp161_;
						vala_ccode_function_call_add_argument (_tmp160_, (ValaCCodeExpression*) _tmp162_);
						_vala_ccode_node_unref0 (_tmp162_);
						_tmp163_ = cspec;
						_tmp164_ = vala_ccode_constant_new ("G_MAXUINT");
						_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 ("0U");
							_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_INT64") == 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_int64");
							_tmp179_ = _tmp178_;
							vala_ccode_function_call_set_call (_tmp177_, (ValaCCodeExpression*) _tmp179_);
							_vala_ccode_node_unref0 (_tmp179_);
							_tmp180_ = cspec;
							_tmp181_ = vala_ccode_constant_new ("G_MININT64");
							_tmp182_ = _tmp181_;
							vala_ccode_function_call_add_argument (_tmp180_, (ValaCCodeExpression*) _tmp182_);
							_vala_ccode_node_unref0 (_tmp182_);
							_tmp183_ = cspec;
							_tmp184_ = vala_ccode_constant_new ("G_MAXINT64");
							_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 ("0");
								_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_UINT64") == 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_uint64");
								_tmp199_ = _tmp198_;
								vala_ccode_function_call_set_call (_tmp197_, (ValaCCodeExpression*) _tmp199_);
								_vala_ccode_node_unref0 (_tmp199_);
								_tmp200_ = cspec;
								_tmp201_ = vala_ccode_constant_new ("0");
								_tmp202_ = _tmp201_;
								vala_ccode_function_call_add_argument (_tmp200_, (ValaCCodeExpression*) _tmp202_);
								_vala_ccode_node_unref0 (_tmp202_);
								_tmp203_ = cspec;
								_tmp204_ = vala_ccode_constant_new ("G_MAXUINT64");
								_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 ("0U");
									_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_LONG") == 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_long");
									_tmp219_ = _tmp218_;
									vala_ccode_function_call_set_call (_tmp217_, (ValaCCodeExpression*) _tmp219_);
									_vala_ccode_node_unref0 (_tmp219_);
									_tmp220_ = cspec;
									_tmp221_ = vala_ccode_constant_new ("G_MINLONG");
									_tmp222_ = _tmp221_;
									vala_ccode_function_call_add_argument (_tmp220_, (ValaCCodeExpression*) _tmp222_);
									_vala_ccode_node_unref0 (_tmp222_);
									_tmp223_ = cspec;
									_tmp224_ = vala_ccode_constant_new ("G_MAXLONG");
									_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 ("0L");
										_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_ULONG") == 0) {
										ValaCCodeFunctionCall* _tmp237_;
										ValaCCodeIdentifier* _tmp238_;
										ValaCCodeIdentifier* _tmp239_;
										ValaCCodeFunctionCall* _tmp240_;
										ValaCCodeConstant* _tmp241_;
										ValaCCodeConstant* _tmp242_;
										ValaCCodeFunctionCall* _tmp243_;
										ValaCCodeConstant* _tmp244_;
										ValaCCodeConstant* _tmp245_;
										ValaExpression* _tmp246_;
										ValaExpression* _tmp247_;
										_tmp237_ = cspec;
										_tmp238_ = vala_ccode_identifier_new ("g_param_spec_ulong");
										_tmp239_ = _tmp238_;
										vala_ccode_function_call_set_call (_tmp237_, (ValaCCodeExpression*) _tmp239_);
										_vala_ccode_node_unref0 (_tmp239_);
										_tmp240_ = cspec;
										_tmp241_ = vala_ccode_constant_new ("0");
										_tmp242_ = _tmp241_;
										vala_ccode_function_call_add_argument (_tmp240_, (ValaCCodeExpression*) _tmp242_);
										_vala_ccode_node_unref0 (_tmp242_);
										_tmp243_ = cspec;
										_tmp244_ = vala_ccode_constant_new ("G_MAXULONG");
										_tmp245_ = _tmp244_;
										vala_ccode_function_call_add_argument (_tmp243_, (ValaCCodeExpression*) _tmp245_);
										_vala_ccode_node_unref0 (_tmp245_);
										_tmp246_ = vala_property_get_initializer (prop);
										_tmp247_ = _tmp246_;
										if (_tmp247_ != NULL) {
											ValaCCodeFunctionCall* _tmp248_;
											ValaExpression* _tmp249_;
											ValaExpression* _tmp250_;
											ValaCCodeExpression* _tmp251_;
											ValaCCodeExpression* _tmp252_;
											_tmp248_ = cspec;
											_tmp249_ = vala_property_get_initializer (prop);
											_tmp250_ = _tmp249_;
											_tmp251_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp250_);
											_tmp252_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp251_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
											vala_ccode_function_call_add_argument (_tmp248_, _tmp252_);
											_vala_ccode_node_unref0 (_tmp252_);
										} else {
											ValaCCodeFunctionCall* _tmp253_;
											ValaCCodeConstant* _tmp254_;
											ValaCCodeConstant* _tmp255_;
											_tmp253_ = cspec;
											_tmp254_ = vala_ccode_constant_new ("0UL");
											_tmp255_ = _tmp254_;
											vala_ccode_function_call_add_argument (_tmp253_, (ValaCCodeExpression*) _tmp255_);
											_vala_ccode_node_unref0 (_tmp255_);
										}
									} else {
										const gchar* _tmp256_;
										_tmp256_ = type_id;
										if (g_strcmp0 (_tmp256_, "G_TYPE_BOOLEAN") == 0) {
											ValaCCodeFunctionCall* _tmp257_;
											ValaCCodeIdentifier* _tmp258_;
											ValaCCodeIdentifier* _tmp259_;
											ValaExpression* _tmp260_;
											ValaExpression* _tmp261_;
											_tmp257_ = cspec;
											_tmp258_ = vala_ccode_identifier_new ("g_param_spec_boolean");
											_tmp259_ = _tmp258_;
											vala_ccode_function_call_set_call (_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 ("FALSE");
												_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_CHAR") == 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_char");
												_tmp273_ = _tmp272_;
												vala_ccode_function_call_set_call (_tmp271_, (ValaCCodeExpression*) _tmp273_);
												_vala_ccode_node_unref0 (_tmp273_);
												_tmp274_ = cspec;
												_tmp275_ = vala_ccode_constant_new ("G_MININT8");
												_tmp276_ = _tmp275_;
												vala_ccode_function_call_add_argument (_tmp274_, (ValaCCodeExpression*) _tmp276_);
												_vala_ccode_node_unref0 (_tmp276_);
												_tmp277_ = cspec;
												_tmp278_ = vala_ccode_constant_new ("G_MAXINT8");
												_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_UCHAR") == 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_uchar");
													_tmp293_ = _tmp292_;
													vala_ccode_function_call_set_call (_tmp291_, (ValaCCodeExpression*) _tmp293_);
													_vala_ccode_node_unref0 (_tmp293_);
													_tmp294_ = cspec;
													_tmp295_ = vala_ccode_constant_new ("0");
													_tmp296_ = _tmp295_;
													vala_ccode_function_call_add_argument (_tmp294_, (ValaCCodeExpression*) _tmp296_);
													_vala_ccode_node_unref0 (_tmp296_);
													_tmp297_ = cspec;
													_tmp298_ = vala_ccode_constant_new ("G_MAXUINT8");
													_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");
														_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_FLOAT") == 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_float");
														_tmp313_ = _tmp312_;
														vala_ccode_function_call_set_call (_tmp311_, (ValaCCodeExpression*) _tmp313_);
														_vala_ccode_node_unref0 (_tmp313_);
														_tmp314_ = cspec;
														_tmp315_ = vala_ccode_constant_new ("-G_MAXFLOAT");
														_tmp316_ = _tmp315_;
														vala_ccode_function_call_add_argument (_tmp314_, (ValaCCodeExpression*) _tmp316_);
														_vala_ccode_node_unref0 (_tmp316_);
														_tmp317_ = cspec;
														_tmp318_ = vala_ccode_constant_new ("G_MAXFLOAT");
														_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.0F");
															_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_DOUBLE") == 0) {
															ValaCCodeFunctionCall* _tmp331_;
															ValaCCodeIdentifier* _tmp332_;
															ValaCCodeIdentifier* _tmp333_;
															ValaCCodeFunctionCall* _tmp334_;
															ValaCCodeConstant* _tmp335_;
															ValaCCodeConstant* _tmp336_;
															ValaCCodeFunctionCall* _tmp337_;
															ValaCCodeConstant* _tmp338_;
															ValaCCodeConstant* _tmp339_;
															ValaExpression* _tmp340_;
															ValaExpression* _tmp341_;
															_tmp331_ = cspec;
															_tmp332_ = vala_ccode_identifier_new ("g_param_spec_double");
															_tmp333_ = _tmp332_;
															vala_ccode_function_call_set_call (_tmp331_, (ValaCCodeExpression*) _tmp333_);
															_vala_ccode_node_unref0 (_tmp333_);
															_tmp334_ = cspec;
															_tmp335_ = vala_ccode_constant_new ("-G_MAXDOUBLE");
															_tmp336_ = _tmp335_;
															vala_ccode_function_call_add_argument (_tmp334_, (ValaCCodeExpression*) _tmp336_);
															_vala_ccode_node_unref0 (_tmp336_);
															_tmp337_ = cspec;
															_tmp338_ = vala_ccode_constant_new ("G_MAXDOUBLE");
															_tmp339_ = _tmp338_;
															vala_ccode_function_call_add_argument (_tmp337_, (ValaCCodeExpression*) _tmp339_);
															_vala_ccode_node_unref0 (_tmp339_);
															_tmp340_ = vala_property_get_initializer (prop);
															_tmp341_ = _tmp340_;
															if (_tmp341_ != NULL) {
																ValaCCodeFunctionCall* _tmp342_;
																ValaExpression* _tmp343_;
																ValaExpression* _tmp344_;
																ValaCCodeExpression* _tmp345_;
																ValaCCodeExpression* _tmp346_;
																_tmp342_ = cspec;
																_tmp343_ = vala_property_get_initializer (prop);
																_tmp344_ = _tmp343_;
																_tmp345_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp344_);
																_tmp346_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp345_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
																vala_ccode_function_call_add_argument (_tmp342_, _tmp346_);
																_vala_ccode_node_unref0 (_tmp346_);
															} else {
																ValaCCodeFunctionCall* _tmp347_;
																ValaCCodeConstant* _tmp348_;
																ValaCCodeConstant* _tmp349_;
																_tmp347_ = cspec;
																_tmp348_ = vala_ccode_constant_new ("0.0");
																_tmp349_ = _tmp348_;
																vala_ccode_function_call_add_argument (_tmp347_, (ValaCCodeExpression*) _tmp349_);
																_vala_ccode_node_unref0 (_tmp349_);
															}
														} else {
															const gchar* _tmp350_;
															_tmp350_ = type_id;
															if (g_strcmp0 (_tmp350_, "G_TYPE_GTYPE") == 0) {
																ValaCCodeFunctionCall* _tmp351_;
																ValaCCodeIdentifier* _tmp352_;
																ValaCCodeIdentifier* _tmp353_;
																ValaExpression* _tmp354_;
																ValaExpression* _tmp355_;
																_tmp351_ = cspec;
																_tmp352_ = vala_ccode_identifier_new ("g_param_spec_gtype");
																_tmp353_ = _tmp352_;
																vala_ccode_function_call_set_call (_tmp351_, (ValaCCodeExpression*) _tmp353_);
																_vala_ccode_node_unref0 (_tmp353_);
																_tmp354_ = vala_property_get_initializer (prop);
																_tmp355_ = _tmp354_;
																if (_tmp355_ != NULL) {
																	ValaCCodeFunctionCall* _tmp356_;
																	ValaExpression* _tmp357_;
																	ValaExpression* _tmp358_;
																	ValaCCodeExpression* _tmp359_;
																	ValaCCodeExpression* _tmp360_;
																	_tmp356_ = cspec;
																	_tmp357_ = vala_property_get_initializer (prop);
																	_tmp358_ = _tmp357_;
																	_tmp359_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp358_);
																	_tmp360_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp359_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
																	vala_ccode_function_call_add_argument (_tmp356_, _tmp360_);
																	_vala_ccode_node_unref0 (_tmp360_);
																} else {
																	ValaCCodeFunctionCall* _tmp361_;
																	ValaCCodeConstant* _tmp362_;
																	ValaCCodeConstant* _tmp363_;
																	_tmp361_ = cspec;
																	_tmp362_ = vala_ccode_constant_new ("G_TYPE_NONE");
																	_tmp363_ = _tmp362_;
																	vala_ccode_function_call_add_argument (_tmp361_, (ValaCCodeExpression*) _tmp363_);
																	_vala_ccode_node_unref0 (_tmp363_);
																}
															} else {
																ValaCCodeFunctionCall* _tmp364_;
																ValaCCodeIdentifier* _tmp365_;
																ValaCCodeIdentifier* _tmp366_;
																ValaCCodeFunctionCall* _tmp367_;
																const gchar* _tmp368_;
																ValaCCodeIdentifier* _tmp369_;
																ValaCCodeIdentifier* _tmp370_;
																_tmp364_ = cspec;
																_tmp365_ = vala_ccode_identifier_new ("g_param_spec_boxed");
																_tmp366_ = _tmp365_;
																vala_ccode_function_call_set_call (_tmp364_, (ValaCCodeExpression*) _tmp366_);
																_vala_ccode_node_unref0 (_tmp366_);
																_tmp367_ = cspec;
																_tmp368_ = type_id;
																_tmp369_ = vala_ccode_identifier_new (_tmp368_);
																_tmp370_ = _tmp369_;
																vala_ccode_function_call_add_argument (_tmp367_, (ValaCCodeExpression*) _tmp370_);
																_vala_ccode_node_unref0 (_tmp370_);
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
				_g_free0 (type_id);
				_vala_code_node_unref0 (st);
			} else {
				gboolean _tmp371_ = FALSE;
				ValaDataType* _tmp372_;
				ValaDataType* _tmp373_;
				_tmp372_ = vala_property_get_property_type (prop);
				_tmp373_ = _tmp372_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp373_, VALA_TYPE_ARRAY_TYPE)) {
					ValaDataType* _tmp374_;
					ValaDataType* _tmp375_;
					ValaDataType* _tmp376_;
					ValaDataType* _tmp377_;
					ValaTypeSymbol* _tmp378_;
					ValaTypeSymbol* _tmp379_;
					ValaDataType* _tmp380_;
					ValaTypeSymbol* _tmp381_;
					ValaTypeSymbol* _tmp382_;
					_tmp374_ = vala_property_get_property_type (prop);
					_tmp375_ = _tmp374_;
					_tmp376_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp375_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
					_tmp377_ = _tmp376_;
					_tmp378_ = vala_data_type_get_data_type (_tmp377_);
					_tmp379_ = _tmp378_;
					_tmp380_ = ((ValaCCodeBaseModule*) self)->string_type;
					_tmp381_ = vala_data_type_get_data_type (_tmp380_);
					_tmp382_ = _tmp381_;
					_tmp371_ = _tmp379_ == _tmp382_;
				} else {
					_tmp371_ = FALSE;
				}
				if (_tmp371_) {
					ValaCCodeFunctionCall* _tmp383_;
					ValaCCodeIdentifier* _tmp384_;
					ValaCCodeIdentifier* _tmp385_;
					ValaCCodeFunctionCall* _tmp386_;
					ValaCCodeIdentifier* _tmp387_;
					ValaCCodeIdentifier* _tmp388_;
					_tmp383_ = cspec;
					_tmp384_ = vala_ccode_identifier_new ("g_param_spec_boxed");
					_tmp385_ = _tmp384_;
					vala_ccode_function_call_set_call (_tmp383_, (ValaCCodeExpression*) _tmp385_);
					_vala_ccode_node_unref0 (_tmp385_);
					_tmp386_ = cspec;
					_tmp387_ = vala_ccode_identifier_new ("G_TYPE_STRV");
					_tmp388_ = _tmp387_;
					vala_ccode_function_call_add_argument (_tmp386_, (ValaCCodeExpression*) _tmp388_);
					_vala_ccode_node_unref0 (_tmp388_);
				} else {
					ValaCCodeFunctionCall* _tmp389_;
					ValaCCodeIdentifier* _tmp390_;
					ValaCCodeIdentifier* _tmp391_;
					_tmp389_ = cspec;
					_tmp390_ = vala_ccode_identifier_new ("g_param_spec_pointer");
					_tmp391_ = _tmp390_;
					vala_ccode_function_call_set_call (_tmp389_, (ValaCCodeExpression*) _tmp391_);
					_vala_ccode_node_unref0 (_tmp391_);
				}
			}
		}
	}
	_tmp392_ = g_strdup ("G_PARAM_STATIC_STRINGS");
	pflags = _tmp392_;
	_tmp394_ = vala_property_get_get_accessor (prop);
	_tmp395_ = _tmp394_;
	if (_tmp395_ != NULL) {
		ValaPropertyAccessor* _tmp396_;
		ValaPropertyAccessor* _tmp397_;
		ValaSymbolAccessibility _tmp398_;
		ValaSymbolAccessibility _tmp399_;
		_tmp396_ = vala_property_get_get_accessor (prop);
		_tmp397_ = _tmp396_;
		_tmp398_ = vala_symbol_get_access ((ValaSymbol*) _tmp397_);
		_tmp399_ = _tmp398_;
		_tmp393_ = _tmp399_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
	} else {
		_tmp393_ = FALSE;
	}
	if (_tmp393_) {
		const gchar* _tmp400_;
		gchar* _tmp401_;
		_tmp400_ = pflags;
		_tmp401_ = g_strdup_printf ("%s%s", _tmp400_, " | G_PARAM_READABLE");
		_g_free0 (pflags);
		pflags = _tmp401_;
	}
	_tmp403_ = vala_property_get_set_accessor (prop);
	_tmp404_ = _tmp403_;
	if (_tmp404_ != NULL) {
		ValaPropertyAccessor* _tmp405_;
		ValaPropertyAccessor* _tmp406_;
		ValaSymbolAccessibility _tmp407_;
		ValaSymbolAccessibility _tmp408_;
		_tmp405_ = vala_property_get_set_accessor (prop);
		_tmp406_ = _tmp405_;
		_tmp407_ = vala_symbol_get_access ((ValaSymbol*) _tmp406_);
		_tmp408_ = _tmp407_;
		_tmp402_ = _tmp408_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
	} else {
		_tmp402_ = FALSE;
	}
	if (_tmp402_) {
		const gchar* _tmp409_;
		gchar* _tmp410_;
		ValaPropertyAccessor* _tmp411_;
		ValaPropertyAccessor* _tmp412_;
		gboolean _tmp413_;
		gboolean _tmp414_;
		_tmp409_ = pflags;
		_tmp410_ = g_strdup_printf ("%s%s", _tmp409_, " | G_PARAM_WRITABLE");
		_g_free0 (pflags);
		pflags = _tmp410_;
		_tmp411_ = vala_property_get_set_accessor (prop);
		_tmp412_ = _tmp411_;
		_tmp413_ = vala_property_accessor_get_construction (_tmp412_);
		_tmp414_ = _tmp413_;
		if (_tmp414_) {
			ValaPropertyAccessor* _tmp415_;
			ValaPropertyAccessor* _tmp416_;
			gboolean _tmp417_;
			gboolean _tmp418_;
			_tmp415_ = vala_property_get_set_accessor (prop);
			_tmp416_ = _tmp415_;
			_tmp417_ = vala_property_accessor_get_writable (_tmp416_);
			_tmp418_ = _tmp417_;
			if (_tmp418_) {
				const gchar* _tmp419_;
				gchar* _tmp420_;
				_tmp419_ = pflags;
				_tmp420_ = g_strdup_printf ("%s%s", _tmp419_, " | G_PARAM_CONSTRUCT");
				_g_free0 (pflags);
				pflags = _tmp420_;
			} else {
				const gchar* _tmp421_;
				gchar* _tmp422_;
				_tmp421_ = pflags;
				_tmp422_ = g_strdup_printf ("%s%s", _tmp421_, " | G_PARAM_CONSTRUCT_ONLY");
				_g_free0 (pflags);
				pflags = _tmp422_;
			}
		}
	}
	_tmp423_ = vala_property_get_notify (prop);
	_tmp424_ = _tmp423_;
	if (!_tmp424_) {
		const gchar* _tmp425_;
		gchar* _tmp426_;
		_tmp425_ = pflags;
		_tmp426_ = g_strdup_printf ("%s%s", _tmp425_, " | G_PARAM_EXPLICIT_NOTIFY");
		_g_free0 (pflags);
		pflags = _tmp426_;
	}
	_tmp427_ = vala_symbol_get_version ((ValaSymbol*) prop);
	_tmp428_ = _tmp427_;
	_tmp429_ = vala_version_attribute_get_deprecated (_tmp428_);
	_tmp430_ = _tmp429_;
	if (_tmp430_) {
		const gchar* _tmp431_;
		gchar* _tmp432_;
		_tmp431_ = pflags;
		_tmp432_ = g_strdup_printf ("%s%s", _tmp431_, " | G_PARAM_DEPRECATED");
		_g_free0 (pflags);
		pflags = _tmp432_;
	}
	_tmp433_ = cspec;
	_tmp434_ = pflags;
	_tmp435_ = vala_ccode_constant_new (_tmp434_);
	_tmp436_ = _tmp435_;
	vala_ccode_function_call_add_argument (_tmp433_, (ValaCCodeExpression*) _tmp436_);
	_vala_ccode_node_unref0 (_tmp436_);
	_tmp437_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
	_tmp438_ = _tmp437_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp438_, VALA_TYPE_INTERFACE)) {
		result = (ValaCCodeExpression*) cspec;
		_g_free0 (pflags);
		return result;
	} else {
		ValaCCodeExpression* _tmp439_;
		ValaCCodeExpression* _tmp440_;
		ValaCCodeFunctionCall* _tmp441_;
		ValaCCodeAssignment* _tmp442_;
		ValaCCodeExpression* _tmp443_;
		_tmp439_ = vala_ccode_base_module_get_param_spec_cexpression ((ValaCCodeBaseModule*) self, prop);
		_tmp440_ = _tmp439_;
		_tmp441_ = cspec;
		_tmp442_ = vala_ccode_assignment_new (_tmp440_, (ValaCCodeExpression*) _tmp441_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
		_tmp443_ = (ValaCCodeExpression*) _tmp442_;
		_vala_ccode_node_unref0 (_tmp440_);
		result = _tmp443_;
		_g_free0 (pflags);
		_vala_ccode_node_unref0 (cspec);
		return result;
	}
	_g_free0 (pflags);
	_vala_ccode_node_unref0 (cspec);
}

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* type_struct = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeStruct* _tmp7_;
	ValaCCodeStruct* _tmp8_;
	ValaCCodeNewline* _tmp9_;
	ValaCCodeNewline* _tmp10_;
	gchar* macro = NULL;
	gchar* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	const gchar* _tmp17_;
	ValaCCodeMacroReplacement* _tmp18_;
	ValaCCodeMacroReplacement* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	const gchar* _tmp29_;
	ValaCCodeMacroReplacement* _tmp30_;
	ValaCCodeMacroReplacement* _tmp31_;
	gchar* _tmp32_;
	gchar* _tmp33_;
	gchar* _tmp34_;
	gchar* _tmp35_;
	gchar* _tmp36_;
	gchar* _tmp37_;
	gchar* _tmp38_;
	const gchar* _tmp39_;
	ValaCCodeMacroReplacement* _tmp40_;
	ValaCCodeMacroReplacement* _tmp41_;
	gchar* _tmp42_;
	gchar* _tmp43_;
	gchar* _tmp44_;
	gchar* _tmp45_;
	gchar* _tmp46_;
	gchar* _tmp47_;
	gchar* _tmp48_;
	gchar* _tmp49_;
	gchar* _tmp50_;
	const gchar* _tmp51_;
	ValaCCodeMacroReplacement* _tmp52_;
	ValaCCodeMacroReplacement* _tmp53_;
	ValaCCodeNewline* _tmp54_;
	ValaCCodeNewline* _tmp55_;
	gchar* _tmp56_;
	gchar* _tmp57_;
	gchar* _tmp58_;
	gchar* _tmp59_;
	gchar* _tmp60_;
	gchar* _tmp61_;
	ValaCCodeVariableDeclarator* _tmp62_;
	ValaCCodeVariableDeclarator* _tmp63_;
	ValaCCodeTypeDefinition* _tmp64_;
	ValaCCodeTypeDefinition* _tmp65_;
	ValaCCodeStruct* _tmp66_;
	const gchar* _tmp67_;
	const gchar* _tmp68_;
	gchar* _tmp69_;
	gchar* _tmp70_;
	gchar* _tmp71_;
	gchar* _tmp72_;
	ValaCCodeVariableDeclarator* _tmp73_;
	ValaCCodeVariableDeclarator* _tmp74_;
	ValaCCodeTypeDefinition* _tmp75_;
	ValaCCodeTypeDefinition* _tmp76_;
	ValaCCodeStruct* _tmp95_;
	ValaAttribute* _tmp96_;
	ValaCCodeStruct* _tmp362_;
	ValaInterfaceRegisterFunction* type_fun = NULL;
	ValaInterfaceRegisterFunction* _tmp363_;
	ValaInterfaceRegisterFunction* _tmp364_;
	ValaCodeContext* _tmp365_;
	ValaCodeContext* _tmp366_;
	ValaInterfaceRegisterFunction* _tmp367_;
	ValaCCodeFragment* _tmp368_;
	ValaCCodeFragment* _tmp369_;
	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_type_name (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_);
	type_struct = _tmp8_;
	_tmp9_ = vala_ccode_newline_new ();
	_tmp10_ = _tmp9_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp10_);
	_vala_ccode_node_unref0 (_tmp10_);
	_tmp11_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
	_tmp12_ = _tmp11_;
	_tmp13_ = g_strdup_printf ("(%s_get_type ())", _tmp12_);
	_tmp14_ = _tmp13_;
	_g_free0 (_tmp12_);
	macro = _tmp14_;
	_tmp15_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp16_ = _tmp15_;
	_tmp17_ = macro;
	_tmp18_ = vala_ccode_macro_replacement_new (_tmp16_, _tmp17_);
	_tmp19_ = _tmp18_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp19_);
	_vala_ccode_node_unref0 (_tmp19_);
	_g_free0 (_tmp16_);
	_tmp20_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp23_ = _tmp22_;
	_tmp24_ = g_strdup_printf ("(G_TYPE_CHECK_INSTANCE_CAST ((obj), %s, %s))", _tmp21_, _tmp23_);
	_g_free0 (macro);
	macro = _tmp24_;
	_g_free0 (_tmp23_);
	_g_free0 (_tmp21_);
	_tmp25_ = vala_get_ccode_type_cast_function ((ValaObjectTypeSymbol*) iface);
	_tmp26_ = _tmp25_;
	_tmp27_ = g_strdup_printf ("%s(obj)", _tmp26_);
	_tmp28_ = _tmp27_;
	_tmp29_ = macro;
	_tmp30_ = vala_ccode_macro_replacement_new (_tmp28_, _tmp29_);
	_tmp31_ = _tmp30_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp31_);
	_vala_ccode_node_unref0 (_tmp31_);
	_g_free0 (_tmp28_);
	_g_free0 (_tmp26_);
	_tmp32_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp33_ = _tmp32_;
	_tmp34_ = g_strdup_printf ("(G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))", _tmp33_);
	_g_free0 (macro);
	macro = _tmp34_;
	_g_free0 (_tmp33_);
	_tmp35_ = vala_get_ccode_type_check_function ((ValaTypeSymbol*) iface);
	_tmp36_ = _tmp35_;
	_tmp37_ = g_strdup_printf ("%s(obj)", _tmp36_);
	_tmp38_ = _tmp37_;
	_tmp39_ = macro;
	_tmp40_ = vala_ccode_macro_replacement_new (_tmp38_, _tmp39_);
	_tmp41_ = _tmp40_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp41_);
	_vala_ccode_node_unref0 (_tmp41_);
	_g_free0 (_tmp38_);
	_g_free0 (_tmp36_);
	_tmp42_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
	_tmp43_ = _tmp42_;
	_tmp44_ = vala_get_ccode_type_name (iface);
	_tmp45_ = _tmp44_;
	_tmp46_ = g_strdup_printf ("(G_TYPE_INSTANCE_GET_INTERFACE ((obj), %s, %s))", _tmp43_, _tmp45_);
	_g_free0 (macro);
	macro = _tmp46_;
	_g_free0 (_tmp45_);
	_g_free0 (_tmp43_);
	_tmp47_ = vala_get_ccode_interface_get_function (iface);
	_tmp48_ = _tmp47_;
	_tmp49_ = g_strdup_printf ("%s(obj)", _tmp48_);
	_tmp50_ = _tmp49_;
	_tmp51_ = macro;
	_tmp52_ = vala_ccode_macro_replacement_new (_tmp50_, _tmp51_);
	_tmp53_ = _tmp52_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp53_);
	_vala_ccode_node_unref0 (_tmp53_);
	_g_free0 (_tmp50_);
	_g_free0 (_tmp48_);
	_tmp54_ = vala_ccode_newline_new ();
	_tmp55_ = _tmp54_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp55_);
	_vala_ccode_node_unref0 (_tmp55_);
	_tmp56_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp57_ = _tmp56_;
	_tmp58_ = g_strdup_printf ("struct _%s", _tmp57_);
	_tmp59_ = _tmp58_;
	_tmp60_ = vala_get_ccode_name ((ValaCodeNode*) iface);
	_tmp61_ = _tmp60_;
	_tmp62_ = vala_ccode_variable_declarator_new (_tmp61_, NULL, NULL);
	_tmp63_ = _tmp62_;
	_tmp64_ = vala_ccode_type_definition_new (_tmp59_, (ValaCCodeDeclarator*) _tmp63_);
	_tmp65_ = _tmp64_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp65_);
	_vala_ccode_node_unref0 (_tmp65_);
	_vala_ccode_node_unref0 (_tmp63_);
	_g_free0 (_tmp61_);
	_g_free0 (_tmp59_);
	_g_free0 (_tmp57_);
	_tmp66_ = type_struct;
	_tmp67_ = vala_ccode_struct_get_name (_tmp66_);
	_tmp68_ = _tmp67_;
	_tmp69_ = g_strdup_printf ("struct %s", _tmp68_);
	_tmp70_ = _tmp69_;
	_tmp71_ = vala_get_ccode_type_name (iface);
	_tmp72_ = _tmp71_;
	_tmp73_ = vala_ccode_variable_declarator_new (_tmp72_, NULL, NULL);
	_tmp74_ = _tmp73_;
	_tmp75_ = vala_ccode_type_definition_new (_tmp70_, (ValaCCodeDeclarator*) _tmp74_);
	_tmp76_ = _tmp75_;
	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp76_);
	_vala_ccode_node_unref0 (_tmp76_);
	_vala_ccode_node_unref0 (_tmp74_);
	_g_free0 (_tmp72_);
	_g_free0 (_tmp70_);
	{
		ValaList* _prerequisite_list = NULL;
		ValaList* _tmp77_;
		gint _prerequisite_size = 0;
		ValaList* _tmp78_;
		gint _tmp79_;
		gint _tmp80_;
		gint _prerequisite_index = 0;
		_tmp77_ = vala_interface_get_prerequisites (iface);
		_prerequisite_list = _tmp77_;
		_tmp78_ = _prerequisite_list;
		_tmp79_ = vala_collection_get_size ((ValaCollection*) _tmp78_);
		_tmp80_ = _tmp79_;
		_prerequisite_size = _tmp80_;
		_prerequisite_index = -1;
		while (TRUE) {
			ValaDataType* prerequisite = NULL;
			ValaList* _tmp81_;
			gpointer _tmp82_;
			ValaClass* prereq_cl = NULL;
			ValaDataType* _tmp83_;
			ValaTypeSymbol* _tmp84_;
			ValaTypeSymbol* _tmp85_;
			ValaClass* _tmp86_;
			ValaInterface* prereq_iface = NULL;
			ValaDataType* _tmp87_;
			ValaTypeSymbol* _tmp88_;
			ValaTypeSymbol* _tmp89_;
			ValaInterface* _tmp90_;
			ValaClass* _tmp91_;
			_prerequisite_index = _prerequisite_index + 1;
			if (!(_prerequisite_index < _prerequisite_size)) {
				break;
			}
			_tmp81_ = _prerequisite_list;
			_tmp82_ = vala_list_get (_tmp81_, _prerequisite_index);
			prerequisite = (ValaDataType*) _tmp82_;
			_tmp83_ = prerequisite;
			_tmp84_ = vala_data_type_get_data_type (_tmp83_);
			_tmp85_ = _tmp84_;
			_tmp86_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp85_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp85_) : NULL);
			prereq_cl = _tmp86_;
			_tmp87_ = prerequisite;
			_tmp88_ = vala_data_type_get_data_type (_tmp87_);
			_tmp89_ = _tmp88_;
			_tmp90_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp89_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp89_) : NULL);
			prereq_iface = _tmp90_;
			_tmp91_ = prereq_cl;
			if (_tmp91_ != NULL) {
				ValaClass* _tmp92_;
				_tmp92_ = prereq_cl;
				vala_ccode_base_module_generate_class_declaration ((ValaCCodeBaseModule*) self, _tmp92_, decl_space);
			} else {
				ValaInterface* _tmp93_;
				_tmp93_ = prereq_iface;
				if (_tmp93_ != NULL) {
					ValaInterface* _tmp94_;
					_tmp94_ = prereq_iface;
					vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, _tmp94_, decl_space);
				}
			}
			_vala_code_node_unref0 (prereq_iface);
			_vala_code_node_unref0 (prereq_cl);
			_vala_code_node_unref0 (prerequisite);
		}
		_vala_iterable_unref0 (_prerequisite_list);
	}
	_tmp95_ = type_struct;
	vala_ccode_struct_add_field (_tmp95_, "GTypeInterface", "parent_iface", 0, NULL);
	_tmp96_ = vala_code_node_get_attribute ((ValaCodeNode*) iface, "GenericAccessors");
	if (_tmp96_ != NULL) {
		{
			ValaList* _p_list = NULL;
			ValaList* _tmp97_;
			gint _p_size = 0;
			ValaList* _tmp98_;
			gint _tmp99_;
			gint _tmp100_;
			gint _p_index = 0;
			_tmp97_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
			_p_list = _tmp97_;
			_tmp98_ = _p_list;
			_tmp99_ = vala_collection_get_size ((ValaCollection*) _tmp98_);
			_tmp100_ = _tmp99_;
			_p_size = _tmp100_;
			_p_index = -1;
			while (TRUE) {
				ValaTypeParameter* p = NULL;
				ValaList* _tmp101_;
				gpointer _tmp102_;
				gchar* method_name = NULL;
				ValaTypeParameter* _tmp103_;
				const gchar* _tmp104_;
				const gchar* _tmp105_;
				gchar* _tmp106_;
				gchar* _tmp107_;
				gchar* _tmp108_;
				gchar* _tmp109_;
				ValaCCodeFunctionDeclarator* vdeclarator = NULL;
				const gchar* _tmp110_;
				ValaCCodeFunctionDeclarator* _tmp111_;
				ValaDataType* this_type = NULL;
				ValaDataType* _tmp112_;
				ValaCCodeFunctionDeclarator* _tmp113_;
				ValaDataType* _tmp114_;
				gchar* _tmp115_;
				gchar* _tmp116_;
				ValaCCodeParameter* _tmp117_;
				ValaCCodeParameter* _tmp118_;
				ValaCCodeDeclaration* vdecl = NULL;
				ValaCCodeDeclaration* _tmp119_;
				ValaCCodeDeclaration* _tmp120_;
				ValaCCodeFunctionDeclarator* _tmp121_;
				ValaCCodeStruct* _tmp122_;
				ValaCCodeDeclaration* _tmp123_;
				ValaTypeParameter* _tmp124_;
				const gchar* _tmp125_;
				const gchar* _tmp126_;
				gchar* _tmp127_;
				gchar* _tmp128_;
				gchar* _tmp129_;
				const gchar* _tmp130_;
				ValaCCodeFunctionDeclarator* _tmp131_;
				ValaDataType* _tmp132_;
				ValaCCodeFunctionDeclarator* _tmp133_;
				ValaDataType* _tmp134_;
				gchar* _tmp135_;
				gchar* _tmp136_;
				ValaCCodeParameter* _tmp137_;
				ValaCCodeParameter* _tmp138_;
				ValaCCodeDeclaration* _tmp139_;
				ValaCCodeDeclaration* _tmp140_;
				ValaCCodeFunctionDeclarator* _tmp141_;
				ValaCCodeStruct* _tmp142_;
				ValaCCodeDeclaration* _tmp143_;
				ValaTypeParameter* _tmp144_;
				const gchar* _tmp145_;
				const gchar* _tmp146_;
				gchar* _tmp147_;
				gchar* _tmp148_;
				gchar* _tmp149_;
				const gchar* _tmp150_;
				ValaCCodeFunctionDeclarator* _tmp151_;
				ValaDataType* _tmp152_;
				ValaCCodeFunctionDeclarator* _tmp153_;
				ValaDataType* _tmp154_;
				gchar* _tmp155_;
				gchar* _tmp156_;
				ValaCCodeParameter* _tmp157_;
				ValaCCodeParameter* _tmp158_;
				ValaCCodeDeclaration* _tmp159_;
				ValaCCodeDeclaration* _tmp160_;
				ValaCCodeFunctionDeclarator* _tmp161_;
				ValaCCodeStruct* _tmp162_;
				ValaCCodeDeclaration* _tmp163_;
				_p_index = _p_index + 1;
				if (!(_p_index < _p_size)) {
					break;
				}
				_tmp101_ = _p_list;
				_tmp102_ = vala_list_get (_tmp101_, _p_index);
				p = (ValaTypeParameter*) _tmp102_;
				_tmp103_ = p;
				_tmp104_ = vala_symbol_get_name ((ValaSymbol*) _tmp103_);
				_tmp105_ = _tmp104_;
				_tmp106_ = g_utf8_strdown (_tmp105_, (gssize) -1);
				_tmp107_ = _tmp106_;
				_tmp108_ = g_strdup_printf ("get_%s_type", _tmp107_);
				_tmp109_ = _tmp108_;
				_g_free0 (_tmp107_);
				method_name = _tmp109_;
				_tmp110_ = method_name;
				_tmp111_ = vala_ccode_function_declarator_new (_tmp110_);
				vdeclarator = _tmp111_;
				_tmp112_ = vala_ccode_base_module_get_data_type_for_symbol ((ValaTypeSymbol*) iface);
				this_type = _tmp112_;
				_tmp113_ = vdeclarator;
				_tmp114_ = this_type;
				_tmp115_ = vala_get_ccode_name ((ValaCodeNode*) _tmp114_);
				_tmp116_ = _tmp115_;
				_tmp117_ = vala_ccode_parameter_new ("self", _tmp116_);
				_tmp118_ = _tmp117_;
				vala_ccode_function_declarator_add_parameter (_tmp113_, _tmp118_);
				_vala_ccode_node_unref0 (_tmp118_);
				_g_free0 (_tmp116_);
				_tmp119_ = vala_ccode_declaration_new ("GType");
				vdecl = _tmp119_;
				_tmp120_ = vdecl;
				_tmp121_ = vdeclarator;
				vala_ccode_declaration_add_declarator (_tmp120_, (ValaCCodeDeclarator*) _tmp121_);
				_tmp122_ = type_struct;
				_tmp123_ = vdecl;
				vala_ccode_struct_add_declaration (_tmp122_, _tmp123_);
				_tmp124_ = p;
				_tmp125_ = vala_symbol_get_name ((ValaSymbol*) _tmp124_);
				_tmp126_ = _tmp125_;
				_tmp127_ = g_utf8_strdown (_tmp126_, (gssize) -1);
				_tmp128_ = _tmp127_;
				_tmp129_ = g_strdup_printf ("get_%s_dup_func", _tmp128_);
				_g_free0 (method_name);
				method_name = _tmp129_;
				_g_free0 (_tmp128_);
				_tmp130_ = method_name;
				_tmp131_ = vala_ccode_function_declarator_new (_tmp130_);
				_vala_ccode_node_unref0 (vdeclarator);
				vdeclarator = _tmp131_;
				_tmp132_ = vala_ccode_base_module_get_data_type_for_symbol ((ValaTypeSymbol*) iface);
				_vala_code_node_unref0 (this_type);
				this_type = _tmp132_;
				_tmp133_ = vdeclarator;
				_tmp134_ = this_type;
				_tmp135_ = vala_get_ccode_name ((ValaCodeNode*) _tmp134_);
				_tmp136_ = _tmp135_;
				_tmp137_ = vala_ccode_parameter_new ("self", _tmp136_);
				_tmp138_ = _tmp137_;
				vala_ccode_function_declarator_add_parameter (_tmp133_, _tmp138_);
				_vala_ccode_node_unref0 (_tmp138_);
				_g_free0 (_tmp136_);
				_tmp139_ = vala_ccode_declaration_new ("GBoxedCopyFunc");
				_vala_ccode_node_unref0 (vdecl);
				vdecl = _tmp139_;
				_tmp140_ = vdecl;
				_tmp141_ = vdeclarator;
				vala_ccode_declaration_add_declarator (_tmp140_, (ValaCCodeDeclarator*) _tmp141_);
				_tmp142_ = type_struct;
				_tmp143_ = vdecl;
				vala_ccode_struct_add_declaration (_tmp142_, _tmp143_);
				_tmp144_ = p;
				_tmp145_ = vala_symbol_get_name ((ValaSymbol*) _tmp144_);
				_tmp146_ = _tmp145_;
				_tmp147_ = g_utf8_strdown (_tmp146_, (gssize) -1);
				_tmp148_ = _tmp147_;
				_tmp149_ = g_strdup_printf ("get_%s_destroy_func", _tmp148_);
				_g_free0 (method_name);
				method_name = _tmp149_;
				_g_free0 (_tmp148_);
				_tmp150_ = method_name;
				_tmp151_ = vala_ccode_function_declarator_new (_tmp150_);
				_vala_ccode_node_unref0 (vdeclarator);
				vdeclarator = _tmp151_;
				_tmp152_ = vala_ccode_base_module_get_data_type_for_symbol ((ValaTypeSymbol*) iface);
				_vala_code_node_unref0 (this_type);
				this_type = _tmp152_;
				_tmp153_ = vdeclarator;
				_tmp154_ = this_type;
				_tmp155_ = vala_get_ccode_name ((ValaCodeNode*) _tmp154_);
				_tmp156_ = _tmp155_;
				_tmp157_ = vala_ccode_parameter_new ("self", _tmp156_);
				_tmp158_ = _tmp157_;
				vala_ccode_function_declarator_add_parameter (_tmp153_, _tmp158_);
				_vala_ccode_node_unref0 (_tmp158_);
				_g_free0 (_tmp156_);
				_tmp159_ = vala_ccode_declaration_new ("GDestroyNotify");
				_vala_ccode_node_unref0 (vdecl);
				vdecl = _tmp159_;
				_tmp160_ = vdecl;
				_tmp161_ = vdeclarator;
				vala_ccode_declaration_add_declarator (_tmp160_, (ValaCCodeDeclarator*) _tmp161_);
				_tmp162_ = type_struct;
				_tmp163_ = vdecl;
				vala_ccode_struct_add_declaration (_tmp162_, _tmp163_);
				_vala_ccode_node_unref0 (vdecl);
				_vala_code_node_unref0 (this_type);
				_vala_ccode_node_unref0 (vdeclarator);
				_g_free0 (method_name);
				_vala_code_node_unref0 (p);
			}
			_vala_iterable_unref0 (_p_list);
		}
	}
	{
		ValaList* _sym_list = NULL;
		ValaList* _tmp164_;
		gint _sym_size = 0;
		ValaList* _tmp165_;
		gint _tmp166_;
		gint _tmp167_;
		gint _sym_index = 0;
		_tmp164_ = vala_interface_get_virtuals (iface);
		_sym_list = _tmp164_;
		_tmp165_ = _sym_list;
		_tmp166_ = vala_collection_get_size ((ValaCollection*) _tmp165_);
		_tmp167_ = _tmp166_;
		_sym_size = _tmp167_;
		_sym_index = -1;
		while (TRUE) {
			ValaSymbol* sym = NULL;
			ValaList* _tmp168_;
			gpointer _tmp169_;
			ValaMethod* m = NULL;
			ValaSignal* sig = NULL;
			ValaProperty* prop = NULL;
			ValaSymbol* _tmp170_;
			ValaMethod* _tmp171_;
			ValaMethod* _tmp172_;
			_sym_index = _sym_index + 1;
			if (!(_sym_index < _sym_size)) {
				break;
			}
			_tmp168_ = _sym_list;
			_tmp169_ = vala_list_get (_tmp168_, _sym_index);
			sym = (ValaSymbol*) _tmp169_;
			_tmp170_ = sym;
			_tmp171_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp170_, VALA_TYPE_METHOD) ? ((ValaMethod*) _tmp170_) : NULL);
			_vala_code_node_unref0 (m);
			m = _tmp171_;
			_tmp172_ = m;
			if (_tmp172_ != NULL) {
				ValaMethod* _tmp173_;
				ValaCCodeStruct* _tmp174_;
				_tmp173_ = m;
				_tmp174_ = type_struct;
				vala_gtype_module_generate_virtual_method_declaration (self, _tmp173_, decl_space, _tmp174_);
			} else {
				ValaSymbol* _tmp175_;
				ValaSignal* _tmp176_;
				ValaSignal* _tmp177_;
				_tmp175_ = sym;
				_tmp176_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp175_, VALA_TYPE_SIGNAL) ? ((ValaSignal*) _tmp175_) : NULL);
				_vala_code_node_unref0 (sig);
				sig = _tmp176_;
				_tmp177_ = sig;
				if (_tmp177_ != NULL) {
					ValaSignal* _tmp178_;
					ValaMethod* _tmp179_;
					ValaMethod* _tmp180_;
					_tmp178_ = sig;
					_tmp179_ = vala_signal_get_default_handler (_tmp178_);
					_tmp180_ = _tmp179_;
					if (_tmp180_ != NULL) {
						ValaSignal* _tmp181_;
						ValaMethod* _tmp182_;
						ValaMethod* _tmp183_;
						ValaCCodeStruct* _tmp184_;
						_tmp181_ = sig;
						_tmp182_ = vala_signal_get_default_handler (_tmp181_);
						_tmp183_ = _tmp182_;
						_tmp184_ = type_struct;
						vala_gtype_module_generate_virtual_method_declaration (self, _tmp183_, decl_space, _tmp184_);
					}
				} else {
					ValaSymbol* _tmp185_;
					ValaProperty* _tmp186_;
					ValaProperty* _tmp187_;
					_tmp185_ = sym;
					_tmp186_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp185_, VALA_TYPE_PROPERTY) ? ((ValaProperty*) _tmp185_) : NULL);
					_vala_code_node_unref0 (prop);
					prop = _tmp186_;
					_tmp187_ = prop;
					if (_tmp187_ != NULL) {
						ValaProperty* _tmp188_;
						ValaDataType* _tmp189_;
						ValaDataType* _tmp190_;
						ValaObjectTypeSymbol* t = NULL;
						ValaProperty* _tmp191_;
						ValaSymbol* _tmp192_;
						ValaSymbol* _tmp193_;
						ValaObjectTypeSymbol* _tmp194_;
						gboolean returns_real_struct = FALSE;
						ValaProperty* _tmp195_;
						ValaDataType* _tmp196_;
						ValaDataType* _tmp197_;
						ValaObjectType* this_type = NULL;
						ValaObjectTypeSymbol* _tmp198_;
						ValaObjectType* _tmp199_;
						ValaCCodeParameter* cselfparam = NULL;
						ValaObjectType* _tmp200_;
						gchar* _tmp201_;
						gchar* _tmp202_;
						ValaCCodeParameter* _tmp203_;
						ValaCCodeParameter* _tmp204_;
						ValaProperty* _tmp205_;
						ValaPropertyAccessor* _tmp206_;
						ValaPropertyAccessor* _tmp207_;
						ValaProperty* _tmp282_;
						ValaPropertyAccessor* _tmp283_;
						ValaPropertyAccessor* _tmp284_;
						_tmp188_ = prop;
						_tmp189_ = vala_property_get_property_type (_tmp188_);
						_tmp190_ = _tmp189_;
						vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp190_, decl_space);
						_tmp191_ = prop;
						_tmp192_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp191_);
						_tmp193_ = _tmp192_;
						_tmp194_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp193_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
						t = _tmp194_;
						_tmp195_ = prop;
						_tmp196_ = vala_property_get_property_type (_tmp195_);
						_tmp197_ = _tmp196_;
						returns_real_struct = vala_data_type_is_real_non_null_struct_type (_tmp197_);
						_tmp198_ = t;
						_tmp199_ = vala_object_type_new (_tmp198_);
						this_type = _tmp199_;
						_tmp200_ = this_type;
						_tmp201_ = vala_get_ccode_name ((ValaCodeNode*) _tmp200_);
						_tmp202_ = _tmp201_;
						_tmp203_ = vala_ccode_parameter_new ("self", _tmp202_);
						_tmp204_ = _tmp203_;
						_g_free0 (_tmp202_);
						cselfparam = _tmp204_;
						_tmp205_ = prop;
						_tmp206_ = vala_property_get_get_accessor (_tmp205_);
						_tmp207_ = _tmp206_;
						if (_tmp207_ != NULL) {
							ValaCCodeFunctionDeclarator* vdeclarator = NULL;
							ValaProperty* _tmp208_;
							const gchar* _tmp209_;
							const gchar* _tmp210_;
							gchar* _tmp211_;
							gchar* _tmp212_;
							ValaCCodeFunctionDeclarator* _tmp213_;
							ValaCCodeFunctionDeclarator* _tmp214_;
							ValaCCodeFunctionDeclarator* _tmp215_;
							ValaCCodeParameter* _tmp216_;
							gchar* creturn_type = NULL;
							ValaArrayType* array_type = NULL;
							ValaProperty* _tmp237_;
							ValaDataType* _tmp238_;
							ValaDataType* _tmp239_;
							ValaArrayType* _tmp240_;
							ValaArrayType* _tmp241_;
							ValaCCodeDeclaration* vdecl = NULL;
							const gchar* _tmp276_;
							ValaCCodeDeclaration* _tmp277_;
							ValaCCodeDeclaration* _tmp278_;
							ValaCCodeFunctionDeclarator* _tmp279_;
							ValaCCodeStruct* _tmp280_;
							ValaCCodeDeclaration* _tmp281_;
							_tmp208_ = prop;
							_tmp209_ = vala_symbol_get_name ((ValaSymbol*) _tmp208_);
							_tmp210_ = _tmp209_;
							_tmp211_ = g_strdup_printf ("get_%s", _tmp210_);
							_tmp212_ = _tmp211_;
							_tmp213_ = vala_ccode_function_declarator_new (_tmp212_);
							_tmp214_ = _tmp213_;
							_g_free0 (_tmp212_);
							vdeclarator = _tmp214_;
							_tmp215_ = vdeclarator;
							_tmp216_ = cselfparam;
							vala_ccode_function_declarator_add_parameter (_tmp215_, _tmp216_);
							if (returns_real_struct) {
								ValaCCodeParameter* cvalueparam = NULL;
								ValaProperty* _tmp217_;
								ValaPropertyAccessor* _tmp218_;
								ValaPropertyAccessor* _tmp219_;
								ValaDataType* _tmp220_;
								ValaDataType* _tmp221_;
								gchar* _tmp222_;
								gchar* _tmp223_;
								gchar* _tmp224_;
								gchar* _tmp225_;
								ValaCCodeParameter* _tmp226_;
								ValaCCodeParameter* _tmp227_;
								ValaCCodeFunctionDeclarator* _tmp228_;
								ValaCCodeParameter* _tmp229_;
								gchar* _tmp230_;
								_tmp217_ = prop;
								_tmp218_ = vala_property_get_get_accessor (_tmp217_);
								_tmp219_ = _tmp218_;
								_tmp220_ = vala_property_accessor_get_value_type (_tmp219_);
								_tmp221_ = _tmp220_;
								_tmp222_ = vala_get_ccode_name ((ValaCodeNode*) _tmp221_);
								_tmp223_ = _tmp222_;
								_tmp224_ = g_strdup_printf ("%s *", _tmp223_);
								_tmp225_ = _tmp224_;
								_tmp226_ = vala_ccode_parameter_new ("value", _tmp225_);
								_tmp227_ = _tmp226_;
								_g_free0 (_tmp225_);
								_g_free0 (_tmp223_);
								cvalueparam = _tmp227_;
								_tmp228_ = vdeclarator;
								_tmp229_ = cvalueparam;
								vala_ccode_function_declarator_add_parameter (_tmp228_, _tmp229_);
								_tmp230_ = g_strdup ("void");
								_g_free0 (creturn_type);
								creturn_type = _tmp230_;
								_vala_ccode_node_unref0 (cvalueparam);
							} else {
								ValaProperty* _tmp231_;
								ValaPropertyAccessor* _tmp232_;
								ValaPropertyAccessor* _tmp233_;
								ValaDataType* _tmp234_;
								ValaDataType* _tmp235_;
								gchar* _tmp236_;
								_tmp231_ = prop;
								_tmp232_ = vala_property_get_get_accessor (_tmp231_);
								_tmp233_ = _tmp232_;
								_tmp234_ = vala_property_accessor_get_value_type (_tmp233_);
								_tmp235_ = _tmp234_;
								_tmp236_ = vala_get_ccode_name ((ValaCodeNode*) _tmp235_);
								_g_free0 (creturn_type);
								creturn_type = _tmp236_;
							}
							_tmp237_ = prop;
							_tmp238_ = vala_property_get_property_type (_tmp237_);
							_tmp239_ = _tmp238_;
							_tmp240_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp239_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp239_) : NULL);
							array_type = _tmp240_;
							_tmp241_ = array_type;
							if (_tmp241_ != NULL) {
								gchar* length_ctype = NULL;
								ValaArrayType* _tmp242_;
								gchar* _tmp243_;
								gchar* _tmp244_;
								gchar* _tmp245_;
								gchar* _tmp246_;
								_tmp242_ = array_type;
								_tmp243_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp242_);
								_tmp244_ = _tmp243_;
								_tmp245_ = g_strconcat (_tmp244_, "*", NULL);
								_tmp246_ = _tmp245_;
								_g_free0 (_tmp244_);
								length_ctype = _tmp246_;
								{
									gint dim = 0;
									dim = 1;
									{
										gboolean _tmp247_ = FALSE;
										_tmp247_ = TRUE;
										while (TRUE) {
											ValaArrayType* _tmp249_;
											gint _tmp250_;
											gint _tmp251_;
											ValaCCodeFunctionDeclarator* _tmp252_;
											gchar* _tmp253_;
											gchar* _tmp254_;
											const gchar* _tmp255_;
											ValaCCodeParameter* _tmp256_;
											ValaCCodeParameter* _tmp257_;
											if (!_tmp247_) {
												gint _tmp248_;
												_tmp248_ = dim;
												dim = _tmp248_ + 1;
											}
											_tmp247_ = FALSE;
											_tmp249_ = array_type;
											_tmp250_ = vala_array_type_get_rank (_tmp249_);
											_tmp251_ = _tmp250_;
											if (!(dim <= _tmp251_)) {
												break;
											}
											_tmp252_ = vdeclarator;
											_tmp253_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", dim);
											_tmp254_ = _tmp253_;
											_tmp255_ = length_ctype;
											_tmp256_ = vala_ccode_parameter_new (_tmp254_, _tmp255_);
											_tmp257_ = _tmp256_;
											vala_ccode_function_declarator_add_parameter (_tmp252_, _tmp257_);
											_vala_ccode_node_unref0 (_tmp257_);
											_g_free0 (_tmp254_);
										}
									}
								}
								_g_free0 (length_ctype);
							} else {
								gboolean _tmp258_ = FALSE;
								gboolean _tmp259_ = FALSE;
								ValaProperty* _tmp260_;
								ValaDataType* _tmp261_;
								ValaDataType* _tmp262_;
								_tmp260_ = prop;
								_tmp261_ = vala_property_get_property_type (_tmp260_);
								_tmp262_ = _tmp261_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp262_, VALA_TYPE_DELEGATE_TYPE)) {
									ValaProperty* _tmp263_;
									_tmp263_ = prop;
									_tmp259_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp263_);
								} else {
									_tmp259_ = FALSE;
								}
								if (_tmp259_) {
									ValaProperty* _tmp264_;
									ValaDataType* _tmp265_;
									ValaDataType* _tmp266_;
									ValaDelegate* _tmp267_;
									ValaDelegate* _tmp268_;
									gboolean _tmp269_;
									gboolean _tmp270_;
									_tmp264_ = prop;
									_tmp265_ = vala_property_get_property_type (_tmp264_);
									_tmp266_ = _tmp265_;
									_tmp267_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp266_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
									_tmp268_ = _tmp267_;
									_tmp269_ = vala_delegate_get_has_target (_tmp268_);
									_tmp270_ = _tmp269_;
									_tmp258_ = _tmp270_;
								} else {
									_tmp258_ = FALSE;
								}
								if (_tmp258_) {
									ValaCCodeFunctionDeclarator* _tmp271_;
									gchar* _tmp272_;
									gchar* _tmp273_;
									ValaCCodeParameter* _tmp274_;
									ValaCCodeParameter* _tmp275_;
									_tmp271_ = vdeclarator;
									_tmp272_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
									_tmp273_ = _tmp272_;
									_tmp274_ = vala_ccode_parameter_new (_tmp273_, "gpointer*");
									_tmp275_ = _tmp274_;
									vala_ccode_function_declarator_add_parameter (_tmp271_, _tmp275_);
									_vala_ccode_node_unref0 (_tmp275_);
									_g_free0 (_tmp273_);
								}
							}
							_tmp276_ = creturn_type;
							_tmp277_ = vala_ccode_declaration_new (_tmp276_);
							vdecl = _tmp277_;
							_tmp278_ = vdecl;
							_tmp279_ = vdeclarator;
							vala_ccode_declaration_add_declarator (_tmp278_, (ValaCCodeDeclarator*) _tmp279_);
							_tmp280_ = type_struct;
							_tmp281_ = vdecl;
							vala_ccode_struct_add_declaration (_tmp280_, _tmp281_);
							_vala_ccode_node_unref0 (vdecl);
							_vala_code_node_unref0 (array_type);
							_g_free0 (creturn_type);
							_vala_ccode_node_unref0 (vdeclarator);
						}
						_tmp282_ = prop;
						_tmp283_ = vala_property_get_set_accessor (_tmp282_);
						_tmp284_ = _tmp283_;
						if (_tmp284_ != NULL) {
							ValaCCodeFunctionDeclarator* vdeclarator = NULL;
							ValaProperty* _tmp285_;
							const gchar* _tmp286_;
							const gchar* _tmp287_;
							gchar* _tmp288_;
							gchar* _tmp289_;
							ValaCCodeFunctionDeclarator* _tmp290_;
							ValaCCodeFunctionDeclarator* _tmp291_;
							ValaCCodeFunctionDeclarator* _tmp292_;
							ValaCCodeParameter* _tmp293_;
							ValaArrayType* array_type = NULL;
							ValaProperty* _tmp318_;
							ValaDataType* _tmp319_;
							ValaDataType* _tmp320_;
							ValaArrayType* _tmp321_;
							ValaArrayType* _tmp322_;
							ValaCCodeDeclaration* vdecl = NULL;
							ValaCCodeDeclaration* _tmp354_;
							ValaCCodeDeclaration* _tmp355_;
							ValaCCodeFunctionDeclarator* _tmp356_;
							ValaCCodeStruct* _tmp357_;
							ValaCCodeDeclaration* _tmp358_;
							_tmp285_ = prop;
							_tmp286_ = vala_symbol_get_name ((ValaSymbol*) _tmp285_);
							_tmp287_ = _tmp286_;
							_tmp288_ = g_strdup_printf ("set_%s", _tmp287_);
							_tmp289_ = _tmp288_;
							_tmp290_ = vala_ccode_function_declarator_new (_tmp289_);
							_tmp291_ = _tmp290_;
							_g_free0 (_tmp289_);
							vdeclarator = _tmp291_;
							_tmp292_ = vdeclarator;
							_tmp293_ = cselfparam;
							vala_ccode_function_declarator_add_parameter (_tmp292_, _tmp293_);
							if (returns_real_struct) {
								ValaCCodeParameter* cvalueparam = NULL;
								ValaProperty* _tmp294_;
								ValaPropertyAccessor* _tmp295_;
								ValaPropertyAccessor* _tmp296_;
								ValaDataType* _tmp297_;
								ValaDataType* _tmp298_;
								gchar* _tmp299_;
								gchar* _tmp300_;
								gchar* _tmp301_;
								gchar* _tmp302_;
								ValaCCodeParameter* _tmp303_;
								ValaCCodeParameter* _tmp304_;
								ValaCCodeFunctionDeclarator* _tmp305_;
								ValaCCodeParameter* _tmp306_;
								_tmp294_ = prop;
								_tmp295_ = vala_property_get_set_accessor (_tmp294_);
								_tmp296_ = _tmp295_;
								_tmp297_ = vala_property_accessor_get_value_type (_tmp296_);
								_tmp298_ = _tmp297_;
								_tmp299_ = vala_get_ccode_name ((ValaCodeNode*) _tmp298_);
								_tmp300_ = _tmp299_;
								_tmp301_ = g_strdup_printf ("%s *", _tmp300_);
								_tmp302_ = _tmp301_;
								_tmp303_ = vala_ccode_parameter_new ("value", _tmp302_);
								_tmp304_ = _tmp303_;
								_g_free0 (_tmp302_);
								_g_free0 (_tmp300_);
								cvalueparam = _tmp304_;
								_tmp305_ = vdeclarator;
								_tmp306_ = cvalueparam;
								vala_ccode_function_declarator_add_parameter (_tmp305_, _tmp306_);
								_vala_ccode_node_unref0 (cvalueparam);
							} else {
								ValaCCodeParameter* cvalueparam = NULL;
								ValaProperty* _tmp307_;
								ValaPropertyAccessor* _tmp308_;
								ValaPropertyAccessor* _tmp309_;
								ValaDataType* _tmp310_;
								ValaDataType* _tmp311_;
								gchar* _tmp312_;
								gchar* _tmp313_;
								ValaCCodeParameter* _tmp314_;
								ValaCCodeParameter* _tmp315_;
								ValaCCodeFunctionDeclarator* _tmp316_;
								ValaCCodeParameter* _tmp317_;
								_tmp307_ = prop;
								_tmp308_ = vala_property_get_set_accessor (_tmp307_);
								_tmp309_ = _tmp308_;
								_tmp310_ = vala_property_accessor_get_value_type (_tmp309_);
								_tmp311_ = _tmp310_;
								_tmp312_ = vala_get_ccode_name ((ValaCodeNode*) _tmp311_);
								_tmp313_ = _tmp312_;
								_tmp314_ = vala_ccode_parameter_new ("value", _tmp313_);
								_tmp315_ = _tmp314_;
								_g_free0 (_tmp313_);
								cvalueparam = _tmp315_;
								_tmp316_ = vdeclarator;
								_tmp317_ = cvalueparam;
								vala_ccode_function_declarator_add_parameter (_tmp316_, _tmp317_);
								_vala_ccode_node_unref0 (cvalueparam);
							}
							_tmp318_ = prop;
							_tmp319_ = vala_property_get_property_type (_tmp318_);
							_tmp320_ = _tmp319_;
							_tmp321_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp320_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp320_) : NULL);
							array_type = _tmp321_;
							_tmp322_ = array_type;
							if (_tmp322_ != NULL) {
								gchar* length_ctype = NULL;
								ValaArrayType* _tmp323_;
								gchar* _tmp324_;
								_tmp323_ = array_type;
								_tmp324_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp323_);
								length_ctype = _tmp324_;
								{
									gint dim = 0;
									dim = 1;
									{
										gboolean _tmp325_ = FALSE;
										_tmp325_ = TRUE;
										while (TRUE) {
											ValaArrayType* _tmp327_;
											gint _tmp328_;
											gint _tmp329_;
											ValaCCodeFunctionDeclarator* _tmp330_;
											gchar* _tmp331_;
											gchar* _tmp332_;
											const gchar* _tmp333_;
											ValaCCodeParameter* _tmp334_;
											ValaCCodeParameter* _tmp335_;
											if (!_tmp325_) {
												gint _tmp326_;
												_tmp326_ = dim;
												dim = _tmp326_ + 1;
											}
											_tmp325_ = FALSE;
											_tmp327_ = array_type;
											_tmp328_ = vala_array_type_get_rank (_tmp327_);
											_tmp329_ = _tmp328_;
											if (!(dim <= _tmp329_)) {
												break;
											}
											_tmp330_ = vdeclarator;
											_tmp331_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "value", dim);
											_tmp332_ = _tmp331_;
											_tmp333_ = length_ctype;
											_tmp334_ = vala_ccode_parameter_new (_tmp332_, _tmp333_);
											_tmp335_ = _tmp334_;
											vala_ccode_function_declarator_add_parameter (_tmp330_, _tmp335_);
											_vala_ccode_node_unref0 (_tmp335_);
											_g_free0 (_tmp332_);
										}
									}
								}
								_g_free0 (length_ctype);
							} else {
								gboolean _tmp336_ = FALSE;
								gboolean _tmp337_ = FALSE;
								ValaProperty* _tmp338_;
								ValaDataType* _tmp339_;
								ValaDataType* _tmp340_;
								_tmp338_ = prop;
								_tmp339_ = vala_property_get_property_type (_tmp338_);
								_tmp340_ = _tmp339_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp340_, VALA_TYPE_DELEGATE_TYPE)) {
									ValaProperty* _tmp341_;
									_tmp341_ = prop;
									_tmp337_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp341_);
								} else {
									_tmp337_ = FALSE;
								}
								if (_tmp337_) {
									ValaProperty* _tmp342_;
									ValaDataType* _tmp343_;
									ValaDataType* _tmp344_;
									ValaDelegate* _tmp345_;
									ValaDelegate* _tmp346_;
									gboolean _tmp347_;
									gboolean _tmp348_;
									_tmp342_ = prop;
									_tmp343_ = vala_property_get_property_type (_tmp342_);
									_tmp344_ = _tmp343_;
									_tmp345_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp344_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
									_tmp346_ = _tmp345_;
									_tmp347_ = vala_delegate_get_has_target (_tmp346_);
									_tmp348_ = _tmp347_;
									_tmp336_ = _tmp348_;
								} else {
									_tmp336_ = FALSE;
								}
								if (_tmp336_) {
									ValaCCodeFunctionDeclarator* _tmp349_;
									gchar* _tmp350_;
									gchar* _tmp351_;
									ValaCCodeParameter* _tmp352_;
									ValaCCodeParameter* _tmp353_;
									_tmp349_ = vdeclarator;
									_tmp350_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "value");
									_tmp351_ = _tmp350_;
									_tmp352_ = vala_ccode_parameter_new (_tmp351_, "gpointer");
									_tmp353_ = _tmp352_;
									vala_ccode_function_declarator_add_parameter (_tmp349_, _tmp353_);
									_vala_ccode_node_unref0 (_tmp353_);
									_g_free0 (_tmp351_);
								}
							}
							_tmp354_ = vala_ccode_declaration_new ("void");
							vdecl = _tmp354_;
							_tmp355_ = vdecl;
							_tmp356_ = vdeclarator;
							vala_ccode_declaration_add_declarator (_tmp355_, (ValaCCodeDeclarator*) _tmp356_);
							_tmp357_ = type_struct;
							_tmp358_ = vdecl;
							vala_ccode_struct_add_declaration (_tmp357_, _tmp358_);
							_vala_ccode_node_unref0 (vdecl);
							_vala_code_node_unref0 (array_type);
							_vala_ccode_node_unref0 (vdeclarator);
						}
						_vala_ccode_node_unref0 (cselfparam);
						_vala_code_node_unref0 (this_type);
						_vala_code_node_unref0 (t);
					} else {
						ValaSymbol* _tmp359_;
						ValaSourceReference* _tmp360_;
						ValaSourceReference* _tmp361_;
						_tmp359_ = sym;
						_tmp360_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp359_);
						_tmp361_ = _tmp360_;
						vala_report_error (_tmp361_, "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);
	}
	_tmp362_ = type_struct;
	vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) _tmp362_);
	_tmp363_ = vala_interface_register_function_new (iface);
	type_fun = _tmp363_;
	_tmp364_ = type_fun;
	_tmp365_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp366_ = _tmp365_;
	vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp364_, _tmp366_, ((ValaCCodeBaseModule*) self)->in_plugin, TRUE);
	_tmp367_ = type_fun;
	_tmp368_ = vala_typeregister_function_get_declaration ((ValaTypeRegisterFunction*) _tmp367_);
	_tmp369_ = _tmp368_;
	vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp369_);
	_vala_ccode_node_unref0 (_tmp369_);
	_vala_typeregister_function_unref0 (type_fun);
	_g_free0 (macro);
	_vala_ccode_node_unref0 (type_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* _tmp17_;
	ValaCCodeFile* _tmp18_;
	ValaList* _tmp21_;
	ValaList* _tmp22_;
	gint _tmp23_;
	gint _tmp24_;
	gboolean _tmp25_;
	ValaComment* _tmp57_;
	ValaComment* _tmp58_;
	ValaInterfaceRegisterFunction* type_fun = NULL;
	ValaInterfaceRegisterFunction* _tmp66_;
	ValaInterfaceRegisterFunction* _tmp67_;
	ValaCodeContext* _tmp68_;
	ValaCodeContext* _tmp69_;
	ValaCCodeFile* _tmp70_;
	ValaInterfaceRegisterFunction* _tmp71_;
	ValaCCodeFragment* _tmp72_;
	ValaCCodeFragment* _tmp73_;
	ValaCCodeFile* _tmp74_;
	ValaInterfaceRegisterFunction* _tmp75_;
	ValaCCodeFragment* _tmp76_;
	ValaCCodeFragment* _tmp77_;
	ValaCCodeEnum* _tmp78_;
	ValaCCodeEnum* _tmp79_;
	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_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		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_;
		_tmp15_ = g_strdup_printf ("Interface name `%s' is too short", _tmp14_);
		_tmp16_ = _tmp15_;
		vala_report_error (_tmp12_, _tmp16_);
		_g_free0 (_tmp16_);
		_g_free0 (_tmp14_);
		_vala_ccode_node_unref0 (old_signal_enum);
		return;
	}
	_tmp17_ = vala_ccode_enum_new (NULL);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp17_;
	_tmp18_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, iface, _tmp18_);
	if (!vala_symbol_is_internal_symbol ((ValaSymbol*) iface)) {
		ValaCCodeFile* _tmp19_;
		_tmp19_ = ((ValaCCodeBaseModule*) self)->header_file;
		vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, iface, _tmp19_);
	}
	if (!vala_symbol_is_private_symbol ((ValaSymbol*) iface)) {
		ValaCCodeFile* _tmp20_;
		_tmp20_ = ((ValaCCodeBaseModule*) self)->internal_header_file;
		vala_ccode_base_module_generate_interface_declaration ((ValaCCodeBaseModule*) self, iface, _tmp20_);
	}
	vala_code_node_accept_children ((ValaCodeNode*) iface, (ValaCodeVisitor*) self);
	_tmp21_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) iface);
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_collection_get_size ((ValaCollection*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = _tmp24_ > 0;
	_vala_iterable_unref0 (_tmp22_);
	if (_tmp25_) {
		gchar* last_signal = NULL;
		gchar* _tmp26_;
		gchar* _tmp27_;
		gchar* _tmp28_;
		gchar* _tmp29_;
		ValaCCodeEnum* _tmp30_;
		const gchar* _tmp31_;
		ValaCCodeEnumValue* _tmp32_;
		ValaCCodeEnumValue* _tmp33_;
		ValaCCodeFile* _tmp34_;
		ValaCCodeEnum* _tmp35_;
		ValaCCodeDeclaration* signal_array_decl = NULL;
		ValaCCodeDeclaration* _tmp36_;
		ValaCCodeDeclaration* _tmp37_;
		ValaCCodeDeclaration* _tmp38_;
		ValaCCodeModifiers _tmp39_;
		ValaCCodeModifiers _tmp40_;
		ValaCCodeDeclaration* _tmp41_;
		gchar* _tmp42_;
		gchar* _tmp43_;
		gchar* _tmp44_;
		gchar* _tmp45_;
		ValaCCodeConstant* _tmp46_;
		ValaCCodeConstant* _tmp47_;
		const gchar* _tmp48_;
		ValaCCodeIdentifier* _tmp49_;
		ValaCCodeIdentifier* _tmp50_;
		ValaCCodeDeclaratorSuffix* _tmp51_;
		ValaCCodeDeclaratorSuffix* _tmp52_;
		ValaCCodeVariableDeclarator* _tmp53_;
		ValaCCodeVariableDeclarator* _tmp54_;
		ValaCCodeFile* _tmp55_;
		ValaCCodeDeclaration* _tmp56_;
		_tmp26_ = vala_get_ccode_upper_case_name ((ValaSymbol*) iface, NULL);
		_tmp27_ = _tmp26_;
		_tmp28_ = g_strdup_printf ("%s_NUM_SIGNALS", _tmp27_);
		_tmp29_ = _tmp28_;
		_g_free0 (_tmp27_);
		last_signal = _tmp29_;
		_tmp30_ = ((ValaCCodeBaseModule*) self)->signal_enum;
		_tmp31_ = last_signal;
		_tmp32_ = vala_ccode_enum_value_new (_tmp31_, NULL);
		_tmp33_ = _tmp32_;
		vala_ccode_enum_add_value (_tmp30_, _tmp33_);
		_vala_ccode_node_unref0 (_tmp33_);
		_tmp34_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp35_ = ((ValaCCodeBaseModule*) self)->signal_enum;
		vala_ccode_file_add_type_declaration (_tmp34_, (ValaCCodeNode*) _tmp35_);
		_tmp36_ = vala_ccode_declaration_new ("guint");
		signal_array_decl = _tmp36_;
		_tmp37_ = signal_array_decl;
		_tmp38_ = signal_array_decl;
		_tmp39_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp38_);
		_tmp40_ = _tmp39_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp38_, _tmp40_ | VALA_CCODE_MODIFIERS_STATIC);
		_tmp41_ = signal_array_decl;
		_tmp42_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
		_tmp43_ = _tmp42_;
		_tmp44_ = g_strdup_printf ("%s_signals", _tmp43_);
		_tmp45_ = _tmp44_;
		_tmp46_ = vala_ccode_constant_new ("{0}");
		_tmp47_ = _tmp46_;
		_tmp48_ = last_signal;
		_tmp49_ = vala_ccode_identifier_new (_tmp48_);
		_tmp50_ = _tmp49_;
		_tmp51_ = vala_ccode_declarator_suffix_new_with_array ((ValaCCodeExpression*) _tmp50_);
		_tmp52_ = _tmp51_;
		_tmp53_ = vala_ccode_variable_declarator_new (_tmp45_, (ValaCCodeExpression*) _tmp47_, _tmp52_);
		_tmp54_ = _tmp53_;
		vala_ccode_declaration_add_declarator (_tmp41_, (ValaCCodeDeclarator*) _tmp54_);
		_vala_ccode_node_unref0 (_tmp54_);
		_vala_ccode_declarator_suffix_unref0 (_tmp52_);
		_vala_ccode_node_unref0 (_tmp50_);
		_vala_ccode_node_unref0 (_tmp47_);
		_g_free0 (_tmp45_);
		_g_free0 (_tmp43_);
		_tmp55_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp56_ = signal_array_decl;
		vala_ccode_file_add_type_declaration (_tmp55_, (ValaCCodeNode*) _tmp56_);
		_vala_ccode_node_unref0 (signal_array_decl);
		_g_free0 (last_signal);
	}
	vala_gtype_module_add_interface_default_init_function (self, iface);
	_tmp57_ = vala_symbol_get_comment ((ValaSymbol*) iface);
	_tmp58_ = _tmp57_;
	if (_tmp58_ != NULL) {
		ValaCCodeFile* _tmp59_;
		ValaComment* _tmp60_;
		ValaComment* _tmp61_;
		const gchar* _tmp62_;
		const gchar* _tmp63_;
		ValaCCodeComment* _tmp64_;
		ValaCCodeComment* _tmp65_;
		_tmp59_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp60_ = vala_symbol_get_comment ((ValaSymbol*) iface);
		_tmp61_ = _tmp60_;
		_tmp62_ = vala_comment_get_content (_tmp61_);
		_tmp63_ = _tmp62_;
		_tmp64_ = vala_ccode_comment_new (_tmp63_);
		_tmp65_ = _tmp64_;
		vala_ccode_file_add_type_member_definition (_tmp59_, (ValaCCodeNode*) _tmp65_);
		_vala_ccode_node_unref0 (_tmp65_);
	}
	_tmp66_ = vala_interface_register_function_new (iface);
	type_fun = _tmp66_;
	_tmp67_ = type_fun;
	_tmp68_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp69_ = _tmp68_;
	vala_typeregister_function_init_from_type ((ValaTypeRegisterFunction*) _tmp67_, _tmp69_, ((ValaCCodeBaseModule*) self)->in_plugin, FALSE);
	_tmp70_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp71_ = type_fun;
	_tmp72_ = vala_typeregister_function_get_source_declaration ((ValaTypeRegisterFunction*) _tmp71_);
	_tmp73_ = _tmp72_;
	vala_ccode_file_add_type_member_declaration (_tmp70_, (ValaCCodeNode*) _tmp73_);
	_vala_ccode_node_unref0 (_tmp73_);
	_tmp74_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp75_ = type_fun;
	_tmp76_ = vala_typeregister_function_get_definition ((ValaTypeRegisterFunction*) _tmp75_);
	_tmp77_ = _tmp76_;
	vala_ccode_file_add_type_member_definition (_tmp74_, (ValaCCodeNode*) _tmp77_);
	_vala_ccode_node_unref0 (_tmp77_);
	_tmp78_ = old_signal_enum;
	_tmp79_ = _vala_ccode_node_ref0 (_tmp78_);
	_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->signal_enum);
	((ValaCCodeBaseModule*) self)->signal_enum = _tmp79_;
	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* _tmp63_;
	ValaCCodeFile* _tmp200_;
	ValaCCodeFunction* _tmp201_;
	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_name ((ValaCodeNode*) iface);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%sIface *", _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_;
		_tmp21_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) iface);
		props = _tmp21_;
		{
			ValaList* _prop_list = NULL;
			ValaList* _tmp22_;
			ValaList* _tmp23_;
			gint _prop_size = 0;
			ValaList* _tmp24_;
			gint _tmp25_;
			gint _tmp26_;
			gint _prop_index = 0;
			_tmp22_ = props;
			_tmp23_ = _vala_iterable_ref0 (_tmp22_);
			_prop_list = _tmp23_;
			_tmp24_ = _prop_list;
			_tmp25_ = vala_collection_get_size ((ValaCollection*) _tmp24_);
			_tmp26_ = _tmp25_;
			_prop_size = _tmp26_;
			_prop_index = -1;
			while (TRUE) {
				ValaProperty* prop = NULL;
				ValaList* _tmp27_;
				gpointer _tmp28_;
				ValaProperty* _tmp29_;
				gboolean _tmp30_;
				gboolean _tmp31_;
				_prop_index = _prop_index + 1;
				if (!(_prop_index < _prop_size)) {
					break;
				}
				_tmp27_ = _prop_list;
				_tmp28_ = vala_list_get (_tmp27_, _prop_index);
				prop = (ValaProperty*) _tmp28_;
				_tmp29_ = prop;
				_tmp30_ = vala_property_get_is_abstract (_tmp29_);
				_tmp31_ = _tmp30_;
				if (_tmp31_) {
					ValaCodeContext* _tmp32_;
					ValaCodeContext* _tmp33_;
					ValaSemanticAnalyzer* _tmp34_;
					ValaSemanticAnalyzer* _tmp35_;
					ValaProperty* _tmp36_;
					ValaProperty* _tmp37_;
					ValaComment* _tmp38_;
					ValaComment* _tmp39_;
					ValaCCodeFunctionCall* cinst = NULL;
					ValaCCodeIdentifier* _tmp49_;
					ValaCCodeIdentifier* _tmp50_;
					ValaCCodeFunctionCall* _tmp51_;
					ValaCCodeFunctionCall* _tmp52_;
					ValaCCodeFunctionCall* _tmp53_;
					ValaCCodeIdentifier* _tmp54_;
					ValaCCodeIdentifier* _tmp55_;
					ValaCCodeFunctionCall* _tmp56_;
					ValaProperty* _tmp57_;
					ValaCCodeExpression* _tmp58_;
					ValaCCodeExpression* _tmp59_;
					ValaCCodeFunction* _tmp60_;
					ValaCCodeFunction* _tmp61_;
					ValaCCodeFunctionCall* _tmp62_;
					_tmp32_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
					_tmp33_ = _tmp32_;
					_tmp34_ = vala_code_context_get_analyzer (_tmp33_);
					_tmp35_ = _tmp34_;
					_tmp36_ = prop;
					if (!vala_semantic_analyzer_is_gobject_property (_tmp35_, _tmp36_)) {
						_vala_code_node_unref0 (prop);
						continue;
					}
					_tmp37_ = prop;
					_tmp38_ = vala_symbol_get_comment ((ValaSymbol*) _tmp37_);
					_tmp39_ = _tmp38_;
					if (_tmp39_ != NULL) {
						ValaCCodeFunction* _tmp40_;
						ValaCCodeFunction* _tmp41_;
						ValaProperty* _tmp42_;
						ValaComment* _tmp43_;
						ValaComment* _tmp44_;
						const gchar* _tmp45_;
						const gchar* _tmp46_;
						ValaCCodeComment* _tmp47_;
						ValaCCodeComment* _tmp48_;
						_tmp40_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp41_ = _tmp40_;
						_tmp42_ = prop;
						_tmp43_ = vala_symbol_get_comment ((ValaSymbol*) _tmp42_);
						_tmp44_ = _tmp43_;
						_tmp45_ = vala_comment_get_content (_tmp44_);
						_tmp46_ = _tmp45_;
						_tmp47_ = vala_ccode_comment_new (_tmp46_);
						_tmp48_ = _tmp47_;
						vala_ccode_function_add_statement (_tmp41_, (ValaCCodeNode*) _tmp48_);
						_vala_ccode_node_unref0 (_tmp48_);
					}
					_tmp49_ = vala_ccode_identifier_new ("g_object_interface_install_property");
					_tmp50_ = _tmp49_;
					_tmp51_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp50_);
					_tmp52_ = _tmp51_;
					_vala_ccode_node_unref0 (_tmp50_);
					cinst = _tmp52_;
					_tmp53_ = cinst;
					_tmp54_ = vala_ccode_identifier_new ("iface");
					_tmp55_ = _tmp54_;
					vala_ccode_function_call_add_argument (_tmp53_, (ValaCCodeExpression*) _tmp55_);
					_vala_ccode_node_unref0 (_tmp55_);
					_tmp56_ = cinst;
					_tmp57_ = prop;
					_tmp58_ = vala_ccode_base_module_get_param_spec ((ValaCCodeBaseModule*) self, _tmp57_);
					_tmp59_ = _tmp58_;
					vala_ccode_function_call_add_argument (_tmp56_, _tmp59_);
					_vala_ccode_node_unref0 (_tmp59_);
					_tmp60_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp61_ = _tmp60_;
					_tmp62_ = cinst;
					vala_ccode_function_add_expression (_tmp61_, (ValaCCodeExpression*) _tmp62_);
					_vala_ccode_node_unref0 (cinst);
				}
				_vala_code_node_unref0 (prop);
			}
			_vala_iterable_unref0 (_prop_list);
		}
		_vala_iterable_unref0 (props);
	}
	_tmp63_ = vala_ccode_identifier_new ("iface");
	ciface = _tmp63_;
	{
		ValaList* _sig_list = NULL;
		ValaList* _tmp64_;
		gint _sig_size = 0;
		ValaList* _tmp65_;
		gint _tmp66_;
		gint _tmp67_;
		gint _sig_index = 0;
		_tmp64_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) iface);
		_sig_list = _tmp64_;
		_tmp65_ = _sig_list;
		_tmp66_ = vala_collection_get_size ((ValaCollection*) _tmp65_);
		_tmp67_ = _tmp66_;
		_sig_size = _tmp67_;
		_sig_index = -1;
		while (TRUE) {
			ValaSignal* sig = NULL;
			ValaList* _tmp68_;
			gpointer _tmp69_;
			ValaSignal* _tmp70_;
			ValaMethod* _tmp71_;
			ValaMethod* _tmp72_;
			gchar* cname = NULL;
			ValaSignal* _tmp73_;
			ValaMethod* _tmp74_;
			ValaMethod* _tmp75_;
			gchar* _tmp76_;
			ValaCCodeFunction* _tmp77_;
			ValaCCodeFunction* _tmp78_;
			ValaCCodeIdentifier* _tmp79_;
			ValaSignal* _tmp80_;
			ValaMethod* _tmp81_;
			ValaMethod* _tmp82_;
			gchar* _tmp83_;
			gchar* _tmp84_;
			ValaCCodeMemberAccess* _tmp85_;
			ValaCCodeMemberAccess* _tmp86_;
			const gchar* _tmp87_;
			ValaCCodeIdentifier* _tmp88_;
			ValaCCodeIdentifier* _tmp89_;
			_sig_index = _sig_index + 1;
			if (!(_sig_index < _sig_size)) {
				break;
			}
			_tmp68_ = _sig_list;
			_tmp69_ = vala_list_get (_tmp68_, _sig_index);
			sig = (ValaSignal*) _tmp69_;
			_tmp70_ = sig;
			_tmp71_ = vala_signal_get_default_handler (_tmp70_);
			_tmp72_ = _tmp71_;
			if (_tmp72_ == NULL) {
				_vala_code_node_unref0 (sig);
				continue;
			}
			_tmp73_ = sig;
			_tmp74_ = vala_signal_get_default_handler (_tmp73_);
			_tmp75_ = _tmp74_;
			_tmp76_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp75_);
			cname = _tmp76_;
			_tmp77_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp78_ = _tmp77_;
			_tmp79_ = ciface;
			_tmp80_ = sig;
			_tmp81_ = vala_signal_get_default_handler (_tmp80_);
			_tmp82_ = _tmp81_;
			_tmp83_ = vala_get_ccode_vfunc_name (_tmp82_);
			_tmp84_ = _tmp83_;
			_tmp85_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp79_, _tmp84_);
			_tmp86_ = _tmp85_;
			_tmp87_ = cname;
			_tmp88_ = vala_ccode_identifier_new (_tmp87_);
			_tmp89_ = _tmp88_;
			vala_ccode_function_add_assignment (_tmp78_, (ValaCCodeExpression*) _tmp86_, (ValaCCodeExpression*) _tmp89_);
			_vala_ccode_node_unref0 (_tmp89_);
			_vala_ccode_node_unref0 (_tmp86_);
			_g_free0 (_tmp84_);
			_g_free0 (cname);
			_vala_code_node_unref0 (sig);
		}
		_vala_iterable_unref0 (_sig_list);
	}
	{
		ValaList* _sig_list = NULL;
		ValaList* _tmp90_;
		gint _sig_size = 0;
		ValaList* _tmp91_;
		gint _tmp92_;
		gint _tmp93_;
		gint _sig_index = 0;
		_tmp90_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) iface);
		_sig_list = _tmp90_;
		_tmp91_ = _sig_list;
		_tmp92_ = vala_collection_get_size ((ValaCollection*) _tmp91_);
		_tmp93_ = _tmp92_;
		_sig_size = _tmp93_;
		_sig_index = -1;
		while (TRUE) {
			ValaSignal* sig = NULL;
			ValaList* _tmp94_;
			gpointer _tmp95_;
			ValaSignal* _tmp96_;
			ValaComment* _tmp97_;
			ValaComment* _tmp98_;
			ValaCCodeFunction* _tmp108_;
			ValaCCodeFunction* _tmp109_;
			ValaSignal* _tmp110_;
			ValaCCodeExpression* _tmp111_;
			ValaCCodeExpression* _tmp112_;
			_sig_index = _sig_index + 1;
			if (!(_sig_index < _sig_size)) {
				break;
			}
			_tmp94_ = _sig_list;
			_tmp95_ = vala_list_get (_tmp94_, _sig_index);
			sig = (ValaSignal*) _tmp95_;
			_tmp96_ = sig;
			_tmp97_ = vala_symbol_get_comment ((ValaSymbol*) _tmp96_);
			_tmp98_ = _tmp97_;
			if (_tmp98_ != NULL) {
				ValaCCodeFunction* _tmp99_;
				ValaCCodeFunction* _tmp100_;
				ValaSignal* _tmp101_;
				ValaComment* _tmp102_;
				ValaComment* _tmp103_;
				const gchar* _tmp104_;
				const gchar* _tmp105_;
				ValaCCodeComment* _tmp106_;
				ValaCCodeComment* _tmp107_;
				_tmp99_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp100_ = _tmp99_;
				_tmp101_ = sig;
				_tmp102_ = vala_symbol_get_comment ((ValaSymbol*) _tmp101_);
				_tmp103_ = _tmp102_;
				_tmp104_ = vala_comment_get_content (_tmp103_);
				_tmp105_ = _tmp104_;
				_tmp106_ = vala_ccode_comment_new (_tmp105_);
				_tmp107_ = _tmp106_;
				vala_ccode_function_add_statement (_tmp100_, (ValaCCodeNode*) _tmp107_);
				_vala_ccode_node_unref0 (_tmp107_);
			}
			_tmp108_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp109_ = _tmp108_;
			_tmp110_ = sig;
			_tmp111_ = vala_ccode_base_module_get_signal_creation ((ValaCCodeBaseModule*) self, _tmp110_, (ValaTypeSymbol*) iface);
			_tmp112_ = _tmp111_;
			vala_ccode_function_add_expression (_tmp109_, _tmp112_);
			_vala_ccode_node_unref0 (_tmp112_);
			_vala_code_node_unref0 (sig);
		}
		_vala_iterable_unref0 (_sig_list);
	}
	{
		ValaList* _m_list = NULL;
		ValaList* _tmp113_;
		gint _m_size = 0;
		ValaList* _tmp114_;
		gint _tmp115_;
		gint _tmp116_;
		gint _m_index = 0;
		_tmp113_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) iface);
		_m_list = _tmp113_;
		_tmp114_ = _m_list;
		_tmp115_ = vala_collection_get_size ((ValaCollection*) _tmp114_);
		_tmp116_ = _tmp115_;
		_m_size = _tmp116_;
		_m_index = -1;
		while (TRUE) {
			ValaMethod* m = NULL;
			ValaList* _tmp117_;
			gpointer _tmp118_;
			ValaMethod* _tmp119_;
			gboolean _tmp120_;
			gboolean _tmp121_;
			_m_index = _m_index + 1;
			if (!(_m_index < _m_size)) {
				break;
			}
			_tmp117_ = _m_list;
			_tmp118_ = vala_list_get (_tmp117_, _m_index);
			m = (ValaMethod*) _tmp118_;
			_tmp119_ = m;
			_tmp120_ = vala_method_get_is_virtual (_tmp119_);
			_tmp121_ = _tmp120_;
			if (_tmp121_) {
				gchar* cname = NULL;
				ValaMethod* _tmp122_;
				gchar* _tmp123_;
				ValaCCodeFunction* _tmp124_;
				ValaCCodeFunction* _tmp125_;
				ValaCCodeIdentifier* _tmp126_;
				ValaMethod* _tmp127_;
				gchar* _tmp128_;
				gchar* _tmp129_;
				ValaCCodeMemberAccess* _tmp130_;
				ValaCCodeMemberAccess* _tmp131_;
				const gchar* _tmp132_;
				ValaCCodeIdentifier* _tmp133_;
				ValaCCodeIdentifier* _tmp134_;
				ValaMethod* _tmp135_;
				gboolean _tmp136_;
				gboolean _tmp137_;
				_tmp122_ = m;
				_tmp123_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp122_);
				cname = _tmp123_;
				_tmp124_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp125_ = _tmp124_;
				_tmp126_ = ciface;
				_tmp127_ = m;
				_tmp128_ = vala_get_ccode_vfunc_name (_tmp127_);
				_tmp129_ = _tmp128_;
				_tmp130_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp126_, _tmp129_);
				_tmp131_ = _tmp130_;
				_tmp132_ = cname;
				_tmp133_ = vala_ccode_identifier_new (_tmp132_);
				_tmp134_ = _tmp133_;
				vala_ccode_function_add_assignment (_tmp125_, (ValaCCodeExpression*) _tmp131_, (ValaCCodeExpression*) _tmp134_);
				_vala_ccode_node_unref0 (_tmp134_);
				_vala_ccode_node_unref0 (_tmp131_);
				_g_free0 (_tmp129_);
				_tmp135_ = m;
				_tmp136_ = vala_method_get_coroutine (_tmp135_);
				_tmp137_ = _tmp136_;
				if (_tmp137_) {
					ValaCCodeFunction* _tmp138_;
					ValaCCodeFunction* _tmp139_;
					ValaCCodeIdentifier* _tmp140_;
					ValaMethod* _tmp141_;
					gchar* _tmp142_;
					gchar* _tmp143_;
					ValaCCodeMemberAccess* _tmp144_;
					ValaCCodeMemberAccess* _tmp145_;
					ValaMethod* _tmp146_;
					gchar* _tmp147_;
					gchar* _tmp148_;
					ValaCCodeIdentifier* _tmp149_;
					ValaCCodeIdentifier* _tmp150_;
					_tmp138_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp139_ = _tmp138_;
					_tmp140_ = ciface;
					_tmp141_ = m;
					_tmp142_ = vala_get_ccode_finish_vfunc_name (_tmp141_);
					_tmp143_ = _tmp142_;
					_tmp144_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp140_, _tmp143_);
					_tmp145_ = _tmp144_;
					_tmp146_ = m;
					_tmp147_ = vala_get_ccode_finish_real_name (_tmp146_);
					_tmp148_ = _tmp147_;
					_tmp149_ = vala_ccode_identifier_new (_tmp148_);
					_tmp150_ = _tmp149_;
					vala_ccode_function_add_assignment (_tmp139_, (ValaCCodeExpression*) _tmp145_, (ValaCCodeExpression*) _tmp150_);
					_vala_ccode_node_unref0 (_tmp150_);
					_g_free0 (_tmp148_);
					_vala_ccode_node_unref0 (_tmp145_);
					_g_free0 (_tmp143_);
				}
				_g_free0 (cname);
			}
			_vala_code_node_unref0 (m);
		}
		_vala_iterable_unref0 (_m_list);
	}
	{
		ValaList* _prop_list = NULL;
		ValaList* _tmp151_;
		gint _prop_size = 0;
		ValaList* _tmp152_;
		gint _tmp153_;
		gint _tmp154_;
		gint _prop_index = 0;
		_tmp151_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) iface);
		_prop_list = _tmp151_;
		_tmp152_ = _prop_list;
		_tmp153_ = vala_collection_get_size ((ValaCollection*) _tmp152_);
		_tmp154_ = _tmp153_;
		_prop_size = _tmp154_;
		_prop_index = -1;
		while (TRUE) {
			ValaProperty* prop = NULL;
			ValaList* _tmp155_;
			gpointer _tmp156_;
			ValaProperty* _tmp157_;
			gboolean _tmp158_;
			gboolean _tmp159_;
			_prop_index = _prop_index + 1;
			if (!(_prop_index < _prop_size)) {
				break;
			}
			_tmp155_ = _prop_list;
			_tmp156_ = vala_list_get (_tmp155_, _prop_index);
			prop = (ValaProperty*) _tmp156_;
			_tmp157_ = prop;
			_tmp158_ = vala_property_get_is_virtual (_tmp157_);
			_tmp159_ = _tmp158_;
			if (_tmp159_) {
				ValaProperty* _tmp160_;
				ValaPropertyAccessor* _tmp161_;
				ValaPropertyAccessor* _tmp162_;
				ValaProperty* _tmp180_;
				ValaPropertyAccessor* _tmp181_;
				ValaPropertyAccessor* _tmp182_;
				_tmp160_ = prop;
				_tmp161_ = vala_property_get_get_accessor (_tmp160_);
				_tmp162_ = _tmp161_;
				if (_tmp162_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp163_;
					ValaPropertyAccessor* _tmp164_;
					ValaPropertyAccessor* _tmp165_;
					gchar* _tmp166_;
					ValaCCodeFunction* _tmp167_;
					ValaCCodeFunction* _tmp168_;
					ValaCCodeIdentifier* _tmp169_;
					ValaProperty* _tmp170_;
					const gchar* _tmp171_;
					const gchar* _tmp172_;
					gchar* _tmp173_;
					gchar* _tmp174_;
					ValaCCodeMemberAccess* _tmp175_;
					ValaCCodeMemberAccess* _tmp176_;
					const gchar* _tmp177_;
					ValaCCodeIdentifier* _tmp178_;
					ValaCCodeIdentifier* _tmp179_;
					_tmp163_ = prop;
					_tmp164_ = vala_property_get_get_accessor (_tmp163_);
					_tmp165_ = _tmp164_;
					_tmp166_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp165_);
					cname = _tmp166_;
					_tmp167_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp168_ = _tmp167_;
					_tmp169_ = ciface;
					_tmp170_ = prop;
					_tmp171_ = vala_symbol_get_name ((ValaSymbol*) _tmp170_);
					_tmp172_ = _tmp171_;
					_tmp173_ = g_strdup_printf ("get_%s", _tmp172_);
					_tmp174_ = _tmp173_;
					_tmp175_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp169_, _tmp174_);
					_tmp176_ = _tmp175_;
					_tmp177_ = cname;
					_tmp178_ = vala_ccode_identifier_new (_tmp177_);
					_tmp179_ = _tmp178_;
					vala_ccode_function_add_assignment (_tmp168_, (ValaCCodeExpression*) _tmp176_, (ValaCCodeExpression*) _tmp179_);
					_vala_ccode_node_unref0 (_tmp179_);
					_vala_ccode_node_unref0 (_tmp176_);
					_g_free0 (_tmp174_);
					_g_free0 (cname);
				}
				_tmp180_ = prop;
				_tmp181_ = vala_property_get_set_accessor (_tmp180_);
				_tmp182_ = _tmp181_;
				if (_tmp182_ != NULL) {
					gchar* cname = NULL;
					ValaProperty* _tmp183_;
					ValaPropertyAccessor* _tmp184_;
					ValaPropertyAccessor* _tmp185_;
					gchar* _tmp186_;
					ValaCCodeFunction* _tmp187_;
					ValaCCodeFunction* _tmp188_;
					ValaCCodeIdentifier* _tmp189_;
					ValaProperty* _tmp190_;
					const gchar* _tmp191_;
					const gchar* _tmp192_;
					gchar* _tmp193_;
					gchar* _tmp194_;
					ValaCCodeMemberAccess* _tmp195_;
					ValaCCodeMemberAccess* _tmp196_;
					const gchar* _tmp197_;
					ValaCCodeIdentifier* _tmp198_;
					ValaCCodeIdentifier* _tmp199_;
					_tmp183_ = prop;
					_tmp184_ = vala_property_get_set_accessor (_tmp183_);
					_tmp185_ = _tmp184_;
					_tmp186_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp185_);
					cname = _tmp186_;
					_tmp187_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp188_ = _tmp187_;
					_tmp189_ = ciface;
					_tmp190_ = prop;
					_tmp191_ = vala_symbol_get_name ((ValaSymbol*) _tmp190_);
					_tmp192_ = _tmp191_;
					_tmp193_ = g_strdup_printf ("set_%s", _tmp192_);
					_tmp194_ = _tmp193_;
					_tmp195_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp189_, _tmp194_);
					_tmp196_ = _tmp195_;
					_tmp197_ = cname;
					_tmp198_ = vala_ccode_identifier_new (_tmp197_);
					_tmp199_ = _tmp198_;
					vala_ccode_function_add_assignment (_tmp188_, (ValaCCodeExpression*) _tmp196_, (ValaCCodeExpression*) _tmp199_);
					_vala_ccode_node_unref0 (_tmp199_);
					_vala_ccode_node_unref0 (_tmp196_);
					_g_free0 (_tmp194_);
					_g_free0 (cname);
				}
			}
			_vala_code_node_unref0 (prop);
		}
		_vala_iterable_unref0 (_prop_list);
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_tmp200_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp201_ = default_init;
	vala_ccode_file_add_function (_tmp200_, _tmp201_);
	_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;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (st != 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_get_ccode_has_type_id ((ValaTypeSymbol*) st)) {
		ValaSourceReference* _tmp0_;
		ValaSourceReference* _tmp1_;
		ValaStructRegisterFunction* type_fun = NULL;
		ValaStructRegisterFunction* _tmp2_;
		ValaStructRegisterFunction* _tmp3_;
		ValaCodeContext* _tmp4_;
		ValaCodeContext* _tmp5_;
		ValaCCodeFile* _tmp6_;
		ValaStructRegisterFunction* _tmp7_;
		ValaCCodeFragment* _tmp8_;
		ValaCCodeFragment* _tmp9_;
		_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) st);
		_tmp1_ = _tmp0_;
		vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp1_);
		_tmp2_ = vala_struct_register_function_new (st);
		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_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)) {
		ValaSourceReference* _tmp0_;
		ValaSourceReference* _tmp1_;
		ValaEnumRegisterFunction* type_fun = NULL;
		ValaEnumRegisterFunction* _tmp2_;
		ValaEnumRegisterFunction* _tmp3_;
		ValaCodeContext* _tmp4_;
		ValaCodeContext* _tmp5_;
		ValaCCodeFile* _tmp6_;
		ValaEnumRegisterFunction* _tmp7_;
		ValaCCodeFragment* _tmp8_;
		ValaCCodeFragment* _tmp9_;
		_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) en);
		_tmp1_ = _tmp0_;
		vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp1_);
		_tmp2_ = vala_enum_register_function_new (en);
		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* _tmp40_;
	ValaExpression* _tmp41_;
	ValaExpression* _tmp42_;
	ValaDataType* _tmp43_;
	ValaDataType* _tmp44_;
	ValaTypeSymbol* _tmp45_;
	ValaTypeSymbol* _tmp46_;
	gboolean _tmp47_;
	gboolean _tmp48_;
	ValaSourceReference* _tmp49_;
	ValaSourceReference* _tmp50_;
	ValaCodeContext* _tmp51_;
	ValaCodeContext* _tmp52_;
	self = (ValaGTypeModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_method_call_get_call (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_method_call_get_call (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_data_type (_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_;
		ValaMethod* _tmp39_;
		_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));
		_tmp39_ = _tmp38_;
		_tmp8_ = _tmp32_ != _tmp39_;
		_vala_code_node_unref0 (_tmp39_);
	}
	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;
	}
	_tmp40_ = ma;
	_tmp41_ = vala_member_access_get_inner (_tmp40_);
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_expression_get_value_type (_tmp42_);
	_tmp44_ = _tmp43_;
	_tmp45_ = vala_value_type_get_type_symbol ((ValaValueType*) G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, VALA_TYPE_ENUM_VALUE_TYPE, ValaEnumValueType));
	_tmp46_ = _tmp45_;
	_tmp47_ = vala_enum_get_is_flags (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_ENUM, ValaEnum));
	_tmp48_ = _tmp47_;
	is_flags = _tmp48_;
	_tmp49_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
	_tmp50_ = _tmp49_;
	vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp50_);
	_tmp51_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp52_ = _tmp51_;
	if (vala_code_context_require_glib_version (_tmp52_, 2, 54)) {
		const gchar* _tmp53_ = NULL;
		ValaCCodeFunctionCall* to_string = NULL;
		ValaCCodeIdentifier* _tmp54_;
		ValaCCodeIdentifier* _tmp55_;
		ValaCCodeFunctionCall* _tmp56_;
		ValaCCodeFunctionCall* _tmp57_;
		ValaCCodeFunctionCall* _tmp58_;
		ValaMemberAccess* _tmp59_;
		ValaExpression* _tmp60_;
		ValaExpression* _tmp61_;
		ValaDataType* _tmp62_;
		ValaDataType* _tmp63_;
		gchar* _tmp64_;
		gchar* _tmp65_;
		ValaCCodeIdentifier* _tmp66_;
		ValaCCodeIdentifier* _tmp67_;
		ValaCCodeFunctionCall* _tmp68_;
		ValaExpression* _tmp69_;
		ValaExpression* _tmp70_;
		ValaExpression* _tmp71_;
		ValaExpression* _tmp72_;
		ValaCCodeExpression* _tmp73_;
		ValaCCodeExpression* _tmp74_;
		ValaDataType* _tmp75_;
		ValaDataType* _tmp76_;
		ValaCCodeFunctionCall* _tmp77_;
		if (is_flags) {
			_tmp53_ = "g_flags_to_string";
		} else {
			_tmp53_ = "g_enum_to_string";
		}
		_tmp54_ = vala_ccode_identifier_new (_tmp53_);
		_tmp55_ = _tmp54_;
		_tmp56_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp55_);
		_tmp57_ = _tmp56_;
		_vala_ccode_node_unref0 (_tmp55_);
		to_string = _tmp57_;
		_tmp58_ = to_string;
		_tmp59_ = ma;
		_tmp60_ = vala_member_access_get_inner (_tmp59_);
		_tmp61_ = _tmp60_;
		_tmp62_ = vala_expression_get_value_type (_tmp61_);
		_tmp63_ = _tmp62_;
		_tmp64_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp63_);
		_tmp65_ = _tmp64_;
		_tmp66_ = vala_ccode_identifier_new (_tmp65_);
		_tmp67_ = _tmp66_;
		vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp67_);
		_vala_ccode_node_unref0 (_tmp67_);
		_g_free0 (_tmp65_);
		_tmp68_ = to_string;
		_tmp69_ = vala_method_call_get_call (expr);
		_tmp70_ = _tmp69_;
		_tmp71_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_tmp72_ = _tmp71_;
		_tmp73_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp72_);
		_tmp74_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp73_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
		vala_ccode_function_call_add_argument (_tmp68_, _tmp74_);
		_vala_ccode_node_unref0 (_tmp74_);
		_tmp75_ = vala_expression_get_value_type ((ValaExpression*) expr);
		_tmp76_ = _tmp75_;
		vala_data_type_set_value_owned (_tmp76_, TRUE);
		_tmp77_ = to_string;
		vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp77_);
		_vala_ccode_node_unref0 (to_string);
	} else {
		const gchar* _tmp78_ = NULL;
		ValaLocalVariable* temp_var = NULL;
		ValaCType* _tmp79_;
		ValaCType* _tmp80_;
		ValaLocalVariable* _tmp81_;
		ValaLocalVariable* _tmp82_;
		ValaLocalVariable* _tmp83_;
		ValaCCodeFunctionCall* class_ref = NULL;
		ValaCCodeIdentifier* _tmp84_;
		ValaCCodeIdentifier* _tmp85_;
		ValaCCodeFunctionCall* _tmp86_;
		ValaCCodeFunctionCall* _tmp87_;
		ValaCCodeFunctionCall* _tmp88_;
		ValaMemberAccess* _tmp89_;
		ValaExpression* _tmp90_;
		ValaExpression* _tmp91_;
		ValaDataType* _tmp92_;
		ValaDataType* _tmp93_;
		gchar* _tmp94_;
		gchar* _tmp95_;
		ValaCCodeIdentifier* _tmp96_;
		ValaCCodeIdentifier* _tmp97_;
		const gchar* _tmp98_ = NULL;
		ValaCCodeFunctionCall* get_value = NULL;
		ValaCCodeIdentifier* _tmp99_;
		ValaCCodeIdentifier* _tmp100_;
		ValaCCodeFunctionCall* _tmp101_;
		ValaCCodeFunctionCall* _tmp102_;
		ValaCCodeFunctionCall* _tmp103_;
		ValaCCodeFunctionCall* _tmp104_;
		ValaCCodeFunctionCall* _tmp105_;
		ValaExpression* _tmp106_;
		ValaExpression* _tmp107_;
		ValaExpression* _tmp108_;
		ValaExpression* _tmp109_;
		ValaCCodeExpression* _tmp110_;
		ValaCCodeExpression* _tmp111_;
		ValaCCodeFunction* _tmp112_;
		ValaCCodeFunction* _tmp113_;
		ValaLocalVariable* _tmp114_;
		const gchar* _tmp115_;
		const gchar* _tmp116_;
		ValaCCodeExpression* _tmp117_;
		ValaCCodeExpression* _tmp118_;
		ValaCCodeFunctionCall* _tmp119_;
		ValaCCodeBinaryExpression* is_null_value = NULL;
		ValaLocalVariable* _tmp120_;
		const gchar* _tmp121_;
		const gchar* _tmp122_;
		ValaCCodeExpression* _tmp123_;
		ValaCCodeExpression* _tmp124_;
		ValaCCodeIdentifier* _tmp125_;
		ValaCCodeIdentifier* _tmp126_;
		ValaCCodeBinaryExpression* _tmp127_;
		ValaCCodeBinaryExpression* _tmp128_;
		ValaCCodeBinaryExpression* _tmp129_;
		ValaLocalVariable* _tmp130_;
		const gchar* _tmp131_;
		const gchar* _tmp132_;
		ValaCCodeExpression* _tmp133_;
		ValaCCodeExpression* _tmp134_;
		ValaCCodeMemberAccess* _tmp135_;
		ValaCCodeMemberAccess* _tmp136_;
		ValaCCodeIdentifier* _tmp137_;
		ValaCCodeIdentifier* _tmp138_;
		ValaCCodeConditionalExpression* _tmp139_;
		ValaCCodeConditionalExpression* _tmp140_;
		if (is_flags) {
			_tmp78_ = "GFlagsValue*";
		} else {
			_tmp78_ = "GEnumValue*";
		}
		_tmp79_ = vala_ctype_new (_tmp78_, "NULL");
		_tmp80_ = _tmp79_;
		_tmp81_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, (ValaDataType*) _tmp80_, FALSE, (ValaCodeNode*) expr, FALSE);
		_tmp82_ = _tmp81_;
		_vala_code_node_unref0 (_tmp80_);
		temp_var = _tmp82_;
		_tmp83_ = temp_var;
		vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp83_, FALSE);
		_tmp84_ = vala_ccode_identifier_new ("g_type_class_ref");
		_tmp85_ = _tmp84_;
		_tmp86_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp85_);
		_tmp87_ = _tmp86_;
		_vala_ccode_node_unref0 (_tmp85_);
		class_ref = _tmp87_;
		_tmp88_ = class_ref;
		_tmp89_ = ma;
		_tmp90_ = vala_member_access_get_inner (_tmp89_);
		_tmp91_ = _tmp90_;
		_tmp92_ = vala_expression_get_value_type (_tmp91_);
		_tmp93_ = _tmp92_;
		_tmp94_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp93_);
		_tmp95_ = _tmp94_;
		_tmp96_ = vala_ccode_identifier_new (_tmp95_);
		_tmp97_ = _tmp96_;
		vala_ccode_function_call_add_argument (_tmp88_, (ValaCCodeExpression*) _tmp97_);
		_vala_ccode_node_unref0 (_tmp97_);
		_g_free0 (_tmp95_);
		if (is_flags) {
			_tmp98_ = "g_flags_get_first_value";
		} else {
			_tmp98_ = "g_enum_get_value";
		}
		_tmp99_ = vala_ccode_identifier_new (_tmp98_);
		_tmp100_ = _tmp99_;
		_tmp101_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp100_);
		_tmp102_ = _tmp101_;
		_vala_ccode_node_unref0 (_tmp100_);
		get_value = _tmp102_;
		_tmp103_ = get_value;
		_tmp104_ = class_ref;
		vala_ccode_function_call_add_argument (_tmp103_, (ValaCCodeExpression*) _tmp104_);
		_tmp105_ = get_value;
		_tmp106_ = vala_method_call_get_call (expr);
		_tmp107_ = _tmp106_;
		_tmp108_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp107_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_tmp109_ = _tmp108_;
		_tmp110_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp109_);
		_tmp111_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp110_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
		vala_ccode_function_call_add_argument (_tmp105_, _tmp111_);
		_vala_ccode_node_unref0 (_tmp111_);
		_tmp112_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp113_ = _tmp112_;
		_tmp114_ = temp_var;
		_tmp115_ = vala_symbol_get_name ((ValaSymbol*) _tmp114_);
		_tmp116_ = _tmp115_;
		_tmp117_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp116_);
		_tmp118_ = _tmp117_;
		_tmp119_ = get_value;
		vala_ccode_function_add_assignment (_tmp113_, _tmp118_, (ValaCCodeExpression*) _tmp119_);
		_vala_ccode_node_unref0 (_tmp118_);
		_tmp120_ = temp_var;
		_tmp121_ = vala_symbol_get_name ((ValaSymbol*) _tmp120_);
		_tmp122_ = _tmp121_;
		_tmp123_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp122_);
		_tmp124_ = _tmp123_;
		_tmp125_ = vala_ccode_identifier_new ("NULL");
		_tmp126_ = _tmp125_;
		_tmp127_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp124_, (ValaCCodeExpression*) _tmp126_);
		_tmp128_ = _tmp127_;
		_vala_ccode_node_unref0 (_tmp126_);
		_vala_ccode_node_unref0 (_tmp124_);
		is_null_value = _tmp128_;
		_tmp129_ = is_null_value;
		_tmp130_ = temp_var;
		_tmp131_ = vala_symbol_get_name ((ValaSymbol*) _tmp130_);
		_tmp132_ = _tmp131_;
		_tmp133_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp132_);
		_tmp134_ = _tmp133_;
		_tmp135_ = vala_ccode_member_access_new_pointer (_tmp134_, "value_name");
		_tmp136_ = _tmp135_;
		_tmp137_ = vala_ccode_identifier_new ("NULL");
		_tmp138_ = _tmp137_;
		_tmp139_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp129_, (ValaCCodeExpression*) _tmp136_, (ValaCCodeExpression*) _tmp138_);
		_tmp140_ = _tmp139_;
		vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp140_);
		_vala_ccode_node_unref0 (_tmp140_);
		_vala_ccode_node_unref0 (_tmp138_);
		_vala_ccode_node_unref0 (_tmp136_);
		_vala_ccode_node_unref0 (_tmp134_);
		_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;
	ValaClass* _tmp19_;
	gboolean _tmp32_ = FALSE;
	gboolean _tmp33_ = FALSE;
	ValaProperty* _tmp34_;
	ValaAttribute* _tmp35_;
	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_ = cl;
	if (_tmp19_ != NULL) {
		ValaClass* _tmp20_;
		gboolean _tmp21_;
		gboolean _tmp22_;
		_tmp20_ = cl;
		_tmp21_ = vala_class_get_is_compact (_tmp20_);
		_tmp22_ = _tmp21_;
		_tmp18_ = _tmp22_;
	} else {
		_tmp18_ = FALSE;
	}
	if (_tmp18_) {
		gboolean _tmp23_ = FALSE;
		ValaPropertyAccessor* _tmp24_;
		ValaPropertyAccessor* _tmp25_;
		_tmp24_ = vala_property_get_get_accessor (prop);
		_tmp25_ = _tmp24_;
		if (_tmp25_ == NULL) {
			_tmp23_ = TRUE;
		} else {
			ValaPropertyAccessor* _tmp26_;
			ValaPropertyAccessor* _tmp27_;
			gboolean _tmp28_;
			gboolean _tmp29_;
			_tmp26_ = vala_property_get_get_accessor (prop);
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_property_accessor_get_automatic_body (_tmp27_);
			_tmp29_ = _tmp28_;
			_tmp23_ = _tmp29_;
		}
		_tmp17_ = _tmp23_;
	} else {
		_tmp17_ = FALSE;
	}
	if (_tmp17_) {
		ValaSourceReference* _tmp30_;
		ValaSourceReference* _tmp31_;
		_tmp30_ = vala_code_node_get_source_reference ((ValaCodeNode*) prop);
		_tmp31_ = _tmp30_;
		vala_report_error (_tmp31_, "Properties without accessor bodies are not supported in compact classe" \
"s");
		_vala_code_node_unref0 (base_prop);
		_vala_code_node_unref0 (st);
		_vala_code_node_unref0 (cl);
		return;
	}
	_tmp34_ = base_prop;
	_tmp35_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp34_, "NoAccessorMethod");
	if (_tmp35_ == NULL) {
		const gchar* _tmp36_;
		const gchar* _tmp37_;
		_tmp36_ = vala_symbol_get_name ((ValaSymbol*) prop);
		_tmp37_ = _tmp36_;
		_tmp33_ = g_strcmp0 (_tmp37_, "type") == 0;
	} else {
		_tmp33_ = FALSE;
	}
	if (_tmp33_) {
		gboolean _tmp38_ = FALSE;
		gboolean _tmp39_ = FALSE;
		ValaClass* _tmp40_;
		_tmp40_ = cl;
		if (_tmp40_ != NULL) {
			ValaClass* _tmp41_;
			gboolean _tmp42_;
			gboolean _tmp43_;
			_tmp41_ = cl;
			_tmp42_ = vala_class_get_is_compact (_tmp41_);
			_tmp43_ = _tmp42_;
			_tmp39_ = !_tmp43_;
		} else {
			_tmp39_ = FALSE;
		}
		if (_tmp39_) {
			_tmp38_ = TRUE;
		} else {
			gboolean _tmp44_ = FALSE;
			ValaStruct* _tmp45_;
			_tmp45_ = st;
			if (_tmp45_ != NULL) {
				ValaStruct* _tmp46_;
				_tmp46_ = st;
				_tmp44_ = vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp46_);
			} else {
				_tmp44_ = FALSE;
			}
			_tmp38_ = _tmp44_;
		}
		_tmp32_ = _tmp38_;
	} else {
		_tmp32_ = FALSE;
	}
	if (_tmp32_) {
		ValaSourceReference* _tmp47_;
		ValaSourceReference* _tmp48_;
		_tmp47_ = vala_code_node_get_source_reference ((ValaCodeNode*) prop);
		_tmp48_ = _tmp47_;
		vala_report_error (_tmp48_, "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_;
	ValaCreationMethod* cm = NULL;
	ValaCreationMethod* _tmp61_;
	gboolean _tmp62_ = FALSE;
	ValaCreationMethod* _tmp63_;
	ValaCCodeFunction* _tmp91_;
	ValaCCodeFunction* _tmp92_;
	ValaCCodeFunctionCall* _tmp93_;
	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_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (method_node, VALA_TYPE_CREATION_METHOD) ? ((ValaCreationMethod*) method_node) : NULL);
	cm = _tmp61_;
	_tmp63_ = cm;
	if (_tmp63_ != NULL) {
		ValaCreationMethod* _tmp64_;
		ValaSymbol* _tmp65_;
		ValaSymbol* _tmp66_;
		_tmp64_ = cm;
		_tmp65_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp64_);
		_tmp66_ = _tmp65_;
		_tmp62_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp66_, VALA_TYPE_OBJECT_TYPE_SYMBOL);
	} else {
		_tmp62_ = FALSE;
	}
	if (_tmp62_) {
		ValaCCodeFunctionCall* _tmp67_;
		ValaCCodeIdentifier* _tmp68_;
		ValaCCodeIdentifier* _tmp69_;
		ValaCCodeFunctionCall* _tmp70_;
		ValaCCodeConstant* _tmp71_;
		ValaCCodeConstant* _tmp72_;
		_tmp67_ = ccheck;
		_tmp68_ = vala_ccode_identifier_new ("g_return_val_if_fail");
		_tmp69_ = _tmp68_;
		vala_ccode_function_call_set_call (_tmp67_, (ValaCCodeExpression*) _tmp69_);
		_vala_ccode_node_unref0 (_tmp69_);
		_tmp70_ = ccheck;
		_tmp71_ = vala_ccode_constant_new ("NULL");
		_tmp72_ = _tmp71_;
		vala_ccode_function_call_add_argument (_tmp70_, (ValaCCodeExpression*) _tmp72_);
		_vala_ccode_node_unref0 (_tmp72_);
	} else {
		if (G_TYPE_CHECK_INSTANCE_TYPE (ret_type, VALA_TYPE_VOID_TYPE)) {
			ValaCCodeFunctionCall* _tmp73_;
			ValaCCodeIdentifier* _tmp74_;
			ValaCCodeIdentifier* _tmp75_;
			_tmp73_ = ccheck;
			_tmp74_ = vala_ccode_identifier_new ("g_return_if_fail");
			_tmp75_ = _tmp74_;
			vala_ccode_function_call_set_call (_tmp73_, (ValaCCodeExpression*) _tmp75_);
			_vala_ccode_node_unref0 (_tmp75_);
		} else {
			ValaCCodeFunctionCall* _tmp76_;
			ValaCCodeIdentifier* _tmp77_;
			ValaCCodeIdentifier* _tmp78_;
			ValaCCodeExpression* cdefault = NULL;
			ValaCCodeExpression* _tmp79_;
			ValaCCodeExpression* _tmp80_;
			_tmp76_ = ccheck;
			_tmp77_ = vala_ccode_identifier_new ("g_return_val_if_fail");
			_tmp78_ = _tmp77_;
			vala_ccode_function_call_set_call (_tmp76_, (ValaCCodeExpression*) _tmp78_);
			_vala_ccode_node_unref0 (_tmp78_);
			_tmp79_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, ret_type, FALSE, FALSE);
			cdefault = _tmp79_;
			_tmp80_ = cdefault;
			if (_tmp80_ != NULL) {
				ValaCCodeFunctionCall* _tmp81_;
				ValaCCodeExpression* _tmp82_;
				_tmp81_ = ccheck;
				_tmp82_ = cdefault;
				vala_ccode_function_call_add_argument (_tmp81_, _tmp82_);
			} else {
				gboolean _tmp83_ = FALSE;
				ValaTypeSymbol* _tmp84_;
				ValaTypeSymbol* _tmp85_;
				_tmp84_ = vala_data_type_get_data_type (ret_type);
				_tmp85_ = _tmp84_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp85_, VALA_TYPE_STRUCT)) {
					ValaTypeSymbol* _tmp86_;
					ValaTypeSymbol* _tmp87_;
					_tmp86_ = vala_data_type_get_data_type (ret_type);
					_tmp87_ = _tmp86_;
					_tmp83_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp87_, VALA_TYPE_STRUCT, ValaStruct));
				} else {
					_tmp83_ = FALSE;
				}
				if (_tmp83_) {
					ValaCCodeFunctionCall* _tmp88_;
					ValaCCodeIdentifier* _tmp89_;
					ValaCCodeIdentifier* _tmp90_;
					_tmp88_ = ccheck;
					_tmp89_ = vala_ccode_identifier_new ("result");
					_tmp90_ = _tmp89_;
					vala_ccode_function_call_add_argument (_tmp88_, (ValaCCodeExpression*) _tmp90_);
					_vala_ccode_node_unref0 (_tmp90_);
				} else {
					_vala_ccode_node_unref0 (cdefault);
					_vala_code_node_unref0 (cm);
					_vala_ccode_node_unref0 (ccheck);
					return;
				}
			}
			_vala_ccode_node_unref0 (cdefault);
		}
	}
	_tmp91_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp92_ = _tmp91_;
	_tmp93_ = ccheck;
	vala_ccode_function_add_expression (_tmp92_, (ValaCCodeExpression*) _tmp93_);
	_vala_code_node_unref0 (cm);
	_vala_ccode_node_unref0 (ccheck);
}

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

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

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

