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

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif

#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_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))

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);
static ValaTargetValue* vala_ccode_member_access_module_real_get_local_cvalue (ValaCCodeBaseModule* base,
                                                                        ValaLocalVariable* local);
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,
                                                                     ValaExpression* expr);
static ValaTargetValue* vala_ccode_member_access_module_real_load_local (ValaCodeGenerator* base,
                                                                  ValaLocalVariable* local,
                                                                  ValaExpression* expr);
static ValaTargetValue* vala_ccode_member_access_module_real_load_parameter (ValaCodeGenerator* base,
                                                                      ValaParameter* param,
                                                                      ValaExpression* expr);
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,
                                                                  ValaExpression* expr);
static GType vala_ccode_member_access_module_get_type_once (void);

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

static gpointer
_vala_code_node_ref0 (gpointer self)
{
	return self ? vala_code_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* _tmp6_;
	ValaDataType* _tmp7_;
	ValaArrayType* _tmp8_;
	ValaDelegateType* delegate_type = NULL;
	ValaDataType* _tmp9_;
	ValaDataType* _tmp10_;
	ValaDelegateType* _tmp11_;
	ValaSymbol* _tmp12_;
	ValaSymbol* _tmp13_;
	ValaSymbol* _tmp964_;
	ValaSymbol* _tmp965_;
	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_;
		ValaCCodeExpression* _tmp5_;
		_tmp2_ = vala_member_access_get_inner (expr);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_get_cvalue (_tmp3_);
		_tmp5_ = _vala_ccode_node_ref0 (_tmp4_);
		_vala_ccode_node_unref0 (pub_inst);
		pub_inst = _tmp5_;
	}
	_tmp6_ = vala_expression_get_value_type ((ValaExpression*) expr);
	_tmp7_ = _tmp6_;
	_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp7_) : NULL);
	array_type = _tmp8_;
	_tmp9_ = vala_expression_get_value_type ((ValaExpression*) expr);
	_tmp10_ = _tmp9_;
	_tmp11_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp10_) : NULL);
	delegate_type = _tmp11_;
	_tmp12_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
	_tmp13_ = _tmp12_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_METHOD)) {
		ValaMethod* m = NULL;
		ValaSymbol* _tmp14_;
		ValaSymbol* _tmp15_;
		ValaMethod* _tmp16_;
		gboolean _tmp17_ = FALSE;
		gboolean _tmp18_ = FALSE;
		gboolean _tmp19_ = FALSE;
		ValaMethod* _tmp20_;
		ValaExpression* _tmp35_;
		ValaExpression* _tmp36_;
		ValaMethod* _tmp77_;
		ValaMethod* _tmp78_;
		ValaMethod* _tmp79_;
		ValaDataType* _tmp157_;
		ValaDataType* _tmp158_;
		ValaDelegateType* _tmp159_;
		ValaDelegateType* _tmp160_;
		ValaCCodeConstant* _tmp171_;
		ValaCCodeConstant* _tmp172_;
		ValaMethod* _tmp173_;
		ValaMemberBinding _tmp174_;
		ValaMemberBinding _tmp175_;
		_tmp14_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
		_tmp15_ = _tmp14_;
		_tmp16_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_METHOD, ValaMethod));
		m = _tmp16_;
		_tmp20_ = m;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_DYNAMIC_METHOD)) {
			_tmp19_ = TRUE;
		} else {
			ValaMethod* _tmp21_;
			_tmp21_ = m;
			_tmp19_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_ARRAY_MOVE_METHOD);
		}
		if (_tmp19_) {
			_tmp18_ = TRUE;
		} else {
			ValaMethod* _tmp22_;
			_tmp22_ = m;
			_tmp18_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_ARRAY_RESIZE_METHOD);
		}
		if (_tmp18_) {
			_tmp17_ = TRUE;
		} else {
			ValaMethod* _tmp23_;
			_tmp23_ = m;
			_tmp17_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_ARRAY_COPY_METHOD);
		}
		if (!_tmp17_) {
			ValaMethod* _tmp24_;
			ValaCCodeFile* _tmp25_;
			gboolean _tmp26_ = FALSE;
			ValaMethod* _tmp27_;
			gboolean _tmp28_;
			gboolean _tmp29_;
			_tmp24_ = m;
			_tmp25_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp24_, _tmp25_);
			_tmp27_ = m;
			_tmp28_ = vala_symbol_get_external ((ValaSymbol*) _tmp27_);
			_tmp29_ = _tmp28_;
			if (!_tmp29_) {
				ValaMethod* _tmp30_;
				gboolean _tmp31_;
				gboolean _tmp32_;
				_tmp30_ = m;
				_tmp31_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp30_);
				_tmp32_ = _tmp31_;
				_tmp26_ = _tmp32_;
			} else {
				_tmp26_ = FALSE;
			}
			if (_tmp26_) {
				ValaMethod* _tmp33_;
				_tmp33_ = m;
				if (vala_ccode_base_module_add_generated_external_symbol ((ValaCCodeBaseModule*) self, (ValaSymbol*) _tmp33_)) {
					ValaMethod* _tmp34_;
					_tmp34_ = m;
					vala_code_visitor_visit_method ((ValaCodeVisitor*) self, _tmp34_);
				}
			}
		}
		_tmp35_ = vala_member_access_get_inner (expr);
		_tmp36_ = _tmp35_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, VALA_TYPE_BASE_ACCESS)) {
			ValaCCodeExpression* vcast = NULL;
			ValaMethod* _tmp37_;
			ValaMethod* _tmp38_;
			ValaMethod* _tmp39_;
			ValaCCodeExpression* _tmp70_;
			vcast = NULL;
			_tmp37_ = m;
			_tmp38_ = vala_method_get_base_method (_tmp37_);
			_tmp39_ = _tmp38_;
			if (_tmp39_ != NULL) {
				ValaClass* base_class = NULL;
				ValaMethod* _tmp40_;
				ValaMethod* _tmp41_;
				ValaMethod* _tmp42_;
				ValaSymbol* _tmp43_;
				ValaSymbol* _tmp44_;
				ValaClass* _tmp45_;
				gchar* _tmp46_;
				gchar* _tmp47_;
				ValaCCodeIdentifier* _tmp48_;
				ValaCCodeIdentifier* _tmp49_;
				ValaCCodeFunctionCall* _tmp50_;
				ValaCCodeExpression* _tmp51_;
				ValaClass* _tmp52_;
				ValaClass* _tmp53_;
				gchar* _tmp54_;
				gchar* _tmp55_;
				gchar* _tmp56_;
				gchar* _tmp57_;
				ValaCCodeIdentifier* _tmp58_;
				ValaCCodeIdentifier* _tmp59_;
				_tmp40_ = m;
				_tmp41_ = vala_method_get_base_method (_tmp40_);
				_tmp42_ = _tmp41_;
				_tmp43_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp42_);
				_tmp44_ = _tmp43_;
				base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, VALA_TYPE_CLASS, ValaClass);
				_tmp45_ = base_class;
				_tmp46_ = vala_get_ccode_class_type_function (_tmp45_);
				_tmp47_ = _tmp46_;
				_tmp48_ = vala_ccode_identifier_new (_tmp47_);
				_tmp49_ = _tmp48_;
				_tmp50_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp49_);
				_vala_ccode_node_unref0 (vcast);
				vcast = (ValaCCodeExpression*) _tmp50_;
				_vala_ccode_node_unref0 (_tmp49_);
				_g_free0 (_tmp47_);
				_tmp51_ = vcast;
				_tmp52_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
				_tmp53_ = _tmp52_;
				_tmp54_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp53_, NULL);
				_tmp55_ = _tmp54_;
				_tmp56_ = g_strdup_printf ("%s_parent_class", _tmp55_);
				_tmp57_ = _tmp56_;
				_tmp58_ = vala_ccode_identifier_new (_tmp57_);
				_tmp59_ = _tmp58_;
				vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp51_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp59_);
				_vala_ccode_node_unref0 (_tmp59_);
				_g_free0 (_tmp57_);
				_g_free0 (_tmp55_);
			} else {
				ValaMethod* _tmp60_;
				ValaMethod* _tmp61_;
				ValaMethod* _tmp62_;
				_tmp60_ = m;
				_tmp61_ = vala_method_get_base_interface_method (_tmp60_);
				_tmp62_ = _tmp61_;
				if (_tmp62_ != NULL) {
					ValaInterface* base_iface = NULL;
					ValaMethod* _tmp63_;
					ValaMethod* _tmp64_;
					ValaMethod* _tmp65_;
					ValaSymbol* _tmp66_;
					ValaSymbol* _tmp67_;
					ValaInterface* _tmp68_;
					ValaCCodeExpression* _tmp69_;
					_tmp63_ = m;
					_tmp64_ = vala_method_get_base_interface_method (_tmp63_);
					_tmp65_ = _tmp64_;
					_tmp66_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp65_);
					_tmp67_ = _tmp66_;
					base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, VALA_TYPE_INTERFACE, ValaInterface);
					_tmp68_ = base_iface;
					_tmp69_ = vala_ccode_base_module_get_this_interface_cexpression ((ValaCCodeBaseModule*) self, _tmp68_, NULL);
					_vala_ccode_node_unref0 (vcast);
					vcast = _tmp69_;
				}
			}
			_tmp70_ = vcast;
			if (_tmp70_ != NULL) {
				ValaCCodeExpression* _tmp71_;
				ValaMethod* _tmp72_;
				gchar* _tmp73_;
				gchar* _tmp74_;
				ValaCCodeMemberAccess* _tmp75_;
				ValaCCodeMemberAccess* _tmp76_;
				_tmp71_ = vcast;
				_tmp72_ = m;
				_tmp73_ = vala_get_ccode_vfunc_name (_tmp72_);
				_tmp74_ = _tmp73_;
				_tmp75_ = vala_ccode_member_access_new_pointer (_tmp71_, _tmp74_);
				_tmp76_ = _tmp75_;
				vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp76_);
				_vala_ccode_node_unref0 (_tmp76_);
				_g_free0 (_tmp74_);
				_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);
		}
		_tmp77_ = m;
		_tmp78_ = vala_method_get_base_method (_tmp77_);
		_tmp79_ = _tmp78_;
		if (_tmp79_ != NULL) {
			ValaMethod* _tmp80_;
			ValaMethod* _tmp81_;
			ValaMethod* _tmp82_;
			_tmp80_ = m;
			_tmp81_ = vala_method_get_base_method (_tmp80_);
			_tmp82_ = _tmp81_;
			if (vala_get_ccode_no_wrapper (_tmp82_)) {
				ValaClass* base_class = NULL;
				ValaMethod* _tmp83_;
				ValaMethod* _tmp84_;
				ValaMethod* _tmp85_;
				ValaSymbol* _tmp86_;
				ValaSymbol* _tmp87_;
				ValaClass* _tmp88_;
				gboolean _tmp89_;
				gboolean _tmp90_;
				_tmp83_ = m;
				_tmp84_ = vala_method_get_base_method (_tmp83_);
				_tmp85_ = _tmp84_;
				_tmp86_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp85_);
				_tmp87_ = _tmp86_;
				base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp87_, VALA_TYPE_CLASS, ValaClass);
				_tmp88_ = base_class;
				_tmp89_ = vala_class_get_is_compact (_tmp88_);
				_tmp90_ = _tmp89_;
				if (!_tmp90_) {
					ValaCCodeExpression* vclass = NULL;
					ValaClass* _tmp91_;
					ValaExpression* _tmp92_;
					ValaExpression* _tmp93_;
					ValaTargetValue* _tmp94_;
					ValaTargetValue* _tmp95_;
					ValaCCodeExpression* _tmp96_;
					ValaCCodeExpression* _tmp97_;
					ValaMethod* _tmp98_;
					gchar* _tmp99_;
					gchar* _tmp100_;
					ValaCCodeMemberAccess* _tmp101_;
					ValaCCodeMemberAccess* _tmp102_;
					_tmp91_ = base_class;
					_tmp92_ = vala_member_access_get_inner (expr);
					_tmp93_ = _tmp92_;
					_tmp94_ = vala_expression_get_target_value (_tmp93_);
					_tmp95_ = _tmp94_;
					_tmp96_ = vala_ccode_base_module_get_this_class_cexpression ((ValaCCodeBaseModule*) self, _tmp91_, _tmp95_);
					vclass = _tmp96_;
					_tmp97_ = vclass;
					_tmp98_ = m;
					_tmp99_ = vala_get_ccode_vfunc_name (_tmp98_);
					_tmp100_ = _tmp99_;
					_tmp101_ = vala_ccode_member_access_new_pointer (_tmp97_, _tmp100_);
					_tmp102_ = _tmp101_;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp102_);
					_vala_ccode_node_unref0 (_tmp102_);
					_g_free0 (_tmp100_);
					_vala_ccode_node_unref0 (vclass);
				} else {
					ValaCCodeExpression* _tmp103_;
					ValaMethod* _tmp104_;
					gchar* _tmp105_;
					gchar* _tmp106_;
					ValaCCodeMemberAccess* _tmp107_;
					ValaCCodeMemberAccess* _tmp108_;
					_tmp103_ = pub_inst;
					_tmp104_ = m;
					_tmp105_ = vala_get_ccode_vfunc_name (_tmp104_);
					_tmp106_ = _tmp105_;
					_tmp107_ = vala_ccode_member_access_new_pointer (_tmp103_, _tmp106_);
					_tmp108_ = _tmp107_;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp108_);
					_vala_ccode_node_unref0 (_tmp108_);
					_g_free0 (_tmp106_);
				}
			} else {
				ValaMethod* _tmp109_;
				ValaMethod* _tmp110_;
				ValaMethod* _tmp111_;
				gchar* _tmp112_;
				gchar* _tmp113_;
				ValaCCodeIdentifier* _tmp114_;
				ValaCCodeIdentifier* _tmp115_;
				_tmp109_ = m;
				_tmp110_ = vala_method_get_base_method (_tmp109_);
				_tmp111_ = _tmp110_;
				_tmp112_ = vala_get_ccode_name ((ValaCodeNode*) _tmp111_);
				_tmp113_ = _tmp112_;
				_tmp114_ = vala_ccode_identifier_new (_tmp113_);
				_tmp115_ = _tmp114_;
				vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp115_);
				_vala_ccode_node_unref0 (_tmp115_);
				_g_free0 (_tmp113_);
			}
		} else {
			ValaMethod* _tmp116_;
			ValaMethod* _tmp117_;
			ValaMethod* _tmp118_;
			_tmp116_ = m;
			_tmp117_ = vala_method_get_base_interface_method (_tmp116_);
			_tmp118_ = _tmp117_;
			if (_tmp118_ != NULL) {
				ValaMethod* _tmp119_;
				ValaMethod* _tmp120_;
				ValaMethod* _tmp121_;
				_tmp119_ = m;
				_tmp120_ = vala_method_get_base_interface_method (_tmp119_);
				_tmp121_ = _tmp120_;
				if (vala_get_ccode_no_wrapper (_tmp121_)) {
					ValaInterface* base_iface = NULL;
					ValaMethod* _tmp122_;
					ValaMethod* _tmp123_;
					ValaMethod* _tmp124_;
					ValaSymbol* _tmp125_;
					ValaSymbol* _tmp126_;
					ValaCCodeExpression* vclass = NULL;
					ValaInterface* _tmp127_;
					ValaExpression* _tmp128_;
					ValaExpression* _tmp129_;
					ValaTargetValue* _tmp130_;
					ValaTargetValue* _tmp131_;
					ValaCCodeExpression* _tmp132_;
					ValaCCodeExpression* _tmp133_;
					ValaMethod* _tmp134_;
					gchar* _tmp135_;
					gchar* _tmp136_;
					ValaCCodeMemberAccess* _tmp137_;
					ValaCCodeMemberAccess* _tmp138_;
					_tmp122_ = m;
					_tmp123_ = vala_method_get_base_interface_method (_tmp122_);
					_tmp124_ = _tmp123_;
					_tmp125_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp124_);
					_tmp126_ = _tmp125_;
					base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp126_, VALA_TYPE_INTERFACE, ValaInterface);
					_tmp127_ = base_iface;
					_tmp128_ = vala_member_access_get_inner (expr);
					_tmp129_ = _tmp128_;
					_tmp130_ = vala_expression_get_target_value (_tmp129_);
					_tmp131_ = _tmp130_;
					_tmp132_ = vala_ccode_base_module_get_this_interface_cexpression ((ValaCCodeBaseModule*) self, _tmp127_, _tmp131_);
					vclass = _tmp132_;
					_tmp133_ = vclass;
					_tmp134_ = m;
					_tmp135_ = vala_get_ccode_vfunc_name (_tmp134_);
					_tmp136_ = _tmp135_;
					_tmp137_ = vala_ccode_member_access_new_pointer (_tmp133_, _tmp136_);
					_tmp138_ = _tmp137_;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp138_);
					_vala_ccode_node_unref0 (_tmp138_);
					_g_free0 (_tmp136_);
					_vala_ccode_node_unref0 (vclass);
				} else {
					ValaMethod* _tmp139_;
					ValaMethod* _tmp140_;
					ValaMethod* _tmp141_;
					gchar* _tmp142_;
					gchar* _tmp143_;
					ValaCCodeIdentifier* _tmp144_;
					ValaCCodeIdentifier* _tmp145_;
					_tmp139_ = m;
					_tmp140_ = vala_method_get_base_interface_method (_tmp139_);
					_tmp141_ = _tmp140_;
					_tmp142_ = vala_get_ccode_name ((ValaCodeNode*) _tmp141_);
					_tmp143_ = _tmp142_;
					_tmp144_ = vala_ccode_identifier_new (_tmp143_);
					_tmp145_ = _tmp144_;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp145_);
					_vala_ccode_node_unref0 (_tmp145_);
					_g_free0 (_tmp143_);
				}
			} else {
				ValaMethod* _tmp146_;
				_tmp146_ = m;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp146_, VALA_TYPE_CREATION_METHOD)) {
					ValaMethod* _tmp147_;
					gchar* _tmp148_;
					gchar* _tmp149_;
					ValaCCodeIdentifier* _tmp150_;
					ValaCCodeIdentifier* _tmp151_;
					_tmp147_ = m;
					_tmp148_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp147_);
					_tmp149_ = _tmp148_;
					_tmp150_ = vala_ccode_identifier_new (_tmp149_);
					_tmp151_ = _tmp150_;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp151_);
					_vala_ccode_node_unref0 (_tmp151_);
					_g_free0 (_tmp149_);
				} else {
					ValaMethod* _tmp152_;
					gchar* _tmp153_;
					gchar* _tmp154_;
					ValaCCodeIdentifier* _tmp155_;
					ValaCCodeIdentifier* _tmp156_;
					_tmp152_ = m;
					_tmp153_ = vala_get_ccode_name ((ValaCodeNode*) _tmp152_);
					_tmp154_ = _tmp153_;
					_tmp155_ = vala_ccode_identifier_new (_tmp154_);
					_tmp156_ = _tmp155_;
					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp156_);
					_vala_ccode_node_unref0 (_tmp156_);
					_g_free0 (_tmp154_);
				}
			}
		}
		_tmp157_ = vala_expression_get_target_type ((ValaExpression*) expr);
		_tmp158_ = _tmp157_;
		_tmp159_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp158_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp158_) : NULL);
		_vala_code_node_unref0 (delegate_type);
		delegate_type = _tmp159_;
		_tmp160_ = delegate_type;
		if (_tmp160_ != NULL) {
			ValaDelegateType* _tmp161_;
			ValaCCodeFile* _tmp162_;
			ValaCCodeExpression* _tmp163_;
			ValaDelegateType* _tmp164_;
			ValaDelegate* _tmp165_;
			ValaDelegate* _tmp166_;
			gchar* _tmp167_;
			gchar* _tmp168_;
			ValaCCodeCastExpression* _tmp169_;
			ValaCCodeCastExpression* _tmp170_;
			_tmp161_ = delegate_type;
			_tmp162_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, (ValaDataType*) _tmp161_, _tmp162_);
			_tmp163_ = vala_get_cvalue ((ValaExpression*) expr);
			_tmp164_ = delegate_type;
			_tmp165_ = vala_delegate_type_get_delegate_symbol (_tmp164_);
			_tmp166_ = _tmp165_;
			_tmp167_ = vala_get_ccode_name ((ValaCodeNode*) _tmp166_);
			_tmp168_ = _tmp167_;
			_tmp169_ = vala_ccode_cast_expression_new (_tmp163_, _tmp168_);
			_tmp170_ = _tmp169_;
			vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp170_);
			_vala_ccode_node_unref0 (_tmp170_);
			_g_free0 (_tmp168_);
		}
		_tmp171_ = vala_ccode_constant_new ("NULL");
		_tmp172_ = _tmp171_;
		vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp172_);
		_vala_ccode_node_unref0 (_tmp172_);
		_tmp173_ = m;
		_tmp174_ = vala_method_get_binding (_tmp173_);
		_tmp175_ = _tmp174_;
		if (_tmp175_ == VALA_MEMBER_BINDING_STATIC) {
			ValaCCodeConstant* _tmp176_;
			ValaCCodeConstant* _tmp177_;
			_tmp176_ = vala_ccode_constant_new ("NULL");
			_tmp177_ = _tmp176_;
			vala_set_delegate_target ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp177_);
			_vala_ccode_node_unref0 (_tmp177_);
		} else {
			ValaMethod* _tmp178_;
			gboolean _tmp179_;
			gboolean _tmp180_;
			_tmp178_ = m;
			_tmp179_ = vala_method_get_is_async_callback (_tmp178_);
			_tmp180_ = _tmp179_;
			if (_tmp180_) {
				ValaMethod* _tmp181_;
				ValaMethod* _tmp182_;
				gboolean _tmp183_;
				gboolean _tmp184_;
				_tmp181_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
				_tmp182_ = _tmp181_;
				_tmp183_ = vala_method_get_closure (_tmp182_);
				_tmp184_ = _tmp183_;
				if (_tmp184_) {
					ValaBlock* block = NULL;
					ValaMethod* _tmp185_;
					ValaSymbol* _tmp186_;
					ValaSymbol* _tmp187_;
					ValaBlock* _tmp188_;
					ValaBlock* _tmp189_;
					ValaBlock* _tmp190_;
					ValaBlock* _tmp191_;
					gchar* _tmp192_;
					gchar* _tmp193_;
					ValaCCodeExpression* _tmp194_;
					ValaCCodeExpression* _tmp195_;
					ValaCCodeMemberAccess* _tmp196_;
					ValaCCodeMemberAccess* _tmp197_;
					_tmp185_ = m;
					_tmp186_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp185_);
					_tmp187_ = _tmp186_;
					_tmp188_ = vala_subroutine_get_body ((ValaSubroutine*) G_TYPE_CHECK_INSTANCE_CAST (_tmp187_, VALA_TYPE_METHOD, ValaMethod));
					_tmp189_ = _tmp188_;
					_tmp190_ = _vala_code_node_ref0 (_tmp189_);
					block = _tmp190_;
					_tmp191_ = block;
					_tmp192_ = g_strdup_printf ("_data%d_", vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp191_));
					_tmp193_ = _tmp192_;
					_tmp194_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp193_);
					_tmp195_ = _tmp194_;
					_tmp196_ = vala_ccode_member_access_new_pointer (_tmp195_, "_async_data_");
					_tmp197_ = _tmp196_;
					vala_set_delegate_target ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp197_);
					_vala_ccode_node_unref0 (_tmp197_);
					_vala_ccode_node_unref0 (_tmp195_);
					_g_free0 (_tmp193_);
					_vala_code_node_unref0 (block);
				} else {
					ValaCCodeIdentifier* _tmp198_;
					ValaCCodeIdentifier* _tmp199_;
					_tmp198_ = vala_ccode_identifier_new ("_data_");
					_tmp199_ = _tmp198_;
					vala_set_delegate_target ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp199_);
					_vala_ccode_node_unref0 (_tmp199_);
				}
			} else {
				gboolean _tmp200_ = FALSE;
				ValaExpression* _tmp201_;
				ValaExpression* _tmp202_;
				_tmp201_ = vala_member_access_get_inner (expr);
				_tmp202_ = _tmp201_;
				if (_tmp202_ != NULL) {
					gboolean _tmp203_;
					gboolean _tmp204_;
					_tmp203_ = vala_member_access_get_prototype_access (expr);
					_tmp204_ = _tmp203_;
					_tmp200_ = !_tmp204_;
				} else {
					_tmp200_ = FALSE;
				}
				if (_tmp200_) {
					ValaCCodeExpression* delegate_target = NULL;
					ValaExpression* _tmp205_;
					ValaExpression* _tmp206_;
					ValaCCodeExpression* _tmp207_;
					ValaDataType* _tmp208_;
					ValaDataType* _tmp209_;
					ValaDelegateType* _tmp210_;
					gboolean _tmp211_ = FALSE;
					gboolean _tmp212_ = FALSE;
					gboolean _tmp213_ = FALSE;
					ValaDataType* _tmp214_;
					ValaDataType* _tmp215_;
					gboolean _tmp216_;
					gboolean _tmp217_;
					ValaCCodeExpression* _tmp255_;
					_tmp205_ = vala_member_access_get_inner (expr);
					_tmp206_ = _tmp205_;
					_tmp207_ = vala_ccode_base_module_get_ccodenode ((ValaCCodeBaseModule*) self, _tmp206_);
					delegate_target = G_TYPE_CHECK_INSTANCE_CAST (_tmp207_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
					_tmp208_ = vala_expression_get_target_type ((ValaExpression*) expr);
					_tmp209_ = _tmp208_;
					_tmp210_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp209_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp209_) : NULL);
					_vala_code_node_unref0 (delegate_type);
					delegate_type = _tmp210_;
					_tmp214_ = vala_expression_get_value_type ((ValaExpression*) expr);
					_tmp215_ = _tmp214_;
					_tmp216_ = vala_data_type_get_value_owned (_tmp215_);
					_tmp217_ = _tmp216_;
					if (_tmp217_) {
						_tmp213_ = TRUE;
					} else {
						gboolean _tmp218_ = FALSE;
						ValaDelegateType* _tmp219_;
						_tmp219_ = delegate_type;
						if (_tmp219_ != NULL) {
							ValaDelegateType* _tmp220_;
							gboolean _tmp221_;
							gboolean _tmp222_;
							_tmp220_ = delegate_type;
							_tmp221_ = vala_delegate_type_get_is_called_once (_tmp220_);
							_tmp222_ = _tmp221_;
							_tmp218_ = _tmp222_;
						} else {
							_tmp218_ = FALSE;
						}
						_tmp213_ = _tmp218_;
					}
					if (_tmp213_) {
						ValaExpression* _tmp223_;
						ValaExpression* _tmp224_;
						ValaDataType* _tmp225_;
						ValaDataType* _tmp226_;
						ValaTypeSymbol* _tmp227_;
						ValaTypeSymbol* _tmp228_;
						_tmp223_ = vala_member_access_get_inner (expr);
						_tmp224_ = _tmp223_;
						_tmp225_ = vala_expression_get_value_type (_tmp224_);
						_tmp226_ = _tmp225_;
						_tmp227_ = vala_data_type_get_type_symbol (_tmp226_);
						_tmp228_ = _tmp227_;
						_tmp212_ = _tmp228_ != NULL;
					} else {
						_tmp212_ = FALSE;
					}
					if (_tmp212_) {
						ValaExpression* _tmp229_;
						ValaExpression* _tmp230_;
						ValaDataType* _tmp231_;
						ValaDataType* _tmp232_;
						ValaTypeSymbol* _tmp233_;
						ValaTypeSymbol* _tmp234_;
						_tmp229_ = vala_member_access_get_inner (expr);
						_tmp230_ = _tmp229_;
						_tmp231_ = vala_expression_get_value_type (_tmp230_);
						_tmp232_ = _tmp231_;
						_tmp233_ = vala_data_type_get_type_symbol (_tmp232_);
						_tmp234_ = _tmp233_;
						_tmp211_ = vala_is_reference_counting (_tmp234_);
					} else {
						_tmp211_ = FALSE;
					}
					if (_tmp211_) {
						ValaCCodeFunctionCall* ref_call = NULL;
						ValaExpression* _tmp235_;
						ValaExpression* _tmp236_;
						ValaDataType* _tmp237_;
						ValaDataType* _tmp238_;
						ValaSourceReference* _tmp239_;
						ValaSourceReference* _tmp240_;
						ValaCCodeExpression* _tmp241_;
						ValaCCodeExpression* _tmp242_;
						ValaCCodeFunctionCall* _tmp243_;
						ValaCCodeFunctionCall* _tmp244_;
						ValaCCodeFunctionCall* _tmp245_;
						ValaCCodeExpression* _tmp246_;
						ValaCCodeFunctionCall* _tmp247_;
						ValaCCodeExpression* _tmp248_;
						ValaExpression* _tmp249_;
						ValaExpression* _tmp250_;
						ValaDataType* _tmp251_;
						ValaDataType* _tmp252_;
						ValaCCodeExpression* _tmp253_;
						ValaCCodeExpression* _tmp254_;
						_tmp235_ = vala_member_access_get_inner (expr);
						_tmp236_ = _tmp235_;
						_tmp237_ = vala_expression_get_value_type (_tmp236_);
						_tmp238_ = _tmp237_;
						_tmp239_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
						_tmp240_ = _tmp239_;
						_tmp241_ = vala_ccode_base_module_get_dup_func_expression ((ValaCCodeBaseModule*) self, _tmp238_, _tmp240_, FALSE);
						_tmp242_ = _tmp241_;
						_tmp243_ = vala_ccode_function_call_new (_tmp242_);
						_tmp244_ = _tmp243_;
						_vala_ccode_node_unref0 (_tmp242_);
						ref_call = _tmp244_;
						_tmp245_ = ref_call;
						_tmp246_ = delegate_target;
						vala_ccode_function_call_add_argument (_tmp245_, _tmp246_);
						_tmp247_ = ref_call;
						_tmp248_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp247_);
						_vala_ccode_node_unref0 (delegate_target);
						delegate_target = _tmp248_;
						_tmp249_ = vala_member_access_get_inner (expr);
						_tmp250_ = _tmp249_;
						_tmp251_ = vala_expression_get_value_type (_tmp250_);
						_tmp252_ = _tmp251_;
						_tmp253_ = vala_ccode_base_module_get_destroy_func_expression ((ValaCCodeBaseModule*) self, _tmp252_, FALSE);
						_tmp254_ = _tmp253_;
						vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, _tmp254_);
						_vala_ccode_node_unref0 (_tmp254_);
						_vala_ccode_node_unref0 (ref_call);
					}
					_tmp255_ = delegate_target;
					vala_set_delegate_target ((ValaExpression*) expr, _tmp255_);
					_vala_ccode_node_unref0 (delegate_target);
				}
			}
		}
		_vala_code_node_unref0 (m);
	} else {
		ValaSymbol* _tmp256_;
		ValaSymbol* _tmp257_;
		_tmp256_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
		_tmp257_ = _tmp256_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp257_, VALA_TYPE_ARRAY_LENGTH_FIELD)) {
			ValaExpression* _tmp258_;
			ValaExpression* _tmp259_;
			ValaCCodeExpression* _tmp260_;
			ValaCCodeExpression* _tmp261_;
			_tmp258_ = vala_member_access_get_inner (expr);
			_tmp259_ = _tmp258_;
			_tmp260_ = vala_ccode_base_module_get_array_length_cexpression ((ValaCCodeBaseModule*) self, _tmp259_, 1);
			_tmp261_ = _tmp260_;
			vala_set_cvalue ((ValaExpression*) expr, _tmp261_);
			_vala_ccode_node_unref0 (_tmp261_);
		} else {
			ValaSymbol* _tmp262_;
			ValaSymbol* _tmp263_;
			_tmp262_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
			_tmp263_ = _tmp262_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp263_, VALA_TYPE_DELEGATE_TARGET_FIELD)) {
				ValaCCodeExpression* delegate_target_destroy_notify = NULL;
				ValaCCodeExpression* _tmp264_ = NULL;
				ValaExpression* _tmp265_;
				ValaExpression* _tmp266_;
				ValaCCodeExpression* _tmp267_ = NULL;
				ValaCCodeExpression* _tmp268_;
				_tmp265_ = vala_member_access_get_inner (expr);
				_tmp266_ = _tmp265_;
				_tmp268_ = vala_ccode_base_module_get_delegate_target_cexpression ((ValaCCodeBaseModule*) self, _tmp266_, &_tmp267_);
				_vala_ccode_node_unref0 (delegate_target_destroy_notify);
				delegate_target_destroy_notify = _tmp267_;
				_tmp264_ = _tmp268_;
				if (_tmp264_ == NULL) {
					ValaCCodeConstant* _tmp269_;
					_tmp269_ = vala_ccode_constant_new ("NULL");
					_vala_ccode_node_unref0 (_tmp264_);
					_tmp264_ = (ValaCCodeExpression*) _tmp269_;
				}
				vala_set_cvalue ((ValaExpression*) expr, _tmp264_);
				_vala_ccode_node_unref0 (_tmp264_);
				_vala_ccode_node_unref0 (delegate_target_destroy_notify);
			} else {
				ValaSymbol* _tmp270_;
				ValaSymbol* _tmp271_;
				_tmp270_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
				_tmp271_ = _tmp270_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp271_, VALA_TYPE_DELEGATE_DESTROY_FIELD)) {
					ValaCCodeExpression* delegate_target_destroy_notify = NULL;
					ValaExpression* _tmp272_;
					ValaExpression* _tmp273_;
					ValaCCodeExpression* _tmp274_ = NULL;
					ValaCCodeExpression* _tmp275_;
					ValaCCodeExpression* _tmp276_;
					ValaCCodeExpression* _tmp277_ = NULL;
					ValaCCodeExpression* _tmp278_;
					ValaCCodeExpression* _tmp279_;
					_tmp272_ = vala_member_access_get_inner (expr);
					_tmp273_ = _tmp272_;
					_tmp275_ = vala_ccode_base_module_get_delegate_target_cexpression ((ValaCCodeBaseModule*) self, _tmp273_, &_tmp274_);
					_vala_ccode_node_unref0 (delegate_target_destroy_notify);
					delegate_target_destroy_notify = _tmp274_;
					_tmp276_ = _tmp275_;
					_vala_ccode_node_unref0 (_tmp276_);
					_tmp278_ = delegate_target_destroy_notify;
					_tmp279_ = _vala_ccode_node_ref0 (_tmp278_);
					_tmp277_ = _tmp279_;
					if (_tmp277_ == NULL) {
						ValaCCodeConstant* _tmp280_;
						_tmp280_ = vala_ccode_constant_new ("NULL");
						_vala_ccode_node_unref0 (_tmp277_);
						_tmp277_ = (ValaCCodeExpression*) _tmp280_;
					}
					vala_set_cvalue ((ValaExpression*) expr, _tmp277_);
					_vala_ccode_node_unref0 (_tmp277_);
					_vala_ccode_node_unref0 (delegate_target_destroy_notify);
				} else {
					ValaSymbol* _tmp281_;
					ValaSymbol* _tmp282_;
					_tmp281_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
					_tmp282_ = _tmp281_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp282_, VALA_TYPE_GENERIC_DUP_FIELD)) {
						ValaExpression* _tmp283_;
						ValaExpression* _tmp284_;
						ValaDataType* _tmp285_;
						ValaDataType* _tmp286_;
						ValaSourceReference* _tmp287_;
						ValaSourceReference* _tmp288_;
						ValaCCodeExpression* _tmp289_;
						ValaCCodeExpression* _tmp290_;
						_tmp283_ = vala_member_access_get_inner (expr);
						_tmp284_ = _tmp283_;
						_tmp285_ = vala_expression_get_value_type (_tmp284_);
						_tmp286_ = _tmp285_;
						_tmp287_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
						_tmp288_ = _tmp287_;
						_tmp289_ = vala_ccode_base_module_get_dup_func_expression ((ValaCCodeBaseModule*) self, _tmp286_, _tmp288_, FALSE);
						_tmp290_ = _tmp289_;
						vala_set_cvalue ((ValaExpression*) expr, _tmp290_);
						_vala_ccode_node_unref0 (_tmp290_);
					} else {
						ValaSymbol* _tmp291_;
						ValaSymbol* _tmp292_;
						_tmp291_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
						_tmp292_ = _tmp291_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp292_, VALA_TYPE_GENERIC_DESTROY_FIELD)) {
							ValaExpression* _tmp293_;
							ValaExpression* _tmp294_;
							ValaDataType* _tmp295_;
							ValaDataType* _tmp296_;
							ValaCCodeExpression* _tmp297_;
							ValaCCodeExpression* _tmp298_;
							_tmp293_ = vala_member_access_get_inner (expr);
							_tmp294_ = _tmp293_;
							_tmp295_ = vala_expression_get_value_type (_tmp294_);
							_tmp296_ = _tmp295_;
							_tmp297_ = vala_ccode_base_module_get_destroy_func_expression ((ValaCCodeBaseModule*) self, _tmp296_, FALSE);
							_tmp298_ = _tmp297_;
							vala_set_cvalue ((ValaExpression*) expr, _tmp298_);
							_vala_ccode_node_unref0 (_tmp298_);
						} else {
							ValaSymbol* _tmp299_;
							ValaSymbol* _tmp300_;
							_tmp299_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
							_tmp300_ = _tmp299_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp300_, VALA_TYPE_FIELD)) {
								ValaField* field = NULL;
								ValaSymbol* _tmp301_;
								ValaSymbol* _tmp302_;
								ValaField* _tmp303_;
								gboolean _tmp304_;
								gboolean _tmp305_;
								_tmp301_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
								_tmp302_ = _tmp301_;
								_tmp303_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp302_, VALA_TYPE_FIELD, ValaField));
								field = _tmp303_;
								_tmp304_ = vala_expression_get_lvalue ((ValaExpression*) expr);
								_tmp305_ = _tmp304_;
								if (_tmp305_) {
									ValaTargetValue* _tmp306_ = NULL;
									ValaExpression* _tmp307_;
									ValaExpression* _tmp308_;
									ValaField* _tmp313_;
									ValaTargetValue* _tmp314_;
									ValaTargetValue* _tmp315_;
									_tmp307_ = vala_member_access_get_inner (expr);
									_tmp308_ = _tmp307_;
									if (_tmp308_ != NULL) {
										ValaExpression* _tmp309_;
										ValaExpression* _tmp310_;
										ValaTargetValue* _tmp311_;
										ValaTargetValue* _tmp312_;
										_tmp309_ = vala_member_access_get_inner (expr);
										_tmp310_ = _tmp309_;
										_tmp311_ = vala_expression_get_target_value (_tmp310_);
										_tmp312_ = _tmp311_;
										_tmp306_ = _tmp312_;
									} else {
										_tmp306_ = NULL;
									}
									_tmp313_ = field;
									_tmp314_ = vala_ccode_base_module_get_field_cvalue ((ValaCCodeBaseModule*) self, _tmp313_, _tmp306_);
									_tmp315_ = _tmp314_;
									vala_expression_set_target_value ((ValaExpression*) expr, _tmp315_);
									_vala_target_value_unref0 (_tmp315_);
								} else {
									ValaTargetValue* _tmp316_ = NULL;
									ValaExpression* _tmp317_;
									ValaExpression* _tmp318_;
									ValaField* _tmp323_;
									ValaTargetValue* _tmp324_;
									ValaTargetValue* _tmp325_;
									_tmp317_ = vala_member_access_get_inner (expr);
									_tmp318_ = _tmp317_;
									if (_tmp318_ != NULL) {
										ValaExpression* _tmp319_;
										ValaExpression* _tmp320_;
										ValaTargetValue* _tmp321_;
										ValaTargetValue* _tmp322_;
										_tmp319_ = vala_member_access_get_inner (expr);
										_tmp320_ = _tmp319_;
										_tmp321_ = vala_expression_get_target_value (_tmp320_);
										_tmp322_ = _tmp321_;
										_tmp316_ = _tmp322_;
									} else {
										_tmp316_ = NULL;
									}
									_tmp323_ = field;
									_tmp324_ = vala_code_generator_load_field ((ValaCodeGenerator*) self, _tmp323_, _tmp316_, (ValaExpression*) expr);
									_tmp325_ = _tmp324_;
									vala_expression_set_target_value ((ValaExpression*) expr, _tmp325_);
									_vala_target_value_unref0 (_tmp325_);
								}
								_vala_code_node_unref0 (field);
							} else {
								ValaSymbol* _tmp326_;
								ValaSymbol* _tmp327_;
								_tmp326_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
								_tmp327_ = _tmp326_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp327_, VALA_TYPE_ENUM_VALUE)) {
									ValaEnumValue* ev = NULL;
									ValaSymbol* _tmp328_;
									ValaSymbol* _tmp329_;
									ValaEnumValue* _tmp330_;
									ValaEnumValue* _tmp331_;
									ValaSymbol* _tmp332_;
									ValaSymbol* _tmp333_;
									ValaCCodeFile* _tmp334_;
									ValaEnumValue* _tmp335_;
									gchar* _tmp336_;
									gchar* _tmp337_;
									ValaCCodeConstant* _tmp338_;
									ValaCCodeConstant* _tmp339_;
									_tmp328_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
									_tmp329_ = _tmp328_;
									_tmp330_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp329_, VALA_TYPE_ENUM_VALUE, ValaEnumValue));
									ev = _tmp330_;
									_tmp331_ = ev;
									_tmp332_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp331_);
									_tmp333_ = _tmp332_;
									_tmp334_ = ((ValaCCodeBaseModule*) self)->cfile;
									vala_ccode_base_module_generate_enum_declaration ((ValaCCodeBaseModule*) self, G_TYPE_CHECK_INSTANCE_CAST (_tmp333_, VALA_TYPE_ENUM, ValaEnum), _tmp334_);
									_tmp335_ = ev;
									_tmp336_ = vala_get_ccode_name ((ValaCodeNode*) _tmp335_);
									_tmp337_ = _tmp336_;
									_tmp338_ = vala_ccode_constant_new (_tmp337_);
									_tmp339_ = _tmp338_;
									vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp339_);
									_vala_ccode_node_unref0 (_tmp339_);
									_g_free0 (_tmp337_);
									_vala_code_node_unref0 (ev);
								} else {
									ValaSymbol* _tmp340_;
									ValaSymbol* _tmp341_;
									_tmp340_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
									_tmp341_ = _tmp340_;
									if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp341_, VALA_TYPE_CONSTANT)) {
										ValaConstant* c = NULL;
										ValaSymbol* _tmp342_;
										ValaSymbol* _tmp343_;
										ValaConstant* _tmp344_;
										gboolean _tmp345_ = FALSE;
										gboolean _tmp346_ = FALSE;
										ValaConstant* _tmp347_;
										ValaSourceReference* _tmp348_;
										ValaSourceReference* _tmp349_;
										ValaConstant* _tmp361_;
										ValaCCodeFile* _tmp362_;
										gchar* fn = NULL;
										ValaConstant* _tmp363_;
										gchar* _tmp364_;
										const gchar* _tmp365_;
										ValaArrayType* _tmp412_;
										_tmp342_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
										_tmp343_ = _tmp342_;
										_tmp344_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp343_, VALA_TYPE_CONSTANT, ValaConstant));
										c = _tmp344_;
										_tmp347_ = c;
										_tmp348_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp347_);
										_tmp349_ = _tmp348_;
										if (_tmp349_ != NULL) {
											ValaSourceReference* _tmp350_;
											ValaSourceReference* _tmp351_;
											_tmp350_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
											_tmp351_ = _tmp350_;
											_tmp346_ = _tmp351_ != NULL;
										} else {
											_tmp346_ = FALSE;
										}
										if (_tmp346_) {
											ValaConstant* _tmp352_;
											ValaSourceReference* _tmp353_;
											ValaSourceReference* _tmp354_;
											ValaSourceFile* _tmp355_;
											ValaSourceFile* _tmp356_;
											ValaSourceReference* _tmp357_;
											ValaSourceReference* _tmp358_;
											ValaSourceFile* _tmp359_;
											ValaSourceFile* _tmp360_;
											_tmp352_ = c;
											_tmp353_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp352_);
											_tmp354_ = _tmp353_;
											_tmp355_ = vala_source_reference_get_file (_tmp354_);
											_tmp356_ = _tmp355_;
											_tmp357_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
											_tmp358_ = _tmp357_;
											_tmp359_ = vala_source_reference_get_file (_tmp358_);
											_tmp360_ = _tmp359_;
											_tmp345_ = _tmp356_ == _tmp360_;
										} else {
											_tmp345_ = FALSE;
										}
										_tmp361_ = c;
										_tmp362_ = ((ValaCCodeBaseModule*) self)->cfile;
										vala_ccode_base_module_generate_constant_declaration ((ValaCCodeBaseModule*) self, _tmp361_, _tmp362_, _tmp345_);
										_tmp363_ = c;
										_tmp364_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp363_);
										fn = _tmp364_;
										_tmp365_ = fn;
										if (g_strcmp0 (_tmp365_, "GLib.Log.FILE") == 0) {
											gchar* s = NULL;
											ValaSourceReference* _tmp366_;
											ValaSourceReference* _tmp367_;
											ValaSourceFile* _tmp368_;
											ValaSourceFile* _tmp369_;
											const gchar* _tmp370_;
											const gchar* _tmp371_;
											gchar* _tmp372_;
											const gchar* _tmp373_;
											gchar* _tmp374_;
											gchar* _tmp375_;
											ValaCCodeConstant* _tmp376_;
											ValaCCodeConstant* _tmp377_;
											_tmp366_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
											_tmp367_ = _tmp366_;
											_tmp368_ = vala_source_reference_get_file (_tmp367_);
											_tmp369_ = _tmp368_;
											_tmp370_ = vala_source_file_get_filename (_tmp369_);
											_tmp371_ = _tmp370_;
											_tmp372_ = g_path_get_basename (_tmp371_);
											s = _tmp372_;
											_tmp373_ = s;
											_tmp374_ = g_strdup_printf ("\"%s\"", _tmp373_);
											_tmp375_ = _tmp374_;
											_tmp376_ = vala_ccode_constant_new (_tmp375_);
											_tmp377_ = _tmp376_;
											vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp377_);
											_vala_ccode_node_unref0 (_tmp377_);
											_g_free0 (_tmp375_);
											_g_free0 (s);
										} else {
											const gchar* _tmp378_;
											_tmp378_ = fn;
											if (g_strcmp0 (_tmp378_, "GLib.Log.LINE") == 0) {
												gint i = 0;
												ValaSourceReference* _tmp379_;
												ValaSourceReference* _tmp380_;
												ValaSourceLocation _tmp381_ = {0};
												ValaSourceLocation _tmp382_;
												gchar* _tmp383_;
												gchar* _tmp384_;
												ValaCCodeConstant* _tmp385_;
												ValaCCodeConstant* _tmp386_;
												_tmp379_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
												_tmp380_ = _tmp379_;
												vala_source_reference_get_begin (_tmp380_, &_tmp381_);
												_tmp382_ = _tmp381_;
												i = _tmp382_.line;
												_tmp383_ = g_strdup_printf ("%d", i);
												_tmp384_ = _tmp383_;
												_tmp385_ = vala_ccode_constant_new (_tmp384_);
												_tmp386_ = _tmp385_;
												vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp386_);
												_vala_ccode_node_unref0 (_tmp386_);
												_g_free0 (_tmp384_);
											} else {
												const gchar* _tmp387_;
												_tmp387_ = fn;
												if (g_strcmp0 (_tmp387_, "GLib.Log.METHOD") == 0) {
													gchar* s = NULL;
													gchar* _tmp388_;
													ValaMethod* _tmp389_;
													ValaMethod* _tmp390_;
													const gchar* _tmp394_;
													gchar* _tmp395_;
													gchar* _tmp396_;
													ValaCCodeConstant* _tmp397_;
													ValaCCodeConstant* _tmp398_;
													_tmp388_ = g_strdup ("");
													s = _tmp388_;
													_tmp389_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
													_tmp390_ = _tmp389_;
													if (_tmp390_ != NULL) {
														ValaMethod* _tmp391_;
														ValaMethod* _tmp392_;
														gchar* _tmp393_;
														_tmp391_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
														_tmp392_ = _tmp391_;
														_tmp393_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp392_);
														_g_free0 (s);
														s = _tmp393_;
													}
													_tmp394_ = s;
													_tmp395_ = g_strdup_printf ("\"%s\"", _tmp394_);
													_tmp396_ = _tmp395_;
													_tmp397_ = vala_ccode_constant_new (_tmp396_);
													_tmp398_ = _tmp397_;
													vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp398_);
													_vala_ccode_node_unref0 (_tmp398_);
													_g_free0 (_tmp396_);
													_g_free0 (s);
												} else {
													ValaConstant* _tmp399_;
													ValaDataType* _tmp400_;
													ValaDataType* _tmp401_;
													_tmp399_ = c;
													_tmp400_ = vala_constant_get_type_reference (_tmp399_);
													_tmp401_ = _tmp400_;
													if (vala_data_type_is_non_null_simple_type (_tmp401_)) {
														ValaConstant* _tmp402_;
														gchar* _tmp403_;
														gchar* _tmp404_;
														ValaCCodeConstant* _tmp405_;
														ValaCCodeConstant* _tmp406_;
														_tmp402_ = c;
														_tmp403_ = vala_get_ccode_name ((ValaCodeNode*) _tmp402_);
														_tmp404_ = _tmp403_;
														_tmp405_ = vala_ccode_constant_new (_tmp404_);
														_tmp406_ = _tmp405_;
														vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp406_);
														_vala_ccode_node_unref0 (_tmp406_);
														_g_free0 (_tmp404_);
													} else {
														ValaConstant* _tmp407_;
														gchar* _tmp408_;
														gchar* _tmp409_;
														ValaCCodeConstantIdentifier* _tmp410_;
														ValaCCodeConstantIdentifier* _tmp411_;
														_tmp407_ = c;
														_tmp408_ = vala_get_ccode_name ((ValaCodeNode*) _tmp407_);
														_tmp409_ = _tmp408_;
														_tmp410_ = vala_ccode_constant_identifier_new (_tmp409_);
														_tmp411_ = _tmp410_;
														vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp411_);
														_vala_ccode_node_unref0 (_tmp411_);
														_g_free0 (_tmp409_);
													}
												}
											}
										}
										_tmp412_ = array_type;
										if (_tmp412_ != NULL) {
											gchar* sub = NULL;
											gchar* _tmp413_;
											ValaTargetValue* _tmp441_;
											ValaTargetValue* _tmp442_;
											_tmp413_ = g_strdup ("");
											sub = _tmp413_;
											{
												gint i = 0;
												i = 0;
												{
													gboolean _tmp414_ = FALSE;
													_tmp414_ = TRUE;
													while (TRUE) {
														ValaArrayType* _tmp416_;
														gint _tmp417_;
														gint _tmp418_;
														ValaCCodeFunctionCall* ccall = NULL;
														ValaCodeContext* _tmp419_;
														ValaCodeContext* _tmp420_;
														ValaProfile _tmp421_;
														ValaProfile _tmp422_;
														ValaCCodeFunctionCall* _tmp429_;
														ValaConstant* _tmp430_;
														gchar* _tmp431_;
														gchar* _tmp432_;
														const gchar* _tmp433_;
														gchar* _tmp434_;
														gchar* _tmp435_;
														ValaCCodeIdentifier* _tmp436_;
														ValaCCodeIdentifier* _tmp437_;
														ValaCCodeFunctionCall* _tmp438_;
														const gchar* _tmp439_;
														gchar* _tmp440_;
														if (!_tmp414_) {
															gint _tmp415_;
															_tmp415_ = i;
															i = _tmp415_ + 1;
														}
														_tmp414_ = FALSE;
														_tmp416_ = array_type;
														_tmp417_ = vala_array_type_get_rank (_tmp416_);
														_tmp418_ = _tmp417_;
														if (!(i < _tmp418_)) {
															break;
														}
														_tmp419_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
														_tmp420_ = _tmp419_;
														_tmp421_ = vala_code_context_get_profile (_tmp420_);
														_tmp422_ = _tmp421_;
														if (_tmp422_ == VALA_PROFILE_POSIX) {
															ValaCCodeIdentifier* _tmp423_;
															ValaCCodeIdentifier* _tmp424_;
															ValaCCodeFunctionCall* _tmp425_;
															((ValaCCodeBaseModule*) self)->requires_array_n_elements = TRUE;
															_tmp423_ = vala_ccode_identifier_new ("VALA_N_ELEMENTS");
															_tmp424_ = _tmp423_;
															_tmp425_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp424_);
															_vala_ccode_node_unref0 (ccall);
															ccall = _tmp425_;
															_vala_ccode_node_unref0 (_tmp424_);
														} else {
															ValaCCodeIdentifier* _tmp426_;
															ValaCCodeIdentifier* _tmp427_;
															ValaCCodeFunctionCall* _tmp428_;
															_tmp426_ = vala_ccode_identifier_new ("G_N_ELEMENTS");
															_tmp427_ = _tmp426_;
															_tmp428_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp427_);
															_vala_ccode_node_unref0 (ccall);
															ccall = _tmp428_;
															_vala_ccode_node_unref0 (_tmp427_);
														}
														_tmp429_ = ccall;
														_tmp430_ = c;
														_tmp431_ = vala_get_ccode_name ((ValaCodeNode*) _tmp430_);
														_tmp432_ = _tmp431_;
														_tmp433_ = sub;
														_tmp434_ = g_strconcat (_tmp432_, _tmp433_, NULL);
														_tmp435_ = _tmp434_;
														_tmp436_ = vala_ccode_identifier_new (_tmp435_);
														_tmp437_ = _tmp436_;
														vala_ccode_function_call_add_argument (_tmp429_, (ValaCCodeExpression*) _tmp437_);
														_vala_ccode_node_unref0 (_tmp437_);
														_g_free0 (_tmp435_);
														_g_free0 (_tmp432_);
														_tmp438_ = ccall;
														vala_append_array_length ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp438_);
														_tmp439_ = sub;
														_tmp440_ = g_strconcat (_tmp439_, "[0]", NULL);
														_g_free0 (sub);
														sub = _tmp440_;
														_vala_ccode_node_unref0 (ccall);
													}
												}
											}
											_tmp441_ = vala_expression_get_target_value ((ValaExpression*) expr);
											_tmp442_ = _tmp441_;
											G_TYPE_CHECK_INSTANCE_CAST (_tmp442_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->non_null = TRUE;
											_g_free0 (sub);
										}
										_g_free0 (fn);
										_vala_code_node_unref0 (c);
									} else {
										ValaSymbol* _tmp443_;
										ValaSymbol* _tmp444_;
										_tmp443_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
										_tmp444_ = _tmp443_;
										if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp444_, VALA_TYPE_PROPERTY)) {
											ValaProperty* prop = NULL;
											ValaSymbol* _tmp445_;
											ValaSymbol* _tmp446_;
											ValaProperty* _tmp447_;
											ValaProperty* _tmp448_;
											gboolean _tmp462_ = FALSE;
											ValaCCodeExpression* _tmp463_;
											ValaProperty* base_prop = NULL;
											ValaProperty* _tmp475_;
											ValaProperty* _tmp476_;
											ValaProperty* _tmp477_;
											ValaProperty* _tmp478_;
											gboolean _tmp488_ = FALSE;
											ValaExpression* _tmp489_;
											ValaExpression* _tmp490_;
											ValaProperty* _tmp871_;
											ValaPropertyAccessor* _tmp872_;
											ValaPropertyAccessor* _tmp873_;
											ValaDataType* _tmp874_;
											ValaDataType* _tmp875_;
											ValaTargetValue* _tmp891_;
											ValaTargetValue* _tmp892_;
											ValaTargetValue* _tmp893_;
											ValaTargetValue* _tmp894_;
											_tmp445_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
											_tmp446_ = _tmp445_;
											_tmp447_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp446_, VALA_TYPE_PROPERTY, ValaProperty));
											prop = _tmp447_;
											_tmp448_ = prop;
											if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp448_, VALA_TYPE_DYNAMIC_PROPERTY)) {
												ValaProperty* _tmp449_;
												ValaPropertyAccessor* _tmp450_;
												ValaPropertyAccessor* _tmp451_;
												ValaCCodeFile* _tmp452_;
												gboolean _tmp453_ = FALSE;
												ValaProperty* _tmp454_;
												gboolean _tmp455_;
												gboolean _tmp456_;
												_tmp449_ = prop;
												_tmp450_ = vala_property_get_get_accessor (_tmp449_);
												_tmp451_ = _tmp450_;
												_tmp452_ = ((ValaCCodeBaseModule*) self)->cfile;
												vala_ccode_base_module_generate_property_accessor_declaration ((ValaCCodeBaseModule*) self, _tmp451_, _tmp452_);
												_tmp454_ = prop;
												_tmp455_ = vala_symbol_get_external ((ValaSymbol*) _tmp454_);
												_tmp456_ = _tmp455_;
												if (!_tmp456_) {
													ValaProperty* _tmp457_;
													gboolean _tmp458_;
													gboolean _tmp459_;
													_tmp457_ = prop;
													_tmp458_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp457_);
													_tmp459_ = _tmp458_;
													_tmp453_ = _tmp459_;
												} else {
													_tmp453_ = FALSE;
												}
												if (_tmp453_) {
													ValaProperty* _tmp460_;
													_tmp460_ = prop;
													if (vala_ccode_base_module_add_generated_external_symbol ((ValaCCodeBaseModule*) self, (ValaSymbol*) _tmp460_)) {
														ValaProperty* _tmp461_;
														_tmp461_ = prop;
														vala_code_visitor_visit_property ((ValaCodeVisitor*) self, _tmp461_);
													}
												}
											}
											_tmp463_ = pub_inst;
											if (_tmp463_ == NULL) {
												ValaProperty* _tmp464_;
												ValaMemberBinding _tmp465_;
												ValaMemberBinding _tmp466_;
												_tmp464_ = prop;
												_tmp465_ = vala_property_get_binding (_tmp464_);
												_tmp466_ = _tmp465_;
												_tmp462_ = _tmp466_ == VALA_MEMBER_BINDING_INSTANCE;
											} else {
												_tmp462_ = FALSE;
											}
											if (_tmp462_) {
												ValaProperty* _tmp467_;
												ValaSourceReference* _tmp468_;
												ValaSourceReference* _tmp469_;
												ValaProperty* _tmp470_;
												gchar* _tmp471_;
												gchar* _tmp472_;
												ValaCCodeInvalidExpression* _tmp473_;
												ValaCCodeInvalidExpression* _tmp474_;
												_tmp467_ = prop;
												_tmp468_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp467_);
												_tmp469_ = _tmp468_;
												_tmp470_ = prop;
												_tmp471_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp470_);
												_tmp472_ = _tmp471_;
												vala_report_error (_tmp469_, "Invalid access to instance member `%s'", _tmp472_);
												_g_free0 (_tmp472_);
												_tmp473_ = vala_ccode_invalid_expression_new ();
												_tmp474_ = _tmp473_;
												vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp474_);
												_vala_ccode_node_unref0 (_tmp474_);
												_vala_code_node_unref0 (prop);
												_vala_code_node_unref0 (delegate_type);
												_vala_code_node_unref0 (array_type);
												_vala_ccode_node_unref0 (pub_inst);
												return;
											}
											_tmp475_ = prop;
											base_prop = _tmp475_;
											_tmp476_ = prop;
											_tmp477_ = vala_property_get_base_property (_tmp476_);
											_tmp478_ = _tmp477_;
											if (_tmp478_ != NULL) {
												ValaProperty* _tmp479_;
												ValaProperty* _tmp480_;
												ValaProperty* _tmp481_;
												_tmp479_ = prop;
												_tmp480_ = vala_property_get_base_property (_tmp479_);
												_tmp481_ = _tmp480_;
												base_prop = _tmp481_;
											} else {
												ValaProperty* _tmp482_;
												ValaProperty* _tmp483_;
												ValaProperty* _tmp484_;
												_tmp482_ = prop;
												_tmp483_ = vala_property_get_base_interface_property (_tmp482_);
												_tmp484_ = _tmp483_;
												if (_tmp484_ != NULL) {
													ValaProperty* _tmp485_;
													ValaProperty* _tmp486_;
													ValaProperty* _tmp487_;
													_tmp485_ = prop;
													_tmp486_ = vala_property_get_base_interface_property (_tmp485_);
													_tmp487_ = _tmp486_;
													base_prop = _tmp487_;
												}
											}
											_tmp489_ = vala_member_access_get_inner (expr);
											_tmp490_ = _tmp489_;
											if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp490_, VALA_TYPE_BASE_ACCESS)) {
												gboolean _tmp491_ = FALSE;
												ValaProperty* _tmp492_;
												gboolean _tmp493_;
												gboolean _tmp494_;
												_tmp492_ = base_prop;
												_tmp493_ = vala_property_get_is_abstract (_tmp492_);
												_tmp494_ = _tmp493_;
												if (_tmp494_) {
													_tmp491_ = TRUE;
												} else {
													ValaProperty* _tmp495_;
													gboolean _tmp496_;
													gboolean _tmp497_;
													_tmp495_ = base_prop;
													_tmp496_ = vala_property_get_is_virtual (_tmp495_);
													_tmp497_ = _tmp496_;
													_tmp491_ = _tmp497_;
												}
												_tmp488_ = _tmp491_;
											} else {
												_tmp488_ = FALSE;
											}
											if (_tmp488_) {
												ValaCCodeExpression* vcast = NULL;
												ValaProperty* _tmp498_;
												ValaSymbol* _tmp499_;
												ValaSymbol* _tmp500_;
												ValaCCodeExpression* _tmp527_;
												vcast = NULL;
												_tmp498_ = base_prop;
												_tmp499_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp498_);
												_tmp500_ = _tmp499_;
												if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp500_, VALA_TYPE_CLASS)) {
													ValaClass* base_class = NULL;
													ValaProperty* _tmp501_;
													ValaSymbol* _tmp502_;
													ValaSymbol* _tmp503_;
													ValaClass* _tmp504_;
													gchar* _tmp505_;
													gchar* _tmp506_;
													ValaCCodeIdentifier* _tmp507_;
													ValaCCodeIdentifier* _tmp508_;
													ValaCCodeFunctionCall* _tmp509_;
													ValaCCodeExpression* _tmp510_;
													ValaClass* _tmp511_;
													ValaClass* _tmp512_;
													gchar* _tmp513_;
													gchar* _tmp514_;
													gchar* _tmp515_;
													gchar* _tmp516_;
													ValaCCodeIdentifier* _tmp517_;
													ValaCCodeIdentifier* _tmp518_;
													_tmp501_ = base_prop;
													_tmp502_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp501_);
													_tmp503_ = _tmp502_;
													base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp503_, VALA_TYPE_CLASS, ValaClass);
													_tmp504_ = base_class;
													_tmp505_ = vala_get_ccode_class_type_function (_tmp504_);
													_tmp506_ = _tmp505_;
													_tmp507_ = vala_ccode_identifier_new (_tmp506_);
													_tmp508_ = _tmp507_;
													_tmp509_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp508_);
													_vala_ccode_node_unref0 (vcast);
													vcast = (ValaCCodeExpression*) _tmp509_;
													_vala_ccode_node_unref0 (_tmp508_);
													_g_free0 (_tmp506_);
													_tmp510_ = vcast;
													_tmp511_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
													_tmp512_ = _tmp511_;
													_tmp513_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp512_, NULL);
													_tmp514_ = _tmp513_;
													_tmp515_ = g_strdup_printf ("%s_parent_class", _tmp514_);
													_tmp516_ = _tmp515_;
													_tmp517_ = vala_ccode_identifier_new (_tmp516_);
													_tmp518_ = _tmp517_;
													vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp510_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp518_);
													_vala_ccode_node_unref0 (_tmp518_);
													_g_free0 (_tmp516_);
													_g_free0 (_tmp514_);
												} else {
													ValaProperty* _tmp519_;
													ValaSymbol* _tmp520_;
													ValaSymbol* _tmp521_;
													_tmp519_ = base_prop;
													_tmp520_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp519_);
													_tmp521_ = _tmp520_;
													if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp521_, VALA_TYPE_INTERFACE)) {
														ValaInterface* base_iface = NULL;
														ValaProperty* _tmp522_;
														ValaSymbol* _tmp523_;
														ValaSymbol* _tmp524_;
														ValaInterface* _tmp525_;
														ValaCCodeExpression* _tmp526_;
														_tmp522_ = base_prop;
														_tmp523_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp522_);
														_tmp524_ = _tmp523_;
														base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp524_, VALA_TYPE_INTERFACE, ValaInterface);
														_tmp525_ = base_iface;
														_tmp526_ = vala_ccode_base_module_get_this_interface_cexpression ((ValaCCodeBaseModule*) self, _tmp525_, NULL);
														_vala_ccode_node_unref0 (vcast);
														vcast = _tmp526_;
													}
												}
												_tmp527_ = vcast;
												if (_tmp527_ != NULL) {
													ValaCCodeFunctionCall* ccall = NULL;
													ValaCCodeExpression* _tmp528_;
													ValaProperty* _tmp529_;
													const gchar* _tmp530_;
													const gchar* _tmp531_;
													gchar* _tmp532_;
													gchar* _tmp533_;
													ValaCCodeMemberAccess* _tmp534_;
													ValaCCodeMemberAccess* _tmp535_;
													ValaCCodeFunctionCall* _tmp536_;
													ValaCCodeFunctionCall* _tmp537_;
													ValaCCodeFunctionCall* _tmp538_;
													ValaExpression* _tmp539_;
													ValaExpression* _tmp540_;
													ValaCCodeExpression* _tmp541_;
													ValaProperty* _tmp542_;
													ValaDataType* _tmp543_;
													ValaDataType* _tmp544_;
													_tmp528_ = vcast;
													_tmp529_ = prop;
													_tmp530_ = vala_symbol_get_name ((ValaSymbol*) _tmp529_);
													_tmp531_ = _tmp530_;
													_tmp532_ = g_strdup_printf ("get_%s", _tmp531_);
													_tmp533_ = _tmp532_;
													_tmp534_ = vala_ccode_member_access_new_pointer (_tmp528_, _tmp533_);
													_tmp535_ = _tmp534_;
													_tmp536_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp535_);
													_tmp537_ = _tmp536_;
													_vala_ccode_node_unref0 (_tmp535_);
													_g_free0 (_tmp533_);
													ccall = _tmp537_;
													_tmp538_ = ccall;
													_tmp539_ = vala_member_access_get_inner (expr);
													_tmp540_ = _tmp539_;
													_tmp541_ = vala_get_cvalue (_tmp540_);
													vala_ccode_function_call_add_argument (_tmp538_, _tmp541_);
													_tmp542_ = prop;
													_tmp543_ = vala_property_get_property_type (_tmp542_);
													_tmp544_ = _tmp543_;
													if (vala_data_type_is_real_non_null_struct_type (_tmp544_)) {
														ValaGLibValue* temp_value = NULL;
														ValaProperty* _tmp545_;
														ValaPropertyAccessor* _tmp546_;
														ValaPropertyAccessor* _tmp547_;
														ValaDataType* _tmp548_;
														ValaDataType* _tmp549_;
														ValaTargetValue* _tmp550_;
														ValaGLibValue* _tmp551_;
														ValaTargetValue* _tmp552_;
														ValaTargetValue* _tmp553_;
														ValaCCodeExpression* ctemp = NULL;
														ValaGLibValue* _tmp554_;
														ValaCCodeExpression* _tmp555_;
														ValaCCodeExpression* _tmp556_;
														ValaCCodeFunctionCall* _tmp557_;
														ValaCCodeExpression* _tmp558_;
														ValaCCodeUnaryExpression* _tmp559_;
														ValaCCodeUnaryExpression* _tmp560_;
														ValaCCodeFunction* _tmp561_;
														ValaCCodeFunction* _tmp562_;
														ValaCCodeFunctionCall* _tmp563_;
														_tmp545_ = prop;
														_tmp546_ = vala_property_get_get_accessor (_tmp545_);
														_tmp547_ = _tmp546_;
														_tmp548_ = vala_property_accessor_get_value_type (_tmp547_);
														_tmp549_ = _tmp548_;
														_tmp550_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp549_, FALSE, (ValaCodeNode*) expr, NULL);
														temp_value = G_TYPE_CHECK_INSTANCE_CAST (_tmp550_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
														_tmp551_ = temp_value;
														_tmp552_ = vala_ccode_base_module_load_temp_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp551_);
														_tmp553_ = _tmp552_;
														vala_expression_set_target_value ((ValaExpression*) expr, _tmp553_);
														_vala_target_value_unref0 (_tmp553_);
														_tmp554_ = temp_value;
														_tmp555_ = vala_get_cvalue_ ((ValaTargetValue*) _tmp554_);
														_tmp556_ = _vala_ccode_node_ref0 (_tmp555_);
														ctemp = _tmp556_;
														_tmp557_ = ccall;
														_tmp558_ = ctemp;
														_tmp559_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp558_);
														_tmp560_ = _tmp559_;
														vala_ccode_function_call_add_argument (_tmp557_, (ValaCCodeExpression*) _tmp560_);
														_vala_ccode_node_unref0 (_tmp560_);
														_tmp561_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
														_tmp562_ = _tmp561_;
														_tmp563_ = ccall;
														vala_ccode_function_add_expression (_tmp562_, (ValaCCodeExpression*) _tmp563_);
														_vala_ccode_node_unref0 (ctemp);
														_vala_target_value_unref0 (temp_value);
													} else {
														ValaCCodeFunctionCall* _tmp564_;
														_tmp564_ = ccall;
														vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp564_);
													}
													_vala_ccode_node_unref0 (ccall);
												} else {
													ValaSourceReference* _tmp565_;
													ValaSourceReference* _tmp566_;
													ValaProperty* _tmp567_;
													gchar* _tmp568_;
													gchar* _tmp569_;
													_tmp565_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
													_tmp566_ = _tmp565_;
													_tmp567_ = base_prop;
													_tmp568_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp567_);
													_tmp569_ = _tmp568_;
													vala_report_error (_tmp566_, "internal: Invalid access to `%s'", _tmp569_);
													_g_free0 (_tmp569_);
												}
												_vala_ccode_node_unref0 (vcast);
											} else {
												gboolean _tmp570_ = FALSE;
												gboolean _tmp571_ = FALSE;
												gboolean _tmp572_ = FALSE;
												gboolean _tmp573_ = FALSE;
												gboolean _tmp574_ = FALSE;
												gboolean _tmp575_ = FALSE;
												gboolean _tmp576_ = FALSE;
												ValaProperty* _tmp577_;
												ValaMemberBinding _tmp578_;
												ValaMemberBinding _tmp579_;
												_tmp577_ = prop;
												_tmp578_ = vala_property_get_binding (_tmp577_);
												_tmp579_ = _tmp578_;
												if (_tmp579_ == VALA_MEMBER_BINDING_INSTANCE) {
													ValaProperty* _tmp580_;
													ValaPropertyAccessor* _tmp581_;
													ValaPropertyAccessor* _tmp582_;
													gboolean _tmp583_;
													gboolean _tmp584_;
													_tmp580_ = prop;
													_tmp581_ = vala_property_get_get_accessor (_tmp580_);
													_tmp582_ = _tmp581_;
													_tmp583_ = vala_property_accessor_get_automatic_body (_tmp582_);
													_tmp584_ = _tmp583_;
													_tmp576_ = _tmp584_;
												} else {
													_tmp576_ = FALSE;
												}
												if (_tmp576_) {
													ValaProperty* _tmp585_;
													ValaPropertyAccessor* _tmp586_;
													ValaPropertyAccessor* _tmp587_;
													ValaDataType* _tmp588_;
													ValaDataType* _tmp589_;
													gboolean _tmp590_;
													gboolean _tmp591_;
													_tmp585_ = prop;
													_tmp586_ = vala_property_get_get_accessor (_tmp585_);
													_tmp587_ = _tmp586_;
													_tmp588_ = vala_property_accessor_get_value_type (_tmp587_);
													_tmp589_ = _tmp588_;
													_tmp590_ = vala_data_type_get_value_owned (_tmp589_);
													_tmp591_ = _tmp590_;
													_tmp575_ = !_tmp591_;
												} else {
													_tmp575_ = FALSE;
												}
												if (_tmp575_) {
													ValaTypeSymbol* _tmp592_;
													ValaTypeSymbol* _tmp593_;
													ValaProperty* _tmp594_;
													ValaSymbol* _tmp595_;
													ValaSymbol* _tmp596_;
													_tmp592_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
													_tmp593_ = _tmp592_;
													_tmp594_ = prop;
													_tmp595_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp594_);
													_tmp596_ = _tmp595_;
													_tmp574_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp593_, VALA_TYPE_SYMBOL, ValaSymbol) == _tmp596_;
												} else {
													_tmp574_ = FALSE;
												}
												if (_tmp574_) {
													ValaTypeSymbol* _tmp597_;
													ValaTypeSymbol* _tmp598_;
													_tmp597_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
													_tmp598_ = _tmp597_;
													_tmp573_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp598_, VALA_TYPE_CLASS);
												} else {
													_tmp573_ = FALSE;
												}
												if (_tmp573_) {
													ValaProperty* _tmp599_;
													ValaProperty* _tmp600_;
													ValaProperty* _tmp601_;
													_tmp599_ = prop;
													_tmp600_ = vala_property_get_base_property (_tmp599_);
													_tmp601_ = _tmp600_;
													_tmp572_ = _tmp601_ == NULL;
												} else {
													_tmp572_ = FALSE;
												}
												if (_tmp572_) {
													ValaProperty* _tmp602_;
													ValaProperty* _tmp603_;
													ValaProperty* _tmp604_;
													_tmp602_ = prop;
													_tmp603_ = vala_property_get_base_interface_property (_tmp602_);
													_tmp604_ = _tmp603_;
													_tmp571_ = _tmp604_ == NULL;
												} else {
													_tmp571_ = FALSE;
												}
												if (_tmp571_) {
													gboolean _tmp605_ = FALSE;
													ValaProperty* _tmp606_;
													ValaDataType* _tmp607_;
													ValaDataType* _tmp608_;
													_tmp606_ = prop;
													_tmp607_ = vala_property_get_property_type (_tmp606_);
													_tmp608_ = _tmp607_;
													if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp608_, VALA_TYPE_ARRAY_TYPE)) {
														_tmp605_ = TRUE;
													} else {
														ValaProperty* _tmp609_;
														ValaDataType* _tmp610_;
														ValaDataType* _tmp611_;
														_tmp609_ = prop;
														_tmp610_ = vala_property_get_property_type (_tmp609_);
														_tmp611_ = _tmp610_;
														_tmp605_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp611_, VALA_TYPE_DELEGATE_TYPE);
													}
													_tmp570_ = !_tmp605_;
												} else {
													_tmp570_ = FALSE;
												}
												if (_tmp570_) {
													ValaCCodeExpression* inst = NULL;
													ValaCCodeExpression* _tmp612_;
													ValaCCodeExpression* _tmp613_;
													ValaTypeSymbol* _tmp614_;
													ValaTypeSymbol* _tmp615_;
													gboolean _tmp616_;
													gboolean _tmp617_;
													ValaCCodeExpression* _tmp620_;
													ValaProperty* _tmp621_;
													ValaField* _tmp622_;
													ValaField* _tmp623_;
													gchar* _tmp624_;
													gchar* _tmp625_;
													ValaCCodeMemberAccess* _tmp626_;
													ValaCCodeMemberAccess* _tmp627_;
													_tmp612_ = pub_inst;
													_tmp613_ = _vala_ccode_node_ref0 (_tmp612_);
													inst = _tmp613_;
													_tmp614_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
													_tmp615_ = _tmp614_;
													_tmp616_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp615_, VALA_TYPE_CLASS, ValaClass));
													_tmp617_ = _tmp616_;
													if (!_tmp617_) {
														ValaCCodeExpression* _tmp618_;
														ValaCCodeMemberAccess* _tmp619_;
														_tmp618_ = inst;
														_tmp619_ = vala_ccode_member_access_new_pointer (_tmp618_, "priv");
														_vala_ccode_node_unref0 (inst);
														inst = (ValaCCodeExpression*) _tmp619_;
													}
													_tmp620_ = inst;
													_tmp621_ = prop;
													_tmp622_ = vala_property_get_field (_tmp621_);
													_tmp623_ = _tmp622_;
													_tmp624_ = vala_get_ccode_name ((ValaCodeNode*) _tmp623_);
													_tmp625_ = _tmp624_;
													_tmp626_ = vala_ccode_member_access_new_pointer (_tmp620_, _tmp625_);
													_tmp627_ = _tmp626_;
													vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp627_);
													_vala_ccode_node_unref0 (_tmp627_);
													_g_free0 (_tmp625_);
													_vala_ccode_node_unref0 (inst);
												} else {
													gboolean _tmp628_ = FALSE;
													ValaProperty* _tmp629_;
													_tmp629_ = prop;
													if (!vala_get_ccode_no_accessor_method (_tmp629_)) {
														ValaProperty* _tmp630_;
														_tmp630_ = prop;
														_tmp628_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp630_, VALA_TYPE_DYNAMIC_PROPERTY);
													} else {
														_tmp628_ = FALSE;
													}
													if (_tmp628_) {
														ValaCCodeFunctionCall* ccall = NULL;
														ValaProperty* _tmp631_;
														ValaPropertyAccessor* _tmp632_;
														ValaPropertyAccessor* _tmp633_;
														gchar* _tmp634_;
														gchar* _tmp635_;
														ValaCCodeIdentifier* _tmp636_;
														ValaCCodeIdentifier* _tmp637_;
														ValaCCodeFunctionCall* _tmp638_;
														ValaCCodeFunctionCall* _tmp639_;
														ValaProperty* _tmp640_;
														ValaMemberBinding _tmp641_;
														ValaMemberBinding _tmp642_;
														gboolean prop_is_real_non_null_struct_type = FALSE;
														ValaProperty* _tmp663_;
														ValaDataType* _tmp664_;
														ValaDataType* _tmp665_;
														gboolean _tmp666_ = FALSE;
														ValaProperty* _tmp667_;
														ValaDataType* _tmp668_;
														ValaDataType* _tmp669_;
														gboolean requires_init = FALSE;
														ValaGLibValue* temp_value = NULL;
														ValaProperty* _tmp670_;
														ValaPropertyAccessor* _tmp671_;
														ValaPropertyAccessor* _tmp672_;
														ValaDataType* _tmp673_;
														ValaDataType* _tmp674_;
														ValaTargetValue* _tmp675_;
														ValaGLibValue* _tmp676_;
														ValaTargetValue* _tmp677_;
														ValaTargetValue* _tmp678_;
														ValaCCodeExpression* ctemp = NULL;
														ValaGLibValue* _tmp679_;
														ValaCCodeExpression* _tmp680_;
														ValaCCodeExpression* _tmp681_;
														_tmp631_ = prop;
														_tmp632_ = vala_property_get_get_accessor (_tmp631_);
														_tmp633_ = _tmp632_;
														_tmp634_ = vala_get_ccode_name ((ValaCodeNode*) _tmp633_);
														_tmp635_ = _tmp634_;
														_tmp636_ = vala_ccode_identifier_new (_tmp635_);
														_tmp637_ = _tmp636_;
														_tmp638_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp637_);
														_tmp639_ = _tmp638_;
														_vala_ccode_node_unref0 (_tmp637_);
														_g_free0 (_tmp635_);
														ccall = _tmp639_;
														_tmp640_ = prop;
														_tmp641_ = vala_property_get_binding (_tmp640_);
														_tmp642_ = _tmp641_;
														if (_tmp642_ == VALA_MEMBER_BINDING_INSTANCE) {
															gboolean _tmp643_ = FALSE;
															ValaProperty* _tmp644_;
															ValaSymbol* _tmp645_;
															ValaSymbol* _tmp646_;
															ValaCCodeFunctionCall* _tmp661_;
															ValaCCodeExpression* _tmp662_;
															_tmp644_ = prop;
															_tmp645_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp644_);
															_tmp646_ = _tmp645_;
															if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp646_, VALA_TYPE_STRUCT)) {
																ValaProperty* _tmp647_;
																ValaSymbol* _tmp648_;
																ValaSymbol* _tmp649_;
																_tmp647_ = prop;
																_tmp648_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp647_);
																_tmp649_ = _tmp648_;
																_tmp643_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp649_, VALA_TYPE_STRUCT, ValaStruct));
															} else {
																_tmp643_ = FALSE;
															}
															if (_tmp643_) {
																ValaTargetValue* instance = NULL;
																ValaExpression* _tmp650_;
																ValaExpression* _tmp651_;
																ValaTargetValue* _tmp652_;
																ValaTargetValue* _tmp653_;
																ValaTargetValue* _tmp654_;
																ValaTargetValue* _tmp655_;
																ValaTargetValue* _tmp658_;
																ValaCCodeExpression* _tmp659_;
																ValaCCodeUnaryExpression* _tmp660_;
																_tmp650_ = vala_member_access_get_inner (expr);
																_tmp651_ = _tmp650_;
																_tmp652_ = vala_expression_get_target_value (_tmp651_);
																_tmp653_ = _tmp652_;
																_tmp654_ = _vala_target_value_ref0 (_tmp653_);
																instance = _tmp654_;
																_tmp655_ = instance;
																if (!vala_get_lvalue (_tmp655_)) {
																	ValaTargetValue* _tmp656_;
																	ValaTargetValue* _tmp657_;
																	_tmp656_ = instance;
																	_tmp657_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp656_, (ValaCodeNode*) expr, NULL);
																	_vala_target_value_unref0 (instance);
																	instance = _tmp657_;
																}
																_tmp658_ = instance;
																_tmp659_ = vala_get_cvalue_ (_tmp658_);
																_tmp660_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp659_);
																_vala_ccode_node_unref0 (pub_inst);
																pub_inst = (ValaCCodeExpression*) _tmp660_;
																_vala_target_value_unref0 (instance);
															}
															_tmp661_ = ccall;
															_tmp662_ = pub_inst;
															vala_ccode_function_call_add_argument (_tmp661_, _tmp662_);
														}
														_tmp663_ = prop;
														_tmp664_ = vala_property_get_property_type (_tmp663_);
														_tmp665_ = _tmp664_;
														prop_is_real_non_null_struct_type = vala_data_type_is_real_non_null_struct_type (_tmp665_);
														_tmp667_ = prop;
														_tmp668_ = vala_property_get_property_type (_tmp667_);
														_tmp669_ = _tmp668_;
														if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp669_, VALA_TYPE_DELEGATE_TYPE)) {
															_tmp666_ = TRUE;
														} else {
															_tmp666_ = prop_is_real_non_null_struct_type;
														}
														requires_init = _tmp666_;
														_tmp670_ = prop;
														_tmp671_ = vala_property_get_get_accessor (_tmp670_);
														_tmp672_ = _tmp671_;
														_tmp673_ = vala_property_accessor_get_value_type (_tmp672_);
														_tmp674_ = _tmp673_;
														_tmp675_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp674_, requires_init, (ValaCodeNode*) expr, NULL);
														temp_value = G_TYPE_CHECK_INSTANCE_CAST (_tmp675_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
														_tmp676_ = temp_value;
														_tmp677_ = vala_ccode_base_module_load_temp_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp676_);
														_tmp678_ = _tmp677_;
														vala_expression_set_target_value ((ValaExpression*) expr, _tmp678_);
														_vala_target_value_unref0 (_tmp678_);
														_tmp679_ = temp_value;
														_tmp680_ = vala_get_cvalue_ ((ValaTargetValue*) _tmp679_);
														_tmp681_ = _vala_ccode_node_ref0 (_tmp680_);
														ctemp = _tmp681_;
														if (prop_is_real_non_null_struct_type) {
															ValaCCodeFunctionCall* _tmp682_;
															ValaCCodeExpression* _tmp683_;
															ValaCCodeUnaryExpression* _tmp684_;
															ValaCCodeUnaryExpression* _tmp685_;
															ValaCCodeFunction* _tmp686_;
															ValaCCodeFunction* _tmp687_;
															ValaCCodeFunctionCall* _tmp688_;
															_tmp682_ = ccall;
															_tmp683_ = ctemp;
															_tmp684_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp683_);
															_tmp685_ = _tmp684_;
															vala_ccode_function_call_add_argument (_tmp682_, (ValaCCodeExpression*) _tmp685_);
															_vala_ccode_node_unref0 (_tmp685_);
															_tmp686_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
															_tmp687_ = _tmp686_;
															_tmp688_ = ccall;
															vala_ccode_function_add_expression (_tmp687_, (ValaCCodeExpression*) _tmp688_);
														} else {
															ValaProperty* _tmp689_;
															ValaDataType* _tmp690_;
															ValaDataType* _tmp691_;
															ValaArrayType* _tmp692_;
															ValaArrayType* _tmp693_;
															_tmp689_ = prop;
															_tmp690_ = vala_property_get_property_type (_tmp689_);
															_tmp691_ = _tmp690_;
															_tmp692_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp691_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp691_) : NULL);
															_vala_code_node_unref0 (array_type);
															array_type = _tmp692_;
															_tmp693_ = array_type;
															if (_tmp693_ != NULL) {
																ValaProperty* _tmp694_;
																_tmp694_ = prop;
																if (vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp694_)) {
																	ValaCCodeFunctionCall* len_call = NULL;
																	ValaCCodeIdentifier* _tmp695_;
																	ValaCCodeIdentifier* _tmp696_;
																	ValaCCodeFunctionCall* _tmp697_;
																	ValaCCodeFunctionCall* _tmp698_;
																	ValaCCodeFunctionCall* _tmp699_;
																	ValaCCodeExpression* _tmp700_;
																	ValaCCodeFunction* _tmp701_;
																	ValaCCodeFunction* _tmp702_;
																	ValaCCodeExpression* _tmp703_;
																	ValaCCodeFunctionCall* _tmp704_;
																	ValaCCodeFunction* _tmp705_;
																	ValaCCodeFunction* _tmp706_;
																	ValaGLibValue* _tmp707_;
																	ValaList* _tmp708_;
																	gpointer _tmp709_;
																	ValaCCodeExpression* _tmp710_;
																	ValaCCodeFunctionCall* _tmp711_;
																	((ValaCCodeBaseModule*) self)->requires_array_length = TRUE;
																	_tmp695_ = vala_ccode_identifier_new ("_vala_array_length");
																	_tmp696_ = _tmp695_;
																	_tmp697_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp696_);
																	_tmp698_ = _tmp697_;
																	_vala_ccode_node_unref0 (_tmp696_);
																	len_call = _tmp698_;
																	_tmp699_ = len_call;
																	_tmp700_ = ctemp;
																	vala_ccode_function_call_add_argument (_tmp699_, _tmp700_);
																	_tmp701_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																	_tmp702_ = _tmp701_;
																	_tmp703_ = ctemp;
																	_tmp704_ = ccall;
																	vala_ccode_function_add_assignment (_tmp702_, _tmp703_, (ValaCCodeExpression*) _tmp704_);
																	_tmp705_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																	_tmp706_ = _tmp705_;
																	_tmp707_ = temp_value;
																	_tmp708_ = _tmp707_->array_length_cvalues;
																	_tmp709_ = vala_list_get (_tmp708_, 0);
																	_tmp710_ = (ValaCCodeExpression*) _tmp709_;
																	_tmp711_ = len_call;
																	vala_ccode_function_add_assignment (_tmp706_, _tmp710_, (ValaCCodeExpression*) _tmp711_);
																	_vala_ccode_node_unref0 (_tmp710_);
																	_vala_ccode_node_unref0 (len_call);
																} else {
																	ValaProperty* _tmp712_;
																	_tmp712_ = prop;
																	if (vala_get_ccode_array_length ((ValaCodeNode*) _tmp712_)) {
																		ValaArrayList* temp_refs = NULL;
																		GEqualFunc _tmp713_;
																		ValaArrayList* _tmp714_;
																		ValaCCodeFunction* _tmp738_;
																		ValaCCodeFunction* _tmp739_;
																		ValaCCodeExpression* _tmp740_;
																		ValaCCodeFunctionCall* _tmp741_;
																		_tmp713_ = g_direct_equal;
																		_tmp714_ = vala_array_list_new (VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp713_);
																		temp_refs = _tmp714_;
																		{
																			gint dim = 0;
																			dim = 1;
																			{
																				gboolean _tmp715_ = FALSE;
																				_tmp715_ = TRUE;
																				while (TRUE) {
																					ValaArrayType* _tmp717_;
																					gint _tmp718_;
																					gint _tmp719_;
																					gchar* length_ctype = NULL;
																					ValaProperty* _tmp720_;
																					gchar* _tmp721_;
																					ValaLocalVariable* temp_var = NULL;
																					const gchar* _tmp722_;
																					ValaCType* _tmp723_;
																					ValaCType* _tmp724_;
																					ValaLocalVariable* _tmp725_;
																					ValaLocalVariable* _tmp726_;
																					ValaCCodeExpression* temp_ref = NULL;
																					ValaLocalVariable* _tmp727_;
																					const gchar* _tmp728_;
																					const gchar* _tmp729_;
																					ValaCCodeExpression* _tmp730_;
																					ValaLocalVariable* _tmp731_;
																					ValaCCodeFunctionCall* _tmp732_;
																					ValaCCodeExpression* _tmp733_;
																					ValaCCodeUnaryExpression* _tmp734_;
																					ValaCCodeUnaryExpression* _tmp735_;
																					ValaArrayList* _tmp736_;
																					ValaCCodeExpression* _tmp737_;
																					if (!_tmp715_) {
																						gint _tmp716_;
																						_tmp716_ = dim;
																						dim = _tmp716_ + 1;
																					}
																					_tmp715_ = FALSE;
																					_tmp717_ = array_type;
																					_tmp718_ = vala_array_type_get_rank (_tmp717_);
																					_tmp719_ = _tmp718_;
																					if (!(dim <= _tmp719_)) {
																						break;
																					}
																					_tmp720_ = prop;
																					_tmp721_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp720_);
																					length_ctype = _tmp721_;
																					_tmp722_ = length_ctype;
																					_tmp723_ = vala_ctype_new (_tmp722_, "0");
																					_tmp724_ = _tmp723_;
																					_tmp725_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, (ValaDataType*) _tmp724_, TRUE, NULL, TRUE);
																					_tmp726_ = _tmp725_;
																					_vala_code_node_unref0 (_tmp724_);
																					temp_var = _tmp726_;
																					_tmp727_ = temp_var;
																					_tmp728_ = vala_symbol_get_name ((ValaSymbol*) _tmp727_);
																					_tmp729_ = _tmp728_;
																					_tmp730_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp729_);
																					temp_ref = _tmp730_;
																					_tmp731_ = temp_var;
																					vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp731_, FALSE);
																					_tmp732_ = ccall;
																					_tmp733_ = temp_ref;
																					_tmp734_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp733_);
																					_tmp735_ = _tmp734_;
																					vala_ccode_function_call_add_argument (_tmp732_, (ValaCCodeExpression*) _tmp735_);
																					_vala_ccode_node_unref0 (_tmp735_);
																					_tmp736_ = temp_refs;
																					_tmp737_ = temp_ref;
																					vala_collection_add ((ValaCollection*) _tmp736_, _tmp737_);
																					_vala_ccode_node_unref0 (temp_ref);
																					_vala_code_node_unref0 (temp_var);
																					_g_free0 (length_ctype);
																				}
																			}
																		}
																		_tmp738_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																		_tmp739_ = _tmp738_;
																		_tmp740_ = ctemp;
																		_tmp741_ = ccall;
																		vala_ccode_function_add_assignment (_tmp739_, _tmp740_, (ValaCCodeExpression*) _tmp741_);
																		{
																			gint dim = 0;
																			dim = 1;
																			{
																				gboolean _tmp742_ = FALSE;
																				_tmp742_ = TRUE;
																				while (TRUE) {
																					ValaArrayType* _tmp744_;
																					gint _tmp745_;
																					gint _tmp746_;
																					ValaCCodeFunction* _tmp747_;
																					ValaCCodeFunction* _tmp748_;
																					ValaGLibValue* _tmp749_;
																					ValaList* _tmp750_;
																					gpointer _tmp751_;
																					ValaCCodeExpression* _tmp752_;
																					ValaArrayList* _tmp753_;
																					gpointer _tmp754_;
																					ValaCCodeExpression* _tmp755_;
																					if (!_tmp742_) {
																						gint _tmp743_;
																						_tmp743_ = dim;
																						dim = _tmp743_ + 1;
																					}
																					_tmp742_ = FALSE;
																					_tmp744_ = array_type;
																					_tmp745_ = vala_array_type_get_rank (_tmp744_);
																					_tmp746_ = _tmp745_;
																					if (!(dim <= _tmp746_)) {
																						break;
																					}
																					_tmp747_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																					_tmp748_ = _tmp747_;
																					_tmp749_ = temp_value;
																					_tmp750_ = _tmp749_->array_length_cvalues;
																					_tmp751_ = vala_list_get (_tmp750_, dim - 1);
																					_tmp752_ = (ValaCCodeExpression*) _tmp751_;
																					_tmp753_ = temp_refs;
																					_tmp754_ = vala_list_get ((ValaList*) _tmp753_, dim - 1);
																					_tmp755_ = (ValaCCodeExpression*) _tmp754_;
																					vala_ccode_function_add_assignment (_tmp748_, _tmp752_, _tmp755_);
																					_vala_ccode_node_unref0 (_tmp755_);
																					_vala_ccode_node_unref0 (_tmp752_);
																				}
																			}
																		}
																		_vala_iterable_unref0 (temp_refs);
																	} else {
																		ValaCCodeFunction* _tmp756_;
																		ValaCCodeFunction* _tmp757_;
																		ValaCCodeExpression* _tmp758_;
																		ValaCCodeFunctionCall* _tmp759_;
																		_tmp756_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																		_tmp757_ = _tmp756_;
																		_tmp758_ = ctemp;
																		_tmp759_ = ccall;
																		vala_ccode_function_add_assignment (_tmp757_, _tmp758_, (ValaCCodeExpression*) _tmp759_);
																	}
																}
															} else {
																ValaCCodeFunction* _tmp760_;
																ValaCCodeFunction* _tmp761_;
																ValaCCodeExpression* _tmp762_;
																ValaCCodeFunctionCall* _tmp763_;
																ValaProperty* _tmp764_;
																ValaDataType* _tmp765_;
																ValaDataType* _tmp766_;
																ValaDelegateType* _tmp767_;
																gboolean _tmp768_ = FALSE;
																gboolean _tmp769_ = FALSE;
																ValaDelegateType* _tmp770_;
																_tmp760_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																_tmp761_ = _tmp760_;
																_tmp762_ = ctemp;
																_tmp763_ = ccall;
																vala_ccode_function_add_assignment (_tmp761_, _tmp762_, (ValaCCodeExpression*) _tmp763_);
																_tmp764_ = prop;
																_tmp765_ = vala_property_get_property_type (_tmp764_);
																_tmp766_ = _tmp765_;
																_tmp767_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp766_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp766_) : NULL);
																_vala_code_node_unref0 (delegate_type);
																delegate_type = _tmp767_;
																_tmp770_ = delegate_type;
																if (_tmp770_ != NULL) {
																	ValaProperty* _tmp771_;
																	_tmp771_ = prop;
																	_tmp769_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp771_);
																} else {
																	_tmp769_ = FALSE;
																}
																if (_tmp769_) {
																	ValaDelegateType* _tmp772_;
																	ValaDelegate* _tmp773_;
																	ValaDelegate* _tmp774_;
																	gboolean _tmp775_;
																	gboolean _tmp776_;
																	_tmp772_ = delegate_type;
																	_tmp773_ = vala_delegate_type_get_delegate_symbol (_tmp772_);
																	_tmp774_ = _tmp773_;
																	_tmp775_ = vala_delegate_get_has_target (_tmp774_);
																	_tmp776_ = _tmp775_;
																	_tmp768_ = _tmp776_;
																} else {
																	_tmp768_ = FALSE;
																}
																if (_tmp768_) {
																	ValaCCodeFunctionCall* _tmp777_;
																	ValaGLibValue* _tmp778_;
																	ValaCCodeExpression* _tmp779_;
																	ValaCCodeExpression* _tmp780_;
																	ValaCCodeUnaryExpression* _tmp781_;
																	ValaCCodeUnaryExpression* _tmp782_;
																	_tmp777_ = ccall;
																	_tmp778_ = temp_value;
																	_tmp779_ = vala_ccode_base_module_get_delegate_target_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp778_);
																	_tmp780_ = _tmp779_;
																	_tmp781_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp780_);
																	_tmp782_ = _tmp781_;
																	vala_ccode_function_call_add_argument (_tmp777_, (ValaCCodeExpression*) _tmp782_);
																	_vala_ccode_node_unref0 (_tmp782_);
																	_vala_ccode_node_unref0 (_tmp780_);
																} else {
																	ValaGLibValue* _tmp783_;
																	ValaCCodeExpression* _tmp784_;
																	ValaGLibValue* _tmp791_;
																	ValaCCodeExpression* _tmp792_;
																	_tmp783_ = temp_value;
																	_tmp784_ = _tmp783_->delegate_target_cvalue;
																	if (_tmp784_ != NULL) {
																		ValaCCodeFunction* _tmp785_;
																		ValaCCodeFunction* _tmp786_;
																		ValaGLibValue* _tmp787_;
																		ValaCCodeExpression* _tmp788_;
																		ValaCCodeConstant* _tmp789_;
																		ValaCCodeConstant* _tmp790_;
																		_tmp785_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																		_tmp786_ = _tmp785_;
																		_tmp787_ = temp_value;
																		_tmp788_ = _tmp787_->delegate_target_cvalue;
																		_tmp789_ = vala_ccode_constant_new ("NULL");
																		_tmp790_ = _tmp789_;
																		vala_ccode_function_add_assignment (_tmp786_, _tmp788_, (ValaCCodeExpression*) _tmp790_);
																		_vala_ccode_node_unref0 (_tmp790_);
																	}
																	_tmp791_ = temp_value;
																	_tmp792_ = _tmp791_->delegate_target_destroy_notify_cvalue;
																	if (_tmp792_ != NULL) {
																		ValaCCodeFunction* _tmp793_;
																		ValaCCodeFunction* _tmp794_;
																		ValaGLibValue* _tmp795_;
																		ValaCCodeExpression* _tmp796_;
																		ValaCCodeConstant* _tmp797_;
																		ValaCCodeConstant* _tmp798_;
																		_tmp793_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
																		_tmp794_ = _tmp793_;
																		_tmp795_ = temp_value;
																		_tmp796_ = _tmp795_->delegate_target_destroy_notify_cvalue;
																		_tmp797_ = vala_ccode_constant_new ("NULL");
																		_tmp798_ = _tmp797_;
																		vala_ccode_function_add_assignment (_tmp794_, _tmp796_, (ValaCCodeExpression*) _tmp798_);
																		_vala_ccode_node_unref0 (_tmp798_);
																	}
																}
															}
														}
														_vala_ccode_node_unref0 (ctemp);
														_vala_target_value_unref0 (temp_value);
														_vala_ccode_node_unref0 (ccall);
													} else {
														ValaCCodeFunctionCall* ccall = NULL;
														ValaCCodeIdentifier* _tmp799_;
														ValaCCodeIdentifier* _tmp800_;
														ValaCCodeFunctionCall* _tmp801_;
														ValaCCodeFunctionCall* _tmp802_;
														ValaCCodeFunctionCall* _tmp803_;
														ValaCCodeExpression* _tmp804_;
														ValaCCodeFunctionCall* _tmp805_;
														ValaProperty* _tmp806_;
														ValaCCodeConstant* _tmp807_;
														ValaCCodeConstant* _tmp808_;
														gboolean _tmp809_ = FALSE;
														ValaProperty* _tmp810_;
														ValaDataType* _tmp834_;
														ValaDataType* _tmp835_;
														ValaLocalVariable* temp_var = NULL;
														ValaDataType* _tmp838_;
														ValaDataType* _tmp839_;
														ValaLocalVariable* _tmp840_;
														ValaCCodeExpression* ctemp = NULL;
														ValaLocalVariable* _tmp841_;
														const gchar* _tmp842_;
														const gchar* _tmp843_;
														ValaCCodeExpression* _tmp844_;
														ValaLocalVariable* _tmp845_;
														ValaCCodeFunctionCall* _tmp846_;
														ValaCCodeExpression* _tmp847_;
														ValaCCodeUnaryExpression* _tmp848_;
														ValaCCodeUnaryExpression* _tmp849_;
														ValaCCodeFunctionCall* _tmp850_;
														ValaCCodeConstant* _tmp851_;
														ValaCCodeConstant* _tmp852_;
														ValaCCodeFunction* _tmp853_;
														ValaCCodeFunction* _tmp854_;
														ValaCCodeFunctionCall* _tmp855_;
														ValaCCodeExpression* _tmp856_;
														ValaProperty* _tmp857_;
														_tmp799_ = vala_ccode_identifier_new ("g_object_get");
														_tmp800_ = _tmp799_;
														_tmp801_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp800_);
														_tmp802_ = _tmp801_;
														_vala_ccode_node_unref0 (_tmp800_);
														ccall = _tmp802_;
														_tmp803_ = ccall;
														_tmp804_ = pub_inst;
														vala_ccode_function_call_add_argument (_tmp803_, _tmp804_);
														_tmp805_ = ccall;
														_tmp806_ = prop;
														_tmp807_ = vala_ccode_base_module_get_property_canonical_cconstant ((ValaCCodeBaseModule*) self, _tmp806_);
														_tmp808_ = _tmp807_;
														vala_ccode_function_call_add_argument (_tmp805_, (ValaCCodeExpression*) _tmp808_);
														_vala_ccode_node_unref0 (_tmp808_);
														_tmp810_ = prop;
														if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp810_, VALA_TYPE_DYNAMIC_PROPERTY)) {
															ValaProperty* _tmp811_;
															ValaPropertyAccessor* _tmp812_;
															ValaPropertyAccessor* _tmp813_;
															ValaDataType* _tmp814_;
															ValaDataType* _tmp815_;
															gboolean _tmp816_;
															gboolean _tmp817_;
															_tmp811_ = prop;
															_tmp812_ = vala_property_get_get_accessor (_tmp811_);
															_tmp813_ = _tmp812_;
															_tmp814_ = vala_property_accessor_get_value_type (_tmp813_);
															_tmp815_ = _tmp814_;
															_tmp816_ = vala_data_type_get_value_owned (_tmp815_);
															_tmp817_ = _tmp816_;
															_tmp809_ = !_tmp817_;
														} else {
															_tmp809_ = FALSE;
														}
														if (_tmp809_) {
															ValaDataType* owned_value_type = NULL;
															ValaProperty* _tmp818_;
															ValaPropertyAccessor* _tmp819_;
															ValaPropertyAccessor* _tmp820_;
															ValaDataType* _tmp821_;
															ValaDataType* _tmp822_;
															ValaDataType* _tmp823_;
															ValaDataType* _tmp824_;
															ValaDataType* _tmp825_;
															_tmp818_ = prop;
															_tmp819_ = vala_property_get_get_accessor (_tmp818_);
															_tmp820_ = _tmp819_;
															_tmp821_ = vala_property_accessor_get_value_type (_tmp820_);
															_tmp822_ = _tmp821_;
															_tmp823_ = vala_data_type_copy (_tmp822_);
															owned_value_type = _tmp823_;
															_tmp824_ = owned_value_type;
															vala_data_type_set_value_owned (_tmp824_, TRUE);
															_tmp825_ = owned_value_type;
															if (vala_ccode_base_module_requires_copy (_tmp825_)) {
																ValaProperty* _tmp826_;
																ValaPropertyAccessor* _tmp827_;
																ValaPropertyAccessor* _tmp828_;
																ValaSourceReference* _tmp829_;
																ValaSourceReference* _tmp830_;
																ValaProperty* _tmp831_;
																gchar* _tmp832_;
																gchar* _tmp833_;
																_tmp826_ = prop;
																_tmp827_ = vala_property_get_get_accessor (_tmp826_);
																_tmp828_ = _tmp827_;
																_tmp829_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp828_);
																_tmp830_ = _tmp829_;
																_tmp831_ = prop;
																_tmp832_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp831_);
																_tmp833_ = _tmp832_;
																vala_report_error (_tmp830_, "unowned return value for getter of property `%s' not supported without" \
" accessor", _tmp833_);
																_g_free0 (_tmp833_);
															}
															_vala_code_node_unref0 (owned_value_type);
														}
														_tmp834_ = vala_expression_get_value_type ((ValaExpression*) expr);
														_tmp835_ = _tmp834_;
														if (vala_data_type_is_real_struct_type (_tmp835_)) {
															ValaDataType* _tmp836_;
															ValaDataType* _tmp837_;
															_tmp836_ = vala_expression_get_value_type ((ValaExpression*) expr);
															_tmp837_ = _tmp836_;
															vala_data_type_set_nullable (_tmp837_, TRUE);
														}
														_tmp838_ = vala_expression_get_value_type ((ValaExpression*) expr);
														_tmp839_ = _tmp838_;
														_tmp840_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp839_, TRUE, NULL, FALSE);
														temp_var = _tmp840_;
														_tmp841_ = temp_var;
														_tmp842_ = vala_symbol_get_name ((ValaSymbol*) _tmp841_);
														_tmp843_ = _tmp842_;
														_tmp844_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp843_);
														ctemp = _tmp844_;
														_tmp845_ = temp_var;
														vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp845_, FALSE);
														_tmp846_ = ccall;
														_tmp847_ = ctemp;
														_tmp848_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp847_);
														_tmp849_ = _tmp848_;
														vala_ccode_function_call_add_argument (_tmp846_, (ValaCCodeExpression*) _tmp849_);
														_vala_ccode_node_unref0 (_tmp849_);
														_tmp850_ = ccall;
														_tmp851_ = vala_ccode_constant_new ("NULL");
														_tmp852_ = _tmp851_;
														vala_ccode_function_call_add_argument (_tmp850_, (ValaCCodeExpression*) _tmp852_);
														_vala_ccode_node_unref0 (_tmp852_);
														_tmp853_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
														_tmp854_ = _tmp853_;
														_tmp855_ = ccall;
														vala_ccode_function_add_expression (_tmp854_, (ValaCCodeExpression*) _tmp855_);
														_tmp856_ = ctemp;
														vala_set_cvalue ((ValaExpression*) expr, _tmp856_);
														_tmp857_ = prop;
														if (vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp857_)) {
															ValaCCodeFunctionCall* len_call = NULL;
															ValaCCodeIdentifier* _tmp858_;
															ValaCCodeIdentifier* _tmp859_;
															ValaCCodeFunctionCall* _tmp860_;
															ValaCCodeFunctionCall* _tmp861_;
															ValaCCodeFunctionCall* _tmp862_;
															ValaCCodeExpression* _tmp863_;
															ValaGLibValue* glib_value = NULL;
															ValaTargetValue* _tmp864_;
															ValaTargetValue* _tmp865_;
															ValaGLibValue* _tmp866_;
															ValaGLibValue* _tmp867_;
															ValaGLibValue* _tmp868_;
															ValaCCodeFunctionCall* _tmp869_;
															ValaGLibValue* _tmp870_;
															((ValaCCodeBaseModule*) self)->requires_array_length = TRUE;
															_tmp858_ = vala_ccode_identifier_new ("_vala_array_length");
															_tmp859_ = _tmp858_;
															_tmp860_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp859_);
															_tmp861_ = _tmp860_;
															_vala_ccode_node_unref0 (_tmp859_);
															len_call = _tmp861_;
															_tmp862_ = len_call;
															_tmp863_ = ctemp;
															vala_ccode_function_call_add_argument (_tmp862_, _tmp863_);
															_tmp864_ = vala_expression_get_target_value ((ValaExpression*) expr);
															_tmp865_ = _tmp864_;
															_tmp866_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp865_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
															glib_value = _tmp866_;
															_tmp867_ = glib_value;
															_vala_iterable_unref0 (_tmp867_->array_length_cvalues);
															_tmp867_->array_length_cvalues = NULL;
															_tmp868_ = glib_value;
															_tmp869_ = len_call;
															vala_glib_value_append_array_length_cvalue (_tmp868_, (ValaCCodeExpression*) _tmp869_);
															_tmp870_ = glib_value;
															_tmp870_->lvalue = FALSE;
															_vala_target_value_unref0 (glib_value);
															_vala_ccode_node_unref0 (len_call);
														}
														_vala_ccode_node_unref0 (ctemp);
														_vala_code_node_unref0 (temp_var);
														_vala_ccode_node_unref0 (ccall);
													}
												}
											}
											_tmp871_ = prop;
											_tmp872_ = vala_property_get_get_accessor (_tmp871_);
											_tmp873_ = _tmp872_;
											_tmp874_ = vala_property_accessor_get_value_type (_tmp873_);
											_tmp875_ = _tmp874_;
											if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp875_, VALA_TYPE_GENERIC_TYPE)) {
												ValaTargetValue* _tmp876_;
												ValaTargetValue* _tmp877_;
												ValaProperty* _tmp878_;
												ValaPropertyAccessor* _tmp879_;
												ValaPropertyAccessor* _tmp880_;
												ValaDataType* _tmp881_;
												ValaDataType* _tmp882_;
												ValaDataType* _tmp883_;
												ValaDataType* _tmp884_;
												_tmp876_ = vala_expression_get_target_value ((ValaExpression*) expr);
												_tmp877_ = _tmp876_;
												_tmp878_ = prop;
												_tmp879_ = vala_property_get_get_accessor (_tmp878_);
												_tmp880_ = _tmp879_;
												_tmp881_ = vala_property_accessor_get_value_type (_tmp880_);
												_tmp882_ = _tmp881_;
												_tmp883_ = vala_data_type_copy (_tmp882_);
												_tmp884_ = _tmp883_;
												vala_target_value_set_value_type (_tmp877_, _tmp884_);
												_vala_code_node_unref0 (_tmp884_);
											} else {
												ValaTargetValue* _tmp885_;
												ValaTargetValue* _tmp886_;
												ValaDataType* _tmp887_;
												ValaDataType* _tmp888_;
												ValaDataType* _tmp889_;
												ValaDataType* _tmp890_;
												_tmp885_ = vala_expression_get_target_value ((ValaExpression*) expr);
												_tmp886_ = _tmp885_;
												_tmp887_ = vala_expression_get_value_type ((ValaExpression*) expr);
												_tmp888_ = _tmp887_;
												_tmp889_ = vala_data_type_copy (_tmp888_);
												_tmp890_ = _tmp889_;
												vala_target_value_set_value_type (_tmp886_, _tmp890_);
												_vala_code_node_unref0 (_tmp890_);
											}
											_tmp891_ = vala_expression_get_target_value ((ValaExpression*) expr);
											_tmp892_ = _tmp891_;
											_tmp893_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp892_, (ValaCodeNode*) expr, NULL);
											_tmp894_ = _tmp893_;
											vala_expression_set_target_value ((ValaExpression*) expr, _tmp894_);
											_vala_target_value_unref0 (_tmp894_);
											_vala_code_node_unref0 (prop);
										} else {
											ValaSymbol* _tmp895_;
											ValaSymbol* _tmp896_;
											_tmp895_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
											_tmp896_ = _tmp895_;
											if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp896_, VALA_TYPE_LOCAL_VARIABLE)) {
												ValaLocalVariable* local = NULL;
												ValaSymbol* _tmp897_;
												ValaSymbol* _tmp898_;
												ValaLocalVariable* _tmp899_;
												gboolean _tmp900_ = FALSE;
												gboolean _tmp901_ = FALSE;
												gboolean _tmp902_ = FALSE;
												gboolean _tmp903_ = FALSE;
												gboolean _tmp904_ = FALSE;
												ValaCodeNode* _tmp905_;
												ValaCodeNode* _tmp906_;
												_tmp897_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
												_tmp898_ = _tmp897_;
												_tmp899_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp898_, VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariable));
												local = _tmp899_;
												_tmp905_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
												_tmp906_ = _tmp905_;
												if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp906_, VALA_TYPE_RETURN_STATEMENT)) {
													ValaDataType* _tmp907_;
													ValaDataType* _tmp908_;
													gboolean _tmp909_;
													gboolean _tmp910_;
													_tmp907_ = vala_ccode_base_module_get_current_return_type ((ValaCCodeBaseModule*) self);
													_tmp908_ = _tmp907_;
													_tmp909_ = vala_data_type_get_value_owned (_tmp908_);
													_tmp910_ = _tmp909_;
													_tmp904_ = _tmp910_;
												} else {
													_tmp904_ = FALSE;
												}
												if (_tmp904_) {
													ValaLocalVariable* _tmp911_;
													ValaDataType* _tmp912_;
													ValaDataType* _tmp913_;
													gboolean _tmp914_;
													gboolean _tmp915_;
													_tmp911_ = local;
													_tmp912_ = vala_variable_get_variable_type ((ValaVariable*) _tmp911_);
													_tmp913_ = _tmp912_;
													_tmp914_ = vala_data_type_get_value_owned (_tmp913_);
													_tmp915_ = _tmp914_;
													_tmp903_ = _tmp915_;
												} else {
													_tmp903_ = FALSE;
												}
												if (_tmp903_) {
													ValaLocalVariable* _tmp916_;
													gboolean _tmp917_;
													gboolean _tmp918_;
													_tmp916_ = local;
													_tmp917_ = vala_local_variable_get_captured (_tmp916_);
													_tmp918_ = _tmp917_;
													_tmp902_ = !_tmp918_;
												} else {
													_tmp902_ = FALSE;
												}
												if (_tmp902_) {
													ValaLocalVariable* _tmp919_;
													_tmp919_ = local;
													_tmp901_ = !vala_ccode_base_module_variable_accessible_in_finally ((ValaCCodeBaseModule*) self, _tmp919_);
												} else {
													_tmp901_ = FALSE;
												}
												if (_tmp901_) {
													gboolean _tmp920_ = FALSE;
													ValaLocalVariable* _tmp921_;
													ValaDataType* _tmp922_;
													ValaDataType* _tmp923_;
													_tmp921_ = local;
													_tmp922_ = vala_variable_get_variable_type ((ValaVariable*) _tmp921_);
													_tmp923_ = _tmp922_;
													if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp923_, VALA_TYPE_ARRAY_TYPE)) {
														ValaLocalVariable* _tmp924_;
														ValaDataType* _tmp925_;
														ValaDataType* _tmp926_;
														gboolean _tmp927_;
														gboolean _tmp928_;
														_tmp924_ = local;
														_tmp925_ = vala_variable_get_variable_type ((ValaVariable*) _tmp924_);
														_tmp926_ = _tmp925_;
														_tmp927_ = vala_array_type_get_inline_allocated (G_TYPE_CHECK_INSTANCE_CAST (_tmp926_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
														_tmp928_ = _tmp927_;
														_tmp920_ = _tmp928_;
													} else {
														_tmp920_ = FALSE;
													}
													_tmp900_ = !_tmp920_;
												} else {
													_tmp900_ = FALSE;
												}
												if (_tmp900_) {
													ValaDataType* _tmp929_;
													ValaDataType* _tmp930_;
													ValaLocalVariable* _tmp931_;
													ValaGLibValue* glib_value = NULL;
													ValaLocalVariable* _tmp932_;
													ValaTargetValue* _tmp933_;
													ValaGLibValue* _tmp934_;
													ValaGLibValue* _tmp935_;
													ValaCCodeExpression* _tmp936_;
													ValaGLibValue* _tmp939_;
													ValaCCodeExpression* _tmp940_;
													_tmp929_ = vala_expression_get_value_type ((ValaExpression*) expr);
													_tmp930_ = _tmp929_;
													vala_data_type_set_value_owned (_tmp930_, TRUE);
													_tmp931_ = local;
													vala_symbol_set_active ((ValaSymbol*) _tmp931_, FALSE);
													_tmp932_ = local;
													_tmp933_ = vala_ccode_base_module_get_local_cvalue ((ValaCCodeBaseModule*) self, _tmp932_);
													glib_value = G_TYPE_CHECK_INSTANCE_CAST (_tmp933_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
													_tmp934_ = glib_value;
													vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp934_);
													_tmp935_ = glib_value;
													_tmp936_ = _tmp935_->delegate_target_cvalue;
													if (_tmp936_ == NULL) {
														ValaGLibValue* _tmp937_;
														ValaCCodeConstant* _tmp938_;
														_tmp937_ = glib_value;
														_tmp938_ = vala_ccode_constant_new ("NULL");
														_vala_ccode_node_unref0 (_tmp937_->delegate_target_cvalue);
														_tmp937_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp938_;
													}
													_tmp939_ = glib_value;
													_tmp940_ = _tmp939_->delegate_target_destroy_notify_cvalue;
													if (_tmp940_ == NULL) {
														ValaGLibValue* _tmp941_;
														ValaCCodeConstant* _tmp942_;
														_tmp941_ = glib_value;
														_tmp942_ = vala_ccode_constant_new ("NULL");
														_vala_ccode_node_unref0 (_tmp941_->delegate_target_destroy_notify_cvalue);
														_tmp941_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp942_;
													}
													_vala_target_value_unref0 (glib_value);
												} else {
													gboolean _tmp943_;
													gboolean _tmp944_;
													_tmp943_ = vala_expression_get_lvalue ((ValaExpression*) expr);
													_tmp944_ = _tmp943_;
													if (_tmp944_) {
														ValaLocalVariable* _tmp945_;
														ValaTargetValue* _tmp946_;
														ValaTargetValue* _tmp947_;
														_tmp945_ = local;
														_tmp946_ = vala_ccode_base_module_get_local_cvalue ((ValaCCodeBaseModule*) self, _tmp945_);
														_tmp947_ = _tmp946_;
														vala_expression_set_target_value ((ValaExpression*) expr, _tmp947_);
														_vala_target_value_unref0 (_tmp947_);
													} else {
														ValaLocalVariable* _tmp948_;
														ValaTargetValue* _tmp949_;
														ValaTargetValue* _tmp950_;
														_tmp948_ = local;
														_tmp949_ = vala_code_generator_load_local ((ValaCodeGenerator*) self, _tmp948_, (ValaExpression*) expr);
														_tmp950_ = _tmp949_;
														vala_expression_set_target_value ((ValaExpression*) expr, _tmp950_);
														_vala_target_value_unref0 (_tmp950_);
													}
												}
												_vala_code_node_unref0 (local);
											} else {
												ValaSymbol* _tmp951_;
												ValaSymbol* _tmp952_;
												_tmp951_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
												_tmp952_ = _tmp951_;
												if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp952_, VALA_TYPE_PARAMETER)) {
													ValaParameter* param = NULL;
													ValaSymbol* _tmp953_;
													ValaSymbol* _tmp954_;
													ValaParameter* _tmp955_;
													gboolean _tmp956_;
													gboolean _tmp957_;
													_tmp953_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
													_tmp954_ = _tmp953_;
													_tmp955_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp954_, VALA_TYPE_PARAMETER, ValaParameter));
													param = _tmp955_;
													_tmp956_ = vala_expression_get_lvalue ((ValaExpression*) expr);
													_tmp957_ = _tmp956_;
													if (_tmp957_) {
														ValaParameter* _tmp958_;
														ValaTargetValue* _tmp959_;
														ValaTargetValue* _tmp960_;
														_tmp958_ = param;
														_tmp959_ = vala_ccode_base_module_get_parameter_cvalue ((ValaCCodeBaseModule*) self, _tmp958_);
														_tmp960_ = _tmp959_;
														vala_expression_set_target_value ((ValaExpression*) expr, _tmp960_);
														_vala_target_value_unref0 (_tmp960_);
													} else {
														ValaParameter* _tmp961_;
														ValaTargetValue* _tmp962_;
														ValaTargetValue* _tmp963_;
														_tmp961_ = param;
														_tmp962_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, _tmp961_, (ValaExpression*) expr);
														_tmp963_ = _tmp962_;
														vala_expression_set_target_value ((ValaExpression*) expr, _tmp963_);
														_vala_target_value_unref0 (_tmp963_);
													}
													_vala_code_node_unref0 (param);
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	_tmp964_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
	_tmp965_ = _tmp964_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp965_, VALA_TYPE_VARIABLE)) {
		ValaGLibValue* cvalue = NULL;
		ValaTargetValue* _tmp966_;
		ValaTargetValue* _tmp967_;
		gboolean _tmp968_ = FALSE;
		gboolean _tmp969_ = FALSE;
		ValaGLibValue* _tmp970_;
		ValaDataType* _tmp971_;
		ValaDataType* _tmp972_;
		_tmp966_ = vala_expression_get_target_value ((ValaExpression*) expr);
		_tmp967_ = _tmp966_;
		cvalue = G_TYPE_CHECK_INSTANCE_CAST (_tmp967_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
		_tmp970_ = cvalue;
		_tmp971_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp970_);
		_tmp972_ = _tmp971_;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp972_, VALA_TYPE_GENERIC_TYPE)) {
			ValaGLibValue* _tmp973_;
			ValaDataType* _tmp974_;
			ValaDataType* _tmp975_;
			ValaTypeSymbol* _tmp976_;
			ValaTypeSymbol* _tmp977_;
			_tmp973_ = cvalue;
			_tmp974_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp973_);
			_tmp975_ = _tmp974_;
			_tmp976_ = vala_data_type_get_type_symbol (_tmp975_);
			_tmp977_ = _tmp976_;
			_tmp969_ = _tmp977_ != NULL;
		} else {
			_tmp969_ = FALSE;
		}
		if (_tmp969_) {
			ValaGLibValue* _tmp978_;
			ValaDataType* _tmp979_;
			ValaDataType* _tmp980_;
			ValaTypeSymbol* _tmp981_;
			ValaTypeSymbol* _tmp982_;
			ValaDataType* _tmp983_;
			ValaDataType* _tmp984_;
			ValaTypeSymbol* _tmp985_;
			ValaTypeSymbol* _tmp986_;
			_tmp978_ = cvalue;
			_tmp979_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp978_);
			_tmp980_ = _tmp979_;
			_tmp981_ = vala_data_type_get_type_symbol (_tmp980_);
			_tmp982_ = _tmp981_;
			_tmp983_ = vala_expression_get_value_type ((ValaExpression*) expr);
			_tmp984_ = _tmp983_;
			_tmp985_ = vala_data_type_get_type_symbol (_tmp984_);
			_tmp986_ = _tmp985_;
			_tmp968_ = _tmp982_ != _tmp986_;
		} else {
			_tmp968_ = FALSE;
		}
		if (_tmp968_) {
			ValaGLibValue* _tmp987_;
			ValaGLibValue* _tmp988_;
			ValaCCodeExpression* _tmp989_;
			ValaDataType* _tmp990_;
			ValaDataType* _tmp991_;
			gchar* _tmp992_;
			gchar* _tmp993_;
			ValaCCodeCastExpression* _tmp994_;
			_tmp987_ = cvalue;
			_tmp988_ = cvalue;
			_tmp989_ = _tmp988_->cvalue;
			_tmp990_ = vala_expression_get_value_type ((ValaExpression*) expr);
			_tmp991_ = _tmp990_;
			_tmp992_ = vala_get_ccode_name ((ValaCodeNode*) _tmp991_);
			_tmp993_ = _tmp992_;
			_tmp994_ = vala_ccode_cast_expression_new (_tmp989_, _tmp993_);
			_vala_ccode_node_unref0 (_tmp987_->cvalue);
			_tmp987_->cvalue = (ValaCCodeExpression*) _tmp994_;
			_g_free0 (_tmp993_);
		}
	}
	_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;
	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_;
						gchar* _tmp168_;
						gchar* _tmp169_;
						gchar* _tmp170_;
						gchar* _tmp171_;
						ValaCCodeExpression* _tmp172_;
						ValaDataType* _tmp173_;
						ValaDataType* _tmp174_;
						_tmp167_ = _result_;
						_tmp168_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
						_tmp169_ = _tmp168_;
						_tmp170_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp169_);
						_tmp171_ = _tmp170_;
						_tmp172_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp171_);
						_vala_ccode_node_unref0 (_tmp167_->delegate_target_cvalue);
						_tmp167_->delegate_target_cvalue = _tmp172_;
						_g_free0 (_tmp171_);
						_g_free0 (_tmp169_);
						_tmp173_ = vala_variable_get_variable_type ((ValaVariable*) local);
						_tmp174_ = _tmp173_;
						if (vala_data_type_is_disposable (_tmp174_)) {
							ValaGLibValue* _tmp175_;
							gchar* _tmp176_;
							gchar* _tmp177_;
							gchar* _tmp178_;
							gchar* _tmp179_;
							ValaCCodeExpression* _tmp180_;
							_tmp175_ = _result_;
							_tmp176_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
							_tmp177_ = _tmp176_;
							_tmp178_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp177_);
							_tmp179_ = _tmp178_;
							_tmp180_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp179_);
							_vala_ccode_node_unref0 (_tmp175_->delegate_target_destroy_notify_cvalue);
							_tmp175_->delegate_target_destroy_notify_cvalue = _tmp180_;
							_g_free0 (_tmp179_);
							_g_free0 (_tmp177_);
						}
					} else {
						ValaGLibValue* _tmp181_;
						gchar* _tmp182_;
						gchar* _tmp183_;
						gchar* _tmp184_;
						gchar* _tmp185_;
						ValaCCodeIdentifier* _tmp186_;
						ValaDataType* _tmp187_;
						ValaDataType* _tmp188_;
						_tmp181_ = _result_;
						_tmp182_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
						_tmp183_ = _tmp182_;
						_tmp184_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp183_);
						_tmp185_ = _tmp184_;
						_tmp186_ = vala_ccode_identifier_new (_tmp185_);
						_vala_ccode_node_unref0 (_tmp181_->delegate_target_cvalue);
						_tmp181_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp186_;
						_g_free0 (_tmp185_);
						_g_free0 (_tmp183_);
						_tmp187_ = vala_variable_get_variable_type ((ValaVariable*) local);
						_tmp188_ = _tmp187_;
						if (vala_data_type_is_disposable (_tmp188_)) {
							ValaGLibValue* _tmp189_;
							gchar* _tmp190_;
							gchar* _tmp191_;
							gchar* _tmp192_;
							gchar* _tmp193_;
							ValaCCodeIdentifier* _tmp194_;
							_tmp189_ = _result_;
							_tmp190_ = vala_ccode_base_module_get_local_cname ((ValaCCodeBaseModule*) self, local);
							_tmp191_ = _tmp190_;
							_tmp192_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp191_);
							_tmp193_ = _tmp192_;
							_tmp194_ = vala_ccode_identifier_new (_tmp193_);
							_vala_ccode_node_unref0 (_tmp189_->delegate_target_destroy_notify_cvalue);
							_tmp189_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp194_;
							_g_free0 (_tmp193_);
							_g_free0 (_tmp191_);
						}
					}
				}
			}
		}
	}
	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;
	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_;
			ValaCCodeExpression* _tmp41_;
			_tmp40_ = _result_;
			_tmp41_ = vala_ccode_base_module_get_this_cexpression ((ValaCCodeBaseModule*) self);
			_vala_ccode_node_unref0 (_tmp40_->cvalue);
			_tmp40_->cvalue = _tmp41_;
		} else {
			ValaStruct* st = NULL;
			ValaGLibValue* _tmp42_;
			ValaDataType* _tmp43_;
			ValaDataType* _tmp44_;
			ValaTypeSymbol* _tmp45_;
			ValaTypeSymbol* _tmp46_;
			gboolean _tmp47_ = FALSE;
			ValaStruct* _tmp48_;
			_tmp42_ = _result_;
			_tmp43_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp42_);
			_tmp44_ = _tmp43_;
			_tmp45_ = vala_data_type_get_type_symbol (_tmp44_);
			_tmp46_ = _tmp45_;
			st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp46_) : NULL;
			_tmp48_ = st;
			if (_tmp48_ != NULL) {
				ValaStruct* _tmp49_;
				_tmp49_ = st;
				_tmp47_ = !vala_struct_is_simple_type (_tmp49_);
			} else {
				_tmp47_ = FALSE;
			}
			if (_tmp47_) {
				ValaGLibValue* _tmp50_;
				ValaCCodeIdentifier* _tmp51_;
				_tmp50_ = _result_;
				_tmp51_ = vala_ccode_identifier_new ("(*self)");
				_vala_ccode_node_unref0 (_tmp50_->cvalue);
				_tmp50_->cvalue = (ValaCCodeExpression*) _tmp51_;
			} else {
				ValaGLibValue* _tmp52_;
				ValaCCodeIdentifier* _tmp53_;
				_tmp52_ = _result_;
				_tmp53_ = vala_ccode_identifier_new ("self");
				_vala_ccode_node_unref0 (_tmp52_->cvalue);
				_tmp52_->cvalue = (ValaCCodeExpression*) _tmp53_;
			}
		}
	} else {
		gchar* name = NULL;
		gchar* _tmp54_;
		gboolean _tmp55_ = FALSE;
		gboolean _tmp56_;
		gboolean _tmp57_;
		gboolean _tmp208_ = FALSE;
		gboolean _tmp209_;
		gboolean _tmp210_;
		_tmp54_ = vala_get_ccode_name ((ValaCodeNode*) param);
		name = _tmp54_;
		_tmp56_ = vala_parameter_get_captured (param);
		_tmp57_ = _tmp56_;
		if (_tmp57_) {
			gboolean _tmp58_;
			gboolean _tmp59_;
			_tmp58_ = vala_ccode_base_module_get_is_in_method_precondition ((ValaCCodeBaseModule*) self);
			_tmp59_ = _tmp58_;
			_tmp55_ = !_tmp59_;
		} else {
			_tmp55_ = FALSE;
		}
		if (_tmp55_) {
			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_;
					gchar* _tmp133_;
					gchar* _tmp134_;
					ValaCCodeExpression* _tmp135_;
					ValaDelegateType* _tmp136_;
					_tmp132_ = _result_;
					_tmp133_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
					_tmp134_ = _tmp133_;
					_tmp135_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp134_);
					_vala_ccode_node_unref0 (_tmp132_->delegate_target_cvalue);
					_tmp132_->delegate_target_cvalue = _tmp135_;
					_g_free0 (_tmp134_);
					_tmp136_ = delegate_type;
					if (vala_data_type_is_disposable ((ValaDataType*) _tmp136_)) {
						ValaGLibValue* _tmp137_;
						gchar* _tmp138_;
						gchar* _tmp139_;
						ValaCCodeExpression* _tmp140_;
						_tmp137_ = _result_;
						_tmp138_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
						_tmp139_ = _tmp138_;
						_tmp140_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp139_);
						_vala_ccode_node_unref0 (_tmp137_->delegate_target_destroy_notify_cvalue);
						_tmp137_->delegate_target_destroy_notify_cvalue = _tmp140_;
						_g_free0 (_tmp139_);
					}
				}
			} else {
				ValaStruct* type_as_struct = NULL;
				ValaGLibValue* _tmp141_;
				ValaDataType* _tmp142_;
				ValaDataType* _tmp143_;
				ValaTypeSymbol* _tmp144_;
				ValaTypeSymbol* _tmp145_;
				ValaParameterDirection _tmp146_;
				ValaParameterDirection _tmp147_;
				gboolean _tmp150_ = FALSE;
				ValaParameterDirection _tmp151_;
				ValaParameterDirection _tmp152_;
				gboolean _tmp173_ = FALSE;
				gboolean _tmp174_ = FALSE;
				_tmp141_ = _result_;
				_tmp142_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp141_);
				_tmp143_ = _tmp142_;
				_tmp144_ = vala_data_type_get_type_symbol (_tmp143_);
				_tmp145_ = _tmp144_;
				type_as_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp145_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp145_) : NULL;
				_tmp146_ = vala_parameter_get_direction (param);
				_tmp147_ = _tmp146_;
				if (_tmp147_ == VALA_PARAMETER_DIRECTION_OUT) {
					const gchar* _tmp148_;
					gchar* _tmp149_;
					_tmp148_ = name;
					_tmp149_ = g_strdup_printf ("_vala_%s", _tmp148_);
					_g_free0 (name);
					name = _tmp149_;
				}
				_tmp151_ = vala_parameter_get_direction (param);
				_tmp152_ = _tmp151_;
				if (_tmp152_ == VALA_PARAMETER_DIRECTION_REF) {
					_tmp150_ = TRUE;
				} else {
					gboolean _tmp153_ = FALSE;
					gboolean _tmp154_ = FALSE;
					gboolean _tmp155_ = FALSE;
					ValaParameterDirection _tmp156_;
					ValaParameterDirection _tmp157_;
					_tmp156_ = vala_parameter_get_direction (param);
					_tmp157_ = _tmp156_;
					if (_tmp157_ == VALA_PARAMETER_DIRECTION_IN) {
						ValaStruct* _tmp158_;
						_tmp158_ = type_as_struct;
						_tmp155_ = _tmp158_ != NULL;
					} else {
						_tmp155_ = FALSE;
					}
					if (_tmp155_) {
						ValaStruct* _tmp159_;
						_tmp159_ = type_as_struct;
						_tmp154_ = !vala_struct_is_simple_type (_tmp159_);
					} else {
						_tmp154_ = FALSE;
					}
					if (_tmp154_) {
						ValaGLibValue* _tmp160_;
						ValaDataType* _tmp161_;
						ValaDataType* _tmp162_;
						gboolean _tmp163_;
						gboolean _tmp164_;
						_tmp160_ = _result_;
						_tmp161_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp160_);
						_tmp162_ = _tmp161_;
						_tmp163_ = vala_data_type_get_nullable (_tmp162_);
						_tmp164_ = _tmp163_;
						_tmp153_ = !_tmp164_;
					} else {
						_tmp153_ = FALSE;
					}
					_tmp150_ = _tmp153_;
				}
				if (_tmp150_) {
					ValaGLibValue* _tmp165_;
					const gchar* _tmp166_;
					ValaCCodeIdentifier* _tmp167_;
					ValaCCodeIdentifier* _tmp168_;
					ValaCCodeUnaryExpression* _tmp169_;
					_tmp165_ = _result_;
					_tmp166_ = name;
					_tmp167_ = vala_ccode_identifier_new (_tmp166_);
					_tmp168_ = _tmp167_;
					_tmp169_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp168_);
					_vala_ccode_node_unref0 (_tmp165_->cvalue);
					_tmp165_->cvalue = (ValaCCodeExpression*) _tmp169_;
					_vala_ccode_node_unref0 (_tmp168_);
				} else {
					ValaGLibValue* _tmp170_;
					const gchar* _tmp171_;
					ValaCCodeExpression* _tmp172_;
					_tmp170_ = _result_;
					_tmp171_ = name;
					_tmp172_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp171_);
					_vala_ccode_node_unref0 (_tmp170_->cvalue);
					_tmp170_->cvalue = _tmp172_;
				}
				if (vala_get_ccode_delegate_target ((ValaCodeNode*) param)) {
					ValaDelegateType* _tmp175_;
					_tmp175_ = delegate_type;
					_tmp174_ = _tmp175_ != NULL;
				} else {
					_tmp174_ = FALSE;
				}
				if (_tmp174_) {
					ValaDelegateType* _tmp176_;
					ValaDelegate* _tmp177_;
					ValaDelegate* _tmp178_;
					gboolean _tmp179_;
					gboolean _tmp180_;
					_tmp176_ = delegate_type;
					_tmp177_ = vala_delegate_type_get_delegate_symbol (_tmp176_);
					_tmp178_ = _tmp177_;
					_tmp179_ = vala_delegate_get_has_target (_tmp178_);
					_tmp180_ = _tmp179_;
					_tmp173_ = _tmp180_;
				} else {
					_tmp173_ = FALSE;
				}
				if (_tmp173_) {
					gchar* target_cname = NULL;
					gchar* _tmp181_;
					gchar* destroy_cname = NULL;
					gchar* _tmp182_;
					ValaParameterDirection _tmp183_;
					ValaParameterDirection _tmp184_;
					ValaCCodeExpression* target_expr = NULL;
					const gchar* _tmp189_;
					ValaCCodeIdentifier* _tmp190_;
					ValaCCodeExpression* delegate_target_destroy_notify = NULL;
					const gchar* _tmp191_;
					ValaCCodeIdentifier* _tmp192_;
					ValaParameterDirection _tmp193_;
					ValaParameterDirection _tmp194_;
					ValaGLibValue* _tmp199_;
					ValaCCodeExpression* _tmp200_;
					ValaCCodeExpression* _tmp201_;
					ValaGLibValue* _tmp202_;
					ValaDataType* _tmp203_;
					ValaDataType* _tmp204_;
					_tmp181_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
					target_cname = _tmp181_;
					_tmp182_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
					destroy_cname = _tmp182_;
					_tmp183_ = vala_parameter_get_direction (param);
					_tmp184_ = _tmp183_;
					if (_tmp184_ == VALA_PARAMETER_DIRECTION_OUT) {
						const gchar* _tmp185_;
						gchar* _tmp186_;
						const gchar* _tmp187_;
						gchar* _tmp188_;
						_tmp185_ = target_cname;
						_tmp186_ = g_strdup_printf ("_vala_%s", _tmp185_);
						_g_free0 (target_cname);
						target_cname = _tmp186_;
						_tmp187_ = destroy_cname;
						_tmp188_ = g_strdup_printf ("_vala_%s", _tmp187_);
						_g_free0 (destroy_cname);
						destroy_cname = _tmp188_;
					}
					_tmp189_ = target_cname;
					_tmp190_ = vala_ccode_identifier_new (_tmp189_);
					target_expr = (ValaCCodeExpression*) _tmp190_;
					_tmp191_ = destroy_cname;
					_tmp192_ = vala_ccode_identifier_new (_tmp191_);
					delegate_target_destroy_notify = (ValaCCodeExpression*) _tmp192_;
					_tmp193_ = vala_parameter_get_direction (param);
					_tmp194_ = _tmp193_;
					if (_tmp194_ == VALA_PARAMETER_DIRECTION_REF) {
						ValaCCodeExpression* _tmp195_;
						ValaCCodeUnaryExpression* _tmp196_;
						ValaCCodeExpression* _tmp197_;
						ValaCCodeUnaryExpression* _tmp198_;
						_tmp195_ = target_expr;
						_tmp196_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp195_);
						_vala_ccode_node_unref0 (target_expr);
						target_expr = (ValaCCodeExpression*) _tmp196_;
						_tmp197_ = delegate_target_destroy_notify;
						_tmp198_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp197_);
						_vala_ccode_node_unref0 (delegate_target_destroy_notify);
						delegate_target_destroy_notify = (ValaCCodeExpression*) _tmp198_;
					}
					_tmp199_ = _result_;
					_tmp200_ = target_expr;
					_tmp201_ = _vala_ccode_node_ref0 (_tmp200_);
					_vala_ccode_node_unref0 (_tmp199_->delegate_target_cvalue);
					_tmp199_->delegate_target_cvalue = _tmp201_;
					_tmp202_ = _result_;
					_tmp203_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp202_);
					_tmp204_ = _tmp203_;
					if (vala_data_type_is_disposable (_tmp204_)) {
						ValaGLibValue* _tmp205_;
						ValaCCodeExpression* _tmp206_;
						ValaCCodeExpression* _tmp207_;
						_tmp205_ = _result_;
						_tmp206_ = delegate_target_destroy_notify;
						_tmp207_ = _vala_ccode_node_ref0 (_tmp206_);
						_vala_ccode_node_unref0 (_tmp205_->delegate_target_destroy_notify_cvalue);
						_tmp205_->delegate_target_destroy_notify_cvalue = _tmp207_;
					}
					_vala_ccode_node_unref0 (delegate_target_destroy_notify);
					_vala_ccode_node_unref0 (target_expr);
					_g_free0 (destroy_cname);
					_g_free0 (target_cname);
				}
			}
		}
		_tmp209_ = vala_parameter_get_captured (param);
		_tmp210_ = _tmp209_;
		if (!_tmp210_) {
			ValaArrayType* _tmp211_;
			_tmp211_ = array_type;
			_tmp208_ = _tmp211_ != NULL;
		} else {
			_tmp208_ = FALSE;
		}
		if (_tmp208_) {
			gboolean _tmp212_ = FALSE;
			if (vala_get_ccode_array_length ((ValaCodeNode*) param)) {
				_tmp212_ = !vala_get_ccode_array_null_terminated ((ValaCodeNode*) param);
			} else {
				_tmp212_ = FALSE;
			}
			if (_tmp212_) {
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp213_ = FALSE;
						_tmp213_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp215_;
							gint _tmp216_;
							gint _tmp217_;
							ValaCCodeExpression* length_expr = NULL;
							gchar* _tmp218_;
							gchar* _tmp219_;
							ValaCCodeExpression* _tmp220_;
							ValaCCodeExpression* _tmp221_;
							ValaParameterDirection _tmp222_;
							ValaParameterDirection _tmp223_;
							ValaGLibValue* _tmp232_;
							ValaCCodeExpression* _tmp233_;
							if (!_tmp213_) {
								gint _tmp214_;
								_tmp214_ = dim;
								dim = _tmp214_ + 1;
							}
							_tmp213_ = FALSE;
							_tmp215_ = array_type;
							_tmp216_ = vala_array_type_get_rank (_tmp215_);
							_tmp217_ = _tmp216_;
							if (!(dim <= _tmp217_)) {
								break;
							}
							_tmp218_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) param, dim);
							_tmp219_ = _tmp218_;
							_tmp220_ = vala_ccode_base_module_get_cexpression ((ValaCCodeBaseModule*) self, _tmp219_);
							_tmp221_ = _tmp220_;
							_g_free0 (_tmp219_);
							length_expr = _tmp221_;
							_tmp222_ = vala_parameter_get_direction (param);
							_tmp223_ = _tmp222_;
							if (_tmp223_ == VALA_PARAMETER_DIRECTION_OUT) {
								const gchar* _tmp224_;
								gchar* _tmp225_;
								gchar* _tmp226_;
								ValaCCodeExpression* _tmp227_;
								_tmp224_ = name;
								_tmp225_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp224_, dim);
								_tmp226_ = _tmp225_;
								_tmp227_ = vala_ccode_base_module_get_cexpression ((ValaCCodeBaseModule*) self, _tmp226_);
								_vala_ccode_node_unref0 (length_expr);
								length_expr = _tmp227_;
								_g_free0 (_tmp226_);
							} else {
								ValaParameterDirection _tmp228_;
								ValaParameterDirection _tmp229_;
								_tmp228_ = vala_parameter_get_direction (param);
								_tmp229_ = _tmp228_;
								if (_tmp229_ == VALA_PARAMETER_DIRECTION_REF) {
									ValaCCodeExpression* _tmp230_;
									ValaCCodeUnaryExpression* _tmp231_;
									_tmp230_ = length_expr;
									_tmp231_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp230_);
									_vala_ccode_node_unref0 (length_expr);
									length_expr = (ValaCCodeExpression*) _tmp231_;
								}
							}
							_tmp232_ = _result_;
							_tmp233_ = length_expr;
							vala_glib_value_append_array_length_cvalue (_tmp232_, _tmp233_);
							_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;
	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* _tmp31_;
		ValaSymbol* _tmp32_;
		ValaDataType* _tmp33_;
		ValaClass* cl = NULL;
		ValaDataType* _tmp34_;
		ValaTypeSymbol* _tmp35_;
		ValaTypeSymbol* _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 _tmp64_ = FALSE;
		ValaDataType* _tmp65_;
		ValaTypeSymbol* _tmp66_;
		ValaTypeSymbol* _tmp67_;
		gboolean _tmp81_ = FALSE;
		ValaArrayType* _tmp82_;
		pub_inst = NULL;
		if (instance != NULL) {
			ValaCCodeExpression* _tmp29_;
			ValaCCodeExpression* _tmp30_;
			_tmp29_ = vala_get_cvalue_ (instance);
			_tmp30_ = _vala_ccode_node_ref0 (_tmp29_);
			_vala_ccode_node_unref0 (pub_inst);
			pub_inst = _tmp30_;
		}
		_tmp31_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
		_tmp32_ = _tmp31_;
		_tmp33_ = vala_semantic_analyzer_get_data_type_for_symbol (_tmp32_);
		instance_target_type = _tmp33_;
		_tmp34_ = instance_target_type;
		_tmp35_ = vala_data_type_get_type_symbol (_tmp34_);
		_tmp36_ = _tmp35_;
		cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp36_) : NULL;
		_tmp38_ = instance_target_type;
		_tmp39_ = vala_data_type_get_type_symbol (_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_;
			ValaGLibValue* _tmp62_;
			ValaCCodeInvalidExpression* _tmp63_;
			_tmp58_ = vala_code_node_get_source_reference ((ValaCodeNode*) field);
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_symbol_get_full_name ((ValaSymbol*) field);
			_tmp61_ = _tmp60_;
			vala_report_error (_tmp59_, "Invalid access to instance member `%s'", _tmp61_);
			_g_free0 (_tmp61_);
			_tmp62_ = _result_;
			_tmp63_ = vala_ccode_invalid_expression_new ();
			_vala_ccode_node_unref0 (_tmp62_->cvalue);
			_tmp62_->cvalue = (ValaCCodeExpression*) _tmp63_;
			result = (ValaTargetValue*) _result_;
			_vala_ccode_node_unref0 (inst);
			_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;
		}
		_tmp65_ = instance_target_type;
		_tmp66_ = vala_data_type_get_type_symbol (_tmp65_);
		_tmp67_ = _tmp66_;
		if (vala_typesymbol_is_reference_type (_tmp67_)) {
			_tmp64_ = TRUE;
		} else {
			gboolean _tmp68_ = FALSE;
			if (instance != NULL) {
				ValaDataType* _tmp69_;
				ValaDataType* _tmp70_;
				_tmp69_ = vala_target_value_get_value_type (instance);
				_tmp70_ = _tmp69_;
				_tmp68_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp70_, VALA_TYPE_POINTER_TYPE);
			} else {
				_tmp68_ = FALSE;
			}
			_tmp64_ = _tmp68_;
		}
		if (_tmp64_) {
			ValaGLibValue* _tmp71_;
			ValaCCodeExpression* _tmp72_;
			gchar* _tmp73_;
			gchar* _tmp74_;
			ValaCCodeMemberAccess* _tmp75_;
			_tmp71_ = _result_;
			_tmp72_ = inst;
			_tmp73_ = vala_get_ccode_name ((ValaCodeNode*) field);
			_tmp74_ = _tmp73_;
			_tmp75_ = vala_ccode_member_access_new_pointer (_tmp72_, _tmp74_);
			_vala_ccode_node_unref0 (_tmp71_->cvalue);
			_tmp71_->cvalue = (ValaCCodeExpression*) _tmp75_;
			_g_free0 (_tmp74_);
		} else {
			ValaGLibValue* _tmp76_;
			ValaCCodeExpression* _tmp77_;
			gchar* _tmp78_;
			gchar* _tmp79_;
			ValaCCodeMemberAccess* _tmp80_;
			_tmp76_ = _result_;
			_tmp77_ = inst;
			_tmp78_ = vala_get_ccode_name ((ValaCodeNode*) field);
			_tmp79_ = _tmp78_;
			_tmp80_ = vala_ccode_member_access_new (_tmp77_, _tmp79_, FALSE);
			_vala_ccode_node_unref0 (_tmp76_->cvalue);
			_tmp76_->cvalue = (ValaCCodeExpression*) _tmp80_;
			_g_free0 (_tmp79_);
		}
		_tmp82_ = array_type;
		if (_tmp82_ != NULL) {
			_tmp81_ = vala_get_ccode_array_length ((ValaCodeNode*) field);
		} else {
			_tmp81_ = FALSE;
		}
		if (_tmp81_) {
			gboolean _tmp99_ = FALSE;
			ValaArrayType* _tmp100_;
			gint _tmp101_;
			gint _tmp102_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp83_ = FALSE;
					_tmp83_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp85_;
						gint _tmp86_;
						gint _tmp87_;
						ValaCCodeExpression* length_expr = NULL;
						gchar* length_cname = NULL;
						gchar* _tmp88_;
						ValaSymbol* _tmp89_;
						ValaSymbol* _tmp90_;
						ValaGLibValue* _tmp97_;
						ValaCCodeExpression* _tmp98_;
						if (!_tmp83_) {
							gint _tmp84_;
							_tmp84_ = dim;
							dim = _tmp84_ + 1;
						}
						_tmp83_ = FALSE;
						_tmp85_ = array_type;
						_tmp86_ = vala_array_type_get_rank (_tmp85_);
						_tmp87_ = _tmp86_;
						if (!(dim <= _tmp87_)) {
							break;
						}
						length_expr = NULL;
						_tmp88_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) field, dim);
						length_cname = _tmp88_;
						_tmp89_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
						_tmp90_ = _tmp89_;
						if (vala_typesymbol_is_reference_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))) {
							ValaCCodeExpression* _tmp91_;
							const gchar* _tmp92_;
							ValaCCodeMemberAccess* _tmp93_;
							_tmp91_ = inst;
							_tmp92_ = length_cname;
							_tmp93_ = vala_ccode_member_access_new_pointer (_tmp91_, _tmp92_);
							_vala_ccode_node_unref0 (length_expr);
							length_expr = (ValaCCodeExpression*) _tmp93_;
						} else {
							ValaCCodeExpression* _tmp94_;
							const gchar* _tmp95_;
							ValaCCodeMemberAccess* _tmp96_;
							_tmp94_ = inst;
							_tmp95_ = length_cname;
							_tmp96_ = vala_ccode_member_access_new (_tmp94_, _tmp95_, FALSE);
							_vala_ccode_node_unref0 (length_expr);
							length_expr = (ValaCCodeExpression*) _tmp96_;
						}
						_tmp97_ = _result_;
						_tmp98_ = length_expr;
						vala_glib_value_append_array_length_cvalue (_tmp97_, _tmp98_);
						_g_free0 (length_cname);
						_vala_ccode_node_unref0 (length_expr);
					}
				}
			}
			_tmp100_ = array_type;
			_tmp101_ = vala_array_type_get_rank (_tmp100_);
			_tmp102_ = _tmp101_;
			if (_tmp102_ == 1) {
				_tmp99_ = vala_symbol_is_internal_symbol ((ValaSymbol*) field);
			} else {
				_tmp99_ = FALSE;
			}
			if (_tmp99_) {
				gchar* size_cname = NULL;
				gchar* _tmp103_;
				gchar* _tmp104_;
				gchar* _tmp105_;
				gchar* _tmp106_;
				ValaSymbol* _tmp107_;
				ValaSymbol* _tmp108_;
				_tmp103_ = vala_get_ccode_name ((ValaCodeNode*) field);
				_tmp104_ = _tmp103_;
				_tmp105_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp104_);
				_tmp106_ = _tmp105_;
				_g_free0 (_tmp104_);
				size_cname = _tmp106_;
				_tmp107_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
				_tmp108_ = _tmp107_;
				if (vala_typesymbol_is_reference_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))) {
					ValaGLibValue* _tmp109_;
					ValaCCodeExpression* _tmp110_;
					const gchar* _tmp111_;
					ValaCCodeMemberAccess* _tmp112_;
					ValaCCodeMemberAccess* _tmp113_;
					_tmp109_ = _result_;
					_tmp110_ = inst;
					_tmp111_ = size_cname;
					_tmp112_ = vala_ccode_member_access_new_pointer (_tmp110_, _tmp111_);
					_tmp113_ = _tmp112_;
					vala_set_array_size_cvalue ((ValaTargetValue*) _tmp109_, (ValaCCodeExpression*) _tmp113_);
					_vala_ccode_node_unref0 (_tmp113_);
				} else {
					ValaGLibValue* _tmp114_;
					ValaCCodeExpression* _tmp115_;
					const gchar* _tmp116_;
					ValaCCodeMemberAccess* _tmp117_;
					ValaCCodeMemberAccess* _tmp118_;
					_tmp114_ = _result_;
					_tmp115_ = inst;
					_tmp116_ = size_cname;
					_tmp117_ = vala_ccode_member_access_new (_tmp115_, _tmp116_, FALSE);
					_tmp118_ = _tmp117_;
					vala_set_array_size_cvalue ((ValaTargetValue*) _tmp114_, (ValaCCodeExpression*) _tmp118_);
					_vala_ccode_node_unref0 (_tmp118_);
				}
				_g_free0 (size_cname);
			}
		} else {
			if (vala_get_ccode_delegate_target ((ValaCodeNode*) field)) {
				gchar* target_cname = NULL;
				gchar* _tmp119_;
				gchar* target_destroy_notify_cname = NULL;
				gchar* _tmp120_;
				ValaSymbol* _tmp121_;
				ValaSymbol* _tmp122_;
				_tmp119_ = vala_get_ccode_delegate_target_name ((ValaVariable*) field);
				target_cname = _tmp119_;
				_tmp120_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) field);
				target_destroy_notify_cname = _tmp120_;
				_tmp121_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
				_tmp122_ = _tmp121_;
				if (vala_typesymbol_is_reference_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp122_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))) {
					ValaGLibValue* _tmp123_;
					ValaCCodeExpression* _tmp124_;
					const gchar* _tmp125_;
					ValaCCodeMemberAccess* _tmp126_;
					ValaGLibValue* _tmp127_;
					ValaDataType* _tmp128_;
					ValaDataType* _tmp129_;
					_tmp123_ = _result_;
					_tmp124_ = inst;
					_tmp125_ = target_cname;
					_tmp126_ = vala_ccode_member_access_new_pointer (_tmp124_, _tmp125_);
					_vala_ccode_node_unref0 (_tmp123_->delegate_target_cvalue);
					_tmp123_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp126_;
					_tmp127_ = _result_;
					_tmp128_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp127_);
					_tmp129_ = _tmp128_;
					if (vala_data_type_is_disposable (_tmp129_)) {
						ValaGLibValue* _tmp130_;
						ValaCCodeExpression* _tmp131_;
						const gchar* _tmp132_;
						ValaCCodeMemberAccess* _tmp133_;
						_tmp130_ = _result_;
						_tmp131_ = inst;
						_tmp132_ = target_destroy_notify_cname;
						_tmp133_ = vala_ccode_member_access_new_pointer (_tmp131_, _tmp132_);
						_vala_ccode_node_unref0 (_tmp130_->delegate_target_destroy_notify_cvalue);
						_tmp130_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp133_;
					}
				} else {
					ValaGLibValue* _tmp134_;
					ValaCCodeExpression* _tmp135_;
					const gchar* _tmp136_;
					ValaCCodeMemberAccess* _tmp137_;
					ValaGLibValue* _tmp138_;
					ValaDataType* _tmp139_;
					ValaDataType* _tmp140_;
					_tmp134_ = _result_;
					_tmp135_ = inst;
					_tmp136_ = target_cname;
					_tmp137_ = vala_ccode_member_access_new (_tmp135_, _tmp136_, FALSE);
					_vala_ccode_node_unref0 (_tmp134_->delegate_target_cvalue);
					_tmp134_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp137_;
					_tmp138_ = _result_;
					_tmp139_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp138_);
					_tmp140_ = _tmp139_;
					if (vala_data_type_is_disposable (_tmp140_)) {
						ValaGLibValue* _tmp141_;
						ValaCCodeExpression* _tmp142_;
						const gchar* _tmp143_;
						ValaCCodeMemberAccess* _tmp144_;
						_tmp141_ = _result_;
						_tmp142_ = inst;
						_tmp143_ = target_destroy_notify_cname;
						_tmp144_ = vala_ccode_member_access_new (_tmp142_, _tmp143_, FALSE);
						_vala_ccode_node_unref0 (_tmp141_->delegate_target_destroy_notify_cvalue);
						_tmp141_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp144_;
					}
				}
				_g_free0 (target_destroy_notify_cname);
				_g_free0 (target_cname);
			}
		}
		_vala_ccode_node_unref0 (inst);
		_vala_code_node_unref0 (instance_target_type);
		_vala_ccode_node_unref0 (pub_inst);
	} else {
		ValaMemberBinding _tmp145_;
		ValaMemberBinding _tmp146_;
		_tmp145_ = vala_field_get_binding (field);
		_tmp146_ = _tmp145_;
		if (_tmp146_ == VALA_MEMBER_BINDING_CLASS) {
			ValaClass* cl = NULL;
			ValaSymbol* _tmp147_;
			ValaSymbol* _tmp148_;
			ValaCCodeExpression* cast = NULL;
			ValaClass* _tmp149_;
			ValaCCodeExpression* _tmp150_;
			ValaSymbolAccessibility _tmp151_;
			ValaSymbolAccessibility _tmp152_;
			_tmp147_ = vala_symbol_get_parent_symbol ((ValaSymbol*) field);
			_tmp148_ = _tmp147_;
			cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp148_, VALA_TYPE_CLASS, ValaClass);
			_tmp149_ = cl;
			_tmp150_ = vala_ccode_base_module_get_this_class_cexpression ((ValaCCodeBaseModule*) self, _tmp149_, instance);
			cast = _tmp150_;
			_tmp151_ = vala_symbol_get_access ((ValaSymbol*) field);
			_tmp152_ = _tmp151_;
			if (_tmp152_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
				ValaCCodeFunctionCall* ccall = NULL;
				ValaClass* _tmp153_;
				gchar* _tmp154_;
				gchar* _tmp155_;
				ValaCCodeIdentifier* _tmp156_;
				ValaCCodeIdentifier* _tmp157_;
				ValaCCodeFunctionCall* _tmp158_;
				ValaCCodeFunctionCall* _tmp159_;
				ValaCCodeFunctionCall* _tmp160_;
				ValaCCodeExpression* _tmp161_;
				ValaGLibValue* _tmp162_;
				ValaCCodeFunctionCall* _tmp163_;
				gchar* _tmp164_;
				gchar* _tmp165_;
				ValaCCodeMemberAccess* _tmp166_;
				_tmp153_ = cl;
				_tmp154_ = vala_get_ccode_class_get_private_function (_tmp153_);
				_tmp155_ = _tmp154_;
				_tmp156_ = vala_ccode_identifier_new (_tmp155_);
				_tmp157_ = _tmp156_;
				_tmp158_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp157_);
				_tmp159_ = _tmp158_;
				_vala_ccode_node_unref0 (_tmp157_);
				_g_free0 (_tmp155_);
				ccall = _tmp159_;
				_tmp160_ = ccall;
				_tmp161_ = cast;
				vala_ccode_function_call_add_argument (_tmp160_, _tmp161_);
				_tmp162_ = _result_;
				_tmp163_ = ccall;
				_tmp164_ = vala_get_ccode_name ((ValaCodeNode*) field);
				_tmp165_ = _tmp164_;
				_tmp166_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp163_, _tmp165_);
				_vala_ccode_node_unref0 (_tmp162_->cvalue);
				_tmp162_->cvalue = (ValaCCodeExpression*) _tmp166_;
				_g_free0 (_tmp165_);
				_vala_ccode_node_unref0 (ccall);
			} else {
				ValaGLibValue* _tmp167_;
				ValaCCodeExpression* _tmp168_;
				gchar* _tmp169_;
				gchar* _tmp170_;
				ValaCCodeMemberAccess* _tmp171_;
				_tmp167_ = _result_;
				_tmp168_ = cast;
				_tmp169_ = vala_get_ccode_name ((ValaCodeNode*) field);
				_tmp170_ = _tmp169_;
				_tmp171_ = vala_ccode_member_access_new_pointer (_tmp168_, _tmp170_);
				_vala_ccode_node_unref0 (_tmp167_->cvalue);
				_tmp167_->cvalue = (ValaCCodeExpression*) _tmp171_;
				_g_free0 (_tmp170_);
			}
			_vala_ccode_node_unref0 (cast);
		} else {
			ValaCCodeFile* _tmp172_;
			ValaGLibValue* _tmp173_;
			gchar* _tmp174_;
			gchar* _tmp175_;
			ValaCCodeIdentifier* _tmp176_;
			gboolean _tmp177_ = FALSE;
			ValaArrayType* _tmp178_;
			_tmp172_ = ((ValaCCodeBaseModule*) self)->cfile;
			vala_ccode_base_module_generate_field_declaration ((ValaCCodeBaseModule*) self, field, _tmp172_);
			_tmp173_ = _result_;
			_tmp174_ = vala_get_ccode_name ((ValaCodeNode*) field);
			_tmp175_ = _tmp174_;
			_tmp176_ = vala_ccode_identifier_new (_tmp175_);
			_vala_ccode_node_unref0 (_tmp173_->cvalue);
			_tmp173_->cvalue = (ValaCCodeExpression*) _tmp176_;
			_g_free0 (_tmp175_);
			_tmp178_ = array_type;
			if (_tmp178_ != NULL) {
				_tmp177_ = vala_get_ccode_array_length ((ValaCodeNode*) field);
			} else {
				_tmp177_ = FALSE;
			}
			if (_tmp177_) {
				gboolean _tmp189_ = FALSE;
				ValaArrayType* _tmp190_;
				gint _tmp191_;
				gint _tmp192_;
				{
					gint dim = 0;
					dim = 1;
					{
						gboolean _tmp179_ = FALSE;
						_tmp179_ = TRUE;
						while (TRUE) {
							ValaArrayType* _tmp181_;
							gint _tmp182_;
							gint _tmp183_;
							gchar* length_cname = NULL;
							gchar* _tmp184_;
							ValaGLibValue* _tmp185_;
							const gchar* _tmp186_;
							ValaCCodeIdentifier* _tmp187_;
							ValaCCodeIdentifier* _tmp188_;
							if (!_tmp179_) {
								gint _tmp180_;
								_tmp180_ = dim;
								dim = _tmp180_ + 1;
							}
							_tmp179_ = FALSE;
							_tmp181_ = array_type;
							_tmp182_ = vala_array_type_get_rank (_tmp181_);
							_tmp183_ = _tmp182_;
							if (!(dim <= _tmp183_)) {
								break;
							}
							_tmp184_ = vala_ccode_base_module_get_variable_array_length_cname ((ValaCCodeBaseModule*) self, (ValaVariable*) field, dim);
							length_cname = _tmp184_;
							_tmp185_ = _result_;
							_tmp186_ = length_cname;
							_tmp187_ = vala_ccode_identifier_new (_tmp186_);
							_tmp188_ = _tmp187_;
							vala_glib_value_append_array_length_cvalue (_tmp185_, (ValaCCodeExpression*) _tmp188_);
							_vala_ccode_node_unref0 (_tmp188_);
							_g_free0 (length_cname);
						}
					}
				}
				_tmp190_ = array_type;
				_tmp191_ = vala_array_type_get_rank (_tmp190_);
				_tmp192_ = _tmp191_;
				if (_tmp192_ == 1) {
					_tmp189_ = vala_symbol_is_internal_symbol ((ValaSymbol*) field);
				} else {
					_tmp189_ = FALSE;
				}
				if (_tmp189_) {
					ValaGLibValue* _tmp193_;
					gchar* _tmp194_;
					gchar* _tmp195_;
					gchar* _tmp196_;
					gchar* _tmp197_;
					ValaCCodeIdentifier* _tmp198_;
					ValaCCodeIdentifier* _tmp199_;
					_tmp193_ = _result_;
					_tmp194_ = vala_get_ccode_name ((ValaCodeNode*) field);
					_tmp195_ = _tmp194_;
					_tmp196_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp195_);
					_tmp197_ = _tmp196_;
					_tmp198_ = vala_ccode_identifier_new (_tmp197_);
					_tmp199_ = _tmp198_;
					vala_set_array_size_cvalue ((ValaTargetValue*) _tmp193_, (ValaCCodeExpression*) _tmp199_);
					_vala_ccode_node_unref0 (_tmp199_);
					_g_free0 (_tmp197_);
					_g_free0 (_tmp195_);
				}
			} else {
				if (vala_get_ccode_delegate_target ((ValaCodeNode*) field)) {
					ValaGLibValue* _tmp200_;
					gchar* _tmp201_;
					gchar* _tmp202_;
					ValaCCodeIdentifier* _tmp203_;
					ValaGLibValue* _tmp204_;
					ValaDataType* _tmp205_;
					ValaDataType* _tmp206_;
					_tmp200_ = _result_;
					_tmp201_ = vala_get_ccode_delegate_target_name ((ValaVariable*) field);
					_tmp202_ = _tmp201_;
					_tmp203_ = vala_ccode_identifier_new (_tmp202_);
					_vala_ccode_node_unref0 (_tmp200_->delegate_target_cvalue);
					_tmp200_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp203_;
					_g_free0 (_tmp202_);
					_tmp204_ = _result_;
					_tmp205_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp204_);
					_tmp206_ = _tmp205_;
					if (vala_data_type_is_disposable (_tmp206_)) {
						ValaGLibValue* _tmp207_;
						gchar* _tmp208_;
						gchar* _tmp209_;
						ValaCCodeIdentifier* _tmp210_;
						_tmp207_ = _result_;
						_tmp208_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) field);
						_tmp209_ = _tmp208_;
						_tmp210_ = vala_ccode_identifier_new (_tmp209_);
						_vala_ccode_node_unref0 (_tmp207_->delegate_target_destroy_notify_cvalue);
						_tmp207_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp210_;
						_g_free0 (_tmp209_);
					}
				}
			}
		}
	}
	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;
	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,
                                                    ValaExpression* expr)
{
	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* _tmp89_;
	ValaDataType* _tmp90_;
	ValaDataType* _tmp91_;
	gboolean use_temp = FALSE;
	ValaGLibValue* _tmp92_;
	ValaDataType* _tmp93_;
	ValaDataType* _tmp94_;
	gboolean _tmp105_ = FALSE;
	gboolean _tmp106_;
	gboolean _tmp107_;
	ValaGLibValue* _tmp111_;
	ValaDataType* _tmp112_;
	ValaDataType* _tmp113_;
	gboolean _tmp114_ = FALSE;
	ValaLocalVariable* local = NULL;
	ValaLocalVariable* _tmp117_;
	gboolean _tmp118_ = FALSE;
	ValaLocalVariable* _tmp119_;
	ValaTargetValue* result;
	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_;
		ValaGLibValue* _tmp79_;
		ValaArrayType* _tmp80_;
		gboolean _tmp81_;
		gboolean _tmp82_;
		_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;
		_tmp79_ = _result_;
		_tmp80_ = array_type;
		_tmp81_ = vala_array_type_get_inline_allocated (_tmp80_);
		_tmp82_ = _tmp81_;
		_tmp79_->non_null = _tmp82_;
	} else {
		ValaDelegateType* _tmp83_;
		_tmp83_ = delegate_type;
		if (_tmp83_ != NULL) {
			ValaGLibValue* _tmp88_;
			if (!vala_get_ccode_delegate_target ((ValaCodeNode*) variable)) {
				ValaGLibValue* _tmp84_;
				ValaCCodeConstant* _tmp85_;
				ValaGLibValue* _tmp86_;
				ValaCCodeConstant* _tmp87_;
				_tmp84_ = _result_;
				_tmp85_ = vala_ccode_constant_new ("NULL");
				_vala_ccode_node_unref0 (_tmp84_->delegate_target_cvalue);
				_tmp84_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp85_;
				_tmp86_ = _result_;
				_tmp87_ = vala_ccode_constant_new ("NULL");
				_vala_ccode_node_unref0 (_tmp86_->delegate_target_destroy_notify_cvalue);
				_tmp86_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp87_;
			}
			_tmp88_ = _result_;
			_tmp88_->lvalue = FALSE;
		}
	}
	_tmp89_ = _result_;
	_tmp90_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp89_);
	_tmp91_ = _tmp90_;
	vala_data_type_set_value_owned (_tmp91_, FALSE);
	use_temp = TRUE;
	_tmp92_ = _result_;
	_tmp93_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp92_);
	_tmp94_ = _tmp93_;
	if (!vala_ccode_base_module_is_lvalue_access_allowed ((ValaCCodeBaseModule*) self, _tmp94_)) {
		use_temp = FALSE;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (variable, VALA_TYPE_PARAMETER)) {
		ValaParameter* param = NULL;
		ValaParameter* _tmp95_;
		const gchar* _tmp96_;
		const gchar* _tmp97_;
		_tmp95_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (variable, VALA_TYPE_PARAMETER, ValaParameter));
		param = _tmp95_;
		_tmp96_ = vala_symbol_get_name ((ValaSymbol*) variable);
		_tmp97_ = _tmp96_;
		if (g_strcmp0 (_tmp97_, "this") == 0) {
			use_temp = FALSE;
		} else {
			gboolean _tmp98_ = FALSE;
			ValaParameter* _tmp99_;
			ValaParameterDirection _tmp100_;
			ValaParameterDirection _tmp101_;
			_tmp99_ = param;
			_tmp100_ = vala_parameter_get_direction (_tmp99_);
			_tmp101_ = _tmp100_;
			if (_tmp101_ != VALA_PARAMETER_DIRECTION_OUT) {
				ValaParameter* _tmp102_;
				ValaDataType* _tmp103_;
				ValaDataType* _tmp104_;
				_tmp102_ = param;
				_tmp103_ = vala_variable_get_variable_type ((ValaVariable*) _tmp102_);
				_tmp104_ = _tmp103_;
				_tmp98_ = !vala_data_type_is_real_non_null_struct_type (_tmp104_);
			} else {
				_tmp98_ = FALSE;
			}
			if (_tmp98_) {
				use_temp = FALSE;
			}
		}
		_vala_code_node_unref0 (param);
	}
	_tmp106_ = vala_variable_get_single_assignment (variable);
	_tmp107_ = _tmp106_;
	if (_tmp107_) {
		ValaGLibValue* _tmp108_;
		ValaDataType* _tmp109_;
		ValaDataType* _tmp110_;
		_tmp108_ = _result_;
		_tmp109_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp108_);
		_tmp110_ = _tmp109_;
		_tmp105_ = !vala_data_type_is_real_non_null_struct_type (_tmp110_);
	} else {
		_tmp105_ = FALSE;
	}
	if (_tmp105_) {
		use_temp = FALSE;
	}
	_tmp111_ = _result_;
	_tmp112_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp111_);
	_tmp113_ = _tmp112_;
	if (vala_data_type_is_non_null_simple_type (_tmp113_)) {
		use_temp = FALSE;
	}
	if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_MEMBER_ACCESS)) {
		gboolean _tmp115_;
		gboolean _tmp116_;
		_tmp115_ = vala_member_access_get_tainted_access (G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
		_tmp116_ = _tmp115_;
		_tmp114_ = _tmp116_;
	} else {
		_tmp114_ = FALSE;
	}
	if (_tmp114_) {
		use_temp = TRUE;
	}
	_tmp117_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (variable, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) variable) : NULL);
	local = _tmp117_;
	_tmp119_ = local;
	if (_tmp119_ != NULL) {
		ValaLocalVariable* _tmp120_;
		const gchar* _tmp121_;
		const gchar* _tmp122_;
		_tmp120_ = local;
		_tmp121_ = vala_symbol_get_name ((ValaSymbol*) _tmp120_);
		_tmp122_ = _tmp121_;
		_tmp118_ = string_get (_tmp122_, (glong) 0) == '.';
	} else {
		_tmp118_ = FALSE;
	}
	if (_tmp118_) {
		use_temp = FALSE;
	}
	if (use_temp) {
		ValaGLibValue* _tmp123_;
		ValaTargetValue* _tmp124_;
		_tmp123_ = _result_;
		_tmp124_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp123_, (ValaCodeNode*) variable, NULL);
		_vala_target_value_unref0 (_result_);
		_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp124_, 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,
                                                 ValaExpression* expr)
{
	ValaCCodeMemberAccessModule * self;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* result;
	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_, expr);
	_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,
                                                     ValaExpression* expr)
{
	ValaCCodeMemberAccessModule * self;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* result;
	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_, expr);
	_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;
	self = (ValaCCodeMemberAccessModule*) base;
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) 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, NULL);
	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,
                                                 ValaExpression* expr)
{
	ValaCCodeMemberAccessModule * self;
	ValaTargetValue* _tmp0_;
	ValaTargetValue* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* result;
	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_, expr);
	_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*, ValaExpression*)) vala_ccode_member_access_module_real_load_variable;
	((ValaCodeGeneratorClass *) klass)->load_local = (ValaTargetValue* (*) (ValaCodeGenerator*, ValaLocalVariable*, ValaExpression*)) vala_ccode_member_access_module_real_load_local;
	((ValaCodeGeneratorClass *) klass)->load_parameter = (ValaTargetValue* (*) (ValaCodeGenerator*, ValaParameter*, ValaExpression*)) 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*, ValaExpression*)) vala_ccode_member_access_module_real_load_field;
}

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

static GType
vala_ccode_member_access_module_get_type_once (void)
{
	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);
	return vala_ccode_member_access_module_type_id;
}

GType
vala_ccode_member_access_module_get_type (void)
{
	static volatile gsize vala_ccode_member_access_module_type_id__once = 0;
	if (g_once_init_enter (&vala_ccode_member_access_module_type_id__once)) {
		GType vala_ccode_member_access_module_type_id;
		vala_ccode_member_access_module_type_id = vala_ccode_member_access_module_get_type_once ();
		g_once_init_leave (&vala_ccode_member_access_module_type_id__once, vala_ccode_member_access_module_type_id);
	}
	return vala_ccode_member_access_module_type_id__once;
}

