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

/* valagsignalmodule.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 <glib.h>
#include <glib-object.h>
#include "valacodegen.h"
#include <vala.h>
#include <valaccode.h>
#include <valagee.h>
#include <stdlib.h>
#include <string.h>

#define _g_free0(var) (var = (g_free (var), NULL))
#define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))
#define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL)))


static gpointer vala_gsignal_module_parent_class = NULL;

static gchar* vala_gsignal_module_get_marshaller_function (ValaGSignalModule* self, ValaList* params, ValaDataType* return_type, const gchar* prefix);
static gchar* vala_gsignal_module_get_marshaller_signature (ValaGSignalModule* self, ValaList* params, ValaDataType* return_type);
static gchar* vala_gsignal_module_get_value_type_name_from_type_reference (ValaGSignalModule* self, ValaDataType* t);
static gchar* vala_gsignal_module_get_value_type_name_from_parameter (ValaGSignalModule* self, ValaParameter* p);
static ValaCCodeExpression* vala_gsignal_module_get_signal_name_cexpression (ValaGSignalModule* self, ValaSignal* sig, ValaExpression* detail_expr, ValaCodeNode* node);
static ValaCCodeExpression* vala_gsignal_module_get_signal_id_cexpression (ValaGSignalModule* self, ValaSignal* sig);
static ValaCCodeExpression* vala_gsignal_module_get_detail_cexpression (ValaGSignalModule* self, ValaExpression* detail_expr, ValaCodeNode* node);
static void vala_gsignal_module_real_visit_signal (ValaCodeVisitor* base, ValaSignal* sig);
static void vala_gsignal_module_generate_marshaller (ValaGSignalModule* self, ValaList* params, ValaDataType* return_type);
static ValaCCodeExpression* vala_gsignal_module_real_get_signal_creation (ValaCCodeBaseModule* base, ValaSignal* sig, ValaTypeSymbol* type);
static void _vala_array_add1 (gchar** * array, int* length, int* size, gchar* value);
static void _vala_array_add2 (gchar** * array, int* length, int* size, gchar* value);
static void _vala_array_add3 (gchar** * array, int* length, int* size, gchar* value);
static void _vala_array_add4 (gchar** * array, int* length, int* size, gchar* value);
static void _vala_array_add5 (gchar** * array, int* length, int* size, gchar* value);
static void _vala_array_add6 (gchar** * array, int* length, int* size, gchar* value);
static void _vala_array_add7 (gchar** * array, int* length, int* size, gchar* value);
static void _vala_array_add8 (gchar** * array, int* length, int* size, gchar* value);
static void vala_gsignal_module_real_visit_element_access (ValaCodeVisitor* base, ValaElementAccess* expr);
static gboolean vala_gsignal_module_in_gobject_instance (ValaGSignalModule* self, ValaMethod* m);
static void vala_gsignal_module_emit_signal_assignment (ValaGSignalModule* self, ValaAssignment* assignment);
static ValaCCodeExpression* vala_gsignal_module_connect_signal (ValaGSignalModule* self, ValaSignal* sig, ValaExpression* signal_access, ValaExpression* handler, gboolean disconnect, gboolean after, ValaCodeNode* expr);
static void vala_gsignal_module_real_visit_assignment (ValaCodeVisitor* base, ValaAssignment* assignment);
static void vala_gsignal_module_real_visit_member_access (ValaCodeVisitor* base, ValaMemberAccess* expr);
static void vala_gsignal_module_real_visit_method_call (ValaCodeVisitor* base, ValaMethodCall* expr);
static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);


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


static gchar* string_replace (const gchar* self, const gchar* old, const gchar* replacement) {
	gchar* result = NULL;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (old != NULL, NULL);
	g_return_val_if_fail (replacement != NULL, NULL);
	if ((*((gchar*) self)) == '\0') {
		_tmp1_ = TRUE;
	} else {
		const gchar* _tmp2_;
		_tmp2_ = old;
		_tmp1_ = (*((gchar*) _tmp2_)) == '\0';
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		const gchar* _tmp3_;
		const gchar* _tmp4_;
		_tmp3_ = old;
		_tmp4_ = replacement;
		_tmp0_ = g_strcmp0 (_tmp3_, _tmp4_) == 0;
	}
	if (_tmp0_) {
		gchar* _tmp5_;
		_tmp5_ = g_strdup (self);
		result = _tmp5_;
		return result;
	}
	{
		GRegex* regex = NULL;
		const gchar* _tmp6_;
		gchar* _tmp7_;
		gchar* _tmp8_;
		GRegex* _tmp9_;
		GRegex* _tmp10_;
		gchar* _tmp11_ = NULL;
		GRegex* _tmp12_;
		const gchar* _tmp13_;
		gchar* _tmp14_;
		gchar* _tmp15_;
		_tmp6_ = old;
		_tmp7_ = g_regex_escape_string (_tmp6_, -1);
		_tmp8_ = _tmp7_;
		_tmp9_ = g_regex_new (_tmp8_, 0, 0, &_inner_error_);
		_tmp10_ = _tmp9_;
		_g_free0 (_tmp8_);
		regex = _tmp10_;
		if (G_UNLIKELY (_inner_error_ != NULL)) {
			if (_inner_error_->domain == G_REGEX_ERROR) {
				goto __catch11_g_regex_error;
			}
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return NULL;
		}
		_tmp12_ = regex;
		_tmp13_ = replacement;
		_tmp14_ = g_regex_replace_literal (_tmp12_, self, (gssize) -1, 0, _tmp13_, 0, &_inner_error_);
		_tmp11_ = _tmp14_;
		if (G_UNLIKELY (_inner_error_ != NULL)) {
			_g_regex_unref0 (regex);
			if (_inner_error_->domain == G_REGEX_ERROR) {
				goto __catch11_g_regex_error;
			}
			_g_regex_unref0 (regex);
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return NULL;
		}
		_tmp15_ = _tmp11_;
		_tmp11_ = NULL;
		result = _tmp15_;
		_g_free0 (_tmp11_);
		_g_regex_unref0 (regex);
		return result;
	}
	goto __finally11;
	__catch11_g_regex_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_assert_not_reached ();
		_g_error_free0 (e);
	}
	__finally11:
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return NULL;
	}
}


static gchar* vala_gsignal_module_get_marshaller_function (ValaGSignalModule* self, ValaList* params, ValaDataType* return_type, const gchar* prefix) {
	gchar* result = NULL;
	gchar* signature = NULL;
	ValaList* _tmp0_;
	ValaDataType* _tmp1_;
	gchar* _tmp2_;
	gchar* ret = NULL;
	const gchar* _tmp3_;
	const gchar* _tmp7_;
	ValaDataType* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gboolean _tmp12_ = FALSE;
	ValaList* _tmp13_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (params != NULL, NULL);
	g_return_val_if_fail (return_type != NULL, NULL);
	_tmp0_ = params;
	_tmp1_ = return_type;
	_tmp2_ = vala_gsignal_module_get_marshaller_signature (self, _tmp0_, _tmp1_);
	signature = _tmp2_;
	_tmp3_ = prefix;
	if (_tmp3_ == NULL) {
		ValaSet* _tmp4_;
		const gchar* _tmp5_;
		gboolean _tmp6_;
		_tmp4_ = ((ValaCCodeBaseModule*) self)->predefined_marshal_set;
		_tmp5_ = signature;
		_tmp6_ = vala_collection_contains ((ValaCollection*) _tmp4_, _tmp5_);
		if (_tmp6_) {
			prefix = "g_cclosure_marshal";
		} else {
			prefix = "g_cclosure_user_marshal";
		}
	}
	_tmp7_ = prefix;
	_tmp8_ = return_type;
	_tmp9_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = g_strdup_printf ("%s_%s_", _tmp7_, _tmp10_);
	_g_free0 (ret);
	ret = _tmp11_;
	_g_free0 (_tmp10_);
	_tmp13_ = params;
	if (_tmp13_ == NULL) {
		_tmp12_ = TRUE;
	} else {
		ValaList* _tmp14_;
		gint _tmp15_;
		gint _tmp16_;
		_tmp14_ = params;
		_tmp15_ = vala_collection_get_size ((ValaCollection*) _tmp14_);
		_tmp16_ = _tmp15_;
		_tmp12_ = _tmp16_ == 0;
	}
	if (_tmp12_) {
		const gchar* _tmp17_;
		gchar* _tmp18_;
		_tmp17_ = ret;
		_tmp18_ = g_strconcat (_tmp17_, "_VOID", NULL);
		_g_free0 (ret);
		ret = _tmp18_;
	} else {
		{
			ValaList* _p_list = NULL;
			ValaList* _tmp19_;
			ValaList* _tmp20_;
			gint _p_size = 0;
			ValaList* _tmp21_;
			gint _tmp22_;
			gint _tmp23_;
			gint _p_index = 0;
			_tmp19_ = params;
			_tmp20_ = _vala_iterable_ref0 (_tmp19_);
			_p_list = _tmp20_;
			_tmp21_ = _p_list;
			_tmp22_ = vala_collection_get_size ((ValaCollection*) _tmp21_);
			_tmp23_ = _tmp22_;
			_p_size = _tmp23_;
			_p_index = -1;
			while (TRUE) {
				gint _tmp24_;
				gint _tmp25_;
				gint _tmp26_;
				ValaParameter* p = NULL;
				ValaList* _tmp27_;
				gint _tmp28_;
				gpointer _tmp29_;
				const gchar* _tmp30_;
				ValaParameter* _tmp31_;
				gchar* _tmp32_;
				gchar* _tmp33_;
				gchar* _tmp34_;
				gchar* _tmp35_;
				gchar* _tmp36_;
				_tmp24_ = _p_index;
				_p_index = _tmp24_ + 1;
				_tmp25_ = _p_index;
				_tmp26_ = _p_size;
				if (!(_tmp25_ < _tmp26_)) {
					break;
				}
				_tmp27_ = _p_list;
				_tmp28_ = _p_index;
				_tmp29_ = vala_list_get (_tmp27_, _tmp28_);
				p = (ValaParameter*) _tmp29_;
				_tmp30_ = ret;
				_tmp31_ = p;
				_tmp32_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp31_);
				_tmp33_ = _tmp32_;
				_tmp34_ = string_replace (_tmp33_, ",", "_");
				_tmp35_ = _tmp34_;
				_tmp36_ = g_strdup_printf ("%s_%s", _tmp30_, _tmp35_);
				_g_free0 (ret);
				ret = _tmp36_;
				_g_free0 (_tmp35_);
				_g_free0 (_tmp33_);
				_vala_code_node_unref0 (p);
			}
			_vala_iterable_unref0 (_p_list);
		}
	}
	result = ret;
	_g_free0 (signature);
	return result;
}


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


static gchar* vala_gsignal_module_get_value_type_name_from_type_reference (ValaGSignalModule* self, ValaDataType* t) {
	gchar* result = NULL;
	gboolean _tmp0_ = FALSE;
	ValaDataType* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (t != NULL, NULL);
	_tmp1_ = t;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_POINTER_TYPE)) {
		_tmp0_ = TRUE;
	} else {
		ValaDataType* _tmp2_;
		ValaTypeParameter* _tmp3_;
		ValaTypeParameter* _tmp4_;
		_tmp2_ = t;
		_tmp3_ = vala_data_type_get_type_parameter (_tmp2_);
		_tmp4_ = _tmp3_;
		_tmp0_ = _tmp4_ != NULL;
	}
	if (_tmp0_) {
		gchar* _tmp5_;
		_tmp5_ = g_strdup ("gpointer");
		result = _tmp5_;
		return result;
	} else {
		ValaDataType* _tmp6_;
		_tmp6_ = t;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_VOID_TYPE)) {
			gchar* _tmp7_;
			_tmp7_ = g_strdup ("void");
			result = _tmp7_;
			return result;
		} else {
			ValaDataType* _tmp8_;
			gchar* _tmp9_;
			gchar* _tmp10_;
			ValaDataType* _tmp11_;
			gchar* _tmp12_;
			gchar* _tmp13_;
			gboolean _tmp14_;
			_tmp8_ = t;
			_tmp9_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp8_);
			_tmp10_ = _tmp9_;
			_tmp11_ = ((ValaCCodeBaseModule*) self)->string_type;
			_tmp12_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = g_strcmp0 (_tmp10_, _tmp13_) == 0;
			_g_free0 (_tmp13_);
			_g_free0 (_tmp10_);
			if (_tmp14_) {
				gchar* _tmp15_;
				_tmp15_ = g_strdup ("const char*");
				result = _tmp15_;
				return result;
			} else {
				gboolean _tmp16_ = FALSE;
				ValaDataType* _tmp17_;
				ValaTypeSymbol* _tmp18_;
				ValaTypeSymbol* _tmp19_;
				_tmp17_ = t;
				_tmp18_ = vala_data_type_get_data_type (_tmp17_);
				_tmp19_ = _tmp18_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_CLASS)) {
					_tmp16_ = TRUE;
				} else {
					ValaDataType* _tmp20_;
					ValaTypeSymbol* _tmp21_;
					ValaTypeSymbol* _tmp22_;
					_tmp20_ = t;
					_tmp21_ = vala_data_type_get_data_type (_tmp20_);
					_tmp22_ = _tmp21_;
					_tmp16_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_INTERFACE);
				}
				if (_tmp16_) {
					gchar* _tmp23_;
					_tmp23_ = g_strdup ("gpointer");
					result = _tmp23_;
					return result;
				} else {
					gboolean _tmp24_ = FALSE;
					ValaDataType* _tmp25_;
					_tmp25_ = t;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp25_, VALA_TYPE_VALUE_TYPE)) {
						ValaDataType* _tmp26_;
						gboolean _tmp27_;
						gboolean _tmp28_;
						_tmp26_ = t;
						_tmp27_ = vala_data_type_get_nullable (_tmp26_);
						_tmp28_ = _tmp27_;
						_tmp24_ = _tmp28_;
					} else {
						_tmp24_ = FALSE;
					}
					if (_tmp24_) {
						gchar* _tmp29_;
						_tmp29_ = g_strdup ("gpointer");
						result = _tmp29_;
						return result;
					} else {
						ValaDataType* _tmp30_;
						ValaTypeSymbol* _tmp31_;
						ValaTypeSymbol* _tmp32_;
						_tmp30_ = t;
						_tmp31_ = vala_data_type_get_data_type (_tmp30_);
						_tmp32_ = _tmp31_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_STRUCT)) {
							ValaStruct* st = NULL;
							ValaDataType* _tmp33_;
							ValaTypeSymbol* _tmp34_;
							ValaTypeSymbol* _tmp35_;
							ValaStruct* _tmp36_;
							ValaStruct* _tmp37_;
							gboolean _tmp38_;
							_tmp33_ = t;
							_tmp34_ = vala_data_type_get_data_type (_tmp33_);
							_tmp35_ = _tmp34_;
							_tmp36_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, VALA_TYPE_STRUCT, ValaStruct));
							st = _tmp36_;
							_tmp37_ = st;
							_tmp38_ = vala_struct_is_simple_type (_tmp37_);
							if (_tmp38_) {
								ValaDataType* _tmp39_;
								ValaTypeSymbol* _tmp40_;
								ValaTypeSymbol* _tmp41_;
								gchar* _tmp42_;
								_tmp39_ = t;
								_tmp40_ = vala_data_type_get_data_type (_tmp39_);
								_tmp41_ = _tmp40_;
								_tmp42_ = vala_get_ccode_name ((ValaCodeNode*) _tmp41_);
								result = _tmp42_;
								_vala_code_node_unref0 (st);
								return result;
							} else {
								gchar* _tmp43_;
								_tmp43_ = g_strdup ("gpointer");
								result = _tmp43_;
								_vala_code_node_unref0 (st);
								return result;
							}
							_vala_code_node_unref0 (st);
						} else {
							ValaDataType* _tmp44_;
							ValaTypeSymbol* _tmp45_;
							ValaTypeSymbol* _tmp46_;
							_tmp44_ = t;
							_tmp45_ = vala_data_type_get_data_type (_tmp44_);
							_tmp46_ = _tmp45_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, VALA_TYPE_ENUM)) {
								gchar* _tmp47_;
								_tmp47_ = g_strdup ("gint");
								result = _tmp47_;
								return result;
							} else {
								ValaDataType* _tmp48_;
								_tmp48_ = t;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp48_, VALA_TYPE_ARRAY_TYPE)) {
									gchar* _tmp49_;
									_tmp49_ = g_strdup ("gpointer");
									result = _tmp49_;
									return result;
								} else {
									ValaDataType* _tmp50_;
									_tmp50_ = t;
									if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp50_, VALA_TYPE_ERROR_TYPE)) {
										gchar* _tmp51_;
										_tmp51_ = g_strdup ("gpointer");
										result = _tmp51_;
										return result;
									}
								}
							}
						}
					}
				}
			}
		}
	}
	result = NULL;
	return result;
}


static gchar* vala_gsignal_module_get_value_type_name_from_parameter (ValaGSignalModule* self, ValaParameter* p) {
	gchar* result = NULL;
	ValaParameter* _tmp0_;
	ValaParameterDirection _tmp1_;
	ValaParameterDirection _tmp2_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (p != NULL, NULL);
	_tmp0_ = p;
	_tmp1_ = vala_parameter_get_direction (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_ != VALA_PARAMETER_DIRECTION_IN) {
		gchar* _tmp3_;
		_tmp3_ = g_strdup ("gpointer");
		result = _tmp3_;
		return result;
	} else {
		ValaParameter* _tmp4_;
		ValaDataType* _tmp5_;
		ValaDataType* _tmp6_;
		gchar* _tmp7_;
		_tmp4_ = p;
		_tmp5_ = vala_variable_get_variable_type ((ValaVariable*) _tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_gsignal_module_get_value_type_name_from_type_reference (self, _tmp6_);
		result = _tmp7_;
		return result;
	}
}


static gchar* vala_gsignal_module_get_marshaller_signature (ValaGSignalModule* self, ValaList* params, ValaDataType* return_type) {
	gchar* result = NULL;
	gchar* signature = NULL;
	ValaDataType* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gboolean _tmp4_ = FALSE;
	ValaList* _tmp5_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (params != NULL, NULL);
	g_return_val_if_fail (return_type != NULL, NULL);
	_tmp0_ = return_type;
	_tmp1_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s:", _tmp2_);
	_g_free0 (signature);
	signature = _tmp3_;
	_g_free0 (_tmp2_);
	_tmp5_ = params;
	if (_tmp5_ == NULL) {
		_tmp4_ = TRUE;
	} else {
		ValaList* _tmp6_;
		gint _tmp7_;
		gint _tmp8_;
		_tmp6_ = params;
		_tmp7_ = vala_collection_get_size ((ValaCollection*) _tmp6_);
		_tmp8_ = _tmp7_;
		_tmp4_ = _tmp8_ == 0;
	}
	if (_tmp4_) {
		const gchar* _tmp9_;
		gchar* _tmp10_;
		_tmp9_ = signature;
		_tmp10_ = g_strconcat (_tmp9_, "VOID", NULL);
		_g_free0 (signature);
		signature = _tmp10_;
	} else {
		gboolean first = FALSE;
		first = TRUE;
		{
			ValaList* _p_list = NULL;
			ValaList* _tmp11_;
			ValaList* _tmp12_;
			gint _p_size = 0;
			ValaList* _tmp13_;
			gint _tmp14_;
			gint _tmp15_;
			gint _p_index = 0;
			_tmp11_ = params;
			_tmp12_ = _vala_iterable_ref0 (_tmp11_);
			_p_list = _tmp12_;
			_tmp13_ = _p_list;
			_tmp14_ = vala_collection_get_size ((ValaCollection*) _tmp13_);
			_tmp15_ = _tmp14_;
			_p_size = _tmp15_;
			_p_index = -1;
			while (TRUE) {
				gint _tmp16_;
				gint _tmp17_;
				gint _tmp18_;
				ValaParameter* p = NULL;
				ValaList* _tmp19_;
				gint _tmp20_;
				gpointer _tmp21_;
				gboolean _tmp22_;
				_tmp16_ = _p_index;
				_p_index = _tmp16_ + 1;
				_tmp17_ = _p_index;
				_tmp18_ = _p_size;
				if (!(_tmp17_ < _tmp18_)) {
					break;
				}
				_tmp19_ = _p_list;
				_tmp20_ = _p_index;
				_tmp21_ = vala_list_get (_tmp19_, _tmp20_);
				p = (ValaParameter*) _tmp21_;
				_tmp22_ = first;
				if (_tmp22_) {
					const gchar* _tmp23_;
					ValaParameter* _tmp24_;
					gchar* _tmp25_;
					gchar* _tmp26_;
					gchar* _tmp27_;
					_tmp23_ = signature;
					_tmp24_ = p;
					_tmp25_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp24_);
					_tmp26_ = _tmp25_;
					_tmp27_ = g_strconcat (_tmp23_, _tmp26_, NULL);
					_g_free0 (signature);
					signature = _tmp27_;
					_g_free0 (_tmp26_);
					first = FALSE;
				} else {
					const gchar* _tmp28_;
					ValaParameter* _tmp29_;
					gchar* _tmp30_;
					gchar* _tmp31_;
					gchar* _tmp32_;
					_tmp28_ = signature;
					_tmp29_ = p;
					_tmp30_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp29_);
					_tmp31_ = _tmp30_;
					_tmp32_ = g_strdup_printf ("%s,%s", _tmp28_, _tmp31_);
					_g_free0 (signature);
					signature = _tmp32_;
					_g_free0 (_tmp31_);
				}
				_vala_code_node_unref0 (p);
			}
			_vala_iterable_unref0 (_p_list);
		}
	}
	result = signature;
	return result;
}


static ValaCCodeExpression* vala_gsignal_module_get_signal_name_cexpression (ValaGSignalModule* self, ValaSignal* sig, ValaExpression* detail_expr, ValaCodeNode* node) {
	ValaCCodeExpression* result = NULL;
	ValaExpression* _tmp0_;
	gboolean _tmp3_ = FALSE;
	ValaExpression* _tmp4_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaExpression* _tmp16_;
	ValaTargetValue* detail_value = NULL;
	ValaExpression* _tmp23_;
	ValaDataType* _tmp24_;
	ValaDataType* _tmp25_;
	ValaCodeNode* _tmp26_;
	gboolean _tmp27_;
	ValaTargetValue* _tmp28_;
	ValaArrayList* _tmp29_;
	ValaArrayList* _tmp30_;
	ValaTargetValue* _tmp31_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeFunctionCall* _tmp34_;
	ValaCCodeFunctionCall* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaSignal* _tmp37_;
	ValaCCodeConstant* _tmp38_;
	ValaCCodeConstant* _tmp39_;
	ValaCCodeFunctionCall* _tmp40_;
	ValaExpression* _tmp41_;
	ValaCCodeExpression* _tmp42_;
	ValaCCodeExpression* _tmp43_;
	ValaCCodeFunctionCall* _tmp44_;
	ValaCCodeConstant* _tmp45_;
	ValaCCodeConstant* _tmp46_;
	ValaCCodeFunction* _tmp47_;
	ValaCCodeFunction* _tmp48_;
	ValaTargetValue* _tmp49_;
	ValaCCodeExpression* _tmp50_;
	ValaCCodeExpression* _tmp51_;
	ValaCCodeFunctionCall* _tmp52_;
	ValaTargetValue* _tmp53_;
	ValaCCodeExpression* _tmp54_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sig != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = detail_expr;
	if (_tmp0_ == NULL) {
		ValaSignal* _tmp1_;
		ValaCCodeConstant* _tmp2_;
		_tmp1_ = sig;
		_tmp2_ = vala_ccode_base_module_get_signal_canonical_constant ((ValaCCodeBaseModule*) self, _tmp1_, NULL);
		result = (ValaCCodeExpression*) _tmp2_;
		return result;
	}
	_tmp4_ = detail_expr;
	_tmp5_ = vala_expression_get_value_type (_tmp4_);
	_tmp6_ = _tmp5_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_NULL_TYPE)) {
		_tmp3_ = TRUE;
	} else {
		ValaExpression* _tmp7_;
		ValaDataType* _tmp8_;
		ValaDataType* _tmp9_;
		ValaDataType* _tmp10_;
		gboolean _tmp11_;
		_tmp7_ = detail_expr;
		_tmp8_ = vala_expression_get_value_type (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = ((ValaCCodeBaseModule*) self)->string_type;
		_tmp11_ = vala_data_type_compatible (_tmp9_, _tmp10_);
		_tmp3_ = !_tmp11_;
	}
	if (_tmp3_) {
		ValaCodeNode* _tmp12_;
		ValaExpression* _tmp13_;
		ValaSourceReference* _tmp14_;
		ValaSourceReference* _tmp15_;
		_tmp12_ = node;
		vala_code_node_set_error (_tmp12_, TRUE);
		_tmp13_ = detail_expr;
		_tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp13_);
		_tmp15_ = _tmp14_;
		vala_report_error (_tmp15_, "only string details are supported");
		result = NULL;
		return result;
	}
	_tmp16_ = detail_expr;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_STRING_LITERAL)) {
		ValaSignal* _tmp17_;
		ValaExpression* _tmp18_;
		gchar* _tmp19_;
		gchar* _tmp20_;
		ValaCCodeConstant* _tmp21_;
		ValaCCodeExpression* _tmp22_;
		_tmp17_ = sig;
		_tmp18_ = detail_expr;
		_tmp19_ = vala_string_literal_eval (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_STRING_LITERAL, ValaStringLiteral));
		_tmp20_ = _tmp19_;
		_tmp21_ = vala_ccode_base_module_get_signal_canonical_constant ((ValaCCodeBaseModule*) self, _tmp17_, _tmp20_);
		_tmp22_ = (ValaCCodeExpression*) _tmp21_;
		_g_free0 (_tmp20_);
		result = _tmp22_;
		return result;
	}
	_tmp23_ = detail_expr;
	_tmp24_ = vala_expression_get_value_type (_tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = node;
	_tmp27_ = TRUE;
	_tmp28_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp25_, FALSE, _tmp26_, &_tmp27_);
	detail_value = _tmp28_;
	_tmp29_ = vala_ccode_base_module_get_temp_ref_values ((ValaCCodeBaseModule*) self);
	_tmp30_ = _tmp29_;
	_tmp31_ = detail_value;
	vala_list_insert ((ValaList*) _tmp30_, 0, _tmp31_);
	_tmp32_ = vala_ccode_identifier_new ("g_strconcat");
	_tmp33_ = _tmp32_;
	_tmp34_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp33_);
	_tmp35_ = _tmp34_;
	_vala_ccode_node_unref0 (_tmp33_);
	ccall = _tmp35_;
	_tmp36_ = ccall;
	_tmp37_ = sig;
	_tmp38_ = vala_ccode_base_module_get_signal_canonical_constant ((ValaCCodeBaseModule*) self, _tmp37_, "");
	_tmp39_ = _tmp38_;
	vala_ccode_function_call_add_argument (_tmp36_, (ValaCCodeExpression*) _tmp39_);
	_vala_ccode_node_unref0 (_tmp39_);
	_tmp40_ = ccall;
	_tmp41_ = detail_expr;
	_tmp42_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp41_);
	_tmp43_ = _tmp42_;
	vala_ccode_function_call_add_argument (_tmp40_, _tmp43_);
	_vala_ccode_node_unref0 (_tmp43_);
	_tmp44_ = ccall;
	_tmp45_ = vala_ccode_constant_new ("NULL");
	_tmp46_ = _tmp45_;
	vala_ccode_function_call_add_argument (_tmp44_, (ValaCCodeExpression*) _tmp46_);
	_vala_ccode_node_unref0 (_tmp46_);
	_tmp47_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp48_ = _tmp47_;
	_tmp49_ = detail_value;
	_tmp50_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp49_);
	_tmp51_ = _tmp50_;
	_tmp52_ = ccall;
	vala_ccode_function_add_assignment (_tmp48_, _tmp51_, (ValaCCodeExpression*) _tmp52_);
	_vala_ccode_node_unref0 (_tmp51_);
	_tmp53_ = detail_value;
	_tmp54_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp53_);
	result = _tmp54_;
	_vala_ccode_node_unref0 (ccall);
	_vala_target_value_unref0 (detail_value);
	return result;
}


static ValaCCodeExpression* vala_gsignal_module_get_signal_id_cexpression (ValaGSignalModule* self, ValaSignal* sig) {
	ValaCCodeExpression* result = NULL;
	ValaTypeSymbol* cl = NULL;
	ValaSignal* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	ValaCCodeIdentifier* signal_array = NULL;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeIdentifier* signal_enum_value = NULL;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaSignal* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	ValaCCodeIdentifier* _tmp17_;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeElementAccess* _tmp19_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sig != NULL, NULL);
	_tmp0_ = sig;
	_tmp1_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
	cl = _tmp3_;
	_tmp4_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) cl, NULL);
	_tmp5_ = _tmp4_;
	_tmp6_ = g_strdup_printf ("%s_signals", _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_ccode_identifier_new (_tmp7_);
	_tmp9_ = _tmp8_;
	_g_free0 (_tmp7_);
	_g_free0 (_tmp5_);
	signal_array = _tmp9_;
	_tmp10_ = vala_get_ccode_upper_case_name ((ValaSymbol*) cl, NULL);
	_tmp11_ = _tmp10_;
	_tmp12_ = sig;
	_tmp13_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp12_, NULL);
	_tmp14_ = _tmp13_;
	_tmp15_ = g_strdup_printf ("%s_%s_SIGNAL", _tmp11_, _tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_identifier_new (_tmp16_);
	_tmp18_ = _tmp17_;
	_g_free0 (_tmp16_);
	_g_free0 (_tmp14_);
	_g_free0 (_tmp11_);
	signal_enum_value = _tmp18_;
	_tmp19_ = vala_ccode_element_access_new ((ValaCCodeExpression*) signal_array, (ValaCCodeExpression*) signal_enum_value);
	result = (ValaCCodeExpression*) _tmp19_;
	_vala_ccode_node_unref0 (signal_enum_value);
	_vala_ccode_node_unref0 (signal_array);
	_vala_code_node_unref0 (cl);
	return result;
}


static ValaCCodeExpression* vala_gsignal_module_get_detail_cexpression (ValaGSignalModule* self, ValaExpression* detail_expr, ValaCodeNode* node) {
	ValaCCodeExpression* result = NULL;
	gboolean _tmp0_ = FALSE;
	ValaExpression* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaCCodeExpression* detail_cexpr = NULL;
	ValaExpression* _tmp13_;
	ValaCCodeExpression* _tmp14_;
	ValaCCodeFunctionCall* detail_ccall = NULL;
	ValaCCodeExpression* _tmp15_;
	gboolean _tmp16_;
	ValaCCodeFunctionCall* _tmp23_;
	ValaCCodeExpression* _tmp24_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (detail_expr != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp1_ = detail_expr;
	_tmp2_ = vala_expression_get_value_type (_tmp1_);
	_tmp3_ = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_NULL_TYPE)) {
		_tmp0_ = TRUE;
	} else {
		ValaExpression* _tmp4_;
		ValaDataType* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp7_;
		gboolean _tmp8_;
		_tmp4_ = detail_expr;
		_tmp5_ = vala_expression_get_value_type (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = ((ValaCCodeBaseModule*) self)->string_type;
		_tmp8_ = vala_data_type_compatible (_tmp6_, _tmp7_);
		_tmp0_ = !_tmp8_;
	}
	if (_tmp0_) {
		ValaCodeNode* _tmp9_;
		ValaExpression* _tmp10_;
		ValaSourceReference* _tmp11_;
		ValaSourceReference* _tmp12_;
		_tmp9_ = node;
		vala_code_node_set_error (_tmp9_, TRUE);
		_tmp10_ = detail_expr;
		_tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp10_);
		_tmp12_ = _tmp11_;
		vala_report_error (_tmp12_, "only string details are supported");
		result = NULL;
		return result;
	}
	_tmp13_ = detail_expr;
	_tmp14_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp13_);
	detail_cexpr = _tmp14_;
	_tmp15_ = detail_cexpr;
	_tmp16_ = vala_ccode_base_module_is_constant_ccode_expression ((ValaCCodeBaseModule*) self, _tmp15_);
	if (_tmp16_) {
		ValaCCodeIdentifier* _tmp17_;
		ValaCCodeIdentifier* _tmp18_;
		ValaCCodeFunctionCall* _tmp19_;
		_tmp17_ = vala_ccode_identifier_new ("g_quark_from_static_string");
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp18_);
		_vala_ccode_node_unref0 (detail_ccall);
		detail_ccall = _tmp19_;
		_vala_ccode_node_unref0 (_tmp18_);
	} else {
		ValaCCodeIdentifier* _tmp20_;
		ValaCCodeIdentifier* _tmp21_;
		ValaCCodeFunctionCall* _tmp22_;
		_tmp20_ = vala_ccode_identifier_new ("g_quark_from_string");
		_tmp21_ = _tmp20_;
		_tmp22_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp21_);
		_vala_ccode_node_unref0 (detail_ccall);
		detail_ccall = _tmp22_;
		_vala_ccode_node_unref0 (_tmp21_);
	}
	_tmp23_ = detail_ccall;
	_tmp24_ = detail_cexpr;
	vala_ccode_function_call_add_argument (_tmp23_, _tmp24_);
	result = (ValaCCodeExpression*) detail_ccall;
	_vala_ccode_node_unref0 (detail_cexpr);
	return result;
}


static void vala_gsignal_module_real_visit_signal (ValaCodeVisitor* base, ValaSignal* sig) {
	ValaGSignalModule * self;
	ValaClass* cl = NULL;
	ValaSignal* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaClass* _tmp3_;
	gboolean _tmp4_ = FALSE;
	ValaClass* _tmp5_;
	ValaClass* _tmp13_;
	gboolean _tmp38_ = FALSE;
	ValaCCodeEnum* _tmp39_;
	ValaSignal* _tmp56_;
	ValaSignal* _tmp77_;
	ValaList* _tmp78_;
	ValaList* _tmp79_;
	ValaSignal* _tmp80_;
	ValaDataType* _tmp81_;
	ValaDataType* _tmp82_;
	self = (ValaGSignalModule*) base;
	g_return_if_fail (sig != NULL);
	_tmp0_ = sig;
	_tmp1_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp2_) : NULL);
	cl = _tmp3_;
	_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_) {
		ValaSignal* _tmp9_;
		ValaSignal* _tmp10_;
		ValaSourceReference* _tmp11_;
		ValaSourceReference* _tmp12_;
		_tmp9_ = sig;
		vala_code_node_set_error ((ValaCodeNode*) _tmp9_, TRUE);
		_tmp10_ = sig;
		_tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp10_);
		_tmp12_ = _tmp11_;
		vala_report_error (_tmp12_, "Signals are not supported in compact classes");
		_vala_code_node_unref0 (cl);
		return;
	}
	_tmp13_ = cl;
	if (_tmp13_ != NULL) {
		{
			ValaList* _base_type_list = NULL;
			ValaClass* _tmp14_;
			ValaList* _tmp15_;
			gint _base_type_size = 0;
			ValaList* _tmp16_;
			gint _tmp17_;
			gint _tmp18_;
			gint _base_type_index = 0;
			_tmp14_ = cl;
			_tmp15_ = vala_class_get_base_types (_tmp14_);
			_base_type_list = _tmp15_;
			_tmp16_ = _base_type_list;
			_tmp17_ = vala_collection_get_size ((ValaCollection*) _tmp16_);
			_tmp18_ = _tmp17_;
			_base_type_size = _tmp18_;
			_base_type_index = -1;
			while (TRUE) {
				gint _tmp19_;
				gint _tmp20_;
				gint _tmp21_;
				ValaDataType* base_type = NULL;
				ValaList* _tmp22_;
				gint _tmp23_;
				gpointer _tmp24_;
				ValaDataType* _tmp25_;
				ValaTypeSymbol* _tmp26_;
				ValaTypeSymbol* _tmp27_;
				ValaSignal* _tmp28_;
				const gchar* _tmp29_;
				const gchar* _tmp30_;
				ValaSymbol* _tmp31_;
				ValaSymbol* _tmp32_;
				gboolean _tmp33_;
				_tmp19_ = _base_type_index;
				_base_type_index = _tmp19_ + 1;
				_tmp20_ = _base_type_index;
				_tmp21_ = _base_type_size;
				if (!(_tmp20_ < _tmp21_)) {
					break;
				}
				_tmp22_ = _base_type_list;
				_tmp23_ = _base_type_index;
				_tmp24_ = vala_list_get (_tmp22_, _tmp23_);
				base_type = (ValaDataType*) _tmp24_;
				_tmp25_ = base_type;
				_tmp26_ = vala_data_type_get_data_type (_tmp25_);
				_tmp27_ = _tmp26_;
				_tmp28_ = sig;
				_tmp29_ = vala_symbol_get_name ((ValaSymbol*) _tmp28_);
				_tmp30_ = _tmp29_;
				_tmp31_ = vala_semantic_analyzer_symbol_lookup_inherited ((ValaSymbol*) _tmp27_, _tmp30_);
				_tmp32_ = _tmp31_;
				_tmp33_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_SIGNAL);
				_vala_code_node_unref0 (_tmp32_);
				if (_tmp33_) {
					ValaSignal* _tmp34_;
					ValaSignal* _tmp35_;
					ValaSourceReference* _tmp36_;
					ValaSourceReference* _tmp37_;
					_tmp34_ = sig;
					vala_code_node_set_error ((ValaCodeNode*) _tmp34_, TRUE);
					_tmp35_ = sig;
					_tmp36_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp35_);
					_tmp37_ = _tmp36_;
					vala_report_error (_tmp37_, "Signals with the same name as a signal in a base type are not supporte" \
"d");
					_vala_code_node_unref0 (base_type);
					_vala_iterable_unref0 (_base_type_list);
					_vala_code_node_unref0 (cl);
					return;
				}
				_vala_code_node_unref0 (base_type);
			}
			_vala_iterable_unref0 (_base_type_list);
		}
	}
	_tmp39_ = ((ValaCCodeBaseModule*) self)->signal_enum;
	if (_tmp39_ != NULL) {
		ValaSignal* _tmp40_;
		ValaSymbol* _tmp41_;
		ValaSymbol* _tmp42_;
		_tmp40_ = sig;
		_tmp41_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp40_);
		_tmp42_ = _tmp41_;
		_tmp38_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp42_, VALA_TYPE_TYPESYMBOL);
	} else {
		_tmp38_ = FALSE;
	}
	if (_tmp38_) {
		ValaCCodeEnum* _tmp43_;
		ValaSignal* _tmp44_;
		ValaSymbol* _tmp45_;
		ValaSymbol* _tmp46_;
		gchar* _tmp47_;
		gchar* _tmp48_;
		ValaSignal* _tmp49_;
		gchar* _tmp50_;
		gchar* _tmp51_;
		gchar* _tmp52_;
		gchar* _tmp53_;
		ValaCCodeEnumValue* _tmp54_;
		ValaCCodeEnumValue* _tmp55_;
		_tmp43_ = ((ValaCCodeBaseModule*) self)->signal_enum;
		_tmp44_ = sig;
		_tmp45_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp44_);
		_tmp46_ = _tmp45_;
		_tmp47_ = vala_get_ccode_upper_case_name ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol), NULL);
		_tmp48_ = _tmp47_;
		_tmp49_ = sig;
		_tmp50_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp49_, NULL);
		_tmp51_ = _tmp50_;
		_tmp52_ = g_strdup_printf ("%s_%s_SIGNAL", _tmp48_, _tmp51_);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_enum_value_new (_tmp53_, NULL);
		_tmp55_ = _tmp54_;
		vala_ccode_enum_add_value (_tmp43_, _tmp55_);
		_vala_ccode_node_unref0 (_tmp55_);
		_g_free0 (_tmp53_);
		_g_free0 (_tmp51_);
		_g_free0 (_tmp48_);
	}
	_tmp56_ = sig;
	vala_code_node_accept_children ((ValaCodeNode*) _tmp56_, (ValaCodeVisitor*) self);
	{
		ValaList* _p_list = NULL;
		ValaSignal* _tmp57_;
		ValaList* _tmp58_;
		gint _p_size = 0;
		ValaList* _tmp59_;
		gint _tmp60_;
		gint _tmp61_;
		gint _p_index = 0;
		_tmp57_ = sig;
		_tmp58_ = vala_callable_get_parameters ((ValaCallable*) _tmp57_);
		_p_list = _tmp58_;
		_tmp59_ = _p_list;
		_tmp60_ = vala_collection_get_size ((ValaCollection*) _tmp59_);
		_tmp61_ = _tmp60_;
		_p_size = _tmp61_;
		_p_index = -1;
		while (TRUE) {
			gint _tmp62_;
			gint _tmp63_;
			gint _tmp64_;
			ValaParameter* p = NULL;
			ValaList* _tmp65_;
			gint _tmp66_;
			gpointer _tmp67_;
			ValaParameter* _tmp68_;
			ValaCCodeFile* _tmp69_;
			GHashFunc _tmp70_;
			GEqualFunc _tmp71_;
			GEqualFunc _tmp72_;
			ValaHashMap* _tmp73_;
			ValaHashMap* _tmp74_;
			ValaCCodeParameter* _tmp75_;
			ValaCCodeParameter* _tmp76_;
			_tmp62_ = _p_index;
			_p_index = _tmp62_ + 1;
			_tmp63_ = _p_index;
			_tmp64_ = _p_size;
			if (!(_tmp63_ < _tmp64_)) {
				break;
			}
			_tmp65_ = _p_list;
			_tmp66_ = _p_index;
			_tmp67_ = vala_list_get (_tmp65_, _tmp66_);
			p = (ValaParameter*) _tmp67_;
			_tmp68_ = p;
			_tmp69_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp70_ = g_direct_hash;
			_tmp71_ = g_direct_equal;
			_tmp72_ = g_direct_equal;
			_tmp73_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp70_, _tmp71_, _tmp72_);
			_tmp74_ = _tmp73_;
			_tmp75_ = vala_ccode_method_module_generate_parameter ((ValaCCodeMethodModule*) self, _tmp68_, _tmp69_, (ValaMap*) _tmp74_, NULL);
			_tmp76_ = _tmp75_;
			_vala_ccode_node_unref0 (_tmp76_);
			_vala_map_unref0 (_tmp74_);
			_vala_code_node_unref0 (p);
		}
		_vala_iterable_unref0 (_p_list);
	}
	_tmp77_ = sig;
	_tmp78_ = vala_callable_get_parameters ((ValaCallable*) _tmp77_);
	_tmp79_ = _tmp78_;
	_tmp80_ = sig;
	_tmp81_ = vala_callable_get_return_type ((ValaCallable*) _tmp80_);
	_tmp82_ = _tmp81_;
	vala_gsignal_module_generate_marshaller (self, _tmp79_, _tmp82_);
	_vala_iterable_unref0 (_tmp79_);
	_vala_code_node_unref0 (cl);
}


static void vala_gsignal_module_generate_marshaller (ValaGSignalModule* self, ValaList* params, ValaDataType* return_type) {
	gchar* signature = NULL;
	gint n_params = 0;
	gint i = 0;
	ValaList* _tmp0_;
	ValaDataType* _tmp1_;
	gchar* _tmp2_;
	gboolean _tmp3_ = FALSE;
	ValaSet* _tmp4_;
	const gchar* _tmp5_;
	gboolean _tmp6_;
	ValaCCodeFunction* signal_marshaller = NULL;
	ValaList* _tmp10_;
	ValaDataType* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	ValaCCodeParameter* _tmp18_;
	ValaCCodeParameter* _tmp19_;
	ValaCCodeFunction* _tmp20_;
	ValaCCodeParameter* _tmp21_;
	ValaCCodeParameter* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	ValaCCodeParameter* _tmp24_;
	ValaCCodeParameter* _tmp25_;
	ValaCCodeFunction* _tmp26_;
	ValaCCodeParameter* _tmp27_;
	ValaCCodeParameter* _tmp28_;
	ValaCCodeFunction* _tmp29_;
	ValaCCodeParameter* _tmp30_;
	ValaCCodeParameter* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeParameter* _tmp33_;
	ValaCCodeParameter* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeFunctionDeclarator* callback_decl = NULL;
	ValaList* _tmp36_;
	ValaDataType* _tmp37_;
	gchar* _tmp38_;
	gchar* _tmp39_;
	ValaCCodeFunctionDeclarator* _tmp40_;
	ValaCCodeFunctionDeclarator* _tmp41_;
	ValaCCodeFunctionDeclarator* _tmp42_;
	ValaCCodeParameter* _tmp43_;
	ValaCCodeParameter* _tmp44_;
	ValaCCodeFunctionDeclarator* _tmp85_;
	ValaCCodeParameter* _tmp86_;
	ValaCCodeParameter* _tmp87_;
	ValaCCodeFunction* _tmp88_;
	ValaCCodeFunction* _tmp89_;
	ValaDataType* _tmp90_;
	gchar* _tmp91_;
	gchar* _tmp92_;
	ValaCCodeFunctionDeclarator* _tmp93_;
	ValaCCodeTypeDefinition* _tmp94_;
	ValaCCodeTypeDefinition* _tmp95_;
	ValaCCodeFunction* _tmp96_;
	ValaCCodeFunction* _tmp97_;
	ValaList* _tmp98_;
	ValaDataType* _tmp99_;
	gchar* _tmp100_;
	gchar* _tmp101_;
	ValaCCodeVariableDeclarator* _tmp102_;
	ValaCCodeVariableDeclarator* _tmp103_;
	ValaCCodeFunction* _tmp104_;
	ValaCCodeFunction* _tmp105_;
	ValaCCodeIdentifier* _tmp106_;
	ValaCCodeIdentifier* _tmp107_;
	ValaCCodeCastExpression* _tmp108_;
	ValaCCodeCastExpression* _tmp109_;
	ValaCCodeVariableDeclarator* _tmp110_;
	ValaCCodeVariableDeclarator* _tmp111_;
	ValaCCodeFunction* _tmp112_;
	ValaCCodeFunction* _tmp113_;
	ValaCCodeVariableDeclarator* _tmp114_;
	ValaCCodeVariableDeclarator* _tmp115_;
	ValaCCodeFunction* _tmp116_;
	ValaCCodeFunction* _tmp117_;
	ValaCCodeVariableDeclarator* _tmp118_;
	ValaCCodeVariableDeclarator* _tmp119_;
	ValaCCodeFunctionCall* fc = NULL;
	gboolean _tmp120_ = FALSE;
	ValaDataType* _tmp121_;
	ValaTypeSymbol* _tmp122_;
	ValaTypeSymbol* _tmp123_;
	ValaCCodeIdentifier* _tmp146_;
	ValaCCodeIdentifier* _tmp147_;
	ValaCCodeFunctionCall* _tmp148_;
	ValaCCodeFunctionCall* _tmp149_;
	ValaCCodeIdentifier* _tmp150_;
	ValaCCodeIdentifier* _tmp151_;
	gint _tmp152_;
	gchar* _tmp153_;
	gchar* _tmp154_;
	ValaCCodeConstant* _tmp155_;
	ValaCCodeConstant* _tmp156_;
	ValaCCodeBinaryExpression* _tmp157_;
	ValaCCodeBinaryExpression* _tmp158_;
	ValaCCodeFunction* _tmp159_;
	ValaCCodeFunction* _tmp160_;
	ValaCCodeFunctionCall* _tmp161_;
	ValaCCodeMemberAccess* data = NULL;
	ValaCCodeIdentifier* _tmp162_;
	ValaCCodeIdentifier* _tmp163_;
	ValaCCodeMemberAccess* _tmp164_;
	ValaCCodeMemberAccess* _tmp165_;
	ValaCCodeMemberAccess* param = NULL;
	ValaCCodeIdentifier* _tmp166_;
	ValaCCodeIdentifier* _tmp167_;
	ValaCCodeMemberAccess* _tmp168_;
	ValaCCodeMemberAccess* _tmp169_;
	ValaCCodeMemberAccess* _tmp170_;
	ValaCCodeMemberAccess* _tmp171_;
	ValaCCodeFunctionCall* cond = NULL;
	ValaCCodeConstant* _tmp172_;
	ValaCCodeConstant* _tmp173_;
	ValaCCodeFunctionCall* _tmp174_;
	ValaCCodeFunctionCall* _tmp175_;
	ValaCCodeFunctionCall* _tmp176_;
	ValaCCodeIdentifier* _tmp177_;
	ValaCCodeIdentifier* _tmp178_;
	ValaCCodeFunction* _tmp179_;
	ValaCCodeFunction* _tmp180_;
	ValaCCodeFunctionCall* _tmp181_;
	ValaCCodeFunction* _tmp182_;
	ValaCCodeFunction* _tmp183_;
	ValaCCodeIdentifier* _tmp184_;
	ValaCCodeIdentifier* _tmp185_;
	ValaCCodeMemberAccess* _tmp186_;
	ValaCCodeFunction* _tmp187_;
	ValaCCodeFunction* _tmp188_;
	ValaCCodeIdentifier* _tmp189_;
	ValaCCodeIdentifier* _tmp190_;
	ValaCCodeMemberAccess* _tmp191_;
	ValaCCodeFunction* _tmp192_;
	ValaCCodeFunction* _tmp193_;
	ValaCCodeFunction* _tmp194_;
	ValaCCodeFunction* _tmp195_;
	ValaCCodeIdentifier* _tmp196_;
	ValaCCodeIdentifier* _tmp197_;
	ValaCCodeMemberAccess* _tmp198_;
	ValaCCodeFunction* _tmp199_;
	ValaCCodeFunction* _tmp200_;
	ValaCCodeIdentifier* _tmp201_;
	ValaCCodeIdentifier* _tmp202_;
	ValaCCodeMemberAccess* _tmp203_;
	ValaCCodeFunction* _tmp204_;
	ValaCCodeFunction* _tmp205_;
	ValaCCodeCastExpression* c_assign_rhs = NULL;
	ValaCCodeIdentifier* _tmp206_;
	ValaCCodeIdentifier* _tmp207_;
	ValaCCodeIdentifier* _tmp208_;
	ValaCCodeIdentifier* _tmp209_;
	ValaCCodeIdentifier* _tmp210_;
	ValaCCodeIdentifier* _tmp211_;
	ValaCCodeMemberAccess* _tmp212_;
	ValaCCodeMemberAccess* _tmp213_;
	ValaCCodeConditionalExpression* _tmp214_;
	ValaCCodeConditionalExpression* _tmp215_;
	ValaList* _tmp216_;
	ValaDataType* _tmp217_;
	gchar* _tmp218_;
	gchar* _tmp219_;
	ValaCCodeCastExpression* _tmp220_;
	ValaCCodeCastExpression* _tmp221_;
	ValaCCodeFunction* _tmp222_;
	ValaCCodeFunction* _tmp223_;
	ValaCCodeIdentifier* _tmp224_;
	ValaCCodeIdentifier* _tmp225_;
	ValaCCodeCastExpression* _tmp226_;
	ValaCCodeIdentifier* _tmp227_;
	ValaCCodeIdentifier* _tmp228_;
	ValaCCodeFunctionCall* _tmp229_;
	ValaCCodeFunctionCall* _tmp230_;
	ValaCCodeIdentifier* _tmp231_;
	ValaCCodeIdentifier* _tmp232_;
	ValaCCodeFunctionCall* _tmp338_;
	ValaCCodeIdentifier* _tmp339_;
	ValaCCodeIdentifier* _tmp340_;
	gboolean _tmp341_ = FALSE;
	ValaDataType* _tmp342_;
	ValaTypeSymbol* _tmp343_;
	ValaTypeSymbol* _tmp344_;
	ValaCCodeFile* _tmp425_;
	ValaCCodeFunction* _tmp426_;
	ValaCCodeFile* _tmp427_;
	ValaCCodeFunction* _tmp428_;
	ValaSet* _tmp429_;
	const gchar* _tmp430_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (params != NULL);
	g_return_if_fail (return_type != NULL);
	_tmp0_ = params;
	_tmp1_ = return_type;
	_tmp2_ = vala_gsignal_module_get_marshaller_signature (self, _tmp0_, _tmp1_);
	_g_free0 (signature);
	signature = _tmp2_;
	_tmp4_ = ((ValaCCodeBaseModule*) self)->predefined_marshal_set;
	_tmp5_ = signature;
	_tmp6_ = vala_collection_contains ((ValaCollection*) _tmp4_, _tmp5_);
	if (_tmp6_) {
		_tmp3_ = TRUE;
	} else {
		ValaSet* _tmp7_;
		const gchar* _tmp8_;
		gboolean _tmp9_;
		_tmp7_ = ((ValaCCodeBaseModule*) self)->user_marshal_set;
		_tmp8_ = signature;
		_tmp9_ = vala_collection_contains ((ValaCollection*) _tmp7_, _tmp8_);
		_tmp3_ = _tmp9_;
	}
	if (_tmp3_) {
		_g_free0 (signature);
		return;
	}
	_tmp10_ = params;
	_tmp11_ = return_type;
	_tmp12_ = vala_gsignal_module_get_marshaller_function (self, _tmp10_, _tmp11_, NULL);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_function_new (_tmp13_, "void");
	_tmp15_ = _tmp14_;
	_g_free0 (_tmp13_);
	signal_marshaller = _tmp15_;
	_tmp16_ = signal_marshaller;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp16_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp17_ = signal_marshaller;
	_tmp18_ = vala_ccode_parameter_new ("closure", "GClosure *");
	_tmp19_ = _tmp18_;
	vala_ccode_function_add_parameter (_tmp17_, _tmp19_);
	_vala_ccode_node_unref0 (_tmp19_);
	_tmp20_ = signal_marshaller;
	_tmp21_ = vala_ccode_parameter_new ("return_value", "GValue *");
	_tmp22_ = _tmp21_;
	vala_ccode_function_add_parameter (_tmp20_, _tmp22_);
	_vala_ccode_node_unref0 (_tmp22_);
	_tmp23_ = signal_marshaller;
	_tmp24_ = vala_ccode_parameter_new ("n_param_values", "guint");
	_tmp25_ = _tmp24_;
	vala_ccode_function_add_parameter (_tmp23_, _tmp25_);
	_vala_ccode_node_unref0 (_tmp25_);
	_tmp26_ = signal_marshaller;
	_tmp27_ = vala_ccode_parameter_new ("param_values", "const GValue *");
	_tmp28_ = _tmp27_;
	vala_ccode_function_add_parameter (_tmp26_, _tmp28_);
	_vala_ccode_node_unref0 (_tmp28_);
	_tmp29_ = signal_marshaller;
	_tmp30_ = vala_ccode_parameter_new ("invocation_hint", "gpointer");
	_tmp31_ = _tmp30_;
	vala_ccode_function_add_parameter (_tmp29_, _tmp31_);
	_vala_ccode_node_unref0 (_tmp31_);
	_tmp32_ = signal_marshaller;
	_tmp33_ = vala_ccode_parameter_new ("marshal_data", "gpointer");
	_tmp34_ = _tmp33_;
	vala_ccode_function_add_parameter (_tmp32_, _tmp34_);
	_vala_ccode_node_unref0 (_tmp34_);
	_tmp35_ = signal_marshaller;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp35_);
	_tmp36_ = params;
	_tmp37_ = return_type;
	_tmp38_ = vala_gsignal_module_get_marshaller_function (self, _tmp36_, _tmp37_, "GMarshalFunc");
	_tmp39_ = _tmp38_;
	_tmp40_ = vala_ccode_function_declarator_new (_tmp39_);
	_tmp41_ = _tmp40_;
	_g_free0 (_tmp39_);
	callback_decl = _tmp41_;
	_tmp42_ = callback_decl;
	_tmp43_ = vala_ccode_parameter_new ("data1", "gpointer");
	_tmp44_ = _tmp43_;
	vala_ccode_function_declarator_add_parameter (_tmp42_, _tmp44_);
	_vala_ccode_node_unref0 (_tmp44_);
	n_params = 1;
	{
		ValaList* _p_list = NULL;
		ValaList* _tmp45_;
		ValaList* _tmp46_;
		gint _p_size = 0;
		ValaList* _tmp47_;
		gint _tmp48_;
		gint _tmp49_;
		gint _p_index = 0;
		_tmp45_ = params;
		_tmp46_ = _vala_iterable_ref0 (_tmp45_);
		_p_list = _tmp46_;
		_tmp47_ = _p_list;
		_tmp48_ = vala_collection_get_size ((ValaCollection*) _tmp47_);
		_tmp49_ = _tmp48_;
		_p_size = _tmp49_;
		_p_index = -1;
		while (TRUE) {
			gint _tmp50_;
			gint _tmp51_;
			gint _tmp52_;
			ValaParameter* p = NULL;
			ValaList* _tmp53_;
			gint _tmp54_;
			gpointer _tmp55_;
			ValaCCodeFunctionDeclarator* _tmp56_;
			gint _tmp57_;
			gchar* _tmp58_;
			gchar* _tmp59_;
			ValaParameter* _tmp60_;
			gchar* _tmp61_;
			gchar* _tmp62_;
			ValaCCodeParameter* _tmp63_;
			ValaCCodeParameter* _tmp64_;
			gint _tmp65_;
			ValaParameter* _tmp66_;
			ValaDataType* _tmp67_;
			ValaDataType* _tmp68_;
			gboolean _tmp69_;
			_tmp50_ = _p_index;
			_p_index = _tmp50_ + 1;
			_tmp51_ = _p_index;
			_tmp52_ = _p_size;
			if (!(_tmp51_ < _tmp52_)) {
				break;
			}
			_tmp53_ = _p_list;
			_tmp54_ = _p_index;
			_tmp55_ = vala_list_get (_tmp53_, _tmp54_);
			p = (ValaParameter*) _tmp55_;
			_tmp56_ = callback_decl;
			_tmp57_ = n_params;
			_tmp58_ = g_strdup_printf ("arg_%d", _tmp57_);
			_tmp59_ = _tmp58_;
			_tmp60_ = p;
			_tmp61_ = vala_gsignal_module_get_value_type_name_from_parameter (self, _tmp60_);
			_tmp62_ = _tmp61_;
			_tmp63_ = vala_ccode_parameter_new (_tmp59_, _tmp62_);
			_tmp64_ = _tmp63_;
			vala_ccode_function_declarator_add_parameter (_tmp56_, _tmp64_);
			_vala_ccode_node_unref0 (_tmp64_);
			_g_free0 (_tmp62_);
			_g_free0 (_tmp59_);
			_tmp65_ = n_params;
			n_params = _tmp65_ + 1;
			_tmp66_ = p;
			_tmp67_ = vala_variable_get_variable_type ((ValaVariable*) _tmp66_);
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_data_type_is_array (_tmp68_);
			if (_tmp69_) {
				{
					gint j = 0;
					j = 0;
					{
						gboolean _tmp70_ = FALSE;
						_tmp70_ = TRUE;
						while (TRUE) {
							gint _tmp72_;
							ValaParameter* _tmp73_;
							ValaDataType* _tmp74_;
							ValaDataType* _tmp75_;
							gint _tmp76_;
							gint _tmp77_;
							ValaCCodeFunctionDeclarator* _tmp78_;
							gint _tmp79_;
							gchar* _tmp80_;
							gchar* _tmp81_;
							ValaCCodeParameter* _tmp82_;
							ValaCCodeParameter* _tmp83_;
							gint _tmp84_;
							if (!_tmp70_) {
								gint _tmp71_;
								_tmp71_ = j;
								j = _tmp71_ + 1;
							}
							_tmp70_ = FALSE;
							_tmp72_ = j;
							_tmp73_ = p;
							_tmp74_ = vala_variable_get_variable_type ((ValaVariable*) _tmp73_);
							_tmp75_ = _tmp74_;
							_tmp76_ = vala_array_type_get_rank (G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
							_tmp77_ = _tmp76_;
							if (!(_tmp72_ < _tmp77_)) {
								break;
							}
							_tmp78_ = callback_decl;
							_tmp79_ = n_params;
							_tmp80_ = g_strdup_printf ("arg_%d", _tmp79_);
							_tmp81_ = _tmp80_;
							_tmp82_ = vala_ccode_parameter_new (_tmp81_, "gint");
							_tmp83_ = _tmp82_;
							vala_ccode_function_declarator_add_parameter (_tmp78_, _tmp83_);
							_vala_ccode_node_unref0 (_tmp83_);
							_g_free0 (_tmp81_);
							_tmp84_ = n_params;
							n_params = _tmp84_ + 1;
						}
					}
				}
			}
			_vala_code_node_unref0 (p);
		}
		_vala_iterable_unref0 (_p_list);
	}
	_tmp85_ = callback_decl;
	_tmp86_ = vala_ccode_parameter_new ("data2", "gpointer");
	_tmp87_ = _tmp86_;
	vala_ccode_function_declarator_add_parameter (_tmp85_, _tmp87_);
	_vala_ccode_node_unref0 (_tmp87_);
	_tmp88_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp89_ = _tmp88_;
	_tmp90_ = return_type;
	_tmp91_ = vala_gsignal_module_get_value_type_name_from_type_reference (self, _tmp90_);
	_tmp92_ = _tmp91_;
	_tmp93_ = callback_decl;
	_tmp94_ = vala_ccode_type_definition_new (_tmp92_, (ValaCCodeDeclarator*) _tmp93_);
	_tmp95_ = _tmp94_;
	vala_ccode_function_add_statement (_tmp89_, (ValaCCodeNode*) _tmp95_);
	_vala_ccode_node_unref0 (_tmp95_);
	_g_free0 (_tmp92_);
	_tmp96_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp97_ = _tmp96_;
	_tmp98_ = params;
	_tmp99_ = return_type;
	_tmp100_ = vala_gsignal_module_get_marshaller_function (self, _tmp98_, _tmp99_, "GMarshalFunc");
	_tmp101_ = _tmp100_;
	_tmp102_ = vala_ccode_variable_declarator_new ("callback", NULL, NULL);
	_tmp103_ = _tmp102_;
	vala_ccode_function_add_declaration (_tmp97_, _tmp101_, (ValaCCodeDeclarator*) _tmp103_, VALA_CCODE_MODIFIERS_REGISTER);
	_vala_ccode_node_unref0 (_tmp103_);
	_g_free0 (_tmp101_);
	_tmp104_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp105_ = _tmp104_;
	_tmp106_ = vala_ccode_identifier_new ("closure");
	_tmp107_ = _tmp106_;
	_tmp108_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp107_, "GCClosure *");
	_tmp109_ = _tmp108_;
	_tmp110_ = vala_ccode_variable_declarator_new ("cc", (ValaCCodeExpression*) _tmp109_, NULL);
	_tmp111_ = _tmp110_;
	vala_ccode_function_add_declaration (_tmp105_, "GCClosure *", (ValaCCodeDeclarator*) _tmp111_, VALA_CCODE_MODIFIERS_REGISTER);
	_vala_ccode_node_unref0 (_tmp111_);
	_vala_ccode_node_unref0 (_tmp109_);
	_vala_ccode_node_unref0 (_tmp107_);
	_tmp112_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp113_ = _tmp112_;
	_tmp114_ = vala_ccode_variable_declarator_new ("data1", NULL, NULL);
	_tmp115_ = _tmp114_;
	vala_ccode_function_add_declaration (_tmp113_, "gpointer", (ValaCCodeDeclarator*) _tmp115_, VALA_CCODE_MODIFIERS_REGISTER);
	_vala_ccode_node_unref0 (_tmp115_);
	_tmp116_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp117_ = _tmp116_;
	_tmp118_ = vala_ccode_variable_declarator_new ("data2", NULL, NULL);
	_tmp119_ = _tmp118_;
	vala_ccode_function_add_declaration (_tmp117_, "gpointer", (ValaCCodeDeclarator*) _tmp119_, VALA_CCODE_MODIFIERS_REGISTER);
	_vala_ccode_node_unref0 (_tmp119_);
	_tmp121_ = return_type;
	_tmp122_ = vala_data_type_get_data_type (_tmp121_);
	_tmp123_ = _tmp122_;
	if (_tmp123_ != NULL) {
		_tmp120_ = TRUE;
	} else {
		ValaDataType* _tmp124_;
		gboolean _tmp125_;
		_tmp124_ = return_type;
		_tmp125_ = vala_data_type_is_array (_tmp124_);
		_tmp120_ = _tmp125_;
	}
	if (_tmp120_) {
		ValaCCodeFunction* _tmp126_;
		ValaCCodeFunction* _tmp127_;
		ValaDataType* _tmp128_;
		gchar* _tmp129_;
		gchar* _tmp130_;
		ValaCCodeVariableDeclarator* _tmp131_;
		ValaCCodeVariableDeclarator* _tmp132_;
		ValaCCodeIdentifier* _tmp133_;
		ValaCCodeIdentifier* _tmp134_;
		ValaCCodeFunctionCall* _tmp135_;
		ValaCCodeFunctionCall* _tmp136_;
		ValaCCodeIdentifier* _tmp137_;
		ValaCCodeIdentifier* _tmp138_;
		ValaCCodeConstant* _tmp139_;
		ValaCCodeConstant* _tmp140_;
		ValaCCodeBinaryExpression* _tmp141_;
		ValaCCodeBinaryExpression* _tmp142_;
		ValaCCodeFunction* _tmp143_;
		ValaCCodeFunction* _tmp144_;
		ValaCCodeFunctionCall* _tmp145_;
		_tmp126_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp127_ = _tmp126_;
		_tmp128_ = return_type;
		_tmp129_ = vala_gsignal_module_get_value_type_name_from_type_reference (self, _tmp128_);
		_tmp130_ = _tmp129_;
		_tmp131_ = vala_ccode_variable_declarator_new ("v_return", NULL, NULL);
		_tmp132_ = _tmp131_;
		vala_ccode_function_add_declaration (_tmp127_, _tmp130_, (ValaCCodeDeclarator*) _tmp132_, 0);
		_vala_ccode_node_unref0 (_tmp132_);
		_g_free0 (_tmp130_);
		_tmp133_ = vala_ccode_identifier_new ("g_return_if_fail");
		_tmp134_ = _tmp133_;
		_tmp135_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp134_);
		_vala_ccode_node_unref0 (fc);
		fc = _tmp135_;
		_vala_ccode_node_unref0 (_tmp134_);
		_tmp136_ = fc;
		_tmp137_ = vala_ccode_identifier_new ("return_value");
		_tmp138_ = _tmp137_;
		_tmp139_ = vala_ccode_constant_new ("NULL");
		_tmp140_ = _tmp139_;
		_tmp141_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp138_, (ValaCCodeExpression*) _tmp140_);
		_tmp142_ = _tmp141_;
		vala_ccode_function_call_add_argument (_tmp136_, (ValaCCodeExpression*) _tmp142_);
		_vala_ccode_node_unref0 (_tmp142_);
		_vala_ccode_node_unref0 (_tmp140_);
		_vala_ccode_node_unref0 (_tmp138_);
		_tmp143_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp144_ = _tmp143_;
		_tmp145_ = fc;
		vala_ccode_function_add_expression (_tmp144_, (ValaCCodeExpression*) _tmp145_);
	}
	_tmp146_ = vala_ccode_identifier_new ("g_return_if_fail");
	_tmp147_ = _tmp146_;
	_tmp148_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp147_);
	_vala_ccode_node_unref0 (fc);
	fc = _tmp148_;
	_vala_ccode_node_unref0 (_tmp147_);
	_tmp149_ = fc;
	_tmp150_ = vala_ccode_identifier_new ("n_param_values");
	_tmp151_ = _tmp150_;
	_tmp152_ = n_params;
	_tmp153_ = g_strdup_printf ("%i", _tmp152_);
	_tmp154_ = _tmp153_;
	_tmp155_ = vala_ccode_constant_new (_tmp154_);
	_tmp156_ = _tmp155_;
	_tmp157_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp151_, (ValaCCodeExpression*) _tmp156_);
	_tmp158_ = _tmp157_;
	vala_ccode_function_call_add_argument (_tmp149_, (ValaCCodeExpression*) _tmp158_);
	_vala_ccode_node_unref0 (_tmp158_);
	_vala_ccode_node_unref0 (_tmp156_);
	_g_free0 (_tmp154_);
	_vala_ccode_node_unref0 (_tmp151_);
	_tmp159_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp160_ = _tmp159_;
	_tmp161_ = fc;
	vala_ccode_function_add_expression (_tmp160_, (ValaCCodeExpression*) _tmp161_);
	_tmp162_ = vala_ccode_identifier_new ("closure");
	_tmp163_ = _tmp162_;
	_tmp164_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp163_, "data", TRUE);
	_tmp165_ = _tmp164_;
	_vala_ccode_node_unref0 (_tmp163_);
	data = _tmp165_;
	_tmp166_ = vala_ccode_identifier_new ("param_values");
	_tmp167_ = _tmp166_;
	_tmp168_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp167_, "data[0]", TRUE);
	_tmp169_ = _tmp168_;
	_tmp170_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp169_, "v_pointer", FALSE);
	_tmp171_ = _tmp170_;
	_vala_ccode_node_unref0 (_tmp169_);
	_vala_ccode_node_unref0 (_tmp167_);
	param = _tmp171_;
	_tmp172_ = vala_ccode_constant_new ("G_CCLOSURE_SWAP_DATA");
	_tmp173_ = _tmp172_;
	_tmp174_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp173_);
	_tmp175_ = _tmp174_;
	_vala_ccode_node_unref0 (_tmp173_);
	cond = _tmp175_;
	_tmp176_ = cond;
	_tmp177_ = vala_ccode_identifier_new ("closure");
	_tmp178_ = _tmp177_;
	vala_ccode_function_call_add_argument (_tmp176_, (ValaCCodeExpression*) _tmp178_);
	_vala_ccode_node_unref0 (_tmp178_);
	_tmp179_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp180_ = _tmp179_;
	_tmp181_ = cond;
	vala_ccode_function_open_if (_tmp180_, (ValaCCodeExpression*) _tmp181_);
	_tmp182_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp183_ = _tmp182_;
	_tmp184_ = vala_ccode_identifier_new ("data1");
	_tmp185_ = _tmp184_;
	_tmp186_ = data;
	vala_ccode_function_add_assignment (_tmp183_, (ValaCCodeExpression*) _tmp185_, (ValaCCodeExpression*) _tmp186_);
	_vala_ccode_node_unref0 (_tmp185_);
	_tmp187_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp188_ = _tmp187_;
	_tmp189_ = vala_ccode_identifier_new ("data2");
	_tmp190_ = _tmp189_;
	_tmp191_ = param;
	vala_ccode_function_add_assignment (_tmp188_, (ValaCCodeExpression*) _tmp190_, (ValaCCodeExpression*) _tmp191_);
	_vala_ccode_node_unref0 (_tmp190_);
	_tmp192_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp193_ = _tmp192_;
	vala_ccode_function_add_else (_tmp193_);
	_tmp194_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp195_ = _tmp194_;
	_tmp196_ = vala_ccode_identifier_new ("data1");
	_tmp197_ = _tmp196_;
	_tmp198_ = param;
	vala_ccode_function_add_assignment (_tmp195_, (ValaCCodeExpression*) _tmp197_, (ValaCCodeExpression*) _tmp198_);
	_vala_ccode_node_unref0 (_tmp197_);
	_tmp199_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp200_ = _tmp199_;
	_tmp201_ = vala_ccode_identifier_new ("data2");
	_tmp202_ = _tmp201_;
	_tmp203_ = data;
	vala_ccode_function_add_assignment (_tmp200_, (ValaCCodeExpression*) _tmp202_, (ValaCCodeExpression*) _tmp203_);
	_vala_ccode_node_unref0 (_tmp202_);
	_tmp204_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp205_ = _tmp204_;
	vala_ccode_function_close (_tmp205_);
	_tmp206_ = vala_ccode_identifier_new ("marshal_data");
	_tmp207_ = _tmp206_;
	_tmp208_ = vala_ccode_identifier_new ("marshal_data");
	_tmp209_ = _tmp208_;
	_tmp210_ = vala_ccode_identifier_new ("cc");
	_tmp211_ = _tmp210_;
	_tmp212_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp211_, "callback", TRUE);
	_tmp213_ = _tmp212_;
	_tmp214_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp207_, (ValaCCodeExpression*) _tmp209_, (ValaCCodeExpression*) _tmp213_);
	_tmp215_ = _tmp214_;
	_tmp216_ = params;
	_tmp217_ = return_type;
	_tmp218_ = vala_gsignal_module_get_marshaller_function (self, _tmp216_, _tmp217_, "GMarshalFunc");
	_tmp219_ = _tmp218_;
	_tmp220_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp215_, _tmp219_);
	_tmp221_ = _tmp220_;
	_g_free0 (_tmp219_);
	_vala_ccode_node_unref0 (_tmp215_);
	_vala_ccode_node_unref0 (_tmp213_);
	_vala_ccode_node_unref0 (_tmp211_);
	_vala_ccode_node_unref0 (_tmp209_);
	_vala_ccode_node_unref0 (_tmp207_);
	c_assign_rhs = _tmp221_;
	_tmp222_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp223_ = _tmp222_;
	_tmp224_ = vala_ccode_identifier_new ("callback");
	_tmp225_ = _tmp224_;
	_tmp226_ = c_assign_rhs;
	vala_ccode_function_add_assignment (_tmp223_, (ValaCCodeExpression*) _tmp225_, (ValaCCodeExpression*) _tmp226_);
	_vala_ccode_node_unref0 (_tmp225_);
	_tmp227_ = vala_ccode_identifier_new ("callback");
	_tmp228_ = _tmp227_;
	_tmp229_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp228_);
	_vala_ccode_node_unref0 (fc);
	fc = _tmp229_;
	_vala_ccode_node_unref0 (_tmp228_);
	_tmp230_ = fc;
	_tmp231_ = vala_ccode_identifier_new ("data1");
	_tmp232_ = _tmp231_;
	vala_ccode_function_call_add_argument (_tmp230_, (ValaCCodeExpression*) _tmp232_);
	_vala_ccode_node_unref0 (_tmp232_);
	i = 1;
	{
		ValaList* _p_list = NULL;
		ValaList* _tmp233_;
		ValaList* _tmp234_;
		gint _p_size = 0;
		ValaList* _tmp235_;
		gint _tmp236_;
		gint _tmp237_;
		gint _p_index = 0;
		_tmp233_ = params;
		_tmp234_ = _vala_iterable_ref0 (_tmp233_);
		_p_list = _tmp234_;
		_tmp235_ = _p_list;
		_tmp236_ = vala_collection_get_size ((ValaCollection*) _tmp235_);
		_tmp237_ = _tmp236_;
		_p_size = _tmp237_;
		_p_index = -1;
		while (TRUE) {
			gint _tmp238_;
			gint _tmp239_;
			gint _tmp240_;
			ValaParameter* p = NULL;
			ValaList* _tmp241_;
			gint _tmp242_;
			gpointer _tmp243_;
			gchar* get_value_function = NULL;
			gboolean is_array = FALSE;
			ValaParameter* _tmp244_;
			ValaDataType* _tmp245_;
			ValaDataType* _tmp246_;
			gboolean _tmp247_;
			ValaParameter* _tmp248_;
			ValaParameterDirection _tmp249_;
			ValaParameterDirection _tmp250_;
			ValaCCodeFunctionCall* inner_fc = NULL;
			const gchar* _tmp295_;
			ValaCCodeIdentifier* _tmp296_;
			ValaCCodeIdentifier* _tmp297_;
			ValaCCodeFunctionCall* _tmp298_;
			ValaCCodeFunctionCall* _tmp299_;
			ValaCCodeFunctionCall* _tmp300_;
			ValaCCodeIdentifier* _tmp301_;
			ValaCCodeIdentifier* _tmp302_;
			gint _tmp303_;
			gchar* _tmp304_;
			gchar* _tmp305_;
			ValaCCodeIdentifier* _tmp306_;
			ValaCCodeIdentifier* _tmp307_;
			ValaCCodeBinaryExpression* _tmp308_;
			ValaCCodeBinaryExpression* _tmp309_;
			ValaCCodeFunctionCall* _tmp310_;
			ValaCCodeFunctionCall* _tmp311_;
			gint _tmp312_;
			gboolean _tmp313_;
			_tmp238_ = _p_index;
			_p_index = _tmp238_ + 1;
			_tmp239_ = _p_index;
			_tmp240_ = _p_size;
			if (!(_tmp239_ < _tmp240_)) {
				break;
			}
			_tmp241_ = _p_list;
			_tmp242_ = _p_index;
			_tmp243_ = vala_list_get (_tmp241_, _tmp242_);
			p = (ValaParameter*) _tmp243_;
			_tmp244_ = p;
			_tmp245_ = vala_variable_get_variable_type ((ValaVariable*) _tmp244_);
			_tmp246_ = _tmp245_;
			_tmp247_ = vala_data_type_is_array (_tmp246_);
			is_array = _tmp247_;
			_tmp248_ = p;
			_tmp249_ = vala_parameter_get_direction (_tmp248_);
			_tmp250_ = _tmp249_;
			if (_tmp250_ != VALA_PARAMETER_DIRECTION_IN) {
				gchar* _tmp251_;
				_tmp251_ = g_strdup ("g_value_get_pointer");
				_g_free0 (get_value_function);
				get_value_function = _tmp251_;
			} else {
				gboolean _tmp252_;
				_tmp252_ = is_array;
				if (_tmp252_) {
					ValaParameter* _tmp253_;
					ValaDataType* _tmp254_;
					ValaDataType* _tmp255_;
					ValaDataType* _tmp256_;
					ValaDataType* _tmp257_;
					ValaTypeSymbol* _tmp258_;
					ValaTypeSymbol* _tmp259_;
					ValaDataType* _tmp260_;
					ValaTypeSymbol* _tmp261_;
					ValaTypeSymbol* _tmp262_;
					_tmp253_ = p;
					_tmp254_ = vala_variable_get_variable_type ((ValaVariable*) _tmp253_);
					_tmp255_ = _tmp254_;
					_tmp256_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp255_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
					_tmp257_ = _tmp256_;
					_tmp258_ = vala_data_type_get_data_type (_tmp257_);
					_tmp259_ = _tmp258_;
					_tmp260_ = ((ValaCCodeBaseModule*) self)->string_type;
					_tmp261_ = vala_data_type_get_data_type (_tmp260_);
					_tmp262_ = _tmp261_;
					if (_tmp259_ == _tmp262_) {
						gchar* _tmp263_;
						_tmp263_ = g_strdup ("g_value_get_boxed");
						_g_free0 (get_value_function);
						get_value_function = _tmp263_;
					} else {
						gchar* _tmp264_;
						_tmp264_ = g_strdup ("g_value_get_pointer");
						_g_free0 (get_value_function);
						get_value_function = _tmp264_;
					}
				} else {
					gboolean _tmp265_ = FALSE;
					ValaParameter* _tmp266_;
					ValaDataType* _tmp267_;
					ValaDataType* _tmp268_;
					_tmp266_ = p;
					_tmp267_ = vala_variable_get_variable_type ((ValaVariable*) _tmp266_);
					_tmp268_ = _tmp267_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp268_, VALA_TYPE_POINTER_TYPE)) {
						_tmp265_ = TRUE;
					} else {
						ValaParameter* _tmp269_;
						ValaDataType* _tmp270_;
						ValaDataType* _tmp271_;
						ValaTypeParameter* _tmp272_;
						ValaTypeParameter* _tmp273_;
						_tmp269_ = p;
						_tmp270_ = vala_variable_get_variable_type ((ValaVariable*) _tmp269_);
						_tmp271_ = _tmp270_;
						_tmp272_ = vala_data_type_get_type_parameter (_tmp271_);
						_tmp273_ = _tmp272_;
						_tmp265_ = _tmp273_ != NULL;
					}
					if (_tmp265_) {
						gchar* _tmp274_;
						_tmp274_ = g_strdup ("g_value_get_pointer");
						_g_free0 (get_value_function);
						get_value_function = _tmp274_;
					} else {
						ValaParameter* _tmp275_;
						ValaDataType* _tmp276_;
						ValaDataType* _tmp277_;
						_tmp275_ = p;
						_tmp276_ = vala_variable_get_variable_type ((ValaVariable*) _tmp275_);
						_tmp277_ = _tmp276_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp277_, VALA_TYPE_ERROR_TYPE)) {
							gchar* _tmp278_;
							_tmp278_ = g_strdup ("g_value_get_pointer");
							_g_free0 (get_value_function);
							get_value_function = _tmp278_;
						} else {
							gboolean _tmp279_ = FALSE;
							ValaParameter* _tmp280_;
							ValaDataType* _tmp281_;
							ValaDataType* _tmp282_;
							_tmp280_ = p;
							_tmp281_ = vala_variable_get_variable_type ((ValaVariable*) _tmp280_);
							_tmp282_ = _tmp281_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp282_, VALA_TYPE_VALUE_TYPE)) {
								ValaParameter* _tmp283_;
								ValaDataType* _tmp284_;
								ValaDataType* _tmp285_;
								gboolean _tmp286_;
								gboolean _tmp287_;
								_tmp283_ = p;
								_tmp284_ = vala_variable_get_variable_type ((ValaVariable*) _tmp283_);
								_tmp285_ = _tmp284_;
								_tmp286_ = vala_data_type_get_nullable (_tmp285_);
								_tmp287_ = _tmp286_;
								_tmp279_ = _tmp287_;
							} else {
								_tmp279_ = FALSE;
							}
							if (_tmp279_) {
								gchar* _tmp288_;
								_tmp288_ = g_strdup ("g_value_get_pointer");
								_g_free0 (get_value_function);
								get_value_function = _tmp288_;
							} else {
								ValaParameter* _tmp289_;
								ValaDataType* _tmp290_;
								ValaDataType* _tmp291_;
								ValaTypeSymbol* _tmp292_;
								ValaTypeSymbol* _tmp293_;
								gchar* _tmp294_;
								_tmp289_ = p;
								_tmp290_ = vala_variable_get_variable_type ((ValaVariable*) _tmp289_);
								_tmp291_ = _tmp290_;
								_tmp292_ = vala_data_type_get_data_type (_tmp291_);
								_tmp293_ = _tmp292_;
								_tmp294_ = vala_get_ccode_get_value_function ((ValaCodeNode*) _tmp293_);
								_g_free0 (get_value_function);
								get_value_function = _tmp294_;
							}
						}
					}
				}
			}
			_tmp295_ = get_value_function;
			_tmp296_ = vala_ccode_identifier_new (_tmp295_);
			_tmp297_ = _tmp296_;
			_tmp298_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp297_);
			_tmp299_ = _tmp298_;
			_vala_ccode_node_unref0 (_tmp297_);
			inner_fc = _tmp299_;
			_tmp300_ = inner_fc;
			_tmp301_ = vala_ccode_identifier_new ("param_values");
			_tmp302_ = _tmp301_;
			_tmp303_ = i;
			_tmp304_ = g_strdup_printf ("%i", _tmp303_);
			_tmp305_ = _tmp304_;
			_tmp306_ = vala_ccode_identifier_new (_tmp305_);
			_tmp307_ = _tmp306_;
			_tmp308_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp302_, (ValaCCodeExpression*) _tmp307_);
			_tmp309_ = _tmp308_;
			vala_ccode_function_call_add_argument (_tmp300_, (ValaCCodeExpression*) _tmp309_);
			_vala_ccode_node_unref0 (_tmp309_);
			_vala_ccode_node_unref0 (_tmp307_);
			_g_free0 (_tmp305_);
			_vala_ccode_node_unref0 (_tmp302_);
			_tmp310_ = fc;
			_tmp311_ = inner_fc;
			vala_ccode_function_call_add_argument (_tmp310_, (ValaCCodeExpression*) _tmp311_);
			_tmp312_ = i;
			i = _tmp312_ + 1;
			_tmp313_ = is_array;
			if (_tmp313_) {
				{
					gint j = 0;
					j = 0;
					{
						gboolean _tmp314_ = FALSE;
						_tmp314_ = TRUE;
						while (TRUE) {
							gint _tmp316_;
							ValaParameter* _tmp317_;
							ValaDataType* _tmp318_;
							ValaDataType* _tmp319_;
							gint _tmp320_;
							gint _tmp321_;
							ValaCCodeIdentifier* _tmp322_;
							ValaCCodeIdentifier* _tmp323_;
							ValaCCodeFunctionCall* _tmp324_;
							ValaCCodeFunctionCall* _tmp325_;
							ValaCCodeIdentifier* _tmp326_;
							ValaCCodeIdentifier* _tmp327_;
							gint _tmp328_;
							gchar* _tmp329_;
							gchar* _tmp330_;
							ValaCCodeIdentifier* _tmp331_;
							ValaCCodeIdentifier* _tmp332_;
							ValaCCodeBinaryExpression* _tmp333_;
							ValaCCodeBinaryExpression* _tmp334_;
							ValaCCodeFunctionCall* _tmp335_;
							ValaCCodeFunctionCall* _tmp336_;
							gint _tmp337_;
							if (!_tmp314_) {
								gint _tmp315_;
								_tmp315_ = j;
								j = _tmp315_ + 1;
							}
							_tmp314_ = FALSE;
							_tmp316_ = j;
							_tmp317_ = p;
							_tmp318_ = vala_variable_get_variable_type ((ValaVariable*) _tmp317_);
							_tmp319_ = _tmp318_;
							_tmp320_ = vala_array_type_get_rank (G_TYPE_CHECK_INSTANCE_CAST (_tmp319_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
							_tmp321_ = _tmp320_;
							if (!(_tmp316_ < _tmp321_)) {
								break;
							}
							_tmp322_ = vala_ccode_identifier_new ("g_value_get_int");
							_tmp323_ = _tmp322_;
							_tmp324_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp323_);
							_vala_ccode_node_unref0 (inner_fc);
							inner_fc = _tmp324_;
							_vala_ccode_node_unref0 (_tmp323_);
							_tmp325_ = inner_fc;
							_tmp326_ = vala_ccode_identifier_new ("param_values");
							_tmp327_ = _tmp326_;
							_tmp328_ = i;
							_tmp329_ = g_strdup_printf ("%i", _tmp328_);
							_tmp330_ = _tmp329_;
							_tmp331_ = vala_ccode_identifier_new (_tmp330_);
							_tmp332_ = _tmp331_;
							_tmp333_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp327_, (ValaCCodeExpression*) _tmp332_);
							_tmp334_ = _tmp333_;
							vala_ccode_function_call_add_argument (_tmp325_, (ValaCCodeExpression*) _tmp334_);
							_vala_ccode_node_unref0 (_tmp334_);
							_vala_ccode_node_unref0 (_tmp332_);
							_g_free0 (_tmp330_);
							_vala_ccode_node_unref0 (_tmp327_);
							_tmp335_ = fc;
							_tmp336_ = inner_fc;
							vala_ccode_function_call_add_argument (_tmp335_, (ValaCCodeExpression*) _tmp336_);
							_tmp337_ = i;
							i = _tmp337_ + 1;
						}
					}
				}
			}
			_vala_ccode_node_unref0 (inner_fc);
			_g_free0 (get_value_function);
			_vala_code_node_unref0 (p);
		}
		_vala_iterable_unref0 (_p_list);
	}
	_tmp338_ = fc;
	_tmp339_ = vala_ccode_identifier_new ("data2");
	_tmp340_ = _tmp339_;
	vala_ccode_function_call_add_argument (_tmp338_, (ValaCCodeExpression*) _tmp340_);
	_vala_ccode_node_unref0 (_tmp340_);
	_tmp342_ = return_type;
	_tmp343_ = vala_data_type_get_data_type (_tmp342_);
	_tmp344_ = _tmp343_;
	if (_tmp344_ != NULL) {
		_tmp341_ = TRUE;
	} else {
		ValaDataType* _tmp345_;
		gboolean _tmp346_;
		_tmp345_ = return_type;
		_tmp346_ = vala_data_type_is_array (_tmp345_);
		_tmp341_ = _tmp346_;
	}
	if (_tmp341_) {
		ValaCCodeFunction* _tmp347_;
		ValaCCodeFunction* _tmp348_;
		ValaCCodeIdentifier* _tmp349_;
		ValaCCodeIdentifier* _tmp350_;
		ValaCCodeFunctionCall* _tmp351_;
		ValaCCodeFunctionCall* set_fc = NULL;
		ValaDataType* _tmp352_;
		gboolean _tmp353_;
		ValaCCodeFunctionCall* _tmp413_;
		ValaCCodeIdentifier* _tmp414_;
		ValaCCodeIdentifier* _tmp415_;
		ValaCCodeFunctionCall* _tmp416_;
		ValaCCodeIdentifier* _tmp417_;
		ValaCCodeIdentifier* _tmp418_;
		ValaCCodeFunction* _tmp419_;
		ValaCCodeFunction* _tmp420_;
		ValaCCodeFunctionCall* _tmp421_;
		_tmp347_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp348_ = _tmp347_;
		_tmp349_ = vala_ccode_identifier_new ("v_return");
		_tmp350_ = _tmp349_;
		_tmp351_ = fc;
		vala_ccode_function_add_assignment (_tmp348_, (ValaCCodeExpression*) _tmp350_, (ValaCCodeExpression*) _tmp351_);
		_vala_ccode_node_unref0 (_tmp350_);
		_tmp352_ = return_type;
		_tmp353_ = vala_data_type_is_array (_tmp352_);
		if (_tmp353_) {
			ValaDataType* _tmp354_;
			ValaDataType* _tmp355_;
			ValaDataType* _tmp356_;
			ValaTypeSymbol* _tmp357_;
			ValaTypeSymbol* _tmp358_;
			ValaDataType* _tmp359_;
			ValaTypeSymbol* _tmp360_;
			ValaTypeSymbol* _tmp361_;
			_tmp354_ = return_type;
			_tmp355_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp354_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			_tmp356_ = _tmp355_;
			_tmp357_ = vala_data_type_get_data_type (_tmp356_);
			_tmp358_ = _tmp357_;
			_tmp359_ = ((ValaCCodeBaseModule*) self)->string_type;
			_tmp360_ = vala_data_type_get_data_type (_tmp359_);
			_tmp361_ = _tmp360_;
			if (_tmp358_ == _tmp361_) {
				ValaCCodeIdentifier* _tmp362_;
				ValaCCodeIdentifier* _tmp363_;
				ValaCCodeFunctionCall* _tmp364_;
				_tmp362_ = vala_ccode_identifier_new ("g_value_take_boxed");
				_tmp363_ = _tmp362_;
				_tmp364_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp363_);
				_vala_ccode_node_unref0 (set_fc);
				set_fc = _tmp364_;
				_vala_ccode_node_unref0 (_tmp363_);
			} else {
				ValaCCodeIdentifier* _tmp365_;
				ValaCCodeIdentifier* _tmp366_;
				ValaCCodeFunctionCall* _tmp367_;
				_tmp365_ = vala_ccode_identifier_new ("g_value_set_pointer");
				_tmp366_ = _tmp365_;
				_tmp367_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp366_);
				_vala_ccode_node_unref0 (set_fc);
				set_fc = _tmp367_;
				_vala_ccode_node_unref0 (_tmp366_);
			}
		} else {
			ValaDataType* _tmp368_;
			ValaTypeParameter* _tmp369_;
			ValaTypeParameter* _tmp370_;
			_tmp368_ = return_type;
			_tmp369_ = vala_data_type_get_type_parameter (_tmp368_);
			_tmp370_ = _tmp369_;
			if (_tmp370_ != NULL) {
				ValaCCodeIdentifier* _tmp371_;
				ValaCCodeIdentifier* _tmp372_;
				ValaCCodeFunctionCall* _tmp373_;
				_tmp371_ = vala_ccode_identifier_new ("g_value_set_pointer");
				_tmp372_ = _tmp371_;
				_tmp373_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp372_);
				_vala_ccode_node_unref0 (set_fc);
				set_fc = _tmp373_;
				_vala_ccode_node_unref0 (_tmp372_);
			} else {
				ValaDataType* _tmp374_;
				_tmp374_ = return_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp374_, VALA_TYPE_ERROR_TYPE)) {
					ValaCCodeIdentifier* _tmp375_;
					ValaCCodeIdentifier* _tmp376_;
					ValaCCodeFunctionCall* _tmp377_;
					_tmp375_ = vala_ccode_identifier_new ("g_value_set_pointer");
					_tmp376_ = _tmp375_;
					_tmp377_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp376_);
					_vala_ccode_node_unref0 (set_fc);
					set_fc = _tmp377_;
					_vala_ccode_node_unref0 (_tmp376_);
				} else {
					ValaDataType* _tmp378_;
					ValaTypeSymbol* _tmp379_;
					ValaTypeSymbol* _tmp380_;
					ValaDataType* _tmp381_;
					ValaTypeSymbol* _tmp382_;
					ValaTypeSymbol* _tmp383_;
					_tmp378_ = return_type;
					_tmp379_ = vala_data_type_get_data_type (_tmp378_);
					_tmp380_ = _tmp379_;
					_tmp381_ = ((ValaCCodeBaseModule*) self)->string_type;
					_tmp382_ = vala_data_type_get_data_type (_tmp381_);
					_tmp383_ = _tmp382_;
					if (_tmp380_ == _tmp383_) {
						ValaCCodeIdentifier* _tmp384_;
						ValaCCodeIdentifier* _tmp385_;
						ValaCCodeFunctionCall* _tmp386_;
						_tmp384_ = vala_ccode_identifier_new ("g_value_take_string");
						_tmp385_ = _tmp384_;
						_tmp386_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp385_);
						_vala_ccode_node_unref0 (set_fc);
						set_fc = _tmp386_;
						_vala_ccode_node_unref0 (_tmp385_);
					} else {
						gboolean _tmp387_ = FALSE;
						ValaDataType* _tmp388_;
						ValaTypeSymbol* _tmp389_;
						ValaTypeSymbol* _tmp390_;
						_tmp388_ = return_type;
						_tmp389_ = vala_data_type_get_data_type (_tmp388_);
						_tmp390_ = _tmp389_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp390_, VALA_TYPE_CLASS)) {
							_tmp387_ = TRUE;
						} else {
							ValaDataType* _tmp391_;
							ValaTypeSymbol* _tmp392_;
							ValaTypeSymbol* _tmp393_;
							_tmp391_ = return_type;
							_tmp392_ = vala_data_type_get_data_type (_tmp391_);
							_tmp393_ = _tmp392_;
							_tmp387_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp393_, VALA_TYPE_INTERFACE);
						}
						if (_tmp387_) {
							ValaCCodeIdentifier* _tmp394_;
							ValaCCodeIdentifier* _tmp395_;
							ValaCCodeFunctionCall* _tmp396_;
							_tmp394_ = vala_ccode_identifier_new ("g_value_take_object");
							_tmp395_ = _tmp394_;
							_tmp396_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp395_);
							_vala_ccode_node_unref0 (set_fc);
							set_fc = _tmp396_;
							_vala_ccode_node_unref0 (_tmp395_);
						} else {
							gboolean _tmp397_ = FALSE;
							ValaDataType* _tmp398_;
							_tmp398_ = return_type;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp398_, VALA_TYPE_VALUE_TYPE)) {
								ValaDataType* _tmp399_;
								gboolean _tmp400_;
								gboolean _tmp401_;
								_tmp399_ = return_type;
								_tmp400_ = vala_data_type_get_nullable (_tmp399_);
								_tmp401_ = _tmp400_;
								_tmp397_ = _tmp401_;
							} else {
								_tmp397_ = FALSE;
							}
							if (_tmp397_) {
								ValaCCodeIdentifier* _tmp402_;
								ValaCCodeIdentifier* _tmp403_;
								ValaCCodeFunctionCall* _tmp404_;
								_tmp402_ = vala_ccode_identifier_new ("g_value_set_pointer");
								_tmp403_ = _tmp402_;
								_tmp404_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp403_);
								_vala_ccode_node_unref0 (set_fc);
								set_fc = _tmp404_;
								_vala_ccode_node_unref0 (_tmp403_);
							} else {
								ValaDataType* _tmp405_;
								ValaTypeSymbol* _tmp406_;
								ValaTypeSymbol* _tmp407_;
								gchar* _tmp408_;
								gchar* _tmp409_;
								ValaCCodeIdentifier* _tmp410_;
								ValaCCodeIdentifier* _tmp411_;
								ValaCCodeFunctionCall* _tmp412_;
								_tmp405_ = return_type;
								_tmp406_ = vala_data_type_get_data_type (_tmp405_);
								_tmp407_ = _tmp406_;
								_tmp408_ = vala_get_ccode_set_value_function ((ValaCodeNode*) _tmp407_);
								_tmp409_ = _tmp408_;
								_tmp410_ = vala_ccode_identifier_new (_tmp409_);
								_tmp411_ = _tmp410_;
								_tmp412_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp411_);
								_vala_ccode_node_unref0 (set_fc);
								set_fc = _tmp412_;
								_vala_ccode_node_unref0 (_tmp411_);
								_g_free0 (_tmp409_);
							}
						}
					}
				}
			}
		}
		_tmp413_ = set_fc;
		_tmp414_ = vala_ccode_identifier_new ("return_value");
		_tmp415_ = _tmp414_;
		vala_ccode_function_call_add_argument (_tmp413_, (ValaCCodeExpression*) _tmp415_);
		_vala_ccode_node_unref0 (_tmp415_);
		_tmp416_ = set_fc;
		_tmp417_ = vala_ccode_identifier_new ("v_return");
		_tmp418_ = _tmp417_;
		vala_ccode_function_call_add_argument (_tmp416_, (ValaCCodeExpression*) _tmp418_);
		_vala_ccode_node_unref0 (_tmp418_);
		_tmp419_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp420_ = _tmp419_;
		_tmp421_ = set_fc;
		vala_ccode_function_add_expression (_tmp420_, (ValaCCodeExpression*) _tmp421_);
		_vala_ccode_node_unref0 (set_fc);
	} else {
		ValaCCodeFunction* _tmp422_;
		ValaCCodeFunction* _tmp423_;
		ValaCCodeFunctionCall* _tmp424_;
		_tmp422_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp423_ = _tmp422_;
		_tmp424_ = fc;
		vala_ccode_function_add_expression (_tmp423_, (ValaCCodeExpression*) _tmp424_);
	}
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp425_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp426_ = signal_marshaller;
	vala_ccode_file_add_function_declaration (_tmp425_, _tmp426_);
	_tmp427_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp428_ = signal_marshaller;
	vala_ccode_file_add_function (_tmp427_, _tmp428_);
	_tmp429_ = ((ValaCCodeBaseModule*) self)->user_marshal_set;
	_tmp430_ = signature;
	vala_collection_add ((ValaCollection*) _tmp429_, _tmp430_);
	_vala_ccode_node_unref0 (c_assign_rhs);
	_vala_ccode_node_unref0 (cond);
	_vala_ccode_node_unref0 (param);
	_vala_ccode_node_unref0 (data);
	_vala_ccode_node_unref0 (fc);
	_vala_ccode_node_unref0 (callback_decl);
	_vala_ccode_node_unref0 (signal_marshaller);
	_g_free0 (signature);
}


static void _vala_array_add1 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static void _vala_array_add2 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static void _vala_array_add3 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static void _vala_array_add4 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static void _vala_array_add5 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static void _vala_array_add6 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static void _vala_array_add7 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static void _vala_array_add8 (gchar** * array, int* length, int* size, gchar* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (gchar*, *array, (*size) + 1);
	}
	(*array)[(*length)++] = value;
	(*array)[*length] = NULL;
}


static gchar* _vala_g_strjoinv (const gchar* separator, gchar** str_array, int str_array_length1) {
	gchar* result = NULL;
	const gchar* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gchar** _tmp2_;
	gint _tmp2__length1;
	_tmp0_ = separator;
	if (_tmp0_ == NULL) {
		separator = "";
	}
	_tmp2_ = str_array;
	_tmp2__length1 = str_array_length1;
	if (_tmp2_ != NULL) {
		gboolean _tmp3_ = FALSE;
		gchar** _tmp4_;
		gint _tmp4__length1;
		_tmp4_ = str_array;
		_tmp4__length1 = str_array_length1;
		if (_tmp4__length1 > 0) {
			_tmp3_ = TRUE;
		} else {
			gboolean _tmp5_ = FALSE;
			gchar** _tmp6_;
			gint _tmp6__length1;
			_tmp6_ = str_array;
			_tmp6__length1 = str_array_length1;
			if (_tmp6__length1 == -1) {
				gchar** _tmp7_;
				gint _tmp7__length1;
				const gchar* _tmp8_;
				_tmp7_ = str_array;
				_tmp7__length1 = str_array_length1;
				_tmp8_ = _tmp7_[0];
				_tmp5_ = _tmp8_ != NULL;
			} else {
				_tmp5_ = FALSE;
			}
			_tmp3_ = _tmp5_;
		}
		_tmp1_ = _tmp3_;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		gint i = 0;
		gsize len = 0UL;
		gint _tmp31_;
		gint _tmp33_;
		gint _tmp34_;
		gsize _tmp35_;
		const gchar* _tmp36_;
		gint _tmp37_;
		gint _tmp38_;
		gint _tmp39_;
		const gchar* res = NULL;
		gsize _tmp40_;
		void* _tmp41_;
		void* ptr = NULL;
		const gchar* _tmp42_;
		gchar** _tmp43_;
		gint _tmp43__length1;
		const gchar* _tmp44_;
		void* _tmp45_;
		const gchar* _tmp62_;
		len = (gsize) 1;
		{
			gboolean _tmp9_ = FALSE;
			i = 0;
			_tmp9_ = TRUE;
			while (TRUE) {
				gboolean _tmp11_ = FALSE;
				gboolean _tmp12_ = FALSE;
				gchar** _tmp13_;
				gint _tmp13__length1;
				gint _tmp21_ = 0;
				gchar** _tmp22_;
				gint _tmp22__length1;
				gint _tmp23_;
				const gchar* _tmp24_;
				gsize _tmp30_;
				if (!_tmp9_) {
					gint _tmp10_;
					_tmp10_ = i;
					i = _tmp10_ + 1;
				}
				_tmp9_ = FALSE;
				_tmp13_ = str_array;
				_tmp13__length1 = str_array_length1;
				if (_tmp13__length1 != -1) {
					gint _tmp14_;
					gchar** _tmp15_;
					gint _tmp15__length1;
					_tmp14_ = i;
					_tmp15_ = str_array;
					_tmp15__length1 = str_array_length1;
					_tmp12_ = _tmp14_ < _tmp15__length1;
				} else {
					_tmp12_ = FALSE;
				}
				if (_tmp12_) {
					_tmp11_ = TRUE;
				} else {
					gboolean _tmp16_ = FALSE;
					gchar** _tmp17_;
					gint _tmp17__length1;
					_tmp17_ = str_array;
					_tmp17__length1 = str_array_length1;
					if (_tmp17__length1 == -1) {
						gchar** _tmp18_;
						gint _tmp18__length1;
						gint _tmp19_;
						const gchar* _tmp20_;
						_tmp18_ = str_array;
						_tmp18__length1 = str_array_length1;
						_tmp19_ = i;
						_tmp20_ = _tmp18_[_tmp19_];
						_tmp16_ = _tmp20_ != NULL;
					} else {
						_tmp16_ = FALSE;
					}
					_tmp11_ = _tmp16_;
				}
				if (!_tmp11_) {
					break;
				}
				_tmp22_ = str_array;
				_tmp22__length1 = str_array_length1;
				_tmp23_ = i;
				_tmp24_ = _tmp22_[_tmp23_];
				if (_tmp24_ != NULL) {
					gchar** _tmp25_;
					gint _tmp25__length1;
					gint _tmp26_;
					const gchar* _tmp27_;
					gint _tmp28_;
					gint _tmp29_;
					_tmp25_ = str_array;
					_tmp25__length1 = str_array_length1;
					_tmp26_ = i;
					_tmp27_ = _tmp25_[_tmp26_];
					_tmp28_ = strlen ((const gchar*) _tmp27_);
					_tmp29_ = _tmp28_;
					_tmp21_ = _tmp29_;
				} else {
					_tmp21_ = 0;
				}
				_tmp30_ = len;
				len = _tmp30_ + _tmp21_;
			}
		}
		_tmp31_ = i;
		if (_tmp31_ == 0) {
			gchar* _tmp32_;
			_tmp32_ = g_strdup ("");
			result = _tmp32_;
			return result;
		}
		_tmp33_ = i;
		str_array_length1 = _tmp33_;
		_tmp34_ = str_array_length1;
		_tmp35_ = len;
		_tmp36_ = separator;
		_tmp37_ = strlen ((const gchar*) _tmp36_);
		_tmp38_ = _tmp37_;
		_tmp39_ = i;
		len = _tmp35_ + (_tmp38_ * (_tmp39_ - 1));
		_tmp40_ = len;
		_tmp41_ = g_malloc (_tmp40_);
		res = _tmp41_;
		_tmp42_ = res;
		_tmp43_ = str_array;
		_tmp43__length1 = str_array_length1;
		_tmp44_ = _tmp43_[0];
		_tmp45_ = g_stpcpy ((void*) _tmp42_, (const gchar*) _tmp44_);
		ptr = _tmp45_;
		{
			gboolean _tmp46_ = FALSE;
			i = 1;
			_tmp46_ = TRUE;
			while (TRUE) {
				gint _tmp48_;
				gchar** _tmp49_;
				gint _tmp49__length1;
				void* _tmp50_;
				const gchar* _tmp51_;
				void* _tmp52_;
				const gchar* _tmp53_ = NULL;
				gchar** _tmp54_;
				gint _tmp54__length1;
				gint _tmp55_;
				const gchar* _tmp56_;
				void* _tmp60_;
				void* _tmp61_;
				if (!_tmp46_) {
					gint _tmp47_;
					_tmp47_ = i;
					i = _tmp47_ + 1;
				}
				_tmp46_ = FALSE;
				_tmp48_ = i;
				_tmp49_ = str_array;
				_tmp49__length1 = str_array_length1;
				if (!(_tmp48_ < _tmp49__length1)) {
					break;
				}
				_tmp50_ = ptr;
				_tmp51_ = separator;
				_tmp52_ = g_stpcpy (_tmp50_, (const gchar*) _tmp51_);
				ptr = _tmp52_;
				_tmp54_ = str_array;
				_tmp54__length1 = str_array_length1;
				_tmp55_ = i;
				_tmp56_ = _tmp54_[_tmp55_];
				if (_tmp56_ != NULL) {
					gchar** _tmp57_;
					gint _tmp57__length1;
					gint _tmp58_;
					const gchar* _tmp59_;
					_tmp57_ = str_array;
					_tmp57__length1 = str_array_length1;
					_tmp58_ = i;
					_tmp59_ = _tmp57_[_tmp58_];
					_tmp53_ = (const gchar*) _tmp59_;
				} else {
					_tmp53_ = "";
				}
				_tmp60_ = ptr;
				_tmp61_ = g_stpcpy (_tmp60_, _tmp53_);
				ptr = _tmp61_;
			}
		}
		_tmp62_ = res;
		res = NULL;
		result = (gchar*) _tmp62_;
		return result;
	} else {
		gchar* _tmp63_;
		_tmp63_ = g_strdup ("");
		result = _tmp63_;
		return result;
	}
}


static ValaCCodeExpression* vala_gsignal_module_real_get_signal_creation (ValaCCodeBaseModule* base, ValaSignal* sig, ValaTypeSymbol* type) {
	ValaGSignalModule * self;
	ValaCCodeExpression* result = NULL;
	ValaCCodeFunctionCall* csignew = NULL;
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeFunctionCall* _tmp3_;
	ValaCCodeFunctionCall* _tmp4_;
	ValaSignal* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeConstant* _tmp10_;
	ValaCCodeConstant* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaTypeSymbol* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeIdentifier* _tmp17_;
	gchar** flags = NULL;
	gchar** _tmp18_;
	gint flags_length1;
	gint _flags_size_;
	gchar* run_type = NULL;
	ValaSignal* _tmp19_;
	gchar* _tmp20_;
	const gchar* _tmp21_;
	ValaSignal* _tmp29_;
	gboolean _tmp30_;
	ValaSignal* _tmp33_;
	gboolean _tmp34_;
	ValaSignal* _tmp37_;
	gboolean _tmp38_;
	ValaSignal* _tmp41_;
	gboolean _tmp42_;
	ValaSignal* _tmp45_;
	ValaVersionAttribute* _tmp46_;
	ValaVersionAttribute* _tmp47_;
	gboolean _tmp48_;
	gboolean _tmp49_;
	ValaCCodeFunctionCall* _tmp52_;
	gchar** _tmp53_;
	gint _tmp53__length1;
	gchar* _tmp54_;
	gchar* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeConstant* _tmp57_;
	ValaSignal* _tmp58_;
	ValaMethod* _tmp59_;
	ValaMethod* _tmp60_;
	ValaCCodeFunctionCall* _tmp93_;
	ValaCCodeConstant* _tmp94_;
	ValaCCodeConstant* _tmp95_;
	ValaCCodeFunctionCall* _tmp96_;
	ValaCCodeConstant* _tmp97_;
	ValaCCodeConstant* _tmp98_;
	gchar* marshaller = NULL;
	ValaSignal* _tmp99_;
	ValaList* _tmp100_;
	ValaList* _tmp101_;
	ValaSignal* _tmp102_;
	ValaDataType* _tmp103_;
	ValaDataType* _tmp104_;
	gchar* _tmp105_;
	gchar* _tmp106_;
	ValaCCodeIdentifier* marshal_arg = NULL;
	const gchar* _tmp107_;
	ValaCCodeIdentifier* _tmp108_;
	ValaCCodeFunctionCall* _tmp109_;
	ValaCCodeIdentifier* _tmp110_;
	ValaList* params = NULL;
	ValaSignal* _tmp111_;
	ValaList* _tmp112_;
	gboolean _tmp113_ = FALSE;
	ValaSignal* _tmp114_;
	ValaDataType* _tmp115_;
	ValaDataType* _tmp116_;
	gint params_len = 0;
	ValaCCodeFunctionCall* _tmp183_;
	gint _tmp184_;
	gchar* _tmp185_;
	gchar* _tmp186_;
	ValaCCodeConstant* _tmp187_;
	ValaCCodeConstant* _tmp188_;
	ValaCCodeIdentifier* _tmp275_;
	const gchar* _tmp276_;
	ValaSignal* _tmp277_;
	ValaCCodeExpression* _tmp278_;
	ValaCCodeExpression* _tmp279_;
	ValaCCodeFunctionCall* _tmp280_;
	ValaCCodeAssignment* _tmp281_;
	ValaCCodeExpression* _tmp282_;
	self = (ValaGSignalModule*) base;
	g_return_val_if_fail (sig != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_ccode_identifier_new ("g_signal_new");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
	_tmp3_ = _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	csignew = _tmp3_;
	_tmp4_ = csignew;
	_tmp5_ = sig;
	_tmp6_ = vala_get_ccode_name ((ValaCodeNode*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = g_strdup_printf ("\"%s\"", _tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_constant_new (_tmp9_);
	_tmp11_ = _tmp10_;
	vala_ccode_function_call_add_argument (_tmp4_, (ValaCCodeExpression*) _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_g_free0 (_tmp9_);
	_g_free0 (_tmp7_);
	_tmp12_ = csignew;
	_tmp13_ = type;
	_tmp14_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_identifier_new (_tmp15_);
	_tmp17_ = _tmp16_;
	vala_ccode_function_call_add_argument (_tmp12_, (ValaCCodeExpression*) _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_g_free0 (_tmp15_);
	_tmp18_ = g_new0 (gchar*, 0 + 1);
	flags = _tmp18_;
	flags_length1 = 0;
	_flags_size_ = flags_length1;
	_tmp19_ = sig;
	_tmp20_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp19_, "Signal", "run", NULL);
	run_type = _tmp20_;
	_tmp21_ = run_type;
	if (g_strcmp0 (_tmp21_, "first") == 0) {
		gchar** _tmp22_;
		gint _tmp22__length1;
		gchar* _tmp23_;
		_tmp22_ = flags;
		_tmp22__length1 = flags_length1;
		_tmp23_ = g_strdup ("G_SIGNAL_RUN_FIRST");
		_vala_array_add1 (&flags, &flags_length1, &_flags_size_, _tmp23_);
	} else {
		const gchar* _tmp24_;
		_tmp24_ = run_type;
		if (g_strcmp0 (_tmp24_, "cleanup") == 0) {
			gchar** _tmp25_;
			gint _tmp25__length1;
			gchar* _tmp26_;
			_tmp25_ = flags;
			_tmp25__length1 = flags_length1;
			_tmp26_ = g_strdup ("G_SIGNAL_RUN_CLEANUP");
			_vala_array_add2 (&flags, &flags_length1, &_flags_size_, _tmp26_);
		} else {
			gchar** _tmp27_;
			gint _tmp27__length1;
			gchar* _tmp28_;
			_tmp27_ = flags;
			_tmp27__length1 = flags_length1;
			_tmp28_ = g_strdup ("G_SIGNAL_RUN_LAST");
			_vala_array_add3 (&flags, &flags_length1, &_flags_size_, _tmp28_);
		}
	}
	_tmp29_ = sig;
	_tmp30_ = vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp29_, "Signal", "detailed", FALSE);
	if (_tmp30_) {
		gchar** _tmp31_;
		gint _tmp31__length1;
		gchar* _tmp32_;
		_tmp31_ = flags;
		_tmp31__length1 = flags_length1;
		_tmp32_ = g_strdup ("G_SIGNAL_DETAILED");
		_vala_array_add4 (&flags, &flags_length1, &_flags_size_, _tmp32_);
	}
	_tmp33_ = sig;
	_tmp34_ = vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp33_, "Signal", "no_recurse", FALSE);
	if (_tmp34_) {
		gchar** _tmp35_;
		gint _tmp35__length1;
		gchar* _tmp36_;
		_tmp35_ = flags;
		_tmp35__length1 = flags_length1;
		_tmp36_ = g_strdup ("G_SIGNAL_NO_RECURSE");
		_vala_array_add5 (&flags, &flags_length1, &_flags_size_, _tmp36_);
	}
	_tmp37_ = sig;
	_tmp38_ = vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp37_, "Signal", "action", FALSE);
	if (_tmp38_) {
		gchar** _tmp39_;
		gint _tmp39__length1;
		gchar* _tmp40_;
		_tmp39_ = flags;
		_tmp39__length1 = flags_length1;
		_tmp40_ = g_strdup ("G_SIGNAL_ACTION");
		_vala_array_add6 (&flags, &flags_length1, &_flags_size_, _tmp40_);
	}
	_tmp41_ = sig;
	_tmp42_ = vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp41_, "Signal", "no_hooks", FALSE);
	if (_tmp42_) {
		gchar** _tmp43_;
		gint _tmp43__length1;
		gchar* _tmp44_;
		_tmp43_ = flags;
		_tmp43__length1 = flags_length1;
		_tmp44_ = g_strdup ("G_SIGNAL_NO_HOOKS");
		_vala_array_add7 (&flags, &flags_length1, &_flags_size_, _tmp44_);
	}
	_tmp45_ = sig;
	_tmp46_ = vala_symbol_get_version ((ValaSymbol*) _tmp45_);
	_tmp47_ = _tmp46_;
	_tmp48_ = vala_version_attribute_get_deprecated (_tmp47_);
	_tmp49_ = _tmp48_;
	if (_tmp49_) {
		gchar** _tmp50_;
		gint _tmp50__length1;
		gchar* _tmp51_;
		_tmp50_ = flags;
		_tmp50__length1 = flags_length1;
		_tmp51_ = g_strdup ("G_SIGNAL_DEPRECATED");
		_vala_array_add8 (&flags, &flags_length1, &_flags_size_, _tmp51_);
	}
	_tmp52_ = csignew;
	_tmp53_ = flags;
	_tmp53__length1 = flags_length1;
	_tmp54_ = _vala_g_strjoinv (" | ", _tmp53_, _tmp53__length1);
	_tmp55_ = _tmp54_;
	_tmp56_ = vala_ccode_constant_new (_tmp55_);
	_tmp57_ = _tmp56_;
	vala_ccode_function_call_add_argument (_tmp52_, (ValaCCodeExpression*) _tmp57_);
	_vala_ccode_node_unref0 (_tmp57_);
	_g_free0 (_tmp55_);
	_tmp58_ = sig;
	_tmp59_ = vala_signal_get_default_handler (_tmp58_);
	_tmp60_ = _tmp59_;
	if (_tmp60_ == NULL) {
		ValaCCodeFunctionCall* _tmp61_;
		ValaCCodeConstant* _tmp62_;
		ValaCCodeConstant* _tmp63_;
		_tmp61_ = csignew;
		_tmp62_ = vala_ccode_constant_new ("0");
		_tmp63_ = _tmp62_;
		vala_ccode_function_call_add_argument (_tmp61_, (ValaCCodeExpression*) _tmp63_);
		_vala_ccode_node_unref0 (_tmp63_);
	} else {
		ValaCCodeFunctionCall* struct_offset = NULL;
		ValaCCodeIdentifier* _tmp64_;
		ValaCCodeIdentifier* _tmp65_;
		ValaCCodeFunctionCall* _tmp66_;
		ValaCCodeFunctionCall* _tmp67_;
		ValaTypeSymbol* _tmp68_;
		ValaCCodeFunctionCall* _tmp83_;
		ValaSignal* _tmp84_;
		ValaMethod* _tmp85_;
		ValaMethod* _tmp86_;
		gchar* _tmp87_;
		gchar* _tmp88_;
		ValaCCodeIdentifier* _tmp89_;
		ValaCCodeIdentifier* _tmp90_;
		ValaCCodeFunctionCall* _tmp91_;
		ValaCCodeFunctionCall* _tmp92_;
		_tmp64_ = vala_ccode_identifier_new ("G_STRUCT_OFFSET");
		_tmp65_ = _tmp64_;
		_tmp66_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp65_);
		_tmp67_ = _tmp66_;
		_vala_ccode_node_unref0 (_tmp65_);
		struct_offset = _tmp67_;
		_tmp68_ = type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, VALA_TYPE_CLASS)) {
			ValaCCodeFunctionCall* _tmp69_;
			ValaTypeSymbol* _tmp70_;
			gchar* _tmp71_;
			gchar* _tmp72_;
			gchar* _tmp73_;
			gchar* _tmp74_;
			ValaCCodeIdentifier* _tmp75_;
			ValaCCodeIdentifier* _tmp76_;
			_tmp69_ = struct_offset;
			_tmp70_ = type;
			_tmp71_ = vala_get_ccode_name ((ValaCodeNode*) _tmp70_);
			_tmp72_ = _tmp71_;
			_tmp73_ = g_strdup_printf ("%sClass", _tmp72_);
			_tmp74_ = _tmp73_;
			_tmp75_ = vala_ccode_identifier_new (_tmp74_);
			_tmp76_ = _tmp75_;
			vala_ccode_function_call_add_argument (_tmp69_, (ValaCCodeExpression*) _tmp76_);
			_vala_ccode_node_unref0 (_tmp76_);
			_g_free0 (_tmp74_);
			_g_free0 (_tmp72_);
		} else {
			ValaCCodeFunctionCall* _tmp77_;
			ValaTypeSymbol* _tmp78_;
			gchar* _tmp79_;
			gchar* _tmp80_;
			ValaCCodeIdentifier* _tmp81_;
			ValaCCodeIdentifier* _tmp82_;
			_tmp77_ = struct_offset;
			_tmp78_ = type;
			_tmp79_ = vala_get_ccode_type_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp78_, VALA_TYPE_INTERFACE, ValaInterface));
			_tmp80_ = _tmp79_;
			_tmp81_ = vala_ccode_identifier_new (_tmp80_);
			_tmp82_ = _tmp81_;
			vala_ccode_function_call_add_argument (_tmp77_, (ValaCCodeExpression*) _tmp82_);
			_vala_ccode_node_unref0 (_tmp82_);
			_g_free0 (_tmp80_);
		}
		_tmp83_ = struct_offset;
		_tmp84_ = sig;
		_tmp85_ = vala_signal_get_default_handler (_tmp84_);
		_tmp86_ = _tmp85_;
		_tmp87_ = vala_get_ccode_vfunc_name (_tmp86_);
		_tmp88_ = _tmp87_;
		_tmp89_ = vala_ccode_identifier_new (_tmp88_);
		_tmp90_ = _tmp89_;
		vala_ccode_function_call_add_argument (_tmp83_, (ValaCCodeExpression*) _tmp90_);
		_vala_ccode_node_unref0 (_tmp90_);
		_g_free0 (_tmp88_);
		_tmp91_ = csignew;
		_tmp92_ = struct_offset;
		vala_ccode_function_call_add_argument (_tmp91_, (ValaCCodeExpression*) _tmp92_);
		_vala_ccode_node_unref0 (struct_offset);
	}
	_tmp93_ = csignew;
	_tmp94_ = vala_ccode_constant_new ("NULL");
	_tmp95_ = _tmp94_;
	vala_ccode_function_call_add_argument (_tmp93_, (ValaCCodeExpression*) _tmp95_);
	_vala_ccode_node_unref0 (_tmp95_);
	_tmp96_ = csignew;
	_tmp97_ = vala_ccode_constant_new ("NULL");
	_tmp98_ = _tmp97_;
	vala_ccode_function_call_add_argument (_tmp96_, (ValaCCodeExpression*) _tmp98_);
	_vala_ccode_node_unref0 (_tmp98_);
	_tmp99_ = sig;
	_tmp100_ = vala_callable_get_parameters ((ValaCallable*) _tmp99_);
	_tmp101_ = _tmp100_;
	_tmp102_ = sig;
	_tmp103_ = vala_callable_get_return_type ((ValaCallable*) _tmp102_);
	_tmp104_ = _tmp103_;
	_tmp105_ = vala_gsignal_module_get_marshaller_function (self, _tmp101_, _tmp104_, NULL);
	_tmp106_ = _tmp105_;
	_vala_iterable_unref0 (_tmp101_);
	marshaller = _tmp106_;
	_tmp107_ = marshaller;
	_tmp108_ = vala_ccode_identifier_new (_tmp107_);
	marshal_arg = _tmp108_;
	_tmp109_ = csignew;
	_tmp110_ = marshal_arg;
	vala_ccode_function_call_add_argument (_tmp109_, (ValaCCodeExpression*) _tmp110_);
	_tmp111_ = sig;
	_tmp112_ = vala_callable_get_parameters ((ValaCallable*) _tmp111_);
	params = _tmp112_;
	_tmp114_ = sig;
	_tmp115_ = vala_callable_get_return_type ((ValaCallable*) _tmp114_);
	_tmp116_ = _tmp115_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp116_, VALA_TYPE_POINTER_TYPE)) {
		_tmp113_ = TRUE;
	} else {
		ValaSignal* _tmp117_;
		ValaDataType* _tmp118_;
		ValaDataType* _tmp119_;
		ValaTypeParameter* _tmp120_;
		ValaTypeParameter* _tmp121_;
		_tmp117_ = sig;
		_tmp118_ = vala_callable_get_return_type ((ValaCallable*) _tmp117_);
		_tmp119_ = _tmp118_;
		_tmp120_ = vala_data_type_get_type_parameter (_tmp119_);
		_tmp121_ = _tmp120_;
		_tmp113_ = _tmp121_ != NULL;
	}
	if (_tmp113_) {
		ValaCCodeFunctionCall* _tmp122_;
		ValaCCodeConstant* _tmp123_;
		ValaCCodeConstant* _tmp124_;
		_tmp122_ = csignew;
		_tmp123_ = vala_ccode_constant_new ("G_TYPE_POINTER");
		_tmp124_ = _tmp123_;
		vala_ccode_function_call_add_argument (_tmp122_, (ValaCCodeExpression*) _tmp124_);
		_vala_ccode_node_unref0 (_tmp124_);
	} else {
		ValaSignal* _tmp125_;
		ValaDataType* _tmp126_;
		ValaDataType* _tmp127_;
		_tmp125_ = sig;
		_tmp126_ = vala_callable_get_return_type ((ValaCallable*) _tmp125_);
		_tmp127_ = _tmp126_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp127_, VALA_TYPE_ERROR_TYPE)) {
			ValaCCodeFunctionCall* _tmp128_;
			ValaCCodeConstant* _tmp129_;
			ValaCCodeConstant* _tmp130_;
			_tmp128_ = csignew;
			_tmp129_ = vala_ccode_constant_new ("G_TYPE_POINTER");
			_tmp130_ = _tmp129_;
			vala_ccode_function_call_add_argument (_tmp128_, (ValaCCodeExpression*) _tmp130_);
			_vala_ccode_node_unref0 (_tmp130_);
		} else {
			gboolean _tmp131_ = FALSE;
			ValaSignal* _tmp132_;
			ValaDataType* _tmp133_;
			ValaDataType* _tmp134_;
			_tmp132_ = sig;
			_tmp133_ = vala_callable_get_return_type ((ValaCallable*) _tmp132_);
			_tmp134_ = _tmp133_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp134_, VALA_TYPE_VALUE_TYPE)) {
				ValaSignal* _tmp135_;
				ValaDataType* _tmp136_;
				ValaDataType* _tmp137_;
				gboolean _tmp138_;
				gboolean _tmp139_;
				_tmp135_ = sig;
				_tmp136_ = vala_callable_get_return_type ((ValaCallable*) _tmp135_);
				_tmp137_ = _tmp136_;
				_tmp138_ = vala_data_type_get_nullable (_tmp137_);
				_tmp139_ = _tmp138_;
				_tmp131_ = _tmp139_;
			} else {
				_tmp131_ = FALSE;
			}
			if (_tmp131_) {
				ValaCCodeFunctionCall* _tmp140_;
				ValaCCodeConstant* _tmp141_;
				ValaCCodeConstant* _tmp142_;
				_tmp140_ = csignew;
				_tmp141_ = vala_ccode_constant_new ("G_TYPE_POINTER");
				_tmp142_ = _tmp141_;
				vala_ccode_function_call_add_argument (_tmp140_, (ValaCCodeExpression*) _tmp142_);
				_vala_ccode_node_unref0 (_tmp142_);
			} else {
				ValaSignal* _tmp143_;
				ValaDataType* _tmp144_;
				ValaDataType* _tmp145_;
				ValaTypeSymbol* _tmp146_;
				ValaTypeSymbol* _tmp147_;
				_tmp143_ = sig;
				_tmp144_ = vala_callable_get_return_type ((ValaCallable*) _tmp143_);
				_tmp145_ = _tmp144_;
				_tmp146_ = vala_data_type_get_data_type (_tmp145_);
				_tmp147_ = _tmp146_;
				if (_tmp147_ == NULL) {
					ValaCCodeFunctionCall* _tmp148_;
					ValaCCodeConstant* _tmp149_;
					ValaCCodeConstant* _tmp150_;
					_tmp148_ = csignew;
					_tmp149_ = vala_ccode_constant_new ("G_TYPE_NONE");
					_tmp150_ = _tmp149_;
					vala_ccode_function_call_add_argument (_tmp148_, (ValaCCodeExpression*) _tmp150_);
					_vala_ccode_node_unref0 (_tmp150_);
				} else {
					ValaCCodeFunctionCall* _tmp151_;
					ValaSignal* _tmp152_;
					ValaDataType* _tmp153_;
					ValaDataType* _tmp154_;
					ValaTypeSymbol* _tmp155_;
					ValaTypeSymbol* _tmp156_;
					gchar* _tmp157_;
					gchar* _tmp158_;
					ValaCCodeConstant* _tmp159_;
					ValaCCodeConstant* _tmp160_;
					_tmp151_ = csignew;
					_tmp152_ = sig;
					_tmp153_ = vala_callable_get_return_type ((ValaCallable*) _tmp152_);
					_tmp154_ = _tmp153_;
					_tmp155_ = vala_data_type_get_data_type (_tmp154_);
					_tmp156_ = _tmp155_;
					_tmp157_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp156_);
					_tmp158_ = _tmp157_;
					_tmp159_ = vala_ccode_constant_new (_tmp158_);
					_tmp160_ = _tmp159_;
					vala_ccode_function_call_add_argument (_tmp151_, (ValaCCodeExpression*) _tmp160_);
					_vala_ccode_node_unref0 (_tmp160_);
					_g_free0 (_tmp158_);
				}
			}
		}
	}
	params_len = 0;
	{
		ValaList* _param_list = NULL;
		ValaList* _tmp161_;
		ValaList* _tmp162_;
		gint _param_size = 0;
		ValaList* _tmp163_;
		gint _tmp164_;
		gint _tmp165_;
		gint _param_index = 0;
		_tmp161_ = params;
		_tmp162_ = _vala_iterable_ref0 (_tmp161_);
		_param_list = _tmp162_;
		_tmp163_ = _param_list;
		_tmp164_ = vala_collection_get_size ((ValaCollection*) _tmp163_);
		_tmp165_ = _tmp164_;
		_param_size = _tmp165_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp166_;
			gint _tmp167_;
			gint _tmp168_;
			ValaParameter* param = NULL;
			ValaList* _tmp169_;
			gint _tmp170_;
			gpointer _tmp171_;
			gint _tmp172_;
			ValaParameter* _tmp173_;
			ValaDataType* _tmp174_;
			ValaDataType* _tmp175_;
			gboolean _tmp176_;
			_tmp166_ = _param_index;
			_param_index = _tmp166_ + 1;
			_tmp167_ = _param_index;
			_tmp168_ = _param_size;
			if (!(_tmp167_ < _tmp168_)) {
				break;
			}
			_tmp169_ = _param_list;
			_tmp170_ = _param_index;
			_tmp171_ = vala_list_get (_tmp169_, _tmp170_);
			param = (ValaParameter*) _tmp171_;
			_tmp172_ = params_len;
			params_len = _tmp172_ + 1;
			_tmp173_ = param;
			_tmp174_ = vala_variable_get_variable_type ((ValaVariable*) _tmp173_);
			_tmp175_ = _tmp174_;
			_tmp176_ = vala_data_type_is_array (_tmp175_);
			if (_tmp176_) {
				gint _tmp177_;
				ValaParameter* _tmp178_;
				ValaDataType* _tmp179_;
				ValaDataType* _tmp180_;
				gint _tmp181_;
				gint _tmp182_;
				_tmp177_ = params_len;
				_tmp178_ = param;
				_tmp179_ = vala_variable_get_variable_type ((ValaVariable*) _tmp178_);
				_tmp180_ = _tmp179_;
				_tmp181_ = vala_array_type_get_rank (G_TYPE_CHECK_INSTANCE_CAST (_tmp180_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				_tmp182_ = _tmp181_;
				params_len = _tmp177_ + _tmp182_;
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp183_ = csignew;
	_tmp184_ = params_len;
	_tmp185_ = g_strdup_printf ("%d", _tmp184_);
	_tmp186_ = _tmp185_;
	_tmp187_ = vala_ccode_constant_new (_tmp186_);
	_tmp188_ = _tmp187_;
	vala_ccode_function_call_add_argument (_tmp183_, (ValaCCodeExpression*) _tmp188_);
	_vala_ccode_node_unref0 (_tmp188_);
	_g_free0 (_tmp186_);
	{
		ValaList* _param_list = NULL;
		ValaList* _tmp189_;
		ValaList* _tmp190_;
		gint _param_size = 0;
		ValaList* _tmp191_;
		gint _tmp192_;
		gint _tmp193_;
		gint _param_index = 0;
		_tmp189_ = params;
		_tmp190_ = _vala_iterable_ref0 (_tmp189_);
		_param_list = _tmp190_;
		_tmp191_ = _param_list;
		_tmp192_ = vala_collection_get_size ((ValaCollection*) _tmp191_);
		_tmp193_ = _tmp192_;
		_param_size = _tmp193_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp194_;
			gint _tmp195_;
			gint _tmp196_;
			ValaParameter* param = NULL;
			ValaList* _tmp197_;
			gint _tmp198_;
			gpointer _tmp199_;
			ValaParameter* _tmp200_;
			ValaDataType* _tmp201_;
			ValaDataType* _tmp202_;
			gboolean _tmp203_;
			_tmp194_ = _param_index;
			_param_index = _tmp194_ + 1;
			_tmp195_ = _param_index;
			_tmp196_ = _param_size;
			if (!(_tmp195_ < _tmp196_)) {
				break;
			}
			_tmp197_ = _param_list;
			_tmp198_ = _param_index;
			_tmp199_ = vala_list_get (_tmp197_, _tmp198_);
			param = (ValaParameter*) _tmp199_;
			_tmp200_ = param;
			_tmp201_ = vala_variable_get_variable_type ((ValaVariable*) _tmp200_);
			_tmp202_ = _tmp201_;
			_tmp203_ = vala_data_type_is_array (_tmp202_);
			if (_tmp203_) {
				ValaParameter* _tmp204_;
				ValaDataType* _tmp205_;
				ValaDataType* _tmp206_;
				ValaDataType* _tmp207_;
				ValaDataType* _tmp208_;
				ValaTypeSymbol* _tmp209_;
				ValaTypeSymbol* _tmp210_;
				ValaDataType* _tmp211_;
				ValaTypeSymbol* _tmp212_;
				ValaTypeSymbol* _tmp213_;
				_tmp204_ = param;
				_tmp205_ = vala_variable_get_variable_type ((ValaVariable*) _tmp204_);
				_tmp206_ = _tmp205_;
				_tmp207_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp206_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				_tmp208_ = _tmp207_;
				_tmp209_ = vala_data_type_get_data_type (_tmp208_);
				_tmp210_ = _tmp209_;
				_tmp211_ = ((ValaCCodeBaseModule*) self)->string_type;
				_tmp212_ = vala_data_type_get_data_type (_tmp211_);
				_tmp213_ = _tmp212_;
				if (_tmp210_ == _tmp213_) {
					ValaCCodeFunctionCall* _tmp214_;
					ValaCCodeConstant* _tmp215_;
					ValaCCodeConstant* _tmp216_;
					_tmp214_ = csignew;
					_tmp215_ = vala_ccode_constant_new ("G_TYPE_STRV");
					_tmp216_ = _tmp215_;
					vala_ccode_function_call_add_argument (_tmp214_, (ValaCCodeExpression*) _tmp216_);
					_vala_ccode_node_unref0 (_tmp216_);
				} else {
					ValaCCodeFunctionCall* _tmp217_;
					ValaCCodeConstant* _tmp218_;
					ValaCCodeConstant* _tmp219_;
					_tmp217_ = csignew;
					_tmp218_ = vala_ccode_constant_new ("G_TYPE_POINTER");
					_tmp219_ = _tmp218_;
					vala_ccode_function_call_add_argument (_tmp217_, (ValaCCodeExpression*) _tmp219_);
					_vala_ccode_node_unref0 (_tmp219_);
				}
				{
					gint i = 0;
					i = 0;
					{
						gboolean _tmp220_ = FALSE;
						_tmp220_ = TRUE;
						while (TRUE) {
							gint _tmp222_;
							ValaParameter* _tmp223_;
							ValaDataType* _tmp224_;
							ValaDataType* _tmp225_;
							gint _tmp226_;
							gint _tmp227_;
							ValaCCodeFunctionCall* _tmp228_;
							ValaCCodeConstant* _tmp229_;
							ValaCCodeConstant* _tmp230_;
							if (!_tmp220_) {
								gint _tmp221_;
								_tmp221_ = i;
								i = _tmp221_ + 1;
							}
							_tmp220_ = FALSE;
							_tmp222_ = i;
							_tmp223_ = param;
							_tmp224_ = vala_variable_get_variable_type ((ValaVariable*) _tmp223_);
							_tmp225_ = _tmp224_;
							_tmp226_ = vala_array_type_get_rank (G_TYPE_CHECK_INSTANCE_CAST (_tmp225_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
							_tmp227_ = _tmp226_;
							if (!(_tmp222_ < _tmp227_)) {
								break;
							}
							_tmp228_ = csignew;
							_tmp229_ = vala_ccode_constant_new ("G_TYPE_INT");
							_tmp230_ = _tmp229_;
							vala_ccode_function_call_add_argument (_tmp228_, (ValaCCodeExpression*) _tmp230_);
							_vala_ccode_node_unref0 (_tmp230_);
						}
					}
				}
			} else {
				gboolean _tmp231_ = FALSE;
				gboolean _tmp232_ = FALSE;
				ValaParameter* _tmp233_;
				ValaDataType* _tmp234_;
				ValaDataType* _tmp235_;
				_tmp233_ = param;
				_tmp234_ = vala_variable_get_variable_type ((ValaVariable*) _tmp233_);
				_tmp235_ = _tmp234_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp235_, VALA_TYPE_POINTER_TYPE)) {
					_tmp232_ = TRUE;
				} else {
					ValaParameter* _tmp236_;
					ValaDataType* _tmp237_;
					ValaDataType* _tmp238_;
					ValaTypeParameter* _tmp239_;
					ValaTypeParameter* _tmp240_;
					_tmp236_ = param;
					_tmp237_ = vala_variable_get_variable_type ((ValaVariable*) _tmp236_);
					_tmp238_ = _tmp237_;
					_tmp239_ = vala_data_type_get_type_parameter (_tmp238_);
					_tmp240_ = _tmp239_;
					_tmp232_ = _tmp240_ != NULL;
				}
				if (_tmp232_) {
					_tmp231_ = TRUE;
				} else {
					ValaParameter* _tmp241_;
					ValaParameterDirection _tmp242_;
					ValaParameterDirection _tmp243_;
					_tmp241_ = param;
					_tmp242_ = vala_parameter_get_direction (_tmp241_);
					_tmp243_ = _tmp242_;
					_tmp231_ = _tmp243_ != VALA_PARAMETER_DIRECTION_IN;
				}
				if (_tmp231_) {
					ValaCCodeFunctionCall* _tmp244_;
					ValaCCodeConstant* _tmp245_;
					ValaCCodeConstant* _tmp246_;
					_tmp244_ = csignew;
					_tmp245_ = vala_ccode_constant_new ("G_TYPE_POINTER");
					_tmp246_ = _tmp245_;
					vala_ccode_function_call_add_argument (_tmp244_, (ValaCCodeExpression*) _tmp246_);
					_vala_ccode_node_unref0 (_tmp246_);
				} else {
					ValaParameter* _tmp247_;
					ValaDataType* _tmp248_;
					ValaDataType* _tmp249_;
					_tmp247_ = param;
					_tmp248_ = vala_variable_get_variable_type ((ValaVariable*) _tmp247_);
					_tmp249_ = _tmp248_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp249_, VALA_TYPE_ERROR_TYPE)) {
						ValaCCodeFunctionCall* _tmp250_;
						ValaCCodeConstant* _tmp251_;
						ValaCCodeConstant* _tmp252_;
						_tmp250_ = csignew;
						_tmp251_ = vala_ccode_constant_new ("G_TYPE_POINTER");
						_tmp252_ = _tmp251_;
						vala_ccode_function_call_add_argument (_tmp250_, (ValaCCodeExpression*) _tmp252_);
						_vala_ccode_node_unref0 (_tmp252_);
					} else {
						gboolean _tmp253_ = FALSE;
						ValaParameter* _tmp254_;
						ValaDataType* _tmp255_;
						ValaDataType* _tmp256_;
						_tmp254_ = param;
						_tmp255_ = vala_variable_get_variable_type ((ValaVariable*) _tmp254_);
						_tmp256_ = _tmp255_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp256_, VALA_TYPE_VALUE_TYPE)) {
							ValaParameter* _tmp257_;
							ValaDataType* _tmp258_;
							ValaDataType* _tmp259_;
							gboolean _tmp260_;
							gboolean _tmp261_;
							_tmp257_ = param;
							_tmp258_ = vala_variable_get_variable_type ((ValaVariable*) _tmp257_);
							_tmp259_ = _tmp258_;
							_tmp260_ = vala_data_type_get_nullable (_tmp259_);
							_tmp261_ = _tmp260_;
							_tmp253_ = _tmp261_;
						} else {
							_tmp253_ = FALSE;
						}
						if (_tmp253_) {
							ValaCCodeFunctionCall* _tmp262_;
							ValaCCodeConstant* _tmp263_;
							ValaCCodeConstant* _tmp264_;
							_tmp262_ = csignew;
							_tmp263_ = vala_ccode_constant_new ("G_TYPE_POINTER");
							_tmp264_ = _tmp263_;
							vala_ccode_function_call_add_argument (_tmp262_, (ValaCCodeExpression*) _tmp264_);
							_vala_ccode_node_unref0 (_tmp264_);
						} else {
							ValaCCodeFunctionCall* _tmp265_;
							ValaParameter* _tmp266_;
							ValaDataType* _tmp267_;
							ValaDataType* _tmp268_;
							ValaTypeSymbol* _tmp269_;
							ValaTypeSymbol* _tmp270_;
							gchar* _tmp271_;
							gchar* _tmp272_;
							ValaCCodeConstant* _tmp273_;
							ValaCCodeConstant* _tmp274_;
							_tmp265_ = csignew;
							_tmp266_ = param;
							_tmp267_ = vala_variable_get_variable_type ((ValaVariable*) _tmp266_);
							_tmp268_ = _tmp267_;
							_tmp269_ = vala_data_type_get_data_type (_tmp268_);
							_tmp270_ = _tmp269_;
							_tmp271_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp270_);
							_tmp272_ = _tmp271_;
							_tmp273_ = vala_ccode_constant_new (_tmp272_);
							_tmp274_ = _tmp273_;
							vala_ccode_function_call_add_argument (_tmp265_, (ValaCCodeExpression*) _tmp274_);
							_vala_ccode_node_unref0 (_tmp274_);
							_g_free0 (_tmp272_);
						}
					}
				}
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp275_ = marshal_arg;
	_tmp276_ = marshaller;
	vala_ccode_identifier_set_name (_tmp275_, _tmp276_);
	_tmp277_ = sig;
	_tmp278_ = vala_gsignal_module_get_signal_id_cexpression (self, _tmp277_);
	_tmp279_ = _tmp278_;
	_tmp280_ = csignew;
	_tmp281_ = vala_ccode_assignment_new (_tmp279_, (ValaCCodeExpression*) _tmp280_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp282_ = (ValaCCodeExpression*) _tmp281_;
	_vala_ccode_node_unref0 (_tmp279_);
	result = _tmp282_;
	_vala_iterable_unref0 (params);
	_vala_ccode_node_unref0 (marshal_arg);
	_g_free0 (marshaller);
	_g_free0 (run_type);
	flags = (_vala_array_free (flags, flags_length1, (GDestroyNotify) g_free), NULL);
	_vala_ccode_node_unref0 (csignew);
	return result;
}


static void vala_gsignal_module_real_visit_element_access (ValaCodeVisitor* base, ValaElementAccess* expr) {
	ValaGSignalModule * self;
	gboolean _tmp0_ = FALSE;
	ValaElementAccess* _tmp1_;
	ValaExpression* _tmp2_;
	ValaExpression* _tmp3_;
	self = (ValaGSignalModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp1_ = expr;
	_tmp2_ = vala_element_access_get_container (_tmp1_);
	_tmp3_ = _tmp2_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_MEMBER_ACCESS)) {
		ValaElementAccess* _tmp4_;
		ValaExpression* _tmp5_;
		ValaExpression* _tmp6_;
		ValaSymbol* _tmp7_;
		ValaSymbol* _tmp8_;
		_tmp4_ = expr;
		_tmp5_ = vala_element_access_get_container (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = vala_expression_get_symbol_reference (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_SIGNAL);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaElementAccess* _tmp9_;
		ValaCodeNode* _tmp10_;
		ValaCodeNode* _tmp11_;
		_tmp9_ = expr;
		_tmp10_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp9_);
		_tmp11_ = _tmp10_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_METHOD_CALL)) {
			ValaSignal* sig = NULL;
			ValaElementAccess* _tmp12_;
			ValaSymbol* _tmp13_;
			ValaSymbol* _tmp14_;
			ValaSignal* _tmp15_;
			ValaMemberAccess* ma = NULL;
			ValaElementAccess* _tmp16_;
			ValaExpression* _tmp17_;
			ValaExpression* _tmp18_;
			ValaMemberAccess* _tmp19_;
			ValaExpression* detail_expr = NULL;
			ValaElementAccess* _tmp20_;
			ValaList* _tmp21_;
			ValaList* _tmp22_;
			gpointer _tmp23_;
			ValaExpression* _tmp24_;
			ValaCCodeFunctionCall* ccall = NULL;
			gboolean _tmp25_ = FALSE;
			ValaSignal* _tmp26_;
			gboolean _tmp27_;
			gboolean _tmp28_;
			ValaElementAccess* _tmp74_;
			ValaCCodeFunctionCall* _tmp75_;
			_tmp12_ = expr;
			_tmp13_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp12_);
			_tmp14_ = _tmp13_;
			_tmp15_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_SIGNAL, ValaSignal));
			sig = _tmp15_;
			_tmp16_ = expr;
			_tmp17_ = vala_element_access_get_container (_tmp16_);
			_tmp18_ = _tmp17_;
			_tmp19_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
			ma = _tmp19_;
			_tmp20_ = expr;
			_tmp21_ = vala_element_access_get_indices (_tmp20_);
			_tmp22_ = _tmp21_;
			_tmp23_ = vala_list_get (_tmp22_, 0);
			_tmp24_ = (ValaExpression*) _tmp23_;
			_vala_iterable_unref0 (_tmp22_);
			detail_expr = _tmp24_;
			_tmp26_ = sig;
			_tmp27_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp26_);
			_tmp28_ = _tmp27_;
			if (!_tmp28_) {
				ValaElementAccess* _tmp29_;
				ValaSourceReference* _tmp30_;
				ValaSourceReference* _tmp31_;
				ValaSourceFile* _tmp32_;
				ValaSourceFile* _tmp33_;
				ValaSignal* _tmp34_;
				ValaSourceReference* _tmp35_;
				ValaSourceReference* _tmp36_;
				ValaSourceFile* _tmp37_;
				ValaSourceFile* _tmp38_;
				_tmp29_ = expr;
				_tmp30_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp29_);
				_tmp31_ = _tmp30_;
				_tmp32_ = vala_source_reference_get_file (_tmp31_);
				_tmp33_ = _tmp32_;
				_tmp34_ = sig;
				_tmp35_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp34_);
				_tmp36_ = _tmp35_;
				_tmp37_ = vala_source_reference_get_file (_tmp36_);
				_tmp38_ = _tmp37_;
				_tmp25_ = _tmp33_ == _tmp38_;
			} else {
				_tmp25_ = FALSE;
			}
			if (_tmp25_) {
				ValaCCodeExpression* detail_cexpr = NULL;
				ValaExpression* _tmp39_;
				ValaElementAccess* _tmp40_;
				ValaCCodeExpression* _tmp41_;
				ValaCCodeIdentifier* _tmp42_;
				ValaCCodeIdentifier* _tmp43_;
				ValaCCodeFunctionCall* _tmp44_;
				ValaCCodeFunctionCall* _tmp45_;
				ValaMemberAccess* _tmp46_;
				ValaExpression* _tmp47_;
				ValaExpression* _tmp48_;
				ValaCCodeExpression* _tmp49_;
				ValaCCodeExpression* _tmp50_;
				ValaCCodeFunctionCall* _tmp51_;
				ValaSignal* _tmp52_;
				ValaCCodeExpression* _tmp53_;
				ValaCCodeExpression* _tmp54_;
				ValaCCodeExpression* _tmp55_;
				_tmp39_ = detail_expr;
				_tmp40_ = expr;
				_tmp41_ = vala_gsignal_module_get_detail_cexpression (self, _tmp39_, (ValaCodeNode*) _tmp40_);
				detail_cexpr = _tmp41_;
				_tmp42_ = vala_ccode_identifier_new ("g_signal_emit");
				_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_ = ma;
				_tmp47_ = vala_member_access_get_inner (_tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp48_);
				_tmp50_ = _tmp49_;
				vala_ccode_function_call_add_argument (_tmp45_, _tmp50_);
				_vala_ccode_node_unref0 (_tmp50_);
				_tmp51_ = ccall;
				_tmp52_ = sig;
				_tmp53_ = vala_gsignal_module_get_signal_id_cexpression (self, _tmp52_);
				_tmp54_ = _tmp53_;
				vala_ccode_function_call_add_argument (_tmp51_, _tmp54_);
				_vala_ccode_node_unref0 (_tmp54_);
				_tmp55_ = detail_cexpr;
				if (_tmp55_ != NULL) {
					ValaCCodeFunctionCall* _tmp56_;
					ValaCCodeExpression* _tmp57_;
					_tmp56_ = ccall;
					_tmp57_ = detail_cexpr;
					vala_ccode_function_call_add_argument (_tmp56_, _tmp57_);
				}
				_vala_ccode_node_unref0 (detail_cexpr);
			} else {
				ValaCCodeExpression* signal_name_cexpr = NULL;
				ValaSignal* _tmp58_;
				ValaExpression* _tmp59_;
				ValaElementAccess* _tmp60_;
				ValaCCodeExpression* _tmp61_;
				ValaCCodeIdentifier* _tmp62_;
				ValaCCodeIdentifier* _tmp63_;
				ValaCCodeFunctionCall* _tmp64_;
				ValaCCodeFunctionCall* _tmp65_;
				ValaMemberAccess* _tmp66_;
				ValaExpression* _tmp67_;
				ValaExpression* _tmp68_;
				ValaCCodeExpression* _tmp69_;
				ValaCCodeExpression* _tmp70_;
				ValaCCodeExpression* _tmp71_;
				_tmp58_ = sig;
				_tmp59_ = detail_expr;
				_tmp60_ = expr;
				_tmp61_ = vala_gsignal_module_get_signal_name_cexpression (self, _tmp58_, _tmp59_, (ValaCodeNode*) _tmp60_);
				signal_name_cexpr = _tmp61_;
				_tmp62_ = vala_ccode_identifier_new ("g_signal_emit_by_name");
				_tmp63_ = _tmp62_;
				_tmp64_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp63_);
				_vala_ccode_node_unref0 (ccall);
				ccall = _tmp64_;
				_vala_ccode_node_unref0 (_tmp63_);
				_tmp65_ = ccall;
				_tmp66_ = ma;
				_tmp67_ = vala_member_access_get_inner (_tmp66_);
				_tmp68_ = _tmp67_;
				_tmp69_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp68_);
				_tmp70_ = _tmp69_;
				vala_ccode_function_call_add_argument (_tmp65_, _tmp70_);
				_vala_ccode_node_unref0 (_tmp70_);
				_tmp71_ = signal_name_cexpr;
				if (_tmp71_ != NULL) {
					ValaCCodeFunctionCall* _tmp72_;
					ValaCCodeExpression* _tmp73_;
					_tmp72_ = ccall;
					_tmp73_ = signal_name_cexpr;
					vala_ccode_function_call_add_argument (_tmp72_, _tmp73_);
				}
				_vala_ccode_node_unref0 (signal_name_cexpr);
			}
			_tmp74_ = expr;
			_tmp75_ = ccall;
			vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp74_, (ValaCCodeExpression*) _tmp75_);
			_vala_ccode_node_unref0 (ccall);
			_vala_code_node_unref0 (detail_expr);
			_vala_code_node_unref0 (ma);
			_vala_code_node_unref0 (sig);
		} else {
		}
	} else {
		ValaElementAccess* _tmp76_;
		_tmp76_ = expr;
		VALA_CODE_VISITOR_CLASS (vala_gsignal_module_parent_class)->visit_element_access ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GOBJECT_MODULE, ValaGObjectModule), _tmp76_);
	}
}


static gboolean vala_gsignal_module_in_gobject_instance (ValaGSignalModule* self, ValaMethod* m) {
	gboolean result = FALSE;
	gboolean _result_ = FALSE;
	ValaMethod* _tmp0_;
	ValaMemberBinding _tmp1_;
	ValaMemberBinding _tmp2_;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (m != NULL, FALSE);
	_result_ = FALSE;
	_tmp0_ = m;
	_tmp1_ = vala_method_get_binding (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == VALA_MEMBER_BINDING_INSTANCE) {
		ValaMethod* _tmp3_;
		ValaParameter* _tmp4_;
		ValaParameter* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp7_;
		ValaTypeSymbol* _tmp8_;
		ValaTypeSymbol* _tmp9_;
		ValaTypeSymbol* _tmp10_;
		gboolean _tmp11_;
		_tmp3_ = m;
		_tmp4_ = vala_method_get_this_parameter (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_variable_get_variable_type ((ValaVariable*) _tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_data_type_get_data_type (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = ((ValaCCodeBaseModule*) self)->gobject_type;
		_tmp11_ = vala_typesymbol_is_subtype_of (_tmp9_, _tmp10_);
		_result_ = _tmp11_;
	}
	result = _result_;
	return result;
}


static void vala_gsignal_module_emit_signal_assignment (ValaGSignalModule* self, ValaAssignment* assignment) {
	ValaSignal* sig = NULL;
	ValaAssignment* _tmp0_;
	ValaExpression* _tmp1_;
	ValaExpression* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaSymbol* _tmp4_;
	ValaSignal* _tmp5_;
	gboolean disconnect = FALSE;
	ValaAssignment* _tmp6_;
	ValaAssignmentOperator _tmp7_;
	ValaAssignmentOperator _tmp8_;
	ValaSignal* _tmp16_;
	ValaAssignment* _tmp17_;
	ValaExpression* _tmp18_;
	ValaExpression* _tmp19_;
	ValaAssignment* _tmp20_;
	ValaExpression* _tmp21_;
	ValaExpression* _tmp22_;
	gboolean _tmp23_;
	ValaAssignment* _tmp24_;
	ValaCCodeExpression* _tmp25_;
	ValaCCodeExpression* _tmp26_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (assignment != NULL);
	_tmp0_ = assignment;
	_tmp1_ = vala_assignment_get_left (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_expression_get_symbol_reference (_tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, VALA_TYPE_SIGNAL, ValaSignal));
	sig = _tmp5_;
	disconnect = FALSE;
	_tmp6_ = assignment;
	_tmp7_ = vala_assignment_get_operator (_tmp6_);
	_tmp8_ = _tmp7_;
	if (_tmp8_ == VALA_ASSIGNMENT_OPERATOR_ADD) {
	} else {
		ValaAssignment* _tmp9_;
		ValaAssignmentOperator _tmp10_;
		ValaAssignmentOperator _tmp11_;
		_tmp9_ = assignment;
		_tmp10_ = vala_assignment_get_operator (_tmp9_);
		_tmp11_ = _tmp10_;
		if (_tmp11_ == VALA_ASSIGNMENT_OPERATOR_SUB) {
			disconnect = TRUE;
		} else {
			ValaAssignment* _tmp12_;
			ValaAssignment* _tmp13_;
			ValaSourceReference* _tmp14_;
			ValaSourceReference* _tmp15_;
			_tmp12_ = assignment;
			vala_code_node_set_error ((ValaCodeNode*) _tmp12_, TRUE);
			_tmp13_ = assignment;
			_tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp13_);
			_tmp15_ = _tmp14_;
			vala_report_error (_tmp15_, "Specified compound assignment type for signals not supported.");
			_vala_code_node_unref0 (sig);
			return;
		}
	}
	_tmp16_ = sig;
	_tmp17_ = assignment;
	_tmp18_ = vala_assignment_get_left (_tmp17_);
	_tmp19_ = _tmp18_;
	_tmp20_ = assignment;
	_tmp21_ = vala_assignment_get_right (_tmp20_);
	_tmp22_ = _tmp21_;
	_tmp23_ = disconnect;
	_tmp24_ = assignment;
	_tmp25_ = vala_gsignal_module_connect_signal (self, _tmp16_, _tmp19_, _tmp22_, _tmp23_, FALSE, (ValaCodeNode*) _tmp24_);
	_tmp26_ = _tmp25_;
	_vala_ccode_node_unref0 (_tmp26_);
	_vala_code_node_unref0 (sig);
}


static void vala_gsignal_module_real_visit_assignment (ValaCodeVisitor* base, ValaAssignment* assignment) {
	ValaGSignalModule * self;
	ValaAssignment* _tmp0_;
	ValaExpression* _tmp1_;
	ValaExpression* _tmp2_;
	ValaSymbol* _tmp3_;
	ValaSymbol* _tmp4_;
	self = (ValaGSignalModule*) base;
	g_return_if_fail (assignment != NULL);
	_tmp0_ = assignment;
	_tmp1_ = vala_assignment_get_left (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_expression_get_symbol_reference (_tmp2_);
	_tmp4_ = _tmp3_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_SIGNAL)) {
		gboolean _tmp5_ = FALSE;
		ValaAssignment* _tmp6_;
		ValaExpression* _tmp7_;
		ValaExpression* _tmp8_;
		gboolean _tmp9_;
		gboolean _tmp10_;
		ValaAssignment* _tmp17_;
		_tmp6_ = assignment;
		_tmp7_ = vala_assignment_get_left (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_code_node_get_error ((ValaCodeNode*) _tmp8_);
		_tmp10_ = _tmp9_;
		if (_tmp10_) {
			_tmp5_ = TRUE;
		} else {
			ValaAssignment* _tmp11_;
			ValaExpression* _tmp12_;
			ValaExpression* _tmp13_;
			gboolean _tmp14_;
			gboolean _tmp15_;
			_tmp11_ = assignment;
			_tmp12_ = vala_assignment_get_right (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_code_node_get_error ((ValaCodeNode*) _tmp13_);
			_tmp15_ = _tmp14_;
			_tmp5_ = _tmp15_;
		}
		if (_tmp5_) {
			ValaAssignment* _tmp16_;
			_tmp16_ = assignment;
			vala_code_node_set_error ((ValaCodeNode*) _tmp16_, TRUE);
			return;
		}
		_tmp17_ = assignment;
		vala_gsignal_module_emit_signal_assignment (self, _tmp17_);
	} else {
		ValaAssignment* _tmp18_;
		_tmp18_ = assignment;
		VALA_CODE_VISITOR_CLASS (vala_gsignal_module_parent_class)->visit_assignment ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GOBJECT_MODULE, ValaGObjectModule), _tmp18_);
	}
}


static void vala_gsignal_module_real_visit_member_access (ValaCodeVisitor* base, ValaMemberAccess* expr) {
	ValaGSignalModule * self;
	ValaMemberAccess* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	self = (ValaGSignalModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = expr;
	_tmp1_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp0_);
	_tmp2_ = _tmp1_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_SIGNAL)) {
		ValaCCodeExpression* pub_inst = NULL;
		ValaMemberAccess* _tmp3_;
		ValaExpression* _tmp4_;
		ValaExpression* _tmp5_;
		ValaSignal* sig = NULL;
		ValaMemberAccess* _tmp10_;
		ValaSymbol* _tmp11_;
		ValaSymbol* _tmp12_;
		ValaSignal* _tmp13_;
		ValaTypeSymbol* cl = NULL;
		ValaSignal* _tmp14_;
		ValaSymbol* _tmp15_;
		ValaSymbol* _tmp16_;
		ValaTypeSymbol* _tmp17_;
		gboolean _tmp18_ = FALSE;
		ValaMemberAccess* _tmp19_;
		ValaExpression* _tmp20_;
		ValaExpression* _tmp21_;
		gboolean _tmp58_ = FALSE;
		ValaSignal* _tmp59_;
		gboolean _tmp60_;
		gboolean _tmp61_;
		pub_inst = NULL;
		_tmp3_ = expr;
		_tmp4_ = vala_member_access_get_inner (_tmp3_);
		_tmp5_ = _tmp4_;
		if (_tmp5_ != NULL) {
			ValaMemberAccess* _tmp6_;
			ValaExpression* _tmp7_;
			ValaExpression* _tmp8_;
			ValaCCodeExpression* _tmp9_;
			_tmp6_ = expr;
			_tmp7_ = vala_member_access_get_inner (_tmp6_);
			_tmp8_ = _tmp7_;
			_tmp9_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp8_);
			_vala_ccode_node_unref0 (pub_inst);
			pub_inst = _tmp9_;
		}
		_tmp10_ = expr;
		_tmp11_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp10_);
		_tmp12_ = _tmp11_;
		_tmp13_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_SIGNAL, ValaSignal));
		sig = _tmp13_;
		_tmp14_ = sig;
		_tmp15_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp14_);
		_tmp16_ = _tmp15_;
		_tmp17_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
		cl = _tmp17_;
		_tmp19_ = expr;
		_tmp20_ = vala_member_access_get_inner (_tmp19_);
		_tmp21_ = _tmp20_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_BASE_ACCESS)) {
			ValaSignal* _tmp22_;
			gboolean _tmp23_;
			gboolean _tmp24_;
			_tmp22_ = sig;
			_tmp23_ = vala_signal_get_is_virtual (_tmp22_);
			_tmp24_ = _tmp23_;
			_tmp18_ = _tmp24_;
		} else {
			_tmp18_ = FALSE;
		}
		if (_tmp18_) {
			ValaMethod* m = NULL;
			ValaSignal* _tmp25_;
			ValaMethod* _tmp26_;
			ValaMethod* _tmp27_;
			ValaMethod* _tmp28_;
			ValaClass* base_class = NULL;
			ValaMethod* _tmp29_;
			ValaSymbol* _tmp30_;
			ValaSymbol* _tmp31_;
			ValaClass* _tmp32_;
			ValaCCodeFunctionCall* vcast = NULL;
			ValaClass* _tmp33_;
			gchar* _tmp34_;
			gchar* _tmp35_;
			gchar* _tmp36_;
			gchar* _tmp37_;
			ValaCCodeIdentifier* _tmp38_;
			ValaCCodeIdentifier* _tmp39_;
			ValaCCodeFunctionCall* _tmp40_;
			ValaCCodeFunctionCall* _tmp41_;
			ValaCCodeFunctionCall* _tmp42_;
			ValaClass* _tmp43_;
			ValaClass* _tmp44_;
			gchar* _tmp45_;
			gchar* _tmp46_;
			gchar* _tmp47_;
			gchar* _tmp48_;
			ValaCCodeIdentifier* _tmp49_;
			ValaCCodeIdentifier* _tmp50_;
			ValaMemberAccess* _tmp51_;
			ValaCCodeFunctionCall* _tmp52_;
			ValaMethod* _tmp53_;
			const gchar* _tmp54_;
			const gchar* _tmp55_;
			ValaCCodeMemberAccess* _tmp56_;
			ValaCCodeMemberAccess* _tmp57_;
			_tmp25_ = sig;
			_tmp26_ = vala_signal_get_default_handler (_tmp25_);
			_tmp27_ = _tmp26_;
			_tmp28_ = _vala_code_node_ref0 (_tmp27_);
			m = _tmp28_;
			_tmp29_ = m;
			_tmp30_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp29_);
			_tmp31_ = _tmp30_;
			_tmp32_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, VALA_TYPE_CLASS, ValaClass));
			base_class = _tmp32_;
			_tmp33_ = base_class;
			_tmp34_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp33_, NULL);
			_tmp35_ = _tmp34_;
			_tmp36_ = g_strdup_printf ("%s_CLASS", _tmp35_);
			_tmp37_ = _tmp36_;
			_tmp38_ = vala_ccode_identifier_new (_tmp37_);
			_tmp39_ = _tmp38_;
			_tmp40_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp39_);
			_tmp41_ = _tmp40_;
			_vala_ccode_node_unref0 (_tmp39_);
			_g_free0 (_tmp37_);
			_g_free0 (_tmp35_);
			vcast = _tmp41_;
			_tmp42_ = vcast;
			_tmp43_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
			_tmp44_ = _tmp43_;
			_tmp45_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp44_, NULL);
			_tmp46_ = _tmp45_;
			_tmp47_ = g_strdup_printf ("%s_parent_class", _tmp46_);
			_tmp48_ = _tmp47_;
			_tmp49_ = vala_ccode_identifier_new (_tmp48_);
			_tmp50_ = _tmp49_;
			vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp50_);
			_vala_ccode_node_unref0 (_tmp50_);
			_g_free0 (_tmp48_);
			_g_free0 (_tmp46_);
			_tmp51_ = expr;
			_tmp52_ = vcast;
			_tmp53_ = m;
			_tmp54_ = vala_symbol_get_name ((ValaSymbol*) _tmp53_);
			_tmp55_ = _tmp54_;
			_tmp56_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp52_, _tmp55_);
			_tmp57_ = _tmp56_;
			vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp51_, (ValaCCodeExpression*) _tmp57_);
			_vala_ccode_node_unref0 (_tmp57_);
			_vala_ccode_node_unref0 (vcast);
			_vala_code_node_unref0 (base_class);
			_vala_code_node_unref0 (m);
			_vala_code_node_unref0 (cl);
			_vala_code_node_unref0 (sig);
			_vala_ccode_node_unref0 (pub_inst);
			return;
		}
		_tmp59_ = sig;
		_tmp60_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp59_);
		_tmp61_ = _tmp60_;
		if (!_tmp61_) {
			ValaMemberAccess* _tmp62_;
			ValaSourceReference* _tmp63_;
			ValaSourceReference* _tmp64_;
			ValaSourceFile* _tmp65_;
			ValaSourceFile* _tmp66_;
			ValaSignal* _tmp67_;
			ValaSourceReference* _tmp68_;
			ValaSourceReference* _tmp69_;
			ValaSourceFile* _tmp70_;
			ValaSourceFile* _tmp71_;
			_tmp62_ = expr;
			_tmp63_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp62_);
			_tmp64_ = _tmp63_;
			_tmp65_ = vala_source_reference_get_file (_tmp64_);
			_tmp66_ = _tmp65_;
			_tmp67_ = sig;
			_tmp68_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp67_);
			_tmp69_ = _tmp68_;
			_tmp70_ = vala_source_reference_get_file (_tmp69_);
			_tmp71_ = _tmp70_;
			_tmp58_ = _tmp66_ == _tmp71_;
		} else {
			_tmp58_ = FALSE;
		}
		if (_tmp58_) {
			ValaCCodeFunctionCall* ccall = NULL;
			ValaCCodeIdentifier* _tmp72_;
			ValaCCodeIdentifier* _tmp73_;
			ValaCCodeFunctionCall* _tmp74_;
			ValaCCodeFunctionCall* _tmp75_;
			ValaCCodeFunctionCall* _tmp76_;
			ValaCCodeExpression* _tmp77_;
			ValaCCodeFunctionCall* _tmp78_;
			ValaSignal* _tmp79_;
			ValaCCodeExpression* _tmp80_;
			ValaCCodeExpression* _tmp81_;
			ValaCCodeFunctionCall* _tmp82_;
			ValaCCodeConstant* _tmp83_;
			ValaCCodeConstant* _tmp84_;
			ValaMemberAccess* _tmp85_;
			ValaCCodeFunctionCall* _tmp86_;
			_tmp72_ = vala_ccode_identifier_new ("g_signal_emit");
			_tmp73_ = _tmp72_;
			_tmp74_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp73_);
			_tmp75_ = _tmp74_;
			_vala_ccode_node_unref0 (_tmp73_);
			ccall = _tmp75_;
			_tmp76_ = ccall;
			_tmp77_ = pub_inst;
			vala_ccode_function_call_add_argument (_tmp76_, _tmp77_);
			_tmp78_ = ccall;
			_tmp79_ = sig;
			_tmp80_ = vala_gsignal_module_get_signal_id_cexpression (self, _tmp79_);
			_tmp81_ = _tmp80_;
			vala_ccode_function_call_add_argument (_tmp78_, _tmp81_);
			_vala_ccode_node_unref0 (_tmp81_);
			_tmp82_ = ccall;
			_tmp83_ = vala_ccode_constant_new ("0");
			_tmp84_ = _tmp83_;
			vala_ccode_function_call_add_argument (_tmp82_, (ValaCCodeExpression*) _tmp84_);
			_vala_ccode_node_unref0 (_tmp84_);
			_tmp85_ = expr;
			_tmp86_ = ccall;
			vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp85_, (ValaCCodeExpression*) _tmp86_);
			_vala_ccode_node_unref0 (ccall);
		} else {
			ValaSignal* _tmp87_;
			gboolean _tmp88_;
			_tmp87_ = sig;
			_tmp88_ = vala_ccode_base_module_get_signal_has_emitter ((ValaCCodeBaseModule*) self, _tmp87_);
			if (_tmp88_) {
				gchar* emitter_func = NULL;
				ValaSignal* _tmp89_;
				ValaMethod* _tmp90_;
				ValaMethod* _tmp91_;
				ValaCCodeFunctionCall* ccall = NULL;
				const gchar* _tmp121_;
				ValaCCodeIdentifier* _tmp122_;
				ValaCCodeIdentifier* _tmp123_;
				ValaCCodeFunctionCall* _tmp124_;
				ValaCCodeFunctionCall* _tmp125_;
				ValaCCodeFunctionCall* _tmp126_;
				ValaCCodeExpression* _tmp127_;
				ValaMemberAccess* _tmp128_;
				ValaCCodeFunctionCall* _tmp129_;
				_tmp89_ = sig;
				_tmp90_ = vala_signal_get_emitter (_tmp89_);
				_tmp91_ = _tmp90_;
				if (_tmp91_ != NULL) {
					gboolean _tmp92_ = FALSE;
					ValaSignal* _tmp93_;
					gboolean _tmp94_;
					gboolean _tmp95_;
					ValaSignal* _tmp110_;
					ValaMethod* _tmp111_;
					ValaMethod* _tmp112_;
					gchar* _tmp113_;
					_tmp93_ = sig;
					_tmp94_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp93_);
					_tmp95_ = _tmp94_;
					if (!_tmp95_) {
						ValaMemberAccess* _tmp96_;
						ValaSourceReference* _tmp97_;
						ValaSourceReference* _tmp98_;
						ValaSourceFile* _tmp99_;
						ValaSourceFile* _tmp100_;
						ValaSignal* _tmp101_;
						ValaSourceReference* _tmp102_;
						ValaSourceReference* _tmp103_;
						ValaSourceFile* _tmp104_;
						ValaSourceFile* _tmp105_;
						_tmp96_ = expr;
						_tmp97_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp96_);
						_tmp98_ = _tmp97_;
						_tmp99_ = vala_source_reference_get_file (_tmp98_);
						_tmp100_ = _tmp99_;
						_tmp101_ = sig;
						_tmp102_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp101_);
						_tmp103_ = _tmp102_;
						_tmp104_ = vala_source_reference_get_file (_tmp103_);
						_tmp105_ = _tmp104_;
						_tmp92_ = _tmp100_ != _tmp105_;
					} else {
						_tmp92_ = FALSE;
					}
					if (_tmp92_) {
						ValaSignal* _tmp106_;
						ValaMethod* _tmp107_;
						ValaMethod* _tmp108_;
						ValaCCodeFile* _tmp109_;
						_tmp106_ = sig;
						_tmp107_ = vala_signal_get_emitter (_tmp106_);
						_tmp108_ = _tmp107_;
						_tmp109_ = ((ValaCCodeBaseModule*) self)->cfile;
						vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp108_, _tmp109_);
					}
					_tmp110_ = sig;
					_tmp111_ = vala_signal_get_emitter (_tmp110_);
					_tmp112_ = _tmp111_;
					_tmp113_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp112_, NULL);
					_g_free0 (emitter_func);
					emitter_func = _tmp113_;
				} else {
					ValaTypeSymbol* _tmp114_;
					gchar* _tmp115_;
					gchar* _tmp116_;
					ValaSignal* _tmp117_;
					gchar* _tmp118_;
					gchar* _tmp119_;
					gchar* _tmp120_;
					_tmp114_ = cl;
					_tmp115_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp114_, NULL);
					_tmp116_ = _tmp115_;
					_tmp117_ = sig;
					_tmp118_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp117_, NULL);
					_tmp119_ = _tmp118_;
					_tmp120_ = g_strdup_printf ("%s_%s", _tmp116_, _tmp119_);
					_g_free0 (emitter_func);
					emitter_func = _tmp120_;
					_g_free0 (_tmp119_);
					_g_free0 (_tmp116_);
				}
				_tmp121_ = emitter_func;
				_tmp122_ = vala_ccode_identifier_new (_tmp121_);
				_tmp123_ = _tmp122_;
				_tmp124_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp123_);
				_tmp125_ = _tmp124_;
				_vala_ccode_node_unref0 (_tmp123_);
				ccall = _tmp125_;
				_tmp126_ = ccall;
				_tmp127_ = pub_inst;
				vala_ccode_function_call_add_argument (_tmp126_, _tmp127_);
				_tmp128_ = expr;
				_tmp129_ = ccall;
				vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp128_, (ValaCCodeExpression*) _tmp129_);
				_vala_ccode_node_unref0 (ccall);
				_g_free0 (emitter_func);
			} else {
				ValaCCodeFunctionCall* ccall = NULL;
				ValaCCodeIdentifier* _tmp130_;
				ValaCCodeIdentifier* _tmp131_;
				ValaCCodeFunctionCall* _tmp132_;
				ValaCCodeFunctionCall* _tmp133_;
				ValaCCodeFunctionCall* _tmp134_;
				ValaCCodeExpression* _tmp135_;
				ValaCCodeFunctionCall* _tmp136_;
				ValaSignal* _tmp137_;
				ValaCCodeConstant* _tmp138_;
				ValaCCodeConstant* _tmp139_;
				ValaMemberAccess* _tmp140_;
				ValaCCodeFunctionCall* _tmp141_;
				_tmp130_ = vala_ccode_identifier_new ("g_signal_emit_by_name");
				_tmp131_ = _tmp130_;
				_tmp132_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp131_);
				_tmp133_ = _tmp132_;
				_vala_ccode_node_unref0 (_tmp131_);
				ccall = _tmp133_;
				_tmp134_ = ccall;
				_tmp135_ = pub_inst;
				vala_ccode_function_call_add_argument (_tmp134_, _tmp135_);
				_tmp136_ = ccall;
				_tmp137_ = sig;
				_tmp138_ = vala_ccode_base_module_get_signal_canonical_constant ((ValaCCodeBaseModule*) self, _tmp137_, NULL);
				_tmp139_ = _tmp138_;
				vala_ccode_function_call_add_argument (_tmp136_, (ValaCCodeExpression*) _tmp139_);
				_vala_ccode_node_unref0 (_tmp139_);
				_tmp140_ = expr;
				_tmp141_ = ccall;
				vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp140_, (ValaCCodeExpression*) _tmp141_);
				_vala_ccode_node_unref0 (ccall);
			}
		}
		_vala_code_node_unref0 (cl);
		_vala_code_node_unref0 (sig);
		_vala_ccode_node_unref0 (pub_inst);
	} else {
		ValaMemberAccess* _tmp142_;
		_tmp142_ = expr;
		VALA_CODE_VISITOR_CLASS (vala_gsignal_module_parent_class)->visit_member_access ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GOBJECT_MODULE, ValaGObjectModule), _tmp142_);
	}
}


static void vala_gsignal_module_real_visit_method_call (ValaCodeVisitor* base, ValaMethodCall* expr) {
	ValaGSignalModule * self;
	ValaMethodType* method_type = NULL;
	ValaMethodCall* _tmp0_;
	ValaExpression* _tmp1_;
	ValaExpression* _tmp2_;
	ValaDataType* _tmp3_;
	ValaDataType* _tmp4_;
	ValaMethodType* _tmp5_;
	gboolean _tmp6_ = FALSE;
	ValaMethodType* _tmp7_;
	ValaSignal* sig = NULL;
	ValaMethodType* _tmp14_;
	ValaMethod* _tmp15_;
	ValaMethod* _tmp16_;
	ValaSymbol* _tmp17_;
	ValaSymbol* _tmp18_;
	ValaSignal* _tmp19_;
	ValaExpression* signal_access = NULL;
	ValaMethodCall* _tmp20_;
	ValaExpression* _tmp21_;
	ValaExpression* _tmp22_;
	ValaExpression* _tmp23_;
	ValaExpression* _tmp24_;
	ValaExpression* _tmp25_;
	ValaExpression* handler = NULL;
	ValaMethodCall* _tmp26_;
	ValaList* _tmp27_;
	ValaList* _tmp28_;
	gpointer _tmp29_;
	ValaExpression* _tmp30_;
	gboolean disconnect = FALSE;
	ValaMethodType* _tmp31_;
	ValaMethod* _tmp32_;
	ValaMethod* _tmp33_;
	const gchar* _tmp34_;
	const gchar* _tmp35_;
	gboolean after = FALSE;
	ValaMethodType* _tmp36_;
	ValaMethod* _tmp37_;
	ValaMethod* _tmp38_;
	const gchar* _tmp39_;
	const gchar* _tmp40_;
	ValaCCodeExpression* cexpr = NULL;
	ValaSignal* _tmp41_;
	ValaExpression* _tmp42_;
	ValaExpression* _tmp43_;
	gboolean _tmp44_;
	gboolean _tmp45_;
	ValaMethodCall* _tmp46_;
	ValaCCodeExpression* _tmp47_;
	ValaMethodCall* _tmp48_;
	ValaCCodeExpression* _tmp49_;
	self = (ValaGSignalModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = expr;
	_tmp1_ = vala_method_call_get_call (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_expression_get_value_type (_tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_METHOD_TYPE) ? ((ValaMethodType*) _tmp4_) : NULL);
	method_type = _tmp5_;
	_tmp7_ = method_type;
	if (_tmp7_ == NULL) {
		_tmp6_ = TRUE;
	} else {
		ValaMethodType* _tmp8_;
		ValaMethod* _tmp9_;
		ValaMethod* _tmp10_;
		ValaSymbol* _tmp11_;
		ValaSymbol* _tmp12_;
		_tmp8_ = method_type;
		_tmp9_ = vala_method_type_get_method_symbol (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp10_);
		_tmp12_ = _tmp11_;
		_tmp6_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_SIGNAL);
	}
	if (_tmp6_) {
		ValaMethodCall* _tmp13_;
		_tmp13_ = expr;
		VALA_CODE_VISITOR_CLASS (vala_gsignal_module_parent_class)->visit_method_call ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GOBJECT_MODULE, ValaGObjectModule), _tmp13_);
		_vala_code_node_unref0 (method_type);
		return;
	}
	_tmp14_ = method_type;
	_tmp15_ = vala_method_type_get_method_symbol (_tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_SIGNAL, ValaSignal));
	sig = _tmp19_;
	_tmp20_ = expr;
	_tmp21_ = vala_method_call_get_call (_tmp20_);
	_tmp22_ = _tmp21_;
	_tmp23_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
	_tmp24_ = _tmp23_;
	_tmp25_ = _vala_code_node_ref0 (_tmp24_);
	signal_access = _tmp25_;
	_tmp26_ = expr;
	_tmp27_ = vala_method_call_get_argument_list (_tmp26_);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_list_get (_tmp28_, 0);
	_tmp30_ = (ValaExpression*) _tmp29_;
	_vala_iterable_unref0 (_tmp28_);
	handler = _tmp30_;
	_tmp31_ = method_type;
	_tmp32_ = vala_method_type_get_method_symbol (_tmp31_);
	_tmp33_ = _tmp32_;
	_tmp34_ = vala_symbol_get_name ((ValaSymbol*) _tmp33_);
	_tmp35_ = _tmp34_;
	disconnect = g_strcmp0 (_tmp35_, "disconnect") == 0;
	_tmp36_ = method_type;
	_tmp37_ = vala_method_type_get_method_symbol (_tmp36_);
	_tmp38_ = _tmp37_;
	_tmp39_ = vala_symbol_get_name ((ValaSymbol*) _tmp38_);
	_tmp40_ = _tmp39_;
	after = g_strcmp0 (_tmp40_, "connect_after") == 0;
	_tmp41_ = sig;
	_tmp42_ = signal_access;
	_tmp43_ = handler;
	_tmp44_ = disconnect;
	_tmp45_ = after;
	_tmp46_ = expr;
	_tmp47_ = vala_gsignal_module_connect_signal (self, _tmp41_, _tmp42_, _tmp43_, _tmp44_, _tmp45_, (ValaCodeNode*) _tmp46_);
	cexpr = _tmp47_;
	_tmp48_ = expr;
	_tmp49_ = cexpr;
	vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp48_, _tmp49_);
	_vala_ccode_node_unref0 (cexpr);
	_vala_code_node_unref0 (handler);
	_vala_code_node_unref0 (signal_access);
	_vala_code_node_unref0 (sig);
	_vala_code_node_unref0 (method_type);
}


static ValaCCodeExpression* vala_gsignal_module_connect_signal (ValaGSignalModule* self, ValaSignal* sig, ValaExpression* signal_access, ValaExpression* handler, gboolean disconnect, gboolean after, ValaCodeNode* expr) {
	ValaCCodeExpression* result = NULL;
	gchar* connect_func = NULL;
	ValaMethod* m = NULL;
	ValaExpression* _tmp0_;
	ValaSymbol* _tmp1_;
	ValaSymbol* _tmp2_;
	ValaMethod* _tmp3_;
	gboolean _tmp4_;
	ValaCCodeFunctionCall* ccall = NULL;
	const gchar* _tmp29_;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeIdentifier* _tmp31_;
	ValaCCodeFunctionCall* _tmp32_;
	ValaCCodeFunctionCall* _tmp33_;
	ValaCCodeExpression* signal_name_cexpr = NULL;
	ValaMemberAccess* ma = NULL;
	ValaExpression* _tmp34_;
	ValaMemberAccess* _tmp56_;
	ValaExpression* _tmp57_;
	ValaExpression* _tmp58_;
	ValaSignal* _tmp68_;
	ValaCCodeFunctionCall* _tmp157_;
	ValaExpression* _tmp158_;
	ValaCCodeExpression* _tmp159_;
	ValaCCodeExpression* _tmp160_;
	ValaCCodeCastExpression* _tmp161_;
	ValaCCodeCastExpression* _tmp162_;
	ValaMethod* _tmp163_;
	gboolean _tmp164_;
	gboolean _tmp165_;
	gboolean _tmp220_ = FALSE;
	gboolean _tmp221_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sig != NULL, NULL);
	g_return_val_if_fail (signal_access != NULL, NULL);
	g_return_val_if_fail (handler != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_tmp0_ = handler;
	_tmp1_ = vala_expression_get_symbol_reference (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, VALA_TYPE_METHOD, ValaMethod));
	m = _tmp3_;
	_tmp4_ = disconnect;
	if (!_tmp4_) {
		ValaSignal* _tmp5_;
		_tmp5_ = sig;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_DYNAMIC_SIGNAL)) {
			gboolean _tmp6_;
			_tmp6_ = after;
			if (!_tmp6_) {
				ValaSignal* _tmp7_;
				gchar* _tmp8_;
				_tmp7_ = sig;
				_tmp8_ = vala_ccode_base_module_get_dynamic_signal_connect_wrapper_name ((ValaCCodeBaseModule*) self, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_DYNAMIC_SIGNAL, ValaDynamicSignal));
				_g_free0 (connect_func);
				connect_func = _tmp8_;
			} else {
				ValaSignal* _tmp9_;
				gchar* _tmp10_;
				_tmp9_ = sig;
				_tmp10_ = vala_ccode_base_module_get_dynamic_signal_connect_after_wrapper_name ((ValaCCodeBaseModule*) self, G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_DYNAMIC_SIGNAL, ValaDynamicSignal));
				_g_free0 (connect_func);
				connect_func = _tmp10_;
			}
		} else {
			ValaMethod* _tmp11_;
			gboolean _tmp12_;
			gboolean _tmp13_;
			_tmp11_ = m;
			_tmp12_ = vala_method_get_closure (_tmp11_);
			_tmp13_ = _tmp12_;
			if (_tmp13_) {
				gchar* _tmp14_;
				_tmp14_ = g_strdup ("g_signal_connect_data");
				_g_free0 (connect_func);
				connect_func = _tmp14_;
			} else {
				ValaMethod* _tmp15_;
				gboolean _tmp16_;
				_tmp15_ = m;
				_tmp16_ = vala_gsignal_module_in_gobject_instance (self, _tmp15_);
				if (_tmp16_) {
					gchar* _tmp17_;
					_tmp17_ = g_strdup ("g_signal_connect_object");
					_g_free0 (connect_func);
					connect_func = _tmp17_;
				} else {
					gboolean _tmp18_;
					_tmp18_ = after;
					if (!_tmp18_) {
						gchar* _tmp19_;
						_tmp19_ = g_strdup ("g_signal_connect");
						_g_free0 (connect_func);
						connect_func = _tmp19_;
					} else {
						gchar* _tmp20_;
						_tmp20_ = g_strdup ("g_signal_connect_after");
						_g_free0 (connect_func);
						connect_func = _tmp20_;
					}
				}
			}
		}
	} else {
		ValaExpression* _tmp21_;
		ValaSignal* _tmp25_;
		_tmp21_ = handler;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_LAMBDA_EXPRESSION)) {
			ValaExpression* _tmp22_;
			ValaSourceReference* _tmp23_;
			ValaSourceReference* _tmp24_;
			_tmp22_ = handler;
			_tmp23_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp22_);
			_tmp24_ = _tmp23_;
			vala_report_error (_tmp24_, "Cannot disconnect lambda expression from signal. Use Object.disconnect" \
".");
		}
		_tmp25_ = sig;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp25_, VALA_TYPE_DYNAMIC_SIGNAL)) {
			ValaSignal* _tmp26_;
			gchar* _tmp27_;
			_tmp26_ = sig;
			_tmp27_ = vala_ccode_base_module_get_dynamic_signal_disconnect_wrapper_name ((ValaCCodeBaseModule*) self, G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, VALA_TYPE_DYNAMIC_SIGNAL, ValaDynamicSignal));
			_g_free0 (connect_func);
			connect_func = _tmp27_;
		} else {
			gchar* _tmp28_;
			_tmp28_ = g_strdup ("g_signal_handlers_disconnect_matched");
			_g_free0 (connect_func);
			connect_func = _tmp28_;
		}
	}
	_tmp29_ = connect_func;
	_tmp30_ = vala_ccode_identifier_new (_tmp29_);
	_tmp31_ = _tmp30_;
	_tmp32_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp31_);
	_tmp33_ = _tmp32_;
	_vala_ccode_node_unref0 (_tmp31_);
	ccall = _tmp33_;
	signal_name_cexpr = NULL;
	_tmp34_ = signal_access;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp34_, VALA_TYPE_ELEMENT_ACCESS)) {
		ValaElementAccess* ea = NULL;
		ValaExpression* _tmp35_;
		ValaElementAccess* _tmp36_;
		ValaElementAccess* _tmp37_;
		ValaExpression* _tmp38_;
		ValaExpression* _tmp39_;
		ValaMemberAccess* _tmp40_;
		ValaExpression* detail_expr = NULL;
		ValaElementAccess* _tmp41_;
		ValaList* _tmp42_;
		ValaList* _tmp43_;
		gpointer _tmp44_;
		ValaExpression* _tmp45_;
		ValaSignal* _tmp46_;
		ValaExpression* _tmp47_;
		ValaCodeNode* _tmp48_;
		ValaCCodeExpression* _tmp49_;
		ValaCCodeExpression* _tmp50_;
		_tmp35_ = signal_access;
		_tmp36_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, VALA_TYPE_ELEMENT_ACCESS, ValaElementAccess));
		ea = _tmp36_;
		_tmp37_ = ea;
		_tmp38_ = vala_element_access_get_container (_tmp37_);
		_tmp39_ = _tmp38_;
		_tmp40_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_vala_code_node_unref0 (ma);
		ma = _tmp40_;
		_tmp41_ = ea;
		_tmp42_ = vala_element_access_get_indices (_tmp41_);
		_tmp43_ = _tmp42_;
		_tmp44_ = vala_list_get (_tmp43_, 0);
		_tmp45_ = (ValaExpression*) _tmp44_;
		_vala_iterable_unref0 (_tmp43_);
		detail_expr = _tmp45_;
		_tmp46_ = sig;
		_tmp47_ = detail_expr;
		_tmp48_ = expr;
		_tmp49_ = vala_gsignal_module_get_signal_name_cexpression (self, _tmp46_, _tmp47_, _tmp48_);
		_vala_ccode_node_unref0 (signal_name_cexpr);
		signal_name_cexpr = _tmp49_;
		_tmp50_ = signal_name_cexpr;
		if (_tmp50_ == NULL) {
			result = NULL;
			_vala_code_node_unref0 (detail_expr);
			_vala_code_node_unref0 (ea);
			_vala_code_node_unref0 (ma);
			_vala_ccode_node_unref0 (signal_name_cexpr);
			_vala_ccode_node_unref0 (ccall);
			_vala_code_node_unref0 (m);
			_g_free0 (connect_func);
			return result;
		}
		_vala_code_node_unref0 (detail_expr);
		_vala_code_node_unref0 (ea);
	} else {
		ValaExpression* _tmp51_;
		ValaMemberAccess* _tmp52_;
		ValaSignal* _tmp53_;
		ValaCodeNode* _tmp54_;
		ValaCCodeExpression* _tmp55_;
		_tmp51_ = signal_access;
		_tmp52_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp51_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_vala_code_node_unref0 (ma);
		ma = _tmp52_;
		_tmp53_ = sig;
		_tmp54_ = expr;
		_tmp55_ = vala_gsignal_module_get_signal_name_cexpression (self, _tmp53_, NULL, _tmp54_);
		_vala_ccode_node_unref0 (signal_name_cexpr);
		signal_name_cexpr = _tmp55_;
	}
	_tmp56_ = ma;
	_tmp57_ = vala_member_access_get_inner (_tmp56_);
	_tmp58_ = _tmp57_;
	if (_tmp58_ != NULL) {
		ValaCCodeFunctionCall* _tmp59_;
		ValaMemberAccess* _tmp60_;
		ValaExpression* _tmp61_;
		ValaExpression* _tmp62_;
		ValaCCodeExpression* _tmp63_;
		ValaCCodeExpression* _tmp64_;
		_tmp59_ = ccall;
		_tmp60_ = ma;
		_tmp61_ = vala_member_access_get_inner (_tmp60_);
		_tmp62_ = _tmp61_;
		_tmp63_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp62_);
		_tmp64_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
		vala_ccode_function_call_add_argument (_tmp59_, _tmp64_);
		_vala_ccode_node_unref0 (_tmp64_);
	} else {
		ValaCCodeFunctionCall* _tmp65_;
		ValaCCodeExpression* _tmp66_;
		ValaCCodeExpression* _tmp67_;
		_tmp65_ = ccall;
		_tmp66_ = vala_ccode_base_module_get_result_cexpression ((ValaCCodeBaseModule*) self, "self");
		_tmp67_ = _tmp66_;
		vala_ccode_function_call_add_argument (_tmp65_, _tmp67_);
		_vala_ccode_node_unref0 (_tmp67_);
	}
	_tmp68_ = sig;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, VALA_TYPE_DYNAMIC_SIGNAL)) {
		ValaCCodeFunctionCall* _tmp69_;
		ValaSignal* _tmp70_;
		gchar* _tmp71_;
		gchar* _tmp72_;
		gchar* _tmp73_;
		gchar* _tmp74_;
		ValaCCodeConstant* _tmp75_;
		ValaCCodeConstant* _tmp76_;
		_tmp69_ = ccall;
		_tmp70_ = sig;
		_tmp71_ = vala_get_ccode_name ((ValaCodeNode*) _tmp70_);
		_tmp72_ = _tmp71_;
		_tmp73_ = g_strdup_printf ("\"%s\"", _tmp72_);
		_tmp74_ = _tmp73_;
		_tmp75_ = vala_ccode_constant_new (_tmp74_);
		_tmp76_ = _tmp75_;
		vala_ccode_function_call_add_argument (_tmp69_, (ValaCCodeExpression*) _tmp76_);
		_vala_ccode_node_unref0 (_tmp76_);
		_g_free0 (_tmp74_);
		_g_free0 (_tmp72_);
	} else {
		gboolean _tmp77_;
		_tmp77_ = disconnect;
		if (!_tmp77_) {
			ValaCCodeFunctionCall* _tmp78_;
			ValaCCodeExpression* _tmp79_;
			_tmp78_ = ccall;
			_tmp79_ = signal_name_cexpr;
			vala_ccode_function_call_add_argument (_tmp78_, _tmp79_);
		} else {
			ValaExpression* _tmp80_;
			ValaLocalVariable* temp_decl = NULL;
			ValaDataType* _tmp87_;
			ValaLocalVariable* _tmp88_;
			ValaLocalVariable* _tmp89_;
			ValaCCodeFunctionCall* parse_call = NULL;
			ValaCCodeIdentifier* _tmp90_;
			ValaCCodeIdentifier* _tmp91_;
			ValaCCodeFunctionCall* _tmp92_;
			ValaCCodeFunctionCall* _tmp93_;
			ValaCCodeFunctionCall* _tmp94_;
			ValaCCodeExpression* _tmp95_;
			ValaTypeSymbol* decl_type = NULL;
			ValaSignal* _tmp96_;
			ValaSymbol* _tmp97_;
			ValaSymbol* _tmp98_;
			ValaTypeSymbol* _tmp99_;
			ValaCCodeFunctionCall* _tmp100_;
			ValaTypeSymbol* _tmp101_;
			gchar* _tmp102_;
			gchar* _tmp103_;
			ValaCCodeIdentifier* _tmp104_;
			ValaCCodeIdentifier* _tmp105_;
			ValaCCodeFunctionCall* _tmp106_;
			ValaLocalVariable* _tmp107_;
			const gchar* _tmp108_;
			const gchar* _tmp109_;
			ValaCCodeExpression* _tmp110_;
			ValaCCodeExpression* _tmp111_;
			ValaCCodeUnaryExpression* _tmp112_;
			ValaCCodeUnaryExpression* _tmp113_;
			ValaLocalVariable* detail_temp_decl = NULL;
			ValaExpression* _tmp114_;
			ValaCCodeFunction* _tmp135_;
			ValaCCodeFunction* _tmp136_;
			ValaCCodeFunctionCall* _tmp137_;
			ValaCCodeFunctionCall* _tmp138_;
			ValaLocalVariable* _tmp139_;
			const gchar* _tmp140_;
			const gchar* _tmp141_;
			ValaCCodeExpression* _tmp142_;
			ValaCCodeExpression* _tmp143_;
			ValaLocalVariable* _tmp144_;
			ValaCCodeFunctionCall* _tmp154_;
			ValaCCodeConstant* _tmp155_;
			ValaCCodeConstant* _tmp156_;
			_tmp80_ = signal_access;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp80_, VALA_TYPE_ELEMENT_ACCESS)) {
				ValaCCodeFunctionCall* _tmp81_;
				ValaCCodeConstant* _tmp82_;
				ValaCCodeConstant* _tmp83_;
				_tmp81_ = ccall;
				_tmp82_ = vala_ccode_constant_new ("G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA");
				_tmp83_ = _tmp82_;
				vala_ccode_function_call_add_argument (_tmp81_, (ValaCCodeExpression*) _tmp83_);
				_vala_ccode_node_unref0 (_tmp83_);
			} else {
				ValaCCodeFunctionCall* _tmp84_;
				ValaCCodeConstant* _tmp85_;
				ValaCCodeConstant* _tmp86_;
				_tmp84_ = ccall;
				_tmp85_ = vala_ccode_constant_new ("G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DETAIL | G_SIGNAL_MATCH_FUNC | G_SI" \
"GNAL_MATCH_DATA");
				_tmp86_ = _tmp85_;
				vala_ccode_function_call_add_argument (_tmp84_, (ValaCCodeExpression*) _tmp86_);
				_vala_ccode_node_unref0 (_tmp86_);
			}
			_tmp87_ = ((ValaCCodeBaseModule*) self)->uint_type;
			_tmp88_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp87_, TRUE, NULL, FALSE);
			temp_decl = _tmp88_;
			_tmp89_ = temp_decl;
			vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp89_);
			_tmp90_ = vala_ccode_identifier_new ("g_signal_parse_name");
			_tmp91_ = _tmp90_;
			_tmp92_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp91_);
			_tmp93_ = _tmp92_;
			_vala_ccode_node_unref0 (_tmp91_);
			parse_call = _tmp93_;
			_tmp94_ = parse_call;
			_tmp95_ = signal_name_cexpr;
			vala_ccode_function_call_add_argument (_tmp94_, _tmp95_);
			_tmp96_ = sig;
			_tmp97_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp96_);
			_tmp98_ = _tmp97_;
			_tmp99_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp98_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
			decl_type = _tmp99_;
			_tmp100_ = parse_call;
			_tmp101_ = decl_type;
			_tmp102_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp101_);
			_tmp103_ = _tmp102_;
			_tmp104_ = vala_ccode_identifier_new (_tmp103_);
			_tmp105_ = _tmp104_;
			vala_ccode_function_call_add_argument (_tmp100_, (ValaCCodeExpression*) _tmp105_);
			_vala_ccode_node_unref0 (_tmp105_);
			_g_free0 (_tmp103_);
			_tmp106_ = parse_call;
			_tmp107_ = temp_decl;
			_tmp108_ = vala_symbol_get_name ((ValaSymbol*) _tmp107_);
			_tmp109_ = _tmp108_;
			_tmp110_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp109_);
			_tmp111_ = _tmp110_;
			_tmp112_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp111_);
			_tmp113_ = _tmp112_;
			vala_ccode_function_call_add_argument (_tmp106_, (ValaCCodeExpression*) _tmp113_);
			_vala_ccode_node_unref0 (_tmp113_);
			_vala_ccode_node_unref0 (_tmp111_);
			detail_temp_decl = NULL;
			_tmp114_ = signal_access;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, VALA_TYPE_ELEMENT_ACCESS)) {
				ValaCCodeFunctionCall* _tmp115_;
				ValaCCodeConstant* _tmp116_;
				ValaCCodeConstant* _tmp117_;
				ValaCCodeFunctionCall* _tmp118_;
				ValaCCodeConstant* _tmp119_;
				ValaCCodeConstant* _tmp120_;
				_tmp115_ = parse_call;
				_tmp116_ = vala_ccode_constant_new ("NULL");
				_tmp117_ = _tmp116_;
				vala_ccode_function_call_add_argument (_tmp115_, (ValaCCodeExpression*) _tmp117_);
				_vala_ccode_node_unref0 (_tmp117_);
				_tmp118_ = parse_call;
				_tmp119_ = vala_ccode_constant_new ("FALSE");
				_tmp120_ = _tmp119_;
				vala_ccode_function_call_add_argument (_tmp118_, (ValaCCodeExpression*) _tmp120_);
				_vala_ccode_node_unref0 (_tmp120_);
			} else {
				ValaDataType* _tmp121_;
				ValaLocalVariable* _tmp122_;
				ValaLocalVariable* _tmp123_;
				ValaCCodeFunctionCall* _tmp124_;
				ValaLocalVariable* _tmp125_;
				const gchar* _tmp126_;
				const gchar* _tmp127_;
				ValaCCodeExpression* _tmp128_;
				ValaCCodeExpression* _tmp129_;
				ValaCCodeUnaryExpression* _tmp130_;
				ValaCCodeUnaryExpression* _tmp131_;
				ValaCCodeFunctionCall* _tmp132_;
				ValaCCodeConstant* _tmp133_;
				ValaCCodeConstant* _tmp134_;
				_tmp121_ = ((ValaCCodeBaseModule*) self)->gquark_type;
				_tmp122_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp121_, TRUE, NULL, FALSE);
				_vala_code_node_unref0 (detail_temp_decl);
				detail_temp_decl = _tmp122_;
				_tmp123_ = detail_temp_decl;
				vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp123_);
				_tmp124_ = parse_call;
				_tmp125_ = detail_temp_decl;
				_tmp126_ = vala_symbol_get_name ((ValaSymbol*) _tmp125_);
				_tmp127_ = _tmp126_;
				_tmp128_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp127_);
				_tmp129_ = _tmp128_;
				_tmp130_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp129_);
				_tmp131_ = _tmp130_;
				vala_ccode_function_call_add_argument (_tmp124_, (ValaCCodeExpression*) _tmp131_);
				_vala_ccode_node_unref0 (_tmp131_);
				_vala_ccode_node_unref0 (_tmp129_);
				_tmp132_ = parse_call;
				_tmp133_ = vala_ccode_constant_new ("TRUE");
				_tmp134_ = _tmp133_;
				vala_ccode_function_call_add_argument (_tmp132_, (ValaCCodeExpression*) _tmp134_);
				_vala_ccode_node_unref0 (_tmp134_);
			}
			_tmp135_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp136_ = _tmp135_;
			_tmp137_ = parse_call;
			vala_ccode_function_add_expression (_tmp136_, (ValaCCodeExpression*) _tmp137_);
			_tmp138_ = ccall;
			_tmp139_ = temp_decl;
			_tmp140_ = vala_symbol_get_name ((ValaSymbol*) _tmp139_);
			_tmp141_ = _tmp140_;
			_tmp142_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp141_);
			_tmp143_ = _tmp142_;
			vala_ccode_function_call_add_argument (_tmp138_, _tmp143_);
			_vala_ccode_node_unref0 (_tmp143_);
			_tmp144_ = detail_temp_decl;
			if (_tmp144_ == NULL) {
				ValaCCodeFunctionCall* _tmp145_;
				ValaCCodeConstant* _tmp146_;
				ValaCCodeConstant* _tmp147_;
				_tmp145_ = ccall;
				_tmp146_ = vala_ccode_constant_new ("0");
				_tmp147_ = _tmp146_;
				vala_ccode_function_call_add_argument (_tmp145_, (ValaCCodeExpression*) _tmp147_);
				_vala_ccode_node_unref0 (_tmp147_);
			} else {
				ValaCCodeFunctionCall* _tmp148_;
				ValaLocalVariable* _tmp149_;
				const gchar* _tmp150_;
				const gchar* _tmp151_;
				ValaCCodeExpression* _tmp152_;
				ValaCCodeExpression* _tmp153_;
				_tmp148_ = ccall;
				_tmp149_ = detail_temp_decl;
				_tmp150_ = vala_symbol_get_name ((ValaSymbol*) _tmp149_);
				_tmp151_ = _tmp150_;
				_tmp152_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp151_);
				_tmp153_ = _tmp152_;
				vala_ccode_function_call_add_argument (_tmp148_, _tmp153_);
				_vala_ccode_node_unref0 (_tmp153_);
			}
			_tmp154_ = ccall;
			_tmp155_ = vala_ccode_constant_new ("NULL");
			_tmp156_ = _tmp155_;
			vala_ccode_function_call_add_argument (_tmp154_, (ValaCCodeExpression*) _tmp156_);
			_vala_ccode_node_unref0 (_tmp156_);
			_vala_code_node_unref0 (detail_temp_decl);
			_vala_code_node_unref0 (decl_type);
			_vala_ccode_node_unref0 (parse_call);
			_vala_code_node_unref0 (temp_decl);
		}
	}
	_tmp157_ = ccall;
	_tmp158_ = handler;
	_tmp159_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp158_);
	_tmp160_ = _tmp159_;
	_tmp161_ = vala_ccode_cast_expression_new (_tmp160_, "GCallback");
	_tmp162_ = _tmp161_;
	vala_ccode_function_call_add_argument (_tmp157_, (ValaCCodeExpression*) _tmp162_);
	_vala_ccode_node_unref0 (_tmp162_);
	_vala_ccode_node_unref0 (_tmp160_);
	_tmp163_ = m;
	_tmp164_ = vala_method_get_closure (_tmp163_);
	_tmp165_ = _tmp164_;
	if (_tmp165_) {
		ValaCCodeExpression* handler_destroy_notify = NULL;
		ValaCCodeFunctionCall* _tmp166_;
		ValaExpression* _tmp167_;
		ValaCCodeExpression* _tmp168_ = NULL;
		ValaCCodeExpression* _tmp169_;
		ValaCCodeExpression* _tmp170_;
		ValaCCodeFunctionCall* _tmp171_;
		ValaCCodeExpression* _tmp172_;
		ValaCCodeCastExpression* _tmp173_;
		ValaCCodeCastExpression* _tmp174_;
		gboolean _tmp175_;
		_tmp166_ = ccall;
		_tmp167_ = handler;
		_tmp169_ = vala_ccode_base_module_get_delegate_target_cexpression ((ValaCCodeBaseModule*) self, _tmp167_, &_tmp168_);
		_vala_ccode_node_unref0 (handler_destroy_notify);
		handler_destroy_notify = _tmp168_;
		_tmp170_ = _tmp169_;
		vala_ccode_function_call_add_argument (_tmp166_, _tmp170_);
		_vala_ccode_node_unref0 (_tmp170_);
		_tmp171_ = ccall;
		_tmp172_ = handler_destroy_notify;
		_tmp173_ = vala_ccode_cast_expression_new (_tmp172_, "GClosureNotify");
		_tmp174_ = _tmp173_;
		vala_ccode_function_call_add_argument (_tmp171_, (ValaCCodeExpression*) _tmp174_);
		_vala_ccode_node_unref0 (_tmp174_);
		_tmp175_ = after;
		if (!_tmp175_) {
			ValaCCodeFunctionCall* _tmp176_;
			ValaCCodeConstant* _tmp177_;
			ValaCCodeConstant* _tmp178_;
			_tmp176_ = ccall;
			_tmp177_ = vala_ccode_constant_new ("0");
			_tmp178_ = _tmp177_;
			vala_ccode_function_call_add_argument (_tmp176_, (ValaCCodeExpression*) _tmp178_);
			_vala_ccode_node_unref0 (_tmp178_);
		} else {
			ValaCCodeFunctionCall* _tmp179_;
			ValaCCodeConstant* _tmp180_;
			ValaCCodeConstant* _tmp181_;
			_tmp179_ = ccall;
			_tmp180_ = vala_ccode_constant_new ("G_CONNECT_AFTER");
			_tmp181_ = _tmp180_;
			vala_ccode_function_call_add_argument (_tmp179_, (ValaCCodeExpression*) _tmp181_);
			_vala_ccode_node_unref0 (_tmp181_);
		}
		_vala_ccode_node_unref0 (handler_destroy_notify);
	} else {
		ValaMethod* _tmp182_;
		ValaMemberBinding _tmp183_;
		ValaMemberBinding _tmp184_;
		_tmp182_ = m;
		_tmp183_ = vala_method_get_binding (_tmp182_);
		_tmp184_ = _tmp183_;
		if (_tmp184_ == VALA_MEMBER_BINDING_INSTANCE) {
			ValaExpression* _tmp185_;
			gboolean _tmp204_ = FALSE;
			gboolean _tmp205_ = FALSE;
			gboolean _tmp206_;
			_tmp185_ = handler;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp185_, VALA_TYPE_MEMBER_ACCESS)) {
				ValaMemberAccess* right_ma = NULL;
				ValaExpression* _tmp186_;
				ValaMemberAccess* _tmp187_;
				ValaMemberAccess* _tmp188_;
				ValaExpression* _tmp189_;
				ValaExpression* _tmp190_;
				_tmp186_ = handler;
				_tmp187_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp186_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
				right_ma = _tmp187_;
				_tmp188_ = right_ma;
				_tmp189_ = vala_member_access_get_inner (_tmp188_);
				_tmp190_ = _tmp189_;
				if (_tmp190_ != NULL) {
					ValaCCodeFunctionCall* _tmp191_;
					ValaMemberAccess* _tmp192_;
					ValaExpression* _tmp193_;
					ValaExpression* _tmp194_;
					ValaCCodeExpression* _tmp195_;
					ValaCCodeExpression* _tmp196_;
					_tmp191_ = ccall;
					_tmp192_ = right_ma;
					_tmp193_ = vala_member_access_get_inner (_tmp192_);
					_tmp194_ = _tmp193_;
					_tmp195_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp194_);
					_tmp196_ = _tmp195_;
					vala_ccode_function_call_add_argument (_tmp191_, _tmp196_);
					_vala_ccode_node_unref0 (_tmp196_);
				} else {
					ValaCCodeFunctionCall* _tmp197_;
					ValaCCodeExpression* _tmp198_;
					ValaCCodeExpression* _tmp199_;
					_tmp197_ = ccall;
					_tmp198_ = vala_ccode_base_module_get_result_cexpression ((ValaCCodeBaseModule*) self, "self");
					_tmp199_ = _tmp198_;
					vala_ccode_function_call_add_argument (_tmp197_, _tmp199_);
					_vala_ccode_node_unref0 (_tmp199_);
				}
				_vala_code_node_unref0 (right_ma);
			} else {
				ValaExpression* _tmp200_;
				_tmp200_ = handler;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp200_, VALA_TYPE_LAMBDA_EXPRESSION)) {
					ValaCCodeFunctionCall* _tmp201_;
					ValaCCodeExpression* _tmp202_;
					ValaCCodeExpression* _tmp203_;
					_tmp201_ = ccall;
					_tmp202_ = vala_ccode_base_module_get_result_cexpression ((ValaCCodeBaseModule*) self, "self");
					_tmp203_ = _tmp202_;
					vala_ccode_function_call_add_argument (_tmp201_, _tmp203_);
					_vala_ccode_node_unref0 (_tmp203_);
				}
			}
			_tmp206_ = disconnect;
			if (!_tmp206_) {
				ValaSignal* _tmp207_;
				_tmp207_ = sig;
				_tmp205_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp207_, VALA_TYPE_DYNAMIC_SIGNAL);
			} else {
				_tmp205_ = FALSE;
			}
			if (_tmp205_) {
				ValaMethod* _tmp208_;
				gboolean _tmp209_;
				_tmp208_ = m;
				_tmp209_ = vala_gsignal_module_in_gobject_instance (self, _tmp208_);
				_tmp204_ = _tmp209_;
			} else {
				_tmp204_ = FALSE;
			}
			if (_tmp204_) {
				gboolean _tmp210_;
				_tmp210_ = after;
				if (!_tmp210_) {
					ValaCCodeFunctionCall* _tmp211_;
					ValaCCodeConstant* _tmp212_;
					ValaCCodeConstant* _tmp213_;
					_tmp211_ = ccall;
					_tmp212_ = vala_ccode_constant_new ("0");
					_tmp213_ = _tmp212_;
					vala_ccode_function_call_add_argument (_tmp211_, (ValaCCodeExpression*) _tmp213_);
					_vala_ccode_node_unref0 (_tmp213_);
				} else {
					ValaCCodeFunctionCall* _tmp214_;
					ValaCCodeConstant* _tmp215_;
					ValaCCodeConstant* _tmp216_;
					_tmp214_ = ccall;
					_tmp215_ = vala_ccode_constant_new ("G_CONNECT_AFTER");
					_tmp216_ = _tmp215_;
					vala_ccode_function_call_add_argument (_tmp214_, (ValaCCodeExpression*) _tmp216_);
					_vala_ccode_node_unref0 (_tmp216_);
				}
			}
		} else {
			ValaCCodeFunctionCall* _tmp217_;
			ValaCCodeConstant* _tmp218_;
			ValaCCodeConstant* _tmp219_;
			_tmp217_ = ccall;
			_tmp218_ = vala_ccode_constant_new ("NULL");
			_tmp219_ = _tmp218_;
			vala_ccode_function_call_add_argument (_tmp217_, (ValaCCodeExpression*) _tmp219_);
			_vala_ccode_node_unref0 (_tmp219_);
		}
	}
	_tmp221_ = disconnect;
	if (_tmp221_) {
		_tmp220_ = TRUE;
	} else {
		ValaCodeNode* _tmp222_;
		ValaCodeNode* _tmp223_;
		ValaCodeNode* _tmp224_;
		_tmp222_ = expr;
		_tmp223_ = vala_code_node_get_parent_node (_tmp222_);
		_tmp224_ = _tmp223_;
		_tmp220_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp224_, VALA_TYPE_EXPRESSION_STATEMENT);
	}
	if (_tmp220_) {
		ValaCCodeFunction* _tmp225_;
		ValaCCodeFunction* _tmp226_;
		ValaCCodeFunctionCall* _tmp227_;
		_tmp225_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp226_ = _tmp225_;
		_tmp227_ = ccall;
		vala_ccode_function_add_expression (_tmp226_, (ValaCCodeExpression*) _tmp227_);
		result = NULL;
		_vala_code_node_unref0 (ma);
		_vala_ccode_node_unref0 (signal_name_cexpr);
		_vala_ccode_node_unref0 (ccall);
		_vala_code_node_unref0 (m);
		_g_free0 (connect_func);
		return result;
	} else {
		ValaLocalVariable* temp_var = NULL;
		ValaDataType* _tmp228_;
		ValaLocalVariable* _tmp229_;
		ValaCCodeExpression* temp_ref = NULL;
		ValaLocalVariable* _tmp230_;
		const gchar* _tmp231_;
		const gchar* _tmp232_;
		ValaCCodeExpression* _tmp233_;
		ValaLocalVariable* _tmp234_;
		ValaCCodeFunction* _tmp235_;
		ValaCCodeFunction* _tmp236_;
		ValaCCodeExpression* _tmp237_;
		ValaCCodeFunctionCall* _tmp238_;
		_tmp228_ = ((ValaCCodeBaseModule*) self)->ulong_type;
		_tmp229_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp228_, TRUE, NULL, FALSE);
		temp_var = _tmp229_;
		_tmp230_ = temp_var;
		_tmp231_ = vala_symbol_get_name ((ValaSymbol*) _tmp230_);
		_tmp232_ = _tmp231_;
		_tmp233_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp232_);
		temp_ref = _tmp233_;
		_tmp234_ = temp_var;
		vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp234_);
		_tmp235_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp236_ = _tmp235_;
		_tmp237_ = temp_ref;
		_tmp238_ = ccall;
		vala_ccode_function_add_assignment (_tmp236_, _tmp237_, (ValaCCodeExpression*) _tmp238_);
		result = temp_ref;
		_vala_code_node_unref0 (temp_var);
		_vala_code_node_unref0 (ma);
		_vala_ccode_node_unref0 (signal_name_cexpr);
		_vala_ccode_node_unref0 (ccall);
		_vala_code_node_unref0 (m);
		_g_free0 (connect_func);
		return result;
	}
	_vala_code_node_unref0 (ma);
	_vala_ccode_node_unref0 (signal_name_cexpr);
	_vala_ccode_node_unref0 (ccall);
	_vala_code_node_unref0 (m);
	_g_free0 (connect_func);
}


ValaGSignalModule* vala_gsignal_module_construct (GType object_type) {
	ValaGSignalModule* self = NULL;
	self = (ValaGSignalModule*) vala_gobject_module_construct (object_type);
	return self;
}


ValaGSignalModule* vala_gsignal_module_new (void) {
	return vala_gsignal_module_construct (VALA_TYPE_GSIGNAL_MODULE);
}


static void vala_gsignal_module_class_init (ValaGSignalModuleClass * klass) {
	vala_gsignal_module_parent_class = g_type_class_peek_parent (klass);
	((ValaCodeVisitorClass *) klass)->visit_signal = (void (*) (ValaCodeVisitor *, ValaSignal*)) vala_gsignal_module_real_visit_signal;
	((ValaCCodeBaseModuleClass *) klass)->get_signal_creation = (ValaCCodeExpression* (*) (ValaCCodeBaseModule *, ValaSignal*, ValaTypeSymbol*)) vala_gsignal_module_real_get_signal_creation;
	((ValaCodeVisitorClass *) klass)->visit_element_access = (void (*) (ValaCodeVisitor *, ValaElementAccess*)) vala_gsignal_module_real_visit_element_access;
	((ValaCodeVisitorClass *) klass)->visit_assignment = (void (*) (ValaCodeVisitor *, ValaAssignment*)) vala_gsignal_module_real_visit_assignment;
	((ValaCodeVisitorClass *) klass)->visit_member_access = (void (*) (ValaCodeVisitor *, ValaMemberAccess*)) vala_gsignal_module_real_visit_member_access;
	((ValaCodeVisitorClass *) klass)->visit_method_call = (void (*) (ValaCodeVisitor *, ValaMethodCall*)) vala_gsignal_module_real_visit_method_call;
}


static void vala_gsignal_module_instance_init (ValaGSignalModule * self) {
}


GType vala_gsignal_module_get_type (void) {
	static volatile gsize vala_gsignal_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_gsignal_module_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaGSignalModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gsignal_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGSignalModule), 0, (GInstanceInitFunc) vala_gsignal_module_instance_init, NULL };
		GType vala_gsignal_module_type_id;
		vala_gsignal_module_type_id = g_type_register_static (VALA_TYPE_GOBJECT_MODULE, "ValaGSignalModule", &g_define_type_info, 0);
		g_once_init_leave (&vala_gsignal_module_type_id__volatile, vala_gsignal_module_type_id);
	}
	return vala_gsignal_module_type_id__volatile;
}


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


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



