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

/* valagasyncmodule.vala
 *
 * Copyright (C) 2008-2012  Jürg Billeter
 *
 * 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>
 */

#include <glib.h>
#include <glib-object.h>
#include "valacodegen.h"
#include <vala.h>
#include <valaccode.h>
#include <stdlib.h>
#include <string.h>
#include <valagee.h>
#include <float.h>
#include <math.h>

#define _g_free0(var) (var = (g_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_ccode_base_module_emit_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_base_module_emit_context_unref (var), NULL)))

#define VALA_TYPE_GLIB_VALUE (vala_glib_value_get_type ())
#define VALA_GLIB_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_GLIB_VALUE, ValaGLibValue))
#define VALA_GLIB_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_GLIB_VALUE, ValaGLibValueClass))
#define VALA_IS_GLIB_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_GLIB_VALUE))
#define VALA_IS_GLIB_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_GLIB_VALUE))
#define VALA_GLIB_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_GLIB_VALUE, ValaGLibValueClass))

typedef struct _ValaGLibValue ValaGLibValue;
typedef struct _ValaGLibValueClass ValaGLibValueClass;
typedef struct _ValaGLibValuePrivate ValaGLibValuePrivate;
#define _vala_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)))

struct _ValaGLibValue {
	ValaTargetValue parent_instance;
	ValaGLibValuePrivate * priv;
	ValaCCodeExpression* cvalue;
	gboolean lvalue;
	gboolean non_null;
	gchar* ctype;
	ValaList* array_length_cvalues;
	ValaCCodeExpression* array_size_cvalue;
	gboolean array_null_terminated;
	ValaCCodeExpression* array_length_cexpr;
	ValaCCodeExpression* delegate_target_cvalue;
	ValaCCodeExpression* delegate_target_destroy_notify_cvalue;
};

struct _ValaGLibValueClass {
	ValaTargetValueClass parent_class;
};


static gpointer vala_gasync_module_parent_class = NULL;

static ValaCCodeStruct* vala_gasync_module_generate_data_struct (ValaGAsyncModule* self, ValaMethod* m);
static ValaCCodeFunction* vala_gasync_module_generate_free_function (ValaGAsyncModule* self, ValaMethod* m);
G_GNUC_INTERNAL GType vala_glib_value_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
G_GNUC_INTERNAL ValaGLibValue* vala_glib_value_new (ValaDataType* value_type, ValaCCodeExpression* cvalue, gboolean lvalue);
G_GNUC_INTERNAL ValaGLibValue* vala_glib_value_construct (GType object_type, ValaDataType* value_type, ValaCCodeExpression* cvalue, gboolean lvalue);
static void vala_gasync_module_generate_async_ready_callback_wrapper (ValaGAsyncModule* self, ValaMethod* m, const gchar* function_name);
static void vala_gasync_module_generate_async_function (ValaGAsyncModule* self, ValaMethod* m);
static void vala_gasync_module_append_struct (ValaGAsyncModule* self, ValaCCodeStruct* structure);
static void vala_gasync_module_real_generate_method_declaration (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space);
static void vala_gasync_module_real_visit_method (ValaCodeVisitor* base, ValaMethod* m);
static void vala_gasync_module_generate_finish_function (ValaGAsyncModule* self, ValaMethod* m);
static void vala_gasync_module_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m);
static gchar* vala_gasync_module_real_generate_ready_function (ValaCCodeBaseModule* base, ValaMethod* m);
static void vala_gasync_module_real_generate_virtual_method_declaration (ValaGTypeModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeStruct* type_struct);
static void vala_gasync_module_real_visit_yield_statement (ValaCodeVisitor* base, ValaYieldStatement* stmt);
static void vala_gasync_module_real_return_with_exception (ValaGErrorModule* base, ValaCCodeExpression* error_expr);
static void vala_gasync_module_real_visit_return_statement (ValaCodeVisitor* base, ValaReturnStatement* stmt);
static void vala_gasync_module_real_generate_cparameters (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction);


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


static ValaCCodeStruct* vala_gasync_module_generate_data_struct (ValaGAsyncModule* self, ValaMethod* m) {
	ValaCCodeStruct* result = NULL;
	gchar* dataname = NULL;
	ValaMethod* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeStruct* data = NULL;
	const gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	ValaCCodeStruct* _tmp10_;
	ValaCCodeStruct* _tmp11_;
	ValaCCodeStruct* _tmp12_;
	ValaCCodeStruct* _tmp13_;
	ValaCCodeStruct* _tmp14_;
	ValaCCodeStruct* _tmp15_;
	ValaCodeContext* _tmp16_;
	ValaCodeContext* _tmp17_;
	gboolean _tmp18_;
	ValaMethod* _tmp21_;
	ValaMethod* _tmp23_;
	ValaMemberBinding _tmp24_;
	ValaMemberBinding _tmp25_;
	ValaMethod* _tmp155_;
	ValaDataType* _tmp156_;
	ValaDataType* _tmp157_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (m != NULL, NULL);
	_tmp0_ = m;
	_tmp1_ = vala_get_ccode_name ((ValaCodeNode*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_symbol_lower_case_to_camel_case (_tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strconcat (_tmp4_, "Data", NULL);
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	dataname = _tmp6_;
	_tmp7_ = dataname;
	_tmp8_ = g_strconcat ("_", _tmp7_, NULL);
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_struct_new (_tmp9_);
	_tmp11_ = _tmp10_;
	_g_free0 (_tmp9_);
	data = _tmp11_;
	_tmp12_ = data;
	vala_ccode_struct_add_field (_tmp12_, "int", "_state_", 0, NULL);
	_tmp13_ = data;
	vala_ccode_struct_add_field (_tmp13_, "GObject*", "_source_object_", 0, NULL);
	_tmp14_ = data;
	vala_ccode_struct_add_field (_tmp14_, "GAsyncResult*", "_res_", 0, NULL);
	_tmp15_ = data;
	vala_ccode_struct_add_field (_tmp15_, "GTask*", "_async_result", 0, NULL);
	_tmp16_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_code_context_require_glib_version (_tmp17_, 2, 44);
	if (!_tmp18_) {
		ValaCCodeStruct* _tmp19_;
		ValaCCodeStruct* _tmp20_;
		_tmp19_ = data;
		vala_ccode_struct_add_field (_tmp19_, "GAsyncReadyCallback", "_callback_", 0, NULL);
		_tmp20_ = data;
		vala_ccode_struct_add_field (_tmp20_, "gboolean", "_task_complete_", 0, NULL);
	}
	_tmp21_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_CREATION_METHOD)) {
		ValaCCodeStruct* _tmp22_;
		_tmp22_ = data;
		vala_ccode_struct_add_field (_tmp22_, "GType", "object_type", 0, NULL);
	}
	_tmp23_ = m;
	_tmp24_ = vala_method_get_binding (_tmp23_);
	_tmp25_ = _tmp24_;
	if (_tmp25_ == VALA_MEMBER_BINDING_INSTANCE) {
		ValaTypeSymbol* type_sym = NULL;
		ValaMethod* _tmp26_;
		ValaSymbol* _tmp27_;
		ValaSymbol* _tmp28_;
		ValaTypeSymbol* _tmp29_;
		ValaTypeSymbol* _tmp30_;
		_tmp26_ = m;
		_tmp27_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp26_);
		_tmp28_ = _tmp27_;
		_tmp29_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
		type_sym = _tmp29_;
		_tmp30_ = type_sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, VALA_TYPE_OBJECT_TYPE_SYMBOL)) {
			ValaCCodeStruct* _tmp31_;
			ValaTypeSymbol* _tmp32_;
			gchar* _tmp33_;
			gchar* _tmp34_;
			gchar* _tmp35_;
			gchar* _tmp36_;
			_tmp31_ = data;
			_tmp32_ = type_sym;
			_tmp33_ = vala_get_ccode_name ((ValaCodeNode*) _tmp32_);
			_tmp34_ = _tmp33_;
			_tmp35_ = g_strconcat (_tmp34_, "*", NULL);
			_tmp36_ = _tmp35_;
			vala_ccode_struct_add_field (_tmp31_, _tmp36_, "self", 0, NULL);
			_g_free0 (_tmp36_);
			_g_free0 (_tmp34_);
		} else {
			ValaCCodeStruct* _tmp37_;
			ValaTypeSymbol* _tmp38_;
			gchar* _tmp39_;
			gchar* _tmp40_;
			_tmp37_ = data;
			_tmp38_ = type_sym;
			_tmp39_ = vala_get_ccode_name ((ValaCodeNode*) _tmp38_);
			_tmp40_ = _tmp39_;
			vala_ccode_struct_add_field (_tmp37_, _tmp40_, "self", 0, NULL);
			_g_free0 (_tmp40_);
		}
		_vala_code_node_unref0 (type_sym);
	}
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp41_;
		ValaList* _tmp42_;
		gint _param_size = 0;
		ValaList* _tmp43_;
		gint _tmp44_;
		gint _tmp45_;
		gint _param_index = 0;
		_tmp41_ = m;
		_tmp42_ = vala_callable_get_parameters ((ValaCallable*) _tmp41_);
		_param_list = _tmp42_;
		_tmp43_ = _param_list;
		_tmp44_ = vala_collection_get_size ((ValaCollection*) _tmp43_);
		_tmp45_ = _tmp44_;
		_param_size = _tmp45_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp46_;
			gint _tmp47_;
			gint _tmp48_;
			ValaParameter* param = NULL;
			ValaList* _tmp49_;
			gint _tmp50_;
			gpointer _tmp51_;
			gboolean _tmp52_ = FALSE;
			ValaParameter* _tmp53_;
			ValaDataType* _tmp54_;
			ValaDataType* _tmp55_;
			gboolean is_unowned_delegate = FALSE;
			ValaDataType* param_type = NULL;
			ValaParameter* _tmp61_;
			ValaDataType* _tmp62_;
			ValaDataType* _tmp63_;
			ValaDataType* _tmp64_;
			ValaDataType* _tmp65_;
			ValaCCodeStruct* _tmp66_;
			ValaDataType* _tmp67_;
			gchar* _tmp68_;
			gchar* _tmp69_;
			ValaParameter* _tmp70_;
			const gchar* _tmp71_;
			const gchar* _tmp72_;
			gchar* _tmp73_;
			gchar* _tmp74_;
			ValaParameter* _tmp75_;
			ValaDataType* _tmp76_;
			ValaDataType* _tmp77_;
			_tmp46_ = _param_index;
			_param_index = _tmp46_ + 1;
			_tmp47_ = _param_index;
			_tmp48_ = _param_size;
			if (!(_tmp47_ < _tmp48_)) {
				break;
			}
			_tmp49_ = _param_list;
			_tmp50_ = _param_index;
			_tmp51_ = vala_list_get (_tmp49_, _tmp50_);
			param = (ValaParameter*) _tmp51_;
			_tmp53_ = param;
			_tmp54_ = vala_variable_get_variable_type ((ValaVariable*) _tmp53_);
			_tmp55_ = _tmp54_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaParameter* _tmp56_;
				ValaDataType* _tmp57_;
				ValaDataType* _tmp58_;
				gboolean _tmp59_;
				gboolean _tmp60_;
				_tmp56_ = param;
				_tmp57_ = vala_variable_get_variable_type ((ValaVariable*) _tmp56_);
				_tmp58_ = _tmp57_;
				_tmp59_ = vala_data_type_get_value_owned (_tmp58_);
				_tmp60_ = _tmp59_;
				_tmp52_ = !_tmp60_;
			} else {
				_tmp52_ = FALSE;
			}
			is_unowned_delegate = _tmp52_;
			_tmp61_ = param;
			_tmp62_ = vala_variable_get_variable_type ((ValaVariable*) _tmp61_);
			_tmp63_ = _tmp62_;
			_tmp64_ = vala_data_type_copy (_tmp63_);
			param_type = _tmp64_;
			_tmp65_ = param_type;
			vala_data_type_set_value_owned (_tmp65_, TRUE);
			_tmp66_ = data;
			_tmp67_ = param_type;
			_tmp68_ = vala_get_ccode_name ((ValaCodeNode*) _tmp67_);
			_tmp69_ = _tmp68_;
			_tmp70_ = param;
			_tmp71_ = vala_symbol_get_name ((ValaSymbol*) _tmp70_);
			_tmp72_ = _tmp71_;
			_tmp73_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp72_);
			_tmp74_ = _tmp73_;
			vala_ccode_struct_add_field (_tmp66_, _tmp69_, _tmp74_, 0, NULL);
			_g_free0 (_tmp74_);
			_g_free0 (_tmp69_);
			_tmp75_ = param;
			_tmp76_ = vala_variable_get_variable_type ((ValaVariable*) _tmp75_);
			_tmp77_ = _tmp76_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp77_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* array_type = NULL;
				ValaParameter* _tmp78_;
				ValaDataType* _tmp79_;
				ValaDataType* _tmp80_;
				ValaArrayType* _tmp81_;
				ValaParameter* _tmp82_;
				gboolean _tmp83_;
				_tmp78_ = param;
				_tmp79_ = vala_variable_get_variable_type ((ValaVariable*) _tmp78_);
				_tmp80_ = _tmp79_;
				_tmp81_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp80_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				array_type = _tmp81_;
				_tmp82_ = param;
				_tmp83_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp82_);
				if (_tmp83_) {
					{
						gint dim = 0;
						dim = 1;
						{
							gboolean _tmp84_ = FALSE;
							_tmp84_ = TRUE;
							while (TRUE) {
								gint _tmp86_;
								ValaArrayType* _tmp87_;
								gint _tmp88_;
								gint _tmp89_;
								ValaCCodeStruct* _tmp90_;
								ValaParameter* _tmp91_;
								gint _tmp92_;
								gchar* _tmp93_;
								gchar* _tmp94_;
								if (!_tmp84_) {
									gint _tmp85_;
									_tmp85_ = dim;
									dim = _tmp85_ + 1;
								}
								_tmp84_ = FALSE;
								_tmp86_ = dim;
								_tmp87_ = array_type;
								_tmp88_ = vala_array_type_get_rank (_tmp87_);
								_tmp89_ = _tmp88_;
								if (!(_tmp86_ <= _tmp89_)) {
									break;
								}
								_tmp90_ = data;
								_tmp91_ = param;
								_tmp92_ = dim;
								_tmp93_ = vala_ccode_base_module_get_parameter_array_length_cname ((ValaCCodeBaseModule*) self, _tmp91_, _tmp92_);
								_tmp94_ = _tmp93_;
								vala_ccode_struct_add_field (_tmp90_, "gint", _tmp94_, 0, NULL);
								_g_free0 (_tmp94_);
							}
						}
					}
				}
				_vala_code_node_unref0 (array_type);
			} else {
				ValaParameter* _tmp95_;
				ValaDataType* _tmp96_;
				ValaDataType* _tmp97_;
				_tmp95_ = param;
				_tmp96_ = vala_variable_get_variable_type ((ValaVariable*) _tmp95_);
				_tmp97_ = _tmp96_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp97_, VALA_TYPE_DELEGATE_TYPE)) {
					ValaDelegateType* deleg_type = NULL;
					ValaParameter* _tmp98_;
					ValaDataType* _tmp99_;
					ValaDataType* _tmp100_;
					ValaDelegateType* _tmp101_;
					ValaDelegateType* _tmp102_;
					ValaDelegate* _tmp103_;
					ValaDelegate* _tmp104_;
					gboolean _tmp105_;
					gboolean _tmp106_;
					_tmp98_ = param;
					_tmp99_ = vala_variable_get_variable_type ((ValaVariable*) _tmp98_);
					_tmp100_ = _tmp99_;
					_tmp101_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp100_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
					deleg_type = _tmp101_;
					_tmp102_ = deleg_type;
					_tmp103_ = vala_delegate_type_get_delegate_symbol (_tmp102_);
					_tmp104_ = _tmp103_;
					_tmp105_ = vala_delegate_get_has_target (_tmp104_);
					_tmp106_ = _tmp105_;
					if (_tmp106_) {
						ValaCCodeStruct* _tmp107_;
						ValaParameter* _tmp108_;
						gchar* _tmp109_;
						gchar* _tmp110_;
						gboolean _tmp111_;
						_tmp107_ = data;
						_tmp108_ = param;
						_tmp109_ = vala_get_ccode_delegate_target_name ((ValaVariable*) _tmp108_);
						_tmp110_ = _tmp109_;
						vala_ccode_struct_add_field (_tmp107_, "gpointer", _tmp110_, 0, NULL);
						_g_free0 (_tmp110_);
						_tmp111_ = is_unowned_delegate;
						if (!_tmp111_) {
							ValaCCodeStruct* _tmp112_;
							ValaParameter* _tmp113_;
							const gchar* _tmp114_;
							const gchar* _tmp115_;
							gchar* _tmp116_;
							gchar* _tmp117_;
							gchar* _tmp118_;
							gchar* _tmp119_;
							_tmp112_ = data;
							_tmp113_ = param;
							_tmp114_ = vala_symbol_get_name ((ValaSymbol*) _tmp113_);
							_tmp115_ = _tmp114_;
							_tmp116_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp115_);
							_tmp117_ = _tmp116_;
							_tmp118_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp117_);
							_tmp119_ = _tmp118_;
							vala_ccode_struct_add_field (_tmp112_, "GDestroyNotify", _tmp119_, 0, NULL);
							_g_free0 (_tmp119_);
							_g_free0 (_tmp117_);
						}
					}
					_vala_code_node_unref0 (deleg_type);
				}
			}
			_vala_code_node_unref0 (param_type);
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	{
		ValaList* _type_param_list = NULL;
		ValaMethod* _tmp120_;
		ValaList* _tmp121_;
		gint _type_param_size = 0;
		ValaList* _tmp122_;
		gint _tmp123_;
		gint _tmp124_;
		gint _type_param_index = 0;
		_tmp120_ = m;
		_tmp121_ = vala_method_get_type_parameters (_tmp120_);
		_type_param_list = _tmp121_;
		_tmp122_ = _type_param_list;
		_tmp123_ = vala_collection_get_size ((ValaCollection*) _tmp122_);
		_tmp124_ = _tmp123_;
		_type_param_size = _tmp124_;
		_type_param_index = -1;
		while (TRUE) {
			gint _tmp125_;
			gint _tmp126_;
			gint _tmp127_;
			ValaTypeParameter* type_param = NULL;
			ValaList* _tmp128_;
			gint _tmp129_;
			gpointer _tmp130_;
			ValaCCodeStruct* _tmp131_;
			ValaTypeParameter* _tmp132_;
			const gchar* _tmp133_;
			const gchar* _tmp134_;
			gchar* _tmp135_;
			gchar* _tmp136_;
			gchar* _tmp137_;
			gchar* _tmp138_;
			ValaCCodeStruct* _tmp139_;
			ValaTypeParameter* _tmp140_;
			const gchar* _tmp141_;
			const gchar* _tmp142_;
			gchar* _tmp143_;
			gchar* _tmp144_;
			gchar* _tmp145_;
			gchar* _tmp146_;
			ValaCCodeStruct* _tmp147_;
			ValaTypeParameter* _tmp148_;
			const gchar* _tmp149_;
			const gchar* _tmp150_;
			gchar* _tmp151_;
			gchar* _tmp152_;
			gchar* _tmp153_;
			gchar* _tmp154_;
			_tmp125_ = _type_param_index;
			_type_param_index = _tmp125_ + 1;
			_tmp126_ = _type_param_index;
			_tmp127_ = _type_param_size;
			if (!(_tmp126_ < _tmp127_)) {
				break;
			}
			_tmp128_ = _type_param_list;
			_tmp129_ = _type_param_index;
			_tmp130_ = vala_list_get (_tmp128_, _tmp129_);
			type_param = (ValaTypeParameter*) _tmp130_;
			_tmp131_ = data;
			_tmp132_ = type_param;
			_tmp133_ = vala_symbol_get_name ((ValaSymbol*) _tmp132_);
			_tmp134_ = _tmp133_;
			_tmp135_ = g_utf8_strdown (_tmp134_, (gssize) -1);
			_tmp136_ = _tmp135_;
			_tmp137_ = g_strdup_printf ("%s_type", _tmp136_);
			_tmp138_ = _tmp137_;
			vala_ccode_struct_add_field (_tmp131_, "GType", _tmp138_, 0, NULL);
			_g_free0 (_tmp138_);
			_g_free0 (_tmp136_);
			_tmp139_ = data;
			_tmp140_ = type_param;
			_tmp141_ = vala_symbol_get_name ((ValaSymbol*) _tmp140_);
			_tmp142_ = _tmp141_;
			_tmp143_ = g_utf8_strdown (_tmp142_, (gssize) -1);
			_tmp144_ = _tmp143_;
			_tmp145_ = g_strdup_printf ("%s_dup_func", _tmp144_);
			_tmp146_ = _tmp145_;
			vala_ccode_struct_add_field (_tmp139_, "GBoxedCopyFunc", _tmp146_, 0, NULL);
			_g_free0 (_tmp146_);
			_g_free0 (_tmp144_);
			_tmp147_ = data;
			_tmp148_ = type_param;
			_tmp149_ = vala_symbol_get_name ((ValaSymbol*) _tmp148_);
			_tmp150_ = _tmp149_;
			_tmp151_ = g_utf8_strdown (_tmp150_, (gssize) -1);
			_tmp152_ = _tmp151_;
			_tmp153_ = g_strdup_printf ("%s_destroy_func", _tmp152_);
			_tmp154_ = _tmp153_;
			vala_ccode_struct_add_field (_tmp147_, "GDestroyNotify", _tmp154_, 0, NULL);
			_g_free0 (_tmp154_);
			_g_free0 (_tmp152_);
			_vala_code_node_unref0 (type_param);
		}
		_vala_iterable_unref0 (_type_param_list);
	}
	_tmp155_ = m;
	_tmp156_ = vala_callable_get_return_type ((ValaCallable*) _tmp155_);
	_tmp157_ = _tmp156_;
	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp157_, VALA_TYPE_VOID_TYPE)) {
		ValaCCodeStruct* _tmp158_;
		ValaMethod* _tmp159_;
		ValaDataType* _tmp160_;
		ValaDataType* _tmp161_;
		gchar* _tmp162_;
		gchar* _tmp163_;
		ValaMethod* _tmp164_;
		ValaDataType* _tmp165_;
		ValaDataType* _tmp166_;
		_tmp158_ = data;
		_tmp159_ = m;
		_tmp160_ = vala_callable_get_return_type ((ValaCallable*) _tmp159_);
		_tmp161_ = _tmp160_;
		_tmp162_ = vala_get_ccode_name ((ValaCodeNode*) _tmp161_);
		_tmp163_ = _tmp162_;
		vala_ccode_struct_add_field (_tmp158_, _tmp163_, "result", 0, NULL);
		_g_free0 (_tmp163_);
		_tmp164_ = m;
		_tmp165_ = vala_callable_get_return_type ((ValaCallable*) _tmp164_);
		_tmp166_ = _tmp165_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp166_, VALA_TYPE_ARRAY_TYPE)) {
			ValaArrayType* array_type = NULL;
			ValaMethod* _tmp167_;
			ValaDataType* _tmp168_;
			ValaDataType* _tmp169_;
			ValaArrayType* _tmp170_;
			ValaMethod* _tmp171_;
			gboolean _tmp172_;
			_tmp167_ = m;
			_tmp168_ = vala_callable_get_return_type ((ValaCallable*) _tmp167_);
			_tmp169_ = _tmp168_;
			_tmp170_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp169_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array_type = _tmp170_;
			_tmp171_ = m;
			_tmp172_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp171_);
			if (_tmp172_) {
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp173_ = FALSE;
						_tmp173_ = TRUE;
						while (TRUE) {
							gint _tmp175_;
							ValaArrayType* _tmp176_;
							gint _tmp177_;
							gint _tmp178_;
							ValaCCodeStruct* _tmp179_;
							gint _tmp180_;
							gchar* _tmp181_;
							gchar* _tmp182_;
							if (!_tmp173_) {
								gint _tmp174_;
								_tmp174_ = dim;
								dim = _tmp174_ + 1;
							}
							_tmp173_ = FALSE;
							_tmp175_ = dim;
							_tmp176_ = array_type;
							_tmp177_ = vala_array_type_get_rank (_tmp176_);
							_tmp178_ = _tmp177_;
							if (!(_tmp175_ <= _tmp178_)) {
								break;
							}
							_tmp179_ = data;
							_tmp180_ = dim;
							_tmp181_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp180_);
							_tmp182_ = _tmp181_;
							vala_ccode_struct_add_field (_tmp179_, "gint", _tmp182_, 0, NULL);
							_g_free0 (_tmp182_);
						}
					}
				}
			}
			_vala_code_node_unref0 (array_type);
		} else {
			ValaMethod* _tmp183_;
			ValaDataType* _tmp184_;
			ValaDataType* _tmp185_;
			_tmp183_ = m;
			_tmp184_ = vala_callable_get_return_type ((ValaCallable*) _tmp183_);
			_tmp185_ = _tmp184_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp185_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaDelegateType* deleg_type = NULL;
				ValaMethod* _tmp186_;
				ValaDataType* _tmp187_;
				ValaDataType* _tmp188_;
				ValaDelegateType* _tmp189_;
				ValaDelegateType* _tmp190_;
				ValaDelegate* _tmp191_;
				ValaDelegate* _tmp192_;
				gboolean _tmp193_;
				gboolean _tmp194_;
				_tmp186_ = m;
				_tmp187_ = vala_callable_get_return_type ((ValaCallable*) _tmp186_);
				_tmp188_ = _tmp187_;
				_tmp189_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp188_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				deleg_type = _tmp189_;
				_tmp190_ = deleg_type;
				_tmp191_ = vala_delegate_type_get_delegate_symbol (_tmp190_);
				_tmp192_ = _tmp191_;
				_tmp193_ = vala_delegate_get_has_target (_tmp192_);
				_tmp194_ = _tmp193_;
				if (_tmp194_) {
					ValaCCodeStruct* _tmp195_;
					gchar* _tmp196_;
					gchar* _tmp197_;
					ValaCCodeStruct* _tmp198_;
					gchar* _tmp199_;
					gchar* _tmp200_;
					_tmp195_ = data;
					_tmp196_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
					_tmp197_ = _tmp196_;
					vala_ccode_struct_add_field (_tmp195_, "gpointer", _tmp197_, 0, NULL);
					_g_free0 (_tmp197_);
					_tmp198_ = data;
					_tmp199_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, "result");
					_tmp200_ = _tmp199_;
					vala_ccode_struct_add_field (_tmp198_, "GDestroyNotify", _tmp200_, 0, NULL);
					_g_free0 (_tmp200_);
				}
				_vala_code_node_unref0 (deleg_type);
			}
		}
	}
	result = data;
	_g_free0 (dataname);
	return result;
}


static ValaCCodeFunction* vala_gasync_module_generate_free_function (ValaGAsyncModule* self, ValaMethod* m) {
	ValaCCodeFunction* result = NULL;
	gchar* dataname = NULL;
	ValaMethod* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeFunction* freefunc = NULL;
	ValaMethod* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeParameter* _tmp16_;
	ValaCCodeParameter* _tmp17_;
	ValaMethod* _tmp18_;
	ValaCCodeBaseModuleEmitContext* _tmp19_;
	ValaCCodeBaseModuleEmitContext* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	const gchar* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	ValaCCodeIdentifier* _tmp27_;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeVariableDeclarator* _tmp29_;
	ValaCCodeVariableDeclarator* _tmp30_;
	ValaMethod* _tmp66_;
	ValaDataType* _tmp67_;
	ValaDataType* _tmp68_;
	gboolean _tmp69_;
	ValaMethod* _tmp100_;
	ValaMemberBinding _tmp101_;
	ValaMemberBinding _tmp102_;
	ValaCCodeFunctionCall* freecall = NULL;
	ValaCCodeIdentifier* _tmp119_;
	ValaCCodeIdentifier* _tmp120_;
	ValaCCodeFunctionCall* _tmp121_;
	ValaCCodeFunctionCall* _tmp122_;
	const gchar* _tmp123_;
	ValaCCodeIdentifier* _tmp124_;
	ValaCCodeIdentifier* _tmp125_;
	ValaCCodeIdentifier* _tmp126_;
	ValaCCodeIdentifier* _tmp127_;
	ValaCCodeFunction* _tmp128_;
	ValaCCodeFunction* _tmp129_;
	ValaCCodeFile* _tmp130_;
	ValaCCodeFunction* _tmp131_;
	ValaCCodeFile* _tmp132_;
	ValaCCodeFunction* _tmp133_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (m != NULL, NULL);
	_tmp0_ = m;
	_tmp1_ = vala_get_ccode_name ((ValaCodeNode*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_symbol_lower_case_to_camel_case (_tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strconcat (_tmp4_, "Data", NULL);
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	dataname = _tmp6_;
	_tmp7_ = m;
	_tmp8_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strconcat (_tmp9_, "_data_free", NULL);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_function_new (_tmp11_, "void");
	_tmp13_ = _tmp12_;
	_g_free0 (_tmp11_);
	_g_free0 (_tmp9_);
	freefunc = _tmp13_;
	_tmp14_ = freefunc;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp14_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp15_ = freefunc;
	_tmp16_ = vala_ccode_parameter_new ("_data", "gpointer");
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_parameter (_tmp15_, _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_tmp18_ = m;
	_tmp19_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) _tmp18_);
	_tmp20_ = _tmp19_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp20_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp20_);
	_tmp21_ = freefunc;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp21_);
	_tmp22_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp23_ = _tmp22_;
	_tmp24_ = dataname;
	_tmp25_ = g_strconcat (_tmp24_, "*", NULL);
	_tmp26_ = _tmp25_;
	_tmp27_ = vala_ccode_identifier_new ("_data");
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_variable_declarator_new ("_data_", (ValaCCodeExpression*) _tmp28_, NULL);
	_tmp30_ = _tmp29_;
	vala_ccode_function_add_declaration (_tmp23_, _tmp26_, (ValaCCodeDeclarator*) _tmp30_, 0);
	_vala_ccode_node_unref0 (_tmp30_);
	_vala_ccode_node_unref0 (_tmp28_);
	_g_free0 (_tmp26_);
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp31_;
		ValaList* _tmp32_;
		gint _param_size = 0;
		ValaList* _tmp33_;
		gint _tmp34_;
		gint _tmp35_;
		gint _param_index = 0;
		_tmp31_ = m;
		_tmp32_ = vala_callable_get_parameters ((ValaCallable*) _tmp31_);
		_param_list = _tmp32_;
		_tmp33_ = _param_list;
		_tmp34_ = vala_collection_get_size ((ValaCollection*) _tmp33_);
		_tmp35_ = _tmp34_;
		_param_size = _tmp35_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp36_;
			gint _tmp37_;
			gint _tmp38_;
			ValaParameter* param = NULL;
			ValaList* _tmp39_;
			gint _tmp40_;
			gpointer _tmp41_;
			gboolean _tmp42_ = FALSE;
			ValaParameter* _tmp43_;
			gboolean _tmp44_;
			gboolean _tmp45_;
			_tmp36_ = _param_index;
			_param_index = _tmp36_ + 1;
			_tmp37_ = _param_index;
			_tmp38_ = _param_size;
			if (!(_tmp37_ < _tmp38_)) {
				break;
			}
			_tmp39_ = _param_list;
			_tmp40_ = _param_index;
			_tmp41_ = vala_list_get (_tmp39_, _tmp40_);
			param = (ValaParameter*) _tmp41_;
			_tmp43_ = param;
			_tmp44_ = vala_parameter_get_captured (_tmp43_);
			_tmp45_ = _tmp44_;
			if (!_tmp45_) {
				ValaParameter* _tmp46_;
				ValaParameterDirection _tmp47_;
				ValaParameterDirection _tmp48_;
				_tmp46_ = param;
				_tmp47_ = vala_parameter_get_direction (_tmp46_);
				_tmp48_ = _tmp47_;
				_tmp42_ = _tmp48_ != VALA_PARAMETER_DIRECTION_OUT;
			} else {
				_tmp42_ = FALSE;
			}
			if (_tmp42_) {
				ValaDataType* param_type = NULL;
				ValaParameter* _tmp49_;
				ValaDataType* _tmp50_;
				ValaDataType* _tmp51_;
				ValaDataType* _tmp52_;
				ValaDataType* _tmp53_;
				gboolean _tmp54_;
				gboolean _tmp55_;
				ValaDataType* _tmp59_;
				gboolean _tmp60_;
				_tmp49_ = param;
				_tmp50_ = vala_variable_get_variable_type ((ValaVariable*) _tmp49_);
				_tmp51_ = _tmp50_;
				_tmp52_ = vala_data_type_copy (_tmp51_);
				param_type = _tmp52_;
				_tmp53_ = param_type;
				_tmp54_ = vala_data_type_get_value_owned (_tmp53_);
				_tmp55_ = _tmp54_;
				if (!_tmp55_) {
					ValaDataType* _tmp56_;
					ValaDataType* _tmp57_;
					gboolean _tmp58_;
					_tmp56_ = param_type;
					_tmp57_ = param_type;
					_tmp58_ = vala_ccode_base_module_no_implicit_copy ((ValaCCodeBaseModule*) self, _tmp57_);
					vala_data_type_set_value_owned (_tmp56_, !_tmp58_);
				}
				_tmp59_ = param_type;
				_tmp60_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp59_);
				if (_tmp60_) {
					ValaCCodeFunction* _tmp61_;
					ValaCCodeFunction* _tmp62_;
					ValaParameter* _tmp63_;
					ValaCCodeExpression* _tmp64_;
					ValaCCodeExpression* _tmp65_;
					_tmp61_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp62_ = _tmp61_;
					_tmp63_ = param;
					_tmp64_ = vala_ccode_base_module_destroy_parameter ((ValaCCodeBaseModule*) self, _tmp63_);
					_tmp65_ = _tmp64_;
					vala_ccode_function_add_expression (_tmp62_, _tmp65_);
					_vala_ccode_node_unref0 (_tmp65_);
				}
				_vala_code_node_unref0 (param_type);
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp66_ = m;
	_tmp67_ = vala_callable_get_return_type ((ValaCallable*) _tmp66_);
	_tmp68_ = _tmp67_;
	_tmp69_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp68_);
	if (_tmp69_) {
		gboolean _tmp70_ = FALSE;
		ValaMethod* _tmp71_;
		gboolean _tmp72_;
		_tmp71_ = m;
		_tmp72_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp71_);
		if (_tmp72_) {
			_tmp70_ = TRUE;
		} else {
			ValaMethod* _tmp73_;
			ValaDataType* _tmp74_;
			ValaDataType* _tmp75_;
			_tmp73_ = m;
			_tmp74_ = vala_callable_get_return_type ((ValaCallable*) _tmp73_);
			_tmp75_ = _tmp74_;
			_tmp70_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp75_, VALA_TYPE_ARRAY_TYPE);
		}
		if (_tmp70_) {
			ValaLocalVariable* v = NULL;
			ValaMethod* _tmp76_;
			ValaDataType* _tmp77_;
			ValaDataType* _tmp78_;
			ValaLocalVariable* _tmp79_;
			ValaCCodeFunction* _tmp80_;
			ValaCCodeFunction* _tmp81_;
			ValaLocalVariable* _tmp82_;
			ValaCCodeExpression* _tmp83_;
			ValaCCodeExpression* _tmp84_;
			_tmp76_ = m;
			_tmp77_ = vala_callable_get_return_type ((ValaCallable*) _tmp76_);
			_tmp78_ = _tmp77_;
			_tmp79_ = vala_local_variable_new (_tmp78_, ".result", NULL, NULL);
			v = _tmp79_;
			_tmp80_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp81_ = _tmp80_;
			_tmp82_ = v;
			_tmp83_ = vala_ccode_base_module_destroy_local ((ValaCCodeBaseModule*) self, _tmp82_);
			_tmp84_ = _tmp83_;
			vala_ccode_function_add_expression (_tmp81_, _tmp84_);
			_vala_ccode_node_unref0 (_tmp84_);
			_vala_code_node_unref0 (v);
		} else {
			ValaGLibValue* v = NULL;
			ValaMethod* _tmp85_;
			ValaDataType* _tmp86_;
			ValaDataType* _tmp87_;
			ValaCCodeIdentifier* _tmp88_;
			ValaCCodeIdentifier* _tmp89_;
			ValaGLibValue* _tmp90_;
			ValaGLibValue* _tmp91_;
			ValaGLibValue* _tmp92_;
			ValaMethod* _tmp93_;
			gboolean _tmp94_;
			ValaCCodeFunction* _tmp95_;
			ValaCCodeFunction* _tmp96_;
			ValaGLibValue* _tmp97_;
			ValaCCodeExpression* _tmp98_;
			ValaCCodeExpression* _tmp99_;
			_tmp85_ = m;
			_tmp86_ = vala_callable_get_return_type ((ValaCallable*) _tmp85_);
			_tmp87_ = _tmp86_;
			_tmp88_ = vala_ccode_identifier_new ("_data_->result");
			_tmp89_ = _tmp88_;
			_tmp90_ = vala_glib_value_new (_tmp87_, (ValaCCodeExpression*) _tmp89_, TRUE);
			_tmp91_ = _tmp90_;
			_vala_ccode_node_unref0 (_tmp89_);
			v = _tmp91_;
			_tmp92_ = v;
			_tmp93_ = m;
			_tmp94_ = vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp93_);
			_tmp92_->array_null_terminated = _tmp94_;
			_tmp95_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp96_ = _tmp95_;
			_tmp97_ = v;
			_tmp98_ = vala_ccode_base_module_destroy_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp97_, FALSE);
			_tmp99_ = _tmp98_;
			vala_ccode_function_add_expression (_tmp96_, _tmp99_);
			_vala_ccode_node_unref0 (_tmp99_);
			_vala_target_value_unref0 (v);
		}
	}
	_tmp100_ = m;
	_tmp101_ = vala_method_get_binding (_tmp100_);
	_tmp102_ = _tmp101_;
	if (_tmp102_ == VALA_MEMBER_BINDING_INSTANCE) {
		ValaDataType* this_type = NULL;
		ValaMethod* _tmp103_;
		ValaParameter* _tmp104_;
		ValaParameter* _tmp105_;
		ValaDataType* _tmp106_;
		ValaDataType* _tmp107_;
		ValaDataType* _tmp108_;
		ValaDataType* _tmp109_;
		ValaDataType* _tmp110_;
		gboolean _tmp111_;
		_tmp103_ = m;
		_tmp104_ = vala_method_get_this_parameter (_tmp103_);
		_tmp105_ = _tmp104_;
		_tmp106_ = vala_variable_get_variable_type ((ValaVariable*) _tmp105_);
		_tmp107_ = _tmp106_;
		_tmp108_ = vala_data_type_copy (_tmp107_);
		this_type = _tmp108_;
		_tmp109_ = this_type;
		vala_data_type_set_value_owned (_tmp109_, TRUE);
		_tmp110_ = this_type;
		_tmp111_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp110_);
		if (_tmp111_) {
			ValaCCodeFunction* _tmp112_;
			ValaCCodeFunction* _tmp113_;
			ValaMethod* _tmp114_;
			ValaParameter* _tmp115_;
			ValaParameter* _tmp116_;
			ValaCCodeExpression* _tmp117_;
			ValaCCodeExpression* _tmp118_;
			_tmp112_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp113_ = _tmp112_;
			_tmp114_ = m;
			_tmp115_ = vala_method_get_this_parameter (_tmp114_);
			_tmp116_ = _tmp115_;
			_tmp117_ = vala_ccode_base_module_destroy_parameter ((ValaCCodeBaseModule*) self, _tmp116_);
			_tmp118_ = _tmp117_;
			vala_ccode_function_add_expression (_tmp113_, _tmp118_);
			_vala_ccode_node_unref0 (_tmp118_);
		}
		_vala_code_node_unref0 (this_type);
	}
	_tmp119_ = vala_ccode_identifier_new ("g_slice_free");
	_tmp120_ = _tmp119_;
	_tmp121_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp120_);
	_tmp122_ = _tmp121_;
	_vala_ccode_node_unref0 (_tmp120_);
	freecall = _tmp122_;
	_tmp123_ = dataname;
	_tmp124_ = vala_ccode_identifier_new (_tmp123_);
	_tmp125_ = _tmp124_;
	vala_ccode_function_call_add_argument (freecall, (ValaCCodeExpression*) _tmp125_);
	_vala_ccode_node_unref0 (_tmp125_);
	_tmp126_ = vala_ccode_identifier_new ("_data_");
	_tmp127_ = _tmp126_;
	vala_ccode_function_call_add_argument (freecall, (ValaCCodeExpression*) _tmp127_);
	_vala_ccode_node_unref0 (_tmp127_);
	_tmp128_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp129_ = _tmp128_;
	vala_ccode_function_add_expression (_tmp129_, (ValaCCodeExpression*) freecall);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_tmp130_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp131_ = freefunc;
	vala_ccode_file_add_function_declaration (_tmp130_, _tmp131_);
	_tmp132_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp133_ = freefunc;
	vala_ccode_file_add_function (_tmp132_, _tmp133_);
	result = freefunc;
	_vala_ccode_node_unref0 (freecall);
	_g_free0 (dataname);
	return result;
}


static void vala_gasync_module_generate_async_ready_callback_wrapper (ValaGAsyncModule* self, ValaMethod* m, const gchar* function_name) {
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp0_;
	ValaCCodeFunction* _tmp1_;
	ValaCCodeParameter* _tmp2_;
	ValaCCodeParameter* _tmp3_;
	ValaCCodeParameter* _tmp4_;
	ValaCCodeParameter* _tmp5_;
	ValaCCodeParameter* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeFunctionCall* async_result_cast = NULL;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeFunctionCall* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	ValaCCodeIdentifier* _tmp12_;
	ValaCCodeIdentifier* _tmp13_;
	gchar* dataname = NULL;
	ValaMethod* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	ValaCCodeVariableDeclarator* _tmp25_;
	ValaCCodeVariableDeclarator* _tmp26_;
	ValaCCodeFunctionCall* get_data_call = NULL;
	ValaCCodeIdentifier* _tmp27_;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeFunctionCall* _tmp29_;
	ValaCCodeFunctionCall* _tmp30_;
	ValaCCodeIdentifier* data_var = NULL;
	ValaCCodeIdentifier* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeMemberAccess* task_inner_callback = NULL;
	ValaCCodeMemberAccess* _tmp34_;
	ValaCCodeBinaryExpression* callback_is_nonnull = NULL;
	ValaCCodeConstant* _tmp35_;
	ValaCCodeConstant* _tmp36_;
	ValaCCodeBinaryExpression* _tmp37_;
	ValaCCodeBinaryExpression* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	ValaCCodeFunction* _tmp40_;
	ValaCCodeFunctionCall* nested_callback = NULL;
	ValaCCodeFunctionCall* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeIdentifier* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeFunction* _tmp48_;
	ValaCCodeFunction* _tmp49_;
	ValaCCodeFunction* _tmp50_;
	ValaCCodeFunction* _tmp51_;
	ValaCCodeFunction* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeMemberAccess* _tmp54_;
	ValaCCodeMemberAccess* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeConstant* _tmp57_;
	ValaCCodeFile* _tmp58_;
	ValaCCodeFile* _tmp59_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	g_return_if_fail (function_name != NULL);
	_tmp0_ = function_name;
	_tmp1_ = vala_ccode_function_new (_tmp0_, "void");
	function = _tmp1_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) function, VALA_CCODE_MODIFIERS_STATIC);
	_tmp2_ = vala_ccode_parameter_new ("*source_object", "GObject");
	_tmp3_ = _tmp2_;
	vala_ccode_function_add_parameter (function, _tmp3_);
	_vala_ccode_node_unref0 (_tmp3_);
	_tmp4_ = vala_ccode_parameter_new ("*res", "GAsyncResult");
	_tmp5_ = _tmp4_;
	vala_ccode_function_add_parameter (function, _tmp5_);
	_vala_ccode_node_unref0 (_tmp5_);
	_tmp6_ = vala_ccode_parameter_new ("*user_data", "void");
	_tmp7_ = _tmp6_;
	vala_ccode_function_add_parameter (function, _tmp7_);
	_vala_ccode_node_unref0 (_tmp7_);
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, function);
	_tmp8_ = vala_ccode_identifier_new ("G_TASK");
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp9_);
	_tmp11_ = _tmp10_;
	_vala_ccode_node_unref0 (_tmp9_);
	async_result_cast = _tmp11_;
	_tmp12_ = vala_ccode_identifier_new ("res");
	_tmp13_ = _tmp12_;
	vala_ccode_function_call_add_argument (async_result_cast, (ValaCCodeExpression*) _tmp13_);
	_vala_ccode_node_unref0 (_tmp13_);
	_tmp14_ = m;
	_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_symbol_lower_case_to_camel_case (_tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = g_strconcat (_tmp18_, "Data", NULL);
	_tmp20_ = _tmp19_;
	_g_free0 (_tmp18_);
	_g_free0 (_tmp16_);
	dataname = _tmp20_;
	_tmp21_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp22_ = _tmp21_;
	_tmp23_ = g_strconcat (dataname, "*", NULL);
	_tmp24_ = _tmp23_;
	_tmp25_ = vala_ccode_variable_declarator_new ("_task_data_", NULL, NULL);
	_tmp26_ = _tmp25_;
	vala_ccode_function_add_declaration (_tmp22_, _tmp24_, (ValaCCodeDeclarator*) _tmp26_, 0);
	_vala_ccode_node_unref0 (_tmp26_);
	_g_free0 (_tmp24_);
	_tmp27_ = vala_ccode_identifier_new ("g_task_get_task_data");
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp28_);
	_tmp30_ = _tmp29_;
	_vala_ccode_node_unref0 (_tmp28_);
	get_data_call = _tmp30_;
	vala_ccode_function_call_add_argument (get_data_call, (ValaCCodeExpression*) async_result_cast);
	_tmp31_ = vala_ccode_identifier_new ("_task_data_");
	data_var = _tmp31_;
	_tmp32_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp33_ = _tmp32_;
	vala_ccode_function_add_assignment (_tmp33_, (ValaCCodeExpression*) data_var, (ValaCCodeExpression*) get_data_call);
	_tmp34_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) data_var, "_callback_");
	task_inner_callback = _tmp34_;
	_tmp35_ = vala_ccode_constant_new ("NULL");
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) task_inner_callback, (ValaCCodeExpression*) _tmp36_);
	_tmp38_ = _tmp37_;
	_vala_ccode_node_unref0 (_tmp36_);
	callback_is_nonnull = _tmp38_;
	_tmp39_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp40_ = _tmp39_;
	vala_ccode_function_open_if (_tmp40_, (ValaCCodeExpression*) callback_is_nonnull);
	_tmp41_ = vala_ccode_function_call_new ((ValaCCodeExpression*) task_inner_callback);
	nested_callback = _tmp41_;
	_tmp42_ = vala_ccode_identifier_new ("source_object");
	_tmp43_ = _tmp42_;
	vala_ccode_function_call_add_argument (nested_callback, (ValaCCodeExpression*) _tmp43_);
	_vala_ccode_node_unref0 (_tmp43_);
	_tmp44_ = vala_ccode_identifier_new ("res");
	_tmp45_ = _tmp44_;
	vala_ccode_function_call_add_argument (nested_callback, (ValaCCodeExpression*) _tmp45_);
	_vala_ccode_node_unref0 (_tmp45_);
	_tmp46_ = vala_ccode_identifier_new ("user_data");
	_tmp47_ = _tmp46_;
	vala_ccode_function_call_add_argument (nested_callback, (ValaCCodeExpression*) _tmp47_);
	_vala_ccode_node_unref0 (_tmp47_);
	_tmp48_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp49_ = _tmp48_;
	vala_ccode_function_add_expression (_tmp49_, (ValaCCodeExpression*) nested_callback);
	_tmp50_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp51_ = _tmp50_;
	vala_ccode_function_close (_tmp51_);
	_tmp52_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp53_ = _tmp52_;
	_tmp54_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) data_var, "_task_complete_");
	_tmp55_ = _tmp54_;
	_tmp56_ = vala_ccode_constant_new ("TRUE");
	_tmp57_ = _tmp56_;
	vala_ccode_function_add_assignment (_tmp53_, (ValaCCodeExpression*) _tmp55_, (ValaCCodeExpression*) _tmp57_);
	_vala_ccode_node_unref0 (_tmp57_);
	_vala_ccode_node_unref0 (_tmp55_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp58_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function_declaration (_tmp58_, function);
	_tmp59_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_function (_tmp59_, function);
	_vala_ccode_node_unref0 (nested_callback);
	_vala_ccode_node_unref0 (callback_is_nonnull);
	_vala_ccode_node_unref0 (task_inner_callback);
	_vala_ccode_node_unref0 (data_var);
	_vala_ccode_node_unref0 (get_data_call);
	_g_free0 (dataname);
	_vala_ccode_node_unref0 (async_result_cast);
	_vala_ccode_node_unref0 (function);
}


static void vala_gasync_module_generate_async_function (ValaGAsyncModule* self, ValaMethod* m) {
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	gchar* callback_wrapper = NULL;
	ValaCodeContext* _tmp2_;
	ValaCodeContext* _tmp3_;
	gboolean _tmp4_;
	gchar* dataname = NULL;
	ValaMethod* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	ValaCCodeFunction* asyncfunc = NULL;
	ValaMethod* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp23_;
	GEqualFunc _tmp24_;
	GEqualFunc _tmp25_;
	ValaHashMap* _tmp26_;
	ValaHashMap* _tmp27_;
	gint _tmp28_;
	ValaCCodeParameter* _tmp29_;
	ValaCCodeParameter* _tmp30_;
	ValaHashMap* _tmp31_;
	gint _tmp32_;
	ValaCCodeParameter* _tmp33_;
	ValaCCodeParameter* _tmp34_;
	ValaMethod* _tmp35_;
	ValaCCodeFile* _tmp36_;
	ValaHashMap* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	gboolean _tmp39_ = FALSE;
	ValaMethod* _tmp40_;
	ValaMethod* _tmp41_;
	ValaMethod* _tmp42_;
	ValaCCodeFunction* _tmp69_;
	gboolean _tmp70_ = FALSE;
	ValaMethod* _tmp71_;
	gboolean _tmp72_;
	gboolean _tmp73_;
	ValaCCodeFunctionCall* dataalloc = NULL;
	ValaCCodeIdentifier* _tmp131_;
	ValaCCodeIdentifier* _tmp132_;
	ValaCCodeFunctionCall* _tmp133_;
	ValaCCodeFunctionCall* _tmp134_;
	ValaCCodeFunctionCall* _tmp135_;
	const gchar* _tmp136_;
	ValaCCodeIdentifier* _tmp137_;
	ValaCCodeIdentifier* _tmp138_;
	ValaCCodeIdentifier* data_var = NULL;
	ValaCCodeIdentifier* _tmp139_;
	ValaCCodeFunction* _tmp140_;
	ValaCCodeFunction* _tmp141_;
	const gchar* _tmp142_;
	gchar* _tmp143_;
	gchar* _tmp144_;
	ValaCCodeVariableDeclarator* _tmp145_;
	ValaCCodeVariableDeclarator* _tmp146_;
	ValaCCodeFunction* _tmp147_;
	ValaCCodeFunction* _tmp148_;
	ValaCCodeIdentifier* _tmp149_;
	ValaCCodeFunctionCall* _tmp150_;
	ValaCodeContext* _tmp151_;
	ValaCodeContext* _tmp152_;
	gboolean _tmp153_;
	ValaCCodeFunctionCall* create_result = NULL;
	ValaCCodeIdentifier* _tmp161_;
	ValaCCodeIdentifier* _tmp162_;
	ValaCCodeFunctionCall* _tmp163_;
	ValaCCodeFunctionCall* _tmp164_;
	ValaTypeSymbol* t = NULL;
	ValaMethod* _tmp165_;
	ValaSymbol* _tmp166_;
	ValaSymbol* _tmp167_;
	ValaTypeSymbol* _tmp168_;
	gboolean _tmp169_ = FALSE;
	gboolean _tmp170_ = FALSE;
	gboolean _tmp171_ = FALSE;
	ValaMethod* _tmp172_;
	ValaParameter* cancellable_param = NULL;
	ValaParameter* _tmp216_;
	ValaCodeContext* _tmp228_;
	ValaCodeContext* _tmp229_;
	gboolean _tmp230_;
	ValaCCodeFunctionCall* _tmp238_;
	ValaCCodeIdentifier* _tmp239_;
	ValaCCodeIdentifier* _tmp240_;
	ValaCCodeFunction* _tmp241_;
	ValaCCodeFunction* _tmp242_;
	ValaCCodeIdentifier* _tmp243_;
	ValaCCodeMemberAccess* _tmp244_;
	ValaCCodeMemberAccess* _tmp245_;
	ValaCCodeFunctionCall* _tmp246_;
	ValaCodeContext* _tmp247_;
	ValaCodeContext* _tmp248_;
	gboolean _tmp249_;
	ValaCCodeFunctionCall* attach_data_call = NULL;
	ValaCCodeIdentifier* _tmp268_;
	ValaCCodeIdentifier* _tmp269_;
	ValaCCodeFunctionCall* _tmp270_;
	ValaCCodeFunctionCall* _tmp271_;
	ValaCCodeFunctionCall* _tmp272_;
	ValaCCodeIdentifier* _tmp273_;
	ValaCCodeMemberAccess* _tmp274_;
	ValaCCodeMemberAccess* _tmp275_;
	ValaCCodeFunctionCall* _tmp276_;
	ValaCCodeIdentifier* _tmp277_;
	ValaCCodeFunctionCall* _tmp278_;
	ValaMethod* _tmp279_;
	gchar* _tmp280_;
	gchar* _tmp281_;
	gchar* _tmp282_;
	gchar* _tmp283_;
	ValaCCodeIdentifier* _tmp284_;
	ValaCCodeIdentifier* _tmp285_;
	ValaCCodeFunction* _tmp286_;
	ValaCCodeFunction* _tmp287_;
	ValaCCodeFunctionCall* _tmp288_;
	ValaMethod* _tmp289_;
	ValaCCodeBaseModuleEmitContext* _tmp334_;
	ValaMethod* _tmp335_;
	ValaCCodeBaseModuleEmitContext* _tmp371_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaMethod* _tmp431_;
	gchar* _tmp432_;
	gchar* _tmp433_;
	gchar* _tmp434_;
	gchar* _tmp435_;
	ValaCCodeIdentifier* _tmp436_;
	ValaCCodeIdentifier* _tmp437_;
	ValaCCodeFunctionCall* _tmp438_;
	ValaCCodeFunctionCall* _tmp439_;
	ValaCCodeIdentifier* _tmp440_;
	ValaCCodeFunction* _tmp441_;
	ValaCCodeFunction* _tmp442_;
	ValaCCodeFile* _tmp443_;
	ValaCCodeFunction* _tmp444_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	_tmp0_ = vala_ccode_base_module_emit_context_new (NULL);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp1_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
	callback_wrapper = NULL;
	_tmp2_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_code_context_require_glib_version (_tmp3_, 2, 44);
	if (!_tmp4_) {
		ValaMethod* _tmp5_;
		gchar* _tmp6_;
		gchar* _tmp7_;
		gchar* _tmp8_;
		ValaMethod* _tmp9_;
		const gchar* _tmp10_;
		_tmp5_ = m;
		_tmp6_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = g_strconcat (_tmp7_, "_async_ready_wrapper", NULL);
		_g_free0 (callback_wrapper);
		callback_wrapper = _tmp8_;
		_g_free0 (_tmp7_);
		_tmp9_ = m;
		_tmp10_ = callback_wrapper;
		vala_gasync_module_generate_async_ready_callback_wrapper (self, _tmp9_, _tmp10_);
	}
	_tmp11_ = m;
	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_symbol_lower_case_to_camel_case (_tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = g_strconcat (_tmp15_, "Data", NULL);
	_tmp17_ = _tmp16_;
	_g_free0 (_tmp15_);
	_g_free0 (_tmp13_);
	dataname = _tmp17_;
	_tmp18_ = m;
	_tmp19_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp18_);
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_ccode_function_new (_tmp20_, "void");
	_tmp22_ = _tmp21_;
	_g_free0 (_tmp20_);
	asyncfunc = _tmp22_;
	_tmp23_ = g_direct_hash;
	_tmp24_ = g_direct_equal;
	_tmp25_ = g_direct_equal;
	_tmp26_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp23_, _tmp24_, _tmp25_);
	cparam_map = _tmp26_;
	_tmp27_ = cparam_map;
	_tmp28_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) -1, FALSE);
	_tmp29_ = vala_ccode_parameter_new ("_callback_", "GAsyncReadyCallback");
	_tmp30_ = _tmp29_;
	vala_map_set ((ValaMap*) _tmp27_, (gpointer) ((gintptr) _tmp28_), _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_tmp31_ = cparam_map;
	_tmp32_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, -0.9, FALSE);
	_tmp33_ = vala_ccode_parameter_new ("_user_data_", "gpointer");
	_tmp34_ = _tmp33_;
	vala_map_set ((ValaMap*) _tmp31_, (gpointer) ((gintptr) _tmp32_), _tmp34_);
	_vala_ccode_node_unref0 (_tmp34_);
	_tmp35_ = m;
	_tmp36_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp37_ = cparam_map;
	_tmp38_ = asyncfunc;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp35_, _tmp36_, (ValaMap*) _tmp37_, _tmp38_, NULL, NULL, NULL, 1);
	_tmp40_ = m;
	_tmp41_ = vala_method_get_base_method (_tmp40_);
	_tmp42_ = _tmp41_;
	if (_tmp42_ != NULL) {
		_tmp39_ = TRUE;
	} else {
		ValaMethod* _tmp43_;
		ValaMethod* _tmp44_;
		ValaMethod* _tmp45_;
		_tmp43_ = m;
		_tmp44_ = vala_method_get_base_interface_method (_tmp43_);
		_tmp45_ = _tmp44_;
		_tmp39_ = _tmp45_ != NULL;
	}
	if (_tmp39_) {
		ValaCCodeFunction* _tmp46_;
		ValaCCodeFunction* _tmp47_;
		ValaCCodeModifiers _tmp48_;
		ValaCCodeModifiers _tmp49_;
		ValaCCodeFile* _tmp50_;
		ValaCCodeFunction* _tmp51_;
		_tmp46_ = asyncfunc;
		_tmp47_ = asyncfunc;
		_tmp48_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp47_);
		_tmp49_ = _tmp48_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp47_, _tmp49_ | VALA_CCODE_MODIFIERS_STATIC);
		_tmp50_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp51_ = asyncfunc;
		vala_ccode_file_add_function_declaration (_tmp50_, _tmp51_);
	} else {
		ValaMethod* _tmp52_;
		gboolean _tmp53_;
		_tmp52_ = m;
		_tmp53_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp52_);
		if (_tmp53_) {
			ValaCCodeFunction* _tmp54_;
			ValaCCodeFunction* _tmp55_;
			ValaCCodeModifiers _tmp56_;
			ValaCCodeModifiers _tmp57_;
			_tmp54_ = asyncfunc;
			_tmp55_ = asyncfunc;
			_tmp56_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp55_);
			_tmp57_ = _tmp56_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp55_, _tmp57_ | VALA_CCODE_MODIFIERS_STATIC);
		} else {
			gboolean _tmp58_ = FALSE;
			ValaCodeContext* _tmp59_;
			ValaCodeContext* _tmp60_;
			gboolean _tmp61_;
			gboolean _tmp62_;
			_tmp59_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
			_tmp60_ = _tmp59_;
			_tmp61_ = vala_code_context_get_hide_internal (_tmp60_);
			_tmp62_ = _tmp61_;
			if (_tmp62_) {
				ValaMethod* _tmp63_;
				gboolean _tmp64_;
				_tmp63_ = m;
				_tmp64_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp63_);
				_tmp58_ = _tmp64_;
			} else {
				_tmp58_ = FALSE;
			}
			if (_tmp58_) {
				ValaCCodeFunction* _tmp65_;
				ValaCCodeFunction* _tmp66_;
				ValaCCodeModifiers _tmp67_;
				ValaCCodeModifiers _tmp68_;
				_tmp65_ = asyncfunc;
				_tmp66_ = asyncfunc;
				_tmp67_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp66_);
				_tmp68_ = _tmp67_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp66_, _tmp68_ | VALA_CCODE_MODIFIERS_INTERNAL);
			}
		}
	}
	_tmp69_ = asyncfunc;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp69_);
	_tmp71_ = m;
	_tmp72_ = vala_method_get_overrides (_tmp71_);
	_tmp73_ = _tmp72_;
	if (_tmp73_) {
		_tmp70_ = TRUE;
	} else {
		gboolean _tmp74_ = FALSE;
		gboolean _tmp75_ = FALSE;
		ValaMethod* _tmp76_;
		ValaMethod* _tmp77_;
		ValaMethod* _tmp78_;
		_tmp76_ = m;
		_tmp77_ = vala_method_get_base_interface_method (_tmp76_);
		_tmp78_ = _tmp77_;
		if (_tmp78_ != NULL) {
			ValaMethod* _tmp79_;
			gboolean _tmp80_;
			gboolean _tmp81_;
			_tmp79_ = m;
			_tmp80_ = vala_method_get_is_abstract (_tmp79_);
			_tmp81_ = _tmp80_;
			_tmp75_ = !_tmp81_;
		} else {
			_tmp75_ = FALSE;
		}
		if (_tmp75_) {
			ValaMethod* _tmp82_;
			gboolean _tmp83_;
			gboolean _tmp84_;
			_tmp82_ = m;
			_tmp83_ = vala_method_get_is_virtual (_tmp82_);
			_tmp84_ = _tmp83_;
			_tmp74_ = !_tmp84_;
		} else {
			_tmp74_ = FALSE;
		}
		_tmp70_ = _tmp74_;
	}
	if (_tmp70_) {
		ValaMethod* base_method = NULL;
		ValaMethod* _tmp85_;
		gboolean _tmp86_;
		gboolean _tmp87_;
		ValaObjectType* base_expression_type = NULL;
		ValaMethod* _tmp96_;
		ValaSymbol* _tmp97_;
		ValaSymbol* _tmp98_;
		ValaObjectType* _tmp99_;
		ValaObjectTypeSymbol* type_symbol = NULL;
		ValaMethod* _tmp100_;
		ValaSymbol* _tmp101_;
		ValaSymbol* _tmp102_;
		ValaObjectTypeSymbol* _tmp103_;
		ValaObjectType* self_target_type = NULL;
		ValaObjectTypeSymbol* _tmp104_;
		ValaObjectType* _tmp105_;
		ValaCCodeExpression* cself = NULL;
		ValaObjectType* _tmp106_;
		ValaCCodeIdentifier* _tmp107_;
		ValaCCodeIdentifier* _tmp108_;
		ValaGLibValue* _tmp109_;
		ValaGLibValue* _tmp110_;
		ValaObjectType* _tmp111_;
		ValaMethod* _tmp112_;
		ValaTargetValue* _tmp113_;
		ValaTargetValue* _tmp114_;
		ValaCCodeExpression* _tmp115_;
		ValaCCodeExpression* _tmp116_;
		ValaCCodeFunction* _tmp117_;
		ValaCCodeFunction* _tmp118_;
		ValaObjectTypeSymbol* _tmp119_;
		gchar* _tmp120_;
		gchar* _tmp121_;
		gchar* _tmp122_;
		gchar* _tmp123_;
		ValaCCodeVariableDeclarator* _tmp124_;
		ValaCCodeVariableDeclarator* _tmp125_;
		ValaCCodeFunction* _tmp126_;
		ValaCCodeFunction* _tmp127_;
		ValaCCodeIdentifier* _tmp128_;
		ValaCCodeIdentifier* _tmp129_;
		ValaCCodeExpression* _tmp130_;
		_tmp85_ = m;
		_tmp86_ = vala_method_get_overrides (_tmp85_);
		_tmp87_ = _tmp86_;
		if (_tmp87_) {
			ValaMethod* _tmp88_;
			ValaMethod* _tmp89_;
			ValaMethod* _tmp90_;
			ValaMethod* _tmp91_;
			_tmp88_ = m;
			_tmp89_ = vala_method_get_base_method (_tmp88_);
			_tmp90_ = _tmp89_;
			_tmp91_ = _vala_code_node_ref0 (_tmp90_);
			_vala_code_node_unref0 (base_method);
			base_method = _tmp91_;
		} else {
			ValaMethod* _tmp92_;
			ValaMethod* _tmp93_;
			ValaMethod* _tmp94_;
			ValaMethod* _tmp95_;
			_tmp92_ = m;
			_tmp93_ = vala_method_get_base_interface_method (_tmp92_);
			_tmp94_ = _tmp93_;
			_tmp95_ = _vala_code_node_ref0 (_tmp94_);
			_vala_code_node_unref0 (base_method);
			base_method = _tmp95_;
		}
		_tmp96_ = base_method;
		_tmp97_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp96_);
		_tmp98_ = _tmp97_;
		_tmp99_ = vala_object_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp98_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
		base_expression_type = _tmp99_;
		_tmp100_ = m;
		_tmp101_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp100_);
		_tmp102_ = _tmp101_;
		_tmp103_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp102_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp102_) : NULL);
		type_symbol = _tmp103_;
		_tmp104_ = type_symbol;
		_tmp105_ = vala_object_type_new (_tmp104_);
		self_target_type = _tmp105_;
		_tmp106_ = base_expression_type;
		_tmp107_ = vala_ccode_identifier_new ("base");
		_tmp108_ = _tmp107_;
		_tmp109_ = vala_glib_value_new ((ValaDataType*) _tmp106_, (ValaCCodeExpression*) _tmp108_, TRUE);
		_tmp110_ = _tmp109_;
		_tmp111_ = self_target_type;
		_tmp112_ = m;
		_tmp113_ = vala_ccode_base_module_transform_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp110_, (ValaDataType*) _tmp111_, (ValaCodeNode*) _tmp112_);
		_tmp114_ = _tmp113_;
		_tmp115_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp114_);
		_tmp116_ = _tmp115_;
		_vala_target_value_unref0 (_tmp114_);
		_vala_target_value_unref0 (_tmp110_);
		_vala_ccode_node_unref0 (_tmp108_);
		cself = _tmp116_;
		_tmp117_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp118_ = _tmp117_;
		_tmp119_ = type_symbol;
		_tmp120_ = vala_get_ccode_name ((ValaCodeNode*) _tmp119_);
		_tmp121_ = _tmp120_;
		_tmp122_ = g_strdup_printf ("%s *", _tmp121_);
		_tmp123_ = _tmp122_;
		_tmp124_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
		_tmp125_ = _tmp124_;
		vala_ccode_function_add_declaration (_tmp118_, _tmp123_, (ValaCCodeDeclarator*) _tmp125_, 0);
		_vala_ccode_node_unref0 (_tmp125_);
		_g_free0 (_tmp123_);
		_g_free0 (_tmp121_);
		_tmp126_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp127_ = _tmp126_;
		_tmp128_ = vala_ccode_identifier_new ("self");
		_tmp129_ = _tmp128_;
		_tmp130_ = cself;
		vala_ccode_function_add_assignment (_tmp127_, (ValaCCodeExpression*) _tmp129_, _tmp130_);
		_vala_ccode_node_unref0 (_tmp129_);
		_vala_ccode_node_unref0 (cself);
		_vala_code_node_unref0 (self_target_type);
		_vala_code_node_unref0 (type_symbol);
		_vala_code_node_unref0 (base_expression_type);
		_vala_code_node_unref0 (base_method);
	}
	_tmp131_ = vala_ccode_identifier_new ("g_slice_new0");
	_tmp132_ = _tmp131_;
	_tmp133_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp132_);
	_tmp134_ = _tmp133_;
	_vala_ccode_node_unref0 (_tmp132_);
	dataalloc = _tmp134_;
	_tmp135_ = dataalloc;
	_tmp136_ = dataname;
	_tmp137_ = vala_ccode_identifier_new (_tmp136_);
	_tmp138_ = _tmp137_;
	vala_ccode_function_call_add_argument (_tmp135_, (ValaCCodeExpression*) _tmp138_);
	_vala_ccode_node_unref0 (_tmp138_);
	_tmp139_ = vala_ccode_identifier_new ("_data_");
	data_var = _tmp139_;
	_tmp140_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp141_ = _tmp140_;
	_tmp142_ = dataname;
	_tmp143_ = g_strconcat (_tmp142_, "*", NULL);
	_tmp144_ = _tmp143_;
	_tmp145_ = vala_ccode_variable_declarator_new ("_data_", NULL, NULL);
	_tmp146_ = _tmp145_;
	vala_ccode_function_add_declaration (_tmp141_, _tmp144_, (ValaCCodeDeclarator*) _tmp146_, 0);
	_vala_ccode_node_unref0 (_tmp146_);
	_g_free0 (_tmp144_);
	_tmp147_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp148_ = _tmp147_;
	_tmp149_ = data_var;
	_tmp150_ = dataalloc;
	vala_ccode_function_add_assignment (_tmp148_, (ValaCCodeExpression*) _tmp149_, (ValaCCodeExpression*) _tmp150_);
	_tmp151_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp152_ = _tmp151_;
	_tmp153_ = vala_code_context_require_glib_version (_tmp152_, 2, 44);
	if (!_tmp153_) {
		ValaCCodeFunction* _tmp154_;
		ValaCCodeFunction* _tmp155_;
		ValaCCodeIdentifier* _tmp156_;
		ValaCCodeMemberAccess* _tmp157_;
		ValaCCodeMemberAccess* _tmp158_;
		ValaCCodeConstant* _tmp159_;
		ValaCCodeConstant* _tmp160_;
		_tmp154_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp155_ = _tmp154_;
		_tmp156_ = data_var;
		_tmp157_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp156_, "_callback_");
		_tmp158_ = _tmp157_;
		_tmp159_ = vala_ccode_constant_new ("_callback_");
		_tmp160_ = _tmp159_;
		vala_ccode_function_add_assignment (_tmp155_, (ValaCCodeExpression*) _tmp158_, (ValaCCodeExpression*) _tmp160_);
		_vala_ccode_node_unref0 (_tmp160_);
		_vala_ccode_node_unref0 (_tmp158_);
	}
	_tmp161_ = vala_ccode_identifier_new ("g_task_new");
	_tmp162_ = _tmp161_;
	_tmp163_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp162_);
	_tmp164_ = _tmp163_;
	_vala_ccode_node_unref0 (_tmp162_);
	create_result = _tmp164_;
	_tmp165_ = m;
	_tmp166_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp165_);
	_tmp167_ = _tmp166_;
	_tmp168_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp167_, VALA_TYPE_TYPESYMBOL) ? ((ValaTypeSymbol*) _tmp167_) : NULL);
	t = _tmp168_;
	_tmp172_ = m;
	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp172_, VALA_TYPE_CREATION_METHOD)) {
		ValaMethod* _tmp173_;
		ValaMemberBinding _tmp174_;
		ValaMemberBinding _tmp175_;
		_tmp173_ = m;
		_tmp174_ = vala_method_get_binding (_tmp173_);
		_tmp175_ = _tmp174_;
		_tmp171_ = _tmp175_ == VALA_MEMBER_BINDING_INSTANCE;
	} else {
		_tmp171_ = FALSE;
	}
	if (_tmp171_) {
		ValaTypeSymbol* _tmp176_;
		_tmp176_ = t;
		_tmp170_ = _tmp176_ != NULL;
	} else {
		_tmp170_ = FALSE;
	}
	if (_tmp170_) {
		ValaTypeSymbol* _tmp177_;
		ValaTypeSymbol* _tmp178_;
		gboolean _tmp179_;
		_tmp177_ = t;
		_tmp178_ = ((ValaCCodeBaseModule*) self)->gobject_type;
		_tmp179_ = vala_typesymbol_is_subtype_of (_tmp177_, _tmp178_);
		_tmp169_ = _tmp179_;
	} else {
		_tmp169_ = FALSE;
	}
	if (_tmp169_) {
		ValaCCodeFunctionCall* gobject_cast = NULL;
		ValaCCodeIdentifier* _tmp180_;
		ValaCCodeIdentifier* _tmp181_;
		ValaCCodeFunctionCall* _tmp182_;
		ValaCCodeFunctionCall* _tmp183_;
		ValaCCodeFunctionCall* _tmp184_;
		ValaCCodeIdentifier* _tmp185_;
		ValaCCodeIdentifier* _tmp186_;
		ValaCCodeFunctionCall* _tmp187_;
		ValaCCodeFunctionCall* _tmp188_;
		_tmp180_ = vala_ccode_identifier_new ("G_OBJECT");
		_tmp181_ = _tmp180_;
		_tmp182_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp181_);
		_tmp183_ = _tmp182_;
		_vala_ccode_node_unref0 (_tmp181_);
		gobject_cast = _tmp183_;
		_tmp184_ = gobject_cast;
		_tmp185_ = vala_ccode_identifier_new ("self");
		_tmp186_ = _tmp185_;
		vala_ccode_function_call_add_argument (_tmp184_, (ValaCCodeExpression*) _tmp186_);
		_vala_ccode_node_unref0 (_tmp186_);
		_tmp187_ = create_result;
		_tmp188_ = gobject_cast;
		vala_ccode_function_call_add_argument (_tmp187_, (ValaCCodeExpression*) _tmp188_);
		_vala_ccode_node_unref0 (gobject_cast);
	} else {
		ValaCCodeFunctionCall* _tmp189_;
		ValaCCodeConstant* _tmp190_;
		ValaCCodeConstant* _tmp191_;
		_tmp189_ = create_result;
		_tmp190_ = vala_ccode_constant_new ("NULL");
		_tmp191_ = _tmp190_;
		vala_ccode_function_call_add_argument (_tmp189_, (ValaCCodeExpression*) _tmp191_);
		_vala_ccode_node_unref0 (_tmp191_);
	}
	cancellable_param = NULL;
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp192_;
		ValaList* _tmp193_;
		gint _param_size = 0;
		ValaList* _tmp194_;
		gint _tmp195_;
		gint _tmp196_;
		gint _param_index = 0;
		_tmp192_ = m;
		_tmp193_ = vala_callable_get_parameters ((ValaCallable*) _tmp192_);
		_param_list = _tmp193_;
		_tmp194_ = _param_list;
		_tmp195_ = vala_collection_get_size ((ValaCollection*) _tmp194_);
		_tmp196_ = _tmp195_;
		_param_size = _tmp196_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp197_;
			gint _tmp198_;
			gint _tmp199_;
			ValaParameter* param = NULL;
			ValaList* _tmp200_;
			gint _tmp201_;
			gpointer _tmp202_;
			gboolean _tmp203_ = FALSE;
			ValaParameter* _tmp204_;
			ValaDataType* _tmp205_;
			ValaDataType* _tmp206_;
			_tmp197_ = _param_index;
			_param_index = _tmp197_ + 1;
			_tmp198_ = _param_index;
			_tmp199_ = _param_size;
			if (!(_tmp198_ < _tmp199_)) {
				break;
			}
			_tmp200_ = _param_list;
			_tmp201_ = _param_index;
			_tmp202_ = vala_list_get (_tmp200_, _tmp201_);
			param = (ValaParameter*) _tmp202_;
			_tmp204_ = param;
			_tmp205_ = vala_variable_get_variable_type ((ValaVariable*) _tmp204_);
			_tmp206_ = _tmp205_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp206_, VALA_TYPE_OBJECT_TYPE)) {
				ValaParameter* _tmp207_;
				ValaDataType* _tmp208_;
				ValaDataType* _tmp209_;
				ValaTypeSymbol* _tmp210_;
				ValaTypeSymbol* _tmp211_;
				gchar* _tmp212_;
				gchar* _tmp213_;
				_tmp207_ = param;
				_tmp208_ = vala_variable_get_variable_type ((ValaVariable*) _tmp207_);
				_tmp209_ = _tmp208_;
				_tmp210_ = vala_data_type_get_data_type (_tmp209_);
				_tmp211_ = _tmp210_;
				_tmp212_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp211_);
				_tmp213_ = _tmp212_;
				_tmp203_ = g_strcmp0 (_tmp213_, "GLib.Cancellable") == 0;
				_g_free0 (_tmp213_);
			} else {
				_tmp203_ = FALSE;
			}
			if (_tmp203_) {
				ValaParameter* _tmp214_;
				ValaParameter* _tmp215_;
				_tmp214_ = param;
				_tmp215_ = _vala_code_node_ref0 (_tmp214_);
				_vala_code_node_unref0 (cancellable_param);
				cancellable_param = _tmp215_;
				_vala_code_node_unref0 (param);
				break;
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp216_ = cancellable_param;
	if (_tmp216_ == NULL) {
		ValaCCodeFunctionCall* _tmp217_;
		ValaCCodeConstant* _tmp218_;
		ValaCCodeConstant* _tmp219_;
		_tmp217_ = create_result;
		_tmp218_ = vala_ccode_constant_new ("NULL");
		_tmp219_ = _tmp218_;
		vala_ccode_function_call_add_argument (_tmp217_, (ValaCCodeExpression*) _tmp219_);
		_vala_ccode_node_unref0 (_tmp219_);
	} else {
		ValaCCodeFunctionCall* _tmp220_;
		ValaParameter* _tmp221_;
		const gchar* _tmp222_;
		const gchar* _tmp223_;
		gchar* _tmp224_;
		gchar* _tmp225_;
		ValaCCodeIdentifier* _tmp226_;
		ValaCCodeIdentifier* _tmp227_;
		_tmp220_ = create_result;
		_tmp221_ = cancellable_param;
		_tmp222_ = vala_symbol_get_name ((ValaSymbol*) _tmp221_);
		_tmp223_ = _tmp222_;
		_tmp224_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp223_);
		_tmp225_ = _tmp224_;
		_tmp226_ = vala_ccode_identifier_new (_tmp225_);
		_tmp227_ = _tmp226_;
		vala_ccode_function_call_add_argument (_tmp220_, (ValaCCodeExpression*) _tmp227_);
		_vala_ccode_node_unref0 (_tmp227_);
		_g_free0 (_tmp225_);
	}
	_tmp228_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp229_ = _tmp228_;
	_tmp230_ = vala_code_context_require_glib_version (_tmp229_, 2, 44);
	if (_tmp230_) {
		ValaCCodeFunctionCall* _tmp231_;
		ValaCCodeIdentifier* _tmp232_;
		ValaCCodeIdentifier* _tmp233_;
		_tmp231_ = create_result;
		_tmp232_ = vala_ccode_identifier_new ("_callback_");
		_tmp233_ = _tmp232_;
		vala_ccode_function_call_add_argument (_tmp231_, (ValaCCodeExpression*) _tmp233_);
		_vala_ccode_node_unref0 (_tmp233_);
	} else {
		ValaCCodeFunctionCall* _tmp234_;
		const gchar* _tmp235_;
		ValaCCodeIdentifier* _tmp236_;
		ValaCCodeIdentifier* _tmp237_;
		_tmp234_ = create_result;
		_tmp235_ = callback_wrapper;
		_tmp236_ = vala_ccode_identifier_new (_tmp235_);
		_tmp237_ = _tmp236_;
		vala_ccode_function_call_add_argument (_tmp234_, (ValaCCodeExpression*) _tmp237_);
		_vala_ccode_node_unref0 (_tmp237_);
	}
	_tmp238_ = create_result;
	_tmp239_ = vala_ccode_identifier_new ("_user_data_");
	_tmp240_ = _tmp239_;
	vala_ccode_function_call_add_argument (_tmp238_, (ValaCCodeExpression*) _tmp240_);
	_vala_ccode_node_unref0 (_tmp240_);
	_tmp241_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp242_ = _tmp241_;
	_tmp243_ = data_var;
	_tmp244_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp243_, "_async_result");
	_tmp245_ = _tmp244_;
	_tmp246_ = create_result;
	vala_ccode_function_add_assignment (_tmp242_, (ValaCCodeExpression*) _tmp245_, (ValaCCodeExpression*) _tmp246_);
	_vala_ccode_node_unref0 (_tmp245_);
	_tmp247_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp248_ = _tmp247_;
	_tmp249_ = vala_code_context_require_glib_version (_tmp248_, 2, 44);
	if (!_tmp249_) {
		ValaCCodeMemberAccess* task_completed_var = NULL;
		ValaCCodeIdentifier* _tmp250_;
		ValaCCodeMemberAccess* _tmp251_;
		ValaCCodeIdentifier* callback = NULL;
		ValaCCodeIdentifier* _tmp252_;
		ValaCCodeBinaryExpression* callback_is_null = NULL;
		ValaCCodeIdentifier* _tmp253_;
		ValaCCodeConstant* _tmp254_;
		ValaCCodeConstant* _tmp255_;
		ValaCCodeBinaryExpression* _tmp256_;
		ValaCCodeBinaryExpression* _tmp257_;
		ValaCCodeFunction* _tmp258_;
		ValaCCodeFunction* _tmp259_;
		ValaCCodeBinaryExpression* _tmp260_;
		ValaCCodeFunction* _tmp261_;
		ValaCCodeFunction* _tmp262_;
		ValaCCodeMemberAccess* _tmp263_;
		ValaCCodeConstant* _tmp264_;
		ValaCCodeConstant* _tmp265_;
		ValaCCodeFunction* _tmp266_;
		ValaCCodeFunction* _tmp267_;
		_tmp250_ = data_var;
		_tmp251_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp250_, "_task_complete_");
		task_completed_var = _tmp251_;
		_tmp252_ = vala_ccode_identifier_new ("_callback_");
		callback = _tmp252_;
		_tmp253_ = callback;
		_tmp254_ = vala_ccode_constant_new ("NULL");
		_tmp255_ = _tmp254_;
		_tmp256_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp253_, (ValaCCodeExpression*) _tmp255_);
		_tmp257_ = _tmp256_;
		_vala_ccode_node_unref0 (_tmp255_);
		callback_is_null = _tmp257_;
		_tmp258_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp259_ = _tmp258_;
		_tmp260_ = callback_is_null;
		vala_ccode_function_open_if (_tmp259_, (ValaCCodeExpression*) _tmp260_);
		_tmp261_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp262_ = _tmp261_;
		_tmp263_ = task_completed_var;
		_tmp264_ = vala_ccode_constant_new ("TRUE");
		_tmp265_ = _tmp264_;
		vala_ccode_function_add_assignment (_tmp262_, (ValaCCodeExpression*) _tmp263_, (ValaCCodeExpression*) _tmp265_);
		_vala_ccode_node_unref0 (_tmp265_);
		_tmp266_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp267_ = _tmp266_;
		vala_ccode_function_close (_tmp267_);
		_vala_ccode_node_unref0 (callback_is_null);
		_vala_ccode_node_unref0 (callback);
		_vala_ccode_node_unref0 (task_completed_var);
	}
	_tmp268_ = vala_ccode_identifier_new ("g_task_set_task_data");
	_tmp269_ = _tmp268_;
	_tmp270_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp269_);
	_tmp271_ = _tmp270_;
	_vala_ccode_node_unref0 (_tmp269_);
	attach_data_call = _tmp271_;
	_tmp272_ = attach_data_call;
	_tmp273_ = data_var;
	_tmp274_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp273_, "_async_result");
	_tmp275_ = _tmp274_;
	vala_ccode_function_call_add_argument (_tmp272_, (ValaCCodeExpression*) _tmp275_);
	_vala_ccode_node_unref0 (_tmp275_);
	_tmp276_ = attach_data_call;
	_tmp277_ = data_var;
	vala_ccode_function_call_add_argument (_tmp276_, (ValaCCodeExpression*) _tmp277_);
	_tmp278_ = attach_data_call;
	_tmp279_ = m;
	_tmp280_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp279_);
	_tmp281_ = _tmp280_;
	_tmp282_ = g_strconcat (_tmp281_, "_data_free", NULL);
	_tmp283_ = _tmp282_;
	_tmp284_ = vala_ccode_identifier_new (_tmp283_);
	_tmp285_ = _tmp284_;
	vala_ccode_function_call_add_argument (_tmp278_, (ValaCCodeExpression*) _tmp285_);
	_vala_ccode_node_unref0 (_tmp285_);
	_g_free0 (_tmp283_);
	_g_free0 (_tmp281_);
	_tmp286_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp287_ = _tmp286_;
	_tmp288_ = attach_data_call;
	vala_ccode_function_add_expression (_tmp287_, (ValaCCodeExpression*) _tmp288_);
	_tmp289_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp289_, VALA_TYPE_CREATION_METHOD)) {
		ValaCCodeFunction* _tmp290_;
		ValaCCodeFunction* _tmp291_;
		ValaCCodeIdentifier* _tmp292_;
		ValaCCodeMemberAccess* _tmp293_;
		ValaCCodeMemberAccess* _tmp294_;
		ValaCCodeIdentifier* _tmp295_;
		ValaCCodeIdentifier* _tmp296_;
		_tmp290_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp291_ = _tmp290_;
		_tmp292_ = data_var;
		_tmp293_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp292_, "object_type");
		_tmp294_ = _tmp293_;
		_tmp295_ = vala_ccode_identifier_new ("object_type");
		_tmp296_ = _tmp295_;
		vala_ccode_function_add_assignment (_tmp291_, (ValaCCodeExpression*) _tmp294_, (ValaCCodeExpression*) _tmp296_);
		_vala_ccode_node_unref0 (_tmp296_);
		_vala_ccode_node_unref0 (_tmp294_);
	} else {
		ValaMethod* _tmp297_;
		ValaMemberBinding _tmp298_;
		ValaMemberBinding _tmp299_;
		_tmp297_ = m;
		_tmp298_ = vala_method_get_binding (_tmp297_);
		_tmp299_ = _tmp298_;
		if (_tmp299_ == VALA_MEMBER_BINDING_INSTANCE) {
			ValaDataType* this_type = NULL;
			ValaMethod* _tmp300_;
			ValaParameter* _tmp301_;
			ValaParameter* _tmp302_;
			ValaDataType* _tmp303_;
			ValaDataType* _tmp304_;
			ValaDataType* _tmp305_;
			ValaDataType* _tmp306_;
			ValaCCodeExpression* cself = NULL;
			ValaCCodeIdentifier* _tmp307_;
			ValaDataType* _tmp308_;
			gboolean _tmp309_;
			ValaDataType* _tmp312_;
			gboolean _tmp313_;
			ValaCCodeFunction* _tmp328_;
			ValaCCodeFunction* _tmp329_;
			ValaCCodeIdentifier* _tmp330_;
			ValaCCodeMemberAccess* _tmp331_;
			ValaCCodeMemberAccess* _tmp332_;
			ValaCCodeExpression* _tmp333_;
			_tmp300_ = m;
			_tmp301_ = vala_method_get_this_parameter (_tmp300_);
			_tmp302_ = _tmp301_;
			_tmp303_ = vala_variable_get_variable_type ((ValaVariable*) _tmp302_);
			_tmp304_ = _tmp303_;
			_tmp305_ = vala_data_type_copy (_tmp304_);
			this_type = _tmp305_;
			_tmp306_ = this_type;
			vala_data_type_set_value_owned (_tmp306_, TRUE);
			_tmp307_ = vala_ccode_identifier_new ("self");
			cself = (ValaCCodeExpression*) _tmp307_;
			_tmp308_ = this_type;
			_tmp309_ = vala_data_type_is_real_non_null_struct_type (_tmp308_);
			if (_tmp309_) {
				ValaCCodeExpression* _tmp310_;
				ValaCCodeUnaryExpression* _tmp311_;
				_tmp310_ = cself;
				_tmp311_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp310_);
				_vala_ccode_node_unref0 (cself);
				cself = (ValaCCodeExpression*) _tmp311_;
			}
			_tmp312_ = this_type;
			_tmp313_ = vala_ccode_base_module_requires_copy ((ValaCCodeBaseModule*) self, _tmp312_);
			if (_tmp313_) {
				ValaMethod* _tmp314_;
				ValaParameter* _tmp315_;
				ValaParameter* _tmp316_;
				ValaDataType* _tmp317_;
				ValaDataType* _tmp318_;
				ValaCCodeExpression* _tmp319_;
				ValaGLibValue* _tmp320_;
				ValaGLibValue* _tmp321_;
				ValaMethod* _tmp322_;
				ValaParameter* _tmp323_;
				ValaParameter* _tmp324_;
				ValaTargetValue* _tmp325_;
				ValaTargetValue* _tmp326_;
				ValaCCodeExpression* _tmp327_;
				_tmp314_ = m;
				_tmp315_ = vala_method_get_this_parameter (_tmp314_);
				_tmp316_ = _tmp315_;
				_tmp317_ = vala_variable_get_variable_type ((ValaVariable*) _tmp316_);
				_tmp318_ = _tmp317_;
				_tmp319_ = cself;
				_tmp320_ = vala_glib_value_new (_tmp318_, _tmp319_, TRUE);
				_tmp321_ = _tmp320_;
				_tmp322_ = m;
				_tmp323_ = vala_method_get_this_parameter (_tmp322_);
				_tmp324_ = _tmp323_;
				_tmp325_ = vala_ccode_base_module_copy_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp321_, (ValaCodeNode*) _tmp324_);
				_tmp326_ = _tmp325_;
				_tmp327_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp326_);
				_vala_ccode_node_unref0 (cself);
				cself = _tmp327_;
				_vala_target_value_unref0 (_tmp326_);
				_vala_target_value_unref0 (_tmp321_);
			}
			_tmp328_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp329_ = _tmp328_;
			_tmp330_ = data_var;
			_tmp331_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp330_, "self");
			_tmp332_ = _tmp331_;
			_tmp333_ = cself;
			vala_ccode_function_add_assignment (_tmp329_, (ValaCCodeExpression*) _tmp332_, _tmp333_);
			_vala_ccode_node_unref0 (_tmp332_);
			_vala_ccode_node_unref0 (cself);
			_vala_code_node_unref0 (this_type);
		}
	}
	_tmp334_ = ((ValaCCodeBaseModule*) self)->emit_context;
	_tmp335_ = m;
	vala_ccode_base_module_emit_context_push_symbol (_tmp334_, (ValaSymbol*) _tmp335_);
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp336_;
		ValaList* _tmp337_;
		gint _param_size = 0;
		ValaList* _tmp338_;
		gint _tmp339_;
		gint _tmp340_;
		gint _param_index = 0;
		_tmp336_ = m;
		_tmp337_ = vala_callable_get_parameters ((ValaCallable*) _tmp336_);
		_param_list = _tmp337_;
		_tmp338_ = _param_list;
		_tmp339_ = vala_collection_get_size ((ValaCollection*) _tmp338_);
		_tmp340_ = _tmp339_;
		_param_size = _tmp340_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp341_;
			gint _tmp342_;
			gint _tmp343_;
			ValaParameter* param = NULL;
			ValaList* _tmp344_;
			gint _tmp345_;
			gpointer _tmp346_;
			ValaParameter* _tmp347_;
			ValaParameterDirection _tmp348_;
			ValaParameterDirection _tmp349_;
			_tmp341_ = _param_index;
			_param_index = _tmp341_ + 1;
			_tmp342_ = _param_index;
			_tmp343_ = _param_size;
			if (!(_tmp342_ < _tmp343_)) {
				break;
			}
			_tmp344_ = _param_list;
			_tmp345_ = _param_index;
			_tmp346_ = vala_list_get (_tmp344_, _tmp345_);
			param = (ValaParameter*) _tmp346_;
			_tmp347_ = param;
			_tmp348_ = vala_parameter_get_direction (_tmp347_);
			_tmp349_ = _tmp348_;
			if (_tmp349_ != VALA_PARAMETER_DIRECTION_OUT) {
				gboolean old_captured = FALSE;
				ValaParameter* _tmp350_;
				gboolean _tmp351_;
				gboolean _tmp352_;
				ValaParameter* _tmp353_;
				ValaMethod* _tmp354_;
				ValaMethod* _tmp355_;
				ValaTargetValue* value = NULL;
				ValaParameter* _tmp356_;
				ValaDataType* _tmp357_;
				ValaDataType* _tmp358_;
				gboolean _tmp359_;
				gboolean _tmp360_;
				ValaMethod* _tmp365_;
				ValaMethod* _tmp366_;
				ValaParameter* _tmp367_;
				ValaTargetValue* _tmp368_;
				ValaParameter* _tmp369_;
				gboolean _tmp370_;
				_tmp350_ = param;
				_tmp351_ = vala_parameter_get_captured (_tmp350_);
				_tmp352_ = _tmp351_;
				old_captured = _tmp352_;
				_tmp353_ = param;
				vala_parameter_set_captured (_tmp353_, FALSE);
				_tmp354_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
				_tmp355_ = _tmp354_;
				vala_method_set_coroutine (_tmp355_, FALSE);
				_tmp356_ = param;
				_tmp357_ = vala_variable_get_variable_type ((ValaVariable*) _tmp356_);
				_tmp358_ = _tmp357_;
				_tmp359_ = vala_data_type_get_value_owned (_tmp358_);
				_tmp360_ = _tmp359_;
				if (_tmp360_) {
					ValaParameter* _tmp361_;
					ValaTargetValue* _tmp362_;
					_tmp361_ = param;
					_tmp362_ = vala_ccode_base_module_get_parameter_cvalue ((ValaCCodeBaseModule*) self, _tmp361_);
					_vala_target_value_unref0 (value);
					value = _tmp362_;
				} else {
					ValaParameter* _tmp363_;
					ValaTargetValue* _tmp364_;
					_tmp363_ = param;
					_tmp364_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, _tmp363_);
					_vala_target_value_unref0 (value);
					value = _tmp364_;
				}
				_tmp365_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
				_tmp366_ = _tmp365_;
				vala_method_set_coroutine (_tmp366_, TRUE);
				_tmp367_ = param;
				_tmp368_ = value;
				vala_code_generator_store_parameter ((ValaCodeGenerator*) self, _tmp367_, _tmp368_, FALSE, NULL);
				_tmp369_ = param;
				_tmp370_ = old_captured;
				vala_parameter_set_captured (_tmp369_, _tmp370_);
				_vala_target_value_unref0 (value);
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp371_ = ((ValaCCodeBaseModule*) self)->emit_context;
	vala_ccode_base_module_emit_context_pop_symbol (_tmp371_);
	{
		ValaList* _type_param_list = NULL;
		ValaMethod* _tmp372_;
		ValaList* _tmp373_;
		gint _type_param_size = 0;
		ValaList* _tmp374_;
		gint _tmp375_;
		gint _tmp376_;
		gint _type_param_index = 0;
		_tmp372_ = m;
		_tmp373_ = vala_method_get_type_parameters (_tmp372_);
		_type_param_list = _tmp373_;
		_tmp374_ = _type_param_list;
		_tmp375_ = vala_collection_get_size ((ValaCollection*) _tmp374_);
		_tmp376_ = _tmp375_;
		_type_param_size = _tmp376_;
		_type_param_index = -1;
		while (TRUE) {
			gint _tmp377_;
			gint _tmp378_;
			gint _tmp379_;
			ValaTypeParameter* type_param = NULL;
			ValaList* _tmp380_;
			gint _tmp381_;
			gpointer _tmp382_;
			gchar* type = NULL;
			ValaTypeParameter* _tmp383_;
			const gchar* _tmp384_;
			const gchar* _tmp385_;
			gchar* _tmp386_;
			gchar* _tmp387_;
			gchar* _tmp388_;
			gchar* _tmp389_;
			gchar* dup_func = NULL;
			ValaTypeParameter* _tmp390_;
			const gchar* _tmp391_;
			const gchar* _tmp392_;
			gchar* _tmp393_;
			gchar* _tmp394_;
			gchar* _tmp395_;
			gchar* _tmp396_;
			gchar* destroy_func = NULL;
			ValaTypeParameter* _tmp397_;
			const gchar* _tmp398_;
			const gchar* _tmp399_;
			gchar* _tmp400_;
			gchar* _tmp401_;
			gchar* _tmp402_;
			gchar* _tmp403_;
			ValaCCodeFunction* _tmp404_;
			ValaCCodeFunction* _tmp405_;
			ValaCCodeIdentifier* _tmp406_;
			const gchar* _tmp407_;
			ValaCCodeMemberAccess* _tmp408_;
			ValaCCodeMemberAccess* _tmp409_;
			const gchar* _tmp410_;
			ValaCCodeIdentifier* _tmp411_;
			ValaCCodeIdentifier* _tmp412_;
			ValaCCodeFunction* _tmp413_;
			ValaCCodeFunction* _tmp414_;
			ValaCCodeIdentifier* _tmp415_;
			const gchar* _tmp416_;
			ValaCCodeMemberAccess* _tmp417_;
			ValaCCodeMemberAccess* _tmp418_;
			const gchar* _tmp419_;
			ValaCCodeIdentifier* _tmp420_;
			ValaCCodeIdentifier* _tmp421_;
			ValaCCodeFunction* _tmp422_;
			ValaCCodeFunction* _tmp423_;
			ValaCCodeIdentifier* _tmp424_;
			const gchar* _tmp425_;
			ValaCCodeMemberAccess* _tmp426_;
			ValaCCodeMemberAccess* _tmp427_;
			const gchar* _tmp428_;
			ValaCCodeIdentifier* _tmp429_;
			ValaCCodeIdentifier* _tmp430_;
			_tmp377_ = _type_param_index;
			_type_param_index = _tmp377_ + 1;
			_tmp378_ = _type_param_index;
			_tmp379_ = _type_param_size;
			if (!(_tmp378_ < _tmp379_)) {
				break;
			}
			_tmp380_ = _type_param_list;
			_tmp381_ = _type_param_index;
			_tmp382_ = vala_list_get (_tmp380_, _tmp381_);
			type_param = (ValaTypeParameter*) _tmp382_;
			_tmp383_ = type_param;
			_tmp384_ = vala_symbol_get_name ((ValaSymbol*) _tmp383_);
			_tmp385_ = _tmp384_;
			_tmp386_ = g_utf8_strdown (_tmp385_, (gssize) -1);
			_tmp387_ = _tmp386_;
			_tmp388_ = g_strdup_printf ("%s_type", _tmp387_);
			_tmp389_ = _tmp388_;
			_g_free0 (_tmp387_);
			type = _tmp389_;
			_tmp390_ = type_param;
			_tmp391_ = vala_symbol_get_name ((ValaSymbol*) _tmp390_);
			_tmp392_ = _tmp391_;
			_tmp393_ = g_utf8_strdown (_tmp392_, (gssize) -1);
			_tmp394_ = _tmp393_;
			_tmp395_ = g_strdup_printf ("%s_dup_func", _tmp394_);
			_tmp396_ = _tmp395_;
			_g_free0 (_tmp394_);
			dup_func = _tmp396_;
			_tmp397_ = type_param;
			_tmp398_ = vala_symbol_get_name ((ValaSymbol*) _tmp397_);
			_tmp399_ = _tmp398_;
			_tmp400_ = g_utf8_strdown (_tmp399_, (gssize) -1);
			_tmp401_ = _tmp400_;
			_tmp402_ = g_strdup_printf ("%s_destroy_func", _tmp401_);
			_tmp403_ = _tmp402_;
			_g_free0 (_tmp401_);
			destroy_func = _tmp403_;
			_tmp404_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp405_ = _tmp404_;
			_tmp406_ = data_var;
			_tmp407_ = type;
			_tmp408_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp406_, _tmp407_);
			_tmp409_ = _tmp408_;
			_tmp410_ = type;
			_tmp411_ = vala_ccode_identifier_new (_tmp410_);
			_tmp412_ = _tmp411_;
			vala_ccode_function_add_assignment (_tmp405_, (ValaCCodeExpression*) _tmp409_, (ValaCCodeExpression*) _tmp412_);
			_vala_ccode_node_unref0 (_tmp412_);
			_vala_ccode_node_unref0 (_tmp409_);
			_tmp413_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp414_ = _tmp413_;
			_tmp415_ = data_var;
			_tmp416_ = dup_func;
			_tmp417_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp415_, _tmp416_);
			_tmp418_ = _tmp417_;
			_tmp419_ = dup_func;
			_tmp420_ = vala_ccode_identifier_new (_tmp419_);
			_tmp421_ = _tmp420_;
			vala_ccode_function_add_assignment (_tmp414_, (ValaCCodeExpression*) _tmp418_, (ValaCCodeExpression*) _tmp421_);
			_vala_ccode_node_unref0 (_tmp421_);
			_vala_ccode_node_unref0 (_tmp418_);
			_tmp422_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp423_ = _tmp422_;
			_tmp424_ = data_var;
			_tmp425_ = destroy_func;
			_tmp426_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp424_, _tmp425_);
			_tmp427_ = _tmp426_;
			_tmp428_ = destroy_func;
			_tmp429_ = vala_ccode_identifier_new (_tmp428_);
			_tmp430_ = _tmp429_;
			vala_ccode_function_add_assignment (_tmp423_, (ValaCCodeExpression*) _tmp427_, (ValaCCodeExpression*) _tmp430_);
			_vala_ccode_node_unref0 (_tmp430_);
			_vala_ccode_node_unref0 (_tmp427_);
			_g_free0 (destroy_func);
			_g_free0 (dup_func);
			_g_free0 (type);
			_vala_code_node_unref0 (type_param);
		}
		_vala_iterable_unref0 (_type_param_list);
	}
	_tmp431_ = m;
	_tmp432_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp431_);
	_tmp433_ = _tmp432_;
	_tmp434_ = g_strconcat (_tmp433_, "_co", NULL);
	_tmp435_ = _tmp434_;
	_tmp436_ = vala_ccode_identifier_new (_tmp435_);
	_tmp437_ = _tmp436_;
	_tmp438_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp437_);
	_tmp439_ = _tmp438_;
	_vala_ccode_node_unref0 (_tmp437_);
	_g_free0 (_tmp435_);
	_g_free0 (_tmp433_);
	ccall = _tmp439_;
	_tmp440_ = data_var;
	vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp440_);
	_tmp441_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp442_ = _tmp441_;
	vala_ccode_function_add_expression (_tmp442_, (ValaCCodeExpression*) ccall);
	_tmp443_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp444_ = asyncfunc;
	vala_ccode_file_add_function (_tmp443_, _tmp444_);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (attach_data_call);
	_vala_code_node_unref0 (cancellable_param);
	_vala_code_node_unref0 (t);
	_vala_ccode_node_unref0 (create_result);
	_vala_ccode_node_unref0 (data_var);
	_vala_ccode_node_unref0 (dataalloc);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (asyncfunc);
	_g_free0 (dataname);
	_g_free0 (callback_wrapper);
}


static glong string_strnlen (gchar* str, glong maxlen) {
	glong result = 0L;
	gchar* end = NULL;
	gchar* _tmp0_;
	glong _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	_tmp0_ = str;
	_tmp1_ = maxlen;
	_tmp2_ = memchr (_tmp0_, 0, (gsize) _tmp1_);
	end = _tmp2_;
	_tmp3_ = end;
	if (_tmp3_ == NULL) {
		glong _tmp4_;
		_tmp4_ = maxlen;
		result = _tmp4_;
		return result;
	} else {
		gchar* _tmp5_;
		gchar* _tmp6_;
		_tmp5_ = end;
		_tmp6_ = str;
		result = (glong) (_tmp5_ - _tmp6_);
		return result;
	}
}


static gchar* string_substring (const gchar* self, glong offset, glong len) {
	gchar* result = NULL;
	glong string_length = 0L;
	gboolean _tmp0_ = FALSE;
	glong _tmp1_;
	glong _tmp8_;
	glong _tmp14_;
	glong _tmp17_;
	glong _tmp18_;
	glong _tmp19_;
	glong _tmp20_;
	glong _tmp21_;
	gchar* _tmp22_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp1_ = offset;
	if (_tmp1_ >= ((glong) 0)) {
		glong _tmp2_;
		_tmp2_ = len;
		_tmp0_ = _tmp2_ >= ((glong) 0);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		glong _tmp3_;
		glong _tmp4_;
		glong _tmp5_;
		_tmp3_ = offset;
		_tmp4_ = len;
		_tmp5_ = string_strnlen ((gchar*) self, _tmp3_ + _tmp4_);
		string_length = _tmp5_;
	} else {
		gint _tmp6_;
		gint _tmp7_;
		_tmp6_ = strlen (self);
		_tmp7_ = _tmp6_;
		string_length = (glong) _tmp7_;
	}
	_tmp8_ = offset;
	if (_tmp8_ < ((glong) 0)) {
		glong _tmp9_;
		glong _tmp10_;
		glong _tmp11_;
		_tmp9_ = string_length;
		_tmp10_ = offset;
		offset = _tmp9_ + _tmp10_;
		_tmp11_ = offset;
		g_return_val_if_fail (_tmp11_ >= ((glong) 0), NULL);
	} else {
		glong _tmp12_;
		glong _tmp13_;
		_tmp12_ = offset;
		_tmp13_ = string_length;
		g_return_val_if_fail (_tmp12_ <= _tmp13_, NULL);
	}
	_tmp14_ = len;
	if (_tmp14_ < ((glong) 0)) {
		glong _tmp15_;
		glong _tmp16_;
		_tmp15_ = string_length;
		_tmp16_ = offset;
		len = _tmp15_ - _tmp16_;
	}
	_tmp17_ = offset;
	_tmp18_ = len;
	_tmp19_ = string_length;
	g_return_val_if_fail ((_tmp17_ + _tmp18_) <= _tmp19_, NULL);
	_tmp20_ = offset;
	_tmp21_ = len;
	_tmp22_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) _tmp21_);
	result = _tmp22_;
	return result;
}


static void vala_gasync_module_append_struct (ValaGAsyncModule* self, ValaCCodeStruct* structure) {
	ValaCCodeVariableDeclarator* typename = NULL;
	ValaCCodeStruct* _tmp0_;
	const gchar* _tmp1_;
	const gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeVariableDeclarator* _tmp5_;
	ValaCCodeVariableDeclarator* _tmp6_;
	ValaCCodeTypeDefinition* _typedef_ = NULL;
	ValaCCodeStruct* _tmp7_;
	const gchar* _tmp8_;
	const gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeTypeDefinition* _tmp12_;
	ValaCCodeTypeDefinition* _tmp13_;
	ValaCCodeFile* _tmp14_;
	ValaCCodeFile* _tmp15_;
	ValaCCodeStruct* _tmp16_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (structure != NULL);
	_tmp0_ = structure;
	_tmp1_ = vala_ccode_struct_get_name (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = string_substring (_tmp2_, (glong) 1, (glong) -1);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_variable_declarator_new (_tmp4_, NULL, NULL);
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	typename = _tmp6_;
	_tmp7_ = structure;
	_tmp8_ = vala_ccode_struct_get_name (_tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strconcat ("struct ", _tmp9_, NULL);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_type_definition_new (_tmp11_, (ValaCCodeDeclarator*) typename);
	_tmp13_ = _tmp12_;
	_g_free0 (_tmp11_);
	_typedef_ = _tmp13_;
	_tmp14_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_file_add_type_declaration (_tmp14_, (ValaCCodeNode*) _typedef_);
	_tmp15_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp16_ = structure;
	vala_ccode_file_add_type_definition (_tmp15_, (ValaCCodeNode*) _tmp16_);
	_vala_ccode_node_unref0 (_typedef_);
	_vala_ccode_node_unref0 (typename);
}


static void vala_gasync_module_real_generate_method_declaration (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space) {
	ValaGAsyncModule * self;
	ValaMethod* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_coroutine (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		ValaCCodeFile* _tmp3_;
		ValaMethod* _tmp4_;
		ValaMethod* _tmp5_;
		gchar* _tmp6_;
		gchar* _tmp7_;
		gboolean _tmp8_;
		gboolean _tmp9_;
		ValaClass* cl = NULL;
		ValaMethod* _tmp10_;
		ValaSymbol* _tmp11_;
		ValaSymbol* _tmp12_;
		ValaClass* _tmp13_;
		ValaCCodeFunction* asyncfunc = NULL;
		ValaMethod* _tmp14_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		ValaCCodeFunction* _tmp17_;
		ValaCCodeFunction* _tmp18_;
		ValaHashMap* cparam_map = NULL;
		GHashFunc _tmp19_;
		GEqualFunc _tmp20_;
		GEqualFunc _tmp21_;
		ValaHashMap* _tmp22_;
		ValaHashMap* carg_map = NULL;
		GHashFunc _tmp23_;
		GEqualFunc _tmp24_;
		GEqualFunc _tmp25_;
		ValaHashMap* _tmp26_;
		ValaMethod* _tmp27_;
		gboolean _tmp28_;
		gboolean _tmp44_ = FALSE;
		gboolean _tmp45_ = FALSE;
		ValaMethod* _tmp46_;
		ValaCCodeFunction* finishfunc = NULL;
		ValaMethod* _tmp62_;
		gchar* _tmp63_;
		gchar* _tmp64_;
		ValaCCodeFunction* _tmp65_;
		ValaCCodeFunction* _tmp66_;
		GHashFunc _tmp67_;
		GEqualFunc _tmp68_;
		GEqualFunc _tmp69_;
		ValaHashMap* _tmp70_;
		GHashFunc _tmp71_;
		GEqualFunc _tmp72_;
		GEqualFunc _tmp73_;
		ValaHashMap* _tmp74_;
		ValaMethod* _tmp75_;
		gboolean _tmp76_;
		gboolean _tmp92_ = FALSE;
		gboolean _tmp93_ = FALSE;
		ValaMethod* _tmp94_;
		gboolean _tmp110_ = FALSE;
		ValaMethod* _tmp111_;
		_tmp3_ = decl_space;
		_tmp4_ = m;
		_tmp5_ = m;
		_tmp6_ = vala_get_ccode_name ((ValaCodeNode*) _tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_ccode_base_module_add_symbol_declaration ((ValaCCodeBaseModule*) self, _tmp3_, (ValaSymbol*) _tmp4_, _tmp7_);
		_tmp9_ = _tmp8_;
		_g_free0 (_tmp7_);
		if (_tmp9_) {
			return;
		}
		_tmp10_ = m;
		_tmp11_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp10_);
		_tmp12_ = _tmp11_;
		_tmp13_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp12_) : NULL);
		cl = _tmp13_;
		_tmp14_ = m;
		_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
		_tmp16_ = _tmp15_;
		_tmp17_ = vala_ccode_function_new (_tmp16_, "void");
		_tmp18_ = _tmp17_;
		_g_free0 (_tmp16_);
		asyncfunc = _tmp18_;
		_tmp19_ = g_direct_hash;
		_tmp20_ = g_direct_equal;
		_tmp21_ = g_direct_equal;
		_tmp22_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp19_, _tmp20_, _tmp21_);
		cparam_map = _tmp22_;
		_tmp23_ = g_direct_hash;
		_tmp24_ = g_direct_equal;
		_tmp25_ = g_direct_equal;
		_tmp26_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp23_, _tmp24_, _tmp25_);
		carg_map = _tmp26_;
		_tmp27_ = m;
		_tmp28_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp27_);
		if (_tmp28_) {
			ValaCCodeFunction* _tmp29_;
			ValaCCodeFunction* _tmp30_;
			ValaCCodeModifiers _tmp31_;
			ValaCCodeModifiers _tmp32_;
			_tmp29_ = asyncfunc;
			_tmp30_ = asyncfunc;
			_tmp31_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp30_);
			_tmp32_ = _tmp31_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp30_, _tmp32_ | VALA_CCODE_MODIFIERS_STATIC);
		} else {
			gboolean _tmp33_ = FALSE;
			ValaCodeContext* _tmp34_;
			ValaCodeContext* _tmp35_;
			gboolean _tmp36_;
			gboolean _tmp37_;
			_tmp34_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
			_tmp35_ = _tmp34_;
			_tmp36_ = vala_code_context_get_hide_internal (_tmp35_);
			_tmp37_ = _tmp36_;
			if (_tmp37_) {
				ValaMethod* _tmp38_;
				gboolean _tmp39_;
				_tmp38_ = m;
				_tmp39_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp38_);
				_tmp33_ = _tmp39_;
			} else {
				_tmp33_ = FALSE;
			}
			if (_tmp33_) {
				ValaCCodeFunction* _tmp40_;
				ValaCCodeFunction* _tmp41_;
				ValaCCodeModifiers _tmp42_;
				ValaCCodeModifiers _tmp43_;
				_tmp40_ = asyncfunc;
				_tmp41_ = asyncfunc;
				_tmp42_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp41_);
				_tmp43_ = _tmp42_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp41_, _tmp43_ | VALA_CCODE_MODIFIERS_INTERNAL);
			}
		}
		_tmp46_ = m;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, VALA_TYPE_CREATION_METHOD)) {
			ValaClass* _tmp47_;
			_tmp47_ = cl;
			_tmp45_ = _tmp47_ != NULL;
		} else {
			_tmp45_ = FALSE;
		}
		if (_tmp45_) {
			ValaClass* _tmp48_;
			gboolean _tmp49_;
			gboolean _tmp50_;
			_tmp48_ = cl;
			_tmp49_ = vala_class_get_is_abstract (_tmp48_);
			_tmp50_ = _tmp49_;
			_tmp44_ = _tmp50_;
		} else {
			_tmp44_ = FALSE;
		}
		if (!_tmp44_) {
			ValaMethod* _tmp51_;
			ValaCCodeFile* _tmp52_;
			ValaHashMap* _tmp53_;
			ValaCCodeFunction* _tmp54_;
			ValaHashMap* _tmp55_;
			ValaCCodeIdentifier* _tmp56_;
			ValaCCodeIdentifier* _tmp57_;
			ValaCCodeFunctionCall* _tmp58_;
			ValaCCodeFunctionCall* _tmp59_;
			ValaCCodeFile* _tmp60_;
			ValaCCodeFunction* _tmp61_;
			_tmp51_ = m;
			_tmp52_ = decl_space;
			_tmp53_ = cparam_map;
			_tmp54_ = asyncfunc;
			_tmp55_ = carg_map;
			_tmp56_ = vala_ccode_identifier_new ("fake");
			_tmp57_ = _tmp56_;
			_tmp58_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp57_);
			_tmp59_ = _tmp58_;
			vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp51_, _tmp52_, (ValaMap*) _tmp53_, _tmp54_, NULL, (ValaMap*) _tmp55_, _tmp59_, 1);
			_vala_ccode_node_unref0 (_tmp59_);
			_vala_ccode_node_unref0 (_tmp57_);
			_tmp60_ = decl_space;
			_tmp61_ = asyncfunc;
			vala_ccode_file_add_function_declaration (_tmp60_, _tmp61_);
		}
		_tmp62_ = m;
		_tmp63_ = vala_get_ccode_finish_name (_tmp62_);
		_tmp64_ = _tmp63_;
		_tmp65_ = vala_ccode_function_new (_tmp64_, "void");
		_tmp66_ = _tmp65_;
		_g_free0 (_tmp64_);
		finishfunc = _tmp66_;
		_tmp67_ = g_direct_hash;
		_tmp68_ = g_direct_equal;
		_tmp69_ = g_direct_equal;
		_tmp70_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp67_, _tmp68_, _tmp69_);
		_vala_map_unref0 (cparam_map);
		cparam_map = _tmp70_;
		_tmp71_ = g_direct_hash;
		_tmp72_ = g_direct_equal;
		_tmp73_ = g_direct_equal;
		_tmp74_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp71_, _tmp72_, _tmp73_);
		_vala_map_unref0 (carg_map);
		carg_map = _tmp74_;
		_tmp75_ = m;
		_tmp76_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp75_);
		if (_tmp76_) {
			ValaCCodeFunction* _tmp77_;
			ValaCCodeFunction* _tmp78_;
			ValaCCodeModifiers _tmp79_;
			ValaCCodeModifiers _tmp80_;
			_tmp77_ = finishfunc;
			_tmp78_ = finishfunc;
			_tmp79_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp78_);
			_tmp80_ = _tmp79_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp78_, _tmp80_ | VALA_CCODE_MODIFIERS_STATIC);
		} else {
			gboolean _tmp81_ = FALSE;
			ValaCodeContext* _tmp82_;
			ValaCodeContext* _tmp83_;
			gboolean _tmp84_;
			gboolean _tmp85_;
			_tmp82_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
			_tmp83_ = _tmp82_;
			_tmp84_ = vala_code_context_get_hide_internal (_tmp83_);
			_tmp85_ = _tmp84_;
			if (_tmp85_) {
				ValaMethod* _tmp86_;
				gboolean _tmp87_;
				_tmp86_ = m;
				_tmp87_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp86_);
				_tmp81_ = _tmp87_;
			} else {
				_tmp81_ = FALSE;
			}
			if (_tmp81_) {
				ValaCCodeFunction* _tmp88_;
				ValaCCodeFunction* _tmp89_;
				ValaCCodeModifiers _tmp90_;
				ValaCCodeModifiers _tmp91_;
				_tmp88_ = finishfunc;
				_tmp89_ = finishfunc;
				_tmp90_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp89_);
				_tmp91_ = _tmp90_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp89_, _tmp91_ | VALA_CCODE_MODIFIERS_INTERNAL);
			}
		}
		_tmp94_ = m;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp94_, VALA_TYPE_CREATION_METHOD)) {
			ValaClass* _tmp95_;
			_tmp95_ = cl;
			_tmp93_ = _tmp95_ != NULL;
		} else {
			_tmp93_ = FALSE;
		}
		if (_tmp93_) {
			ValaClass* _tmp96_;
			gboolean _tmp97_;
			gboolean _tmp98_;
			_tmp96_ = cl;
			_tmp97_ = vala_class_get_is_abstract (_tmp96_);
			_tmp98_ = _tmp97_;
			_tmp92_ = _tmp98_;
		} else {
			_tmp92_ = FALSE;
		}
		if (!_tmp92_) {
			ValaMethod* _tmp99_;
			ValaCCodeFile* _tmp100_;
			ValaHashMap* _tmp101_;
			ValaCCodeFunction* _tmp102_;
			ValaHashMap* _tmp103_;
			ValaCCodeIdentifier* _tmp104_;
			ValaCCodeIdentifier* _tmp105_;
			ValaCCodeFunctionCall* _tmp106_;
			ValaCCodeFunctionCall* _tmp107_;
			ValaCCodeFile* _tmp108_;
			ValaCCodeFunction* _tmp109_;
			_tmp99_ = m;
			_tmp100_ = decl_space;
			_tmp101_ = cparam_map;
			_tmp102_ = finishfunc;
			_tmp103_ = carg_map;
			_tmp104_ = vala_ccode_identifier_new ("fake");
			_tmp105_ = _tmp104_;
			_tmp106_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp105_);
			_tmp107_ = _tmp106_;
			vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp99_, _tmp100_, (ValaMap*) _tmp101_, _tmp102_, NULL, (ValaMap*) _tmp103_, _tmp107_, 2);
			_vala_ccode_node_unref0 (_tmp107_);
			_vala_ccode_node_unref0 (_tmp105_);
			_tmp108_ = decl_space;
			_tmp109_ = finishfunc;
			vala_ccode_file_add_function_declaration (_tmp108_, _tmp109_);
		}
		_tmp111_ = m;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp111_, VALA_TYPE_CREATION_METHOD)) {
			ValaClass* _tmp112_;
			_tmp112_ = cl;
			_tmp110_ = _tmp112_ != NULL;
		} else {
			_tmp110_ = FALSE;
		}
		if (_tmp110_) {
			ValaCCodeFunction* function = NULL;
			ValaMethod* _tmp113_;
			gchar* _tmp114_;
			gchar* _tmp115_;
			ValaCCodeFunction* _tmp116_;
			ValaCCodeFunction* _tmp117_;
			ValaMethod* _tmp118_;
			gboolean _tmp119_;
			GHashFunc _tmp135_;
			GEqualFunc _tmp136_;
			GEqualFunc _tmp137_;
			ValaHashMap* _tmp138_;
			ValaMethod* _tmp139_;
			ValaCCodeFile* _tmp140_;
			ValaHashMap* _tmp141_;
			ValaCCodeFunction* _tmp142_;
			ValaCCodeFile* _tmp143_;
			ValaCCodeFunction* _tmp144_;
			ValaMethod* _tmp145_;
			gchar* _tmp146_;
			gchar* _tmp147_;
			ValaCCodeFunction* _tmp148_;
			ValaMethod* _tmp149_;
			gboolean _tmp150_;
			GHashFunc _tmp166_;
			GEqualFunc _tmp167_;
			GEqualFunc _tmp168_;
			ValaHashMap* _tmp169_;
			ValaMethod* _tmp170_;
			ValaCCodeFile* _tmp171_;
			ValaHashMap* _tmp172_;
			ValaCCodeFunction* _tmp173_;
			ValaCCodeFile* _tmp174_;
			ValaCCodeFunction* _tmp175_;
			_tmp113_ = m;
			_tmp114_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp113_);
			_tmp115_ = _tmp114_;
			_tmp116_ = vala_ccode_function_new (_tmp115_, "void");
			_tmp117_ = _tmp116_;
			_g_free0 (_tmp115_);
			function = _tmp117_;
			_tmp118_ = m;
			_tmp119_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp118_);
			if (_tmp119_) {
				ValaCCodeFunction* _tmp120_;
				ValaCCodeFunction* _tmp121_;
				ValaCCodeModifiers _tmp122_;
				ValaCCodeModifiers _tmp123_;
				_tmp120_ = function;
				_tmp121_ = function;
				_tmp122_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp121_);
				_tmp123_ = _tmp122_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp121_, _tmp123_ | VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp124_ = FALSE;
				ValaCodeContext* _tmp125_;
				ValaCodeContext* _tmp126_;
				gboolean _tmp127_;
				gboolean _tmp128_;
				_tmp125_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp126_ = _tmp125_;
				_tmp127_ = vala_code_context_get_hide_internal (_tmp126_);
				_tmp128_ = _tmp127_;
				if (_tmp128_) {
					ValaMethod* _tmp129_;
					gboolean _tmp130_;
					_tmp129_ = m;
					_tmp130_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp129_);
					_tmp124_ = _tmp130_;
				} else {
					_tmp124_ = FALSE;
				}
				if (_tmp124_) {
					ValaCCodeFunction* _tmp131_;
					ValaCCodeFunction* _tmp132_;
					ValaCCodeModifiers _tmp133_;
					ValaCCodeModifiers _tmp134_;
					_tmp131_ = function;
					_tmp132_ = function;
					_tmp133_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp132_);
					_tmp134_ = _tmp133_;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp132_, _tmp134_ | VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp135_ = g_direct_hash;
			_tmp136_ = g_direct_equal;
			_tmp137_ = g_direct_equal;
			_tmp138_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp135_, _tmp136_, _tmp137_);
			_vala_map_unref0 (cparam_map);
			cparam_map = _tmp138_;
			_tmp139_ = m;
			_tmp140_ = decl_space;
			_tmp141_ = cparam_map;
			_tmp142_ = function;
			vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp139_, _tmp140_, (ValaMap*) _tmp141_, _tmp142_, NULL, NULL, NULL, 1);
			_tmp143_ = decl_space;
			_tmp144_ = function;
			vala_ccode_file_add_function_declaration (_tmp143_, _tmp144_);
			_tmp145_ = m;
			_tmp146_ = vala_get_ccode_finish_real_name (_tmp145_);
			_tmp147_ = _tmp146_;
			_tmp148_ = vala_ccode_function_new (_tmp147_, "void");
			_vala_ccode_node_unref0 (function);
			function = _tmp148_;
			_g_free0 (_tmp147_);
			_tmp149_ = m;
			_tmp150_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp149_);
			if (_tmp150_) {
				ValaCCodeFunction* _tmp151_;
				ValaCCodeFunction* _tmp152_;
				ValaCCodeModifiers _tmp153_;
				ValaCCodeModifiers _tmp154_;
				_tmp151_ = function;
				_tmp152_ = function;
				_tmp153_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp152_);
				_tmp154_ = _tmp153_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp152_, _tmp154_ | VALA_CCODE_MODIFIERS_STATIC);
			} else {
				gboolean _tmp155_ = FALSE;
				ValaCodeContext* _tmp156_;
				ValaCodeContext* _tmp157_;
				gboolean _tmp158_;
				gboolean _tmp159_;
				_tmp156_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp157_ = _tmp156_;
				_tmp158_ = vala_code_context_get_hide_internal (_tmp157_);
				_tmp159_ = _tmp158_;
				if (_tmp159_) {
					ValaMethod* _tmp160_;
					gboolean _tmp161_;
					_tmp160_ = m;
					_tmp161_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp160_);
					_tmp155_ = _tmp161_;
				} else {
					_tmp155_ = FALSE;
				}
				if (_tmp155_) {
					ValaCCodeFunction* _tmp162_;
					ValaCCodeFunction* _tmp163_;
					ValaCCodeModifiers _tmp164_;
					ValaCCodeModifiers _tmp165_;
					_tmp162_ = function;
					_tmp163_ = function;
					_tmp164_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp163_);
					_tmp165_ = _tmp164_;
					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp163_, _tmp165_ | VALA_CCODE_MODIFIERS_INTERNAL);
				}
			}
			_tmp166_ = g_direct_hash;
			_tmp167_ = g_direct_equal;
			_tmp168_ = g_direct_equal;
			_tmp169_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp166_, _tmp167_, _tmp168_);
			_vala_map_unref0 (cparam_map);
			cparam_map = _tmp169_;
			_tmp170_ = m;
			_tmp171_ = decl_space;
			_tmp172_ = cparam_map;
			_tmp173_ = function;
			vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp170_, _tmp171_, (ValaMap*) _tmp172_, _tmp173_, NULL, NULL, NULL, 2);
			_tmp174_ = decl_space;
			_tmp175_ = function;
			vala_ccode_file_add_function_declaration (_tmp174_, _tmp175_);
			_vala_ccode_node_unref0 (function);
		}
		_vala_ccode_node_unref0 (finishfunc);
		_vala_map_unref0 (carg_map);
		_vala_map_unref0 (cparam_map);
		_vala_ccode_node_unref0 (asyncfunc);
		_vala_code_node_unref0 (cl);
	} else {
		ValaMethod* _tmp176_;
		ValaCCodeFile* _tmp177_;
		_tmp176_ = m;
		_tmp177_ = decl_space;
		VALA_CCODE_BASE_MODULE_CLASS (vala_gasync_module_parent_class)->generate_method_declaration ((ValaCCodeBaseModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp176_, _tmp177_);
	}
}


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


static void vala_gasync_module_real_visit_method (ValaCodeVisitor* base, ValaMethod* m) {
	ValaGAsyncModule * self;
	ValaMethod* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_coroutine (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		ValaCCodeFile* _tmp3_;
		ValaMethod* _tmp4_;
		gboolean _tmp5_;
		gboolean _tmp7_ = FALSE;
		ValaMethod* _tmp8_;
		gboolean _tmp9_;
		gboolean _tmp10_;
		gboolean _tmp35_ = FALSE;
		ValaMethod* _tmp36_;
		gboolean _tmp37_;
		gboolean _tmp38_;
		_tmp3_ = ((ValaCCodeBaseModule*) self)->cfile;
		vala_ccode_file_add_include (_tmp3_, "gio/gio.h", FALSE);
		_tmp4_ = m;
		_tmp5_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp4_);
		if (!_tmp5_) {
			ValaCCodeFile* _tmp6_;
			_tmp6_ = ((ValaCCodeBaseModule*) self)->header_file;
			vala_ccode_file_add_include (_tmp6_, "gio/gio.h", FALSE);
		}
		_tmp8_ = m;
		_tmp9_ = vala_method_get_is_abstract (_tmp8_);
		_tmp10_ = _tmp9_;
		if (!_tmp10_) {
			ValaMethod* _tmp11_;
			ValaBlock* _tmp12_;
			ValaBlock* _tmp13_;
			_tmp11_ = m;
			_tmp12_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp11_);
			_tmp13_ = _tmp12_;
			_tmp7_ = _tmp13_ != NULL;
		} else {
			_tmp7_ = FALSE;
		}
		if (_tmp7_) {
			ValaCCodeStruct* data = NULL;
			ValaMethod* _tmp14_;
			ValaCCodeStruct* _tmp15_;
			ValaCCodeStruct* _tmp16_;
			ValaCCodeStruct* _tmp17_;
			ValaMethod* _tmp18_;
			ValaCCodeFunction* _tmp19_;
			ValaCCodeFunction* _tmp20_;
			ValaMethod* _tmp21_;
			ValaMethod* _tmp22_;
			ValaMethod* _tmp23_;
			ValaCCodeStruct* _tmp24_;
			_tmp14_ = m;
			_tmp15_ = vala_gasync_module_generate_data_struct (self, _tmp14_);
			data = _tmp15_;
			_tmp16_ = data;
			_tmp17_ = _vala_ccode_node_ref0 (_tmp16_);
			_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->closure_struct);
			((ValaCCodeBaseModule*) self)->closure_struct = _tmp17_;
			_tmp18_ = m;
			_tmp19_ = vala_gasync_module_generate_free_function (self, _tmp18_);
			_tmp20_ = _tmp19_;
			_vala_ccode_node_unref0 (_tmp20_);
			_tmp21_ = m;
			vala_gasync_module_generate_async_function (self, _tmp21_);
			_tmp22_ = m;
			vala_gasync_module_generate_finish_function (self, _tmp22_);
			_tmp23_ = m;
			VALA_CODE_VISITOR_CLASS (vala_gasync_module_parent_class)->visit_method ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp23_);
			_vala_ccode_node_unref0 (((ValaCCodeBaseModule*) self)->closure_struct);
			((ValaCCodeBaseModule*) self)->closure_struct = NULL;
			_tmp24_ = data;
			vala_gasync_module_append_struct (self, _tmp24_);
			_vala_ccode_node_unref0 (data);
		} else {
			ValaMethod* _tmp25_;
			ValaCCodeFile* _tmp26_;
			ValaMethod* _tmp27_;
			gboolean _tmp28_;
			ValaMethod* _tmp31_;
			gboolean _tmp32_;
			_tmp25_ = m;
			_tmp26_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp25_, _tmp26_);
			_tmp27_ = m;
			_tmp28_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp27_);
			if (!_tmp28_) {
				ValaMethod* _tmp29_;
				ValaCCodeFile* _tmp30_;
				_tmp29_ = m;
				_tmp30_ = ((ValaCCodeBaseModule*) self)->header_file;
				vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp29_, _tmp30_);
			}
			_tmp31_ = m;
			_tmp32_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp31_);
			if (!_tmp32_) {
				ValaMethod* _tmp33_;
				ValaCCodeFile* _tmp34_;
				_tmp33_ = m;
				_tmp34_ = ((ValaCCodeBaseModule*) self)->internal_header_file;
				vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp33_, _tmp34_);
			}
		}
		_tmp36_ = m;
		_tmp37_ = vala_method_get_is_abstract (_tmp36_);
		_tmp38_ = _tmp37_;
		if (_tmp38_) {
			_tmp35_ = TRUE;
		} else {
			ValaMethod* _tmp39_;
			gboolean _tmp40_;
			gboolean _tmp41_;
			_tmp39_ = m;
			_tmp40_ = vala_method_get_is_virtual (_tmp39_);
			_tmp41_ = _tmp40_;
			_tmp35_ = _tmp41_;
		}
		if (_tmp35_) {
			ValaHashMap* cparam_map = NULL;
			GHashFunc _tmp42_;
			GEqualFunc _tmp43_;
			GEqualFunc _tmp44_;
			ValaHashMap* _tmp45_;
			ValaHashMap* carg_map = NULL;
			GHashFunc _tmp46_;
			GEqualFunc _tmp47_;
			GEqualFunc _tmp48_;
			ValaHashMap* _tmp49_;
			ValaMethod* _tmp50_;
			ValaVoidType* _tmp51_;
			ValaVoidType* _tmp52_;
			ValaHashMap* _tmp53_;
			ValaHashMap* _tmp54_;
			GHashFunc _tmp55_;
			GEqualFunc _tmp56_;
			GEqualFunc _tmp57_;
			ValaHashMap* _tmp58_;
			GHashFunc _tmp59_;
			GEqualFunc _tmp60_;
			GEqualFunc _tmp61_;
			ValaHashMap* _tmp62_;
			ValaMethod* _tmp63_;
			ValaMethod* _tmp64_;
			ValaDataType* _tmp65_;
			ValaDataType* _tmp66_;
			ValaHashMap* _tmp67_;
			ValaHashMap* _tmp68_;
			_tmp42_ = g_direct_hash;
			_tmp43_ = g_direct_equal;
			_tmp44_ = g_direct_equal;
			_tmp45_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp42_, _tmp43_, _tmp44_);
			cparam_map = _tmp45_;
			_tmp46_ = g_direct_hash;
			_tmp47_ = g_direct_equal;
			_tmp48_ = g_direct_equal;
			_tmp49_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp46_, _tmp47_, _tmp48_);
			carg_map = _tmp49_;
			_tmp50_ = m;
			_tmp51_ = vala_void_type_new (NULL);
			_tmp52_ = _tmp51_;
			_tmp53_ = cparam_map;
			_tmp54_ = carg_map;
			vala_ccode_method_module_generate_vfunc ((ValaCCodeMethodModule*) self, _tmp50_, (ValaDataType*) _tmp52_, (ValaMap*) _tmp53_, (ValaMap*) _tmp54_, "", 1);
			_vala_code_node_unref0 (_tmp52_);
			_tmp55_ = g_direct_hash;
			_tmp56_ = g_direct_equal;
			_tmp57_ = g_direct_equal;
			_tmp58_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp55_, _tmp56_, _tmp57_);
			_vala_map_unref0 (cparam_map);
			cparam_map = _tmp58_;
			_tmp59_ = g_direct_hash;
			_tmp60_ = g_direct_equal;
			_tmp61_ = g_direct_equal;
			_tmp62_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp59_, _tmp60_, _tmp61_);
			_vala_map_unref0 (carg_map);
			carg_map = _tmp62_;
			_tmp63_ = m;
			_tmp64_ = m;
			_tmp65_ = vala_callable_get_return_type ((ValaCallable*) _tmp64_);
			_tmp66_ = _tmp65_;
			_tmp67_ = cparam_map;
			_tmp68_ = carg_map;
			vala_ccode_method_module_generate_vfunc ((ValaCCodeMethodModule*) self, _tmp63_, _tmp66_, (ValaMap*) _tmp67_, (ValaMap*) _tmp68_, "_finish", 2);
			_vala_map_unref0 (carg_map);
			_vala_map_unref0 (cparam_map);
		}
	} else {
		ValaMethod* _tmp69_;
		_tmp69_ = m;
		VALA_CODE_VISITOR_CLASS (vala_gasync_module_parent_class)->visit_method ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp69_);
	}
}


static void vala_gasync_module_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m) {
	ValaGAsyncModule * self;
	ValaCreationMethod* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_coroutine ((ValaMethod*) _tmp0_);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		ValaCreationMethod* _tmp3_;
		_tmp3_ = m;
		VALA_CODE_VISITOR_CLASS (vala_gasync_module_parent_class)->visit_creation_method ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp3_);
	} else {
		ValaCreationMethod* _tmp4_;
		ValaSourceReference* _tmp5_;
		ValaSourceReference* _tmp6_;
		gboolean visible = FALSE;
		ValaCreationMethod* _tmp7_;
		gboolean _tmp8_;
		ValaCreationMethod* _tmp9_;
		ValaCreationMethod* _tmp10_;
		ValaSourceFileType _tmp11_;
		ValaSourceFileType _tmp12_;
		gboolean _tmp13_ = FALSE;
		gboolean _tmp14_ = FALSE;
		ValaTypeSymbol* _tmp15_;
		ValaTypeSymbol* _tmp16_;
		_tmp4_ = m;
		_tmp5_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp4_);
		_tmp6_ = _tmp5_;
		vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp6_);
		_tmp7_ = m;
		_tmp8_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp7_);
		visible = !_tmp8_;
		_tmp9_ = m;
		vala_code_visitor_visit_method ((ValaCodeVisitor*) self, (ValaMethod*) _tmp9_);
		_tmp10_ = m;
		_tmp11_ = vala_symbol_get_source_type ((ValaSymbol*) _tmp10_);
		_tmp12_ = _tmp11_;
		if (_tmp12_ == VALA_SOURCE_FILE_TYPE_FAST) {
			return;
		}
		_tmp15_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
		_tmp16_ = _tmp15_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_CLASS)) {
			ValaClass* _tmp17_;
			ValaClass* _tmp18_;
			gboolean _tmp19_;
			gboolean _tmp20_;
			_tmp17_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_class_get_is_compact (_tmp18_);
			_tmp20_ = _tmp19_;
			_tmp14_ = !_tmp20_;
		} else {
			_tmp14_ = FALSE;
		}
		if (_tmp14_) {
			ValaClass* _tmp21_;
			ValaClass* _tmp22_;
			gboolean _tmp23_;
			gboolean _tmp24_;
			_tmp21_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
			_tmp22_ = _tmp21_;
			_tmp23_ = vala_class_get_is_abstract (_tmp22_);
			_tmp24_ = _tmp23_;
			_tmp13_ = !_tmp24_;
		} else {
			_tmp13_ = FALSE;
		}
		if (_tmp13_) {
			ValaCCodeFunction* vfunc = NULL;
			ValaCreationMethod* _tmp25_;
			gchar* _tmp26_;
			gchar* _tmp27_;
			ValaCCodeFunction* _tmp28_;
			ValaCCodeFunction* _tmp29_;
			ValaHashMap* cparam_map = NULL;
			GHashFunc _tmp30_;
			GEqualFunc _tmp31_;
			GEqualFunc _tmp32_;
			ValaHashMap* _tmp33_;
			ValaHashMap* carg_map = NULL;
			GHashFunc _tmp34_;
			GEqualFunc _tmp35_;
			GEqualFunc _tmp36_;
			ValaHashMap* _tmp37_;
			ValaCCodeFunction* _tmp38_;
			ValaCCodeFunctionCall* vcall = NULL;
			ValaCreationMethod* _tmp39_;
			gchar* _tmp40_;
			gchar* _tmp41_;
			ValaCCodeIdentifier* _tmp42_;
			ValaCCodeIdentifier* _tmp43_;
			ValaCCodeFunctionCall* _tmp44_;
			ValaCCodeFunctionCall* _tmp45_;
			ValaCCodeFunctionCall* _tmp46_;
			ValaClass* _tmp47_;
			ValaClass* _tmp48_;
			gchar* _tmp49_;
			gchar* _tmp50_;
			ValaCCodeIdentifier* _tmp51_;
			ValaCCodeIdentifier* _tmp52_;
			ValaCreationMethod* _tmp53_;
			ValaCCodeFile* _tmp54_;
			ValaHashMap* _tmp55_;
			ValaCCodeFunction* _tmp56_;
			ValaHashMap* _tmp57_;
			ValaCCodeFunctionCall* _tmp58_;
			ValaCCodeFunction* _tmp59_;
			ValaCCodeFunction* _tmp60_;
			ValaCCodeFunctionCall* _tmp61_;
			gboolean _tmp62_;
			ValaCCodeFile* _tmp67_;
			ValaCCodeFunction* _tmp68_;
			ValaCreationMethod* _tmp69_;
			gchar* _tmp70_;
			gchar* _tmp71_;
			ValaCCodeFunction* _tmp72_;
			GHashFunc _tmp73_;
			GEqualFunc _tmp74_;
			GEqualFunc _tmp75_;
			ValaHashMap* _tmp76_;
			GHashFunc _tmp77_;
			GEqualFunc _tmp78_;
			GEqualFunc _tmp79_;
			ValaHashMap* _tmp80_;
			ValaCCodeFunction* _tmp81_;
			ValaCreationMethod* _tmp82_;
			gchar* _tmp83_;
			gchar* _tmp84_;
			ValaCCodeIdentifier* _tmp85_;
			ValaCCodeIdentifier* _tmp86_;
			ValaCCodeFunctionCall* _tmp87_;
			ValaCreationMethod* _tmp88_;
			ValaCCodeFile* _tmp89_;
			ValaHashMap* _tmp90_;
			ValaCCodeFunction* _tmp91_;
			ValaHashMap* _tmp92_;
			ValaCCodeFunctionCall* _tmp93_;
			ValaCCodeFunction* _tmp94_;
			ValaCCodeFunction* _tmp95_;
			ValaCCodeFunctionCall* _tmp96_;
			gboolean _tmp97_;
			ValaCCodeFile* _tmp102_;
			ValaCCodeFunction* _tmp103_;
			_tmp25_ = m;
			_tmp26_ = vala_get_ccode_name ((ValaCodeNode*) _tmp25_);
			_tmp27_ = _tmp26_;
			_tmp28_ = vala_ccode_function_new (_tmp27_, "void");
			_tmp29_ = _tmp28_;
			_g_free0 (_tmp27_);
			vfunc = _tmp29_;
			_tmp30_ = g_direct_hash;
			_tmp31_ = g_direct_equal;
			_tmp32_ = g_direct_equal;
			_tmp33_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp30_, _tmp31_, _tmp32_);
			cparam_map = _tmp33_;
			_tmp34_ = g_direct_hash;
			_tmp35_ = g_direct_equal;
			_tmp36_ = g_direct_equal;
			_tmp37_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp34_, _tmp35_, _tmp36_);
			carg_map = _tmp37_;
			_tmp38_ = vfunc;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp38_);
			_tmp39_ = m;
			_tmp40_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp39_);
			_tmp41_ = _tmp40_;
			_tmp42_ = vala_ccode_identifier_new (_tmp41_);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp43_);
			_tmp45_ = _tmp44_;
			_vala_ccode_node_unref0 (_tmp43_);
			_g_free0 (_tmp41_);
			vcall = _tmp45_;
			_tmp46_ = vcall;
			_tmp47_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
			_tmp48_ = _tmp47_;
			_tmp49_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp48_);
			_tmp50_ = _tmp49_;
			_tmp51_ = vala_ccode_identifier_new (_tmp50_);
			_tmp52_ = _tmp51_;
			vala_ccode_function_call_add_argument (_tmp46_, (ValaCCodeExpression*) _tmp52_);
			_vala_ccode_node_unref0 (_tmp52_);
			_g_free0 (_tmp50_);
			_tmp53_ = m;
			_tmp54_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp55_ = cparam_map;
			_tmp56_ = vfunc;
			_tmp57_ = carg_map;
			_tmp58_ = vcall;
			vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, (ValaMethod*) _tmp53_, _tmp54_, (ValaMap*) _tmp55_, _tmp56_, NULL, (ValaMap*) _tmp57_, _tmp58_, 1);
			_tmp59_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp60_ = _tmp59_;
			_tmp61_ = vcall;
			vala_ccode_function_add_expression (_tmp60_, (ValaCCodeExpression*) _tmp61_);
			_tmp62_ = visible;
			if (!_tmp62_) {
				ValaCCodeFunction* _tmp63_;
				ValaCCodeFunction* _tmp64_;
				ValaCCodeModifiers _tmp65_;
				ValaCCodeModifiers _tmp66_;
				_tmp63_ = vfunc;
				_tmp64_ = vfunc;
				_tmp65_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp64_);
				_tmp66_ = _tmp65_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp64_, _tmp66_ | VALA_CCODE_MODIFIERS_STATIC);
			}
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp67_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp68_ = vfunc;
			vala_ccode_file_add_function (_tmp67_, _tmp68_);
			_tmp69_ = m;
			_tmp70_ = vala_get_ccode_finish_name ((ValaMethod*) _tmp69_);
			_tmp71_ = _tmp70_;
			_tmp72_ = vala_ccode_function_new (_tmp71_, "void");
			_vala_ccode_node_unref0 (vfunc);
			vfunc = _tmp72_;
			_g_free0 (_tmp71_);
			_tmp73_ = g_direct_hash;
			_tmp74_ = g_direct_equal;
			_tmp75_ = g_direct_equal;
			_tmp76_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp73_, _tmp74_, _tmp75_);
			_vala_map_unref0 (cparam_map);
			cparam_map = _tmp76_;
			_tmp77_ = g_direct_hash;
			_tmp78_ = g_direct_equal;
			_tmp79_ = g_direct_equal;
			_tmp80_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp77_, _tmp78_, _tmp79_);
			_vala_map_unref0 (carg_map);
			carg_map = _tmp80_;
			_tmp81_ = vfunc;
			vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp81_);
			_tmp82_ = m;
			_tmp83_ = vala_get_ccode_finish_real_name ((ValaMethod*) _tmp82_);
			_tmp84_ = _tmp83_;
			_tmp85_ = vala_ccode_identifier_new (_tmp84_);
			_tmp86_ = _tmp85_;
			_tmp87_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp86_);
			_vala_ccode_node_unref0 (vcall);
			vcall = _tmp87_;
			_vala_ccode_node_unref0 (_tmp86_);
			_g_free0 (_tmp84_);
			_tmp88_ = m;
			_tmp89_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp90_ = cparam_map;
			_tmp91_ = vfunc;
			_tmp92_ = carg_map;
			_tmp93_ = vcall;
			vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, (ValaMethod*) _tmp88_, _tmp89_, (ValaMap*) _tmp90_, _tmp91_, NULL, (ValaMap*) _tmp92_, _tmp93_, 2);
			_tmp94_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp95_ = _tmp94_;
			_tmp96_ = vcall;
			vala_ccode_function_add_return (_tmp95_, (ValaCCodeExpression*) _tmp96_);
			_tmp97_ = visible;
			if (!_tmp97_) {
				ValaCCodeFunction* _tmp98_;
				ValaCCodeFunction* _tmp99_;
				ValaCCodeModifiers _tmp100_;
				ValaCCodeModifiers _tmp101_;
				_tmp98_ = vfunc;
				_tmp99_ = vfunc;
				_tmp100_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp99_);
				_tmp101_ = _tmp100_;
				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp99_, _tmp101_ | VALA_CCODE_MODIFIERS_STATIC);
			}
			vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
			_tmp102_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp103_ = vfunc;
			vala_ccode_file_add_function (_tmp102_, _tmp103_);
			_vala_ccode_node_unref0 (vcall);
			_vala_map_unref0 (carg_map);
			_vala_map_unref0 (cparam_map);
			_vala_ccode_node_unref0 (vfunc);
		}
		vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
	}
}


static void vala_gasync_module_generate_finish_function (ValaGAsyncModule* self, ValaMethod* m) {
	ValaCCodeBaseModuleEmitContext* _tmp0_;
	ValaCCodeBaseModuleEmitContext* _tmp1_;
	gchar* dataname = NULL;
	ValaMethod* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	ValaCCodeFunction* finishfunc = NULL;
	ValaMethod* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp14_;
	GEqualFunc _tmp15_;
	GEqualFunc _tmp16_;
	ValaHashMap* _tmp17_;
	ValaHashMap* _tmp18_;
	gint _tmp19_;
	ValaCCodeParameter* _tmp20_;
	ValaCCodeParameter* _tmp21_;
	ValaMethod* _tmp22_;
	ValaCCodeFile* _tmp23_;
	ValaHashMap* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	gboolean _tmp26_ = FALSE;
	gboolean _tmp27_ = FALSE;
	ValaMethod* _tmp28_;
	gboolean _tmp29_;
	ValaCCodeFunction* _tmp51_;
	ValaDataType* return_type = NULL;
	ValaMethod* _tmp52_;
	ValaDataType* _tmp53_;
	ValaDataType* _tmp54_;
	ValaDataType* _tmp55_;
	ValaMethod* _tmp56_;
	ValaCCodeIdentifier* data_var = NULL;
	ValaCCodeIdentifier* _tmp86_;
	ValaCCodeFunction* _tmp87_;
	ValaCCodeFunction* _tmp88_;
	const gchar* _tmp89_;
	gchar* _tmp90_;
	gchar* _tmp91_;
	ValaCCodeVariableDeclarator* _tmp92_;
	ValaCCodeVariableDeclarator* _tmp93_;
	ValaCCodeFunctionCall* async_result_cast = NULL;
	ValaCCodeIdentifier* _tmp94_;
	ValaCCodeIdentifier* _tmp95_;
	ValaCCodeFunctionCall* _tmp96_;
	ValaCCodeFunctionCall* _tmp97_;
	ValaCCodeFunctionCall* _tmp98_;
	ValaCCodeIdentifier* _tmp99_;
	ValaCCodeIdentifier* _tmp100_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp101_;
	ValaCCodeIdentifier* _tmp102_;
	ValaCCodeFunctionCall* _tmp103_;
	ValaCCodeFunctionCall* _tmp104_;
	ValaCCodeFunctionCall* _tmp105_;
	ValaCCodeFunctionCall* _tmp106_;
	ValaMethod* _tmp107_;
	ValaList* _tmp108_;
	ValaList* _tmp109_;
	gint _tmp110_;
	gint _tmp111_;
	gboolean _tmp112_;
	ValaCCodeFunction* _tmp119_;
	ValaCCodeFunction* _tmp120_;
	ValaCCodeIdentifier* _tmp121_;
	ValaCCodeFunctionCall* _tmp122_;
	gboolean has_cancellable = FALSE;
	gboolean _tmp145_ = FALSE;
	ValaMethod* _tmp146_;
	ValaList* _tmp147_;
	ValaList* _tmp148_;
	gint _tmp149_;
	gint _tmp150_;
	gboolean _tmp151_;
	ValaCCodeBaseModuleEmitContext* _tmp164_;
	ValaMethod* _tmp165_;
	ValaCCodeBaseModuleEmitContext* _tmp202_;
	ValaMethod* _tmp203_;
	ValaCCodeFile* _tmp313_;
	ValaCCodeFunction* _tmp314_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	_tmp0_ = vala_ccode_base_module_emit_context_new (NULL);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp1_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
	_tmp2_ = m;
	_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_symbol_lower_case_to_camel_case (_tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = g_strconcat (_tmp6_, "Data", NULL);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	_g_free0 (_tmp4_);
	dataname = _tmp8_;
	_tmp9_ = m;
	_tmp10_ = vala_get_ccode_finish_real_name (_tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_function_new (_tmp11_, "void");
	_tmp13_ = _tmp12_;
	_g_free0 (_tmp11_);
	finishfunc = _tmp13_;
	_tmp14_ = g_direct_hash;
	_tmp15_ = g_direct_equal;
	_tmp16_ = g_direct_equal;
	_tmp17_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp14_, _tmp15_, _tmp16_);
	cparam_map = _tmp17_;
	_tmp18_ = cparam_map;
	_tmp19_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, 0.1, FALSE);
	_tmp20_ = vala_ccode_parameter_new ("_res_", "GAsyncResult*");
	_tmp21_ = _tmp20_;
	vala_map_set ((ValaMap*) _tmp18_, (gpointer) ((gintptr) _tmp19_), _tmp21_);
	_vala_ccode_node_unref0 (_tmp21_);
	_tmp22_ = m;
	_tmp23_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp24_ = cparam_map;
	_tmp25_ = finishfunc;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp22_, _tmp23_, (ValaMap*) _tmp24_, _tmp25_, NULL, NULL, NULL, 2);
	_tmp28_ = m;
	_tmp29_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp28_);
	if (_tmp29_) {
		_tmp27_ = TRUE;
	} else {
		ValaMethod* _tmp30_;
		ValaMethod* _tmp31_;
		ValaMethod* _tmp32_;
		_tmp30_ = m;
		_tmp31_ = vala_method_get_base_method (_tmp30_);
		_tmp32_ = _tmp31_;
		_tmp27_ = _tmp32_ != NULL;
	}
	if (_tmp27_) {
		_tmp26_ = TRUE;
	} else {
		ValaMethod* _tmp33_;
		ValaMethod* _tmp34_;
		ValaMethod* _tmp35_;
		_tmp33_ = m;
		_tmp34_ = vala_method_get_base_interface_method (_tmp33_);
		_tmp35_ = _tmp34_;
		_tmp26_ = _tmp35_ != NULL;
	}
	if (_tmp26_) {
		ValaCCodeFunction* _tmp36_;
		ValaCCodeFunction* _tmp37_;
		ValaCCodeModifiers _tmp38_;
		ValaCCodeModifiers _tmp39_;
		_tmp36_ = finishfunc;
		_tmp37_ = finishfunc;
		_tmp38_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp37_);
		_tmp39_ = _tmp38_;
		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp37_, _tmp39_ | VALA_CCODE_MODIFIERS_STATIC);
	} else {
		gboolean _tmp40_ = FALSE;
		ValaCodeContext* _tmp41_;
		ValaCodeContext* _tmp42_;
		gboolean _tmp43_;
		gboolean _tmp44_;
		_tmp41_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp42_ = _tmp41_;
		_tmp43_ = vala_code_context_get_hide_internal (_tmp42_);
		_tmp44_ = _tmp43_;
		if (_tmp44_) {
			ValaMethod* _tmp45_;
			gboolean _tmp46_;
			_tmp45_ = m;
			_tmp46_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp45_);
			_tmp40_ = _tmp46_;
		} else {
			_tmp40_ = FALSE;
		}
		if (_tmp40_) {
			ValaCCodeFunction* _tmp47_;
			ValaCCodeFunction* _tmp48_;
			ValaCCodeModifiers _tmp49_;
			ValaCCodeModifiers _tmp50_;
			_tmp47_ = finishfunc;
			_tmp48_ = finishfunc;
			_tmp49_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp48_);
			_tmp50_ = _tmp49_;
			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp48_, _tmp50_ | VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp51_ = finishfunc;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp51_);
	_tmp52_ = m;
	_tmp53_ = vala_callable_get_return_type ((ValaCallable*) _tmp52_);
	_tmp54_ = _tmp53_;
	_tmp55_ = _vala_code_node_ref0 (_tmp54_);
	return_type = _tmp55_;
	_tmp56_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp56_, VALA_TYPE_CREATION_METHOD)) {
		ValaTypeSymbol* type_sym = NULL;
		ValaMethod* _tmp57_;
		ValaSymbol* _tmp58_;
		ValaSymbol* _tmp59_;
		ValaTypeSymbol* _tmp60_;
		ValaTypeSymbol* _tmp61_;
		_tmp57_ = m;
		_tmp58_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp57_);
		_tmp59_ = _tmp58_;
		_tmp60_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp59_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
		type_sym = _tmp60_;
		_tmp61_ = type_sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp61_, VALA_TYPE_OBJECT_TYPE_SYMBOL)) {
			ValaCCodeFunction* _tmp62_;
			ValaCCodeFunction* _tmp63_;
			ValaTypeSymbol* _tmp64_;
			gchar* _tmp65_;
			gchar* _tmp66_;
			gchar* _tmp67_;
			gchar* _tmp68_;
			ValaCCodeVariableDeclarator* _tmp69_;
			ValaCCodeVariableDeclarator* _tmp70_;
			ValaTypeSymbol* _tmp71_;
			ValaObjectType* _tmp72_;
			_tmp62_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp63_ = _tmp62_;
			_tmp64_ = type_sym;
			_tmp65_ = vala_get_ccode_name ((ValaCodeNode*) _tmp64_);
			_tmp66_ = _tmp65_;
			_tmp67_ = g_strconcat (_tmp66_, "*", NULL);
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_ccode_variable_declarator_new ("result", NULL, NULL);
			_tmp70_ = _tmp69_;
			vala_ccode_function_add_declaration (_tmp63_, _tmp68_, (ValaCCodeDeclarator*) _tmp70_, 0);
			_vala_ccode_node_unref0 (_tmp70_);
			_g_free0 (_tmp68_);
			_g_free0 (_tmp66_);
			_tmp71_ = type_sym;
			_tmp72_ = vala_object_type_symbol_get_this_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp71_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
			_vala_code_node_unref0 (return_type);
			return_type = (ValaDataType*) _tmp72_;
		}
		_vala_code_node_unref0 (type_sym);
	} else {
		gboolean _tmp73_ = FALSE;
		ValaDataType* _tmp74_;
		_tmp74_ = return_type;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp74_, VALA_TYPE_VOID_TYPE)) {
			ValaDataType* _tmp75_;
			gboolean _tmp76_;
			_tmp75_ = return_type;
			_tmp76_ = vala_data_type_is_real_non_null_struct_type (_tmp75_);
			_tmp73_ = !_tmp76_;
		} else {
			_tmp73_ = FALSE;
		}
		if (_tmp73_) {
			ValaCCodeFunction* _tmp77_;
			ValaCCodeFunction* _tmp78_;
			ValaMethod* _tmp79_;
			ValaDataType* _tmp80_;
			ValaDataType* _tmp81_;
			gchar* _tmp82_;
			gchar* _tmp83_;
			ValaCCodeVariableDeclarator* _tmp84_;
			ValaCCodeVariableDeclarator* _tmp85_;
			_tmp77_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp78_ = _tmp77_;
			_tmp79_ = m;
			_tmp80_ = vala_callable_get_return_type ((ValaCallable*) _tmp79_);
			_tmp81_ = _tmp80_;
			_tmp82_ = vala_get_ccode_name ((ValaCodeNode*) _tmp81_);
			_tmp83_ = _tmp82_;
			_tmp84_ = vala_ccode_variable_declarator_new ("result", NULL, NULL);
			_tmp85_ = _tmp84_;
			vala_ccode_function_add_declaration (_tmp78_, _tmp83_, (ValaCCodeDeclarator*) _tmp85_, 0);
			_vala_ccode_node_unref0 (_tmp85_);
			_g_free0 (_tmp83_);
		}
	}
	_tmp86_ = vala_ccode_identifier_new ("_data_");
	data_var = _tmp86_;
	_tmp87_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp88_ = _tmp87_;
	_tmp89_ = dataname;
	_tmp90_ = g_strconcat (_tmp89_, "*", NULL);
	_tmp91_ = _tmp90_;
	_tmp92_ = vala_ccode_variable_declarator_new ("_data_", NULL, NULL);
	_tmp93_ = _tmp92_;
	vala_ccode_function_add_declaration (_tmp88_, _tmp91_, (ValaCCodeDeclarator*) _tmp93_, 0);
	_vala_ccode_node_unref0 (_tmp93_);
	_g_free0 (_tmp91_);
	_tmp94_ = vala_ccode_identifier_new ("G_TASK");
	_tmp95_ = _tmp94_;
	_tmp96_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp95_);
	_tmp97_ = _tmp96_;
	_vala_ccode_node_unref0 (_tmp95_);
	async_result_cast = _tmp97_;
	_tmp98_ = async_result_cast;
	_tmp99_ = vala_ccode_identifier_new ("_res_");
	_tmp100_ = _tmp99_;
	vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp100_);
	_vala_ccode_node_unref0 (_tmp100_);
	_tmp101_ = vala_ccode_identifier_new ("g_task_propagate_pointer");
	_tmp102_ = _tmp101_;
	_tmp103_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp102_);
	_tmp104_ = _tmp103_;
	_vala_ccode_node_unref0 (_tmp102_);
	ccall = _tmp104_;
	_tmp105_ = ccall;
	_tmp106_ = async_result_cast;
	vala_ccode_function_call_add_argument (_tmp105_, (ValaCCodeExpression*) _tmp106_);
	_tmp107_ = m;
	_tmp108_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp107_);
	_tmp109_ = _tmp108_;
	_tmp110_ = vala_collection_get_size ((ValaCollection*) _tmp109_);
	_tmp111_ = _tmp110_;
	_tmp112_ = _tmp111_ > 0;
	_vala_iterable_unref0 (_tmp109_);
	if (_tmp112_) {
		ValaCCodeFunctionCall* _tmp113_;
		ValaCCodeIdentifier* _tmp114_;
		ValaCCodeIdentifier* _tmp115_;
		_tmp113_ = ccall;
		_tmp114_ = vala_ccode_identifier_new ("error");
		_tmp115_ = _tmp114_;
		vala_ccode_function_call_add_argument (_tmp113_, (ValaCCodeExpression*) _tmp115_);
		_vala_ccode_node_unref0 (_tmp115_);
	} else {
		ValaCCodeFunctionCall* _tmp116_;
		ValaCCodeConstant* _tmp117_;
		ValaCCodeConstant* _tmp118_;
		_tmp116_ = ccall;
		_tmp117_ = vala_ccode_constant_new ("NULL");
		_tmp118_ = _tmp117_;
		vala_ccode_function_call_add_argument (_tmp116_, (ValaCCodeExpression*) _tmp118_);
		_vala_ccode_node_unref0 (_tmp118_);
	}
	_tmp119_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp120_ = _tmp119_;
	_tmp121_ = data_var;
	_tmp122_ = ccall;
	vala_ccode_function_add_assignment (_tmp120_, (ValaCCodeExpression*) _tmp121_, (ValaCCodeExpression*) _tmp122_);
	has_cancellable = FALSE;
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp123_;
		ValaList* _tmp124_;
		gint _param_size = 0;
		ValaList* _tmp125_;
		gint _tmp126_;
		gint _tmp127_;
		gint _param_index = 0;
		_tmp123_ = m;
		_tmp124_ = vala_callable_get_parameters ((ValaCallable*) _tmp123_);
		_param_list = _tmp124_;
		_tmp125_ = _param_list;
		_tmp126_ = vala_collection_get_size ((ValaCollection*) _tmp125_);
		_tmp127_ = _tmp126_;
		_param_size = _tmp127_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp128_;
			gint _tmp129_;
			gint _tmp130_;
			ValaParameter* param = NULL;
			ValaList* _tmp131_;
			gint _tmp132_;
			gpointer _tmp133_;
			gboolean _tmp134_ = FALSE;
			ValaParameter* _tmp135_;
			ValaDataType* _tmp136_;
			ValaDataType* _tmp137_;
			_tmp128_ = _param_index;
			_param_index = _tmp128_ + 1;
			_tmp129_ = _param_index;
			_tmp130_ = _param_size;
			if (!(_tmp129_ < _tmp130_)) {
				break;
			}
			_tmp131_ = _param_list;
			_tmp132_ = _param_index;
			_tmp133_ = vala_list_get (_tmp131_, _tmp132_);
			param = (ValaParameter*) _tmp133_;
			_tmp135_ = param;
			_tmp136_ = vala_variable_get_variable_type ((ValaVariable*) _tmp135_);
			_tmp137_ = _tmp136_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp137_, VALA_TYPE_OBJECT_TYPE)) {
				ValaParameter* _tmp138_;
				ValaDataType* _tmp139_;
				ValaDataType* _tmp140_;
				ValaTypeSymbol* _tmp141_;
				ValaTypeSymbol* _tmp142_;
				gchar* _tmp143_;
				gchar* _tmp144_;
				_tmp138_ = param;
				_tmp139_ = vala_variable_get_variable_type ((ValaVariable*) _tmp138_);
				_tmp140_ = _tmp139_;
				_tmp141_ = vala_data_type_get_data_type (_tmp140_);
				_tmp142_ = _tmp141_;
				_tmp143_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp142_);
				_tmp144_ = _tmp143_;
				_tmp134_ = g_strcmp0 (_tmp144_, "GLib.Cancellable") == 0;
				_g_free0 (_tmp144_);
			} else {
				_tmp134_ = FALSE;
			}
			if (_tmp134_) {
				has_cancellable = TRUE;
				_vala_code_node_unref0 (param);
				break;
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp146_ = m;
	_tmp147_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp146_);
	_tmp148_ = _tmp147_;
	_tmp149_ = vala_collection_get_size ((ValaCollection*) _tmp148_);
	_tmp150_ = _tmp149_;
	_tmp151_ = _tmp150_ > 0;
	_vala_iterable_unref0 (_tmp148_);
	if (_tmp151_) {
		_tmp145_ = TRUE;
	} else {
		gboolean _tmp152_;
		_tmp152_ = has_cancellable;
		_tmp145_ = _tmp152_;
	}
	if (_tmp145_) {
		ValaCCodeBinaryExpression* is_null = NULL;
		ValaCCodeConstant* _tmp153_;
		ValaCCodeConstant* _tmp154_;
		ValaCCodeIdentifier* _tmp155_;
		ValaCCodeBinaryExpression* _tmp156_;
		ValaCCodeBinaryExpression* _tmp157_;
		ValaCCodeFunction* _tmp158_;
		ValaCCodeFunction* _tmp159_;
		ValaCCodeBinaryExpression* _tmp160_;
		ValaDataType* _tmp161_;
		ValaCCodeFunction* _tmp162_;
		ValaCCodeFunction* _tmp163_;
		_tmp153_ = vala_ccode_constant_new ("NULL");
		_tmp154_ = _tmp153_;
		_tmp155_ = data_var;
		_tmp156_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp154_, (ValaCCodeExpression*) _tmp155_);
		_tmp157_ = _tmp156_;
		_vala_ccode_node_unref0 (_tmp154_);
		is_null = _tmp157_;
		_tmp158_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp159_ = _tmp158_;
		_tmp160_ = is_null;
		vala_ccode_function_open_if (_tmp159_, (ValaCCodeExpression*) _tmp160_);
		_tmp161_ = return_type;
		vala_ccode_base_module_return_default_value ((ValaCCodeBaseModule*) self, _tmp161_);
		_tmp162_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp163_ = _tmp162_;
		vala_ccode_function_close (_tmp163_);
		_vala_ccode_node_unref0 (is_null);
	}
	_tmp164_ = ((ValaCCodeBaseModule*) self)->emit_context;
	_tmp165_ = m;
	vala_ccode_base_module_emit_context_push_symbol (_tmp164_, (ValaSymbol*) _tmp165_);
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp166_;
		ValaList* _tmp167_;
		gint _param_size = 0;
		ValaList* _tmp168_;
		gint _tmp169_;
		gint _tmp170_;
		gint _param_index = 0;
		_tmp166_ = m;
		_tmp167_ = vala_callable_get_parameters ((ValaCallable*) _tmp166_);
		_param_list = _tmp167_;
		_tmp168_ = _param_list;
		_tmp169_ = vala_collection_get_size ((ValaCollection*) _tmp168_);
		_tmp170_ = _tmp169_;
		_param_size = _tmp170_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp171_;
			gint _tmp172_;
			gint _tmp173_;
			ValaParameter* param = NULL;
			ValaList* _tmp174_;
			gint _tmp175_;
			gpointer _tmp176_;
			ValaParameter* _tmp177_;
			ValaParameterDirection _tmp178_;
			ValaParameterDirection _tmp179_;
			_tmp171_ = _param_index;
			_param_index = _tmp171_ + 1;
			_tmp172_ = _param_index;
			_tmp173_ = _param_size;
			if (!(_tmp172_ < _tmp173_)) {
				break;
			}
			_tmp174_ = _param_list;
			_tmp175_ = _param_index;
			_tmp176_ = vala_list_get (_tmp174_, _tmp175_);
			param = (ValaParameter*) _tmp176_;
			_tmp177_ = param;
			_tmp178_ = vala_parameter_get_direction (_tmp177_);
			_tmp179_ = _tmp178_;
			if (_tmp179_ != VALA_PARAMETER_DIRECTION_IN) {
				ValaParameter* _tmp180_;
				gboolean _tmp181_ = FALSE;
				ValaParameter* _tmp182_;
				ValaDataType* _tmp183_;
				ValaDataType* _tmp184_;
				_tmp180_ = param;
				vala_ccode_base_module_return_out_parameter ((ValaCCodeBaseModule*) self, _tmp180_);
				_tmp182_ = param;
				_tmp183_ = vala_variable_get_variable_type ((ValaVariable*) _tmp182_);
				_tmp184_ = _tmp183_;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp184_, VALA_TYPE_VALUE_TYPE)) {
					_tmp181_ = TRUE;
				} else {
					ValaParameter* _tmp185_;
					ValaDataType* _tmp186_;
					ValaDataType* _tmp187_;
					gboolean _tmp188_;
					gboolean _tmp189_;
					_tmp185_ = param;
					_tmp186_ = vala_variable_get_variable_type ((ValaVariable*) _tmp185_);
					_tmp187_ = _tmp186_;
					_tmp188_ = vala_data_type_get_nullable (_tmp187_);
					_tmp189_ = _tmp188_;
					_tmp181_ = _tmp189_;
				}
				if (_tmp181_) {
					ValaCCodeFunction* _tmp190_;
					ValaCCodeFunction* _tmp191_;
					ValaCCodeIdentifier* _tmp192_;
					ValaParameter* _tmp193_;
					const gchar* _tmp194_;
					const gchar* _tmp195_;
					gchar* _tmp196_;
					gchar* _tmp197_;
					ValaCCodeMemberAccess* _tmp198_;
					ValaCCodeMemberAccess* _tmp199_;
					ValaCCodeConstant* _tmp200_;
					ValaCCodeConstant* _tmp201_;
					_tmp190_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp191_ = _tmp190_;
					_tmp192_ = data_var;
					_tmp193_ = param;
					_tmp194_ = vala_symbol_get_name ((ValaSymbol*) _tmp193_);
					_tmp195_ = _tmp194_;
					_tmp196_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp195_);
					_tmp197_ = _tmp196_;
					_tmp198_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp192_, _tmp197_);
					_tmp199_ = _tmp198_;
					_tmp200_ = vala_ccode_constant_new ("NULL");
					_tmp201_ = _tmp200_;
					vala_ccode_function_add_assignment (_tmp191_, (ValaCCodeExpression*) _tmp199_, (ValaCCodeExpression*) _tmp201_);
					_vala_ccode_node_unref0 (_tmp201_);
					_vala_ccode_node_unref0 (_tmp199_);
					_g_free0 (_tmp197_);
				}
			}
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp202_ = ((ValaCCodeBaseModule*) self)->emit_context;
	vala_ccode_base_module_emit_context_pop_symbol (_tmp202_);
	_tmp203_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp203_, VALA_TYPE_CREATION_METHOD)) {
		ValaCCodeFunction* _tmp204_;
		ValaCCodeFunction* _tmp205_;
		ValaCCodeIdentifier* _tmp206_;
		ValaCCodeIdentifier* _tmp207_;
		ValaCCodeIdentifier* _tmp208_;
		ValaCCodeMemberAccess* _tmp209_;
		ValaCCodeMemberAccess* _tmp210_;
		ValaCCodeFunction* _tmp211_;
		ValaCCodeFunction* _tmp212_;
		ValaCCodeIdentifier* _tmp213_;
		ValaCCodeMemberAccess* _tmp214_;
		ValaCCodeMemberAccess* _tmp215_;
		ValaCCodeConstant* _tmp216_;
		ValaCCodeConstant* _tmp217_;
		ValaCCodeFunction* _tmp218_;
		ValaCCodeFunction* _tmp219_;
		ValaCCodeIdentifier* _tmp220_;
		ValaCCodeIdentifier* _tmp221_;
		_tmp204_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp205_ = _tmp204_;
		_tmp206_ = vala_ccode_identifier_new ("result");
		_tmp207_ = _tmp206_;
		_tmp208_ = data_var;
		_tmp209_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp208_, "self");
		_tmp210_ = _tmp209_;
		vala_ccode_function_add_assignment (_tmp205_, (ValaCCodeExpression*) _tmp207_, (ValaCCodeExpression*) _tmp210_);
		_vala_ccode_node_unref0 (_tmp210_);
		_vala_ccode_node_unref0 (_tmp207_);
		_tmp211_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp212_ = _tmp211_;
		_tmp213_ = data_var;
		_tmp214_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp213_, "self");
		_tmp215_ = _tmp214_;
		_tmp216_ = vala_ccode_constant_new ("NULL");
		_tmp217_ = _tmp216_;
		vala_ccode_function_add_assignment (_tmp212_, (ValaCCodeExpression*) _tmp215_, (ValaCCodeExpression*) _tmp217_);
		_vala_ccode_node_unref0 (_tmp217_);
		_vala_ccode_node_unref0 (_tmp215_);
		_tmp218_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp219_ = _tmp218_;
		_tmp220_ = vala_ccode_identifier_new ("result");
		_tmp221_ = _tmp220_;
		vala_ccode_function_add_return (_tmp219_, (ValaCCodeExpression*) _tmp221_);
		_vala_ccode_node_unref0 (_tmp221_);
	} else {
		ValaDataType* _tmp222_;
		gboolean _tmp223_;
		_tmp222_ = return_type;
		_tmp223_ = vala_data_type_is_real_non_null_struct_type (_tmp222_);
		if (_tmp223_) {
			ValaCCodeExpression* cexpr = NULL;
			ValaCCodeIdentifier* _tmp224_;
			ValaCCodeMemberAccess* _tmp225_;
			ValaDataType* _tmp226_;
			gboolean _tmp227_;
			ValaCCodeFunction* _tmp236_;
			ValaCCodeFunction* _tmp237_;
			ValaCCodeIdentifier* _tmp238_;
			ValaCCodeIdentifier* _tmp239_;
			ValaCCodeUnaryExpression* _tmp240_;
			ValaCCodeUnaryExpression* _tmp241_;
			ValaCCodeExpression* _tmp242_;
			_tmp224_ = data_var;
			_tmp225_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp224_, "result");
			cexpr = (ValaCCodeExpression*) _tmp225_;
			_tmp226_ = return_type;
			_tmp227_ = vala_ccode_base_module_requires_copy ((ValaCCodeBaseModule*) self, _tmp226_);
			if (_tmp227_) {
				ValaDataType* _tmp228_;
				ValaCCodeExpression* _tmp229_;
				ValaGLibValue* _tmp230_;
				ValaGLibValue* _tmp231_;
				ValaDataType* _tmp232_;
				ValaTargetValue* _tmp233_;
				ValaTargetValue* _tmp234_;
				ValaCCodeExpression* _tmp235_;
				_tmp228_ = return_type;
				_tmp229_ = cexpr;
				_tmp230_ = vala_glib_value_new (_tmp228_, _tmp229_, TRUE);
				_tmp231_ = _tmp230_;
				_tmp232_ = return_type;
				_tmp233_ = vala_ccode_base_module_copy_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp231_, (ValaCodeNode*) _tmp232_);
				_tmp234_ = _tmp233_;
				_tmp235_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp234_);
				_vala_ccode_node_unref0 (cexpr);
				cexpr = _tmp235_;
				_vala_target_value_unref0 (_tmp234_);
				_vala_target_value_unref0 (_tmp231_);
			}
			_tmp236_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp237_ = _tmp236_;
			_tmp238_ = vala_ccode_identifier_new ("result");
			_tmp239_ = _tmp238_;
			_tmp240_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp239_);
			_tmp241_ = _tmp240_;
			_tmp242_ = cexpr;
			vala_ccode_function_add_assignment (_tmp237_, (ValaCCodeExpression*) _tmp241_, _tmp242_);
			_vala_ccode_node_unref0 (_tmp241_);
			_vala_ccode_node_unref0 (_tmp239_);
			_vala_ccode_node_unref0 (cexpr);
		} else {
			ValaDataType* _tmp243_;
			_tmp243_ = return_type;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp243_, VALA_TYPE_VOID_TYPE)) {
				ValaCCodeFunction* _tmp244_;
				ValaCCodeFunction* _tmp245_;
				ValaCCodeIdentifier* _tmp246_;
				ValaCCodeIdentifier* _tmp247_;
				ValaCCodeIdentifier* _tmp248_;
				ValaCCodeMemberAccess* _tmp249_;
				ValaCCodeMemberAccess* _tmp250_;
				ValaDataType* _tmp251_;
				gboolean _tmp297_ = FALSE;
				ValaDataType* _tmp298_;
				ValaCCodeFunction* _tmp309_;
				ValaCCodeFunction* _tmp310_;
				ValaCCodeIdentifier* _tmp311_;
				ValaCCodeIdentifier* _tmp312_;
				_tmp244_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp245_ = _tmp244_;
				_tmp246_ = vala_ccode_identifier_new ("result");
				_tmp247_ = _tmp246_;
				_tmp248_ = data_var;
				_tmp249_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp248_, "result");
				_tmp250_ = _tmp249_;
				vala_ccode_function_add_assignment (_tmp245_, (ValaCCodeExpression*) _tmp247_, (ValaCCodeExpression*) _tmp250_);
				_vala_ccode_node_unref0 (_tmp250_);
				_vala_ccode_node_unref0 (_tmp247_);
				_tmp251_ = return_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp251_, VALA_TYPE_ARRAY_TYPE)) {
					ValaArrayType* array_type = NULL;
					ValaDataType* _tmp252_;
					ValaArrayType* _tmp253_;
					ValaMethod* _tmp254_;
					gboolean _tmp255_;
					_tmp252_ = return_type;
					_tmp253_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp252_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
					array_type = _tmp253_;
					_tmp254_ = m;
					_tmp255_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp254_);
					if (_tmp255_) {
						{
							gint dim = 0;
							dim = 1;
							{
								gboolean _tmp256_ = FALSE;
								_tmp256_ = TRUE;
								while (TRUE) {
									gint _tmp258_;
									ValaArrayType* _tmp259_;
									gint _tmp260_;
									gint _tmp261_;
									ValaCCodeFunction* _tmp262_;
									ValaCCodeFunction* _tmp263_;
									gint _tmp264_;
									gchar* _tmp265_;
									gchar* _tmp266_;
									ValaCCodeIdentifier* _tmp267_;
									ValaCCodeIdentifier* _tmp268_;
									ValaCCodeUnaryExpression* _tmp269_;
									ValaCCodeUnaryExpression* _tmp270_;
									ValaCCodeIdentifier* _tmp271_;
									gint _tmp272_;
									gchar* _tmp273_;
									gchar* _tmp274_;
									ValaCCodeMemberAccess* _tmp275_;
									ValaCCodeMemberAccess* _tmp276_;
									if (!_tmp256_) {
										gint _tmp257_;
										_tmp257_ = dim;
										dim = _tmp257_ + 1;
									}
									_tmp256_ = FALSE;
									_tmp258_ = dim;
									_tmp259_ = array_type;
									_tmp260_ = vala_array_type_get_rank (_tmp259_);
									_tmp261_ = _tmp260_;
									if (!(_tmp258_ <= _tmp261_)) {
										break;
									}
									_tmp262_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
									_tmp263_ = _tmp262_;
									_tmp264_ = dim;
									_tmp265_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp264_);
									_tmp266_ = _tmp265_;
									_tmp267_ = vala_ccode_identifier_new (_tmp266_);
									_tmp268_ = _tmp267_;
									_tmp269_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp268_);
									_tmp270_ = _tmp269_;
									_tmp271_ = data_var;
									_tmp272_ = dim;
									_tmp273_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp272_);
									_tmp274_ = _tmp273_;
									_tmp275_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp271_, _tmp274_);
									_tmp276_ = _tmp275_;
									vala_ccode_function_add_assignment (_tmp263_, (ValaCCodeExpression*) _tmp270_, (ValaCCodeExpression*) _tmp276_);
									_vala_ccode_node_unref0 (_tmp276_);
									_g_free0 (_tmp274_);
									_vala_ccode_node_unref0 (_tmp270_);
									_vala_ccode_node_unref0 (_tmp268_);
									_g_free0 (_tmp266_);
								}
							}
						}
					}
					_vala_code_node_unref0 (array_type);
				} else {
					gboolean _tmp277_ = FALSE;
					ValaDataType* _tmp278_;
					_tmp278_ = return_type;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp278_, VALA_TYPE_DELEGATE_TYPE)) {
						ValaDataType* _tmp279_;
						ValaDelegate* _tmp280_;
						ValaDelegate* _tmp281_;
						gboolean _tmp282_;
						gboolean _tmp283_;
						_tmp279_ = return_type;
						_tmp280_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp279_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
						_tmp281_ = _tmp280_;
						_tmp282_ = vala_delegate_get_has_target (_tmp281_);
						_tmp283_ = _tmp282_;
						_tmp277_ = _tmp283_;
					} else {
						_tmp277_ = FALSE;
					}
					if (_tmp277_) {
						ValaCCodeFunction* _tmp284_;
						ValaCCodeFunction* _tmp285_;
						gchar* _tmp286_;
						gchar* _tmp287_;
						ValaCCodeIdentifier* _tmp288_;
						ValaCCodeIdentifier* _tmp289_;
						ValaCCodeUnaryExpression* _tmp290_;
						ValaCCodeUnaryExpression* _tmp291_;
						ValaCCodeIdentifier* _tmp292_;
						gchar* _tmp293_;
						gchar* _tmp294_;
						ValaCCodeMemberAccess* _tmp295_;
						ValaCCodeMemberAccess* _tmp296_;
						_tmp284_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp285_ = _tmp284_;
						_tmp286_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
						_tmp287_ = _tmp286_;
						_tmp288_ = vala_ccode_identifier_new (_tmp287_);
						_tmp289_ = _tmp288_;
						_tmp290_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp289_);
						_tmp291_ = _tmp290_;
						_tmp292_ = data_var;
						_tmp293_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
						_tmp294_ = _tmp293_;
						_tmp295_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp292_, _tmp294_);
						_tmp296_ = _tmp295_;
						vala_ccode_function_add_assignment (_tmp285_, (ValaCCodeExpression*) _tmp291_, (ValaCCodeExpression*) _tmp296_);
						_vala_ccode_node_unref0 (_tmp296_);
						_g_free0 (_tmp294_);
						_vala_ccode_node_unref0 (_tmp291_);
						_vala_ccode_node_unref0 (_tmp289_);
						_g_free0 (_tmp287_);
					}
				}
				_tmp298_ = return_type;
				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp298_, VALA_TYPE_VALUE_TYPE)) {
					_tmp297_ = TRUE;
				} else {
					ValaDataType* _tmp299_;
					gboolean _tmp300_;
					gboolean _tmp301_;
					_tmp299_ = return_type;
					_tmp300_ = vala_data_type_get_nullable (_tmp299_);
					_tmp301_ = _tmp300_;
					_tmp297_ = _tmp301_;
				}
				if (_tmp297_) {
					ValaCCodeFunction* _tmp302_;
					ValaCCodeFunction* _tmp303_;
					ValaCCodeIdentifier* _tmp304_;
					ValaCCodeMemberAccess* _tmp305_;
					ValaCCodeMemberAccess* _tmp306_;
					ValaCCodeConstant* _tmp307_;
					ValaCCodeConstant* _tmp308_;
					_tmp302_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp303_ = _tmp302_;
					_tmp304_ = data_var;
					_tmp305_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp304_, "result");
					_tmp306_ = _tmp305_;
					_tmp307_ = vala_ccode_constant_new ("NULL");
					_tmp308_ = _tmp307_;
					vala_ccode_function_add_assignment (_tmp303_, (ValaCCodeExpression*) _tmp306_, (ValaCCodeExpression*) _tmp308_);
					_vala_ccode_node_unref0 (_tmp308_);
					_vala_ccode_node_unref0 (_tmp306_);
				}
				_tmp309_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp310_ = _tmp309_;
				_tmp311_ = vala_ccode_identifier_new ("result");
				_tmp312_ = _tmp311_;
				vala_ccode_function_add_return (_tmp310_, (ValaCCodeExpression*) _tmp312_);
				_vala_ccode_node_unref0 (_tmp312_);
			}
		}
	}
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp313_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp314_ = finishfunc;
	vala_ccode_file_add_function (_tmp313_, _tmp314_);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (async_result_cast);
	_vala_ccode_node_unref0 (data_var);
	_vala_code_node_unref0 (return_type);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (finishfunc);
	_g_free0 (dataname);
}


static gchar* vala_gasync_module_real_generate_ready_function (ValaCCodeBaseModule* base, ValaMethod* m) {
	ValaGAsyncModule * self;
	gchar* result = NULL;
	gchar* dataname = NULL;
	ValaMethod* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeFunction* readyfunc = NULL;
	ValaMethod* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	const gchar* _tmp15_;
	const gchar* _tmp16_;
	gboolean _tmp17_;
	ValaCCodeFunction* _tmp22_;
	ValaCCodeParameter* _tmp23_;
	ValaCCodeParameter* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	ValaCCodeParameter* _tmp26_;
	ValaCCodeParameter* _tmp27_;
	ValaCCodeFunction* _tmp28_;
	ValaCCodeParameter* _tmp29_;
	ValaCCodeParameter* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeIdentifier* data_var = NULL;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	const gchar* _tmp35_;
	gchar* _tmp36_;
	gchar* _tmp37_;
	ValaCCodeVariableDeclarator* _tmp38_;
	ValaCCodeVariableDeclarator* _tmp39_;
	ValaCCodeFunction* _tmp40_;
	ValaCCodeFunction* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeFunction* _tmp45_;
	ValaCCodeFunction* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeMemberAccess* _tmp48_;
	ValaCCodeMemberAccess* _tmp49_;
	ValaCCodeIdentifier* _tmp50_;
	ValaCCodeIdentifier* _tmp51_;
	ValaCCodeFunction* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeIdentifier* _tmp54_;
	ValaCCodeMemberAccess* _tmp55_;
	ValaCCodeMemberAccess* _tmp56_;
	ValaCCodeIdentifier* _tmp57_;
	ValaCCodeIdentifier* _tmp58_;
	ValaCodeContext* _tmp59_;
	ValaCodeContext* _tmp60_;
	gboolean _tmp61_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaMethod* _tmp69_;
	gchar* _tmp70_;
	gchar* _tmp71_;
	gchar* _tmp72_;
	gchar* _tmp73_;
	ValaCCodeIdentifier* _tmp74_;
	ValaCCodeIdentifier* _tmp75_;
	ValaCCodeFunctionCall* _tmp76_;
	ValaCCodeFunctionCall* _tmp77_;
	ValaCCodeFunctionCall* _tmp78_;
	ValaCCodeIdentifier* _tmp79_;
	ValaCCodeFunction* _tmp80_;
	ValaCCodeFunction* _tmp81_;
	ValaCCodeFunctionCall* _tmp82_;
	ValaCCodeFunction* _tmp83_;
	ValaCCodeFunction* _tmp84_;
	ValaCCodeModifiers _tmp85_;
	ValaCCodeModifiers _tmp86_;
	ValaCCodeFile* _tmp87_;
	ValaCCodeFunction* _tmp88_;
	ValaCCodeFile* _tmp89_;
	ValaCCodeFunction* _tmp90_;
	ValaCCodeFunction* _tmp91_;
	const gchar* _tmp92_;
	const gchar* _tmp93_;
	gchar* _tmp94_;
	self = (ValaGAsyncModule*) base;
	g_return_val_if_fail (m != NULL, NULL);
	_tmp0_ = m;
	_tmp1_ = vala_get_ccode_name ((ValaCodeNode*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_symbol_lower_case_to_camel_case (_tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strconcat (_tmp4_, "Data", NULL);
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	_g_free0 (_tmp2_);
	dataname = _tmp6_;
	_tmp7_ = m;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) _tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strconcat (_tmp9_, "_ready", NULL);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_function_new (_tmp11_, "void");
	_tmp13_ = _tmp12_;
	_g_free0 (_tmp11_);
	_g_free0 (_tmp9_);
	readyfunc = _tmp13_;
	_tmp14_ = readyfunc;
	_tmp15_ = vala_ccode_function_get_name (_tmp14_);
	_tmp16_ = _tmp15_;
	_tmp17_ = vala_ccode_base_module_add_wrapper ((ValaCCodeBaseModule*) self, _tmp16_);
	if (!_tmp17_) {
		ValaCCodeFunction* _tmp18_;
		const gchar* _tmp19_;
		const gchar* _tmp20_;
		gchar* _tmp21_;
		_tmp18_ = readyfunc;
		_tmp19_ = vala_ccode_function_get_name (_tmp18_);
		_tmp20_ = _tmp19_;
		_tmp21_ = g_strdup (_tmp20_);
		result = _tmp21_;
		_vala_ccode_node_unref0 (readyfunc);
		_g_free0 (dataname);
		return result;
	}
	_tmp22_ = readyfunc;
	_tmp23_ = vala_ccode_parameter_new ("source_object", "GObject*");
	_tmp24_ = _tmp23_;
	vala_ccode_function_add_parameter (_tmp22_, _tmp24_);
	_vala_ccode_node_unref0 (_tmp24_);
	_tmp25_ = readyfunc;
	_tmp26_ = vala_ccode_parameter_new ("_res_", "GAsyncResult*");
	_tmp27_ = _tmp26_;
	vala_ccode_function_add_parameter (_tmp25_, _tmp27_);
	_vala_ccode_node_unref0 (_tmp27_);
	_tmp28_ = readyfunc;
	_tmp29_ = vala_ccode_parameter_new ("_user_data_", "gpointer");
	_tmp30_ = _tmp29_;
	vala_ccode_function_add_parameter (_tmp28_, _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_tmp31_ = readyfunc;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp31_);
	_tmp32_ = vala_ccode_identifier_new ("_data_");
	data_var = _tmp32_;
	_tmp33_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp34_ = _tmp33_;
	_tmp35_ = dataname;
	_tmp36_ = g_strconcat (_tmp35_, "*", NULL);
	_tmp37_ = _tmp36_;
	_tmp38_ = vala_ccode_variable_declarator_new ("_data_", NULL, NULL);
	_tmp39_ = _tmp38_;
	vala_ccode_function_add_declaration (_tmp34_, _tmp37_, (ValaCCodeDeclarator*) _tmp39_, 0);
	_vala_ccode_node_unref0 (_tmp39_);
	_g_free0 (_tmp37_);
	_tmp40_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp41_ = _tmp40_;
	_tmp42_ = data_var;
	_tmp43_ = vala_ccode_identifier_new ("_user_data_");
	_tmp44_ = _tmp43_;
	vala_ccode_function_add_assignment (_tmp41_, (ValaCCodeExpression*) _tmp42_, (ValaCCodeExpression*) _tmp44_);
	_vala_ccode_node_unref0 (_tmp44_);
	_tmp45_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp46_ = _tmp45_;
	_tmp47_ = data_var;
	_tmp48_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp47_, "_source_object_");
	_tmp49_ = _tmp48_;
	_tmp50_ = vala_ccode_identifier_new ("source_object");
	_tmp51_ = _tmp50_;
	vala_ccode_function_add_assignment (_tmp46_, (ValaCCodeExpression*) _tmp49_, (ValaCCodeExpression*) _tmp51_);
	_vala_ccode_node_unref0 (_tmp51_);
	_vala_ccode_node_unref0 (_tmp49_);
	_tmp52_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp53_ = _tmp52_;
	_tmp54_ = data_var;
	_tmp55_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp54_, "_res_");
	_tmp56_ = _tmp55_;
	_tmp57_ = vala_ccode_identifier_new ("_res_");
	_tmp58_ = _tmp57_;
	vala_ccode_function_add_assignment (_tmp53_, (ValaCCodeExpression*) _tmp56_, (ValaCCodeExpression*) _tmp58_);
	_vala_ccode_node_unref0 (_tmp58_);
	_vala_ccode_node_unref0 (_tmp56_);
	_tmp59_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp60_ = _tmp59_;
	_tmp61_ = vala_code_context_require_glib_version (_tmp60_, 2, 44);
	if (!_tmp61_) {
		ValaCCodeFunction* _tmp62_;
		ValaCCodeFunction* _tmp63_;
		ValaCCodeIdentifier* _tmp64_;
		ValaCCodeMemberAccess* _tmp65_;
		ValaCCodeMemberAccess* _tmp66_;
		ValaCCodeConstant* _tmp67_;
		ValaCCodeConstant* _tmp68_;
		_tmp62_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp63_ = _tmp62_;
		_tmp64_ = data_var;
		_tmp65_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp64_, "_task_complete_");
		_tmp66_ = _tmp65_;
		_tmp67_ = vala_ccode_constant_new ("TRUE");
		_tmp68_ = _tmp67_;
		vala_ccode_function_add_assignment (_tmp63_, (ValaCCodeExpression*) _tmp66_, (ValaCCodeExpression*) _tmp68_);
		_vala_ccode_node_unref0 (_tmp68_);
		_vala_ccode_node_unref0 (_tmp66_);
	}
	_tmp69_ = m;
	_tmp70_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp69_);
	_tmp71_ = _tmp70_;
	_tmp72_ = g_strconcat (_tmp71_, "_co", NULL);
	_tmp73_ = _tmp72_;
	_tmp74_ = vala_ccode_identifier_new (_tmp73_);
	_tmp75_ = _tmp74_;
	_tmp76_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp75_);
	_tmp77_ = _tmp76_;
	_vala_ccode_node_unref0 (_tmp75_);
	_g_free0 (_tmp73_);
	_g_free0 (_tmp71_);
	ccall = _tmp77_;
	_tmp78_ = ccall;
	_tmp79_ = data_var;
	vala_ccode_function_call_add_argument (_tmp78_, (ValaCCodeExpression*) _tmp79_);
	_tmp80_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp81_ = _tmp80_;
	_tmp82_ = ccall;
	vala_ccode_function_add_expression (_tmp81_, (ValaCCodeExpression*) _tmp82_);
	_tmp83_ = readyfunc;
	_tmp84_ = readyfunc;
	_tmp85_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp84_);
	_tmp86_ = _tmp85_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp84_, _tmp86_ | VALA_CCODE_MODIFIERS_STATIC);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp87_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp88_ = readyfunc;
	vala_ccode_file_add_function_declaration (_tmp87_, _tmp88_);
	_tmp89_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp90_ = readyfunc;
	vala_ccode_file_add_function (_tmp89_, _tmp90_);
	_tmp91_ = readyfunc;
	_tmp92_ = vala_ccode_function_get_name (_tmp91_);
	_tmp93_ = _tmp92_;
	_tmp94_ = g_strdup (_tmp93_);
	result = _tmp94_;
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (data_var);
	_vala_ccode_node_unref0 (readyfunc);
	_g_free0 (dataname);
	return result;
}


static void vala_gasync_module_real_generate_virtual_method_declaration (ValaGTypeModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeStruct* type_struct) {
	ValaGAsyncModule * self;
	ValaMethod* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	gboolean _tmp6_ = FALSE;
	ValaMethod* _tmp7_;
	gboolean _tmp8_;
	gboolean _tmp9_;
	ValaDataType* creturn_type = NULL;
	ValaMethod* _tmp13_;
	ValaDataType* _tmp14_;
	ValaDataType* _tmp15_;
	ValaDataType* _tmp16_;
	ValaMethod* _tmp17_;
	ValaDataType* _tmp18_;
	ValaDataType* _tmp19_;
	gboolean _tmp20_;
	ValaCCodeFunctionDeclarator* vdeclarator = NULL;
	ValaMethod* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	ValaCCodeFunctionDeclarator* _tmp25_;
	ValaCCodeFunctionDeclarator* _tmp26_;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp27_;
	GEqualFunc _tmp28_;
	GEqualFunc _tmp29_;
	ValaHashMap* _tmp30_;
	ValaMethod* _tmp31_;
	ValaCCodeFile* _tmp32_;
	ValaHashMap* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeFunctionDeclarator* _tmp36_;
	ValaCCodeDeclaration* vdecl = NULL;
	ValaCCodeDeclaration* _tmp37_;
	ValaCCodeDeclaration* _tmp38_;
	ValaCCodeFunctionDeclarator* _tmp39_;
	ValaCCodeStruct* _tmp40_;
	ValaCCodeDeclaration* _tmp41_;
	ValaMethod* _tmp42_;
	gchar* _tmp43_;
	gchar* _tmp44_;
	ValaCCodeFunctionDeclarator* _tmp45_;
	GHashFunc _tmp46_;
	GEqualFunc _tmp47_;
	GEqualFunc _tmp48_;
	ValaHashMap* _tmp49_;
	ValaMethod* _tmp50_;
	ValaCCodeFile* _tmp51_;
	ValaHashMap* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeFunction* _tmp54_;
	ValaCCodeFunctionDeclarator* _tmp55_;
	ValaDataType* _tmp56_;
	gchar* _tmp57_;
	gchar* _tmp58_;
	ValaCCodeDeclaration* _tmp59_;
	ValaCCodeDeclaration* _tmp60_;
	ValaCCodeFunctionDeclarator* _tmp61_;
	ValaCCodeStruct* _tmp62_;
	ValaCCodeDeclaration* _tmp63_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	g_return_if_fail (type_struct != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_coroutine (_tmp0_);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		ValaMethod* _tmp3_;
		ValaCCodeFile* _tmp4_;
		ValaCCodeStruct* _tmp5_;
		_tmp3_ = m;
		_tmp4_ = decl_space;
		_tmp5_ = type_struct;
		VALA_GTYPE_MODULE_CLASS (vala_gasync_module_parent_class)->generate_virtual_method_declaration ((ValaGTypeModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp3_, _tmp4_, _tmp5_);
		return;
	}
	_tmp7_ = m;
	_tmp8_ = vala_method_get_is_abstract (_tmp7_);
	_tmp9_ = _tmp8_;
	if (!_tmp9_) {
		ValaMethod* _tmp10_;
		gboolean _tmp11_;
		gboolean _tmp12_;
		_tmp10_ = m;
		_tmp11_ = vala_method_get_is_virtual (_tmp10_);
		_tmp12_ = _tmp11_;
		_tmp6_ = !_tmp12_;
	} else {
		_tmp6_ = FALSE;
	}
	if (_tmp6_) {
		return;
	}
	_tmp13_ = m;
	_tmp14_ = vala_callable_get_return_type ((ValaCallable*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = _vala_code_node_ref0 (_tmp15_);
	creturn_type = _tmp16_;
	_tmp17_ = m;
	_tmp18_ = vala_callable_get_return_type ((ValaCallable*) _tmp17_);
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_data_type_is_real_non_null_struct_type (_tmp19_);
	if (_tmp20_) {
		ValaVoidType* _tmp21_;
		_tmp21_ = vala_void_type_new (NULL);
		_vala_code_node_unref0 (creturn_type);
		creturn_type = (ValaDataType*) _tmp21_;
	}
	_tmp22_ = m;
	_tmp23_ = vala_get_ccode_vfunc_name (_tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = vala_ccode_function_declarator_new (_tmp24_);
	_tmp26_ = _tmp25_;
	_g_free0 (_tmp24_);
	vdeclarator = _tmp26_;
	_tmp27_ = g_direct_hash;
	_tmp28_ = g_direct_equal;
	_tmp29_ = g_direct_equal;
	_tmp30_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp27_, _tmp28_, _tmp29_);
	cparam_map = _tmp30_;
	_tmp31_ = m;
	_tmp32_ = decl_space;
	_tmp33_ = cparam_map;
	_tmp34_ = vala_ccode_function_new ("fake", "void");
	_tmp35_ = _tmp34_;
	_tmp36_ = vdeclarator;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp31_, _tmp32_, (ValaMap*) _tmp33_, _tmp35_, _tmp36_, NULL, NULL, 1);
	_vala_ccode_node_unref0 (_tmp35_);
	_tmp37_ = vala_ccode_declaration_new ("void");
	vdecl = _tmp37_;
	_tmp38_ = vdecl;
	_tmp39_ = vdeclarator;
	vala_ccode_declaration_add_declarator (_tmp38_, (ValaCCodeDeclarator*) _tmp39_);
	_tmp40_ = type_struct;
	_tmp41_ = vdecl;
	vala_ccode_struct_add_declaration (_tmp40_, _tmp41_);
	_tmp42_ = m;
	_tmp43_ = vala_get_ccode_finish_vfunc_name (_tmp42_);
	_tmp44_ = _tmp43_;
	_tmp45_ = vala_ccode_function_declarator_new (_tmp44_);
	_vala_ccode_node_unref0 (vdeclarator);
	vdeclarator = _tmp45_;
	_g_free0 (_tmp44_);
	_tmp46_ = g_direct_hash;
	_tmp47_ = g_direct_equal;
	_tmp48_ = g_direct_equal;
	_tmp49_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp46_, _tmp47_, _tmp48_);
	_vala_map_unref0 (cparam_map);
	cparam_map = _tmp49_;
	_tmp50_ = m;
	_tmp51_ = decl_space;
	_tmp52_ = cparam_map;
	_tmp53_ = vala_ccode_function_new ("fake", "void");
	_tmp54_ = _tmp53_;
	_tmp55_ = vdeclarator;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp50_, _tmp51_, (ValaMap*) _tmp52_, _tmp54_, _tmp55_, NULL, NULL, 2);
	_vala_ccode_node_unref0 (_tmp54_);
	_tmp56_ = creturn_type;
	_tmp57_ = vala_get_ccode_name ((ValaCodeNode*) _tmp56_);
	_tmp58_ = _tmp57_;
	_tmp59_ = vala_ccode_declaration_new (_tmp58_);
	_vala_ccode_node_unref0 (vdecl);
	vdecl = _tmp59_;
	_g_free0 (_tmp58_);
	_tmp60_ = vdecl;
	_tmp61_ = vdeclarator;
	vala_ccode_declaration_add_declarator (_tmp60_, (ValaCCodeDeclarator*) _tmp61_);
	_tmp62_ = type_struct;
	_tmp63_ = vdecl;
	vala_ccode_struct_add_declaration (_tmp62_, _tmp63_);
	_vala_ccode_node_unref0 (vdecl);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (vdeclarator);
	_vala_code_node_unref0 (creturn_type);
}


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


static void vala_gasync_module_real_visit_yield_statement (ValaCodeVisitor* base, ValaYieldStatement* stmt) {
	ValaGAsyncModule * self;
	gboolean _tmp0_;
	ValaYieldStatement* _tmp1_;
	ValaExpression* _tmp2_;
	ValaExpression* _tmp3_;
	ValaYieldStatement* _tmp30_;
	ValaExpression* _tmp31_;
	ValaExpression* _tmp32_;
	gboolean _tmp33_;
	gboolean _tmp34_;
	ValaCCodeFunction* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	ValaYieldStatement* _tmp38_;
	ValaExpression* _tmp39_;
	ValaExpression* _tmp40_;
	ValaCCodeExpression* _tmp41_;
	ValaCCodeExpression* _tmp42_;
	gboolean _tmp43_ = FALSE;
	ValaYieldStatement* _tmp44_;
	gboolean _tmp45_;
	gboolean _tmp46_;
	ValaArrayList* _tmp72_;
	ValaArrayList* _tmp73_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self);
	if (!_tmp0_) {
		return;
	}
	_tmp1_ = stmt;
	_tmp2_ = vala_yield_statement_get_yield_expression (_tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ == NULL) {
		gint state = 0;
		ValaCCodeBaseModuleEmitContext* _tmp4_;
		gint _tmp5_;
		ValaCCodeFunction* _tmp6_;
		ValaCCodeFunction* _tmp7_;
		ValaCCodeIdentifier* _tmp8_;
		ValaCCodeIdentifier* _tmp9_;
		ValaCCodeMemberAccess* _tmp10_;
		ValaCCodeMemberAccess* _tmp11_;
		gint _tmp12_;
		gchar* _tmp13_;
		gchar* _tmp14_;
		ValaCCodeConstant* _tmp15_;
		ValaCCodeConstant* _tmp16_;
		ValaCCodeFunction* _tmp17_;
		ValaCCodeFunction* _tmp18_;
		ValaCCodeConstant* _tmp19_;
		ValaCCodeConstant* _tmp20_;
		ValaCCodeFunction* _tmp21_;
		ValaCCodeFunction* _tmp22_;
		gint _tmp23_;
		gchar* _tmp24_;
		gchar* _tmp25_;
		ValaCCodeFunction* _tmp26_;
		ValaCCodeFunction* _tmp27_;
		ValaCCodeEmptyStatement* _tmp28_;
		ValaCCodeEmptyStatement* _tmp29_;
		_tmp4_ = ((ValaCCodeBaseModule*) self)->emit_context;
		_tmp5_ = _tmp4_->next_coroutine_state;
		_tmp4_->next_coroutine_state = _tmp5_ + 1;
		state = _tmp5_;
		_tmp6_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_ccode_identifier_new ("_data_");
		_tmp9_ = _tmp8_;
		_tmp10_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp9_, "_state_");
		_tmp11_ = _tmp10_;
		_tmp12_ = state;
		_tmp13_ = g_strdup_printf ("%i", _tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_ccode_constant_new (_tmp14_);
		_tmp16_ = _tmp15_;
		vala_ccode_function_add_assignment (_tmp7_, (ValaCCodeExpression*) _tmp11_, (ValaCCodeExpression*) _tmp16_);
		_vala_ccode_node_unref0 (_tmp16_);
		_g_free0 (_tmp14_);
		_vala_ccode_node_unref0 (_tmp11_);
		_vala_ccode_node_unref0 (_tmp9_);
		_tmp17_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_ccode_constant_new ("FALSE");
		_tmp20_ = _tmp19_;
		vala_ccode_function_add_return (_tmp18_, (ValaCCodeExpression*) _tmp20_);
		_vala_ccode_node_unref0 (_tmp20_);
		_tmp21_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp22_ = _tmp21_;
		_tmp23_ = state;
		_tmp24_ = g_strdup_printf ("_state_%d", _tmp23_);
		_tmp25_ = _tmp24_;
		vala_ccode_function_add_label (_tmp22_, _tmp25_);
		_g_free0 (_tmp25_);
		_tmp26_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp27_ = _tmp26_;
		_tmp28_ = vala_ccode_empty_statement_new ();
		_tmp29_ = _tmp28_;
		vala_ccode_function_add_statement (_tmp27_, (ValaCCodeNode*) _tmp29_);
		_vala_ccode_node_unref0 (_tmp29_);
		return;
	}
	_tmp30_ = stmt;
	_tmp31_ = vala_yield_statement_get_yield_expression (_tmp30_);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_code_node_get_error ((ValaCodeNode*) _tmp32_);
	_tmp34_ = _tmp33_;
	if (_tmp34_) {
		ValaYieldStatement* _tmp35_;
		_tmp35_ = stmt;
		vala_code_node_set_error ((ValaCodeNode*) _tmp35_, TRUE);
		return;
	}
	_tmp36_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp37_ = _tmp36_;
	_tmp38_ = stmt;
	_tmp39_ = vala_yield_statement_get_yield_expression (_tmp38_);
	_tmp40_ = _tmp39_;
	_tmp41_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp40_);
	_tmp42_ = _tmp41_;
	vala_ccode_function_add_expression (_tmp37_, _tmp42_);
	_vala_ccode_node_unref0 (_tmp42_);
	_tmp44_ = stmt;
	_tmp45_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp44_);
	_tmp46_ = _tmp45_;
	if (_tmp46_) {
		ValaYieldStatement* _tmp47_;
		ValaExpression* _tmp48_;
		ValaExpression* _tmp49_;
		gboolean _tmp50_;
		gboolean _tmp51_;
		_tmp47_ = stmt;
		_tmp48_ = vala_yield_statement_get_yield_expression (_tmp47_);
		_tmp49_ = _tmp48_;
		_tmp50_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp49_);
		_tmp51_ = _tmp50_;
		_tmp43_ = _tmp51_;
	} else {
		_tmp43_ = FALSE;
	}
	if (_tmp43_) {
		ValaYieldStatement* _tmp52_;
		ValaExpression* _tmp53_;
		ValaExpression* _tmp54_;
		_tmp52_ = stmt;
		_tmp53_ = vala_yield_statement_get_yield_expression (_tmp52_);
		_tmp54_ = _tmp53_;
		vala_ccode_base_module_add_simple_check ((ValaCCodeBaseModule*) self, (ValaCodeNode*) _tmp54_, FALSE);
	}
	{
		ValaArrayList* _value_list = NULL;
		ValaArrayList* _tmp55_;
		ValaArrayList* _tmp56_;
		ValaArrayList* _tmp57_;
		gint _value_size = 0;
		ValaArrayList* _tmp58_;
		gint _tmp59_;
		gint _tmp60_;
		gint _value_index = 0;
		_tmp55_ = vala_ccode_base_module_get_temp_ref_values ((ValaCCodeBaseModule*) self);
		_tmp56_ = _tmp55_;
		_tmp57_ = _vala_iterable_ref0 (_tmp56_);
		_value_list = _tmp57_;
		_tmp58_ = _value_list;
		_tmp59_ = vala_collection_get_size ((ValaCollection*) _tmp58_);
		_tmp60_ = _tmp59_;
		_value_size = _tmp60_;
		_value_index = -1;
		while (TRUE) {
			gint _tmp61_;
			gint _tmp62_;
			gint _tmp63_;
			ValaTargetValue* value = NULL;
			ValaArrayList* _tmp64_;
			gint _tmp65_;
			gpointer _tmp66_;
			ValaCCodeFunction* _tmp67_;
			ValaCCodeFunction* _tmp68_;
			ValaTargetValue* _tmp69_;
			ValaCCodeExpression* _tmp70_;
			ValaCCodeExpression* _tmp71_;
			_tmp61_ = _value_index;
			_value_index = _tmp61_ + 1;
			_tmp62_ = _value_index;
			_tmp63_ = _value_size;
			if (!(_tmp62_ < _tmp63_)) {
				break;
			}
			_tmp64_ = _value_list;
			_tmp65_ = _value_index;
			_tmp66_ = vala_list_get ((ValaList*) _tmp64_, _tmp65_);
			value = (ValaTargetValue*) _tmp66_;
			_tmp67_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp68_ = _tmp67_;
			_tmp69_ = value;
			_tmp70_ = vala_ccode_base_module_destroy_value ((ValaCCodeBaseModule*) self, _tmp69_, FALSE);
			_tmp71_ = _tmp70_;
			vala_ccode_function_add_expression (_tmp68_, _tmp71_);
			_vala_ccode_node_unref0 (_tmp71_);
			_vala_target_value_unref0 (value);
		}
		_vala_iterable_unref0 (_value_list);
	}
	_tmp72_ = vala_ccode_base_module_get_temp_ref_values ((ValaCCodeBaseModule*) self);
	_tmp73_ = _tmp72_;
	vala_collection_clear ((ValaCollection*) _tmp73_);
}


static void vala_gasync_module_real_return_with_exception (ValaGErrorModule* base, ValaCCodeExpression* error_expr) {
	ValaGAsyncModule * self;
	gboolean _tmp0_;
	ValaCCodeMemberAccess* async_result_expr = NULL;
	ValaCCodeIdentifier* _tmp2_;
	ValaCCodeIdentifier* _tmp3_;
	ValaCCodeMemberAccess* _tmp4_;
	ValaCCodeMemberAccess* _tmp5_;
	ValaCCodeFunctionCall* set_error = NULL;
	ValaCCodeIdentifier* _tmp6_;
	ValaCCodeIdentifier* _tmp7_;
	ValaCCodeFunctionCall* _tmp8_;
	ValaCCodeFunctionCall* _tmp9_;
	ValaCCodeMemberAccess* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	ValaCCodeExpression* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunctionCall* _tmp15_;
	ValaSymbol* _tmp16_;
	ValaSymbol* _tmp17_;
	ValaCCodeFunctionCall* unref = NULL;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaCCodeFunctionCall* _tmp21_;
	ValaCCodeFunctionCall* _tmp22_;
	ValaCCodeMemberAccess* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	ValaCCodeFunctionCall* _tmp26_;
	ValaCCodeFunction* _tmp27_;
	ValaCCodeFunction* _tmp28_;
	ValaCCodeConstant* _tmp29_;
	ValaCCodeConstant* _tmp30_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (error_expr != NULL);
	_tmp0_ = vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self);
	if (!_tmp0_) {
		ValaCCodeExpression* _tmp1_;
		_tmp1_ = error_expr;
		VALA_GERROR_MODULE_CLASS (vala_gasync_module_parent_class)->return_with_exception ((ValaGErrorModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp1_);
		return;
	}
	_tmp2_ = vala_ccode_identifier_new ("_data_");
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp3_, "_async_result");
	_tmp5_ = _tmp4_;
	_vala_ccode_node_unref0 (_tmp3_);
	async_result_expr = _tmp5_;
	set_error = NULL;
	_tmp6_ = vala_ccode_identifier_new ("g_task_return_error");
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp7_);
	_vala_ccode_node_unref0 (set_error);
	set_error = _tmp8_;
	_vala_ccode_node_unref0 (_tmp7_);
	_tmp9_ = set_error;
	_tmp10_ = async_result_expr;
	vala_ccode_function_call_add_argument (_tmp9_, (ValaCCodeExpression*) _tmp10_);
	_tmp11_ = set_error;
	_tmp12_ = error_expr;
	vala_ccode_function_call_add_argument (_tmp11_, _tmp12_);
	_tmp13_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp14_ = _tmp13_;
	_tmp15_ = set_error;
	vala_ccode_function_add_expression (_tmp14_, (ValaCCodeExpression*) _tmp15_);
	_tmp16_ = vala_ccode_base_module_get_current_symbol ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	vala_ccode_base_module_append_local_free ((ValaCCodeBaseModule*) self, _tmp17_, FALSE, NULL);
	_tmp18_ = vala_ccode_identifier_new ("g_object_unref");
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp19_);
	_tmp21_ = _tmp20_;
	_vala_ccode_node_unref0 (_tmp19_);
	unref = _tmp21_;
	_tmp22_ = unref;
	_tmp23_ = async_result_expr;
	vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp23_);
	_tmp24_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp25_ = _tmp24_;
	_tmp26_ = unref;
	vala_ccode_function_add_expression (_tmp25_, (ValaCCodeExpression*) _tmp26_);
	_tmp27_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp28_ = _tmp27_;
	_tmp29_ = vala_ccode_constant_new ("FALSE");
	_tmp30_ = _tmp29_;
	vala_ccode_function_add_return (_tmp28_, (ValaCCodeExpression*) _tmp30_);
	_vala_ccode_node_unref0 (_tmp30_);
	_vala_ccode_node_unref0 (unref);
	_vala_ccode_node_unref0 (set_error);
	_vala_ccode_node_unref0 (async_result_expr);
}


static void vala_gasync_module_real_visit_return_statement (ValaCodeVisitor* base, ValaReturnStatement* stmt) {
	ValaGAsyncModule * self;
	ValaReturnStatement* _tmp0_;
	gboolean _tmp1_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = stmt;
	VALA_CODE_VISITOR_CLASS (vala_gasync_module_parent_class)->visit_return_statement ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp0_);
	_tmp1_ = vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self);
	if (!_tmp1_) {
		return;
	}
	vala_ccode_method_module_complete_async ((ValaCCodeMethodModule*) self);
}


static void vala_gasync_module_real_generate_cparameters (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction) {
	ValaGAsyncModule * self;
	ValaMethod* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaMethod* _tmp32_;
	ValaCCodeFile* _tmp33_;
	ValaMap* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeFunctionDeclarator* _tmp36_;
	ValaMap* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	gint _tmp39_;
	self = (ValaGAsyncModule*) base;
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	g_return_if_fail (cparam_map != NULL);
	g_return_if_fail (func != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_coroutine (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		ValaCCodeFile* _tmp3_;
		gint _tmp4_;
		_tmp3_ = decl_space;
		vala_ccode_file_add_include (_tmp3_, "gio/gio.h", FALSE);
		_tmp4_ = direction;
		if (_tmp4_ == 1) {
			ValaMap* _tmp5_;
			gint _tmp6_;
			ValaCCodeParameter* _tmp7_;
			ValaCCodeParameter* _tmp8_;
			ValaMap* _tmp9_;
			gint _tmp10_;
			ValaCCodeParameter* _tmp11_;
			ValaCCodeParameter* _tmp12_;
			ValaMap* _tmp13_;
			_tmp5_ = cparam_map;
			_tmp6_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) -1, FALSE);
			_tmp7_ = vala_ccode_parameter_new ("_callback_", "GAsyncReadyCallback");
			_tmp8_ = _tmp7_;
			vala_map_set (_tmp5_, (gpointer) ((gintptr) _tmp6_), _tmp8_);
			_vala_ccode_node_unref0 (_tmp8_);
			_tmp9_ = cparam_map;
			_tmp10_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, -0.9, FALSE);
			_tmp11_ = vala_ccode_parameter_new ("_user_data_", "gpointer");
			_tmp12_ = _tmp11_;
			vala_map_set (_tmp9_, (gpointer) ((gintptr) _tmp10_), _tmp12_);
			_vala_ccode_node_unref0 (_tmp12_);
			_tmp13_ = carg_map;
			if (_tmp13_ != NULL) {
				ValaMap* _tmp14_;
				gint _tmp15_;
				ValaCCodeIdentifier* _tmp16_;
				ValaCCodeIdentifier* _tmp17_;
				ValaMap* _tmp18_;
				gint _tmp19_;
				ValaCCodeIdentifier* _tmp20_;
				ValaCCodeIdentifier* _tmp21_;
				_tmp14_ = carg_map;
				_tmp15_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) -1, FALSE);
				_tmp16_ = vala_ccode_identifier_new ("_callback_");
				_tmp17_ = _tmp16_;
				vala_map_set (_tmp14_, (gpointer) ((gintptr) _tmp15_), (ValaCCodeExpression*) _tmp17_);
				_vala_ccode_node_unref0 (_tmp17_);
				_tmp18_ = carg_map;
				_tmp19_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, -0.9, FALSE);
				_tmp20_ = vala_ccode_identifier_new ("_user_data_");
				_tmp21_ = _tmp20_;
				vala_map_set (_tmp18_, (gpointer) ((gintptr) _tmp19_), (ValaCCodeExpression*) _tmp21_);
				_vala_ccode_node_unref0 (_tmp21_);
			}
		} else {
			gint _tmp22_;
			_tmp22_ = direction;
			if (_tmp22_ == 2) {
				ValaMap* _tmp23_;
				gint _tmp24_;
				ValaCCodeParameter* _tmp25_;
				ValaCCodeParameter* _tmp26_;
				ValaMap* _tmp27_;
				_tmp23_ = cparam_map;
				_tmp24_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, 0.1, FALSE);
				_tmp25_ = vala_ccode_parameter_new ("_res_", "GAsyncResult*");
				_tmp26_ = _tmp25_;
				vala_map_set (_tmp23_, (gpointer) ((gintptr) _tmp24_), _tmp26_);
				_vala_ccode_node_unref0 (_tmp26_);
				_tmp27_ = carg_map;
				if (_tmp27_ != NULL) {
					ValaMap* _tmp28_;
					gint _tmp29_;
					ValaCCodeIdentifier* _tmp30_;
					ValaCCodeIdentifier* _tmp31_;
					_tmp28_ = carg_map;
					_tmp29_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, 0.1, FALSE);
					_tmp30_ = vala_ccode_identifier_new ("_res_");
					_tmp31_ = _tmp30_;
					vala_map_set (_tmp28_, (gpointer) ((gintptr) _tmp29_), (ValaCCodeExpression*) _tmp31_);
					_vala_ccode_node_unref0 (_tmp31_);
				}
			}
		}
	}
	_tmp32_ = m;
	_tmp33_ = decl_space;
	_tmp34_ = cparam_map;
	_tmp35_ = func;
	_tmp36_ = vdeclarator;
	_tmp37_ = carg_map;
	_tmp38_ = vcall;
	_tmp39_ = direction;
	VALA_CCODE_BASE_MODULE_CLASS (vala_gasync_module_parent_class)->generate_cparameters ((ValaCCodeBaseModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GTK_MODULE, ValaGtkModule), _tmp32_, _tmp33_, _tmp34_, _tmp35_, _tmp36_, _tmp37_, _tmp38_, _tmp39_);
}


gchar* vala_gasync_module_generate_async_callback_wrapper (ValaGAsyncModule* self) {
	gchar* result = NULL;
	gchar* async_callback_wrapper_func = NULL;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	gboolean _tmp2_;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeFunctionCall* res_ref = NULL;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeIdentifier* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaCCodeFunctionCall* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaCCodeIdentifier* _tmp21_;
	ValaCCodeIdentifier* _tmp22_;
	ValaCCodeFunctionCall* ccall = NULL;
	ValaCCodeIdentifier* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	ValaCCodeFunctionCall* _tmp25_;
	ValaCCodeFunctionCall* _tmp26_;
	ValaCCodeIdentifier* _tmp27_;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeFunctionCall* _tmp29_;
	ValaCCodeFunctionCall* _tmp30_;
	ValaCCodeFunctionCall* _tmp31_;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	ValaCCodeFunction* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeIdentifier* _tmp37_;
	ValaCCodeIdentifier* _tmp38_;
	ValaCCodeFunctionCall* _tmp39_;
	ValaCCodeFunctionCall* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeFunction* _tmp43_;
	ValaCCodeFunction* _tmp44_;
	ValaCCodeFunctionCall* _tmp45_;
	ValaCCodeFile* _tmp46_;
	ValaCCodeFunction* _tmp47_;
	ValaCCodeFile* _tmp48_;
	ValaCCodeFunction* _tmp49_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = g_strdup ("_vala_g_async_ready_callback");
	async_callback_wrapper_func = _tmp0_;
	_tmp1_ = async_callback_wrapper_func;
	_tmp2_ = vala_ccode_base_module_add_wrapper ((ValaCCodeBaseModule*) self, _tmp1_);
	if (!_tmp2_) {
		result = async_callback_wrapper_func;
		return result;
	}
	_tmp3_ = async_callback_wrapper_func;
	_tmp4_ = vala_ccode_function_new (_tmp3_, "void");
	function = _tmp4_;
	_tmp5_ = function;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp5_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp6_ = function;
	_tmp7_ = vala_ccode_parameter_new ("*source_object", "GObject");
	_tmp8_ = _tmp7_;
	vala_ccode_function_add_parameter (_tmp6_, _tmp8_);
	_vala_ccode_node_unref0 (_tmp8_);
	_tmp9_ = function;
	_tmp10_ = vala_ccode_parameter_new ("*res", "GAsyncResult");
	_tmp11_ = _tmp10_;
	vala_ccode_function_add_parameter (_tmp9_, _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_tmp12_ = function;
	_tmp13_ = vala_ccode_parameter_new ("*user_data", "void");
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp12_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_tmp15_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp15_);
	_tmp16_ = vala_ccode_identifier_new ("g_object_ref");
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp17_);
	_tmp19_ = _tmp18_;
	_vala_ccode_node_unref0 (_tmp17_);
	res_ref = _tmp19_;
	_tmp20_ = res_ref;
	_tmp21_ = vala_ccode_identifier_new ("res");
	_tmp22_ = _tmp21_;
	vala_ccode_function_call_add_argument (_tmp20_, (ValaCCodeExpression*) _tmp22_);
	_vala_ccode_node_unref0 (_tmp22_);
	ccall = NULL;
	_tmp23_ = vala_ccode_identifier_new ("g_task_return_pointer");
	_tmp24_ = _tmp23_;
	_tmp25_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp24_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp25_;
	_vala_ccode_node_unref0 (_tmp24_);
	_tmp26_ = ccall;
	_tmp27_ = vala_ccode_identifier_new ("user_data");
	_tmp28_ = _tmp27_;
	vala_ccode_function_call_add_argument (_tmp26_, (ValaCCodeExpression*) _tmp28_);
	_vala_ccode_node_unref0 (_tmp28_);
	_tmp29_ = ccall;
	_tmp30_ = res_ref;
	vala_ccode_function_call_add_argument (_tmp29_, (ValaCCodeExpression*) _tmp30_);
	_tmp31_ = ccall;
	_tmp32_ = vala_ccode_identifier_new ("g_object_unref");
	_tmp33_ = _tmp32_;
	vala_ccode_function_call_add_argument (_tmp31_, (ValaCCodeExpression*) _tmp33_);
	_vala_ccode_node_unref0 (_tmp33_);
	_tmp34_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp35_ = _tmp34_;
	_tmp36_ = ccall;
	vala_ccode_function_add_expression (_tmp35_, (ValaCCodeExpression*) _tmp36_);
	_tmp37_ = vala_ccode_identifier_new ("g_object_unref");
	_tmp38_ = _tmp37_;
	_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
	_vala_ccode_node_unref0 (ccall);
	ccall = _tmp39_;
	_vala_ccode_node_unref0 (_tmp38_);
	_tmp40_ = ccall;
	_tmp41_ = vala_ccode_identifier_new ("user_data");
	_tmp42_ = _tmp41_;
	vala_ccode_function_call_add_argument (_tmp40_, (ValaCCodeExpression*) _tmp42_);
	_vala_ccode_node_unref0 (_tmp42_);
	_tmp43_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp44_ = _tmp43_;
	_tmp45_ = ccall;
	vala_ccode_function_add_expression (_tmp44_, (ValaCCodeExpression*) _tmp45_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp46_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp47_ = function;
	vala_ccode_file_add_function_declaration (_tmp46_, _tmp47_);
	_tmp48_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp49_ = function;
	vala_ccode_file_add_function (_tmp48_, _tmp49_);
	result = async_callback_wrapper_func;
	_vala_ccode_node_unref0 (ccall);
	_vala_ccode_node_unref0 (res_ref);
	_vala_ccode_node_unref0 (function);
	return result;
}


ValaGAsyncModule* vala_gasync_module_construct (GType object_type) {
	ValaGAsyncModule* self = NULL;
	self = (ValaGAsyncModule*) vala_gtk_module_construct (object_type);
	return self;
}


ValaGAsyncModule* vala_gasync_module_new (void) {
	return vala_gasync_module_construct (VALA_TYPE_GASYNC_MODULE);
}


static void vala_gasync_module_class_init (ValaGAsyncModuleClass * klass) {
	vala_gasync_module_parent_class = g_type_class_peek_parent (klass);
	((ValaCCodeBaseModuleClass *) klass)->generate_method_declaration = (void (*) (ValaCCodeBaseModule *, ValaMethod*, ValaCCodeFile*)) vala_gasync_module_real_generate_method_declaration;
	((ValaCodeVisitorClass *) klass)->visit_method = (void (*) (ValaCodeVisitor *, ValaMethod*)) vala_gasync_module_real_visit_method;
	((ValaCodeVisitorClass *) klass)->visit_creation_method = (void (*) (ValaCodeVisitor *, ValaCreationMethod*)) vala_gasync_module_real_visit_creation_method;
	((ValaCCodeBaseModuleClass *) klass)->generate_ready_function = (gchar* (*) (ValaCCodeBaseModule *, ValaMethod*)) vala_gasync_module_real_generate_ready_function;
	((ValaGTypeModuleClass *) klass)->generate_virtual_method_declaration = (void (*) (ValaGTypeModule *, ValaMethod*, ValaCCodeFile*, ValaCCodeStruct*)) vala_gasync_module_real_generate_virtual_method_declaration;
	((ValaCodeVisitorClass *) klass)->visit_yield_statement = (void (*) (ValaCodeVisitor *, ValaYieldStatement*)) vala_gasync_module_real_visit_yield_statement;
	((ValaGErrorModuleClass *) klass)->return_with_exception = (void (*) (ValaGErrorModule *, ValaCCodeExpression*)) vala_gasync_module_real_return_with_exception;
	((ValaCodeVisitorClass *) klass)->visit_return_statement = (void (*) (ValaCodeVisitor *, ValaReturnStatement*)) vala_gasync_module_real_visit_return_statement;
	((ValaCCodeBaseModuleClass *) klass)->generate_cparameters = (void (*) (ValaCCodeBaseModule *, ValaMethod*, ValaCCodeFile*, ValaMap*, ValaCCodeFunction*, ValaCCodeFunctionDeclarator*, ValaMap*, ValaCCodeFunctionCall*, gint)) vala_gasync_module_real_generate_cparameters;
}


static void vala_gasync_module_instance_init (ValaGAsyncModule * self) {
}


GType vala_gasync_module_get_type (void) {
	static volatile gsize vala_gasync_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_gasync_module_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaGAsyncModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gasync_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGAsyncModule), 0, (GInstanceInitFunc) vala_gasync_module_instance_init, NULL };
		GType vala_gasync_module_type_id;
		vala_gasync_module_type_id = g_type_register_static (VALA_TYPE_GTK_MODULE, "ValaGAsyncModule", &g_define_type_info, 0);
		g_once_init_leave (&vala_gasync_module_type_id__volatile, vala_gasync_module_type_id);
	}
	return vala_gasync_module_type_id__volatile;
}



