/* 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 <glib.h>
#include <glib-object.h>
#include "valacodegen.h"
#include <vala.h>
#include <valaccode.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_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
#define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);

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


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 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 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 gboolean vala_gvariant_module_is_string_marshalled_enum (ValaTypeSymbol* symbol) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	ValaTypeSymbol* _tmp1_;
	_tmp1_ = symbol;
	if (_tmp1_ != NULL) {
		ValaTypeSymbol* _tmp2_;
		_tmp2_ = symbol;
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_ENUM);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaTypeSymbol* _tmp3_;
		gboolean _tmp4_;
		_tmp3_ = symbol;
		_tmp4_ = vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp3_, "DBus", "use_string_marshalling", FALSE);
		result = _tmp4_;
		return result;
	}
	result = FALSE;
	return result;
}


static gchar* vala_gvariant_module_get_dbus_value (ValaGVariantModule* self, ValaEnumValue* value, const gchar* default_value) {
	gchar* result = NULL;
	gchar* dbus_value = NULL;
	ValaEnumValue* _tmp0_;
	gchar* _tmp1_;
	const gchar* _tmp2_;
	const gchar* _tmp3_;
	gchar* _tmp4_;
	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_ = value;
	_tmp1_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp0_, "DBus", "value", NULL);
	dbus_value = _tmp1_;
	_tmp2_ = dbus_value;
	if (_tmp2_ != NULL) {
		result = dbus_value;
		return result;
	}
	_tmp3_ = default_value;
	_tmp4_ = g_strdup (_tmp3_);
	result = _tmp4_;
	_g_free0 (dbus_value);
	return result;
}


gchar* vala_gvariant_module_get_dbus_signature (ValaSymbol* symbol) {
	gchar* result = NULL;
	ValaSymbol* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (symbol != NULL, NULL);
	_tmp0_ = symbol;
	_tmp1_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp0_, "DBus", "signature", NULL);
	result = _tmp1_;
	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 = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (signature != NULL, FALSE);
	{
		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 < G_N_ELEMENTS (VALA_GVARIANT_MODULE_basic_types); info_it = info_it + 1) {
			ValaGVariantModuleBasicTypeInfo info = {0};
			info = info_collection[info_it];
			{
				ValaGVariantModuleBasicTypeInfo _tmp0_;
				const gchar* _tmp1_;
				const gchar* _tmp2_;
				_tmp0_ = info;
				_tmp1_ = _tmp0_.signature;
				_tmp2_ = signature;
				if (g_strcmp0 (_tmp1_, _tmp2_) == 0) {
					ValaGVariantModuleBasicTypeInfo _tmp3_;
					_tmp3_ = info;
					_vala_basic_type = _tmp3_;
					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 gpointer _vala_code_node_ref0 (gpointer self) {
	return self ? vala_code_node_ref (self) : NULL;
}


static gboolean string_contains (const gchar* self, const gchar* needle) {
	gboolean result = FALSE;
	const gchar* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (needle != NULL, FALSE);
	_tmp0_ = needle;
	_tmp1_ = strstr ((gchar*) self, (gchar*) _tmp0_);
	result = _tmp1_ != NULL;
	return result;
}


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


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


gchar* vala_gvariant_module_get_type_signature (ValaDataType* datatype, ValaSymbol* symbol) {
	gchar* result = NULL;
	ValaSymbol* _tmp0_;
	ValaArrayType* array_type = NULL;
	ValaDataType* _tmp4_;
	ValaArrayType* _tmp5_;
	ValaArrayType* _tmp6_;
	g_return_val_if_fail (datatype != NULL, NULL);
	_tmp0_ = symbol;
	if (_tmp0_ != NULL) {
		gchar* sig = NULL;
		ValaSymbol* _tmp1_;
		gchar* _tmp2_;
		const gchar* _tmp3_;
		_tmp1_ = symbol;
		_tmp2_ = vala_gvariant_module_get_dbus_signature (_tmp1_);
		sig = _tmp2_;
		_tmp3_ = sig;
		if (_tmp3_ != NULL) {
			result = sig;
			return result;
		}
		_g_free0 (sig);
	}
	_tmp4_ = datatype;
	_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp4_) : NULL);
	array_type = _tmp5_;
	_tmp6_ = array_type;
	if (_tmp6_ != NULL) {
		gchar* element_type_signature = NULL;
		ValaArrayType* _tmp7_;
		ValaDataType* _tmp8_;
		ValaDataType* _tmp9_;
		gchar* _tmp10_;
		const gchar* _tmp11_;
		ValaArrayType* _tmp12_;
		gint _tmp13_;
		gint _tmp14_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		const gchar* _tmp17_;
		gchar* _tmp18_;
		gchar* _tmp19_;
		_tmp7_ = array_type;
		_tmp8_ = vala_array_type_get_element_type (_tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = vala_gvariant_module_get_type_signature (_tmp9_, NULL);
		element_type_signature = _tmp10_;
		_tmp11_ = element_type_signature;
		if (_tmp11_ == NULL) {
			result = NULL;
			_g_free0 (element_type_signature);
			_vala_code_node_unref0 (array_type);
			return result;
		}
		_tmp12_ = array_type;
		_tmp13_ = vala_array_type_get_rank (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = g_strnfill ((gsize) _tmp14_, 'a');
		_tmp16_ = _tmp15_;
		_tmp17_ = element_type_signature;
		_tmp18_ = g_strconcat (_tmp16_, _tmp17_, NULL);
		_tmp19_ = _tmp18_;
		_g_free0 (_tmp16_);
		result = _tmp19_;
		_g_free0 (element_type_signature);
		_vala_code_node_unref0 (array_type);
		return result;
	} else {
		ValaDataType* _tmp20_;
		ValaTypeSymbol* _tmp21_;
		ValaTypeSymbol* _tmp22_;
		gboolean _tmp23_;
		_tmp20_ = datatype;
		_tmp21_ = vala_data_type_get_data_type (_tmp20_);
		_tmp22_ = _tmp21_;
		_tmp23_ = vala_gvariant_module_is_string_marshalled_enum (_tmp22_);
		if (_tmp23_) {
			gchar* _tmp24_;
			_tmp24_ = g_strdup ("s");
			result = _tmp24_;
			_vala_code_node_unref0 (array_type);
			return result;
		} else {
			ValaDataType* _tmp25_;
			ValaTypeSymbol* _tmp26_;
			ValaTypeSymbol* _tmp27_;
			_tmp25_ = datatype;
			_tmp26_ = vala_data_type_get_data_type (_tmp25_);
			_tmp27_ = _tmp26_;
			if (_tmp27_ != NULL) {
				gchar* sig = NULL;
				ValaDataType* _tmp28_;
				ValaTypeSymbol* _tmp29_;
				ValaTypeSymbol* _tmp30_;
				gchar* _tmp31_;
				ValaStruct* st = NULL;
				ValaDataType* _tmp32_;
				ValaTypeSymbol* _tmp33_;
				ValaTypeSymbol* _tmp34_;
				ValaStruct* _tmp35_;
				ValaEnum* en = NULL;
				ValaDataType* _tmp36_;
				ValaTypeSymbol* _tmp37_;
				ValaTypeSymbol* _tmp38_;
				ValaEnum* _tmp39_;
				gboolean _tmp40_ = FALSE;
				const gchar* _tmp41_;
				ValaList* type_args = NULL;
				ValaDataType* _tmp78_;
				ValaList* _tmp79_;
				gboolean _tmp80_ = FALSE;
				gboolean _tmp81_ = FALSE;
				const gchar* _tmp82_;
				gboolean _tmp109_ = FALSE;
				const gchar* _tmp110_;
				_tmp28_ = datatype;
				_tmp29_ = vala_data_type_get_data_type (_tmp28_);
				_tmp30_ = _tmp29_;
				_tmp31_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp30_, "CCode", "type_signature", NULL);
				sig = _tmp31_;
				_tmp32_ = datatype;
				_tmp33_ = vala_data_type_get_data_type (_tmp32_);
				_tmp34_ = _tmp33_;
				_tmp35_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp34_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp34_) : NULL);
				st = _tmp35_;
				_tmp36_ = datatype;
				_tmp37_ = vala_data_type_get_data_type (_tmp36_);
				_tmp38_ = _tmp37_;
				_tmp39_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, VALA_TYPE_ENUM) ? ((ValaEnum*) _tmp38_) : NULL);
				en = _tmp39_;
				_tmp41_ = sig;
				if (_tmp41_ == NULL) {
					ValaStruct* _tmp42_;
					_tmp42_ = st;
					_tmp40_ = _tmp42_ != NULL;
				} else {
					_tmp40_ = FALSE;
				}
				if (_tmp40_) {
					GString* str = NULL;
					GString* _tmp43_;
					GString* _tmp44_;
					GString* _tmp66_;
					GString* _tmp67_;
					const gchar* _tmp68_;
					gchar* _tmp69_;
					_tmp43_ = g_string_new ("");
					str = _tmp43_;
					_tmp44_ = str;
					g_string_append_c (_tmp44_, '(');
					{
						ValaList* _f_list = NULL;
						ValaStruct* _tmp45_;
						ValaList* _tmp46_;
						gint _f_size = 0;
						ValaList* _tmp47_;
						gint _tmp48_;
						gint _tmp49_;
						gint _f_index = 0;
						_tmp45_ = st;
						_tmp46_ = vala_struct_get_fields (_tmp45_);
						_f_list = _tmp46_;
						_tmp47_ = _f_list;
						_tmp48_ = vala_collection_get_size ((ValaCollection*) _tmp47_);
						_tmp49_ = _tmp48_;
						_f_size = _tmp49_;
						_f_index = -1;
						while (TRUE) {
							gint _tmp50_;
							gint _tmp51_;
							gint _tmp52_;
							ValaField* f = NULL;
							ValaList* _tmp53_;
							gint _tmp54_;
							gpointer _tmp55_;
							ValaField* _tmp56_;
							ValaMemberBinding _tmp57_;
							ValaMemberBinding _tmp58_;
							_tmp50_ = _f_index;
							_f_index = _tmp50_ + 1;
							_tmp51_ = _f_index;
							_tmp52_ = _f_size;
							if (!(_tmp51_ < _tmp52_)) {
								break;
							}
							_tmp53_ = _f_list;
							_tmp54_ = _f_index;
							_tmp55_ = vala_list_get (_tmp53_, _tmp54_);
							f = (ValaField*) _tmp55_;
							_tmp56_ = f;
							_tmp57_ = vala_field_get_binding (_tmp56_);
							_tmp58_ = _tmp57_;
							if (_tmp58_ == VALA_MEMBER_BINDING_INSTANCE) {
								GString* _tmp59_;
								ValaField* _tmp60_;
								ValaDataType* _tmp61_;
								ValaDataType* _tmp62_;
								ValaField* _tmp63_;
								gchar* _tmp64_;
								gchar* _tmp65_;
								_tmp59_ = str;
								_tmp60_ = f;
								_tmp61_ = vala_variable_get_variable_type ((ValaVariable*) _tmp60_);
								_tmp62_ = _tmp61_;
								_tmp63_ = f;
								_tmp64_ = vala_gvariant_module_get_type_signature (_tmp62_, (ValaSymbol*) _tmp63_);
								_tmp65_ = _tmp64_;
								g_string_append (_tmp59_, _tmp65_);
								_g_free0 (_tmp65_);
							}
							_vala_code_node_unref0 (f);
						}
						_vala_iterable_unref0 (_f_list);
					}
					_tmp66_ = str;
					g_string_append_c (_tmp66_, ')');
					_tmp67_ = str;
					_tmp68_ = _tmp67_->str;
					_tmp69_ = g_strdup (_tmp68_);
					_g_free0 (sig);
					sig = _tmp69_;
					_g_string_free0 (str);
				} else {
					gboolean _tmp70_ = FALSE;
					const gchar* _tmp71_;
					_tmp71_ = sig;
					if (_tmp71_ == NULL) {
						ValaEnum* _tmp72_;
						_tmp72_ = en;
						_tmp70_ = _tmp72_ != NULL;
					} else {
						_tmp70_ = FALSE;
					}
					if (_tmp70_) {
						ValaEnum* _tmp73_;
						gboolean _tmp74_;
						gboolean _tmp75_;
						_tmp73_ = en;
						_tmp74_ = vala_enum_get_is_flags (_tmp73_);
						_tmp75_ = _tmp74_;
						if (_tmp75_) {
							gchar* _tmp76_;
							_tmp76_ = g_strdup ("u");
							result = _tmp76_;
							_vala_code_node_unref0 (en);
							_vala_code_node_unref0 (st);
							_g_free0 (sig);
							_vala_code_node_unref0 (array_type);
							return result;
						} else {
							gchar* _tmp77_;
							_tmp77_ = g_strdup ("i");
							result = _tmp77_;
							_vala_code_node_unref0 (en);
							_vala_code_node_unref0 (st);
							_g_free0 (sig);
							_vala_code_node_unref0 (array_type);
							return result;
						}
					}
				}
				_tmp78_ = datatype;
				_tmp79_ = vala_data_type_get_type_arguments (_tmp78_);
				type_args = _tmp79_;
				_tmp82_ = sig;
				if (_tmp82_ != NULL) {
					const gchar* _tmp83_;
					gboolean _tmp84_;
					_tmp83_ = sig;
					_tmp84_ = string_contains (_tmp83_, "%s");
					_tmp81_ = _tmp84_;
				} else {
					_tmp81_ = FALSE;
				}
				if (_tmp81_) {
					ValaList* _tmp85_;
					gint _tmp86_;
					gint _tmp87_;
					_tmp85_ = type_args;
					_tmp86_ = vala_collection_get_size ((ValaCollection*) _tmp85_);
					_tmp87_ = _tmp86_;
					_tmp80_ = _tmp87_ > 0;
				} else {
					_tmp80_ = FALSE;
				}
				if (_tmp80_) {
					gchar* element_sig = NULL;
					gchar* _tmp88_;
					const gchar* _tmp106_;
					const gchar* _tmp107_;
					gchar* _tmp108_;
					_tmp88_ = g_strdup ("");
					element_sig = _tmp88_;
					{
						ValaList* _type_arg_list = NULL;
						ValaList* _tmp89_;
						ValaList* _tmp90_;
						gint _type_arg_size = 0;
						ValaList* _tmp91_;
						gint _tmp92_;
						gint _tmp93_;
						gint _type_arg_index = 0;
						_tmp89_ = type_args;
						_tmp90_ = _vala_iterable_ref0 (_tmp89_);
						_type_arg_list = _tmp90_;
						_tmp91_ = _type_arg_list;
						_tmp92_ = vala_collection_get_size ((ValaCollection*) _tmp91_);
						_tmp93_ = _tmp92_;
						_type_arg_size = _tmp93_;
						_type_arg_index = -1;
						while (TRUE) {
							gint _tmp94_;
							gint _tmp95_;
							gint _tmp96_;
							ValaDataType* type_arg = NULL;
							ValaList* _tmp97_;
							gint _tmp98_;
							gpointer _tmp99_;
							gchar* s = NULL;
							ValaDataType* _tmp100_;
							gchar* _tmp101_;
							const gchar* _tmp102_;
							_tmp94_ = _type_arg_index;
							_type_arg_index = _tmp94_ + 1;
							_tmp95_ = _type_arg_index;
							_tmp96_ = _type_arg_size;
							if (!(_tmp95_ < _tmp96_)) {
								break;
							}
							_tmp97_ = _type_arg_list;
							_tmp98_ = _type_arg_index;
							_tmp99_ = vala_list_get (_tmp97_, _tmp98_);
							type_arg = (ValaDataType*) _tmp99_;
							_tmp100_ = type_arg;
							_tmp101_ = vala_gvariant_module_get_type_signature (_tmp100_, NULL);
							s = _tmp101_;
							_tmp102_ = s;
							if (_tmp102_ != NULL) {
								const gchar* _tmp103_;
								const gchar* _tmp104_;
								gchar* _tmp105_;
								_tmp103_ = element_sig;
								_tmp104_ = s;
								_tmp105_ = g_strconcat (_tmp103_, _tmp104_, NULL);
								_g_free0 (element_sig);
								element_sig = _tmp105_;
							}
							_g_free0 (s);
							_vala_code_node_unref0 (type_arg);
						}
						_vala_iterable_unref0 (_type_arg_list);
					}
					_tmp106_ = sig;
					_tmp107_ = element_sig;
					_tmp108_ = string_replace (_tmp106_, "%s", _tmp107_);
					_g_free0 (sig);
					sig = _tmp108_;
					_g_free0 (element_sig);
				}
				_tmp110_ = sig;
				if (_tmp110_ == NULL) {
					gboolean _tmp111_ = FALSE;
					gboolean _tmp112_ = FALSE;
					ValaDataType* _tmp113_;
					ValaTypeSymbol* _tmp114_;
					ValaTypeSymbol* _tmp115_;
					gchar* _tmp116_;
					gchar* _tmp117_;
					gboolean _tmp118_;
					_tmp113_ = datatype;
					_tmp114_ = vala_data_type_get_data_type (_tmp113_);
					_tmp115_ = _tmp114_;
					_tmp116_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp115_);
					_tmp117_ = _tmp116_;
					_tmp118_ = g_strcmp0 (_tmp117_, "GLib.UnixInputStream") == 0;
					_g_free0 (_tmp117_);
					if (_tmp118_) {
						_tmp112_ = TRUE;
					} else {
						ValaDataType* _tmp119_;
						ValaTypeSymbol* _tmp120_;
						ValaTypeSymbol* _tmp121_;
						gchar* _tmp122_;
						gchar* _tmp123_;
						_tmp119_ = datatype;
						_tmp120_ = vala_data_type_get_data_type (_tmp119_);
						_tmp121_ = _tmp120_;
						_tmp122_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp121_);
						_tmp123_ = _tmp122_;
						_tmp112_ = g_strcmp0 (_tmp123_, "GLib.UnixOutputStream") == 0;
						_g_free0 (_tmp123_);
					}
					if (_tmp112_) {
						_tmp111_ = TRUE;
					} else {
						ValaDataType* _tmp124_;
						ValaTypeSymbol* _tmp125_;
						ValaTypeSymbol* _tmp126_;
						gchar* _tmp127_;
						gchar* _tmp128_;
						_tmp124_ = datatype;
						_tmp125_ = vala_data_type_get_data_type (_tmp124_);
						_tmp126_ = _tmp125_;
						_tmp127_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp126_);
						_tmp128_ = _tmp127_;
						_tmp111_ = g_strcmp0 (_tmp128_, "GLib.Socket") == 0;
						_g_free0 (_tmp128_);
					}
					_tmp109_ = _tmp111_;
				} else {
					_tmp109_ = FALSE;
				}
				if (_tmp109_) {
					gchar* _tmp129_;
					_tmp129_ = g_strdup ("h");
					result = _tmp129_;
					_vala_iterable_unref0 (type_args);
					_vala_code_node_unref0 (en);
					_vala_code_node_unref0 (st);
					_g_free0 (sig);
					_vala_code_node_unref0 (array_type);
					return result;
				}
				result = sig;
				_vala_iterable_unref0 (type_args);
				_vala_code_node_unref0 (en);
				_vala_code_node_unref0 (st);
				_vala_code_node_unref0 (array_type);
				return result;
			} else {
				result = NULL;
				_vala_code_node_unref0 (array_type);
				return result;
			}
		}
	}
	_vala_code_node_unref0 (array_type);
}


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


static gboolean vala_gvariant_module_real_generate_enum_declaration (ValaCCodeBaseModule* base, ValaEnum* en, ValaCCodeFile* decl_space) {
	ValaGVariantModule * self;
	gboolean result = FALSE;
	ValaEnum* _tmp0_;
	ValaCCodeFile* _tmp1_;
	gboolean _tmp2_;
	self = (ValaGVariantModule*) base;
	g_return_val_if_fail (en != NULL, FALSE);
	g_return_val_if_fail (decl_space != NULL, FALSE);
	_tmp0_ = en;
	_tmp1_ = decl_space;
	_tmp2_ = VALA_CCODE_BASE_MODULE_CLASS (vala_gvariant_module_parent_class)->generate_enum_declaration ((ValaCCodeBaseModule*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_GASYNC_MODULE, ValaGAsyncModule), _tmp0_, _tmp1_);
	if (_tmp2_) {
		ValaEnum* _tmp3_;
		gboolean _tmp4_;
		_tmp3_ = en;
		_tmp4_ = vala_gvariant_module_is_string_marshalled_enum ((ValaTypeSymbol*) _tmp3_);
		if (_tmp4_) {
			ValaCCodeFile* _tmp5_;
			ValaEnum* _tmp6_;
			ValaCCodeFunction* _tmp7_;
			ValaCCodeFunction* _tmp8_;
			ValaCCodeFile* _tmp9_;
			ValaEnum* _tmp10_;
			ValaCCodeFunction* _tmp11_;
			ValaCCodeFunction* _tmp12_;
			_tmp5_ = decl_space;
			_tmp6_ = en;
			_tmp7_ = vala_gvariant_module_generate_enum_from_string_function_declaration (self, _tmp6_);
			_tmp8_ = _tmp7_;
			vala_ccode_file_add_function_declaration (_tmp5_, _tmp8_);
			_vala_ccode_node_unref0 (_tmp8_);
			_tmp9_ = decl_space;
			_tmp10_ = en;
			_tmp11_ = vala_gvariant_module_generate_enum_to_string_function_declaration (self, _tmp10_);
			_tmp12_ = _tmp11_;
			vala_ccode_file_add_function_declaration (_tmp9_, _tmp12_);
			_vala_ccode_node_unref0 (_tmp12_);
		}
		result = TRUE;
		return result;
	}
	result = FALSE;
	return result;
}


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


static ValaCCodeExpression* vala_gvariant_module_generate_enum_value_from_string (ValaGVariantModule* self, ValaEnumValueType* type, ValaCCodeExpression* expr, ValaCCodeExpression* error_expr) {
	ValaCCodeExpression* result = NULL;
	ValaEnum* en = NULL;
	ValaEnumValueType* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	ValaEnum* _tmp3_;
	gchar* from_string_name = NULL;
	ValaEnum* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	ValaCCodeFunctionCall* from_string_call = NULL;
	const gchar* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeIdentifier* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaCCodeFunctionCall* _tmp13_;
	ValaCCodeFunctionCall* _tmp14_;
	ValaCCodeExpression* _tmp15_;
	ValaCCodeExpression* _tmp16_ = NULL;
	ValaCCodeExpression* _tmp17_;
	ValaCCodeFunctionCall* _tmp21_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = type;
	_tmp1_ = vala_value_type_get_type_symbol ((ValaValueType*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_ENUM) ? ((ValaEnum*) _tmp2_) : NULL);
	en = _tmp3_;
	_tmp4_ = en;
	_tmp5_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp4_, NULL);
	_tmp6_ = _tmp5_;
	_tmp7_ = g_strdup_printf ("%s_from_string", _tmp6_);
	_tmp8_ = _tmp7_;
	_g_free0 (_tmp6_);
	from_string_name = _tmp8_;
	_tmp9_ = from_string_name;
	_tmp10_ = vala_ccode_identifier_new (_tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp11_);
	_tmp13_ = _tmp12_;
	_vala_ccode_node_unref0 (_tmp11_);
	from_string_call = _tmp13_;
	_tmp14_ = from_string_call;
	_tmp15_ = expr;
	vala_ccode_function_call_add_argument (_tmp14_, _tmp15_);
	_tmp17_ = error_expr;
	if (_tmp17_ != NULL) {
		ValaCCodeExpression* _tmp18_;
		ValaCCodeExpression* _tmp19_;
		_tmp18_ = error_expr;
		_tmp19_ = _vala_ccode_node_ref0 (_tmp18_);
		_vala_ccode_node_unref0 (_tmp16_);
		_tmp16_ = _tmp19_;
	} else {
		ValaCCodeConstant* _tmp20_;
		_tmp20_ = vala_ccode_constant_new ("NULL");
		_vala_ccode_node_unref0 (_tmp16_);
		_tmp16_ = (ValaCCodeExpression*) _tmp20_;
	}
	_tmp21_ = from_string_call;
	vala_ccode_function_call_add_argument (_tmp21_, _tmp16_);
	result = (ValaCCodeExpression*) from_string_call;
	_vala_ccode_node_unref0 (_tmp16_);
	_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) {
	ValaCCodeFunction* result = NULL;
	gchar* from_string_name = NULL;
	ValaEnum* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaCCodeFunction* from_string_func = NULL;
	ValaEnum* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	ValaCCodeFunction* _tmp8_;
	ValaCCodeFunction* _tmp9_;
	ValaCCodeParameter* _tmp10_;
	ValaCCodeParameter* _tmp11_;
	ValaCCodeParameter* _tmp12_;
	ValaCCodeParameter* _tmp13_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (en != NULL, NULL);
	_tmp0_ = en;
	_tmp1_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp0_, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_from_string", _tmp2_);
	_tmp4_ = _tmp3_;
	_g_free0 (_tmp2_);
	from_string_name = _tmp4_;
	_tmp5_ = en;
	_tmp6_ = vala_get_ccode_name ((ValaCodeNode*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_ccode_function_new (from_string_name, _tmp7_);
	_tmp9_ = _tmp8_;
	_g_free0 (_tmp7_);
	from_string_func = _tmp9_;
	_tmp10_ = vala_ccode_parameter_new ("str", "const char*");
	_tmp11_ = _tmp10_;
	vala_ccode_function_add_parameter (from_string_func, _tmp11_);
	_vala_ccode_node_unref0 (_tmp11_);
	_tmp12_ = vala_ccode_parameter_new ("error", "GError**");
	_tmp13_ = _tmp12_;
	vala_ccode_function_add_parameter (from_string_func, _tmp13_);
	_vala_ccode_node_unref0 (_tmp13_);
	result = from_string_func;
	_g_free0 (from_string_name);
	return result;
}


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


static ValaCCodeExpression* vala_gvariant_module_deserialize_array (ValaGVariantModule* self, ValaArrayType* array_type, ValaCCodeExpression* variant_expr, ValaCCodeExpression* expr) {
	ValaCCodeExpression* result = NULL;
	gboolean _tmp0_ = FALSE;
	ValaArrayType* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	gchar* temp_name = NULL;
	gint _tmp11_;
	gint _tmp12_;
	gchar* _tmp13_;
	ValaCCodeFunctionCall* new_call = NULL;
	ValaCCodeIdentifier* _tmp14_;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeFunctionCall* _tmp16_;
	ValaCCodeFunctionCall* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaArrayType* _tmp19_;
	ValaDataType* _tmp20_;
	ValaDataType* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeFunctionCall* _tmp26_;
	ValaCCodeConstant* _tmp27_;
	ValaCCodeConstant* _tmp28_;
	ValaCCodeFunction* _tmp29_;
	ValaCCodeFunction* _tmp30_;
	ValaArrayType* _tmp31_;
	gchar* _tmp32_;
	gchar* _tmp33_;
	const gchar* _tmp34_;
	ValaCCodeFunctionCall* _tmp35_;
	ValaCCodeVariableDeclarator* _tmp36_;
	ValaCCodeVariableDeclarator* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	const gchar* _tmp40_;
	gchar* _tmp41_;
	gchar* _tmp42_;
	ValaCCodeConstant* _tmp43_;
	ValaCCodeConstant* _tmp44_;
	ValaCCodeVariableDeclarator* _tmp45_;
	ValaCCodeVariableDeclarator* _tmp46_;
	ValaCCodeFunction* _tmp47_;
	ValaCCodeFunction* _tmp48_;
	const gchar* _tmp49_;
	gchar* _tmp50_;
	gchar* _tmp51_;
	ValaCCodeConstant* _tmp52_;
	ValaCCodeConstant* _tmp53_;
	ValaCCodeVariableDeclarator* _tmp54_;
	ValaCCodeVariableDeclarator* _tmp55_;
	ValaArrayType* _tmp56_;
	const gchar* _tmp57_;
	ValaCCodeExpression* _tmp58_;
	ValaCCodeExpression* _tmp59_;
	ValaArrayType* _tmp60_;
	ValaDataType* _tmp61_;
	ValaDataType* _tmp62_;
	gboolean _tmp63_;
	const gchar* _tmp80_;
	ValaCCodeIdentifier* _tmp81_;
	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_ = array_type;
	_tmp2_ = vala_array_type_get_rank (_tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ == 1) {
		ValaArrayType* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		_tmp4_ = array_type;
		_tmp5_ = vala_gvariant_module_get_type_signature ((ValaDataType*) _tmp4_, NULL);
		_tmp6_ = _tmp5_;
		_tmp0_ = g_strcmp0 (_tmp6_, "ay") == 0;
		_g_free0 (_tmp6_);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaArrayType* _tmp7_;
		ValaCCodeExpression* _tmp8_;
		ValaCCodeExpression* _tmp9_;
		ValaCCodeExpression* _tmp10_;
		_tmp7_ = array_type;
		_tmp8_ = variant_expr;
		_tmp9_ = expr;
		_tmp10_ = vala_gvariant_module_deserialize_buffer_array (self, _tmp7_, _tmp8_, _tmp9_);
		result = _tmp10_;
		return result;
	}
	_tmp11_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp12_ = _tmp11_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp12_ + 1);
	_tmp13_ = g_strdup_printf ("_tmp%d_", _tmp12_);
	temp_name = _tmp13_;
	_tmp14_ = vala_ccode_identifier_new ("g_new");
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp15_);
	_tmp17_ = _tmp16_;
	_vala_ccode_node_unref0 (_tmp15_);
	new_call = _tmp17_;
	_tmp18_ = new_call;
	_tmp19_ = array_type;
	_tmp20_ = vala_array_type_get_element_type (_tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_get_ccode_name ((ValaCodeNode*) _tmp21_);
	_tmp23_ = _tmp22_;
	_tmp24_ = vala_ccode_identifier_new (_tmp23_);
	_tmp25_ = _tmp24_;
	vala_ccode_function_call_add_argument (_tmp18_, (ValaCCodeExpression*) _tmp25_);
	_vala_ccode_node_unref0 (_tmp25_);
	_g_free0 (_tmp23_);
	_tmp26_ = new_call;
	_tmp27_ = vala_ccode_constant_new ("5");
	_tmp28_ = _tmp27_;
	vala_ccode_function_call_add_argument (_tmp26_, (ValaCCodeExpression*) _tmp28_);
	_vala_ccode_node_unref0 (_tmp28_);
	_tmp29_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp30_ = _tmp29_;
	_tmp31_ = array_type;
	_tmp32_ = vala_get_ccode_name ((ValaCodeNode*) _tmp31_);
	_tmp33_ = _tmp32_;
	_tmp34_ = temp_name;
	_tmp35_ = new_call;
	_tmp36_ = vala_ccode_variable_declarator_new (_tmp34_, (ValaCCodeExpression*) _tmp35_, NULL);
	_tmp37_ = _tmp36_;
	vala_ccode_function_add_declaration (_tmp30_, _tmp33_, (ValaCCodeDeclarator*) _tmp37_, 0);
	_vala_ccode_node_unref0 (_tmp37_);
	_g_free0 (_tmp33_);
	_tmp38_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp39_ = _tmp38_;
	_tmp40_ = temp_name;
	_tmp41_ = g_strconcat (_tmp40_, "_length", NULL);
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_ccode_constant_new ("0");
	_tmp44_ = _tmp43_;
	_tmp45_ = vala_ccode_variable_declarator_new (_tmp42_, (ValaCCodeExpression*) _tmp44_, NULL);
	_tmp46_ = _tmp45_;
	vala_ccode_function_add_declaration (_tmp39_, "int", (ValaCCodeDeclarator*) _tmp46_, 0);
	_vala_ccode_node_unref0 (_tmp46_);
	_vala_ccode_node_unref0 (_tmp44_);
	_g_free0 (_tmp42_);
	_tmp47_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp48_ = _tmp47_;
	_tmp49_ = temp_name;
	_tmp50_ = g_strconcat (_tmp49_, "_size", NULL);
	_tmp51_ = _tmp50_;
	_tmp52_ = vala_ccode_constant_new ("4");
	_tmp53_ = _tmp52_;
	_tmp54_ = vala_ccode_variable_declarator_new (_tmp51_, (ValaCCodeExpression*) _tmp53_, NULL);
	_tmp55_ = _tmp54_;
	vala_ccode_function_add_declaration (_tmp48_, "int", (ValaCCodeDeclarator*) _tmp55_, 0);
	_vala_ccode_node_unref0 (_tmp55_);
	_vala_ccode_node_unref0 (_tmp53_);
	_g_free0 (_tmp51_);
	_tmp56_ = array_type;
	_tmp57_ = temp_name;
	_tmp58_ = variant_expr;
	_tmp59_ = expr;
	vala_gvariant_module_deserialize_array_dim (self, _tmp56_, 1, _tmp57_, _tmp58_, _tmp59_);
	_tmp60_ = array_type;
	_tmp61_ = vala_array_type_get_element_type (_tmp60_);
	_tmp62_ = _tmp61_;
	_tmp63_ = vala_data_type_is_reference_type_or_type_parameter (_tmp62_);
	if (_tmp63_) {
		ValaCCodeIdentifier* length = NULL;
		const gchar* _tmp64_;
		gchar* _tmp65_;
		gchar* _tmp66_;
		ValaCCodeIdentifier* _tmp67_;
		ValaCCodeIdentifier* _tmp68_;
		ValaCCodeElementAccess* element_access = NULL;
		const gchar* _tmp69_;
		ValaCCodeIdentifier* _tmp70_;
		ValaCCodeIdentifier* _tmp71_;
		ValaCCodeIdentifier* _tmp72_;
		ValaCCodeElementAccess* _tmp73_;
		ValaCCodeElementAccess* _tmp74_;
		ValaCCodeFunction* _tmp75_;
		ValaCCodeFunction* _tmp76_;
		ValaCCodeElementAccess* _tmp77_;
		ValaCCodeIdentifier* _tmp78_;
		ValaCCodeIdentifier* _tmp79_;
		_tmp64_ = temp_name;
		_tmp65_ = g_strconcat (_tmp64_, "_length", NULL);
		_tmp66_ = _tmp65_;
		_tmp67_ = vala_ccode_identifier_new (_tmp66_);
		_tmp68_ = _tmp67_;
		_g_free0 (_tmp66_);
		length = _tmp68_;
		_tmp69_ = temp_name;
		_tmp70_ = vala_ccode_identifier_new (_tmp69_);
		_tmp71_ = _tmp70_;
		_tmp72_ = length;
		_tmp73_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp71_, (ValaCCodeExpression*) _tmp72_);
		_tmp74_ = _tmp73_;
		_vala_ccode_node_unref0 (_tmp71_);
		element_access = _tmp74_;
		_tmp75_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp76_ = _tmp75_;
		_tmp77_ = element_access;
		_tmp78_ = vala_ccode_identifier_new ("NULL");
		_tmp79_ = _tmp78_;
		vala_ccode_function_add_assignment (_tmp76_, (ValaCCodeExpression*) _tmp77_, (ValaCCodeExpression*) _tmp79_);
		_vala_ccode_node_unref0 (_tmp79_);
		_vala_ccode_node_unref0 (element_access);
		_vala_ccode_node_unref0 (length);
	}
	_tmp80_ = temp_name;
	_tmp81_ = vala_ccode_identifier_new (_tmp80_);
	result = (ValaCCodeExpression*) _tmp81_;
	_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_;
	const gchar* _tmp8_;
	gint _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_;
	ValaCCodeExpression* _tmp37_;
	ValaCCodeFunction* _tmp38_;
	ValaCCodeFunction* _tmp39_;
	ValaCCodeFunctionCall* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeFunctionCall* _tmp43_;
	ValaCCodeFunctionCall* _tmp44_;
	const gchar* _tmp45_;
	ValaCCodeIdentifier* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeUnaryExpression* _tmp48_;
	ValaCCodeUnaryExpression* _tmp49_;
	ValaCCodeBinaryExpression* cforcond = NULL;
	const gchar* _tmp50_;
	ValaCCodeIdentifier* _tmp51_;
	ValaCCodeIdentifier* _tmp52_;
	ValaCCodeFunctionCall* _tmp53_;
	ValaCCodeAssignment* _tmp54_;
	ValaCCodeAssignment* _tmp55_;
	ValaCCodeConstant* _tmp56_;
	ValaCCodeConstant* _tmp57_;
	ValaCCodeBinaryExpression* _tmp58_;
	ValaCCodeBinaryExpression* _tmp59_;
	ValaCCodeUnaryExpression* cforiter = NULL;
	const gchar* _tmp60_;
	gint _tmp61_;
	gchar* _tmp62_;
	gchar* _tmp63_;
	ValaCCodeIdentifier* _tmp64_;
	ValaCCodeIdentifier* _tmp65_;
	ValaCCodeUnaryExpression* _tmp66_;
	ValaCCodeUnaryExpression* _tmp67_;
	ValaCCodeFunction* _tmp68_;
	ValaCCodeFunction* _tmp69_;
	ValaCCodeBinaryExpression* _tmp70_;
	ValaCCodeUnaryExpression* _tmp71_;
	gint _tmp72_;
	ValaArrayType* _tmp73_;
	gint _tmp74_;
	gint _tmp75_;
	ValaCCodeFunctionCall* unref = NULL;
	ValaCCodeIdentifier* _tmp173_;
	ValaCCodeIdentifier* _tmp174_;
	ValaCCodeFunctionCall* _tmp175_;
	ValaCCodeFunctionCall* _tmp176_;
	ValaCCodeFunctionCall* _tmp177_;
	const gchar* _tmp178_;
	ValaCCodeIdentifier* _tmp179_;
	ValaCCodeIdentifier* _tmp180_;
	ValaCCodeFunction* _tmp181_;
	ValaCCodeFunction* _tmp182_;
	ValaCCodeFunctionCall* _tmp183_;
	ValaCCodeFunction* _tmp184_;
	ValaCCodeFunction* _tmp185_;
	ValaCCodeExpression* _tmp186_;
	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_ = temp_name;
	_tmp9_ = dim;
	_tmp10_ = g_strdup_printf ("%s_length%d", _tmp8_, _tmp9_);
	_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_, "int", (ValaCCodeDeclarator*) _tmp15_, 0);
	_vala_ccode_node_unref0 (_tmp15_);
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp11_);
	_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;
	_tmp37_ = variant_expr;
	vala_ccode_function_call_add_argument (_tmp36_, _tmp37_);
	_tmp38_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp39_ = _tmp38_;
	_tmp40_ = iter_call;
	vala_ccode_function_add_expression (_tmp39_, (ValaCCodeExpression*) _tmp40_);
	_tmp41_ = vala_ccode_identifier_new ("g_variant_iter_next_value");
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp42_);
	_vala_ccode_node_unref0 (iter_call);
	iter_call = _tmp43_;
	_vala_ccode_node_unref0 (_tmp42_);
	_tmp44_ = iter_call;
	_tmp45_ = subiter_name;
	_tmp46_ = vala_ccode_identifier_new (_tmp45_);
	_tmp47_ = _tmp46_;
	_tmp48_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp47_);
	_tmp49_ = _tmp48_;
	vala_ccode_function_call_add_argument (_tmp44_, (ValaCCodeExpression*) _tmp49_);
	_vala_ccode_node_unref0 (_tmp49_);
	_vala_ccode_node_unref0 (_tmp47_);
	_tmp50_ = element_name;
	_tmp51_ = vala_ccode_identifier_new (_tmp50_);
	_tmp52_ = _tmp51_;
	_tmp53_ = iter_call;
	_tmp54_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp52_, (ValaCCodeExpression*) _tmp53_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp55_ = _tmp54_;
	_tmp56_ = vala_ccode_constant_new ("NULL");
	_tmp57_ = _tmp56_;
	_tmp58_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp55_, (ValaCCodeExpression*) _tmp57_);
	_tmp59_ = _tmp58_;
	_vala_ccode_node_unref0 (_tmp57_);
	_vala_ccode_node_unref0 (_tmp55_);
	_vala_ccode_node_unref0 (_tmp52_);
	cforcond = _tmp59_;
	_tmp60_ = temp_name;
	_tmp61_ = dim;
	_tmp62_ = g_strdup_printf ("%s_length%d", _tmp60_, _tmp61_);
	_tmp63_ = _tmp62_;
	_tmp64_ = vala_ccode_identifier_new (_tmp63_);
	_tmp65_ = _tmp64_;
	_tmp66_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp65_);
	_tmp67_ = _tmp66_;
	_vala_ccode_node_unref0 (_tmp65_);
	_g_free0 (_tmp63_);
	cforiter = _tmp67_;
	_tmp68_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp69_ = _tmp68_;
	_tmp70_ = cforcond;
	_tmp71_ = cforiter;
	vala_ccode_function_open_for (_tmp69_, NULL, (ValaCCodeExpression*) _tmp70_, (ValaCCodeExpression*) _tmp71_);
	_tmp72_ = dim;
	_tmp73_ = array_type;
	_tmp74_ = vala_array_type_get_rank (_tmp73_);
	_tmp75_ = _tmp74_;
	if (_tmp72_ < _tmp75_) {
		ValaArrayType* _tmp76_;
		gint _tmp77_;
		const gchar* _tmp78_;
		const gchar* _tmp79_;
		ValaCCodeIdentifier* _tmp80_;
		ValaCCodeIdentifier* _tmp81_;
		ValaCCodeExpression* _tmp82_;
		_tmp76_ = array_type;
		_tmp77_ = dim;
		_tmp78_ = temp_name;
		_tmp79_ = element_name;
		_tmp80_ = vala_ccode_identifier_new (_tmp79_);
		_tmp81_ = _tmp80_;
		_tmp82_ = expr;
		vala_gvariant_module_deserialize_array_dim (self, _tmp76_, _tmp77_ + 1, _tmp78_, (ValaCCodeExpression*) _tmp81_, _tmp82_);
		_vala_ccode_node_unref0 (_tmp81_);
	} else {
		ValaCCodeBinaryExpression* size_check = NULL;
		const gchar* _tmp83_;
		gchar* _tmp84_;
		gchar* _tmp85_;
		ValaCCodeIdentifier* _tmp86_;
		ValaCCodeIdentifier* _tmp87_;
		const gchar* _tmp88_;
		gchar* _tmp89_;
		gchar* _tmp90_;
		ValaCCodeIdentifier* _tmp91_;
		ValaCCodeIdentifier* _tmp92_;
		ValaCCodeBinaryExpression* _tmp93_;
		ValaCCodeBinaryExpression* _tmp94_;
		ValaCCodeFunction* _tmp95_;
		ValaCCodeFunction* _tmp96_;
		ValaCCodeBinaryExpression* _tmp97_;
		ValaCCodeBinaryExpression* new_size = NULL;
		ValaCCodeConstant* _tmp98_;
		ValaCCodeConstant* _tmp99_;
		const gchar* _tmp100_;
		gchar* _tmp101_;
		gchar* _tmp102_;
		ValaCCodeIdentifier* _tmp103_;
		ValaCCodeIdentifier* _tmp104_;
		ValaCCodeBinaryExpression* _tmp105_;
		ValaCCodeBinaryExpression* _tmp106_;
		ValaCCodeFunction* _tmp107_;
		ValaCCodeFunction* _tmp108_;
		const gchar* _tmp109_;
		gchar* _tmp110_;
		gchar* _tmp111_;
		ValaCCodeIdentifier* _tmp112_;
		ValaCCodeIdentifier* _tmp113_;
		ValaCCodeBinaryExpression* _tmp114_;
		ValaCCodeFunctionCall* renew_call = NULL;
		ValaCCodeIdentifier* _tmp115_;
		ValaCCodeIdentifier* _tmp116_;
		ValaCCodeFunctionCall* _tmp117_;
		ValaCCodeFunctionCall* _tmp118_;
		ValaCCodeFunctionCall* _tmp119_;
		ValaArrayType* _tmp120_;
		ValaDataType* _tmp121_;
		ValaDataType* _tmp122_;
		gchar* _tmp123_;
		gchar* _tmp124_;
		ValaCCodeIdentifier* _tmp125_;
		ValaCCodeIdentifier* _tmp126_;
		ValaCCodeFunctionCall* _tmp127_;
		const gchar* _tmp128_;
		ValaCCodeIdentifier* _tmp129_;
		ValaCCodeIdentifier* _tmp130_;
		ValaCCodeFunctionCall* _tmp131_;
		const gchar* _tmp132_;
		gchar* _tmp133_;
		gchar* _tmp134_;
		ValaCCodeIdentifier* _tmp135_;
		ValaCCodeIdentifier* _tmp136_;
		ValaCCodeConstant* _tmp137_;
		ValaCCodeConstant* _tmp138_;
		ValaCCodeBinaryExpression* _tmp139_;
		ValaCCodeBinaryExpression* _tmp140_;
		ValaCCodeFunction* _tmp141_;
		ValaCCodeFunction* _tmp142_;
		const gchar* _tmp143_;
		ValaCCodeIdentifier* _tmp144_;
		ValaCCodeIdentifier* _tmp145_;
		ValaCCodeFunctionCall* _tmp146_;
		ValaCCodeFunction* _tmp147_;
		ValaCCodeFunction* _tmp148_;
		ValaCCodeElementAccess* element_access = NULL;
		const gchar* _tmp149_;
		ValaCCodeIdentifier* _tmp150_;
		ValaCCodeIdentifier* _tmp151_;
		const gchar* _tmp152_;
		gchar* _tmp153_;
		gchar* _tmp154_;
		ValaCCodeIdentifier* _tmp155_;
		ValaCCodeIdentifier* _tmp156_;
		ValaCCodeUnaryExpression* _tmp157_;
		ValaCCodeUnaryExpression* _tmp158_;
		ValaCCodeElementAccess* _tmp159_;
		ValaCCodeElementAccess* _tmp160_;
		ValaCCodeExpression* element_expr = NULL;
		ValaArrayType* _tmp161_;
		ValaDataType* _tmp162_;
		ValaDataType* _tmp163_;
		const gchar* _tmp164_;
		ValaCCodeIdentifier* _tmp165_;
		ValaCCodeIdentifier* _tmp166_;
		ValaCCodeExpression* _tmp167_;
		ValaCCodeExpression* _tmp168_;
		ValaCCodeFunction* _tmp169_;
		ValaCCodeFunction* _tmp170_;
		ValaCCodeElementAccess* _tmp171_;
		ValaCCodeExpression* _tmp172_;
		_tmp83_ = temp_name;
		_tmp84_ = g_strconcat (_tmp83_, "_size", NULL);
		_tmp85_ = _tmp84_;
		_tmp86_ = vala_ccode_identifier_new (_tmp85_);
		_tmp87_ = _tmp86_;
		_tmp88_ = temp_name;
		_tmp89_ = g_strconcat (_tmp88_, "_length", NULL);
		_tmp90_ = _tmp89_;
		_tmp91_ = vala_ccode_identifier_new (_tmp90_);
		_tmp92_ = _tmp91_;
		_tmp93_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp87_, (ValaCCodeExpression*) _tmp92_);
		_tmp94_ = _tmp93_;
		_vala_ccode_node_unref0 (_tmp92_);
		_g_free0 (_tmp90_);
		_vala_ccode_node_unref0 (_tmp87_);
		_g_free0 (_tmp85_);
		size_check = _tmp94_;
		_tmp95_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp96_ = _tmp95_;
		_tmp97_ = size_check;
		vala_ccode_function_open_if (_tmp96_, (ValaCCodeExpression*) _tmp97_);
		_tmp98_ = vala_ccode_constant_new ("2");
		_tmp99_ = _tmp98_;
		_tmp100_ = temp_name;
		_tmp101_ = g_strconcat (_tmp100_, "_size", NULL);
		_tmp102_ = _tmp101_;
		_tmp103_ = vala_ccode_identifier_new (_tmp102_);
		_tmp104_ = _tmp103_;
		_tmp105_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, (ValaCCodeExpression*) _tmp99_, (ValaCCodeExpression*) _tmp104_);
		_tmp106_ = _tmp105_;
		_vala_ccode_node_unref0 (_tmp104_);
		_g_free0 (_tmp102_);
		_vala_ccode_node_unref0 (_tmp99_);
		new_size = _tmp106_;
		_tmp107_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp108_ = _tmp107_;
		_tmp109_ = temp_name;
		_tmp110_ = g_strconcat (_tmp109_, "_size", NULL);
		_tmp111_ = _tmp110_;
		_tmp112_ = vala_ccode_identifier_new (_tmp111_);
		_tmp113_ = _tmp112_;
		_tmp114_ = new_size;
		vala_ccode_function_add_assignment (_tmp108_, (ValaCCodeExpression*) _tmp113_, (ValaCCodeExpression*) _tmp114_);
		_vala_ccode_node_unref0 (_tmp113_);
		_g_free0 (_tmp111_);
		_tmp115_ = vala_ccode_identifier_new ("g_renew");
		_tmp116_ = _tmp115_;
		_tmp117_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp116_);
		_tmp118_ = _tmp117_;
		_vala_ccode_node_unref0 (_tmp116_);
		renew_call = _tmp118_;
		_tmp119_ = renew_call;
		_tmp120_ = array_type;
		_tmp121_ = vala_array_type_get_element_type (_tmp120_);
		_tmp122_ = _tmp121_;
		_tmp123_ = vala_get_ccode_name ((ValaCodeNode*) _tmp122_);
		_tmp124_ = _tmp123_;
		_tmp125_ = vala_ccode_identifier_new (_tmp124_);
		_tmp126_ = _tmp125_;
		vala_ccode_function_call_add_argument (_tmp119_, (ValaCCodeExpression*) _tmp126_);
		_vala_ccode_node_unref0 (_tmp126_);
		_g_free0 (_tmp124_);
		_tmp127_ = renew_call;
		_tmp128_ = temp_name;
		_tmp129_ = vala_ccode_identifier_new (_tmp128_);
		_tmp130_ = _tmp129_;
		vala_ccode_function_call_add_argument (_tmp127_, (ValaCCodeExpression*) _tmp130_);
		_vala_ccode_node_unref0 (_tmp130_);
		_tmp131_ = renew_call;
		_tmp132_ = temp_name;
		_tmp133_ = g_strconcat (_tmp132_, "_size", NULL);
		_tmp134_ = _tmp133_;
		_tmp135_ = vala_ccode_identifier_new (_tmp134_);
		_tmp136_ = _tmp135_;
		_tmp137_ = vala_ccode_constant_new ("1");
		_tmp138_ = _tmp137_;
		_tmp139_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp136_, (ValaCCodeExpression*) _tmp138_);
		_tmp140_ = _tmp139_;
		vala_ccode_function_call_add_argument (_tmp131_, (ValaCCodeExpression*) _tmp140_);
		_vala_ccode_node_unref0 (_tmp140_);
		_vala_ccode_node_unref0 (_tmp138_);
		_vala_ccode_node_unref0 (_tmp136_);
		_g_free0 (_tmp134_);
		_tmp141_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp142_ = _tmp141_;
		_tmp143_ = temp_name;
		_tmp144_ = vala_ccode_identifier_new (_tmp143_);
		_tmp145_ = _tmp144_;
		_tmp146_ = renew_call;
		vala_ccode_function_add_assignment (_tmp142_, (ValaCCodeExpression*) _tmp145_, (ValaCCodeExpression*) _tmp146_);
		_vala_ccode_node_unref0 (_tmp145_);
		_tmp147_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp148_ = _tmp147_;
		vala_ccode_function_close (_tmp148_);
		_tmp149_ = temp_name;
		_tmp150_ = vala_ccode_identifier_new (_tmp149_);
		_tmp151_ = _tmp150_;
		_tmp152_ = temp_name;
		_tmp153_ = g_strconcat (_tmp152_, "_length", NULL);
		_tmp154_ = _tmp153_;
		_tmp155_ = vala_ccode_identifier_new (_tmp154_);
		_tmp156_ = _tmp155_;
		_tmp157_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp156_);
		_tmp158_ = _tmp157_;
		_tmp159_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp151_, (ValaCCodeExpression*) _tmp158_);
		_tmp160_ = _tmp159_;
		_vala_ccode_node_unref0 (_tmp158_);
		_vala_ccode_node_unref0 (_tmp156_);
		_g_free0 (_tmp154_);
		_vala_ccode_node_unref0 (_tmp151_);
		element_access = _tmp160_;
		_tmp161_ = array_type;
		_tmp162_ = vala_array_type_get_element_type (_tmp161_);
		_tmp163_ = _tmp162_;
		_tmp164_ = element_name;
		_tmp165_ = vala_ccode_identifier_new (_tmp164_);
		_tmp166_ = _tmp165_;
		_tmp167_ = vala_ccode_base_module_deserialize_expression ((ValaCCodeBaseModule*) self, _tmp163_, (ValaCCodeExpression*) _tmp166_, NULL, NULL, NULL);
		_tmp168_ = _tmp167_;
		_vala_ccode_node_unref0 (_tmp166_);
		element_expr = _tmp168_;
		_tmp169_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp170_ = _tmp169_;
		_tmp171_ = element_access;
		_tmp172_ = element_expr;
		vala_ccode_function_add_assignment (_tmp170_, (ValaCCodeExpression*) _tmp171_, _tmp172_);
		_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);
	}
	_tmp173_ = vala_ccode_identifier_new ("g_variant_unref");
	_tmp174_ = _tmp173_;
	_tmp175_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp174_);
	_tmp176_ = _tmp175_;
	_vala_ccode_node_unref0 (_tmp174_);
	unref = _tmp176_;
	_tmp177_ = unref;
	_tmp178_ = element_name;
	_tmp179_ = vala_ccode_identifier_new (_tmp178_);
	_tmp180_ = _tmp179_;
	vala_ccode_function_call_add_argument (_tmp177_, (ValaCCodeExpression*) _tmp180_);
	_vala_ccode_node_unref0 (_tmp180_);
	_tmp181_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp182_ = _tmp181_;
	_tmp183_ = unref;
	vala_ccode_function_add_expression (_tmp182_, (ValaCCodeExpression*) _tmp183_);
	_tmp184_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp185_ = _tmp184_;
	vala_ccode_function_close (_tmp185_);
	_tmp186_ = expr;
	if (_tmp186_ != NULL) {
		ValaCCodeFunction* _tmp187_;
		ValaCCodeFunction* _tmp188_;
		ValaCCodeExpression* _tmp189_;
		gint _tmp190_;
		ValaCCodeExpression* _tmp191_;
		ValaCCodeExpression* _tmp192_;
		const gchar* _tmp193_;
		gint _tmp194_;
		gchar* _tmp195_;
		gchar* _tmp196_;
		ValaCCodeIdentifier* _tmp197_;
		ValaCCodeIdentifier* _tmp198_;
		_tmp187_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp188_ = _tmp187_;
		_tmp189_ = expr;
		_tmp190_ = dim;
		_tmp191_ = vala_gvariant_module_get_array_length (self, _tmp189_, _tmp190_);
		_tmp192_ = _tmp191_;
		_tmp193_ = temp_name;
		_tmp194_ = dim;
		_tmp195_ = g_strdup_printf ("%s_length%d", _tmp193_, _tmp194_);
		_tmp196_ = _tmp195_;
		_tmp197_ = vala_ccode_identifier_new (_tmp196_);
		_tmp198_ = _tmp197_;
		vala_ccode_function_add_assignment (_tmp188_, _tmp192_, (ValaCCodeExpression*) _tmp198_);
		_vala_ccode_node_unref0 (_tmp198_);
		_g_free0 (_tmp196_);
		_vala_ccode_node_unref0 (_tmp192_);
	}
	_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) {
	ValaCCodeExpression* result = NULL;
	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_;
	ValaCCodeExpression* _tmp8_;
	ValaCCodeFunctionCall* get_size_call = NULL;
	ValaCCodeIdentifier* _tmp9_;
	ValaCCodeIdentifier* _tmp10_;
	ValaCCodeFunctionCall* _tmp11_;
	ValaCCodeFunctionCall* _tmp12_;
	ValaCCodeFunctionCall* _tmp13_;
	ValaCCodeExpression* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	const gchar* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaCCodeVariableDeclarator* _tmp21_;
	ValaCCodeVariableDeclarator* _tmp22_;
	ValaCCodeIdentifier* length = NULL;
	const gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	ValaCCodeIdentifier* _tmp26_;
	ValaCCodeIdentifier* _tmp27_;
	ValaCCodeFunctionCall* dup_call = NULL;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeFunctionCall* _tmp30_;
	ValaCCodeFunctionCall* _tmp31_;
	ValaCCodeFunctionCall* _tmp32_;
	ValaCCodeFunctionCall* _tmp33_;
	ValaCCodeFunctionCall* _tmp34_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeFunction* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	ValaArrayType* _tmp38_;
	gchar* _tmp39_;
	gchar* _tmp40_;
	const gchar* _tmp41_;
	ValaCCodeFunctionCall* _tmp42_;
	ValaCCodeVariableDeclarator* _tmp43_;
	ValaCCodeVariableDeclarator* _tmp44_;
	ValaCCodeExpression* _tmp45_;
	const gchar* _tmp52_;
	ValaCCodeIdentifier* _tmp53_;
	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;
	_tmp8_ = variant_expr;
	vala_ccode_function_call_add_argument (_tmp7_, _tmp8_);
	_tmp9_ = vala_ccode_identifier_new ("g_variant_get_size");
	_tmp10_ = _tmp9_;
	_tmp11_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp10_);
	_tmp12_ = _tmp11_;
	_vala_ccode_node_unref0 (_tmp10_);
	get_size_call = _tmp12_;
	_tmp13_ = get_size_call;
	_tmp14_ = variant_expr;
	vala_ccode_function_call_add_argument (_tmp13_, _tmp14_);
	_tmp15_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp16_ = _tmp15_;
	_tmp17_ = temp_name;
	_tmp18_ = g_strconcat (_tmp17_, "_length", NULL);
	_tmp19_ = _tmp18_;
	_tmp20_ = get_size_call;
	_tmp21_ = vala_ccode_variable_declarator_new (_tmp19_, (ValaCCodeExpression*) _tmp20_, NULL);
	_tmp22_ = _tmp21_;
	vala_ccode_function_add_declaration (_tmp16_, "gsize", (ValaCCodeDeclarator*) _tmp22_, 0);
	_vala_ccode_node_unref0 (_tmp22_);
	_g_free0 (_tmp19_);
	_tmp23_ = temp_name;
	_tmp24_ = g_strconcat (_tmp23_, "_length", NULL);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_ccode_identifier_new (_tmp25_);
	_tmp27_ = _tmp26_;
	_g_free0 (_tmp25_);
	length = _tmp27_;
	_tmp28_ = vala_ccode_identifier_new ("g_memdup");
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp29_);
	_tmp31_ = _tmp30_;
	_vala_ccode_node_unref0 (_tmp29_);
	dup_call = _tmp31_;
	_tmp32_ = dup_call;
	_tmp33_ = get_data_call;
	vala_ccode_function_call_add_argument (_tmp32_, (ValaCCodeExpression*) _tmp33_);
	_tmp34_ = dup_call;
	_tmp35_ = length;
	vala_ccode_function_call_add_argument (_tmp34_, (ValaCCodeExpression*) _tmp35_);
	_tmp36_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp37_ = _tmp36_;
	_tmp38_ = array_type;
	_tmp39_ = vala_get_ccode_name ((ValaCodeNode*) _tmp38_);
	_tmp40_ = _tmp39_;
	_tmp41_ = temp_name;
	_tmp42_ = dup_call;
	_tmp43_ = vala_ccode_variable_declarator_new (_tmp41_, (ValaCCodeExpression*) _tmp42_, NULL);
	_tmp44_ = _tmp43_;
	vala_ccode_function_add_declaration (_tmp37_, _tmp40_, (ValaCCodeDeclarator*) _tmp44_, 0);
	_vala_ccode_node_unref0 (_tmp44_);
	_g_free0 (_tmp40_);
	_tmp45_ = expr;
	if (_tmp45_ != NULL) {
		ValaCCodeFunction* _tmp46_;
		ValaCCodeFunction* _tmp47_;
		ValaCCodeExpression* _tmp48_;
		ValaCCodeExpression* _tmp49_;
		ValaCCodeExpression* _tmp50_;
		ValaCCodeIdentifier* _tmp51_;
		_tmp46_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp47_ = _tmp46_;
		_tmp48_ = expr;
		_tmp49_ = vala_gvariant_module_get_array_length (self, _tmp48_, 1);
		_tmp50_ = _tmp49_;
		_tmp51_ = length;
		vala_ccode_function_add_assignment (_tmp47_, _tmp50_, (ValaCCodeExpression*) _tmp51_);
		_vala_ccode_node_unref0 (_tmp50_);
	}
	_tmp52_ = temp_name;
	_tmp53_ = vala_ccode_identifier_new (_tmp52_);
	result = (ValaCCodeExpression*) _tmp53_;
	_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) {
	ValaCCodeExpression* result = NULL;
	gchar* temp_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	gchar* subiter_name = NULL;
	gint _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	ValaCCodeFunction* _tmp6_;
	ValaCCodeFunction* _tmp7_;
	ValaStruct* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	const gchar* _tmp11_;
	ValaCCodeVariableDeclarator* _tmp12_;
	ValaCCodeVariableDeclarator* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaCCodeFunction* _tmp15_;
	const gchar* _tmp16_;
	ValaCCodeVariableDeclarator* _tmp17_;
	ValaCCodeVariableDeclarator* _tmp18_;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp19_;
	ValaCCodeIdentifier* _tmp20_;
	ValaCCodeFunctionCall* _tmp21_;
	ValaCCodeFunctionCall* _tmp22_;
	ValaCCodeFunctionCall* _tmp23_;
	const gchar* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeIdentifier* _tmp26_;
	ValaCCodeUnaryExpression* _tmp27_;
	ValaCCodeUnaryExpression* _tmp28_;
	ValaCCodeFunctionCall* _tmp29_;
	ValaCCodeExpression* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	ValaCCodeFunctionCall* _tmp33_;
	gboolean field_found = FALSE;
	gboolean _tmp63_;
	const gchar* _tmp64_;
	ValaCCodeIdentifier* _tmp65_;
	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_ = st;
	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = temp_name;
	_tmp12_ = vala_ccode_variable_declarator_new (_tmp11_, NULL, NULL);
	_tmp13_ = _tmp12_;
	vala_ccode_function_add_declaration (_tmp7_, _tmp10_, (ValaCCodeDeclarator*) _tmp13_, 0);
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp10_);
	_tmp14_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp15_ = _tmp14_;
	_tmp16_ = subiter_name;
	_tmp17_ = vala_ccode_variable_declarator_new (_tmp16_, NULL, NULL);
	_tmp18_ = _tmp17_;
	vala_ccode_function_add_declaration (_tmp15_, "GVariantIter", (ValaCCodeDeclarator*) _tmp18_, 0);
	_vala_ccode_node_unref0 (_tmp18_);
	_tmp19_ = vala_ccode_identifier_new ("g_variant_iter_init");
	_tmp20_ = _tmp19_;
	_tmp21_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp20_);
	_tmp22_ = _tmp21_;
	_vala_ccode_node_unref0 (_tmp20_);
	iter_call = _tmp22_;
	_tmp23_ = iter_call;
	_tmp24_ = subiter_name;
	_tmp25_ = vala_ccode_identifier_new (_tmp24_);
	_tmp26_ = _tmp25_;
	_tmp27_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp26_);
	_tmp28_ = _tmp27_;
	vala_ccode_function_call_add_argument (_tmp23_, (ValaCCodeExpression*) _tmp28_);
	_vala_ccode_node_unref0 (_tmp28_);
	_vala_ccode_node_unref0 (_tmp26_);
	_tmp29_ = iter_call;
	_tmp30_ = variant_expr;
	vala_ccode_function_call_add_argument (_tmp29_, _tmp30_);
	_tmp31_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp32_ = _tmp31_;
	_tmp33_ = iter_call;
	vala_ccode_function_add_expression (_tmp32_, (ValaCCodeExpression*) _tmp33_);
	field_found = FALSE;
	{
		ValaList* _f_list = NULL;
		ValaStruct* _tmp34_;
		ValaList* _tmp35_;
		gint _f_size = 0;
		ValaList* _tmp36_;
		gint _tmp37_;
		gint _tmp38_;
		gint _f_index = 0;
		_tmp34_ = st;
		_tmp35_ = vala_struct_get_fields (_tmp34_);
		_f_list = _tmp35_;
		_tmp36_ = _f_list;
		_tmp37_ = vala_collection_get_size ((ValaCollection*) _tmp36_);
		_tmp38_ = _tmp37_;
		_f_size = _tmp38_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp39_;
			gint _tmp40_;
			gint _tmp41_;
			ValaField* f = NULL;
			ValaList* _tmp42_;
			gint _tmp43_;
			gpointer _tmp44_;
			ValaField* _tmp45_;
			ValaMemberBinding _tmp46_;
			ValaMemberBinding _tmp47_;
			ValaField* _tmp48_;
			ValaDataType* _tmp49_;
			ValaDataType* _tmp50_;
			const gchar* _tmp51_;
			ValaCCodeIdentifier* _tmp52_;
			ValaCCodeIdentifier* _tmp53_;
			const gchar* _tmp54_;
			ValaCCodeIdentifier* _tmp55_;
			ValaCCodeIdentifier* _tmp56_;
			ValaField* _tmp57_;
			gchar* _tmp58_;
			gchar* _tmp59_;
			ValaCCodeMemberAccess* _tmp60_;
			ValaCCodeMemberAccess* _tmp61_;
			ValaField* _tmp62_;
			_tmp39_ = _f_index;
			_f_index = _tmp39_ + 1;
			_tmp40_ = _f_index;
			_tmp41_ = _f_size;
			if (!(_tmp40_ < _tmp41_)) {
				break;
			}
			_tmp42_ = _f_list;
			_tmp43_ = _f_index;
			_tmp44_ = vala_list_get (_tmp42_, _tmp43_);
			f = (ValaField*) _tmp44_;
			_tmp45_ = f;
			_tmp46_ = vala_field_get_binding (_tmp45_);
			_tmp47_ = _tmp46_;
			if (_tmp47_ != VALA_MEMBER_BINDING_INSTANCE) {
				_vala_code_node_unref0 (f);
				continue;
			}
			field_found = TRUE;
			_tmp48_ = f;
			_tmp49_ = vala_variable_get_variable_type ((ValaVariable*) _tmp48_);
			_tmp50_ = _tmp49_;
			_tmp51_ = subiter_name;
			_tmp52_ = vala_ccode_identifier_new (_tmp51_);
			_tmp53_ = _tmp52_;
			_tmp54_ = temp_name;
			_tmp55_ = vala_ccode_identifier_new (_tmp54_);
			_tmp56_ = _tmp55_;
			_tmp57_ = f;
			_tmp58_ = vala_get_ccode_name ((ValaCodeNode*) _tmp57_);
			_tmp59_ = _tmp58_;
			_tmp60_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp56_, _tmp59_, FALSE);
			_tmp61_ = _tmp60_;
			_tmp62_ = f;
			vala_gvariant_module_read_expression (self, _tmp50_, (ValaCCodeExpression*) _tmp53_, (ValaCCodeExpression*) _tmp61_, (ValaSymbol*) _tmp62_, NULL, NULL);
			_vala_ccode_node_unref0 (_tmp61_);
			_g_free0 (_tmp59_);
			_vala_ccode_node_unref0 (_tmp56_);
			_vala_ccode_node_unref0 (_tmp53_);
			_vala_code_node_unref0 (f);
		}
		_vala_iterable_unref0 (_f_list);
	}
	_tmp63_ = field_found;
	if (!_tmp63_) {
		result = NULL;
		_vala_ccode_node_unref0 (iter_call);
		_g_free0 (subiter_name);
		_g_free0 (temp_name);
		return result;
	}
	_tmp64_ = temp_name;
	_tmp65_ = vala_ccode_identifier_new (_tmp64_);
	result = (ValaCCodeExpression*) _tmp65_;
	_vala_ccode_node_unref0 (iter_call);
	_g_free0 (subiter_name);
	_g_free0 (temp_name);
	return result;
}


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


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


static ValaCCodeExpression* vala_gvariant_module_serialize_array (ValaGVariantModule* self, ValaArrayType* array_type, ValaCCodeExpression* array_expr) {
	ValaCCodeExpression* result = NULL;
	gboolean _tmp0_ = FALSE;
	ValaArrayType* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	gchar* array_iter_name = NULL;
	gint _tmp10_;
	gint _tmp11_;
	gchar* _tmp12_;
	ValaCCodeFunction* _tmp13_;
	ValaCCodeFunction* _tmp14_;
	ValaArrayType* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	const gchar* _tmp18_;
	ValaCCodeVariableDeclarator* _tmp19_;
	ValaCCodeVariableDeclarator* _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	const gchar* _tmp23_;
	ValaCCodeIdentifier* _tmp24_;
	ValaCCodeIdentifier* _tmp25_;
	ValaCCodeExpression* _tmp26_;
	ValaArrayType* _tmp27_;
	ValaCCodeExpression* _tmp28_;
	const gchar* _tmp29_;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeIdentifier* _tmp31_;
	ValaCCodeExpression* _tmp32_;
	ValaCCodeExpression* _tmp33_;
	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_ = array_type;
	_tmp2_ = vala_array_type_get_rank (_tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ == 1) {
		ValaArrayType* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		_tmp4_ = array_type;
		_tmp5_ = vala_gvariant_module_get_type_signature ((ValaDataType*) _tmp4_, NULL);
		_tmp6_ = _tmp5_;
		_tmp0_ = g_strcmp0 (_tmp6_, "ay") == 0;
		_g_free0 (_tmp6_);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		ValaArrayType* _tmp7_;
		ValaCCodeExpression* _tmp8_;
		ValaCCodeExpression* _tmp9_;
		_tmp7_ = array_type;
		_tmp8_ = array_expr;
		_tmp9_ = vala_gvariant_module_serialize_buffer_array (self, _tmp7_, _tmp8_);
		result = _tmp9_;
		return result;
	}
	_tmp10_ = vala_ccode_base_module_get_next_temp_var_id ((ValaCCodeBaseModule*) self);
	_tmp11_ = _tmp10_;
	vala_ccode_base_module_set_next_temp_var_id ((ValaCCodeBaseModule*) self, _tmp11_ + 1);
	_tmp12_ = g_strdup_printf ("_tmp%d_", _tmp11_);
	array_iter_name = _tmp12_;
	_tmp13_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp14_ = _tmp13_;
	_tmp15_ = array_type;
	_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) _tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = array_iter_name;
	_tmp19_ = vala_ccode_variable_declarator_new (_tmp18_, NULL, NULL);
	_tmp20_ = _tmp19_;
	vala_ccode_function_add_declaration (_tmp14_, _tmp17_, (ValaCCodeDeclarator*) _tmp20_, 0);
	_vala_ccode_node_unref0 (_tmp20_);
	_g_free0 (_tmp17_);
	_tmp21_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp22_ = _tmp21_;
	_tmp23_ = array_iter_name;
	_tmp24_ = vala_ccode_identifier_new (_tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = array_expr;
	vala_ccode_function_add_assignment (_tmp22_, (ValaCCodeExpression*) _tmp25_, _tmp26_);
	_vala_ccode_node_unref0 (_tmp25_);
	_tmp27_ = array_type;
	_tmp28_ = array_expr;
	_tmp29_ = array_iter_name;
	_tmp30_ = vala_ccode_identifier_new (_tmp29_);
	_tmp31_ = _tmp30_;
	_tmp32_ = vala_gvariant_module_serialize_array_dim (self, _tmp27_, 1, _tmp28_, (ValaCCodeExpression*) _tmp31_);
	_tmp33_ = _tmp32_;
	_vala_ccode_node_unref0 (_tmp31_);
	result = _tmp33_;
	_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) {
	ValaCCodeExpression* result = NULL;
	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_;
	const gchar* _tmp13_;
	ValaCCodeVariableDeclarator* _tmp14_;
	ValaCCodeVariableDeclarator* _tmp15_;
	ValaCCodeFunctionCall* gvariant_type = NULL;
	ValaCCodeIdentifier* _tmp16_;
	ValaCCodeIdentifier* _tmp17_;
	ValaCCodeFunctionCall* _tmp18_;
	ValaCCodeFunctionCall* _tmp19_;
	ValaCCodeFunctionCall* _tmp20_;
	ValaArrayType* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	ValaCCodeConstant* _tmp26_;
	ValaCCodeConstant* _tmp27_;
	ValaCCodeFunctionCall* builder_init = NULL;
	ValaCCodeIdentifier* _tmp28_;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeFunctionCall* _tmp30_;
	ValaCCodeFunctionCall* _tmp31_;
	ValaCCodeFunctionCall* _tmp32_;
	const gchar* _tmp33_;
	ValaCCodeIdentifier* _tmp34_;
	ValaCCodeIdentifier* _tmp35_;
	ValaCCodeUnaryExpression* _tmp36_;
	ValaCCodeUnaryExpression* _tmp37_;
	ValaCCodeFunctionCall* _tmp38_;
	ValaCCodeFunctionCall* _tmp39_;
	ValaCCodeFunction* _tmp40_;
	ValaCCodeFunction* _tmp41_;
	ValaCCodeFunctionCall* _tmp42_;
	ValaCCodeAssignment* cforinit = NULL;
	const gchar* _tmp43_;
	ValaCCodeIdentifier* _tmp44_;
	ValaCCodeIdentifier* _tmp45_;
	ValaCCodeConstant* _tmp46_;
	ValaCCodeConstant* _tmp47_;
	ValaCCodeAssignment* _tmp48_;
	ValaCCodeAssignment* _tmp49_;
	ValaCCodeBinaryExpression* cforcond = NULL;
	const gchar* _tmp50_;
	ValaCCodeIdentifier* _tmp51_;
	ValaCCodeIdentifier* _tmp52_;
	ValaCCodeExpression* _tmp53_;
	gint _tmp54_;
	ValaCCodeExpression* _tmp55_;
	ValaCCodeExpression* _tmp56_;
	ValaCCodeBinaryExpression* _tmp57_;
	ValaCCodeBinaryExpression* _tmp58_;
	ValaCCodeUnaryExpression* cforiter = NULL;
	const gchar* _tmp59_;
	ValaCCodeIdentifier* _tmp60_;
	ValaCCodeIdentifier* _tmp61_;
	ValaCCodeUnaryExpression* _tmp62_;
	ValaCCodeUnaryExpression* _tmp63_;
	ValaCCodeFunction* _tmp64_;
	ValaCCodeFunction* _tmp65_;
	ValaCCodeAssignment* _tmp66_;
	ValaCCodeBinaryExpression* _tmp67_;
	ValaCCodeUnaryExpression* _tmp68_;
	ValaCCodeExpression* element_variant = NULL;
	gint _tmp69_;
	ValaArrayType* _tmp70_;
	gint _tmp71_;
	gint _tmp72_;
	ValaCCodeFunctionCall* builder_add = NULL;
	ValaCCodeIdentifier* _tmp85_;
	ValaCCodeIdentifier* _tmp86_;
	ValaCCodeFunctionCall* _tmp87_;
	ValaCCodeFunctionCall* _tmp88_;
	ValaCCodeFunctionCall* _tmp89_;
	const gchar* _tmp90_;
	ValaCCodeIdentifier* _tmp91_;
	ValaCCodeIdentifier* _tmp92_;
	ValaCCodeUnaryExpression* _tmp93_;
	ValaCCodeUnaryExpression* _tmp94_;
	ValaCCodeFunctionCall* _tmp95_;
	ValaCCodeExpression* _tmp96_;
	ValaCCodeFunction* _tmp97_;
	ValaCCodeFunction* _tmp98_;
	ValaCCodeFunctionCall* _tmp99_;
	gint _tmp100_;
	ValaArrayType* _tmp101_;
	gint _tmp102_;
	gint _tmp103_;
	ValaCCodeFunction* _tmp109_;
	ValaCCodeFunction* _tmp110_;
	ValaCCodeFunctionCall* builder_end = NULL;
	ValaCCodeIdentifier* _tmp111_;
	ValaCCodeIdentifier* _tmp112_;
	ValaCCodeFunctionCall* _tmp113_;
	ValaCCodeFunctionCall* _tmp114_;
	const gchar* _tmp115_;
	ValaCCodeIdentifier* _tmp116_;
	ValaCCodeIdentifier* _tmp117_;
	ValaCCodeUnaryExpression* _tmp118_;
	ValaCCodeUnaryExpression* _tmp119_;
	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_ = index_name;
	_tmp14_ = vala_ccode_variable_declarator_new (_tmp13_, NULL, NULL);
	_tmp15_ = _tmp14_;
	vala_ccode_function_add_declaration (_tmp12_, "int", (ValaCCodeDeclarator*) _tmp15_, 0);
	_vala_ccode_node_unref0 (_tmp15_);
	_tmp16_ = vala_ccode_identifier_new ("G_VARIANT_TYPE");
	_tmp17_ = _tmp16_;
	_tmp18_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp17_);
	_tmp19_ = _tmp18_;
	_vala_ccode_node_unref0 (_tmp17_);
	gvariant_type = _tmp19_;
	_tmp20_ = gvariant_type;
	_tmp21_ = array_type;
	_tmp22_ = vala_gvariant_module_get_type_signature ((ValaDataType*) _tmp21_, NULL);
	_tmp23_ = _tmp22_;
	_tmp24_ = g_strdup_printf ("\"%s\"", _tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = vala_ccode_constant_new (_tmp25_);
	_tmp27_ = _tmp26_;
	vala_ccode_function_call_add_argument (_tmp20_, (ValaCCodeExpression*) _tmp27_);
	_vala_ccode_node_unref0 (_tmp27_);
	_g_free0 (_tmp25_);
	_g_free0 (_tmp23_);
	_tmp28_ = vala_ccode_identifier_new ("g_variant_builder_init");
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp29_);
	_tmp31_ = _tmp30_;
	_vala_ccode_node_unref0 (_tmp29_);
	builder_init = _tmp31_;
	_tmp32_ = builder_init;
	_tmp33_ = builder_name;
	_tmp34_ = vala_ccode_identifier_new (_tmp33_);
	_tmp35_ = _tmp34_;
	_tmp36_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp35_);
	_tmp37_ = _tmp36_;
	vala_ccode_function_call_add_argument (_tmp32_, (ValaCCodeExpression*) _tmp37_);
	_vala_ccode_node_unref0 (_tmp37_);
	_vala_ccode_node_unref0 (_tmp35_);
	_tmp38_ = builder_init;
	_tmp39_ = gvariant_type;
	vala_ccode_function_call_add_argument (_tmp38_, (ValaCCodeExpression*) _tmp39_);
	_tmp40_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp41_ = _tmp40_;
	_tmp42_ = builder_init;
	vala_ccode_function_add_expression (_tmp41_, (ValaCCodeExpression*) _tmp42_);
	_tmp43_ = index_name;
	_tmp44_ = vala_ccode_identifier_new (_tmp43_);
	_tmp45_ = _tmp44_;
	_tmp46_ = vala_ccode_constant_new ("0");
	_tmp47_ = _tmp46_;
	_tmp48_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp45_, (ValaCCodeExpression*) _tmp47_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
	_tmp49_ = _tmp48_;
	_vala_ccode_node_unref0 (_tmp47_);
	_vala_ccode_node_unref0 (_tmp45_);
	cforinit = _tmp49_;
	_tmp50_ = index_name;
	_tmp51_ = vala_ccode_identifier_new (_tmp50_);
	_tmp52_ = _tmp51_;
	_tmp53_ = array_expr;
	_tmp54_ = dim;
	_tmp55_ = vala_gvariant_module_get_array_length (self, _tmp53_, _tmp54_);
	_tmp56_ = _tmp55_;
	_tmp57_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_LESS_THAN, (ValaCCodeExpression*) _tmp52_, _tmp56_);
	_tmp58_ = _tmp57_;
	_vala_ccode_node_unref0 (_tmp56_);
	_vala_ccode_node_unref0 (_tmp52_);
	cforcond = _tmp58_;
	_tmp59_ = index_name;
	_tmp60_ = vala_ccode_identifier_new (_tmp59_);
	_tmp61_ = _tmp60_;
	_tmp62_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp61_);
	_tmp63_ = _tmp62_;
	_vala_ccode_node_unref0 (_tmp61_);
	cforiter = _tmp63_;
	_tmp64_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp65_ = _tmp64_;
	_tmp66_ = cforinit;
	_tmp67_ = cforcond;
	_tmp68_ = cforiter;
	vala_ccode_function_open_for (_tmp65_, (ValaCCodeExpression*) _tmp66_, (ValaCCodeExpression*) _tmp67_, (ValaCCodeExpression*) _tmp68_);
	_tmp69_ = dim;
	_tmp70_ = array_type;
	_tmp71_ = vala_array_type_get_rank (_tmp70_);
	_tmp72_ = _tmp71_;
	if (_tmp69_ < _tmp72_) {
		ValaArrayType* _tmp73_;
		gint _tmp74_;
		ValaCCodeExpression* _tmp75_;
		ValaCCodeExpression* _tmp76_;
		ValaCCodeExpression* _tmp77_;
		_tmp73_ = array_type;
		_tmp74_ = dim;
		_tmp75_ = array_expr;
		_tmp76_ = array_iter_expr;
		_tmp77_ = vala_gvariant_module_serialize_array_dim (self, _tmp73_, _tmp74_ + 1, _tmp75_, _tmp76_);
		_vala_ccode_node_unref0 (element_variant);
		element_variant = _tmp77_;
	} else {
		ValaCCodeUnaryExpression* element_expr = NULL;
		ValaCCodeExpression* _tmp78_;
		ValaCCodeUnaryExpression* _tmp79_;
		ValaArrayType* _tmp80_;
		ValaDataType* _tmp81_;
		ValaDataType* _tmp82_;
		ValaCCodeUnaryExpression* _tmp83_;
		ValaCCodeExpression* _tmp84_;
		_tmp78_ = array_iter_expr;
		_tmp79_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp78_);
		element_expr = _tmp79_;
		_tmp80_ = array_type;
		_tmp81_ = vala_array_type_get_element_type (_tmp80_);
		_tmp82_ = _tmp81_;
		_tmp83_ = element_expr;
		_tmp84_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, _tmp82_, (ValaCCodeExpression*) _tmp83_);
		_vala_ccode_node_unref0 (element_variant);
		element_variant = _tmp84_;
		_vala_ccode_node_unref0 (element_expr);
	}
	_tmp85_ = vala_ccode_identifier_new ("g_variant_builder_add_value");
	_tmp86_ = _tmp85_;
	_tmp87_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp86_);
	_tmp88_ = _tmp87_;
	_vala_ccode_node_unref0 (_tmp86_);
	builder_add = _tmp88_;
	_tmp89_ = builder_add;
	_tmp90_ = builder_name;
	_tmp91_ = vala_ccode_identifier_new (_tmp90_);
	_tmp92_ = _tmp91_;
	_tmp93_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp92_);
	_tmp94_ = _tmp93_;
	vala_ccode_function_call_add_argument (_tmp89_, (ValaCCodeExpression*) _tmp94_);
	_vala_ccode_node_unref0 (_tmp94_);
	_vala_ccode_node_unref0 (_tmp92_);
	_tmp95_ = builder_add;
	_tmp96_ = element_variant;
	vala_ccode_function_call_add_argument (_tmp95_, _tmp96_);
	_tmp97_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp98_ = _tmp97_;
	_tmp99_ = builder_add;
	vala_ccode_function_add_expression (_tmp98_, (ValaCCodeExpression*) _tmp99_);
	_tmp100_ = dim;
	_tmp101_ = array_type;
	_tmp102_ = vala_array_type_get_rank (_tmp101_);
	_tmp103_ = _tmp102_;
	if (_tmp100_ == _tmp103_) {
		ValaCCodeUnaryExpression* array_iter_incr = NULL;
		ValaCCodeExpression* _tmp104_;
		ValaCCodeUnaryExpression* _tmp105_;
		ValaCCodeFunction* _tmp106_;
		ValaCCodeFunction* _tmp107_;
		ValaCCodeUnaryExpression* _tmp108_;
		_tmp104_ = array_iter_expr;
		_tmp105_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, _tmp104_);
		array_iter_incr = _tmp105_;
		_tmp106_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp107_ = _tmp106_;
		_tmp108_ = array_iter_incr;
		vala_ccode_function_add_expression (_tmp107_, (ValaCCodeExpression*) _tmp108_);
		_vala_ccode_node_unref0 (array_iter_incr);
	}
	_tmp109_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp110_ = _tmp109_;
	vala_ccode_function_close (_tmp110_);
	_tmp111_ = vala_ccode_identifier_new ("g_variant_builder_end");
	_tmp112_ = _tmp111_;
	_tmp113_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp112_);
	_tmp114_ = _tmp113_;
	_vala_ccode_node_unref0 (_tmp112_);
	builder_end = _tmp114_;
	_tmp115_ = builder_name;
	_tmp116_ = vala_ccode_identifier_new (_tmp115_);
	_tmp117_ = _tmp116_;
	_tmp118_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp117_);
	_tmp119_ = _tmp118_;
	vala_ccode_function_call_add_argument (builder_end, (ValaCCodeExpression*) _tmp119_);
	_vala_ccode_node_unref0 (_tmp119_);
	_vala_ccode_node_unref0 (_tmp117_);
	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_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) {
	ValaCCodeExpression* result = NULL;
	gchar* buffer_name = NULL;
	gint _tmp0_;
	gint _tmp1_;
	gchar* _tmp2_;
	ValaCCodeFunctionCall* gvariant_type = NULL;
	ValaCCodeIdentifier* _tmp3_;
	ValaCCodeIdentifier* _tmp4_;
	ValaCCodeFunctionCall* _tmp5_;
	ValaCCodeFunctionCall* _tmp6_;
	ValaArrayType* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	ValaCCodeConstant* _tmp12_;
	ValaCCodeConstant* _tmp13_;
	ValaCCodeFunctionCall* dup_call = NULL;
	ValaCCodeIdentifier* _tmp14_;
	ValaCCodeIdentifier* _tmp15_;
	ValaCCodeFunctionCall* _tmp16_;
	ValaCCodeFunctionCall* _tmp17_;
	ValaCCodeExpression* _tmp18_;
	ValaCCodeExpression* _tmp19_;
	ValaCCodeExpression* _tmp20_;
	ValaCCodeExpression* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	ValaCCodeFunction* _tmp23_;
	ValaArrayType* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	ValaCCodeVariableDeclarator* _tmp27_;
	ValaCCodeVariableDeclarator* _tmp28_;
	ValaCCodeFunctionCall* new_call = NULL;
	ValaCCodeIdentifier* _tmp29_;
	ValaCCodeIdentifier* _tmp30_;
	ValaCCodeFunctionCall* _tmp31_;
	ValaCCodeFunctionCall* _tmp32_;
	ValaCCodeIdentifier* _tmp33_;
	ValaCCodeIdentifier* _tmp34_;
	ValaCCodeExpression* _tmp35_;
	ValaCCodeExpression* _tmp36_;
	ValaCCodeExpression* _tmp37_;
	ValaCCodeConstant* _tmp38_;
	ValaCCodeConstant* _tmp39_;
	ValaCCodeIdentifier* _tmp40_;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeIdentifier* _tmp43_;
	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_ = array_type;
	_tmp8_ = vala_gvariant_module_get_type_signature ((ValaDataType*) _tmp7_, 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 (gvariant_type, (ValaCCodeExpression*) _tmp13_);
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp11_);
	_g_free0 (_tmp9_);
	_tmp14_ = vala_ccode_identifier_new ("g_memdup");
	_tmp15_ = _tmp14_;
	_tmp16_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp15_);
	_tmp17_ = _tmp16_;
	_vala_ccode_node_unref0 (_tmp15_);
	dup_call = _tmp17_;
	_tmp18_ = array_expr;
	vala_ccode_function_call_add_argument (dup_call, _tmp18_);
	_tmp19_ = array_expr;
	_tmp20_ = vala_gvariant_module_get_array_length (self, _tmp19_, 1);
	_tmp21_ = _tmp20_;
	vala_ccode_function_call_add_argument (dup_call, _tmp21_);
	_vala_ccode_node_unref0 (_tmp21_);
	_tmp22_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp23_ = _tmp22_;
	_tmp24_ = array_type;
	_tmp25_ = vala_get_ccode_name ((ValaCodeNode*) _tmp24_);
	_tmp26_ = _tmp25_;
	_tmp27_ = vala_ccode_variable_declarator_new (buffer_name, (ValaCCodeExpression*) dup_call, NULL);
	_tmp28_ = _tmp27_;
	vala_ccode_function_add_declaration (_tmp23_, _tmp26_, (ValaCCodeDeclarator*) _tmp28_, 0);
	_vala_ccode_node_unref0 (_tmp28_);
	_g_free0 (_tmp26_);
	_tmp29_ = vala_ccode_identifier_new ("g_variant_new_from_data");
	_tmp30_ = _tmp29_;
	_tmp31_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp30_);
	_tmp32_ = _tmp31_;
	_vala_ccode_node_unref0 (_tmp30_);
	new_call = _tmp32_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) gvariant_type);
	_tmp33_ = vala_ccode_identifier_new (buffer_name);
	_tmp34_ = _tmp33_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp34_);
	_vala_ccode_node_unref0 (_tmp34_);
	_tmp35_ = array_expr;
	_tmp36_ = vala_gvariant_module_get_array_length (self, _tmp35_, 1);
	_tmp37_ = _tmp36_;
	vala_ccode_function_call_add_argument (new_call, _tmp37_);
	_vala_ccode_node_unref0 (_tmp37_);
	_tmp38_ = vala_ccode_constant_new ("TRUE");
	_tmp39_ = _tmp38_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp39_);
	_vala_ccode_node_unref0 (_tmp39_);
	_tmp40_ = vala_ccode_identifier_new ("g_free");
	_tmp41_ = _tmp40_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp41_);
	_vala_ccode_node_unref0 (_tmp41_);
	_tmp42_ = vala_ccode_identifier_new (buffer_name);
	_tmp43_ = _tmp42_;
	vala_ccode_function_call_add_argument (new_call, (ValaCCodeExpression*) _tmp43_);
	_vala_ccode_node_unref0 (_tmp43_);
	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) {
	ValaCCodeExpression* result = NULL;
	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;
	gboolean _tmp51_;
	ValaCCodeFunctionCall* builder_end = NULL;
	ValaCCodeIdentifier* _tmp52_;
	ValaCCodeIdentifier* _tmp53_;
	ValaCCodeFunctionCall* _tmp54_;
	ValaCCodeFunctionCall* _tmp55_;
	ValaCCodeFunctionCall* _tmp56_;
	const gchar* _tmp57_;
	ValaCCodeIdentifier* _tmp58_;
	ValaCCodeIdentifier* _tmp59_;
	ValaCCodeUnaryExpression* _tmp60_;
	ValaCCodeUnaryExpression* _tmp61_;
	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;
		ValaStruct* _tmp24_;
		ValaList* _tmp25_;
		gint _f_size = 0;
		ValaList* _tmp26_;
		gint _tmp27_;
		gint _tmp28_;
		gint _f_index = 0;
		_tmp24_ = st;
		_tmp25_ = vala_struct_get_fields (_tmp24_);
		_f_list = _tmp25_;
		_tmp26_ = _f_list;
		_tmp27_ = vala_collection_get_size ((ValaCollection*) _tmp26_);
		_tmp28_ = _tmp27_;
		_f_size = _tmp28_;
		_f_index = -1;
		while (TRUE) {
			gint _tmp29_;
			gint _tmp30_;
			gint _tmp31_;
			ValaField* f = NULL;
			ValaList* _tmp32_;
			gint _tmp33_;
			gpointer _tmp34_;
			ValaField* _tmp35_;
			ValaMemberBinding _tmp36_;
			ValaMemberBinding _tmp37_;
			ValaField* _tmp38_;
			ValaDataType* _tmp39_;
			ValaDataType* _tmp40_;
			const gchar* _tmp41_;
			ValaCCodeIdentifier* _tmp42_;
			ValaCCodeIdentifier* _tmp43_;
			ValaCCodeExpression* _tmp44_;
			ValaField* _tmp45_;
			gchar* _tmp46_;
			gchar* _tmp47_;
			ValaCCodeMemberAccess* _tmp48_;
			ValaCCodeMemberAccess* _tmp49_;
			ValaField* _tmp50_;
			_tmp29_ = _f_index;
			_f_index = _tmp29_ + 1;
			_tmp30_ = _f_index;
			_tmp31_ = _f_size;
			if (!(_tmp30_ < _tmp31_)) {
				break;
			}
			_tmp32_ = _f_list;
			_tmp33_ = _f_index;
			_tmp34_ = vala_list_get (_tmp32_, _tmp33_);
			f = (ValaField*) _tmp34_;
			_tmp35_ = f;
			_tmp36_ = vala_field_get_binding (_tmp35_);
			_tmp37_ = _tmp36_;
			if (_tmp37_ != VALA_MEMBER_BINDING_INSTANCE) {
				_vala_code_node_unref0 (f);
				continue;
			}
			field_found = TRUE;
			_tmp38_ = f;
			_tmp39_ = vala_variable_get_variable_type ((ValaVariable*) _tmp38_);
			_tmp40_ = _tmp39_;
			_tmp41_ = builder_name;
			_tmp42_ = vala_ccode_identifier_new (_tmp41_);
			_tmp43_ = _tmp42_;
			_tmp44_ = struct_expr;
			_tmp45_ = f;
			_tmp46_ = vala_get_ccode_name ((ValaCodeNode*) _tmp45_);
			_tmp47_ = _tmp46_;
			_tmp48_ = vala_ccode_member_access_new (_tmp44_, _tmp47_, FALSE);
			_tmp49_ = _tmp48_;
			_tmp50_ = f;
			vala_gvariant_module_write_expression (self, _tmp40_, (ValaCCodeExpression*) _tmp43_, (ValaCCodeExpression*) _tmp49_, (ValaSymbol*) _tmp50_);
			_vala_ccode_node_unref0 (_tmp49_);
			_g_free0 (_tmp47_);
			_vala_ccode_node_unref0 (_tmp43_);
			_vala_code_node_unref0 (f);
		}
		_vala_iterable_unref0 (_f_list);
	}
	_tmp51_ = field_found;
	if (!_tmp51_) {
		result = NULL;
		_vala_ccode_node_unref0 (iter_call);
		_g_free0 (builder_name);
		return result;
	}
	_tmp52_ = vala_ccode_identifier_new ("g_variant_builder_end");
	_tmp53_ = _tmp52_;
	_tmp54_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp53_);
	_tmp55_ = _tmp54_;
	_vala_ccode_node_unref0 (_tmp53_);
	builder_end = _tmp55_;
	_tmp56_ = builder_end;
	_tmp57_ = builder_name;
	_tmp58_ = vala_ccode_identifier_new (_tmp57_);
	_tmp59_ = _tmp58_;
	_tmp60_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp59_);
	_tmp61_ = _tmp60_;
	vala_ccode_function_call_add_argument (_tmp56_, (ValaCCodeExpression*) _tmp61_);
	_vala_ccode_node_unref0 (_tmp61_);
	_vala_ccode_node_unref0 (_tmp59_);
	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) {
	ValaCCodeExpression* result = NULL;
	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;
	ValaObjectType* _tmp12_;
	ValaList* _tmp13_;
	ValaList* _tmp14_;
	gint _tmp15_;
	gint _tmp16_;
	ValaDataType* key_type = NULL;
	ValaList* _tmp17_;
	gpointer _tmp18_;
	ValaDataType* value_type = NULL;
	ValaList* _tmp19_;
	gpointer _tmp20_;
	ValaCCodeFunction* _tmp21_;
	ValaCCodeFunction* _tmp22_;
	const gchar* _tmp23_;
	ValaCCodeVariableDeclarator* _tmp24_;
	ValaCCodeVariableDeclarator* _tmp25_;
	ValaCCodeFunction* _tmp26_;
	ValaCCodeFunction* _tmp27_;
	const gchar* _tmp28_;
	ValaCCodeVariableDeclarator* _tmp29_;
	ValaCCodeVariableDeclarator* _tmp30_;
	ValaCCodeFunction* _tmp31_;
	ValaCCodeFunction* _tmp32_;
	const gchar* _tmp33_;
	ValaCCodeVariableDeclarator* _tmp34_;
	ValaCCodeVariableDeclarator* _tmp35_;
	ValaCCodeFunction* _tmp36_;
	ValaCCodeFunction* _tmp37_;
	const gchar* _tmp38_;
	ValaCCodeVariableDeclarator* _tmp39_;
	ValaCCodeVariableDeclarator* _tmp40_;
	ValaCCodeFunctionCall* iter_init_call = NULL;
	ValaCCodeIdentifier* _tmp41_;
	ValaCCodeIdentifier* _tmp42_;
	ValaCCodeFunctionCall* _tmp43_;
	ValaCCodeFunctionCall* _tmp44_;
	ValaCCodeFunctionCall* _tmp45_;
	const gchar* _tmp46_;
	ValaCCodeIdentifier* _tmp47_;
	ValaCCodeIdentifier* _tmp48_;
	ValaCCodeUnaryExpression* _tmp49_;
	ValaCCodeUnaryExpression* _tmp50_;
	ValaCCodeFunctionCall* _tmp51_;
	ValaCCodeExpression* _tmp52_;
	ValaCCodeFunction* _tmp53_;
	ValaCCodeFunction* _tmp54_;
	ValaCCodeFunctionCall* _tmp55_;
	ValaCCodeFunctionCall* gvariant_type = NULL;
	ValaCCodeIdentifier* _tmp56_;
	ValaCCodeIdentifier* _tmp57_;
	ValaCCodeFunctionCall* _tmp58_;
	ValaCCodeFunctionCall* _tmp59_;
	ValaCCodeFunctionCall* _tmp60_;
	ValaObjectType* _tmp61_;
	gchar* _tmp62_;
	gchar* _tmp63_;
	gchar* _tmp64_;
	gchar* _tmp65_;
	ValaCCodeConstant* _tmp66_;
	ValaCCodeConstant* _tmp67_;
	ValaCCodeFunctionCall* iter_call = NULL;
	ValaCCodeIdentifier* _tmp68_;
	ValaCCodeIdentifier* _tmp69_;
	ValaCCodeFunctionCall* _tmp70_;
	ValaCCodeFunctionCall* _tmp71_;
	ValaCCodeFunctionCall* _tmp72_;
	const gchar* _tmp73_;
	ValaCCodeIdentifier* _tmp74_;
	ValaCCodeIdentifier* _tmp75_;
	ValaCCodeUnaryExpression* _tmp76_;
	ValaCCodeUnaryExpression* _tmp77_;
	ValaCCodeFunctionCall* _tmp78_;
	ValaCCodeFunctionCall* _tmp79_;
	ValaCCodeFunction* _tmp80_;
	ValaCCodeFunction* _tmp81_;
	ValaCCodeFunctionCall* _tmp82_;
	ValaCCodeFunctionCall* iter_next_call = NULL;
	ValaCCodeIdentifier* _tmp83_;
	ValaCCodeIdentifier* _tmp84_;
	ValaCCodeFunctionCall* _tmp85_;
	ValaCCodeFunctionCall* _tmp86_;
	ValaCCodeFunctionCall* _tmp87_;
	const gchar* _tmp88_;
	ValaCCodeIdentifier* _tmp89_;
	ValaCCodeIdentifier* _tmp90_;
	ValaCCodeUnaryExpression* _tmp91_;
	ValaCCodeUnaryExpression* _tmp92_;
	ValaCCodeFunctionCall* _tmp93_;
	const gchar* _tmp94_;
	ValaCCodeIdentifier* _tmp95_;
	ValaCCodeIdentifier* _tmp96_;
	ValaCCodeUnaryExpression* _tmp97_;
	ValaCCodeUnaryExpression* _tmp98_;
	ValaCCodeFunctionCall* _tmp99_;
	const gchar* _tmp100_;
	ValaCCodeIdentifier* _tmp101_;
	ValaCCodeIdentifier* _tmp102_;
	ValaCCodeUnaryExpression* _tmp103_;
	ValaCCodeUnaryExpression* _tmp104_;
	ValaCCodeFunction* _tmp105_;
	ValaCCodeFunction* _tmp106_;
	ValaCCodeFunctionCall* _tmp107_;
	ValaCCodeFunction* _tmp108_;
	ValaCCodeFunction* _tmp109_;
	ValaDataType* _tmp110_;
	gchar* _tmp111_;
	gchar* _tmp112_;
	ValaCCodeVariableDeclarator* _tmp113_;
	ValaCCodeVariableDeclarator* _tmp114_;
	ValaCCodeFunction* _tmp115_;
	ValaCCodeFunction* _tmp116_;
	ValaDataType* _tmp117_;
	gchar* _tmp118_;
	gchar* _tmp119_;
	ValaCCodeVariableDeclarator* _tmp120_;
	ValaCCodeVariableDeclarator* _tmp121_;
	ValaCCodeFunction* _tmp122_;
	ValaCCodeFunction* _tmp123_;
	ValaCCodeIdentifier* _tmp124_;
	ValaCCodeIdentifier* _tmp125_;
	const gchar* _tmp126_;
	ValaCCodeIdentifier* _tmp127_;
	ValaCCodeIdentifier* _tmp128_;
	ValaDataType* _tmp129_;
	ValaCCodeExpression* _tmp130_;
	ValaCCodeExpression* _tmp131_;
	ValaCCodeFunction* _tmp132_;
	ValaCCodeFunction* _tmp133_;
	ValaCCodeIdentifier* _tmp134_;
	ValaCCodeIdentifier* _tmp135_;
	const gchar* _tmp136_;
	ValaCCodeIdentifier* _tmp137_;
	ValaCCodeIdentifier* _tmp138_;
	ValaDataType* _tmp139_;
	ValaCCodeExpression* _tmp140_;
	ValaCCodeExpression* _tmp141_;
	ValaCCodeExpression* serialized_key = NULL;
	ValaDataType* _tmp142_;
	ValaCCodeIdentifier* _tmp143_;
	ValaCCodeIdentifier* _tmp144_;
	ValaCCodeExpression* _tmp145_;
	ValaCCodeExpression* _tmp146_;
	ValaCCodeExpression* serialized_value = NULL;
	ValaDataType* _tmp147_;
	ValaCCodeIdentifier* _tmp148_;
	ValaCCodeIdentifier* _tmp149_;
	ValaCCodeExpression* _tmp150_;
	ValaCCodeExpression* _tmp151_;
	gboolean _tmp152_ = FALSE;
	ValaCCodeExpression* _tmp153_;
	ValaCCodeIdentifier* _tmp155_;
	ValaCCodeIdentifier* _tmp156_;
	ValaCCodeFunctionCall* _tmp157_;
	ValaCCodeFunctionCall* _tmp158_;
	const gchar* _tmp159_;
	ValaCCodeIdentifier* _tmp160_;
	ValaCCodeIdentifier* _tmp161_;
	ValaCCodeUnaryExpression* _tmp162_;
	ValaCCodeUnaryExpression* _tmp163_;
	ValaCCodeFunctionCall* _tmp164_;
	ValaCCodeConstant* _tmp165_;
	ValaCCodeConstant* _tmp166_;
	ValaCCodeFunctionCall* _tmp167_;
	ValaCCodeExpression* _tmp168_;
	ValaCCodeFunctionCall* _tmp169_;
	ValaCCodeExpression* _tmp170_;
	ValaCCodeFunction* _tmp171_;
	ValaCCodeFunction* _tmp172_;
	ValaCCodeFunctionCall* _tmp173_;
	ValaCCodeFunction* _tmp174_;
	ValaCCodeFunction* _tmp175_;
	ValaCCodeIdentifier* _tmp176_;
	ValaCCodeIdentifier* _tmp177_;
	ValaCCodeFunctionCall* _tmp178_;
	ValaCCodeFunctionCall* _tmp179_;
	const gchar* _tmp180_;
	ValaCCodeIdentifier* _tmp181_;
	ValaCCodeIdentifier* _tmp182_;
	ValaCCodeUnaryExpression* _tmp183_;
	ValaCCodeUnaryExpression* _tmp184_;
	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_ = type;
	_tmp13_ = vala_data_type_get_type_arguments ((ValaDataType*) _tmp12_);
	type_args = _tmp13_;
	_tmp14_ = type_args;
	_tmp15_ = vala_collection_get_size ((ValaCollection*) _tmp14_);
	_tmp16_ = _tmp15_;
	_vala_assert (_tmp16_ == 2, "type_args.size == 2");
	_tmp17_ = type_args;
	_tmp18_ = vala_list_get (_tmp17_, 0);
	key_type = (ValaDataType*) _tmp18_;
	_tmp19_ = type_args;
	_tmp20_ = vala_list_get (_tmp19_, 1);
	value_type = (ValaDataType*) _tmp20_;
	_tmp21_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp22_ = _tmp21_;
	_tmp23_ = subiter_name;
	_tmp24_ = vala_ccode_variable_declarator_new (_tmp23_, NULL, NULL);
	_tmp25_ = _tmp24_;
	vala_ccode_function_add_declaration (_tmp22_, "GVariantBuilder", (ValaCCodeDeclarator*) _tmp25_, 0);
	_vala_ccode_node_unref0 (_tmp25_);
	_tmp26_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp27_ = _tmp26_;
	_tmp28_ = tableiter_name;
	_tmp29_ = vala_ccode_variable_declarator_new (_tmp28_, NULL, NULL);
	_tmp30_ = _tmp29_;
	vala_ccode_function_add_declaration (_tmp27_, "GHashTableIter", (ValaCCodeDeclarator*) _tmp30_, 0);
	_vala_ccode_node_unref0 (_tmp30_);
	_tmp31_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp32_ = _tmp31_;
	_tmp33_ = key_name;
	_tmp34_ = vala_ccode_variable_declarator_new (_tmp33_, NULL, NULL);
	_tmp35_ = _tmp34_;
	vala_ccode_function_add_declaration (_tmp32_, "gpointer", (ValaCCodeDeclarator*) _tmp35_, 0);
	_vala_ccode_node_unref0 (_tmp35_);
	_tmp36_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp37_ = _tmp36_;
	_tmp38_ = value_name;
	_tmp39_ = vala_ccode_variable_declarator_new (_tmp38_, NULL, NULL);
	_tmp40_ = _tmp39_;
	vala_ccode_function_add_declaration (_tmp37_, "gpointer", (ValaCCodeDeclarator*) _tmp40_, 0);
	_vala_ccode_node_unref0 (_tmp40_);
	_tmp41_ = vala_ccode_identifier_new ("g_hash_table_iter_init");
	_tmp42_ = _tmp41_;
	_tmp43_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp42_);
	_tmp44_ = _tmp43_;
	_vala_ccode_node_unref0 (_tmp42_);
	iter_init_call = _tmp44_;
	_tmp45_ = iter_init_call;
	_tmp46_ = tableiter_name;
	_tmp47_ = vala_ccode_identifier_new (_tmp46_);
	_tmp48_ = _tmp47_;
	_tmp49_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp48_);
	_tmp50_ = _tmp49_;
	vala_ccode_function_call_add_argument (_tmp45_, (ValaCCodeExpression*) _tmp50_);
	_vala_ccode_node_unref0 (_tmp50_);
	_vala_ccode_node_unref0 (_tmp48_);
	_tmp51_ = iter_init_call;
	_tmp52_ = hash_table_expr;
	vala_ccode_function_call_add_argument (_tmp51_, _tmp52_);
	_tmp53_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp54_ = _tmp53_;
	_tmp55_ = iter_init_call;
	vala_ccode_function_add_expression (_tmp54_, (ValaCCodeExpression*) _tmp55_);
	_tmp56_ = vala_ccode_identifier_new ("G_VARIANT_TYPE");
	_tmp57_ = _tmp56_;
	_tmp58_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp57_);
	_tmp59_ = _tmp58_;
	_vala_ccode_node_unref0 (_tmp57_);
	gvariant_type = _tmp59_;
	_tmp60_ = gvariant_type;
	_tmp61_ = type;
	_tmp62_ = vala_gvariant_module_get_type_signature ((ValaDataType*) _tmp61_, NULL);
	_tmp63_ = _tmp62_;
	_tmp64_ = g_strdup_printf ("\"%s\"", _tmp63_);
	_tmp65_ = _tmp64_;
	_tmp66_ = vala_ccode_constant_new (_tmp65_);
	_tmp67_ = _tmp66_;
	vala_ccode_function_call_add_argument (_tmp60_, (ValaCCodeExpression*) _tmp67_);
	_vala_ccode_node_unref0 (_tmp67_);
	_g_free0 (_tmp65_);
	_g_free0 (_tmp63_);
	_tmp68_ = vala_ccode_identifier_new ("g_variant_builder_init");
	_tmp69_ = _tmp68_;
	_tmp70_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp69_);
	_tmp71_ = _tmp70_;
	_vala_ccode_node_unref0 (_tmp69_);
	iter_call = _tmp71_;
	_tmp72_ = iter_call;
	_tmp73_ = subiter_name;
	_tmp74_ = vala_ccode_identifier_new (_tmp73_);
	_tmp75_ = _tmp74_;
	_tmp76_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp75_);
	_tmp77_ = _tmp76_;
	vala_ccode_function_call_add_argument (_tmp72_, (ValaCCodeExpression*) _tmp77_);
	_vala_ccode_node_unref0 (_tmp77_);
	_vala_ccode_node_unref0 (_tmp75_);
	_tmp78_ = iter_call;
	_tmp79_ = gvariant_type;
	vala_ccode_function_call_add_argument (_tmp78_, (ValaCCodeExpression*) _tmp79_);
	_tmp80_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp81_ = _tmp80_;
	_tmp82_ = iter_call;
	vala_ccode_function_add_expression (_tmp81_, (ValaCCodeExpression*) _tmp82_);
	_tmp83_ = vala_ccode_identifier_new ("g_hash_table_iter_next");
	_tmp84_ = _tmp83_;
	_tmp85_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp84_);
	_tmp86_ = _tmp85_;
	_vala_ccode_node_unref0 (_tmp84_);
	iter_next_call = _tmp86_;
	_tmp87_ = iter_next_call;
	_tmp88_ = tableiter_name;
	_tmp89_ = vala_ccode_identifier_new (_tmp88_);
	_tmp90_ = _tmp89_;
	_tmp91_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp90_);
	_tmp92_ = _tmp91_;
	vala_ccode_function_call_add_argument (_tmp87_, (ValaCCodeExpression*) _tmp92_);
	_vala_ccode_node_unref0 (_tmp92_);
	_vala_ccode_node_unref0 (_tmp90_);
	_tmp93_ = iter_next_call;
	_tmp94_ = key_name;
	_tmp95_ = vala_ccode_identifier_new (_tmp94_);
	_tmp96_ = _tmp95_;
	_tmp97_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp96_);
	_tmp98_ = _tmp97_;
	vala_ccode_function_call_add_argument (_tmp93_, (ValaCCodeExpression*) _tmp98_);
	_vala_ccode_node_unref0 (_tmp98_);
	_vala_ccode_node_unref0 (_tmp96_);
	_tmp99_ = iter_next_call;
	_tmp100_ = value_name;
	_tmp101_ = vala_ccode_identifier_new (_tmp100_);
	_tmp102_ = _tmp101_;
	_tmp103_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp102_);
	_tmp104_ = _tmp103_;
	vala_ccode_function_call_add_argument (_tmp99_, (ValaCCodeExpression*) _tmp104_);
	_vala_ccode_node_unref0 (_tmp104_);
	_vala_ccode_node_unref0 (_tmp102_);
	_tmp105_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp106_ = _tmp105_;
	_tmp107_ = iter_next_call;
	vala_ccode_function_open_while (_tmp106_, (ValaCCodeExpression*) _tmp107_);
	_tmp108_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp109_ = _tmp108_;
	_tmp110_ = key_type;
	_tmp111_ = vala_get_ccode_name ((ValaCodeNode*) _tmp110_);
	_tmp112_ = _tmp111_;
	_tmp113_ = vala_ccode_variable_declarator_new ("_key", NULL, NULL);
	_tmp114_ = _tmp113_;
	vala_ccode_function_add_declaration (_tmp109_, _tmp112_, (ValaCCodeDeclarator*) _tmp114_, 0);
	_vala_ccode_node_unref0 (_tmp114_);
	_g_free0 (_tmp112_);
	_tmp115_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp116_ = _tmp115_;
	_tmp117_ = value_type;
	_tmp118_ = vala_get_ccode_name ((ValaCodeNode*) _tmp117_);
	_tmp119_ = _tmp118_;
	_tmp120_ = vala_ccode_variable_declarator_new ("_value", NULL, NULL);
	_tmp121_ = _tmp120_;
	vala_ccode_function_add_declaration (_tmp116_, _tmp119_, (ValaCCodeDeclarator*) _tmp121_, 0);
	_vala_ccode_node_unref0 (_tmp121_);
	_g_free0 (_tmp119_);
	_tmp122_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp123_ = _tmp122_;
	_tmp124_ = vala_ccode_identifier_new ("_key");
	_tmp125_ = _tmp124_;
	_tmp126_ = key_name;
	_tmp127_ = vala_ccode_identifier_new (_tmp126_);
	_tmp128_ = _tmp127_;
	_tmp129_ = key_type;
	_tmp130_ = vala_ccode_base_module_convert_from_generic_pointer ((ValaCCodeBaseModule*) self, (ValaCCodeExpression*) _tmp128_, _tmp129_);
	_tmp131_ = _tmp130_;
	vala_ccode_function_add_assignment (_tmp123_, (ValaCCodeExpression*) _tmp125_, _tmp131_);
	_vala_ccode_node_unref0 (_tmp131_);
	_vala_ccode_node_unref0 (_tmp128_);
	_vala_ccode_node_unref0 (_tmp125_);
	_tmp132_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp133_ = _tmp132_;
	_tmp134_ = vala_ccode_identifier_new ("_value");
	_tmp135_ = _tmp134_;
	_tmp136_ = value_name;
	_tmp137_ = vala_ccode_identifier_new (_tmp136_);
	_tmp138_ = _tmp137_;
	_tmp139_ = value_type;
	_tmp140_ = vala_ccode_base_module_convert_from_generic_pointer ((ValaCCodeBaseModule*) self, (ValaCCodeExpression*) _tmp138_, _tmp139_);
	_tmp141_ = _tmp140_;
	vala_ccode_function_add_assignment (_tmp133_, (ValaCCodeExpression*) _tmp135_, _tmp141_);
	_vala_ccode_node_unref0 (_tmp141_);
	_vala_ccode_node_unref0 (_tmp138_);
	_vala_ccode_node_unref0 (_tmp135_);
	_tmp142_ = key_type;
	_tmp143_ = vala_ccode_identifier_new ("_key");
	_tmp144_ = _tmp143_;
	_tmp145_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, _tmp142_, (ValaCCodeExpression*) _tmp144_);
	_tmp146_ = _tmp145_;
	_vala_ccode_node_unref0 (_tmp144_);
	serialized_key = _tmp146_;
	_tmp147_ = value_type;
	_tmp148_ = vala_ccode_identifier_new ("_value");
	_tmp149_ = _tmp148_;
	_tmp150_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, _tmp147_, (ValaCCodeExpression*) _tmp149_);
	_tmp151_ = _tmp150_;
	_vala_ccode_node_unref0 (_tmp149_);
	serialized_value = _tmp151_;
	_tmp153_ = serialized_key;
	if (_tmp153_ == NULL) {
		_tmp152_ = TRUE;
	} else {
		ValaCCodeExpression* _tmp154_;
		_tmp154_ = serialized_value;
		_tmp152_ = _tmp154_ == NULL;
	}
	if (_tmp152_) {
		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;
	}
	_tmp155_ = vala_ccode_identifier_new ("g_variant_builder_add");
	_tmp156_ = _tmp155_;
	_tmp157_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp156_);
	_vala_ccode_node_unref0 (iter_call);
	iter_call = _tmp157_;
	_vala_ccode_node_unref0 (_tmp156_);
	_tmp158_ = iter_call;
	_tmp159_ = subiter_name;
	_tmp160_ = vala_ccode_identifier_new (_tmp159_);
	_tmp161_ = _tmp160_;
	_tmp162_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp161_);
	_tmp163_ = _tmp162_;
	vala_ccode_function_call_add_argument (_tmp158_, (ValaCCodeExpression*) _tmp163_);
	_vala_ccode_node_unref0 (_tmp163_);
	_vala_ccode_node_unref0 (_tmp161_);
	_tmp164_ = iter_call;
	_tmp165_ = vala_ccode_constant_new ("\"{?*}\"");
	_tmp166_ = _tmp165_;
	vala_ccode_function_call_add_argument (_tmp164_, (ValaCCodeExpression*) _tmp166_);
	_vala_ccode_node_unref0 (_tmp166_);
	_tmp167_ = iter_call;
	_tmp168_ = serialized_key;
	vala_ccode_function_call_add_argument (_tmp167_, _tmp168_);
	_tmp169_ = iter_call;
	_tmp170_ = serialized_value;
	vala_ccode_function_call_add_argument (_tmp169_, _tmp170_);
	_tmp171_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp172_ = _tmp171_;
	_tmp173_ = iter_call;
	vala_ccode_function_add_expression (_tmp172_, (ValaCCodeExpression*) _tmp173_);
	_tmp174_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp175_ = _tmp174_;
	vala_ccode_function_close (_tmp175_);
	_tmp176_ = vala_ccode_identifier_new ("g_variant_builder_end");
	_tmp177_ = _tmp176_;
	_tmp178_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp177_);
	_vala_ccode_node_unref0 (iter_call);
	iter_call = _tmp178_;
	_vala_ccode_node_unref0 (_tmp177_);
	_tmp179_ = iter_call;
	_tmp180_ = subiter_name;
	_tmp181_ = vala_ccode_identifier_new (_tmp180_);
	_tmp182_ = _tmp181_;
	_tmp183_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp182_);
	_tmp184_ = _tmp183_;
	vala_ccode_function_call_add_argument (_tmp179_, (ValaCCodeExpression*) _tmp184_);
	_vala_ccode_node_unref0 (_tmp184_);
	_vala_ccode_node_unref0 (_tmp182_);
	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;
	ValaCCodeExpression* result = NULL;
	ValaGVariantModuleBasicTypeInfo basic_type = {0};
	ValaCCodeExpression* _result_ = NULL;
	ValaDataType* _tmp0_;
	ValaTypeSymbol* _tmp1_;
	ValaTypeSymbol* _tmp2_;
	gboolean _tmp3_;
	ValaCCodeExpression* _tmp63_;
	self = (ValaGVariantModule*) base;
	g_return_val_if_fail (type != NULL, NULL);
	g_return_val_if_fail (expr != NULL, NULL);
	_result_ = NULL;
	_tmp0_ = type;
	_tmp1_ = vala_data_type_get_data_type (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_gvariant_module_is_string_marshalled_enum (_tmp2_);
	if (_tmp3_) {
		ValaGVariantModuleBasicTypeInfo _tmp4_ = {0};
		ValaDataType* _tmp5_;
		ValaCCodeExpression* _tmp6_;
		ValaCCodeExpression* _tmp7_;
		ValaGVariantModuleBasicTypeInfo _tmp8_;
		ValaCCodeExpression* _tmp9_;
		ValaCCodeExpression* _tmp10_;
		vala_gvariant_module_get_basic_type_info (self, "s", &_tmp4_);
		basic_type = _tmp4_;
		_tmp5_ = type;
		_tmp6_ = expr;
		_tmp7_ = vala_gvariant_module_generate_enum_value_to_string (self, G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_ENUM_VALUE_TYPE) ? ((ValaEnumValueType*) _tmp5_) : NULL, _tmp6_);
		_vala_ccode_node_unref0 (_result_);
		_result_ = _tmp7_;
		_tmp8_ = basic_type;
		_tmp9_ = _result_;
		_tmp10_ = vala_gvariant_module_serialize_basic (self, &_tmp8_, _tmp9_);
		_vala_ccode_node_unref0 (_result_);
		_result_ = _tmp10_;
	} else {
		ValaDataType* _tmp11_;
		gchar* _tmp12_;
		gchar* _tmp13_;
		ValaGVariantModuleBasicTypeInfo _tmp14_ = {0};
		gboolean _tmp15_;
		gboolean _tmp16_;
		_tmp11_ = type;
		_tmp12_ = vala_gvariant_module_get_type_signature (_tmp11_, NULL);
		_tmp13_ = _tmp12_;
		_tmp15_ = vala_gvariant_module_get_basic_type_info (self, _tmp13_, &_tmp14_);
		basic_type = _tmp14_;
		_tmp16_ = _tmp15_;
		_g_free0 (_tmp13_);
		if (_tmp16_) {
			ValaGVariantModuleBasicTypeInfo _tmp17_;
			ValaCCodeExpression* _tmp18_;
			ValaCCodeExpression* _tmp19_;
			_tmp17_ = basic_type;
			_tmp18_ = expr;
			_tmp19_ = vala_gvariant_module_serialize_basic (self, &_tmp17_, _tmp18_);
			_vala_ccode_node_unref0 (_result_);
			_result_ = _tmp19_;
		} else {
			ValaDataType* _tmp20_;
			_tmp20_ = type;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_ARRAY_TYPE)) {
				ValaDataType* _tmp21_;
				ValaCCodeExpression* _tmp22_;
				ValaCCodeExpression* _tmp23_;
				_tmp21_ = type;
				_tmp22_ = expr;
				_tmp23_ = vala_gvariant_module_serialize_array (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), _tmp22_);
				_vala_ccode_node_unref0 (_result_);
				_result_ = _tmp23_;
			} else {
				ValaDataType* _tmp24_;
				ValaTypeSymbol* _tmp25_;
				ValaTypeSymbol* _tmp26_;
				_tmp24_ = type;
				_tmp25_ = vala_data_type_get_data_type (_tmp24_);
				_tmp26_ = _tmp25_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp26_, VALA_TYPE_STRUCT)) {
					ValaCCodeExpression* st_expr = NULL;
					ValaCCodeExpression* _tmp27_;
					ValaCCodeExpression* _tmp28_;
					ValaDataType* _tmp29_;
					gboolean _tmp30_;
					gboolean _tmp31_;
					ValaDataType* _tmp34_;
					ValaTypeSymbol* _tmp35_;
					ValaTypeSymbol* _tmp36_;
					ValaCCodeExpression* _tmp37_;
					ValaCCodeExpression* _tmp38_;
					_tmp27_ = expr;
					_tmp28_ = _vala_ccode_node_ref0 (_tmp27_);
					st_expr = _tmp28_;
					_tmp29_ = type;
					_tmp30_ = vala_data_type_get_nullable (_tmp29_);
					_tmp31_ = _tmp30_;
					if (_tmp31_) {
						ValaCCodeExpression* _tmp32_;
						ValaCCodeUnaryExpression* _tmp33_;
						_tmp32_ = st_expr;
						_tmp33_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp32_);
						_vala_ccode_node_unref0 (st_expr);
						st_expr = (ValaCCodeExpression*) _tmp33_;
					}
					_tmp34_ = type;
					_tmp35_ = vala_data_type_get_data_type (_tmp34_);
					_tmp36_ = _tmp35_;
					_tmp37_ = st_expr;
					_tmp38_ = vala_gvariant_module_serialize_struct (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, VALA_TYPE_STRUCT, ValaStruct), _tmp37_);
					_vala_ccode_node_unref0 (_result_);
					_result_ = _tmp38_;
					_vala_ccode_node_unref0 (st_expr);
				} else {
					ValaDataType* _tmp39_;
					_tmp39_ = type;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp39_, VALA_TYPE_OBJECT_TYPE)) {
						ValaDataType* _tmp40_;
						ValaTypeSymbol* _tmp41_;
						ValaTypeSymbol* _tmp42_;
						gchar* _tmp43_;
						gchar* _tmp44_;
						gboolean _tmp45_;
						_tmp40_ = type;
						_tmp41_ = vala_data_type_get_data_type (_tmp40_);
						_tmp42_ = _tmp41_;
						_tmp43_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp42_);
						_tmp44_ = _tmp43_;
						_tmp45_ = g_strcmp0 (_tmp44_, "GLib.Variant") == 0;
						_g_free0 (_tmp44_);
						if (_tmp45_) {
							ValaCCodeFunctionCall* variant_new = NULL;
							ValaCCodeIdentifier* _tmp46_;
							ValaCCodeIdentifier* _tmp47_;
							ValaCCodeFunctionCall* _tmp48_;
							ValaCCodeFunctionCall* _tmp49_;
							ValaCCodeFunctionCall* _tmp50_;
							ValaCCodeExpression* _tmp51_;
							ValaCCodeFunctionCall* _tmp52_;
							ValaCCodeExpression* _tmp53_;
							_tmp46_ = vala_ccode_identifier_new ("g_variant_new_variant");
							_tmp47_ = _tmp46_;
							_tmp48_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp47_);
							_tmp49_ = _tmp48_;
							_vala_ccode_node_unref0 (_tmp47_);
							variant_new = _tmp49_;
							_tmp50_ = variant_new;
							_tmp51_ = expr;
							vala_ccode_function_call_add_argument (_tmp50_, _tmp51_);
							_tmp52_ = variant_new;
							_tmp53_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp52_);
							_vala_ccode_node_unref0 (_result_);
							_result_ = _tmp53_;
							_vala_ccode_node_unref0 (variant_new);
						} else {
							ValaDataType* _tmp54_;
							ValaTypeSymbol* _tmp55_;
							ValaTypeSymbol* _tmp56_;
							gchar* _tmp57_;
							gchar* _tmp58_;
							gboolean _tmp59_;
							_tmp54_ = type;
							_tmp55_ = vala_data_type_get_data_type (_tmp54_);
							_tmp56_ = _tmp55_;
							_tmp57_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp56_);
							_tmp58_ = _tmp57_;
							_tmp59_ = g_strcmp0 (_tmp58_, "GLib.HashTable") == 0;
							_g_free0 (_tmp58_);
							if (_tmp59_) {
								ValaDataType* _tmp60_;
								ValaCCodeExpression* _tmp61_;
								ValaCCodeExpression* _tmp62_;
								_tmp60_ = type;
								_tmp61_ = expr;
								_tmp62_ = vala_gvariant_module_serialize_hash_table (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp60_, VALA_TYPE_OBJECT_TYPE, ValaObjectType), _tmp61_);
								_vala_ccode_node_unref0 (_result_);
								_result_ = _tmp62_;
							}
						}
					}
				}
			}
		}
	}
	_tmp63_ = _result_;
	if (_tmp63_ == NULL) {
		ValaDataType* _tmp64_;
		ValaSourceReference* _tmp65_;
		ValaSourceReference* _tmp66_;
		ValaDataType* _tmp67_;
		gchar* _tmp68_;
		gchar* _tmp69_;
		gchar* _tmp70_;
		gchar* _tmp71_;
		_tmp64_ = type;
		_tmp65_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp64_);
		_tmp66_ = _tmp65_;
		_tmp67_ = type;
		_tmp68_ = vala_code_node_to_string ((ValaCodeNode*) _tmp67_);
		_tmp69_ = _tmp68_;
		_tmp70_ = g_strdup_printf ("GVariant serialization of type `%s' is not supported", _tmp69_);
		_tmp71_ = _tmp70_;
		vala_report_error (_tmp66_, _tmp71_);
		_g_free0 (_tmp71_);
		_g_free0 (_tmp69_);
	}
	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_;
	ValaCCodeExpression* _tmp1_;
	gboolean _tmp2_ = FALSE;
	ValaSymbol* _tmp3_;
	ValaCCodeExpression* _tmp10_;
	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_ = expr;
	_tmp1_ = _vala_ccode_node_ref0 (_tmp0_);
	variant_expr = _tmp1_;
	_tmp3_ = sym;
	if (_tmp3_ == NULL) {
		_tmp2_ = TRUE;
	} else {
		ValaSymbol* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		_tmp4_ = sym;
		_tmp5_ = vala_gvariant_module_get_dbus_signature (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp2_ = _tmp6_ == NULL;
		_g_free0 (_tmp6_);
	}
	if (_tmp2_) {
		ValaDataType* _tmp7_;
		ValaCCodeExpression* _tmp8_;
		ValaCCodeExpression* _tmp9_;
		_tmp7_ = type;
		_tmp8_ = expr;
		_tmp9_ = vala_ccode_base_module_serialize_expression ((ValaCCodeBaseModule*) self, _tmp7_, _tmp8_);
		_vala_ccode_node_unref0 (variant_expr);
		variant_expr = _tmp9_;
	}
	_tmp10_ = variant_expr;
	if (_tmp10_ != NULL) {
		ValaCCodeFunctionCall* builder_add = NULL;
		ValaCCodeIdentifier* _tmp11_;
		ValaCCodeIdentifier* _tmp12_;
		ValaCCodeFunctionCall* _tmp13_;
		ValaCCodeFunctionCall* _tmp14_;
		ValaCCodeFunctionCall* _tmp15_;
		ValaCCodeExpression* _tmp16_;
		ValaCCodeUnaryExpression* _tmp17_;
		ValaCCodeUnaryExpression* _tmp18_;
		ValaCCodeFunctionCall* _tmp19_;
		ValaCCodeExpression* _tmp20_;
		ValaCCodeFunction* _tmp21_;
		ValaCCodeFunction* _tmp22_;
		ValaCCodeFunctionCall* _tmp23_;
		_tmp11_ = vala_ccode_identifier_new ("g_variant_builder_add_value");
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp12_);
		_tmp14_ = _tmp13_;
		_vala_ccode_node_unref0 (_tmp12_);
		builder_add = _tmp14_;
		_tmp15_ = builder_add;
		_tmp16_ = builder_expr;
		_tmp17_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp16_);
		_tmp18_ = _tmp17_;
		vala_ccode_function_call_add_argument (_tmp15_, (ValaCCodeExpression*) _tmp18_);
		_vala_ccode_node_unref0 (_tmp18_);
		_tmp19_ = builder_add;
		_tmp20_ = variant_expr;
		vala_ccode_function_call_add_argument (_tmp19_, _tmp20_);
		_tmp21_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp22_ = _tmp21_;
		_tmp23_ = builder_add;
		vala_ccode_function_add_expression (_tmp22_, (ValaCCodeExpression*) _tmp23_);
		_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_gasync_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 (void) {
	static volatile gsize vala_gvariant_module_basic_type_info_type_id__volatile = 0;
	if (g_once_init_enter (&vala_gvariant_module_basic_type_info_type_id__volatile)) {
		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);
		g_once_init_leave (&vala_gvariant_module_basic_type_info_type_id__volatile, vala_gvariant_module_basic_type_info_type_id);
	}
	return vala_gvariant_module_basic_type_info_type_id__volatile;
}


static void vala_gvariant_module_class_init (ValaGVariantModuleClass * klass) {
	vala_gvariant_module_parent_class = g_type_class_peek_parent (klass);
	((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;
	((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) {
}


GType vala_gvariant_module_get_type (void) {
	static volatile gsize vala_gvariant_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_gvariant_module_type_id__volatile)) {
		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_GASYNC_MODULE, "ValaGVariantModule", &g_define_type_info, 0);
		g_once_init_leave (&vala_gvariant_module_type_id__volatile, vala_gvariant_module_type_id);
	}
	return vala_gvariant_module_type_id__volatile;
}



