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

/* valaccodememberaccessmodule.vala
 *
 * Copyright (C) 2006-2010  Jürg Billeter
 * Copyright (C) 2006-2008  Raffaele Sandrini
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 * Author:
 * 	Jürg Billeter <j@bitron.ch>
 *	Raffaele Sandrini <raffaele@sandrini.ch>
 */

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

#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#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_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_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_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))

struct _ValaGLibValue {
	ValaTargetValue parent_instance;
	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;
	ValaGLibValuePrivate * priv;
};

struct _ValaGLibValueClass {
	ValaTargetValueClass parent_class;
};

static gpointer vala_ccode_member_access_module_parent_class = NULL;

static void vala_ccode_member_access_module_real_visit_member_access (ValaCodeVisitor* base,
                                                               ValaMemberAccess* expr);
G_GNUC_INTERNAL GType vala_glib_value_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ValaGLibValue, vala_target_value_unref)
static ValaTargetValue* vala_ccode_member_access_module_real_get_local_cvalue (ValaCCodeBaseModule* base,
                                                                        ValaLocalVariable* local);
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);
G_GNUC_INTERNAL void vala_glib_value_append_array_length_cvalue (ValaGLibValue* self,
                                                 ValaCCodeExpression* length_cvalue);
static ValaTargetValue* vala_ccode_member_access_module_real_get_parameter_cvalue (ValaCCodeBaseModule* base,
                                                                            ValaParameter* param);
static ValaTargetValue* vala_ccode_member_access_module_real_get_field_cvalue (ValaCCodeBaseModule* base,
                                                                        ValaField* field,
                                                                        ValaTargetValue* instance);
static ValaTargetValue* vala_ccode_member_access_module_real_load_variable (ValaCCodeBaseModule* base,
                                                                     ValaVariable* variable,
                                                                     ValaTargetValue* value);
static ValaTargetValue* vala_ccode_member_access_module_real_load_local (ValaCodeGenerator* base,
                                                                  ValaLocalVariable* local);
static ValaTargetValue* vala_ccode_member_access_module_real_load_parameter (ValaCodeGenerator* base,
                                                                      ValaParameter* param);
static ValaTargetValue* vala_ccode_member_access_module_real_load_this_parameter (ValaCCodeBaseModule* base,
                                                                           ValaTypeSymbol* sym);
static ValaTargetValue* vala_ccode_member_access_module_real_load_field (ValaCodeGenerator* base,
                                                                  ValaField* field,
                                                                  ValaTargetValue* instance);

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

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

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

static void
vala_ccode_member_access_module_real_visit_member_access (ValaCodeVisitor* base,
                                                          ValaMemberAccess* expr)
{
	ValaCCodeMemberAccessModule * self;
	ValaCCodeExpression* pub_inst = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaArrayType* _tmp7_;
	ValaDelegateType* delegate_type = NULL;
	ValaDataType* _tmp8_;
	ValaDataType* _tmp9_;
	ValaDelegateType* _tmp10_;
	ValaSymbol* _tmp11_;
	ValaSymbol* _tmp12_;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_if_fail (expr != NULL);
	pub_inst = NULL;
	_tmp0_ = vala_member_access_get_inner (expr);
	_tmp1_ = _tmp0_;
	if (_tmp1_ != NULL) {
		ValaExpression* _tmp2_;
		ValaExpression* _tmp3_;
		ValaCCodeExpression* _tmp4_;
		_tmp2_ = vala_member_access_get_inner (expr);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp3_);
		_vala_ccode_node_unref0 (pub_inst);
		pub_inst = _tmp4_;
	}
	_tmp5_ = vala_expression_get_value_type ((ValaExpression*) expr);
	_tmp6_ = _tmp5_;
	_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp6_) : NULL);
	array_type = _tmp7_;
	_tmp8_ = vala_expression_get_value_type ((ValaExpression*) expr);
	_tmp9_ = _tmp8_;
	_tmp10_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp9_) : NULL);
	delegate_type = _tmp10_;
	_tmp11_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
	_tmp12_ = _tmp11_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_METHOD)) {
		ValaMethod* m = NULL;
		ValaSymbol* _tmp13_;
		ValaSymbol* _tmp14_;
		ValaMethod* _tmp15_;
		gboolean _tmp16_ = FALSE;
		gboolean _tmp17_ = FALSE;
		gboolean _tmp18_ = FALSE;
		ValaMethod* _tmp19_;
		ValaExpression* _tmp34_;
		ValaExpression* _tmp35_;
		ValaMethod* _tmp76_;
		ValaMethod* _tmp77_;
		ValaMethod* _tmp78_;
		ValaCCodeConstant* _tmp140_;
		ValaCCodeConstant* _tmp141_;
		ValaMethod* _tmp142_;
		ValaMemberBinding _tmp143_;
		ValaMemberBinding _tmp144_;
		_tmp13_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
		_tmp14_ = _tmp13_;
		_tmp15_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_METHOD, ValaMethod));
		m = _tmp15_;
		_tmp19_ = m;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_DYNAMIC_METHOD)) {
			_tmp18_ = TRUE;
		} else {
			ValaMethod* _tmp20_;
			_tmp20_ = m;
			_tmp18_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_ARRAY_MOVE_METHOD);
		}
		if (_tmp18_) {
			_tmp17_ = TRUE;
		} else {
			ValaMethod* _tmp21_;
			_tmp21_ = m;
			_tmp17_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_ARRAY_RESIZE_METHOD);
		}
		if (_tmp17_) {
			_tmp16_ = TRUE;
		} else {
			ValaMethod* _tmp22_;
			_tmp22_ = m;
			_tmp16_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_ARRAY_COPY_METHOD);
		}
		if (!_tmp16_) {
			ValaMethod* _tmp23_;
			ValaCCodeFile* _tmp24_;
			gboolean _tmp25_ = FALSE;
			ValaMethod* _tmp26_;
			gboolean _tmp27_;
			gboolean _tmp28_;
			_tmp23_ = m;
			_tmp24_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp23_, _tmp24_);
			_tmp26_ = m;
			_tmp27_ = vala_symbol_get_external ((ValaSymbol*) _tmp26_);
			_tmp28_ = _tmp27_;
			if (!_tmp28_) {
				ValaMethod* _tmp29_;
				gboolean _tmp30_;
				gboolean _tmp31_;
				_tmp29_ = m;
				_tmp30_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp29_);
				_tmp31_ = _tmp30_;
				_tmp25_ = _tmp31_;
			} else {
				_tmp25_ = FALSE;
			}
			if (_tmp25_) {
				ValaMethod* _tmp32_;
				_tmp32_ = m;
				if (vala_ccode_base_module_add_generated_external_symbol ((ValaCCodeBaseModule*) self, (ValaSymbol*) _tmp32_)) {
					ValaMethod* _tmp33_;
					_tmp33_ = m;
					vala_code_visitor_visit_method ((ValaCodeVisitor*) self, _tmp33_);
				}
			}
		}
		_tmp34_ = vala_member_access_get_inner (expr);
		_tmp35_ = _tmp34_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp35_, VALA_TYPE_BASE_ACCESS)) {
			ValaCCodeExpression* vcast = NULL;
			ValaMethod* _tmp36_;
			ValaMethod* _tmp37_;
			ValaMethod* _tmp38_;
			ValaCCodeExpression* _tmp69_;
			vcast = NULL;
			_tmp36_ = m;
			_tmp37_ = vala_method_get_base_method (_tmp36_);
			_tmp38_ = _tmp37_;
			if (_tmp38_ != NULL) {
				ValaClass* base_class = NULL;
				ValaMethod* _tmp39_;
				ValaMethod* _tmp40_;
				ValaMethod* _tmp41_;
				ValaSymbol* _tmp42_;
				ValaSymbol* _tmp43_;
				ValaClass* _tmp44_;
				gchar* _tmp45_;
				gchar* _tmp46_;
				ValaCCodeIdentifier* _tmp47_;
				ValaCCodeIdentifier* _tmp48_;
				ValaCCodeFunctionCall* _tmp49_;
				ValaCCodeExpression* _tmp50_;
				ValaClass* _tmp51_;
				ValaClass* _tmp52_;
				gchar* _tmp53_;
				gchar* _tmp54_;
				gchar* _tmp55_;
				gchar* _tmp56_;
				ValaCCodeIdentifier* _tmp57_;
				ValaCCodeIdentifier* _tmp58_;
				_tmp39_ = m;
				_tmp40_ = vala_method_get_base_method (_tmp39_);
				_tmp41_ = _tmp40_;
				_tmp42_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp41_);
				_tmp43_ = _tmp42_;
				base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, VALA_TYPE_CLASS, ValaClass);
				_tmp44_ = base_class;
				_tmp45_ = vala_get_ccode_class_type_function (_tmp44_);
				_tmp46_ = _tmp45_;
				_tmp47_ = vala_ccode_identifier_new (_tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp48_);
				_vala_ccode_node_unref0 (vcast);
				vcast = (ValaCCodeExpression*) _tmp49_;
				_vala_ccode_node_unref0 (_tmp48_);
				_g_free0 (_tmp46_);
				_tmp50_ = vcast;
				_tmp51_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
				_tmp52_ = _tmp51_;
				_tmp53_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp52_, NULL);
				_tmp54_ = _tmp53_;
				_tmp55_ = g_strdup_printf ("%s_parent_class", _tmp54_);
				_tmp56_ = _tmp55_;
				_tmp57_ = vala_ccode_identifier_new (_tmp56_);
				_tmp58_ = _tmp57_;
				vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp50_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp58_);
				_vala_ccode_node_unref0 (_tmp58_);
				_g_free0 (_tmp56_);
				_g_free0 (_tmp54_);
			} else {
				ValaMethod* _tmp59_;
				ValaMethod* _tmp60_;
				ValaMethod* _tmp61_;
				_tmp59_ = m;
				_tmp60_ = vala_method_get_base_interface_method (_tmp59_);
				_tmp61_ = _tmp60_;
				if (_tmp61_ != NULL) {
					ValaInterface* base_iface = NULL;
					ValaMethod* _tmp62_;
					ValaMethod* _tmp63_;
					ValaMethod* _tmp64_;
					ValaSymbol* _tmp65_;
					ValaSymbol* _tmp66_;
					ValaInterface* _tmp67_;
					ValaCCodeExpression* _tmp68_;
					_tmp62_ = m;
					_tmp63_ = vala_method_get_base_interface_method (_tmp62_);
					_tmp64_ = _tmp63_;
					_tmp65_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp64_);
					_tmp66_ = _tmp65_;
					base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp66_, VALA_TYPE_INTERFACE, ValaInterface);
					_tmp67_ = base_iface;
					_tmp68_ = vala_ccode_base_module_get_this_interface_cexpression ((ValaCCodeBaseModule*) self, _tmp67_);
					_vala_ccode_node_unref0 (vcast);
					vcast = _tmp68_;
				}
			}
			_tmp69_ = vcast;
			if (_tmp69_ != NULL) {
				ValaCCodeExpression* _tmp70_;
				ValaMethod* _tmp71_;
				gchar* _tmp72_;
				gchar* _tmp73_;
				ValaCCodeMemberAccess* _tmp74_;
				ValaCCodeMemberAccess* _tmp75_;
				_tmp70_ = vcast;
				_tmp71_ = m;
				_tmp72_ = vala_get_ccode_vfunc_name (_tmp71_);
				_tmp73_ = _tmp72_;
				_tmp74_ = vala_ccode_member_access_new_pointer (_tmp70_, _tmp73_);
				_tmp75_ = _tmp74_;
				vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp75_);
				_vala_ccode_node_unref0 (_tmp75_);
				_g_free0 (_tmp73_);
				_vala_ccode_node_unref0 (vcast);
				_vala_code_node_unref0 (m);
				_vala_code_node_unref0 (delegate_type);
				_vala_code_node_unref0 (array_type);
				_vala_ccode_node_unref0 (pub_inst);
				return;
			}
			_vala_ccode_node_unref0 (vcast);
		}
		_tmp76_ = m;
		_tmp77_ = vala_method_get_base_method (_tmp76_);
		_tmp78_ = _tmp77_;
		if (_tmp78_ != NULL) {
			ValaMethod* _tmp79_;
			ValaMethod* _tmp80_;
			ValaMethod* _tmp81_;
			_tmp79_ = m;
			_tmp80_ = vala_method_get_base_method (_tmp79_);
			_tmp81_ = _tmp80_;
			if (!vala_ccode_base_module_method_has_wrapper ((ValaCCodeBaseModule*) self, _tmp81_)) {
				ValaClass* base_class = NULL;
				ValaMethod* _tmp82_;
				ValaMethod* _tmp83_;
				ValaMethod* _tmp84_;
				ValaSymbol* _tmp85_;
				ValaSymbol* _tmp86_;
				ValaClass* _tmp87_;
				ValaClass* _tmp88_;
				gboolean _tmp89_;
				gboolean _tmp90_;
				_tmp82_ = m;
				_tmp83_ = vala_method_get_base_method (_tmp82_);
				_tmp84_ = _tmp83_;
				_tmp85_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp84_);
				_tmp86_ = _tmp85_;
				_tmp87_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, VALA_TYPE_CLASS, ValaClass));
				base_class = _tmp87_;
				_tmp88_ = base_class;
				_tmp89_ = vala_class_get_is_compact (_tmp88_);
				_tmp90_ = _tmp89_;
				if (!_tmp90_) {
					ValaCCodeFunctionCall* vclass = NULL;
					ValaClass* _tmp91_;
					gchar* _tmp92_;
					gchar* _tmp93_;
					ValaCCodeIdentifier* _tmp94_;
					ValaCCodeIdentifier* _tmp95_;
					ValaCCodeFunctionCall* _tmp96_;
					ValaCCodeFunctionCall* _tmp97_;
					ValaCCodeFunctionCall* _tmp98_;
					ValaCCodeExpression* _tmp99_;
					ValaCCodeFunctionCall* _tmp100_;
					ValaMethod* _tmp101_;
					gchar* _tmp102_;
					gchar* _tmp103_;
					ValaCCodeMemberAccess* _tmp104_;
					ValaCCodeMemberAccess* _tmp105_;
					_tmp91_ = base_class;
					_tmp92_ = vala_get_ccode_class_get_function (_tmp91_);
					_tmp93_ = _tmp92_;
					_tmp94_ = vala_ccode_identifier_new (_tmp93_);
					_tmp95_ = _tmp94_;
					_tmp96_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp95_);
					_tmp97_ = _tmp96_;
					_vala_ccode_node_unref0 (_tmp95_);
					_g_free0 (_tmp93_);
					vclass = _tmp97_;
					_tmp98_ = vclass;
					_tmp99_ = pub_inst;
					vala_ccode_function_call_add_argument (_tmp98_, _tmp99_);
					_tmp100_ = vclass;
					_tmp101_ = m;
					_tmp102_ = vala_get_ccode_vfunc_name (_tmp101_);
					_tmp103_ = _tmp102_;
					_tmp104_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp100_, _tmp103_);
					_tmp105_ = _tmp104_;
					vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp105_);
					_vala_ccode_node_unref0 (_tmp105_);
					_g_free0 (_tmp103_);
					_vala_ccode_node_unref0 (vclass);
				} else {
					ValaCCodeExpression* _tmp106_;
					ValaMethod* _tmp107_;
					gchar* _tmp108_;
					gchar* _tmp109_;
					ValaCCodeMemberAccess* _tmp110_;
					ValaCCodeMemberAccess* _tmp111_;
					_tmp106_ = pub_inst;
					_tmp107_ = m;
					_tmp108_ = vala_get_ccode_vfunc_name (_tmp107_);
					_tmp109_ = _tmp108_;
					_tmp110_ = vala_ccode_member_access_new_pointer (_tmp106_, _tmp109_);
					_tmp111_ = _tmp110_;
					vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp111_);
					_vala_ccode_node_unref0 (_tmp111_);
					_g_free0 (_tmp109_);
				}
				_vala_code_node_unref0 (base_class);
			} else {
				ValaMethod* _tmp112_;
				ValaMethod* _tmp113_;
				ValaMethod* _tmp114_;
				gchar* _tmp115_;
				gchar* _tmp116_;
				ValaCCodeIdentifier* _tmp117_;
				ValaCCodeIdentifier* _tmp118_;
				_tmp112_ = m;
				_tmp113_ = vala_method_get_base_method (_tmp112_);
				_tmp114_ = _tmp113_;
				_tmp115_ = vala_get_ccode_name ((ValaCodeNode*) _tmp114_);
				_tmp116_ = _tmp115_;
				_tmp117_ = vala_ccode_identifier_new (_tmp116_);
				_tmp118_ = _tmp117_;
				vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp118_);
				_vala_ccode_node_unref0 (_tmp118_);
				_g_free0 (_tmp116_);
			}
		} else {
			ValaMethod* _tmp119_;
			ValaMethod* _tmp120_;
			ValaMethod* _tmp121_;
			_tmp119_ = m;
			_tmp120_ = vala_method_get_base_interface_method (_tmp119_);
			_tmp121_ = _tmp120_;
			if (_tmp121_ != NULL) {
				ValaMethod* _tmp122_;
				ValaMethod* _tmp123_;
				ValaMethod* _tmp124_;
				gchar* _tmp125_;
				gchar* _tmp126_;
				ValaCCodeIdentifier* _tmp127_;
				ValaCCodeIdentifier* _tmp128_;
				_tmp122_ = m;
				_tmp123_ = vala_method_get_base_interface_method (_tmp122_);
				_tmp124_ = _tmp123_;
				_tmp125_ = vala_get_ccode_name ((ValaCodeNode*) _tmp124_);
				_tmp126_ = _tmp125_;
				_tmp127_ = vala_ccode_identifier_new (_tmp126_);
				_tmp128_ = _tmp127_;
				vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp128_);
				_vala_ccode_node_unref0 (_tmp128_);
				_g_free0 (_tmp126_);
			} else {
				ValaMethod* _tmp129_;
				_tmp129_ = m;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp129_, VALA_TYPE_CREATION_METHOD)) {
					ValaMethod* _tmp130_;
					gchar* _tmp131_;
					gchar* _tmp132_;
					ValaCCodeIdentifier* _tmp133_;
					ValaCCodeIdentifier* _tmp134_;
					_tmp130_ = m;
					_tmp131_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp130_);
					_tmp132_ = _tmp131_;
					_tmp133_ = vala_ccode_identifier_new (_tmp132_);
					_tmp134_ = _tmp133_;
					vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp134_);
					_vala_ccode_node_unref0 (_tmp134_);
					_g_free0 (_tmp132_);
				} else {
					ValaMethod* _tmp135_;
					gchar* _tmp136_;
					gchar* _tmp137_;
					ValaCCodeIdentifier* _tmp138_;
					ValaCCodeIdentifier* _tmp139_;
					_tmp135_ = m;
					_tmp136_ = vala_get_ccode_name ((ValaCodeNode*) _tmp135_);
					_tmp137_ = _tmp136_;
					_tmp138_ = vala_ccode_identifier_new (_tmp137_);
					_tmp139_ = _tmp138_;
					vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp139_);
					_vala_ccode_node_unref0 (_tmp139_);
					_g_free0 (_tmp137_);
				}
			}
		}
		_tmp140_ = vala_ccode_constant_new ("NULL");
		_tmp141_ = _tmp140_;
		vala_ccode_base_module_set_delegate_target_destroy_notify ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp141_);
		_vala_ccode_node_unref0 (_tmp141_);
		_tmp142_ = m;
		_tmp143_ = vala_method_get_binding (_tmp142_);
		_tmp144_ = _tmp143_;
		if (_tmp144_ == VALA_MEMBER_BINDING_STATIC) {
			ValaCCodeConstant* _tmp145_;
			ValaCCodeConstant* _tmp146_;
			_tmp145_ = vala_ccode_constant_new ("NULL");
			_tmp146_ = _tmp145_;
			vala_ccode_base_module_set_delegate_target ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp146_);
			_vala_ccode_node_unref0 (_tmp146_);
		} else {
			ValaMethod* _tmp147_;
			gboolean _tmp148_;
			gboolean _tmp149_;
			_tmp147_ = m;
			_tmp148_ = vala_method_get_is_async_callback (_tmp147_);
			_tmp149_ = _tmp148_;
			if (_tmp149_) {
				ValaMethod* _tmp150_;
				ValaMethod* _tmp151_;
				gboolean _tmp152_;
				gboolean _tmp153_;
				_tmp150_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
				_tmp151_ = _tmp150_;
				_tmp152_ = vala_method_get_closure (_tmp151_);
				_tmp153_ = _tmp152_;
				if (_tmp153_) {
					ValaBlock* block = NULL;
					ValaMethod* _tmp154_;
					ValaSymbol* _tmp155_;
					ValaSymbol* _tmp156_;
					ValaBlock* _tmp157_;
					ValaBlock* _tmp158_;
					ValaBlock* _tmp159_;
					ValaBlock* _tmp160_;
					gchar* _tmp161_;
					gchar* _tmp162_;
					ValaCCodeExpression* _tmp163_;
					ValaCCodeExpression* _tmp164_;
					ValaCCodeMemberAccess* _tmp165_;
					ValaCCodeMemberAccess* _tmp166_;
					_tmp154_ = m;
					_tmp155_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp154_);
					_tmp156_ = _tmp155_;
					_tmp157_ = vala_subroutine_get_body ((ValaSubroutine*) G_TYPE_CHECK_INSTANCE_CAST (_tmp156_, VALA_TYPE_METHOD, ValaMethod));
					_tmp158_ = _tmp157_;
					_tmp159_ = _vala_code_node_ref0 (_tmp158_);
					block = _tmp159_;
					_tmp160_ = block;
					_tmp161_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp160_));
					_tmp162_ = _tmp161_;
					_tmp163_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp162_);
					_tmp164_ = _tmp163_;
					_tmp165_ = vala_ccode_member_access_new_pointer (_tmp164_, "_async_data_");
					_tmp166_ = _tmp165_;
					vala_ccode_base_module_set_delegate_target ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp166_);
					_vala_ccode_node_unref0 (_tmp166_);
					_vala_ccode_node_unref0 (_tmp164_);
					_g_free0 (_tmp162_);
					_vala_code_node_unref0 (block);
				} else {
					ValaCCodeIdentifier* _tmp167_;
					ValaCCodeIdentifier* _tmp168_;
					_tmp167_ = vala_ccode_identifier_new ("_data_");
					_tmp168_ = _tmp167_;
					vala_ccode_base_module_set_delegate_target ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp168_);
					_vala_ccode_node_unref0 (_tmp168_);
				}
			} else {
				gboolean _tmp169_ = FALSE;
				ValaExpression* _tmp170_;
				ValaExpression* _tmp171_;
				_tmp170_ = vala_member_access_get_inner (expr);
				_tmp171_ = _tmp170_;
				if (_tmp171_ != NULL) {
					gboolean _tmp172_;
					gboolean _tmp173_;
					_tmp172_ = vala_member_access_get_prototype_access (expr);
					_tmp173_ = _tmp172_;
					_tmp169_ = !_tmp173_;
				} else {
					_tmp169_ = FALSE;
				}
				if (_tmp169_) {
					ValaCCodeExpression* delegate_target = NULL;
					ValaExpression* _tmp174_;
					ValaExpression* _tmp175_;
					ValaCCodeExpression* _tmp176_;
					ValaDataType* _tmp177_;
					ValaDataType* _tmp178_;
					ValaDelegateType* _tmp179_;
					gboolean _tmp180_ = FALSE;
					gboolean _tmp181_ = FALSE;
					gboolean _tmp182_ = FALSE;
					ValaDataType* _tmp183_;
					ValaDataType* _tmp184_;
					gboolean _tmp185_;
					gboolean _tmp186_;
					ValaCCodeExpression* _tmp224_;
					_tmp174_ = vala_member_access_get_inner (expr);
					_tmp175_ = _tmp174_;
					_tmp176_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp175_);
					delegate_target = G_TYPE_CHECK_INSTANCE_CAST (_tmp176_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
					_tmp177_ = vala_expression_get_target_type ((ValaExpression*) expr);
					_tmp178_ = _tmp177_;
					_tmp179_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp178_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp178_) : NULL);
					_vala_code_node_unref0 (delegate_type);
					delegate_type = _tmp179_;
					_tmp183_ = vala_expression_get_value_type ((ValaExpression*) expr);
					_tmp184_ = _tmp183_;
					_tmp185_ = vala_data_type_get_value_owned (_tmp184_);
					_tmp186_ = _tmp185_;
					if (_tmp186_) {
						_tmp182_ = TRUE;
					} else {
						gboolean _tmp187_ = FALSE;
						ValaDelegateType* _tmp188_;
						_tmp188_ = delegate_type;
						if (_tmp188_ != NULL) {
							ValaDelegateType* _tmp189_;
							gboolean _tmp190_;
							gboolean _tmp191_;
							_tmp189_ = delegate_type;
							_tmp190_ = vala_delegate_type_get_is_called_once (_tmp189_);
							_tmp191_ = _tmp190_;
							_tmp187_ = _tmp191_;
						} else {
							_tmp187_ = FALSE;
						}
						_tmp182_ = _tmp187_;
					}
					if (_tmp182_) {
						ValaExpression* _tmp192_;
						ValaExpression* _tmp193_;
						ValaDataType* _tmp194_;
						ValaDataType* _tmp195_;
						ValaTypeSymbol* _tmp196_;
						ValaTypeSymbol* _tmp197_;
						_tmp192_ = vala_member_access_get_inner (expr);
						_tmp193_ = _tmp192_;
						_tmp194_ = vala_expression_get_value_type (_tmp193_);
						_tmp195_ = _tmp194_;
						_tmp196_ = vala_data_type_get_data_type (_tmp195_);
						_tmp197_ = _tmp196_;
						_tmp181_ = _tmp197_ != NULL;
					} else {
						_tmp181_ = FALSE;
					}
					if (_tmp181_) {
						ValaExpression* _tmp198_;
						ValaExpression* _tmp199_;
						ValaDataType* _tmp200_;
						ValaDataType* _tmp201_;
						ValaTypeSymbol* _tmp202_;
						ValaTypeSymbol* _tmp203_;
						_tmp198_ = vala_member_access_get_inner (expr);
						_tmp199_ = _tmp198_;
						_tmp200_ = vala_expression_get_value_type (_tmp199_);
						_tmp201_ = _tmp200_;
						_tmp202_ = vala_data_type_get_data_type (_tmp201_);
						_tmp203_ = _tmp202_;
						_tmp180_ = vala_is_reference_counting (_tmp203_);
					} else {
						_tmp180_ = FALSE;
					}
					if (_tmp180_) {
						ValaCCodeFunctionCall* ref_call = NULL;
						ValaExpression* _tmp204_;
						ValaExpression* _tmp205_;
						ValaDataType* _tmp206_;
						ValaDataType* _tmp207_;
						ValaSourceReference* _tmp208_;
						ValaSourceReference* _tmp209_;
						ValaCCodeExpression* _tmp210_;
						ValaCCodeExpression* _tmp211_;
						ValaCCodeFunctionCall* _tmp212_;
						ValaCCodeFunctionCall* _tmp213_;
						ValaCCodeFunctionCall* _tmp214_;
						ValaCCodeExpression* _tmp215_;
						ValaCCodeFunctionCall* _tmp216_;
						ValaCCodeExpression* _tmp217_;
						ValaExpression* _tmp218_;
						ValaExpression* _tmp219_;
						ValaDataType* _tmp220_;
						ValaDataType* _tmp221_;
						ValaCCodeExpression* _tmp222_;
						ValaCCodeExpression* _tmp223_;
						_tmp204_ = vala_member_access_get_inner (expr);
						_tmp205_ = _tmp204_;
						_tmp206_ = vala_expression_get_value_type (_tmp205_);
						_tmp207_ = _tmp206_;
						_tmp208_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
						_tmp209_ = _tmp208_;
						_tmp210_ = vala_ccode_base_module_get_dup_func_expression ((ValaCCodeBaseModule*) self, _tmp207_, _tmp209_, FALSE);
						_tmp211_ = _tmp210_;
						_tmp212_ = vala_ccode_function_call_new (_tmp211_);
						_tmp213_ = _tmp212_;
						_vala_ccode_node_unref0 (_tmp211_);
						ref_call = _tmp213_;
						_tmp214_ = ref_call;
						_tmp215_ = delegate_target;
						vala_ccode_function_call_add_argument (_tmp214_, _tmp215_);
						_tmp216_ = ref_call;
						_tmp217_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp216_);
						_vala_ccode_node_unref0 (delegate_target);
						delegate_target = _tmp217_;
						_tmp218_ = vala_member_access_get_inner (expr);
						_tmp219_ = _tmp218_;
						_tmp220_ = vala_expression_get_value_type (_tmp219_);
						_tmp221_ = _tmp220_;
						_tmp222_ = vala_ccode_base_module_get_destroy_func_expression ((ValaCCodeBaseModule*) self, _tmp221_, FALSE);
						_tmp223_ = _tmp222_;
						vala_ccode_base_module_set_delegate_target_destroy_notify ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, _tmp223_);
						_vala_ccode_node_unref0 (_tmp223_);
						_vala_ccode_node_unref0 (ref_call);
					}
					_tmp224_ = delegate_target;
					vala_ccode_base_module_set_delegate_target ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, _tmp224_);
					_vala_ccode_node_unref0 (delegate_target);
				}
			}
		}
		_vala_code_node_unref0 (m);
	} else {
		ValaSymbol* _tmp225_;
		ValaSymbol* _tmp226_;
		_tmp225_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
		_tmp226_ = _tmp225_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp226_, VALA_TYPE_ARRAY_LENGTH_FIELD)) {
			gboolean _tmp227_ = FALSE;
			ValaDataType* _tmp228_;
			ValaDataType* _tmp229_;
			ValaExpression* _tmp234_;
			ValaExpression* _tmp235_;
			ValaCCodeExpression* _tmp236_;
			ValaCCodeExpression* _tmp237_;
			_tmp228_ = vala_expression_get_value_type ((ValaExpression*) expr);
			_tmp229_ = _tmp228_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp229_, VALA_TYPE_ARRAY_TYPE)) {
				ValaCodeNode* _tmp230_;
				ValaCodeNode* _tmp231_;
				_tmp230_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
				_tmp231_ = _tmp230_;
				_tmp227_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp231_, VALA_TYPE_ELEMENT_ACCESS);
			} else {
				_tmp227_ = FALSE;
			}
			if (_tmp227_) {
				ValaSourceReference* _tmp232_;
				ValaSourceReference* _tmp233_;
				_tmp232_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
				_tmp233_ = _tmp232_;
				vala_report_error (_tmp233_, "unsupported use of length field of multi-dimensional array");
			}
			_tmp234_ = vala_member_access_get_inner (expr);
			_tmp235_ = _tmp234_;
			_tmp236_ = vala_ccode_base_module_get_array_length_cexpression ((ValaCCodeBaseModule*) self, _tmp235_, 1);
			_tmp237_ = _tmp236_;
			vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, _tmp237_);
			_vala_ccode_node_unref0 (_tmp237_);
		} else {
			ValaSymbol* _tmp238_;
			ValaSymbol* _tmp239_;
			_tmp238_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
			_tmp239_ = _tmp238_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp239_, VALA_TYPE_FIELD)) {
				ValaField* field = NULL;
				ValaSymbol* _tmp240_;
				ValaSymbol* _tmp241_;
				ValaField* _tmp242_;
				gboolean _tmp243_;
				gboolean _tmp244_;
				_tmp240_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
				_tmp241_ = _tmp240_;
				_tmp242_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp241_, VALA_TYPE_FIELD, ValaField));
				field = _tmp242_;
				_tmp243_ = vala_expression_get_lvalue ((ValaExpression*) expr);
				_tmp244_ = _tmp243_;
				if (_tmp244_) {
					ValaTargetValue* _tmp245_ = NULL;
					ValaExpression* _tmp246_;
					ValaExpression* _tmp247_;
					ValaField* _tmp252_;
					ValaTargetValue* _tmp253_;
					ValaTargetValue* _tmp254_;
					_tmp246_ = vala_member_access_get_inner (expr);
					_tmp247_ = _tmp246_;
					if (_tmp247_ != NULL) {
						ValaExpression* _tmp248_;
						ValaExpression* _tmp249_;
						ValaTargetValue* _tmp250_;
						ValaTargetValue* _tmp251_;
						_tmp248_ = vala_member_access_get_inner (expr);
						_tmp249_ = _tmp248_;
						_tmp250_ = vala_expression_get_target_value (_tmp249_);
						_tmp251_ = _tmp250_;
						_tmp245_ = _tmp251_;
					} else {
						_tmp245_ = NULL;
					}
					_tmp252_ = field;
					_tmp253_ = vala_ccode_base_module_get_field_cvalue ((ValaCCodeBaseModule*) self, _tmp252_, _tmp245_);
					_tmp254_ = _tmp253_;
					vala_expression_set_target_value ((ValaExpression*) expr, _tmp254_);
					_vala_target_value_unref0 (_tmp254_);
				} else {
					ValaTargetValue* _tmp255_ = NULL;
					ValaExpression* _tmp256_;
					ValaExpression* _tmp257_;
					ValaField* _tmp262_;
					ValaTargetValue* _tmp263_;
					ValaTargetValue* _tmp264_;
					_tmp256_ = vala_member_access_get_inner (expr);
					_tmp257_ = _tmp256_;
					if (_tmp257_ != NULL) {
						ValaExpression* _tmp258_;
						ValaExpression* _tmp259_;
						ValaTargetValue* _tmp260_;
						ValaTargetValue* _tmp261_;
						_tmp258_ = vala_member_access_get_inner (expr);
						_tmp259_ = _tmp258_;
						_tmp260_ = vala_expression_get_target_value (_tmp259_);
						_tmp261_ = _tmp260_;
						_tmp255_ = _tmp261_;
					} else {
						_tmp255_ = NULL;
					}
					_tmp262_ = field;
					_tmp263_ = vala_code_generator_load_field ((ValaCodeGenerator*) self, _tmp262_, _tmp255_);
					_tmp264_ = _tmp263_;
					vala_expression_set_target_value ((ValaExpression*) expr, _tmp264_);
					_vala_target_value_unref0 (_tmp264_);
				}
				_vala_code_node_unref0 (field);
			} else {
				ValaSymbol* _tmp265_;
				ValaSymbol* _tmp266_;
				_tmp265_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
				_tmp266_ = _tmp265_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp266_, VALA_TYPE_ENUM_VALUE)) {
					ValaEnumValue* ev = NULL;
					ValaSymbol* _tmp267_;
					ValaSymbol* _tmp268_;
					ValaEnumValue* _tmp269_;
					ValaEnumValue* _tmp270_;
					ValaSymbol* _tmp271_;
					ValaSymbol* _tmp272_;
					ValaCCodeFile* _tmp273_;
					ValaEnumValue* _tmp274_;
					gchar* _tmp275_;
					gchar* _tmp276_;
					ValaCCodeConstant* _tmp277_;
					ValaCCodeConstant* _tmp278_;
					_tmp267_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
					_tmp268_ = _tmp267_;
					_tmp269_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp268_, VALA_TYPE_ENUM_VALUE, ValaEnumValue));
					ev = _tmp269_;
					_tmp270_ = ev;
					_tmp271_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp270_);
					_tmp272_ = _tmp271_;
					_tmp273_ = ((ValaCCodeBaseModule*) self)->cfile;
					vala_ccode_base_module_generate_enum_declaration ((ValaCCodeBaseModule*) self, G_TYPE_CHECK_INSTANCE_CAST (_tmp272_, VALA_TYPE_ENUM, ValaEnum), _tmp273_);
					_tmp274_ = ev;
					_tmp275_ = vala_get_ccode_name ((ValaCodeNode*) _tmp274_);
					_tmp276_ = _tmp275_;
					_tmp277_ = vala_ccode_constant_new (_tmp276_);
					_tmp278_ = _tmp277_;
					vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp278_);
					_vala_ccode_node_unref0 (_tmp278_);
					_g_free0 (_tmp276_);
					_vala_code_node_unref0 (ev);
				} else {
					ValaSymbol* _tmp279_;
					ValaSymbol* _tmp280_;
					_tmp279_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
					_tmp280_ = _tmp279_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp280_, VALA_TYPE_CONSTANT)) {
						ValaConstant* c = NULL;
						ValaSymbol* _tmp281_;
						ValaSymbol* _tmp282_;
						ValaConstant* _tmp283_;
						gboolean _tmp284_ = FALSE;
						gboolean _tmp285_ = FALSE;
						ValaConstant* _tmp286_;
						ValaSourceReference* _tmp287_;
						ValaSourceReference* _tmp288_;
						ValaConstant* _tmp300_;
						ValaCCodeFile* _tmp301_;
						gchar* fn = NULL;
						ValaConstant* _tmp302_;
						gchar* _tmp303_;
						const gchar* _tmp304_;
						ValaArrayType* _tmp343_;
						_tmp281_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
						_tmp282_ = _tmp281_;
						_tmp283_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp282_, VALA_TYPE_CONSTANT, ValaConstant));
						c = _tmp283_;
						_tmp286_ = c;
						_tmp287_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp286_);
						_tmp288_ = _tmp287_;
						if (_tmp288_ != NULL) {
							ValaSourceReference* _tmp289_;
							ValaSourceReference* _tmp290_;
							_tmp289_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
							_tmp290_ = _tmp289_;
							_tmp285_ = _tmp290_ != NULL;
						} else {
							_tmp285_ = FALSE;
						}
						if (_tmp285_) {
							ValaConstant* _tmp291_;
							ValaSourceReference* _tmp292_;
							ValaSourceReference* _tmp293_;
							ValaSourceFile* _tmp294_;
							ValaSourceFile* _tmp295_;
							ValaSourceReference* _tmp296_;
							ValaSourceReference* _tmp297_;
							ValaSourceFile* _tmp298_;
							ValaSourceFile* _tmp299_;
							_tmp291_ = c;
							_tmp292_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp291_);
							_tmp293_ = _tmp292_;
							_tmp294_ = vala_source_reference_get_file (_tmp293_);
							_tmp295_ = _tmp294_;
							_tmp296_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
							_tmp297_ = _tmp296_;
							_tmp298_ = vala_source_reference_get_file (_tmp297_);
							_tmp299_ = _tmp298_;
							_tmp284_ = _tmp295_ == _tmp299_;
						} else {
							_tmp284_ = FALSE;
						}
						_tmp300_ = c;
						_tmp301_ = ((ValaCCodeBaseModule*) self)->cfile;
						vala_ccode_base_module_generate_constant_declaration ((ValaCCodeBaseModule*) self, _tmp300_, _tmp301_, _tmp284_);
						_tmp302_ = c;
						_tmp303_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp302_);
						fn = _tmp303_;
						_tmp304_ = fn;
						if (g_strcmp0 (_tmp304_, "GLib.Log.FILE") == 0) {
							gchar* s = NULL;
							ValaSourceReference* _tmp305_;
							ValaSourceReference* _tmp306_;
							ValaSourceFile* _tmp307_;
							ValaSourceFile* _tmp308_;
							const gchar* _tmp309_;
							const gchar* _tmp310_;
							gchar* _tmp311_;
							const gchar* _tmp312_;
							gchar* _tmp313_;
							gchar* _tmp314_;
							ValaCCodeConstant* _tmp315_;
							ValaCCodeConstant* _tmp316_;
							_tmp305_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
							_tmp306_ = _tmp305_;
							_tmp307_ = vala_source_reference_get_file (_tmp306_);
							_tmp308_ = _tmp307_;
							_tmp309_ = vala_source_file_get_filename (_tmp308_);
							_tmp310_ = _tmp309_;
							_tmp311_ = g_path_get_basename (_tmp310_);
							s = _tmp311_;
							_tmp312_ = s;
							_tmp313_ = g_strdup_printf ("\"%s\"", _tmp312_);
							_tmp314_ = _tmp313_;
							_tmp315_ = vala_ccode_constant_new (_tmp314_);
							_tmp316_ = _tmp315_;
							vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp316_);
							_vala_ccode_node_unref0 (_tmp316_);
							_g_free0 (_tmp314_);
							_g_free0 (s);
						} else {
							const gchar* _tmp317_;
							_tmp317_ = fn;
							if (g_strcmp0 (_tmp317_, "GLib.Log.LINE") == 0) {
								gint i = 0;
								ValaSourceReference* _tmp318_;
								ValaSourceReference* _tmp319_;
								ValaSourceLocation _tmp320_ = {0};
								ValaSourceLocation _tmp321_;
								gchar* _tmp322_;
								gchar* _tmp323_;
								ValaCCodeConstant* _tmp324_;
								ValaCCodeConstant* _tmp325_;
								_tmp318_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
								_tmp319_ = _tmp318_;
								vala_source_reference_get_begin (_tmp319_, &_tmp320_);
								_tmp321_ = _tmp320_;
								i = _tmp321_.line;
								_tmp322_ = g_strdup_printf ("%d", i);
								_tmp323_ = _tmp322_;
								_tmp324_ = vala_ccode_constant_new (_tmp323_);
								_tmp325_ = _tmp324_;
								vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp325_);
								_vala_ccode_node_unref0 (_tmp325_);
								_g_free0 (_tmp323_);
							} else {
								const gchar* _tmp326_;
								_tmp326_ = fn;
								if (g_strcmp0 (_tmp326_, "GLib.Log.METHOD") == 0) {
									gchar* s = NULL;
									gchar* _tmp327_;
									ValaMethod* _tmp328_;
									ValaMethod* _tmp329_;
									const gchar* _tmp333_;
									gchar* _tmp334_;
									gchar* _tmp335_;
									ValaCCodeConstant* _tmp336_;
									ValaCCodeConstant* _tmp337_;
									_tmp327_ = g_strdup ("");
									s = _tmp327_;
									_tmp328_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
									_tmp329_ = _tmp328_;
									if (_tmp329_ != NULL) {
										ValaMethod* _tmp330_;
										ValaMethod* _tmp331_;
										gchar* _tmp332_;
										_tmp330_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
										_tmp331_ = _tmp330_;
										_tmp332_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp331_);
										_g_free0 (s);
										s = _tmp332_;
									}
									_tmp333_ = s;
									_tmp334_ = g_strdup_printf ("\"%s\"", _tmp333_);
									_tmp335_ = _tmp334_;
									_tmp336_ = vala_ccode_constant_new (_tmp335_);
									_tmp337_ = _tmp336_;
									vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp337_);
									_vala_ccode_node_unref0 (_tmp337_);
									_g_free0 (_tmp335_);
									_g_free0 (s);
								} else {
									ValaConstant* _tmp338_;
									gchar* _tmp339_;
									gchar* _tmp340_;
									ValaCCodeIdentifier* _tmp341_;
									ValaCCodeIdentifier* _tmp342_;
									_tmp338_ = c;
									_tmp339_ = vala_get_ccode_name ((ValaCodeNode*) _tmp338_);
									_tmp340_ = _tmp339_;
									_tmp341_ = vala_ccode_identifier_new (_tmp340_);
									_tmp342_ = _tmp341_;
									vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp342_);
									_vala_ccode_node_unref0 (_tmp342_);
									_g_free0 (_tmp340_);
								}
							}
						}
						_tmp343_ = array_type;
						if (_tmp343_ != NULL) {
							gchar* sub = NULL;
							gchar* _tmp344_;
							_tmp344_ = g_strdup ("");
							sub = _tmp344_;
							{
								gint i = 0;
								i = 0;
								{
									gboolean _tmp345_ = FALSE;
									_tmp345_ = TRUE;
									while (TRUE) {
										ValaArrayType* _tmp347_;
										gint _tmp348_;
										gint _tmp349_;
										ValaCCodeFunctionCall* ccall = NULL;
										ValaCCodeIdentifier* _tmp350_;
										ValaCCodeIdentifier* _tmp351_;
										ValaCCodeFunctionCall* _tmp352_;
										ValaCCodeFunctionCall* _tmp353_;
										ValaCCodeFunctionCall* _tmp354_;
										ValaConstant* _tmp355_;
										gchar* _tmp356_;
										gchar* _tmp357_;
										const gchar* _tmp358_;
										gchar* _tmp359_;
										gchar* _tmp360_;
										ValaCCodeIdentifier* _tmp361_;
										ValaCCodeIdentifier* _tmp362_;
										ValaCCodeFunctionCall* _tmp363_;
										const gchar* _tmp364_;
										gchar* _tmp365_;
										if (!_tmp345_) {
											gint _tmp346_;
											_tmp346_ = i;
											i = _tmp346_ + 1;
										}
										_tmp345_ = FALSE;
										_tmp347_ = array_type;
										_tmp348_ = vala_array_type_get_rank (_tmp347_);
										_tmp349_ = _tmp348_;
										if (!(i < _tmp349_)) {
											break;
										}
										_tmp350_ = vala_ccode_identifier_new ("G_N_ELEMENTS");
										_tmp351_ = _tmp350_;
										_tmp352_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp351_);
										_tmp353_ = _tmp352_;
										_vala_ccode_node_unref0 (_tmp351_);
										ccall = _tmp353_;
										_tmp354_ = ccall;
										_tmp355_ = c;
										_tmp356_ = vala_get_ccode_name ((ValaCodeNode*) _tmp355_);
										_tmp357_ = _tmp356_;
										_tmp358_ = sub;
										_tmp359_ = g_strconcat (_tmp357_, _tmp358_, NULL);
										_tmp360_ = _tmp359_;
										_tmp361_ = vala_ccode_identifier_new (_tmp360_);
										_tmp362_ = _tmp361_;
										vala_ccode_function_call_add_argument (_tmp354_, (ValaCCodeExpression*) _tmp362_);
										_vala_ccode_node_unref0 (_tmp362_);
										_g_free0 (_tmp360_);
										_g_free0 (_tmp357_);
										_tmp363_ = ccall;
										vala_ccode_base_module_append_array_length ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp363_);
										_tmp364_ = sub;
										_tmp365_ = g_strconcat (_tmp364_, "[0]", NULL);
										_g_free0 (sub);
										sub = _tmp365_;
										_vala_ccode_node_unref0 (ccall);
									}
								}
							}
							_g_free0 (sub);
						}
						_g_free0 (fn);
						_vala_code_node_unref0 (c);
					} else {
						ValaSymbol* _tmp366_;
						ValaSymbol* _tmp367_;
						_tmp366_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
						_tmp367_ = _tmp366_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp367_, VALA_TYPE_PROPERTY)) {
							ValaProperty* prop = NULL;
							ValaSymbol* _tmp368_;
							ValaSymbol* _tmp369_;
							ValaProperty* _tmp370_;
							ValaProperty* _tmp371_;
							gboolean _tmp385_ = FALSE;
							ValaCCodeExpression* _tmp386_;
							ValaExpression* _tmp400_;
							ValaExpression* _tmp401_;
							ValaTargetValue* _tmp709_;
							ValaTargetValue* _tmp710_;
							ValaDataType* _tmp711_;
							ValaDataType* _tmp712_;
							ValaTargetValue* _tmp713_;
							ValaTargetValue* _tmp714_;
							ValaTargetValue* _tmp715_;
							ValaTargetValue* _tmp716_;
							_tmp368_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
							_tmp369_ = _tmp368_;
							_tmp370_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp369_, VALA_TYPE_PROPERTY, ValaProperty));
							prop = _tmp370_;
							_tmp371_ = prop;
							if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp371_, VALA_TYPE_DYNAMIC_PROPERTY)) {
								ValaProperty* _tmp372_;
								ValaPropertyAccessor* _tmp373_;
								ValaPropertyAccessor* _tmp374_;
								ValaCCodeFile* _tmp375_;
								gboolean _tmp376_ = FALSE;
								ValaProperty* _tmp377_;
								gboolean _tmp378_;
								gboolean _tmp379_;
								_tmp372_ = prop;
								_tmp373_ = vala_property_get_get_accessor (_tmp372_);
								_tmp374_ = _tmp373_;
								_tmp375_ = ((ValaCCodeBaseModule*) self)->cfile;
								vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp374_, _tmp375_);
								_tmp377_ = prop;
								_tmp378_ = vala_symbol_get_external ((ValaSymbol*) _tmp377_);
								_tmp379_ = _tmp378_;
								if (!_tmp379_) {
									ValaProperty* _tmp380_;
									gboolean _tmp381_;
									gboolean _tmp382_;
									_tmp380_ = prop;
									_tmp381_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp380_);
									_tmp382_ = _tmp381_;
									_tmp376_ = _tmp382_;
								} else {
									_tmp376_ = FALSE;
								}
								if (_tmp376_) {
									ValaProperty* _tmp383_;
									_tmp383_ = prop;
									if (vala_ccode_base_module_add_generated_external_symbol ((ValaCCodeBaseModule*) self, (ValaSymbol*) _tmp383_)) {
										ValaProperty* _tmp384_;
										_tmp384_ = prop;
										vala_code_visitor_visit_property ((ValaCodeVisitor*) self, _tmp384_);
									}
								}
							}
							_tmp386_ = pub_inst;
							if (_tmp386_ == NULL) {
								ValaProperty* _tmp387_;
								ValaMemberBinding _tmp388_;
								ValaMemberBinding _tmp389_;
								_tmp387_ = prop;
								_tmp388_ = vala_property_get_binding (_tmp387_);
								_tmp389_ = _tmp388_;
								_tmp385_ = _tmp389_ == VALA_MEMBER_BINDING_INSTANCE;
							} else {
								_tmp385_ = FALSE;
							}
							if (_tmp385_) {
								ValaProperty* _tmp390_;
								ValaSourceReference* _tmp391_;
								ValaSourceReference* _tmp392_;
								ValaProperty* _tmp393_;
								gchar* _tmp394_;
								gchar* _tmp395_;
								gchar* _tmp396_;
								gchar* _tmp397_;
								ValaCCodeInvalidExpression* _tmp398_;
								ValaCCodeInvalidExpression* _tmp399_;
								_tmp390_ = prop;
								_tmp391_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp390_);
								_tmp392_ = _tmp391_;
								_tmp393_ = prop;
								_tmp394_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp393_);
								_tmp395_ = _tmp394_;
								_tmp396_ = g_strdup_printf ("Invalid access to instance member `%s'", _tmp395_);
								_tmp397_ = _tmp396_;
								vala_report_error (_tmp392_, _tmp397_);
								_g_free0 (_tmp397_);
								_g_free0 (_tmp395_);
								_tmp398_ = vala_ccode_invalid_expression_new ();
								_tmp399_ = _tmp398_;
								vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp399_);
								_vala_ccode_node_unref0 (_tmp399_);
								_vala_code_node_unref0 (prop);
								_vala_code_node_unref0 (delegate_type);
								_vala_code_node_unref0 (array_type);
								_vala_ccode_node_unref0 (pub_inst);
								return;
							}
							_tmp400_ = vala_member_access_get_inner (expr);
							_tmp401_ = _tmp400_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp401_, VALA_TYPE_BASE_ACCESS)) {
								ValaProperty* base_prop = NULL;
								ValaProperty* _tmp402_;
								ValaProperty* _tmp403_;
								ValaProperty* _tmp404_;
								ValaProperty* _tmp405_;
								ValaProperty* _tmp406_;
								ValaCCodeExpression* vcast = NULL;
								ValaProperty* _tmp418_;
								ValaSymbol* _tmp419_;
								ValaSymbol* _tmp420_;
								ValaCCodeExpression* _tmp447_;
								_tmp402_ = prop;
								_tmp403_ = _vala_code_node_ref0 (_tmp402_);
								base_prop = _tmp403_;
								_tmp404_ = prop;
								_tmp405_ = vala_property_get_base_property (_tmp404_);
								_tmp406_ = _tmp405_;
								if (_tmp406_ != NULL) {
									ValaProperty* _tmp407_;
									ValaProperty* _tmp408_;
									ValaProperty* _tmp409_;
									ValaProperty* _tmp410_;
									_tmp407_ = prop;
									_tmp408_ = vala_property_get_base_property (_tmp407_);
									_tmp409_ = _tmp408_;
									_tmp410_ = _vala_code_node_ref0 (_tmp409_);
									_vala_code_node_unref0 (base_prop);
									base_prop = _tmp410_;
								} else {
									ValaProperty* _tmp411_;
									ValaProperty* _tmp412_;
									ValaProperty* _tmp413_;
									_tmp411_ = prop;
									_tmp412_ = vala_property_get_base_interface_property (_tmp411_);
									_tmp413_ = _tmp412_;
									if (_tmp413_ != NULL) {
										ValaProperty* _tmp414_;
										ValaProperty* _tmp415_;
										ValaProperty* _tmp416_;
										ValaProperty* _tmp417_;
										_tmp414_ = prop;
										_tmp415_ = vala_property_get_base_interface_property (_tmp414_);
										_tmp416_ = _tmp415_;
										_tmp417_ = _vala_code_node_ref0 (_tmp416_);
										_vala_code_node_unref0 (base_prop);
										base_prop = _tmp417_;
									}
								}
								vcast = NULL;
								_tmp418_ = base_prop;
								_tmp419_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp418_);
								_tmp420_ = _tmp419_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp420_, VALA_TYPE_CLASS)) {
									ValaClass* base_class = NULL;
									ValaProperty* _tmp421_;
									ValaSymbol* _tmp422_;
									ValaSymbol* _tmp423_;
									ValaClass* _tmp424_;
									gchar* _tmp425_;
									gchar* _tmp426_;
									ValaCCodeIdentifier* _tmp427_;
									ValaCCodeIdentifier* _tmp428_;
									ValaCCodeFunctionCall* _tmp429_;
									ValaCCodeExpression* _tmp430_;
									ValaClass* _tmp431_;
									ValaClass* _tmp432_;
									gchar* _tmp433_;
									gchar* _tmp434_;
									gchar* _tmp435_;
									gchar* _tmp436_;
									ValaCCodeIdentifier* _tmp437_;
									ValaCCodeIdentifier* _tmp438_;
									_tmp421_ = base_prop;
									_tmp422_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp421_);
									_tmp423_ = _tmp422_;
									base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp423_, VALA_TYPE_CLASS, ValaClass);
									_tmp424_ = base_class;
									_tmp425_ = vala_get_ccode_class_type_function (_tmp424_);
									_tmp426_ = _tmp425_;
									_tmp427_ = vala_ccode_identifier_new (_tmp426_);
									_tmp428_ = _tmp427_;
									_tmp429_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp428_);
									_vala_ccode_node_unref0 (vcast);
									vcast = (ValaCCodeExpression*) _tmp429_;
									_vala_ccode_node_unref0 (_tmp428_);
									_g_free0 (_tmp426_);
									_tmp430_ = vcast;
									_tmp431_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
									_tmp432_ = _tmp431_;
									_tmp433_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp432_, NULL);
									_tmp434_ = _tmp433_;
									_tmp435_ = g_strdup_printf ("%s_parent_class", _tmp434_);
									_tmp436_ = _tmp435_;
									_tmp437_ = vala_ccode_identifier_new (_tmp436_);
									_tmp438_ = _tmp437_;
									vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp430_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp438_);
									_vala_ccode_node_unref0 (_tmp438_);
									_g_free0 (_tmp436_);
									_g_free0 (_tmp434_);
								} else {
									ValaProperty* _tmp439_;
									ValaSymbol* _tmp440_;
									ValaSymbol* _tmp441_;
									_tmp439_ = base_prop;
									_tmp440_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp439_);
									_tmp441_ = _tmp440_;
									if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp441_, VALA_TYPE_INTERFACE)) {
										ValaInterface* base_iface = NULL;
										ValaProperty* _tmp442_;
										ValaSymbol* _tmp443_;
										ValaSymbol* _tmp444_;
										ValaInterface* _tmp445_;
										ValaCCodeExpression* _tmp446_;
										_tmp442_ = base_prop;
										_tmp443_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp442_);
										_tmp444_ = _tmp443_;
										base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp444_, VALA_TYPE_INTERFACE, ValaInterface);
										_tmp445_ = base_iface;
										_tmp446_ = vala_ccode_base_module_get_this_interface_cexpression ((ValaCCodeBaseModule*) self, _tmp445_);
										_vala_ccode_node_unref0 (vcast);
										vcast = _tmp446_;
									}
								}
								_tmp447_ = vcast;
								if (_tmp447_ != NULL) {
									ValaCCodeFunctionCall* ccall = NULL;
									ValaCCodeExpression* _tmp448_;
									ValaProperty* _tmp449_;
									const gchar* _tmp450_;
									const gchar* _tmp451_;
									gchar* _tmp452_;
									gchar* _tmp453_;
									ValaCCodeMemberAccess* _tmp454_;
									ValaCCodeMemberAccess* _tmp455_;
									ValaCCodeFunctionCall* _tmp456_;
									ValaCCodeFunctionCall* _tmp457_;
									ValaCCodeFunctionCall* _tmp458_;
									ValaExpression* _tmp459_;
									ValaExpression* _tmp460_;
									ValaCCodeExpression* _tmp461_;
									ValaCCodeExpression* _tmp462_;
									ValaProperty* _tmp463_;
									ValaDataType* _tmp464_;
									ValaDataType* _tmp465_;
									_tmp448_ = vcast;
									_tmp449_ = prop;
									_tmp450_ = vala_symbol_get_name ((ValaSymbol*) _tmp449_);
									_tmp451_ = _tmp450_;
									_tmp452_ = g_strdup_printf ("get_%s", _tmp451_);
									_tmp453_ = _tmp452_;
									_tmp454_ = vala_ccode_member_access_new_pointer (_tmp448_, _tmp453_);
									_tmp455_ = _tmp454_;
									_tmp456_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp455_);
									_tmp457_ = _tmp456_;
									_vala_ccode_node_unref0 (_tmp455_);
									_g_free0 (_tmp453_);
									ccall = _tmp457_;
									_tmp458_ = ccall;
									_tmp459_ = vala_member_access_get_inner (expr);
									_tmp460_ = _tmp459_;
									_tmp461_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp460_);
									_tmp462_ = _tmp461_;
									vala_ccode_function_call_add_argument (_tmp458_, _tmp462_);
									_vala_ccode_node_unref0 (_tmp462_);
									_tmp463_ = prop;
									_tmp464_ = vala_property_get_property_type (_tmp463_);
									_tmp465_ = _tmp464_;
									if (vala_data_type_is_real_non_null_struct_type (_tmp465_)) {
										ValaGLibValue* temp_value = NULL;
										ValaProperty* _tmp466_;
										ValaPropertyAccessor* _tmp467_;
										ValaPropertyAccessor* _tmp468_;
										ValaDataType* _tmp469_;
										ValaDataType* _tmp470_;
										ValaTargetValue* _tmp471_;
										ValaGLibValue* _tmp472_;
										ValaTargetValue* _tmp473_;
										ValaTargetValue* _tmp474_;
										ValaCCodeExpression* ctemp = NULL;
										ValaGLibValue* _tmp475_;
										ValaCCodeExpression* _tmp476_;
										ValaCCodeFunctionCall* _tmp477_;
										ValaCCodeExpression* _tmp478_;
										ValaCCodeUnaryExpression* _tmp479_;
										ValaCCodeUnaryExpression* _tmp480_;
										ValaCCodeFunction* _tmp481_;
										ValaCCodeFunction* _tmp482_;
										ValaCCodeFunctionCall* _tmp483_;
										_tmp466_ = prop;
										_tmp467_ = vala_property_get_get_accessor (_tmp466_);
										_tmp468_ = _tmp467_;
										_tmp469_ = vala_property_accessor_get_value_type (_tmp468_);
										_tmp470_ = _tmp469_;
										_tmp471_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp470_, FALSE, (ValaCodeNode*) expr, NULL);
										temp_value = G_TYPE_CHECK_INSTANCE_CAST (_tmp471_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
										_tmp472_ = temp_value;
										_tmp473_ = vala_ccode_base_module_load_temp_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp472_);
										_tmp474_ = _tmp473_;
										vala_expression_set_target_value ((ValaExpression*) expr, _tmp474_);
										_vala_target_value_unref0 (_tmp474_);
										_tmp475_ = temp_value;
										_tmp476_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp475_);
										ctemp = _tmp476_;
										_tmp477_ = ccall;
										_tmp478_ = ctemp;
										_tmp479_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp478_);
										_tmp480_ = _tmp479_;
										vala_ccode_function_call_add_argument (_tmp477_, (ValaCCodeExpression*) _tmp480_);
										_vala_ccode_node_unref0 (_tmp480_);
										_tmp481_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
										_tmp482_ = _tmp481_;
										_tmp483_ = ccall;
										vala_ccode_function_add_expression (_tmp482_, (ValaCCodeExpression*) _tmp483_);
										_vala_ccode_node_unref0 (ctemp);
										_vala_target_value_unref0 (temp_value);
									} else {
										ValaCCodeFunctionCall* _tmp484_;
										_tmp484_ = ccall;
										vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp484_);
									}
									_vala_ccode_node_unref0 (ccall);
								}
								_vala_ccode_node_unref0 (vcast);
								_vala_code_node_unref0 (base_prop);
							} else {
								gboolean _tmp485_ = FALSE;
								gboolean _tmp486_ = FALSE;
								gboolean _tmp487_ = FALSE;
								gboolean _tmp488_ = FALSE;
								gboolean _tmp489_ = FALSE;
								gboolean _tmp490_ = FALSE;
								gboolean _tmp491_ = FALSE;
								ValaProperty* _tmp492_;
								ValaMemberBinding _tmp493_;
								ValaMemberBinding _tmp494_;
								_tmp492_ = prop;
								_tmp493_ = vala_property_get_binding (_tmp492_);
								_tmp494_ = _tmp493_;
								if (_tmp494_ == VALA_MEMBER_BINDING_INSTANCE) {
									ValaProperty* _tmp495_;
									ValaPropertyAccessor* _tmp496_;
									ValaPropertyAccessor* _tmp497_;
									gboolean _tmp498_;
									gboolean _tmp499_;
									_tmp495_ = prop;
									_tmp496_ = vala_property_get_get_accessor (_tmp495_);
									_tmp497_ = _tmp496_;
									_tmp498_ = vala_property_accessor_get_automatic_body (_tmp497_);
									_tmp499_ = _tmp498_;
									_tmp491_ = _tmp499_;
								} else {
									_tmp491_ = FALSE;
								}
								if (_tmp491_) {
									ValaProperty* _tmp500_;
									ValaPropertyAccessor* _tmp501_;
									ValaPropertyAccessor* _tmp502_;
									ValaDataType* _tmp503_;
									ValaDataType* _tmp504_;
									gboolean _tmp505_;
									gboolean _tmp506_;
									_tmp500_ = prop;
									_tmp501_ = vala_property_get_get_accessor (_tmp500_);
									_tmp502_ = _tmp501_;
									_tmp503_ = vala_property_accessor_get_value_type (_tmp502_);
									_tmp504_ = _tmp503_;
									_tmp505_ = vala_data_type_get_value_owned (_tmp504_);
									_tmp506_ = _tmp505_;
									_tmp490_ = !_tmp506_;
								} else {
									_tmp490_ = FALSE;
								}
								if (_tmp490_) {
									ValaTypeSymbol* _tmp507_;
									ValaTypeSymbol* _tmp508_;
									ValaProperty* _tmp509_;
									ValaSymbol* _tmp510_;
									ValaSymbol* _tmp511_;
									_tmp507_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
									_tmp508_ = _tmp507_;
									_tmp509_ = prop;
									_tmp510_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp509_);
									_tmp511_ = _tmp510_;
									_tmp489_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp508_, VALA_TYPE_SYMBOL, ValaSymbol) == _tmp511_;
								} else {
									_tmp489_ = FALSE;
								}
								if (_tmp489_) {
									ValaTypeSymbol* _tmp512_;
									ValaTypeSymbol* _tmp513_;
									_tmp512_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
									_tmp513_ = _tmp512_;
									_tmp488_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp513_, VALA_TYPE_CLASS);
								} else {
									_tmp488_ = FALSE;
								}
								if (_tmp488_) {
									ValaProperty* _tmp514_;
									ValaProperty* _tmp515_;
									ValaProperty* _tmp516_;
									_tmp514_ = prop;
									_tmp515_ = vala_property_get_base_property (_tmp514_);
									_tmp516_ = _tmp515_;
									_tmp487_ = _tmp516_ == NULL;
								} else {
									_tmp487_ = FALSE;
								}
								if (_tmp487_) {
									ValaProperty* _tmp517_;
									ValaProperty* _tmp518_;
									ValaProperty* _tmp519_;
									_tmp517_ = prop;
									_tmp518_ = vala_property_get_base_interface_property (_tmp517_);
									_tmp519_ = _tmp518_;
									_tmp486_ = _tmp519_ == NULL;
								} else {
									_tmp486_ = FALSE;
								}
								if (_tmp486_) {
									gboolean _tmp520_ = FALSE;
									ValaProperty* _tmp521_;
									ValaDataType* _tmp522_;
									ValaDataType* _tmp523_;
									_tmp521_ = prop;
									_tmp522_ = vala_property_get_property_type (_tmp521_);
									_tmp523_ = _tmp522_;
									if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp523_, VALA_TYPE_ARRAY_TYPE)) {
										_tmp520_ = TRUE;
									} else {
										ValaProperty* _tmp524_;
										ValaDataType* _tmp525_;
										ValaDataType* _tmp526_;
										_tmp524_ = prop;
										_tmp525_ = vala_property_get_property_type (_tmp524_);
										_tmp526_ = _tmp525_;
										_tmp520_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp526_, VALA_TYPE_DELEGATE_TYPE);
									}
									_tmp485_ = !_tmp520_;
								} else {
									_tmp485_ = FALSE;
								}
								if (_tmp485_) {
									ValaCCodeExpression* inst = NULL;
									ValaCCodeExpression* _tmp527_;
									ValaCCodeMemberAccess* _tmp528_;
									ValaCCodeExpression* _tmp529_;
									ValaProperty* _tmp530_;
									ValaField* _tmp531_;
									ValaField* _tmp532_;
									gchar* _tmp533_;
									gchar* _tmp534_;
									ValaCCodeMemberAccess* _tmp535_;
									ValaCCodeMemberAccess* _tmp536_;
									_tmp527_ = pub_inst;
									_tmp528_ = vala_ccode_member_access_new_pointer (_tmp527_, "priv");
									_vala_ccode_node_unref0 (inst);
									inst = (ValaCCodeExpression*) _tmp528_;
									_tmp529_ = inst;
									_tmp530_ = prop;
									_tmp531_ = vala_property_get_field (_tmp530_);
									_tmp532_ = _tmp531_;
									_tmp533_ = vala_get_ccode_name ((ValaCodeNode*) _tmp532_);
									_tmp534_ = _tmp533_;
									_tmp535_ = vala_ccode_member_access_new_pointer (_tmp529_, _tmp534_);
									_tmp536_ = _tmp535_;
									vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp536_);
									_vala_ccode_node_unref0 (_tmp536_);
									_g_free0 (_tmp534_);
									_vala_ccode_node_unref0 (inst);
								} else {
									ValaProperty* _tmp537_;
									_tmp537_ = prop;
									if (!vala_get_ccode_no_accessor_method (_tmp537_)) {
										gchar* getter_cname = NULL;
										ValaProperty* _tmp538_;
										ValaCCodeFunctionCall* ccall = NULL;
										const gchar* _tmp545_;
										ValaCCodeIdentifier* _tmp546_;
										ValaCCodeIdentifier* _tmp547_;
										ValaCCodeFunctionCall* _tmp548_;
										ValaCCodeFunctionCall* _tmp549_;
										ValaProperty* _tmp550_;
										ValaMemberBinding _tmp551_;
										ValaMemberBinding _tmp552_;
										gboolean prop_is_real_non_null_struct_type = FALSE;
										ValaProperty* _tmp574_;
										ValaDataType* _tmp575_;
										ValaDataType* _tmp576_;
										gboolean _tmp577_ = FALSE;
										ValaProperty* _tmp578_;
										ValaDataType* _tmp579_;
										ValaDataType* _tmp580_;
										gboolean requires_init = FALSE;
										ValaGLibValue* temp_value = NULL;
										ValaProperty* _tmp581_;
										ValaPropertyAccessor* _tmp582_;
										ValaPropertyAccessor* _tmp583_;
										ValaDataType* _tmp584_;
										ValaDataType* _tmp585_;
										ValaTargetValue* _tmp586_;
										ValaGLibValue* _tmp587_;
										ValaTargetValue* _tmp588_;
										ValaTargetValue* _tmp589_;
										ValaCCodeExpression* ctemp = NULL;
										ValaGLibValue* _tmp590_;
										ValaCCodeExpression* _tmp591_;
										_tmp538_ = prop;
										if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp538_, VALA_TYPE_DYNAMIC_PROPERTY)) {
											ValaProperty* _tmp539_;
											gchar* _tmp540_;
											_tmp539_ = prop;
											_tmp540_ = vala_ccode_base_module_get_dynamic_property_getter_cname ((ValaCCodeBaseModule*) self, G_TYPE_CHECK_INSTANCE_CAST (_tmp539_, VALA_TYPE_DYNAMIC_PROPERTY, ValaDynamicProperty));
											_g_free0 (getter_cname);
											getter_cname = _tmp540_;
										} else {
											ValaProperty* _tmp541_;
											ValaPropertyAccessor* _tmp542_;
											ValaPropertyAccessor* _tmp543_;
											gchar* _tmp544_;
											_tmp541_ = prop;
											_tmp542_ = vala_property_get_get_accessor (_tmp541_);
											_tmp543_ = _tmp542_;
											_tmp544_ = vala_get_ccode_name ((ValaCodeNode*) _tmp543_);
											_g_free0 (getter_cname);
											getter_cname = _tmp544_;
										}
										_tmp545_ = getter_cname;
										_tmp546_ = vala_ccode_identifier_new (_tmp545_);
										_tmp547_ = _tmp546_;
										_tmp548_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp547_);
										_tmp549_ = _tmp548_;
										_vala_ccode_node_unref0 (_tmp547_);
										ccall = _tmp549_;
										_tmp550_ = prop;
										_tmp551_ = vala_property_get_binding (_tmp550_);
										_tmp552_ = _tmp551_;
										if (_tmp552_ == VALA_MEMBER_BINDING_INSTANCE) {
											gboolean _tmp553_ = FALSE;
											ValaProperty* _tmp554_;
											ValaSymbol* _tmp555_;
											ValaSymbol* _tmp556_;
											ValaCCodeFunctionCall* _tmp572_;
											ValaCCodeExpression* _tmp573_;
											_tmp554_ = prop;
											_tmp555_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp554_);
											_tmp556_ = _tmp555_;
											if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp556_, VALA_TYPE_STRUCT)) {
												ValaProperty* _tmp557_;
												ValaSymbol* _tmp558_;
												ValaSymbol* _tmp559_;
												_tmp557_ = prop;
												_tmp558_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp557_);
												_tmp559_ = _tmp558_;
												_tmp553_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp559_, VALA_TYPE_STRUCT, ValaStruct));
											} else {
												_tmp553_ = FALSE;
											}
											if (_tmp553_) {
												ValaTargetValue* instance = NULL;
												ValaExpression* _tmp560_;
												ValaExpression* _tmp561_;
												ValaTargetValue* _tmp562_;
												ValaTargetValue* _tmp563_;
												ValaTargetValue* _tmp564_;
												ValaTargetValue* _tmp565_;
												ValaTargetValue* _tmp568_;
												ValaCCodeExpression* _tmp569_;
												ValaCCodeExpression* _tmp570_;
												ValaCCodeUnaryExpression* _tmp571_;
												_tmp560_ = vala_member_access_get_inner (expr);
												_tmp561_ = _tmp560_;
												_tmp562_ = vala_expression_get_target_value (_tmp561_);
												_tmp563_ = _tmp562_;
												_tmp564_ = _vala_target_value_ref0 (_tmp563_);
												instance = _tmp564_;
												_tmp565_ = instance;
												if (!vala_ccode_base_module_get_lvalue ((ValaCCodeBaseModule*) self, _tmp565_)) {
													ValaTargetValue* _tmp566_;
													ValaTargetValue* _tmp567_;
													_tmp566_ = instance;
													_tmp567_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp566_, (ValaCodeNode*) expr, NULL);
													_vala_target_value_unref0 (instance);
													instance = _tmp567_;
												}
												_tmp568_ = instance;
												_tmp569_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp568_);
												_tmp570_ = _tmp569_;
												_tmp571_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp570_);
												_vala_ccode_node_unref0 (pub_inst);
												pub_inst = (ValaCCodeExpression*) _tmp571_;
												_vala_ccode_node_unref0 (_tmp570_);
												_vala_target_value_unref0 (instance);
											}
											_tmp572_ = ccall;
											_tmp573_ = pub_inst;
											vala_ccode_function_call_add_argument (_tmp572_, _tmp573_);
										}
										_tmp574_ = prop;
										_tmp575_ = vala_property_get_property_type (_tmp574_);
										_tmp576_ = _tmp575_;
										prop_is_real_non_null_struct_type = vala_data_type_is_real_non_null_struct_type (_tmp576_);
										_tmp578_ = prop;
										_tmp579_ = vala_property_get_property_type (_tmp578_);
										_tmp580_ = _tmp579_;
										if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp580_, VALA_TYPE_DELEGATE_TYPE)) {
											_tmp577_ = TRUE;
										} else {
											_tmp577_ = prop_is_real_non_null_struct_type;
										}
										requires_init = _tmp577_;
										_tmp581_ = prop;
										_tmp582_ = vala_property_get_get_accessor (_tmp581_);
										_tmp583_ = _tmp582_;
										_tmp584_ = vala_property_accessor_get_value_type (_tmp583_);
										_tmp585_ = _tmp584_;
										_tmp586_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp585_, requires_init, (ValaCodeNode*) expr, NULL);
										temp_value = G_TYPE_CHECK_INSTANCE_CAST (_tmp586_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
										_tmp587_ = temp_value;
										_tmp588_ = vala_ccode_base_module_load_temp_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp587_);
										_tmp589_ = _tmp588_;
										vala_expression_set_target_value ((ValaExpression*) expr, _tmp589_);
										_vala_target_value_unref0 (_tmp589_);
										_tmp590_ = temp_value;
										_tmp591_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp590_);
										ctemp = _tmp591_;
										if (prop_is_real_non_null_struct_type) {
											ValaCCodeFunctionCall* _tmp592_;
											ValaCCodeExpression* _tmp593_;
											ValaCCodeUnaryExpression* _tmp594_;
											ValaCCodeUnaryExpression* _tmp595_;
											ValaCCodeFunction* _tmp596_;
											ValaCCodeFunction* _tmp597_;
											ValaCCodeFunctionCall* _tmp598_;
											_tmp592_ = ccall;
											_tmp593_ = ctemp;
											_tmp594_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp593_);
											_tmp595_ = _tmp594_;
											vala_ccode_function_call_add_argument (_tmp592_, (ValaCCodeExpression*) _tmp595_);
											_vala_ccode_node_unref0 (_tmp595_);
											_tmp596_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
											_tmp597_ = _tmp596_;
											_tmp598_ = ccall;
											vala_ccode_function_add_expression (_tmp597_, (ValaCCodeExpression*) _tmp598_);
										} else {
											ValaCCodeFunction* _tmp599_;
											ValaCCodeFunction* _tmp600_;
											ValaCCodeExpression* _tmp601_;
											ValaCCodeFunctionCall* _tmp602_;
											ValaProperty* _tmp603_;
											ValaDataType* _tmp604_;
											ValaDataType* _tmp605_;
											ValaArrayType* _tmp606_;
											ValaArrayType* _tmp607_;
											_tmp599_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
											_tmp600_ = _tmp599_;
											_tmp601_ = ctemp;
											_tmp602_ = ccall;
											vala_ccode_function_add_assignment (_tmp600_, _tmp601_, (ValaCCodeExpression*) _tmp602_);
											_tmp603_ = prop;
											_tmp604_ = vala_property_get_property_type (_tmp603_);
											_tmp605_ = _tmp604_;
											_tmp606_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp605_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp605_) : NULL);
											_vala_code_node_unref0 (array_type);
											array_type = _tmp606_;
											_tmp607_ = array_type;
											if (_tmp607_ != NULL) {
												ValaProperty* _tmp608_;
												_tmp608_ = prop;
												if (vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp608_)) {
													ValaCCodeFunctionCall* len_call = NULL;
													ValaCCodeIdentifier* _tmp609_;
													ValaCCodeIdentifier* _tmp610_;
													ValaCCodeFunctionCall* _tmp611_;
													ValaCCodeFunctionCall* _tmp612_;
													ValaCCodeFunctionCall* _tmp613_;
													ValaCCodeExpression* _tmp614_;
													ValaCCodeFunction* _tmp615_;
													ValaCCodeFunction* _tmp616_;
													ValaGLibValue* _tmp617_;
													ValaList* _tmp618_;
													gpointer _tmp619_;
													ValaCCodeExpression* _tmp620_;
													ValaCCodeFunctionCall* _tmp621_;
													((ValaCCodeBaseModule*) self)->requires_array_length = TRUE;
													_tmp609_ = vala_ccode_identifier_new ("_vala_array_length");
													_tmp610_ = _tmp609_;
													_tmp611_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp610_);
													_tmp612_ = _tmp611_;
													_vala_ccode_node_unref0 (_tmp610_);
													len_call = _tmp612_;
													_tmp613_ = len_call;
													_tmp614_ = ctemp;
													vala_ccode_function_call_add_argument (_tmp613_, _tmp614_);
													_tmp615_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
													_tmp616_ = _tmp615_;
													_tmp617_ = temp_value;
													_tmp618_ = _tmp617_->array_length_cvalues;
													_tmp619_ = vala_list_get (_tmp618_, 0);
													_tmp620_ = (ValaCCodeExpression*) _tmp619_;
													_tmp621_ = len_call;
													vala_ccode_function_add_assignment (_tmp616_, _tmp620_, (ValaCCodeExpression*) _tmp621_);
													_vala_ccode_node_unref0 (_tmp620_);
													_vala_ccode_node_unref0 (len_call);
												} else {
													ValaProperty* _tmp622_;
													_tmp622_ = prop;
													if (vala_get_ccode_array_length ((ValaCodeNode*) _tmp622_)) {
														{
															gint dim = 0;
															dim = 1;
															{
																gboolean _tmp623_ = FALSE;
																_tmp623_ = TRUE;
																while (TRUE) {
																	ValaArrayType* _tmp625_;
																	gint _tmp626_;
																	gint _tmp627_;
																	ValaCCodeFunctionCall* _tmp628_;
																	ValaGLibValue* _tmp629_;
																	ValaCCodeExpression* _tmp630_;
																	ValaCCodeExpression* _tmp631_;
																	ValaCCodeUnaryExpression* _tmp632_;
																	ValaCCodeUnaryExpression* _tmp633_;
																	if (!_tmp623_) {
																		gint _tmp624_;
																		_tmp624_ = dim;
																		dim = _tmp624_ + 1;
																	}
																	_tmp623_ = FALSE;
																	_tmp625_ = array_type;
																	_tmp626_ = vala_array_type_get_rank (_tmp625_);
																	_tmp627_ = _tmp626_;
																	if (!(dim <= _tmp627_)) {
																		break;
																	}
																	_tmp628_ = ccall;
																	_tmp629_ = temp_value;
																	_tmp630_ = vala_ccode_base_module_get_array_length_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp629_, dim);
																	_tmp631_ = _tmp630_;
																	_tmp632_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp631_);
																	_tmp633_ = _tmp632_;
																	vala_ccode_function_call_add_argument (_tmp628_, (ValaCCodeExpression*) _tmp633_);
																	_vala_ccode_node_unref0 (_tmp633_);
																	_vala_ccode_node_unref0 (_tmp631_);
																}
															}
														}
													}
												}
											} else {
												ValaProperty* _tmp634_;
												ValaDataType* _tmp635_;
												ValaDataType* _tmp636_;
												ValaDelegateType* _tmp637_;
												gboolean _tmp638_ = FALSE;
												ValaDelegateType* _tmp639_;
												_tmp634_ = prop;
												_tmp635_ = vala_property_get_property_type (_tmp634_);
												_tmp636_ = _tmp635_;
												_tmp637_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp636_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp636_) : NULL);
												_vala_code_node_unref0 (delegate_type);
												delegate_type = _tmp637_;
												_tmp639_ = delegate_type;
												if (_tmp639_ != NULL) {
													ValaDelegateType* _tmp640_;
													ValaDelegate* _tmp641_;
													ValaDelegate* _tmp642_;
													gboolean _tmp643_;
													gboolean _tmp644_;
													_tmp640_ = delegate_type;
													_tmp641_ = vala_delegate_type_get_delegate_symbol (_tmp640_);
													_tmp642_ = _tmp641_;
													_tmp643_ = vala_delegate_get_has_target (_tmp642_);
													_tmp644_ = _tmp643_;
													_tmp638_ = _tmp644_;
												} else {
													_tmp638_ = FALSE;
												}
												if (_tmp638_) {
													ValaCCodeFunctionCall* _tmp645_;
													ValaGLibValue* _tmp646_;
													ValaCCodeExpression* _tmp647_;
													ValaCCodeExpression* _tmp648_;
													ValaCCodeUnaryExpression* _tmp649_;
													ValaCCodeUnaryExpression* _tmp650_;
													_tmp645_ = ccall;
													_tmp646_ = temp_value;
													_tmp647_ = vala_ccode_base_module_get_delegate_target_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp646_);
													_tmp648_ = _tmp647_;
													_tmp649_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp648_);
													_tmp650_ = _tmp649_;
													vala_ccode_function_call_add_argument (_tmp645_, (ValaCCodeExpression*) _tmp650_);
													_vala_ccode_node_unref0 (_tmp650_);
													_vala_ccode_node_unref0 (_tmp648_);
												}
											}
										}
										_vala_ccode_node_unref0 (ctemp);
										_vala_target_value_unref0 (temp_value);
										_vala_ccode_node_unref0 (ccall);
										_g_free0 (getter_cname);
									} else {
										ValaCCodeFunctionCall* ccall = NULL;
										ValaCCodeIdentifier* _tmp651_;
										ValaCCodeIdentifier* _tmp652_;
										ValaCCodeFunctionCall* _tmp653_;
										ValaCCodeFunctionCall* _tmp654_;
										ValaCCodeFunctionCall* _tmp655_;
										ValaCCodeExpression* _tmp656_;
										ValaCCodeFunctionCall* _tmp657_;
										ValaProperty* _tmp658_;
										ValaCCodeConstant* _tmp659_;
										ValaCCodeConstant* _tmp660_;
										ValaProperty* _tmp661_;
										ValaPropertyAccessor* _tmp662_;
										ValaPropertyAccessor* _tmp663_;
										ValaDataType* _tmp664_;
										ValaDataType* _tmp665_;
										gboolean _tmp666_;
										gboolean _tmp667_;
										ValaDataType* _tmp686_;
										ValaDataType* _tmp687_;
										ValaLocalVariable* temp_var = NULL;
										ValaDataType* _tmp690_;
										ValaDataType* _tmp691_;
										ValaLocalVariable* _tmp692_;
										ValaCCodeExpression* ctemp = NULL;
										ValaLocalVariable* _tmp693_;
										const gchar* _tmp694_;
										const gchar* _tmp695_;
										ValaCCodeExpression* _tmp696_;
										ValaLocalVariable* _tmp697_;
										ValaCCodeFunctionCall* _tmp698_;
										ValaCCodeExpression* _tmp699_;
										ValaCCodeUnaryExpression* _tmp700_;
										ValaCCodeUnaryExpression* _tmp701_;
										ValaCCodeFunctionCall* _tmp702_;
										ValaCCodeConstant* _tmp703_;
										ValaCCodeConstant* _tmp704_;
										ValaCCodeFunction* _tmp705_;
										ValaCCodeFunction* _tmp706_;
										ValaCCodeFunctionCall* _tmp707_;
										ValaCCodeExpression* _tmp708_;
										_tmp651_ = vala_ccode_identifier_new ("g_object_get");
										_tmp652_ = _tmp651_;
										_tmp653_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp652_);
										_tmp654_ = _tmp653_;
										_vala_ccode_node_unref0 (_tmp652_);
										ccall = _tmp654_;
										_tmp655_ = ccall;
										_tmp656_ = pub_inst;
										vala_ccode_function_call_add_argument (_tmp655_, _tmp656_);
										_tmp657_ = ccall;
										_tmp658_ = prop;
										_tmp659_ = vala_ccode_base_module_get_property_canonical_cconstant ((ValaCCodeBaseModule*) self, _tmp658_);
										_tmp660_ = _tmp659_;
										vala_ccode_function_call_add_argument (_tmp657_, (ValaCCodeExpression*) _tmp660_);
										_vala_ccode_node_unref0 (_tmp660_);
										_tmp661_ = prop;
										_tmp662_ = vala_property_get_get_accessor (_tmp661_);
										_tmp663_ = _tmp662_;
										_tmp664_ = vala_property_accessor_get_value_type (_tmp663_);
										_tmp665_ = _tmp664_;
										_tmp666_ = vala_data_type_get_value_owned (_tmp665_);
										_tmp667_ = _tmp666_;
										if (!_tmp667_) {
											ValaDataType* owned_value_type = NULL;
											ValaProperty* _tmp668_;
											ValaPropertyAccessor* _tmp669_;
											ValaPropertyAccessor* _tmp670_;
											ValaDataType* _tmp671_;
											ValaDataType* _tmp672_;
											ValaDataType* _tmp673_;
											ValaDataType* _tmp674_;
											ValaDataType* _tmp675_;
											_tmp668_ = prop;
											_tmp669_ = vala_property_get_get_accessor (_tmp668_);
											_tmp670_ = _tmp669_;
											_tmp671_ = vala_property_accessor_get_value_type (_tmp670_);
											_tmp672_ = _tmp671_;
											_tmp673_ = vala_data_type_copy (_tmp672_);
											owned_value_type = _tmp673_;
											_tmp674_ = owned_value_type;
											vala_data_type_set_value_owned (_tmp674_, TRUE);
											_tmp675_ = owned_value_type;
											if (vala_ccode_base_module_requires_copy ((ValaCCodeBaseModule*) self, _tmp675_)) {
												ValaProperty* _tmp676_;
												ValaPropertyAccessor* _tmp677_;
												ValaPropertyAccessor* _tmp678_;
												ValaSourceReference* _tmp679_;
												ValaSourceReference* _tmp680_;
												ValaProperty* _tmp681_;
												gchar* _tmp682_;
												gchar* _tmp683_;
												gchar* _tmp684_;
												gchar* _tmp685_;
												_tmp676_ = prop;
												_tmp677_ = vala_property_get_get_accessor (_tmp676_);
												_tmp678_ = _tmp677_;
												_tmp679_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp678_);
												_tmp680_ = _tmp679_;
												_tmp681_ = prop;
												_tmp682_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp681_);
												_tmp683_ = _tmp682_;
												_tmp684_ = g_strdup_printf ("unowned return value for getter of property `%s' not supported without" \
" accessor", _tmp683_);
												_tmp685_ = _tmp684_;
												vala_report_error (_tmp680_, _tmp685_);
												_g_free0 (_tmp685_);
												_g_free0 (_tmp683_);
											}
											_vala_code_node_unref0 (owned_value_type);
										}
										_tmp686_ = vala_expression_get_value_type ((ValaExpression*) expr);
										_tmp687_ = _tmp686_;
										if (vala_data_type_is_real_struct_type (_tmp687_)) {
											ValaDataType* _tmp688_;
											ValaDataType* _tmp689_;
											_tmp688_ = vala_expression_get_value_type ((ValaExpression*) expr);
											_tmp689_ = _tmp688_;
											vala_data_type_set_nullable (_tmp689_, TRUE);
										}
										_tmp690_ = vala_expression_get_value_type ((ValaExpression*) expr);
										_tmp691_ = _tmp690_;
										_tmp692_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp691_, TRUE, NULL, FALSE);
										temp_var = _tmp692_;
										_tmp693_ = temp_var;
										_tmp694_ = vala_symbol_get_name ((ValaSymbol*) _tmp693_);
										_tmp695_ = _tmp694_;
										_tmp696_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp695_);
										ctemp = _tmp696_;
										_tmp697_ = temp_var;
										vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp697_, FALSE);
										_tmp698_ = ccall;
										_tmp699_ = ctemp;
										_tmp700_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp699_);
										_tmp701_ = _tmp700_;
										vala_ccode_function_call_add_argument (_tmp698_, (ValaCCodeExpression*) _tmp701_);
										_vala_ccode_node_unref0 (_tmp701_);
										_tmp702_ = ccall;
										_tmp703_ = vala_ccode_constant_new ("NULL");
										_tmp704_ = _tmp703_;
										vala_ccode_function_call_add_argument (_tmp702_, (ValaCCodeExpression*) _tmp704_);
										_vala_ccode_node_unref0 (_tmp704_);
										_tmp705_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
										_tmp706_ = _tmp705_;
										_tmp707_ = ccall;
										vala_ccode_function_add_expression (_tmp706_, (ValaCCodeExpression*) _tmp707_);
										_tmp708_ = ctemp;
										vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) expr, _tmp708_);
										_vala_ccode_node_unref0 (ctemp);
										_vala_code_node_unref0 (temp_var);
										_vala_ccode_node_unref0 (ccall);
									}
								}
							}
							_tmp709_ = vala_expression_get_target_value ((ValaExpression*) expr);
							_tmp710_ = _tmp709_;
							_tmp711_ = vala_expression_get_value_type ((ValaExpression*) expr);
							_tmp712_ = _tmp711_;
							vala_target_value_set_value_type (_tmp710_, _tmp712_);
							_tmp713_ = vala_expression_get_target_value ((ValaExpression*) expr);
							_tmp714_ = _tmp713_;
							_tmp715_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp714_, (ValaCodeNode*) expr, NULL);
							_tmp716_ = _tmp715_;
							vala_expression_set_target_value ((ValaExpression*) expr, _tmp716_);
							_vala_target_value_unref0 (_tmp716_);
							_vala_code_node_unref0 (prop);
						} else {
							ValaSymbol* _tmp717_;
							ValaSymbol* _tmp718_;
							_tmp717_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
							_tmp718_ = _tmp717_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp718_, VALA_TYPE_LOCAL_VARIABLE)) {
								ValaLocalVariable* local = NULL;
								ValaSymbol* _tmp719_;
								ValaSymbol* _tmp720_;
								ValaLocalVariable* _tmp721_;
								gboolean _tmp722_ = FALSE;
								gboolean _tmp723_ = FALSE;
								gboolean _tmp724_ = FALSE;
								gboolean _tmp725_ = FALSE;
								gboolean _tmp726_ = FALSE;
								ValaCodeNode* _tmp727_;
								ValaCodeNode* _tmp728_;
								_tmp719_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
								_tmp720_ = _tmp719_;
								_tmp721_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp720_, VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariable));
								local = _tmp721_;
								_tmp727_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
								_tmp728_ = _tmp727_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp728_, VALA_TYPE_RETURN_STATEMENT)) {
									ValaDataType* _tmp729_;
									ValaDataType* _tmp730_;
									gboolean _tmp731_;
									gboolean _tmp732_;
									_tmp729_ = vala_ccode_base_module_get_current_return_type ((ValaCCodeBaseModule*) self);
									_tmp730_ = _tmp729_;
									_tmp731_ = vala_data_type_get_value_owned (_tmp730_);
									_tmp732_ = _tmp731_;
									_tmp726_ = _tmp732_;
								} else {
									_tmp726_ = FALSE;
								}
								if (_tmp726_) {
									ValaLocalVariable* _tmp733_;
									ValaDataType* _tmp734_;
									ValaDataType* _tmp735_;
									gboolean _tmp736_;
									gboolean _tmp737_;
									_tmp733_ = local;
									_tmp734_ = vala_variable_get_variable_type ((ValaVariable*) _tmp733_);
									_tmp735_ = _tmp734_;
									_tmp736_ = vala_data_type_get_value_owned (_tmp735_);
									_tmp737_ = _tmp736_;
									_tmp725_ = _tmp737_;
								} else {
									_tmp725_ = FALSE;
								}
								if (_tmp725_) {
									ValaLocalVariable* _tmp738_;
									gboolean _tmp739_;
									gboolean _tmp740_;
									_tmp738_ = local;
									_tmp739_ = vala_local_variable_get_captured (_tmp738_);
									_tmp740_ = _tmp739_;
									_tmp724_ = !_tmp740_;
								} else {
									_tmp724_ = FALSE;
								}
								if (_tmp724_) {
									ValaLocalVariable* _tmp741_;
									_tmp741_ = local;
									_tmp723_ = !vala_ccode_base_module_variable_accessible_in_finally ((ValaCCodeBaseModule*) self, _tmp741_);
								} else {
									_tmp723_ = FALSE;
								}
								if (_tmp723_) {
									gboolean _tmp742_ = FALSE;
									ValaLocalVariable* _tmp743_;
									ValaDataType* _tmp744_;
									ValaDataType* _tmp745_;
									_tmp743_ = local;
									_tmp744_ = vala_variable_get_variable_type ((ValaVariable*) _tmp743_);
									_tmp745_ = _tmp744_;
									if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp745_, VALA_TYPE_ARRAY_TYPE)) {
										ValaLocalVariable* _tmp746_;
										ValaDataType* _tmp747_;
										ValaDataType* _tmp748_;
										gboolean _tmp749_;
										gboolean _tmp750_;
										_tmp746_ = local;
										_tmp747_ = vala_variable_get_variable_type ((ValaVariable*) _tmp746_);
										_tmp748_ = _tmp747_;
										_tmp749_ = vala_array_type_get_inline_allocated (G_TYPE_CHECK_INSTANCE_CAST (_tmp748_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
										_tmp750_ = _tmp749_;
										_tmp742_ = _tmp750_;
									} else {
										_tmp742_ = FALSE;
									}
									_tmp722_ = !_tmp742_;
								} else {
									_tmp722_ = FALSE;
								}
								if (_tmp722_) {
									ValaDataType* _tmp751_;
									ValaDataType* _tmp752_;
									ValaLocalVariable* _tmp753_;
									ValaGLibValue* glib_value = NULL;
									ValaLocalVariable* _tmp754_;
									ValaTargetValue* _tmp755_;
									ValaGLibValue* _tmp756_;
									ValaGLibValue* _tmp757_;
									ValaCCodeExpression* _tmp758_;
									ValaGLibValue* _tmp761_;
									ValaCCodeExpression* _tmp762_;
									_tmp751_ = vala_expression_get_value_type ((ValaExpression*) expr);
									_tmp752_ = _tmp751_;
									vala_data_type_set_value_owned (_tmp752_, TRUE);
									_tmp753_ = local;
									vala_symbol_set_active ((ValaSymbol*) _tmp753_, FALSE);
									_tmp754_ = local;
									_tmp755_ = vala_ccode_base_module_get_local_cvalue ((ValaCCodeBaseModule*) self, _tmp754_);
									glib_value = G_TYPE_CHECK_INSTANCE_CAST (_tmp755_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
									_tmp756_ = glib_value;
									vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp756_);
									_tmp757_ = glib_value;
									_tmp758_ = _tmp757_->delegate_target_cvalue;
									if (_tmp758_ == NULL) {
										ValaGLibValue* _tmp759_;
										ValaCCodeConstant* _tmp760_;
										_tmp759_ = glib_value;
										_tmp760_ = vala_ccode_constant_new ("NULL");
										_vala_ccode_node_unref0 (_tmp759_->delegate_target_cvalue);
										_tmp759_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp760_;
									}
									_tmp761_ = glib_value;
									_tmp762_ = _tmp761_->delegate_target_destroy_notify_cvalue;
									if (_tmp762_ == NULL) {
										ValaGLibValue* _tmp763_;
										ValaCCodeConstant* _tmp764_;
										_tmp763_ = glib_value;
										_tmp764_ = vala_ccode_constant_new ("NULL");
										_vala_ccode_node_unref0 (_tmp763_->delegate_target_destroy_notify_cvalue);
										_tmp763_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp764_;
									}
									_vala_target_value_unref0 (glib_value);
								} else {
									gboolean _tmp765_;
									gboolean _tmp766_;
									_tmp765_ = vala_expression_get_lvalue ((ValaExpression*) expr);
									_tmp766_ = _tmp765_;
									if (_tmp766_) {
										ValaLocalVariable* _tmp767_;
										ValaTargetValue* _tmp768_;
										ValaTargetValue* _tmp769_;
										_tmp767_ = local;
										_tmp768_ = vala_ccode_base_module_get_local_cvalue ((ValaCCodeBaseModule*) self, _tmp767_);
										_tmp769_ = _tmp768_;
										vala_expression_set_target_value ((ValaExpression*) expr, _tmp769_);
										_vala_target_value_unref0 (_tmp769_);
									} else {
										ValaLocalVariable* _tmp770_;
										ValaTargetValue* _tmp771_;
										ValaTargetValue* _tmp772_;
										_tmp770_ = local;
										_tmp771_ = vala_code_generator_load_local ((ValaCodeGenerator*) self, _tmp770_);
										_tmp772_ = _tmp771_;
										vala_expression_set_target_value ((ValaExpression*) expr, _tmp772_);
										_vala_target_value_unref0 (_tmp772_);
									}
								}
								_vala_code_node_unref0 (local);
							} else {
								ValaSymbol* _tmp773_;
								ValaSymbol* _tmp774_;
								_tmp773_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
								_tmp774_ = _tmp773_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp774_, VALA_TYPE_PARAMETER)) {
									ValaParameter* param = NULL;
									ValaSymbol* _tmp775_;
									ValaSymbol* _tmp776_;
									ValaParameter* _tmp777_;
									gboolean _tmp778_;
									gboolean _tmp779_;
									_tmp775_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
									_tmp776_ = _tmp775_;
									_tmp777_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp776_, VALA_TYPE_PARAMETER, ValaParameter));
									param = _tmp777_;
									_tmp778_ = vala_expression_get_lvalue ((ValaExpression*) expr);
									_tmp779_ = _tmp778_;
									if (_tmp779_) {
										ValaParameter* _tmp780_;
										ValaTargetValue* _tmp781_;
										ValaTargetValue* _tmp782_;
										_tmp780_ = param;
										_tmp781_ = vala_ccode_base_module_get_parameter_cvalue ((ValaCCodeBaseModule*) self, _tmp780_);
										_tmp782_ = _tmp781_;
										vala_expression_set_target_value ((ValaExpression*) expr, _tmp782_);
										_vala_target_value_unref0 (_tmp782_);
									} else {
										ValaParameter* _tmp783_;
										ValaTargetValue* _tmp784_;
										ValaTargetValue* _tmp785_;
										_tmp783_ = param;
										_tmp784_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, _tmp783_);
										_tmp785_ = _tmp784_;
										vala_expression_set_target_value ((ValaExpression*) expr, _tmp785_);
										_vala_target_value_unref0 (_tmp785_);
									}
									_vala_code_node_unref0 (param);
								}
							}
						}
					}
				}
			}
		}
	}
	_vala_code_node_unref0 (delegate_type);
	_vala_code_node_unref0 (array_type);
	_vala_ccode_node_unref0 (pub_inst);
}

static ValaTargetValue*
vala_ccode_member_access_module_real_get_local_cvalue (ValaCCodeBaseModule* base,
                                                       ValaLocalVariable* local)
{
	ValaCCodeMemberAccessModule * self;
	ValaGLibValue* _result_ = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaGLibValue* _tmp4_;
	ValaGLibValue* _tmp5_;
	ValaGLibValue* _tmp6_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp7_;
	ValaDataType* _tmp8_;
	ValaArrayType* _tmp9_;
	ValaDelegateType* delegate_type = NULL;
	ValaDataType* _tmp10_;
	ValaDataType* _tmp11_;
	ValaDelegateType* _tmp12_;
	gboolean _tmp13_;
	gboolean _tmp14_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (local != NULL, NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) local);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_copy (_tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_glib_value_new (_tmp3_, NULL, FALSE);
	_tmp5_ = _tmp4_;
	_vala_code_node_unref0 (_tmp3_);
	_result_ = _tmp5_;
	_tmp6_ = _result_;
	_tmp6_->lvalue = TRUE;
	_tmp7_ = vala_variable_get_variable_type ((ValaVariable*) local);
	_tmp8_ = _tmp7_;
	_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp8_) : NULL);
	array_type = _tmp9_;
	_tmp10_ = vala_variable_get_variable_type ((ValaVariable*) local);
	_tmp11_ = _tmp10_;
	_tmp12_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp11_) : NULL);
	delegate_type = _tmp12_;
	_tmp13_ = vala_local_variable_get_is_result (local);
	_tmp14_ = _tmp13_;
	if (_tmp14_) {
		gboolean _tmp15_ = FALSE;
		ValaDataType* _tmp16_;
		ValaDataType* _tmp17_;
		gboolean _tmp26_ = FALSE;
		gboolean _tmp27_ = FALSE;
		ValaArrayType* _tmp28_;
		_tmp16_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp17_ = _tmp16_;
		if (_tmp17_ != NULL) {
			ValaDataType* _tmp18_;
			ValaDataType* _tmp19_;
			_tmp18_ = vala_variable_get_variable_type ((ValaVariable*) local);
			_tmp19_ = _tmp18_;
			_tmp15_ = vala_data_type_is_real_non_null_struct_type (_tmp19_);
		} else {
			_tmp15_ = FALSE;
		}
		if (_tmp15_) {
			ValaGLibValue* _tmp20_;
			ValaCCodeIdentifier* _tmp21_;
			ValaCCodeIdentifier* _tmp22_;
			ValaCCodeUnaryExpression* _tmp23_;
			_tmp20_ = _result_;
			_tmp21_ = vala_ccode_identifier_new ("result");
			_tmp22_ = _tmp21_;
			_tmp23_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp22_);
			_vala_ccode_node_unref0 (_tmp20_->cvalue);
			_tmp20_->cvalue = (ValaCCodeExpression*) _tmp23_;
			_vala_ccode_node_unref0 (_tmp22_);
		} else {
			ValaGLibValue* _tmp24_;
			ValaCCodeIdentifier* _tmp25_;
			_tmp24_ = _result_;
			_tmp25_ = vala_ccode_identifier_new ("result");
			_vala_ccode_node_unref0 (_tmp24_->cvalue);
			_tmp24_->cvalue = (ValaCCodeExpression*) _tmp25_;
		}
		_tmp28_ = array_type;
		if (_tmp28_ != NULL) {
			ValaArrayType* _tmp29_;
			gboolean _tmp30_;
			gboolean _tmp31_;
			_tmp29_ = array_type;
			_tmp30_ = vala_array_type_get_fixed_length (_tmp29_);
			_tmp31_ = _tmp30_;
			_tmp27_ = !_tmp31_;
		} else {
			_tmp27_ = FALSE;
		}
		if (_tmp27_) {
			gboolean _tmp32_ = FALSE;
			gboolean _tmp33_ = FALSE;
			ValaMethod* _tmp34_;
			ValaMethod* _tmp35_;
			_tmp34_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
			_tmp35_ = _tmp34_;
			if (_tmp35_ != NULL) {
				ValaMethod* _tmp36_;
				ValaMethod* _tmp37_;
				_tmp36_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
				_tmp37_ = _tmp36_;
				_tmp33_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp37_);
			} else {
				_tmp33_ = FALSE;
			}
			if (_tmp33_) {
				_tmp32_ = TRUE;
			} else {
				ValaPropertyAccessor* _tmp38_;
				ValaPropertyAccessor* _tmp39_;
				_tmp38_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
				_tmp39_ = _tmp38_;
				_tmp32_ = _tmp39_ != NULL;
			}
			_tmp26_ = _tmp32_;
		} else {
			_tmp26_ = FALSE;
		}
		if (_tmp26_) {
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp40_ = FALSE;
					_tmp40_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp42_;
						gint _tmp43_;
						gint _tmp44_;
						ValaGLibValue* _tmp45_;
						gchar* _tmp46_;
						gchar* _tmp47_;
						ValaCCodeExpression* _tmp48_;
						ValaCCodeExpression* _tmp49_;
						ValaCCodeUnaryExpression* _tmp50_;
						ValaCCodeUnaryExpression* _tmp51_;
						if (!_tmp40_) {
							gint _tmp41_;
							_tmp41_ = dim;
							dim = _tmp41_ + 1;
						}
						_tmp40_ = FALSE;
						_tmp42_ = array_type;
						_tmp43_ = vala_array_type_get_rank (_tmp42_);
						_tmp44_ = _tmp43_;
						if (!(dim <= _tmp44_)) {
							break;
						}
						_tmp45_ = _result_;
						_tmp46_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", dim);
						_tmp47_ = _tmp46_;
						_tmp48_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp47_);
						_tmp49_ = _tmp48_;
						_tmp50_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp49_);
						_tmp51_ = _tmp50_;
						vala_glib_value_append_array_length_cvalue (_tmp45_, (ValaCCodeExpression*) _tmp51_);
						_vala_ccode_node_unref0 (_tmp51_);
						_vala_ccode_node_unref0 (_tmp49_);
						_g_free0 (_tmp47_);
					}
				}
			}
		}
	} else {
		gboolean _tmp52_;
		gboolean _tmp53_;
		_tmp52_ = vala_local_variable_get_captured (local);
		_tmp53_ = _tmp52_;
		if (_tmp53_) {
			ValaBlock* block = NULL;
			ValaSymbol* _tmp54_;
			ValaSymbol* _tmp55_;
			ValaBlock* _tmp56_;
			ValaGLibValue* _tmp57_;
			ValaBlock* _tmp58_;
			gchar* _tmp59_;
			gchar* _tmp60_;
			ValaCCodeExpression* _tmp61_;
			ValaCCodeExpression* _tmp62_;
			gchar* _tmp63_;
			gchar* _tmp64_;
			ValaCCodeMemberAccess* _tmp65_;
			gboolean _tmp66_ = FALSE;
			ValaArrayType* _tmp67_;
			_tmp54_ = vala_symbol_get_parent_symbol ((ValaSymbol*) local);
			_tmp55_ = _tmp54_;
			_tmp56_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp55_, VALA_TYPE_BLOCK, ValaBlock));
			block = _tmp56_;
			_tmp57_ = _result_;
			_tmp58_ = block;
			_tmp59_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp58_));
			_tmp60_ = _tmp59_;
			_tmp61_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp60_);
			_tmp62_ = _tmp61_;
			_tmp63_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
			_tmp64_ = _tmp63_;
			_tmp65_ = vala_ccode_member_access_new_pointer (_tmp62_, _tmp64_);
			_vala_ccode_node_unref0 (_tmp57_->cvalue);
			_tmp57_->cvalue = (ValaCCodeExpression*) _tmp65_;
			_g_free0 (_tmp64_);
			_vala_ccode_node_unref0 (_tmp62_);
			_g_free0 (_tmp60_);
			_tmp67_ = array_type;
			if (_tmp67_ != NULL) {
				ValaArrayType* _tmp68_;
				gboolean _tmp69_;
				gboolean _tmp70_;
				_tmp68_ = array_type;
				_tmp69_ = vala_array_type_get_fixed_length (_tmp68_);
				_tmp70_ = _tmp69_;
				_tmp66_ = !_tmp70_;
			} else {
				_tmp66_ = FALSE;
			}
			if (_tmp66_) {
				ValaArrayType* _tmp88_;
				gint _tmp89_;
				gint _tmp90_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp71_ = FALSE;
						_tmp71_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp73_;
							gint _tmp74_;
							gint _tmp75_;
							ValaGLibValue* _tmp76_;
							ValaBlock* _tmp77_;
							gchar* _tmp78_;
							gchar* _tmp79_;
							ValaCCodeExpression* _tmp80_;
							ValaCCodeExpression* _tmp81_;
							gchar* _tmp82_;
							gchar* _tmp83_;
							gchar* _tmp84_;
							gchar* _tmp85_;
							ValaCCodeMemberAccess* _tmp86_;
							ValaCCodeMemberAccess* _tmp87_;
							if (!_tmp71_) {
								gint _tmp72_;
								_tmp72_ = dim;
								dim = _tmp72_ + 1;
							}
							_tmp71_ = FALSE;
							_tmp73_ = array_type;
							_tmp74_ = vala_array_type_get_rank (_tmp73_);
							_tmp75_ = _tmp74_;
							if (!(dim <= _tmp75_)) {
								break;
							}
							_tmp76_ = _result_;
							_tmp77_ = block;
							_tmp78_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp77_));
							_tmp79_ = _tmp78_;
							_tmp80_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp79_);
							_tmp81_ = _tmp80_;
							_tmp82_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
							_tmp83_ = _tmp82_;
							_tmp84_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp83_, dim);
							_tmp85_ = _tmp84_;
							_tmp86_ = vala_ccode_member_access_new_pointer (_tmp81_, _tmp85_);
							_tmp87_ = _tmp86_;
							vala_glib_value_append_array_length_cvalue (_tmp76_, (ValaCCodeExpression*) _tmp87_);
							_vala_ccode_node_unref0 (_tmp87_);
							_g_free0 (_tmp85_);
							_g_free0 (_tmp83_);
							_vala_ccode_node_unref0 (_tmp81_);
							_g_free0 (_tmp79_);
						}
					}
				}
				_tmp88_ = array_type;
				_tmp89_ = vala_array_type_get_rank (_tmp88_);
				_tmp90_ = _tmp89_;
				if (_tmp90_ == 1) {
					ValaGLibValue* _tmp91_;
					ValaBlock* _tmp92_;
					gchar* _tmp93_;
					gchar* _tmp94_;
					ValaCCodeExpression* _tmp95_;
					ValaCCodeExpression* _tmp96_;
					gchar* _tmp97_;
					gchar* _tmp98_;
					gchar* _tmp99_;
					gchar* _tmp100_;
					ValaCCodeMemberAccess* _tmp101_;
					_tmp91_ = _result_;
					_tmp92_ = block;
					_tmp93_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp92_));
					_tmp94_ = _tmp93_;
					_tmp95_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp94_);
					_tmp96_ = _tmp95_;
					_tmp97_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
					_tmp98_ = _tmp97_;
					_tmp99_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp98_);
					_tmp100_ = _tmp99_;
					_tmp101_ = vala_ccode_member_access_new_pointer (_tmp96_, _tmp100_);
					_vala_ccode_node_unref0 (_tmp91_->array_size_cvalue);
					_tmp91_->array_size_cvalue = (ValaCCodeExpression*) _tmp101_;
					_g_free0 (_tmp100_);
					_g_free0 (_tmp98_);
					_vala_ccode_node_unref0 (_tmp96_);
					_g_free0 (_tmp94_);
				}
			} else {
				gboolean _tmp102_ = FALSE;
				ValaDelegateType* _tmp103_;
				_tmp103_ = delegate_type;
				if (_tmp103_ != NULL) {
					ValaDelegateType* _tmp104_;
					ValaDelegate* _tmp105_;
					ValaDelegate* _tmp106_;
					gboolean _tmp107_;
					gboolean _tmp108_;
					_tmp104_ = delegate_type;
					_tmp105_ = vala_delegate_type_get_delegate_symbol (_tmp104_);
					_tmp106_ = _tmp105_;
					_tmp107_ = vala_delegate_get_has_target (_tmp106_);
					_tmp108_ = _tmp107_;
					_tmp102_ = _tmp108_;
				} else {
					_tmp102_ = FALSE;
				}
				if (_tmp102_) {
					ValaGLibValue* _tmp109_;
					ValaBlock* _tmp110_;
					gchar* _tmp111_;
					gchar* _tmp112_;
					ValaCCodeExpression* _tmp113_;
					ValaCCodeExpression* _tmp114_;
					gchar* _tmp115_;
					gchar* _tmp116_;
					gchar* _tmp117_;
					gchar* _tmp118_;
					ValaCCodeMemberAccess* _tmp119_;
					ValaDelegateType* _tmp120_;
					_tmp109_ = _result_;
					_tmp110_ = block;
					_tmp111_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp110_));
					_tmp112_ = _tmp111_;
					_tmp113_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp112_);
					_tmp114_ = _tmp113_;
					_tmp115_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
					_tmp116_ = _tmp115_;
					_tmp117_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp116_);
					_tmp118_ = _tmp117_;
					_tmp119_ = vala_ccode_member_access_new_pointer (_tmp114_, _tmp118_);
					_vala_ccode_node_unref0 (_tmp109_->delegate_target_cvalue);
					_tmp109_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp119_;
					_g_free0 (_tmp118_);
					_g_free0 (_tmp116_);
					_vala_ccode_node_unref0 (_tmp114_);
					_g_free0 (_tmp112_);
					_tmp120_ = delegate_type;
					if (vala_data_type_is_disposable ((ValaDataType*) _tmp120_)) {
						ValaGLibValue* _tmp121_;
						ValaBlock* _tmp122_;
						gchar* _tmp123_;
						gchar* _tmp124_;
						ValaCCodeExpression* _tmp125_;
						ValaCCodeExpression* _tmp126_;
						gchar* _tmp127_;
						gchar* _tmp128_;
						gchar* _tmp129_;
						gchar* _tmp130_;
						ValaCCodeMemberAccess* _tmp131_;
						_tmp121_ = _result_;
						_tmp122_ = block;
						_tmp123_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp122_));
						_tmp124_ = _tmp123_;
						_tmp125_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp124_);
						_tmp126_ = _tmp125_;
						_tmp127_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
						_tmp128_ = _tmp127_;
						_tmp129_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp128_);
						_tmp130_ = _tmp129_;
						_tmp131_ = vala_ccode_member_access_new_pointer (_tmp126_, _tmp130_);
						_vala_ccode_node_unref0 (_tmp121_->delegate_target_destroy_notify_cvalue);
						_tmp121_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp131_;
						_g_free0 (_tmp130_);
						_g_free0 (_tmp128_);
						_vala_ccode_node_unref0 (_tmp126_);
						_g_free0 (_tmp124_);
					}
				}
			}
			_vala_code_node_unref0 (block);
		} else {
			ValaGLibValue* _tmp132_;
			ValaCCodeExpression* _tmp133_;
			gboolean _tmp134_ = FALSE;
			ValaArrayType* _tmp135_;
			_tmp132_ = _result_;
			_tmp133_ = vala_ccode_base_module_get_local_cexpression ((ValaCCodeBaseModule*) self, local);
			_vala_ccode_node_unref0 (_tmp132_->cvalue);
			_tmp132_->cvalue = _tmp133_;
			_tmp135_ = array_type;
			if (_tmp135_ != NULL) {
				ValaArrayType* _tmp136_;
				gboolean _tmp137_;
				gboolean _tmp138_;
				_tmp136_ = array_type;
				_tmp137_ = vala_array_type_get_fixed_length (_tmp136_);
				_tmp138_ = _tmp137_;
				_tmp134_ = !_tmp138_;
			} else {
				_tmp134_ = FALSE;
			}
			if (_tmp134_) {
				ValaArrayType* _tmp151_;
				gint _tmp152_;
				gint _tmp153_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp139_ = FALSE;
						_tmp139_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp141_;
							gint _tmp142_;
							gint _tmp143_;
							ValaGLibValue* _tmp144_;
							gchar* _tmp145_;
							gchar* _tmp146_;
							gchar* _tmp147_;
							gchar* _tmp148_;
							ValaCCodeExpression* _tmp149_;
							ValaCCodeExpression* _tmp150_;
							if (!_tmp139_) {
								gint _tmp140_;
								_tmp140_ = dim;
								dim = _tmp140_ + 1;
							}
							_tmp139_ = FALSE;
							_tmp141_ = array_type;
							_tmp142_ = vala_array_type_get_rank (_tmp141_);
							_tmp143_ = _tmp142_;
							if (!(dim <= _tmp143_)) {
								break;
							}
							_tmp144_ = _result_;
							_tmp145_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
							_tmp146_ = _tmp145_;
							_tmp147_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp146_, dim);
							_tmp148_ = _tmp147_;
							_tmp149_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp148_);
							_tmp150_ = _tmp149_;
							vala_glib_value_append_array_length_cvalue (_tmp144_, _tmp150_);
							_vala_ccode_node_unref0 (_tmp150_);
							_g_free0 (_tmp148_);
							_g_free0 (_tmp146_);
						}
					}
				}
				_tmp151_ = array_type;
				_tmp152_ = vala_array_type_get_rank (_tmp151_);
				_tmp153_ = _tmp152_;
				if (_tmp153_ == 1) {
					ValaGLibValue* _tmp154_;
					gchar* _tmp155_;
					gchar* _tmp156_;
					gchar* _tmp157_;
					gchar* _tmp158_;
					ValaCCodeExpression* _tmp159_;
					_tmp154_ = _result_;
					_tmp155_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
					_tmp156_ = _tmp155_;
					_tmp157_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp156_);
					_tmp158_ = _tmp157_;
					_tmp159_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp158_);
					_vala_ccode_node_unref0 (_tmp154_->array_size_cvalue);
					_tmp154_->array_size_cvalue = _tmp159_;
					_g_free0 (_tmp158_);
					_g_free0 (_tmp156_);
				}
			} else {
				gboolean _tmp160_ = FALSE;
				ValaDelegateType* _tmp161_;
				_tmp161_ = delegate_type;
				if (_tmp161_ != NULL) {
					ValaDelegateType* _tmp162_;
					ValaDelegate* _tmp163_;
					ValaDelegate* _tmp164_;
					gboolean _tmp165_;
					gboolean _tmp166_;
					_tmp162_ = delegate_type;
					_tmp163_ = vala_delegate_type_get_delegate_symbol (_tmp162_);
					_tmp164_ = _tmp163_;
					_tmp165_ = vala_delegate_get_has_target (_tmp164_);
					_tmp166_ = _tmp165_;
					_tmp160_ = _tmp166_;
				} else {
					_tmp160_ = FALSE;
				}
				if (_tmp160_) {
					if (vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self)) {
						ValaGLibValue* _tmp167_;
						ValaCCodeIdentifier* _tmp168_;
						ValaCCodeIdentifier* _tmp169_;
						gchar* _tmp170_;
						gchar* _tmp171_;
						gchar* _tmp172_;
						gchar* _tmp173_;
						ValaCCodeMemberAccess* _tmp174_;
						ValaDataType* _tmp175_;
						ValaDataType* _tmp176_;
						_tmp167_ = _result_;
						_tmp168_ = vala_ccode_identifier_new ("_data_");
						_tmp169_ = _tmp168_;
						_tmp170_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
						_tmp171_ = _tmp170_;
						_tmp172_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp171_);
						_tmp173_ = _tmp172_;
						_tmp174_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp169_, _tmp173_);
						_vala_ccode_node_unref0 (_tmp167_->delegate_target_cvalue);
						_tmp167_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp174_;
						_g_free0 (_tmp173_);
						_g_free0 (_tmp171_);
						_vala_ccode_node_unref0 (_tmp169_);
						_tmp175_ = vala_variable_get_variable_type ((ValaVariable*) local);
						_tmp176_ = _tmp175_;
						if (vala_data_type_is_disposable (_tmp176_)) {
							ValaGLibValue* _tmp177_;
							ValaCCodeIdentifier* _tmp178_;
							ValaCCodeIdentifier* _tmp179_;
							gchar* _tmp180_;
							gchar* _tmp181_;
							gchar* _tmp182_;
							gchar* _tmp183_;
							ValaCCodeMemberAccess* _tmp184_;
							_tmp177_ = _result_;
							_tmp178_ = vala_ccode_identifier_new ("_data_");
							_tmp179_ = _tmp178_;
							_tmp180_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
							_tmp181_ = _tmp180_;
							_tmp182_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp181_);
							_tmp183_ = _tmp182_;
							_tmp184_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp179_, _tmp183_);
							_vala_ccode_node_unref0 (_tmp177_->delegate_target_destroy_notify_cvalue);
							_tmp177_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp184_;
							_g_free0 (_tmp183_);
							_g_free0 (_tmp181_);
							_vala_ccode_node_unref0 (_tmp179_);
						}
					} else {
						ValaGLibValue* _tmp185_;
						gchar* _tmp186_;
						gchar* _tmp187_;
						gchar* _tmp188_;
						gchar* _tmp189_;
						ValaCCodeIdentifier* _tmp190_;
						ValaDataType* _tmp191_;
						ValaDataType* _tmp192_;
						_tmp185_ = _result_;
						_tmp186_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
						_tmp187_ = _tmp186_;
						_tmp188_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp187_);
						_tmp189_ = _tmp188_;
						_tmp190_ = vala_ccode_identifier_new (_tmp189_);
						_vala_ccode_node_unref0 (_tmp185_->delegate_target_cvalue);
						_tmp185_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp190_;
						_g_free0 (_tmp189_);
						_g_free0 (_tmp187_);
						_tmp191_ = vala_variable_get_variable_type ((ValaVariable*) local);
						_tmp192_ = _tmp191_;
						if (vala_data_type_is_disposable (_tmp192_)) {
							ValaGLibValue* _tmp193_;
							gchar* _tmp194_;
							gchar* _tmp195_;
							gchar* _tmp196_;
							gchar* _tmp197_;
							ValaCCodeIdentifier* _tmp198_;
							_tmp193_ = _result_;
							_tmp194_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
							_tmp195_ = _tmp194_;
							_tmp196_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp195_);
							_tmp197_ = _tmp196_;
							_tmp198_ = vala_ccode_identifier_new (_tmp197_);
							_vala_ccode_node_unref0 (_tmp193_->delegate_target_destroy_notify_cvalue);
							_tmp193_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp198_;
							_g_free0 (_tmp197_);
							_g_free0 (_tmp195_);
						}
					}
				}
			}
		}
	}
	result = (ValaTargetValue*) _result_;
	_vala_code_node_unref0 (delegate_type);
	_vala_code_node_unref0 (array_type);
	return result;
}

static ValaTargetValue*
vala_ccode_member_access_module_real_get_parameter_cvalue (ValaCCodeBaseModule* base,
                                                           ValaParameter* param)
{
	ValaCCodeMemberAccessModule * self;
	ValaGLibValue* _result_ = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaGLibValue* _tmp4_;
	ValaGLibValue* _tmp5_;
	ValaGLibValue* _tmp6_;
	ValaGLibValue* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gboolean _tmp10_;
	ValaGLibValue* _tmp15_;
	gchar* _tmp16_;
	ValaArrayType* array_type = NULL;
	ValaGLibValue* _tmp17_;
	ValaDataType* _tmp18_;
	ValaDataType* _tmp19_;
	ValaArrayType* _tmp20_;
	ValaDelegateType* delegate_type = NULL;
	ValaGLibValue* _tmp21_;
	ValaDataType* _tmp22_;
	ValaDataType* _tmp23_;
	ValaDelegateType* _tmp24_;
	gboolean _tmp25_ = FALSE;
	ValaDelegateType* _tmp26_;
	gboolean is_unowned_delegate = FALSE;
	gboolean _tmp31_ = FALSE;
	gboolean _tmp32_ = FALSE;
	gboolean _tmp33_;
	gboolean _tmp34_;
	const gchar* _tmp38_;
	const gchar* _tmp39_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (param != NULL, NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_copy (_tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_glib_value_new (_tmp3_, NULL, FALSE);
	_tmp5_ = _tmp4_;
	_vala_code_node_unref0 (_tmp3_);
	_result_ = _tmp5_;
	_tmp6_ = _result_;
	_tmp6_->lvalue = TRUE;
	_tmp7_ = _result_;
	_tmp7_->array_null_terminated = vala_get_ccode_array_null_terminated ((ValaCodeNode*) param);
	_tmp8_ = vala_get_ccode_array_length_expr ((ValaCodeNode*) param);
	_tmp9_ = _tmp8_;
	_tmp10_ = _tmp9_ != NULL;
	_g_free0 (_tmp9_);
	if (_tmp10_) {
		ValaGLibValue* _tmp11_;
		gchar* _tmp12_;
		gchar* _tmp13_;
		ValaCCodeConstant* _tmp14_;
		_tmp11_ = _result_;
		_tmp12_ = vala_get_ccode_array_length_expr ((ValaCodeNode*) param);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_ccode_constant_new (_tmp13_);
		_vala_ccode_node_unref0 (_tmp11_->array_length_cexpr);
		_tmp11_->array_length_cexpr = (ValaCCodeExpression*) _tmp14_;
		_g_free0 (_tmp13_);
	}
	_tmp15_ = _result_;
	_tmp16_ = vala_get_ccode_type ((ValaCodeNode*) param);
	_g_free0 (_tmp15_->ctype);
	_tmp15_->ctype = _tmp16_;
	_tmp17_ = _result_;
	_tmp18_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp17_);
	_tmp19_ = _tmp18_;
	_tmp20_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp19_) : NULL);
	array_type = _tmp20_;
	_tmp21_ = _result_;
	_tmp22_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp21_);
	_tmp23_ = _tmp22_;
	_tmp24_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp23_) : NULL);
	delegate_type = _tmp24_;
	_tmp26_ = delegate_type;
	if (_tmp26_ != NULL) {
		ValaDataType* _tmp27_;
		ValaDataType* _tmp28_;
		gboolean _tmp29_;
		gboolean _tmp30_;
		_tmp27_ = vala_variable_get_variable_type ((ValaVariable*) param);
		_tmp28_ = _tmp27_;
		_tmp29_ = vala_data_type_get_value_owned (_tmp28_);
		_tmp30_ = _tmp29_;
		_tmp25_ = !_tmp30_;
	} else {
		_tmp25_ = FALSE;
	}
	is_unowned_delegate = _tmp25_;
	_tmp33_ = vala_parameter_get_captured (param);
	_tmp34_ = _tmp33_;
	if (_tmp34_) {
		_tmp32_ = TRUE;
	} else {
		_tmp32_ = vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self);
	}
	if (_tmp32_) {
		_tmp31_ = !is_unowned_delegate;
	} else {
		_tmp31_ = FALSE;
	}
	if (_tmp31_) {
		ValaGLibValue* _tmp35_;
		ValaDataType* _tmp36_;
		ValaDataType* _tmp37_;
		_tmp35_ = _result_;
		_tmp36_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp35_);
		_tmp37_ = _tmp36_;
		vala_data_type_set_value_owned (_tmp37_, TRUE);
	}
	_tmp38_ = vala_symbol_get_name ((ValaSymbol*) param);
	_tmp39_ = _tmp38_;
	if (g_strcmp0 (_tmp39_, "this") == 0) {
		if (vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self)) {
			ValaGLibValue* _tmp40_;
			ValaCCodeIdentifier* _tmp41_;
			ValaCCodeIdentifier* _tmp42_;
			ValaCCodeMemberAccess* _tmp43_;
			_tmp40_ = _result_;
			_tmp41_ = vala_ccode_identifier_new ("_data_");
			_tmp42_ = _tmp41_;
			_tmp43_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp42_, "self");
			_vala_ccode_node_unref0 (_tmp40_->cvalue);
			_tmp40_->cvalue = (ValaCCodeExpression*) _tmp43_;
			_vala_ccode_node_unref0 (_tmp42_);
		} else {
			ValaStruct* st = NULL;
			ValaGLibValue* _tmp44_;
			ValaDataType* _tmp45_;
			ValaDataType* _tmp46_;
			ValaTypeSymbol* _tmp47_;
			ValaTypeSymbol* _tmp48_;
			ValaStruct* _tmp49_;
			gboolean _tmp50_ = FALSE;
			ValaStruct* _tmp51_;
			_tmp44_ = _result_;
			_tmp45_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp44_);
			_tmp46_ = _tmp45_;
			_tmp47_ = vala_data_type_get_data_type (_tmp46_);
			_tmp48_ = _tmp47_;
			_tmp49_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp48_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp48_) : NULL);
			st = _tmp49_;
			_tmp51_ = st;
			if (_tmp51_ != NULL) {
				ValaStruct* _tmp52_;
				_tmp52_ = st;
				_tmp50_ = !vala_struct_is_simple_type (_tmp52_);
			} else {
				_tmp50_ = FALSE;
			}
			if (_tmp50_) {
				ValaGLibValue* _tmp53_;
				ValaCCodeIdentifier* _tmp54_;
				_tmp53_ = _result_;
				_tmp54_ = vala_ccode_identifier_new ("(*self)");
				_vala_ccode_node_unref0 (_tmp53_->cvalue);
				_tmp53_->cvalue = (ValaCCodeExpression*) _tmp54_;
			} else {
				ValaGLibValue* _tmp55_;
				ValaCCodeIdentifier* _tmp56_;
				_tmp55_ = _result_;
				_tmp56_ = vala_ccode_identifier_new ("self");
				_vala_ccode_node_unref0 (_tmp55_->cvalue);
				_tmp55_->cvalue = (ValaCCodeExpression*) _tmp56_;
			}
			_vala_code_node_unref0 (st);
		}
	} else {
		gchar* name = NULL;
		gchar* _tmp57_;
		gboolean _tmp58_;
		gboolean _tmp59_;
		gboolean _tmp244_ = FALSE;
		gboolean _tmp245_;
		gboolean _tmp246_;
		_tmp57_ = vala_get_ccode_name ((ValaCodeNode*) param);
		name = _tmp57_;
		_tmp58_ = vala_parameter_get_captured (param);
		_tmp59_ = _tmp58_;
		if (_tmp59_) {
			ValaBlock* block = NULL;
			ValaSymbol* _tmp60_;
			ValaSymbol* _tmp61_;
			ValaBlock* _tmp62_;
			ValaBlock* _tmp63_;
			ValaGLibValue* _tmp69_;
			ValaBlock* _tmp70_;
			gchar* _tmp71_;
			gchar* _tmp72_;
			ValaCCodeExpression* _tmp73_;
			ValaCCodeExpression* _tmp74_;
			gchar* _tmp75_;
			gchar* _tmp76_;
			ValaCCodeMemberAccess* _tmp77_;
			gboolean _tmp78_ = FALSE;
			ValaArrayType* _tmp79_;
			_tmp60_ = vala_symbol_get_parent_symbol ((ValaSymbol*) param);
			_tmp61_ = _tmp60_;
			_tmp62_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp61_, VALA_TYPE_BLOCK) ? ((ValaBlock*) _tmp61_) : NULL);
			block = _tmp62_;
			_tmp63_ = block;
			if (_tmp63_ == NULL) {
				ValaSymbol* _tmp64_;
				ValaSymbol* _tmp65_;
				ValaBlock* _tmp66_;
				ValaBlock* _tmp67_;
				ValaBlock* _tmp68_;
				_tmp64_ = vala_symbol_get_parent_symbol ((ValaSymbol*) param);
				_tmp65_ = _tmp64_;
				_tmp66_ = vala_subroutine_get_body ((ValaSubroutine*) G_TYPE_CHECK_INSTANCE_CAST (_tmp65_, VALA_TYPE_METHOD, ValaMethod));
				_tmp67_ = _tmp66_;
				_tmp68_ = _vala_code_node_ref0 (_tmp67_);
				_vala_code_node_unref0 (block);
				block = _tmp68_;
			}
			_tmp69_ = _result_;
			_tmp70_ = block;
			_tmp71_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp70_));
			_tmp72_ = _tmp71_;
			_tmp73_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp72_);
			_tmp74_ = _tmp73_;
			_tmp75_ = vala_get_ccode_name ((ValaCodeNode*) param);
			_tmp76_ = _tmp75_;
			_tmp77_ = vala_ccode_member_access_new_pointer (_tmp74_, _tmp76_);
			_vala_ccode_node_unref0 (_tmp69_->cvalue);
			_tmp69_->cvalue = (ValaCCodeExpression*) _tmp77_;
			_g_free0 (_tmp76_);
			_vala_ccode_node_unref0 (_tmp74_);
			_g_free0 (_tmp72_);
			_tmp79_ = array_type;
			if (_tmp79_ != NULL) {
				_tmp78_ = vala_get_ccode_array_length ((ValaCodeNode*) param);
			} else {
				_tmp78_ = FALSE;
			}
			if (_tmp78_) {
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp80_ = FALSE;
						_tmp80_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp82_;
							gint _tmp83_;
							gint _tmp84_;
							ValaGLibValue* _tmp85_;
							ValaBlock* _tmp86_;
							gchar* _tmp87_;
							gchar* _tmp88_;
							ValaCCodeExpression* _tmp89_;
							ValaCCodeExpression* _tmp90_;
							gchar* _tmp91_;
							gchar* _tmp92_;
							ValaCCodeMemberAccess* _tmp93_;
							ValaCCodeMemberAccess* _tmp94_;
							if (!_tmp80_) {
								gint _tmp81_;
								_tmp81_ = dim;
								dim = _tmp81_ + 1;
							}
							_tmp80_ = FALSE;
							_tmp82_ = array_type;
							_tmp83_ = vala_array_type_get_rank (_tmp82_);
							_tmp84_ = _tmp83_;
							if (!(dim <= _tmp84_)) {
								break;
							}
							_tmp85_ = _result_;
							_tmp86_ = block;
							_tmp87_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp86_));
							_tmp88_ = _tmp87_;
							_tmp89_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp88_);
							_tmp90_ = _tmp89_;
							_tmp91_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) param, dim);
							_tmp92_ = _tmp91_;
							_tmp93_ = vala_ccode_member_access_new_pointer (_tmp90_, _tmp92_);
							_tmp94_ = _tmp93_;
							vala_glib_value_append_array_length_cvalue (_tmp85_, (ValaCCodeExpression*) _tmp94_);
							_vala_ccode_node_unref0 (_tmp94_);
							_g_free0 (_tmp92_);
							_vala_ccode_node_unref0 (_tmp90_);
							_g_free0 (_tmp88_);
						}
					}
				}
			} else {
				gboolean _tmp95_ = FALSE;
				ValaDelegateType* _tmp96_;
				_tmp96_ = delegate_type;
				if (_tmp96_ != NULL) {
					ValaDelegateType* _tmp97_;
					ValaDelegate* _tmp98_;
					ValaDelegate* _tmp99_;
					gboolean _tmp100_;
					gboolean _tmp101_;
					_tmp97_ = delegate_type;
					_tmp98_ = vala_delegate_type_get_delegate_symbol (_tmp97_);
					_tmp99_ = _tmp98_;
					_tmp100_ = vala_delegate_get_has_target (_tmp99_);
					_tmp101_ = _tmp100_;
					_tmp95_ = _tmp101_;
				} else {
					_tmp95_ = FALSE;
				}
				if (_tmp95_) {
					ValaGLibValue* _tmp102_;
					ValaBlock* _tmp103_;
					gchar* _tmp104_;
					gchar* _tmp105_;
					ValaCCodeExpression* _tmp106_;
					ValaCCodeExpression* _tmp107_;
					gchar* _tmp108_;
					gchar* _tmp109_;
					ValaCCodeMemberAccess* _tmp110_;
					ValaGLibValue* _tmp111_;
					ValaDataType* _tmp112_;
					ValaDataType* _tmp113_;
					_tmp102_ = _result_;
					_tmp103_ = block;
					_tmp104_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp103_));
					_tmp105_ = _tmp104_;
					_tmp106_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp105_);
					_tmp107_ = _tmp106_;
					_tmp108_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
					_tmp109_ = _tmp108_;
					_tmp110_ = vala_ccode_member_access_new_pointer (_tmp107_, _tmp109_);
					_vala_ccode_node_unref0 (_tmp102_->delegate_target_cvalue);
					_tmp102_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp110_;
					_g_free0 (_tmp109_);
					_vala_ccode_node_unref0 (_tmp107_);
					_g_free0 (_tmp105_);
					_tmp111_ = _result_;
					_tmp112_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp111_);
					_tmp113_ = _tmp112_;
					if (vala_data_type_is_disposable (_tmp113_)) {
						ValaGLibValue* _tmp114_;
						ValaBlock* _tmp115_;
						gchar* _tmp116_;
						gchar* _tmp117_;
						ValaCCodeExpression* _tmp118_;
						ValaCCodeExpression* _tmp119_;
						gchar* _tmp120_;
						gchar* _tmp121_;
						ValaCCodeMemberAccess* _tmp122_;
						_tmp114_ = _result_;
						_tmp115_ = block;
						_tmp116_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp115_));
						_tmp117_ = _tmp116_;
						_tmp118_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp117_);
						_tmp119_ = _tmp118_;
						_tmp120_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
						_tmp121_ = _tmp120_;
						_tmp122_ = vala_ccode_member_access_new_pointer (_tmp119_, _tmp121_);
						_vala_ccode_node_unref0 (_tmp114_->delegate_target_destroy_notify_cvalue);
						_tmp114_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp122_;
						_g_free0 (_tmp121_);
						_vala_ccode_node_unref0 (_tmp119_);
						_g_free0 (_tmp117_);
					}
				}
			}
			_vala_code_node_unref0 (block);
		} else {
			if (vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self)) {
				ValaGLibValue* _tmp123_;
				ValaCCodeExpression* _tmp124_;
				gboolean _tmp125_ = FALSE;
				ValaDelegateType* _tmp126_;
				_tmp123_ = _result_;
				_tmp124_ = vala_ccode_base_module_get_parameter_cexpression ((ValaCCodeBaseModule*) self, param);
				_vala_ccode_node_unref0 (_tmp123_->cvalue);
				_tmp123_->cvalue = _tmp124_;
				_tmp126_ = delegate_type;
				if (_tmp126_ != NULL) {
					ValaDelegateType* _tmp127_;
					ValaDelegate* _tmp128_;
					ValaDelegate* _tmp129_;
					gboolean _tmp130_;
					gboolean _tmp131_;
					_tmp127_ = delegate_type;
					_tmp128_ = vala_delegate_type_get_delegate_symbol (_tmp127_);
					_tmp129_ = _tmp128_;
					_tmp130_ = vala_delegate_get_has_target (_tmp129_);
					_tmp131_ = _tmp130_;
					_tmp125_ = _tmp131_;
				} else {
					_tmp125_ = FALSE;
				}
				if (_tmp125_) {
					ValaGLibValue* _tmp132_;
					ValaCCodeIdentifier* _tmp133_;
					ValaCCodeIdentifier* _tmp134_;
					gchar* _tmp135_;
					gchar* _tmp136_;
					ValaCCodeMemberAccess* _tmp137_;
					ValaDelegateType* _tmp138_;
					_tmp132_ = _result_;
					_tmp133_ = vala_ccode_identifier_new ("_data_");
					_tmp134_ = _tmp133_;
					_tmp135_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
					_tmp136_ = _tmp135_;
					_tmp137_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp134_, _tmp136_);
					_vala_ccode_node_unref0 (_tmp132_->delegate_target_cvalue);
					_tmp132_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp137_;
					_g_free0 (_tmp136_);
					_vala_ccode_node_unref0 (_tmp134_);
					_tmp138_ = delegate_type;
					if (vala_data_type_is_disposable ((ValaDataType*) _tmp138_)) {
						ValaGLibValue* _tmp139_;
						ValaCCodeIdentifier* _tmp140_;
						ValaCCodeIdentifier* _tmp141_;
						gchar* _tmp142_;
						gchar* _tmp143_;
						ValaCCodeMemberAccess* _tmp144_;
						_tmp139_ = _result_;
						_tmp140_ = vala_ccode_identifier_new ("_data_");
						_tmp141_ = _tmp140_;
						_tmp142_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
						_tmp143_ = _tmp142_;
						_tmp144_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp141_, _tmp143_);
						_vala_ccode_node_unref0 (_tmp139_->delegate_target_destroy_notify_cvalue);
						_tmp139_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp144_;
						_g_free0 (_tmp143_);
						_vala_ccode_node_unref0 (_tmp141_);
					}
				}
			} else {
				ValaStruct* type_as_struct = NULL;
				ValaGLibValue* _tmp145_;
				ValaDataType* _tmp146_;
				ValaDataType* _tmp147_;
				ValaTypeSymbol* _tmp148_;
				ValaTypeSymbol* _tmp149_;
				ValaStruct* _tmp150_;
				ValaParameterDirection _tmp151_;
				ValaParameterDirection _tmp152_;
				gboolean _tmp155_ = FALSE;
				ValaParameterDirection _tmp156_;
				ValaParameterDirection _tmp157_;
				gboolean _tmp210_ = FALSE;
				ValaDelegateType* _tmp211_;
				_tmp145_ = _result_;
				_tmp146_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp145_);
				_tmp147_ = _tmp146_;
				_tmp148_ = vala_data_type_get_data_type (_tmp147_);
				_tmp149_ = _tmp148_;
				_tmp150_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp149_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp149_) : NULL);
				type_as_struct = _tmp150_;
				_tmp151_ = vala_parameter_get_direction (param);
				_tmp152_ = _tmp151_;
				if (_tmp152_ == VALA_PARAMETER_DIRECTION_OUT) {
					const gchar* _tmp153_;
					gchar* _tmp154_;
					_tmp153_ = name;
					_tmp154_ = g_strdup_printf ("_vala_%s", _tmp153_);
					_g_free0 (name);
					name = _tmp154_;
				}
				_tmp156_ = vala_parameter_get_direction (param);
				_tmp157_ = _tmp156_;
				if (_tmp157_ == VALA_PARAMETER_DIRECTION_REF) {
					_tmp155_ = TRUE;
				} else {
					gboolean _tmp158_ = FALSE;
					gboolean _tmp159_ = FALSE;
					gboolean _tmp160_ = FALSE;
					ValaParameterDirection _tmp161_;
					ValaParameterDirection _tmp162_;
					_tmp161_ = vala_parameter_get_direction (param);
					_tmp162_ = _tmp161_;
					if (_tmp162_ == VALA_PARAMETER_DIRECTION_IN) {
						ValaStruct* _tmp163_;
						_tmp163_ = type_as_struct;
						_tmp160_ = _tmp163_ != NULL;
					} else {
						_tmp160_ = FALSE;
					}
					if (_tmp160_) {
						ValaStruct* _tmp164_;
						_tmp164_ = type_as_struct;
						_tmp159_ = !vala_struct_is_simple_type (_tmp164_);
					} else {
						_tmp159_ = FALSE;
					}
					if (_tmp159_) {
						ValaGLibValue* _tmp165_;
						ValaDataType* _tmp166_;
						ValaDataType* _tmp167_;
						gboolean _tmp168_;
						gboolean _tmp169_;
						_tmp165_ = _result_;
						_tmp166_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp165_);
						_tmp167_ = _tmp166_;
						_tmp168_ = vala_data_type_get_nullable (_tmp167_);
						_tmp169_ = _tmp168_;
						_tmp158_ = !_tmp169_;
					} else {
						_tmp158_ = FALSE;
					}
					_tmp155_ = _tmp158_;
				}
				if (_tmp155_) {
					ValaGLibValue* _tmp170_;
					const gchar* _tmp171_;
					ValaCCodeIdentifier* _tmp172_;
					ValaCCodeIdentifier* _tmp173_;
					ValaCCodeUnaryExpression* _tmp174_;
					_tmp170_ = _result_;
					_tmp171_ = name;
					_tmp172_ = vala_ccode_identifier_new (_tmp171_);
					_tmp173_ = _tmp172_;
					_tmp174_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp173_);
					_vala_ccode_node_unref0 (_tmp170_->cvalue);
					_tmp170_->cvalue = (ValaCCodeExpression*) _tmp174_;
					_vala_ccode_node_unref0 (_tmp173_);
				} else {
					gboolean _tmp175_ = FALSE;
					gboolean _tmp176_ = FALSE;
					gboolean _tmp177_ = FALSE;
					gboolean _tmp178_ = FALSE;
					ValaPropertyAccessor* _tmp179_;
					ValaPropertyAccessor* _tmp180_;
					_tmp179_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
					_tmp180_ = _tmp179_;
					if (_tmp180_ != NULL) {
						ValaPropertyAccessor* _tmp181_;
						ValaPropertyAccessor* _tmp182_;
						gboolean _tmp183_;
						gboolean _tmp184_;
						_tmp181_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
						_tmp182_ = _tmp181_;
						_tmp183_ = vala_property_accessor_get_writable (_tmp182_);
						_tmp184_ = _tmp183_;
						_tmp178_ = _tmp184_;
					} else {
						_tmp178_ = FALSE;
					}
					if (_tmp178_) {
						ValaPropertyAccessor* _tmp185_;
						ValaPropertyAccessor* _tmp186_;
						ValaParameter* _tmp187_;
						ValaParameter* _tmp188_;
						_tmp185_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
						_tmp186_ = _tmp185_;
						_tmp187_ = vala_property_accessor_get_value_parameter (_tmp186_);
						_tmp188_ = _tmp187_;
						_tmp177_ = _tmp188_ == param;
					} else {
						_tmp177_ = FALSE;
					}
					if (_tmp177_) {
						ValaPropertyAccessor* _tmp189_;
						ValaPropertyAccessor* _tmp190_;
						ValaProperty* _tmp191_;
						ValaProperty* _tmp192_;
						ValaDataType* _tmp193_;
						ValaDataType* _tmp194_;
						_tmp189_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
						_tmp190_ = _tmp189_;
						_tmp191_ = vala_property_accessor_get_prop (_tmp190_);
						_tmp192_ = _tmp191_;
						_tmp193_ = vala_property_get_property_type (_tmp192_);
						_tmp194_ = _tmp193_;
						_tmp176_ = vala_data_type_is_real_struct_type (_tmp194_);
					} else {
						_tmp176_ = FALSE;
					}
					if (_tmp176_) {
						ValaPropertyAccessor* _tmp195_;
						ValaPropertyAccessor* _tmp196_;
						ValaProperty* _tmp197_;
						ValaProperty* _tmp198_;
						ValaDataType* _tmp199_;
						ValaDataType* _tmp200_;
						gboolean _tmp201_;
						gboolean _tmp202_;
						_tmp195_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
						_tmp196_ = _tmp195_;
						_tmp197_ = vala_property_accessor_get_prop (_tmp196_);
						_tmp198_ = _tmp197_;
						_tmp199_ = vala_property_get_property_type (_tmp198_);
						_tmp200_ = _tmp199_;
						_tmp201_ = vala_data_type_get_nullable (_tmp200_);
						_tmp202_ = _tmp201_;
						_tmp175_ = !_tmp202_;
					} else {
						_tmp175_ = FALSE;
					}
					if (_tmp175_) {
						ValaGLibValue* _tmp203_;
						ValaCCodeIdentifier* _tmp204_;
						ValaCCodeIdentifier* _tmp205_;
						ValaCCodeUnaryExpression* _tmp206_;
						_tmp203_ = _result_;
						_tmp204_ = vala_ccode_identifier_new ("value");
						_tmp205_ = _tmp204_;
						_tmp206_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp205_);
						_vala_ccode_node_unref0 (_tmp203_->cvalue);
						_tmp203_->cvalue = (ValaCCodeExpression*) _tmp206_;
						_vala_ccode_node_unref0 (_tmp205_);
					} else {
						ValaGLibValue* _tmp207_;
						const gchar* _tmp208_;
						ValaCCodeExpression* _tmp209_;
						_tmp207_ = _result_;
						_tmp208_ = name;
						_tmp209_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp208_);
						_vala_ccode_node_unref0 (_tmp207_->cvalue);
						_tmp207_->cvalue = _tmp209_;
					}
				}
				_tmp211_ = delegate_type;
				if (_tmp211_ != NULL) {
					ValaDelegateType* _tmp212_;
					ValaDelegate* _tmp213_;
					ValaDelegate* _tmp214_;
					gboolean _tmp215_;
					gboolean _tmp216_;
					_tmp212_ = delegate_type;
					_tmp213_ = vala_delegate_type_get_delegate_symbol (_tmp212_);
					_tmp214_ = _tmp213_;
					_tmp215_ = vala_delegate_get_has_target (_tmp214_);
					_tmp216_ = _tmp215_;
					_tmp210_ = _tmp216_;
				} else {
					_tmp210_ = FALSE;
				}
				if (_tmp210_) {
					gchar* target_cname = NULL;
					gchar* _tmp217_;
					gchar* destroy_cname = NULL;
					gchar* _tmp218_;
					ValaParameterDirection _tmp219_;
					ValaParameterDirection _tmp220_;
					ValaCCodeExpression* target_expr = NULL;
					const gchar* _tmp225_;
					ValaCCodeIdentifier* _tmp226_;
					ValaCCodeExpression* delegate_target_destroy_notify = NULL;
					const gchar* _tmp227_;
					ValaCCodeIdentifier* _tmp228_;
					ValaParameterDirection _tmp229_;
					ValaParameterDirection _tmp230_;
					ValaGLibValue* _tmp235_;
					ValaCCodeExpression* _tmp236_;
					ValaCCodeExpression* _tmp237_;
					ValaGLibValue* _tmp238_;
					ValaDataType* _tmp239_;
					ValaDataType* _tmp240_;
					_tmp217_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
					target_cname = _tmp217_;
					_tmp218_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
					destroy_cname = _tmp218_;
					_tmp219_ = vala_parameter_get_direction (param);
					_tmp220_ = _tmp219_;
					if (_tmp220_ == VALA_PARAMETER_DIRECTION_OUT) {
						const gchar* _tmp221_;
						gchar* _tmp222_;
						const gchar* _tmp223_;
						gchar* _tmp224_;
						_tmp221_ = target_cname;
						_tmp222_ = g_strdup_printf ("_vala_%s", _tmp221_);
						_g_free0 (target_cname);
						target_cname = _tmp222_;
						_tmp223_ = destroy_cname;
						_tmp224_ = g_strdup_printf ("_vala_%s", _tmp223_);
						_g_free0 (destroy_cname);
						destroy_cname = _tmp224_;
					}
					_tmp225_ = target_cname;
					_tmp226_ = vala_ccode_identifier_new (_tmp225_);
					target_expr = (ValaCCodeExpression*) _tmp226_;
					_tmp227_ = destroy_cname;
					_tmp228_ = vala_ccode_identifier_new (_tmp227_);
					delegate_target_destroy_notify = (ValaCCodeExpression*) _tmp228_;
					_tmp229_ = vala_parameter_get_direction (param);
					_tmp230_ = _tmp229_;
					if (_tmp230_ == VALA_PARAMETER_DIRECTION_REF) {
						ValaCCodeExpression* _tmp231_;
						ValaCCodeUnaryExpression* _tmp232_;
						ValaCCodeExpression* _tmp233_;
						ValaCCodeUnaryExpression* _tmp234_;
						_tmp231_ = target_expr;
						_tmp232_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp231_);
						_vala_ccode_node_unref0 (target_expr);
						target_expr = (ValaCCodeExpression*) _tmp232_;
						_tmp233_ = delegate_target_destroy_notify;
						_tmp234_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp233_);
						_vala_ccode_node_unref0 (delegate_target_destroy_notify);
						delegate_target_destroy_notify = (ValaCCodeExpression*) _tmp234_;
					}
					_tmp235_ = _result_;
					_tmp236_ = target_expr;
					_tmp237_ = _vala_ccode_node_ref0 (_tmp236_);
					_vala_ccode_node_unref0 (_tmp235_->delegate_target_cvalue);
					_tmp235_->delegate_target_cvalue = _tmp237_;
					_tmp238_ = _result_;
					_tmp239_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp238_);
					_tmp240_ = _tmp239_;
					if (vala_data_type_is_disposable (_tmp240_)) {
						ValaGLibValue* _tmp241_;
						ValaCCodeExpression* _tmp242_;
						ValaCCodeExpression* _tmp243_;
						_tmp241_ = _result_;
						_tmp242_ = delegate_target_destroy_notify;
						_tmp243_ = _vala_ccode_node_ref0 (_tmp242_);
						_vala_ccode_node_unref0 (_tmp241_->delegate_target_destroy_notify_cvalue);
						_tmp241_->delegate_target_destroy_notify_cvalue = _tmp243_;
					}
					_vala_ccode_node_unref0 (delegate_target_destroy_notify);
					_vala_ccode_node_unref0 (target_expr);
					_g_free0 (destroy_cname);
					_g_free0 (target_cname);
				}
				_vala_code_node_unref0 (type_as_struct);
			}
		}
		_tmp245_ = vala_parameter_get_captured (param);
		_tmp246_ = _tmp245_;
		if (!_tmp246_) {
			ValaArrayType* _tmp247_;
			_tmp247_ = array_type;
			_tmp244_ = _tmp247_ != NULL;
		} else {
			_tmp244_ = FALSE;
		}
		if (_tmp244_) {
			gboolean _tmp248_ = FALSE;
			if (vala_get_ccode_array_length ((ValaCodeNode*) param)) {
				_tmp248_ = !vala_get_ccode_array_null_terminated ((ValaCodeNode*) param);
			} else {
				_tmp248_ = FALSE;
			}
			if (_tmp248_) {
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp249_ = FALSE;
						_tmp249_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp251_;
							gint _tmp252_;
							gint _tmp253_;
							ValaCCodeExpression* length_expr = NULL;
							gchar* _tmp254_;
							gchar* _tmp255_;
							ValaCCodeExpression* _tmp256_;
							ValaCCodeExpression* _tmp257_;
							ValaParameterDirection _tmp258_;
							ValaParameterDirection _tmp259_;
							ValaGLibValue* _tmp268_;
							ValaCCodeExpression* _tmp269_;
							if (!_tmp249_) {
								gint _tmp250_;
								_tmp250_ = dim;
								dim = _tmp250_ + 1;
							}
							_tmp249_ = FALSE;
							_tmp251_ = array_type;
							_tmp252_ = vala_array_type_get_rank (_tmp251_);
							_tmp253_ = _tmp252_;
							if (!(dim <= _tmp253_)) {
								break;
							}
							_tmp254_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) param, dim);
							_tmp255_ = _tmp254_;
							_tmp256_ = vala_ccode_base_module_get_cexpression ((ValaCCodeBaseModule*) self, _tmp255_);
							_tmp257_ = _tmp256_;
							_g_free0 (_tmp255_);
							length_expr = _tmp257_;
							_tmp258_ = vala_parameter_get_direction (param);
							_tmp259_ = _tmp258_;
							if (_tmp259_ == VALA_PARAMETER_DIRECTION_OUT) {
								const gchar* _tmp260_;
								gchar* _tmp261_;
								gchar* _tmp262_;
								ValaCCodeExpression* _tmp263_;
								_tmp260_ = name;
								_tmp261_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp260_, dim);
								_tmp262_ = _tmp261_;
								_tmp263_ = vala_ccode_base_module_get_cexpression ((ValaCCodeBaseModule*) self, _tmp262_);
								_vala_ccode_node_unref0 (length_expr);
								length_expr = _tmp263_;
								_g_free0 (_tmp262_);
							} else {
								ValaParameterDirection _tmp264_;
								ValaParameterDirection _tmp265_;
								_tmp264_ = vala_parameter_get_direction (param);
								_tmp265_ = _tmp264_;
								if (_tmp265_ == VALA_PARAMETER_DIRECTION_REF) {
									ValaCCodeExpression* _tmp266_;
									ValaCCodeUnaryExpression* _tmp267_;
									_tmp266_ = length_expr;
									_tmp267_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp266_);
									_vala_ccode_node_unref0 (length_expr);
									length_expr = (ValaCCodeExpression*) _tmp267_;
								}
							}
							_tmp268_ = _result_;
							_tmp269_ = length_expr;
							vala_glib_value_append_array_length_cvalue (_tmp268_, _tmp269_);
							_vala_ccode_node_unref0 (length_expr);
						}
					}
				}
			}
		}
		_g_free0 (name);
	}
	result = (ValaTargetValue*) _result_;
	_vala_code_node_unref0 (delegate_type);
	_vala_code_node_unref0 (array_type);
	return result;
}

static ValaTargetValue*
vala_ccode_member_access_module_real_get_field_cvalue (ValaCCodeBaseModule* base,
                                                       ValaField* field,
                                                       ValaTargetValue* instance)
{
	ValaCCodeMemberAccessModule * self;
	ValaDataType* value_type = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	ValaGLibValue* _result_ = NULL;
	ValaDataType* _tmp3_;
	ValaGLibValue* _tmp4_;
	ValaGLibValue* _tmp12_;
	ValaGLibValue* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gboolean _tmp16_;
	ValaGLibValue* _tmp21_;
	gchar* _tmp22_;
	ValaArrayType* array_type = NULL;
	ValaGLibValue* _tmp23_;
	ValaDataType* _tmp24_;
	ValaDataType* _tmp25_;
	ValaArrayType* _tmp26_;
	ValaMemberBinding _tmp27_;
	ValaMemberBinding _tmp28_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (field != NULL, NULL);
	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) field);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_data_type_copy (_tmp1_);
	value_type = _tmp2_;
	_tmp3_ = value_type;
	_tmp4_ = vala_glib_value_new (_tmp3_, NULL, FALSE);
	_result_ = _tmp4_;
	if (instance != NULL) {
		ValaGLibValue* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp7_;
		ValaDataType* _tmp8_;
		ValaDataType* _tmp9_;
		ValaDataType* _tmp10_;
		ValaDataType* _tmp11_;
		_tmp5_ = _result_;
		_tmp6_ = vala_variable_get_variable_type ((ValaVariable*) field);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_target_value_get_value_type (instance);
		_tmp9_ = _tmp8_;
		_tmp10_ = vala_data_type_get_actual_type (_tmp7_, _tmp9_, NULL, (ValaCodeNode*) field);
		_tmp11_ = _tmp10_;
		vala_target_value_set_actual_value_type ((ValaTargetValue*) _tmp5_, _tmp11_);
		_vala_code_node_unref0 (_tmp11_);
	}
	_tmp12_ = _result_;
	_tmp12_->lvalue = TRUE;
	_tmp13_ = _result_;
	_tmp13_->array_null_terminated = vala_get_ccode_array_null_terminated ((ValaCodeNode*) field);
	_tmp14_ = vala_get_ccode_array_length_expr ((ValaCodeNode*) field);
	_tmp15_ = _tmp14_;
	_tmp16_ = _tmp15_ != NULL;
	_g_free0 (_tmp15_);
	if (_tmp16_) {
		ValaGLibValue* _tmp17_;
		gchar* _tmp18_;
		gchar* _tmp19_;
		ValaCCodeConstant* _tmp20_;
		_tmp17_ = _result_;
		_tmp18_ = vala_get_ccode_array_length_expr ((ValaCodeNode*) field);
		_tmp19_ = _tmp18_;
		_tmp20_ = vala_ccode_constant_new (_tmp19_);
		_vala_ccode_node_unref0 (_tmp17_->array_length_cexpr);
		_tmp17_->array_length_cexpr = (ValaCCodeExpression*) _tmp20_;
		_g_free0 (_tmp19_);
	}
	_tmp21_ = _result_;
	_tmp22_ = vala_get_ccode_type ((ValaCodeNode*) field);
	_g_free0 (_tmp21_->ctype);
	_tmp21_->ctype = _tmp22_;
	_tmp23_ = _result_;
	_tmp24_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp25_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp25_) : NULL);
	array_type = _tmp26_;
	_tmp27_ = vala_field_get_binding (field);
	_tmp28_ = _tmp27_;
	if (_tmp28_ == VALA_MEMBER_BINDING_INSTANCE) {
		ValaCCodeExpression* pub_inst = NULL;
		ValaDataType* instance_target_type = NULL;
		ValaSymbol* _tmp30_;
		ValaSymbol* _tmp31_;
		ValaDataType* _tmp32_;
		ValaClass* cl = NULL;
		ValaDataType* _tmp33_;
		ValaTypeSymbol* _tmp34_;
		ValaTypeSymbol* _tmp35_;
		ValaClass* _tmp36_;
		gboolean _tmp37_ = FALSE;
		ValaDataType* _tmp38_;
		ValaTypeSymbol* _tmp39_;
		ValaTypeSymbol* _tmp40_;
		ValaClass* _tmp41_;
		gboolean is_gtypeinstance = FALSE;
		ValaCCodeExpression* inst = NULL;
		gboolean _tmp47_ = FALSE;
		ValaCCodeExpression* _tmp57_;
		gboolean _tmp66_ = FALSE;
		ValaDataType* _tmp67_;
		ValaTypeSymbol* _tmp68_;
		ValaTypeSymbol* _tmp69_;
		gboolean _tmp83_ = FALSE;
		ValaArrayType* _tmp84_;
		pub_inst = NULL;
		if (instance != NULL) {
			ValaCCodeExpression* _tmp29_;
			_tmp29_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, instance);
			_vala_ccode_node_unref0 (pub_inst);
			pub_inst = _tmp29_;
		}
		_tmp30_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
		_tmp31_ = _tmp30_;
		_tmp32_ = vala_ccode_base_module_get_data_type_for_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
		instance_target_type = _tmp32_;
		_tmp33_ = instance_target_type;
		_tmp34_ = vala_data_type_get_data_type (_tmp33_);
		_tmp35_ = _tmp34_;
		_tmp36_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp35_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp35_) : NULL);
		cl = _tmp36_;
		_tmp38_ = instance_target_type;
		_tmp39_ = vala_data_type_get_data_type (_tmp38_);
		_tmp40_ = _tmp39_;
		_tmp41_ = cl;
		if (_tmp40_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp41_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			gboolean _tmp42_ = FALSE;
			ValaClass* _tmp43_;
			_tmp43_ = cl;
			if (_tmp43_ == NULL) {
				_tmp42_ = TRUE;
			} else {
				ValaClass* _tmp44_;
				gboolean _tmp45_;
				gboolean _tmp46_;
				_tmp44_ = cl;
				_tmp45_ = vala_class_get_is_compact (_tmp44_);
				_tmp46_ = _tmp45_;
				_tmp42_ = !_tmp46_;
			}
			_tmp37_ = _tmp42_;
		} else {
			_tmp37_ = FALSE;
		}
		is_gtypeinstance = _tmp37_;
		if (is_gtypeinstance) {
			ValaSymbolAccessibility _tmp48_;
			ValaSymbolAccessibility _tmp49_;
			_tmp48_ = vala_symbol_get_access ((ValaSymbol*) field);
			_tmp49_ = _tmp48_;
			_tmp47_ = _tmp49_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
		} else {
			_tmp47_ = FALSE;
		}
		if (_tmp47_) {
			ValaCCodeExpression* _tmp50_;
			ValaCCodeMemberAccess* _tmp51_;
			_tmp50_ = pub_inst;
			_tmp51_ = vala_ccode_member_access_new_pointer (_tmp50_, "priv");
			_vala_ccode_node_unref0 (inst);
			inst = (ValaCCodeExpression*) _tmp51_;
		} else {
			ValaClass* _tmp52_;
			ValaCCodeExpression* _tmp55_;
			ValaCCodeExpression* _tmp56_;
			_tmp52_ = cl;
			if (_tmp52_ != NULL) {
				ValaClass* _tmp53_;
				ValaCCodeFile* _tmp54_;
				_tmp53_ = cl;
				_tmp54_ = ((ValaCCodeBaseModule*) self)->cfile;
				vala_ccode_base_module_generate_class_struct_declaration ((ValaCCodeBaseModule*) self, _tmp53_, _tmp54_);
			}
			_tmp55_ = pub_inst;
			_tmp56_ = _vala_ccode_node_ref0 (_tmp55_);
			_vala_ccode_node_unref0 (inst);
			inst = _tmp56_;
		}
		_tmp57_ = inst;
		if (_tmp57_ == NULL) {
			ValaSourceReference* _tmp58_;
			ValaSourceReference* _tmp59_;
			gchar* _tmp60_;
			gchar* _tmp61_;
			gchar* _tmp62_;
			gchar* _tmp63_;
			ValaGLibValue* _tmp64_;
			ValaCCodeInvalidExpression* _tmp65_;
			_tmp58_ = vala_code_node_get_source_reference ((ValaCodeNode*) field);
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_symbol_get_full_name ((ValaSymbol*) field);
			_tmp61_ = _tmp60_;
			_tmp62_ = g_strdup_printf ("Invalid access to instance member `%s'", _tmp61_);
			_tmp63_ = _tmp62_;
			vala_report_error (_tmp59_, _tmp63_);
			_g_free0 (_tmp63_);
			_g_free0 (_tmp61_);
			_tmp64_ = _result_;
			_tmp65_ = vala_ccode_invalid_expression_new ();
			_vala_ccode_node_unref0 (_tmp64_->cvalue);
			_tmp64_->cvalue = (ValaCCodeExpression*) _tmp65_;
			result = (ValaTargetValue*) _result_;
			_vala_ccode_node_unref0 (inst);
			_vala_code_node_unref0 (cl);
			_vala_code_node_unref0 (instance_target_type);
			_vala_ccode_node_unref0 (pub_inst);
			_vala_code_node_unref0 (array_type);
			_vala_code_node_unref0 (value_type);
			return result;
		}
		_tmp67_ = instance_target_type;
		_tmp68_ = vala_data_type_get_data_type (_tmp67_);
		_tmp69_ = _tmp68_;
		if (vala_typesymbol_is_reference_type (_tmp69_)) {
			_tmp66_ = TRUE;
		} else {
			gboolean _tmp70_ = FALSE;
			if (instance != NULL) {
				ValaDataType* _tmp71_;
				ValaDataType* _tmp72_;
				_tmp71_ = vala_target_value_get_value_type (instance);
				_tmp72_ = _tmp71_;
				_tmp70_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp72_, VALA_TYPE_POINTER_TYPE);
			} else {
				_tmp70_ = FALSE;
			}
			_tmp66_ = _tmp70_;
		}
		if (_tmp66_) {
			ValaGLibValue* _tmp73_;
			ValaCCodeExpression* _tmp74_;
			gchar* _tmp75_;
			gchar* _tmp76_;
			ValaCCodeMemberAccess* _tmp77_;
			_tmp73_ = _result_;
			_tmp74_ = inst;
			_tmp75_ = vala_get_ccode_name ((ValaCodeNode*) field);
			_tmp76_ = _tmp75_;
			_tmp77_ = vala_ccode_member_access_new_pointer (_tmp74_, _tmp76_);
			_vala_ccode_node_unref0 (_tmp73_->cvalue);
			_tmp73_->cvalue = (ValaCCodeExpression*) _tmp77_;
			_g_free0 (_tmp76_);
		} else {
			ValaGLibValue* _tmp78_;
			ValaCCodeExpression* _tmp79_;
			gchar* _tmp80_;
			gchar* _tmp81_;
			ValaCCodeMemberAccess* _tmp82_;
			_tmp78_ = _result_;
			_tmp79_ = inst;
			_tmp80_ = vala_get_ccode_name ((ValaCodeNode*) field);
			_tmp81_ = _tmp80_;
			_tmp82_ = vala_ccode_member_access_new (_tmp79_, _tmp81_, FALSE);
			_vala_ccode_node_unref0 (_tmp78_->cvalue);
			_tmp78_->cvalue = (ValaCCodeExpression*) _tmp82_;
			_g_free0 (_tmp81_);
		}
		_tmp84_ = array_type;
		if (_tmp84_ != NULL) {
			_tmp83_ = vala_get_ccode_array_length ((ValaCodeNode*) field);
		} else {
			_tmp83_ = FALSE;
		}
		if (_tmp83_) {
			gboolean _tmp101_ = FALSE;
			ValaArrayType* _tmp102_;
			gint _tmp103_;
			gint _tmp104_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp85_ = FALSE;
					_tmp85_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp87_;
						gint _tmp88_;
						gint _tmp89_;
						ValaCCodeExpression* length_expr = NULL;
						gchar* length_cname = NULL;
						gchar* _tmp90_;
						ValaSymbol* _tmp91_;
						ValaSymbol* _tmp92_;
						ValaGLibValue* _tmp99_;
						ValaCCodeExpression* _tmp100_;
						if (!_tmp85_) {
							gint _tmp86_;
							_tmp86_ = dim;
							dim = _tmp86_ + 1;
						}
						_tmp85_ = FALSE;
						_tmp87_ = array_type;
						_tmp88_ = vala_array_type_get_rank (_tmp87_);
						_tmp89_ = _tmp88_;
						if (!(dim <= _tmp89_)) {
							break;
						}
						length_expr = NULL;
						_tmp90_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) field, dim);
						length_cname = _tmp90_;
						_tmp91_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
						_tmp92_ = _tmp91_;
						if (vala_typesymbol_is_reference_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))) {
							ValaCCodeExpression* _tmp93_;
							const gchar* _tmp94_;
							ValaCCodeMemberAccess* _tmp95_;
							_tmp93_ = inst;
							_tmp94_ = length_cname;
							_tmp95_ = vala_ccode_member_access_new_pointer (_tmp93_, _tmp94_);
							_vala_ccode_node_unref0 (length_expr);
							length_expr = (ValaCCodeExpression*) _tmp95_;
						} else {
							ValaCCodeExpression* _tmp96_;
							const gchar* _tmp97_;
							ValaCCodeMemberAccess* _tmp98_;
							_tmp96_ = inst;
							_tmp97_ = length_cname;
							_tmp98_ = vala_ccode_member_access_new (_tmp96_, _tmp97_, FALSE);
							_vala_ccode_node_unref0 (length_expr);
							length_expr = (ValaCCodeExpression*) _tmp98_;
						}
						_tmp99_ = _result_;
						_tmp100_ = length_expr;
						vala_glib_value_append_array_length_cvalue (_tmp99_, _tmp100_);
						_g_free0 (length_cname);
						_vala_ccode_node_unref0 (length_expr);
					}
				}
			}
			_tmp102_ = array_type;
			_tmp103_ = vala_array_type_get_rank (_tmp102_);
			_tmp104_ = _tmp103_;
			if (_tmp104_ == 1) {
				_tmp101_ = vala_symbol_is_internal_symbol ((ValaSymbol*) field);
			} else {
				_tmp101_ = FALSE;
			}
			if (_tmp101_) {
				gchar* size_cname = NULL;
				gchar* _tmp105_;
				gchar* _tmp106_;
				gchar* _tmp107_;
				gchar* _tmp108_;
				ValaSymbol* _tmp109_;
				ValaSymbol* _tmp110_;
				_tmp105_ = vala_get_ccode_name ((ValaCodeNode*) field);
				_tmp106_ = _tmp105_;
				_tmp107_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp106_);
				_tmp108_ = _tmp107_;
				_g_free0 (_tmp106_);
				size_cname = _tmp108_;
				_tmp109_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
				_tmp110_ = _tmp109_;
				if (vala_typesymbol_is_reference_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp110_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))) {
					ValaGLibValue* _tmp111_;
					ValaCCodeExpression* _tmp112_;
					const gchar* _tmp113_;
					ValaCCodeMemberAccess* _tmp114_;
					ValaCCodeMemberAccess* _tmp115_;
					_tmp111_ = _result_;
					_tmp112_ = inst;
					_tmp113_ = size_cname;
					_tmp114_ = vala_ccode_member_access_new_pointer (_tmp112_, _tmp113_);
					_tmp115_ = _tmp114_;
					vala_ccode_base_module_set_array_size_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp111_, (ValaCCodeExpression*) _tmp115_);
					_vala_ccode_node_unref0 (_tmp115_);
				} else {
					ValaGLibValue* _tmp116_;
					ValaCCodeExpression* _tmp117_;
					const gchar* _tmp118_;
					ValaCCodeMemberAccess* _tmp119_;
					ValaCCodeMemberAccess* _tmp120_;
					_tmp116_ = _result_;
					_tmp117_ = inst;
					_tmp118_ = size_cname;
					_tmp119_ = vala_ccode_member_access_new (_tmp117_, _tmp118_, FALSE);
					_tmp120_ = _tmp119_;
					vala_ccode_base_module_set_array_size_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp116_, (ValaCCodeExpression*) _tmp120_);
					_vala_ccode_node_unref0 (_tmp120_);
				}
				_g_free0 (size_cname);
			}
		} else {
			if (vala_get_ccode_delegate_target ((ValaCodeNode*) field)) {
				gchar* target_cname = NULL;
				gchar* _tmp121_;
				gchar* target_destroy_notify_cname = NULL;
				gchar* _tmp122_;
				ValaSymbol* _tmp123_;
				ValaSymbol* _tmp124_;
				_tmp121_ = vala_get_ccode_delegate_target_name ((ValaVariable*) field);
				target_cname = _tmp121_;
				_tmp122_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) field);
				target_destroy_notify_cname = _tmp122_;
				_tmp123_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
				_tmp124_ = _tmp123_;
				if (vala_typesymbol_is_reference_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp124_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))) {
					ValaGLibValue* _tmp125_;
					ValaCCodeExpression* _tmp126_;
					const gchar* _tmp127_;
					ValaCCodeMemberAccess* _tmp128_;
					ValaGLibValue* _tmp129_;
					ValaDataType* _tmp130_;
					ValaDataType* _tmp131_;
					_tmp125_ = _result_;
					_tmp126_ = inst;
					_tmp127_ = target_cname;
					_tmp128_ = vala_ccode_member_access_new_pointer (_tmp126_, _tmp127_);
					_vala_ccode_node_unref0 (_tmp125_->delegate_target_cvalue);
					_tmp125_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp128_;
					_tmp129_ = _result_;
					_tmp130_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp129_);
					_tmp131_ = _tmp130_;
					if (vala_data_type_is_disposable (_tmp131_)) {
						ValaGLibValue* _tmp132_;
						ValaCCodeExpression* _tmp133_;
						const gchar* _tmp134_;
						ValaCCodeMemberAccess* _tmp135_;
						_tmp132_ = _result_;
						_tmp133_ = inst;
						_tmp134_ = target_destroy_notify_cname;
						_tmp135_ = vala_ccode_member_access_new_pointer (_tmp133_, _tmp134_);
						_vala_ccode_node_unref0 (_tmp132_->delegate_target_destroy_notify_cvalue);
						_tmp132_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp135_;
					}
				} else {
					ValaGLibValue* _tmp136_;
					ValaCCodeExpression* _tmp137_;
					const gchar* _tmp138_;
					ValaCCodeMemberAccess* _tmp139_;
					ValaGLibValue* _tmp140_;
					ValaDataType* _tmp141_;
					ValaDataType* _tmp142_;
					_tmp136_ = _result_;
					_tmp137_ = inst;
					_tmp138_ = target_cname;
					_tmp139_ = vala_ccode_member_access_new (_tmp137_, _tmp138_, FALSE);
					_vala_ccode_node_unref0 (_tmp136_->delegate_target_cvalue);
					_tmp136_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp139_;
					_tmp140_ = _result_;
					_tmp141_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp140_);
					_tmp142_ = _tmp141_;
					if (vala_data_type_is_disposable (_tmp142_)) {
						ValaGLibValue* _tmp143_;
						ValaCCodeExpression* _tmp144_;
						const gchar* _tmp145_;
						ValaCCodeMemberAccess* _tmp146_;
						_tmp143_ = _result_;
						_tmp144_ = inst;
						_tmp145_ = target_destroy_notify_cname;
						_tmp146_ = vala_ccode_member_access_new (_tmp144_, _tmp145_, FALSE);
						_vala_ccode_node_unref0 (_tmp143_->delegate_target_destroy_notify_cvalue);
						_tmp143_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp146_;
					}
				}
				_g_free0 (target_destroy_notify_cname);
				_g_free0 (target_cname);
			}
		}
		_vala_ccode_node_unref0 (inst);
		_vala_code_node_unref0 (cl);
		_vala_code_node_unref0 (instance_target_type);
		_vala_ccode_node_unref0 (pub_inst);
	} else {
		ValaMemberBinding _tmp147_;
		ValaMemberBinding _tmp148_;
		_tmp147_ = vala_field_get_binding (field);
		_tmp148_ = _tmp147_;
		if (_tmp148_ == VALA_MEMBER_BINDING_CLASS) {
			ValaClass* cl = NULL;
			ValaSymbol* _tmp149_;
			ValaSymbol* _tmp150_;
			ValaClass* _tmp151_;
			ValaCCodeFunctionCall* cast = NULL;
			ValaClass* _tmp152_;
			gchar* _tmp153_;
			gchar* _tmp154_;
			ValaCCodeIdentifier* _tmp155_;
			ValaCCodeIdentifier* _tmp156_;
			ValaCCodeFunctionCall* _tmp157_;
			ValaCCodeFunctionCall* _tmp158_;
			ValaCCodeExpression* klass = NULL;
			ValaCCodeFunctionCall* _tmp181_;
			ValaCCodeExpression* _tmp182_;
			ValaSymbolAccessibility _tmp183_;
			ValaSymbolAccessibility _tmp184_;
			_tmp149_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
			_tmp150_ = _tmp149_;
			_tmp151_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp150_, VALA_TYPE_CLASS, ValaClass));
			cl = _tmp151_;
			_tmp152_ = cl;
			_tmp153_ = vala_get_ccode_class_type_function (_tmp152_);
			_tmp154_ = _tmp153_;
			_tmp155_ = vala_ccode_identifier_new (_tmp154_);
			_tmp156_ = _tmp155_;
			_tmp157_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp156_);
			_tmp158_ = _tmp157_;
			_vala_ccode_node_unref0 (_tmp156_);
			_g_free0 (_tmp154_);
			cast = _tmp158_;
			if (instance == NULL) {
				ValaDataType* _tmp159_;
				ValaDataType* _tmp160_;
				gboolean _tmp161_;
				_tmp159_ = vala_ccode_base_module_get_this_type ((ValaCCodeBaseModule*) self);
				_tmp160_ = _tmp159_;
				_tmp161_ = _tmp160_ == NULL;
				_vala_code_node_unref0 (_tmp160_);
				if (_tmp161_) {
					ValaCCodeIdentifier* _tmp162_;
					_tmp162_ = vala_ccode_identifier_new ("klass");
					_vala_ccode_node_unref0 (klass);
					klass = (ValaCCodeExpression*) _tmp162_;
				} else {
					ValaCCodeFunctionCall* k = NULL;
					ValaCCodeIdentifier* _tmp163_;
					ValaCCodeIdentifier* _tmp164_;
					ValaCCodeFunctionCall* _tmp165_;
					ValaCCodeFunctionCall* _tmp166_;
					ValaCCodeFunctionCall* _tmp167_;
					ValaCCodeIdentifier* _tmp168_;
					ValaCCodeIdentifier* _tmp169_;
					ValaCCodeFunctionCall* _tmp170_;
					ValaCCodeExpression* _tmp171_;
					_tmp163_ = vala_ccode_identifier_new ("G_OBJECT_GET_CLASS");
					_tmp164_ = _tmp163_;
					_tmp165_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp164_);
					_tmp166_ = _tmp165_;
					_vala_ccode_node_unref0 (_tmp164_);
					k = _tmp166_;
					_tmp167_ = k;
					_tmp168_ = vala_ccode_identifier_new ("self");
					_tmp169_ = _tmp168_;
					vala_ccode_function_call_add_argument (_tmp167_, (ValaCCodeExpression*) _tmp169_);
					_vala_ccode_node_unref0 (_tmp169_);
					_tmp170_ = k;
					_tmp171_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp170_);
					_vala_ccode_node_unref0 (klass);
					klass = _tmp171_;
					_vala_ccode_node_unref0 (k);
				}
			} else {
				ValaCCodeFunctionCall* k = NULL;
				ValaCCodeIdentifier* _tmp172_;
				ValaCCodeIdentifier* _tmp173_;
				ValaCCodeFunctionCall* _tmp174_;
				ValaCCodeFunctionCall* _tmp175_;
				ValaCCodeFunctionCall* _tmp176_;
				ValaCCodeExpression* _tmp177_;
				ValaCCodeExpression* _tmp178_;
				ValaCCodeFunctionCall* _tmp179_;
				ValaCCodeExpression* _tmp180_;
				_tmp172_ = vala_ccode_identifier_new ("G_OBJECT_GET_CLASS");
				_tmp173_ = _tmp172_;
				_tmp174_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp173_);
				_tmp175_ = _tmp174_;
				_vala_ccode_node_unref0 (_tmp173_);
				k = _tmp175_;
				_tmp176_ = k;
				_tmp177_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, instance);
				_tmp178_ = _tmp177_;
				vala_ccode_function_call_add_argument (_tmp176_, _tmp178_);
				_vala_ccode_node_unref0 (_tmp178_);
				_tmp179_ = k;
				_tmp180_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp179_);
				_vala_ccode_node_unref0 (klass);
				klass = _tmp180_;
				_vala_ccode_node_unref0 (k);
			}
			_tmp181_ = cast;
			_tmp182_ = klass;
			vala_ccode_function_call_add_argument (_tmp181_, _tmp182_);
			_tmp183_ = vala_symbol_get_access ((ValaSymbol*) field);
			_tmp184_ = _tmp183_;
			if (_tmp184_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
				ValaCCodeFunctionCall* ccall = NULL;
				ValaClass* _tmp185_;
				gchar* _tmp186_;
				gchar* _tmp187_;
				ValaCCodeIdentifier* _tmp188_;
				ValaCCodeIdentifier* _tmp189_;
				ValaCCodeFunctionCall* _tmp190_;
				ValaCCodeFunctionCall* _tmp191_;
				ValaCCodeFunctionCall* _tmp192_;
				ValaCCodeExpression* _tmp193_;
				ValaGLibValue* _tmp194_;
				ValaCCodeFunctionCall* _tmp195_;
				gchar* _tmp196_;
				gchar* _tmp197_;
				ValaCCodeMemberAccess* _tmp198_;
				_tmp185_ = cl;
				_tmp186_ = vala_get_ccode_class_get_private_function (_tmp185_);
				_tmp187_ = _tmp186_;
				_tmp188_ = vala_ccode_identifier_new (_tmp187_);
				_tmp189_ = _tmp188_;
				_tmp190_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp189_);
				_tmp191_ = _tmp190_;
				_vala_ccode_node_unref0 (_tmp189_);
				_g_free0 (_tmp187_);
				ccall = _tmp191_;
				_tmp192_ = ccall;
				_tmp193_ = klass;
				vala_ccode_function_call_add_argument (_tmp192_, _tmp193_);
				_tmp194_ = _result_;
				_tmp195_ = ccall;
				_tmp196_ = vala_get_ccode_name ((ValaCodeNode*) field);
				_tmp197_ = _tmp196_;
				_tmp198_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp195_, _tmp197_);
				_vala_ccode_node_unref0 (_tmp194_->cvalue);
				_tmp194_->cvalue = (ValaCCodeExpression*) _tmp198_;
				_g_free0 (_tmp197_);
				_vala_ccode_node_unref0 (ccall);
			} else {
				ValaGLibValue* _tmp199_;
				ValaCCodeFunctionCall* _tmp200_;
				gchar* _tmp201_;
				gchar* _tmp202_;
				ValaCCodeMemberAccess* _tmp203_;
				_tmp199_ = _result_;
				_tmp200_ = cast;
				_tmp201_ = vala_get_ccode_name ((ValaCodeNode*) field);
				_tmp202_ = _tmp201_;
				_tmp203_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp200_, _tmp202_);
				_vala_ccode_node_unref0 (_tmp199_->cvalue);
				_tmp199_->cvalue = (ValaCCodeExpression*) _tmp203_;
				_g_free0 (_tmp202_);
			}
			_vala_ccode_node_unref0 (klass);
			_vala_ccode_node_unref0 (cast);
			_vala_code_node_unref0 (cl);
		} else {
			ValaCCodeFile* _tmp204_;
			ValaGLibValue* _tmp205_;
			gchar* _tmp206_;
			gchar* _tmp207_;
			ValaCCodeIdentifier* _tmp208_;
			gboolean _tmp209_ = FALSE;
			ValaArrayType* _tmp210_;
			_tmp204_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_field_declaration ((ValaCCodeBaseModule*) self, field, _tmp204_);
			_tmp205_ = _result_;
			_tmp206_ = vala_get_ccode_name ((ValaCodeNode*) field);
			_tmp207_ = _tmp206_;
			_tmp208_ = vala_ccode_identifier_new (_tmp207_);
			_vala_ccode_node_unref0 (_tmp205_->cvalue);
			_tmp205_->cvalue = (ValaCCodeExpression*) _tmp208_;
			_g_free0 (_tmp207_);
			_tmp210_ = array_type;
			if (_tmp210_ != NULL) {
				_tmp209_ = vala_get_ccode_array_length ((ValaCodeNode*) field);
			} else {
				_tmp209_ = FALSE;
			}
			if (_tmp209_) {
				gboolean _tmp221_ = FALSE;
				ValaArrayType* _tmp222_;
				gint _tmp223_;
				gint _tmp224_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp211_ = FALSE;
						_tmp211_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp213_;
							gint _tmp214_;
							gint _tmp215_;
							gchar* length_cname = NULL;
							gchar* _tmp216_;
							ValaGLibValue* _tmp217_;
							const gchar* _tmp218_;
							ValaCCodeIdentifier* _tmp219_;
							ValaCCodeIdentifier* _tmp220_;
							if (!_tmp211_) {
								gint _tmp212_;
								_tmp212_ = dim;
								dim = _tmp212_ + 1;
							}
							_tmp211_ = FALSE;
							_tmp213_ = array_type;
							_tmp214_ = vala_array_type_get_rank (_tmp213_);
							_tmp215_ = _tmp214_;
							if (!(dim <= _tmp215_)) {
								break;
							}
							_tmp216_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) field, dim);
							length_cname = _tmp216_;
							_tmp217_ = _result_;
							_tmp218_ = length_cname;
							_tmp219_ = vala_ccode_identifier_new (_tmp218_);
							_tmp220_ = _tmp219_;
							vala_glib_value_append_array_length_cvalue (_tmp217_, (ValaCCodeExpression*) _tmp220_);
							_vala_ccode_node_unref0 (_tmp220_);
							_g_free0 (length_cname);
						}
					}
				}
				_tmp222_ = array_type;
				_tmp223_ = vala_array_type_get_rank (_tmp222_);
				_tmp224_ = _tmp223_;
				if (_tmp224_ == 1) {
					_tmp221_ = vala_symbol_is_internal_symbol ((ValaSymbol*) field);
				} else {
					_tmp221_ = FALSE;
				}
				if (_tmp221_) {
					ValaGLibValue* _tmp225_;
					gchar* _tmp226_;
					gchar* _tmp227_;
					gchar* _tmp228_;
					gchar* _tmp229_;
					ValaCCodeIdentifier* _tmp230_;
					ValaCCodeIdentifier* _tmp231_;
					_tmp225_ = _result_;
					_tmp226_ = vala_get_ccode_name ((ValaCodeNode*) field);
					_tmp227_ = _tmp226_;
					_tmp228_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp227_);
					_tmp229_ = _tmp228_;
					_tmp230_ = vala_ccode_identifier_new (_tmp229_);
					_tmp231_ = _tmp230_;
					vala_ccode_base_module_set_array_size_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp225_, (ValaCCodeExpression*) _tmp231_);
					_vala_ccode_node_unref0 (_tmp231_);
					_g_free0 (_tmp229_);
					_g_free0 (_tmp227_);
				}
			} else {
				if (vala_get_ccode_delegate_target ((ValaCodeNode*) field)) {
					ValaGLibValue* _tmp232_;
					gchar* _tmp233_;
					gchar* _tmp234_;
					ValaCCodeIdentifier* _tmp235_;
					ValaGLibValue* _tmp236_;
					ValaDataType* _tmp237_;
					ValaDataType* _tmp238_;
					_tmp232_ = _result_;
					_tmp233_ = vala_get_ccode_delegate_target_name ((ValaVariable*) field);
					_tmp234_ = _tmp233_;
					_tmp235_ = vala_ccode_identifier_new (_tmp234_);
					_vala_ccode_node_unref0 (_tmp232_->delegate_target_cvalue);
					_tmp232_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp235_;
					_g_free0 (_tmp234_);
					_tmp236_ = _result_;
					_tmp237_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp236_);
					_tmp238_ = _tmp237_;
					if (vala_data_type_is_disposable (_tmp238_)) {
						ValaGLibValue* _tmp239_;
						gchar* _tmp240_;
						gchar* _tmp241_;
						ValaCCodeIdentifier* _tmp242_;
						_tmp239_ = _result_;
						_tmp240_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) field);
						_tmp241_ = _tmp240_;
						_tmp242_ = vala_ccode_identifier_new (_tmp241_);
						_vala_ccode_node_unref0 (_tmp239_->delegate_target_destroy_notify_cvalue);
						_tmp239_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp242_;
						_g_free0 (_tmp241_);
					}
				}
			}
		}
	}
	result = (ValaTargetValue*) _result_;
	_vala_code_node_unref0 (array_type);
	_vala_code_node_unref0 (value_type);
	return result;
}

static gchar
string_get (const gchar* self,
            glong index)
{
	gchar _tmp0_;
	gchar result = '\0';
	g_return_val_if_fail (self != NULL, '\0');
	_tmp0_ = ((gchar*) self)[index];
	result = _tmp0_;
	return result;
}

static ValaTargetValue*
vala_ccode_member_access_module_real_load_variable (ValaCCodeBaseModule* base,
                                                    ValaVariable* variable,
                                                    ValaTargetValue* value)
{
	ValaCCodeMemberAccessModule * self;
	ValaGLibValue* _result_ = NULL;
	ValaGLibValue* _tmp0_;
	ValaArrayType* array_type = NULL;
	ValaGLibValue* _tmp1_;
	ValaDataType* _tmp2_;
	ValaDataType* _tmp3_;
	ValaArrayType* _tmp4_;
	ValaDelegateType* delegate_type = NULL;
	ValaGLibValue* _tmp5_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	ValaDelegateType* _tmp8_;
	ValaArrayType* _tmp9_;
	ValaGLibValue* _tmp85_;
	ValaDataType* _tmp86_;
	ValaDataType* _tmp87_;
	gboolean use_temp = FALSE;
	ValaGLibValue* _tmp88_;
	ValaDataType* _tmp89_;
	ValaDataType* _tmp90_;
	gboolean _tmp101_ = FALSE;
	gboolean _tmp102_;
	gboolean _tmp103_;
	ValaGLibValue* _tmp107_;
	ValaDataType* _tmp108_;
	ValaDataType* _tmp109_;
	ValaLocalVariable* local = NULL;
	ValaLocalVariable* _tmp110_;
	gboolean _tmp111_ = FALSE;
	ValaLocalVariable* _tmp112_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (variable != NULL, NULL);
	g_return_val_if_fail (value != NULL, NULL);
	_tmp0_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
	_result_ = _tmp0_;
	_tmp1_ = _result_;
	_tmp2_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp3_) : NULL);
	array_type = _tmp4_;
	_tmp5_ = _result_;
	_tmp6_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp7_) : NULL);
	delegate_type = _tmp8_;
	_tmp9_ = array_type;
	if (_tmp9_ != NULL) {
		ValaArrayType* _tmp10_;
		gboolean _tmp11_;
		gboolean _tmp12_;
		ValaGLibValue* _tmp78_;
		_tmp10_ = array_type;
		_tmp11_ = vala_array_type_get_fixed_length (_tmp10_);
		_tmp12_ = _tmp11_;
		if (_tmp12_) {
			ValaGLibValue* _tmp13_;
			ValaGLibValue* _tmp14_;
			ValaArrayType* _tmp15_;
			ValaExpression* _tmp16_;
			ValaExpression* _tmp17_;
			ValaCCodeExpression* _tmp18_;
			ValaCCodeExpression* _tmp19_;
			ValaGLibValue* _tmp20_;
			_tmp13_ = _result_;
			_vala_iterable_unref0 (_tmp13_->array_length_cvalues);
			_tmp13_->array_length_cvalues = NULL;
			_tmp14_ = _result_;
			_tmp15_ = array_type;
			_tmp16_ = vala_array_type_get_length (_tmp15_);
			_tmp17_ = _tmp16_;
			_tmp18_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp17_);
			_tmp19_ = _tmp18_;
			vala_glib_value_append_array_length_cvalue (_tmp14_, _tmp19_);
			_vala_ccode_node_unref0 (_tmp19_);
			_tmp20_ = _result_;
			_tmp20_->lvalue = FALSE;
		} else {
			if (vala_get_ccode_array_null_terminated ((ValaCodeNode*) variable)) {
				ValaCCodeFunctionCall* len_call = NULL;
				ValaCCodeIdentifier* _tmp21_;
				ValaCCodeIdentifier* _tmp22_;
				ValaCCodeFunctionCall* _tmp23_;
				ValaCCodeFunctionCall* _tmp24_;
				ValaCCodeFunctionCall* _tmp25_;
				ValaGLibValue* _tmp26_;
				ValaCCodeExpression* _tmp27_;
				ValaGLibValue* _tmp28_;
				ValaGLibValue* _tmp29_;
				ValaCCodeFunctionCall* _tmp30_;
				ValaGLibValue* _tmp31_;
				((ValaCCodeBaseModule*) self)->requires_array_length = TRUE;
				_tmp21_ = vala_ccode_identifier_new ("_vala_array_length");
				_tmp22_ = _tmp21_;
				_tmp23_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp22_);
				_tmp24_ = _tmp23_;
				_vala_ccode_node_unref0 (_tmp22_);
				len_call = _tmp24_;
				_tmp25_ = len_call;
				_tmp26_ = _result_;
				_tmp27_ = _tmp26_->cvalue;
				vala_ccode_function_call_add_argument (_tmp25_, _tmp27_);
				_tmp28_ = _result_;
				_vala_iterable_unref0 (_tmp28_->array_length_cvalues);
				_tmp28_->array_length_cvalues = NULL;
				_tmp29_ = _result_;
				_tmp30_ = len_call;
				vala_glib_value_append_array_length_cvalue (_tmp29_, (ValaCCodeExpression*) _tmp30_);
				_tmp31_ = _result_;
				_tmp31_->lvalue = FALSE;
				_vala_ccode_node_unref0 (len_call);
			} else {
				gchar* _tmp32_;
				gchar* _tmp33_;
				gboolean _tmp34_;
				_tmp32_ = vala_get_ccode_array_length_expr ((ValaCodeNode*) variable);
				_tmp33_ = _tmp32_;
				_tmp34_ = _tmp33_ != NULL;
				_g_free0 (_tmp33_);
				if (_tmp34_) {
					ValaCCodeConstant* length_expr = NULL;
					gchar* _tmp35_;
					gchar* _tmp36_;
					ValaCCodeConstant* _tmp37_;
					ValaCCodeConstant* _tmp38_;
					ValaGLibValue* _tmp39_;
					ValaGLibValue* _tmp40_;
					ValaCCodeConstant* _tmp41_;
					ValaGLibValue* _tmp42_;
					_tmp35_ = vala_get_ccode_array_length_expr ((ValaCodeNode*) variable);
					_tmp36_ = _tmp35_;
					_tmp37_ = vala_ccode_constant_new (_tmp36_);
					_tmp38_ = _tmp37_;
					_g_free0 (_tmp36_);
					length_expr = _tmp38_;
					_tmp39_ = _result_;
					_vala_iterable_unref0 (_tmp39_->array_length_cvalues);
					_tmp39_->array_length_cvalues = NULL;
					_tmp40_ = _result_;
					_tmp41_ = length_expr;
					vala_glib_value_append_array_length_cvalue (_tmp40_, (ValaCCodeExpression*) _tmp41_);
					_tmp42_ = _result_;
					_tmp42_->lvalue = FALSE;
					_vala_ccode_node_unref0 (length_expr);
				} else {
					if (!vala_get_ccode_array_length ((ValaCodeNode*) variable)) {
						ValaGLibValue* _tmp43_;
						ValaGLibValue* _tmp52_;
						_tmp43_ = _result_;
						_vala_iterable_unref0 (_tmp43_->array_length_cvalues);
						_tmp43_->array_length_cvalues = NULL;
						{
							gint dim = 0;
							dim = 1;
							{
								gboolean _tmp44_ = FALSE;
								_tmp44_ = TRUE;
								while (TRUE) {
									ValaArrayType* _tmp46_;
									gint _tmp47_;
									gint _tmp48_;
									ValaGLibValue* _tmp49_;
									ValaCCodeConstant* _tmp50_;
									ValaCCodeConstant* _tmp51_;
									if (!_tmp44_) {
										gint _tmp45_;
										_tmp45_ = dim;
										dim = _tmp45_ + 1;
									}
									_tmp44_ = FALSE;
									_tmp46_ = array_type;
									_tmp47_ = vala_array_type_get_rank (_tmp46_);
									_tmp48_ = _tmp47_;
									if (!(dim <= _tmp48_)) {
										break;
									}
									_tmp49_ = _result_;
									_tmp50_ = vala_ccode_constant_new ("-1");
									_tmp51_ = _tmp50_;
									vala_glib_value_append_array_length_cvalue (_tmp49_, (ValaCCodeExpression*) _tmp51_);
									_vala_ccode_node_unref0 (_tmp51_);
								}
							}
						}
						_tmp52_ = _result_;
						_tmp52_->lvalue = FALSE;
					} else {
						ValaDataType* _tmp53_;
						ValaDataType* _tmp54_;
						gchar* _tmp55_;
						gchar* _tmp56_;
						ValaArrayType* _tmp57_;
						gchar* _tmp58_;
						gchar* _tmp59_;
						gboolean _tmp60_;
						_tmp53_ = vala_variable_get_variable_type (variable);
						_tmp54_ = _tmp53_;
						_tmp55_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp54_);
						_tmp56_ = _tmp55_;
						_tmp57_ = array_type;
						_tmp58_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp57_);
						_tmp59_ = _tmp58_;
						_tmp60_ = g_strcmp0 (_tmp56_, _tmp59_) != 0;
						_g_free0 (_tmp59_);
						_g_free0 (_tmp56_);
						if (_tmp60_) {
							ValaGLibValue* _tmp77_;
							{
								gint dim = 0;
								dim = 1;
								{
									gboolean _tmp61_ = FALSE;
									_tmp61_ = TRUE;
									while (TRUE) {
										ValaArrayType* _tmp63_;
										gint _tmp64_;
										gint _tmp65_;
										ValaGLibValue* _tmp66_;
										ValaList* _tmp67_;
										ValaGLibValue* _tmp68_;
										ValaList* _tmp69_;
										gpointer _tmp70_;
										ValaCCodeExpression* _tmp71_;
										ValaArrayType* _tmp72_;
										gchar* _tmp73_;
										gchar* _tmp74_;
										ValaCCodeCastExpression* _tmp75_;
										ValaCCodeCastExpression* _tmp76_;
										if (!_tmp61_) {
											gint _tmp62_;
											_tmp62_ = dim;
											dim = _tmp62_ + 1;
										}
										_tmp61_ = FALSE;
										_tmp63_ = array_type;
										_tmp64_ = vala_array_type_get_rank (_tmp63_);
										_tmp65_ = _tmp64_;
										if (!(dim <= _tmp65_)) {
											break;
										}
										_tmp66_ = _result_;
										_tmp67_ = _tmp66_->array_length_cvalues;
										_tmp68_ = _result_;
										_tmp69_ = _tmp68_->array_length_cvalues;
										_tmp70_ = vala_list_get (_tmp69_, dim - 1);
										_tmp71_ = (ValaCCodeExpression*) _tmp70_;
										_tmp72_ = array_type;
										_tmp73_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp72_);
										_tmp74_ = _tmp73_;
										_tmp75_ = vala_ccode_cast_expression_new (_tmp71_, _tmp74_);
										_tmp76_ = _tmp75_;
										vala_list_set (_tmp67_, dim - 1, (ValaCCodeExpression*) _tmp76_);
										_vala_ccode_node_unref0 (_tmp76_);
										_g_free0 (_tmp74_);
										_vala_ccode_node_unref0 (_tmp71_);
									}
								}
							}
							_tmp77_ = _result_;
							_tmp77_->lvalue = FALSE;
						}
					}
				}
			}
		}
		_tmp78_ = _result_;
		_vala_ccode_node_unref0 (_tmp78_->array_size_cvalue);
		_tmp78_->array_size_cvalue = NULL;
	} else {
		ValaDelegateType* _tmp79_;
		_tmp79_ = delegate_type;
		if (_tmp79_ != NULL) {
			ValaGLibValue* _tmp84_;
			if (!vala_get_ccode_delegate_target ((ValaCodeNode*) variable)) {
				ValaGLibValue* _tmp80_;
				ValaCCodeConstant* _tmp81_;
				ValaGLibValue* _tmp82_;
				ValaCCodeConstant* _tmp83_;
				_tmp80_ = _result_;
				_tmp81_ = vala_ccode_constant_new ("NULL");
				_vala_ccode_node_unref0 (_tmp80_->delegate_target_cvalue);
				_tmp80_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp81_;
				_tmp82_ = _result_;
				_tmp83_ = vala_ccode_constant_new ("NULL");
				_vala_ccode_node_unref0 (_tmp82_->delegate_target_destroy_notify_cvalue);
				_tmp82_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp83_;
			}
			_tmp84_ = _result_;
			_tmp84_->lvalue = FALSE;
		}
	}
	_tmp85_ = _result_;
	_tmp86_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp85_);
	_tmp87_ = _tmp86_;
	vala_data_type_set_value_owned (_tmp87_, FALSE);
	use_temp = TRUE;
	_tmp88_ = _result_;
	_tmp89_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp88_);
	_tmp90_ = _tmp89_;
	if (!vala_ccode_base_module_is_lvalue_access_allowed ((ValaCCodeBaseModule*) self, _tmp90_)) {
		use_temp = FALSE;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (variable, VALA_TYPE_PARAMETER)) {
		ValaParameter* param = NULL;
		ValaParameter* _tmp91_;
		const gchar* _tmp92_;
		const gchar* _tmp93_;
		_tmp91_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (variable, VALA_TYPE_PARAMETER, ValaParameter));
		param = _tmp91_;
		_tmp92_ = vala_symbol_get_name ((ValaSymbol*) variable);
		_tmp93_ = _tmp92_;
		if (g_strcmp0 (_tmp93_, "this") == 0) {
			use_temp = FALSE;
		} else {
			gboolean _tmp94_ = FALSE;
			ValaParameter* _tmp95_;
			ValaParameterDirection _tmp96_;
			ValaParameterDirection _tmp97_;
			_tmp95_ = param;
			_tmp96_ = vala_parameter_get_direction (_tmp95_);
			_tmp97_ = _tmp96_;
			if (_tmp97_ != VALA_PARAMETER_DIRECTION_OUT) {
				ValaParameter* _tmp98_;
				ValaDataType* _tmp99_;
				ValaDataType* _tmp100_;
				_tmp98_ = param;
				_tmp99_ = vala_variable_get_variable_type ((ValaVariable*) _tmp98_);
				_tmp100_ = _tmp99_;
				_tmp94_ = !vala_data_type_is_real_non_null_struct_type (_tmp100_);
			} else {
				_tmp94_ = FALSE;
			}
			if (_tmp94_) {
				use_temp = FALSE;
			}
		}
		_vala_code_node_unref0 (param);
	}
	_tmp102_ = vala_variable_get_single_assignment (variable);
	_tmp103_ = _tmp102_;
	if (_tmp103_) {
		ValaGLibValue* _tmp104_;
		ValaDataType* _tmp105_;
		ValaDataType* _tmp106_;
		_tmp104_ = _result_;
		_tmp105_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp104_);
		_tmp106_ = _tmp105_;
		_tmp101_ = !vala_data_type_is_real_non_null_struct_type (_tmp106_);
	} else {
		_tmp101_ = FALSE;
	}
	if (_tmp101_) {
		use_temp = FALSE;
	}
	_tmp107_ = _result_;
	_tmp108_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp107_);
	_tmp109_ = _tmp108_;
	if (vala_data_type_is_non_null_simple_type (_tmp109_)) {
		use_temp = FALSE;
	}
	_tmp110_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (variable, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) variable) : NULL);
	local = _tmp110_;
	_tmp112_ = local;
	if (_tmp112_ != NULL) {
		ValaLocalVariable* _tmp113_;
		const gchar* _tmp114_;
		const gchar* _tmp115_;
		_tmp113_ = local;
		_tmp114_ = vala_symbol_get_name ((ValaSymbol*) _tmp113_);
		_tmp115_ = _tmp114_;
		_tmp111_ = string_get (_tmp115_, (glong) 0) == '.';
	} else {
		_tmp111_ = FALSE;
	}
	if (_tmp111_) {
		use_temp = FALSE;
	}
	if (use_temp) {
		ValaGLibValue* _tmp116_;
		ValaTargetValue* _tmp117_;
		_tmp116_ = _result_;
		_tmp117_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp116_, (ValaCodeNode*) variable, NULL);
		_vala_target_value_unref0 (_result_);
		_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp117_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
	}
	result = (ValaTargetValue*) _result_;
	_vala_code_node_unref0 (local);
	_vala_code_node_unref0 (delegate_type);
	_vala_code_node_unref0 (array_type);
	return result;
}

static ValaTargetValue*
vala_ccode_member_access_module_real_load_local (ValaCodeGenerator* base,
                                                 ValaLocalVariable* local)
{
	ValaCCodeMemberAccessModule * self;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (local != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_local_cvalue ((ValaCCodeBaseModule*) self, local);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_load_variable ((ValaCCodeBaseModule*) self, (ValaVariable*) local, _tmp1_);
	_tmp3_ = _tmp2_;
	_vala_target_value_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

static ValaTargetValue*
vala_ccode_member_access_module_real_load_parameter (ValaCodeGenerator* base,
                                                     ValaParameter* param)
{
	ValaCCodeMemberAccessModule * self;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (param != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_parameter_cvalue ((ValaCCodeBaseModule*) self, param);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_load_variable ((ValaCCodeBaseModule*) self, (ValaVariable*) param, _tmp1_);
	_tmp3_ = _tmp2_;
	_vala_target_value_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

static ValaTargetValue*
vala_ccode_member_access_module_real_load_this_parameter (ValaCCodeBaseModule* base,
                                                          ValaTypeSymbol* sym)
{
	ValaCCodeMemberAccessModule * self;
	ValaParameter* param = NULL;
	ValaDataType* _tmp0_;
	ValaDataType* _tmp1_;
	ValaParameter* _tmp2_;
	ValaParameter* _tmp3_;
	ValaTargetValue* _tmp4_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_data_type_for_symbol (sym);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_parameter_new ("this", _tmp1_, NULL);
	_tmp3_ = _tmp2_;
	_vala_code_node_unref0 (_tmp1_);
	param = _tmp3_;
	_tmp4_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, param);
	result = _tmp4_;
	_vala_code_node_unref0 (param);
	return result;
}

static ValaTargetValue*
vala_ccode_member_access_module_real_load_field (ValaCodeGenerator* base,
                                                 ValaField* field,
                                                 ValaTargetValue* instance)
{
	ValaCCodeMemberAccessModule * self;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* result = NULL;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (field != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_field_cvalue ((ValaCCodeBaseModule*) self, field, instance);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_base_module_load_variable ((ValaCCodeBaseModule*) self, (ValaVariable*) field, _tmp1_);
	_tmp3_ = _tmp2_;
	_vala_target_value_unref0 (_tmp1_);
	result = _tmp3_;
	return result;
}

ValaCCodeMemberAccessModule*
vala_ccode_member_access_module_construct (GType object_type)
{
	ValaCCodeMemberAccessModule* self = NULL;
	self = (ValaCCodeMemberAccessModule*) vala_ccode_control_flow_module_construct (object_type);
	return self;
}

static void
vala_ccode_member_access_module_class_init (ValaCCodeMemberAccessModuleClass * klass,
                                            gpointer klass_data)
{
	vala_ccode_member_access_module_parent_class = g_type_class_peek_parent (klass);
	((ValaCodeVisitorClass *) klass)->visit_member_access = (void (*) (ValaCodeVisitor*, ValaMemberAccess*)) vala_ccode_member_access_module_real_visit_member_access;
	((ValaCCodeBaseModuleClass *) klass)->get_local_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaLocalVariable*)) vala_ccode_member_access_module_real_get_local_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->get_parameter_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaParameter*)) vala_ccode_member_access_module_real_get_parameter_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->get_field_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaField*, ValaTargetValue*)) vala_ccode_member_access_module_real_get_field_cvalue;
	((ValaCCodeBaseModuleClass *) klass)->load_variable = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaVariable*, ValaTargetValue*)) vala_ccode_member_access_module_real_load_variable;
	((ValaCodeGeneratorClass *) klass)->load_local = (ValaTargetValue* (*) (ValaCodeGenerator*, ValaLocalVariable*)) vala_ccode_member_access_module_real_load_local;
	((ValaCodeGeneratorClass *) klass)->load_parameter = (ValaTargetValue* (*) (ValaCodeGenerator*, ValaParameter*)) vala_ccode_member_access_module_real_load_parameter;
	((ValaCCodeBaseModuleClass *) klass)->load_this_parameter = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaTypeSymbol*)) vala_ccode_member_access_module_real_load_this_parameter;
	((ValaCodeGeneratorClass *) klass)->load_field = (ValaTargetValue* (*) (ValaCodeGenerator*, ValaField*, ValaTargetValue*)) vala_ccode_member_access_module_real_load_field;
}

static void
vala_ccode_member_access_module_instance_init (ValaCCodeMemberAccessModule * self,
                                               gpointer klass)
{
}

GType
vala_ccode_member_access_module_get_type (void)
{
	static volatile gsize vala_ccode_member_access_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_ccode_member_access_module_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaCCodeMemberAccessModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_ccode_member_access_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaCCodeMemberAccessModule), 0, (GInstanceInitFunc) vala_ccode_member_access_module_instance_init, NULL };
		GType vala_ccode_member_access_module_type_id;
		vala_ccode_member_access_module_type_id = g_type_register_static (VALA_TYPE_CCODE_CONTROL_FLOW_MODULE, "ValaCCodeMemberAccessModule", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
		g_once_init_leave (&vala_ccode_member_access_module_type_id__volatile, vala_ccode_member_access_module_type_id);
	}
	return vala_ccode_member_access_module_type_id__volatile;
}

