/* 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_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL)))
#define _vala_ccode_base_module_emit_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_base_module_emit_context_unref (var), NULL)))
#define _vala_ccode_declarator_suffix_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_declarator_suffix_unref (var), NULL)))
#define _vala_map_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_iterator_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))
#define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);

static gpointer vala_gtype_module_parent_class = NULL;

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

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

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

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

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

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

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

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

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

static void
vala_gtype_module_generate_struct_field_declaration (ValaGTypeModule* self,
                                                     ValaField* f,
                                                     ValaCCodeStruct* instance_struct,
                                                     ValaCCodeStruct* type_struct,
                                                     ValaCCodeFile* decl_space)
{
	ValaCCodeModifiers _tmp0_ = 0U;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaCCodeModifiers _tmp3_ = 0U;
	ValaVersionAttribute* _tmp4_;
	ValaVersionAttribute* _tmp5_;
	gboolean _tmp6_;
	gboolean _tmp7_;
	ValaCCodeModifiers modifiers = 0U;
	ValaMemberBinding _tmp8_;
	ValaMemberBinding _tmp9_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (f != NULL);
	g_return_if_fail (instance_struct != NULL);
	g_return_if_fail (type_struct != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp1_ = vala_field_get_is_volatile (f);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		_tmp0_ = VALA_CCODE_MODIFIERS_VOLATILE;
	} else {
		_tmp0_ = 0;
	}
	_tmp4_ = vala_symbol_get_version ((ValaSymbol*) f);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_version_attribute_get_deprecated (_tmp5_);
	_tmp7_ = _tmp6_;
	if (_tmp7_) {
		_tmp3_ = VALA_CCODE_MODIFIERS_DEPRECATED;
	} else {
		_tmp3_ = 0;
	}
	modifiers = _tmp0_ | _tmp3_;
	_tmp8_ = vala_field_get_binding (f);
	_tmp9_ = _tmp8_;
	if (_tmp9_ == VALA_MEMBER_BINDING_INSTANCE) {
		vala_ccode_base_module_append_field ((ValaCCodeBaseModule*) self, instance_struct, f, decl_space);
	} else {
		ValaMemberBinding _tmp10_;
		ValaMemberBinding _tmp11_;
		_tmp10_ = vala_field_get_binding (f);
		_tmp11_ = _tmp10_;
		if (_tmp11_ == VALA_MEMBER_BINDING_CLASS) {
			ValaDataType* _tmp12_;
			ValaDataType* _tmp13_;
			gchar* _tmp14_;
			gchar* _tmp15_;
			gchar* _tmp16_;
			gchar* _tmp17_;
			_tmp12_ = vala_variable_get_variable_type ((ValaVariable*) f);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) _tmp13_);
			_tmp15_ = _tmp14_;
			_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) f);
			_tmp17_ = _tmp16_;
			vala_ccode_struct_add_field (type_struct, _tmp15_, _tmp17_, modifiers, NULL);
			_g_free0 (_tmp17_);
			_g_free0 (_tmp15_);
		}
	}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

