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

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

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

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

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

#define VALA_GVARIANT_MODULE_TYPE_BASIC_TYPE_INFO (vala_gvariant_module_basic_type_info_get_type ())
typedef struct _ValaGVariantModuleBasicTypeInfo ValaGVariantModuleBasicTypeInfo;
#define _g_free0(var) (var = (g_free (var), NULL))
#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_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_ccode_base_module_emit_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_base_module_emit_context_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))

struct _ValaGVariantModulePrivate {
	gint next_variant_function_id;
};

struct _ValaGVariantModuleBasicTypeInfo {
	const gchar* signature;
	const gchar* type_name;
	gboolean is_string;
};

static gint ValaGVariantModule_private_offset;
static gpointer vala_gvariant_module_parent_class = NULL;

static GType vala_gvariant_module_basic_type_info_get_type (void) G_GNUC_CONST  G_GNUC_UNUSED ;
static ValaGVariantModuleBasicTypeInfo* vala_gvariant_module_basic_type_info_dup (const ValaGVariantModuleBasicTypeInfo* self);
static void vala_gvariant_module_basic_type_info_free (ValaGVariantModuleBasicTypeInfo* self);
static gboolean vala_gvariant_module_is_string_marshalled_enum (ValaTypeSymbol* symbol);
static gchar* vala_gvariant_module_get_dbus_value (ValaGVariantModule* self,
                                            ValaEnumValue* value,
                                            const gchar* default_value);
static gboolean vala_gvariant_module_get_basic_type_info (ValaGVariantModule* self,
                                                   const gchar* signature,
                                                   ValaGVariantModuleBasicTypeInfo* basic_type);
static void vala_gvariant_module_real_visit_enum (ValaCodeVisitor* base,
                                           ValaEnum* en);
static gboolean vala_gvariant_module_real_generate_enum_declaration (ValaCCodeBaseModule* base,
                                                              ValaEnum* en,
                                                              ValaCCodeFile* decl_space);
static void vala_gvariant_module_real_visit_cast_expression (ValaCodeVisitor* base,
                                                      ValaCastExpression* expr);
static ValaCCodeExpression* vala_gvariant_module_get_array_length (ValaGVariantModule* self,
                                                            ValaCCodeExpression* expr,
                                                            gint dim);
static ValaCCodeExpression* vala_gvariant_module_generate_enum_value_from_string (ValaGVariantModule* self,
                                                                           ValaEnumValueType* type,
                                                                           ValaCCodeExpression* expr,
                                                                           ValaCCodeExpression* error_expr);
static ValaCCodeExpression* vala_gvariant_module_deserialize_basic (ValaGVariantModule* self,
                                                             ValaGVariantModuleBasicTypeInfo* basic_type,
                                                             ValaCCodeExpression* variant_expr,
                                                             gboolean transfer);
static ValaCCodeExpression* vala_gvariant_module_deserialize_array (ValaGVariantModule* self,
                                                             ValaArrayType* array_type,
                                                             ValaCCodeExpression* variant_expr,
                                                             ValaCCodeExpression* expr);
static ValaCCodeExpression* vala_gvariant_module_deserialize_buffer_array (ValaGVariantModule* self,
                                                                    ValaArrayType* array_type,
                                                                    ValaCCodeExpression* variant_expr,
                                                                    ValaCCodeExpression* expr);
static void vala_gvariant_module_deserialize_array_dim (ValaGVariantModule* self,
                                                 ValaArrayType* array_type,
                                                 gint dim,
                                                 const gchar* temp_name,
                                                 ValaCCodeExpression* variant_expr,
                                                 ValaCCodeExpression* expr);
static ValaCCodeExpression* vala_gvariant_module_deserialize_struct (ValaGVariantModule* self,
                                                              ValaStruct* st,
                                                              ValaCCodeExpression* variant_expr);
static ValaCCodeExpression* vala_gvariant_module_deserialize_hash_table (ValaGVariantModule* self,
                                                                  ValaObjectType* type,
                                                                  ValaCCodeExpression* variant_expr);
static ValaCCodeExpression* vala_gvariant_module_real_deserialize_expression (ValaCCodeBaseModule* base,
                                                                       ValaDataType* type,
                                                                       ValaCCodeExpression* variant_expr,
                                                                       ValaCCodeExpression* expr,
                                                                       ValaCCodeExpression* error_expr,
                                                                       gboolean* may_fail);
static ValaCCodeExpression* vala_gvariant_module_generate_enum_value_to_string (ValaGVariantModule* self,
                                                                         ValaEnumValueType* type,
                                                                         ValaCCodeExpression* expr);
static ValaCCodeExpression* vala_gvariant_module_serialize_basic (ValaGVariantModule* self,
                                                           ValaGVariantModuleBasicTypeInfo* basic_type,
                                                           ValaCCodeExpression* expr);
static ValaCCodeExpression* vala_gvariant_module_serialize_array (ValaGVariantModule* self,
                                                           ValaArrayType* array_type,
                                                           ValaCCodeExpression* array_expr);
static ValaCCodeExpression* vala_gvariant_module_serialize_buffer_array (ValaGVariantModule* self,
                                                                  ValaArrayType* array_type,
                                                                  ValaCCodeExpression* array_expr);
static ValaCCodeExpression* vala_gvariant_module_serialize_array_dim (ValaGVariantModule* self,
                                                               ValaArrayType* array_type,
                                                               gint dim,
                                                               ValaCCodeExpression* array_expr,
                                                               ValaCCodeExpression* array_iter_expr);
static ValaCCodeExpression* vala_gvariant_module_serialize_struct (ValaGVariantModule* self,
                                                            ValaStruct* st,
                                                            ValaCCodeExpression* struct_expr);
static ValaCCodeExpression* vala_gvariant_module_serialize_hash_table (ValaGVariantModule* self,
                                                                ValaObjectType* type,
                                                                ValaCCodeExpression* hash_table_expr);
static ValaCCodeExpression* vala_gvariant_module_real_serialize_expression (ValaCCodeBaseModule* base,
                                                                     ValaDataType* type,
                                                                     ValaCCodeExpression* expr);
static void vala_gvariant_module_finalize (ValaCodeVisitor * obj);
static GType vala_gvariant_module_get_type_once (void);

static const ValaGVariantModuleBasicTypeInfo VALA_GVARIANT_MODULE_basic_types[12] = {{"y", "byte", FALSE}, {"b", "boolean", FALSE}, {"n", "int16", FALSE}, {"q", "uint16", FALSE}, {"i", "int32", FALSE}, {"u", "uint32", FALSE}, {"x", "int64", FALSE}, {"t", "uint64", FALSE}, {"d", "double", FALSE}, {"s", "string", TRUE}, {"o", "object_path", TRUE}, {"g", "signature", TRUE}};

static inline gpointer
vala_gvariant_module_get_instance_private (ValaGVariantModule* self)
{
	return G_STRUCT_MEMBER_P (self, ValaGVariantModule_private_offset);
}

static gboolean
vala_gvariant_module_is_string_marshalled_enum (ValaTypeSymbol* symbol)
{
	gboolean _tmp0_ = FALSE;
	gboolean result;
	if (symbol != NULL) {
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (symbol, VALA_TYPE_ENUM);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		result = vala_code_node_get_attribute_bool ((ValaCodeNode*) symbol, "DBus", "use_string_marshalling", FALSE);
		return result;
	}
	result = FALSE;
	return result;
}

static gchar*
vala_gvariant_module_get_dbus_value (ValaGVariantModule* self,
                                     ValaEnumValue* value,
                                     const gchar* default_value)
{
	gchar* dbus_value = NULL;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (value != NULL, NULL);
	g_return_val_if_fail (default_value != NULL, NULL);
	_tmp0_ = vala_code_node_get_attribute_string ((ValaCodeNode*) value, "DBus", "value", NULL);
	dbus_value = _tmp0_;
	_tmp1_ = dbus_value;
	if (_tmp1_ != NULL) {
		result = dbus_value;
		return result;
	}
	_tmp2_ = g_strdup (default_value);
	result = _tmp2_;
	_g_free0 (dbus_value);
	return result;
}

gchar*
vala_gvariant_module_get_dbus_signature (ValaSymbol* symbol)
{
	gchar* _tmp0_;
	gchar* result;
	g_return_val_if_fail (symbol != NULL, NULL);
	_tmp0_ = vala_code_node_get_attribute_string ((ValaCodeNode*) symbol, "DBus", "signature", NULL);
	result = _tmp0_;
	return result;
}

static gboolean
vala_gvariant_module_get_basic_type_info (ValaGVariantModule* self,
                                          const gchar* signature,
                                          ValaGVariantModuleBasicTypeInfo* basic_type)
{
	ValaGVariantModuleBasicTypeInfo _vala_basic_type = {0};
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	if (signature != NULL) {
		{
			ValaGVariantModuleBasicTypeInfo* info_collection = NULL;
			gint info_collection_length1 = 0;
			gint _info_collection_size_ = 0;
			gint info_it = 0;
			info_collection = VALA_GVARIANT_MODULE_basic_types;
			info_collection_length1 = G_N_ELEMENTS (VALA_GVARIANT_MODULE_basic_types);
			for (info_it = 0; info_it < info_collection_length1; info_it = info_it + 1) {
				ValaGVariantModuleBasicTypeInfo info = {0};
				info = info_collection[info_it];
				{
					ValaGVariantModuleBasicTypeInfo _tmp0_;
					const gchar* _tmp1_;
					_tmp0_ = info;
					_tmp1_ = _tmp0_.signature;
					if (g_strcmp0 (_tmp1_, signature) == 0) {
						ValaGVariantModuleBasicTypeInfo _tmp2_;
						_tmp2_ = info;
						_vala_basic_type = _tmp2_;
						result = TRUE;
						if (basic_type) {
							*basic_type = _vala_basic_type;
						}
						return result;
					}
				}
			}
		}
	}
	memset (&_vala_basic_type, 0, sizeof (ValaGVariantModuleBasicTypeInfo));
	result = FALSE;
	if (basic_type) {
		*basic_type = _vala_basic_type;
	}
	return result;
}

static void
vala_gvariant_module_real_visit_enum (ValaCodeVisitor* base,
                                      ValaEnum* en)
{
	ValaGVariantModule * self;
	self = (ValaGVariantModule*) base;
	g_return_if_fail (en != NULL);
	VALA_CODE_VISITOR_CLASS (vala_gvariant_module_parent_class)->visit_enum ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GVALUE_MODULE, ValaGValueModule), en);
	if (vala_gvariant_module_is_string_marshalled_enum ((ValaTypeSymbol*) en)) {
		ValaCCodeFile* _tmp0_;
		ValaCCodeFile* _tmp1_;
		ValaCCodeFile* _tmp2_;
		ValaCCodeFunction* _tmp3_;
		ValaCCodeFunction* _tmp4_;
		ValaCCodeFile* _tmp5_;
		ValaCCodeFunction* _tmp6_;
		ValaCCodeFunction* _tmp7_;
		_tmp0_ = ((ValaCCodeBaseModule*) self)->cfile;
		vala_ccode_file_add_include (_tmp0_, "string.h", FALSE);
		_tmp1_ = ((ValaCCodeBaseModule*) self)->cfile;
		vala_ccode_file_add_include (_tmp1_, "gio/gio.h", FALSE);
		_tmp2_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp3_ = vala_gvariant_module_generate_enum_from_string_function (self, en);
		_tmp4_ = _tmp3_;
		vala_ccode_file_add_function (_tmp2_, _tmp4_);
		_vala_ccode_node_unref0 (_tmp4_);
		_tmp5_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp6_ = vala_gvariant_module_generate_enum_to_string_function (self, en);
		_tmp7_ = _tmp6_;
		vala_ccode_file_add_function (_tmp5_, _tmp7_);
		_vala_ccode_node_unref0 (_tmp7_);
	}
}

static gboolean
vala_gvariant_module_real_generate_enum_declaration (ValaCCodeBaseModule* base,
                                                     ValaEnum* en,
                                                     ValaCCodeFile* decl_space)
{
	ValaGVariantModule * self;
	gboolean result;
	self = (ValaGVariantModule*) base;
	g_return_val_if_fail (en != NULL, FALSE);
	g_return_val_if_fail (decl_space != NULL, FALSE);
	if (VALA_CCODE_BASE_MODULE_CLASS (vala_gvariant_module_parent_class)->generate_enum_declaration ((ValaCCodeBaseModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GVALUE_MODULE, ValaGValueModule), en, decl_space)) {
		if (vala_gvariant_module_is_string_marshalled_enum ((ValaTypeSymbol*) en)) {
			ValaCCodeFunction* _tmp0_;
			ValaCCodeFunction* _tmp1_;
			ValaCCodeFunction* _tmp2_;
			ValaCCodeFunction* _tmp3_;
			_tmp0_ = vala_gvariant_module_generate_enum_from_string_function_declaration (self, en);
			_tmp1_ = _tmp0_;
			vala_ccode_file_add_function_declaration (decl_space, _tmp1_);
			_vala_ccode_node_unref0 (_tmp1_);
			_tmp2_ = vala_gvariant_module_generate_enum_to_string_function_declaration (self, en);
			_tmp3_ = _tmp2_;
			vala_ccode_file_add_function_declaration (decl_space, _tmp3_);
			_vala_ccode_node_unref0 (_tmp3_);
		}
		result = TRUE;
		return result;
	}
	result = FALSE;
	return result;
}

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

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

static void
vala_gvariant_module_real_visit_cast_expression (ValaCodeVisitor* base,
                                                 ValaCastExpression* expr)
{
	ValaGVariantModule * self;
	ValaTargetValue* value = NULL;
	ValaExpression* _tmp0_;
	ValaExpression* _tmp1_;
	ValaTargetValue* _tmp2_;
	ValaTargetValue* _tmp3_;
	ValaTargetValue* _tmp4_;
	ValaDataType* target_type = NULL;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	gboolean _tmp10_ = FALSE;
	gboolean _tmp11_;
	gboolean _tmp12_;
	ValaDataType* _tmp23_;
	ValaDataType* _tmp24_;
	ValaCCodeFile* _tmp25_;
	gchar* variant_func = NULL;
	gint _tmp26_;
	gchar* _tmp27_;
	ValaTargetValue* variant = NULL;
	ValaTargetValue* _tmp28_;
	ValaTargetValue* _tmp29_;
	ValaTargetValue* _tmp30_;
	ValaDataType* _tmp31_;
	ValaDataType* _tmp32_;
	gboolean _tmp33_;
	gboolean _tmp34_;
	ValaCCodeFunctionCall* ccall = NULL;
	const gchar* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeIdentifier* _tmp46_;
	ValaCCodeFunctionCall* _tmp47_;
	ValaCCodeFunctionCall* _tmp48_;
	ValaCCodeFunctionCall* _tmp49_;
	ValaTargetValue* _tmp50_;
	ValaCCodeExpression* _tmp51_;
	gboolean needs_init = FALSE;
	ValaDataType* _tmp52_;
	ValaTargetValue* _result_ = NULL;
	ValaDataType* _tmp53_;
	ValaTargetValue* _tmp54_;
	ValaCCodeFunction* cfunc = NULL;
	const gchar* _tmp55_;
	ValaCCodeFunction* _tmp56_;
	ValaCCodeFunction* _tmp57_;
	ValaCCodeFunction* _tmp58_;
	ValaCCodeParameter* _tmp59_;
	ValaCCodeParameter* _tmp60_;
	ValaDataType* _tmp61_;
	ValaDataType* _tmp66_;
	ValaDataType* _tmp103_;
	ValaCCodeBaseModuleEmitContext* _tmp112_;
	ValaCCodeBaseModuleEmitContext* _tmp113_;
	ValaCCodeFunction* _tmp114_;
	ValaCCodeExpression* type_expr = NULL;
	ValaGVariantModuleBasicTypeInfo basic_type = {0};
	ValaGVariantModuleBasicTypeInfo _tmp115_ = {0};
	gboolean is_basic_type = FALSE;
	gboolean _tmp116_;
	gboolean _tmp117_;
	ValaCCodeExpression* func_result = NULL;
	ValaDataType* _tmp182_;
	ValaCCodeIdentifier* _tmp183_;
	ValaCCodeIdentifier* _tmp184_;
	ValaCCodeIdentifier* _tmp185_;
	ValaCCodeIdentifier* _tmp186_;
	ValaCCodeExpression* _tmp187_;
	ValaCCodeExpression* _tmp188_;
	gboolean _tmp189_;
	gboolean _tmp190_;
	ValaCCodeFile* _tmp254_;
	ValaCCodeFunction* _tmp255_;
	ValaCCodeFile* _tmp256_;
	ValaCCodeFunction* _tmp257_;
	ValaTargetValue* _tmp258_;
	ValaTargetValue* _tmp259_;
	ValaTargetValue* _tmp260_;
	self = (ValaGVariantModule*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_cast_expression_get_inner (expr);
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_expression_get_target_value (_tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = _vala_target_value_ref0 (_tmp3_);
	value = _tmp4_;
	_tmp5_ = vala_cast_expression_get_type_reference (expr);
	_tmp6_ = _tmp5_;
	_tmp7_ = _vala_code_node_ref0 (_tmp6_);
	target_type = _tmp7_;
	_tmp11_ = vala_cast_expression_get_is_non_null_cast (expr);
	_tmp12_ = _tmp11_;
	if (_tmp12_) {
		_tmp10_ = TRUE;
	} else {
		ValaTargetValue* _tmp13_;
		ValaDataType* _tmp14_;
		ValaDataType* _tmp15_;
		_tmp13_ = value;
		_tmp14_ = vala_target_value_get_value_type (_tmp13_);
		_tmp15_ = _tmp14_;
		_tmp10_ = _tmp15_ == NULL;
	}
	if (_tmp10_) {
		_tmp9_ = TRUE;
	} else {
		ValaClass* _tmp16_;
		_tmp16_ = ((ValaCCodeBaseModule*) self)->gvariant_type;
		_tmp9_ = _tmp16_ == NULL;
	}
	if (_tmp9_) {
		_tmp8_ = TRUE;
	} else {
		ValaTargetValue* _tmp17_;
		ValaDataType* _tmp18_;
		ValaDataType* _tmp19_;
		ValaTypeSymbol* _tmp20_;
		ValaTypeSymbol* _tmp21_;
		ValaClass* _tmp22_;
		_tmp17_ = value;
		_tmp18_ = vala_target_value_get_value_type (_tmp17_);
		_tmp19_ = _tmp18_;
		_tmp20_ = vala_data_type_get_type_symbol (_tmp19_);
		_tmp21_ = _tmp20_;
		_tmp22_ = ((ValaCCodeBaseModule*) self)->gvariant_type;
		_tmp8_ = _tmp21_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
	}
	if (_tmp8_) {
		VALA_CODE_VISITOR_CLASS (vala_gvariant_module_parent_class)->visit_cast_expression ((ValaCodeVisitor*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GVALUE_MODULE, ValaGValueModule), expr);
		_vala_code_node_unref0 (target_type);
		_vala_target_value_unref0 (value);
		return;
	}
	_tmp23_ = vala_cast_expression_get_type_reference (expr);
	_tmp24_ = _tmp23_;
	_tmp25_ = ((ValaCCodeBaseModule*) self)->cfile;
	vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp24_, _tmp25_);
	self->priv->next_variant_function_id = self->priv->next_variant_function_id + 1;
	_tmp26_ = self->priv->next_variant_function_id;
	_tmp27_ = g_strdup_printf ("_variant_get%d", _tmp26_);
	variant_func = _tmp27_;
	_tmp28_ = value;
	_tmp29_ = _vala_target_value_ref0 (_tmp28_);
	variant = _tmp29_;
	_tmp30_ = value;
	_tmp31_ = vala_target_value_get_value_type (_tmp30_);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_data_type_get_value_owned (_tmp32_);
	_tmp34_ = _tmp33_;
	if (_tmp34_) {
		ValaTargetValue* temp_value = NULL;
		ValaTargetValue* _tmp35_;
		ValaTargetValue* _tmp36_;
		ValaArrayList* _tmp37_;
		ValaArrayList* _tmp38_;
		ValaTargetValue* _tmp39_;
		ValaGLibValue* _tmp40_;
		ValaGLibValue* _tmp41_;
		ValaTargetValue* _tmp42_;
		ValaTargetValue* _tmp43_;
		_tmp35_ = value;
		_tmp36_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp35_, (ValaCodeNode*) expr, NULL);
		temp_value = _tmp36_;
		_tmp37_ = vala_ccode_base_module_get_temp_ref_values ((ValaCCodeBaseModule*) self);
		_tmp38_ = _tmp37_;
		_tmp39_ = temp_value;
		_tmp40_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
		_tmp41_ = _tmp40_;
		vala_list_insert ((ValaList*) _tmp38_, 0, (ValaTargetValue*) _tmp41_);
		_vala_target_value_unref0 (_tmp41_);
		_tmp42_ = temp_value;
		_tmp43_ = _vala_target_value_ref0 (_tmp42_);
		_vala_target_value_unref0 (variant);
		variant = _tmp43_;
		_vala_target_value_unref0 (temp_value);
	}
	_tmp44_ = variant_func;
	_tmp45_ = vala_ccode_identifier_new (_tmp44_);
	_tmp46_ = _tmp45_;
	_tmp47_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp46_);
	_tmp48_ = _tmp47_;
	_vala_ccode_node_unref0 (_tmp46_);
	ccall = _tmp48_;
	_tmp49_ = ccall;
	_tmp50_ = variant;
	_tmp51_ = vala_get_cvalue_ (_tmp50_);
	vala_ccode_function_call_add_argument (_tmp49_, _tmp51_);
	_tmp52_ = target_type;
	needs_init = G_TYPE_CHECK_INSTANCE_TYPE (_tmp52_, VALA_TYPE_ARRAY_TYPE);
	_tmp53_ = target_type;
	_tmp54_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp53_, needs_init, (ValaCodeNode*) expr, NULL);
	_result_ = _tmp54_;
	_tmp55_ = variant_func;
	_tmp56_ = vala_ccode_function_new (_tmp55_, "void");
	cfunc = _tmp56_;
	_tmp57_ = cfunc;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp57_, VALA_CCODE_MODIFIERS_STATIC);
	_tmp58_ = cfunc;
	_tmp59_ = vala_ccode_parameter_new ("value", "GVariant*");
	_tmp60_ = _tmp59_;
	vala_ccode_function_add_parameter (_tmp58_, _tmp60_);
	_vala_ccode_node_unref0 (_tmp60_);
	_tmp61_ = target_type;
	if (!vala_data_type_is_real_non_null_struct_type (_tmp61_)) {
		ValaCCodeFunction* _tmp62_;
		ValaDataType* _tmp63_;
		gchar* _tmp64_;
		gchar* _tmp65_;
		_tmp62_ = cfunc;
		_tmp63_ = target_type;
		_tmp64_ = vala_get_ccode_name ((ValaCodeNode*) _tmp63_);
		_tmp65_ = _tmp64_;
		vala_ccode_function_set_return_type (_tmp62_, _tmp65_);
		_g_free0 (_tmp65_);
	}
	_tmp66_ = target_type;
	if (vala_data_type_is_real_non_null_struct_type (_tmp66_)) {
		ValaCCodeFunction* _tmp67_;
		ValaDataType* _tmp68_;
		gchar* _tmp69_;
		gchar* _tmp70_;
		gchar* _tmp71_;
		gchar* _tmp72_;
		ValaCCodeParameter* _tmp73_;
		ValaCCodeParameter* _tmp74_;
		ValaCCodeFunctionCall* _tmp75_;
		ValaTargetValue* _tmp76_;
		ValaCCodeExpression* _tmp77_;
		ValaCCodeUnaryExpression* _tmp78_;
		ValaCCodeUnaryExpression* _tmp79_;
		_tmp67_ = cfunc;
		_tmp68_ = target_type;
		_tmp69_ = vala_get_ccode_name ((ValaCodeNode*) _tmp68_);
		_tmp70_ = _tmp69_;
		_tmp71_ = g_strdup_printf ("%s *", _tmp70_);
		_tmp72_ = _tmp71_;
		_tmp73_ = vala_ccode_parameter_new ("result", _tmp72_);
		_tmp74_ = _tmp73_;
		vala_ccode_function_add_parameter (_tmp67_, _tmp74_);
		_vala_ccode_node_unref0 (_tmp74_);
		_g_free0 (_tmp72_);
		_g_free0 (_tmp70_);
		_tmp75_ = ccall;
		_tmp76_ = _result_;
		_tmp77_ = vala_get_cvalue_ (_tmp76_);
		_tmp78_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp77_);
		_tmp79_ = _tmp78_;
		vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp79_);
		_vala_ccode_node_unref0 (_tmp79_);
	} else {
		ValaDataType* _tmp80_;
		_tmp80_ = target_type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp80_, VALA_TYPE_ARRAY_TYPE)) {
			ValaArrayType* array_type = NULL;
			ValaDataType* _tmp81_;
			gchar* length_ctype = NULL;
			ValaArrayType* _tmp82_;
			gchar* _tmp83_;
			_tmp81_ = target_type;
			array_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp81_, VALA_TYPE_ARRAY_TYPE, ValaArrayType);
			_tmp82_ = array_type;
			_tmp83_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp82_);
			length_ctype = _tmp83_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp84_ = FALSE;
					_tmp84_ = TRUE;
					while (TRUE) {
						ValaArrayType* _tmp86_;
						gint _tmp87_;
						gint _tmp88_;
						ValaCCodeFunctionCall* _tmp89_;
						ValaTargetValue* _tmp90_;
						ValaCCodeExpression* _tmp91_;
						ValaCCodeExpression* _tmp92_;
						ValaCCodeUnaryExpression* _tmp93_;
						ValaCCodeUnaryExpression* _tmp94_;
						ValaCCodeFunction* _tmp95_;
						gchar* _tmp96_;
						gchar* _tmp97_;
						const gchar* _tmp98_;
						gchar* _tmp99_;
						gchar* _tmp100_;
						ValaCCodeParameter* _tmp101_;
						ValaCCodeParameter* _tmp102_;
						if (!_tmp84_) {
							gint _tmp85_;
							_tmp85_ = dim;
							dim = _tmp85_ + 1;
						}
						_tmp84_ = FALSE;
						_tmp86_ = array_type;
						_tmp87_ = vala_array_type_get_rank (_tmp86_);
						_tmp88_ = _tmp87_;
						if (!(dim <= _tmp88_)) {
							break;
						}
						_tmp89_ = ccall;
						_tmp90_ = _result_;
						_tmp91_ = vala_ccode_base_module_get_array_length_cvalue ((ValaCCodeBaseModule*) self, _tmp90_, dim);
						_tmp92_ = _tmp91_;
						_tmp93_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp92_);
						_tmp94_ = _tmp93_;
						vala_ccode_function_call_add_argument (_tmp89_, (ValaCCodeExpression*) _tmp94_);
						_vala_ccode_node_unref0 (_tmp94_);
						_vala_ccode_node_unref0 (_tmp92_);
						_tmp95_ = cfunc;
						_tmp96_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", dim);
						_tmp97_ = _tmp96_;
						_tmp98_ = length_ctype;
						_tmp99_ = g_strconcat (_tmp98_, "*", NULL);
						_tmp100_ = _tmp99_;
						_tmp101_ = vala_ccode_parameter_new (_tmp97_, _tmp100_);
						_tmp102_ = _tmp101_;
						vala_ccode_function_add_parameter (_tmp95_, _tmp102_);
						_vala_ccode_node_unref0 (_tmp102_);
						_g_free0 (_tmp100_);
						_g_free0 (_tmp97_);
					}
				}
			}
			_g_free0 (length_ctype);
		}
	}
	_tmp103_ = target_type;
	if (!vala_data_type_is_real_non_null_struct_type (_tmp103_)) {
		ValaCCodeFunction* _tmp104_;
		ValaCCodeFunction* _tmp105_;
		ValaTargetValue* _tmp106_;
		ValaCCodeExpression* _tmp107_;
		ValaCCodeFunctionCall* _tmp108_;
		_tmp104_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp105_ = _tmp104_;
		_tmp106_ = _result_;
		_tmp107_ = vala_get_cvalue_ (_tmp106_);
		_tmp108_ = ccall;
		vala_ccode_function_add_assignment (_tmp105_, _tmp107_, (ValaCCodeExpression*) _tmp108_);
	} else {
		ValaCCodeFunction* _tmp109_;
		ValaCCodeFunction* _tmp110_;
		ValaCCodeFunctionCall* _tmp111_;
		_tmp109_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp110_ = _tmp109_;
		_tmp111_ = ccall;
		vala_ccode_function_add_expression (_tmp110_, (ValaCCodeExpression*) _tmp111_);
	}
	_tmp112_ = vala_ccode_base_module_emit_context_new (NULL);
	_tmp113_ = _tmp112_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp113_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp113_);
	_tmp114_ = cfunc;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp114_);
	type_expr = NULL;
	basic_type = _tmp115_;
	is_basic_type = FALSE;
	_tmp116_ = vala_cast_expression_get_is_silent_cast (expr);
	_tmp117_ = _tmp116_;
	if (_tmp117_) {
		gchar* signature = NULL;
		ValaDataType* _tmp118_;
		gchar* _tmp119_;
		const gchar* _tmp120_;
		ValaGVariantModuleBasicTypeInfo _tmp121_ = {0};
		gboolean _tmp122_;
		ValaCCodeFunctionCall* ccheck = NULL;
		ValaCCodeIdentifier* _tmp123_;
		ValaCCodeIdentifier* _tmp124_;
		ValaCCodeFunctionCall* _tmp125_;
		ValaCCodeFunctionCall* _tmp126_;
		ValaCCodeFunctionCall* _tmp127_;
		ValaCCodeIdentifier* _tmp128_;
		ValaCCodeIdentifier* _tmp129_;
		ValaCCodeFunctionCall* _tmp173_;
		ValaCCodeExpression* _tmp174_;
		ValaCCodeFunction* _tmp175_;
		ValaCCodeFunction* _tmp176_;
		ValaCCodeIdentifier* _tmp177_;
		ValaCCodeIdentifier* _tmp178_;
		ValaCCodeFunctionCall* _tmp179_;
		ValaCCodeBinaryExpression* _tmp180_;
		ValaCCodeBinaryExpression* _tmp181_;
		_tmp118_ = target_type;
		_tmp119_ = vala_data_type_get_type_signature (_tmp118_, NULL);
		signature = _tmp119_;
		_tmp120_ = signature;
		_tmp122_ = vala_gvariant_module_get_basic_type_info (self, _tmp120_, &_tmp121_);
		basic_type = _tmp121_;
		is_basic_type = _tmp122_;
		_tmp123_ = vala_ccode_identifier_new ("g_variant_is_of_type");
		_tmp124_ = _tmp123_;
		_tmp125_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp124_);
		_tmp126_ = _tmp125_;
		_vala_ccode_node_unref0 (_tmp124_);
		ccheck = _tmp126_;
		_tmp127_ = ccheck;
		_tmp128_ = vala_ccode_identifier_new ("value");
		_tmp129_ = _tmp128_;
		vala_ccode_function_call_add_argument (_tmp127_, (ValaCCodeExpression*) _tmp129_);
		_vala_ccode_node_unref0 (_tmp129_);
		if (is_basic_type) {
			ValaGVariantModuleBasicTypeInfo _tmp130_;
			const gchar* _tmp131_;
			gchar* _tmp132_;
			gchar* _tmp133_;
			gchar* _tmp134_;
			gchar* _tmp135_;
			ValaCCodeIdentifier* _tmp136_;
			_tmp130_ = basic_type;
			_tmp131_ = _tmp130_.type_name;
			_tmp132_ = g_ascii_strup (_tmp131_, (gssize) -1);
			_tmp133_ = _tmp132_;
			_tmp134_ = g_strconcat ("G_VARIANT_TYPE_", _tmp133_, NULL);
			_tmp135_ = _tmp134_;
			_tmp136_ = vala_ccode_identifier_new (_tmp135_);
			_vala_ccode_node_unref0 (type_expr);
			type_expr = (ValaCCodeExpression*) _tmp136_;
			_g_free0 (_tmp135_);
			_g_free0 (_tmp133_);
		} else {
			ValaObjectType* gvariant_type_type = NULL;
			ValaSymbol* _tmp137_;
			ValaScope* _tmp138_;
			ValaScope* _tmp139_;
			ValaSymbol* _tmp140_;
			ValaSymbol* _tmp141_;
			ValaScope* _tmp142_;
			ValaScope* _tmp143_;
			ValaSymbol* _tmp144_;
			ValaClass* _tmp145_;
			ValaObjectType* _tmp146_;
			ValaObjectType* _tmp147_;
			ValaLocalVariable* type_temp = NULL;
			ValaObjectType* _tmp148_;
			ValaLocalVariable* _tmp149_;
			ValaLocalVariable* _tmp150_;
			ValaCCodeIdentifier* _tmp151_;
			ValaCCodeIdentifier* _tmp152_;
			ValaCCodeFunctionCall* _tmp153_;
			ValaCCodeExpression* _tmp154_;
			const gchar* _tmp155_;
			gchar* _tmp156_;
			gchar* _tmp157_;
			ValaCCodeIdentifier* _tmp158_;
			ValaCCodeIdentifier* _tmp159_;
			ValaLocalVariable* _tmp160_;
			ValaTargetValue* _tmp161_;
			ValaTargetValue* _tmp162_;
			ValaObjectType* _tmp163_;
			ValaCCodeExpression* _tmp164_;
			ValaGLibValue* _tmp165_;
			ValaGLibValue* _tmp166_;
			ValaSourceReference* _tmp167_;
			ValaSourceReference* _tmp168_;
			ValaLocalVariable* _tmp169_;
			const gchar* _tmp170_;
			const gchar* _tmp171_;
			ValaCCodeExpression* _tmp172_;
			_tmp137_ = ((ValaCCodeBaseModule*) self)->root_symbol;
			_tmp138_ = vala_symbol_get_scope (_tmp137_);
			_tmp139_ = _tmp138_;
			_tmp140_ = vala_scope_lookup (_tmp139_, "GLib");
			_tmp141_ = _tmp140_;
			_tmp142_ = vala_symbol_get_scope (_tmp141_);
			_tmp143_ = _tmp142_;
			_tmp144_ = vala_scope_lookup (_tmp143_, "VariantType");
			_tmp145_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp144_, VALA_TYPE_CLASS, ValaClass);
			_tmp146_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp145_, NULL);
			_tmp147_ = _tmp146_;
			_vala_code_node_unref0 (_tmp145_);
			_vala_code_node_unref0 (_tmp141_);
			gvariant_type_type = _tmp147_;
			_tmp148_ = gvariant_type_type;
			_tmp149_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, (ValaDataType*) _tmp148_, TRUE, (ValaCodeNode*) expr, TRUE);
			type_temp = _tmp149_;
			_tmp150_ = type_temp;
			vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp150_, FALSE);
			_tmp151_ = vala_ccode_identifier_new ("g_variant_type_new");
			_tmp152_ = _tmp151_;
			_tmp153_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp152_);
			_vala_ccode_node_unref0 (type_expr);
			type_expr = (ValaCCodeExpression*) _tmp153_;
			_vala_ccode_node_unref0 (_tmp152_);
			_tmp154_ = type_expr;
			_tmp155_ = signature;
			_tmp156_ = g_strdup_printf ("\"%s\"", _tmp155_);
			_tmp157_ = _tmp156_;
			_tmp158_ = vala_ccode_identifier_new (_tmp157_);
			_tmp159_ = _tmp158_;
			vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp154_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp159_);
			_vala_ccode_node_unref0 (_tmp159_);
			_g_free0 (_tmp157_);
			_tmp160_ = type_temp;
			_tmp161_ = vala_ccode_base_module_get_local_cvalue ((ValaCCodeBaseModule*) self, _tmp160_);
			_tmp162_ = _tmp161_;
			_tmp163_ = gvariant_type_type;
			_tmp164_ = type_expr;
			_tmp165_ = vala_glib_value_new ((ValaDataType*) _tmp163_, _tmp164_, FALSE);
			_tmp166_ = _tmp165_;
			_tmp167_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
			_tmp168_ = _tmp167_;
			vala_ccode_base_module_store_value ((ValaCCodeBaseModule*) self, _tmp162_, (ValaTargetValue*) _tmp166_, _tmp168_);
			_vala_target_value_unref0 (_tmp166_);
			_vala_target_value_unref0 (_tmp162_);
			_tmp169_ = type_temp;
			_tmp170_ = vala_symbol_get_name ((ValaSymbol*) _tmp169_);
			_tmp171_ = _tmp170_;
			_tmp172_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp171_);
			_vala_ccode_node_unref0 (type_expr);
			type_expr = _tmp172_;
			_vala_code_node_unref0 (type_temp);
			_vala_code_node_unref0 (gvariant_type_type);
		}
		_tmp173_ = ccheck;
		_tmp174_ = type_expr;
		vala_ccode_function_call_add_argument (_tmp173_, _tmp174_);
		_tmp175_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp176_ = _tmp175_;
		_tmp177_ = vala_ccode_identifier_new ("value");
		_tmp178_ = _tmp177_;
		_tmp179_ = ccheck;
		_tmp180_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_AND, (ValaCCodeExpression*) _tmp178_, (ValaCCodeExpression*) _tmp179_);
		_tmp181_ = _tmp180_;
		vala_ccode_function_open_if (_tmp176_, (ValaCCodeExpression*) _tmp181_);
		_vala_ccode_node_unref0 (_tmp181_);
		_vala_ccode_node_unref0 (_tmp178_);
		_vala_ccode_node_unref0 (ccheck);
		_g_free0 (signature);
	}
	_tmp182_ = target_type;
	_tmp183_ = vala_ccode_identifier_new ("value");
	_tmp184_ = _tmp183_;
	_tmp185_ = vala_ccode_identifier_new ("*result");
	_tmp186_ = _tmp185_;
	_tmp187_ = vala_ccode_base_module_deserialize_expression ((ValaCCodeBaseModule*) self, _tmp182_, (ValaCCodeExpression*) _tmp184_, (ValaCCodeExpression*) _tmp186_, NULL, NULL);
	_tmp188_ = _tmp187_;
	_vala_ccode_node_unref0 (_tmp186_);
	_vala_ccode_node_unref0 (_tmp184_);
	func_result = _tmp188_;
	_tmp189_ = vala_cast_expression_get_is_silent_cast (expr);
	_tmp190_ = _tmp189_;
	if (_tmp190_) {
		gboolean _tmp191_ = FALSE;
		ValaCCodeFunction* _tmp228_;
		ValaCCodeFunction* _tmp229_;
		ValaCCodeFunction* _tmp239_;
		ValaCCodeFunction* _tmp240_;
		ValaCCodeConstant* _tmp241_;
		ValaCCodeConstant* _tmp242_;
		ValaCCodeFunction* _tmp243_;
		ValaCCodeFunction* _tmp244_;
		if (is_basic_type) {
			ValaGVariantModuleBasicTypeInfo _tmp192_;
			_tmp192_ = basic_type;
			_tmp191_ = _tmp192_.is_string;
		} else {
			_tmp191_ = FALSE;
		}
		if (_tmp191_) {
			ValaCCodeFunction* _tmp193_;
			ValaCCodeFunction* _tmp194_;
			ValaCCodeExpression* _tmp195_;
			_tmp193_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp194_ = _tmp193_;
			_tmp195_ = func_result;
			vala_ccode_function_add_return (_tmp194_, _tmp195_);
		} else {
			ValaDataType* temp_type = NULL;
			ValaDataType* _tmp205_;
			ValaDataType* _tmp206_;
			ValaDataType* _tmp207_;
			ValaDataType* _tmp208_;
			ValaDataType* _tmp209_;
			ValaTargetValue* temp_value = NULL;
			ValaDataType* _tmp211_;
			ValaTargetValue* _tmp212_;
			ValaTargetValue* _tmp213_;
			ValaDataType* _tmp214_;
			ValaCCodeExpression* _tmp215_;
			ValaGLibValue* _tmp216_;
			ValaGLibValue* _tmp217_;
			ValaSourceReference* _tmp218_;
			ValaSourceReference* _tmp219_;
			ValaCCodeFunction* _tmp220_;
			ValaCCodeFunction* _tmp221_;
			ValaTargetValue* _tmp222_;
			ValaDataType* _tmp223_;
			ValaDataType* _tmp224_;
			ValaTargetValue* _tmp225_;
			ValaTargetValue* _tmp226_;
			ValaCCodeExpression* _tmp227_;
			if (!is_basic_type) {
				ValaCCodeFunctionCall* type_free = NULL;
				ValaCCodeIdentifier* _tmp196_;
				ValaCCodeIdentifier* _tmp197_;
				ValaCCodeFunctionCall* _tmp198_;
				ValaCCodeFunctionCall* _tmp199_;
				ValaCCodeFunctionCall* _tmp200_;
				ValaCCodeExpression* _tmp201_;
				ValaCCodeFunction* _tmp202_;
				ValaCCodeFunction* _tmp203_;
				ValaCCodeFunctionCall* _tmp204_;
				_tmp196_ = vala_ccode_identifier_new ("g_variant_type_free");
				_tmp197_ = _tmp196_;
				_tmp198_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp197_);
				_tmp199_ = _tmp198_;
				_vala_ccode_node_unref0 (_tmp197_);
				type_free = _tmp199_;
				_tmp200_ = type_free;
				_tmp201_ = type_expr;
				vala_ccode_function_call_add_argument (_tmp200_, _tmp201_);
				_tmp202_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp203_ = _tmp202_;
				_tmp204_ = type_free;
				vala_ccode_function_add_expression (_tmp203_, (ValaCCodeExpression*) _tmp204_);
				_vala_ccode_node_unref0 (type_free);
			}
			_tmp205_ = vala_expression_get_target_type ((ValaExpression*) expr);
			_tmp206_ = _tmp205_;
			_tmp207_ = vala_data_type_copy (_tmp206_);
			temp_type = _tmp207_;
			_tmp208_ = vala_expression_get_target_type ((ValaExpression*) expr);
			_tmp209_ = _tmp208_;
			if (!vala_data_type_is_real_struct_type (_tmp209_)) {
				ValaDataType* _tmp210_;
				_tmp210_ = temp_type;
				vala_data_type_set_nullable (_tmp210_, FALSE);
			}
			_tmp211_ = temp_type;
			_tmp212_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp211_, FALSE, (ValaCodeNode*) expr, NULL);
			temp_value = _tmp212_;
			_tmp213_ = temp_value;
			_tmp214_ = temp_type;
			_tmp215_ = func_result;
			_tmp216_ = vala_glib_value_new (_tmp214_, _tmp215_, FALSE);
			_tmp217_ = _tmp216_;
			_tmp218_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
			_tmp219_ = _tmp218_;
			vala_ccode_base_module_store_value ((ValaCCodeBaseModule*) self, _tmp213_, (ValaTargetValue*) _tmp217_, _tmp219_);
			_vala_target_value_unref0 (_tmp217_);
			_tmp220_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp221_ = _tmp220_;
			_tmp222_ = temp_value;
			_tmp223_ = vala_expression_get_target_type ((ValaExpression*) expr);
			_tmp224_ = _tmp223_;
			_tmp225_ = vala_ccode_base_module_transform_value ((ValaCCodeBaseModule*) self, _tmp222_, _tmp224_, (ValaCodeNode*) expr);
			_tmp226_ = _tmp225_;
			_tmp227_ = vala_get_cvalue_ (_tmp226_);
			vala_ccode_function_add_return (_tmp221_, _tmp227_);
			_vala_target_value_unref0 (_tmp226_);
			_vala_target_value_unref0 (temp_value);
			_vala_code_node_unref0 (temp_type);
		}
		_tmp228_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp229_ = _tmp228_;
		vala_ccode_function_add_else (_tmp229_);
		if (!is_basic_type) {
			ValaCCodeFunctionCall* type_free = NULL;
			ValaCCodeIdentifier* _tmp230_;
			ValaCCodeIdentifier* _tmp231_;
			ValaCCodeFunctionCall* _tmp232_;
			ValaCCodeFunctionCall* _tmp233_;
			ValaCCodeFunctionCall* _tmp234_;
			ValaCCodeExpression* _tmp235_;
			ValaCCodeFunction* _tmp236_;
			ValaCCodeFunction* _tmp237_;
			ValaCCodeFunctionCall* _tmp238_;
			_tmp230_ = vala_ccode_identifier_new ("g_variant_type_free");
			_tmp231_ = _tmp230_;
			_tmp232_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp231_);
			_tmp233_ = _tmp232_;
			_vala_ccode_node_unref0 (_tmp231_);
			type_free = _tmp233_;
			_tmp234_ = type_free;
			_tmp235_ = type_expr;
			vala_ccode_function_call_add_argument (_tmp234_, _tmp235_);
			_tmp236_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp237_ = _tmp236_;
			_tmp238_ = type_free;
			vala_ccode_function_add_expression (_tmp237_, (ValaCCodeExpression*) _tmp238_);
			_vala_ccode_node_unref0 (type_free);
		}
		_tmp239_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp240_ = _tmp239_;
		_tmp241_ = vala_ccode_constant_new ("NULL");
		_tmp242_ = _tmp241_;
		vala_ccode_function_add_return (_tmp240_, (ValaCCodeExpression*) _tmp242_);
		_vala_ccode_node_unref0 (_tmp242_);
		_tmp243_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp244_ = _tmp243_;
		vala_ccode_function_close (_tmp244_);
	} else {
		ValaDataType* _tmp245_;
		_tmp245_ = target_type;
		if (vala_data_type_is_real_non_null_struct_type (_tmp245_)) {
			ValaCCodeFunction* _tmp246_;
			ValaCCodeFunction* _tmp247_;
			ValaCCodeIdentifier* _tmp248_;
			ValaCCodeIdentifier* _tmp249_;
			ValaCCodeExpression* _tmp250_;
			_tmp246_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp247_ = _tmp246_;
			_tmp248_ = vala_ccode_identifier_new ("*result");
			_tmp249_ = _tmp248_;
			_tmp250_ = func_result;
			vala_ccode_function_add_assignment (_tmp247_, (ValaCCodeExpression*) _tmp249_, _tmp250_);
			_vala_ccode_node_unref0 (_tmp249_);
		} else {
			ValaCCodeFunction* _tmp251_;
			ValaCCodeFunction* _tmp252_;
			ValaCCodeExpression* _tmp253_;
			_tmp251_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp252_ = _tmp251_;
			_tmp253_ = func_result;
			vala_ccode_function_add_return (_tmp252_, _tmp253_);
		}
	}
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_tmp254_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp255_ = cfunc;
	vala_ccode_file_add_function_declaration (_tmp254_, _tmp255_);
	_tmp256_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp257_ = cfunc;
	vala_ccode_file_add_function (_tmp256_, _tmp257_);
	_tmp258_ = _result_;
	_tmp259_ = vala_ccode_base_module_load_temp_value ((ValaCCodeBaseModule*) self, _tmp258_);
	_tmp260_ = _tmp259_;
	vala_expression_set_target_value ((ValaExpression*) expr, _tmp260_);
	_vala_target_value_unref0 (_tmp260_);
	_vala_ccode_node_unref0 (func_result);
	_vala_ccode_node_unref0 (type_expr);
	_vala_ccode_node_unref0 (cfunc);
	_vala_target_value_unref0 (_result_);
	_vala_ccode_node_unref0 (ccall);
	_vala_target_value_unref0 (variant);
	_g_free0 (variant_func);
	_vala_code_node_unref0 (target_type);
	_vala_target_value_unref0 (value);
}

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

static ValaCCodeExpression*
vala_gvariant_module_get_array_length (ValaGVariantModule* self,
                                       ValaCCodeExpression* expr,
                                       gint dim)
{
	ValaCCodeIdentifier* id = NULL;
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeMemberAccess* ma = NULL;
	ValaCCodeMemberAccess* _tmp1_;
	ValaCCodeIdentifier* _tmp2_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_tmp0_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_CCODE_IDENTIFIER) ? ((ValaCCodeIdentifier*) expr) : NULL);
	id = _tmp0_;
	_tmp1_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_CCODE_MEMBER_ACCESS) ? ((ValaCCodeMemberAccess*) expr) : NULL);
	ma = _tmp1_;
	_tmp2_ = id;
	if (_tmp2_ != NULL) {
		ValaCCodeIdentifier* _tmp3_;
		const gchar* _tmp4_;
		const gchar* _tmp5_;
		gchar* _tmp6_;
		gchar* _tmp7_;
		ValaCCodeIdentifier* _tmp8_;
		ValaCCodeExpression* _tmp9_;
		_tmp3_ = id;
		_tmp4_ = vala_ccode_identifier_get_name (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = g_strdup_printf ("%s_length%d", _tmp5_, dim);
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_ccode_identifier_new (_tmp7_);
		_tmp9_ = (ValaCCodeExpression*) _tmp8_;
		_g_free0 (_tmp7_);
		result = _tmp9_;
		_vala_ccode_node_unref0 (ma);
		_vala_ccode_node_unref0 (id);
		return result;
	} else {
		ValaCCodeMemberAccess* _tmp10_;
		_tmp10_ = ma;
		if (_tmp10_ != NULL) {
			ValaCCodeMemberAccess* _tmp11_;
			gboolean _tmp12_;
			gboolean _tmp13_;
			_tmp11_ = ma;
			_tmp12_ = vala_ccode_member_access_get_is_pointer (_tmp11_);
			_tmp13_ = _tmp12_;
			if (_tmp13_) {
				ValaCCodeMemberAccess* _tmp14_;
				ValaCCodeExpression* _tmp15_;
				ValaCCodeExpression* _tmp16_;
				ValaCCodeMemberAccess* _tmp17_;
				const gchar* _tmp18_;
				const gchar* _tmp19_;
				gchar* _tmp20_;
				gchar* _tmp21_;
				ValaCCodeMemberAccess* _tmp22_;
				ValaCCodeExpression* _tmp23_;
				_tmp14_ = ma;
				_tmp15_ = vala_ccode_member_access_get_inner (_tmp14_);
				_tmp16_ = _tmp15_;
				_tmp17_ = ma;
				_tmp18_ = vala_ccode_member_access_get_member_name (_tmp17_);
				_tmp19_ = _tmp18_;
				_tmp20_ = g_strdup_printf ("%s_length%d", _tmp19_, dim);
				_tmp21_ = _tmp20_;
				_tmp22_ = vala_ccode_member_access_new_pointer (_tmp16_, _tmp21_);
				_tmp23_ = (ValaCCodeExpression*) _tmp22_;
				_g_free0 (_tmp21_);
				result = _tmp23_;
				_vala_ccode_node_unref0 (ma);
				_vala_ccode_node_unref0 (id);
				return result;
			} else {
				ValaCCodeMemberAccess* _tmp24_;
				ValaCCodeExpression* _tmp25_;
				ValaCCodeExpression* _tmp26_;
				ValaCCodeMemberAccess* _tmp27_;
				const gchar* _tmp28_;
				const gchar* _tmp29_;
				gchar* _tmp30_;
				gchar* _tmp31_;
				ValaCCodeMemberAccess* _tmp32_;
				ValaCCodeExpression* _tmp33_;
				_tmp24_ = ma;
				_tmp25_ = vala_ccode_member_access_get_inner (_tmp24_);
				_tmp26_ = _tmp25_;
				_tmp27_ = ma;
				_tmp28_ = vala_ccode_member_access_get_member_name (_tmp27_);
				_tmp29_ = _tmp28_;
				_tmp30_ = g_strdup_printf ("%s_length%d", _tmp29_, dim);
				_tmp31_ = _tmp30_;
				_tmp32_ = vala_ccode_member_access_new (_tmp26_, _tmp31_, FALSE);
				_tmp33_ = (ValaCCodeExpression*) _tmp32_;
				_g_free0 (_tmp31_);
				result = _tmp33_;
				_vala_ccode_node_unref0 (ma);
				_vala_ccode_node_unref0 (id);
				return result;
			}
		} else {
			ValaCCodeFunctionCall* len_call = NULL;
			ValaCCodeIdentifier* _tmp34_;
			ValaCCodeIdentifier* _tmp35_;
			ValaCCodeFunctionCall* _tmp36_;
			ValaCCodeFunctionCall* _tmp37_;
			ValaCCodeFunctionCall* _tmp38_;
			_tmp34_ = vala_ccode_identifier_new ("g_strv_length");
			_tmp35_ = _tmp34_;
			_tmp36_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp35_);
			_tmp37_ = _tmp36_;
			_vala_ccode_node_unref0 (_tmp35_);
			len_call = _tmp37_;
			_tmp38_ = len_call;
			vala_ccode_function_call_add_argument (_tmp38_, expr);
			result = (ValaCCodeExpression*) len_call;
			_vala_ccode_node_unref0 (ma);
			_vala_ccode_node_unref0 (id);
			return result;
		}
	}
}

static ValaCCodeExpression*
vala_gvariant_module_generate_enum_value_from_string (ValaGVariantModule* self,
                                                      ValaEnumValueType* type,
                                                      ValaCCodeExpression* expr,
                                                      ValaCCodeExpression* error_expr)
{
	ValaEnum* en = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaEnum* _tmp2_;
	gchar* from_string_name = NULL;
	ValaEnum* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	ValaCCodeFunctionCall* from_string_call = NULL;
	const gchar* _tmp8_;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaCCodeFunctionCall* _tmp13_;
	ValaCCodeExpression* _tmp14_ = NULL;
	ValaCCodeFunctionCall* _tmp17_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) type);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_ENUM) ? ((ValaEnum*) _tmp1_) : NULL);
	en = _tmp2_;
	_tmp3_ = en;
	_tmp4_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp3_, NULL);
	_tmp5_ = _tmp4_;
	_tmp6_ = g_strdup_printf ("%s_from_string", _tmp5_);
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	from_string_name = _tmp7_;
	_tmp8_ = from_string_name;
	_tmp9_ = vala_ccode_identifier_new (_tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp10_);
	_tmp12_ = _tmp11_;
	_vala_ccode_node_unref0 (_tmp10_);
	from_string_call = _tmp12_;
	_tmp13_ = from_string_call;
	vala_ccode_function_call_add_argument (_tmp13_, expr);
	if (error_expr != NULL) {
		ValaCCodeExpression* _tmp15_;
		_tmp15_ = _vala_ccode_node_ref0 (error_expr);
		_vala_ccode_node_unref0 (_tmp14_);
		_tmp14_ = _tmp15_;
	} else {
		ValaCCodeConstant* _tmp16_;
		_tmp16_ = vala_ccode_constant_new ("NULL");
		_vala_ccode_node_unref0 (_tmp14_);
		_tmp14_ = (ValaCCodeExpression*) _tmp16_;
	}
	_tmp17_ = from_string_call;
	vala_ccode_function_call_add_argument (_tmp17_, _tmp14_);
	result = (ValaCCodeExpression*) from_string_call;
	_vala_ccode_node_unref0 (_tmp14_);
	_g_free0 (from_string_name);
	_vala_code_node_unref0 (en);
	return result;
}

ValaCCodeFunction*
vala_gvariant_module_generate_enum_from_string_function_declaration (ValaGVariantModule* self,
                                                                     ValaEnum* en)
{
	gchar* from_string_name = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* from_string_func = NULL;
	gchar* _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeModifiers _tmp12_;
	ValaCCodeModifiers _tmp13_;
	ValaCCodeFunction* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (en != NULL, NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) en, NULL);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_from_string", _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	from_string_name = _tmp3_;
	_tmp4_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_function_new (from_string_name, _tmp5_);
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	from_string_func = _tmp7_;
	_tmp8_ = vala_ccode_parameter_new ("str", "const char*");
	_tmp9_ = _tmp8_;
	vala_ccode_function_add_parameter (from_string_func, _tmp9_);
	_vala_ccode_node_unref0 (_tmp9_);
	_tmp10_ = vala_ccode_parameter_new ("error", "GError**");
	_tmp11_ = _tmp10_;
	vala_ccode_function_add_parameter (from_string_func, _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_tmp12_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) from_string_func);
	_tmp13_ = _tmp12_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) from_string_func, _tmp13_ | VALA_CCODE_MODIFIERS_EXTERN);
	((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
	result = from_string_func;
	_g_free0 (from_string_name);
	return result;
}

ValaCCodeFunction*
vala_gvariant_module_generate_enum_from_string_function (ValaGVariantModule* self,
                                                         ValaEnum* en)
{
	gchar* from_string_name = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* from_string_func = NULL;
	const gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	ValaCCodeParameter* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	ValaCCodeConstant* _tmp20_;
	ValaCCodeConstant* _tmp21_;
	ValaCCodeVariableDeclarator* _tmp22_;
	ValaCCodeVariableDeclarator* _tmp23_;
	gboolean firstif = FALSE;
	ValaCCodeFunction* _tmp70_;
	ValaCCodeFunction* _tmp71_;
	ValaCCodeFunctionCall* set_error = NULL;
	ValaCCodeIdentifier* _tmp72_;
	ValaCCodeIdentifier* _tmp73_;
	ValaCCodeFunctionCall* _tmp74_;
	ValaCCodeFunctionCall* _tmp75_;
	ValaCCodeIdentifier* _tmp76_;
	ValaCCodeIdentifier* _tmp77_;
	ValaCCodeIdentifier* _tmp78_;
	ValaCCodeIdentifier* _tmp79_;
	ValaCCodeIdentifier* _tmp80_;
	ValaCCodeIdentifier* _tmp81_;
	gchar* _tmp82_;
	gchar* _tmp83_;
	gchar* _tmp84_;
	gchar* _tmp85_;
	ValaCCodeConstant* _tmp86_;
	ValaCCodeConstant* _tmp87_;
	ValaCCodeFunction* _tmp88_;
	ValaCCodeFunction* _tmp89_;
	ValaCCodeFunction* _tmp90_;
	ValaCCodeFunction* _tmp91_;
	ValaCCodeFunction* _tmp92_;
	ValaCCodeFunction* _tmp93_;
	ValaCCodeIdentifier* _tmp94_;
	ValaCCodeIdentifier* _tmp95_;
	ValaCCodeFunction* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (en != NULL, NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) en, NULL);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_from_string", _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	from_string_name = _tmp3_;
	_tmp4_ = from_string_name;
	_tmp5_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_ccode_function_new (_tmp4_, _tmp6_);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	from_string_func = _tmp8_;
	_tmp9_ = from_string_func;
	_tmp10_ = vala_ccode_parameter_new ("str", "const char*");
	_tmp11_ = _tmp10_;
	vala_ccode_function_add_parameter (_tmp9_, _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_tmp12_ = from_string_func;
	_tmp13_ = vala_ccode_parameter_new ("error", "GError**");
	_tmp14_ = _tmp13_;
	vala_ccode_function_add_parameter (_tmp12_, _tmp14_);
	_vala_ccode_node_unref0 (_tmp14_);
	_tmp15_ = from_string_func;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp15_);
	_tmp16_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_ccode_constant_new ("0");
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_ccode_variable_declarator_new_zero ("value", (ValaCCodeExpression*) _tmp21_, NULL);
	_tmp23_ = _tmp22_;
	vala_ccode_function_add_declaration (_tmp17_, _tmp19_, (ValaCCodeDeclarator*) _tmp23_, 0);
	_vala_ccode_node_unref0 (_tmp23_);
	_vala_ccode_node_unref0 (_tmp21_);
	_g_free0 (_tmp19_);
	firstif = TRUE;
	{
		ValaList* _enum_value_list = NULL;
		ValaList* _tmp24_;
		gint _enum_value_size = 0;
		ValaList* _tmp25_;
		gint _tmp26_;
		gint _tmp27_;
		gint _enum_value_index = 0;
		_tmp24_ = vala_enum_get_values (en);
		_enum_value_list = _tmp24_;
		_tmp25_ = _enum_value_list;
		_tmp26_ = vala_collection_get_size ((ValaCollection*) _tmp25_);
		_tmp27_ = _tmp26_;
		_enum_value_size = _tmp27_;
		_enum_value_index = -1;
		while (TRUE) {
			gint _tmp28_;
			gint _tmp29_;
			ValaEnumValue* enum_value = NULL;
			ValaList* _tmp30_;
			gpointer _tmp31_;
			gchar* dbus_value = NULL;
			ValaEnumValue* _tmp32_;
			ValaEnumValue* _tmp33_;
			const gchar* _tmp34_;
			const gchar* _tmp35_;
			gchar* _tmp36_;
			ValaCCodeFunctionCall* string_comparison = NULL;
			ValaCCodeIdentifier* _tmp37_;
			ValaCCodeIdentifier* _tmp38_;
			ValaCCodeFunctionCall* _tmp39_;
			ValaCCodeFunctionCall* _tmp40_;
			ValaCCodeFunctionCall* _tmp41_;
			ValaCCodeIdentifier* _tmp42_;
			ValaCCodeIdentifier* _tmp43_;
			ValaCCodeFunctionCall* _tmp44_;
			const gchar* _tmp45_;
			gchar* _tmp46_;
			gchar* _tmp47_;
			ValaCCodeConstant* _tmp48_;
			ValaCCodeConstant* _tmp49_;
			ValaCCodeBinaryExpression* cond = NULL;
			ValaCCodeFunctionCall* _tmp50_;
			ValaCCodeConstant* _tmp51_;
			ValaCCodeConstant* _tmp52_;
			ValaCCodeBinaryExpression* _tmp53_;
			ValaCCodeBinaryExpression* _tmp54_;
			ValaCCodeFunction* _tmp61_;
			ValaCCodeFunction* _tmp62_;
			ValaCCodeIdentifier* _tmp63_;
			ValaCCodeIdentifier* _tmp64_;
			ValaEnumValue* _tmp65_;
			gchar* _tmp66_;
			gchar* _tmp67_;
			ValaCCodeIdentifier* _tmp68_;
			ValaCCodeIdentifier* _tmp69_;
			_enum_value_index = _enum_value_index + 1;
			_tmp28_ = _enum_value_index;
			_tmp29_ = _enum_value_size;
			if (!(_tmp28_ < _tmp29_)) {
				break;
			}
			_tmp30_ = _enum_value_list;
			_tmp31_ = vala_list_get (_tmp30_, _enum_value_index);
			enum_value = (ValaEnumValue*) _tmp31_;
			_tmp32_ = enum_value;
			_tmp33_ = enum_value;
			_tmp34_ = vala_symbol_get_name ((ValaSymbol*) _tmp33_);
			_tmp35_ = _tmp34_;
			_tmp36_ = vala_gvariant_module_get_dbus_value (self, _tmp32_, _tmp35_);
			dbus_value = _tmp36_;
			_tmp37_ = vala_ccode_identifier_new ("strcmp");
			_tmp38_ = _tmp37_;
			_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
			_tmp40_ = _tmp39_;
			_vala_ccode_node_unref0 (_tmp38_);
			string_comparison = _tmp40_;
			_tmp41_ = string_comparison;
			_tmp42_ = vala_ccode_identifier_new ("str");
			_tmp43_ = _tmp42_;
			vala_ccode_function_call_add_argument (_tmp41_, (ValaCCodeExpression*) _tmp43_);
			_vala_ccode_node_unref0 (_tmp43_);
			_tmp44_ = string_comparison;
			_tmp45_ = dbus_value;
			_tmp46_ = g_strdup_printf ("\"%s\"", _tmp45_);
			_tmp47_ = _tmp46_;
			_tmp48_ = vala_ccode_constant_new (_tmp47_);
			_tmp49_ = _tmp48_;
			vala_ccode_function_call_add_argument (_tmp44_, (ValaCCodeExpression*) _tmp49_);
			_vala_ccode_node_unref0 (_tmp49_);
			_g_free0 (_tmp47_);
			_tmp50_ = string_comparison;
			_tmp51_ = vala_ccode_constant_new ("0");
			_tmp52_ = _tmp51_;
			_tmp53_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp50_, (ValaCCodeExpression*) _tmp52_);
			_tmp54_ = _tmp53_;
			_vala_ccode_node_unref0 (_tmp52_);
			cond = _tmp54_;
			if (firstif) {
				ValaCCodeFunction* _tmp55_;
				ValaCCodeFunction* _tmp56_;
				ValaCCodeBinaryExpression* _tmp57_;
				_tmp55_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp56_ = _tmp55_;
				_tmp57_ = cond;
				vala_ccode_function_open_if (_tmp56_, (ValaCCodeExpression*) _tmp57_);
				firstif = FALSE;
			} else {
				ValaCCodeFunction* _tmp58_;
				ValaCCodeFunction* _tmp59_;
				ValaCCodeBinaryExpression* _tmp60_;
				_tmp58_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp59_ = _tmp58_;
				_tmp60_ = cond;
				vala_ccode_function_else_if (_tmp59_, (ValaCCodeExpression*) _tmp60_);
			}
			_tmp61_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp62_ = _tmp61_;
			_tmp63_ = vala_ccode_identifier_new ("value");
			_tmp64_ = _tmp63_;
			_tmp65_ = enum_value;
			_tmp66_ = vala_get_ccode_name ((ValaCodeNode*) _tmp65_);
			_tmp67_ = _tmp66_;
			_tmp68_ = vala_ccode_identifier_new (_tmp67_);
			_tmp69_ = _tmp68_;
			vala_ccode_function_add_assignment (_tmp62_, (ValaCCodeExpression*) _tmp64_, (ValaCCodeExpression*) _tmp69_);
			_vala_ccode_node_unref0 (_tmp69_);
			_g_free0 (_tmp67_);
			_vala_ccode_node_unref0 (_tmp64_);
			_vala_ccode_node_unref0 (cond);
			_vala_ccode_node_unref0 (string_comparison);
			_g_free0 (dbus_value);
			_vala_code_node_unref0 (enum_value);
		}
	}
	_tmp70_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp71_ = _tmp70_;
	vala_ccode_function_add_else (_tmp71_);
	_tmp72_ = vala_ccode_identifier_new ("g_set_error");
	_tmp73_ = _tmp72_;
	_tmp74_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp73_);
	_tmp75_ = _tmp74_;
	_vala_ccode_node_unref0 (_tmp73_);
	set_error = _tmp75_;
	_tmp76_ = vala_ccode_identifier_new ("error");
	_tmp77_ = _tmp76_;
	vala_ccode_function_call_add_argument (set_error, (ValaCCodeExpression*) _tmp77_);
	_vala_ccode_node_unref0 (_tmp77_);
	_tmp78_ = vala_ccode_identifier_new ("G_DBUS_ERROR");
	_tmp79_ = _tmp78_;
	vala_ccode_function_call_add_argument (set_error, (ValaCCodeExpression*) _tmp79_);
	_vala_ccode_node_unref0 (_tmp79_);
	_tmp80_ = vala_ccode_identifier_new ("G_DBUS_ERROR_INVALID_ARGS");
	_tmp81_ = _tmp80_;
	vala_ccode_function_call_add_argument (set_error, (ValaCCodeExpression*) _tmp81_);
	_vala_ccode_node_unref0 (_tmp81_);
	_tmp82_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp83_ = _tmp82_;
	_tmp84_ = g_strdup_printf ("\"Invalid value for enum `%s'\"", _tmp83_);
	_tmp85_ = _tmp84_;
	_tmp86_ = vala_ccode_constant_new (_tmp85_);
	_tmp87_ = _tmp86_;
	vala_ccode_function_call_add_argument (set_error, (ValaCCodeExpression*) _tmp87_);
	_vala_ccode_node_unref0 (_tmp87_);
	_g_free0 (_tmp85_);
	_g_free0 (_tmp83_);
	_tmp88_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp89_ = _tmp88_;
	vala_ccode_function_add_expression (_tmp89_, (ValaCCodeExpression*) set_error);
	_tmp90_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp91_ = _tmp90_;
	vala_ccode_function_close (_tmp91_);
	_tmp92_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp93_ = _tmp92_;
	_tmp94_ = vala_ccode_identifier_new ("value");
	_tmp95_ = _tmp94_;
	vala_ccode_function_add_return (_tmp93_, (ValaCCodeExpression*) _tmp95_);
	_vala_ccode_node_unref0 (_tmp95_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	result = from_string_func;
	_vala_ccode_node_unref0 (set_error);
	_g_free0 (from_string_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_deserialize_basic (ValaGVariantModule* self,
                                        ValaGVariantModuleBasicTypeInfo* basic_type,
                                        ValaCCodeExpression* variant_expr,
                                        gboolean transfer)
{
	ValaCCodeFunctionCall* get_call = NULL;
	ValaGVariantModuleBasicTypeInfo _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeIdentifier* _tmp4_;
	ValaCCodeIdentifier* _tmp5_;
	ValaCCodeFunctionCall* _tmp6_;
	ValaCCodeFunctionCall* _tmp7_;
	ValaCCodeFunctionCall* _tmp8_;
	ValaGVariantModuleBasicTypeInfo _tmp9_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (basic_type != NULL, NULL);
	g_return_val_if_fail (variant_expr != NULL, NULL);
	_tmp0_ = *basic_type;
	_tmp1_ = _tmp0_.type_name;
	_tmp2_ = g_strconcat ("g_variant_get_", _tmp1_, NULL);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_identifier_new (_tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp5_);
	_tmp7_ = _tmp6_;
	_vala_ccode_node_unref0 (_tmp5_);
	_g_free0 (_tmp3_);
	get_call = _tmp7_;
	_tmp8_ = get_call;
	vala_ccode_function_call_add_argument (_tmp8_, variant_expr);
	_tmp9_ = *basic_type;
	if (_tmp9_.is_string) {
		ValaCCodeFunctionCall* _tmp16_;
		ValaCCodeConstant* _tmp17_;
		ValaCCodeConstant* _tmp18_;
		if (transfer) {
			ValaCCodeFunctionCall* _tmp10_;
			ValaCCodeIdentifier* _tmp11_;
			ValaCCodeIdentifier* _tmp12_;
			_tmp10_ = get_call;
			_tmp11_ = vala_ccode_identifier_new ("g_variant_get_string");
			_tmp12_ = _tmp11_;
			vala_ccode_function_call_set_call (_tmp10_, (ValaCCodeExpression*) _tmp12_);
			_vala_ccode_node_unref0 (_tmp12_);
		} else {
			ValaCCodeFunctionCall* _tmp13_;
			ValaCCodeIdentifier* _tmp14_;
			ValaCCodeIdentifier* _tmp15_;
			_tmp13_ = get_call;
			_tmp14_ = vala_ccode_identifier_new ("g_variant_dup_string");
			_tmp15_ = _tmp14_;
			vala_ccode_function_call_set_call (_tmp13_, (ValaCCodeExpression*) _tmp15_);
			_vala_ccode_node_unref0 (_tmp15_);
		}
		_tmp16_ = get_call;
		_tmp17_ = vala_ccode_constant_new ("NULL");
		_tmp18_ = _tmp17_;
		vala_ccode_function_call_add_argument (_tmp16_, (ValaCCodeExpression*) _tmp18_);
		_vala_ccode_node_unref0 (_tmp18_);
	}
	result = (ValaCCodeExpression*) get_call;
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_deserialize_array (ValaGVariantModule* self,
                                        ValaArrayType* array_type,
                                        ValaCCodeExpression* variant_expr,
                                        ValaCCodeExpression* expr)
{
	gboolean _tmp0_ = FALSE;
	gint _tmp1_;
	gint _tmp2_;
	gchar* temp_name = NULL;
	gint _tmp6_;
	gint _tmp7_;
	gchar* _tmp8_;
	ValaCCodeFunctionCall* new_call = NULL;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaCCodeFunctionCall* _tmp13_;
	ValaDataType* _tmp14_;
	ValaDataType* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaCCodeConstant* _tmp21_;
	ValaCCodeConstant* _tmp22_;
	gchar* length_ctype = NULL;
	gchar* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	ValaCCodeFunction* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	const gchar* _tmp28_;
	ValaCCodeFunctionCall* _tmp29_;
	ValaCCodeVariableDeclarator* _tmp30_;
	ValaCCodeVariableDeclarator* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	const gchar* _tmp34_;
	const gchar* _tmp35_;
	gchar* _tmp36_;
	gchar* _tmp37_;
	ValaCCodeConstant* _tmp38_;
	ValaCCodeConstant* _tmp39_;
	ValaCCodeVariableDeclarator* _tmp40_;
	ValaCCodeVariableDeclarator* _tmp41_;
	ValaCCodeFunction* _tmp42_;
	ValaCCodeFunction* _tmp43_;
	const gchar* _tmp44_;
	const gchar* _tmp45_;
	gchar* _tmp46_;
	gchar* _tmp47_;
	ValaCCodeConstant* _tmp48_;
	ValaCCodeConstant* _tmp49_;
	ValaCCodeVariableDeclarator* _tmp50_;
	ValaCCodeVariableDeclarator* _tmp51_;
	const gchar* _tmp52_;
	ValaDataType* _tmp53_;
	ValaDataType* _tmp54_;
	const gchar* _tmp71_;
	ValaCCodeIdentifier* _tmp72_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (array_type != NULL, NULL);
	g_return_val_if_fail (variant_expr != NULL, NULL);
	_tmp1_ = vala_array_type_get_rank (array_type);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == 1) {
		gchar* _tmp3_;
		gchar* _tmp4_;
		_tmp3_ = vala_data_type_get_type_signature ((ValaDataType*) array_type, NULL);
		_tmp4_ = _tmp3_;
		_tmp0_ = g_strcmp0 (_tmp4_, "ay") == 0;
		_g_free0 (_tmp4_);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaCCodeExpression* _tmp5_;
		_tmp5_ = vala_gvariant_module_deserialize_buffer_array (self, array_type, variant_expr, expr);
		result = _tmp5_;
		return result;
	}
	_tmp6_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp7_ + 1);
	_tmp8_ = g_strdup_printf ("_tmp%d_", _tmp7_);
	temp_name = _tmp8_;
	_tmp9_ = vala_ccode_identifier_new ("g_new");
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp10_);
	_tmp12_ = _tmp11_;
	_vala_ccode_node_unref0 (_tmp10_);
	new_call = _tmp12_;
	_tmp13_ = new_call;
	_tmp14_ = vala_array_type_get_element_type (array_type);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) _tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_identifier_new (_tmp17_);
	_tmp19_ = _tmp18_;
	vala_ccode_function_call_add_argument (_tmp13_, (ValaCCodeExpression*) _tmp19_);
	_vala_ccode_node_unref0 (_tmp19_);
	_g_free0 (_tmp17_);
	_tmp20_ = new_call;
	_tmp21_ = vala_ccode_constant_new ("5");
	_tmp22_ = _tmp21_;
	vala_ccode_function_call_add_argument (_tmp20_, (ValaCCodeExpression*) _tmp22_);
	_vala_ccode_node_unref0 (_tmp22_);
	_tmp23_ = vala_get_ccode_array_length_type ((ValaCodeNode*) array_type);
	length_ctype = _tmp23_;
	_tmp24_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_get_ccode_name ((ValaCodeNode*) array_type);
	_tmp27_ = _tmp26_;
	_tmp28_ = temp_name;
	_tmp29_ = new_call;
	_tmp30_ = vala_ccode_variable_declarator_new (_tmp28_, (ValaCCodeExpression*) _tmp29_, NULL);
	_tmp31_ = _tmp30_;
	vala_ccode_function_add_declaration (_tmp25_, _tmp27_, (ValaCCodeDeclarator*) _tmp31_, 0);
	_vala_ccode_node_unref0 (_tmp31_);
	_g_free0 (_tmp27_);
	_tmp32_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp33_ = _tmp32_;
	_tmp34_ = length_ctype;
	_tmp35_ = temp_name;
	_tmp36_ = g_strconcat (_tmp35_, "_length", NULL);
	_tmp37_ = _tmp36_;
	_tmp38_ = vala_ccode_constant_new ("0");
	_tmp39_ = _tmp38_;
	_tmp40_ = vala_ccode_variable_declarator_new (_tmp37_, (ValaCCodeExpression*) _tmp39_, NULL);
	_tmp41_ = _tmp40_;
	vala_ccode_function_add_declaration (_tmp33_, _tmp34_, (ValaCCodeDeclarator*) _tmp41_, 0);
	_vala_ccode_node_unref0 (_tmp41_);
	_vala_ccode_node_unref0 (_tmp39_);
	_g_free0 (_tmp37_);
	_tmp42_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp43_ = _tmp42_;
	_tmp44_ = length_ctype;
	_tmp45_ = temp_name;
	_tmp46_ = g_strconcat (_tmp45_, "_size", NULL);
	_tmp47_ = _tmp46_;
	_tmp48_ = vala_ccode_constant_new ("4");
	_tmp49_ = _tmp48_;
	_tmp50_ = vala_ccode_variable_declarator_new (_tmp47_, (ValaCCodeExpression*) _tmp49_, NULL);
	_tmp51_ = _tmp50_;
	vala_ccode_function_add_declaration (_tmp43_, _tmp44_, (ValaCCodeDeclarator*) _tmp51_, 0);
	_vala_ccode_node_unref0 (_tmp51_);
	_vala_ccode_node_unref0 (_tmp49_);
	_g_free0 (_tmp47_);
	_tmp52_ = temp_name;
	vala_gvariant_module_deserialize_array_dim (self, array_type, 1, _tmp52_, variant_expr, expr);
	_tmp53_ = vala_array_type_get_element_type (array_type);
	_tmp54_ = _tmp53_;
	if (vala_data_type_is_reference_type_or_type_parameter (_tmp54_)) {
		ValaCCodeIdentifier* length = NULL;
		const gchar* _tmp55_;
		gchar* _tmp56_;
		gchar* _tmp57_;
		ValaCCodeIdentifier* _tmp58_;
		ValaCCodeIdentifier* _tmp59_;
		ValaCCodeElementAccess* element_access = NULL;
		const gchar* _tmp60_;
		ValaCCodeIdentifier* _tmp61_;
		ValaCCodeIdentifier* _tmp62_;
		ValaCCodeIdentifier* _tmp63_;
		ValaCCodeElementAccess* _tmp64_;
		ValaCCodeElementAccess* _tmp65_;
		ValaCCodeFunction* _tmp66_;
		ValaCCodeFunction* _tmp67_;
		ValaCCodeElementAccess* _tmp68_;
		ValaCCodeConstant* _tmp69_;
		ValaCCodeConstant* _tmp70_;
		_tmp55_ = temp_name;
		_tmp56_ = g_strconcat (_tmp55_, "_length", NULL);
		_tmp57_ = _tmp56_;
		_tmp58_ = vala_ccode_identifier_new (_tmp57_);
		_tmp59_ = _tmp58_;
		_g_free0 (_tmp57_);
		length = _tmp59_;
		_tmp60_ = temp_name;
		_tmp61_ = vala_ccode_identifier_new (_tmp60_);
		_tmp62_ = _tmp61_;
		_tmp63_ = length;
		_tmp64_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp62_, (ValaCCodeExpression*) _tmp63_);
		_tmp65_ = _tmp64_;
		_vala_ccode_node_unref0 (_tmp62_);
		element_access = _tmp65_;
		_tmp66_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp67_ = _tmp66_;
		_tmp68_ = element_access;
		_tmp69_ = vala_ccode_constant_new ("NULL");
		_tmp70_ = _tmp69_;
		vala_ccode_function_add_assignment (_tmp67_, (ValaCCodeExpression*) _tmp68_, (ValaCCodeExpression*) _tmp70_);
		_vala_ccode_node_unref0 (_tmp70_);
		_vala_ccode_node_unref0 (element_access);
		_vala_ccode_node_unref0 (length);
	}
	_tmp71_ = temp_name;
	_tmp72_ = vala_ccode_identifier_new (_tmp71_);
	result = (ValaCCodeExpression*) _tmp72_;
	_g_free0 (length_ctype);
	_vala_ccode_node_unref0 (new_call);
	_g_free0 (temp_name);
	return result;
}

static void
vala_gvariant_module_deserialize_array_dim (ValaGVariantModule* self,
                                            ValaArrayType* array_type,
                                            gint dim,
                                            const gchar* temp_name,
                                            ValaCCodeExpression* variant_expr,
                                            ValaCCodeExpression* expr)
{
	gchar* subiter_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	gchar* element_name = NULL;
	gint _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeConstant* _tmp12_;
	ValaCCodeConstant* _tmp13_;
	ValaCCodeVariableDeclarator* _tmp14_;
	ValaCCodeVariableDeclarator* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	const gchar* _tmp18_;
	ValaCCodeVariableDeclarator* _tmp19_;
	ValaCCodeVariableDeclarator* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	const gchar* _tmp23_;
	ValaCCodeVariableDeclarator* _tmp24_;
	ValaCCodeVariableDeclarator* _tmp25_;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp26_;
	ValaCCodeIdentifier* _tmp27_;
	ValaCCodeFunctionCall* _tmp28_;
	ValaCCodeFunctionCall* _tmp29_;
	ValaCCodeFunctionCall* _tmp30_;
	const gchar* _tmp31_;
	ValaCCodeIdentifier* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeUnaryExpression* _tmp34_;
	ValaCCodeUnaryExpression* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunctionCall* _tmp39_;
	ValaCCodeIdentifier* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeFunctionCall* _tmp42_;
	ValaCCodeFunctionCall* _tmp43_;
	const gchar* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeIdentifier* _tmp46_;
	ValaCCodeUnaryExpression* _tmp47_;
	ValaCCodeUnaryExpression* _tmp48_;
	ValaCCodeBinaryExpression* cforcond = NULL;
	const gchar* _tmp49_;
	ValaCCodeIdentifier* _tmp50_;
	ValaCCodeIdentifier* _tmp51_;
	ValaCCodeFunctionCall* _tmp52_;
	ValaCCodeAssignment* _tmp53_;
	ValaCCodeAssignment* _tmp54_;
	ValaCCodeConstant* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeBinaryExpression* _tmp57_;
	ValaCCodeBinaryExpression* _tmp58_;
	ValaCCodeUnaryExpression* cforiter = NULL;
	gchar* _tmp59_;
	gchar* _tmp60_;
	ValaCCodeIdentifier* _tmp61_;
	ValaCCodeIdentifier* _tmp62_;
	ValaCCodeUnaryExpression* _tmp63_;
	ValaCCodeUnaryExpression* _tmp64_;
	ValaCCodeFunction* _tmp65_;
	ValaCCodeFunction* _tmp66_;
	ValaCCodeBinaryExpression* _tmp67_;
	ValaCCodeUnaryExpression* _tmp68_;
	gint _tmp69_;
	gint _tmp70_;
	ValaCCodeFunctionCall* unref = NULL;
	ValaCCodeIdentifier* _tmp153_;
	ValaCCodeIdentifier* _tmp154_;
	ValaCCodeFunctionCall* _tmp155_;
	ValaCCodeFunctionCall* _tmp156_;
	ValaCCodeFunctionCall* _tmp157_;
	const gchar* _tmp158_;
	ValaCCodeIdentifier* _tmp159_;
	ValaCCodeIdentifier* _tmp160_;
	ValaCCodeFunction* _tmp161_;
	ValaCCodeFunction* _tmp162_;
	ValaCCodeFunctionCall* _tmp163_;
	ValaCCodeFunction* _tmp164_;
	ValaCCodeFunction* _tmp165_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (array_type != NULL);
	g_return_if_fail (temp_name != NULL);
	g_return_if_fail (variant_expr != NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	subiter_name = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp4_ + 1);
	_tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
	element_name = _tmp5_;
	_tmp6_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_get_ccode_array_length_type ((ValaCodeNode*) array_type);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strdup_printf ("%s_length%d", temp_name, dim);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_constant_new ("0");
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_variable_declarator_new (_tmp11_, (ValaCCodeExpression*) _tmp13_, NULL);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_declaration (_tmp7_, _tmp9_, (ValaCCodeDeclarator*) _tmp15_, 0);
	_vala_ccode_node_unref0 (_tmp15_);
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp11_);
	_g_free0 (_tmp9_);
	_tmp16_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	_tmp18_ = subiter_name;
	_tmp19_ = vala_ccode_variable_declarator_new (_tmp18_, NULL, NULL);
	_tmp20_ = _tmp19_;
	vala_ccode_function_add_declaration (_tmp17_, "GVariantIter", (ValaCCodeDeclarator*) _tmp20_, 0);
	_vala_ccode_node_unref0 (_tmp20_);
	_tmp21_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp22_ = _tmp21_;
	_tmp23_ = element_name;
	_tmp24_ = vala_ccode_variable_declarator_new (_tmp23_, NULL, NULL);
	_tmp25_ = _tmp24_;
	vala_ccode_function_add_declaration (_tmp22_, "GVariant*", (ValaCCodeDeclarator*) _tmp25_, 0);
	_vala_ccode_node_unref0 (_tmp25_);
	_tmp26_ = vala_ccode_identifier_new ("g_variant_iter_init");
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp27_);
	_tmp29_ = _tmp28_;
	_vala_ccode_node_unref0 (_tmp27_);
	iter_call = _tmp29_;
	_tmp30_ = iter_call;
	_tmp31_ = subiter_name;
	_tmp32_ = vala_ccode_identifier_new (_tmp31_);
	_tmp33_ = _tmp32_;
	_tmp34_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp33_);
	_tmp35_ = _tmp34_;
	vala_ccode_function_call_add_argument (_tmp30_, (ValaCCodeExpression*) _tmp35_);
	_vala_ccode_node_unref0 (_tmp35_);
	_vala_ccode_node_unref0 (_tmp33_);
	_tmp36_ = iter_call;
	vala_ccode_function_call_add_argument (_tmp36_, variant_expr);
	_tmp37_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp38_ = _tmp37_;
	_tmp39_ = iter_call;
	vala_ccode_function_add_expression (_tmp38_, (ValaCCodeExpression*) _tmp39_);
	_tmp40_ = vala_ccode_identifier_new ("g_variant_iter_next_value");
	_tmp41_ = _tmp40_;
	_tmp42_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp41_);
	_vala_ccode_node_unref0 (iter_call);
	iter_call = _tmp42_;
	_vala_ccode_node_unref0 (_tmp41_);
	_tmp43_ = iter_call;
	_tmp44_ = subiter_name;
	_tmp45_ = vala_ccode_identifier_new (_tmp44_);
	_tmp46_ = _tmp45_;
	_tmp47_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp46_);
	_tmp48_ = _tmp47_;
	vala_ccode_function_call_add_argument (_tmp43_, (ValaCCodeExpression*) _tmp48_);
	_vala_ccode_node_unref0 (_tmp48_);
	_vala_ccode_node_unref0 (_tmp46_);
	_tmp49_ = element_name;
	_tmp50_ = vala_ccode_identifier_new (_tmp49_);
	_tmp51_ = _tmp50_;
	_tmp52_ = iter_call;
	_tmp53_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp51_, (ValaCCodeExpression*) _tmp52_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_constant_new ("NULL");
	_tmp56_ = _tmp55_;
	_tmp57_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp54_, (ValaCCodeExpression*) _tmp56_);
	_tmp58_ = _tmp57_;
	_vala_ccode_node_unref0 (_tmp56_);
	_vala_ccode_node_unref0 (_tmp54_);
	_vala_ccode_node_unref0 (_tmp51_);
	cforcond = _tmp58_;
	_tmp59_ = g_strdup_printf ("%s_length%d", temp_name, dim);
	_tmp60_ = _tmp59_;
	_tmp61_ = vala_ccode_identifier_new (_tmp60_);
	_tmp62_ = _tmp61_;
	_tmp63_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp62_);
	_tmp64_ = _tmp63_;
	_vala_ccode_node_unref0 (_tmp62_);
	_g_free0 (_tmp60_);
	cforiter = _tmp64_;
	_tmp65_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp66_ = _tmp65_;
	_tmp67_ = cforcond;
	_tmp68_ = cforiter;
	vala_ccode_function_open_for (_tmp66_, NULL, (ValaCCodeExpression*) _tmp67_, (ValaCCodeExpression*) _tmp68_);
	_tmp69_ = vala_array_type_get_rank (array_type);
	_tmp70_ = _tmp69_;
	if (dim < _tmp70_) {
		const gchar* _tmp71_;
		ValaCCodeIdentifier* _tmp72_;
		ValaCCodeIdentifier* _tmp73_;
		_tmp71_ = element_name;
		_tmp72_ = vala_ccode_identifier_new (_tmp71_);
		_tmp73_ = _tmp72_;
		vala_gvariant_module_deserialize_array_dim (self, array_type, dim + 1, temp_name, (ValaCCodeExpression*) _tmp73_, expr);
		_vala_ccode_node_unref0 (_tmp73_);
	} else {
		ValaCCodeBinaryExpression* size_check = NULL;
		gchar* _tmp74_;
		gchar* _tmp75_;
		ValaCCodeIdentifier* _tmp76_;
		ValaCCodeIdentifier* _tmp77_;
		gchar* _tmp78_;
		gchar* _tmp79_;
		ValaCCodeIdentifier* _tmp80_;
		ValaCCodeIdentifier* _tmp81_;
		ValaCCodeBinaryExpression* _tmp82_;
		ValaCCodeBinaryExpression* _tmp83_;
		ValaCCodeFunction* _tmp84_;
		ValaCCodeFunction* _tmp85_;
		ValaCCodeBinaryExpression* _tmp86_;
		ValaCCodeBinaryExpression* new_size = NULL;
		ValaCCodeConstant* _tmp87_;
		ValaCCodeConstant* _tmp88_;
		gchar* _tmp89_;
		gchar* _tmp90_;
		ValaCCodeIdentifier* _tmp91_;
		ValaCCodeIdentifier* _tmp92_;
		ValaCCodeBinaryExpression* _tmp93_;
		ValaCCodeBinaryExpression* _tmp94_;
		ValaCCodeFunction* _tmp95_;
		ValaCCodeFunction* _tmp96_;
		gchar* _tmp97_;
		gchar* _tmp98_;
		ValaCCodeIdentifier* _tmp99_;
		ValaCCodeIdentifier* _tmp100_;
		ValaCCodeBinaryExpression* _tmp101_;
		ValaCCodeFunctionCall* renew_call = NULL;
		ValaCCodeIdentifier* _tmp102_;
		ValaCCodeIdentifier* _tmp103_;
		ValaCCodeFunctionCall* _tmp104_;
		ValaCCodeFunctionCall* _tmp105_;
		ValaCCodeFunctionCall* _tmp106_;
		ValaDataType* _tmp107_;
		ValaDataType* _tmp108_;
		gchar* _tmp109_;
		gchar* _tmp110_;
		ValaCCodeIdentifier* _tmp111_;
		ValaCCodeIdentifier* _tmp112_;
		ValaCCodeFunctionCall* _tmp113_;
		ValaCCodeIdentifier* _tmp114_;
		ValaCCodeIdentifier* _tmp115_;
		ValaCCodeFunctionCall* _tmp116_;
		gchar* _tmp117_;
		gchar* _tmp118_;
		ValaCCodeIdentifier* _tmp119_;
		ValaCCodeIdentifier* _tmp120_;
		ValaCCodeConstant* _tmp121_;
		ValaCCodeConstant* _tmp122_;
		ValaCCodeBinaryExpression* _tmp123_;
		ValaCCodeBinaryExpression* _tmp124_;
		ValaCCodeFunction* _tmp125_;
		ValaCCodeFunction* _tmp126_;
		ValaCCodeIdentifier* _tmp127_;
		ValaCCodeIdentifier* _tmp128_;
		ValaCCodeFunctionCall* _tmp129_;
		ValaCCodeFunction* _tmp130_;
		ValaCCodeFunction* _tmp131_;
		ValaCCodeElementAccess* element_access = NULL;
		ValaCCodeIdentifier* _tmp132_;
		ValaCCodeIdentifier* _tmp133_;
		gchar* _tmp134_;
		gchar* _tmp135_;
		ValaCCodeIdentifier* _tmp136_;
		ValaCCodeIdentifier* _tmp137_;
		ValaCCodeUnaryExpression* _tmp138_;
		ValaCCodeUnaryExpression* _tmp139_;
		ValaCCodeElementAccess* _tmp140_;
		ValaCCodeElementAccess* _tmp141_;
		ValaCCodeExpression* element_expr = NULL;
		ValaDataType* _tmp142_;
		ValaDataType* _tmp143_;
		const gchar* _tmp144_;
		ValaCCodeIdentifier* _tmp145_;
		ValaCCodeIdentifier* _tmp146_;
		ValaCCodeExpression* _tmp147_;
		ValaCCodeExpression* _tmp148_;
		ValaCCodeFunction* _tmp149_;
		ValaCCodeFunction* _tmp150_;
		ValaCCodeElementAccess* _tmp151_;
		ValaCCodeExpression* _tmp152_;
		_tmp74_ = g_strconcat (temp_name, "_size", NULL);
		_tmp75_ = _tmp74_;
		_tmp76_ = vala_ccode_identifier_new (_tmp75_);
		_tmp77_ = _tmp76_;
		_tmp78_ = g_strconcat (temp_name, "_length", NULL);
		_tmp79_ = _tmp78_;
		_tmp80_ = vala_ccode_identifier_new (_tmp79_);
		_tmp81_ = _tmp80_;
		_tmp82_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp77_, (ValaCCodeExpression*) _tmp81_);
		_tmp83_ = _tmp82_;
		_vala_ccode_node_unref0 (_tmp81_);
		_g_free0 (_tmp79_);
		_vala_ccode_node_unref0 (_tmp77_);
		_g_free0 (_tmp75_);
		size_check = _tmp83_;
		_tmp84_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp85_ = _tmp84_;
		_tmp86_ = size_check;
		vala_ccode_function_open_if (_tmp85_, (ValaCCodeExpression*) _tmp86_);
		_tmp87_ = vala_ccode_constant_new ("2");
		_tmp88_ = _tmp87_;
		_tmp89_ = g_strconcat (temp_name, "_size", NULL);
		_tmp90_ = _tmp89_;
		_tmp91_ = vala_ccode_identifier_new (_tmp90_);
		_tmp92_ = _tmp91_;
		_tmp93_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, (ValaCCodeExpression*) _tmp88_, (ValaCCodeExpression*) _tmp92_);
		_tmp94_ = _tmp93_;
		_vala_ccode_node_unref0 (_tmp92_);
		_g_free0 (_tmp90_);
		_vala_ccode_node_unref0 (_tmp88_);
		new_size = _tmp94_;
		_tmp95_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp96_ = _tmp95_;
		_tmp97_ = g_strconcat (temp_name, "_size", NULL);
		_tmp98_ = _tmp97_;
		_tmp99_ = vala_ccode_identifier_new (_tmp98_);
		_tmp100_ = _tmp99_;
		_tmp101_ = new_size;
		vala_ccode_function_add_assignment (_tmp96_, (ValaCCodeExpression*) _tmp100_, (ValaCCodeExpression*) _tmp101_);
		_vala_ccode_node_unref0 (_tmp100_);
		_g_free0 (_tmp98_);
		_tmp102_ = vala_ccode_identifier_new ("g_renew");
		_tmp103_ = _tmp102_;
		_tmp104_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp103_);
		_tmp105_ = _tmp104_;
		_vala_ccode_node_unref0 (_tmp103_);
		renew_call = _tmp105_;
		_tmp106_ = renew_call;
		_tmp107_ = vala_array_type_get_element_type (array_type);
		_tmp108_ = _tmp107_;
		_tmp109_ = vala_get_ccode_name ((ValaCodeNode*) _tmp108_);
		_tmp110_ = _tmp109_;
		_tmp111_ = vala_ccode_identifier_new (_tmp110_);
		_tmp112_ = _tmp111_;
		vala_ccode_function_call_add_argument (_tmp106_, (ValaCCodeExpression*) _tmp112_);
		_vala_ccode_node_unref0 (_tmp112_);
		_g_free0 (_tmp110_);
		_tmp113_ = renew_call;
		_tmp114_ = vala_ccode_identifier_new (temp_name);
		_tmp115_ = _tmp114_;
		vala_ccode_function_call_add_argument (_tmp113_, (ValaCCodeExpression*) _tmp115_);
		_vala_ccode_node_unref0 (_tmp115_);
		_tmp116_ = renew_call;
		_tmp117_ = g_strconcat (temp_name, "_size", NULL);
		_tmp118_ = _tmp117_;
		_tmp119_ = vala_ccode_identifier_new (_tmp118_);
		_tmp120_ = _tmp119_;
		_tmp121_ = vala_ccode_constant_new ("1");
		_tmp122_ = _tmp121_;
		_tmp123_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp120_, (ValaCCodeExpression*) _tmp122_);
		_tmp124_ = _tmp123_;
		vala_ccode_function_call_add_argument (_tmp116_, (ValaCCodeExpression*) _tmp124_);
		_vala_ccode_node_unref0 (_tmp124_);
		_vala_ccode_node_unref0 (_tmp122_);
		_vala_ccode_node_unref0 (_tmp120_);
		_g_free0 (_tmp118_);
		_tmp125_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp126_ = _tmp125_;
		_tmp127_ = vala_ccode_identifier_new (temp_name);
		_tmp128_ = _tmp127_;
		_tmp129_ = renew_call;
		vala_ccode_function_add_assignment (_tmp126_, (ValaCCodeExpression*) _tmp128_, (ValaCCodeExpression*) _tmp129_);
		_vala_ccode_node_unref0 (_tmp128_);
		_tmp130_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp131_ = _tmp130_;
		vala_ccode_function_close (_tmp131_);
		_tmp132_ = vala_ccode_identifier_new (temp_name);
		_tmp133_ = _tmp132_;
		_tmp134_ = g_strconcat (temp_name, "_length", NULL);
		_tmp135_ = _tmp134_;
		_tmp136_ = vala_ccode_identifier_new (_tmp135_);
		_tmp137_ = _tmp136_;
		_tmp138_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp137_);
		_tmp139_ = _tmp138_;
		_tmp140_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp133_, (ValaCCodeExpression*) _tmp139_);
		_tmp141_ = _tmp140_;
		_vala_ccode_node_unref0 (_tmp139_);
		_vala_ccode_node_unref0 (_tmp137_);
		_g_free0 (_tmp135_);
		_vala_ccode_node_unref0 (_tmp133_);
		element_access = _tmp141_;
		_tmp142_ = vala_array_type_get_element_type (array_type);
		_tmp143_ = _tmp142_;
		_tmp144_ = element_name;
		_tmp145_ = vala_ccode_identifier_new (_tmp144_);
		_tmp146_ = _tmp145_;
		_tmp147_ = vala_ccode_base_module_deserialize_expression ((ValaCCodeBaseModule*) self, _tmp143_, (ValaCCodeExpression*) _tmp146_, NULL, NULL, NULL);
		_tmp148_ = _tmp147_;
		_vala_ccode_node_unref0 (_tmp146_);
		element_expr = _tmp148_;
		_tmp149_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp150_ = _tmp149_;
		_tmp151_ = element_access;
		_tmp152_ = element_expr;
		vala_ccode_function_add_assignment (_tmp150_, (ValaCCodeExpression*) _tmp151_, _tmp152_);
		_vala_ccode_node_unref0 (element_expr);
		_vala_ccode_node_unref0 (element_access);
		_vala_ccode_node_unref0 (renew_call);
		_vala_ccode_node_unref0 (new_size);
		_vala_ccode_node_unref0 (size_check);
	}
	_tmp153_ = vala_ccode_identifier_new ("g_variant_unref");
	_tmp154_ = _tmp153_;
	_tmp155_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp154_);
	_tmp156_ = _tmp155_;
	_vala_ccode_node_unref0 (_tmp154_);
	unref = _tmp156_;
	_tmp157_ = unref;
	_tmp158_ = element_name;
	_tmp159_ = vala_ccode_identifier_new (_tmp158_);
	_tmp160_ = _tmp159_;
	vala_ccode_function_call_add_argument (_tmp157_, (ValaCCodeExpression*) _tmp160_);
	_vala_ccode_node_unref0 (_tmp160_);
	_tmp161_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp162_ = _tmp161_;
	_tmp163_ = unref;
	vala_ccode_function_add_expression (_tmp162_, (ValaCCodeExpression*) _tmp163_);
	_tmp164_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp165_ = _tmp164_;
	vala_ccode_function_close (_tmp165_);
	if (expr != NULL) {
		ValaCCodeFunction* _tmp166_;
		ValaCCodeFunction* _tmp167_;
		ValaCCodeExpression* _tmp168_;
		ValaCCodeExpression* _tmp169_;
		gchar* _tmp170_;
		gchar* _tmp171_;
		ValaCCodeIdentifier* _tmp172_;
		ValaCCodeIdentifier* _tmp173_;
		_tmp166_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp167_ = _tmp166_;
		_tmp168_ = vala_gvariant_module_get_array_length (self, expr, dim);
		_tmp169_ = _tmp168_;
		_tmp170_ = g_strdup_printf ("%s_length%d", temp_name, dim);
		_tmp171_ = _tmp170_;
		_tmp172_ = vala_ccode_identifier_new (_tmp171_);
		_tmp173_ = _tmp172_;
		vala_ccode_function_add_assignment (_tmp167_, _tmp169_, (ValaCCodeExpression*) _tmp173_);
		_vala_ccode_node_unref0 (_tmp173_);
		_g_free0 (_tmp171_);
		_vala_ccode_node_unref0 (_tmp169_);
	}
	_vala_ccode_node_unref0 (unref);
	_vala_ccode_node_unref0 (cforiter);
	_vala_ccode_node_unref0 (cforcond);
	_vala_ccode_node_unref0 (iter_call);
	_g_free0 (element_name);
	_g_free0 (subiter_name);
}

static ValaCCodeExpression*
vala_gvariant_module_deserialize_buffer_array (ValaGVariantModule* self,
                                               ValaArrayType* array_type,
                                               ValaCCodeExpression* variant_expr,
                                               ValaCCodeExpression* expr)
{
	gchar* temp_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	ValaCCodeFunctionCall* get_data_call = NULL;
	ValaCCodeIdentifier* _tmp3_;
	ValaCCodeIdentifier* _tmp4_;
	ValaCCodeFunctionCall* _tmp5_;
	ValaCCodeFunctionCall* _tmp6_;
	ValaCCodeFunctionCall* _tmp7_;
	ValaCCodeFunctionCall* get_size_call = NULL;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeFunctionCall* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	const gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaCCodeVariableDeclarator* _tmp19_;
	ValaCCodeVariableDeclarator* _tmp20_;
	ValaCCodeIdentifier* length = NULL;
	const gchar* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeFunctionCall* dup_call = NULL;
	ValaCodeContext* _tmp26_;
	ValaCodeContext* _tmp27_;
	ValaCCodeFunctionCall* _tmp34_;
	ValaCCodeFunctionCall* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeIdentifier* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	gchar* _tmp40_;
	gchar* _tmp41_;
	const gchar* _tmp42_;
	ValaCCodeFunctionCall* _tmp43_;
	ValaCCodeVariableDeclarator* _tmp44_;
	ValaCCodeVariableDeclarator* _tmp45_;
	const gchar* _tmp51_;
	ValaCCodeIdentifier* _tmp52_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (array_type != NULL, NULL);
	g_return_val_if_fail (variant_expr != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	temp_name = _tmp2_;
	_tmp3_ = vala_ccode_identifier_new ("g_variant_get_data");
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp4_);
	_tmp6_ = _tmp5_;
	_vala_ccode_node_unref0 (_tmp4_);
	get_data_call = _tmp6_;
	_tmp7_ = get_data_call;
	vala_ccode_function_call_add_argument (_tmp7_, variant_expr);
	_tmp8_ = vala_ccode_identifier_new ("g_variant_get_size");
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp9_);
	_tmp11_ = _tmp10_;
	_vala_ccode_node_unref0 (_tmp9_);
	get_size_call = _tmp11_;
	_tmp12_ = get_size_call;
	vala_ccode_function_call_add_argument (_tmp12_, variant_expr);
	_tmp13_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp14_ = _tmp13_;
	_tmp15_ = temp_name;
	_tmp16_ = g_strconcat (_tmp15_, "_length", NULL);
	_tmp17_ = _tmp16_;
	_tmp18_ = get_size_call;
	_tmp19_ = vala_ccode_variable_declarator_new (_tmp17_, (ValaCCodeExpression*) _tmp18_, NULL);
	_tmp20_ = _tmp19_;
	vala_ccode_function_add_declaration (_tmp14_, "gsize", (ValaCCodeDeclarator*) _tmp20_, 0);
	_vala_ccode_node_unref0 (_tmp20_);
	_g_free0 (_tmp17_);
	_tmp21_ = temp_name;
	_tmp22_ = g_strconcat (_tmp21_, "_length", NULL);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_ccode_identifier_new (_tmp23_);
	_tmp25_ = _tmp24_;
	_g_free0 (_tmp23_);
	length = _tmp25_;
	_tmp26_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp27_ = _tmp26_;
	if (vala_code_context_require_glib_version (_tmp27_, 2, 68)) {
		ValaCCodeIdentifier* _tmp28_;
		ValaCCodeIdentifier* _tmp29_;
		ValaCCodeFunctionCall* _tmp30_;
		_tmp28_ = vala_ccode_identifier_new ("g_memdup2");
		_tmp29_ = _tmp28_;
		_tmp30_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp29_);
		_vala_ccode_node_unref0 (dup_call);
		dup_call = _tmp30_;
		_vala_ccode_node_unref0 (_tmp29_);
	} else {
		ValaCCodeIdentifier* _tmp31_;
		ValaCCodeIdentifier* _tmp32_;
		ValaCCodeFunctionCall* _tmp33_;
		((ValaCCodeBaseModule*) self)->requires_memdup2 = TRUE;
		_tmp31_ = vala_ccode_identifier_new ("_vala_memdup2");
		_tmp32_ = _tmp31_;
		_tmp33_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp32_);
		_vala_ccode_node_unref0 (dup_call);
		dup_call = _tmp33_;
		_vala_ccode_node_unref0 (_tmp32_);
	}
	_tmp34_ = dup_call;
	_tmp35_ = get_data_call;
	vala_ccode_function_call_add_argument (_tmp34_, (ValaCCodeExpression*) _tmp35_);
	_tmp36_ = dup_call;
	_tmp37_ = length;
	vala_ccode_function_call_add_argument (_tmp36_, (ValaCCodeExpression*) _tmp37_);
	_tmp38_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp39_ = _tmp38_;
	_tmp40_ = vala_get_ccode_name ((ValaCodeNode*) array_type);
	_tmp41_ = _tmp40_;
	_tmp42_ = temp_name;
	_tmp43_ = dup_call;
	_tmp44_ = vala_ccode_variable_declarator_new (_tmp42_, (ValaCCodeExpression*) _tmp43_, NULL);
	_tmp45_ = _tmp44_;
	vala_ccode_function_add_declaration (_tmp39_, _tmp41_, (ValaCCodeDeclarator*) _tmp45_, 0);
	_vala_ccode_node_unref0 (_tmp45_);
	_g_free0 (_tmp41_);
	if (expr != NULL) {
		ValaCCodeFunction* _tmp46_;
		ValaCCodeFunction* _tmp47_;
		ValaCCodeExpression* _tmp48_;
		ValaCCodeExpression* _tmp49_;
		ValaCCodeIdentifier* _tmp50_;
		_tmp46_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp47_ = _tmp46_;
		_tmp48_ = vala_gvariant_module_get_array_length (self, expr, 1);
		_tmp49_ = _tmp48_;
		_tmp50_ = length;
		vala_ccode_function_add_assignment (_tmp47_, _tmp49_, (ValaCCodeExpression*) _tmp50_);
		_vala_ccode_node_unref0 (_tmp49_);
	}
	_tmp51_ = temp_name;
	_tmp52_ = vala_ccode_identifier_new (_tmp51_);
	result = (ValaCCodeExpression*) _tmp52_;
	_vala_ccode_node_unref0 (dup_call);
	_vala_ccode_node_unref0 (length);
	_vala_ccode_node_unref0 (get_size_call);
	_vala_ccode_node_unref0 (get_data_call);
	_g_free0 (temp_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_deserialize_struct (ValaGVariantModule* self,
                                         ValaStruct* st,
                                         ValaCCodeExpression* variant_expr)
{
	gchar* temp_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	gchar* subiter_name = NULL;
	gint _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	const gchar* _tmp10_;
	ValaCCodeVariableDeclarator* _tmp11_;
	ValaCCodeVariableDeclarator* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	const gchar* _tmp15_;
	ValaCCodeVariableDeclarator* _tmp16_;
	ValaCCodeVariableDeclarator* _tmp17_;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaCCodeFunctionCall* _tmp21_;
	ValaCCodeFunctionCall* _tmp22_;
	const gchar* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeUnaryExpression* _tmp26_;
	ValaCCodeUnaryExpression* _tmp27_;
	ValaCCodeFunctionCall* _tmp28_;
	ValaCCodeFunction* _tmp29_;
	ValaCCodeFunction* _tmp30_;
	ValaCCodeFunctionCall* _tmp31_;
	gboolean field_found = FALSE;
	const gchar* _tmp58_;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (st != NULL, NULL);
	g_return_val_if_fail (variant_expr != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	temp_name = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp4_ + 1);
	_tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
	subiter_name = _tmp5_;
	_tmp6_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) st);
	_tmp9_ = _tmp8_;
	_tmp10_ = temp_name;
	_tmp11_ = vala_ccode_variable_declarator_new (_tmp10_, NULL, NULL);
	_tmp12_ = _tmp11_;
	vala_ccode_function_add_declaration (_tmp7_, _tmp9_, (ValaCCodeDeclarator*) _tmp12_, 0);
	_vala_ccode_node_unref0 (_tmp12_);
	_g_free0 (_tmp9_);
	_tmp13_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp14_ = _tmp13_;
	_tmp15_ = subiter_name;
	_tmp16_ = vala_ccode_variable_declarator_new (_tmp15_, NULL, NULL);
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_declaration (_tmp14_, "GVariantIter", (ValaCCodeDeclarator*) _tmp17_, 0);
	_vala_ccode_node_unref0 (_tmp17_);
	_tmp18_ = vala_ccode_identifier_new ("g_variant_iter_init");
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp19_);
	_tmp21_ = _tmp20_;
	_vala_ccode_node_unref0 (_tmp19_);
	iter_call = _tmp21_;
	_tmp22_ = iter_call;
	_tmp23_ = subiter_name;
	_tmp24_ = vala_ccode_identifier_new (_tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp25_);
	_tmp27_ = _tmp26_;
	vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp27_);
	_vala_ccode_node_unref0 (_tmp27_);
	_vala_ccode_node_unref0 (_tmp25_);
	_tmp28_ = iter_call;
	vala_ccode_function_call_add_argument (_tmp28_, variant_expr);
	_tmp29_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp30_ = _tmp29_;
	_tmp31_ = iter_call;
	vala_ccode_function_add_expression (_tmp30_, (ValaCCodeExpression*) _tmp31_);
	field_found = FALSE;
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp32_;
		gint _f_size = 0;
		ValaList* _tmp33_;
		gint _tmp34_;
		gint _tmp35_;
		gint _f_index = 0;
		_tmp32_ = vala_struct_get_fields (st);
		_f_list = _tmp32_;
		_tmp33_ = _f_list;
		_tmp34_ = vala_collection_get_size ((ValaCollection*) _tmp33_);
		_tmp35_ = _tmp34_;
		_f_size = _tmp35_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp36_;
			gint _tmp37_;
			ValaField* f = NULL;
			ValaList* _tmp38_;
			gpointer _tmp39_;
			ValaField* _tmp40_;
			ValaMemberBinding _tmp41_;
			ValaMemberBinding _tmp42_;
			ValaField* _tmp43_;
			ValaDataType* _tmp44_;
			ValaDataType* _tmp45_;
			const gchar* _tmp46_;
			ValaCCodeIdentifier* _tmp47_;
			ValaCCodeIdentifier* _tmp48_;
			const gchar* _tmp49_;
			ValaCCodeIdentifier* _tmp50_;
			ValaCCodeIdentifier* _tmp51_;
			ValaField* _tmp52_;
			gchar* _tmp53_;
			gchar* _tmp54_;
			ValaCCodeMemberAccess* _tmp55_;
			ValaCCodeMemberAccess* _tmp56_;
			ValaField* _tmp57_;
			_f_index = _f_index + 1;
			_tmp36_ = _f_index;
			_tmp37_ = _f_size;
			if (!(_tmp36_ < _tmp37_)) {
				break;
			}
			_tmp38_ = _f_list;
			_tmp39_ = vala_list_get (_tmp38_, _f_index);
			f = (ValaField*) _tmp39_;
			_tmp40_ = f;
			_tmp41_ = vala_field_get_binding (_tmp40_);
			_tmp42_ = _tmp41_;
			if (_tmp42_ != VALA_MEMBER_BINDING_INSTANCE) {
				_vala_code_node_unref0 (f);
				continue;
			}
			field_found = TRUE;
			_tmp43_ = f;
			_tmp44_ = vala_variable_get_variable_type ((ValaVariable*) _tmp43_);
			_tmp45_ = _tmp44_;
			_tmp46_ = subiter_name;
			_tmp47_ = vala_ccode_identifier_new (_tmp46_);
			_tmp48_ = _tmp47_;
			_tmp49_ = temp_name;
			_tmp50_ = vala_ccode_identifier_new (_tmp49_);
			_tmp51_ = _tmp50_;
			_tmp52_ = f;
			_tmp53_ = vala_get_ccode_name ((ValaCodeNode*) _tmp52_);
			_tmp54_ = _tmp53_;
			_tmp55_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp51_, _tmp54_, FALSE);
			_tmp56_ = _tmp55_;
			_tmp57_ = f;
			vala_gvariant_module_read_expression (self, _tmp45_, (ValaCCodeExpression*) _tmp48_, (ValaCCodeExpression*) _tmp56_, (ValaSymbol*) _tmp57_, NULL, NULL);
			_vala_ccode_node_unref0 (_tmp56_);
			_g_free0 (_tmp54_);
			_vala_ccode_node_unref0 (_tmp51_);
			_vala_ccode_node_unref0 (_tmp48_);
			_vala_code_node_unref0 (f);
		}
	}
	if (!field_found) {
		result = NULL;
		_vala_ccode_node_unref0 (iter_call);
		_g_free0 (subiter_name);
		_g_free0 (temp_name);
		return result;
	}
	_tmp58_ = temp_name;
	_tmp59_ = vala_ccode_identifier_new (_tmp58_);
	result = (ValaCCodeExpression*) _tmp59_;
	_vala_ccode_node_unref0 (iter_call);
	_g_free0 (subiter_name);
	_g_free0 (temp_name);
	return result;
}

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

static ValaCCodeExpression*
vala_gvariant_module_deserialize_hash_table (ValaGVariantModule* self,
                                             ValaObjectType* type,
                                             ValaCCodeExpression* variant_expr)
{
	gchar* temp_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	gchar* subiter_name = NULL;
	gint _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	gchar* key_name = NULL;
	gint _tmp6_;
	gint _tmp7_;
	gchar* _tmp8_;
	gchar* value_name = NULL;
	gint _tmp9_;
	gint _tmp10_;
	gchar* _tmp11_;
	ValaList* type_args = NULL;
	ValaList* _tmp12_;
	ValaList* _tmp13_;
	ValaList* _tmp14_;
	gint _tmp15_;
	gint _tmp16_;
	ValaDataType* key_type = NULL;
	ValaList* _tmp24_;
	gpointer _tmp25_;
	ValaDataType* value_type = NULL;
	ValaList* _tmp26_;
	gpointer _tmp27_;
	ValaCCodeFunction* _tmp28_;
	ValaCCodeFunction* _tmp29_;
	const gchar* _tmp30_;
	ValaCCodeVariableDeclarator* _tmp31_;
	ValaCCodeVariableDeclarator* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	const gchar* _tmp35_;
	ValaCCodeVariableDeclarator* _tmp36_;
	ValaCCodeVariableDeclarator* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	const gchar* _tmp40_;
	ValaCCodeVariableDeclarator* _tmp41_;
	ValaCCodeVariableDeclarator* _tmp42_;
	ValaCCodeFunction* _tmp43_;
	ValaCCodeFunction* _tmp44_;
	const gchar* _tmp45_;
	ValaCCodeVariableDeclarator* _tmp46_;
	ValaCCodeVariableDeclarator* _tmp47_;
	ValaCCodeFunctionCall* hash_table_new = NULL;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeIdentifier* _tmp49_;
	ValaCCodeFunctionCall* _tmp50_;
	ValaCCodeFunctionCall* _tmp51_;
	ValaDataType* _tmp52_;
	ValaTypeSymbol* _tmp53_;
	ValaTypeSymbol* _tmp54_;
	ValaDataType* _tmp55_;
	ValaTypeSymbol* _tmp56_;
	ValaTypeSymbol* _tmp57_;
	ValaDataType* _tmp80_;
	ValaTypeSymbol* _tmp81_;
	ValaTypeSymbol* _tmp82_;
	ValaDataType* _tmp83_;
	ValaTypeSymbol* _tmp84_;
	ValaTypeSymbol* _tmp85_;
	ValaDataType* _tmp112_;
	ValaTypeSymbol* _tmp113_;
	ValaTypeSymbol* _tmp114_;
	ValaDataType* _tmp115_;
	ValaTypeSymbol* _tmp116_;
	ValaTypeSymbol* _tmp117_;
	ValaCCodeFunction* _tmp144_;
	ValaCCodeFunction* _tmp145_;
	const gchar* _tmp146_;
	ValaCCodeIdentifier* _tmp147_;
	ValaCCodeIdentifier* _tmp148_;
	ValaCCodeFunctionCall* _tmp149_;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp150_;
	ValaCCodeIdentifier* _tmp151_;
	ValaCCodeFunctionCall* _tmp152_;
	ValaCCodeFunctionCall* _tmp153_;
	ValaCCodeFunctionCall* _tmp154_;
	const gchar* _tmp155_;
	ValaCCodeIdentifier* _tmp156_;
	ValaCCodeIdentifier* _tmp157_;
	ValaCCodeUnaryExpression* _tmp158_;
	ValaCCodeUnaryExpression* _tmp159_;
	ValaCCodeFunctionCall* _tmp160_;
	ValaCCodeFunction* _tmp161_;
	ValaCCodeFunction* _tmp162_;
	ValaCCodeFunctionCall* _tmp163_;
	ValaCCodeIdentifier* _tmp164_;
	ValaCCodeIdentifier* _tmp165_;
	ValaCCodeFunctionCall* _tmp166_;
	ValaCCodeFunctionCall* _tmp167_;
	const gchar* _tmp168_;
	ValaCCodeIdentifier* _tmp169_;
	ValaCCodeIdentifier* _tmp170_;
	ValaCCodeUnaryExpression* _tmp171_;
	ValaCCodeUnaryExpression* _tmp172_;
	ValaCCodeFunctionCall* _tmp173_;
	ValaCCodeConstant* _tmp174_;
	ValaCCodeConstant* _tmp175_;
	ValaCCodeFunctionCall* _tmp176_;
	const gchar* _tmp177_;
	ValaCCodeIdentifier* _tmp178_;
	ValaCCodeIdentifier* _tmp179_;
	ValaCCodeUnaryExpression* _tmp180_;
	ValaCCodeUnaryExpression* _tmp181_;
	ValaCCodeFunctionCall* _tmp182_;
	const gchar* _tmp183_;
	ValaCCodeIdentifier* _tmp184_;
	ValaCCodeIdentifier* _tmp185_;
	ValaCCodeUnaryExpression* _tmp186_;
	ValaCCodeUnaryExpression* _tmp187_;
	ValaCCodeFunction* _tmp188_;
	ValaCCodeFunction* _tmp189_;
	ValaCCodeFunctionCall* _tmp190_;
	ValaCCodeExpression* key_expr = NULL;
	ValaDataType* _tmp191_;
	const gchar* _tmp192_;
	ValaCCodeIdentifier* _tmp193_;
	ValaCCodeIdentifier* _tmp194_;
	ValaCCodeExpression* _tmp195_;
	ValaCCodeExpression* _tmp196_;
	ValaCCodeExpression* value_expr = NULL;
	ValaDataType* _tmp197_;
	const gchar* _tmp198_;
	ValaCCodeIdentifier* _tmp199_;
	ValaCCodeIdentifier* _tmp200_;
	ValaCCodeExpression* _tmp201_;
	ValaCCodeExpression* _tmp202_;
	gboolean _tmp203_ = FALSE;
	ValaCCodeExpression* _tmp204_;
	ValaCCodeFunctionCall* hash_table_insert = NULL;
	ValaCCodeIdentifier* _tmp206_;
	ValaCCodeIdentifier* _tmp207_;
	ValaCCodeFunctionCall* _tmp208_;
	ValaCCodeFunctionCall* _tmp209_;
	ValaCCodeFunctionCall* _tmp210_;
	const gchar* _tmp211_;
	ValaCCodeIdentifier* _tmp212_;
	ValaCCodeIdentifier* _tmp213_;
	ValaCCodeFunctionCall* _tmp214_;
	ValaCCodeExpression* _tmp215_;
	ValaDataType* _tmp216_;
	ValaCCodeExpression* _tmp217_;
	ValaCCodeExpression* _tmp218_;
	ValaCCodeFunctionCall* _tmp219_;
	ValaCCodeExpression* _tmp220_;
	ValaDataType* _tmp221_;
	ValaCCodeExpression* _tmp222_;
	ValaCCodeExpression* _tmp223_;
	ValaCCodeFunction* _tmp224_;
	ValaCCodeFunction* _tmp225_;
	ValaCCodeFunctionCall* _tmp226_;
	ValaCCodeFunction* _tmp227_;
	ValaCCodeFunction* _tmp228_;
	const gchar* _tmp229_;
	ValaCCodeIdentifier* _tmp230_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (variant_expr != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	temp_name = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp4_ + 1);
	_tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
	subiter_name = _tmp5_;
	_tmp6_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp7_ + 1);
	_tmp8_ = g_strdup_printf ("_tmp%d_", _tmp7_);
	key_name = _tmp8_;
	_tmp9_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp10_ = _tmp9_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp10_ + 1);
	_tmp11_ = g_strdup_printf ("_tmp%d_", _tmp10_);
	value_name = _tmp11_;
	_tmp12_ = vala_data_type_get_type_arguments ((ValaDataType*) type);
	_tmp13_ = _vala_iterable_ref0 (_tmp12_);
	type_args = _tmp13_;
	_tmp14_ = type_args;
	_tmp15_ = vala_collection_get_size ((ValaCollection*) _tmp14_);
	_tmp16_ = _tmp15_;
	if (_tmp16_ != 2) {
		ValaSourceReference* _tmp17_;
		ValaSourceReference* _tmp18_;
		ValaTypeSymbol* _tmp19_;
		ValaTypeSymbol* _tmp20_;
		gchar* _tmp21_;
		gchar* _tmp22_;
		ValaCCodeInvalidExpression* _tmp23_;
		_tmp17_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_data_type_get_type_symbol ((ValaDataType*) type);
		_tmp20_ = _tmp19_;
		_tmp21_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp20_);
		_tmp22_ = _tmp21_;
		vala_report_error (_tmp18_, "Missing type-arguments for GVariant deserialization of `%s'", _tmp22_);
		_g_free0 (_tmp22_);
		_tmp23_ = vala_ccode_invalid_expression_new ();
		result = (ValaCCodeExpression*) _tmp23_;
		_vala_iterable_unref0 (type_args);
		_g_free0 (value_name);
		_g_free0 (key_name);
		_g_free0 (subiter_name);
		_g_free0 (temp_name);
		return result;
	}
	_tmp24_ = type_args;
	_tmp25_ = vala_list_get (_tmp24_, 0);
	key_type = (ValaDataType*) _tmp25_;
	_tmp26_ = type_args;
	_tmp27_ = vala_list_get (_tmp26_, 1);
	value_type = (ValaDataType*) _tmp27_;
	_tmp28_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp29_ = _tmp28_;
	_tmp30_ = temp_name;
	_tmp31_ = vala_ccode_variable_declarator_new (_tmp30_, NULL, NULL);
	_tmp32_ = _tmp31_;
	vala_ccode_function_add_declaration (_tmp29_, "GHashTable*", (ValaCCodeDeclarator*) _tmp32_, 0);
	_vala_ccode_node_unref0 (_tmp32_);
	_tmp33_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp34_ = _tmp33_;
	_tmp35_ = subiter_name;
	_tmp36_ = vala_ccode_variable_declarator_new (_tmp35_, NULL, NULL);
	_tmp37_ = _tmp36_;
	vala_ccode_function_add_declaration (_tmp34_, "GVariantIter", (ValaCCodeDeclarator*) _tmp37_, 0);
	_vala_ccode_node_unref0 (_tmp37_);
	_tmp38_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp39_ = _tmp38_;
	_tmp40_ = key_name;
	_tmp41_ = vala_ccode_variable_declarator_new (_tmp40_, NULL, NULL);
	_tmp42_ = _tmp41_;
	vala_ccode_function_add_declaration (_tmp39_, "GVariant*", (ValaCCodeDeclarator*) _tmp42_, 0);
	_vala_ccode_node_unref0 (_tmp42_);
	_tmp43_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp44_ = _tmp43_;
	_tmp45_ = value_name;
	_tmp46_ = vala_ccode_variable_declarator_new (_tmp45_, NULL, NULL);
	_tmp47_ = _tmp46_;
	vala_ccode_function_add_declaration (_tmp44_, "GVariant*", (ValaCCodeDeclarator*) _tmp47_, 0);
	_vala_ccode_node_unref0 (_tmp47_);
	_tmp48_ = vala_ccode_identifier_new ("g_hash_table_new_full");
	_tmp49_ = _tmp48_;
	_tmp50_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp49_);
	_tmp51_ = _tmp50_;
	_vala_ccode_node_unref0 (_tmp49_);
	hash_table_new = _tmp51_;
	_tmp52_ = key_type;
	_tmp53_ = vala_data_type_get_type_symbol (_tmp52_);
	_tmp54_ = _tmp53_;
	_tmp55_ = ((ValaCCodeBaseModule*) self)->string_type;
	_tmp56_ = vala_data_type_get_type_symbol (_tmp55_);
	_tmp57_ = _tmp56_;
	if (vala_typesymbol_is_subtype_of (_tmp54_, _tmp57_)) {
		ValaCCodeFunctionCall* _tmp58_;
		ValaCCodeIdentifier* _tmp59_;
		ValaCCodeIdentifier* _tmp60_;
		ValaCCodeFunctionCall* _tmp61_;
		ValaCCodeIdentifier* _tmp62_;
		ValaCCodeIdentifier* _tmp63_;
		_tmp58_ = hash_table_new;
		_tmp59_ = vala_ccode_identifier_new ("g_str_hash");
		_tmp60_ = _tmp59_;
		vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp60_);
		_vala_ccode_node_unref0 (_tmp60_);
		_tmp61_ = hash_table_new;
		_tmp62_ = vala_ccode_identifier_new ("g_str_equal");
		_tmp63_ = _tmp62_;
		vala_ccode_function_call_add_argument (_tmp61_, (ValaCCodeExpression*) _tmp63_);
		_vala_ccode_node_unref0 (_tmp63_);
	} else {
		ValaDataType* _tmp64_;
		ValaTypeSymbol* _tmp65_;
		ValaTypeSymbol* _tmp66_;
		ValaClass* _tmp67_;
		_tmp64_ = key_type;
		_tmp65_ = vala_data_type_get_type_symbol (_tmp64_);
		_tmp66_ = _tmp65_;
		_tmp67_ = ((ValaCCodeBaseModule*) self)->gvariant_type;
		if (_tmp66_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			ValaCCodeFunctionCall* _tmp68_;
			ValaCCodeIdentifier* _tmp69_;
			ValaCCodeIdentifier* _tmp70_;
			ValaCCodeFunctionCall* _tmp71_;
			ValaCCodeIdentifier* _tmp72_;
			ValaCCodeIdentifier* _tmp73_;
			_tmp68_ = hash_table_new;
			_tmp69_ = vala_ccode_identifier_new ("g_variant_hash");
			_tmp70_ = _tmp69_;
			vala_ccode_function_call_add_argument (_tmp68_, (ValaCCodeExpression*) _tmp70_);
			_vala_ccode_node_unref0 (_tmp70_);
			_tmp71_ = hash_table_new;
			_tmp72_ = vala_ccode_identifier_new ("g_variant_equal");
			_tmp73_ = _tmp72_;
			vala_ccode_function_call_add_argument (_tmp71_, (ValaCCodeExpression*) _tmp73_);
			_vala_ccode_node_unref0 (_tmp73_);
		} else {
			ValaCCodeFunctionCall* _tmp74_;
			ValaCCodeIdentifier* _tmp75_;
			ValaCCodeIdentifier* _tmp76_;
			ValaCCodeFunctionCall* _tmp77_;
			ValaCCodeIdentifier* _tmp78_;
			ValaCCodeIdentifier* _tmp79_;
			_tmp74_ = hash_table_new;
			_tmp75_ = vala_ccode_identifier_new ("g_direct_hash");
			_tmp76_ = _tmp75_;
			vala_ccode_function_call_add_argument (_tmp74_, (ValaCCodeExpression*) _tmp76_);
			_vala_ccode_node_unref0 (_tmp76_);
			_tmp77_ = hash_table_new;
			_tmp78_ = vala_ccode_identifier_new ("g_direct_equal");
			_tmp79_ = _tmp78_;
			vala_ccode_function_call_add_argument (_tmp77_, (ValaCCodeExpression*) _tmp79_);
			_vala_ccode_node_unref0 (_tmp79_);
		}
	}
	_tmp80_ = key_type;
	_tmp81_ = vala_data_type_get_type_symbol (_tmp80_);
	_tmp82_ = _tmp81_;
	_tmp83_ = ((ValaCCodeBaseModule*) self)->string_type;
	_tmp84_ = vala_data_type_get_type_symbol (_tmp83_);
	_tmp85_ = _tmp84_;
	if (vala_typesymbol_is_subtype_of (_tmp82_, _tmp85_)) {
		ValaCCodeFunctionCall* _tmp86_;
		ValaCCodeIdentifier* _tmp87_;
		ValaCCodeIdentifier* _tmp88_;
		_tmp86_ = hash_table_new;
		_tmp87_ = vala_ccode_identifier_new ("g_free");
		_tmp88_ = _tmp87_;
		vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp88_);
		_vala_ccode_node_unref0 (_tmp88_);
	} else {
		ValaDataType* _tmp89_;
		ValaTypeSymbol* _tmp90_;
		ValaTypeSymbol* _tmp91_;
		ValaClass* _tmp92_;
		_tmp89_ = key_type;
		_tmp90_ = vala_data_type_get_type_symbol (_tmp89_);
		_tmp91_ = _tmp90_;
		_tmp92_ = ((ValaCCodeBaseModule*) self)->gvariant_type;
		if (_tmp91_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			ValaCCodeFunctionCall* _tmp93_;
			ValaCCodeIdentifier* _tmp94_;
			ValaCCodeIdentifier* _tmp95_;
			ValaCCodeCastExpression* _tmp96_;
			ValaCCodeCastExpression* _tmp97_;
			_tmp93_ = hash_table_new;
			_tmp94_ = vala_ccode_identifier_new ("g_variant_unref");
			_tmp95_ = _tmp94_;
			_tmp96_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp95_, "GDestroyNotify");
			_tmp97_ = _tmp96_;
			vala_ccode_function_call_add_argument (_tmp93_, (ValaCCodeExpression*) _tmp97_);
			_vala_ccode_node_unref0 (_tmp97_);
			_vala_ccode_node_unref0 (_tmp95_);
		} else {
			ValaDataType* _tmp98_;
			ValaTypeSymbol* _tmp99_;
			ValaTypeSymbol* _tmp100_;
			gchar* _tmp101_;
			gchar* _tmp102_;
			gboolean _tmp103_;
			_tmp98_ = key_type;
			_tmp99_ = vala_data_type_get_type_symbol (_tmp98_);
			_tmp100_ = _tmp99_;
			_tmp101_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp100_);
			_tmp102_ = _tmp101_;
			_tmp103_ = g_strcmp0 (_tmp102_, "GLib.HashTable") == 0;
			_g_free0 (_tmp102_);
			if (_tmp103_) {
				ValaCCodeFunctionCall* _tmp104_;
				ValaCCodeIdentifier* _tmp105_;
				ValaCCodeIdentifier* _tmp106_;
				ValaCCodeCastExpression* _tmp107_;
				ValaCCodeCastExpression* _tmp108_;
				_tmp104_ = hash_table_new;
				_tmp105_ = vala_ccode_identifier_new ("g_hash_table_unref");
				_tmp106_ = _tmp105_;
				_tmp107_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp106_, "GDestroyNotify");
				_tmp108_ = _tmp107_;
				vala_ccode_function_call_add_argument (_tmp104_, (ValaCCodeExpression*) _tmp108_);
				_vala_ccode_node_unref0 (_tmp108_);
				_vala_ccode_node_unref0 (_tmp106_);
			} else {
				ValaCCodeFunctionCall* _tmp109_;
				ValaCCodeConstant* _tmp110_;
				ValaCCodeConstant* _tmp111_;
				_tmp109_ = hash_table_new;
				_tmp110_ = vala_ccode_constant_new ("NULL");
				_tmp111_ = _tmp110_;
				vala_ccode_function_call_add_argument (_tmp109_, (ValaCCodeExpression*) _tmp111_);
				_vala_ccode_node_unref0 (_tmp111_);
			}
		}
	}
	_tmp112_ = value_type;
	_tmp113_ = vala_data_type_get_type_symbol (_tmp112_);
	_tmp114_ = _tmp113_;
	_tmp115_ = ((ValaCCodeBaseModule*) self)->string_type;
	_tmp116_ = vala_data_type_get_type_symbol (_tmp115_);
	_tmp117_ = _tmp116_;
	if (vala_typesymbol_is_subtype_of (_tmp114_, _tmp117_)) {
		ValaCCodeFunctionCall* _tmp118_;
		ValaCCodeIdentifier* _tmp119_;
		ValaCCodeIdentifier* _tmp120_;
		_tmp118_ = hash_table_new;
		_tmp119_ = vala_ccode_identifier_new ("g_free");
		_tmp120_ = _tmp119_;
		vala_ccode_function_call_add_argument (_tmp118_, (ValaCCodeExpression*) _tmp120_);
		_vala_ccode_node_unref0 (_tmp120_);
	} else {
		ValaDataType* _tmp121_;
		ValaTypeSymbol* _tmp122_;
		ValaTypeSymbol* _tmp123_;
		ValaClass* _tmp124_;
		_tmp121_ = value_type;
		_tmp122_ = vala_data_type_get_type_symbol (_tmp121_);
		_tmp123_ = _tmp122_;
		_tmp124_ = ((ValaCCodeBaseModule*) self)->gvariant_type;
		if (_tmp123_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp124_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
			ValaCCodeFunctionCall* _tmp125_;
			ValaCCodeIdentifier* _tmp126_;
			ValaCCodeIdentifier* _tmp127_;
			ValaCCodeCastExpression* _tmp128_;
			ValaCCodeCastExpression* _tmp129_;
			_tmp125_ = hash_table_new;
			_tmp126_ = vala_ccode_identifier_new ("g_variant_unref");
			_tmp127_ = _tmp126_;
			_tmp128_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp127_, "GDestroyNotify");
			_tmp129_ = _tmp128_;
			vala_ccode_function_call_add_argument (_tmp125_, (ValaCCodeExpression*) _tmp129_);
			_vala_ccode_node_unref0 (_tmp129_);
			_vala_ccode_node_unref0 (_tmp127_);
		} else {
			ValaDataType* _tmp130_;
			ValaTypeSymbol* _tmp131_;
			ValaTypeSymbol* _tmp132_;
			gchar* _tmp133_;
			gchar* _tmp134_;
			gboolean _tmp135_;
			_tmp130_ = value_type;
			_tmp131_ = vala_data_type_get_type_symbol (_tmp130_);
			_tmp132_ = _tmp131_;
			_tmp133_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp132_);
			_tmp134_ = _tmp133_;
			_tmp135_ = g_strcmp0 (_tmp134_, "GLib.HashTable") == 0;
			_g_free0 (_tmp134_);
			if (_tmp135_) {
				ValaCCodeFunctionCall* _tmp136_;
				ValaCCodeIdentifier* _tmp137_;
				ValaCCodeIdentifier* _tmp138_;
				ValaCCodeCastExpression* _tmp139_;
				ValaCCodeCastExpression* _tmp140_;
				_tmp136_ = hash_table_new;
				_tmp137_ = vala_ccode_identifier_new ("g_hash_table_unref");
				_tmp138_ = _tmp137_;
				_tmp139_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp138_, "GDestroyNotify");
				_tmp140_ = _tmp139_;
				vala_ccode_function_call_add_argument (_tmp136_, (ValaCCodeExpression*) _tmp140_);
				_vala_ccode_node_unref0 (_tmp140_);
				_vala_ccode_node_unref0 (_tmp138_);
			} else {
				ValaCCodeFunctionCall* _tmp141_;
				ValaCCodeConstant* _tmp142_;
				ValaCCodeConstant* _tmp143_;
				_tmp141_ = hash_table_new;
				_tmp142_ = vala_ccode_constant_new ("NULL");
				_tmp143_ = _tmp142_;
				vala_ccode_function_call_add_argument (_tmp141_, (ValaCCodeExpression*) _tmp143_);
				_vala_ccode_node_unref0 (_tmp143_);
			}
		}
	}
	_tmp144_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp145_ = _tmp144_;
	_tmp146_ = temp_name;
	_tmp147_ = vala_ccode_identifier_new (_tmp146_);
	_tmp148_ = _tmp147_;
	_tmp149_ = hash_table_new;
	vala_ccode_function_add_assignment (_tmp145_, (ValaCCodeExpression*) _tmp148_, (ValaCCodeExpression*) _tmp149_);
	_vala_ccode_node_unref0 (_tmp148_);
	_tmp150_ = vala_ccode_identifier_new ("g_variant_iter_init");
	_tmp151_ = _tmp150_;
	_tmp152_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp151_);
	_tmp153_ = _tmp152_;
	_vala_ccode_node_unref0 (_tmp151_);
	iter_call = _tmp153_;
	_tmp154_ = iter_call;
	_tmp155_ = subiter_name;
	_tmp156_ = vala_ccode_identifier_new (_tmp155_);
	_tmp157_ = _tmp156_;
	_tmp158_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp157_);
	_tmp159_ = _tmp158_;
	vala_ccode_function_call_add_argument (_tmp154_, (ValaCCodeExpression*) _tmp159_);
	_vala_ccode_node_unref0 (_tmp159_);
	_vala_ccode_node_unref0 (_tmp157_);
	_tmp160_ = iter_call;
	vala_ccode_function_call_add_argument (_tmp160_, variant_expr);
	_tmp161_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp162_ = _tmp161_;
	_tmp163_ = iter_call;
	vala_ccode_function_add_expression (_tmp162_, (ValaCCodeExpression*) _tmp163_);
	_tmp164_ = vala_ccode_identifier_new ("g_variant_iter_loop");
	_tmp165_ = _tmp164_;
	_tmp166_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp165_);
	_vala_ccode_node_unref0 (iter_call);
	iter_call = _tmp166_;
	_vala_ccode_node_unref0 (_tmp165_);
	_tmp167_ = iter_call;
	_tmp168_ = subiter_name;
	_tmp169_ = vala_ccode_identifier_new (_tmp168_);
	_tmp170_ = _tmp169_;
	_tmp171_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp170_);
	_tmp172_ = _tmp171_;
	vala_ccode_function_call_add_argument (_tmp167_, (ValaCCodeExpression*) _tmp172_);
	_vala_ccode_node_unref0 (_tmp172_);
	_vala_ccode_node_unref0 (_tmp170_);
	_tmp173_ = iter_call;
	_tmp174_ = vala_ccode_constant_new ("\"{?*}\"");
	_tmp175_ = _tmp174_;
	vala_ccode_function_call_add_argument (_tmp173_, (ValaCCodeExpression*) _tmp175_);
	_vala_ccode_node_unref0 (_tmp175_);
	_tmp176_ = iter_call;
	_tmp177_ = key_name;
	_tmp178_ = vala_ccode_identifier_new (_tmp177_);
	_tmp179_ = _tmp178_;
	_tmp180_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp179_);
	_tmp181_ = _tmp180_;
	vala_ccode_function_call_add_argument (_tmp176_, (ValaCCodeExpression*) _tmp181_);
	_vala_ccode_node_unref0 (_tmp181_);
	_vala_ccode_node_unref0 (_tmp179_);
	_tmp182_ = iter_call;
	_tmp183_ = value_name;
	_tmp184_ = vala_ccode_identifier_new (_tmp183_);
	_tmp185_ = _tmp184_;
	_tmp186_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp185_);
	_tmp187_ = _tmp186_;
	vala_ccode_function_call_add_argument (_tmp182_, (ValaCCodeExpression*) _tmp187_);
	_vala_ccode_node_unref0 (_tmp187_);
	_vala_ccode_node_unref0 (_tmp185_);
	_tmp188_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp189_ = _tmp188_;
	_tmp190_ = iter_call;
	vala_ccode_function_open_while (_tmp189_, (ValaCCodeExpression*) _tmp190_);
	_tmp191_ = key_type;
	_tmp192_ = key_name;
	_tmp193_ = vala_ccode_identifier_new (_tmp192_);
	_tmp194_ = _tmp193_;
	_tmp195_ = vala_ccode_base_module_deserialize_expression ((ValaCCodeBaseModule*) self, _tmp191_, (ValaCCodeExpression*) _tmp194_, NULL, NULL, NULL);
	_tmp196_ = _tmp195_;
	_vala_ccode_node_unref0 (_tmp194_);
	key_expr = _tmp196_;
	_tmp197_ = value_type;
	_tmp198_ = value_name;
	_tmp199_ = vala_ccode_identifier_new (_tmp198_);
	_tmp200_ = _tmp199_;
	_tmp201_ = vala_ccode_base_module_deserialize_expression ((ValaCCodeBaseModule*) self, _tmp197_, (ValaCCodeExpression*) _tmp200_, NULL, NULL, NULL);
	_tmp202_ = _tmp201_;
	_vala_ccode_node_unref0 (_tmp200_);
	value_expr = _tmp202_;
	_tmp204_ = key_expr;
	if (_tmp204_ == NULL) {
		_tmp203_ = TRUE;
	} else {
		ValaCCodeExpression* _tmp205_;
		_tmp205_ = value_expr;
		_tmp203_ = _tmp205_ == NULL;
	}
	if (_tmp203_) {
		result = NULL;
		_vala_ccode_node_unref0 (value_expr);
		_vala_ccode_node_unref0 (key_expr);
		_vala_ccode_node_unref0 (iter_call);
		_vala_ccode_node_unref0 (hash_table_new);
		_vala_code_node_unref0 (value_type);
		_vala_code_node_unref0 (key_type);
		_vala_iterable_unref0 (type_args);
		_g_free0 (value_name);
		_g_free0 (key_name);
		_g_free0 (subiter_name);
		_g_free0 (temp_name);
		return result;
	}
	_tmp206_ = vala_ccode_identifier_new ("g_hash_table_insert");
	_tmp207_ = _tmp206_;
	_tmp208_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp207_);
	_tmp209_ = _tmp208_;
	_vala_ccode_node_unref0 (_tmp207_);
	hash_table_insert = _tmp209_;
	_tmp210_ = hash_table_insert;
	_tmp211_ = temp_name;
	_tmp212_ = vala_ccode_identifier_new (_tmp211_);
	_tmp213_ = _tmp212_;
	vala_ccode_function_call_add_argument (_tmp210_, (ValaCCodeExpression*) _tmp213_);
	_vala_ccode_node_unref0 (_tmp213_);
	_tmp214_ = hash_table_insert;
	_tmp215_ = key_expr;
	_tmp216_ = key_type;
	_tmp217_ = vala_ccode_base_module_convert_to_generic_pointer ((ValaCCodeBaseModule*) self, _tmp215_, _tmp216_);
	_tmp218_ = _tmp217_;
	vala_ccode_function_call_add_argument (_tmp214_, _tmp218_);
	_vala_ccode_node_unref0 (_tmp218_);
	_tmp219_ = hash_table_insert;
	_tmp220_ = value_expr;
	_tmp221_ = value_type;
	_tmp222_ = vala_ccode_base_module_convert_to_generic_pointer ((ValaCCodeBaseModule*) self, _tmp220_, _tmp221_);
	_tmp223_ = _tmp222_;
	vala_ccode_function_call_add_argument (_tmp219_, _tmp223_);
	_vala_ccode_node_unref0 (_tmp223_);
	_tmp224_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp225_ = _tmp224_;
	_tmp226_ = hash_table_insert;
	vala_ccode_function_add_expression (_tmp225_, (ValaCCodeExpression*) _tmp226_);
	_tmp227_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp228_ = _tmp227_;
	vala_ccode_function_close (_tmp228_);
	_tmp229_ = temp_name;
	_tmp230_ = vala_ccode_identifier_new (_tmp229_);
	result = (ValaCCodeExpression*) _tmp230_;
	_vala_ccode_node_unref0 (hash_table_insert);
	_vala_ccode_node_unref0 (value_expr);
	_vala_ccode_node_unref0 (key_expr);
	_vala_ccode_node_unref0 (iter_call);
	_vala_ccode_node_unref0 (hash_table_new);
	_vala_code_node_unref0 (value_type);
	_vala_code_node_unref0 (key_type);
	_vala_iterable_unref0 (type_args);
	_g_free0 (value_name);
	_g_free0 (key_name);
	_g_free0 (subiter_name);
	_g_free0 (temp_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_real_deserialize_expression (ValaCCodeBaseModule* base,
                                                  ValaDataType* type,
                                                  ValaCCodeExpression* variant_expr,
                                                  ValaCCodeExpression* expr,
                                                  ValaCCodeExpression* error_expr,
                                                  gboolean* may_fail)
{
	ValaGVariantModule * self;
	gboolean _vala_may_fail = FALSE;
	ValaGVariantModuleBasicTypeInfo basic_type = {0};
	ValaCCodeExpression* _result_ = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaCCodeExpression* _tmp69_;
	ValaCCodeExpression* result;
	self = (ValaGVariantModule*) base;
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (variant_expr != NULL, NULL);
	_result_ = NULL;
	_vala_may_fail = FALSE;
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	if (vala_gvariant_module_is_string_marshalled_enum (_tmp1_)) {
		ValaGVariantModuleBasicTypeInfo _tmp2_ = {0};
		ValaGVariantModuleBasicTypeInfo _tmp3_;
		ValaCCodeExpression* _tmp4_;
		ValaCCodeExpression* _tmp5_;
		ValaCCodeExpression* _tmp6_;
		vala_gvariant_module_get_basic_type_info (self, "s", &_tmp2_);
		basic_type = _tmp2_;
		_tmp3_ = basic_type;
		_tmp4_ = vala_gvariant_module_deserialize_basic (self, &_tmp3_, variant_expr, TRUE);
		_vala_ccode_node_unref0 (_result_);
		_result_ = _tmp4_;
		_tmp5_ = _result_;
		_tmp6_ = vala_gvariant_module_generate_enum_value_from_string (self, G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ENUM_VALUE_TYPE) ? ((ValaEnumValueType*) type) : NULL, _tmp5_, error_expr);
		_vala_ccode_node_unref0 (_result_);
		_result_ = _tmp6_;
		_vala_may_fail = TRUE;
	} else {
		gchar* _tmp7_;
		gchar* _tmp8_;
		ValaGVariantModuleBasicTypeInfo _tmp9_ = {0};
		gboolean _tmp10_;
		gboolean _tmp11_;
		_tmp7_ = vala_data_type_get_type_signature (type, NULL);
		_tmp8_ = _tmp7_;
		_tmp10_ = vala_gvariant_module_get_basic_type_info (self, _tmp8_, &_tmp9_);
		basic_type = _tmp9_;
		_tmp11_ = _tmp10_;
		_g_free0 (_tmp8_);
		if (_tmp11_) {
			ValaGVariantModuleBasicTypeInfo _tmp12_;
			ValaCCodeExpression* _tmp13_;
			_tmp12_ = basic_type;
			_tmp13_ = vala_gvariant_module_deserialize_basic (self, &_tmp12_, variant_expr, FALSE);
			_vala_ccode_node_unref0 (_result_);
			_result_ = _tmp13_;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
				ValaCCodeExpression* _tmp14_;
				_tmp14_ = vala_gvariant_module_deserialize_array (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType), variant_expr, expr);
				_vala_ccode_node_unref0 (_result_);
				_result_ = _tmp14_;
			} else {
				ValaTypeSymbol* _tmp15_;
				ValaTypeSymbol* _tmp16_;
				_tmp15_ = vala_data_type_get_type_symbol (type);
				_tmp16_ = _tmp15_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_STRUCT)) {
					ValaStruct* st = NULL;
					ValaTypeSymbol* _tmp17_;
					ValaTypeSymbol* _tmp18_;
					ValaStruct* _tmp19_;
					ValaCCodeExpression* _tmp20_;
					gboolean _tmp21_ = FALSE;
					ValaCCodeExpression* _tmp22_;
					_tmp17_ = vala_data_type_get_type_symbol (type);
					_tmp18_ = _tmp17_;
					st = G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_STRUCT, ValaStruct);
					_tmp19_ = st;
					_tmp20_ = vala_gvariant_module_deserialize_struct (self, _tmp19_, variant_expr);
					_vala_ccode_node_unref0 (_result_);
					_result_ = _tmp20_;
					_tmp22_ = _result_;
					if (_tmp22_ != NULL) {
						gboolean _tmp23_;
						gboolean _tmp24_;
						_tmp23_ = vala_data_type_get_nullable (type);
						_tmp24_ = _tmp23_;
						_tmp21_ = _tmp24_;
					} else {
						_tmp21_ = FALSE;
					}
					if (_tmp21_) {
						ValaCCodeFunctionCall* csizeof = NULL;
						ValaCCodeIdentifier* _tmp25_;
						ValaCCodeIdentifier* _tmp26_;
						ValaCCodeFunctionCall* _tmp27_;
						ValaCCodeFunctionCall* _tmp28_;
						ValaCCodeFunctionCall* _tmp29_;
						ValaStruct* _tmp30_;
						gchar* _tmp31_;
						gchar* _tmp32_;
						ValaCCodeIdentifier* _tmp33_;
						ValaCCodeIdentifier* _tmp34_;
						ValaCCodeFunctionCall* cdup = NULL;
						ValaCodeContext* _tmp35_;
						ValaCodeContext* _tmp36_;
						ValaCCodeFunctionCall* _tmp43_;
						ValaCCodeExpression* _tmp44_;
						ValaCCodeUnaryExpression* _tmp45_;
						ValaCCodeUnaryExpression* _tmp46_;
						ValaCCodeFunctionCall* _tmp47_;
						ValaCCodeFunctionCall* _tmp48_;
						ValaCCodeFunctionCall* _tmp49_;
						ValaCCodeExpression* _tmp50_;
						_tmp25_ = vala_ccode_identifier_new ("sizeof");
						_tmp26_ = _tmp25_;
						_tmp27_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp26_);
						_tmp28_ = _tmp27_;
						_vala_ccode_node_unref0 (_tmp26_);
						csizeof = _tmp28_;
						_tmp29_ = csizeof;
						_tmp30_ = st;
						_tmp31_ = vala_get_ccode_name ((ValaCodeNode*) _tmp30_);
						_tmp32_ = _tmp31_;
						_tmp33_ = vala_ccode_identifier_new (_tmp32_);
						_tmp34_ = _tmp33_;
						vala_ccode_function_call_add_argument (_tmp29_, (ValaCCodeExpression*) _tmp34_);
						_vala_ccode_node_unref0 (_tmp34_);
						_g_free0 (_tmp32_);
						_tmp35_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
						_tmp36_ = _tmp35_;
						if (vala_code_context_require_glib_version (_tmp36_, 2, 68)) {
							ValaCCodeIdentifier* _tmp37_;
							ValaCCodeIdentifier* _tmp38_;
							ValaCCodeFunctionCall* _tmp39_;
							_tmp37_ = vala_ccode_identifier_new ("g_memdup2");
							_tmp38_ = _tmp37_;
							_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
							_vala_ccode_node_unref0 (cdup);
							cdup = _tmp39_;
							_vala_ccode_node_unref0 (_tmp38_);
						} else {
							ValaCCodeIdentifier* _tmp40_;
							ValaCCodeIdentifier* _tmp41_;
							ValaCCodeFunctionCall* _tmp42_;
							((ValaCCodeBaseModule*) self)->requires_memdup2 = TRUE;
							_tmp40_ = vala_ccode_identifier_new ("_vala_memdup2");
							_tmp41_ = _tmp40_;
							_tmp42_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp41_);
							_vala_ccode_node_unref0 (cdup);
							cdup = _tmp42_;
							_vala_ccode_node_unref0 (_tmp41_);
						}
						_tmp43_ = cdup;
						_tmp44_ = _result_;
						_tmp45_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp44_);
						_tmp46_ = _tmp45_;
						vala_ccode_function_call_add_argument (_tmp43_, (ValaCCodeExpression*) _tmp46_);
						_vala_ccode_node_unref0 (_tmp46_);
						_tmp47_ = cdup;
						_tmp48_ = csizeof;
						vala_ccode_function_call_add_argument (_tmp47_, (ValaCCodeExpression*) _tmp48_);
						_tmp49_ = cdup;
						_tmp50_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp49_);
						_vala_ccode_node_unref0 (_result_);
						_result_ = _tmp50_;
						_vala_ccode_node_unref0 (cdup);
						_vala_ccode_node_unref0 (csizeof);
					}
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_OBJECT_TYPE)) {
						ValaTypeSymbol* _tmp51_;
						ValaTypeSymbol* _tmp52_;
						gchar* _tmp53_;
						gchar* _tmp54_;
						gboolean _tmp55_;
						_tmp51_ = vala_data_type_get_type_symbol (type);
						_tmp52_ = _tmp51_;
						_tmp53_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp52_);
						_tmp54_ = _tmp53_;
						_tmp55_ = g_strcmp0 (_tmp54_, "GLib.Variant") == 0;
						_g_free0 (_tmp54_);
						if (_tmp55_) {
							ValaCCodeFunctionCall* variant_get = NULL;
							ValaCCodeIdentifier* _tmp56_;
							ValaCCodeIdentifier* _tmp57_;
							ValaCCodeFunctionCall* _tmp58_;
							ValaCCodeFunctionCall* _tmp59_;
							ValaCCodeFunctionCall* _tmp60_;
							ValaCCodeFunctionCall* _tmp61_;
							ValaCCodeExpression* _tmp62_;
							_tmp56_ = vala_ccode_identifier_new ("g_variant_get_variant");
							_tmp57_ = _tmp56_;
							_tmp58_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp57_);
							_tmp59_ = _tmp58_;
							_vala_ccode_node_unref0 (_tmp57_);
							variant_get = _tmp59_;
							_tmp60_ = variant_get;
							vala_ccode_function_call_add_argument (_tmp60_, variant_expr);
							_tmp61_ = variant_get;
							_tmp62_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp61_);
							_vala_ccode_node_unref0 (_result_);
							_result_ = _tmp62_;
							_vala_ccode_node_unref0 (variant_get);
						} else {
							ValaTypeSymbol* _tmp63_;
							ValaTypeSymbol* _tmp64_;
							gchar* _tmp65_;
							gchar* _tmp66_;
							gboolean _tmp67_;
							_tmp63_ = vala_data_type_get_type_symbol (type);
							_tmp64_ = _tmp63_;
							_tmp65_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp64_);
							_tmp66_ = _tmp65_;
							_tmp67_ = g_strcmp0 (_tmp66_, "GLib.HashTable") == 0;
							_g_free0 (_tmp66_);
							if (_tmp67_) {
								ValaCCodeExpression* _tmp68_;
								_tmp68_ = vala_gvariant_module_deserialize_hash_table (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_OBJECT_TYPE, ValaObjectType), variant_expr);
								_vala_ccode_node_unref0 (_result_);
								_result_ = _tmp68_;
							}
						}
					}
				}
			}
		}
	}
	_tmp69_ = _result_;
	if (_tmp69_ == NULL) {
		ValaSourceReference* _tmp70_;
		ValaSourceReference* _tmp71_;
		gchar* _tmp72_;
		gchar* _tmp73_;
		ValaCCodeInvalidExpression* _tmp74_;
		_tmp70_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
		_tmp71_ = _tmp70_;
		_tmp72_ = vala_code_node_to_string ((ValaCodeNode*) type);
		_tmp73_ = _tmp72_;
		vala_report_error (_tmp71_, "GVariant deserialization of type `%s' is not supported", _tmp73_);
		_g_free0 (_tmp73_);
		_tmp74_ = vala_ccode_invalid_expression_new ();
		result = (ValaCCodeExpression*) _tmp74_;
		_vala_ccode_node_unref0 (_result_);
		if (may_fail) {
			*may_fail = _vala_may_fail;
		}
		return result;
	}
	result = _result_;
	if (may_fail) {
		*may_fail = _vala_may_fail;
	}
	return result;
}

void
vala_gvariant_module_read_expression (ValaGVariantModule* self,
                                      ValaDataType* type,
                                      ValaCCodeExpression* iter_expr,
                                      ValaCCodeExpression* target_expr,
                                      ValaSymbol* sym,
                                      ValaCCodeExpression* error_expr,
                                      gboolean* may_fail)
{
	gboolean _vala_may_fail = FALSE;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeFunctionCall* _tmp3_;
	ValaCCodeFunctionCall* _tmp4_;
	ValaCCodeUnaryExpression* _tmp5_;
	ValaCCodeUnaryExpression* _tmp6_;
	gboolean _tmp7_ = FALSE;
	gchar* temp_name = NULL;
	gint _tmp13_;
	gint _tmp14_;
	gchar* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	const gchar* _tmp18_;
	ValaCCodeVariableDeclarator* _tmp19_;
	ValaCCodeVariableDeclarator* _tmp20_;
	ValaCCodeIdentifier* variant_expr = NULL;
	const gchar* _tmp21_;
	ValaCCodeIdentifier* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	ValaCCodeFunction* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeFunctionCall* _tmp26_;
	ValaCCodeExpression* _result_ = NULL;
	ValaCCodeIdentifier* _tmp27_;
	gboolean _tmp28_ = FALSE;
	ValaCCodeExpression* _tmp29_;
	ValaCCodeExpression* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeExpression* _tmp33_;
	ValaCCodeFunctionCall* unref = NULL;
	ValaCCodeIdentifier* _tmp34_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeFunctionCall* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	ValaCCodeIdentifier* _tmp39_;
	ValaCCodeFunction* _tmp40_;
	ValaCCodeFunction* _tmp41_;
	ValaCCodeFunctionCall* _tmp42_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type != NULL);
	g_return_if_fail (iter_expr != NULL);
	g_return_if_fail (target_expr != NULL);
	_tmp0_ = vala_ccode_identifier_new ("g_variant_iter_next_value");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
	_tmp3_ = _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	iter_call = _tmp3_;
	_tmp4_ = iter_call;
	_tmp5_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, iter_expr);
	_tmp6_ = _tmp5_;
	vala_ccode_function_call_add_argument (_tmp4_, (ValaCCodeExpression*) _tmp6_);
	_vala_ccode_node_unref0 (_tmp6_);
	if (sym != NULL) {
		gchar* _tmp8_;
		gchar* _tmp9_;
		_tmp8_ = vala_gvariant_module_get_dbus_signature (sym);
		_tmp9_ = _tmp8_;
		_tmp7_ = _tmp9_ != NULL;
		_g_free0 (_tmp9_);
	} else {
		_tmp7_ = FALSE;
	}
	if (_tmp7_) {
		ValaCCodeFunction* _tmp10_;
		ValaCCodeFunction* _tmp11_;
		ValaCCodeFunctionCall* _tmp12_;
		_tmp10_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp11_ = _tmp10_;
		_tmp12_ = iter_call;
		vala_ccode_function_add_assignment (_tmp11_, target_expr, (ValaCCodeExpression*) _tmp12_);
		_vala_may_fail = FALSE;
		_vala_ccode_node_unref0 (iter_call);
		if (may_fail) {
			*may_fail = _vala_may_fail;
		}
		return;
	}
	_tmp13_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp14_ = _tmp13_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp14_ + 1);
	_tmp15_ = g_strdup_printf ("_tmp%d_", _tmp14_);
	temp_name = _tmp15_;
	_tmp16_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	_tmp18_ = temp_name;
	_tmp19_ = vala_ccode_variable_declarator_new (_tmp18_, NULL, NULL);
	_tmp20_ = _tmp19_;
	vala_ccode_function_add_declaration (_tmp17_, "GVariant*", (ValaCCodeDeclarator*) _tmp20_, 0);
	_vala_ccode_node_unref0 (_tmp20_);
	_tmp21_ = temp_name;
	_tmp22_ = vala_ccode_identifier_new (_tmp21_);
	variant_expr = _tmp22_;
	_tmp23_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp24_ = _tmp23_;
	_tmp25_ = variant_expr;
	_tmp26_ = iter_call;
	vala_ccode_function_add_assignment (_tmp24_, (ValaCCodeExpression*) _tmp25_, (ValaCCodeExpression*) _tmp26_);
	_tmp27_ = variant_expr;
	_tmp29_ = vala_ccode_base_module_deserialize_expression ((ValaCCodeBaseModule*) self, type, (ValaCCodeExpression*) _tmp27_, target_expr, error_expr, &_tmp28_);
	_vala_may_fail = _tmp28_;
	_result_ = _tmp29_;
	_tmp30_ = _result_;
	if (_tmp30_ == NULL) {
		_vala_ccode_node_unref0 (_result_);
		_vala_ccode_node_unref0 (variant_expr);
		_g_free0 (temp_name);
		_vala_ccode_node_unref0 (iter_call);
		if (may_fail) {
			*may_fail = _vala_may_fail;
		}
		return;
	}
	_tmp31_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp32_ = _tmp31_;
	_tmp33_ = _result_;
	vala_ccode_function_add_assignment (_tmp32_, target_expr, _tmp33_);
	_tmp34_ = vala_ccode_identifier_new ("g_variant_unref");
	_tmp35_ = _tmp34_;
	_tmp36_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp35_);
	_tmp37_ = _tmp36_;
	_vala_ccode_node_unref0 (_tmp35_);
	unref = _tmp37_;
	_tmp38_ = unref;
	_tmp39_ = variant_expr;
	vala_ccode_function_call_add_argument (_tmp38_, (ValaCCodeExpression*) _tmp39_);
	_tmp40_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp41_ = _tmp40_;
	_tmp42_ = unref;
	vala_ccode_function_add_expression (_tmp41_, (ValaCCodeExpression*) _tmp42_);
	_vala_ccode_node_unref0 (unref);
	_vala_ccode_node_unref0 (_result_);
	_vala_ccode_node_unref0 (variant_expr);
	_g_free0 (temp_name);
	_vala_ccode_node_unref0 (iter_call);
	if (may_fail) {
		*may_fail = _vala_may_fail;
	}
}

static ValaCCodeExpression*
vala_gvariant_module_generate_enum_value_to_string (ValaGVariantModule* self,
                                                    ValaEnumValueType* type,
                                                    ValaCCodeExpression* expr)
{
	ValaEnum* en = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaEnum* _tmp2_;
	gchar* to_string_name = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeFunctionCall* to_string_call = NULL;
	ValaCCodeIdentifier* _tmp7_;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeFunctionCall* _tmp9_;
	ValaCCodeFunctionCall* _tmp10_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) type);
	_tmp1_ = _tmp0_;
	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_ENUM) ? ((ValaEnum*) _tmp1_) : NULL);
	en = _tmp2_;
	_tmp3_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) en, NULL);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strdup_printf ("%s_to_string", _tmp4_);
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	to_string_name = _tmp6_;
	_tmp7_ = vala_ccode_identifier_new (to_string_name);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
	_tmp10_ = _tmp9_;
	_vala_ccode_node_unref0 (_tmp8_);
	to_string_call = _tmp10_;
	vala_ccode_function_call_add_argument (to_string_call, expr);
	result = (ValaCCodeExpression*) to_string_call;
	_g_free0 (to_string_name);
	_vala_code_node_unref0 (en);
	return result;
}

ValaCCodeFunction*
vala_gvariant_module_generate_enum_to_string_function_declaration (ValaGVariantModule* self,
                                                                   ValaEnum* en)
{
	gchar* to_string_name = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* to_string_func = NULL;
	ValaCCodeFunction* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	ValaCCodeParameter* _tmp7_;
	ValaCCodeParameter* _tmp8_;
	ValaCCodeModifiers _tmp9_;
	ValaCCodeModifiers _tmp10_;
	ValaCCodeFunction* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (en != NULL, NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) en, NULL);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_to_string", _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	to_string_name = _tmp3_;
	_tmp4_ = vala_ccode_function_new (to_string_name, "const char*");
	to_string_func = _tmp4_;
	_tmp5_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp6_ = _tmp5_;
	_tmp7_ = vala_ccode_parameter_new ("value", _tmp6_);
	_tmp8_ = _tmp7_;
	vala_ccode_function_add_parameter (to_string_func, _tmp8_);
	_vala_ccode_node_unref0 (_tmp8_);
	_g_free0 (_tmp6_);
	_tmp9_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) to_string_func);
	_tmp10_ = _tmp9_;
	vala_ccode_node_set_modifiers ((ValaCCodeNode*) to_string_func, _tmp10_ | VALA_CCODE_MODIFIERS_EXTERN);
	((ValaCCodeBaseModule*) self)->requires_vala_extern = TRUE;
	result = to_string_func;
	_g_free0 (to_string_name);
	return result;
}

ValaCCodeFunction*
vala_gvariant_module_generate_enum_to_string_function (ValaGVariantModule* self,
                                                       ValaEnum* en)
{
	gchar* to_string_name = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeFunction* to_string_func = NULL;
	const gchar* _tmp4_;
	ValaCCodeFunction* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	ValaCCodeParameter* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeVariableDeclarator* _tmp14_;
	ValaCCodeVariableDeclarator* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeFunction* _tmp51_;
	ValaCCodeFunction* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeFunction* _tmp54_;
	ValaCCodeIdentifier* _tmp55_;
	ValaCCodeIdentifier* _tmp56_;
	ValaCCodeFunction* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (en != NULL, NULL);
	_tmp0_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) en, NULL);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_strdup_printf ("%s_to_string", _tmp1_);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	to_string_name = _tmp3_;
	_tmp4_ = to_string_name;
	_tmp5_ = vala_ccode_function_new (_tmp4_, "const char*");
	to_string_func = _tmp5_;
	_tmp6_ = to_string_func;
	_tmp7_ = vala_get_ccode_name ((ValaCodeNode*) en);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_ccode_parameter_new ("value", _tmp8_);
	_tmp10_ = _tmp9_;
	vala_ccode_function_add_parameter (_tmp6_, _tmp10_);
	_vala_ccode_node_unref0 (_tmp10_);
	_g_free0 (_tmp8_);
	_tmp11_ = to_string_func;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp11_);
	_tmp12_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_variable_declarator_new ("str", NULL, NULL);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_declaration (_tmp13_, "const char *", (ValaCCodeDeclarator*) _tmp15_, 0);
	_vala_ccode_node_unref0 (_tmp15_);
	_tmp16_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_identifier_new ("value");
	_tmp19_ = _tmp18_;
	vala_ccode_function_open_switch (_tmp17_, (ValaCCodeExpression*) _tmp19_);
	_vala_ccode_node_unref0 (_tmp19_);
	{
		ValaList* _enum_value_list = NULL;
		ValaList* _tmp20_;
		gint _enum_value_size = 0;
		ValaList* _tmp21_;
		gint _tmp22_;
		gint _tmp23_;
		gint _enum_value_index = 0;
		_tmp20_ = vala_enum_get_values (en);
		_enum_value_list = _tmp20_;
		_tmp21_ = _enum_value_list;
		_tmp22_ = vala_collection_get_size ((ValaCollection*) _tmp21_);
		_tmp23_ = _tmp22_;
		_enum_value_size = _tmp23_;
		_enum_value_index = -1;
		while (TRUE) {
			gint _tmp24_;
			gint _tmp25_;
			ValaEnumValue* enum_value = NULL;
			ValaList* _tmp26_;
			gpointer _tmp27_;
			gchar* dbus_value = NULL;
			ValaEnumValue* _tmp28_;
			ValaEnumValue* _tmp29_;
			const gchar* _tmp30_;
			const gchar* _tmp31_;
			gchar* _tmp32_;
			ValaCCodeFunction* _tmp33_;
			ValaCCodeFunction* _tmp34_;
			ValaEnumValue* _tmp35_;
			gchar* _tmp36_;
			gchar* _tmp37_;
			ValaCCodeIdentifier* _tmp38_;
			ValaCCodeIdentifier* _tmp39_;
			ValaCCodeFunction* _tmp40_;
			ValaCCodeFunction* _tmp41_;
			ValaCCodeIdentifier* _tmp42_;
			ValaCCodeIdentifier* _tmp43_;
			const gchar* _tmp44_;
			gchar* _tmp45_;
			gchar* _tmp46_;
			ValaCCodeConstant* _tmp47_;
			ValaCCodeConstant* _tmp48_;
			ValaCCodeFunction* _tmp49_;
			ValaCCodeFunction* _tmp50_;
			_enum_value_index = _enum_value_index + 1;
			_tmp24_ = _enum_value_index;
			_tmp25_ = _enum_value_size;
			if (!(_tmp24_ < _tmp25_)) {
				break;
			}
			_tmp26_ = _enum_value_list;
			_tmp27_ = vala_list_get (_tmp26_, _enum_value_index);
			enum_value = (ValaEnumValue*) _tmp27_;
			_tmp28_ = enum_value;
			_tmp29_ = enum_value;
			_tmp30_ = vala_symbol_get_name ((ValaSymbol*) _tmp29_);
			_tmp31_ = _tmp30_;
			_tmp32_ = vala_gvariant_module_get_dbus_value (self, _tmp28_, _tmp31_);
			dbus_value = _tmp32_;
			_tmp33_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp34_ = _tmp33_;
			_tmp35_ = enum_value;
			_tmp36_ = vala_get_ccode_name ((ValaCodeNode*) _tmp35_);
			_tmp37_ = _tmp36_;
			_tmp38_ = vala_ccode_identifier_new (_tmp37_);
			_tmp39_ = _tmp38_;
			vala_ccode_function_add_case (_tmp34_, (ValaCCodeExpression*) _tmp39_);
			_vala_ccode_node_unref0 (_tmp39_);
			_g_free0 (_tmp37_);
			_tmp40_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp41_ = _tmp40_;
			_tmp42_ = vala_ccode_identifier_new ("str");
			_tmp43_ = _tmp42_;
			_tmp44_ = dbus_value;
			_tmp45_ = g_strdup_printf ("\"%s\"", _tmp44_);
			_tmp46_ = _tmp45_;
			_tmp47_ = vala_ccode_constant_new (_tmp46_);
			_tmp48_ = _tmp47_;
			vala_ccode_function_add_assignment (_tmp41_, (ValaCCodeExpression*) _tmp43_, (ValaCCodeExpression*) _tmp48_);
			_vala_ccode_node_unref0 (_tmp48_);
			_g_free0 (_tmp46_);
			_vala_ccode_node_unref0 (_tmp43_);
			_tmp49_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp50_ = _tmp49_;
			vala_ccode_function_add_break (_tmp50_);
			_g_free0 (dbus_value);
			_vala_code_node_unref0 (enum_value);
		}
	}
	_tmp51_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp52_ = _tmp51_;
	vala_ccode_function_close (_tmp52_);
	_tmp53_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_identifier_new ("str");
	_tmp56_ = _tmp55_;
	vala_ccode_function_add_return (_tmp54_, (ValaCCodeExpression*) _tmp56_);
	_vala_ccode_node_unref0 (_tmp56_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	result = to_string_func;
	_g_free0 (to_string_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_serialize_basic (ValaGVariantModule* self,
                                      ValaGVariantModuleBasicTypeInfo* basic_type,
                                      ValaCCodeExpression* expr)
{
	ValaCCodeFunctionCall* new_call = NULL;
	ValaGVariantModuleBasicTypeInfo _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	ValaCCodeIdentifier* _tmp4_;
	ValaCCodeIdentifier* _tmp5_;
	ValaCCodeFunctionCall* _tmp6_;
	ValaCCodeFunctionCall* _tmp7_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (basic_type != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_tmp0_ = *basic_type;
	_tmp1_ = _tmp0_.type_name;
	_tmp2_ = g_strconcat ("g_variant_new_", _tmp1_, NULL);
	_tmp3_ = _tmp2_;
	_tmp4_ = vala_ccode_identifier_new (_tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp5_);
	_tmp7_ = _tmp6_;
	_vala_ccode_node_unref0 (_tmp5_);
	_g_free0 (_tmp3_);
	new_call = _tmp7_;
	vala_ccode_function_call_add_argument (new_call, expr);
	result = (ValaCCodeExpression*) new_call;
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_serialize_array (ValaGVariantModule* self,
                                      ValaArrayType* array_type,
                                      ValaCCodeExpression* array_expr)
{
	gboolean _tmp0_ = FALSE;
	gint _tmp1_;
	gint _tmp2_;
	gchar* array_iter_name = NULL;
	gint _tmp6_;
	gint _tmp7_;
	gchar* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeFunction* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	const gchar* _tmp13_;
	ValaCCodeVariableDeclarator* _tmp14_;
	ValaCCodeVariableDeclarator* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* _tmp17_;
	const gchar* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeIdentifier* _tmp20_;
	const gchar* _tmp21_;
	ValaCCodeIdentifier* _tmp22_;
	ValaCCodeIdentifier* _tmp23_;
	ValaCCodeExpression* _tmp24_;
	ValaCCodeExpression* _tmp25_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (array_type != NULL, NULL);
	g_return_val_if_fail (array_expr != NULL, NULL);
	_tmp1_ = vala_array_type_get_rank (array_type);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == 1) {
		gchar* _tmp3_;
		gchar* _tmp4_;
		_tmp3_ = vala_data_type_get_type_signature ((ValaDataType*) array_type, NULL);
		_tmp4_ = _tmp3_;
		_tmp0_ = g_strcmp0 (_tmp4_, "ay") == 0;
		_g_free0 (_tmp4_);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaCCodeExpression* _tmp5_;
		_tmp5_ = vala_gvariant_module_serialize_buffer_array (self, array_type, array_expr);
		result = _tmp5_;
		return result;
	}
	_tmp6_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp7_ + 1);
	_tmp8_ = g_strdup_printf ("_tmp%d_", _tmp7_);
	array_iter_name = _tmp8_;
	_tmp9_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) array_type);
	_tmp12_ = _tmp11_;
	_tmp13_ = array_iter_name;
	_tmp14_ = vala_ccode_variable_declarator_new (_tmp13_, NULL, NULL);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_declaration (_tmp10_, _tmp12_, (ValaCCodeDeclarator*) _tmp15_, 0);
	_vala_ccode_node_unref0 (_tmp15_);
	_g_free0 (_tmp12_);
	_tmp16_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	_tmp18_ = array_iter_name;
	_tmp19_ = vala_ccode_identifier_new (_tmp18_);
	_tmp20_ = _tmp19_;
	vala_ccode_function_add_assignment (_tmp17_, (ValaCCodeExpression*) _tmp20_, array_expr);
	_vala_ccode_node_unref0 (_tmp20_);
	_tmp21_ = array_iter_name;
	_tmp22_ = vala_ccode_identifier_new (_tmp21_);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_gvariant_module_serialize_array_dim (self, array_type, 1, array_expr, (ValaCCodeExpression*) _tmp23_);
	_tmp25_ = _tmp24_;
	_vala_ccode_node_unref0 (_tmp23_);
	result = _tmp25_;
	_g_free0 (array_iter_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_serialize_array_dim (ValaGVariantModule* self,
                                          ValaArrayType* array_type,
                                          gint dim,
                                          ValaCCodeExpression* array_expr,
                                          ValaCCodeExpression* array_iter_expr)
{
	gchar* builder_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	gchar* index_name = NULL;
	gint _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	const gchar* _tmp8_;
	ValaCCodeVariableDeclarator* _tmp9_;
	ValaCCodeVariableDeclarator* _tmp10_;
	ValaCCodeFunction* _tmp11_;
	ValaCCodeFunction* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	const gchar* _tmp15_;
	ValaCCodeVariableDeclarator* _tmp16_;
	ValaCCodeVariableDeclarator* _tmp17_;
	ValaCCodeFunctionCall* gvariant_type = NULL;
	ValaCCodeIdentifier* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaCCodeFunctionCall* _tmp21_;
	ValaArrayType* array_type_copy = NULL;
	ValaDataType* _tmp22_;
	ValaArrayType* _tmp23_;
	ValaArrayType* _tmp24_;
	gint _tmp25_;
	gint _tmp26_;
	ValaCCodeFunctionCall* _tmp27_;
	ValaArrayType* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	gchar* _tmp31_;
	gchar* _tmp32_;
	ValaCCodeConstant* _tmp33_;
	ValaCCodeConstant* _tmp34_;
	ValaCCodeFunctionCall* builder_init = NULL;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeIdentifier* _tmp36_;
	ValaCCodeFunctionCall* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	ValaCCodeFunctionCall* _tmp39_;
	const gchar* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeUnaryExpression* _tmp43_;
	ValaCCodeUnaryExpression* _tmp44_;
	ValaCCodeFunctionCall* _tmp45_;
	ValaCCodeFunctionCall* _tmp46_;
	ValaCCodeFunction* _tmp47_;
	ValaCCodeFunction* _tmp48_;
	ValaCCodeFunctionCall* _tmp49_;
	ValaCCodeAssignment* cforinit = NULL;
	const gchar* _tmp50_;
	ValaCCodeIdentifier* _tmp51_;
	ValaCCodeIdentifier* _tmp52_;
	ValaCCodeConstant* _tmp53_;
	ValaCCodeConstant* _tmp54_;
	ValaCCodeAssignment* _tmp55_;
	ValaCCodeAssignment* _tmp56_;
	ValaCCodeBinaryExpression* cforcond = NULL;
	const gchar* _tmp57_;
	ValaCCodeIdentifier* _tmp58_;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeExpression* _tmp60_;
	ValaCCodeExpression* _tmp61_;
	ValaCCodeBinaryExpression* _tmp62_;
	ValaCCodeBinaryExpression* _tmp63_;
	ValaCCodeUnaryExpression* cforiter = NULL;
	const gchar* _tmp64_;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeIdentifier* _tmp66_;
	ValaCCodeUnaryExpression* _tmp67_;
	ValaCCodeUnaryExpression* _tmp68_;
	ValaCCodeFunction* _tmp69_;
	ValaCCodeFunction* _tmp70_;
	ValaCCodeAssignment* _tmp71_;
	ValaCCodeBinaryExpression* _tmp72_;
	ValaCCodeUnaryExpression* _tmp73_;
	ValaCCodeExpression* element_variant = NULL;
	gint _tmp74_;
	gint _tmp75_;
	ValaCCodeFunctionCall* builder_add = NULL;
	ValaCCodeIdentifier* _tmp82_;
	ValaCCodeIdentifier* _tmp83_;
	ValaCCodeFunctionCall* _tmp84_;
	ValaCCodeFunctionCall* _tmp85_;
	ValaCCodeFunctionCall* _tmp86_;
	const gchar* _tmp87_;
	ValaCCodeIdentifier* _tmp88_;
	ValaCCodeIdentifier* _tmp89_;
	ValaCCodeUnaryExpression* _tmp90_;
	ValaCCodeUnaryExpression* _tmp91_;
	ValaCCodeFunctionCall* _tmp92_;
	ValaCCodeExpression* _tmp93_;
	ValaCCodeFunction* _tmp94_;
	ValaCCodeFunction* _tmp95_;
	ValaCCodeFunctionCall* _tmp96_;
	gint _tmp97_;
	gint _tmp98_;
	ValaCCodeFunction* _tmp103_;
	ValaCCodeFunction* _tmp104_;
	ValaCCodeFunctionCall* builder_end = NULL;
	ValaCCodeIdentifier* _tmp105_;
	ValaCCodeIdentifier* _tmp106_;
	ValaCCodeFunctionCall* _tmp107_;
	ValaCCodeFunctionCall* _tmp108_;
	const gchar* _tmp109_;
	ValaCCodeIdentifier* _tmp110_;
	ValaCCodeIdentifier* _tmp111_;
	ValaCCodeUnaryExpression* _tmp112_;
	ValaCCodeUnaryExpression* _tmp113_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (array_type != NULL, NULL);
	g_return_val_if_fail (array_expr != NULL, NULL);
	g_return_val_if_fail (array_iter_expr != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	builder_name = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp4_ + 1);
	_tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
	index_name = _tmp5_;
	_tmp6_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	_tmp8_ = builder_name;
	_tmp9_ = vala_ccode_variable_declarator_new (_tmp8_, NULL, NULL);
	_tmp10_ = _tmp9_;
	vala_ccode_function_add_declaration (_tmp7_, "GVariantBuilder", (ValaCCodeDeclarator*) _tmp10_, 0);
	_vala_ccode_node_unref0 (_tmp10_);
	_tmp11_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_get_ccode_array_length_type ((ValaCodeNode*) array_type);
	_tmp14_ = _tmp13_;
	_tmp15_ = index_name;
	_tmp16_ = vala_ccode_variable_declarator_new (_tmp15_, NULL, NULL);
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_declaration (_tmp12_, _tmp14_, (ValaCCodeDeclarator*) _tmp17_, 0);
	_vala_ccode_node_unref0 (_tmp17_);
	_g_free0 (_tmp14_);
	_tmp18_ = vala_ccode_identifier_new ("G_VARIANT_TYPE");
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp19_);
	_tmp21_ = _tmp20_;
	_vala_ccode_node_unref0 (_tmp19_);
	gvariant_type = _tmp21_;
	_tmp22_ = vala_data_type_copy ((ValaDataType*) array_type);
	array_type_copy = G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, VALA_TYPE_ARRAY_TYPE, ValaArrayType);
	_tmp23_ = array_type_copy;
	_tmp24_ = array_type_copy;
	_tmp25_ = vala_array_type_get_rank (_tmp24_);
	_tmp26_ = _tmp25_;
	vala_array_type_set_rank (_tmp24_, _tmp26_ - (dim - 1));
	_tmp27_ = gvariant_type;
	_tmp28_ = array_type_copy;
	_tmp29_ = vala_data_type_get_type_signature ((ValaDataType*) _tmp28_, NULL);
	_tmp30_ = _tmp29_;
	_tmp31_ = g_strdup_printf ("\"%s\"", _tmp30_);
	_tmp32_ = _tmp31_;
	_tmp33_ = vala_ccode_constant_new (_tmp32_);
	_tmp34_ = _tmp33_;
	vala_ccode_function_call_add_argument (_tmp27_, (ValaCCodeExpression*) _tmp34_);
	_vala_ccode_node_unref0 (_tmp34_);
	_g_free0 (_tmp32_);
	_g_free0 (_tmp30_);
	_tmp35_ = vala_ccode_identifier_new ("g_variant_builder_init");
	_tmp36_ = _tmp35_;
	_tmp37_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp36_);
	_tmp38_ = _tmp37_;
	_vala_ccode_node_unref0 (_tmp36_);
	builder_init = _tmp38_;
	_tmp39_ = builder_init;
	_tmp40_ = builder_name;
	_tmp41_ = vala_ccode_identifier_new (_tmp40_);
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp42_);
	_tmp44_ = _tmp43_;
	vala_ccode_function_call_add_argument (_tmp39_, (ValaCCodeExpression*) _tmp44_);
	_vala_ccode_node_unref0 (_tmp44_);
	_vala_ccode_node_unref0 (_tmp42_);
	_tmp45_ = builder_init;
	_tmp46_ = gvariant_type;
	vala_ccode_function_call_add_argument (_tmp45_, (ValaCCodeExpression*) _tmp46_);
	_tmp47_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp48_ = _tmp47_;
	_tmp49_ = builder_init;
	vala_ccode_function_add_expression (_tmp48_, (ValaCCodeExpression*) _tmp49_);
	_tmp50_ = index_name;
	_tmp51_ = vala_ccode_identifier_new (_tmp50_);
	_tmp52_ = _tmp51_;
	_tmp53_ = vala_ccode_constant_new ("0");
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp52_, (ValaCCodeExpression*) _tmp54_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp56_ = _tmp55_;
	_vala_ccode_node_unref0 (_tmp54_);
	_vala_ccode_node_unref0 (_tmp52_);
	cforinit = _tmp56_;
	_tmp57_ = index_name;
	_tmp58_ = vala_ccode_identifier_new (_tmp57_);
	_tmp59_ = _tmp58_;
	_tmp60_ = vala_gvariant_module_get_array_length (self, array_expr, dim);
	_tmp61_ = _tmp60_;
	_tmp62_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_LESS_THAN, (ValaCCodeExpression*) _tmp59_, _tmp61_);
	_tmp63_ = _tmp62_;
	_vala_ccode_node_unref0 (_tmp61_);
	_vala_ccode_node_unref0 (_tmp59_);
	cforcond = _tmp63_;
	_tmp64_ = index_name;
	_tmp65_ = vala_ccode_identifier_new (_tmp64_);
	_tmp66_ = _tmp65_;
	_tmp67_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp66_);
	_tmp68_ = _tmp67_;
	_vala_ccode_node_unref0 (_tmp66_);
	cforiter = _tmp68_;
	_tmp69_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp70_ = _tmp69_;
	_tmp71_ = cforinit;
	_tmp72_ = cforcond;
	_tmp73_ = cforiter;
	vala_ccode_function_open_for (_tmp70_, (ValaCCodeExpression*) _tmp71_, (ValaCCodeExpression*) _tmp72_, (ValaCCodeExpression*) _tmp73_);
	_tmp74_ = vala_array_type_get_rank (array_type);
	_tmp75_ = _tmp74_;
	if (dim < _tmp75_) {
		ValaCCodeExpression* _tmp76_;
		_tmp76_ = vala_gvariant_module_serialize_array_dim (self, array_type, dim + 1, array_expr, array_iter_expr);
		_vala_ccode_node_unref0 (element_variant);
		element_variant = _tmp76_;
	} else {
		ValaCCodeUnaryExpression* element_expr = NULL;
		ValaCCodeUnaryExpression* _tmp77_;
		ValaDataType* _tmp78_;
		ValaDataType* _tmp79_;
		ValaCCodeUnaryExpression* _tmp80_;
		ValaCCodeExpression* _tmp81_;
		_tmp77_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, array_iter_expr);
		element_expr = _tmp77_;
		_tmp78_ = vala_array_type_get_element_type (array_type);
		_tmp79_ = _tmp78_;
		_tmp80_ = element_expr;
		_tmp81_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, _tmp79_, (ValaCCodeExpression*) _tmp80_);
		_vala_ccode_node_unref0 (element_variant);
		element_variant = _tmp81_;
		_vala_ccode_node_unref0 (element_expr);
	}
	_tmp82_ = vala_ccode_identifier_new ("g_variant_builder_add_value");
	_tmp83_ = _tmp82_;
	_tmp84_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp83_);
	_tmp85_ = _tmp84_;
	_vala_ccode_node_unref0 (_tmp83_);
	builder_add = _tmp85_;
	_tmp86_ = builder_add;
	_tmp87_ = builder_name;
	_tmp88_ = vala_ccode_identifier_new (_tmp87_);
	_tmp89_ = _tmp88_;
	_tmp90_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp89_);
	_tmp91_ = _tmp90_;
	vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp91_);
	_vala_ccode_node_unref0 (_tmp91_);
	_vala_ccode_node_unref0 (_tmp89_);
	_tmp92_ = builder_add;
	_tmp93_ = element_variant;
	vala_ccode_function_call_add_argument (_tmp92_, _tmp93_);
	_tmp94_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp95_ = _tmp94_;
	_tmp96_ = builder_add;
	vala_ccode_function_add_expression (_tmp95_, (ValaCCodeExpression*) _tmp96_);
	_tmp97_ = vala_array_type_get_rank (array_type);
	_tmp98_ = _tmp97_;
	if (dim == _tmp98_) {
		ValaCCodeUnaryExpression* array_iter_incr = NULL;
		ValaCCodeUnaryExpression* _tmp99_;
		ValaCCodeFunction* _tmp100_;
		ValaCCodeFunction* _tmp101_;
		ValaCCodeUnaryExpression* _tmp102_;
		_tmp99_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, array_iter_expr);
		array_iter_incr = _tmp99_;
		_tmp100_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp101_ = _tmp100_;
		_tmp102_ = array_iter_incr;
		vala_ccode_function_add_expression (_tmp101_, (ValaCCodeExpression*) _tmp102_);
		_vala_ccode_node_unref0 (array_iter_incr);
	}
	_tmp103_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp104_ = _tmp103_;
	vala_ccode_function_close (_tmp104_);
	_tmp105_ = vala_ccode_identifier_new ("g_variant_builder_end");
	_tmp106_ = _tmp105_;
	_tmp107_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp106_);
	_tmp108_ = _tmp107_;
	_vala_ccode_node_unref0 (_tmp106_);
	builder_end = _tmp108_;
	_tmp109_ = builder_name;
	_tmp110_ = vala_ccode_identifier_new (_tmp109_);
	_tmp111_ = _tmp110_;
	_tmp112_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp111_);
	_tmp113_ = _tmp112_;
	vala_ccode_function_call_add_argument (builder_end, (ValaCCodeExpression*) _tmp113_);
	_vala_ccode_node_unref0 (_tmp113_);
	_vala_ccode_node_unref0 (_tmp111_);
	result = (ValaCCodeExpression*) builder_end;
	_vala_ccode_node_unref0 (builder_add);
	_vala_ccode_node_unref0 (element_variant);
	_vala_ccode_node_unref0 (cforiter);
	_vala_ccode_node_unref0 (cforcond);
	_vala_ccode_node_unref0 (cforinit);
	_vala_ccode_node_unref0 (builder_init);
	_vala_code_node_unref0 (array_type_copy);
	_vala_ccode_node_unref0 (gvariant_type);
	_g_free0 (index_name);
	_g_free0 (builder_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_serialize_buffer_array (ValaGVariantModule* self,
                                             ValaArrayType* array_type,
                                             ValaCCodeExpression* array_expr)
{
	gchar* buffer_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	ValaCCodeFunctionCall* gvariant_type = NULL;
	ValaCCodeIdentifier* _tmp3_;
	ValaCCodeIdentifier* _tmp4_;
	ValaCCodeFunctionCall* _tmp5_;
	ValaCCodeFunctionCall* _tmp6_;
	ValaCCodeFunctionCall* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeConstant* _tmp12_;
	ValaCCodeConstant* _tmp13_;
	ValaCCodeFunctionCall* dup_call = NULL;
	ValaCodeContext* _tmp14_;
	ValaCodeContext* _tmp15_;
	ValaCCodeFunctionCall* _tmp22_;
	ValaCCodeFunctionCall* _tmp23_;
	ValaCCodeExpression* _tmp24_;
	ValaCCodeExpression* _tmp25_;
	ValaCCodeFunction* _tmp26_;
	ValaCCodeFunction* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	const gchar* _tmp30_;
	ValaCCodeFunctionCall* _tmp31_;
	ValaCCodeVariableDeclarator* _tmp32_;
	ValaCCodeVariableDeclarator* _tmp33_;
	ValaCCodeFunctionCall* new_call = NULL;
	ValaCCodeIdentifier* _tmp34_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeFunctionCall* _tmp36_;
	ValaCCodeFunctionCall* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	const gchar* _tmp39_;
	ValaCCodeIdentifier* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeExpression* _tmp42_;
	ValaCCodeExpression* _tmp43_;
	ValaCCodeConstant* _tmp44_;
	ValaCCodeConstant* _tmp45_;
	ValaCCodeIdentifier* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	const gchar* _tmp48_;
	ValaCCodeIdentifier* _tmp49_;
	ValaCCodeIdentifier* _tmp50_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (array_type != NULL, NULL);
	g_return_val_if_fail (array_expr != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	buffer_name = _tmp2_;
	_tmp3_ = vala_ccode_identifier_new ("G_VARIANT_TYPE");
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp4_);
	_tmp6_ = _tmp5_;
	_vala_ccode_node_unref0 (_tmp4_);
	gvariant_type = _tmp6_;
	_tmp7_ = gvariant_type;
	_tmp8_ = vala_data_type_get_type_signature ((ValaDataType*) array_type, NULL);
	_tmp9_ = _tmp8_;
	_tmp10_ = g_strdup_printf ("\"%s\"", _tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_constant_new (_tmp11_);
	_tmp13_ = _tmp12_;
	vala_ccode_function_call_add_argument (_tmp7_, (ValaCCodeExpression*) _tmp13_);
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp11_);
	_g_free0 (_tmp9_);
	_tmp14_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp15_ = _tmp14_;
	if (vala_code_context_require_glib_version (_tmp15_, 2, 68)) {
		ValaCCodeIdentifier* _tmp16_;
		ValaCCodeIdentifier* _tmp17_;
		ValaCCodeFunctionCall* _tmp18_;
		_tmp16_ = vala_ccode_identifier_new ("g_memdup2");
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp17_);
		_vala_ccode_node_unref0 (dup_call);
		dup_call = _tmp18_;
		_vala_ccode_node_unref0 (_tmp17_);
	} else {
		ValaCCodeIdentifier* _tmp19_;
		ValaCCodeIdentifier* _tmp20_;
		ValaCCodeFunctionCall* _tmp21_;
		((ValaCCodeBaseModule*) self)->requires_memdup2 = TRUE;
		_tmp19_ = vala_ccode_identifier_new ("_vala_memdup2");
		_tmp20_ = _tmp19_;
		_tmp21_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp20_);
		_vala_ccode_node_unref0 (dup_call);
		dup_call = _tmp21_;
		_vala_ccode_node_unref0 (_tmp20_);
	}
	_tmp22_ = dup_call;
	vala_ccode_function_call_add_argument (_tmp22_, array_expr);
	_tmp23_ = dup_call;
	_tmp24_ = vala_gvariant_module_get_array_length (self, array_expr, 1);
	_tmp25_ = _tmp24_;
	vala_ccode_function_call_add_argument (_tmp23_, _tmp25_);
	_vala_ccode_node_unref0 (_tmp25_);
	_tmp26_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp27_ = _tmp26_;
	_tmp28_ = vala_get_ccode_name ((ValaCodeNode*) array_type);
	_tmp29_ = _tmp28_;
	_tmp30_ = buffer_name;
	_tmp31_ = dup_call;
	_tmp32_ = vala_ccode_variable_declarator_new (_tmp30_, (ValaCCodeExpression*) _tmp31_, NULL);
	_tmp33_ = _tmp32_;
	vala_ccode_function_add_declaration (_tmp27_, _tmp29_, (ValaCCodeDeclarator*) _tmp33_, 0);
	_vala_ccode_node_unref0 (_tmp33_);
	_g_free0 (_tmp29_);
	_tmp34_ = vala_ccode_identifier_new ("g_variant_new_from_data");
	_tmp35_ = _tmp34_;
	_tmp36_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp35_);
	_tmp37_ = _tmp36_;
	_vala_ccode_node_unref0 (_tmp35_);
	new_call = _tmp37_;
	_tmp38_ = gvariant_type;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp38_);
	_tmp39_ = buffer_name;
	_tmp40_ = vala_ccode_identifier_new (_tmp39_);
	_tmp41_ = _tmp40_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp41_);
	_vala_ccode_node_unref0 (_tmp41_);
	_tmp42_ = vala_gvariant_module_get_array_length (self, array_expr, 1);
	_tmp43_ = _tmp42_;
	vala_ccode_function_call_add_argument (new_call, _tmp43_);
	_vala_ccode_node_unref0 (_tmp43_);
	_tmp44_ = vala_ccode_constant_new ("TRUE");
	_tmp45_ = _tmp44_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp45_);
	_vala_ccode_node_unref0 (_tmp45_);
	_tmp46_ = vala_ccode_identifier_new ("g_free");
	_tmp47_ = _tmp46_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp47_);
	_vala_ccode_node_unref0 (_tmp47_);
	_tmp48_ = buffer_name;
	_tmp49_ = vala_ccode_identifier_new (_tmp48_);
	_tmp50_ = _tmp49_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp50_);
	_vala_ccode_node_unref0 (_tmp50_);
	result = (ValaCCodeExpression*) new_call;
	_vala_ccode_node_unref0 (dup_call);
	_vala_ccode_node_unref0 (gvariant_type);
	_g_free0 (buffer_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_serialize_struct (ValaGVariantModule* self,
                                       ValaStruct* st,
                                       ValaCCodeExpression* struct_expr)
{
	gchar* builder_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFunction* _tmp4_;
	const gchar* _tmp5_;
	ValaCCodeVariableDeclarator* _tmp6_;
	ValaCCodeVariableDeclarator* _tmp7_;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeFunctionCall* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	const gchar* _tmp13_;
	ValaCCodeIdentifier* _tmp14_;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeUnaryExpression* _tmp16_;
	ValaCCodeUnaryExpression* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeIdentifier* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaCCodeFunctionCall* _tmp23_;
	gboolean field_found = FALSE;
	ValaCCodeFunctionCall* builder_end = NULL;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeFunctionCall* _tmp49_;
	ValaCCodeFunctionCall* _tmp50_;
	ValaCCodeFunctionCall* _tmp51_;
	const gchar* _tmp52_;
	ValaCCodeIdentifier* _tmp53_;
	ValaCCodeIdentifier* _tmp54_;
	ValaCCodeUnaryExpression* _tmp55_;
	ValaCCodeUnaryExpression* _tmp56_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (st != NULL, NULL);
	g_return_val_if_fail (struct_expr != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	builder_name = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp4_ = _tmp3_;
	_tmp5_ = builder_name;
	_tmp6_ = vala_ccode_variable_declarator_new (_tmp5_, NULL, NULL);
	_tmp7_ = _tmp6_;
	vala_ccode_function_add_declaration (_tmp4_, "GVariantBuilder", (ValaCCodeDeclarator*) _tmp7_, 0);
	_vala_ccode_node_unref0 (_tmp7_);
	_tmp8_ = vala_ccode_identifier_new ("g_variant_builder_init");
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp9_);
	_tmp11_ = _tmp10_;
	_vala_ccode_node_unref0 (_tmp9_);
	iter_call = _tmp11_;
	_tmp12_ = iter_call;
	_tmp13_ = builder_name;
	_tmp14_ = vala_ccode_identifier_new (_tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp15_);
	_tmp17_ = _tmp16_;
	vala_ccode_function_call_add_argument (_tmp12_, (ValaCCodeExpression*) _tmp17_);
	_vala_ccode_node_unref0 (_tmp17_);
	_vala_ccode_node_unref0 (_tmp15_);
	_tmp18_ = iter_call;
	_tmp19_ = vala_ccode_identifier_new ("G_VARIANT_TYPE_TUPLE");
	_tmp20_ = _tmp19_;
	vala_ccode_function_call_add_argument (_tmp18_, (ValaCCodeExpression*) _tmp20_);
	_vala_ccode_node_unref0 (_tmp20_);
	_tmp21_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp22_ = _tmp21_;
	_tmp23_ = iter_call;
	vala_ccode_function_add_expression (_tmp22_, (ValaCCodeExpression*) _tmp23_);
	field_found = FALSE;
	{
		ValaList* _f_list = NULL;
		ValaList* _tmp24_;
		gint _f_size = 0;
		ValaList* _tmp25_;
		gint _tmp26_;
		gint _tmp27_;
		gint _f_index = 0;
		_tmp24_ = vala_struct_get_fields (st);
		_f_list = _tmp24_;
		_tmp25_ = _f_list;
		_tmp26_ = vala_collection_get_size ((ValaCollection*) _tmp25_);
		_tmp27_ = _tmp26_;
		_f_size = _tmp27_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp28_;
			gint _tmp29_;
			ValaField* f = NULL;
			ValaList* _tmp30_;
			gpointer _tmp31_;
			ValaField* _tmp32_;
			ValaMemberBinding _tmp33_;
			ValaMemberBinding _tmp34_;
			ValaField* _tmp35_;
			ValaDataType* _tmp36_;
			ValaDataType* _tmp37_;
			const gchar* _tmp38_;
			ValaCCodeIdentifier* _tmp39_;
			ValaCCodeIdentifier* _tmp40_;
			ValaField* _tmp41_;
			gchar* _tmp42_;
			gchar* _tmp43_;
			ValaCCodeMemberAccess* _tmp44_;
			ValaCCodeMemberAccess* _tmp45_;
			ValaField* _tmp46_;
			_f_index = _f_index + 1;
			_tmp28_ = _f_index;
			_tmp29_ = _f_size;
			if (!(_tmp28_ < _tmp29_)) {
				break;
			}
			_tmp30_ = _f_list;
			_tmp31_ = vala_list_get (_tmp30_, _f_index);
			f = (ValaField*) _tmp31_;
			_tmp32_ = f;
			_tmp33_ = vala_field_get_binding (_tmp32_);
			_tmp34_ = _tmp33_;
			if (_tmp34_ != VALA_MEMBER_BINDING_INSTANCE) {
				_vala_code_node_unref0 (f);
				continue;
			}
			field_found = TRUE;
			_tmp35_ = f;
			_tmp36_ = vala_variable_get_variable_type ((ValaVariable*) _tmp35_);
			_tmp37_ = _tmp36_;
			_tmp38_ = builder_name;
			_tmp39_ = vala_ccode_identifier_new (_tmp38_);
			_tmp40_ = _tmp39_;
			_tmp41_ = f;
			_tmp42_ = vala_get_ccode_name ((ValaCodeNode*) _tmp41_);
			_tmp43_ = _tmp42_;
			_tmp44_ = vala_ccode_member_access_new (struct_expr, _tmp43_, FALSE);
			_tmp45_ = _tmp44_;
			_tmp46_ = f;
			vala_gvariant_module_write_expression (self, _tmp37_, (ValaCCodeExpression*) _tmp40_, (ValaCCodeExpression*) _tmp45_, (ValaSymbol*) _tmp46_);
			_vala_ccode_node_unref0 (_tmp45_);
			_g_free0 (_tmp43_);
			_vala_ccode_node_unref0 (_tmp40_);
			_vala_code_node_unref0 (f);
		}
	}
	if (!field_found) {
		result = NULL;
		_vala_ccode_node_unref0 (iter_call);
		_g_free0 (builder_name);
		return result;
	}
	_tmp47_ = vala_ccode_identifier_new ("g_variant_builder_end");
	_tmp48_ = _tmp47_;
	_tmp49_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp48_);
	_tmp50_ = _tmp49_;
	_vala_ccode_node_unref0 (_tmp48_);
	builder_end = _tmp50_;
	_tmp51_ = builder_end;
	_tmp52_ = builder_name;
	_tmp53_ = vala_ccode_identifier_new (_tmp52_);
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp54_);
	_tmp56_ = _tmp55_;
	vala_ccode_function_call_add_argument (_tmp51_, (ValaCCodeExpression*) _tmp56_);
	_vala_ccode_node_unref0 (_tmp56_);
	_vala_ccode_node_unref0 (_tmp54_);
	result = (ValaCCodeExpression*) builder_end;
	_vala_ccode_node_unref0 (iter_call);
	_g_free0 (builder_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_serialize_hash_table (ValaGVariantModule* self,
                                           ValaObjectType* type,
                                           ValaCCodeExpression* hash_table_expr)
{
	gchar* subiter_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	gchar* tableiter_name = NULL;
	gint _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	gchar* key_name = NULL;
	gint _tmp6_;
	gint _tmp7_;
	gchar* _tmp8_;
	gchar* value_name = NULL;
	gint _tmp9_;
	gint _tmp10_;
	gchar* _tmp11_;
	ValaList* type_args = NULL;
	ValaList* _tmp12_;
	ValaList* _tmp13_;
	ValaList* _tmp14_;
	gint _tmp15_;
	gint _tmp16_;
	ValaDataType* key_type = NULL;
	ValaList* _tmp24_;
	gpointer _tmp25_;
	ValaDataType* value_type = NULL;
	ValaList* _tmp26_;
	gpointer _tmp27_;
	ValaCCodeFunction* _tmp28_;
	ValaCCodeFunction* _tmp29_;
	const gchar* _tmp30_;
	ValaCCodeVariableDeclarator* _tmp31_;
	ValaCCodeVariableDeclarator* _tmp32_;
	ValaCCodeFunction* _tmp33_;
	ValaCCodeFunction* _tmp34_;
	const gchar* _tmp35_;
	ValaCCodeVariableDeclarator* _tmp36_;
	ValaCCodeVariableDeclarator* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	const gchar* _tmp40_;
	ValaCCodeVariableDeclarator* _tmp41_;
	ValaCCodeVariableDeclarator* _tmp42_;
	ValaCCodeFunction* _tmp43_;
	ValaCCodeFunction* _tmp44_;
	const gchar* _tmp45_;
	ValaCCodeVariableDeclarator* _tmp46_;
	ValaCCodeVariableDeclarator* _tmp47_;
	ValaCCodeFunctionCall* iter_init_call = NULL;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeIdentifier* _tmp49_;
	ValaCCodeFunctionCall* _tmp50_;
	ValaCCodeFunctionCall* _tmp51_;
	ValaCCodeFunctionCall* _tmp52_;
	const gchar* _tmp53_;
	ValaCCodeIdentifier* _tmp54_;
	ValaCCodeIdentifier* _tmp55_;
	ValaCCodeUnaryExpression* _tmp56_;
	ValaCCodeUnaryExpression* _tmp57_;
	ValaCCodeFunctionCall* _tmp58_;
	ValaCCodeFunction* _tmp59_;
	ValaCCodeFunction* _tmp60_;
	ValaCCodeFunctionCall* _tmp61_;
	ValaCCodeFunctionCall* gvariant_type = NULL;
	ValaCCodeIdentifier* _tmp62_;
	ValaCCodeIdentifier* _tmp63_;
	ValaCCodeFunctionCall* _tmp64_;
	ValaCCodeFunctionCall* _tmp65_;
	ValaCCodeFunctionCall* _tmp66_;
	gchar* _tmp67_;
	gchar* _tmp68_;
	gchar* _tmp69_;
	gchar* _tmp70_;
	ValaCCodeConstant* _tmp71_;
	ValaCCodeConstant* _tmp72_;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp73_;
	ValaCCodeIdentifier* _tmp74_;
	ValaCCodeFunctionCall* _tmp75_;
	ValaCCodeFunctionCall* _tmp76_;
	ValaCCodeFunctionCall* _tmp77_;
	const gchar* _tmp78_;
	ValaCCodeIdentifier* _tmp79_;
	ValaCCodeIdentifier* _tmp80_;
	ValaCCodeUnaryExpression* _tmp81_;
	ValaCCodeUnaryExpression* _tmp82_;
	ValaCCodeFunctionCall* _tmp83_;
	ValaCCodeFunctionCall* _tmp84_;
	ValaCCodeFunction* _tmp85_;
	ValaCCodeFunction* _tmp86_;
	ValaCCodeFunctionCall* _tmp87_;
	ValaCCodeFunctionCall* iter_next_call = NULL;
	ValaCCodeIdentifier* _tmp88_;
	ValaCCodeIdentifier* _tmp89_;
	ValaCCodeFunctionCall* _tmp90_;
	ValaCCodeFunctionCall* _tmp91_;
	ValaCCodeFunctionCall* _tmp92_;
	const gchar* _tmp93_;
	ValaCCodeIdentifier* _tmp94_;
	ValaCCodeIdentifier* _tmp95_;
	ValaCCodeUnaryExpression* _tmp96_;
	ValaCCodeUnaryExpression* _tmp97_;
	ValaCCodeFunctionCall* _tmp98_;
	const gchar* _tmp99_;
	ValaCCodeIdentifier* _tmp100_;
	ValaCCodeIdentifier* _tmp101_;
	ValaCCodeUnaryExpression* _tmp102_;
	ValaCCodeUnaryExpression* _tmp103_;
	ValaCCodeFunctionCall* _tmp104_;
	const gchar* _tmp105_;
	ValaCCodeIdentifier* _tmp106_;
	ValaCCodeIdentifier* _tmp107_;
	ValaCCodeUnaryExpression* _tmp108_;
	ValaCCodeUnaryExpression* _tmp109_;
	ValaCCodeFunction* _tmp110_;
	ValaCCodeFunction* _tmp111_;
	ValaCCodeFunctionCall* _tmp112_;
	ValaCCodeFunction* _tmp113_;
	ValaCCodeFunction* _tmp114_;
	ValaDataType* _tmp115_;
	gchar* _tmp116_;
	gchar* _tmp117_;
	ValaCCodeVariableDeclarator* _tmp118_;
	ValaCCodeVariableDeclarator* _tmp119_;
	ValaCCodeFunction* _tmp120_;
	ValaCCodeFunction* _tmp121_;
	ValaDataType* _tmp122_;
	gchar* _tmp123_;
	gchar* _tmp124_;
	ValaCCodeVariableDeclarator* _tmp125_;
	ValaCCodeVariableDeclarator* _tmp126_;
	ValaCCodeFunction* _tmp127_;
	ValaCCodeFunction* _tmp128_;
	ValaCCodeIdentifier* _tmp129_;
	ValaCCodeIdentifier* _tmp130_;
	const gchar* _tmp131_;
	ValaCCodeIdentifier* _tmp132_;
	ValaCCodeIdentifier* _tmp133_;
	ValaDataType* _tmp134_;
	ValaCCodeExpression* _tmp135_;
	ValaCCodeExpression* _tmp136_;
	ValaCCodeFunction* _tmp137_;
	ValaCCodeFunction* _tmp138_;
	ValaCCodeIdentifier* _tmp139_;
	ValaCCodeIdentifier* _tmp140_;
	const gchar* _tmp141_;
	ValaCCodeIdentifier* _tmp142_;
	ValaCCodeIdentifier* _tmp143_;
	ValaDataType* _tmp144_;
	ValaCCodeExpression* _tmp145_;
	ValaCCodeExpression* _tmp146_;
	ValaCCodeExpression* serialized_key = NULL;
	ValaDataType* _tmp147_;
	ValaCCodeIdentifier* _tmp148_;
	ValaCCodeIdentifier* _tmp149_;
	ValaCCodeExpression* _tmp150_;
	ValaCCodeExpression* _tmp151_;
	ValaCCodeExpression* serialized_value = NULL;
	ValaDataType* _tmp152_;
	ValaCCodeIdentifier* _tmp153_;
	ValaCCodeIdentifier* _tmp154_;
	ValaCCodeExpression* _tmp155_;
	ValaCCodeExpression* _tmp156_;
	gboolean _tmp157_ = FALSE;
	ValaCCodeExpression* _tmp158_;
	ValaCCodeIdentifier* _tmp160_;
	ValaCCodeIdentifier* _tmp161_;
	ValaCCodeFunctionCall* _tmp162_;
	ValaCCodeFunctionCall* _tmp163_;
	const gchar* _tmp164_;
	ValaCCodeIdentifier* _tmp165_;
	ValaCCodeIdentifier* _tmp166_;
	ValaCCodeUnaryExpression* _tmp167_;
	ValaCCodeUnaryExpression* _tmp168_;
	ValaCCodeFunctionCall* _tmp169_;
	ValaCCodeConstant* _tmp170_;
	ValaCCodeConstant* _tmp171_;
	ValaCCodeFunctionCall* _tmp172_;
	ValaCCodeExpression* _tmp173_;
	ValaCCodeFunctionCall* _tmp174_;
	ValaCCodeExpression* _tmp175_;
	ValaCCodeFunction* _tmp176_;
	ValaCCodeFunction* _tmp177_;
	ValaCCodeFunctionCall* _tmp178_;
	ValaCCodeFunction* _tmp179_;
	ValaCCodeFunction* _tmp180_;
	ValaCCodeIdentifier* _tmp181_;
	ValaCCodeIdentifier* _tmp182_;
	ValaCCodeFunctionCall* _tmp183_;
	ValaCCodeFunctionCall* _tmp184_;
	const gchar* _tmp185_;
	ValaCCodeIdentifier* _tmp186_;
	ValaCCodeIdentifier* _tmp187_;
	ValaCCodeUnaryExpression* _tmp188_;
	ValaCCodeUnaryExpression* _tmp189_;
	ValaCCodeExpression* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (hash_table_expr != NULL, NULL);
	_tmp0_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp1_ + 1);
	_tmp2_ = g_strdup_printf ("_tmp%d_", _tmp1_);
	subiter_name = _tmp2_;
	_tmp3_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp4_ = _tmp3_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp4_ + 1);
	_tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
	tableiter_name = _tmp5_;
	_tmp6_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp7_ + 1);
	_tmp8_ = g_strdup_printf ("_tmp%d_", _tmp7_);
	key_name = _tmp8_;
	_tmp9_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp10_ = _tmp9_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp10_ + 1);
	_tmp11_ = g_strdup_printf ("_tmp%d_", _tmp10_);
	value_name = _tmp11_;
	_tmp12_ = vala_data_type_get_type_arguments ((ValaDataType*) type);
	_tmp13_ = _vala_iterable_ref0 (_tmp12_);
	type_args = _tmp13_;
	_tmp14_ = type_args;
	_tmp15_ = vala_collection_get_size ((ValaCollection*) _tmp14_);
	_tmp16_ = _tmp15_;
	if (_tmp16_ != 2) {
		ValaSourceReference* _tmp17_;
		ValaSourceReference* _tmp18_;
		ValaTypeSymbol* _tmp19_;
		ValaTypeSymbol* _tmp20_;
		gchar* _tmp21_;
		gchar* _tmp22_;
		ValaCCodeInvalidExpression* _tmp23_;
		_tmp17_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_data_type_get_type_symbol ((ValaDataType*) type);
		_tmp20_ = _tmp19_;
		_tmp21_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp20_);
		_tmp22_ = _tmp21_;
		vala_report_error (_tmp18_, "Missing type-arguments for GVariant serialization of `%s'", _tmp22_);
		_g_free0 (_tmp22_);
		_tmp23_ = vala_ccode_invalid_expression_new ();
		result = (ValaCCodeExpression*) _tmp23_;
		_vala_iterable_unref0 (type_args);
		_g_free0 (value_name);
		_g_free0 (key_name);
		_g_free0 (tableiter_name);
		_g_free0 (subiter_name);
		return result;
	}
	_tmp24_ = type_args;
	_tmp25_ = vala_list_get (_tmp24_, 0);
	key_type = (ValaDataType*) _tmp25_;
	_tmp26_ = type_args;
	_tmp27_ = vala_list_get (_tmp26_, 1);
	value_type = (ValaDataType*) _tmp27_;
	_tmp28_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp29_ = _tmp28_;
	_tmp30_ = subiter_name;
	_tmp31_ = vala_ccode_variable_declarator_new (_tmp30_, NULL, NULL);
	_tmp32_ = _tmp31_;
	vala_ccode_function_add_declaration (_tmp29_, "GVariantBuilder", (ValaCCodeDeclarator*) _tmp32_, 0);
	_vala_ccode_node_unref0 (_tmp32_);
	_tmp33_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp34_ = _tmp33_;
	_tmp35_ = tableiter_name;
	_tmp36_ = vala_ccode_variable_declarator_new (_tmp35_, NULL, NULL);
	_tmp37_ = _tmp36_;
	vala_ccode_function_add_declaration (_tmp34_, "GHashTableIter", (ValaCCodeDeclarator*) _tmp37_, 0);
	_vala_ccode_node_unref0 (_tmp37_);
	_tmp38_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp39_ = _tmp38_;
	_tmp40_ = key_name;
	_tmp41_ = vala_ccode_variable_declarator_new (_tmp40_, NULL, NULL);
	_tmp42_ = _tmp41_;
	vala_ccode_function_add_declaration (_tmp39_, "gpointer", (ValaCCodeDeclarator*) _tmp42_, 0);
	_vala_ccode_node_unref0 (_tmp42_);
	_tmp43_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp44_ = _tmp43_;
	_tmp45_ = value_name;
	_tmp46_ = vala_ccode_variable_declarator_new (_tmp45_, NULL, NULL);
	_tmp47_ = _tmp46_;
	vala_ccode_function_add_declaration (_tmp44_, "gpointer", (ValaCCodeDeclarator*) _tmp47_, 0);
	_vala_ccode_node_unref0 (_tmp47_);
	_tmp48_ = vala_ccode_identifier_new ("g_hash_table_iter_init");
	_tmp49_ = _tmp48_;
	_tmp50_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp49_);
	_tmp51_ = _tmp50_;
	_vala_ccode_node_unref0 (_tmp49_);
	iter_init_call = _tmp51_;
	_tmp52_ = iter_init_call;
	_tmp53_ = tableiter_name;
	_tmp54_ = vala_ccode_identifier_new (_tmp53_);
	_tmp55_ = _tmp54_;
	_tmp56_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp55_);
	_tmp57_ = _tmp56_;
	vala_ccode_function_call_add_argument (_tmp52_, (ValaCCodeExpression*) _tmp57_);
	_vala_ccode_node_unref0 (_tmp57_);
	_vala_ccode_node_unref0 (_tmp55_);
	_tmp58_ = iter_init_call;
	vala_ccode_function_call_add_argument (_tmp58_, hash_table_expr);
	_tmp59_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp60_ = _tmp59_;
	_tmp61_ = iter_init_call;
	vala_ccode_function_add_expression (_tmp60_, (ValaCCodeExpression*) _tmp61_);
	_tmp62_ = vala_ccode_identifier_new ("G_VARIANT_TYPE");
	_tmp63_ = _tmp62_;
	_tmp64_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp63_);
	_tmp65_ = _tmp64_;
	_vala_ccode_node_unref0 (_tmp63_);
	gvariant_type = _tmp65_;
	_tmp66_ = gvariant_type;
	_tmp67_ = vala_data_type_get_type_signature ((ValaDataType*) type, NULL);
	_tmp68_ = _tmp67_;
	_tmp69_ = g_strdup_printf ("\"%s\"", _tmp68_);
	_tmp70_ = _tmp69_;
	_tmp71_ = vala_ccode_constant_new (_tmp70_);
	_tmp72_ = _tmp71_;
	vala_ccode_function_call_add_argument (_tmp66_, (ValaCCodeExpression*) _tmp72_);
	_vala_ccode_node_unref0 (_tmp72_);
	_g_free0 (_tmp70_);
	_g_free0 (_tmp68_);
	_tmp73_ = vala_ccode_identifier_new ("g_variant_builder_init");
	_tmp74_ = _tmp73_;
	_tmp75_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp74_);
	_tmp76_ = _tmp75_;
	_vala_ccode_node_unref0 (_tmp74_);
	iter_call = _tmp76_;
	_tmp77_ = iter_call;
	_tmp78_ = subiter_name;
	_tmp79_ = vala_ccode_identifier_new (_tmp78_);
	_tmp80_ = _tmp79_;
	_tmp81_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp80_);
	_tmp82_ = _tmp81_;
	vala_ccode_function_call_add_argument (_tmp77_, (ValaCCodeExpression*) _tmp82_);
	_vala_ccode_node_unref0 (_tmp82_);
	_vala_ccode_node_unref0 (_tmp80_);
	_tmp83_ = iter_call;
	_tmp84_ = gvariant_type;
	vala_ccode_function_call_add_argument (_tmp83_, (ValaCCodeExpression*) _tmp84_);
	_tmp85_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp86_ = _tmp85_;
	_tmp87_ = iter_call;
	vala_ccode_function_add_expression (_tmp86_, (ValaCCodeExpression*) _tmp87_);
	_tmp88_ = vala_ccode_identifier_new ("g_hash_table_iter_next");
	_tmp89_ = _tmp88_;
	_tmp90_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp89_);
	_tmp91_ = _tmp90_;
	_vala_ccode_node_unref0 (_tmp89_);
	iter_next_call = _tmp91_;
	_tmp92_ = iter_next_call;
	_tmp93_ = tableiter_name;
	_tmp94_ = vala_ccode_identifier_new (_tmp93_);
	_tmp95_ = _tmp94_;
	_tmp96_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp95_);
	_tmp97_ = _tmp96_;
	vala_ccode_function_call_add_argument (_tmp92_, (ValaCCodeExpression*) _tmp97_);
	_vala_ccode_node_unref0 (_tmp97_);
	_vala_ccode_node_unref0 (_tmp95_);
	_tmp98_ = iter_next_call;
	_tmp99_ = key_name;
	_tmp100_ = vala_ccode_identifier_new (_tmp99_);
	_tmp101_ = _tmp100_;
	_tmp102_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp101_);
	_tmp103_ = _tmp102_;
	vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp103_);
	_vala_ccode_node_unref0 (_tmp103_);
	_vala_ccode_node_unref0 (_tmp101_);
	_tmp104_ = iter_next_call;
	_tmp105_ = value_name;
	_tmp106_ = vala_ccode_identifier_new (_tmp105_);
	_tmp107_ = _tmp106_;
	_tmp108_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp107_);
	_tmp109_ = _tmp108_;
	vala_ccode_function_call_add_argument (_tmp104_, (ValaCCodeExpression*) _tmp109_);
	_vala_ccode_node_unref0 (_tmp109_);
	_vala_ccode_node_unref0 (_tmp107_);
	_tmp110_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp111_ = _tmp110_;
	_tmp112_ = iter_next_call;
	vala_ccode_function_open_while (_tmp111_, (ValaCCodeExpression*) _tmp112_);
	_tmp113_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp114_ = _tmp113_;
	_tmp115_ = key_type;
	_tmp116_ = vala_get_ccode_name ((ValaCodeNode*) _tmp115_);
	_tmp117_ = _tmp116_;
	_tmp118_ = vala_ccode_variable_declarator_new ("_key", NULL, NULL);
	_tmp119_ = _tmp118_;
	vala_ccode_function_add_declaration (_tmp114_, _tmp117_, (ValaCCodeDeclarator*) _tmp119_, 0);
	_vala_ccode_node_unref0 (_tmp119_);
	_g_free0 (_tmp117_);
	_tmp120_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp121_ = _tmp120_;
	_tmp122_ = value_type;
	_tmp123_ = vala_get_ccode_name ((ValaCodeNode*) _tmp122_);
	_tmp124_ = _tmp123_;
	_tmp125_ = vala_ccode_variable_declarator_new ("_value", NULL, NULL);
	_tmp126_ = _tmp125_;
	vala_ccode_function_add_declaration (_tmp121_, _tmp124_, (ValaCCodeDeclarator*) _tmp126_, 0);
	_vala_ccode_node_unref0 (_tmp126_);
	_g_free0 (_tmp124_);
	_tmp127_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp128_ = _tmp127_;
	_tmp129_ = vala_ccode_identifier_new ("_key");
	_tmp130_ = _tmp129_;
	_tmp131_ = key_name;
	_tmp132_ = vala_ccode_identifier_new (_tmp131_);
	_tmp133_ = _tmp132_;
	_tmp134_ = key_type;
	_tmp135_ = vala_ccode_base_module_convert_from_generic_pointer ((ValaCCodeBaseModule*) self, (ValaCCodeExpression*) _tmp133_, _tmp134_);
	_tmp136_ = _tmp135_;
	vala_ccode_function_add_assignment (_tmp128_, (ValaCCodeExpression*) _tmp130_, _tmp136_);
	_vala_ccode_node_unref0 (_tmp136_);
	_vala_ccode_node_unref0 (_tmp133_);
	_vala_ccode_node_unref0 (_tmp130_);
	_tmp137_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp138_ = _tmp137_;
	_tmp139_ = vala_ccode_identifier_new ("_value");
	_tmp140_ = _tmp139_;
	_tmp141_ = value_name;
	_tmp142_ = vala_ccode_identifier_new (_tmp141_);
	_tmp143_ = _tmp142_;
	_tmp144_ = value_type;
	_tmp145_ = vala_ccode_base_module_convert_from_generic_pointer ((ValaCCodeBaseModule*) self, (ValaCCodeExpression*) _tmp143_, _tmp144_);
	_tmp146_ = _tmp145_;
	vala_ccode_function_add_assignment (_tmp138_, (ValaCCodeExpression*) _tmp140_, _tmp146_);
	_vala_ccode_node_unref0 (_tmp146_);
	_vala_ccode_node_unref0 (_tmp143_);
	_vala_ccode_node_unref0 (_tmp140_);
	_tmp147_ = key_type;
	_tmp148_ = vala_ccode_identifier_new ("_key");
	_tmp149_ = _tmp148_;
	_tmp150_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, _tmp147_, (ValaCCodeExpression*) _tmp149_);
	_tmp151_ = _tmp150_;
	_vala_ccode_node_unref0 (_tmp149_);
	serialized_key = _tmp151_;
	_tmp152_ = value_type;
	_tmp153_ = vala_ccode_identifier_new ("_value");
	_tmp154_ = _tmp153_;
	_tmp155_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, _tmp152_, (ValaCCodeExpression*) _tmp154_);
	_tmp156_ = _tmp155_;
	_vala_ccode_node_unref0 (_tmp154_);
	serialized_value = _tmp156_;
	_tmp158_ = serialized_key;
	if (_tmp158_ == NULL) {
		_tmp157_ = TRUE;
	} else {
		ValaCCodeExpression* _tmp159_;
		_tmp159_ = serialized_value;
		_tmp157_ = _tmp159_ == NULL;
	}
	if (_tmp157_) {
		result = NULL;
		_vala_ccode_node_unref0 (serialized_value);
		_vala_ccode_node_unref0 (serialized_key);
		_vala_ccode_node_unref0 (iter_next_call);
		_vala_ccode_node_unref0 (iter_call);
		_vala_ccode_node_unref0 (gvariant_type);
		_vala_ccode_node_unref0 (iter_init_call);
		_vala_code_node_unref0 (value_type);
		_vala_code_node_unref0 (key_type);
		_vala_iterable_unref0 (type_args);
		_g_free0 (value_name);
		_g_free0 (key_name);
		_g_free0 (tableiter_name);
		_g_free0 (subiter_name);
		return result;
	}
	_tmp160_ = vala_ccode_identifier_new ("g_variant_builder_add");
	_tmp161_ = _tmp160_;
	_tmp162_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp161_);
	_vala_ccode_node_unref0 (iter_call);
	iter_call = _tmp162_;
	_vala_ccode_node_unref0 (_tmp161_);
	_tmp163_ = iter_call;
	_tmp164_ = subiter_name;
	_tmp165_ = vala_ccode_identifier_new (_tmp164_);
	_tmp166_ = _tmp165_;
	_tmp167_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp166_);
	_tmp168_ = _tmp167_;
	vala_ccode_function_call_add_argument (_tmp163_, (ValaCCodeExpression*) _tmp168_);
	_vala_ccode_node_unref0 (_tmp168_);
	_vala_ccode_node_unref0 (_tmp166_);
	_tmp169_ = iter_call;
	_tmp170_ = vala_ccode_constant_new ("\"{?*}\"");
	_tmp171_ = _tmp170_;
	vala_ccode_function_call_add_argument (_tmp169_, (ValaCCodeExpression*) _tmp171_);
	_vala_ccode_node_unref0 (_tmp171_);
	_tmp172_ = iter_call;
	_tmp173_ = serialized_key;
	vala_ccode_function_call_add_argument (_tmp172_, _tmp173_);
	_tmp174_ = iter_call;
	_tmp175_ = serialized_value;
	vala_ccode_function_call_add_argument (_tmp174_, _tmp175_);
	_tmp176_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp177_ = _tmp176_;
	_tmp178_ = iter_call;
	vala_ccode_function_add_expression (_tmp177_, (ValaCCodeExpression*) _tmp178_);
	_tmp179_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp180_ = _tmp179_;
	vala_ccode_function_close (_tmp180_);
	_tmp181_ = vala_ccode_identifier_new ("g_variant_builder_end");
	_tmp182_ = _tmp181_;
	_tmp183_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp182_);
	_vala_ccode_node_unref0 (iter_call);
	iter_call = _tmp183_;
	_vala_ccode_node_unref0 (_tmp182_);
	_tmp184_ = iter_call;
	_tmp185_ = subiter_name;
	_tmp186_ = vala_ccode_identifier_new (_tmp185_);
	_tmp187_ = _tmp186_;
	_tmp188_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp187_);
	_tmp189_ = _tmp188_;
	vala_ccode_function_call_add_argument (_tmp184_, (ValaCCodeExpression*) _tmp189_);
	_vala_ccode_node_unref0 (_tmp189_);
	_vala_ccode_node_unref0 (_tmp187_);
	result = (ValaCCodeExpression*) iter_call;
	_vala_ccode_node_unref0 (serialized_value);
	_vala_ccode_node_unref0 (serialized_key);
	_vala_ccode_node_unref0 (iter_next_call);
	_vala_ccode_node_unref0 (gvariant_type);
	_vala_ccode_node_unref0 (iter_init_call);
	_vala_code_node_unref0 (value_type);
	_vala_code_node_unref0 (key_type);
	_vala_iterable_unref0 (type_args);
	_g_free0 (value_name);
	_g_free0 (key_name);
	_g_free0 (tableiter_name);
	_g_free0 (subiter_name);
	return result;
}

static ValaCCodeExpression*
vala_gvariant_module_real_serialize_expression (ValaCCodeBaseModule* base,
                                                ValaDataType* type,
                                                ValaCCodeExpression* expr)
{
	ValaGVariantModule * self;
	ValaGVariantModuleBasicTypeInfo basic_type = {0};
	ValaCCodeExpression* _result_ = NULL;
	ValaTypeSymbol* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaCCodeExpression* _tmp44_;
	ValaCCodeExpression* result;
	self = (ValaGVariantModule*) base;
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_result_ = NULL;
	_tmp0_ = vala_data_type_get_type_symbol (type);
	_tmp1_ = _tmp0_;
	if (vala_gvariant_module_is_string_marshalled_enum (_tmp1_)) {
		ValaGVariantModuleBasicTypeInfo _tmp2_ = {0};
		ValaCCodeExpression* _tmp3_;
		ValaGVariantModuleBasicTypeInfo _tmp4_;
		ValaCCodeExpression* _tmp5_;
		ValaCCodeExpression* _tmp6_;
		vala_gvariant_module_get_basic_type_info (self, "s", &_tmp2_);
		basic_type = _tmp2_;
		_tmp3_ = vala_gvariant_module_generate_enum_value_to_string (self, G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ENUM_VALUE_TYPE) ? ((ValaEnumValueType*) type) : NULL, expr);
		_vala_ccode_node_unref0 (_result_);
		_result_ = _tmp3_;
		_tmp4_ = basic_type;
		_tmp5_ = _result_;
		_tmp6_ = vala_gvariant_module_serialize_basic (self, &_tmp4_, _tmp5_);
		_vala_ccode_node_unref0 (_result_);
		_result_ = _tmp6_;
	} else {
		gchar* _tmp7_;
		gchar* _tmp8_;
		ValaGVariantModuleBasicTypeInfo _tmp9_ = {0};
		gboolean _tmp10_;
		gboolean _tmp11_;
		_tmp7_ = vala_data_type_get_type_signature (type, NULL);
		_tmp8_ = _tmp7_;
		_tmp10_ = vala_gvariant_module_get_basic_type_info (self, _tmp8_, &_tmp9_);
		basic_type = _tmp9_;
		_tmp11_ = _tmp10_;
		_g_free0 (_tmp8_);
		if (_tmp11_) {
			ValaGVariantModuleBasicTypeInfo _tmp12_;
			ValaCCodeExpression* _tmp13_;
			_tmp12_ = basic_type;
			_tmp13_ = vala_gvariant_module_serialize_basic (self, &_tmp12_, expr);
			_vala_ccode_node_unref0 (_result_);
			_result_ = _tmp13_;
		} else {
			if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
				ValaCCodeExpression* _tmp14_;
				_tmp14_ = vala_gvariant_module_serialize_array (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType), expr);
				_vala_ccode_node_unref0 (_result_);
				_result_ = _tmp14_;
			} else {
				ValaTypeSymbol* _tmp15_;
				ValaTypeSymbol* _tmp16_;
				_tmp15_ = vala_data_type_get_type_symbol (type);
				_tmp16_ = _tmp15_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_STRUCT)) {
					ValaCCodeExpression* st_expr = NULL;
					ValaCCodeExpression* _tmp17_;
					gboolean _tmp18_;
					gboolean _tmp19_;
					ValaTypeSymbol* _tmp22_;
					ValaTypeSymbol* _tmp23_;
					ValaCCodeExpression* _tmp24_;
					ValaCCodeExpression* _tmp25_;
					_tmp17_ = _vala_ccode_node_ref0 (expr);
					st_expr = _tmp17_;
					_tmp18_ = vala_data_type_get_nullable (type);
					_tmp19_ = _tmp18_;
					if (_tmp19_) {
						ValaCCodeExpression* _tmp20_;
						ValaCCodeUnaryExpression* _tmp21_;
						_tmp20_ = st_expr;
						_tmp21_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp20_);
						_vala_ccode_node_unref0 (st_expr);
						st_expr = (ValaCCodeExpression*) _tmp21_;
					}
					_tmp22_ = vala_data_type_get_type_symbol (type);
					_tmp23_ = _tmp22_;
					_tmp24_ = st_expr;
					_tmp25_ = vala_gvariant_module_serialize_struct (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_STRUCT, ValaStruct), _tmp24_);
					_vala_ccode_node_unref0 (_result_);
					_result_ = _tmp25_;
					_vala_ccode_node_unref0 (st_expr);
				} else {
					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_OBJECT_TYPE)) {
						ValaTypeSymbol* _tmp26_;
						ValaTypeSymbol* _tmp27_;
						gchar* _tmp28_;
						gchar* _tmp29_;
						gboolean _tmp30_;
						_tmp26_ = vala_data_type_get_type_symbol (type);
						_tmp27_ = _tmp26_;
						_tmp28_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp27_);
						_tmp29_ = _tmp28_;
						_tmp30_ = g_strcmp0 (_tmp29_, "GLib.Variant") == 0;
						_g_free0 (_tmp29_);
						if (_tmp30_) {
							ValaCCodeFunctionCall* variant_new = NULL;
							ValaCCodeIdentifier* _tmp31_;
							ValaCCodeIdentifier* _tmp32_;
							ValaCCodeFunctionCall* _tmp33_;
							ValaCCodeFunctionCall* _tmp34_;
							ValaCCodeFunctionCall* _tmp35_;
							ValaCCodeFunctionCall* _tmp36_;
							ValaCCodeExpression* _tmp37_;
							_tmp31_ = vala_ccode_identifier_new ("g_variant_new_variant");
							_tmp32_ = _tmp31_;
							_tmp33_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp32_);
							_tmp34_ = _tmp33_;
							_vala_ccode_node_unref0 (_tmp32_);
							variant_new = _tmp34_;
							_tmp35_ = variant_new;
							vala_ccode_function_call_add_argument (_tmp35_, expr);
							_tmp36_ = variant_new;
							_tmp37_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp36_);
							_vala_ccode_node_unref0 (_result_);
							_result_ = _tmp37_;
							_vala_ccode_node_unref0 (variant_new);
						} else {
							ValaTypeSymbol* _tmp38_;
							ValaTypeSymbol* _tmp39_;
							gchar* _tmp40_;
							gchar* _tmp41_;
							gboolean _tmp42_;
							_tmp38_ = vala_data_type_get_type_symbol (type);
							_tmp39_ = _tmp38_;
							_tmp40_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp39_);
							_tmp41_ = _tmp40_;
							_tmp42_ = g_strcmp0 (_tmp41_, "GLib.HashTable") == 0;
							_g_free0 (_tmp41_);
							if (_tmp42_) {
								ValaCCodeExpression* _tmp43_;
								_tmp43_ = vala_gvariant_module_serialize_hash_table (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_OBJECT_TYPE, ValaObjectType), expr);
								_vala_ccode_node_unref0 (_result_);
								_result_ = _tmp43_;
							}
						}
					}
				}
			}
		}
	}
	_tmp44_ = _result_;
	if (_tmp44_ == NULL) {
		ValaSourceReference* _tmp45_;
		ValaSourceReference* _tmp46_;
		gchar* _tmp47_;
		gchar* _tmp48_;
		ValaCCodeInvalidExpression* _tmp49_;
		_tmp45_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
		_tmp46_ = _tmp45_;
		_tmp47_ = vala_code_node_to_string ((ValaCodeNode*) type);
		_tmp48_ = _tmp47_;
		vala_report_error (_tmp46_, "GVariant serialization of type `%s' is not supported", _tmp48_);
		_g_free0 (_tmp48_);
		_tmp49_ = vala_ccode_invalid_expression_new ();
		result = (ValaCCodeExpression*) _tmp49_;
		_vala_ccode_node_unref0 (_result_);
		return result;
	}
	result = _result_;
	return result;
}

void
vala_gvariant_module_write_expression (ValaGVariantModule* self,
                                       ValaDataType* type,
                                       ValaCCodeExpression* builder_expr,
                                       ValaCCodeExpression* expr,
                                       ValaSymbol* sym)
{
	ValaCCodeExpression* variant_expr = NULL;
	ValaCCodeExpression* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaCCodeExpression* _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type != NULL);
	g_return_if_fail (builder_expr != NULL);
	g_return_if_fail (expr != NULL);
	_tmp0_ = _vala_ccode_node_ref0 (expr);
	variant_expr = _tmp0_;
	if (sym == NULL) {
		_tmp1_ = TRUE;
	} else {
		gchar* _tmp2_;
		gchar* _tmp3_;
		_tmp2_ = vala_gvariant_module_get_dbus_signature (sym);
		_tmp3_ = _tmp2_;
		_tmp1_ = _tmp3_ == NULL;
		_g_free0 (_tmp3_);
	}
	if (_tmp1_) {
		ValaCCodeExpression* _tmp4_;
		_tmp4_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, type, expr);
		_vala_ccode_node_unref0 (variant_expr);
		variant_expr = _tmp4_;
	}
	_tmp5_ = variant_expr;
	if (_tmp5_ != NULL) {
		ValaCCodeFunctionCall* builder_add = NULL;
		ValaCCodeIdentifier* _tmp6_;
		ValaCCodeIdentifier* _tmp7_;
		ValaCCodeFunctionCall* _tmp8_;
		ValaCCodeFunctionCall* _tmp9_;
		ValaCCodeFunctionCall* _tmp10_;
		ValaCCodeUnaryExpression* _tmp11_;
		ValaCCodeUnaryExpression* _tmp12_;
		ValaCCodeFunctionCall* _tmp13_;
		ValaCCodeExpression* _tmp14_;
		ValaCCodeFunction* _tmp15_;
		ValaCCodeFunction* _tmp16_;
		ValaCCodeFunctionCall* _tmp17_;
		_tmp6_ = vala_ccode_identifier_new ("g_variant_builder_add_value");
		_tmp7_ = _tmp6_;
		_tmp8_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp7_);
		_tmp9_ = _tmp8_;
		_vala_ccode_node_unref0 (_tmp7_);
		builder_add = _tmp9_;
		_tmp10_ = builder_add;
		_tmp11_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, builder_expr);
		_tmp12_ = _tmp11_;
		vala_ccode_function_call_add_argument (_tmp10_, (ValaCCodeExpression*) _tmp12_);
		_vala_ccode_node_unref0 (_tmp12_);
		_tmp13_ = builder_add;
		_tmp14_ = variant_expr;
		vala_ccode_function_call_add_argument (_tmp13_, _tmp14_);
		_tmp15_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp16_ = _tmp15_;
		_tmp17_ = builder_add;
		vala_ccode_function_add_expression (_tmp16_, (ValaCCodeExpression*) _tmp17_);
		_vala_ccode_node_unref0 (builder_add);
	}
	_vala_ccode_node_unref0 (variant_expr);
}

ValaGVariantModule*
vala_gvariant_module_construct (GType object_type)
{
	ValaGVariantModule* self = NULL;
	self = (ValaGVariantModule*) vala_gvalue_module_construct (object_type);
	return self;
}

ValaGVariantModule*
vala_gvariant_module_new (void)
{
	return vala_gvariant_module_construct (VALA_TYPE_GVARIANT_MODULE);
}

static ValaGVariantModuleBasicTypeInfo*
vala_gvariant_module_basic_type_info_dup (const ValaGVariantModuleBasicTypeInfo* self)
{
	ValaGVariantModuleBasicTypeInfo* dup;
	dup = g_new0 (ValaGVariantModuleBasicTypeInfo, 1);
	memcpy (dup, self, sizeof (ValaGVariantModuleBasicTypeInfo));
	return dup;
}

static void
vala_gvariant_module_basic_type_info_free (ValaGVariantModuleBasicTypeInfo* self)
{
	g_free (self);
}

static GType
vala_gvariant_module_basic_type_info_get_type_once (void)
{
	GType vala_gvariant_module_basic_type_info_type_id;
	vala_gvariant_module_basic_type_info_type_id = g_boxed_type_register_static ("ValaGVariantModuleBasicTypeInfo", (GBoxedCopyFunc) vala_gvariant_module_basic_type_info_dup, (GBoxedFreeFunc) vala_gvariant_module_basic_type_info_free);
	return vala_gvariant_module_basic_type_info_type_id;
}

static GType
vala_gvariant_module_basic_type_info_get_type (void)
{
	static volatile gsize vala_gvariant_module_basic_type_info_type_id__once = 0;
	if (g_once_init_enter (&vala_gvariant_module_basic_type_info_type_id__once)) {
		GType vala_gvariant_module_basic_type_info_type_id;
		vala_gvariant_module_basic_type_info_type_id = vala_gvariant_module_basic_type_info_get_type_once ();
		g_once_init_leave (&vala_gvariant_module_basic_type_info_type_id__once, vala_gvariant_module_basic_type_info_type_id);
	}
	return vala_gvariant_module_basic_type_info_type_id__once;
}

static void
vala_gvariant_module_class_init (ValaGVariantModuleClass * klass,
                                 gpointer klass_data)
{
	vala_gvariant_module_parent_class = g_type_class_peek_parent (klass);
	((ValaCodeVisitorClass *) klass)->finalize = vala_gvariant_module_finalize;
	g_type_class_adjust_private_offset (klass, &ValaGVariantModule_private_offset);
	((ValaCodeVisitorClass *) klass)->visit_enum = (void (*) (ValaCodeVisitor*, ValaEnum*)) vala_gvariant_module_real_visit_enum;
	((ValaCCodeBaseModuleClass *) klass)->generate_enum_declaration = (gboolean (*) (ValaCCodeBaseModule*, ValaEnum*, ValaCCodeFile*)) vala_gvariant_module_real_generate_enum_declaration;
	((ValaCodeVisitorClass *) klass)->visit_cast_expression = (void (*) (ValaCodeVisitor*, ValaCastExpression*)) vala_gvariant_module_real_visit_cast_expression;
	((ValaCCodeBaseModuleClass *) klass)->deserialize_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaCCodeExpression*, ValaCCodeExpression*, ValaCCodeExpression*, gboolean*)) vala_gvariant_module_real_deserialize_expression;
	((ValaCCodeBaseModuleClass *) klass)->serialize_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaCCodeExpression*)) vala_gvariant_module_real_serialize_expression;
}

static void
vala_gvariant_module_instance_init (ValaGVariantModule * self,
                                    gpointer klass)
{
	self->priv = vala_gvariant_module_get_instance_private (self);
	self->priv->next_variant_function_id = 0;
}

static void
vala_gvariant_module_finalize (ValaCodeVisitor * obj)
{
	ValaGVariantModule * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_GVARIANT_MODULE, ValaGVariantModule);
	VALA_CODE_VISITOR_CLASS (vala_gvariant_module_parent_class)->finalize (obj);
}

static GType
vala_gvariant_module_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ValaGVariantModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gvariant_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGVariantModule), 0, (GInstanceInitFunc) vala_gvariant_module_instance_init, NULL };
	GType vala_gvariant_module_type_id;
	vala_gvariant_module_type_id = g_type_register_static (VALA_TYPE_GVALUE_MODULE, "ValaGVariantModule", &g_define_type_info, 0);
	ValaGVariantModule_private_offset = g_type_add_instance_private (vala_gvariant_module_type_id, sizeof (ValaGVariantModulePrivate));
	return vala_gvariant_module_type_id;
}

GType
vala_gvariant_module_get_type (void)
{
	static volatile gsize vala_gvariant_module_type_id__once = 0;
	if (g_once_init_enter (&vala_gvariant_module_type_id__once)) {
		GType vala_gvariant_module_type_id;
		vala_gvariant_module_type_id = vala_gvariant_module_get_type_once ();
		g_once_init_leave (&vala_gvariant_module_type_id__once, vala_gvariant_module_type_id);
	}
	return vala_gvariant_module_type_id__once;
}

