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

/* valaccodeattribute.vala
 *
 * Copyright (C) 2011  Luca Bruno
 *
 * 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:
 * 	Luca Bruno <lucabru@src.gnome.org>
 */

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

#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), 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_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))

struct _ValaCCodeAttributePrivate {
	ValaCodeNode* node;
	ValaSymbol* sym;
	ValaAttribute* ccode;
	gchar* _array_length_type;
	gchar* _array_length_name;
	gchar* _array_length_expr;
	gchar* _name;
	gchar* _const_name;
	gchar* _type_name;
	gchar* _feature_test_macros;
	gchar* _header_filenames;
	gchar* _prefix;
	gchar* _lower_case_prefix;
	gchar* _lower_case_suffix;
	gchar* _ref_function;
	gboolean ref_function_set;
	gboolean* _ref_function_void;
	gchar* _unref_function;
	gboolean unref_function_set;
	gchar* _ref_sink_function;
	gchar* _copy_function;
	gboolean copy_function_set;
	gchar* _destroy_function;
	gboolean destroy_function_set;
	gchar* _dup_function;
	gboolean dup_function_set;
	gchar* _free_function;
	gboolean free_function_set;
	gboolean* _free_function_address_of;
	gchar* _type_id;
	gchar* _marshaller_type_name;
	gchar* _get_value_function;
	gchar* _set_value_function;
	gchar* _take_value_function;
	gchar* _param_spec_function;
	gchar* _default_value;
	gchar* _default_value_on_error;
	gdouble* _pos;
	gchar* _vfunc_name;
	gchar* _finish_name;
	gchar* _finish_vfunc_name;
	gchar* _finish_real_name;
	gboolean* _finish_instance;
	gchar* _real_name;
	gboolean* _delegate_target;
	gchar* _delegate_target_name;
	gchar* _delegate_target_destroy_notify_name;
	gchar* _ctype;
	gboolean ctype_set;
	gboolean* _array_length;
	gboolean* _array_null_terminated;
	gchar* _sentinel;
};

static gint ValaCCodeAttribute_private_offset;
static gpointer vala_ccode_attribute_parent_class = NULL;
static gint vala_ccode_attribute_dynamic_method_id;
static gint vala_ccode_attribute_dynamic_method_id = 0;

static void vala_ccode_attribute_set_array_length_type (ValaCCodeAttribute* self,
                                                 const gchar* value);
static void vala_ccode_attribute_set_array_length_name (ValaCCodeAttribute* self,
                                                 const gchar* value);
static void vala_ccode_attribute_set_array_length_expr (ValaCCodeAttribute* self,
                                                 const gchar* value);
static gchar* vala_ccode_attribute_get_default_name (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_header_filenames (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_prefix (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_lower_case_prefix (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_lower_case_suffix (ValaCCodeAttribute* self);
G_GNUC_INTERNAL ValaCCodeAttribute* vala_get_ccode_attribute (ValaCodeNode* node);
static gchar* vala_ccode_attribute_get_default_ref_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_unref_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_ref_sink_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_free_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_type_id (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_get_value_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_set_value_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_take_value_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_param_spec_function (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_default_value (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_finish_name_for_basename (ValaCCodeAttribute* self,
                                                          const gchar* basename);
static gchar* vala_ccode_attribute_get_default_real_name (ValaCCodeAttribute* self);
static gchar* vala_ccode_attribute_get_default_const_name (ValaCCodeAttribute* self);
static gboolean vala_ccode_attribute_get_default_delegate_target (ValaCCodeAttribute* self);
static gboolean vala_ccode_attribute_get_default_array_length (ValaCCodeAttribute* self);
static gboolean vala_ccode_attribute_get_default_array_null_terminated (ValaCCodeAttribute* self);
static gboolean* _bool_dup (gboolean* self);
static gdouble* _double_dup (gdouble* self);
static void vala_ccode_attribute_finalize (ValaAttributeCache * obj);

static inline gpointer
vala_ccode_attribute_get_instance_private (ValaCCodeAttribute* self)
{
	return G_STRUCT_MEMBER_P (self, ValaCCodeAttribute_private_offset);
}

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

ValaCCodeAttribute*
vala_ccode_attribute_construct (GType object_type,
                                ValaCodeNode* node)
{
	ValaCCodeAttribute* self = NULL;
	ValaAttribute* _tmp0_;
	ValaAttribute* _tmp1_;
	ValaAttribute* _tmp2_;
	g_return_val_if_fail (node != NULL, NULL);
	self = (ValaCCodeAttribute*) vala_attribute_cache_construct (object_type);
	self->priv->node = node;
	self->priv->sym = G_TYPE_CHECK_INSTANCE_TYPE (node, VALA_TYPE_SYMBOL) ? ((ValaSymbol*) node) : NULL;
	_tmp0_ = vala_code_node_get_attribute (node, "CCode");
	_tmp1_ = _vala_code_node_ref0 (_tmp0_);
	_vala_code_node_unref0 (self->priv->ccode);
	self->priv->ccode = _tmp1_;
	_tmp2_ = self->priv->ccode;
	if (_tmp2_ != NULL) {
		ValaAttribute* _tmp3_;
		gchar* _tmp4_;
		gchar* _tmp5_;
		ValaAttribute* _tmp6_;
		gchar* _tmp7_;
		gchar* _tmp8_;
		ValaAttribute* _tmp9_;
		gchar* _tmp10_;
		gchar* _tmp11_;
		_tmp3_ = self->priv->ccode;
		_tmp4_ = vala_attribute_get_string (_tmp3_, "array_length_type", NULL);
		_tmp5_ = _tmp4_;
		vala_ccode_attribute_set_array_length_type (self, _tmp5_);
		_g_free0 (_tmp5_);
		_tmp6_ = self->priv->ccode;
		_tmp7_ = vala_attribute_get_string (_tmp6_, "array_length_cname", NULL);
		_tmp8_ = _tmp7_;
		vala_ccode_attribute_set_array_length_name (self, _tmp8_);
		_g_free0 (_tmp8_);
		_tmp9_ = self->priv->ccode;
		_tmp10_ = vala_attribute_get_string (_tmp9_, "array_length_cexpr", NULL);
		_tmp11_ = _tmp10_;
		vala_ccode_attribute_set_array_length_expr (self, _tmp11_);
		_g_free0 (_tmp11_);
	}
	return self;
}

ValaCCodeAttribute*
vala_ccode_attribute_new (ValaCodeNode* node)
{
	return vala_ccode_attribute_construct (VALA_TYPE_CCODE_ATTRIBUTE, node);
}

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

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

static gchar*
string_substring (const gchar* self,
                  glong offset,
                  glong len)
{
	glong string_length = 0L;
	gboolean _tmp0_ = FALSE;
	gchar* _tmp3_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	if (offset >= ((glong) 0)) {
		_tmp0_ = len >= ((glong) 0);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		string_length = string_strnlen ((gchar*) self, offset + len);
	} else {
		gint _tmp1_;
		gint _tmp2_;
		_tmp1_ = strlen (self);
		_tmp2_ = _tmp1_;
		string_length = (glong) _tmp2_;
	}
	if (offset < ((glong) 0)) {
		offset = string_length + offset;
		g_return_val_if_fail (offset >= ((glong) 0), NULL);
	} else {
		g_return_val_if_fail (offset <= string_length, NULL);
	}
	if (len < ((glong) 0)) {
		len = string_length - offset;
	}
	g_return_val_if_fail ((offset + len) <= string_length, NULL);
	_tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len);
	result = _tmp3_;
	return result;
}

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

static gchar*
vala_ccode_attribute_get_default_name (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (_tmp0_ != NULL) {
		gboolean _tmp1_ = FALSE;
		ValaSymbol* _tmp2_;
		_tmp2_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CONSTANT)) {
			ValaSymbol* _tmp3_;
			_tmp3_ = self->priv->sym;
			_tmp1_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_ENUM_VALUE);
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			ValaSymbol* _tmp4_;
			ValaSymbol* _tmp5_;
			ValaSymbol* _tmp6_;
			ValaSymbol* _tmp11_;
			ValaSymbol* _tmp12_;
			ValaSymbol* _tmp13_;
			gchar* _tmp14_;
			gchar* _tmp15_;
			gchar* _tmp16_;
			gchar* _tmp17_;
			ValaSymbol* _tmp18_;
			const gchar* _tmp19_;
			const gchar* _tmp20_;
			gchar* _tmp21_;
			gchar* _tmp22_;
			_tmp4_ = self->priv->sym;
			_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
			_tmp6_ = _tmp5_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_BLOCK)) {
				ValaSymbol* _tmp7_;
				const gchar* _tmp8_;
				const gchar* _tmp9_;
				gchar* _tmp10_;
				_tmp7_ = self->priv->sym;
				_tmp8_ = vala_symbol_get_name (_tmp7_);
				_tmp9_ = _tmp8_;
				_tmp10_ = g_strdup (_tmp9_);
				result = _tmp10_;
				return result;
			}
			_tmp11_ = self->priv->sym;
			_tmp12_ = vala_symbol_get_parent_symbol (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_get_ccode_lower_case_prefix (_tmp13_);
			_tmp15_ = _tmp14_;
			_tmp16_ = g_ascii_strup (_tmp15_, (gssize) -1);
			_tmp17_ = _tmp16_;
			_tmp18_ = self->priv->sym;
			_tmp19_ = vala_symbol_get_name (_tmp18_);
			_tmp20_ = _tmp19_;
			_tmp21_ = g_strdup_printf ("%s%s", _tmp17_, _tmp20_);
			_tmp22_ = _tmp21_;
			_g_free0 (_tmp17_);
			_g_free0 (_tmp15_);
			result = _tmp22_;
			return result;
		} else {
			ValaSymbol* _tmp23_;
			_tmp23_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_FIELD)) {
				gchar* cname = NULL;
				ValaSymbol* _tmp24_;
				const gchar* _tmp25_;
				const gchar* _tmp26_;
				gchar* _tmp27_;
				ValaSymbol* _tmp28_;
				ValaMemberBinding _tmp29_;
				ValaMemberBinding _tmp30_;
				const gchar* _tmp40_;
				_tmp24_ = self->priv->sym;
				_tmp25_ = vala_symbol_get_name (_tmp24_);
				_tmp26_ = _tmp25_;
				_tmp27_ = g_strdup (_tmp26_);
				cname = _tmp27_;
				_tmp28_ = self->priv->sym;
				_tmp29_ = vala_field_get_binding (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_FIELD, ValaField));
				_tmp30_ = _tmp29_;
				if (_tmp30_ == VALA_MEMBER_BINDING_STATIC) {
					ValaSymbol* _tmp31_;
					ValaSymbol* _tmp32_;
					ValaSymbol* _tmp33_;
					gchar* _tmp34_;
					gchar* _tmp35_;
					ValaSymbol* _tmp36_;
					const gchar* _tmp37_;
					const gchar* _tmp38_;
					gchar* _tmp39_;
					_tmp31_ = self->priv->sym;
					_tmp32_ = vala_symbol_get_parent_symbol (_tmp31_);
					_tmp33_ = _tmp32_;
					_tmp34_ = vala_get_ccode_lower_case_prefix (_tmp33_);
					_tmp35_ = _tmp34_;
					_tmp36_ = self->priv->sym;
					_tmp37_ = vala_symbol_get_name (_tmp36_);
					_tmp38_ = _tmp37_;
					_tmp39_ = g_strdup_printf ("%s%s", _tmp35_, _tmp38_);
					_g_free0 (cname);
					cname = _tmp39_;
					_g_free0 (_tmp35_);
				}
				_tmp40_ = cname;
				if (g_ascii_isdigit (string_get (_tmp40_, (glong) 0))) {
					ValaCodeNode* _tmp41_;
					ValaSourceReference* _tmp42_;
					ValaSourceReference* _tmp43_;
					gchar* _tmp44_;
					_tmp41_ = self->priv->node;
					_tmp42_ = vala_code_node_get_source_reference (_tmp41_);
					_tmp43_ = _tmp42_;
					vala_report_error (_tmp43_, "Field name starts with a digit. Use the `cname' attribute to provide a" \
" valid C name if intended");
					_tmp44_ = g_strdup ("");
					result = _tmp44_;
					_g_free0 (cname);
					return result;
				}
				result = cname;
				return result;
			} else {
				ValaSymbol* _tmp45_;
				_tmp45_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp45_, VALA_TYPE_CREATION_METHOD)) {
					ValaCreationMethod* m = NULL;
					ValaSymbol* _tmp46_;
					gchar* infix = NULL;
					ValaCreationMethod* _tmp47_;
					ValaSymbol* _tmp48_;
					ValaSymbol* _tmp49_;
					ValaCreationMethod* _tmp52_;
					const gchar* _tmp53_;
					const gchar* _tmp54_;
					_tmp46_ = self->priv->sym;
					m = G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod);
					_tmp47_ = m;
					_tmp48_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp47_);
					_tmp49_ = _tmp48_;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp49_, VALA_TYPE_STRUCT)) {
						gchar* _tmp50_;
						_tmp50_ = g_strdup ("init");
						_g_free0 (infix);
						infix = _tmp50_;
					} else {
						gchar* _tmp51_;
						_tmp51_ = g_strdup ("new");
						_g_free0 (infix);
						infix = _tmp51_;
					}
					_tmp52_ = m;
					_tmp53_ = vala_symbol_get_name ((ValaSymbol*) _tmp52_);
					_tmp54_ = _tmp53_;
					if (g_strcmp0 (_tmp54_, ".new") == 0) {
						ValaCreationMethod* _tmp55_;
						ValaSymbol* _tmp56_;
						ValaSymbol* _tmp57_;
						gchar* _tmp58_;
						gchar* _tmp59_;
						const gchar* _tmp60_;
						gchar* _tmp61_;
						gchar* _tmp62_;
						_tmp55_ = m;
						_tmp56_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp55_);
						_tmp57_ = _tmp56_;
						_tmp58_ = vala_get_ccode_lower_case_prefix (_tmp57_);
						_tmp59_ = _tmp58_;
						_tmp60_ = infix;
						_tmp61_ = g_strdup_printf ("%s%s", _tmp59_, _tmp60_);
						_tmp62_ = _tmp61_;
						_g_free0 (_tmp59_);
						result = _tmp62_;
						_g_free0 (infix);
						return result;
					} else {
						ValaCreationMethod* _tmp63_;
						ValaSymbol* _tmp64_;
						ValaSymbol* _tmp65_;
						gchar* _tmp66_;
						gchar* _tmp67_;
						const gchar* _tmp68_;
						ValaCreationMethod* _tmp69_;
						const gchar* _tmp70_;
						const gchar* _tmp71_;
						gchar* _tmp72_;
						gchar* _tmp73_;
						_tmp63_ = m;
						_tmp64_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp63_);
						_tmp65_ = _tmp64_;
						_tmp66_ = vala_get_ccode_lower_case_prefix (_tmp65_);
						_tmp67_ = _tmp66_;
						_tmp68_ = infix;
						_tmp69_ = m;
						_tmp70_ = vala_symbol_get_name ((ValaSymbol*) _tmp69_);
						_tmp71_ = _tmp70_;
						_tmp72_ = g_strdup_printf ("%s%s_%s", _tmp67_, _tmp68_, _tmp71_);
						_tmp73_ = _tmp72_;
						_g_free0 (_tmp67_);
						result = _tmp73_;
						_g_free0 (infix);
						return result;
					}
					_g_free0 (infix);
				} else {
					ValaSymbol* _tmp74_;
					_tmp74_ = self->priv->sym;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp74_, VALA_TYPE_DYNAMIC_METHOD)) {
						ValaSymbol* _tmp75_;
						const gchar* _tmp76_;
						const gchar* _tmp77_;
						gint _tmp78_;
						gchar* _tmp79_;
						_tmp75_ = self->priv->sym;
						_tmp76_ = vala_symbol_get_name (_tmp75_);
						_tmp77_ = _tmp76_;
						_tmp78_ = vala_ccode_attribute_dynamic_method_id;
						vala_ccode_attribute_dynamic_method_id = _tmp78_ + 1;
						_tmp79_ = g_strdup_printf ("_dynamic_%s%d", _tmp77_, _tmp78_);
						result = _tmp79_;
						return result;
					} else {
						ValaSymbol* _tmp80_;
						_tmp80_ = self->priv->sym;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp80_, VALA_TYPE_METHOD)) {
							ValaMethod* m = NULL;
							ValaSymbol* _tmp81_;
							ValaMethod* _tmp82_;
							gboolean _tmp83_;
							gboolean _tmp84_;
							ValaMethod* _tmp92_;
							ValaSignal* _tmp93_;
							ValaSignal* _tmp94_;
							gboolean _tmp107_ = FALSE;
							ValaSymbol* _tmp108_;
							const gchar* _tmp109_;
							const gchar* _tmp110_;
							_tmp81_ = self->priv->sym;
							m = G_TYPE_CHECK_INSTANCE_CAST (_tmp81_, VALA_TYPE_METHOD, ValaMethod);
							_tmp82_ = m;
							_tmp83_ = vala_method_get_is_async_callback (_tmp82_);
							_tmp84_ = _tmp83_;
							if (_tmp84_) {
								ValaMethod* _tmp85_;
								ValaSymbol* _tmp86_;
								ValaSymbol* _tmp87_;
								gchar* _tmp88_;
								gchar* _tmp89_;
								gchar* _tmp90_;
								gchar* _tmp91_;
								_tmp85_ = m;
								_tmp86_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp85_);
								_tmp87_ = _tmp86_;
								_tmp88_ = vala_get_ccode_real_name ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp87_, VALA_TYPE_METHOD, ValaMethod));
								_tmp89_ = _tmp88_;
								_tmp90_ = g_strdup_printf ("%s_co", _tmp89_);
								_tmp91_ = _tmp90_;
								_g_free0 (_tmp89_);
								result = _tmp91_;
								return result;
							}
							_tmp92_ = m;
							_tmp93_ = vala_method_get_signal_reference (_tmp92_);
							_tmp94_ = _tmp93_;
							if (_tmp94_ != NULL) {
								ValaMethod* _tmp95_;
								ValaSymbol* _tmp96_;
								ValaSymbol* _tmp97_;
								gchar* _tmp98_;
								gchar* _tmp99_;
								ValaMethod* _tmp100_;
								ValaSignal* _tmp101_;
								ValaSignal* _tmp102_;
								gchar* _tmp103_;
								gchar* _tmp104_;
								gchar* _tmp105_;
								gchar* _tmp106_;
								_tmp95_ = m;
								_tmp96_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp95_);
								_tmp97_ = _tmp96_;
								_tmp98_ = vala_get_ccode_lower_case_prefix (_tmp97_);
								_tmp99_ = _tmp98_;
								_tmp100_ = m;
								_tmp101_ = vala_method_get_signal_reference (_tmp100_);
								_tmp102_ = _tmp101_;
								_tmp103_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp102_, NULL);
								_tmp104_ = _tmp103_;
								_tmp105_ = g_strdup_printf ("%s%s", _tmp99_, _tmp104_);
								_tmp106_ = _tmp105_;
								_g_free0 (_tmp104_);
								_g_free0 (_tmp99_);
								result = _tmp106_;
								return result;
							}
							_tmp108_ = self->priv->sym;
							_tmp109_ = vala_symbol_get_name (_tmp108_);
							_tmp110_ = _tmp109_;
							if (g_strcmp0 (_tmp110_, "main") == 0) {
								ValaSymbol* _tmp111_;
								ValaSymbol* _tmp112_;
								ValaSymbol* _tmp113_;
								const gchar* _tmp114_;
								const gchar* _tmp115_;
								_tmp111_ = self->priv->sym;
								_tmp112_ = vala_symbol_get_parent_symbol (_tmp111_);
								_tmp113_ = _tmp112_;
								_tmp114_ = vala_symbol_get_name (_tmp113_);
								_tmp115_ = _tmp114_;
								_tmp107_ = _tmp115_ == NULL;
							} else {
								_tmp107_ = FALSE;
							}
							if (_tmp107_) {
								gchar* _tmp116_;
								_tmp116_ = g_strdup ("_vala_main");
								result = _tmp116_;
								return result;
							} else {
								ValaSymbol* _tmp117_;
								const gchar* _tmp118_;
								const gchar* _tmp119_;
								_tmp117_ = self->priv->sym;
								_tmp118_ = vala_symbol_get_name (_tmp117_);
								_tmp119_ = _tmp118_;
								if (g_str_has_prefix (_tmp119_, "_")) {
									ValaSymbol* _tmp120_;
									ValaSymbol* _tmp121_;
									ValaSymbol* _tmp122_;
									gchar* _tmp123_;
									gchar* _tmp124_;
									ValaSymbol* _tmp125_;
									const gchar* _tmp126_;
									const gchar* _tmp127_;
									gchar* _tmp128_;
									gchar* _tmp129_;
									gchar* _tmp130_;
									gchar* _tmp131_;
									_tmp120_ = self->priv->sym;
									_tmp121_ = vala_symbol_get_parent_symbol (_tmp120_);
									_tmp122_ = _tmp121_;
									_tmp123_ = vala_get_ccode_lower_case_prefix (_tmp122_);
									_tmp124_ = _tmp123_;
									_tmp125_ = self->priv->sym;
									_tmp126_ = vala_symbol_get_name (_tmp125_);
									_tmp127_ = _tmp126_;
									_tmp128_ = string_substring (_tmp127_, (glong) 1, (glong) -1);
									_tmp129_ = _tmp128_;
									_tmp130_ = g_strdup_printf ("_%s%s", _tmp124_, _tmp129_);
									_tmp131_ = _tmp130_;
									_g_free0 (_tmp129_);
									_g_free0 (_tmp124_);
									result = _tmp131_;
									return result;
								} else {
									ValaSymbol* _tmp132_;
									ValaSymbol* _tmp133_;
									ValaSymbol* _tmp134_;
									gchar* _tmp135_;
									gchar* _tmp136_;
									ValaSymbol* _tmp137_;
									const gchar* _tmp138_;
									const gchar* _tmp139_;
									gchar* _tmp140_;
									gchar* _tmp141_;
									_tmp132_ = self->priv->sym;
									_tmp133_ = vala_symbol_get_parent_symbol (_tmp132_);
									_tmp134_ = _tmp133_;
									_tmp135_ = vala_get_ccode_lower_case_prefix (_tmp134_);
									_tmp136_ = _tmp135_;
									_tmp137_ = self->priv->sym;
									_tmp138_ = vala_symbol_get_name (_tmp137_);
									_tmp139_ = _tmp138_;
									_tmp140_ = g_strdup_printf ("%s%s", _tmp136_, _tmp139_);
									_tmp141_ = _tmp140_;
									_g_free0 (_tmp136_);
									result = _tmp141_;
									return result;
								}
							}
						} else {
							ValaSymbol* _tmp142_;
							_tmp142_ = self->priv->sym;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp142_, VALA_TYPE_PROPERTY)) {
								ValaSymbol* _tmp143_;
								const gchar* _tmp144_;
								const gchar* _tmp145_;
								gchar* _tmp146_;
								_tmp143_ = self->priv->sym;
								_tmp144_ = vala_symbol_get_name (_tmp143_);
								_tmp145_ = _tmp144_;
								_tmp146_ = string_replace (_tmp145_, "_", "-");
								result = _tmp146_;
								return result;
							} else {
								ValaSymbol* _tmp147_;
								_tmp147_ = self->priv->sym;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp147_, VALA_TYPE_PROPERTY_ACCESSOR)) {
									ValaPropertyAccessor* acc = NULL;
									ValaSymbol* _tmp148_;
									ValaTypeSymbol* t = NULL;
									ValaPropertyAccessor* _tmp149_;
									ValaProperty* _tmp150_;
									ValaProperty* _tmp151_;
									ValaSymbol* _tmp152_;
									ValaSymbol* _tmp153_;
									ValaTypeSymbol* _tmp154_;
									ValaPropertyAccessor* _tmp155_;
									gboolean _tmp156_;
									gboolean _tmp157_;
									_tmp148_ = self->priv->sym;
									acc = G_TYPE_CHECK_INSTANCE_CAST (_tmp148_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor);
									_tmp149_ = acc;
									_tmp150_ = vala_property_accessor_get_prop (_tmp149_);
									_tmp151_ = _tmp150_;
									_tmp152_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp151_);
									_tmp153_ = _tmp152_;
									_tmp154_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp153_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
									t = _tmp154_;
									_tmp155_ = acc;
									_tmp156_ = vala_property_accessor_get_readable (_tmp155_);
									_tmp157_ = _tmp156_;
									if (_tmp157_) {
										ValaTypeSymbol* _tmp158_;
										gchar* _tmp159_;
										gchar* _tmp160_;
										ValaPropertyAccessor* _tmp161_;
										ValaProperty* _tmp162_;
										ValaProperty* _tmp163_;
										const gchar* _tmp164_;
										const gchar* _tmp165_;
										gchar* _tmp166_;
										gchar* _tmp167_;
										_tmp158_ = t;
										_tmp159_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp158_);
										_tmp160_ = _tmp159_;
										_tmp161_ = acc;
										_tmp162_ = vala_property_accessor_get_prop (_tmp161_);
										_tmp163_ = _tmp162_;
										_tmp164_ = vala_symbol_get_name ((ValaSymbol*) _tmp163_);
										_tmp165_ = _tmp164_;
										_tmp166_ = g_strdup_printf ("%sget_%s", _tmp160_, _tmp165_);
										_tmp167_ = _tmp166_;
										_g_free0 (_tmp160_);
										result = _tmp167_;
										_vala_code_node_unref0 (t);
										return result;
									} else {
										ValaTypeSymbol* _tmp168_;
										gchar* _tmp169_;
										gchar* _tmp170_;
										ValaPropertyAccessor* _tmp171_;
										ValaProperty* _tmp172_;
										ValaProperty* _tmp173_;
										const gchar* _tmp174_;
										const gchar* _tmp175_;
										gchar* _tmp176_;
										gchar* _tmp177_;
										_tmp168_ = t;
										_tmp169_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp168_);
										_tmp170_ = _tmp169_;
										_tmp171_ = acc;
										_tmp172_ = vala_property_accessor_get_prop (_tmp171_);
										_tmp173_ = _tmp172_;
										_tmp174_ = vala_symbol_get_name ((ValaSymbol*) _tmp173_);
										_tmp175_ = _tmp174_;
										_tmp176_ = g_strdup_printf ("%sset_%s", _tmp170_, _tmp175_);
										_tmp177_ = _tmp176_;
										_g_free0 (_tmp170_);
										result = _tmp177_;
										_vala_code_node_unref0 (t);
										return result;
									}
									_vala_code_node_unref0 (t);
								} else {
									ValaSymbol* _tmp178_;
									_tmp178_ = self->priv->sym;
									if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp178_, VALA_TYPE_SIGNAL)) {
										ValaSymbol* _tmp179_;
										const gchar* _tmp180_;
										const gchar* _tmp181_;
										gchar* _tmp182_;
										gchar* _tmp183_;
										gchar* _tmp184_;
										gchar* _tmp185_;
										_tmp179_ = self->priv->sym;
										_tmp180_ = vala_symbol_get_name (_tmp179_);
										_tmp181_ = _tmp180_;
										_tmp182_ = vala_symbol_camel_case_to_lower_case (_tmp181_);
										_tmp183_ = _tmp182_;
										_tmp184_ = string_replace (_tmp183_, "_", "-");
										_tmp185_ = _tmp184_;
										_g_free0 (_tmp183_);
										result = _tmp185_;
										return result;
									} else {
										gboolean _tmp186_ = FALSE;
										ValaSymbol* _tmp187_;
										_tmp187_ = self->priv->sym;
										if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp187_, VALA_TYPE_LOCAL_VARIABLE)) {
											_tmp186_ = TRUE;
										} else {
											ValaSymbol* _tmp188_;
											_tmp188_ = self->priv->sym;
											_tmp186_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp188_, VALA_TYPE_PARAMETER);
										}
										if (_tmp186_) {
											const gchar* name = NULL;
											ValaSymbol* _tmp189_;
											const gchar* _tmp190_;
											const gchar* _tmp191_;
											ValaSet* _tmp192_;
											const gchar* _tmp193_;
											_tmp189_ = self->priv->sym;
											_tmp190_ = vala_symbol_get_name (_tmp189_);
											_tmp191_ = _tmp190_;
											name = _tmp191_;
											_tmp192_ = vala_ccode_base_module_reserved_identifiers;
											_tmp193_ = name;
											if (vala_collection_contains ((ValaCollection*) _tmp192_, _tmp193_)) {
												const gchar* _tmp194_;
												gchar* _tmp195_;
												_tmp194_ = name;
												_tmp195_ = g_strdup_printf ("_%s_", _tmp194_);
												result = _tmp195_;
												return result;
											} else {
												const gchar* _tmp196_;
												gchar* _tmp197_;
												_tmp196_ = name;
												_tmp197_ = g_strdup (_tmp196_);
												result = _tmp197_;
												return result;
											}
										} else {
											ValaSymbol* _tmp198_;
											ValaSymbol* _tmp199_;
											ValaSymbol* _tmp200_;
											gchar* _tmp201_;
											gchar* _tmp202_;
											ValaSymbol* _tmp203_;
											const gchar* _tmp204_;
											const gchar* _tmp205_;
											gchar* _tmp206_;
											gchar* _tmp207_;
											_tmp198_ = self->priv->sym;
											_tmp199_ = vala_symbol_get_parent_symbol (_tmp198_);
											_tmp200_ = _tmp199_;
											_tmp201_ = vala_get_ccode_prefix (_tmp200_);
											_tmp202_ = _tmp201_;
											_tmp203_ = self->priv->sym;
											_tmp204_ = vala_symbol_get_name (_tmp203_);
											_tmp205_ = _tmp204_;
											_tmp206_ = g_strdup_printf ("%s%s", _tmp202_, _tmp205_);
											_tmp207_ = _tmp206_;
											_g_free0 (_tmp202_);
											result = _tmp207_;
											return result;
										}
									}
								}
							}
						}
					}
				}
			}
		}
	} else {
		ValaCodeNode* _tmp208_;
		_tmp208_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp208_, VALA_TYPE_OBJECT_TYPE)) {
			ValaObjectType* type = NULL;
			ValaCodeNode* _tmp209_;
			ValaObjectType* _tmp210_;
			gchar* cname = NULL;
			ValaObjectType* _tmp211_;
			gboolean _tmp212_;
			gboolean _tmp213_;
			const gchar* _tmp222_;
			gchar* _tmp223_;
			_tmp209_ = self->priv->node;
			_tmp210_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp209_, VALA_TYPE_OBJECT_TYPE, ValaObjectType));
			type = _tmp210_;
			_tmp211_ = type;
			_tmp212_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp211_);
			_tmp213_ = _tmp212_;
			if (!_tmp213_) {
				ValaObjectType* _tmp214_;
				ValaObjectTypeSymbol* _tmp215_;
				ValaObjectTypeSymbol* _tmp216_;
				gchar* _tmp217_;
				_tmp214_ = type;
				_tmp215_ = vala_object_type_get_type_symbol (_tmp214_);
				_tmp216_ = _tmp215_;
				_tmp217_ = vala_get_ccode_const_name ((ValaCodeNode*) _tmp216_);
				_g_free0 (cname);
				cname = _tmp217_;
			} else {
				ValaObjectType* _tmp218_;
				ValaObjectTypeSymbol* _tmp219_;
				ValaObjectTypeSymbol* _tmp220_;
				gchar* _tmp221_;
				_tmp218_ = type;
				_tmp219_ = vala_object_type_get_type_symbol (_tmp218_);
				_tmp220_ = _tmp219_;
				_tmp221_ = vala_get_ccode_name ((ValaCodeNode*) _tmp220_);
				_g_free0 (cname);
				cname = _tmp221_;
			}
			_tmp222_ = cname;
			_tmp223_ = g_strdup_printf ("%s*", _tmp222_);
			result = _tmp223_;
			_g_free0 (cname);
			_vala_code_node_unref0 (type);
			return result;
		} else {
			ValaCodeNode* _tmp224_;
			_tmp224_ = self->priv->node;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp224_, VALA_TYPE_ARRAY_TYPE)) {
				ValaArrayType* type = NULL;
				ValaCodeNode* _tmp225_;
				ValaArrayType* _tmp226_;
				gchar* cname = NULL;
				ValaArrayType* _tmp227_;
				ValaDataType* _tmp228_;
				ValaDataType* _tmp229_;
				gchar* _tmp230_;
				ValaArrayType* _tmp231_;
				gboolean _tmp232_;
				gboolean _tmp233_;
				_tmp225_ = self->priv->node;
				_tmp226_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp225_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
				type = _tmp226_;
				_tmp227_ = type;
				_tmp228_ = vala_array_type_get_element_type (_tmp227_);
				_tmp229_ = _tmp228_;
				_tmp230_ = vala_get_ccode_name ((ValaCodeNode*) _tmp229_);
				cname = _tmp230_;
				_tmp231_ = type;
				_tmp232_ = vala_array_type_get_inline_allocated (_tmp231_);
				_tmp233_ = _tmp232_;
				if (_tmp233_) {
					result = cname;
					_vala_code_node_unref0 (type);
					return result;
				} else {
					const gchar* _tmp234_;
					gchar* _tmp235_;
					_tmp234_ = cname;
					_tmp235_ = g_strdup_printf ("%s*", _tmp234_);
					result = _tmp235_;
					_g_free0 (cname);
					_vala_code_node_unref0 (type);
					return result;
				}
				_g_free0 (cname);
				_vala_code_node_unref0 (type);
			} else {
				ValaCodeNode* _tmp236_;
				_tmp236_ = self->priv->node;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp236_, VALA_TYPE_DELEGATE_TYPE)) {
					ValaDelegateType* type = NULL;
					ValaCodeNode* _tmp237_;
					ValaDelegateType* _tmp238_;
					ValaDelegateType* _tmp239_;
					ValaDelegate* _tmp240_;
					ValaDelegate* _tmp241_;
					gchar* _tmp242_;
					_tmp237_ = self->priv->node;
					_tmp238_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp237_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
					type = _tmp238_;
					_tmp239_ = type;
					_tmp240_ = vala_delegate_type_get_delegate_symbol (_tmp239_);
					_tmp241_ = _tmp240_;
					_tmp242_ = vala_get_ccode_name ((ValaCodeNode*) _tmp241_);
					result = _tmp242_;
					_vala_code_node_unref0 (type);
					return result;
				} else {
					ValaCodeNode* _tmp243_;
					_tmp243_ = self->priv->node;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp243_, VALA_TYPE_ERROR_TYPE)) {
						gchar* _tmp244_;
						_tmp244_ = g_strdup ("GError*");
						result = _tmp244_;
						return result;
					} else {
						ValaCodeNode* _tmp245_;
						_tmp245_ = self->priv->node;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp245_, VALA_TYPE_GENERIC_TYPE)) {
							ValaGenericType* type = NULL;
							ValaCodeNode* _tmp246_;
							ValaGenericType* _tmp247_;
							ValaGenericType* _tmp248_;
							gboolean _tmp249_;
							gboolean _tmp250_;
							_tmp246_ = self->priv->node;
							_tmp247_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp246_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
							type = _tmp247_;
							_tmp248_ = type;
							_tmp249_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp248_);
							_tmp250_ = _tmp249_;
							if (_tmp250_) {
								ValaCodeContext* _tmp251_;
								ValaCodeContext* _tmp252_;
								ValaProfile _tmp253_;
								ValaProfile _tmp254_;
								gboolean _tmp255_;
								_tmp251_ = vala_code_context_get ();
								_tmp252_ = _tmp251_;
								_tmp253_ = vala_code_context_get_profile (_tmp252_);
								_tmp254_ = _tmp253_;
								_tmp255_ = _tmp254_ == VALA_PROFILE_GOBJECT;
								_vala_code_context_unref0 (_tmp252_);
								if (_tmp255_) {
									gchar* _tmp256_;
									_tmp256_ = g_strdup ("gpointer");
									result = _tmp256_;
									_vala_code_node_unref0 (type);
									return result;
								} else {
									gchar* _tmp257_;
									_tmp257_ = g_strdup ("void *");
									result = _tmp257_;
									_vala_code_node_unref0 (type);
									return result;
								}
							} else {
								ValaCodeContext* _tmp258_;
								ValaCodeContext* _tmp259_;
								ValaProfile _tmp260_;
								ValaProfile _tmp261_;
								gboolean _tmp262_;
								_tmp258_ = vala_code_context_get ();
								_tmp259_ = _tmp258_;
								_tmp260_ = vala_code_context_get_profile (_tmp259_);
								_tmp261_ = _tmp260_;
								_tmp262_ = _tmp261_ == VALA_PROFILE_GOBJECT;
								_vala_code_context_unref0 (_tmp259_);
								if (_tmp262_) {
									gchar* _tmp263_;
									_tmp263_ = g_strdup ("gconstpointer");
									result = _tmp263_;
									_vala_code_node_unref0 (type);
									return result;
								} else {
									gchar* _tmp264_;
									_tmp264_ = g_strdup ("const void *");
									result = _tmp264_;
									_vala_code_node_unref0 (type);
									return result;
								}
							}
							_vala_code_node_unref0 (type);
						} else {
							ValaCodeNode* _tmp265_;
							_tmp265_ = self->priv->node;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp265_, VALA_TYPE_METHOD_TYPE)) {
								ValaCodeContext* _tmp266_;
								ValaCodeContext* _tmp267_;
								ValaProfile _tmp268_;
								ValaProfile _tmp269_;
								gboolean _tmp270_;
								_tmp266_ = vala_code_context_get ();
								_tmp267_ = _tmp266_;
								_tmp268_ = vala_code_context_get_profile (_tmp267_);
								_tmp269_ = _tmp268_;
								_tmp270_ = _tmp269_ == VALA_PROFILE_GOBJECT;
								_vala_code_context_unref0 (_tmp267_);
								if (_tmp270_) {
									gchar* _tmp271_;
									_tmp271_ = g_strdup ("gpointer");
									result = _tmp271_;
									return result;
								} else {
									gchar* _tmp272_;
									_tmp272_ = g_strdup ("void *");
									result = _tmp272_;
									return result;
								}
							} else {
								ValaCodeNode* _tmp273_;
								_tmp273_ = self->priv->node;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp273_, VALA_TYPE_NULL_TYPE)) {
									ValaCodeContext* _tmp274_;
									ValaCodeContext* _tmp275_;
									ValaProfile _tmp276_;
									ValaProfile _tmp277_;
									gboolean _tmp278_;
									_tmp274_ = vala_code_context_get ();
									_tmp275_ = _tmp274_;
									_tmp276_ = vala_code_context_get_profile (_tmp275_);
									_tmp277_ = _tmp276_;
									_tmp278_ = _tmp277_ == VALA_PROFILE_GOBJECT;
									_vala_code_context_unref0 (_tmp275_);
									if (_tmp278_) {
										gchar* _tmp279_;
										_tmp279_ = g_strdup ("gpointer");
										result = _tmp279_;
										return result;
									} else {
										gchar* _tmp280_;
										_tmp280_ = g_strdup ("void *");
										result = _tmp280_;
										return result;
									}
								} else {
									ValaCodeNode* _tmp281_;
									_tmp281_ = self->priv->node;
									if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp281_, VALA_TYPE_POINTER_TYPE)) {
										ValaPointerType* type = NULL;
										ValaCodeNode* _tmp282_;
										ValaPointerType* _tmp283_;
										gboolean _tmp284_ = FALSE;
										ValaPointerType* _tmp285_;
										ValaDataType* _tmp286_;
										ValaDataType* _tmp287_;
										ValaTypeSymbol* _tmp288_;
										ValaTypeSymbol* _tmp289_;
										_tmp282_ = self->priv->node;
										_tmp283_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp282_, VALA_TYPE_POINTER_TYPE, ValaPointerType));
										type = _tmp283_;
										_tmp285_ = type;
										_tmp286_ = vala_pointer_type_get_base_type (_tmp285_);
										_tmp287_ = _tmp286_;
										_tmp288_ = vala_data_type_get_data_type (_tmp287_);
										_tmp289_ = _tmp288_;
										if (_tmp289_ != NULL) {
											ValaPointerType* _tmp290_;
											ValaDataType* _tmp291_;
											ValaDataType* _tmp292_;
											ValaTypeSymbol* _tmp293_;
											ValaTypeSymbol* _tmp294_;
											_tmp290_ = type;
											_tmp291_ = vala_pointer_type_get_base_type (_tmp290_);
											_tmp292_ = _tmp291_;
											_tmp293_ = vala_data_type_get_data_type (_tmp292_);
											_tmp294_ = _tmp293_;
											_tmp284_ = vala_typesymbol_is_reference_type (_tmp294_);
										} else {
											_tmp284_ = FALSE;
										}
										if (_tmp284_) {
											ValaPointerType* _tmp295_;
											ValaDataType* _tmp296_;
											ValaDataType* _tmp297_;
											gchar* _tmp298_;
											_tmp295_ = type;
											_tmp296_ = vala_pointer_type_get_base_type (_tmp295_);
											_tmp297_ = _tmp296_;
											_tmp298_ = vala_get_ccode_name ((ValaCodeNode*) _tmp297_);
											result = _tmp298_;
											_vala_code_node_unref0 (type);
											return result;
										} else {
											ValaPointerType* _tmp299_;
											ValaDataType* _tmp300_;
											ValaDataType* _tmp301_;
											gchar* _tmp302_;
											gchar* _tmp303_;
											gchar* _tmp304_;
											gchar* _tmp305_;
											_tmp299_ = type;
											_tmp300_ = vala_pointer_type_get_base_type (_tmp299_);
											_tmp301_ = _tmp300_;
											_tmp302_ = vala_get_ccode_name ((ValaCodeNode*) _tmp301_);
											_tmp303_ = _tmp302_;
											_tmp304_ = g_strdup_printf ("%s*", _tmp303_);
											_tmp305_ = _tmp304_;
											_g_free0 (_tmp303_);
											result = _tmp305_;
											_vala_code_node_unref0 (type);
											return result;
										}
										_vala_code_node_unref0 (type);
									} else {
										ValaCodeNode* _tmp306_;
										_tmp306_ = self->priv->node;
										if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp306_, VALA_TYPE_VOID_TYPE)) {
											gchar* _tmp307_;
											_tmp307_ = g_strdup ("void");
											result = _tmp307_;
											return result;
										} else {
											ValaCodeNode* _tmp308_;
											_tmp308_ = self->priv->node;
											if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp308_, VALA_TYPE_CLASS_TYPE)) {
												ValaClassType* type = NULL;
												ValaCodeNode* _tmp309_;
												ValaClassType* _tmp310_;
												ValaClassType* _tmp311_;
												ValaClass* _tmp312_;
												ValaClass* _tmp313_;
												gchar* _tmp314_;
												gchar* _tmp315_;
												gchar* _tmp316_;
												gchar* _tmp317_;
												_tmp309_ = self->priv->node;
												_tmp310_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp309_, VALA_TYPE_CLASS_TYPE, ValaClassType));
												type = _tmp310_;
												_tmp311_ = type;
												_tmp312_ = vala_class_type_get_class_symbol (_tmp311_);
												_tmp313_ = _tmp312_;
												_tmp314_ = vala_get_ccode_name ((ValaCodeNode*) _tmp313_);
												_tmp315_ = _tmp314_;
												_tmp316_ = g_strdup_printf ("%sClass*", _tmp315_);
												_tmp317_ = _tmp316_;
												_g_free0 (_tmp315_);
												result = _tmp317_;
												_vala_code_node_unref0 (type);
												return result;
											} else {
												ValaCodeNode* _tmp318_;
												_tmp318_ = self->priv->node;
												if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp318_, VALA_TYPE_INTERFACE_TYPE)) {
													ValaInterfaceType* type = NULL;
													ValaCodeNode* _tmp319_;
													ValaInterfaceType* _tmp320_;
													ValaInterfaceType* _tmp321_;
													ValaInterface* _tmp322_;
													ValaInterface* _tmp323_;
													gchar* _tmp324_;
													gchar* _tmp325_;
													gchar* _tmp326_;
													gchar* _tmp327_;
													_tmp319_ = self->priv->node;
													_tmp320_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp319_, VALA_TYPE_INTERFACE_TYPE, ValaInterfaceType));
													type = _tmp320_;
													_tmp321_ = type;
													_tmp322_ = vala_interface_type_get_interface_symbol (_tmp321_);
													_tmp323_ = _tmp322_;
													_tmp324_ = vala_get_ccode_type_name (_tmp323_);
													_tmp325_ = _tmp324_;
													_tmp326_ = g_strdup_printf ("%s*", _tmp325_);
													_tmp327_ = _tmp326_;
													_g_free0 (_tmp325_);
													result = _tmp327_;
													_vala_code_node_unref0 (type);
													return result;
												} else {
													ValaCodeNode* _tmp328_;
													_tmp328_ = self->priv->node;
													if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp328_, VALA_TYPE_VALUE_TYPE)) {
														ValaValueType* type = NULL;
														ValaCodeNode* _tmp329_;
														ValaValueType* _tmp330_;
														gchar* cname = NULL;
														ValaValueType* _tmp331_;
														ValaTypeSymbol* _tmp332_;
														ValaTypeSymbol* _tmp333_;
														gchar* _tmp334_;
														ValaValueType* _tmp335_;
														gboolean _tmp336_;
														gboolean _tmp337_;
														_tmp329_ = self->priv->node;
														_tmp330_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp329_, VALA_TYPE_VALUE_TYPE, ValaValueType));
														type = _tmp330_;
														_tmp331_ = type;
														_tmp332_ = vala_value_type_get_type_symbol (_tmp331_);
														_tmp333_ = _tmp332_;
														_tmp334_ = vala_get_ccode_name ((ValaCodeNode*) _tmp333_);
														cname = _tmp334_;
														_tmp335_ = type;
														_tmp336_ = vala_data_type_get_nullable ((ValaDataType*) _tmp335_);
														_tmp337_ = _tmp336_;
														if (_tmp337_) {
															const gchar* _tmp338_;
															gchar* _tmp339_;
															_tmp338_ = cname;
															_tmp339_ = g_strdup_printf ("%s*", _tmp338_);
															result = _tmp339_;
															_g_free0 (cname);
															_vala_code_node_unref0 (type);
															return result;
														} else {
															result = cname;
															_vala_code_node_unref0 (type);
															return result;
														}
														_g_free0 (cname);
														_vala_code_node_unref0 (type);
													} else {
														ValaCodeNode* _tmp340_;
														_tmp340_ = self->priv->node;
														if (VALA_IS_CTYPE (_tmp340_)) {
															ValaCodeNode* _tmp341_;
															const gchar* _tmp342_;
															const gchar* _tmp343_;
															gchar* _tmp344_;
															_tmp341_ = self->priv->node;
															_tmp342_ = vala_ctype_get_ctype_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp341_, VALA_TYPE_CTYPE, ValaCType));
															_tmp343_ = _tmp342_;
															_tmp344_ = g_strdup (_tmp343_);
															result = _tmp344_;
															return result;
														} else {
															ValaCodeNode* _tmp345_;
															ValaSourceReference* _tmp346_;
															ValaSourceReference* _tmp347_;
															gchar* _tmp348_;
															_tmp345_ = self->priv->node;
															_tmp346_ = vala_code_node_get_source_reference (_tmp345_);
															_tmp347_ = _tmp346_;
															vala_report_error (_tmp347_, "Unresolved type reference");
															_tmp348_ = g_strdup ("");
															result = _tmp348_;
															return result;
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

static gchar*
vala_ccode_attribute_get_default_header_filenames (ValaCCodeAttribute* self)
{
	gboolean _tmp0_ = FALSE;
	ValaSymbol* _tmp1_;
	gboolean _tmp4_ = FALSE;
	ValaSymbol* _tmp5_;
	ValaSymbol* _tmp6_;
	ValaSymbol* _tmp7_;
	gboolean _tmp18_ = FALSE;
	gboolean _tmp19_ = FALSE;
	ValaSymbol* _tmp20_;
	ValaSourceReference* _tmp21_;
	ValaSourceReference* _tmp22_;
	gchar* _tmp35_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp1_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_DYNAMIC_PROPERTY)) {
		_tmp0_ = TRUE;
	} else {
		ValaSymbol* _tmp2_;
		_tmp2_ = self->priv->sym;
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_DYNAMIC_METHOD);
	}
	if (_tmp0_) {
		gchar* _tmp3_;
		_tmp3_ = g_strdup ("");
		result = _tmp3_;
		return result;
	}
	_tmp5_ = self->priv->sym;
	_tmp6_ = vala_symbol_get_parent_symbol (_tmp5_);
	_tmp7_ = _tmp6_;
	if (_tmp7_ != NULL) {
		ValaSymbol* _tmp8_;
		gboolean _tmp9_;
		gboolean _tmp10_;
		_tmp8_ = self->priv->sym;
		_tmp9_ = vala_symbol_get_is_extern (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp4_ = !_tmp10_;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		gchar* parent_headers = NULL;
		ValaSymbol* _tmp11_;
		ValaSymbol* _tmp12_;
		ValaSymbol* _tmp13_;
		gchar* _tmp14_;
		const gchar* _tmp15_;
		gint _tmp16_;
		gint _tmp17_;
		_tmp11_ = self->priv->sym;
		_tmp12_ = vala_symbol_get_parent_symbol (_tmp11_);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_get_ccode_header_filenames (_tmp13_);
		parent_headers = _tmp14_;
		_tmp15_ = parent_headers;
		_tmp16_ = strlen (_tmp15_);
		_tmp17_ = _tmp16_;
		if (_tmp17_ > 0) {
			result = parent_headers;
			return result;
		}
		_g_free0 (parent_headers);
	}
	_tmp20_ = self->priv->sym;
	_tmp21_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp20_);
	_tmp22_ = _tmp21_;
	if (_tmp22_ != NULL) {
		ValaSymbol* _tmp23_;
		gboolean _tmp24_;
		gboolean _tmp25_;
		_tmp23_ = self->priv->sym;
		_tmp24_ = vala_symbol_get_external_package (_tmp23_);
		_tmp25_ = _tmp24_;
		_tmp19_ = !_tmp25_;
	} else {
		_tmp19_ = FALSE;
	}
	if (_tmp19_) {
		ValaSymbol* _tmp26_;
		gboolean _tmp27_;
		gboolean _tmp28_;
		_tmp26_ = self->priv->sym;
		_tmp27_ = vala_symbol_get_is_extern (_tmp26_);
		_tmp28_ = _tmp27_;
		_tmp18_ = !_tmp28_;
	} else {
		_tmp18_ = FALSE;
	}
	if (_tmp18_) {
		ValaSymbol* _tmp29_;
		ValaSourceReference* _tmp30_;
		ValaSourceReference* _tmp31_;
		ValaSourceFile* _tmp32_;
		ValaSourceFile* _tmp33_;
		gchar* _tmp34_;
		_tmp29_ = self->priv->sym;
		_tmp30_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp29_);
		_tmp31_ = _tmp30_;
		_tmp32_ = vala_source_reference_get_file (_tmp31_);
		_tmp33_ = _tmp32_;
		_tmp34_ = vala_source_file_get_cinclude_filename (_tmp33_);
		result = _tmp34_;
		return result;
	}
	_tmp35_ = g_strdup ("");
	result = _tmp35_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_prefix (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp37_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_OBJECT_TYPE_SYMBOL)) {
		const gchar* _tmp1_;
		const gchar* _tmp2_;
		gchar* _tmp3_;
		_tmp1_ = vala_ccode_attribute_get_name (self);
		_tmp2_ = _tmp1_;
		_tmp3_ = g_strdup (_tmp2_);
		result = _tmp3_;
		return result;
	} else {
		gboolean _tmp4_ = FALSE;
		ValaSymbol* _tmp5_;
		_tmp5_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_ENUM)) {
			_tmp4_ = TRUE;
		} else {
			ValaSymbol* _tmp6_;
			_tmp6_ = self->priv->sym;
			_tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_ERROR_DOMAIN);
		}
		if (_tmp4_) {
			ValaSymbol* _tmp7_;
			gchar* _tmp8_;
			gchar* _tmp9_;
			gchar* _tmp10_;
			gchar* _tmp11_;
			_tmp7_ = self->priv->sym;
			_tmp8_ = vala_get_ccode_upper_case_name (_tmp7_, NULL);
			_tmp9_ = _tmp8_;
			_tmp10_ = g_strdup_printf ("%s_", _tmp9_);
			_tmp11_ = _tmp10_;
			_g_free0 (_tmp9_);
			result = _tmp11_;
			return result;
		} else {
			ValaSymbol* _tmp12_;
			_tmp12_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_NAMESPACE)) {
				ValaSymbol* _tmp13_;
				const gchar* _tmp14_;
				const gchar* _tmp15_;
				_tmp13_ = self->priv->sym;
				_tmp14_ = vala_symbol_get_name (_tmp13_);
				_tmp15_ = _tmp14_;
				if (_tmp15_ != NULL) {
					gchar* parent_prefix = NULL;
					gchar* _tmp16_;
					ValaSymbol* _tmp17_;
					ValaSymbol* _tmp18_;
					ValaSymbol* _tmp19_;
					const gchar* _tmp24_;
					ValaSymbol* _tmp25_;
					const gchar* _tmp26_;
					const gchar* _tmp27_;
					gchar* _tmp28_;
					_tmp16_ = g_strdup ("");
					parent_prefix = _tmp16_;
					_tmp17_ = self->priv->sym;
					_tmp18_ = vala_symbol_get_parent_symbol (_tmp17_);
					_tmp19_ = _tmp18_;
					if (_tmp19_ != NULL) {
						ValaSymbol* _tmp20_;
						ValaSymbol* _tmp21_;
						ValaSymbol* _tmp22_;
						gchar* _tmp23_;
						_tmp20_ = self->priv->sym;
						_tmp21_ = vala_symbol_get_parent_symbol (_tmp20_);
						_tmp22_ = _tmp21_;
						_tmp23_ = vala_get_ccode_prefix (_tmp22_);
						_g_free0 (parent_prefix);
						parent_prefix = _tmp23_;
					}
					_tmp24_ = parent_prefix;
					_tmp25_ = self->priv->sym;
					_tmp26_ = vala_symbol_get_name (_tmp25_);
					_tmp27_ = _tmp26_;
					_tmp28_ = g_strdup_printf ("%s%s", _tmp24_, _tmp27_);
					result = _tmp28_;
					_g_free0 (parent_prefix);
					return result;
				} else {
					gchar* _tmp29_;
					_tmp29_ = g_strdup ("");
					result = _tmp29_;
					return result;
				}
			} else {
				ValaSymbol* _tmp30_;
				const gchar* _tmp31_;
				const gchar* _tmp32_;
				_tmp30_ = self->priv->sym;
				_tmp31_ = vala_symbol_get_name (_tmp30_);
				_tmp32_ = _tmp31_;
				if (_tmp32_ != NULL) {
					ValaSymbol* _tmp33_;
					const gchar* _tmp34_;
					const gchar* _tmp35_;
					gchar* _tmp36_;
					_tmp33_ = self->priv->sym;
					_tmp34_ = vala_symbol_get_name (_tmp33_);
					_tmp35_ = _tmp34_;
					_tmp36_ = g_strdup (_tmp35_);
					result = _tmp36_;
					return result;
				}
			}
		}
	}
	_tmp37_ = g_strdup ("");
	result = _tmp37_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_lower_case_prefix (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_NAMESPACE)) {
		ValaSymbol* _tmp1_;
		const gchar* _tmp2_;
		const gchar* _tmp3_;
		_tmp1_ = self->priv->sym;
		_tmp2_ = vala_symbol_get_name (_tmp1_);
		_tmp3_ = _tmp2_;
		if (_tmp3_ == NULL) {
			gchar* _tmp4_;
			_tmp4_ = g_strdup ("");
			result = _tmp4_;
			return result;
		} else {
			ValaSymbol* _tmp5_;
			ValaSymbol* _tmp6_;
			ValaSymbol* _tmp7_;
			gchar* _tmp8_;
			gchar* _tmp9_;
			ValaSymbol* _tmp10_;
			const gchar* _tmp11_;
			const gchar* _tmp12_;
			gchar* _tmp13_;
			gchar* _tmp14_;
			gchar* _tmp15_;
			gchar* _tmp16_;
			_tmp5_ = self->priv->sym;
			_tmp6_ = vala_symbol_get_parent_symbol (_tmp5_);
			_tmp7_ = _tmp6_;
			_tmp8_ = vala_get_ccode_lower_case_prefix (_tmp7_);
			_tmp9_ = _tmp8_;
			_tmp10_ = self->priv->sym;
			_tmp11_ = vala_symbol_get_name (_tmp10_);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_symbol_camel_case_to_lower_case (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp15_ = g_strdup_printf ("%s%s_", _tmp9_, _tmp14_);
			_tmp16_ = _tmp15_;
			_g_free0 (_tmp14_);
			_g_free0 (_tmp9_);
			result = _tmp16_;
			return result;
		}
	} else {
		ValaSymbol* _tmp17_;
		_tmp17_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_METHOD)) {
			gchar* _tmp18_;
			_tmp18_ = g_strdup ("");
			result = _tmp18_;
			return result;
		} else {
			ValaSymbol* _tmp19_;
			gchar* _tmp20_;
			gchar* _tmp21_;
			gchar* _tmp22_;
			gchar* _tmp23_;
			_tmp19_ = self->priv->sym;
			_tmp20_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp19_, NULL);
			_tmp21_ = _tmp20_;
			_tmp22_ = g_strdup_printf ("%s_", _tmp21_);
			_tmp23_ = _tmp22_;
			_g_free0 (_tmp21_);
			result = _tmp23_;
			return result;
		}
	}
}

static gchar*
vala_ccode_attribute_get_default_lower_case_suffix (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp42_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_OBJECT_TYPE_SYMBOL)) {
		gchar* csuffix = NULL;
		ValaSymbol* _tmp1_;
		const gchar* _tmp2_;
		const gchar* _tmp3_;
		gchar* _tmp4_;
		const gchar* _tmp5_;
		const gchar* _tmp19_;
		_tmp1_ = self->priv->sym;
		_tmp2_ = vala_symbol_get_name (_tmp1_);
		_tmp3_ = _tmp2_;
		_tmp4_ = vala_symbol_camel_case_to_lower_case (_tmp3_);
		csuffix = _tmp4_;
		_tmp5_ = csuffix;
		if (g_str_has_prefix (_tmp5_, "type_")) {
			const gchar* _tmp6_;
			gint _tmp7_;
			gint _tmp8_;
			gchar* _tmp9_;
			gchar* _tmp10_;
			gchar* _tmp11_;
			_tmp6_ = csuffix;
			_tmp7_ = strlen ("type_");
			_tmp8_ = _tmp7_;
			_tmp9_ = string_substring (_tmp6_, (glong) _tmp8_, (glong) -1);
			_tmp10_ = _tmp9_;
			_tmp11_ = g_strconcat ("type", _tmp10_, NULL);
			_g_free0 (csuffix);
			csuffix = _tmp11_;
			_g_free0 (_tmp10_);
		} else {
			const gchar* _tmp12_;
			_tmp12_ = csuffix;
			if (g_str_has_prefix (_tmp12_, "is_")) {
				const gchar* _tmp13_;
				gint _tmp14_;
				gint _tmp15_;
				gchar* _tmp16_;
				gchar* _tmp17_;
				gchar* _tmp18_;
				_tmp13_ = csuffix;
				_tmp14_ = strlen ("is_");
				_tmp15_ = _tmp14_;
				_tmp16_ = string_substring (_tmp13_, (glong) _tmp15_, (glong) -1);
				_tmp17_ = _tmp16_;
				_tmp18_ = g_strconcat ("is", _tmp17_, NULL);
				_g_free0 (csuffix);
				csuffix = _tmp18_;
				_g_free0 (_tmp17_);
			}
		}
		_tmp19_ = csuffix;
		if (g_str_has_suffix (_tmp19_, "_class")) {
			const gchar* _tmp20_;
			const gchar* _tmp21_;
			gint _tmp22_;
			gint _tmp23_;
			gint _tmp24_;
			gint _tmp25_;
			gchar* _tmp26_;
			gchar* _tmp27_;
			gchar* _tmp28_;
			_tmp20_ = csuffix;
			_tmp21_ = csuffix;
			_tmp22_ = strlen (_tmp21_);
			_tmp23_ = _tmp22_;
			_tmp24_ = strlen ("_class");
			_tmp25_ = _tmp24_;
			_tmp26_ = string_substring (_tmp20_, (glong) 0, (glong) (_tmp23_ - _tmp25_));
			_tmp27_ = _tmp26_;
			_tmp28_ = g_strconcat (_tmp27_, "class", NULL);
			_g_free0 (csuffix);
			csuffix = _tmp28_;
			_g_free0 (_tmp27_);
		}
		result = csuffix;
		return result;
	} else {
		ValaSymbol* _tmp29_;
		_tmp29_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_SIGNAL)) {
			ValaSymbol* _tmp30_;
			ValaCCodeAttribute* _tmp31_;
			const gchar* _tmp32_;
			const gchar* _tmp33_;
			gchar* _tmp34_;
			_tmp30_ = self->priv->sym;
			_tmp31_ = vala_get_ccode_attribute ((ValaCodeNode*) _tmp30_);
			_tmp32_ = vala_ccode_attribute_get_name (_tmp31_);
			_tmp33_ = _tmp32_;
			_tmp34_ = string_replace (_tmp33_, "-", "_");
			result = _tmp34_;
			return result;
		} else {
			ValaSymbol* _tmp35_;
			const gchar* _tmp36_;
			const gchar* _tmp37_;
			_tmp35_ = self->priv->sym;
			_tmp36_ = vala_symbol_get_name (_tmp35_);
			_tmp37_ = _tmp36_;
			if (_tmp37_ != NULL) {
				ValaSymbol* _tmp38_;
				const gchar* _tmp39_;
				const gchar* _tmp40_;
				gchar* _tmp41_;
				_tmp38_ = self->priv->sym;
				_tmp39_ = vala_symbol_get_name (_tmp38_);
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_symbol_camel_case_to_lower_case (_tmp40_);
				result = _tmp41_;
				return result;
			}
		}
	}
	_tmp42_ = g_strdup ("");
	result = _tmp42_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_ref_function (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CLASS)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* _tmp2_;
		_tmp1_ = self->priv->sym;
		cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CLASS, ValaClass);
		_tmp2_ = cl;
		if (vala_class_is_fundamental (_tmp2_)) {
			const gchar* _tmp3_;
			const gchar* _tmp4_;
			gchar* _tmp5_;
			_tmp3_ = vala_ccode_attribute_get_lower_case_prefix (self);
			_tmp4_ = _tmp3_;
			_tmp5_ = g_strdup_printf ("%sref", _tmp4_);
			result = _tmp5_;
			return result;
		} else {
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			ValaClass* _tmp8_;
			_tmp6_ = cl;
			_tmp7_ = vala_class_get_base_class (_tmp6_);
			_tmp8_ = _tmp7_;
			if (_tmp8_ != NULL) {
				ValaClass* _tmp9_;
				ValaClass* _tmp10_;
				ValaClass* _tmp11_;
				gchar* _tmp12_;
				_tmp9_ = cl;
				_tmp10_ = vala_class_get_base_class (_tmp9_);
				_tmp11_ = _tmp10_;
				_tmp12_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) _tmp11_);
				result = _tmp12_;
				return result;
			}
		}
	} else {
		ValaSymbol* _tmp13_;
		_tmp13_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_INTERFACE)) {
			{
				ValaList* _prereq_list = NULL;
				ValaSymbol* _tmp14_;
				ValaList* _tmp15_;
				gint _prereq_size = 0;
				ValaList* _tmp16_;
				gint _tmp17_;
				gint _tmp18_;
				gint _prereq_index = 0;
				_tmp14_ = self->priv->sym;
				_tmp15_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_INTERFACE, ValaInterface));
				_prereq_list = _tmp15_;
				_tmp16_ = _prereq_list;
				_tmp17_ = vala_collection_get_size ((ValaCollection*) _tmp16_);
				_tmp18_ = _tmp17_;
				_prereq_size = _tmp18_;
				_prereq_index = -1;
				while (TRUE) {
					ValaDataType* prereq = NULL;
					ValaList* _tmp19_;
					gpointer _tmp20_;
					gchar* ref_func = NULL;
					ValaDataType* _tmp21_;
					ValaTypeSymbol* _tmp22_;
					ValaTypeSymbol* _tmp23_;
					gchar* _tmp24_;
					const gchar* _tmp25_;
					_prereq_index = _prereq_index + 1;
					if (!(_prereq_index < _prereq_size)) {
						break;
					}
					_tmp19_ = _prereq_list;
					_tmp20_ = vala_list_get (_tmp19_, _prereq_index);
					prereq = (ValaDataType*) _tmp20_;
					_tmp21_ = prereq;
					_tmp22_ = vala_data_type_get_data_type (_tmp21_);
					_tmp23_ = _tmp22_;
					_tmp24_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
					ref_func = _tmp24_;
					_tmp25_ = ref_func;
					if (_tmp25_ != NULL) {
						result = ref_func;
						_vala_code_node_unref0 (prereq);
						_vala_iterable_unref0 (_prereq_list);
						return result;
					}
					_g_free0 (ref_func);
					_vala_code_node_unref0 (prereq);
				}
				_vala_iterable_unref0 (_prereq_list);
			}
		}
	}
	result = NULL;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_unref_function (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CLASS)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* _tmp2_;
		_tmp1_ = self->priv->sym;
		cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CLASS, ValaClass);
		_tmp2_ = cl;
		if (vala_class_is_fundamental (_tmp2_)) {
			const gchar* _tmp3_;
			const gchar* _tmp4_;
			gchar* _tmp5_;
			_tmp3_ = vala_ccode_attribute_get_lower_case_prefix (self);
			_tmp4_ = _tmp3_;
			_tmp5_ = g_strdup_printf ("%sunref", _tmp4_);
			result = _tmp5_;
			return result;
		} else {
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			ValaClass* _tmp8_;
			_tmp6_ = cl;
			_tmp7_ = vala_class_get_base_class (_tmp6_);
			_tmp8_ = _tmp7_;
			if (_tmp8_ != NULL) {
				ValaClass* _tmp9_;
				ValaClass* _tmp10_;
				ValaClass* _tmp11_;
				gchar* _tmp12_;
				_tmp9_ = cl;
				_tmp10_ = vala_class_get_base_class (_tmp9_);
				_tmp11_ = _tmp10_;
				_tmp12_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) _tmp11_);
				result = _tmp12_;
				return result;
			}
		}
	} else {
		ValaSymbol* _tmp13_;
		_tmp13_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_INTERFACE)) {
			{
				ValaList* _prereq_list = NULL;
				ValaSymbol* _tmp14_;
				ValaList* _tmp15_;
				gint _prereq_size = 0;
				ValaList* _tmp16_;
				gint _tmp17_;
				gint _tmp18_;
				gint _prereq_index = 0;
				_tmp14_ = self->priv->sym;
				_tmp15_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_INTERFACE, ValaInterface));
				_prereq_list = _tmp15_;
				_tmp16_ = _prereq_list;
				_tmp17_ = vala_collection_get_size ((ValaCollection*) _tmp16_);
				_tmp18_ = _tmp17_;
				_prereq_size = _tmp18_;
				_prereq_index = -1;
				while (TRUE) {
					ValaDataType* prereq = NULL;
					ValaList* _tmp19_;
					gpointer _tmp20_;
					gchar* unref_func = NULL;
					ValaDataType* _tmp21_;
					ValaTypeSymbol* _tmp22_;
					ValaTypeSymbol* _tmp23_;
					gchar* _tmp24_;
					const gchar* _tmp25_;
					_prereq_index = _prereq_index + 1;
					if (!(_prereq_index < _prereq_size)) {
						break;
					}
					_tmp19_ = _prereq_list;
					_tmp20_ = vala_list_get (_tmp19_, _prereq_index);
					prereq = (ValaDataType*) _tmp20_;
					_tmp21_ = prereq;
					_tmp22_ = vala_data_type_get_data_type (_tmp21_);
					_tmp23_ = _tmp22_;
					_tmp24_ = vala_get_ccode_unref_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
					unref_func = _tmp24_;
					_tmp25_ = unref_func;
					if (_tmp25_ != NULL) {
						result = unref_func;
						_vala_code_node_unref0 (prereq);
						_vala_iterable_unref0 (_prereq_list);
						return result;
					}
					_g_free0 (unref_func);
					_vala_code_node_unref0 (prereq);
				}
				_vala_iterable_unref0 (_prereq_list);
			}
		}
	}
	result = NULL;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_ref_sink_function (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp20_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CLASS)) {
		ValaClass* base_class = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* _tmp2_;
		ValaClass* _tmp3_;
		ValaClass* _tmp4_;
		_tmp1_ = self->priv->sym;
		_tmp2_ = vala_class_get_base_class (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CLASS, ValaClass));
		_tmp3_ = _tmp2_;
		base_class = _tmp3_;
		_tmp4_ = base_class;
		if (_tmp4_ != NULL) {
			ValaClass* _tmp5_;
			gchar* _tmp6_;
			_tmp5_ = base_class;
			_tmp6_ = vala_get_ccode_ref_sink_function ((ValaObjectTypeSymbol*) _tmp5_);
			result = _tmp6_;
			return result;
		}
	} else {
		ValaSymbol* _tmp7_;
		_tmp7_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_INTERFACE)) {
			{
				ValaList* _prereq_list = NULL;
				ValaSymbol* _tmp8_;
				ValaList* _tmp9_;
				gint _prereq_size = 0;
				ValaList* _tmp10_;
				gint _tmp11_;
				gint _tmp12_;
				gint _prereq_index = 0;
				_tmp8_ = self->priv->sym;
				_tmp9_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_INTERFACE, ValaInterface));
				_prereq_list = _tmp9_;
				_tmp10_ = _prereq_list;
				_tmp11_ = vala_collection_get_size ((ValaCollection*) _tmp10_);
				_tmp12_ = _tmp11_;
				_prereq_size = _tmp12_;
				_prereq_index = -1;
				while (TRUE) {
					ValaDataType* prereq = NULL;
					ValaList* _tmp13_;
					gpointer _tmp14_;
					gchar* ref_sink_func = NULL;
					ValaDataType* _tmp15_;
					ValaTypeSymbol* _tmp16_;
					ValaTypeSymbol* _tmp17_;
					gchar* _tmp18_;
					const gchar* _tmp19_;
					_prereq_index = _prereq_index + 1;
					if (!(_prereq_index < _prereq_size)) {
						break;
					}
					_tmp13_ = _prereq_list;
					_tmp14_ = vala_list_get (_tmp13_, _prereq_index);
					prereq = (ValaDataType*) _tmp14_;
					_tmp15_ = prereq;
					_tmp16_ = vala_data_type_get_data_type (_tmp15_);
					_tmp17_ = _tmp16_;
					_tmp18_ = vala_get_ccode_ref_sink_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
					ref_sink_func = _tmp18_;
					_tmp19_ = ref_sink_func;
					if (g_strcmp0 (_tmp19_, "") != 0) {
						result = ref_sink_func;
						_vala_code_node_unref0 (prereq);
						_vala_iterable_unref0 (_prereq_list);
						return result;
					}
					_g_free0 (ref_sink_func);
					_vala_code_node_unref0 (prereq);
				}
				_vala_iterable_unref0 (_prereq_list);
			}
		}
	}
	_tmp20_ = g_strdup ("");
	result = _tmp20_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_free_function (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CLASS)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* _tmp2_;
		ValaClass* _tmp3_;
		ValaClass* _tmp4_;
		const gchar* _tmp9_;
		const gchar* _tmp10_;
		gchar* _tmp11_;
		_tmp1_ = self->priv->sym;
		cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CLASS, ValaClass);
		_tmp2_ = cl;
		_tmp3_ = vala_class_get_base_class (_tmp2_);
		_tmp4_ = _tmp3_;
		if (_tmp4_ != NULL) {
			ValaClass* _tmp5_;
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			gchar* _tmp8_;
			_tmp5_ = cl;
			_tmp6_ = vala_class_get_base_class (_tmp5_);
			_tmp7_ = _tmp6_;
			_tmp8_ = vala_get_ccode_free_function ((ValaTypeSymbol*) _tmp7_);
			result = _tmp8_;
			return result;
		}
		_tmp9_ = vala_ccode_attribute_get_lower_case_prefix (self);
		_tmp10_ = _tmp9_;
		_tmp11_ = g_strdup_printf ("%sfree", _tmp10_);
		result = _tmp11_;
		return result;
	} else {
		ValaSymbol* _tmp12_;
		_tmp12_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_STRUCT)) {
			ValaSymbol* _tmp13_;
			gboolean _tmp14_;
			gboolean _tmp15_;
			_tmp13_ = self->priv->sym;
			_tmp14_ = vala_symbol_get_external_package (_tmp13_);
			_tmp15_ = _tmp14_;
			if (!_tmp15_) {
				const gchar* _tmp16_;
				const gchar* _tmp17_;
				gchar* _tmp18_;
				_tmp16_ = vala_ccode_attribute_get_lower_case_prefix (self);
				_tmp17_ = _tmp16_;
				_tmp18_ = g_strdup_printf ("%sfree", _tmp17_);
				result = _tmp18_;
				return result;
			}
		}
	}
	result = NULL;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_type_id (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp61_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (_tmp0_ != NULL) {
		gboolean _tmp1_ = FALSE;
		gboolean _tmp2_ = FALSE;
		ValaSymbol* _tmp3_;
		_tmp3_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS)) {
			ValaSymbol* _tmp4_;
			gboolean _tmp5_;
			gboolean _tmp6_;
			_tmp4_ = self->priv->sym;
			_tmp5_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, VALA_TYPE_CLASS, ValaClass));
			_tmp6_ = _tmp5_;
			_tmp2_ = !_tmp6_;
		} else {
			_tmp2_ = FALSE;
		}
		if (_tmp2_) {
			_tmp1_ = TRUE;
		} else {
			ValaSymbol* _tmp7_;
			_tmp7_ = self->priv->sym;
			_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_INTERFACE);
		}
		if (_tmp1_) {
			ValaSymbol* _tmp8_;
			gchar* _tmp9_;
			_tmp8_ = self->priv->sym;
			_tmp9_ = vala_get_ccode_upper_case_name (_tmp8_, "TYPE_");
			result = _tmp9_;
			return result;
		} else {
			ValaSymbol* _tmp10_;
			_tmp10_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_STRUCT)) {
				ValaStruct* st = NULL;
				ValaSymbol* _tmp11_;
				ValaStruct* _tmp12_;
				_tmp11_ = self->priv->sym;
				st = G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, VALA_TYPE_STRUCT, ValaStruct);
				_tmp12_ = st;
				if (!vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp12_)) {
					ValaStruct* base_struct = NULL;
					ValaStruct* _tmp13_;
					ValaStruct* _tmp14_;
					ValaStruct* _tmp15_;
					ValaStruct* _tmp16_;
					ValaStruct* _tmp19_;
					_tmp13_ = st;
					_tmp14_ = vala_struct_get_base_struct (_tmp13_);
					_tmp15_ = _tmp14_;
					base_struct = _tmp15_;
					_tmp16_ = base_struct;
					if (_tmp16_ != NULL) {
						ValaStruct* _tmp17_;
						gchar* _tmp18_;
						_tmp17_ = base_struct;
						_tmp18_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp17_);
						result = _tmp18_;
						return result;
					}
					_tmp19_ = st;
					if (!vala_struct_is_simple_type (_tmp19_)) {
						gchar* _tmp20_;
						_tmp20_ = g_strdup ("G_TYPE_POINTER");
						result = _tmp20_;
						return result;
					}
				} else {
					ValaStruct* _tmp21_;
					gchar* _tmp22_;
					_tmp21_ = st;
					_tmp22_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp21_, "TYPE_");
					result = _tmp22_;
					return result;
				}
			} else {
				ValaSymbol* _tmp23_;
				_tmp23_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_ENUM)) {
					ValaEnum* en = NULL;
					ValaSymbol* _tmp24_;
					ValaEnum* _tmp25_;
					_tmp24_ = self->priv->sym;
					en = G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_ENUM, ValaEnum);
					_tmp25_ = en;
					if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp25_)) {
						ValaEnum* _tmp26_;
						gchar* _tmp27_;
						_tmp26_ = en;
						_tmp27_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp26_, "TYPE_");
						result = _tmp27_;
						return result;
					} else {
						const gchar* _tmp28_ = NULL;
						ValaEnum* _tmp29_;
						gboolean _tmp30_;
						gboolean _tmp31_;
						gchar* _tmp32_;
						_tmp29_ = en;
						_tmp30_ = vala_enum_get_is_flags (_tmp29_);
						_tmp31_ = _tmp30_;
						if (_tmp31_) {
							_tmp28_ = "G_TYPE_UINT";
						} else {
							_tmp28_ = "G_TYPE_INT";
						}
						_tmp32_ = g_strdup (_tmp28_);
						result = _tmp32_;
						return result;
					}
				} else {
					gchar* _tmp33_;
					_tmp33_ = g_strdup ("G_TYPE_POINTER");
					result = _tmp33_;
					return result;
				}
			}
		}
	} else {
		gboolean _tmp34_ = FALSE;
		ValaCodeNode* _tmp35_;
		_tmp35_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp35_, VALA_TYPE_ARRAY_TYPE)) {
			ValaCodeNode* _tmp36_;
			ValaDataType* _tmp37_;
			ValaDataType* _tmp38_;
			ValaTypeSymbol* _tmp39_;
			ValaTypeSymbol* _tmp40_;
			gchar* _tmp41_;
			gchar* _tmp42_;
			_tmp36_ = self->priv->node;
			_tmp37_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			_tmp38_ = _tmp37_;
			_tmp39_ = vala_data_type_get_data_type (_tmp38_);
			_tmp40_ = _tmp39_;
			_tmp41_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp40_);
			_tmp42_ = _tmp41_;
			_tmp34_ = g_strcmp0 (_tmp42_, "string") == 0;
			_g_free0 (_tmp42_);
		} else {
			_tmp34_ = FALSE;
		}
		if (_tmp34_) {
			gchar* _tmp43_;
			_tmp43_ = g_strdup ("G_TYPE_STRV");
			result = _tmp43_;
			return result;
		} else {
			gboolean _tmp44_ = FALSE;
			ValaCodeNode* _tmp45_;
			_tmp45_ = self->priv->node;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp45_, VALA_TYPE_POINTER_TYPE)) {
				_tmp44_ = TRUE;
			} else {
				ValaCodeNode* _tmp46_;
				_tmp46_ = self->priv->node;
				_tmp44_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, VALA_TYPE_DELEGATE_TYPE);
			}
			if (_tmp44_) {
				gchar* _tmp47_;
				_tmp47_ = g_strdup ("G_TYPE_POINTER");
				result = _tmp47_;
				return result;
			} else {
				ValaCodeNode* _tmp48_;
				_tmp48_ = self->priv->node;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp48_, VALA_TYPE_ERROR_TYPE)) {
					gchar* _tmp49_;
					_tmp49_ = g_strdup ("G_TYPE_ERROR");
					result = _tmp49_;
					return result;
				} else {
					ValaCodeNode* _tmp50_;
					_tmp50_ = self->priv->node;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp50_, VALA_TYPE_VOID_TYPE)) {
						gchar* _tmp51_;
						_tmp51_ = g_strdup ("G_TYPE_NONE");
						result = _tmp51_;
						return result;
					} else {
						ValaDataType* type = NULL;
						ValaCodeNode* _tmp52_;
						ValaDataType* _tmp53_;
						ValaDataType* _tmp54_;
						ValaTypeSymbol* _tmp55_;
						ValaTypeSymbol* _tmp56_;
						_tmp52_ = self->priv->node;
						_tmp53_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp52_, VALA_TYPE_DATA_TYPE, ValaDataType));
						type = _tmp53_;
						_tmp54_ = type;
						_tmp55_ = vala_data_type_get_data_type (_tmp54_);
						_tmp56_ = _tmp55_;
						if (_tmp56_ != NULL) {
							ValaDataType* _tmp57_;
							ValaTypeSymbol* _tmp58_;
							ValaTypeSymbol* _tmp59_;
							gchar* _tmp60_;
							_tmp57_ = type;
							_tmp58_ = vala_data_type_get_data_type (_tmp57_);
							_tmp59_ = _tmp58_;
							_tmp60_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp59_);
							result = _tmp60_;
							_vala_code_node_unref0 (type);
							return result;
						}
						_vala_code_node_unref0 (type);
					}
				}
			}
		}
	}
	_tmp61_ = g_strdup ("");
	result = _tmp61_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp146_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (_tmp0_ != NULL) {
		ValaSymbol* _tmp1_;
		_tmp1_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS)) {
			ValaClass* cl = NULL;
			ValaSymbol* _tmp2_;
			ValaClass* _tmp3_;
			ValaClass* _tmp4_;
			ValaClass* _tmp5_;
			_tmp2_ = self->priv->sym;
			cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, VALA_TYPE_CLASS, ValaClass);
			_tmp3_ = cl;
			_tmp4_ = vala_class_get_base_class (_tmp3_);
			_tmp5_ = _tmp4_;
			if (_tmp5_ != NULL) {
				ValaClass* _tmp6_;
				ValaClass* _tmp7_;
				ValaClass* _tmp8_;
				gchar* _tmp9_;
				_tmp6_ = cl;
				_tmp7_ = vala_class_get_base_class (_tmp6_);
				_tmp8_ = _tmp7_;
				_tmp9_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp8_);
				result = _tmp9_;
				return result;
			} else {
				ValaClass* _tmp10_;
				gboolean _tmp11_;
				gboolean _tmp12_;
				_tmp10_ = cl;
				_tmp11_ = vala_class_get_is_compact (_tmp10_);
				_tmp12_ = _tmp11_;
				if (!_tmp12_) {
					ValaClass* _tmp13_;
					gchar* _tmp14_;
					_tmp13_ = cl;
					_tmp14_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp13_, NULL);
					result = _tmp14_;
					return result;
				} else {
					const gchar* _tmp15_;
					const gchar* _tmp16_;
					_tmp15_ = vala_ccode_attribute_get_type_id (self);
					_tmp16_ = _tmp15_;
					if (g_strcmp0 (_tmp16_, "G_TYPE_POINTER") == 0) {
						gchar* _tmp17_;
						_tmp17_ = g_strdup ("POINTER");
						result = _tmp17_;
						return result;
					} else {
						gchar* _tmp18_;
						_tmp18_ = g_strdup ("BOXED");
						result = _tmp18_;
						return result;
					}
				}
			}
		} else {
			ValaSymbol* _tmp19_;
			_tmp19_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_ENUM)) {
				ValaEnum* en = NULL;
				ValaSymbol* _tmp20_;
				ValaEnum* _tmp21_;
				_tmp20_ = self->priv->sym;
				en = G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_ENUM, ValaEnum);
				_tmp21_ = en;
				if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp21_)) {
					ValaEnum* _tmp22_;
					gboolean _tmp23_;
					gboolean _tmp24_;
					_tmp22_ = en;
					_tmp23_ = vala_enum_get_is_flags (_tmp22_);
					_tmp24_ = _tmp23_;
					if (_tmp24_) {
						gchar* _tmp25_;
						_tmp25_ = g_strdup ("FLAGS");
						result = _tmp25_;
						return result;
					} else {
						gchar* _tmp26_;
						_tmp26_ = g_strdup ("ENUM");
						result = _tmp26_;
						return result;
					}
				} else {
					ValaEnum* _tmp27_;
					gboolean _tmp28_;
					gboolean _tmp29_;
					_tmp27_ = en;
					_tmp28_ = vala_enum_get_is_flags (_tmp27_);
					_tmp29_ = _tmp28_;
					if (_tmp29_) {
						gchar* _tmp30_;
						_tmp30_ = g_strdup ("UINT");
						result = _tmp30_;
						return result;
					} else {
						gchar* _tmp31_;
						_tmp31_ = g_strdup ("INT");
						result = _tmp31_;
						return result;
					}
				}
			} else {
				ValaSymbol* _tmp32_;
				_tmp32_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_INTERFACE)) {
					gchar* _tmp45_;
					{
						ValaList* _prereq_list = NULL;
						ValaSymbol* _tmp33_;
						ValaList* _tmp34_;
						gint _prereq_size = 0;
						ValaList* _tmp35_;
						gint _tmp36_;
						gint _tmp37_;
						gint _prereq_index = 0;
						_tmp33_ = self->priv->sym;
						_tmp34_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, VALA_TYPE_INTERFACE, ValaInterface));
						_prereq_list = _tmp34_;
						_tmp35_ = _prereq_list;
						_tmp36_ = vala_collection_get_size ((ValaCollection*) _tmp35_);
						_tmp37_ = _tmp36_;
						_prereq_size = _tmp37_;
						_prereq_index = -1;
						while (TRUE) {
							ValaDataType* prereq = NULL;
							ValaList* _tmp38_;
							gpointer _tmp39_;
							gchar* type_name = NULL;
							ValaDataType* _tmp40_;
							ValaTypeSymbol* _tmp41_;
							ValaTypeSymbol* _tmp42_;
							gchar* _tmp43_;
							const gchar* _tmp44_;
							_prereq_index = _prereq_index + 1;
							if (!(_prereq_index < _prereq_size)) {
								break;
							}
							_tmp38_ = _prereq_list;
							_tmp39_ = vala_list_get (_tmp38_, _prereq_index);
							prereq = (ValaDataType*) _tmp39_;
							_tmp40_ = prereq;
							_tmp41_ = vala_data_type_get_data_type (_tmp40_);
							_tmp42_ = _tmp41_;
							_tmp43_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp42_);
							type_name = _tmp43_;
							_tmp44_ = type_name;
							if (g_strcmp0 (_tmp44_, "") != 0) {
								result = type_name;
								_vala_code_node_unref0 (prereq);
								_vala_iterable_unref0 (_prereq_list);
								return result;
							}
							_g_free0 (type_name);
							_vala_code_node_unref0 (prereq);
						}
						_vala_iterable_unref0 (_prereq_list);
					}
					_tmp45_ = g_strdup ("POINTER");
					result = _tmp45_;
					return result;
				} else {
					ValaSymbol* _tmp46_;
					_tmp46_ = self->priv->sym;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, VALA_TYPE_STRUCT)) {
						ValaStruct* st = NULL;
						ValaSymbol* _tmp47_;
						ValaStruct* base_st = NULL;
						ValaStruct* _tmp48_;
						ValaStruct* _tmp49_;
						ValaStruct* _tmp50_;
						ValaStruct* _tmp58_;
						_tmp47_ = self->priv->sym;
						st = G_TYPE_CHECK_INSTANCE_CAST (_tmp47_, VALA_TYPE_STRUCT, ValaStruct);
						_tmp48_ = st;
						_tmp49_ = vala_struct_get_base_struct (_tmp48_);
						_tmp50_ = _tmp49_;
						base_st = _tmp50_;
						while (TRUE) {
							ValaStruct* _tmp51_;
							ValaStruct* _tmp52_;
							_tmp51_ = base_st;
							if (!(_tmp51_ != NULL)) {
								break;
							}
							_tmp52_ = base_st;
							if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp52_)) {
								ValaStruct* _tmp53_;
								gchar* _tmp54_;
								_tmp53_ = base_st;
								_tmp54_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp53_);
								result = _tmp54_;
								return result;
							} else {
								ValaStruct* _tmp55_;
								ValaStruct* _tmp56_;
								ValaStruct* _tmp57_;
								_tmp55_ = base_st;
								_tmp56_ = vala_struct_get_base_struct (_tmp55_);
								_tmp57_ = _tmp56_;
								base_st = _tmp57_;
							}
						}
						_tmp58_ = st;
						if (vala_struct_is_simple_type (_tmp58_)) {
							ValaStruct* _tmp59_;
							ValaSourceReference* _tmp60_;
							ValaSourceReference* _tmp61_;
							ValaStruct* _tmp62_;
							gchar* _tmp63_;
							gchar* _tmp64_;
							gchar* _tmp65_;
							gchar* _tmp66_;
							_tmp59_ = st;
							_tmp60_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp59_);
							_tmp61_ = _tmp60_;
							_tmp62_ = st;
							_tmp63_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp62_);
							_tmp64_ = _tmp63_;
							_tmp65_ = g_strdup_printf ("The type `%s' doesn't declare a marshaller type name", _tmp64_);
							_tmp66_ = _tmp65_;
							vala_report_error (_tmp61_, _tmp66_);
							_g_free0 (_tmp66_);
							_g_free0 (_tmp64_);
						} else {
							ValaStruct* _tmp67_;
							_tmp67_ = st;
							if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp67_)) {
								gchar* _tmp68_;
								_tmp68_ = g_strdup ("BOXED");
								result = _tmp68_;
								return result;
							} else {
								gchar* _tmp69_;
								_tmp69_ = g_strdup ("POINTER");
								result = _tmp69_;
								return result;
							}
						}
					} else {
						ValaSymbol* _tmp70_;
						_tmp70_ = self->priv->sym;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp70_, VALA_TYPE_PARAMETER)) {
							ValaParameter* param = NULL;
							ValaSymbol* _tmp71_;
							ValaParameter* _tmp72_;
							ValaParameterDirection _tmp73_;
							ValaParameterDirection _tmp74_;
							_tmp71_ = self->priv->sym;
							param = G_TYPE_CHECK_INSTANCE_CAST (_tmp71_, VALA_TYPE_PARAMETER, ValaParameter);
							_tmp72_ = param;
							_tmp73_ = vala_parameter_get_direction (_tmp72_);
							_tmp74_ = _tmp73_;
							if (_tmp74_ != VALA_PARAMETER_DIRECTION_IN) {
								gchar* _tmp75_;
								_tmp75_ = g_strdup ("POINTER");
								result = _tmp75_;
								return result;
							} else {
								ValaParameter* _tmp76_;
								ValaDataType* _tmp77_;
								ValaDataType* _tmp78_;
								gchar* _tmp79_;
								_tmp76_ = param;
								_tmp77_ = vala_variable_get_variable_type ((ValaVariable*) _tmp76_);
								_tmp78_ = _tmp77_;
								_tmp79_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp78_);
								result = _tmp79_;
								return result;
							}
						} else {
							gchar* _tmp80_;
							_tmp80_ = g_strdup ("POINTER");
							result = _tmp80_;
							return result;
						}
					}
				}
			}
		}
	} else {
		gboolean _tmp81_ = FALSE;
		ValaCodeNode* _tmp82_;
		_tmp82_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp82_, VALA_TYPE_VALUE_TYPE)) {
			ValaCodeNode* _tmp83_;
			gboolean _tmp84_;
			gboolean _tmp85_;
			_tmp83_ = self->priv->node;
			_tmp84_ = vala_data_type_get_nullable ((ValaDataType*) G_TYPE_CHECK_INSTANCE_CAST (_tmp83_, VALA_TYPE_VALUE_TYPE, ValaValueType));
			_tmp85_ = _tmp84_;
			_tmp81_ = _tmp85_;
		} else {
			_tmp81_ = FALSE;
		}
		if (_tmp81_) {
			gchar* _tmp86_;
			_tmp86_ = g_strdup ("POINTER");
			result = _tmp86_;
			return result;
		} else {
			gboolean _tmp87_ = FALSE;
			ValaCodeNode* _tmp88_;
			_tmp88_ = self->priv->node;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp88_, VALA_TYPE_POINTER_TYPE)) {
				_tmp87_ = TRUE;
			} else {
				ValaCodeNode* _tmp89_;
				_tmp89_ = self->priv->node;
				_tmp87_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp89_, VALA_TYPE_GENERIC_TYPE);
			}
			if (_tmp87_) {
				gchar* _tmp90_;
				_tmp90_ = g_strdup ("POINTER");
				result = _tmp90_;
				return result;
			} else {
				ValaCodeNode* _tmp91_;
				_tmp91_ = self->priv->node;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, VALA_TYPE_ERROR_TYPE)) {
					gchar* _tmp92_;
					_tmp92_ = g_strdup ("POINTER");
					result = _tmp92_;
					return result;
				} else {
					ValaCodeNode* _tmp93_;
					_tmp93_ = self->priv->node;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp93_, VALA_TYPE_ARRAY_TYPE)) {
						ValaArrayType* array_type = NULL;
						ValaCodeNode* _tmp94_;
						ValaArrayType* _tmp95_;
						ValaDataType* _tmp96_;
						ValaDataType* _tmp97_;
						ValaTypeSymbol* _tmp98_;
						ValaTypeSymbol* _tmp99_;
						gchar* _tmp100_;
						gchar* _tmp101_;
						gboolean _tmp102_;
						_tmp94_ = self->priv->node;
						array_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp94_, VALA_TYPE_ARRAY_TYPE, ValaArrayType);
						_tmp95_ = array_type;
						_tmp96_ = vala_array_type_get_element_type (_tmp95_);
						_tmp97_ = _tmp96_;
						_tmp98_ = vala_data_type_get_data_type (_tmp97_);
						_tmp99_ = _tmp98_;
						_tmp100_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp99_);
						_tmp101_ = _tmp100_;
						_tmp102_ = g_strcmp0 (_tmp101_, "string") == 0;
						_g_free0 (_tmp101_);
						if (_tmp102_) {
							ValaArrayType* _tmp103_;
							ValaDataType* _tmp104_;
							ValaDataType* _tmp105_;
							ValaTypeSymbol* _tmp106_;
							ValaTypeSymbol* _tmp107_;
							gchar* _tmp108_;
							gchar* _tmp109_;
							gchar* _tmp110_;
							gchar* _tmp111_;
							_tmp103_ = array_type;
							_tmp104_ = vala_array_type_get_length_type (_tmp103_);
							_tmp105_ = _tmp104_;
							_tmp106_ = vala_data_type_get_data_type (_tmp105_);
							_tmp107_ = _tmp106_;
							_tmp108_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp107_);
							_tmp109_ = _tmp108_;
							_tmp110_ = g_strdup_printf ("BOXED,%s", _tmp109_);
							_tmp111_ = _tmp110_;
							_g_free0 (_tmp109_);
							result = _tmp111_;
							return result;
						} else {
							gchar* ret = NULL;
							gchar* _tmp112_;
							gchar* length_marshaller_type_name = NULL;
							ValaArrayType* _tmp113_;
							ValaDataType* _tmp114_;
							ValaDataType* _tmp115_;
							ValaTypeSymbol* _tmp116_;
							ValaTypeSymbol* _tmp117_;
							gchar* _tmp118_;
							_tmp112_ = g_strdup ("POINTER");
							ret = _tmp112_;
							_tmp113_ = array_type;
							_tmp114_ = vala_array_type_get_length_type (_tmp113_);
							_tmp115_ = _tmp114_;
							_tmp116_ = vala_data_type_get_data_type (_tmp115_);
							_tmp117_ = _tmp116_;
							_tmp118_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp117_);
							length_marshaller_type_name = _tmp118_;
							{
								gint i = 0;
								i = 0;
								{
									gboolean _tmp119_ = FALSE;
									_tmp119_ = TRUE;
									while (TRUE) {
										ValaArrayType* _tmp121_;
										gint _tmp122_;
										gint _tmp123_;
										const gchar* _tmp124_;
										const gchar* _tmp125_;
										gchar* _tmp126_;
										if (!_tmp119_) {
											gint _tmp120_;
											_tmp120_ = i;
											i = _tmp120_ + 1;
										}
										_tmp119_ = FALSE;
										_tmp121_ = array_type;
										_tmp122_ = vala_array_type_get_rank (_tmp121_);
										_tmp123_ = _tmp122_;
										if (!(i < _tmp123_)) {
											break;
										}
										_tmp124_ = ret;
										_tmp125_ = length_marshaller_type_name;
										_tmp126_ = g_strdup_printf ("%s,%s", _tmp124_, _tmp125_);
										_g_free0 (ret);
										ret = _tmp126_;
									}
								}
							}
							result = ret;
							_g_free0 (length_marshaller_type_name);
							return result;
						}
					} else {
						ValaCodeNode* _tmp127_;
						_tmp127_ = self->priv->node;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp127_, VALA_TYPE_DELEGATE_TYPE)) {
							ValaDelegateType* delegate_type = NULL;
							ValaCodeNode* _tmp128_;
							gchar* ret = NULL;
							gchar* _tmp129_;
							ValaDelegateType* _tmp130_;
							ValaDelegate* _tmp131_;
							ValaDelegate* _tmp132_;
							gboolean _tmp133_;
							gboolean _tmp134_;
							_tmp128_ = self->priv->node;
							delegate_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp128_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType);
							_tmp129_ = g_strdup ("POINTER");
							ret = _tmp129_;
							_tmp130_ = delegate_type;
							_tmp131_ = vala_delegate_type_get_delegate_symbol (_tmp130_);
							_tmp132_ = _tmp131_;
							_tmp133_ = vala_delegate_get_has_target (_tmp132_);
							_tmp134_ = _tmp133_;
							if (_tmp134_) {
								const gchar* _tmp135_;
								gchar* _tmp136_;
								ValaDelegateType* _tmp137_;
								_tmp135_ = ret;
								_tmp136_ = g_strdup_printf ("%s,POINTER", _tmp135_);
								_g_free0 (ret);
								ret = _tmp136_;
								_tmp137_ = delegate_type;
								if (vala_data_type_is_disposable ((ValaDataType*) _tmp137_)) {
									const gchar* _tmp138_;
									gchar* _tmp139_;
									_tmp138_ = ret;
									_tmp139_ = g_strdup_printf ("%s,POINTER", _tmp138_);
									_g_free0 (ret);
									ret = _tmp139_;
								}
							}
							result = ret;
							return result;
						} else {
							ValaCodeNode* _tmp140_;
							_tmp140_ = self->priv->node;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp140_, VALA_TYPE_VOID_TYPE)) {
								gchar* _tmp141_;
								_tmp141_ = g_strdup ("VOID");
								result = _tmp141_;
								return result;
							} else {
								ValaCodeNode* _tmp142_;
								ValaTypeSymbol* _tmp143_;
								ValaTypeSymbol* _tmp144_;
								gchar* _tmp145_;
								_tmp142_ = self->priv->node;
								_tmp143_ = vala_data_type_get_data_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, VALA_TYPE_DATA_TYPE, ValaDataType));
								_tmp144_ = _tmp143_;
								_tmp145_ = vala_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp144_);
								result = _tmp145_;
								return result;
							}
						}
					}
				}
			}
		}
	}
	_tmp146_ = g_strdup ("");
	result = _tmp146_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_get_value_function (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp68_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CLASS)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* _tmp2_;
		_tmp1_ = self->priv->sym;
		cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CLASS, ValaClass);
		_tmp2_ = cl;
		if (vala_class_is_fundamental (_tmp2_)) {
			ValaClass* _tmp3_;
			gchar* _tmp4_;
			_tmp3_ = cl;
			_tmp4_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp3_, "value_get_");
			result = _tmp4_;
			return result;
		} else {
			ValaClass* _tmp5_;
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			_tmp5_ = cl;
			_tmp6_ = vala_class_get_base_class (_tmp5_);
			_tmp7_ = _tmp6_;
			if (_tmp7_ != NULL) {
				ValaClass* _tmp8_;
				ValaClass* _tmp9_;
				ValaClass* _tmp10_;
				gchar* _tmp11_;
				_tmp8_ = cl;
				_tmp9_ = vala_class_get_base_class (_tmp8_);
				_tmp10_ = _tmp9_;
				_tmp11_ = vala_get_ccode_get_value_function ((ValaCodeNode*) _tmp10_);
				result = _tmp11_;
				return result;
			} else {
				const gchar* _tmp12_;
				const gchar* _tmp13_;
				_tmp12_ = vala_ccode_attribute_get_type_id (self);
				_tmp13_ = _tmp12_;
				if (g_strcmp0 (_tmp13_, "G_TYPE_POINTER") == 0) {
					gchar* _tmp14_;
					_tmp14_ = g_strdup ("g_value_get_pointer");
					result = _tmp14_;
					return result;
				} else {
					gchar* _tmp15_;
					_tmp15_ = g_strdup ("g_value_get_boxed");
					result = _tmp15_;
					return result;
				}
			}
		}
	} else {
		ValaSymbol* _tmp16_;
		_tmp16_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_ENUM)) {
			ValaEnum* en = NULL;
			ValaSymbol* _tmp17_;
			ValaEnum* _tmp18_;
			_tmp17_ = self->priv->sym;
			en = G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_ENUM, ValaEnum);
			_tmp18_ = en;
			if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp18_)) {
				ValaEnum* _tmp19_;
				gboolean _tmp20_;
				gboolean _tmp21_;
				_tmp19_ = en;
				_tmp20_ = vala_enum_get_is_flags (_tmp19_);
				_tmp21_ = _tmp20_;
				if (_tmp21_) {
					gchar* _tmp22_;
					_tmp22_ = g_strdup ("g_value_get_flags");
					result = _tmp22_;
					return result;
				} else {
					gchar* _tmp23_;
					_tmp23_ = g_strdup ("g_value_get_enum");
					result = _tmp23_;
					return result;
				}
			} else {
				ValaEnum* _tmp24_;
				gboolean _tmp25_;
				gboolean _tmp26_;
				_tmp24_ = en;
				_tmp25_ = vala_enum_get_is_flags (_tmp24_);
				_tmp26_ = _tmp25_;
				if (_tmp26_) {
					gchar* _tmp27_;
					_tmp27_ = g_strdup ("g_value_get_uint");
					result = _tmp27_;
					return result;
				} else {
					gchar* _tmp28_;
					_tmp28_ = g_strdup ("g_value_get_int");
					result = _tmp28_;
					return result;
				}
			}
		} else {
			ValaSymbol* _tmp29_;
			_tmp29_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_INTERFACE)) {
				gchar* _tmp42_;
				{
					ValaList* _prereq_list = NULL;
					ValaSymbol* _tmp30_;
					ValaList* _tmp31_;
					gint _prereq_size = 0;
					ValaList* _tmp32_;
					gint _tmp33_;
					gint _tmp34_;
					gint _prereq_index = 0;
					_tmp30_ = self->priv->sym;
					_tmp31_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_INTERFACE, ValaInterface));
					_prereq_list = _tmp31_;
					_tmp32_ = _prereq_list;
					_tmp33_ = vala_collection_get_size ((ValaCollection*) _tmp32_);
					_tmp34_ = _tmp33_;
					_prereq_size = _tmp34_;
					_prereq_index = -1;
					while (TRUE) {
						ValaDataType* prereq = NULL;
						ValaList* _tmp35_;
						gpointer _tmp36_;
						gchar* type_name = NULL;
						ValaDataType* _tmp37_;
						ValaTypeSymbol* _tmp38_;
						ValaTypeSymbol* _tmp39_;
						gchar* _tmp40_;
						const gchar* _tmp41_;
						_prereq_index = _prereq_index + 1;
						if (!(_prereq_index < _prereq_size)) {
							break;
						}
						_tmp35_ = _prereq_list;
						_tmp36_ = vala_list_get (_tmp35_, _prereq_index);
						prereq = (ValaDataType*) _tmp36_;
						_tmp37_ = prereq;
						_tmp38_ = vala_data_type_get_data_type (_tmp37_);
						_tmp39_ = _tmp38_;
						_tmp40_ = vala_get_ccode_get_value_function ((ValaCodeNode*) _tmp39_);
						type_name = _tmp40_;
						_tmp41_ = type_name;
						if (g_strcmp0 (_tmp41_, "") != 0) {
							result = type_name;
							_vala_code_node_unref0 (prereq);
							_vala_iterable_unref0 (_prereq_list);
							return result;
						}
						_g_free0 (type_name);
						_vala_code_node_unref0 (prereq);
					}
					_vala_iterable_unref0 (_prereq_list);
				}
				_tmp42_ = g_strdup ("g_value_get_pointer");
				result = _tmp42_;
				return result;
			} else {
				ValaSymbol* _tmp43_;
				_tmp43_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp43_, VALA_TYPE_STRUCT)) {
					ValaStruct* st = NULL;
					ValaSymbol* _tmp44_;
					ValaStruct* base_st = NULL;
					ValaStruct* _tmp45_;
					ValaStruct* _tmp46_;
					ValaStruct* _tmp47_;
					ValaStruct* _tmp55_;
					_tmp44_ = self->priv->sym;
					st = G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, VALA_TYPE_STRUCT, ValaStruct);
					_tmp45_ = st;
					_tmp46_ = vala_struct_get_base_struct (_tmp45_);
					_tmp47_ = _tmp46_;
					base_st = _tmp47_;
					while (TRUE) {
						ValaStruct* _tmp48_;
						ValaStruct* _tmp49_;
						_tmp48_ = base_st;
						if (!(_tmp48_ != NULL)) {
							break;
						}
						_tmp49_ = base_st;
						if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp49_)) {
							ValaStruct* _tmp50_;
							gchar* _tmp51_;
							_tmp50_ = base_st;
							_tmp51_ = vala_get_ccode_get_value_function ((ValaCodeNode*) _tmp50_);
							result = _tmp51_;
							return result;
						} else {
							ValaStruct* _tmp52_;
							ValaStruct* _tmp53_;
							ValaStruct* _tmp54_;
							_tmp52_ = base_st;
							_tmp53_ = vala_struct_get_base_struct (_tmp52_);
							_tmp54_ = _tmp53_;
							base_st = _tmp54_;
						}
					}
					_tmp55_ = st;
					if (vala_struct_is_simple_type (_tmp55_)) {
						ValaStruct* _tmp56_;
						ValaSourceReference* _tmp57_;
						ValaSourceReference* _tmp58_;
						ValaStruct* _tmp59_;
						gchar* _tmp60_;
						gchar* _tmp61_;
						gchar* _tmp62_;
						gchar* _tmp63_;
						_tmp56_ = st;
						_tmp57_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp56_);
						_tmp58_ = _tmp57_;
						_tmp59_ = st;
						_tmp60_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp59_);
						_tmp61_ = _tmp60_;
						_tmp62_ = g_strdup_printf ("The type `%s' doesn't declare a GValue get function", _tmp61_);
						_tmp63_ = _tmp62_;
						vala_report_error (_tmp58_, _tmp63_);
						_g_free0 (_tmp63_);
						_g_free0 (_tmp61_);
					} else {
						ValaStruct* _tmp64_;
						_tmp64_ = st;
						if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp64_)) {
							gchar* _tmp65_;
							_tmp65_ = g_strdup ("g_value_get_boxed");
							result = _tmp65_;
							return result;
						} else {
							gchar* _tmp66_;
							_tmp66_ = g_strdup ("g_value_get_pointer");
							result = _tmp66_;
							return result;
						}
					}
				} else {
					gchar* _tmp67_;
					_tmp67_ = g_strdup ("g_value_get_pointer");
					result = _tmp67_;
					return result;
				}
			}
		}
	}
	_tmp68_ = g_strdup ("");
	result = _tmp68_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_set_value_function (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp68_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CLASS)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* _tmp2_;
		_tmp1_ = self->priv->sym;
		cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CLASS, ValaClass);
		_tmp2_ = cl;
		if (vala_class_is_fundamental (_tmp2_)) {
			ValaClass* _tmp3_;
			gchar* _tmp4_;
			_tmp3_ = cl;
			_tmp4_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp3_, "value_set_");
			result = _tmp4_;
			return result;
		} else {
			ValaClass* _tmp5_;
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			_tmp5_ = cl;
			_tmp6_ = vala_class_get_base_class (_tmp5_);
			_tmp7_ = _tmp6_;
			if (_tmp7_ != NULL) {
				ValaClass* _tmp8_;
				ValaClass* _tmp9_;
				ValaClass* _tmp10_;
				gchar* _tmp11_;
				_tmp8_ = cl;
				_tmp9_ = vala_class_get_base_class (_tmp8_);
				_tmp10_ = _tmp9_;
				_tmp11_ = vala_get_ccode_set_value_function ((ValaCodeNode*) _tmp10_);
				result = _tmp11_;
				return result;
			} else {
				const gchar* _tmp12_;
				const gchar* _tmp13_;
				_tmp12_ = vala_ccode_attribute_get_type_id (self);
				_tmp13_ = _tmp12_;
				if (g_strcmp0 (_tmp13_, "G_TYPE_POINTER") == 0) {
					gchar* _tmp14_;
					_tmp14_ = g_strdup ("g_value_set_pointer");
					result = _tmp14_;
					return result;
				} else {
					gchar* _tmp15_;
					_tmp15_ = g_strdup ("g_value_set_boxed");
					result = _tmp15_;
					return result;
				}
			}
		}
	} else {
		ValaSymbol* _tmp16_;
		_tmp16_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_ENUM)) {
			ValaEnum* en = NULL;
			ValaSymbol* _tmp17_;
			ValaEnum* _tmp18_;
			_tmp17_ = self->priv->sym;
			en = G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_ENUM, ValaEnum);
			_tmp18_ = en;
			if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp18_)) {
				ValaEnum* _tmp19_;
				gboolean _tmp20_;
				gboolean _tmp21_;
				_tmp19_ = en;
				_tmp20_ = vala_enum_get_is_flags (_tmp19_);
				_tmp21_ = _tmp20_;
				if (_tmp21_) {
					gchar* _tmp22_;
					_tmp22_ = g_strdup ("g_value_set_flags");
					result = _tmp22_;
					return result;
				} else {
					gchar* _tmp23_;
					_tmp23_ = g_strdup ("g_value_set_enum");
					result = _tmp23_;
					return result;
				}
			} else {
				ValaEnum* _tmp24_;
				gboolean _tmp25_;
				gboolean _tmp26_;
				_tmp24_ = en;
				_tmp25_ = vala_enum_get_is_flags (_tmp24_);
				_tmp26_ = _tmp25_;
				if (_tmp26_) {
					gchar* _tmp27_;
					_tmp27_ = g_strdup ("g_value_set_uint");
					result = _tmp27_;
					return result;
				} else {
					gchar* _tmp28_;
					_tmp28_ = g_strdup ("g_value_set_int");
					result = _tmp28_;
					return result;
				}
			}
		} else {
			ValaSymbol* _tmp29_;
			_tmp29_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_INTERFACE)) {
				gchar* _tmp42_;
				{
					ValaList* _prereq_list = NULL;
					ValaSymbol* _tmp30_;
					ValaList* _tmp31_;
					gint _prereq_size = 0;
					ValaList* _tmp32_;
					gint _tmp33_;
					gint _tmp34_;
					gint _prereq_index = 0;
					_tmp30_ = self->priv->sym;
					_tmp31_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_INTERFACE, ValaInterface));
					_prereq_list = _tmp31_;
					_tmp32_ = _prereq_list;
					_tmp33_ = vala_collection_get_size ((ValaCollection*) _tmp32_);
					_tmp34_ = _tmp33_;
					_prereq_size = _tmp34_;
					_prereq_index = -1;
					while (TRUE) {
						ValaDataType* prereq = NULL;
						ValaList* _tmp35_;
						gpointer _tmp36_;
						gchar* type_name = NULL;
						ValaDataType* _tmp37_;
						ValaTypeSymbol* _tmp38_;
						ValaTypeSymbol* _tmp39_;
						gchar* _tmp40_;
						const gchar* _tmp41_;
						_prereq_index = _prereq_index + 1;
						if (!(_prereq_index < _prereq_size)) {
							break;
						}
						_tmp35_ = _prereq_list;
						_tmp36_ = vala_list_get (_tmp35_, _prereq_index);
						prereq = (ValaDataType*) _tmp36_;
						_tmp37_ = prereq;
						_tmp38_ = vala_data_type_get_data_type (_tmp37_);
						_tmp39_ = _tmp38_;
						_tmp40_ = vala_get_ccode_set_value_function ((ValaCodeNode*) _tmp39_);
						type_name = _tmp40_;
						_tmp41_ = type_name;
						if (g_strcmp0 (_tmp41_, "") != 0) {
							result = type_name;
							_vala_code_node_unref0 (prereq);
							_vala_iterable_unref0 (_prereq_list);
							return result;
						}
						_g_free0 (type_name);
						_vala_code_node_unref0 (prereq);
					}
					_vala_iterable_unref0 (_prereq_list);
				}
				_tmp42_ = g_strdup ("g_value_set_pointer");
				result = _tmp42_;
				return result;
			} else {
				ValaSymbol* _tmp43_;
				_tmp43_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp43_, VALA_TYPE_STRUCT)) {
					ValaStruct* st = NULL;
					ValaSymbol* _tmp44_;
					ValaStruct* base_st = NULL;
					ValaStruct* _tmp45_;
					ValaStruct* _tmp46_;
					ValaStruct* _tmp47_;
					ValaStruct* _tmp55_;
					_tmp44_ = self->priv->sym;
					st = G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, VALA_TYPE_STRUCT, ValaStruct);
					_tmp45_ = st;
					_tmp46_ = vala_struct_get_base_struct (_tmp45_);
					_tmp47_ = _tmp46_;
					base_st = _tmp47_;
					while (TRUE) {
						ValaStruct* _tmp48_;
						ValaStruct* _tmp49_;
						_tmp48_ = base_st;
						if (!(_tmp48_ != NULL)) {
							break;
						}
						_tmp49_ = base_st;
						if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp49_)) {
							ValaStruct* _tmp50_;
							gchar* _tmp51_;
							_tmp50_ = base_st;
							_tmp51_ = vala_get_ccode_set_value_function ((ValaCodeNode*) _tmp50_);
							result = _tmp51_;
							return result;
						} else {
							ValaStruct* _tmp52_;
							ValaStruct* _tmp53_;
							ValaStruct* _tmp54_;
							_tmp52_ = base_st;
							_tmp53_ = vala_struct_get_base_struct (_tmp52_);
							_tmp54_ = _tmp53_;
							base_st = _tmp54_;
						}
					}
					_tmp55_ = st;
					if (vala_struct_is_simple_type (_tmp55_)) {
						ValaStruct* _tmp56_;
						ValaSourceReference* _tmp57_;
						ValaSourceReference* _tmp58_;
						ValaStruct* _tmp59_;
						gchar* _tmp60_;
						gchar* _tmp61_;
						gchar* _tmp62_;
						gchar* _tmp63_;
						_tmp56_ = st;
						_tmp57_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp56_);
						_tmp58_ = _tmp57_;
						_tmp59_ = st;
						_tmp60_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp59_);
						_tmp61_ = _tmp60_;
						_tmp62_ = g_strdup_printf ("The type `%s' doesn't declare a GValue set function", _tmp61_);
						_tmp63_ = _tmp62_;
						vala_report_error (_tmp58_, _tmp63_);
						_g_free0 (_tmp63_);
						_g_free0 (_tmp61_);
					} else {
						ValaStruct* _tmp64_;
						_tmp64_ = st;
						if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp64_)) {
							gchar* _tmp65_;
							_tmp65_ = g_strdup ("g_value_set_boxed");
							result = _tmp65_;
							return result;
						} else {
							gchar* _tmp66_;
							_tmp66_ = g_strdup ("g_value_set_pointer");
							result = _tmp66_;
							return result;
						}
					}
				} else {
					gchar* _tmp67_;
					_tmp67_ = g_strdup ("g_value_set_pointer");
					result = _tmp67_;
					return result;
				}
			}
		}
	}
	_tmp68_ = g_strdup ("");
	result = _tmp68_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_take_value_function (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp68_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CLASS)) {
		ValaClass* cl = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* _tmp2_;
		_tmp1_ = self->priv->sym;
		cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CLASS, ValaClass);
		_tmp2_ = cl;
		if (vala_class_is_fundamental (_tmp2_)) {
			ValaClass* _tmp3_;
			gchar* _tmp4_;
			_tmp3_ = cl;
			_tmp4_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp3_, "value_take_");
			result = _tmp4_;
			return result;
		} else {
			ValaClass* _tmp5_;
			ValaClass* _tmp6_;
			ValaClass* _tmp7_;
			_tmp5_ = cl;
			_tmp6_ = vala_class_get_base_class (_tmp5_);
			_tmp7_ = _tmp6_;
			if (_tmp7_ != NULL) {
				ValaClass* _tmp8_;
				ValaClass* _tmp9_;
				ValaClass* _tmp10_;
				gchar* _tmp11_;
				_tmp8_ = cl;
				_tmp9_ = vala_class_get_base_class (_tmp8_);
				_tmp10_ = _tmp9_;
				_tmp11_ = vala_get_ccode_take_value_function ((ValaCodeNode*) _tmp10_);
				result = _tmp11_;
				return result;
			} else {
				const gchar* _tmp12_;
				const gchar* _tmp13_;
				_tmp12_ = vala_ccode_attribute_get_type_id (self);
				_tmp13_ = _tmp12_;
				if (g_strcmp0 (_tmp13_, "G_TYPE_POINTER") == 0) {
					gchar* _tmp14_;
					_tmp14_ = g_strdup ("g_value_set_pointer");
					result = _tmp14_;
					return result;
				} else {
					gchar* _tmp15_;
					_tmp15_ = g_strdup ("g_value_take_boxed");
					result = _tmp15_;
					return result;
				}
			}
		}
	} else {
		ValaSymbol* _tmp16_;
		_tmp16_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_ENUM)) {
			ValaEnum* en = NULL;
			ValaSymbol* _tmp17_;
			ValaEnum* _tmp18_;
			_tmp17_ = self->priv->sym;
			en = G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_ENUM, ValaEnum);
			_tmp18_ = en;
			if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp18_)) {
				ValaEnum* _tmp19_;
				gboolean _tmp20_;
				gboolean _tmp21_;
				_tmp19_ = en;
				_tmp20_ = vala_enum_get_is_flags (_tmp19_);
				_tmp21_ = _tmp20_;
				if (_tmp21_) {
					gchar* _tmp22_;
					_tmp22_ = g_strdup ("g_value_take_flags");
					result = _tmp22_;
					return result;
				} else {
					gchar* _tmp23_;
					_tmp23_ = g_strdup ("g_value_take_enum");
					result = _tmp23_;
					return result;
				}
			} else {
				ValaEnum* _tmp24_;
				gboolean _tmp25_;
				gboolean _tmp26_;
				_tmp24_ = en;
				_tmp25_ = vala_enum_get_is_flags (_tmp24_);
				_tmp26_ = _tmp25_;
				if (_tmp26_) {
					gchar* _tmp27_;
					_tmp27_ = g_strdup ("g_value_take_uint");
					result = _tmp27_;
					return result;
				} else {
					gchar* _tmp28_;
					_tmp28_ = g_strdup ("g_value_take_int");
					result = _tmp28_;
					return result;
				}
			}
		} else {
			ValaSymbol* _tmp29_;
			_tmp29_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_INTERFACE)) {
				gchar* _tmp42_;
				{
					ValaList* _prereq_list = NULL;
					ValaSymbol* _tmp30_;
					ValaList* _tmp31_;
					gint _prereq_size = 0;
					ValaList* _tmp32_;
					gint _tmp33_;
					gint _tmp34_;
					gint _prereq_index = 0;
					_tmp30_ = self->priv->sym;
					_tmp31_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_INTERFACE, ValaInterface));
					_prereq_list = _tmp31_;
					_tmp32_ = _prereq_list;
					_tmp33_ = vala_collection_get_size ((ValaCollection*) _tmp32_);
					_tmp34_ = _tmp33_;
					_prereq_size = _tmp34_;
					_prereq_index = -1;
					while (TRUE) {
						ValaDataType* prereq = NULL;
						ValaList* _tmp35_;
						gpointer _tmp36_;
						gchar* func = NULL;
						ValaDataType* _tmp37_;
						ValaTypeSymbol* _tmp38_;
						ValaTypeSymbol* _tmp39_;
						gchar* _tmp40_;
						const gchar* _tmp41_;
						_prereq_index = _prereq_index + 1;
						if (!(_prereq_index < _prereq_size)) {
							break;
						}
						_tmp35_ = _prereq_list;
						_tmp36_ = vala_list_get (_tmp35_, _prereq_index);
						prereq = (ValaDataType*) _tmp36_;
						_tmp37_ = prereq;
						_tmp38_ = vala_data_type_get_data_type (_tmp37_);
						_tmp39_ = _tmp38_;
						_tmp40_ = vala_get_ccode_take_value_function ((ValaCodeNode*) _tmp39_);
						func = _tmp40_;
						_tmp41_ = func;
						if (g_strcmp0 (_tmp41_, "") != 0) {
							result = func;
							_vala_code_node_unref0 (prereq);
							_vala_iterable_unref0 (_prereq_list);
							return result;
						}
						_g_free0 (func);
						_vala_code_node_unref0 (prereq);
					}
					_vala_iterable_unref0 (_prereq_list);
				}
				_tmp42_ = g_strdup ("g_value_set_pointer");
				result = _tmp42_;
				return result;
			} else {
				ValaSymbol* _tmp43_;
				_tmp43_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp43_, VALA_TYPE_STRUCT)) {
					ValaStruct* st = NULL;
					ValaSymbol* _tmp44_;
					ValaStruct* base_st = NULL;
					ValaStruct* _tmp45_;
					ValaStruct* _tmp46_;
					ValaStruct* _tmp47_;
					ValaStruct* _tmp55_;
					_tmp44_ = self->priv->sym;
					st = G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, VALA_TYPE_STRUCT, ValaStruct);
					_tmp45_ = st;
					_tmp46_ = vala_struct_get_base_struct (_tmp45_);
					_tmp47_ = _tmp46_;
					base_st = _tmp47_;
					while (TRUE) {
						ValaStruct* _tmp48_;
						ValaStruct* _tmp49_;
						_tmp48_ = base_st;
						if (!(_tmp48_ != NULL)) {
							break;
						}
						_tmp49_ = base_st;
						if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp49_)) {
							ValaStruct* _tmp50_;
							gchar* _tmp51_;
							_tmp50_ = base_st;
							_tmp51_ = vala_get_ccode_take_value_function ((ValaCodeNode*) _tmp50_);
							result = _tmp51_;
							return result;
						} else {
							ValaStruct* _tmp52_;
							ValaStruct* _tmp53_;
							ValaStruct* _tmp54_;
							_tmp52_ = base_st;
							_tmp53_ = vala_struct_get_base_struct (_tmp52_);
							_tmp54_ = _tmp53_;
							base_st = _tmp54_;
						}
					}
					_tmp55_ = st;
					if (vala_struct_is_simple_type (_tmp55_)) {
						ValaStruct* _tmp56_;
						ValaSourceReference* _tmp57_;
						ValaSourceReference* _tmp58_;
						ValaStruct* _tmp59_;
						gchar* _tmp60_;
						gchar* _tmp61_;
						gchar* _tmp62_;
						gchar* _tmp63_;
						_tmp56_ = st;
						_tmp57_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp56_);
						_tmp58_ = _tmp57_;
						_tmp59_ = st;
						_tmp60_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp59_);
						_tmp61_ = _tmp60_;
						_tmp62_ = g_strdup_printf ("The type `%s' doesn't declare a GValue take function", _tmp61_);
						_tmp63_ = _tmp62_;
						vala_report_error (_tmp58_, _tmp63_);
						_g_free0 (_tmp63_);
						_g_free0 (_tmp61_);
					} else {
						ValaStruct* _tmp64_;
						_tmp64_ = st;
						if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp64_)) {
							gchar* _tmp65_;
							_tmp65_ = g_strdup ("g_value_take_boxed");
							result = _tmp65_;
							return result;
						} else {
							gchar* _tmp66_;
							_tmp66_ = g_strdup ("g_value_set_pointer");
							result = _tmp66_;
							return result;
						}
					}
				} else {
					gchar* _tmp67_;
					_tmp67_ = g_strdup ("g_value_set_pointer");
					result = _tmp67_;
					return result;
				}
			}
		}
	}
	_tmp68_ = g_strdup ("");
	result = _tmp68_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_param_spec_function (ValaCCodeAttribute* self)
{
	ValaCodeNode* _tmp0_;
	gchar* _tmp96_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_SYMBOL)) {
		ValaSymbol* _tmp1_;
		_tmp1_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS)) {
			ValaClass* cl = NULL;
			ValaSymbol* _tmp2_;
			ValaClass* _tmp3_;
			_tmp2_ = self->priv->sym;
			cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, VALA_TYPE_CLASS, ValaClass);
			_tmp3_ = cl;
			if (vala_class_is_fundamental (_tmp3_)) {
				ValaClass* _tmp4_;
				gchar* _tmp5_;
				_tmp4_ = cl;
				_tmp5_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp4_, "param_spec_");
				result = _tmp5_;
				return result;
			} else {
				ValaClass* _tmp6_;
				ValaClass* _tmp7_;
				ValaClass* _tmp8_;
				_tmp6_ = cl;
				_tmp7_ = vala_class_get_base_class (_tmp6_);
				_tmp8_ = _tmp7_;
				if (_tmp8_ != NULL) {
					ValaClass* _tmp9_;
					ValaClass* _tmp10_;
					ValaClass* _tmp11_;
					gchar* _tmp12_;
					_tmp9_ = cl;
					_tmp10_ = vala_class_get_base_class (_tmp9_);
					_tmp11_ = _tmp10_;
					_tmp12_ = vala_get_ccode_param_spec_function ((ValaCodeNode*) _tmp11_);
					result = _tmp12_;
					return result;
				} else {
					const gchar* _tmp13_;
					const gchar* _tmp14_;
					_tmp13_ = vala_ccode_attribute_get_type_id (self);
					_tmp14_ = _tmp13_;
					if (g_strcmp0 (_tmp14_, "G_TYPE_POINTER") == 0) {
						gchar* _tmp15_;
						_tmp15_ = g_strdup ("g_param_spec_pointer");
						result = _tmp15_;
						return result;
					} else {
						gchar* _tmp16_;
						_tmp16_ = g_strdup ("g_param_spec_boxed");
						result = _tmp16_;
						return result;
					}
				}
			}
		} else {
			ValaSymbol* _tmp17_;
			_tmp17_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_INTERFACE)) {
				gchar* _tmp30_;
				{
					ValaList* _prereq_list = NULL;
					ValaSymbol* _tmp18_;
					ValaList* _tmp19_;
					gint _prereq_size = 0;
					ValaList* _tmp20_;
					gint _tmp21_;
					gint _tmp22_;
					gint _prereq_index = 0;
					_tmp18_ = self->priv->sym;
					_tmp19_ = vala_interface_get_prerequisites (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_INTERFACE, ValaInterface));
					_prereq_list = _tmp19_;
					_tmp20_ = _prereq_list;
					_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
					_tmp22_ = _tmp21_;
					_prereq_size = _tmp22_;
					_prereq_index = -1;
					while (TRUE) {
						ValaDataType* prereq = NULL;
						ValaList* _tmp23_;
						gpointer _tmp24_;
						gchar* func = NULL;
						ValaDataType* _tmp25_;
						ValaTypeSymbol* _tmp26_;
						ValaTypeSymbol* _tmp27_;
						gchar* _tmp28_;
						const gchar* _tmp29_;
						_prereq_index = _prereq_index + 1;
						if (!(_prereq_index < _prereq_size)) {
							break;
						}
						_tmp23_ = _prereq_list;
						_tmp24_ = vala_list_get (_tmp23_, _prereq_index);
						prereq = (ValaDataType*) _tmp24_;
						_tmp25_ = prereq;
						_tmp26_ = vala_data_type_get_data_type (_tmp25_);
						_tmp27_ = _tmp26_;
						_tmp28_ = vala_get_ccode_param_spec_function ((ValaCodeNode*) _tmp27_);
						func = _tmp28_;
						_tmp29_ = func;
						if (g_strcmp0 (_tmp29_, "") != 0) {
							result = func;
							_vala_code_node_unref0 (prereq);
							_vala_iterable_unref0 (_prereq_list);
							return result;
						}
						_g_free0 (func);
						_vala_code_node_unref0 (prereq);
					}
					_vala_iterable_unref0 (_prereq_list);
				}
				_tmp30_ = g_strdup ("g_param_spec_pointer");
				result = _tmp30_;
				return result;
			} else {
				ValaSymbol* _tmp31_;
				_tmp31_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, VALA_TYPE_ENUM)) {
					ValaEnum* e = NULL;
					ValaSymbol* _tmp32_;
					ValaEnum* _tmp33_;
					_tmp32_ = self->priv->sym;
					e = G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, VALA_TYPE_ENUM, ValaEnum);
					_tmp33_ = e;
					if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp33_)) {
						ValaEnum* _tmp34_;
						gboolean _tmp35_;
						gboolean _tmp36_;
						_tmp34_ = e;
						_tmp35_ = vala_enum_get_is_flags (_tmp34_);
						_tmp36_ = _tmp35_;
						if (_tmp36_) {
							gchar* _tmp37_;
							_tmp37_ = g_strdup ("g_param_spec_flags");
							result = _tmp37_;
							return result;
						} else {
							gchar* _tmp38_;
							_tmp38_ = g_strdup ("g_param_spec_enum");
							result = _tmp38_;
							return result;
						}
					} else {
						ValaEnum* _tmp39_;
						gboolean _tmp40_;
						gboolean _tmp41_;
						_tmp39_ = e;
						_tmp40_ = vala_enum_get_is_flags (_tmp39_);
						_tmp41_ = _tmp40_;
						if (_tmp41_) {
							gchar* _tmp42_;
							_tmp42_ = g_strdup ("g_param_spec_uint");
							result = _tmp42_;
							return result;
						} else {
							gchar* _tmp43_;
							_tmp43_ = g_strdup ("g_param_spec_int");
							result = _tmp43_;
							return result;
						}
					}
				} else {
					ValaSymbol* _tmp44_;
					_tmp44_ = self->priv->sym;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, VALA_TYPE_STRUCT)) {
						gchar* type_id = NULL;
						ValaSymbol* _tmp45_;
						gchar* _tmp46_;
						const gchar* _tmp47_;
						_tmp45_ = self->priv->sym;
						_tmp46_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp45_);
						type_id = _tmp46_;
						_tmp47_ = type_id;
						if (g_strcmp0 (_tmp47_, "G_TYPE_INT") == 0) {
							gchar* _tmp48_;
							_tmp48_ = g_strdup ("g_param_spec_int");
							result = _tmp48_;
							_g_free0 (type_id);
							return result;
						} else {
							const gchar* _tmp49_;
							_tmp49_ = type_id;
							if (g_strcmp0 (_tmp49_, "G_TYPE_UINT") == 0) {
								gchar* _tmp50_;
								_tmp50_ = g_strdup ("g_param_spec_uint");
								result = _tmp50_;
								_g_free0 (type_id);
								return result;
							} else {
								const gchar* _tmp51_;
								_tmp51_ = type_id;
								if (g_strcmp0 (_tmp51_, "G_TYPE_INT64") == 0) {
									gchar* _tmp52_;
									_tmp52_ = g_strdup ("g_param_spec_int64");
									result = _tmp52_;
									_g_free0 (type_id);
									return result;
								} else {
									const gchar* _tmp53_;
									_tmp53_ = type_id;
									if (g_strcmp0 (_tmp53_, "G_TYPE_UINT64") == 0) {
										gchar* _tmp54_;
										_tmp54_ = g_strdup ("g_param_spec_uint64");
										result = _tmp54_;
										_g_free0 (type_id);
										return result;
									} else {
										const gchar* _tmp55_;
										_tmp55_ = type_id;
										if (g_strcmp0 (_tmp55_, "G_TYPE_LONG") == 0) {
											gchar* _tmp56_;
											_tmp56_ = g_strdup ("g_param_spec_long");
											result = _tmp56_;
											_g_free0 (type_id);
											return result;
										} else {
											const gchar* _tmp57_;
											_tmp57_ = type_id;
											if (g_strcmp0 (_tmp57_, "G_TYPE_ULONG") == 0) {
												gchar* _tmp58_;
												_tmp58_ = g_strdup ("g_param_spec_ulong");
												result = _tmp58_;
												_g_free0 (type_id);
												return result;
											} else {
												const gchar* _tmp59_;
												_tmp59_ = type_id;
												if (g_strcmp0 (_tmp59_, "G_TYPE_BOOLEAN") == 0) {
													gchar* _tmp60_;
													_tmp60_ = g_strdup ("g_param_spec_boolean");
													result = _tmp60_;
													_g_free0 (type_id);
													return result;
												} else {
													const gchar* _tmp61_;
													_tmp61_ = type_id;
													if (g_strcmp0 (_tmp61_, "G_TYPE_CHAR") == 0) {
														gchar* _tmp62_;
														_tmp62_ = g_strdup ("g_param_spec_char");
														result = _tmp62_;
														_g_free0 (type_id);
														return result;
													} else {
														const gchar* _tmp63_;
														_tmp63_ = type_id;
														if (g_strcmp0 (_tmp63_, "G_TYPE_UCHAR") == 0) {
															gchar* _tmp64_;
															_tmp64_ = g_strdup ("g_param_spec_uchar");
															result = _tmp64_;
															_g_free0 (type_id);
															return result;
														} else {
															const gchar* _tmp65_;
															_tmp65_ = type_id;
															if (g_strcmp0 (_tmp65_, "G_TYPE_FLOAT") == 0) {
																gchar* _tmp66_;
																_tmp66_ = g_strdup ("g_param_spec_float");
																result = _tmp66_;
																_g_free0 (type_id);
																return result;
															} else {
																const gchar* _tmp67_;
																_tmp67_ = type_id;
																if (g_strcmp0 (_tmp67_, "G_TYPE_DOUBLE") == 0) {
																	gchar* _tmp68_;
																	_tmp68_ = g_strdup ("g_param_spec_double");
																	result = _tmp68_;
																	_g_free0 (type_id);
																	return result;
																} else {
																	const gchar* _tmp69_;
																	_tmp69_ = type_id;
																	if (g_strcmp0 (_tmp69_, "G_TYPE_GTYPE") == 0) {
																		gchar* _tmp70_;
																		_tmp70_ = g_strdup ("g_param_spec_gtype");
																		result = _tmp70_;
																		_g_free0 (type_id);
																		return result;
																	} else {
																		gchar* _tmp71_;
																		_tmp71_ = g_strdup ("g_param_spec_boxed");
																		result = _tmp71_;
																		_g_free0 (type_id);
																		return result;
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
						_g_free0 (type_id);
					}
				}
			}
		}
	} else {
		gboolean _tmp72_ = FALSE;
		ValaCodeNode* _tmp73_;
		_tmp73_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp73_, VALA_TYPE_ARRAY_TYPE)) {
			ValaCodeNode* _tmp74_;
			ValaDataType* _tmp75_;
			ValaDataType* _tmp76_;
			ValaTypeSymbol* _tmp77_;
			ValaTypeSymbol* _tmp78_;
			ValaCodeContext* _tmp79_;
			ValaCodeContext* _tmp80_;
			ValaSemanticAnalyzer* _tmp81_;
			ValaSemanticAnalyzer* _tmp82_;
			ValaDataType* _tmp83_;
			ValaTypeSymbol* _tmp84_;
			ValaTypeSymbol* _tmp85_;
			_tmp74_ = self->priv->node;
			_tmp75_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp74_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			_tmp76_ = _tmp75_;
			_tmp77_ = vala_data_type_get_data_type (_tmp76_);
			_tmp78_ = _tmp77_;
			_tmp79_ = vala_code_context_get ();
			_tmp80_ = _tmp79_;
			_tmp81_ = vala_code_context_get_analyzer (_tmp80_);
			_tmp82_ = _tmp81_;
			_tmp83_ = _tmp82_->string_type;
			_tmp84_ = vala_data_type_get_data_type (_tmp83_);
			_tmp85_ = _tmp84_;
			_tmp72_ = _tmp78_ == _tmp85_;
			_vala_code_context_unref0 (_tmp80_);
		} else {
			_tmp72_ = FALSE;
		}
		if (_tmp72_) {
			gchar* _tmp86_;
			_tmp86_ = g_strdup ("g_param_spec_boxed");
			result = _tmp86_;
			return result;
		} else {
			gboolean _tmp87_ = FALSE;
			ValaCodeNode* _tmp88_;
			_tmp88_ = self->priv->node;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp88_, VALA_TYPE_DATA_TYPE)) {
				ValaCodeNode* _tmp89_;
				ValaTypeSymbol* _tmp90_;
				ValaTypeSymbol* _tmp91_;
				_tmp89_ = self->priv->node;
				_tmp90_ = vala_data_type_get_data_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp89_, VALA_TYPE_DATA_TYPE, ValaDataType));
				_tmp91_ = _tmp90_;
				_tmp87_ = _tmp91_ != NULL;
			} else {
				_tmp87_ = FALSE;
			}
			if (_tmp87_) {
				ValaCodeNode* _tmp92_;
				ValaTypeSymbol* _tmp93_;
				ValaTypeSymbol* _tmp94_;
				gchar* _tmp95_;
				_tmp92_ = self->priv->node;
				_tmp93_ = vala_data_type_get_data_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_DATA_TYPE, ValaDataType));
				_tmp94_ = _tmp93_;
				_tmp95_ = vala_get_ccode_param_spec_function ((ValaCodeNode*) _tmp94_);
				result = _tmp95_;
				return result;
			}
		}
	}
	_tmp96_ = g_strdup ("g_param_spec_pointer");
	result = _tmp96_;
	return result;
}

static gchar*
vala_ccode_attribute_get_default_default_value (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* _tmp15_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_ENUM)) {
		ValaEnum* en = NULL;
		ValaSymbol* _tmp1_;
		ValaEnum* _tmp2_;
		gboolean _tmp3_;
		gboolean _tmp4_;
		_tmp1_ = self->priv->sym;
		en = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_ENUM, ValaEnum);
		_tmp2_ = en;
		_tmp3_ = vala_enum_get_is_flags (_tmp2_);
		_tmp4_ = _tmp3_;
		if (_tmp4_) {
			gchar* _tmp5_;
			_tmp5_ = g_strdup ("0U");
			result = _tmp5_;
			return result;
		} else {
			gchar* _tmp6_;
			_tmp6_ = g_strdup ("0");
			result = _tmp6_;
			return result;
		}
	} else {
		ValaSymbol* _tmp7_;
		_tmp7_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_STRUCT)) {
			ValaStruct* st = NULL;
			ValaSymbol* _tmp8_;
			ValaStruct* base_st = NULL;
			ValaStruct* _tmp9_;
			ValaStruct* _tmp10_;
			ValaStruct* _tmp11_;
			ValaStruct* _tmp12_;
			_tmp8_ = self->priv->sym;
			st = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_STRUCT, ValaStruct);
			_tmp9_ = st;
			_tmp10_ = vala_struct_get_base_struct (_tmp9_);
			_tmp11_ = _tmp10_;
			base_st = _tmp11_;
			_tmp12_ = base_st;
			if (_tmp12_ != NULL) {
				ValaStruct* _tmp13_;
				gchar* _tmp14_;
				_tmp13_ = base_st;
				_tmp14_ = vala_get_ccode_default_value ((ValaTypeSymbol*) _tmp13_);
				result = _tmp14_;
				return result;
			}
		}
	}
	_tmp15_ = g_strdup ("");
	result = _tmp15_;
	return result;
}

static gchar*
vala_ccode_attribute_get_finish_name_for_basename (ValaCCodeAttribute* self,
                                                   const gchar* basename)
{
	gchar* _result_ = NULL;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	const gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (basename != NULL, NULL);
	_tmp0_ = g_strdup (basename);
	_result_ = _tmp0_;
	_tmp1_ = _result_;
	if (g_str_has_suffix (_tmp1_, "_async")) {
		const gchar* _tmp2_;
		const gchar* _tmp3_;
		gint _tmp4_;
		gint _tmp5_;
		gint _tmp6_;
		gint _tmp7_;
		gchar* _tmp8_;
		_tmp2_ = _result_;
		_tmp3_ = _result_;
		_tmp4_ = strlen (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = strlen ("_async");
		_tmp7_ = _tmp6_;
		_tmp8_ = string_substring (_tmp2_, (glong) 0, (glong) (_tmp5_ - _tmp7_));
		_g_free0 (_result_);
		_result_ = _tmp8_;
	}
	_tmp9_ = _result_;
	_tmp10_ = g_strdup_printf ("%s_finish", _tmp9_);
	result = _tmp10_;
	_g_free0 (_result_);
	return result;
}

static gchar*
vala_ccode_attribute_get_default_real_name (ValaCCodeAttribute* self)
{
	ValaSymbol* _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->sym;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CREATION_METHOD)) {
		ValaCreationMethod* m = NULL;
		ValaSymbol* _tmp1_;
		ValaClass* parent = NULL;
		ValaCreationMethod* _tmp2_;
		ValaSymbol* _tmp3_;
		ValaSymbol* _tmp4_;
		gboolean _tmp5_ = FALSE;
		ValaClass* _tmp6_;
		gchar* infix = NULL;
		gchar* _tmp13_;
		ValaCreationMethod* _tmp14_;
		const gchar* _tmp15_;
		const gchar* _tmp16_;
		_tmp1_ = self->priv->sym;
		m = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod);
		_tmp2_ = m;
		_tmp3_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp2_);
		_tmp4_ = _tmp3_;
		parent = G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp4_) : NULL;
		_tmp6_ = parent;
		if (_tmp6_ == NULL) {
			_tmp5_ = TRUE;
		} else {
			ValaClass* _tmp7_;
			gboolean _tmp8_;
			gboolean _tmp9_;
			_tmp7_ = parent;
			_tmp8_ = vala_class_get_is_compact (_tmp7_);
			_tmp9_ = _tmp8_;
			_tmp5_ = _tmp9_;
		}
		if (_tmp5_) {
			const gchar* _tmp10_;
			const gchar* _tmp11_;
			gchar* _tmp12_;
			_tmp10_ = vala_ccode_attribute_get_name (self);
			_tmp11_ = _tmp10_;
			_tmp12_ = g_strdup (_tmp11_);
			result = _tmp12_;
			return result;
		}
		_tmp13_ = g_strdup ("construct");
		infix = _tmp13_;
		_tmp14_ = m;
		_tmp15_ = vala_symbol_get_name ((ValaSymbol*) _tmp14_);
		_tmp16_ = _tmp15_;
		if (g_strcmp0 (_tmp16_, ".new") == 0) {
			ValaClass* _tmp17_;
			gchar* _tmp18_;
			gchar* _tmp19_;
			const gchar* _tmp20_;
			gchar* _tmp21_;
			gchar* _tmp22_;
			_tmp17_ = parent;
			_tmp18_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp17_);
			_tmp19_ = _tmp18_;
			_tmp20_ = infix;
			_tmp21_ = g_strdup_printf ("%s%s", _tmp19_, _tmp20_);
			_tmp22_ = _tmp21_;
			_g_free0 (_tmp19_);
			result = _tmp22_;
			_g_free0 (infix);
			return result;
		} else {
			ValaClass* _tmp23_;
			gchar* _tmp24_;
			gchar* _tmp25_;
			const gchar* _tmp26_;
			ValaCreationMethod* _tmp27_;
			const gchar* _tmp28_;
			const gchar* _tmp29_;
			gchar* _tmp30_;
			gchar* _tmp31_;
			_tmp23_ = parent;
			_tmp24_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp23_);
			_tmp25_ = _tmp24_;
			_tmp26_ = infix;
			_tmp27_ = m;
			_tmp28_ = vala_symbol_get_name ((ValaSymbol*) _tmp27_);
			_tmp29_ = _tmp28_;
			_tmp30_ = g_strdup_printf ("%s%s_%s", _tmp25_, _tmp26_, _tmp29_);
			_tmp31_ = _tmp30_;
			_g_free0 (_tmp25_);
			result = _tmp31_;
			_g_free0 (infix);
			return result;
		}
		_g_free0 (infix);
	} else {
		ValaSymbol* _tmp32_;
		_tmp32_ = self->priv->sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_METHOD)) {
			ValaMethod* m = NULL;
			ValaSymbol* _tmp33_;
			gboolean _tmp34_ = FALSE;
			ValaMethod* _tmp35_;
			ValaMethod* _tmp36_;
			ValaMethod* _tmp37_;
			_tmp33_ = self->priv->sym;
			m = G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, VALA_TYPE_METHOD, ValaMethod);
			_tmp35_ = m;
			_tmp36_ = vala_method_get_base_method (_tmp35_);
			_tmp37_ = _tmp36_;
			if (_tmp37_ != NULL) {
				_tmp34_ = TRUE;
			} else {
				ValaMethod* _tmp38_;
				ValaMethod* _tmp39_;
				ValaMethod* _tmp40_;
				_tmp38_ = m;
				_tmp39_ = vala_method_get_base_interface_method (_tmp38_);
				_tmp40_ = _tmp39_;
				_tmp34_ = _tmp40_ != NULL;
			}
			if (_tmp34_) {
				gchar* m_name = NULL;
				ValaMethod* _tmp41_;
				ValaSignal* _tmp42_;
				ValaSignal* _tmp43_;
				ValaMethod* _tmp52_;
				ValaDataType* _tmp53_;
				ValaDataType* _tmp54_;
				_tmp41_ = m;
				_tmp42_ = vala_method_get_signal_reference (_tmp41_);
				_tmp43_ = _tmp42_;
				if (_tmp43_ != NULL) {
					ValaMethod* _tmp44_;
					ValaSignal* _tmp45_;
					ValaSignal* _tmp46_;
					gchar* _tmp47_;
					_tmp44_ = m;
					_tmp45_ = vala_method_get_signal_reference (_tmp44_);
					_tmp46_ = _tmp45_;
					_tmp47_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp46_, NULL);
					_g_free0 (m_name);
					m_name = _tmp47_;
				} else {
					ValaMethod* _tmp48_;
					const gchar* _tmp49_;
					const gchar* _tmp50_;
					gchar* _tmp51_;
					_tmp48_ = m;
					_tmp49_ = vala_symbol_get_name ((ValaSymbol*) _tmp48_);
					_tmp50_ = _tmp49_;
					_tmp51_ = g_strdup (_tmp50_);
					_g_free0 (m_name);
					m_name = _tmp51_;
				}
				_tmp52_ = m;
				_tmp53_ = vala_method_get_base_interface_type (_tmp52_);
				_tmp54_ = _tmp53_;
				if (_tmp54_ != NULL) {
					ValaMethod* _tmp55_;
					ValaSymbol* _tmp56_;
					ValaSymbol* _tmp57_;
					gchar* _tmp58_;
					gchar* _tmp59_;
					ValaMethod* _tmp60_;
					ValaDataType* _tmp61_;
					ValaDataType* _tmp62_;
					ValaTypeSymbol* _tmp63_;
					ValaTypeSymbol* _tmp64_;
					gchar* _tmp65_;
					gchar* _tmp66_;
					const gchar* _tmp67_;
					gchar* _tmp68_;
					gchar* _tmp69_;
					_tmp55_ = m;
					_tmp56_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp55_);
					_tmp57_ = _tmp56_;
					_tmp58_ = vala_get_ccode_lower_case_prefix (_tmp57_);
					_tmp59_ = _tmp58_;
					_tmp60_ = m;
					_tmp61_ = vala_method_get_base_interface_type (_tmp60_);
					_tmp62_ = _tmp61_;
					_tmp63_ = vala_data_type_get_data_type (_tmp62_);
					_tmp64_ = _tmp63_;
					_tmp65_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp64_);
					_tmp66_ = _tmp65_;
					_tmp67_ = m_name;
					_tmp68_ = g_strdup_printf ("%sreal_%s%s", _tmp59_, _tmp66_, _tmp67_);
					_tmp69_ = _tmp68_;
					_g_free0 (_tmp66_);
					_g_free0 (_tmp59_);
					result = _tmp69_;
					_g_free0 (m_name);
					return result;
				} else {
					ValaMethod* _tmp70_;
					ValaSymbol* _tmp71_;
					ValaSymbol* _tmp72_;
					gchar* _tmp73_;
					gchar* _tmp74_;
					const gchar* _tmp75_;
					gchar* _tmp76_;
					gchar* _tmp77_;
					_tmp70_ = m;
					_tmp71_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp70_);
					_tmp72_ = _tmp71_;
					_tmp73_ = vala_get_ccode_lower_case_prefix (_tmp72_);
					_tmp74_ = _tmp73_;
					_tmp75_ = m_name;
					_tmp76_ = g_strdup_printf ("%sreal_%s", _tmp74_, _tmp75_);
					_tmp77_ = _tmp76_;
					_g_free0 (_tmp74_);
					result = _tmp77_;
					_g_free0 (m_name);
					return result;
				}
				_g_free0 (m_name);
			} else {
				const gchar* _tmp78_;
				const gchar* _tmp79_;
				gchar* _tmp80_;
				_tmp78_ = vala_ccode_attribute_get_name (self);
				_tmp79_ = _tmp78_;
				_tmp80_ = g_strdup (_tmp79_);
				result = _tmp80_;
				return result;
			}
		} else {
			ValaSymbol* _tmp81_;
			_tmp81_ = self->priv->sym;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp81_, VALA_TYPE_PROPERTY_ACCESSOR)) {
				ValaPropertyAccessor* acc = NULL;
				ValaSymbol* _tmp82_;
				ValaProperty* prop = NULL;
				ValaPropertyAccessor* _tmp83_;
				ValaProperty* _tmp84_;
				ValaProperty* _tmp85_;
				gboolean _tmp86_ = FALSE;
				ValaProperty* _tmp87_;
				ValaProperty* _tmp88_;
				ValaProperty* _tmp89_;
				_tmp82_ = self->priv->sym;
				acc = G_TYPE_CHECK_INSTANCE_CAST (_tmp82_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor);
				_tmp83_ = acc;
				_tmp84_ = vala_property_accessor_get_prop (_tmp83_);
				_tmp85_ = _tmp84_;
				prop = G_TYPE_CHECK_INSTANCE_CAST (_tmp85_, VALA_TYPE_PROPERTY, ValaProperty);
				_tmp87_ = prop;
				_tmp88_ = vala_property_get_base_property (_tmp87_);
				_tmp89_ = _tmp88_;
				if (_tmp89_ != NULL) {
					_tmp86_ = TRUE;
				} else {
					ValaProperty* _tmp90_;
					ValaProperty* _tmp91_;
					ValaProperty* _tmp92_;
					_tmp90_ = prop;
					_tmp91_ = vala_property_get_base_interface_property (_tmp90_);
					_tmp92_ = _tmp91_;
					_tmp86_ = _tmp92_ != NULL;
				}
				if (_tmp86_) {
					ValaPropertyAccessor* _tmp93_;
					gboolean _tmp94_;
					gboolean _tmp95_;
					_tmp93_ = acc;
					_tmp94_ = vala_property_accessor_get_readable (_tmp93_);
					_tmp95_ = _tmp94_;
					if (_tmp95_) {
						ValaProperty* _tmp96_;
						ValaSymbol* _tmp97_;
						ValaSymbol* _tmp98_;
						gchar* _tmp99_;
						gchar* _tmp100_;
						ValaProperty* _tmp101_;
						const gchar* _tmp102_;
						const gchar* _tmp103_;
						gchar* _tmp104_;
						gchar* _tmp105_;
						_tmp96_ = prop;
						_tmp97_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp96_);
						_tmp98_ = _tmp97_;
						_tmp99_ = vala_get_ccode_lower_case_prefix (_tmp98_);
						_tmp100_ = _tmp99_;
						_tmp101_ = prop;
						_tmp102_ = vala_symbol_get_name ((ValaSymbol*) _tmp101_);
						_tmp103_ = _tmp102_;
						_tmp104_ = g_strdup_printf ("%sreal_get_%s", _tmp100_, _tmp103_);
						_tmp105_ = _tmp104_;
						_g_free0 (_tmp100_);
						result = _tmp105_;
						return result;
					} else {
						ValaProperty* _tmp106_;
						ValaSymbol* _tmp107_;
						ValaSymbol* _tmp108_;
						gchar* _tmp109_;
						gchar* _tmp110_;
						ValaProperty* _tmp111_;
						const gchar* _tmp112_;
						const gchar* _tmp113_;
						gchar* _tmp114_;
						gchar* _tmp115_;
						_tmp106_ = prop;
						_tmp107_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp106_);
						_tmp108_ = _tmp107_;
						_tmp109_ = vala_get_ccode_lower_case_prefix (_tmp108_);
						_tmp110_ = _tmp109_;
						_tmp111_ = prop;
						_tmp112_ = vala_symbol_get_name ((ValaSymbol*) _tmp111_);
						_tmp113_ = _tmp112_;
						_tmp114_ = g_strdup_printf ("%sreal_set_%s", _tmp110_, _tmp113_);
						_tmp115_ = _tmp114_;
						_g_free0 (_tmp110_);
						result = _tmp115_;
						return result;
					}
				} else {
					const gchar* _tmp116_;
					const gchar* _tmp117_;
					gchar* _tmp118_;
					_tmp116_ = vala_ccode_attribute_get_name (self);
					_tmp117_ = _tmp116_;
					_tmp118_ = g_strdup (_tmp117_);
					result = _tmp118_;
					return result;
				}
			}
		}
	}
	g_assert_not_reached ();
}

static gchar*
vala_ccode_attribute_get_default_const_name (ValaCCodeAttribute* self)
{
	ValaCodeNode* _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_DATA_TYPE)) {
		ValaDataType* type = NULL;
		ValaCodeNode* _tmp1_;
		gchar* ptr = NULL;
		ValaTypeSymbol* t = NULL;
		ValaDataType* _tmp2_;
		ValaTypeSymbol* _tmp13_;
		ValaTypeSymbol* _tmp16_;
		gchar* _tmp17_;
		gchar* _tmp18_;
		const gchar* _tmp19_;
		gchar* _tmp20_;
		gchar* _tmp21_;
		_tmp1_ = self->priv->node;
		type = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_DATA_TYPE, ValaDataType);
		_tmp2_ = type;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_ARRAY_TYPE)) {
			ValaDataType* _tmp3_;
			ValaDataType* _tmp4_;
			ValaDataType* _tmp5_;
			ValaTypeSymbol* _tmp6_;
			ValaTypeSymbol* _tmp7_;
			ValaTypeSymbol* _tmp8_;
			_tmp3_ = type;
			_tmp4_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			_tmp5_ = _tmp4_;
			_tmp6_ = vala_data_type_get_data_type (_tmp5_);
			_tmp7_ = _tmp6_;
			_tmp8_ = _vala_code_node_ref0 (_tmp7_);
			_vala_code_node_unref0 (t);
			t = _tmp8_;
		} else {
			ValaDataType* _tmp9_;
			ValaTypeSymbol* _tmp10_;
			ValaTypeSymbol* _tmp11_;
			ValaTypeSymbol* _tmp12_;
			_tmp9_ = type;
			_tmp10_ = vala_data_type_get_data_type (_tmp9_);
			_tmp11_ = _tmp10_;
			_tmp12_ = _vala_code_node_ref0 (_tmp11_);
			_vala_code_node_unref0 (t);
			t = _tmp12_;
		}
		_tmp13_ = t;
		if (!vala_typesymbol_is_reference_type (_tmp13_)) {
			gchar* _tmp14_;
			_tmp14_ = g_strdup ("");
			_g_free0 (ptr);
			ptr = _tmp14_;
		} else {
			gchar* _tmp15_;
			_tmp15_ = g_strdup ("*");
			_g_free0 (ptr);
			ptr = _tmp15_;
		}
		_tmp16_ = t;
		_tmp17_ = vala_get_ccode_name ((ValaCodeNode*) _tmp16_);
		_tmp18_ = _tmp17_;
		_tmp19_ = ptr;
		_tmp20_ = g_strdup_printf ("const %s%s", _tmp18_, _tmp19_);
		_tmp21_ = _tmp20_;
		_g_free0 (_tmp18_);
		result = _tmp21_;
		_vala_code_node_unref0 (t);
		_g_free0 (ptr);
		return result;
	} else {
		gboolean _tmp22_ = FALSE;
		ValaCodeNode* _tmp23_;
		_tmp23_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_CLASS)) {
			ValaCodeNode* _tmp24_;
			gboolean _tmp25_;
			gboolean _tmp26_;
			_tmp24_ = self->priv->node;
			_tmp25_ = vala_class_get_is_immutable (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_CLASS, ValaClass));
			_tmp26_ = _tmp25_;
			_tmp22_ = _tmp26_;
		} else {
			_tmp22_ = FALSE;
		}
		if (_tmp22_) {
			const gchar* _tmp27_;
			const gchar* _tmp28_;
			gchar* _tmp29_;
			_tmp27_ = vala_ccode_attribute_get_name (self);
			_tmp28_ = _tmp27_;
			_tmp29_ = g_strdup_printf ("const %s", _tmp28_);
			result = _tmp29_;
			return result;
		} else {
			const gchar* _tmp30_;
			const gchar* _tmp31_;
			gchar* _tmp32_;
			_tmp30_ = vala_ccode_attribute_get_name (self);
			_tmp31_ = _tmp30_;
			_tmp32_ = g_strdup (_tmp31_);
			result = _tmp32_;
			return result;
		}
	}
}

static gboolean
vala_ccode_attribute_get_default_delegate_target (ValaCCodeAttribute* self)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	ValaCodeNode* _tmp2_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp2_ = self->priv->node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_FIELD)) {
		_tmp1_ = TRUE;
	} else {
		ValaCodeNode* _tmp3_;
		_tmp3_ = self->priv->node;
		_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_PARAMETER);
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		ValaCodeNode* _tmp4_;
		_tmp4_ = self->priv->node;
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_LOCAL_VARIABLE);
	}
	if (_tmp0_) {
		ValaDelegateType* delegate_type = NULL;
		ValaCodeNode* _tmp5_;
		ValaDataType* _tmp6_;
		ValaDataType* _tmp7_;
		gboolean _tmp8_ = FALSE;
		ValaDelegateType* _tmp9_;
		_tmp5_ = self->priv->node;
		_tmp6_ = vala_variable_get_variable_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, VALA_TYPE_VARIABLE, ValaVariable));
		_tmp7_ = _tmp6_;
		delegate_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp7_) : NULL;
		_tmp9_ = delegate_type;
		if (_tmp9_ != NULL) {
			ValaDelegateType* _tmp10_;
			ValaDelegate* _tmp11_;
			ValaDelegate* _tmp12_;
			gboolean _tmp13_;
			gboolean _tmp14_;
			_tmp10_ = delegate_type;
			_tmp11_ = vala_delegate_type_get_delegate_symbol (_tmp10_);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_delegate_get_has_target (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp8_ = _tmp14_;
		} else {
			_tmp8_ = FALSE;
		}
		result = _tmp8_;
		return result;
	} else {
		ValaCodeNode* _tmp15_;
		_tmp15_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_CALLABLE)) {
			ValaDelegateType* delegate_type = NULL;
			ValaCodeNode* _tmp16_;
			ValaDataType* _tmp17_;
			ValaDataType* _tmp18_;
			gboolean _tmp19_ = FALSE;
			ValaDelegateType* _tmp20_;
			_tmp16_ = self->priv->node;
			_tmp17_ = vala_callable_get_return_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, VALA_TYPE_CALLABLE, ValaCallable));
			_tmp18_ = _tmp17_;
			delegate_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp18_) : NULL;
			_tmp20_ = delegate_type;
			if (_tmp20_ != NULL) {
				ValaDelegateType* _tmp21_;
				ValaDelegate* _tmp22_;
				ValaDelegate* _tmp23_;
				gboolean _tmp24_;
				gboolean _tmp25_;
				_tmp21_ = delegate_type;
				_tmp22_ = vala_delegate_type_get_delegate_symbol (_tmp21_);
				_tmp23_ = _tmp22_;
				_tmp24_ = vala_delegate_get_has_target (_tmp23_);
				_tmp25_ = _tmp24_;
				_tmp19_ = _tmp25_;
			} else {
				_tmp19_ = FALSE;
			}
			result = _tmp19_;
			return result;
		} else {
			ValaCodeNode* _tmp26_;
			_tmp26_ = self->priv->node;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp26_, VALA_TYPE_PROPERTY)) {
				ValaDelegateType* delegate_type = NULL;
				ValaCodeNode* _tmp27_;
				ValaDataType* _tmp28_;
				ValaDataType* _tmp29_;
				gboolean _tmp30_ = FALSE;
				ValaDelegateType* _tmp31_;
				_tmp27_ = self->priv->node;
				_tmp28_ = vala_property_get_property_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, VALA_TYPE_PROPERTY, ValaProperty));
				_tmp29_ = _tmp28_;
				delegate_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp29_) : NULL;
				_tmp31_ = delegate_type;
				if (_tmp31_ != NULL) {
					ValaDelegateType* _tmp32_;
					ValaDelegate* _tmp33_;
					ValaDelegate* _tmp34_;
					gboolean _tmp35_;
					gboolean _tmp36_;
					_tmp32_ = delegate_type;
					_tmp33_ = vala_delegate_type_get_delegate_symbol (_tmp32_);
					_tmp34_ = _tmp33_;
					_tmp35_ = vala_delegate_get_has_target (_tmp34_);
					_tmp36_ = _tmp35_;
					_tmp30_ = _tmp36_;
				} else {
					_tmp30_ = FALSE;
				}
				result = _tmp30_;
				return result;
			} else {
				ValaCodeNode* _tmp37_;
				_tmp37_ = self->priv->node;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp37_, VALA_TYPE_PROPERTY_ACCESSOR)) {
					ValaCodeNode* _tmp38_;
					ValaProperty* _tmp39_;
					ValaProperty* _tmp40_;
					_tmp38_ = self->priv->node;
					_tmp39_ = vala_property_accessor_get_prop (G_TYPE_CHECK_INSTANCE_CAST (_tmp38_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
					_tmp40_ = _tmp39_;
					result = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp40_);
					return result;
				} else {
					ValaCodeNode* _tmp41_;
					_tmp41_ = self->priv->node;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, VALA_TYPE_EXPRESSION)) {
						ValaSymbol* symbol = NULL;
						ValaCodeNode* _tmp42_;
						ValaSymbol* _tmp43_;
						ValaSymbol* _tmp44_;
						ValaSymbol* _tmp45_;
						_tmp42_ = self->priv->node;
						_tmp43_ = vala_expression_get_symbol_reference (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_EXPRESSION, ValaExpression));
						_tmp44_ = _tmp43_;
						symbol = _tmp44_;
						_tmp45_ = symbol;
						if (_tmp45_ != NULL) {
							ValaSymbol* _tmp46_;
							_tmp46_ = symbol;
							result = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp46_);
							return result;
						}
					}
				}
			}
		}
	}
	result = FALSE;
	return result;
}

static gboolean
vala_ccode_attribute_get_default_array_length (ValaCCodeAttribute* self)
{
	ValaCodeNode* _tmp0_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_PARAMETER)) {
		ValaParameter* param = NULL;
		ValaCodeNode* _tmp1_;
		ValaParameter* _tmp2_;
		ValaParameter* _tmp3_;
		ValaParameter* _tmp4_;
		_tmp1_ = self->priv->node;
		param = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_PARAMETER, ValaParameter);
		_tmp2_ = param;
		_tmp3_ = vala_parameter_get_base_parameter (_tmp2_);
		_tmp4_ = _tmp3_;
		if (_tmp4_ != NULL) {
			ValaParameter* _tmp5_;
			ValaParameter* _tmp6_;
			ValaParameter* _tmp7_;
			_tmp5_ = param;
			_tmp6_ = vala_parameter_get_base_parameter (_tmp5_);
			_tmp7_ = _tmp6_;
			result = vala_get_ccode_array_length ((ValaCodeNode*) _tmp7_);
			return result;
		}
	} else {
		ValaCodeNode* _tmp8_;
		_tmp8_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_METHOD)) {
			ValaMethod* method = NULL;
			ValaCodeNode* _tmp9_;
			gboolean _tmp10_ = FALSE;
			ValaMethod* _tmp11_;
			ValaMethod* _tmp12_;
			ValaMethod* _tmp13_;
			_tmp9_ = self->priv->node;
			method = G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_METHOD, ValaMethod);
			_tmp11_ = method;
			_tmp12_ = vala_method_get_base_method (_tmp11_);
			_tmp13_ = _tmp12_;
			if (_tmp13_ != NULL) {
				ValaMethod* _tmp14_;
				ValaMethod* _tmp15_;
				ValaMethod* _tmp16_;
				ValaMethod* _tmp17_;
				_tmp14_ = method;
				_tmp15_ = vala_method_get_base_method (_tmp14_);
				_tmp16_ = _tmp15_;
				_tmp17_ = method;
				_tmp10_ = _tmp16_ != _tmp17_;
			} else {
				_tmp10_ = FALSE;
			}
			if (_tmp10_) {
				ValaMethod* _tmp18_;
				ValaMethod* _tmp19_;
				ValaMethod* _tmp20_;
				_tmp18_ = method;
				_tmp19_ = vala_method_get_base_method (_tmp18_);
				_tmp20_ = _tmp19_;
				result = vala_get_ccode_array_length ((ValaCodeNode*) _tmp20_);
				return result;
			} else {
				gboolean _tmp21_ = FALSE;
				ValaMethod* _tmp22_;
				ValaMethod* _tmp23_;
				ValaMethod* _tmp24_;
				_tmp22_ = method;
				_tmp23_ = vala_method_get_base_interface_method (_tmp22_);
				_tmp24_ = _tmp23_;
				if (_tmp24_ != NULL) {
					ValaMethod* _tmp25_;
					ValaMethod* _tmp26_;
					ValaMethod* _tmp27_;
					ValaMethod* _tmp28_;
					_tmp25_ = method;
					_tmp26_ = vala_method_get_base_interface_method (_tmp25_);
					_tmp27_ = _tmp26_;
					_tmp28_ = method;
					_tmp21_ = _tmp27_ != _tmp28_;
				} else {
					_tmp21_ = FALSE;
				}
				if (_tmp21_) {
					ValaMethod* _tmp29_;
					ValaMethod* _tmp30_;
					ValaMethod* _tmp31_;
					_tmp29_ = method;
					_tmp30_ = vala_method_get_base_interface_method (_tmp29_);
					_tmp31_ = _tmp30_;
					result = vala_get_ccode_array_length ((ValaCodeNode*) _tmp31_);
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}

static gboolean
vala_ccode_attribute_get_default_array_null_terminated (ValaCCodeAttribute* self)
{
	ValaCodeNode* _tmp0_;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_PARAMETER)) {
		ValaParameter* param = NULL;
		ValaCodeNode* _tmp1_;
		ValaParameter* _tmp2_;
		ValaParameter* _tmp3_;
		ValaParameter* _tmp4_;
		_tmp1_ = self->priv->node;
		param = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_PARAMETER, ValaParameter);
		_tmp2_ = param;
		_tmp3_ = vala_parameter_get_base_parameter (_tmp2_);
		_tmp4_ = _tmp3_;
		if (_tmp4_ != NULL) {
			ValaParameter* _tmp5_;
			ValaParameter* _tmp6_;
			ValaParameter* _tmp7_;
			_tmp5_ = param;
			_tmp6_ = vala_parameter_get_base_parameter (_tmp5_);
			_tmp7_ = _tmp6_;
			result = vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp7_);
			return result;
		}
	} else {
		ValaCodeNode* _tmp8_;
		_tmp8_ = self->priv->node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_METHOD)) {
			ValaMethod* method = NULL;
			ValaCodeNode* _tmp9_;
			gboolean _tmp10_ = FALSE;
			ValaMethod* _tmp11_;
			ValaMethod* _tmp12_;
			ValaMethod* _tmp13_;
			_tmp9_ = self->priv->node;
			method = G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_METHOD, ValaMethod);
			_tmp11_ = method;
			_tmp12_ = vala_method_get_base_method (_tmp11_);
			_tmp13_ = _tmp12_;
			if (_tmp13_ != NULL) {
				ValaMethod* _tmp14_;
				ValaMethod* _tmp15_;
				ValaMethod* _tmp16_;
				ValaMethod* _tmp17_;
				_tmp14_ = method;
				_tmp15_ = vala_method_get_base_method (_tmp14_);
				_tmp16_ = _tmp15_;
				_tmp17_ = method;
				_tmp10_ = _tmp16_ != _tmp17_;
			} else {
				_tmp10_ = FALSE;
			}
			if (_tmp10_) {
				ValaMethod* _tmp18_;
				ValaMethod* _tmp19_;
				ValaMethod* _tmp20_;
				_tmp18_ = method;
				_tmp19_ = vala_method_get_base_method (_tmp18_);
				_tmp20_ = _tmp19_;
				result = vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp20_);
				return result;
			} else {
				gboolean _tmp21_ = FALSE;
				ValaMethod* _tmp22_;
				ValaMethod* _tmp23_;
				ValaMethod* _tmp24_;
				_tmp22_ = method;
				_tmp23_ = vala_method_get_base_interface_method (_tmp22_);
				_tmp24_ = _tmp23_;
				if (_tmp24_ != NULL) {
					ValaMethod* _tmp25_;
					ValaMethod* _tmp26_;
					ValaMethod* _tmp27_;
					ValaMethod* _tmp28_;
					_tmp25_ = method;
					_tmp26_ = vala_method_get_base_interface_method (_tmp25_);
					_tmp27_ = _tmp26_;
					_tmp28_ = method;
					_tmp21_ = _tmp27_ != _tmp28_;
				} else {
					_tmp21_ = FALSE;
				}
				if (_tmp21_) {
					ValaMethod* _tmp29_;
					ValaMethod* _tmp30_;
					ValaMethod* _tmp31_;
					_tmp29_ = method;
					_tmp30_ = vala_method_get_base_interface_method (_tmp29_);
					_tmp31_ = _tmp30_;
					result = vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp31_);
					return result;
				}
			}
		}
	}
	result = FALSE;
	return result;
}

const gchar*
vala_ccode_attribute_get_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "cname", NULL);
			_g_free0 (self->priv->_name);
			self->priv->_name = _tmp3_;
		}
		_tmp4_ = self->priv->_name;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_name (self);
			_g_free0 (self->priv->_name);
			self->priv->_name = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_name;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_const_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_const_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "const_cname", NULL);
			_g_free0 (self->priv->_const_name);
			self->priv->_const_name = _tmp3_;
		}
		_tmp4_ = self->priv->_const_name;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_const_name (self);
			_g_free0 (self->priv->_const_name);
			self->priv->_const_name = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_const_name;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_type_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp9_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_type_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "type_cname", NULL);
			_g_free0 (self->priv->_type_name);
			self->priv->_type_name = _tmp3_;
		}
		_tmp4_ = self->priv->_type_name;
		if (_tmp4_ == NULL) {
			ValaSymbol* _tmp5_;
			gchar* _tmp6_;
			gchar* _tmp7_;
			gchar* _tmp8_;
			_tmp5_ = self->priv->sym;
			_tmp6_ = vala_get_ccode_name ((ValaCodeNode*) _tmp5_);
			_tmp7_ = _tmp6_;
			_tmp8_ = g_strdup_printf ("%sIface", _tmp7_);
			_g_free0 (self->priv->_type_name);
			self->priv->_type_name = _tmp8_;
			_g_free0 (_tmp7_);
		}
	}
	_tmp9_ = self->priv->_type_name;
	result = _tmp9_;
	return result;
}

const gchar*
vala_ccode_attribute_get_feature_test_macros (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_feature_test_macros;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "feature_test_macro", NULL);
			_g_free0 (self->priv->_feature_test_macros);
			self->priv->_feature_test_macros = _tmp3_;
		}
		_tmp4_ = self->priv->_feature_test_macros;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = g_strdup ("");
			_g_free0 (self->priv->_feature_test_macros);
			self->priv->_feature_test_macros = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_feature_test_macros;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_header_filenames (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_header_filenames;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "cheader_filename", NULL);
			_g_free0 (self->priv->_header_filenames);
			self->priv->_header_filenames = _tmp3_;
		}
		_tmp4_ = self->priv->_header_filenames;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_header_filenames (self);
			_g_free0 (self->priv->_header_filenames);
			self->priv->_header_filenames = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_header_filenames;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_prefix (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_prefix;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "cprefix", NULL);
			_g_free0 (self->priv->_prefix);
			self->priv->_prefix = _tmp3_;
		}
		_tmp4_ = self->priv->_prefix;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_prefix (self);
			_g_free0 (self->priv->_prefix);
			self->priv->_prefix = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_prefix;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_lower_case_prefix (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp13_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_lower_case_prefix;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp11_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			gboolean _tmp4_ = FALSE;
			const gchar* _tmp5_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "lower_case_cprefix", NULL);
			_g_free0 (self->priv->_lower_case_prefix);
			self->priv->_lower_case_prefix = _tmp3_;
			_tmp5_ = self->priv->_lower_case_prefix;
			if (_tmp5_ == NULL) {
				gboolean _tmp6_ = FALSE;
				ValaSymbol* _tmp7_;
				_tmp7_ = self->priv->sym;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_OBJECT_TYPE_SYMBOL)) {
					_tmp6_ = TRUE;
				} else {
					ValaSymbol* _tmp8_;
					_tmp8_ = self->priv->sym;
					_tmp6_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_STRUCT);
				}
				_tmp4_ = _tmp6_;
			} else {
				_tmp4_ = FALSE;
			}
			if (_tmp4_) {
				ValaAttribute* _tmp9_;
				gchar* _tmp10_;
				_tmp9_ = self->priv->ccode;
				_tmp10_ = vala_attribute_get_string (_tmp9_, "cprefix", NULL);
				_g_free0 (self->priv->_lower_case_prefix);
				self->priv->_lower_case_prefix = _tmp10_;
			}
		}
		_tmp11_ = self->priv->_lower_case_prefix;
		if (_tmp11_ == NULL) {
			gchar* _tmp12_;
			_tmp12_ = vala_ccode_attribute_get_default_lower_case_prefix (self);
			_g_free0 (self->priv->_lower_case_prefix);
			self->priv->_lower_case_prefix = _tmp12_;
		}
	}
	_tmp13_ = self->priv->_lower_case_prefix;
	result = _tmp13_;
	return result;
}

const gchar*
vala_ccode_attribute_get_lower_case_suffix (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_lower_case_suffix;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "lower_case_csuffix", NULL);
			_g_free0 (self->priv->_lower_case_suffix);
			self->priv->_lower_case_suffix = _tmp3_;
		}
		_tmp4_ = self->priv->_lower_case_suffix;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_lower_case_suffix (self);
			_g_free0 (self->priv->_lower_case_suffix);
			self->priv->_lower_case_suffix = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_lower_case_suffix;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_ref_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp5_;
	g_return_val_if_fail (self != NULL, NULL);
	if (!self->priv->ref_function_set) {
		ValaAttribute* _tmp0_;
		const gchar* _tmp3_;
		_tmp0_ = self->priv->ccode;
		if (_tmp0_ != NULL) {
			ValaAttribute* _tmp1_;
			gchar* _tmp2_;
			_tmp1_ = self->priv->ccode;
			_tmp2_ = vala_attribute_get_string (_tmp1_, "ref_function", NULL);
			_g_free0 (self->priv->_ref_function);
			self->priv->_ref_function = _tmp2_;
		}
		_tmp3_ = self->priv->_ref_function;
		if (_tmp3_ == NULL) {
			gchar* _tmp4_;
			_tmp4_ = vala_ccode_attribute_get_default_ref_function (self);
			_g_free0 (self->priv->_ref_function);
			self->priv->_ref_function = _tmp4_;
		}
		self->priv->ref_function_set = TRUE;
	}
	_tmp5_ = self->priv->_ref_function;
	result = _tmp5_;
	return result;
}

static gboolean*
_bool_dup (gboolean* self)
{
	gboolean* dup;
	dup = g_new0 (gboolean, 1);
	memcpy (dup, self, sizeof (gboolean));
	return dup;
}

static gpointer
__bool_dup0 (gpointer self)
{
	return self ? _bool_dup (self) : NULL;
}

gboolean
vala_ccode_attribute_get_ref_function_void (ValaCCodeAttribute* self)
{
	gboolean result;
	gboolean* _tmp0_;
	gboolean* _tmp19_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->_ref_function_void;
	if (_tmp0_ == NULL) {
		gboolean _tmp1_ = FALSE;
		ValaAttribute* _tmp2_;
		_tmp2_ = self->priv->ccode;
		if (_tmp2_ != NULL) {
			ValaAttribute* _tmp3_;
			_tmp3_ = self->priv->ccode;
			_tmp1_ = vala_attribute_has_argument (_tmp3_, "ref_function_void");
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			ValaAttribute* _tmp4_;
			gboolean _tmp5_;
			gboolean* _tmp6_;
			_tmp4_ = self->priv->ccode;
			_tmp5_ = vala_attribute_get_bool (_tmp4_, "ref_function_void", FALSE);
			_tmp6_ = __bool_dup0 (&_tmp5_);
			_g_free0 (self->priv->_ref_function_void);
			self->priv->_ref_function_void = _tmp6_;
		} else {
			ValaClass* cl = NULL;
			ValaSymbol* _tmp7_;
			ValaClass* _tmp8_;
			ValaClass* _tmp9_;
			ValaClass* _tmp10_;
			ValaClass* _tmp11_;
			_tmp7_ = self->priv->sym;
			_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_CLASS, ValaClass));
			cl = _tmp8_;
			_tmp9_ = cl;
			_tmp10_ = vala_class_get_base_class (_tmp9_);
			_tmp11_ = _tmp10_;
			if (_tmp11_ != NULL) {
				ValaClass* _tmp12_;
				ValaClass* _tmp13_;
				ValaClass* _tmp14_;
				gboolean _tmp15_;
				gboolean* _tmp16_;
				_tmp12_ = cl;
				_tmp13_ = vala_class_get_base_class (_tmp12_);
				_tmp14_ = _tmp13_;
				_tmp15_ = vala_get_ccode_ref_function_void (_tmp14_);
				_tmp16_ = __bool_dup0 (&_tmp15_);
				_g_free0 (self->priv->_ref_function_void);
				self->priv->_ref_function_void = _tmp16_;
			} else {
				gboolean _tmp17_;
				gboolean* _tmp18_;
				_tmp17_ = FALSE;
				_tmp18_ = __bool_dup0 (&_tmp17_);
				_g_free0 (self->priv->_ref_function_void);
				self->priv->_ref_function_void = _tmp18_;
			}
			_vala_code_node_unref0 (cl);
		}
	}
	_tmp19_ = self->priv->_ref_function_void;
	result = *_tmp19_;
	return result;
}

const gchar*
vala_ccode_attribute_get_unref_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp5_;
	g_return_val_if_fail (self != NULL, NULL);
	if (!self->priv->unref_function_set) {
		ValaAttribute* _tmp0_;
		const gchar* _tmp3_;
		_tmp0_ = self->priv->ccode;
		if (_tmp0_ != NULL) {
			ValaAttribute* _tmp1_;
			gchar* _tmp2_;
			_tmp1_ = self->priv->ccode;
			_tmp2_ = vala_attribute_get_string (_tmp1_, "unref_function", NULL);
			_g_free0 (self->priv->_unref_function);
			self->priv->_unref_function = _tmp2_;
		}
		_tmp3_ = self->priv->_unref_function;
		if (_tmp3_ == NULL) {
			gchar* _tmp4_;
			_tmp4_ = vala_ccode_attribute_get_default_unref_function (self);
			_g_free0 (self->priv->_unref_function);
			self->priv->_unref_function = _tmp4_;
		}
		self->priv->unref_function_set = TRUE;
	}
	_tmp5_ = self->priv->_unref_function;
	result = _tmp5_;
	return result;
}

const gchar*
vala_ccode_attribute_get_ref_sink_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_ref_sink_function;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "ref_sink_function", NULL);
			_g_free0 (self->priv->_ref_sink_function);
			self->priv->_ref_sink_function = _tmp3_;
		}
		_tmp4_ = self->priv->_ref_sink_function;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_ref_sink_function (self);
			_g_free0 (self->priv->_ref_sink_function);
			self->priv->_ref_sink_function = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_ref_sink_function;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_copy_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp9_;
	g_return_val_if_fail (self != NULL, NULL);
	if (!self->priv->copy_function_set) {
		ValaAttribute* _tmp0_;
		gboolean _tmp3_ = FALSE;
		const gchar* _tmp4_;
		_tmp0_ = self->priv->ccode;
		if (_tmp0_ != NULL) {
			ValaAttribute* _tmp1_;
			gchar* _tmp2_;
			_tmp1_ = self->priv->ccode;
			_tmp2_ = vala_attribute_get_string (_tmp1_, "copy_function", NULL);
			_g_free0 (self->priv->_copy_function);
			self->priv->_copy_function = _tmp2_;
		}
		_tmp4_ = self->priv->_copy_function;
		if (_tmp4_ == NULL) {
			ValaSymbol* _tmp5_;
			_tmp5_ = self->priv->sym;
			_tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_STRUCT);
		} else {
			_tmp3_ = FALSE;
		}
		if (_tmp3_) {
			const gchar* _tmp6_;
			const gchar* _tmp7_;
			gchar* _tmp8_;
			_tmp6_ = vala_ccode_attribute_get_lower_case_prefix (self);
			_tmp7_ = _tmp6_;
			_tmp8_ = g_strdup_printf ("%scopy", _tmp7_);
			_g_free0 (self->priv->_copy_function);
			self->priv->_copy_function = _tmp8_;
		}
		self->priv->copy_function_set = TRUE;
	}
	_tmp9_ = self->priv->_copy_function;
	result = _tmp9_;
	return result;
}

const gchar*
vala_ccode_attribute_get_destroy_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp9_;
	g_return_val_if_fail (self != NULL, NULL);
	if (!self->priv->destroy_function_set) {
		ValaAttribute* _tmp0_;
		gboolean _tmp3_ = FALSE;
		const gchar* _tmp4_;
		_tmp0_ = self->priv->ccode;
		if (_tmp0_ != NULL) {
			ValaAttribute* _tmp1_;
			gchar* _tmp2_;
			_tmp1_ = self->priv->ccode;
			_tmp2_ = vala_attribute_get_string (_tmp1_, "destroy_function", NULL);
			_g_free0 (self->priv->_destroy_function);
			self->priv->_destroy_function = _tmp2_;
		}
		_tmp4_ = self->priv->_destroy_function;
		if (_tmp4_ == NULL) {
			ValaSymbol* _tmp5_;
			_tmp5_ = self->priv->sym;
			_tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_STRUCT);
		} else {
			_tmp3_ = FALSE;
		}
		if (_tmp3_) {
			const gchar* _tmp6_;
			const gchar* _tmp7_;
			gchar* _tmp8_;
			_tmp6_ = vala_ccode_attribute_get_lower_case_prefix (self);
			_tmp7_ = _tmp6_;
			_tmp8_ = g_strdup_printf ("%sdestroy", _tmp7_);
			_g_free0 (self->priv->_destroy_function);
			self->priv->_destroy_function = _tmp8_;
		}
		self->priv->destroy_function_set = TRUE;
	}
	_tmp9_ = self->priv->_destroy_function;
	result = _tmp9_;
	return result;
}

const gchar*
vala_ccode_attribute_get_dup_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp13_;
	g_return_val_if_fail (self != NULL, NULL);
	if (!self->priv->dup_function_set) {
		ValaAttribute* _tmp0_;
		gboolean _tmp3_ = FALSE;
		gboolean _tmp4_ = FALSE;
		const gchar* _tmp5_;
		_tmp0_ = self->priv->ccode;
		if (_tmp0_ != NULL) {
			ValaAttribute* _tmp1_;
			gchar* _tmp2_;
			_tmp1_ = self->priv->ccode;
			_tmp2_ = vala_attribute_get_string (_tmp1_, "dup_function", NULL);
			_g_free0 (self->priv->_dup_function);
			self->priv->_dup_function = _tmp2_;
		}
		_tmp5_ = self->priv->_dup_function;
		if (_tmp5_ == NULL) {
			ValaSymbol* _tmp6_;
			gboolean _tmp7_;
			gboolean _tmp8_;
			_tmp6_ = self->priv->sym;
			_tmp7_ = vala_symbol_get_external_package (_tmp6_);
			_tmp8_ = _tmp7_;
			_tmp4_ = !_tmp8_;
		} else {
			_tmp4_ = FALSE;
		}
		if (_tmp4_) {
			ValaSymbol* _tmp9_;
			_tmp9_ = self->priv->sym;
			_tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, VALA_TYPE_STRUCT);
		} else {
			_tmp3_ = FALSE;
		}
		if (_tmp3_) {
			const gchar* _tmp10_;
			const gchar* _tmp11_;
			gchar* _tmp12_;
			_tmp10_ = vala_ccode_attribute_get_lower_case_prefix (self);
			_tmp11_ = _tmp10_;
			_tmp12_ = g_strdup_printf ("%sdup", _tmp11_);
			_g_free0 (self->priv->_dup_function);
			self->priv->_dup_function = _tmp12_;
		}
		self->priv->dup_function_set = TRUE;
	}
	_tmp13_ = self->priv->_dup_function;
	result = _tmp13_;
	return result;
}

const gchar*
vala_ccode_attribute_get_free_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp5_;
	g_return_val_if_fail (self != NULL, NULL);
	if (!self->priv->free_function_set) {
		ValaAttribute* _tmp0_;
		const gchar* _tmp3_;
		_tmp0_ = self->priv->ccode;
		if (_tmp0_ != NULL) {
			ValaAttribute* _tmp1_;
			gchar* _tmp2_;
			_tmp1_ = self->priv->ccode;
			_tmp2_ = vala_attribute_get_string (_tmp1_, "free_function", NULL);
			_g_free0 (self->priv->_free_function);
			self->priv->_free_function = _tmp2_;
		}
		_tmp3_ = self->priv->_free_function;
		if (_tmp3_ == NULL) {
			gchar* _tmp4_;
			_tmp4_ = vala_ccode_attribute_get_default_free_function (self);
			_g_free0 (self->priv->_free_function);
			self->priv->_free_function = _tmp4_;
		}
		self->priv->free_function_set = TRUE;
	}
	_tmp5_ = self->priv->_free_function;
	result = _tmp5_;
	return result;
}

gboolean
vala_ccode_attribute_get_free_function_address_of (ValaCCodeAttribute* self)
{
	gboolean result;
	gboolean* _tmp0_;
	gboolean* _tmp18_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->_free_function_address_of;
	if (_tmp0_ == NULL) {
		gboolean _tmp1_ = FALSE;
		ValaAttribute* _tmp2_;
		_tmp2_ = self->priv->ccode;
		if (_tmp2_ != NULL) {
			ValaAttribute* _tmp3_;
			_tmp3_ = self->priv->ccode;
			_tmp1_ = vala_attribute_has_argument (_tmp3_, "free_function_address_of");
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			ValaAttribute* _tmp4_;
			gboolean _tmp5_;
			gboolean* _tmp6_;
			_tmp4_ = self->priv->ccode;
			_tmp5_ = vala_attribute_get_bool (_tmp4_, "free_function_address_of", FALSE);
			_tmp6_ = __bool_dup0 (&_tmp5_);
			_g_free0 (self->priv->_free_function_address_of);
			self->priv->_free_function_address_of = _tmp6_;
		} else {
			ValaClass* cl = NULL;
			ValaSymbol* _tmp7_;
			ValaClass* _tmp8_;
			ValaClass* _tmp9_;
			ValaClass* _tmp10_;
			_tmp7_ = self->priv->sym;
			cl = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_CLASS, ValaClass);
			_tmp8_ = cl;
			_tmp9_ = vala_class_get_base_class (_tmp8_);
			_tmp10_ = _tmp9_;
			if (_tmp10_ != NULL) {
				ValaClass* _tmp11_;
				ValaClass* _tmp12_;
				ValaClass* _tmp13_;
				gboolean _tmp14_;
				gboolean* _tmp15_;
				_tmp11_ = cl;
				_tmp12_ = vala_class_get_base_class (_tmp11_);
				_tmp13_ = _tmp12_;
				_tmp14_ = vala_get_ccode_free_function_address_of (_tmp13_);
				_tmp15_ = __bool_dup0 (&_tmp14_);
				_g_free0 (self->priv->_free_function_address_of);
				self->priv->_free_function_address_of = _tmp15_;
			} else {
				gboolean _tmp16_;
				gboolean* _tmp17_;
				_tmp16_ = FALSE;
				_tmp17_ = __bool_dup0 (&_tmp16_);
				_g_free0 (self->priv->_free_function_address_of);
				self->priv->_free_function_address_of = _tmp17_;
			}
		}
	}
	_tmp18_ = self->priv->_free_function_address_of;
	result = *_tmp18_;
	return result;
}

const gchar*
vala_ccode_attribute_get_ctype (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp10_;
	g_return_val_if_fail (self != NULL, NULL);
	if (!self->priv->ctype_set) {
		ValaAttribute* _tmp0_;
		_tmp0_ = self->priv->ccode;
		if (_tmp0_ != NULL) {
			ValaAttribute* _tmp1_;
			gchar* _tmp2_;
			const gchar* _tmp3_;
			_tmp1_ = self->priv->ccode;
			_tmp2_ = vala_attribute_get_string (_tmp1_, "type", NULL);
			_g_free0 (self->priv->_ctype);
			self->priv->_ctype = _tmp2_;
			_tmp3_ = self->priv->_ctype;
			if (_tmp3_ == NULL) {
				ValaAttribute* _tmp4_;
				gchar* _tmp5_;
				const gchar* _tmp6_;
				_tmp4_ = self->priv->ccode;
				_tmp5_ = vala_attribute_get_string (_tmp4_, "ctype", NULL);
				_g_free0 (self->priv->_ctype);
				self->priv->_ctype = _tmp5_;
				_tmp6_ = self->priv->_ctype;
				if (_tmp6_ != NULL) {
					ValaCodeNode* _tmp7_;
					ValaSourceReference* _tmp8_;
					ValaSourceReference* _tmp9_;
					_tmp7_ = self->priv->node;
					_tmp8_ = vala_code_node_get_source_reference (_tmp7_);
					_tmp9_ = _tmp8_;
					vala_report_deprecated (_tmp9_, "[CCode (ctype = \"...\")] is deprecated, use [CCode (type = \"...\")] " \
"instead.");
				}
			}
		}
		self->priv->ctype_set = TRUE;
	}
	_tmp10_ = self->priv->_ctype;
	result = _tmp10_;
	return result;
}

const gchar*
vala_ccode_attribute_get_type_id (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_type_id;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "type_id", NULL);
			_g_free0 (self->priv->_type_id);
			self->priv->_type_id = _tmp3_;
		}
		_tmp4_ = self->priv->_type_id;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_type_id (self);
			_g_free0 (self->priv->_type_id);
			self->priv->_type_id = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_type_id;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_marshaller_type_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_marshaller_type_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "marshaller_type_name", NULL);
			_g_free0 (self->priv->_marshaller_type_name);
			self->priv->_marshaller_type_name = _tmp3_;
		}
		_tmp4_ = self->priv->_marshaller_type_name;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_marshaller_type_name (self);
			_g_free0 (self->priv->_marshaller_type_name);
			self->priv->_marshaller_type_name = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_marshaller_type_name;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_get_value_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_get_value_function;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "get_value_function", NULL);
			_g_free0 (self->priv->_get_value_function);
			self->priv->_get_value_function = _tmp3_;
		}
		_tmp4_ = self->priv->_get_value_function;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_get_value_function (self);
			_g_free0 (self->priv->_get_value_function);
			self->priv->_get_value_function = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_get_value_function;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_set_value_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_set_value_function;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "set_value_function", NULL);
			_g_free0 (self->priv->_set_value_function);
			self->priv->_set_value_function = _tmp3_;
		}
		_tmp4_ = self->priv->_set_value_function;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_set_value_function (self);
			_g_free0 (self->priv->_set_value_function);
			self->priv->_set_value_function = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_set_value_function;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_take_value_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_take_value_function;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "take_value_function", NULL);
			_g_free0 (self->priv->_take_value_function);
			self->priv->_take_value_function = _tmp3_;
		}
		_tmp4_ = self->priv->_take_value_function;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_take_value_function (self);
			_g_free0 (self->priv->_take_value_function);
			self->priv->_take_value_function = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_take_value_function;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_param_spec_function (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_param_spec_function;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "param_spec_function", NULL);
			_g_free0 (self->priv->_param_spec_function);
			self->priv->_param_spec_function = _tmp3_;
		}
		_tmp4_ = self->priv->_param_spec_function;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_param_spec_function (self);
			_g_free0 (self->priv->_param_spec_function);
			self->priv->_param_spec_function = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_param_spec_function;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_default_value (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_default_value;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "default_value", NULL);
			_g_free0 (self->priv->_default_value);
			self->priv->_default_value = _tmp3_;
		}
		_tmp4_ = self->priv->_default_value;
		if (_tmp4_ == NULL) {
			gchar* _tmp5_;
			_tmp5_ = vala_ccode_attribute_get_default_default_value (self);
			_g_free0 (self->priv->_default_value);
			self->priv->_default_value = _tmp5_;
		}
	}
	_tmp6_ = self->priv->_default_value;
	result = _tmp6_;
	return result;
}

const gchar*
vala_ccode_attribute_get_default_value_on_error (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_default_value_on_error;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "default_value_on_error", NULL);
			_g_free0 (self->priv->_default_value_on_error);
			self->priv->_default_value_on_error = _tmp3_;
		}
		_tmp4_ = self->priv->_default_value_on_error;
		if (_tmp4_ == NULL) {
			const gchar* _tmp5_;
			const gchar* _tmp6_;
			gchar* _tmp7_;
			_tmp5_ = vala_ccode_attribute_get_default_value (self);
			_tmp6_ = _tmp5_;
			_tmp7_ = g_strdup (_tmp6_);
			_g_free0 (self->priv->_default_value_on_error);
			self->priv->_default_value_on_error = _tmp7_;
		}
	}
	_tmp8_ = self->priv->_default_value_on_error;
	result = _tmp8_;
	return result;
}

static gdouble*
_double_dup (gdouble* self)
{
	gdouble* dup;
	dup = g_new0 (gdouble, 1);
	memcpy (dup, self, sizeof (gdouble));
	return dup;
}

static gpointer
__double_dup0 (gpointer self)
{
	return self ? _double_dup (self) : NULL;
}

gdouble
vala_ccode_attribute_get_pos (ValaCCodeAttribute* self)
{
	gdouble result;
	gdouble* _tmp0_;
	gdouble* _tmp20_;
	g_return_val_if_fail (self != NULL, 0.0);
	_tmp0_ = self->priv->_pos;
	if (_tmp0_ == NULL) {
		gboolean _tmp1_ = FALSE;
		ValaAttribute* _tmp2_;
		_tmp2_ = self->priv->ccode;
		if (_tmp2_ != NULL) {
			ValaAttribute* _tmp3_;
			_tmp3_ = self->priv->ccode;
			_tmp1_ = vala_attribute_has_argument (_tmp3_, "pos");
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			ValaAttribute* _tmp4_;
			gdouble _tmp5_;
			gdouble* _tmp6_;
			_tmp4_ = self->priv->ccode;
			_tmp5_ = vala_attribute_get_double (_tmp4_, "pos", (gdouble) 0);
			_tmp6_ = __double_dup0 (&_tmp5_);
			_g_free0 (self->priv->_pos);
			self->priv->_pos = _tmp6_;
		} else {
			ValaParameter* param = NULL;
			ValaCodeNode* _tmp7_;
			ValaCallable* callable = NULL;
			ValaParameter* _tmp8_;
			ValaSymbol* _tmp9_;
			ValaSymbol* _tmp10_;
			ValaCallable* _tmp11_;
			_tmp7_ = self->priv->node;
			param = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_PARAMETER, ValaParameter);
			_tmp8_ = param;
			_tmp9_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp8_);
			_tmp10_ = _tmp9_;
			callable = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_CALLABLE) ? ((ValaCallable*) _tmp10_) : NULL;
			_tmp11_ = callable;
			if (_tmp11_ != NULL) {
				ValaCallable* _tmp12_;
				ValaList* _tmp13_;
				ValaList* _tmp14_;
				ValaParameter* _tmp15_;
				gdouble _tmp16_;
				gdouble* _tmp17_;
				_tmp12_ = callable;
				_tmp13_ = vala_callable_get_parameters (_tmp12_);
				_tmp14_ = _tmp13_;
				_tmp15_ = param;
				_tmp16_ = vala_list_index_of (_tmp14_, _tmp15_) + 1.0;
				_tmp17_ = __double_dup0 (&_tmp16_);
				_g_free0 (self->priv->_pos);
				self->priv->_pos = _tmp17_;
				_vala_iterable_unref0 (_tmp14_);
			} else {
				gdouble _tmp18_;
				gdouble* _tmp19_;
				_tmp18_ = 0.0;
				_tmp19_ = __double_dup0 (&_tmp18_);
				_g_free0 (self->priv->_pos);
				self->priv->_pos = _tmp19_;
			}
		}
	}
	_tmp20_ = self->priv->_pos;
	result = *_tmp20_;
	return result;
}

const gchar*
vala_ccode_attribute_get_real_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_real_name;
	if (_tmp0_ == NULL) {
		gboolean _tmp1_ = FALSE;
		ValaAttribute* _tmp2_;
		const gchar* _tmp6_;
		_tmp2_ = self->priv->ccode;
		if (_tmp2_ != NULL) {
			ValaSymbol* _tmp3_;
			_tmp3_ = self->priv->sym;
			_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CREATION_METHOD);
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			ValaAttribute* _tmp4_;
			gchar* _tmp5_;
			_tmp4_ = self->priv->ccode;
			_tmp5_ = vala_attribute_get_string (_tmp4_, "construct_function", NULL);
			_g_free0 (self->priv->_real_name);
			self->priv->_real_name = _tmp5_;
		}
		_tmp6_ = self->priv->_real_name;
		if (_tmp6_ == NULL) {
			gchar* _tmp7_;
			_tmp7_ = vala_ccode_attribute_get_default_real_name (self);
			_g_free0 (self->priv->_real_name);
			self->priv->_real_name = _tmp7_;
		}
	}
	_tmp8_ = self->priv->_real_name;
	result = _tmp8_;
	return result;
}

const gchar*
vala_ccode_attribute_get_vfunc_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp19_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_vfunc_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "vfunc_name", NULL);
			_g_free0 (self->priv->_vfunc_name);
			self->priv->_vfunc_name = _tmp3_;
		}
		_tmp4_ = self->priv->_vfunc_name;
		if (_tmp4_ == NULL) {
			ValaMethod* m = NULL;
			ValaCodeNode* _tmp5_;
			gboolean _tmp6_ = FALSE;
			ValaMethod* _tmp7_;
			_tmp5_ = self->priv->node;
			m = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_METHOD) ? ((ValaMethod*) _tmp5_) : NULL;
			_tmp7_ = m;
			if (_tmp7_ != NULL) {
				ValaMethod* _tmp8_;
				ValaSignal* _tmp9_;
				ValaSignal* _tmp10_;
				_tmp8_ = m;
				_tmp9_ = vala_method_get_signal_reference (_tmp8_);
				_tmp10_ = _tmp9_;
				_tmp6_ = _tmp10_ != NULL;
			} else {
				_tmp6_ = FALSE;
			}
			if (_tmp6_) {
				ValaMethod* _tmp11_;
				ValaSignal* _tmp12_;
				ValaSignal* _tmp13_;
				gchar* _tmp14_;
				_tmp11_ = m;
				_tmp12_ = vala_method_get_signal_reference (_tmp11_);
				_tmp13_ = _tmp12_;
				_tmp14_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp13_, NULL);
				_g_free0 (self->priv->_vfunc_name);
				self->priv->_vfunc_name = _tmp14_;
			} else {
				ValaSymbol* _tmp15_;
				const gchar* _tmp16_;
				const gchar* _tmp17_;
				gchar* _tmp18_;
				_tmp15_ = self->priv->sym;
				_tmp16_ = vala_symbol_get_name (_tmp15_);
				_tmp17_ = _tmp16_;
				_tmp18_ = g_strdup (_tmp17_);
				_g_free0 (self->priv->_vfunc_name);
				self->priv->_vfunc_name = _tmp18_;
			}
		}
	}
	_tmp19_ = self->priv->_vfunc_name;
	result = _tmp19_;
	return result;
}

const gchar*
vala_ccode_attribute_get_finish_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp15_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_finish_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp11_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			const gchar* _tmp4_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "finish_name", NULL);
			_g_free0 (self->priv->_finish_name);
			self->priv->_finish_name = _tmp3_;
			_tmp4_ = self->priv->_finish_name;
			if (_tmp4_ == NULL) {
				ValaAttribute* _tmp5_;
				gchar* _tmp6_;
				const gchar* _tmp7_;
				_tmp5_ = self->priv->ccode;
				_tmp6_ = vala_attribute_get_string (_tmp5_, "finish_function", NULL);
				_g_free0 (self->priv->_finish_name);
				self->priv->_finish_name = _tmp6_;
				_tmp7_ = self->priv->_finish_name;
				if (_tmp7_ != NULL) {
					ValaCodeNode* _tmp8_;
					ValaSourceReference* _tmp9_;
					ValaSourceReference* _tmp10_;
					_tmp8_ = self->priv->node;
					_tmp9_ = vala_code_node_get_source_reference (_tmp8_);
					_tmp10_ = _tmp9_;
					vala_report_deprecated (_tmp10_, "[CCode (finish_function = \"...\")] is deprecated, use [CCode (finish_" \
"name = \"...\")] instead.");
				}
			}
		}
		_tmp11_ = self->priv->_finish_name;
		if (_tmp11_ == NULL) {
			const gchar* _tmp12_;
			const gchar* _tmp13_;
			gchar* _tmp14_;
			_tmp12_ = vala_ccode_attribute_get_name (self);
			_tmp13_ = _tmp12_;
			_tmp14_ = vala_ccode_attribute_get_finish_name_for_basename (self, _tmp13_);
			_g_free0 (self->priv->_finish_name);
			self->priv->_finish_name = _tmp14_;
		}
	}
	_tmp15_ = self->priv->_finish_name;
	result = _tmp15_;
	return result;
}

const gchar*
vala_ccode_attribute_get_finish_vfunc_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_finish_vfunc_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "finish_vfunc_name", NULL);
			_g_free0 (self->priv->_finish_vfunc_name);
			self->priv->_finish_vfunc_name = _tmp3_;
		}
		_tmp4_ = self->priv->_finish_vfunc_name;
		if (_tmp4_ == NULL) {
			const gchar* _tmp5_;
			const gchar* _tmp6_;
			gchar* _tmp7_;
			_tmp5_ = vala_ccode_attribute_get_vfunc_name (self);
			_tmp6_ = _tmp5_;
			_tmp7_ = vala_ccode_attribute_get_finish_name_for_basename (self, _tmp6_);
			_g_free0 (self->priv->_finish_vfunc_name);
			self->priv->_finish_vfunc_name = _tmp7_;
		}
	}
	_tmp8_ = self->priv->_finish_vfunc_name;
	result = _tmp8_;
	return result;
}

const gchar*
vala_ccode_attribute_get_finish_real_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp19_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_finish_real_name;
	if (_tmp0_ == NULL) {
		ValaMethod* m = NULL;
		ValaCodeNode* _tmp1_;
		gboolean _tmp2_ = FALSE;
		gboolean _tmp3_ = FALSE;
		ValaMethod* _tmp4_;
		_tmp1_ = self->priv->node;
		m = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_METHOD) ? ((ValaMethod*) _tmp1_) : NULL;
		_tmp4_ = m;
		if (_tmp4_ != NULL) {
			ValaMethod* _tmp5_;
			_tmp5_ = m;
			_tmp3_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_CREATION_METHOD);
		} else {
			_tmp3_ = FALSE;
		}
		if (_tmp3_) {
			gboolean _tmp6_ = FALSE;
			ValaMethod* _tmp7_;
			gboolean _tmp8_;
			gboolean _tmp9_;
			_tmp7_ = m;
			_tmp8_ = vala_method_get_is_abstract (_tmp7_);
			_tmp9_ = _tmp8_;
			if (_tmp9_) {
				_tmp6_ = TRUE;
			} else {
				ValaMethod* _tmp10_;
				gboolean _tmp11_;
				gboolean _tmp12_;
				_tmp10_ = m;
				_tmp11_ = vala_method_get_is_virtual (_tmp10_);
				_tmp12_ = _tmp11_;
				_tmp6_ = _tmp12_;
			}
			_tmp2_ = !_tmp6_;
		} else {
			_tmp2_ = FALSE;
		}
		if (_tmp2_) {
			const gchar* _tmp13_;
			const gchar* _tmp14_;
			gchar* _tmp15_;
			_tmp13_ = vala_ccode_attribute_get_finish_name (self);
			_tmp14_ = _tmp13_;
			_tmp15_ = g_strdup (_tmp14_);
			_g_free0 (self->priv->_finish_real_name);
			self->priv->_finish_real_name = _tmp15_;
		} else {
			const gchar* _tmp16_;
			const gchar* _tmp17_;
			gchar* _tmp18_;
			_tmp16_ = vala_ccode_attribute_get_real_name (self);
			_tmp17_ = _tmp16_;
			_tmp18_ = vala_ccode_attribute_get_finish_name_for_basename (self, _tmp17_);
			_g_free0 (self->priv->_finish_real_name);
			self->priv->_finish_real_name = _tmp18_;
		}
	}
	_tmp19_ = self->priv->_finish_real_name;
	result = _tmp19_;
	return result;
}

gboolean
vala_ccode_attribute_get_finish_instance (ValaCCodeAttribute* self)
{
	gboolean result;
	gboolean* _tmp0_;
	gboolean* _tmp19_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->_finish_instance;
	if (_tmp0_ == NULL) {
		ValaMethod* m = NULL;
		ValaCodeNode* _tmp1_;
		gboolean is_creation_method = FALSE;
		ValaMethod* _tmp2_;
		gboolean _tmp3_ = FALSE;
		gboolean _tmp4_ = FALSE;
		gboolean _tmp5_ = FALSE;
		ValaAttribute* _tmp6_;
		_tmp1_ = self->priv->node;
		m = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_METHOD) ? ((ValaMethod*) _tmp1_) : NULL;
		_tmp2_ = m;
		is_creation_method = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CREATION_METHOD);
		_tmp6_ = self->priv->ccode;
		if (_tmp6_ == NULL) {
			_tmp5_ = TRUE;
		} else {
			ValaMethod* _tmp7_;
			_tmp7_ = m;
			_tmp5_ = _tmp7_ == NULL;
		}
		if (_tmp5_) {
			_tmp4_ = TRUE;
		} else {
			ValaMethod* _tmp8_;
			gboolean _tmp9_;
			gboolean _tmp10_;
			_tmp8_ = m;
			_tmp9_ = vala_method_get_is_abstract (_tmp8_);
			_tmp10_ = _tmp9_;
			_tmp4_ = _tmp10_;
		}
		if (_tmp4_) {
			_tmp3_ = TRUE;
		} else {
			ValaMethod* _tmp11_;
			gboolean _tmp12_;
			gboolean _tmp13_;
			_tmp11_ = m;
			_tmp12_ = vala_method_get_is_virtual (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp3_ = _tmp13_;
		}
		if (_tmp3_) {
			gboolean _tmp14_;
			gboolean* _tmp15_;
			_tmp14_ = !is_creation_method;
			_tmp15_ = __bool_dup0 (&_tmp14_);
			_g_free0 (self->priv->_finish_instance);
			self->priv->_finish_instance = _tmp15_;
		} else {
			ValaAttribute* _tmp16_;
			gboolean _tmp17_;
			gboolean* _tmp18_;
			_tmp16_ = self->priv->ccode;
			_tmp17_ = vala_attribute_get_bool (_tmp16_, "finish_instance", !is_creation_method);
			_tmp18_ = __bool_dup0 (&_tmp17_);
			_g_free0 (self->priv->_finish_instance);
			self->priv->_finish_instance = _tmp18_;
		}
	}
	_tmp19_ = self->priv->_finish_instance;
	result = *_tmp19_;
	return result;
}

gboolean
vala_ccode_attribute_get_delegate_target (ValaCCodeAttribute* self)
{
	gboolean result;
	gboolean* _tmp0_;
	gboolean* _tmp7_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->_delegate_target;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gboolean _tmp3_;
			gboolean* _tmp4_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_bool (_tmp2_, "delegate_target", vala_ccode_attribute_get_default_delegate_target (self));
			_tmp4_ = __bool_dup0 (&_tmp3_);
			_g_free0 (self->priv->_delegate_target);
			self->priv->_delegate_target = _tmp4_;
		} else {
			gboolean _tmp5_;
			gboolean* _tmp6_;
			_tmp5_ = vala_ccode_attribute_get_default_delegate_target (self);
			_tmp6_ = __bool_dup0 (&_tmp5_);
			_g_free0 (self->priv->_delegate_target);
			self->priv->_delegate_target = _tmp6_;
		}
	}
	_tmp7_ = self->priv->_delegate_target;
	result = *_tmp7_;
	return result;
}

const gchar*
vala_ccode_attribute_get_delegate_target_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_delegate_target_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "delegate_target_cname", NULL);
			_g_free0 (self->priv->_delegate_target_name);
			self->priv->_delegate_target_name = _tmp3_;
		}
		_tmp4_ = self->priv->_delegate_target_name;
		if (_tmp4_ == NULL) {
			const gchar* _tmp5_;
			const gchar* _tmp6_;
			gchar* _tmp7_;
			_tmp5_ = vala_ccode_attribute_get_name (self);
			_tmp6_ = _tmp5_;
			_tmp7_ = g_strdup_printf ("%s_target", _tmp6_);
			_g_free0 (self->priv->_delegate_target_name);
			self->priv->_delegate_target_name = _tmp7_;
		}
	}
	_tmp8_ = self->priv->_delegate_target_name;
	result = _tmp8_;
	return result;
}

const gchar*
vala_ccode_attribute_get_delegate_target_destroy_notify_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp8_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_delegate_target_destroy_notify_name;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		const gchar* _tmp4_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "destroy_notify_cname", NULL);
			_g_free0 (self->priv->_delegate_target_destroy_notify_name);
			self->priv->_delegate_target_destroy_notify_name = _tmp3_;
		}
		_tmp4_ = self->priv->_delegate_target_destroy_notify_name;
		if (_tmp4_ == NULL) {
			const gchar* _tmp5_;
			const gchar* _tmp6_;
			gchar* _tmp7_;
			_tmp5_ = vala_ccode_attribute_get_delegate_target_name (self);
			_tmp6_ = _tmp5_;
			_tmp7_ = g_strdup_printf ("%s_destroy_notify", _tmp6_);
			_g_free0 (self->priv->_delegate_target_destroy_notify_name);
			self->priv->_delegate_target_destroy_notify_name = _tmp7_;
		}
	}
	_tmp8_ = self->priv->_delegate_target_destroy_notify_name;
	result = _tmp8_;
	return result;
}

gboolean
vala_ccode_attribute_get_array_length (ValaCCodeAttribute* self)
{
	gboolean result;
	gboolean* _tmp0_;
	gboolean* _tmp16_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->_array_length;
	if (_tmp0_ == NULL) {
		ValaCodeNode* _tmp1_;
		ValaAttribute* _tmp2_;
		_tmp1_ = self->priv->node;
		_tmp2_ = vala_code_node_get_attribute (_tmp1_, "NoArrayLength");
		if (_tmp2_ != NULL) {
			ValaCodeNode* _tmp3_;
			ValaSourceReference* _tmp4_;
			ValaSourceReference* _tmp5_;
			gboolean _tmp6_;
			gboolean* _tmp7_;
			_tmp3_ = self->priv->node;
			_tmp4_ = vala_code_node_get_source_reference (_tmp3_);
			_tmp5_ = _tmp4_;
			vala_report_deprecated (_tmp5_, "[NoArrayLength] is deprecated, use [CCode (array_length = false)] inst" \
"ead.");
			_tmp6_ = FALSE;
			_tmp7_ = __bool_dup0 (&_tmp6_);
			_g_free0 (self->priv->_array_length);
			self->priv->_array_length = _tmp7_;
		} else {
			gboolean _tmp8_ = FALSE;
			ValaAttribute* _tmp9_;
			_tmp9_ = self->priv->ccode;
			if (_tmp9_ != NULL) {
				ValaAttribute* _tmp10_;
				_tmp10_ = self->priv->ccode;
				_tmp8_ = vala_attribute_has_argument (_tmp10_, "array_length");
			} else {
				_tmp8_ = FALSE;
			}
			if (_tmp8_) {
				ValaAttribute* _tmp11_;
				gboolean _tmp12_;
				gboolean* _tmp13_;
				_tmp11_ = self->priv->ccode;
				_tmp12_ = vala_attribute_get_bool (_tmp11_, "array_length", FALSE);
				_tmp13_ = __bool_dup0 (&_tmp12_);
				_g_free0 (self->priv->_array_length);
				self->priv->_array_length = _tmp13_;
			} else {
				gboolean _tmp14_;
				gboolean* _tmp15_;
				_tmp14_ = vala_ccode_attribute_get_default_array_length (self);
				_tmp15_ = __bool_dup0 (&_tmp14_);
				_g_free0 (self->priv->_array_length);
				self->priv->_array_length = _tmp15_;
			}
		}
	}
	_tmp16_ = self->priv->_array_length;
	result = *_tmp16_;
	return result;
}

gboolean
vala_ccode_attribute_get_array_null_terminated (ValaCCodeAttribute* self)
{
	gboolean result;
	gboolean* _tmp0_;
	gboolean* _tmp16_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->_array_null_terminated;
	if (_tmp0_ == NULL) {
		gboolean _tmp1_ = FALSE;
		gboolean _tmp2_ = FALSE;
		ValaAttribute* _tmp3_;
		_tmp3_ = self->priv->ccode;
		if (_tmp3_ != NULL) {
			ValaAttribute* _tmp4_;
			_tmp4_ = self->priv->ccode;
			_tmp2_ = vala_attribute_has_argument (_tmp4_, "array_length");
		} else {
			_tmp2_ = FALSE;
		}
		if (_tmp2_) {
			ValaAttribute* _tmp5_;
			_tmp5_ = self->priv->ccode;
			_tmp1_ = vala_attribute_get_bool (_tmp5_, "array_length", FALSE);
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			gboolean _tmp6_;
			gboolean* _tmp7_;
			_tmp6_ = FALSE;
			_tmp7_ = __bool_dup0 (&_tmp6_);
			_g_free0 (self->priv->_array_null_terminated);
			self->priv->_array_null_terminated = _tmp7_;
		} else {
			gboolean _tmp8_ = FALSE;
			ValaAttribute* _tmp9_;
			_tmp9_ = self->priv->ccode;
			if (_tmp9_ != NULL) {
				ValaAttribute* _tmp10_;
				_tmp10_ = self->priv->ccode;
				_tmp8_ = vala_attribute_has_argument (_tmp10_, "array_null_terminated");
			} else {
				_tmp8_ = FALSE;
			}
			if (_tmp8_) {
				ValaAttribute* _tmp11_;
				gboolean _tmp12_;
				gboolean* _tmp13_;
				_tmp11_ = self->priv->ccode;
				_tmp12_ = vala_attribute_get_bool (_tmp11_, "array_null_terminated", FALSE);
				_tmp13_ = __bool_dup0 (&_tmp12_);
				_g_free0 (self->priv->_array_null_terminated);
				self->priv->_array_null_terminated = _tmp13_;
			} else {
				gboolean _tmp14_;
				gboolean* _tmp15_;
				_tmp14_ = vala_ccode_attribute_get_default_array_null_terminated (self);
				_tmp15_ = __bool_dup0 (&_tmp14_);
				_g_free0 (self->priv->_array_null_terminated);
				self->priv->_array_null_terminated = _tmp15_;
			}
		}
	}
	_tmp16_ = self->priv->_array_null_terminated;
	result = *_tmp16_;
	return result;
}

const gchar*
vala_ccode_attribute_get_sentinel (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	const gchar* _tmp5_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_sentinel;
	if (_tmp0_ == NULL) {
		ValaAttribute* _tmp1_;
		_tmp1_ = self->priv->ccode;
		if (_tmp1_ != NULL) {
			ValaAttribute* _tmp2_;
			gchar* _tmp3_;
			_tmp2_ = self->priv->ccode;
			_tmp3_ = vala_attribute_get_string (_tmp2_, "sentinel", "NULL");
			_g_free0 (self->priv->_sentinel);
			self->priv->_sentinel = _tmp3_;
		} else {
			gchar* _tmp4_;
			_tmp4_ = g_strdup ("NULL");
			_g_free0 (self->priv->_sentinel);
			self->priv->_sentinel = _tmp4_;
		}
	}
	_tmp5_ = self->priv->_sentinel;
	result = _tmp5_;
	return result;
}

const gchar*
vala_ccode_attribute_get_array_length_type (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_array_length_type;
	result = _tmp0_;
	return result;
}

static void
vala_ccode_attribute_set_array_length_type (ValaCCodeAttribute* self,
                                            const gchar* value)
{
	gchar* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = g_strdup (value);
	_g_free0 (self->priv->_array_length_type);
	self->priv->_array_length_type = _tmp0_;
}

const gchar*
vala_ccode_attribute_get_array_length_name (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_array_length_name;
	result = _tmp0_;
	return result;
}

static void
vala_ccode_attribute_set_array_length_name (ValaCCodeAttribute* self,
                                            const gchar* value)
{
	gchar* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = g_strdup (value);
	_g_free0 (self->priv->_array_length_name);
	self->priv->_array_length_name = _tmp0_;
}

const gchar*
vala_ccode_attribute_get_array_length_expr (ValaCCodeAttribute* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_array_length_expr;
	result = _tmp0_;
	return result;
}

static void
vala_ccode_attribute_set_array_length_expr (ValaCCodeAttribute* self,
                                            const gchar* value)
{
	gchar* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = g_strdup (value);
	_g_free0 (self->priv->_array_length_expr);
	self->priv->_array_length_expr = _tmp0_;
}

static void
vala_ccode_attribute_class_init (ValaCCodeAttributeClass * klass,
                                 gpointer klass_data)
{
	vala_ccode_attribute_parent_class = g_type_class_peek_parent (klass);
	((ValaAttributeCacheClass *) klass)->finalize = vala_ccode_attribute_finalize;
	g_type_class_adjust_private_offset (klass, &ValaCCodeAttribute_private_offset);
}

static void
vala_ccode_attribute_instance_init (ValaCCodeAttribute * self,
                                    gpointer klass)
{
	self->priv = vala_ccode_attribute_get_instance_private (self);
	self->priv->ctype_set = FALSE;
}

static void
vala_ccode_attribute_finalize (ValaAttributeCache * obj)
{
	ValaCCodeAttribute * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_CCODE_ATTRIBUTE, ValaCCodeAttribute);
	_vala_code_node_unref0 (self->priv->ccode);
	_g_free0 (self->priv->_array_length_type);
	_g_free0 (self->priv->_array_length_name);
	_g_free0 (self->priv->_array_length_expr);
	_g_free0 (self->priv->_name);
	_g_free0 (self->priv->_const_name);
	_g_free0 (self->priv->_type_name);
	_g_free0 (self->priv->_feature_test_macros);
	_g_free0 (self->priv->_header_filenames);
	_g_free0 (self->priv->_prefix);
	_g_free0 (self->priv->_lower_case_prefix);
	_g_free0 (self->priv->_lower_case_suffix);
	_g_free0 (self->priv->_ref_function);
	_g_free0 (self->priv->_ref_function_void);
	_g_free0 (self->priv->_unref_function);
	_g_free0 (self->priv->_ref_sink_function);
	_g_free0 (self->priv->_copy_function);
	_g_free0 (self->priv->_destroy_function);
	_g_free0 (self->priv->_dup_function);
	_g_free0 (self->priv->_free_function);
	_g_free0 (self->priv->_free_function_address_of);
	_g_free0 (self->priv->_type_id);
	_g_free0 (self->priv->_marshaller_type_name);
	_g_free0 (self->priv->_get_value_function);
	_g_free0 (self->priv->_set_value_function);
	_g_free0 (self->priv->_take_value_function);
	_g_free0 (self->priv->_param_spec_function);
	_g_free0 (self->priv->_default_value);
	_g_free0 (self->priv->_default_value_on_error);
	_g_free0 (self->priv->_pos);
	_g_free0 (self->priv->_vfunc_name);
	_g_free0 (self->priv->_finish_name);
	_g_free0 (self->priv->_finish_vfunc_name);
	_g_free0 (self->priv->_finish_real_name);
	_g_free0 (self->priv->_finish_instance);
	_g_free0 (self->priv->_real_name);
	_g_free0 (self->priv->_delegate_target);
	_g_free0 (self->priv->_delegate_target_name);
	_g_free0 (self->priv->_delegate_target_destroy_notify_name);
	_g_free0 (self->priv->_ctype);
	_g_free0 (self->priv->_array_length);
	_g_free0 (self->priv->_array_null_terminated);
	_g_free0 (self->priv->_sentinel);
	VALA_ATTRIBUTE_CACHE_CLASS (vala_ccode_attribute_parent_class)->finalize (obj);
}

/**
 * Cache for the CCode attribute
 */
GType
vala_ccode_attribute_get_type (void)
{
	static volatile gsize vala_ccode_attribute_type_id__volatile = 0;
	if (g_once_init_enter (&vala_ccode_attribute_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaCCodeAttributeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_ccode_attribute_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaCCodeAttribute), 0, (GInstanceInitFunc) vala_ccode_attribute_instance_init, NULL };
		GType vala_ccode_attribute_type_id;
		vala_ccode_attribute_type_id = g_type_register_static (VALA_TYPE_ATTRIBUTE_CACHE, "ValaCCodeAttribute", &g_define_type_info, 0);
		ValaCCodeAttribute_private_offset = g_type_add_instance_private (vala_ccode_attribute_type_id, sizeof (ValaCCodeAttributePrivate));
		g_once_init_leave (&vala_ccode_attribute_type_id__volatile, vala_ccode_attribute_type_id);
	}
	return vala_ccode_attribute_type_id__volatile;
}

