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

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

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

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

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


#define VALA_TYPE_CCODE_BASE_MODULE (vala_ccode_base_module_get_type ())
#define VALA_CCODE_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModule))
#define VALA_CCODE_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModuleClass))
#define VALA_IS_CCODE_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_BASE_MODULE))
#define VALA_IS_CCODE_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_BASE_MODULE))
#define VALA_CCODE_BASE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModuleClass))

typedef struct _ValaCCodeBaseModule ValaCCodeBaseModule;
typedef struct _ValaCCodeBaseModuleClass ValaCCodeBaseModuleClass;
typedef struct _ValaCCodeBaseModulePrivate ValaCCodeBaseModulePrivate;

#define VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT (vala_ccode_base_module_emit_context_get_type ())
#define VALA_CCODE_BASE_MODULE_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaCCodeBaseModuleEmitContext))
#define VALA_CCODE_BASE_MODULE_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaCCodeBaseModuleEmitContextClass))
#define VALA_CCODE_BASE_MODULE_IS_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT))
#define VALA_CCODE_BASE_MODULE_IS_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT))
#define VALA_CCODE_BASE_MODULE_EMIT_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaCCodeBaseModuleEmitContextClass))

typedef struct _ValaCCodeBaseModuleEmitContext ValaCCodeBaseModuleEmitContext;
typedef struct _ValaCCodeBaseModuleEmitContextClass ValaCCodeBaseModuleEmitContextClass;

#define VALA_TYPE_CCODE_STRUCT_MODULE (vala_ccode_struct_module_get_type ())
#define VALA_CCODE_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_STRUCT_MODULE, ValaCCodeStructModule))
#define VALA_CCODE_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_STRUCT_MODULE, ValaCCodeStructModuleClass))
#define VALA_IS_CCODE_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_STRUCT_MODULE))
#define VALA_IS_CCODE_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_STRUCT_MODULE))
#define VALA_CCODE_STRUCT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_STRUCT_MODULE, ValaCCodeStructModuleClass))

typedef struct _ValaCCodeStructModule ValaCCodeStructModule;
typedef struct _ValaCCodeStructModuleClass ValaCCodeStructModuleClass;
typedef struct _ValaCCodeStructModulePrivate ValaCCodeStructModulePrivate;

#define VALA_TYPE_CCODE_METHOD_MODULE (vala_ccode_method_module_get_type ())
#define VALA_CCODE_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModule))
#define VALA_CCODE_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModuleClass))
#define VALA_IS_CCODE_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_METHOD_MODULE))
#define VALA_IS_CCODE_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_METHOD_MODULE))
#define VALA_CCODE_METHOD_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModuleClass))

typedef struct _ValaCCodeMethodModule ValaCCodeMethodModule;
typedef struct _ValaCCodeMethodModuleClass ValaCCodeMethodModuleClass;
typedef struct _ValaCCodeMethodModulePrivate ValaCCodeMethodModulePrivate;
#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 _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL)))
#define _vala_ccode_base_module_emit_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_base_module_emit_context_unref (var), NULL)))

#define VALA_TYPE_GLIB_VALUE (vala_glib_value_get_type ())
#define VALA_GLIB_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_GLIB_VALUE, ValaGLibValue))
#define VALA_GLIB_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_GLIB_VALUE, ValaGLibValueClass))
#define VALA_IS_GLIB_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_GLIB_VALUE))
#define VALA_IS_GLIB_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_GLIB_VALUE))
#define VALA_GLIB_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_GLIB_VALUE, ValaGLibValueClass))

typedef struct _ValaGLibValue ValaGLibValue;
typedef struct _ValaGLibValueClass ValaGLibValueClass;
#define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))
#define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))

struct _ValaCCodeBaseModule {
	ValaCodeGenerator parent_instance;
	ValaCCodeBaseModulePrivate * priv;
	ValaSymbol* root_symbol;
	ValaCCodeBaseModuleEmitContext* emit_context;
	ValaCCodeLineDirective* current_line;
	ValaCCodeFile* header_file;
	ValaCCodeFile* internal_header_file;
	ValaCCodeFile* cfile;
	ValaCCodeBaseModuleEmitContext* class_init_context;
	ValaCCodeBaseModuleEmitContext* base_init_context;
	ValaCCodeBaseModuleEmitContext* class_finalize_context;
	ValaCCodeBaseModuleEmitContext* base_finalize_context;
	ValaCCodeBaseModuleEmitContext* instance_init_context;
	ValaCCodeBaseModuleEmitContext* instance_finalize_context;
	ValaCCodeStruct* param_spec_struct;
	ValaCCodeStruct* closure_struct;
	ValaCCodeEnum* prop_enum;
	ValaSet* user_marshal_set;
	ValaSet* predefined_marshal_set;
	gint next_regex_id;
	gint next_coroutine_state;
	ValaDataType* void_type;
	ValaDataType* bool_type;
	ValaDataType* char_type;
	ValaDataType* uchar_type;
	ValaDataType* unichar_type;
	ValaDataType* short_type;
	ValaDataType* ushort_type;
	ValaDataType* int_type;
	ValaDataType* uint_type;
	ValaDataType* long_type;
	ValaDataType* ulong_type;
	ValaDataType* int8_type;
	ValaDataType* uint8_type;
	ValaDataType* int16_type;
	ValaDataType* uint16_type;
	ValaDataType* int32_type;
	ValaDataType* uint32_type;
	ValaDataType* int64_type;
	ValaDataType* uint64_type;
	ValaDataType* string_type;
	ValaDataType* regex_type;
	ValaDataType* float_type;
	ValaDataType* double_type;
	ValaTypeSymbol* gtype_type;
	ValaTypeSymbol* gobject_type;
	ValaErrorType* gerror_type;
	ValaClass* glist_type;
	ValaClass* gslist_type;
	ValaClass* gnode_type;
	ValaClass* gqueue_type;
	ValaClass* gvaluearray_type;
	ValaTypeSymbol* gstringbuilder_type;
	ValaTypeSymbol* garray_type;
	ValaTypeSymbol* gbytearray_type;
	ValaTypeSymbol* gptrarray_type;
	ValaTypeSymbol* gthreadpool_type;
	ValaDataType* gdestroynotify_type;
	ValaDataType* gquark_type;
	ValaStruct* gvalue_type;
	ValaClass* gvariant_type;
	ValaStruct* mutex_type;
	ValaStruct* gmutex_type;
	ValaStruct* grecmutex_type;
	ValaStruct* grwlock_type;
	ValaStruct* gcond_type;
	ValaClass* gsource_type;
	ValaTypeSymbol* type_module_type;
	ValaTypeSymbol* dbus_proxy_type;
	ValaClass* gtk_widget_type;
	gboolean in_plugin;
	gchar* module_init_param_name;
	gboolean gvaluecollector_h_needed;
	gboolean requires_assert;
	gboolean requires_array_free;
	gboolean requires_array_move;
	gboolean requires_array_length;
	gboolean requires_clear_mutex;
	ValaSet* wrappers;
};

struct _ValaCCodeBaseModuleClass {
	ValaCodeGeneratorClass parent_class;
	void (*append_vala_array_free) (ValaCCodeBaseModule* self);
	void (*append_vala_array_move) (ValaCCodeBaseModule* self);
	void (*append_vala_array_length) (ValaCCodeBaseModule* self);
	gboolean (*generate_enum_declaration) (ValaCCodeBaseModule* self, ValaEnum* en, ValaCCodeFile* decl_space);
	void (*generate_class_struct_declaration) (ValaCCodeBaseModule* self, ValaClass* cl, ValaCCodeFile* decl_space);
	void (*generate_struct_declaration) (ValaCCodeBaseModule* self, ValaStruct* st, ValaCCodeFile* decl_space);
	void (*generate_delegate_declaration) (ValaCCodeBaseModule* self, ValaDelegate* d, ValaCCodeFile* decl_space);
	void (*generate_cparameters) (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction);
	ValaCCodeExpression* (*get_dup_func_expression) (ValaCCodeBaseModule* self, ValaDataType* type, ValaSourceReference* source_reference, gboolean is_chainup);
	gchar* (*append_struct_array_free) (ValaCCodeBaseModule* self, ValaStruct* st);
	ValaCCodeExpression* (*destroy_value) (ValaCCodeBaseModule* self, ValaTargetValue* value, gboolean is_macro_definition);
	void (*append_scope_free) (ValaCCodeBaseModule* self, ValaSymbol* sym, ValaCodeNode* stop_at);
	ValaTargetValue* (*get_local_cvalue) (ValaCCodeBaseModule* self, ValaLocalVariable* local);
	ValaTargetValue* (*get_parameter_cvalue) (ValaCCodeBaseModule* self, ValaParameter* param);
	ValaTargetValue* (*get_field_cvalue) (ValaCCodeBaseModule* self, ValaField* field, ValaTargetValue* instance);
	ValaTargetValue* (*load_variable) (ValaCCodeBaseModule* self, ValaVariable* variable, ValaTargetValue* value);
	ValaTargetValue* (*load_this_parameter) (ValaCCodeBaseModule* self, ValaTypeSymbol* sym);
	void (*store_value) (ValaCCodeBaseModule* self, ValaTargetValue* lvalue, ValaTargetValue* value);
	gchar* (*get_delegate_target_cname) (ValaCCodeBaseModule* self, const gchar* delegate_cname);
	ValaCCodeExpression* (*get_delegate_target_cexpression) (ValaCCodeBaseModule* self, ValaExpression* delegate_expr, ValaCCodeExpression** delegate_target_destroy_notify);
	ValaCCodeExpression* (*get_delegate_target_cvalue) (ValaCCodeBaseModule* self, ValaTargetValue* value);
	ValaCCodeExpression* (*get_delegate_target_destroy_notify_cvalue) (ValaCCodeBaseModule* self, ValaTargetValue* value);
	gchar* (*get_delegate_target_destroy_notify_cname) (ValaCCodeBaseModule* self, const gchar* delegate_cname);
	ValaTargetValue* (*copy_value) (ValaCCodeBaseModule* self, ValaTargetValue* value, ValaCodeNode* node);
	void (*generate_class_declaration) (ValaCCodeBaseModule* self, ValaClass* cl, ValaCCodeFile* decl_space);
	void (*generate_interface_declaration) (ValaCCodeBaseModule* self, ValaInterface* iface, ValaCCodeFile* decl_space);
	void (*generate_method_declaration) (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space);
	void (*generate_error_domain_declaration) (ValaCCodeBaseModule* self, ValaErrorDomain* edomain, ValaCCodeFile* decl_space);
	ValaCCodeExpression* (*deserialize_expression) (ValaCCodeBaseModule* self, ValaDataType* type, ValaCCodeExpression* variant_expr, ValaCCodeExpression* expr, ValaCCodeExpression* error_expr, gboolean* may_fail);
	ValaCCodeExpression* (*serialize_expression) (ValaCCodeBaseModule* self, ValaDataType* type, ValaCCodeExpression* expr);
	ValaCCodeExpression* (*get_implicit_cast_expression) (ValaCCodeBaseModule* self, ValaCCodeExpression* source_cexpr, ValaDataType* expression_type, ValaDataType* target_type, ValaCodeNode* node);
	void (*create_type_check_statement) (ValaCCodeBaseModule* self, ValaCodeNode* method_node, ValaDataType* ret_type, ValaTypeSymbol* t, gboolean non_null, const gchar* var_name);
	gboolean (*is_gobject_property) (ValaCCodeBaseModule* self, ValaProperty* prop);
	void (*generate_dynamic_method_wrapper) (ValaCCodeBaseModule* self, ValaDynamicMethod* method);
	gboolean (*method_has_wrapper) (ValaCCodeBaseModule* self, ValaMethod* method);
	ValaCCodeFunctionCall* (*get_param_spec) (ValaCCodeBaseModule* self, ValaProperty* prop);
	ValaCCodeFunctionCall* (*get_signal_creation) (ValaCCodeBaseModule* self, ValaSignal* sig, ValaTypeSymbol* type);
	void (*register_dbus_info) (ValaCCodeBaseModule* self, ValaCCodeBlock* block, ValaObjectTypeSymbol* bindable);
	gchar* (*get_dynamic_property_getter_cname) (ValaCCodeBaseModule* self, ValaDynamicProperty* node);
	gchar* (*get_dynamic_property_setter_cname) (ValaCCodeBaseModule* self, ValaDynamicProperty* node);
	gchar* (*get_dynamic_signal_cname) (ValaCCodeBaseModule* self, ValaDynamicSignal* node);
	gchar* (*get_dynamic_signal_connect_wrapper_name) (ValaCCodeBaseModule* self, ValaDynamicSignal* node);
	gchar* (*get_dynamic_signal_connect_after_wrapper_name) (ValaCCodeBaseModule* self, ValaDynamicSignal* node);
	gchar* (*get_dynamic_signal_disconnect_wrapper_name) (ValaCCodeBaseModule* self, ValaDynamicSignal* node);
	gchar* (*get_array_length_cname) (ValaCCodeBaseModule* self, const gchar* array_cname, gint dim);
	gchar* (*get_parameter_array_length_cname) (ValaCCodeBaseModule* self, ValaParameter* param, gint dim);
	ValaCCodeExpression* (*get_array_length_cexpression) (ValaCCodeBaseModule* self, ValaExpression* array_expr, gint dim);
	ValaCCodeExpression* (*get_array_length_cvalue) (ValaCCodeBaseModule* self, ValaTargetValue* value, gint dim);
	gchar* (*get_array_size_cname) (ValaCCodeBaseModule* self, const gchar* array_cname);
	void (*add_simple_check) (ValaCCodeBaseModule* self, ValaCodeNode* node, gboolean always_fails);
	gchar* (*generate_ready_function) (ValaCCodeBaseModule* self, ValaMethod* m);
};

struct _ValaCCodeStructModule {
	ValaCCodeBaseModule parent_instance;
	ValaCCodeStructModulePrivate * priv;
};

struct _ValaCCodeStructModuleClass {
	ValaCCodeBaseModuleClass parent_class;
};

struct _ValaCCodeMethodModule {
	ValaCCodeStructModule parent_instance;
	ValaCCodeMethodModulePrivate * priv;
};

struct _ValaCCodeMethodModuleClass {
	ValaCCodeStructModuleClass parent_class;
	void (*generate_method_result_declaration) (ValaCCodeMethodModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* cfunc, ValaMap* cparam_map, ValaMap* carg_map);
	ValaCCodeParameter* (*generate_parameter) (ValaCCodeMethodModule* self, ValaParameter* param, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaMap* carg_map);
};

struct _ValaCCodeMethodModulePrivate {
	gboolean ellipses_to_valist;
};


static gpointer vala_ccode_method_module_parent_class = NULL;

GType vala_ccode_base_module_get_type (void) G_GNUC_CONST;
gpointer vala_ccode_base_module_emit_context_ref (gpointer instance);
void vala_ccode_base_module_emit_context_unref (gpointer instance);
GParamSpec* vala_ccode_base_module_param_spec_emit_context (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_ccode_base_module_value_set_emit_context (GValue* value, gpointer v_object);
void vala_ccode_base_module_value_take_emit_context (GValue* value, gpointer v_object);
gpointer vala_ccode_base_module_value_get_emit_context (const GValue* value);
GType vala_ccode_base_module_emit_context_get_type (void) G_GNUC_CONST;
GType vala_ccode_struct_module_get_type (void) G_GNUC_CONST;
GType vala_ccode_method_module_get_type (void) G_GNUC_CONST;
#define VALA_CCODE_METHOD_MODULE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModulePrivate))
enum  {
	VALA_CCODE_METHOD_MODULE_DUMMY_PROPERTY
};
static gboolean vala_ccode_method_module_real_method_has_wrapper (ValaCCodeBaseModule* base, ValaMethod* method);
static gchar* vala_ccode_method_module_get_creturn_type (ValaCCodeMethodModule* self, ValaMethod* m, const gchar* default_value);
gchar* vala_ccode_base_module_get_ccode_type (ValaCodeNode* node);
static gboolean vala_ccode_method_module_is_gtypeinstance_creation_method (ValaCCodeMethodModule* self, ValaMethod* m);
void vala_ccode_method_module_generate_method_result_declaration (ValaCCodeMethodModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* cfunc, ValaMap* cparam_map, ValaMap* carg_map);
static void vala_ccode_method_module_real_generate_method_result_declaration (ValaCCodeMethodModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* cfunc, ValaMap* cparam_map, ValaMap* carg_map);
gchar* vala_ccode_base_module_get_ccode_name (ValaCodeNode* node);
void vala_ccode_base_module_generate_type_declaration (ValaCCodeBaseModule* self, ValaDataType* type, ValaCCodeFile* decl_space);
gint vala_ccode_base_module_get_param_pos (ValaCCodeBaseModule* self, gdouble param_pos, gboolean ellipsis);
ValaCCodeExpression* vala_ccode_base_module_get_result_cexpression (ValaCCodeBaseModule* self, const gchar* cname);
gboolean vala_ccode_base_module_get_ccode_array_length (ValaCodeNode* node);
gchar* vala_ccode_base_module_get_ccode_array_length_type (ValaCodeNode* node);
gchar* vala_ccode_base_module_get_array_length_cname (ValaCCodeBaseModule* self, const gchar* array_cname, gint dim);
gdouble vala_ccode_base_module_get_ccode_array_length_pos (ValaCodeNode* node);
ValaCCodeExpression* vala_ccode_base_module_get_variable_cexpression (ValaCCodeBaseModule* self, const gchar* name);
gchar* vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
gdouble vala_ccode_base_module_get_ccode_delegate_target_pos (ValaCodeNode* node);
gchar* vala_ccode_base_module_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
void vala_ccode_method_module_complete_async (ValaCCodeMethodModule* self);
ValaCCodeFunction* vala_ccode_base_module_get_ccode (ValaCCodeBaseModule* self);
static void vala_ccode_method_module_real_generate_method_declaration (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space);
gboolean vala_ccode_base_module_add_symbol_declaration (ValaCCodeBaseModule* self, ValaCCodeFile* decl_space, ValaSymbol* sym, const gchar* name);
ValaCodeContext* vala_ccode_base_module_get_context (ValaCCodeBaseModule* self);
void vala_ccode_base_module_generate_cparameters (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction);
gchar* vala_ccode_base_module_get_ccode_real_name (ValaSymbol* sym);
gchar* vala_ccode_base_module_get_ccode_constructv_name (ValaCreationMethod* m);
static void vala_ccode_method_module_register_plugin_types (ValaCCodeMethodModule* self, ValaSymbol* sym, ValaSet* registered_types);
static void vala_ccode_method_module_register_plugin_type (ValaCCodeMethodModule* self, ValaObjectTypeSymbol* type_symbol, ValaSet* registered_types);
gchar* vala_ccode_base_module_get_ccode_lower_case_name (ValaCodeNode* node, const gchar* infix);
gchar* vala_gd_bus_module_get_dbus_name (ValaTypeSymbol* symbol);
gchar* vala_ccode_base_module_get_ccode_lower_case_prefix (ValaSymbol* sym);
static void vala_ccode_method_module_real_visit_method (ValaCodeVisitor* base, ValaMethod* m);
void vala_ccode_base_module_push_context (ValaCCodeBaseModule* self, ValaCCodeBaseModuleEmitContext* emit_context);
ValaCCodeBaseModuleEmitContext* vala_ccode_base_module_emit_context_new (ValaSymbol* symbol);
ValaCCodeBaseModuleEmitContext* vala_ccode_base_module_emit_context_construct (GType object_type, ValaSymbol* symbol);
void vala_ccode_base_module_push_line (ValaCCodeBaseModule* self, ValaSourceReference* source_reference);
void vala_ccode_base_module_check_type (ValaCCodeBaseModule* self, ValaDataType* type);
ValaTypeSymbol* vala_ccode_base_module_get_current_type_symbol (ValaCCodeBaseModule* self);
void vala_ccode_base_module_generate_method_declaration (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space);
void vala_ccode_base_module_push_function (ValaCCodeBaseModule* self, ValaCCodeFunction* func);
void vala_ccode_base_module_pop_function (ValaCCodeBaseModule* self);
gchar* vala_ccode_base_module_get_ccode_const_name (ValaCodeNode* node);
ValaBlock* vala_ccode_base_module_get_current_closure_block (ValaCCodeBaseModule* self);
gint vala_ccode_base_module_get_block_id (ValaCCodeBaseModule* self, ValaBlock* b);
ValaBlock* vala_ccode_base_module_next_closure_block (ValaCCodeBaseModule* self, ValaSymbol* sym);
ValaDataType* vala_ccode_base_module_get_data_type_for_symbol (ValaTypeSymbol* sym);
ValaCCodeExpression* vala_ccode_base_module_get_cvalue_ (ValaCCodeBaseModule* self, ValaTargetValue* value);
ValaTargetValue* vala_ccode_base_module_transform_value (ValaCCodeBaseModule* self, ValaTargetValue* value, ValaDataType* target_type, ValaCodeNode* node);
ValaGLibValue* vala_glib_value_new (ValaDataType* value_type, ValaCCodeExpression* cvalue, gboolean lvalue);
ValaGLibValue* vala_glib_value_construct (GType object_type, ValaDataType* value_type, ValaCCodeExpression* cvalue, gboolean lvalue);
GType vala_glib_value_get_type (void) G_GNUC_CONST;
static void vala_ccode_method_module_create_method_type_check_statement (ValaCCodeMethodModule* self, ValaMethod* m, ValaDataType* return_type, ValaTypeSymbol* t, gboolean non_null, const gchar* var_name);
gchar* vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self, const gchar* name);
ValaCCodeExpression* vala_ccode_base_module_default_value_for_type (ValaCCodeBaseModule* self, ValaDataType* type, gboolean initializer_expression);
gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
ValaCCodeExpression* vala_ccode_base_module_get_this_cexpression (ValaCCodeBaseModule* self);
ValaClass* vala_ccode_base_module_get_current_class (ValaCCodeBaseModule* self);
static void vala_ccode_method_module_create_precondition_statement (ValaCCodeMethodModule* self, ValaCodeNode* method_node, ValaDataType* ret_type, ValaExpression* precondition);
gboolean vala_ccode_base_module_get_current_method_inner_error (ValaCCodeBaseModule* self);
void vala_ccode_base_module_return_default_value (ValaCCodeBaseModule* self, ValaDataType* return_type);
void vala_ccode_base_module_pop_context (ValaCCodeBaseModule* self);
void vala_ccode_method_module_generate_vfunc (ValaCCodeMethodModule* self, ValaMethod* m, ValaDataType* return_type, ValaMap* cparam_map, ValaMap* carg_map, const gchar* suffix, gint direction);
void vala_ccode_base_module_pop_line (ValaCCodeBaseModule* self);
ValaCCodeParameter* vala_ccode_method_module_generate_parameter (ValaCCodeMethodModule* self, ValaParameter* param, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaMap* carg_map);
static ValaCCodeParameter* vala_ccode_method_module_real_generate_parameter (ValaCCodeMethodModule* self, ValaParameter* param, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaMap* carg_map);
gdouble vala_ccode_base_module_get_ccode_pos (ValaParameter* param);
static void vala_ccode_method_module_real_generate_cparameters (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction);
gdouble vala_ccode_base_module_get_ccode_instance_pos (ValaCodeNode* node);
static ValaTypeSymbol* vala_ccode_method_module_find_parent_type (ValaCCodeMethodModule* self, ValaSymbol* sym);
gchar* vala_ccode_base_module_get_ccode_upper_case_name (ValaSymbol* sym, const gchar* infix);
gchar* vala_ccode_base_module_get_ccode_vfunc_name (ValaMethod* m);
void vala_ccode_base_module_create_postcondition_statement (ValaCCodeBaseModule* self, ValaExpression* postcondition);
void vala_ccode_base_module_create_type_check_statement (ValaCCodeBaseModule* self, ValaCodeNode* method_node, ValaDataType* ret_type, ValaTypeSymbol* t, gboolean non_null, const gchar* var_name);
ValaCCodeExpression* vala_ccode_base_module_get_cvalue (ValaCCodeBaseModule* self, ValaExpression* expr);
static void vala_ccode_method_module_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m);
static void vala_ccode_method_module_create_aux_constructor (ValaCCodeMethodModule* self, ValaCreationMethod* m, const gchar* func_name, gboolean self_as_first_parameter);
gchar* vala_ccode_base_module_get_ccode_type_id (ValaCodeNode* node);
ValaCCodeMethodModule* vala_ccode_method_module_construct (GType object_type);
ValaCCodeStructModule* vala_ccode_struct_module_construct (GType object_type);
static void vala_ccode_method_module_finalize (ValaCodeVisitor* obj);


static gboolean vala_ccode_method_module_real_method_has_wrapper (ValaCCodeBaseModule* base, ValaMethod* method) {
	ValaCCodeMethodModule * self;
	gboolean result = FALSE;
	ValaMethod* _tmp0_ = NULL;
	ValaAttribute* _tmp1_ = NULL;
	ValaAttribute* _tmp2_ = NULL;
	gboolean _tmp3_ = FALSE;
	self = (ValaCCodeMethodModule*) base;
	g_return_val_if_fail (method != NULL, FALSE);
	_tmp0_ = method;
	_tmp1_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp0_, "NoWrapper");
	_tmp2_ = _tmp1_;
	_tmp3_ = _tmp2_ == NULL;
	_vala_code_node_unref0 (_tmp2_);
	result = _tmp3_;
	return result;
}


static gchar* vala_ccode_method_module_get_creturn_type (ValaCCodeMethodModule* self, ValaMethod* m, const gchar* default_value) {
	gchar* result = NULL;
	gchar* type = NULL;
	ValaMethod* _tmp0_ = NULL;
	gchar* _tmp1_ = NULL;
	const gchar* _tmp2_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (m != NULL, NULL);
	g_return_val_if_fail (default_value != NULL, NULL);
	_tmp0_ = m;
	_tmp1_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp0_);
	type = _tmp1_;
	_tmp2_ = type;
	if (_tmp2_ == NULL) {
		const gchar* _tmp3_ = NULL;
		gchar* _tmp4_ = NULL;
		_tmp3_ = default_value;
		_tmp4_ = g_strdup (_tmp3_);
		result = _tmp4_;
		_g_free0 (type);
		return result;
	}
	result = type;
	return result;
}


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


static gboolean vala_ccode_method_module_is_gtypeinstance_creation_method (ValaCCodeMethodModule* self, ValaMethod* m) {
	gboolean result = FALSE;
	gboolean _result_ = FALSE;
	ValaClass* cl = NULL;
	ValaMethod* _tmp0_ = NULL;
	ValaSymbol* _tmp1_ = NULL;
	ValaSymbol* _tmp2_ = NULL;
	ValaClass* _tmp3_ = NULL;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	ValaMethod* _tmp6_ = NULL;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (m != NULL, FALSE);
	_result_ = FALSE;
	_tmp0_ = m;
	_tmp1_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp2_) : NULL);
	cl = _tmp3_;
	_tmp6_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_CREATION_METHOD)) {
		ValaClass* _tmp7_ = NULL;
		_tmp7_ = cl;
		_tmp5_ = _tmp7_ != NULL;
	} else {
		_tmp5_ = FALSE;
	}
	if (_tmp5_) {
		ValaClass* _tmp8_ = NULL;
		gboolean _tmp9_ = FALSE;
		gboolean _tmp10_ = FALSE;
		_tmp8_ = cl;
		_tmp9_ = vala_class_get_is_compact (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp4_ = !_tmp10_;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		_result_ = TRUE;
	}
	result = _result_;
	_vala_code_node_unref0 (cl);
	return result;
}


static void vala_ccode_method_module_real_generate_method_result_declaration (ValaCCodeMethodModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* cfunc, ValaMap* cparam_map, ValaMap* carg_map) {
	ValaDataType* creturn_type = NULL;
	ValaMethod* _tmp0_ = NULL;
	ValaDataType* _tmp1_ = NULL;
	ValaDataType* _tmp2_ = NULL;
	ValaDataType* _tmp3_ = NULL;
	ValaMethod* _tmp4_ = NULL;
	ValaCCodeFunction* _tmp17_ = NULL;
	ValaMethod* _tmp18_ = NULL;
	ValaDataType* _tmp19_ = NULL;
	gchar* _tmp20_ = NULL;
	gchar* _tmp21_ = NULL;
	gchar* _tmp22_ = NULL;
	gchar* _tmp23_ = NULL;
	ValaMethod* _tmp24_ = NULL;
	ValaDataType* _tmp25_ = NULL;
	ValaDataType* _tmp26_ = NULL;
	ValaCCodeFile* _tmp27_ = NULL;
	ValaMethod* _tmp28_ = NULL;
	ValaDataType* _tmp29_ = NULL;
	ValaDataType* _tmp30_ = NULL;
	gboolean _tmp31_ = FALSE;
	gboolean _tmp152_ = FALSE;
	gboolean _tmp153_ = FALSE;
	ValaMethod* _tmp154_ = NULL;
	ValaList* _tmp155_ = NULL;
	ValaList* _tmp156_ = NULL;
	gint _tmp157_ = 0;
	gint _tmp158_ = 0;
	gboolean _tmp159_ = FALSE;
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	g_return_if_fail (cfunc != NULL);
	g_return_if_fail (cparam_map != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_return_type (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = _vala_code_node_ref0 (_tmp2_);
	creturn_type = _tmp3_;
	_tmp4_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_CREATION_METHOD)) {
		ValaClass* cl = NULL;
		ValaMethod* _tmp5_ = NULL;
		ValaSymbol* _tmp6_ = NULL;
		ValaSymbol* _tmp7_ = NULL;
		ValaClass* _tmp8_ = NULL;
		ValaClass* _tmp9_ = NULL;
		_tmp5_ = m;
		_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp7_) : NULL);
		cl = _tmp8_;
		_tmp9_ = cl;
		if (_tmp9_ != NULL) {
			ValaClass* _tmp10_ = NULL;
			ValaObjectType* _tmp11_ = NULL;
			_tmp10_ = cl;
			_tmp11_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp10_);
			_vala_code_node_unref0 (creturn_type);
			creturn_type = (ValaDataType*) _tmp11_;
		}
		_vala_code_node_unref0 (cl);
	} else {
		ValaMethod* _tmp12_ = NULL;
		ValaDataType* _tmp13_ = NULL;
		ValaDataType* _tmp14_ = NULL;
		gboolean _tmp15_ = FALSE;
		_tmp12_ = m;
		_tmp13_ = vala_method_get_return_type (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = vala_data_type_is_real_non_null_struct_type (_tmp14_);
		if (_tmp15_) {
			ValaVoidType* _tmp16_ = NULL;
			_tmp16_ = vala_void_type_new (NULL);
			_vala_code_node_unref0 (creturn_type);
			creturn_type = (ValaDataType*) _tmp16_;
		}
	}
	_tmp17_ = cfunc;
	_tmp18_ = m;
	_tmp19_ = creturn_type;
	_tmp20_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_ccode_method_module_get_creturn_type (self, _tmp18_, _tmp21_);
	_tmp23_ = _tmp22_;
	vala_ccode_function_set_return_type (_tmp17_, _tmp23_);
	_g_free0 (_tmp23_);
	_g_free0 (_tmp21_);
	_tmp24_ = m;
	_tmp25_ = vala_method_get_return_type (_tmp24_);
	_tmp26_ = _tmp25_;
	_tmp27_ = decl_space;
	vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp26_, _tmp27_);
	_tmp28_ = m;
	_tmp29_ = vala_method_get_return_type (_tmp28_);
	_tmp30_ = _tmp29_;
	_tmp31_ = vala_data_type_is_real_non_null_struct_type (_tmp30_);
	if (_tmp31_) {
		ValaCCodeParameter* cparam = NULL;
		ValaMethod* _tmp32_ = NULL;
		ValaDataType* _tmp33_ = NULL;
		ValaDataType* _tmp34_ = NULL;
		gchar* _tmp35_ = NULL;
		gchar* _tmp36_ = NULL;
		gchar* _tmp37_ = NULL;
		gchar* _tmp38_ = NULL;
		ValaCCodeParameter* _tmp39_ = NULL;
		ValaCCodeParameter* _tmp40_ = NULL;
		ValaMap* _tmp41_ = NULL;
		gint _tmp42_ = 0;
		ValaCCodeParameter* _tmp43_ = NULL;
		ValaMap* _tmp44_ = NULL;
		_tmp32_ = m;
		_tmp33_ = vala_method_get_return_type (_tmp32_);
		_tmp34_ = _tmp33_;
		_tmp35_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp34_);
		_tmp36_ = _tmp35_;
		_tmp37_ = g_strconcat (_tmp36_, "*", NULL);
		_tmp38_ = _tmp37_;
		_tmp39_ = vala_ccode_parameter_new ("result", _tmp38_);
		_tmp40_ = _tmp39_;
		_g_free0 (_tmp38_);
		_g_free0 (_tmp36_);
		cparam = _tmp40_;
		_tmp41_ = cparam_map;
		_tmp42_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-3), FALSE);
		_tmp43_ = cparam;
		vala_map_set (_tmp41_, (gpointer) ((gintptr) _tmp42_), _tmp43_);
		_tmp44_ = carg_map;
		if (_tmp44_ != NULL) {
			ValaMap* _tmp45_ = NULL;
			gint _tmp46_ = 0;
			ValaCCodeExpression* _tmp47_ = NULL;
			ValaCCodeExpression* _tmp48_ = NULL;
			_tmp45_ = carg_map;
			_tmp46_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-3), FALSE);
			_tmp47_ = vala_ccode_base_module_get_result_cexpression ((ValaCCodeBaseModule*) self, "result");
			_tmp48_ = _tmp47_;
			vala_map_set (_tmp45_, (gpointer) ((gintptr) _tmp46_), _tmp48_);
			_vala_ccode_node_unref0 (_tmp48_);
		}
		_vala_ccode_node_unref0 (cparam);
	} else {
		gboolean _tmp49_ = FALSE;
		ValaMethod* _tmp50_ = NULL;
		gboolean _tmp51_ = FALSE;
		_tmp50_ = m;
		_tmp51_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp50_);
		if (_tmp51_) {
			ValaMethod* _tmp52_ = NULL;
			ValaDataType* _tmp53_ = NULL;
			ValaDataType* _tmp54_ = NULL;
			_tmp52_ = m;
			_tmp53_ = vala_method_get_return_type (_tmp52_);
			_tmp54_ = _tmp53_;
			_tmp49_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp54_, VALA_TYPE_ARRAY_TYPE);
		} else {
			_tmp49_ = FALSE;
		}
		if (_tmp49_) {
			ValaArrayType* array_type = NULL;
			ValaMethod* _tmp55_ = NULL;
			ValaDataType* _tmp56_ = NULL;
			ValaDataType* _tmp57_ = NULL;
			ValaArrayType* _tmp58_ = NULL;
			gchar* _tmp59_ = NULL;
			ValaMethod* _tmp60_ = NULL;
			gchar* _tmp61_ = NULL;
			gchar* _tmp62_ = NULL;
			gboolean _tmp63_ = FALSE;
			gchar* array_length_type = NULL;
			gchar* _tmp67_ = NULL;
			const gchar* _tmp68_ = NULL;
			gchar* _tmp69_ = NULL;
			_tmp55_ = m;
			_tmp56_ = vala_method_get_return_type (_tmp55_);
			_tmp57_ = _tmp56_;
			_tmp58_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
			array_type = _tmp58_;
			_tmp60_ = m;
			_tmp61_ = vala_ccode_base_module_get_ccode_array_length_type ((ValaCodeNode*) _tmp60_);
			_tmp62_ = _tmp61_;
			_tmp63_ = _tmp62_ != NULL;
			_g_free0 (_tmp62_);
			if (_tmp63_) {
				ValaMethod* _tmp64_ = NULL;
				gchar* _tmp65_ = NULL;
				_tmp64_ = m;
				_tmp65_ = vala_ccode_base_module_get_ccode_array_length_type ((ValaCodeNode*) _tmp64_);
				_g_free0 (_tmp59_);
				_tmp59_ = _tmp65_;
			} else {
				gchar* _tmp66_ = NULL;
				_tmp66_ = g_strdup ("int");
				_g_free0 (_tmp59_);
				_tmp59_ = _tmp66_;
			}
			_tmp67_ = g_strdup (_tmp59_);
			array_length_type = _tmp67_;
			_tmp68_ = array_length_type;
			_tmp69_ = g_strconcat (_tmp68_, "*", NULL);
			_g_free0 (array_length_type);
			array_length_type = _tmp69_;
			{
				gint dim = 0;
				dim = 1;
				{
					gboolean _tmp70_ = FALSE;
					_tmp70_ = TRUE;
					while (TRUE) {
						gint _tmp72_ = 0;
						ValaArrayType* _tmp73_ = NULL;
						gint _tmp74_ = 0;
						gint _tmp75_ = 0;
						ValaCCodeParameter* cparam = NULL;
						gint _tmp76_ = 0;
						gchar* _tmp77_ = NULL;
						gchar* _tmp78_ = NULL;
						const gchar* _tmp79_ = NULL;
						ValaCCodeParameter* _tmp80_ = NULL;
						ValaCCodeParameter* _tmp81_ = NULL;
						ValaMap* _tmp82_ = NULL;
						ValaMethod* _tmp83_ = NULL;
						gdouble _tmp84_ = 0.0;
						gint _tmp85_ = 0;
						gint _tmp86_ = 0;
						ValaCCodeParameter* _tmp87_ = NULL;
						ValaMap* _tmp88_ = NULL;
						if (!_tmp70_) {
							gint _tmp71_ = 0;
							_tmp71_ = dim;
							dim = _tmp71_ + 1;
						}
						_tmp70_ = FALSE;
						_tmp72_ = dim;
						_tmp73_ = array_type;
						_tmp74_ = vala_array_type_get_rank (_tmp73_);
						_tmp75_ = _tmp74_;
						if (!(_tmp72_ <= _tmp75_)) {
							break;
						}
						_tmp76_ = dim;
						_tmp77_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp76_);
						_tmp78_ = _tmp77_;
						_tmp79_ = array_length_type;
						_tmp80_ = vala_ccode_parameter_new (_tmp78_, _tmp79_);
						_tmp81_ = _tmp80_;
						_g_free0 (_tmp78_);
						cparam = _tmp81_;
						_tmp82_ = cparam_map;
						_tmp83_ = m;
						_tmp84_ = vala_ccode_base_module_get_ccode_array_length_pos ((ValaCodeNode*) _tmp83_);
						_tmp85_ = dim;
						_tmp86_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp84_ + (0.01 * _tmp85_), FALSE);
						_tmp87_ = cparam;
						vala_map_set (_tmp82_, (gpointer) ((gintptr) _tmp86_), _tmp87_);
						_tmp88_ = carg_map;
						if (_tmp88_ != NULL) {
							ValaMap* _tmp89_ = NULL;
							ValaMethod* _tmp90_ = NULL;
							gdouble _tmp91_ = 0.0;
							gint _tmp92_ = 0;
							gint _tmp93_ = 0;
							ValaCCodeParameter* _tmp94_ = NULL;
							const gchar* _tmp95_ = NULL;
							const gchar* _tmp96_ = NULL;
							ValaCCodeExpression* _tmp97_ = NULL;
							ValaCCodeExpression* _tmp98_ = NULL;
							_tmp89_ = carg_map;
							_tmp90_ = m;
							_tmp91_ = vala_ccode_base_module_get_ccode_array_length_pos ((ValaCodeNode*) _tmp90_);
							_tmp92_ = dim;
							_tmp93_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp91_ + (0.01 * _tmp92_), FALSE);
							_tmp94_ = cparam;
							_tmp95_ = vala_ccode_parameter_get_name (_tmp94_);
							_tmp96_ = _tmp95_;
							_tmp97_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp96_);
							_tmp98_ = _tmp97_;
							vala_map_set (_tmp89_, (gpointer) ((gintptr) _tmp93_), _tmp98_);
							_vala_ccode_node_unref0 (_tmp98_);
						}
						_vala_ccode_node_unref0 (cparam);
					}
				}
			}
			_g_free0 (array_length_type);
			_g_free0 (_tmp59_);
			_vala_code_node_unref0 (array_type);
		} else {
			ValaMethod* _tmp99_ = NULL;
			ValaDataType* _tmp100_ = NULL;
			ValaDataType* _tmp101_ = NULL;
			_tmp99_ = m;
			_tmp100_ = vala_method_get_return_type (_tmp99_);
			_tmp101_ = _tmp100_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp101_, VALA_TYPE_DELEGATE_TYPE)) {
				ValaDelegateType* deleg_type = NULL;
				ValaMethod* _tmp102_ = NULL;
				ValaDataType* _tmp103_ = NULL;
				ValaDataType* _tmp104_ = NULL;
				ValaDelegateType* _tmp105_ = NULL;
				ValaDelegate* d = NULL;
				ValaDelegateType* _tmp106_ = NULL;
				ValaDelegate* _tmp107_ = NULL;
				ValaDelegate* _tmp108_ = NULL;
				ValaDelegate* _tmp109_ = NULL;
				ValaDelegate* _tmp110_ = NULL;
				gboolean _tmp111_ = FALSE;
				gboolean _tmp112_ = FALSE;
				_tmp102_ = m;
				_tmp103_ = vala_method_get_return_type (_tmp102_);
				_tmp104_ = _tmp103_;
				_tmp105_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp104_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
				deleg_type = _tmp105_;
				_tmp106_ = deleg_type;
				_tmp107_ = vala_delegate_type_get_delegate_symbol (_tmp106_);
				_tmp108_ = _tmp107_;
				_tmp109_ = _vala_code_node_ref0 (_tmp108_);
				d = _tmp109_;
				_tmp110_ = d;
				_tmp111_ = vala_delegate_get_has_target (_tmp110_);
				_tmp112_ = _tmp111_;
				if (_tmp112_) {
					ValaCCodeParameter* cparam = NULL;
					gchar* _tmp113_ = NULL;
					gchar* _tmp114_ = NULL;
					ValaCCodeParameter* _tmp115_ = NULL;
					ValaCCodeParameter* _tmp116_ = NULL;
					ValaMap* _tmp117_ = NULL;
					ValaMethod* _tmp118_ = NULL;
					gdouble _tmp119_ = 0.0;
					gint _tmp120_ = 0;
					ValaCCodeParameter* _tmp121_ = NULL;
					ValaMap* _tmp122_ = NULL;
					ValaDelegateType* _tmp132_ = NULL;
					gboolean _tmp133_ = FALSE;
					_tmp113_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
					_tmp114_ = _tmp113_;
					_tmp115_ = vala_ccode_parameter_new (_tmp114_, "void**");
					_tmp116_ = _tmp115_;
					_g_free0 (_tmp114_);
					cparam = _tmp116_;
					_tmp117_ = cparam_map;
					_tmp118_ = m;
					_tmp119_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp118_);
					_tmp120_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp119_, FALSE);
					_tmp121_ = cparam;
					vala_map_set (_tmp117_, (gpointer) ((gintptr) _tmp120_), _tmp121_);
					_tmp122_ = carg_map;
					if (_tmp122_ != NULL) {
						ValaMap* _tmp123_ = NULL;
						ValaMethod* _tmp124_ = NULL;
						gdouble _tmp125_ = 0.0;
						gint _tmp126_ = 0;
						ValaCCodeParameter* _tmp127_ = NULL;
						const gchar* _tmp128_ = NULL;
						const gchar* _tmp129_ = NULL;
						ValaCCodeExpression* _tmp130_ = NULL;
						ValaCCodeExpression* _tmp131_ = NULL;
						_tmp123_ = carg_map;
						_tmp124_ = m;
						_tmp125_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp124_);
						_tmp126_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp125_, FALSE);
						_tmp127_ = cparam;
						_tmp128_ = vala_ccode_parameter_get_name (_tmp127_);
						_tmp129_ = _tmp128_;
						_tmp130_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp129_);
						_tmp131_ = _tmp130_;
						vala_map_set (_tmp123_, (gpointer) ((gintptr) _tmp126_), _tmp131_);
						_vala_ccode_node_unref0 (_tmp131_);
					}
					_tmp132_ = deleg_type;
					_tmp133_ = vala_data_type_is_disposable ((ValaDataType*) _tmp132_);
					if (_tmp133_) {
						gchar* _tmp134_ = NULL;
						gchar* _tmp135_ = NULL;
						ValaCCodeParameter* _tmp136_ = NULL;
						ValaMap* _tmp137_ = NULL;
						ValaMethod* _tmp138_ = NULL;
						gdouble _tmp139_ = 0.0;
						gint _tmp140_ = 0;
						ValaCCodeParameter* _tmp141_ = NULL;
						ValaMap* _tmp142_ = NULL;
						_tmp134_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, "result");
						_tmp135_ = _tmp134_;
						_tmp136_ = vala_ccode_parameter_new (_tmp135_, "GDestroyNotify*");
						_vala_ccode_node_unref0 (cparam);
						cparam = _tmp136_;
						_g_free0 (_tmp135_);
						_tmp137_ = cparam_map;
						_tmp138_ = m;
						_tmp139_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp138_);
						_tmp140_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp139_ + 0.01, FALSE);
						_tmp141_ = cparam;
						vala_map_set (_tmp137_, (gpointer) ((gintptr) _tmp140_), _tmp141_);
						_tmp142_ = carg_map;
						if (_tmp142_ != NULL) {
							ValaMap* _tmp143_ = NULL;
							ValaMethod* _tmp144_ = NULL;
							gdouble _tmp145_ = 0.0;
							gint _tmp146_ = 0;
							ValaCCodeParameter* _tmp147_ = NULL;
							const gchar* _tmp148_ = NULL;
							const gchar* _tmp149_ = NULL;
							ValaCCodeExpression* _tmp150_ = NULL;
							ValaCCodeExpression* _tmp151_ = NULL;
							_tmp143_ = carg_map;
							_tmp144_ = m;
							_tmp145_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp144_);
							_tmp146_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp145_ + 0.01, FALSE);
							_tmp147_ = cparam;
							_tmp148_ = vala_ccode_parameter_get_name (_tmp147_);
							_tmp149_ = _tmp148_;
							_tmp150_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp149_);
							_tmp151_ = _tmp150_;
							vala_map_set (_tmp143_, (gpointer) ((gintptr) _tmp146_), _tmp151_);
							_vala_ccode_node_unref0 (_tmp151_);
						}
					}
					_vala_ccode_node_unref0 (cparam);
				}
				_vala_code_node_unref0 (d);
				_vala_code_node_unref0 (deleg_type);
			}
		}
	}
	_tmp154_ = m;
	_tmp155_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp154_);
	_tmp156_ = _tmp155_;
	_tmp157_ = vala_collection_get_size ((ValaCollection*) _tmp156_);
	_tmp158_ = _tmp157_;
	_tmp159_ = _tmp158_ > 0;
	_vala_iterable_unref0 (_tmp156_);
	if (_tmp159_) {
		_tmp153_ = TRUE;
	} else {
		gboolean _tmp160_ = FALSE;
		ValaMethod* _tmp161_ = NULL;
		ValaMethod* _tmp162_ = NULL;
		ValaMethod* _tmp163_ = NULL;
		_tmp161_ = m;
		_tmp162_ = vala_method_get_base_method (_tmp161_);
		_tmp163_ = _tmp162_;
		if (_tmp163_ != NULL) {
			ValaMethod* _tmp164_ = NULL;
			ValaMethod* _tmp165_ = NULL;
			ValaMethod* _tmp166_ = NULL;
			ValaList* _tmp167_ = NULL;
			ValaList* _tmp168_ = NULL;
			gint _tmp169_ = 0;
			gint _tmp170_ = 0;
			_tmp164_ = m;
			_tmp165_ = vala_method_get_base_method (_tmp164_);
			_tmp166_ = _tmp165_;
			_tmp167_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp166_);
			_tmp168_ = _tmp167_;
			_tmp169_ = vala_collection_get_size ((ValaCollection*) _tmp168_);
			_tmp170_ = _tmp169_;
			_tmp160_ = _tmp170_ > 0;
			_vala_iterable_unref0 (_tmp168_);
		} else {
			_tmp160_ = FALSE;
		}
		_tmp153_ = _tmp160_;
	}
	if (_tmp153_) {
		_tmp152_ = TRUE;
	} else {
		gboolean _tmp171_ = FALSE;
		ValaMethod* _tmp172_ = NULL;
		ValaMethod* _tmp173_ = NULL;
		ValaMethod* _tmp174_ = NULL;
		_tmp172_ = m;
		_tmp173_ = vala_method_get_base_interface_method (_tmp172_);
		_tmp174_ = _tmp173_;
		if (_tmp174_ != NULL) {
			ValaMethod* _tmp175_ = NULL;
			ValaMethod* _tmp176_ = NULL;
			ValaMethod* _tmp177_ = NULL;
			ValaList* _tmp178_ = NULL;
			ValaList* _tmp179_ = NULL;
			gint _tmp180_ = 0;
			gint _tmp181_ = 0;
			_tmp175_ = m;
			_tmp176_ = vala_method_get_base_interface_method (_tmp175_);
			_tmp177_ = _tmp176_;
			_tmp178_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp177_);
			_tmp179_ = _tmp178_;
			_tmp180_ = vala_collection_get_size ((ValaCollection*) _tmp179_);
			_tmp181_ = _tmp180_;
			_tmp171_ = _tmp181_ > 0;
			_vala_iterable_unref0 (_tmp179_);
		} else {
			_tmp171_ = FALSE;
		}
		_tmp152_ = _tmp171_;
	}
	if (_tmp152_) {
		ValaCCodeParameter* cparam = NULL;
		ValaCCodeParameter* _tmp195_ = NULL;
		ValaMap* _tmp196_ = NULL;
		gint _tmp197_ = 0;
		ValaCCodeParameter* _tmp198_ = NULL;
		ValaMap* _tmp199_ = NULL;
		{
			ValaList* _error_type_list = NULL;
			ValaMethod* _tmp182_ = NULL;
			ValaList* _tmp183_ = NULL;
			gint _error_type_size = 0;
			ValaList* _tmp184_ = NULL;
			gint _tmp185_ = 0;
			gint _tmp186_ = 0;
			gint _error_type_index = 0;
			_tmp182_ = m;
			_tmp183_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp182_);
			_error_type_list = _tmp183_;
			_tmp184_ = _error_type_list;
			_tmp185_ = vala_collection_get_size ((ValaCollection*) _tmp184_);
			_tmp186_ = _tmp185_;
			_error_type_size = _tmp186_;
			_error_type_index = -1;
			while (TRUE) {
				gint _tmp187_ = 0;
				gint _tmp188_ = 0;
				gint _tmp189_ = 0;
				ValaDataType* error_type = NULL;
				ValaList* _tmp190_ = NULL;
				gint _tmp191_ = 0;
				gpointer _tmp192_ = NULL;
				ValaDataType* _tmp193_ = NULL;
				ValaCCodeFile* _tmp194_ = NULL;
				_tmp187_ = _error_type_index;
				_error_type_index = _tmp187_ + 1;
				_tmp188_ = _error_type_index;
				_tmp189_ = _error_type_size;
				if (!(_tmp188_ < _tmp189_)) {
					break;
				}
				_tmp190_ = _error_type_list;
				_tmp191_ = _error_type_index;
				_tmp192_ = vala_list_get (_tmp190_, _tmp191_);
				error_type = (ValaDataType*) _tmp192_;
				_tmp193_ = error_type;
				_tmp194_ = decl_space;
				vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp193_, _tmp194_);
				_vala_code_node_unref0 (error_type);
			}
			_vala_iterable_unref0 (_error_type_list);
		}
		_tmp195_ = vala_ccode_parameter_new ("error", "GError**");
		cparam = _tmp195_;
		_tmp196_ = cparam_map;
		_tmp197_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-1), FALSE);
		_tmp198_ = cparam;
		vala_map_set (_tmp196_, (gpointer) ((gintptr) _tmp197_), _tmp198_);
		_tmp199_ = carg_map;
		if (_tmp199_ != NULL) {
			ValaMap* _tmp200_ = NULL;
			gint _tmp201_ = 0;
			ValaCCodeParameter* _tmp202_ = NULL;
			const gchar* _tmp203_ = NULL;
			const gchar* _tmp204_ = NULL;
			ValaCCodeIdentifier* _tmp205_ = NULL;
			ValaCCodeIdentifier* _tmp206_ = NULL;
			_tmp200_ = carg_map;
			_tmp201_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-1), FALSE);
			_tmp202_ = cparam;
			_tmp203_ = vala_ccode_parameter_get_name (_tmp202_);
			_tmp204_ = _tmp203_;
			_tmp205_ = vala_ccode_identifier_new (_tmp204_);
			_tmp206_ = _tmp205_;
			vala_map_set (_tmp200_, (gpointer) ((gintptr) _tmp201_), (ValaCCodeExpression*) _tmp206_);
			_vala_ccode_node_unref0 (_tmp206_);
		}
		_vala_ccode_node_unref0 (cparam);
	}
	_vala_code_node_unref0 (creturn_type);
}


void vala_ccode_method_module_generate_method_result_declaration (ValaCCodeMethodModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* cfunc, ValaMap* cparam_map, ValaMap* carg_map) {
	g_return_if_fail (self != NULL);
	VALA_CCODE_METHOD_MODULE_GET_CLASS (self)->generate_method_result_declaration (self, m, decl_space, cfunc, cparam_map, carg_map);
}


void vala_ccode_method_module_complete_async (ValaCCodeMethodModule* self) {
	ValaCCodeMemberAccess* state = NULL;
	ValaCCodeIdentifier* _tmp0_ = NULL;
	ValaCCodeIdentifier* _tmp1_ = NULL;
	ValaCCodeMemberAccess* _tmp2_ = NULL;
	ValaCCodeMemberAccess* _tmp3_ = NULL;
	ValaCCodeConstant* zero = NULL;
	ValaCCodeConstant* _tmp4_ = NULL;
	ValaCCodeBinaryExpression* state_is_zero = NULL;
	ValaCCodeBinaryExpression* _tmp5_ = NULL;
	ValaCCodeFunction* _tmp6_ = NULL;
	ValaCCodeFunction* _tmp7_ = NULL;
	ValaCCodeMemberAccess* async_result_expr = NULL;
	ValaCCodeIdentifier* _tmp8_ = NULL;
	ValaCCodeIdentifier* _tmp9_ = NULL;
	ValaCCodeMemberAccess* _tmp10_ = NULL;
	ValaCCodeMemberAccess* _tmp11_ = NULL;
	ValaCCodeFunctionCall* idle_call = NULL;
	ValaCCodeIdentifier* _tmp12_ = NULL;
	ValaCCodeIdentifier* _tmp13_ = NULL;
	ValaCCodeFunctionCall* _tmp14_ = NULL;
	ValaCCodeFunctionCall* _tmp15_ = NULL;
	ValaCCodeFunction* _tmp16_ = NULL;
	ValaCCodeFunction* _tmp17_ = NULL;
	ValaCCodeFunction* _tmp18_ = NULL;
	ValaCCodeFunction* _tmp19_ = NULL;
	ValaCCodeFunctionCall* direct_call = NULL;
	ValaCCodeIdentifier* _tmp20_ = NULL;
	ValaCCodeIdentifier* _tmp21_ = NULL;
	ValaCCodeFunctionCall* _tmp22_ = NULL;
	ValaCCodeFunctionCall* _tmp23_ = NULL;
	ValaCCodeFunction* _tmp24_ = NULL;
	ValaCCodeFunction* _tmp25_ = NULL;
	ValaCCodeFunction* _tmp26_ = NULL;
	ValaCCodeFunction* _tmp27_ = NULL;
	ValaCCodeFunctionCall* unref = NULL;
	ValaCCodeIdentifier* _tmp28_ = NULL;
	ValaCCodeIdentifier* _tmp29_ = NULL;
	ValaCCodeFunctionCall* _tmp30_ = NULL;
	ValaCCodeFunctionCall* _tmp31_ = NULL;
	ValaCCodeFunction* _tmp32_ = NULL;
	ValaCCodeFunction* _tmp33_ = NULL;
	ValaCCodeFunction* _tmp34_ = NULL;
	ValaCCodeFunction* _tmp35_ = NULL;
	ValaCCodeConstant* _tmp36_ = NULL;
	ValaCCodeConstant* _tmp37_ = NULL;
	g_return_if_fail (self != NULL);
	_tmp0_ = vala_ccode_identifier_new ("_data_");
	_tmp1_ = _tmp0_;
	_tmp2_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1_, "_state_");
	_tmp3_ = _tmp2_;
	_vala_ccode_node_unref0 (_tmp1_);
	state = _tmp3_;
	_tmp4_ = vala_ccode_constant_new ("0");
	zero = _tmp4_;
	_tmp5_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) state, (ValaCCodeExpression*) zero);
	state_is_zero = _tmp5_;
	_tmp6_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp7_ = _tmp6_;
	vala_ccode_function_open_if (_tmp7_, (ValaCCodeExpression*) state_is_zero);
	_tmp8_ = vala_ccode_identifier_new ("_data_");
	_tmp9_ = _tmp8_;
	_tmp10_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp9_, "_async_result");
	_tmp11_ = _tmp10_;
	_vala_ccode_node_unref0 (_tmp9_);
	async_result_expr = _tmp11_;
	_tmp12_ = vala_ccode_identifier_new ("g_simple_async_result_complete_in_idle");
	_tmp13_ = _tmp12_;
	_tmp14_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp13_);
	_tmp15_ = _tmp14_;
	_vala_ccode_node_unref0 (_tmp13_);
	idle_call = _tmp15_;
	vala_ccode_function_call_add_argument (idle_call, (ValaCCodeExpression*) async_result_expr);
	_tmp16_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp17_ = _tmp16_;
	vala_ccode_function_add_expression (_tmp17_, (ValaCCodeExpression*) idle_call);
	_tmp18_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp19_ = _tmp18_;
	vala_ccode_function_add_else (_tmp19_);
	_tmp20_ = vala_ccode_identifier_new ("g_simple_async_result_complete");
	_tmp21_ = _tmp20_;
	_tmp22_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp21_);
	_tmp23_ = _tmp22_;
	_vala_ccode_node_unref0 (_tmp21_);
	direct_call = _tmp23_;
	vala_ccode_function_call_add_argument (direct_call, (ValaCCodeExpression*) async_result_expr);
	_tmp24_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp25_ = _tmp24_;
	vala_ccode_function_add_expression (_tmp25_, (ValaCCodeExpression*) direct_call);
	_tmp26_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp27_ = _tmp26_;
	vala_ccode_function_close (_tmp27_);
	_tmp28_ = vala_ccode_identifier_new ("g_object_unref");
	_tmp29_ = _tmp28_;
	_tmp30_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp29_);
	_tmp31_ = _tmp30_;
	_vala_ccode_node_unref0 (_tmp29_);
	unref = _tmp31_;
	vala_ccode_function_call_add_argument (unref, (ValaCCodeExpression*) async_result_expr);
	_tmp32_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp33_ = _tmp32_;
	vala_ccode_function_add_expression (_tmp33_, (ValaCCodeExpression*) unref);
	_tmp34_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp35_ = _tmp34_;
	_tmp36_ = vala_ccode_constant_new ("FALSE");
	_tmp37_ = _tmp36_;
	vala_ccode_function_add_return (_tmp35_, (ValaCCodeExpression*) _tmp37_);
	_vala_ccode_node_unref0 (_tmp37_);
	_vala_ccode_node_unref0 (unref);
	_vala_ccode_node_unref0 (direct_call);
	_vala_ccode_node_unref0 (idle_call);
	_vala_ccode_node_unref0 (async_result_expr);
	_vala_ccode_node_unref0 (state_is_zero);
	_vala_ccode_node_unref0 (zero);
	_vala_ccode_node_unref0 (state);
}


static void vala_ccode_method_module_real_generate_method_declaration (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space) {
	ValaCCodeMethodModule * self;
	ValaMethod* _tmp0_ = NULL;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ValaCCodeFile* _tmp3_ = NULL;
	ValaMethod* _tmp4_ = NULL;
	ValaMethod* _tmp5_ = NULL;
	gchar* _tmp6_ = NULL;
	gchar* _tmp7_ = NULL;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	ValaCCodeFunction* function = NULL;
	ValaMethod* _tmp10_ = NULL;
	gchar* _tmp11_ = NULL;
	gchar* _tmp12_ = NULL;
	ValaCCodeFunction* _tmp13_ = NULL;
	ValaCCodeFunction* _tmp14_ = NULL;
	gboolean _tmp15_ = FALSE;
	ValaMethod* _tmp16_ = NULL;
	gboolean _tmp17_ = FALSE;
	ValaMethod* _tmp47_ = NULL;
	gboolean _tmp48_ = FALSE;
	gboolean _tmp49_ = FALSE;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp54_ = NULL;
	GEqualFunc _tmp55_ = NULL;
	GEqualFunc _tmp56_ = NULL;
	ValaHashMap* _tmp57_ = NULL;
	ValaHashMap* carg_map = NULL;
	GHashFunc _tmp58_ = NULL;
	GEqualFunc _tmp59_ = NULL;
	GEqualFunc _tmp60_ = NULL;
	ValaHashMap* _tmp61_ = NULL;
	ValaClass* cl = NULL;
	ValaMethod* _tmp62_ = NULL;
	ValaSymbol* _tmp63_ = NULL;
	ValaSymbol* _tmp64_ = NULL;
	ValaClass* _tmp65_ = NULL;
	gboolean _tmp66_ = FALSE;
	gboolean _tmp67_ = FALSE;
	ValaMethod* _tmp68_ = NULL;
	gboolean _tmp86_ = FALSE;
	ValaMethod* _tmp87_ = NULL;
	self = (ValaCCodeMethodModule*) base;
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_is_async_callback (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		return;
	}
	_tmp3_ = decl_space;
	_tmp4_ = m;
	_tmp5_ = m;
	_tmp6_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = vala_ccode_base_module_add_symbol_declaration ((ValaCCodeBaseModule*) self, _tmp3_, (ValaSymbol*) _tmp4_, _tmp7_);
	_tmp9_ = _tmp8_;
	_g_free0 (_tmp7_);
	if (_tmp9_) {
		return;
	}
	_tmp10_ = m;
	_tmp11_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = vala_ccode_function_new (_tmp12_, "void");
	_tmp14_ = _tmp13_;
	_g_free0 (_tmp12_);
	function = _tmp14_;
	_tmp16_ = m;
	_tmp17_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp16_);
	if (_tmp17_) {
		ValaMethod* _tmp18_ = NULL;
		gboolean _tmp19_ = FALSE;
		gboolean _tmp20_ = FALSE;
		_tmp18_ = m;
		_tmp19_ = vala_symbol_get_external ((ValaSymbol*) _tmp18_);
		_tmp20_ = _tmp19_;
		_tmp15_ = !_tmp20_;
	} else {
		_tmp15_ = FALSE;
	}
	if (_tmp15_) {
		ValaCCodeFunction* _tmp21_ = NULL;
		ValaCCodeFunction* _tmp22_ = NULL;
		ValaCCodeModifiers _tmp23_ = 0;
		ValaCCodeModifiers _tmp24_ = 0;
		ValaMethod* _tmp25_ = NULL;
		gboolean _tmp26_ = FALSE;
		gboolean _tmp27_ = FALSE;
		_tmp21_ = function;
		_tmp22_ = function;
		_tmp23_ = vala_ccode_function_get_modifiers (_tmp22_);
		_tmp24_ = _tmp23_;
		vala_ccode_function_set_modifiers (_tmp22_, _tmp24_ | VALA_CCODE_MODIFIERS_STATIC);
		_tmp25_ = m;
		_tmp26_ = vala_method_get_is_inline (_tmp25_);
		_tmp27_ = _tmp26_;
		if (_tmp27_) {
			ValaCCodeFunction* _tmp28_ = NULL;
			ValaCCodeFunction* _tmp29_ = NULL;
			ValaCCodeModifiers _tmp30_ = 0;
			ValaCCodeModifiers _tmp31_ = 0;
			_tmp28_ = function;
			_tmp29_ = function;
			_tmp30_ = vala_ccode_function_get_modifiers (_tmp29_);
			_tmp31_ = _tmp30_;
			vala_ccode_function_set_modifiers (_tmp29_, _tmp31_ | VALA_CCODE_MODIFIERS_INLINE);
		}
	} else {
		gboolean _tmp32_ = FALSE;
		gboolean _tmp33_ = FALSE;
		ValaCodeContext* _tmp34_ = NULL;
		ValaCodeContext* _tmp35_ = NULL;
		gboolean _tmp36_ = FALSE;
		gboolean _tmp37_ = FALSE;
		_tmp34_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp35_ = _tmp34_;
		_tmp36_ = vala_code_context_get_hide_internal (_tmp35_);
		_tmp37_ = _tmp36_;
		if (_tmp37_) {
			ValaMethod* _tmp38_ = NULL;
			gboolean _tmp39_ = FALSE;
			_tmp38_ = m;
			_tmp39_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp38_);
			_tmp33_ = _tmp39_;
		} else {
			_tmp33_ = FALSE;
		}
		if (_tmp33_) {
			ValaMethod* _tmp40_ = NULL;
			gboolean _tmp41_ = FALSE;
			gboolean _tmp42_ = FALSE;
			_tmp40_ = m;
			_tmp41_ = vala_symbol_get_external ((ValaSymbol*) _tmp40_);
			_tmp42_ = _tmp41_;
			_tmp32_ = !_tmp42_;
		} else {
			_tmp32_ = FALSE;
		}
		if (_tmp32_) {
			ValaCCodeFunction* _tmp43_ = NULL;
			ValaCCodeFunction* _tmp44_ = NULL;
			ValaCCodeModifiers _tmp45_ = 0;
			ValaCCodeModifiers _tmp46_ = 0;
			_tmp43_ = function;
			_tmp44_ = function;
			_tmp45_ = vala_ccode_function_get_modifiers (_tmp44_);
			_tmp46_ = _tmp45_;
			vala_ccode_function_set_modifiers (_tmp44_, _tmp46_ | VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp47_ = m;
	_tmp48_ = vala_symbol_get_deprecated ((ValaSymbol*) _tmp47_);
	_tmp49_ = _tmp48_;
	if (_tmp49_) {
		ValaCCodeFunction* _tmp50_ = NULL;
		ValaCCodeFunction* _tmp51_ = NULL;
		ValaCCodeModifiers _tmp52_ = 0;
		ValaCCodeModifiers _tmp53_ = 0;
		_tmp50_ = function;
		_tmp51_ = function;
		_tmp52_ = vala_ccode_function_get_modifiers (_tmp51_);
		_tmp53_ = _tmp52_;
		vala_ccode_function_set_modifiers (_tmp51_, _tmp53_ | VALA_CCODE_MODIFIERS_DEPRECATED);
	}
	_tmp54_ = g_direct_hash;
	_tmp55_ = g_direct_equal;
	_tmp56_ = g_direct_equal;
	_tmp57_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp54_, _tmp55_, _tmp56_);
	cparam_map = _tmp57_;
	_tmp58_ = g_direct_hash;
	_tmp59_ = g_direct_equal;
	_tmp60_ = g_direct_equal;
	_tmp61_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp58_, _tmp59_, _tmp60_);
	carg_map = _tmp61_;
	_tmp62_ = m;
	_tmp63_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp62_);
	_tmp64_ = _tmp63_;
	_tmp65_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp64_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp64_) : NULL);
	cl = _tmp65_;
	_tmp68_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, VALA_TYPE_CREATION_METHOD)) {
		ValaClass* _tmp69_ = NULL;
		_tmp69_ = cl;
		_tmp67_ = _tmp69_ != NULL;
	} else {
		_tmp67_ = FALSE;
	}
	if (_tmp67_) {
		ValaClass* _tmp70_ = NULL;
		gboolean _tmp71_ = FALSE;
		gboolean _tmp72_ = FALSE;
		_tmp70_ = cl;
		_tmp71_ = vala_class_get_is_abstract (_tmp70_);
		_tmp72_ = _tmp71_;
		_tmp66_ = _tmp72_;
	} else {
		_tmp66_ = FALSE;
	}
	if (!_tmp66_) {
		gboolean etv_tmp = FALSE;
		gboolean _tmp73_ = FALSE;
		ValaMethod* _tmp74_ = NULL;
		ValaCCodeFile* _tmp75_ = NULL;
		ValaHashMap* _tmp76_ = NULL;
		ValaCCodeFunction* _tmp77_ = NULL;
		ValaHashMap* _tmp78_ = NULL;
		ValaCCodeIdentifier* _tmp79_ = NULL;
		ValaCCodeIdentifier* _tmp80_ = NULL;
		ValaCCodeFunctionCall* _tmp81_ = NULL;
		ValaCCodeFunctionCall* _tmp82_ = NULL;
		gboolean _tmp83_ = FALSE;
		ValaCCodeFile* _tmp84_ = NULL;
		ValaCCodeFunction* _tmp85_ = NULL;
		_tmp73_ = self->priv->ellipses_to_valist;
		etv_tmp = _tmp73_;
		self->priv->ellipses_to_valist = FALSE;
		_tmp74_ = m;
		_tmp75_ = decl_space;
		_tmp76_ = cparam_map;
		_tmp77_ = function;
		_tmp78_ = carg_map;
		_tmp79_ = vala_ccode_identifier_new ("fake");
		_tmp80_ = _tmp79_;
		_tmp81_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp80_);
		_tmp82_ = _tmp81_;
		vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp74_, _tmp75_, (ValaMap*) _tmp76_, _tmp77_, NULL, (ValaMap*) _tmp78_, _tmp82_, 3);
		_vala_ccode_node_unref0 (_tmp82_);
		_vala_ccode_node_unref0 (_tmp80_);
		_tmp83_ = etv_tmp;
		self->priv->ellipses_to_valist = _tmp83_;
		_tmp84_ = decl_space;
		_tmp85_ = function;
		vala_ccode_file_add_function_declaration (_tmp84_, _tmp85_);
	}
	_tmp87_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp87_, VALA_TYPE_CREATION_METHOD)) {
		ValaClass* _tmp88_ = NULL;
		_tmp88_ = cl;
		_tmp86_ = _tmp88_ != NULL;
	} else {
		_tmp86_ = FALSE;
	}
	if (_tmp86_) {
		ValaMethod* _tmp89_ = NULL;
		gchar* _tmp90_ = NULL;
		gchar* _tmp91_ = NULL;
		ValaCCodeFunction* _tmp92_ = NULL;
		ValaMethod* _tmp93_ = NULL;
		gboolean _tmp94_ = FALSE;
		GHashFunc _tmp110_ = NULL;
		GEqualFunc _tmp111_ = NULL;
		GEqualFunc _tmp112_ = NULL;
		ValaHashMap* _tmp113_ = NULL;
		gboolean etv_tmp = FALSE;
		gboolean _tmp114_ = FALSE;
		ValaMethod* _tmp115_ = NULL;
		ValaCCodeFile* _tmp116_ = NULL;
		ValaHashMap* _tmp117_ = NULL;
		ValaCCodeFunction* _tmp118_ = NULL;
		gboolean _tmp119_ = FALSE;
		ValaCCodeFile* _tmp120_ = NULL;
		ValaCCodeFunction* _tmp121_ = NULL;
		ValaMethod* _tmp122_ = NULL;
		gboolean _tmp123_ = FALSE;
		_tmp89_ = m;
		_tmp90_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp89_);
		_tmp91_ = _tmp90_;
		_tmp92_ = vala_ccode_function_new (_tmp91_, "void");
		_vala_ccode_node_unref0 (function);
		function = _tmp92_;
		_g_free0 (_tmp91_);
		_tmp93_ = m;
		_tmp94_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp93_);
		if (_tmp94_) {
			ValaCCodeFunction* _tmp95_ = NULL;
			ValaCCodeFunction* _tmp96_ = NULL;
			ValaCCodeModifiers _tmp97_ = 0;
			ValaCCodeModifiers _tmp98_ = 0;
			_tmp95_ = function;
			_tmp96_ = function;
			_tmp97_ = vala_ccode_function_get_modifiers (_tmp96_);
			_tmp98_ = _tmp97_;
			vala_ccode_function_set_modifiers (_tmp96_, _tmp98_ | VALA_CCODE_MODIFIERS_STATIC);
		} else {
			gboolean _tmp99_ = FALSE;
			ValaCodeContext* _tmp100_ = NULL;
			ValaCodeContext* _tmp101_ = NULL;
			gboolean _tmp102_ = FALSE;
			gboolean _tmp103_ = FALSE;
			_tmp100_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
			_tmp101_ = _tmp100_;
			_tmp102_ = vala_code_context_get_hide_internal (_tmp101_);
			_tmp103_ = _tmp102_;
			if (_tmp103_) {
				ValaMethod* _tmp104_ = NULL;
				gboolean _tmp105_ = FALSE;
				_tmp104_ = m;
				_tmp105_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp104_);
				_tmp99_ = _tmp105_;
			} else {
				_tmp99_ = FALSE;
			}
			if (_tmp99_) {
				ValaCCodeFunction* _tmp106_ = NULL;
				ValaCCodeFunction* _tmp107_ = NULL;
				ValaCCodeModifiers _tmp108_ = 0;
				ValaCCodeModifiers _tmp109_ = 0;
				_tmp106_ = function;
				_tmp107_ = function;
				_tmp108_ = vala_ccode_function_get_modifiers (_tmp107_);
				_tmp109_ = _tmp108_;
				vala_ccode_function_set_modifiers (_tmp107_, _tmp109_ | VALA_CCODE_MODIFIERS_INTERNAL);
			}
		}
		_tmp110_ = g_direct_hash;
		_tmp111_ = g_direct_equal;
		_tmp112_ = g_direct_equal;
		_tmp113_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp110_, _tmp111_, _tmp112_);
		_vala_map_unref0 (cparam_map);
		cparam_map = _tmp113_;
		_tmp114_ = self->priv->ellipses_to_valist;
		etv_tmp = _tmp114_;
		self->priv->ellipses_to_valist = FALSE;
		_tmp115_ = m;
		_tmp116_ = decl_space;
		_tmp117_ = cparam_map;
		_tmp118_ = function;
		vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp115_, _tmp116_, (ValaMap*) _tmp117_, _tmp118_, NULL, NULL, NULL, 3);
		_tmp119_ = etv_tmp;
		self->priv->ellipses_to_valist = _tmp119_;
		_tmp120_ = decl_space;
		_tmp121_ = function;
		vala_ccode_file_add_function_declaration (_tmp120_, _tmp121_);
		_tmp122_ = m;
		_tmp123_ = vala_method_is_variadic (_tmp122_);
		if (_tmp123_) {
			ValaMethod* _tmp124_ = NULL;
			gchar* _tmp125_ = NULL;
			gchar* _tmp126_ = NULL;
			ValaCCodeFunction* _tmp127_ = NULL;
			GHashFunc _tmp128_ = NULL;
			GEqualFunc _tmp129_ = NULL;
			GEqualFunc _tmp130_ = NULL;
			ValaHashMap* _tmp131_ = NULL;
			ValaMethod* _tmp132_ = NULL;
			ValaCCodeFile* _tmp133_ = NULL;
			ValaHashMap* _tmp134_ = NULL;
			ValaCCodeFunction* _tmp135_ = NULL;
			ValaCCodeFile* _tmp136_ = NULL;
			ValaCCodeFunction* _tmp137_ = NULL;
			_tmp124_ = m;
			_tmp125_ = vala_ccode_base_module_get_ccode_constructv_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp124_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod));
			_tmp126_ = _tmp125_;
			_tmp127_ = vala_ccode_function_new (_tmp126_, "void");
			_vala_ccode_node_unref0 (function);
			function = _tmp127_;
			_g_free0 (_tmp126_);
			_tmp128_ = g_direct_hash;
			_tmp129_ = g_direct_equal;
			_tmp130_ = g_direct_equal;
			_tmp131_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp128_, _tmp129_, _tmp130_);
			_vala_map_unref0 (cparam_map);
			cparam_map = _tmp131_;
			_tmp132_ = m;
			_tmp133_ = decl_space;
			_tmp134_ = cparam_map;
			_tmp135_ = function;
			vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp132_, _tmp133_, (ValaMap*) _tmp134_, _tmp135_, NULL, NULL, NULL, 3);
			_tmp136_ = decl_space;
			_tmp137_ = function;
			vala_ccode_file_add_function_declaration (_tmp136_, _tmp137_);
		}
	}
	_vala_code_node_unref0 (cl);
	_vala_map_unref0 (carg_map);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (function);
}


static void vala_ccode_method_module_register_plugin_types (ValaCCodeMethodModule* self, ValaSymbol* sym, ValaSet* registered_types) {
	ValaNamespace* ns = NULL;
	ValaSymbol* _tmp0_ = NULL;
	ValaNamespace* _tmp1_ = NULL;
	ValaClass* cl = NULL;
	ValaSymbol* _tmp2_ = NULL;
	ValaClass* _tmp3_ = NULL;
	ValaInterface* iface = NULL;
	ValaSymbol* _tmp4_ = NULL;
	ValaInterface* _tmp5_ = NULL;
	ValaNamespace* _tmp6_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (sym != NULL);
	g_return_if_fail (registered_types != NULL);
	_tmp0_ = sym;
	_tmp1_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_NAMESPACE) ? ((ValaNamespace*) _tmp0_) : NULL);
	ns = _tmp1_;
	_tmp2_ = sym;
	_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp2_) : NULL);
	cl = _tmp3_;
	_tmp4_ = sym;
	_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp4_) : NULL);
	iface = _tmp5_;
	_tmp6_ = ns;
	if (_tmp6_ != NULL) {
		{
			ValaList* _ns_ns_list = NULL;
			ValaNamespace* _tmp7_ = NULL;
			ValaList* _tmp8_ = NULL;
			gint _ns_ns_size = 0;
			ValaList* _tmp9_ = NULL;
			gint _tmp10_ = 0;
			gint _tmp11_ = 0;
			gint _ns_ns_index = 0;
			_tmp7_ = ns;
			_tmp8_ = vala_namespace_get_namespaces (_tmp7_);
			_ns_ns_list = _tmp8_;
			_tmp9_ = _ns_ns_list;
			_tmp10_ = vala_collection_get_size ((ValaCollection*) _tmp9_);
			_tmp11_ = _tmp10_;
			_ns_ns_size = _tmp11_;
			_ns_ns_index = -1;
			while (TRUE) {
				gint _tmp12_ = 0;
				gint _tmp13_ = 0;
				gint _tmp14_ = 0;
				ValaNamespace* ns_ns = NULL;
				ValaList* _tmp15_ = NULL;
				gint _tmp16_ = 0;
				gpointer _tmp17_ = NULL;
				ValaNamespace* _tmp18_ = NULL;
				ValaSet* _tmp19_ = NULL;
				_tmp12_ = _ns_ns_index;
				_ns_ns_index = _tmp12_ + 1;
				_tmp13_ = _ns_ns_index;
				_tmp14_ = _ns_ns_size;
				if (!(_tmp13_ < _tmp14_)) {
					break;
				}
				_tmp15_ = _ns_ns_list;
				_tmp16_ = _ns_ns_index;
				_tmp17_ = vala_list_get (_tmp15_, _tmp16_);
				ns_ns = (ValaNamespace*) _tmp17_;
				_tmp18_ = ns_ns;
				_tmp19_ = registered_types;
				vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp18_, _tmp19_);
				_vala_code_node_unref0 (ns_ns);
			}
			_vala_iterable_unref0 (_ns_ns_list);
		}
		{
			ValaList* _ns_cl_list = NULL;
			ValaNamespace* _tmp20_ = NULL;
			ValaList* _tmp21_ = NULL;
			gint _ns_cl_size = 0;
			ValaList* _tmp22_ = NULL;
			gint _tmp23_ = 0;
			gint _tmp24_ = 0;
			gint _ns_cl_index = 0;
			_tmp20_ = ns;
			_tmp21_ = vala_namespace_get_classes (_tmp20_);
			_ns_cl_list = _tmp21_;
			_tmp22_ = _ns_cl_list;
			_tmp23_ = vala_collection_get_size ((ValaCollection*) _tmp22_);
			_tmp24_ = _tmp23_;
			_ns_cl_size = _tmp24_;
			_ns_cl_index = -1;
			while (TRUE) {
				gint _tmp25_ = 0;
				gint _tmp26_ = 0;
				gint _tmp27_ = 0;
				ValaClass* ns_cl = NULL;
				ValaList* _tmp28_ = NULL;
				gint _tmp29_ = 0;
				gpointer _tmp30_ = NULL;
				ValaClass* _tmp31_ = NULL;
				ValaSet* _tmp32_ = NULL;
				_tmp25_ = _ns_cl_index;
				_ns_cl_index = _tmp25_ + 1;
				_tmp26_ = _ns_cl_index;
				_tmp27_ = _ns_cl_size;
				if (!(_tmp26_ < _tmp27_)) {
					break;
				}
				_tmp28_ = _ns_cl_list;
				_tmp29_ = _ns_cl_index;
				_tmp30_ = vala_list_get (_tmp28_, _tmp29_);
				ns_cl = (ValaClass*) _tmp30_;
				_tmp31_ = ns_cl;
				_tmp32_ = registered_types;
				vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp31_, _tmp32_);
				_vala_code_node_unref0 (ns_cl);
			}
			_vala_iterable_unref0 (_ns_cl_list);
		}
		{
			ValaList* _ns_iface_list = NULL;
			ValaNamespace* _tmp33_ = NULL;
			ValaList* _tmp34_ = NULL;
			gint _ns_iface_size = 0;
			ValaList* _tmp35_ = NULL;
			gint _tmp36_ = 0;
			gint _tmp37_ = 0;
			gint _ns_iface_index = 0;
			_tmp33_ = ns;
			_tmp34_ = vala_namespace_get_interfaces (_tmp33_);
			_ns_iface_list = _tmp34_;
			_tmp35_ = _ns_iface_list;
			_tmp36_ = vala_collection_get_size ((ValaCollection*) _tmp35_);
			_tmp37_ = _tmp36_;
			_ns_iface_size = _tmp37_;
			_ns_iface_index = -1;
			while (TRUE) {
				gint _tmp38_ = 0;
				gint _tmp39_ = 0;
				gint _tmp40_ = 0;
				ValaInterface* ns_iface = NULL;
				ValaList* _tmp41_ = NULL;
				gint _tmp42_ = 0;
				gpointer _tmp43_ = NULL;
				ValaInterface* _tmp44_ = NULL;
				ValaSet* _tmp45_ = NULL;
				_tmp38_ = _ns_iface_index;
				_ns_iface_index = _tmp38_ + 1;
				_tmp39_ = _ns_iface_index;
				_tmp40_ = _ns_iface_size;
				if (!(_tmp39_ < _tmp40_)) {
					break;
				}
				_tmp41_ = _ns_iface_list;
				_tmp42_ = _ns_iface_index;
				_tmp43_ = vala_list_get (_tmp41_, _tmp42_);
				ns_iface = (ValaInterface*) _tmp43_;
				_tmp44_ = ns_iface;
				_tmp45_ = registered_types;
				vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp44_, _tmp45_);
				_vala_code_node_unref0 (ns_iface);
			}
			_vala_iterable_unref0 (_ns_iface_list);
		}
	} else {
		ValaClass* _tmp46_ = NULL;
		_tmp46_ = cl;
		if (_tmp46_ != NULL) {
			ValaClass* _tmp47_ = NULL;
			ValaSet* _tmp48_ = NULL;
			_tmp47_ = cl;
			_tmp48_ = registered_types;
			vala_ccode_method_module_register_plugin_type (self, (ValaObjectTypeSymbol*) _tmp47_, _tmp48_);
			{
				ValaList* _cl_cl_list = NULL;
				ValaClass* _tmp49_ = NULL;
				ValaList* _tmp50_ = NULL;
				gint _cl_cl_size = 0;
				ValaList* _tmp51_ = NULL;
				gint _tmp52_ = 0;
				gint _tmp53_ = 0;
				gint _cl_cl_index = 0;
				_tmp49_ = cl;
				_tmp50_ = vala_class_get_classes (_tmp49_);
				_cl_cl_list = _tmp50_;
				_tmp51_ = _cl_cl_list;
				_tmp52_ = vala_collection_get_size ((ValaCollection*) _tmp51_);
				_tmp53_ = _tmp52_;
				_cl_cl_size = _tmp53_;
				_cl_cl_index = -1;
				while (TRUE) {
					gint _tmp54_ = 0;
					gint _tmp55_ = 0;
					gint _tmp56_ = 0;
					ValaClass* cl_cl = NULL;
					ValaList* _tmp57_ = NULL;
					gint _tmp58_ = 0;
					gpointer _tmp59_ = NULL;
					ValaClass* _tmp60_ = NULL;
					ValaSet* _tmp61_ = NULL;
					_tmp54_ = _cl_cl_index;
					_cl_cl_index = _tmp54_ + 1;
					_tmp55_ = _cl_cl_index;
					_tmp56_ = _cl_cl_size;
					if (!(_tmp55_ < _tmp56_)) {
						break;
					}
					_tmp57_ = _cl_cl_list;
					_tmp58_ = _cl_cl_index;
					_tmp59_ = vala_list_get (_tmp57_, _tmp58_);
					cl_cl = (ValaClass*) _tmp59_;
					_tmp60_ = cl_cl;
					_tmp61_ = registered_types;
					vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp60_, _tmp61_);
					_vala_code_node_unref0 (cl_cl);
				}
				_vala_iterable_unref0 (_cl_cl_list);
			}
		} else {
			ValaInterface* _tmp62_ = NULL;
			_tmp62_ = iface;
			if (_tmp62_ != NULL) {
				ValaInterface* _tmp63_ = NULL;
				ValaSet* _tmp64_ = NULL;
				_tmp63_ = iface;
				_tmp64_ = registered_types;
				vala_ccode_method_module_register_plugin_type (self, (ValaObjectTypeSymbol*) _tmp63_, _tmp64_);
				{
					ValaList* _iface_cl_list = NULL;
					ValaInterface* _tmp65_ = NULL;
					ValaList* _tmp66_ = NULL;
					gint _iface_cl_size = 0;
					ValaList* _tmp67_ = NULL;
					gint _tmp68_ = 0;
					gint _tmp69_ = 0;
					gint _iface_cl_index = 0;
					_tmp65_ = iface;
					_tmp66_ = vala_interface_get_classes (_tmp65_);
					_iface_cl_list = _tmp66_;
					_tmp67_ = _iface_cl_list;
					_tmp68_ = vala_collection_get_size ((ValaCollection*) _tmp67_);
					_tmp69_ = _tmp68_;
					_iface_cl_size = _tmp69_;
					_iface_cl_index = -1;
					while (TRUE) {
						gint _tmp70_ = 0;
						gint _tmp71_ = 0;
						gint _tmp72_ = 0;
						ValaClass* iface_cl = NULL;
						ValaList* _tmp73_ = NULL;
						gint _tmp74_ = 0;
						gpointer _tmp75_ = NULL;
						ValaClass* _tmp76_ = NULL;
						ValaSet* _tmp77_ = NULL;
						_tmp70_ = _iface_cl_index;
						_iface_cl_index = _tmp70_ + 1;
						_tmp71_ = _iface_cl_index;
						_tmp72_ = _iface_cl_size;
						if (!(_tmp71_ < _tmp72_)) {
							break;
						}
						_tmp73_ = _iface_cl_list;
						_tmp74_ = _iface_cl_index;
						_tmp75_ = vala_list_get (_tmp73_, _tmp74_);
						iface_cl = (ValaClass*) _tmp75_;
						_tmp76_ = iface_cl;
						_tmp77_ = registered_types;
						vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp76_, _tmp77_);
						_vala_code_node_unref0 (iface_cl);
					}
					_vala_iterable_unref0 (_iface_cl_list);
				}
			}
		}
	}
	_vala_code_node_unref0 (iface);
	_vala_code_node_unref0 (cl);
	_vala_code_node_unref0 (ns);
}


static void vala_ccode_method_module_register_plugin_type (ValaCCodeMethodModule* self, ValaObjectTypeSymbol* type_symbol, ValaSet* registered_types) {
	ValaObjectTypeSymbol* _tmp0_ = NULL;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ValaSet* _tmp3_ = NULL;
	ValaObjectTypeSymbol* _tmp4_ = NULL;
	gboolean _tmp5_ = FALSE;
	ValaClass* cl = NULL;
	ValaObjectTypeSymbol* _tmp6_ = NULL;
	ValaClass* _tmp7_ = NULL;
	ValaClass* _tmp8_ = NULL;
	ValaCCodeFunctionCall* register_call = NULL;
	ValaObjectTypeSymbol* _tmp27_ = NULL;
	gchar* _tmp28_ = NULL;
	gchar* _tmp29_ = NULL;
	gchar* _tmp30_ = NULL;
	gchar* _tmp31_ = NULL;
	ValaCCodeIdentifier* _tmp32_ = NULL;
	ValaCCodeIdentifier* _tmp33_ = NULL;
	ValaCCodeFunctionCall* _tmp34_ = NULL;
	ValaCCodeFunctionCall* _tmp35_ = NULL;
	ValaCCodeFunctionCall* _tmp36_ = NULL;
	const gchar* _tmp37_ = NULL;
	ValaCCodeIdentifier* _tmp38_ = NULL;
	ValaCCodeIdentifier* _tmp39_ = NULL;
	ValaCCodeFunction* _tmp40_ = NULL;
	ValaCCodeFunction* _tmp41_ = NULL;
	ValaCCodeFunctionCall* _tmp42_ = NULL;
	ValaInterface* iface = NULL;
	ValaObjectTypeSymbol* _tmp43_ = NULL;
	ValaInterface* _tmp44_ = NULL;
	ValaInterface* _tmp45_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type_symbol != NULL);
	g_return_if_fail (registered_types != NULL);
	_tmp0_ = type_symbol;
	_tmp1_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		return;
	}
	_tmp3_ = registered_types;
	_tmp4_ = type_symbol;
	_tmp5_ = vala_collection_add ((ValaCollection*) _tmp3_, (ValaSymbol*) _tmp4_);
	if (!_tmp5_) {
		return;
	}
	_tmp6_ = type_symbol;
	_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp6_) : NULL);
	cl = _tmp7_;
	_tmp8_ = cl;
	if (_tmp8_ != NULL) {
		ValaClass* _tmp9_ = NULL;
		gboolean _tmp10_ = FALSE;
		gboolean _tmp11_ = FALSE;
		_tmp9_ = cl;
		_tmp10_ = vala_class_get_is_compact (_tmp9_);
		_tmp11_ = _tmp10_;
		if (_tmp11_) {
			_vala_code_node_unref0 (cl);
			return;
		}
		{
			ValaList* _base_type_list = NULL;
			ValaClass* _tmp12_ = NULL;
			ValaList* _tmp13_ = NULL;
			gint _base_type_size = 0;
			ValaList* _tmp14_ = NULL;
			gint _tmp15_ = 0;
			gint _tmp16_ = 0;
			gint _base_type_index = 0;
			_tmp12_ = cl;
			_tmp13_ = vala_class_get_base_types (_tmp12_);
			_base_type_list = _tmp13_;
			_tmp14_ = _base_type_list;
			_tmp15_ = vala_collection_get_size ((ValaCollection*) _tmp14_);
			_tmp16_ = _tmp15_;
			_base_type_size = _tmp16_;
			_base_type_index = -1;
			while (TRUE) {
				gint _tmp17_ = 0;
				gint _tmp18_ = 0;
				gint _tmp19_ = 0;
				ValaDataType* base_type = NULL;
				ValaList* _tmp20_ = NULL;
				gint _tmp21_ = 0;
				gpointer _tmp22_ = NULL;
				ValaDataType* _tmp23_ = NULL;
				ValaTypeSymbol* _tmp24_ = NULL;
				ValaTypeSymbol* _tmp25_ = NULL;
				ValaSet* _tmp26_ = NULL;
				_tmp17_ = _base_type_index;
				_base_type_index = _tmp17_ + 1;
				_tmp18_ = _base_type_index;
				_tmp19_ = _base_type_size;
				if (!(_tmp18_ < _tmp19_)) {
					break;
				}
				_tmp20_ = _base_type_list;
				_tmp21_ = _base_type_index;
				_tmp22_ = vala_list_get (_tmp20_, _tmp21_);
				base_type = (ValaDataType*) _tmp22_;
				_tmp23_ = base_type;
				_tmp24_ = vala_data_type_get_data_type (_tmp23_);
				_tmp25_ = _tmp24_;
				_tmp26_ = registered_types;
				vala_ccode_method_module_register_plugin_type (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol), _tmp26_);
				_vala_code_node_unref0 (base_type);
			}
			_vala_iterable_unref0 (_base_type_list);
		}
	}
	_tmp27_ = type_symbol;
	_tmp28_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp27_, NULL);
	_tmp29_ = _tmp28_;
	_tmp30_ = g_strdup_printf ("%s_register_type", _tmp29_);
	_tmp31_ = _tmp30_;
	_tmp32_ = vala_ccode_identifier_new (_tmp31_);
	_tmp33_ = _tmp32_;
	_tmp34_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp33_);
	_tmp35_ = _tmp34_;
	_vala_ccode_node_unref0 (_tmp33_);
	_g_free0 (_tmp31_);
	_g_free0 (_tmp29_);
	register_call = _tmp35_;
	_tmp36_ = register_call;
	_tmp37_ = ((ValaCCodeBaseModule*) self)->module_init_param_name;
	_tmp38_ = vala_ccode_identifier_new (_tmp37_);
	_tmp39_ = _tmp38_;
	vala_ccode_function_call_add_argument (_tmp36_, (ValaCCodeExpression*) _tmp39_);
	_vala_ccode_node_unref0 (_tmp39_);
	_tmp40_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp41_ = _tmp40_;
	_tmp42_ = register_call;
	vala_ccode_function_add_expression (_tmp41_, (ValaCCodeExpression*) _tmp42_);
	_tmp43_ = type_symbol;
	_tmp44_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp43_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp43_) : NULL);
	iface = _tmp44_;
	_tmp45_ = iface;
	if (_tmp45_ != NULL) {
		gchar* dbus_name = NULL;
		ValaObjectTypeSymbol* _tmp46_ = NULL;
		gchar* _tmp47_ = NULL;
		const gchar* _tmp48_ = NULL;
		_tmp46_ = type_symbol;
		_tmp47_ = vala_gd_bus_module_get_dbus_name ((ValaTypeSymbol*) _tmp46_);
		dbus_name = _tmp47_;
		_tmp48_ = dbus_name;
		if (_tmp48_ != NULL) {
			gchar* proxy_cname = NULL;
			ValaObjectTypeSymbol* _tmp49_ = NULL;
			gchar* _tmp50_ = NULL;
			gchar* _tmp51_ = NULL;
			gchar* _tmp52_ = NULL;
			gchar* _tmp53_ = NULL;
			ValaCCodeFunctionCall* register_proxy = NULL;
			const gchar* _tmp54_ = NULL;
			gchar* _tmp55_ = NULL;
			gchar* _tmp56_ = NULL;
			ValaCCodeIdentifier* _tmp57_ = NULL;
			ValaCCodeIdentifier* _tmp58_ = NULL;
			ValaCCodeFunctionCall* _tmp59_ = NULL;
			ValaCCodeFunctionCall* _tmp60_ = NULL;
			ValaCCodeFunctionCall* _tmp61_ = NULL;
			const gchar* _tmp62_ = NULL;
			ValaCCodeIdentifier* _tmp63_ = NULL;
			ValaCCodeIdentifier* _tmp64_ = NULL;
			ValaCCodeFunction* _tmp65_ = NULL;
			ValaCCodeFunction* _tmp66_ = NULL;
			ValaCCodeFunctionCall* _tmp67_ = NULL;
			_tmp49_ = type_symbol;
			_tmp50_ = vala_ccode_base_module_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp49_);
			_tmp51_ = _tmp50_;
			_tmp52_ = g_strconcat (_tmp51_, "proxy", NULL);
			_tmp53_ = _tmp52_;
			_g_free0 (_tmp51_);
			proxy_cname = _tmp53_;
			_tmp54_ = proxy_cname;
			_tmp55_ = g_strdup_printf ("%s_register_dynamic_type", _tmp54_);
			_tmp56_ = _tmp55_;
			_tmp57_ = vala_ccode_identifier_new (_tmp56_);
			_tmp58_ = _tmp57_;
			_tmp59_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp58_);
			_tmp60_ = _tmp59_;
			_vala_ccode_node_unref0 (_tmp58_);
			_g_free0 (_tmp56_);
			register_proxy = _tmp60_;
			_tmp61_ = register_proxy;
			_tmp62_ = ((ValaCCodeBaseModule*) self)->module_init_param_name;
			_tmp63_ = vala_ccode_identifier_new (_tmp62_);
			_tmp64_ = _tmp63_;
			vala_ccode_function_call_add_argument (_tmp61_, (ValaCCodeExpression*) _tmp64_);
			_vala_ccode_node_unref0 (_tmp64_);
			_tmp65_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp66_ = _tmp65_;
			_tmp67_ = register_proxy;
			vala_ccode_function_add_expression (_tmp66_, (ValaCCodeExpression*) _tmp67_);
			_vala_ccode_node_unref0 (register_proxy);
			_g_free0 (proxy_cname);
		}
		_g_free0 (dbus_name);
	}
	_vala_code_node_unref0 (iface);
	_vala_ccode_node_unref0 (register_call);
	_vala_code_node_unref0 (cl);
}


/**
 * This function generates the code the given method. If the method is
 * a constructor, _construct is generated, unless it's variadic, in which
 * case _constructv is generated (and _construct is generated together
 * with _new in visit_creation_method).
 */
static void vala_ccode_method_module_real_visit_method (ValaCodeVisitor* base, ValaMethod* m) {
	ValaCCodeMethodModule * self;
	gchar* real_name = NULL;
	ValaMethod* _tmp0_ = NULL;
	gchar* _tmp1_ = NULL;
	gboolean _tmp2_ = FALSE;
	ValaMethod* _tmp3_ = NULL;
	ValaMethod* _tmp8_ = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp9_ = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp10_ = NULL;
	ValaMethod* _tmp11_ = NULL;
	ValaSourceReference* _tmp12_ = NULL;
	ValaSourceReference* _tmp13_ = NULL;
	gboolean in_gobject_creation_method = FALSE;
	gboolean in_fundamental_creation_method = FALSE;
	ValaMethod* _tmp14_ = NULL;
	ValaDataType* _tmp15_ = NULL;
	ValaDataType* _tmp16_ = NULL;
	gboolean profile = FALSE;
	ValaMethod* _tmp17_ = NULL;
	ValaAttribute* _tmp18_ = NULL;
	ValaAttribute* _tmp19_ = NULL;
	gboolean _tmp20_ = FALSE;
	ValaMethod* _tmp21_ = NULL;
	ValaAttribute* _tmp22_ = NULL;
	ValaAttribute* _tmp23_ = NULL;
	gboolean _tmp24_ = FALSE;
	ValaMethod* _tmp28_ = NULL;
	ValaMethod* _tmp45_ = NULL;
	gboolean _tmp46_ = FALSE;
	gboolean _tmp47_ = FALSE;
	ValaDataType* creturn_type = NULL;
	ValaMethod* _tmp48_ = NULL;
	ValaDataType* _tmp49_ = NULL;
	ValaDataType* _tmp50_ = NULL;
	ValaDataType* _tmp51_ = NULL;
	ValaMethod* _tmp52_ = NULL;
	ValaDataType* _tmp53_ = NULL;
	ValaDataType* _tmp54_ = NULL;
	gboolean _tmp55_ = FALSE;
	gboolean _tmp69_ = FALSE;
	gboolean _tmp70_ = FALSE;
	gboolean _tmp71_ = FALSE;
	ValaMethod* _tmp72_ = NULL;
	gboolean _tmp73_ = FALSE;
	gboolean _tmp74_ = FALSE;
	gboolean _tmp98_ = FALSE;
	ValaCCodeFunction* function = NULL;
	const gchar* _tmp218_ = NULL;
	ValaCCodeFunction* _tmp219_ = NULL;
	ValaMethod* _tmp220_ = NULL;
	gboolean _tmp221_ = FALSE;
	gboolean _tmp222_ = FALSE;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp227_ = NULL;
	GEqualFunc _tmp228_ = NULL;
	GEqualFunc _tmp229_ = NULL;
	ValaHashMap* _tmp230_ = NULL;
	ValaMethod* _tmp231_ = NULL;
	ValaCCodeFile* _tmp232_ = NULL;
	ValaHashMap* _tmp233_ = NULL;
	ValaCCodeFunction* _tmp234_ = NULL;
	gboolean _tmp235_ = FALSE;
	ValaMethod* _tmp236_ = NULL;
	gboolean _tmp237_ = FALSE;
	gboolean _tmp238_ = FALSE;
	ValaMethod* _tmp301_ = NULL;
	ValaComment* _tmp302_ = NULL;
	ValaComment* _tmp303_ = NULL;
	ValaCCodeFunction* _tmp312_ = NULL;
	gboolean _tmp313_ = FALSE;
	ValaMethod* _tmp314_ = NULL;
	gboolean _tmp315_ = FALSE;
	gboolean _tmp316_ = FALSE;
	gboolean _tmp1037_ = FALSE;
	ValaMethod* _tmp1078_ = NULL;
	ValaBlock* _tmp1079_ = NULL;
	ValaBlock* _tmp1080_ = NULL;
	gboolean _tmp1084_ = FALSE;
	gboolean _tmp1115_ = FALSE;
	ValaMethod* _tmp1116_ = NULL;
	gboolean _tmp1117_ = FALSE;
	gboolean _tmp1118_ = FALSE;
	gboolean _tmp1260_ = FALSE;
	ValaMethod* _tmp1261_ = NULL;
	gboolean _tmp1262_ = FALSE;
	gboolean _tmp1263_ = FALSE;
	gboolean _tmp1301_ = FALSE;
	gboolean _tmp1302_ = FALSE;
	gboolean _tmp1303_ = FALSE;
	ValaMethod* _tmp1304_ = NULL;
	gboolean _tmp1305_ = FALSE;
	gboolean _tmp1306_ = FALSE;
	ValaMethod* _tmp1328_ = NULL;
	gboolean _tmp1329_ = FALSE;
	gboolean _tmp1330_ = FALSE;
	self = (ValaCCodeMethodModule*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp0_);
	real_name = _tmp1_;
	_tmp3_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CREATION_METHOD)) {
		ValaMethod* _tmp4_ = NULL;
		gboolean _tmp5_ = FALSE;
		_tmp4_ = m;
		_tmp5_ = vala_method_is_variadic (_tmp4_);
		_tmp2_ = _tmp5_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		ValaMethod* _tmp6_ = NULL;
		gchar* _tmp7_ = NULL;
		_tmp6_ = m;
		_tmp7_ = vala_ccode_base_module_get_ccode_constructv_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod));
		_g_free0 (real_name);
		real_name = _tmp7_;
	}
	_tmp8_ = m;
	_tmp9_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) _tmp8_);
	_tmp10_ = _tmp9_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp10_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp10_);
	_tmp11_ = m;
	_tmp12_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp11_);
	_tmp13_ = _tmp12_;
	vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp13_);
	in_gobject_creation_method = FALSE;
	in_fundamental_creation_method = FALSE;
	_tmp14_ = m;
	_tmp15_ = vala_method_get_return_type (_tmp14_);
	_tmp16_ = _tmp15_;
	vala_ccode_base_module_check_type ((ValaCCodeBaseModule*) self, _tmp16_);
	_tmp17_ = m;
	_tmp18_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp17_, "Profile");
	_tmp19_ = _tmp18_;
	_tmp20_ = _tmp19_ != NULL;
	_vala_code_node_unref0 (_tmp19_);
	profile = _tmp20_;
	_tmp21_ = m;
	_tmp22_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp21_, "NoArrayLength");
	_tmp23_ = _tmp22_;
	_tmp24_ = _tmp23_ != NULL;
	_vala_code_node_unref0 (_tmp23_);
	if (_tmp24_) {
		ValaMethod* _tmp25_ = NULL;
		ValaSourceReference* _tmp26_ = NULL;
		ValaSourceReference* _tmp27_ = NULL;
		_tmp25_ = m;
		_tmp26_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp25_);
		_tmp27_ = _tmp26_;
		vala_report_deprecated (_tmp27_, "NoArrayLength attribute is deprecated, use [CCode (array_length = fals" \
"e)] instead.");
	}
	_tmp28_ = m;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp28_, VALA_TYPE_CREATION_METHOD)) {
		ValaClass* cl = NULL;
		ValaTypeSymbol* _tmp29_ = NULL;
		ValaTypeSymbol* _tmp30_ = NULL;
		ValaClass* _tmp31_ = NULL;
		gboolean _tmp32_ = FALSE;
		ValaClass* _tmp33_ = NULL;
		_tmp29_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
		_tmp30_ = _tmp29_;
		_tmp31_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp30_) : NULL);
		cl = _tmp31_;
		_tmp33_ = cl;
		if (_tmp33_ != NULL) {
			ValaClass* _tmp34_ = NULL;
			gboolean _tmp35_ = FALSE;
			gboolean _tmp36_ = FALSE;
			_tmp34_ = cl;
			_tmp35_ = vala_class_get_is_compact (_tmp34_);
			_tmp36_ = _tmp35_;
			_tmp32_ = !_tmp36_;
		} else {
			_tmp32_ = FALSE;
		}
		if (_tmp32_) {
			ValaClass* _tmp37_ = NULL;
			ValaClass* _tmp38_ = NULL;
			ValaClass* _tmp39_ = NULL;
			_tmp37_ = cl;
			_tmp38_ = vala_class_get_base_class (_tmp37_);
			_tmp39_ = _tmp38_;
			if (_tmp39_ == NULL) {
				in_fundamental_creation_method = TRUE;
			} else {
				gboolean _tmp40_ = FALSE;
				ValaTypeSymbol* _tmp41_ = NULL;
				_tmp41_ = ((ValaCCodeBaseModule*) self)->gobject_type;
				if (_tmp41_ != NULL) {
					ValaClass* _tmp42_ = NULL;
					ValaTypeSymbol* _tmp43_ = NULL;
					gboolean _tmp44_ = FALSE;
					_tmp42_ = cl;
					_tmp43_ = ((ValaCCodeBaseModule*) self)->gobject_type;
					_tmp44_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp42_, _tmp43_);
					_tmp40_ = _tmp44_;
				} else {
					_tmp40_ = FALSE;
				}
				if (_tmp40_) {
					in_gobject_creation_method = TRUE;
				}
			}
		}
		_vala_code_node_unref0 (cl);
	}
	_tmp45_ = m;
	_tmp46_ = vala_method_get_coroutine (_tmp45_);
	_tmp47_ = _tmp46_;
	if (_tmp47_) {
		((ValaCCodeBaseModule*) self)->next_coroutine_state = 1;
	}
	_tmp48_ = m;
	_tmp49_ = vala_method_get_return_type (_tmp48_);
	_tmp50_ = _tmp49_;
	_tmp51_ = _vala_code_node_ref0 (_tmp50_);
	creturn_type = _tmp51_;
	_tmp52_ = m;
	_tmp53_ = vala_method_get_return_type (_tmp52_);
	_tmp54_ = _tmp53_;
	_tmp55_ = vala_data_type_is_real_non_null_struct_type (_tmp54_);
	if (_tmp55_) {
		ValaVoidType* _tmp56_ = NULL;
		_tmp56_ = vala_void_type_new (NULL);
		_vala_code_node_unref0 (creturn_type);
		creturn_type = (ValaDataType*) _tmp56_;
	}
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp57_ = NULL;
		ValaList* _tmp58_ = NULL;
		gint _param_size = 0;
		ValaList* _tmp59_ = NULL;
		gint _tmp60_ = 0;
		gint _tmp61_ = 0;
		gint _param_index = 0;
		_tmp57_ = m;
		_tmp58_ = vala_method_get_parameters (_tmp57_);
		_param_list = _tmp58_;
		_tmp59_ = _param_list;
		_tmp60_ = vala_collection_get_size ((ValaCollection*) _tmp59_);
		_tmp61_ = _tmp60_;
		_param_size = _tmp61_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp62_ = 0;
			gint _tmp63_ = 0;
			gint _tmp64_ = 0;
			ValaParameter* param = NULL;
			ValaList* _tmp65_ = NULL;
			gint _tmp66_ = 0;
			gpointer _tmp67_ = NULL;
			ValaParameter* _tmp68_ = NULL;
			_tmp62_ = _param_index;
			_param_index = _tmp62_ + 1;
			_tmp63_ = _param_index;
			_tmp64_ = _param_size;
			if (!(_tmp63_ < _tmp64_)) {
				break;
			}
			_tmp65_ = _param_list;
			_tmp66_ = _param_index;
			_tmp67_ = vala_list_get (_tmp65_, _tmp66_);
			param = (ValaParameter*) _tmp67_;
			_tmp68_ = param;
			vala_code_node_accept ((ValaCodeNode*) _tmp68_, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp72_ = m;
	_tmp73_ = vala_method_get_is_abstract (_tmp72_);
	_tmp74_ = _tmp73_;
	if (_tmp74_) {
		_tmp71_ = TRUE;
	} else {
		ValaMethod* _tmp75_ = NULL;
		gboolean _tmp76_ = FALSE;
		gboolean _tmp77_ = FALSE;
		_tmp75_ = m;
		_tmp76_ = vala_method_get_is_virtual (_tmp75_);
		_tmp77_ = _tmp76_;
		_tmp71_ = _tmp77_;
	}
	if (_tmp71_) {
		_tmp70_ = TRUE;
	} else {
		gboolean _tmp78_ = FALSE;
		ValaMethod* _tmp79_ = NULL;
		ValaMethod* _tmp80_ = NULL;
		ValaMethod* _tmp81_ = NULL;
		_tmp79_ = m;
		_tmp80_ = vala_method_get_base_method (_tmp79_);
		_tmp81_ = _tmp80_;
		if (_tmp81_ == NULL) {
			ValaMethod* _tmp82_ = NULL;
			ValaMethod* _tmp83_ = NULL;
			ValaMethod* _tmp84_ = NULL;
			_tmp82_ = m;
			_tmp83_ = vala_method_get_base_interface_method (_tmp82_);
			_tmp84_ = _tmp83_;
			_tmp78_ = _tmp84_ == NULL;
		} else {
			_tmp78_ = FALSE;
		}
		_tmp70_ = _tmp78_;
	}
	if (_tmp70_) {
		ValaMethod* _tmp85_ = NULL;
		ValaSignal* _tmp86_ = NULL;
		ValaSignal* _tmp87_ = NULL;
		_tmp85_ = m;
		_tmp86_ = vala_method_get_signal_reference (_tmp85_);
		_tmp87_ = _tmp86_;
		_tmp69_ = _tmp87_ == NULL;
	} else {
		_tmp69_ = FALSE;
	}
	if (_tmp69_) {
		ValaMethod* _tmp88_ = NULL;
		ValaCCodeFile* _tmp89_ = NULL;
		ValaMethod* _tmp90_ = NULL;
		gboolean _tmp91_ = FALSE;
		ValaMethod* _tmp94_ = NULL;
		gboolean _tmp95_ = FALSE;
		_tmp88_ = m;
		_tmp89_ = ((ValaCCodeBaseModule*) self)->cfile;
		vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp88_, _tmp89_);
		_tmp90_ = m;
		_tmp91_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp90_);
		if (!_tmp91_) {
			ValaMethod* _tmp92_ = NULL;
			ValaCCodeFile* _tmp93_ = NULL;
			_tmp92_ = m;
			_tmp93_ = ((ValaCCodeBaseModule*) self)->header_file;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp92_, _tmp93_);
		}
		_tmp94_ = m;
		_tmp95_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp94_);
		if (!_tmp95_) {
			ValaMethod* _tmp96_ = NULL;
			ValaCCodeFile* _tmp97_ = NULL;
			_tmp96_ = m;
			_tmp97_ = ((ValaCCodeBaseModule*) self)->internal_header_file;
			vala_ccode_base_module_generate_method_declaration ((ValaCCodeBaseModule*) self, _tmp96_, _tmp97_);
		}
	}
	_tmp98_ = profile;
	if (_tmp98_) {
		gchar* prefix = NULL;
		const gchar* _tmp99_ = NULL;
		gchar* _tmp100_ = NULL;
		ValaCCodeFile* _tmp101_ = NULL;
		ValaCCodeIdentifier* counter = NULL;
		const gchar* _tmp102_ = NULL;
		gchar* _tmp103_ = NULL;
		gchar* _tmp104_ = NULL;
		ValaCCodeIdentifier* _tmp105_ = NULL;
		ValaCCodeIdentifier* _tmp106_ = NULL;
		ValaCCodeDeclaration* counter_decl = NULL;
		ValaCCodeDeclaration* _tmp107_ = NULL;
		ValaCCodeDeclaration* _tmp108_ = NULL;
		ValaCCodeIdentifier* _tmp109_ = NULL;
		const gchar* _tmp110_ = NULL;
		const gchar* _tmp111_ = NULL;
		ValaCCodeVariableDeclarator* _tmp112_ = NULL;
		ValaCCodeVariableDeclarator* _tmp113_ = NULL;
		ValaCCodeDeclaration* _tmp114_ = NULL;
		ValaCCodeFile* _tmp115_ = NULL;
		ValaCCodeDeclaration* _tmp116_ = NULL;
		ValaCCodeIdentifier* level = NULL;
		const gchar* _tmp117_ = NULL;
		gchar* _tmp118_ = NULL;
		gchar* _tmp119_ = NULL;
		ValaCCodeIdentifier* _tmp120_ = NULL;
		ValaCCodeIdentifier* _tmp121_ = NULL;
		ValaCCodeDeclaration* level_decl = NULL;
		ValaCCodeDeclaration* _tmp122_ = NULL;
		ValaCCodeDeclaration* _tmp123_ = NULL;
		ValaCCodeIdentifier* _tmp124_ = NULL;
		const gchar* _tmp125_ = NULL;
		const gchar* _tmp126_ = NULL;
		ValaCCodeVariableDeclarator* _tmp127_ = NULL;
		ValaCCodeVariableDeclarator* _tmp128_ = NULL;
		ValaCCodeDeclaration* _tmp129_ = NULL;
		ValaCCodeFile* _tmp130_ = NULL;
		ValaCCodeDeclaration* _tmp131_ = NULL;
		ValaCCodeIdentifier* timer = NULL;
		const gchar* _tmp132_ = NULL;
		gchar* _tmp133_ = NULL;
		gchar* _tmp134_ = NULL;
		ValaCCodeIdentifier* _tmp135_ = NULL;
		ValaCCodeIdentifier* _tmp136_ = NULL;
		ValaCCodeDeclaration* timer_decl = NULL;
		ValaCCodeDeclaration* _tmp137_ = NULL;
		ValaCCodeDeclaration* _tmp138_ = NULL;
		ValaCCodeIdentifier* _tmp139_ = NULL;
		const gchar* _tmp140_ = NULL;
		const gchar* _tmp141_ = NULL;
		ValaCCodeVariableDeclarator* _tmp142_ = NULL;
		ValaCCodeVariableDeclarator* _tmp143_ = NULL;
		ValaCCodeDeclaration* _tmp144_ = NULL;
		ValaCCodeFile* _tmp145_ = NULL;
		ValaCCodeDeclaration* _tmp146_ = NULL;
		ValaCCodeFunction* constructor = NULL;
		const gchar* _tmp147_ = NULL;
		gchar* _tmp148_ = NULL;
		gchar* _tmp149_ = NULL;
		ValaCCodeFunction* _tmp150_ = NULL;
		ValaCCodeFunction* _tmp151_ = NULL;
		ValaCCodeFunction* _tmp152_ = NULL;
		ValaCCodeFunction* _tmp153_ = NULL;
		ValaCCodeFile* _tmp154_ = NULL;
		ValaCCodeFunction* _tmp155_ = NULL;
		ValaCCodeFunction* _tmp156_ = NULL;
		ValaCCodeFunction* _tmp157_ = NULL;
		ValaCCodeFunction* _tmp158_ = NULL;
		ValaCCodeIdentifier* _tmp159_ = NULL;
		ValaCCodeIdentifier* _tmp160_ = NULL;
		ValaCCodeIdentifier* _tmp161_ = NULL;
		ValaCCodeFunctionCall* _tmp162_ = NULL;
		ValaCCodeFunctionCall* _tmp163_ = NULL;
		ValaCCodeFunctionCall* stop_call = NULL;
		ValaCCodeIdentifier* _tmp164_ = NULL;
		ValaCCodeIdentifier* _tmp165_ = NULL;
		ValaCCodeFunctionCall* _tmp166_ = NULL;
		ValaCCodeFunctionCall* _tmp167_ = NULL;
		ValaCCodeFunctionCall* _tmp168_ = NULL;
		ValaCCodeIdentifier* _tmp169_ = NULL;
		ValaCCodeFunction* _tmp170_ = NULL;
		ValaCCodeFunction* _tmp171_ = NULL;
		ValaCCodeFunctionCall* _tmp172_ = NULL;
		ValaCCodeFile* _tmp173_ = NULL;
		ValaCCodeFunction* _tmp174_ = NULL;
		ValaCCodeFunction* destructor = NULL;
		const gchar* _tmp175_ = NULL;
		gchar* _tmp176_ = NULL;
		gchar* _tmp177_ = NULL;
		ValaCCodeFunction* _tmp178_ = NULL;
		ValaCCodeFunction* _tmp179_ = NULL;
		ValaCCodeFunction* _tmp180_ = NULL;
		ValaCCodeFunction* _tmp181_ = NULL;
		ValaCCodeFile* _tmp182_ = NULL;
		ValaCCodeFunction* _tmp183_ = NULL;
		ValaCCodeFunction* _tmp184_ = NULL;
		ValaCCodeFunctionCall* elapsed_call = NULL;
		ValaCCodeIdentifier* _tmp185_ = NULL;
		ValaCCodeIdentifier* _tmp186_ = NULL;
		ValaCCodeFunctionCall* _tmp187_ = NULL;
		ValaCCodeFunctionCall* _tmp188_ = NULL;
		ValaCCodeFunctionCall* _tmp189_ = NULL;
		ValaCCodeIdentifier* _tmp190_ = NULL;
		ValaCCodeFunctionCall* _tmp191_ = NULL;
		ValaCCodeConstant* _tmp192_ = NULL;
		ValaCCodeConstant* _tmp193_ = NULL;
		ValaCCodeFunctionCall* print_call = NULL;
		ValaCCodeIdentifier* _tmp194_ = NULL;
		ValaCCodeIdentifier* _tmp195_ = NULL;
		ValaCCodeFunctionCall* _tmp196_ = NULL;
		ValaCCodeFunctionCall* _tmp197_ = NULL;
		ValaCCodeFunctionCall* _tmp198_ = NULL;
		ValaCCodeIdentifier* _tmp199_ = NULL;
		ValaCCodeIdentifier* _tmp200_ = NULL;
		ValaCCodeFunctionCall* _tmp201_ = NULL;
		ValaMethod* _tmp202_ = NULL;
		gchar* _tmp203_ = NULL;
		gchar* _tmp204_ = NULL;
		gchar* _tmp205_ = NULL;
		gchar* _tmp206_ = NULL;
		ValaCCodeConstant* _tmp207_ = NULL;
		ValaCCodeConstant* _tmp208_ = NULL;
		ValaCCodeFunctionCall* _tmp209_ = NULL;
		ValaCCodeFunctionCall* _tmp210_ = NULL;
		ValaCCodeFunctionCall* _tmp211_ = NULL;
		ValaCCodeIdentifier* _tmp212_ = NULL;
		ValaCCodeFunction* _tmp213_ = NULL;
		ValaCCodeFunction* _tmp214_ = NULL;
		ValaCCodeFunctionCall* _tmp215_ = NULL;
		ValaCCodeFile* _tmp216_ = NULL;
		ValaCCodeFunction* _tmp217_ = NULL;
		_tmp99_ = real_name;
		_tmp100_ = g_strdup_printf ("_vala_prof_%s", _tmp99_);
		prefix = _tmp100_;
		_tmp101_ = ((ValaCCodeBaseModule*) self)->cfile;
		vala_ccode_file_add_include (_tmp101_, "stdio.h", FALSE);
		_tmp102_ = prefix;
		_tmp103_ = g_strconcat (_tmp102_, "_counter", NULL);
		_tmp104_ = _tmp103_;
		_tmp105_ = vala_ccode_identifier_new (_tmp104_);
		_tmp106_ = _tmp105_;
		_g_free0 (_tmp104_);
		counter = _tmp106_;
		_tmp107_ = vala_ccode_declaration_new ("gint");
		counter_decl = _tmp107_;
		_tmp108_ = counter_decl;
		_tmp109_ = counter;
		_tmp110_ = vala_ccode_identifier_get_name (_tmp109_);
		_tmp111_ = _tmp110_;
		_tmp112_ = vala_ccode_variable_declarator_new (_tmp111_, NULL, NULL);
		_tmp113_ = _tmp112_;
		vala_ccode_declaration_add_declarator (_tmp108_, (ValaCCodeDeclarator*) _tmp113_);
		_vala_ccode_node_unref0 (_tmp113_);
		_tmp114_ = counter_decl;
		vala_ccode_declaration_set_modifiers (_tmp114_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp115_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp116_ = counter_decl;
		vala_ccode_file_add_type_member_declaration (_tmp115_, (ValaCCodeNode*) _tmp116_);
		_tmp117_ = prefix;
		_tmp118_ = g_strconcat (_tmp117_, "_level", NULL);
		_tmp119_ = _tmp118_;
		_tmp120_ = vala_ccode_identifier_new (_tmp119_);
		_tmp121_ = _tmp120_;
		_g_free0 (_tmp119_);
		level = _tmp121_;
		_tmp122_ = vala_ccode_declaration_new ("gint");
		level_decl = _tmp122_;
		_tmp123_ = level_decl;
		_tmp124_ = level;
		_tmp125_ = vala_ccode_identifier_get_name (_tmp124_);
		_tmp126_ = _tmp125_;
		_tmp127_ = vala_ccode_variable_declarator_new (_tmp126_, NULL, NULL);
		_tmp128_ = _tmp127_;
		vala_ccode_declaration_add_declarator (_tmp123_, (ValaCCodeDeclarator*) _tmp128_);
		_vala_ccode_node_unref0 (_tmp128_);
		_tmp129_ = level_decl;
		vala_ccode_declaration_set_modifiers (_tmp129_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp130_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp131_ = level_decl;
		vala_ccode_file_add_type_member_declaration (_tmp130_, (ValaCCodeNode*) _tmp131_);
		_tmp132_ = prefix;
		_tmp133_ = g_strconcat (_tmp132_, "_timer", NULL);
		_tmp134_ = _tmp133_;
		_tmp135_ = vala_ccode_identifier_new (_tmp134_);
		_tmp136_ = _tmp135_;
		_g_free0 (_tmp134_);
		timer = _tmp136_;
		_tmp137_ = vala_ccode_declaration_new ("GTimer *");
		timer_decl = _tmp137_;
		_tmp138_ = timer_decl;
		_tmp139_ = timer;
		_tmp140_ = vala_ccode_identifier_get_name (_tmp139_);
		_tmp141_ = _tmp140_;
		_tmp142_ = vala_ccode_variable_declarator_new (_tmp141_, NULL, NULL);
		_tmp143_ = _tmp142_;
		vala_ccode_declaration_add_declarator (_tmp138_, (ValaCCodeDeclarator*) _tmp143_);
		_vala_ccode_node_unref0 (_tmp143_);
		_tmp144_ = timer_decl;
		vala_ccode_declaration_set_modifiers (_tmp144_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp145_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp146_ = timer_decl;
		vala_ccode_file_add_type_member_declaration (_tmp145_, (ValaCCodeNode*) _tmp146_);
		_tmp147_ = prefix;
		_tmp148_ = g_strconcat (_tmp147_, "_init", NULL);
		_tmp149_ = _tmp148_;
		_tmp150_ = vala_ccode_function_new (_tmp149_, "void");
		_tmp151_ = _tmp150_;
		_g_free0 (_tmp149_);
		constructor = _tmp151_;
		_tmp152_ = constructor;
		vala_ccode_function_set_modifiers (_tmp152_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp153_ = constructor;
		vala_ccode_function_set_attributes (_tmp153_, "__attribute__((constructor))");
		_tmp154_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp155_ = constructor;
		vala_ccode_file_add_function_declaration (_tmp154_, _tmp155_);
		_tmp156_ = constructor;
		vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp156_);
		_tmp157_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp158_ = _tmp157_;
		_tmp159_ = timer;
		_tmp160_ = vala_ccode_identifier_new ("g_timer_new");
		_tmp161_ = _tmp160_;
		_tmp162_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp161_);
		_tmp163_ = _tmp162_;
		vala_ccode_function_add_assignment (_tmp158_, (ValaCCodeExpression*) _tmp159_, (ValaCCodeExpression*) _tmp163_);
		_vala_ccode_node_unref0 (_tmp163_);
		_vala_ccode_node_unref0 (_tmp161_);
		_tmp164_ = vala_ccode_identifier_new ("g_timer_stop");
		_tmp165_ = _tmp164_;
		_tmp166_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp165_);
		_tmp167_ = _tmp166_;
		_vala_ccode_node_unref0 (_tmp165_);
		stop_call = _tmp167_;
		_tmp168_ = stop_call;
		_tmp169_ = timer;
		vala_ccode_function_call_add_argument (_tmp168_, (ValaCCodeExpression*) _tmp169_);
		_tmp170_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp171_ = _tmp170_;
		_tmp172_ = stop_call;
		vala_ccode_function_add_expression (_tmp171_, (ValaCCodeExpression*) _tmp172_);
		vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
		_tmp173_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp174_ = constructor;
		vala_ccode_file_add_function (_tmp173_, _tmp174_);
		_tmp175_ = prefix;
		_tmp176_ = g_strconcat (_tmp175_, "_exit", NULL);
		_tmp177_ = _tmp176_;
		_tmp178_ = vala_ccode_function_new (_tmp177_, "void");
		_tmp179_ = _tmp178_;
		_g_free0 (_tmp177_);
		destructor = _tmp179_;
		_tmp180_ = destructor;
		vala_ccode_function_set_modifiers (_tmp180_, VALA_CCODE_MODIFIERS_STATIC);
		_tmp181_ = destructor;
		vala_ccode_function_set_attributes (_tmp181_, "__attribute__((destructor))");
		_tmp182_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp183_ = destructor;
		vala_ccode_file_add_function_declaration (_tmp182_, _tmp183_);
		_tmp184_ = destructor;
		vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp184_);
		_tmp185_ = vala_ccode_identifier_new ("g_timer_elapsed");
		_tmp186_ = _tmp185_;
		_tmp187_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp186_);
		_tmp188_ = _tmp187_;
		_vala_ccode_node_unref0 (_tmp186_);
		elapsed_call = _tmp188_;
		_tmp189_ = elapsed_call;
		_tmp190_ = timer;
		vala_ccode_function_call_add_argument (_tmp189_, (ValaCCodeExpression*) _tmp190_);
		_tmp191_ = elapsed_call;
		_tmp192_ = vala_ccode_constant_new ("NULL");
		_tmp193_ = _tmp192_;
		vala_ccode_function_call_add_argument (_tmp191_, (ValaCCodeExpression*) _tmp193_);
		_vala_ccode_node_unref0 (_tmp193_);
		_tmp194_ = vala_ccode_identifier_new ("fprintf");
		_tmp195_ = _tmp194_;
		_tmp196_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp195_);
		_tmp197_ = _tmp196_;
		_vala_ccode_node_unref0 (_tmp195_);
		print_call = _tmp197_;
		_tmp198_ = print_call;
		_tmp199_ = vala_ccode_identifier_new ("stderr");
		_tmp200_ = _tmp199_;
		vala_ccode_function_call_add_argument (_tmp198_, (ValaCCodeExpression*) _tmp200_);
		_vala_ccode_node_unref0 (_tmp200_);
		_tmp201_ = print_call;
		_tmp202_ = m;
		_tmp203_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp202_);
		_tmp204_ = _tmp203_;
		_tmp205_ = g_strdup_printf ("\"%s: %%gs (%%d calls)\\n\"", _tmp204_);
		_tmp206_ = _tmp205_;
		_tmp207_ = vala_ccode_constant_new (_tmp206_);
		_tmp208_ = _tmp207_;
		vala_ccode_function_call_add_argument (_tmp201_, (ValaCCodeExpression*) _tmp208_);
		_vala_ccode_node_unref0 (_tmp208_);
		_g_free0 (_tmp206_);
		_g_free0 (_tmp204_);
		_tmp209_ = print_call;
		_tmp210_ = elapsed_call;
		vala_ccode_function_call_add_argument (_tmp209_, (ValaCCodeExpression*) _tmp210_);
		_tmp211_ = print_call;
		_tmp212_ = counter;
		vala_ccode_function_call_add_argument (_tmp211_, (ValaCCodeExpression*) _tmp212_);
		_tmp213_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp214_ = _tmp213_;
		_tmp215_ = print_call;
		vala_ccode_function_add_expression (_tmp214_, (ValaCCodeExpression*) _tmp215_);
		vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
		_tmp216_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp217_ = destructor;
		vala_ccode_file_add_function (_tmp216_, _tmp217_);
		_vala_ccode_node_unref0 (print_call);
		_vala_ccode_node_unref0 (elapsed_call);
		_vala_ccode_node_unref0 (destructor);
		_vala_ccode_node_unref0 (stop_call);
		_vala_ccode_node_unref0 (constructor);
		_vala_ccode_node_unref0 (timer_decl);
		_vala_ccode_node_unref0 (timer);
		_vala_ccode_node_unref0 (level_decl);
		_vala_ccode_node_unref0 (level);
		_vala_ccode_node_unref0 (counter_decl);
		_vala_ccode_node_unref0 (counter);
		_g_free0 (prefix);
	}
	_tmp218_ = real_name;
	_tmp219_ = vala_ccode_function_new (_tmp218_, "void");
	_vala_ccode_node_unref0 (function);
	function = _tmp219_;
	_tmp220_ = m;
	_tmp221_ = vala_method_get_is_inline (_tmp220_);
	_tmp222_ = _tmp221_;
	if (_tmp222_) {
		ValaCCodeFunction* _tmp223_ = NULL;
		ValaCCodeFunction* _tmp224_ = NULL;
		ValaCCodeModifiers _tmp225_ = 0;
		ValaCCodeModifiers _tmp226_ = 0;
		_tmp223_ = function;
		_tmp224_ = function;
		_tmp225_ = vala_ccode_function_get_modifiers (_tmp224_);
		_tmp226_ = _tmp225_;
		vala_ccode_function_set_modifiers (_tmp224_, _tmp226_ | VALA_CCODE_MODIFIERS_INLINE);
	}
	_tmp227_ = g_direct_hash;
	_tmp228_ = g_direct_equal;
	_tmp229_ = g_direct_equal;
	_tmp230_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp227_, _tmp228_, _tmp229_);
	cparam_map = _tmp230_;
	_tmp231_ = m;
	_tmp232_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp233_ = cparam_map;
	_tmp234_ = function;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp231_, _tmp232_, (ValaMap*) _tmp233_, _tmp234_, NULL, NULL, NULL, 3);
	_tmp236_ = m;
	_tmp237_ = vala_method_get_is_abstract (_tmp236_);
	_tmp238_ = _tmp237_;
	if (!_tmp238_) {
		_tmp235_ = TRUE;
	} else {
		gboolean _tmp239_ = FALSE;
		ValaMethod* _tmp240_ = NULL;
		gboolean _tmp241_ = FALSE;
		gboolean _tmp242_ = FALSE;
		_tmp240_ = m;
		_tmp241_ = vala_method_get_is_abstract (_tmp240_);
		_tmp242_ = _tmp241_;
		if (_tmp242_) {
			ValaTypeSymbol* _tmp243_ = NULL;
			ValaTypeSymbol* _tmp244_ = NULL;
			_tmp243_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
			_tmp244_ = _tmp243_;
			_tmp239_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp244_, VALA_TYPE_CLASS);
		} else {
			_tmp239_ = FALSE;
		}
		_tmp235_ = _tmp239_;
	}
	if (_tmp235_) {
		ValaMethod* _tmp245_ = NULL;
		gboolean _tmp246_ = FALSE;
		gboolean _tmp247_ = FALSE;
		_tmp245_ = m;
		_tmp246_ = vala_method_get_coroutine (_tmp245_);
		_tmp247_ = _tmp246_;
		if (!_tmp247_) {
			gboolean _tmp248_ = FALSE;
			ValaMethod* _tmp249_ = NULL;
			ValaMethod* _tmp250_ = NULL;
			ValaMethod* _tmp251_ = NULL;
			_tmp249_ = m;
			_tmp250_ = vala_method_get_base_method (_tmp249_);
			_tmp251_ = _tmp250_;
			if (_tmp251_ != NULL) {
				_tmp248_ = TRUE;
			} else {
				ValaMethod* _tmp252_ = NULL;
				ValaMethod* _tmp253_ = NULL;
				ValaMethod* _tmp254_ = NULL;
				_tmp252_ = m;
				_tmp253_ = vala_method_get_base_interface_method (_tmp252_);
				_tmp254_ = _tmp253_;
				_tmp248_ = _tmp254_ != NULL;
			}
			if (_tmp248_) {
				ValaCCodeFunction* _tmp255_ = NULL;
				ValaCCodeFunction* _tmp256_ = NULL;
				ValaCCodeModifiers _tmp257_ = 0;
				ValaCCodeModifiers _tmp258_ = 0;
				ValaCCodeFile* _tmp259_ = NULL;
				ValaCCodeFunction* _tmp260_ = NULL;
				_tmp255_ = function;
				_tmp256_ = function;
				_tmp257_ = vala_ccode_function_get_modifiers (_tmp256_);
				_tmp258_ = _tmp257_;
				vala_ccode_function_set_modifiers (_tmp256_, _tmp258_ | VALA_CCODE_MODIFIERS_STATIC);
				_tmp259_ = ((ValaCCodeBaseModule*) self)->cfile;
				_tmp260_ = function;
				vala_ccode_file_add_function_declaration (_tmp259_, _tmp260_);
			} else {
				ValaMethod* _tmp261_ = NULL;
				gboolean _tmp262_ = FALSE;
				_tmp261_ = m;
				_tmp262_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp261_);
				if (_tmp262_) {
					ValaCCodeFunction* _tmp263_ = NULL;
					ValaCCodeFunction* _tmp264_ = NULL;
					ValaCCodeModifiers _tmp265_ = 0;
					ValaCCodeModifiers _tmp266_ = 0;
					_tmp263_ = function;
					_tmp264_ = function;
					_tmp265_ = vala_ccode_function_get_modifiers (_tmp264_);
					_tmp266_ = _tmp265_;
					vala_ccode_function_set_modifiers (_tmp264_, _tmp266_ | VALA_CCODE_MODIFIERS_STATIC);
				} else {
					gboolean _tmp267_ = FALSE;
					ValaCodeContext* _tmp268_ = NULL;
					ValaCodeContext* _tmp269_ = NULL;
					gboolean _tmp270_ = FALSE;
					gboolean _tmp271_ = FALSE;
					_tmp268_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
					_tmp269_ = _tmp268_;
					_tmp270_ = vala_code_context_get_hide_internal (_tmp269_);
					_tmp271_ = _tmp270_;
					if (_tmp271_) {
						ValaMethod* _tmp272_ = NULL;
						gboolean _tmp273_ = FALSE;
						_tmp272_ = m;
						_tmp273_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp272_);
						_tmp267_ = _tmp273_;
					} else {
						_tmp267_ = FALSE;
					}
					if (_tmp267_) {
						ValaCCodeFunction* _tmp274_ = NULL;
						ValaCCodeFunction* _tmp275_ = NULL;
						ValaCCodeModifiers _tmp276_ = 0;
						ValaCCodeModifiers _tmp277_ = 0;
						_tmp274_ = function;
						_tmp275_ = function;
						_tmp276_ = vala_ccode_function_get_modifiers (_tmp275_);
						_tmp277_ = _tmp276_;
						vala_ccode_function_set_modifiers (_tmp275_, _tmp277_ | VALA_CCODE_MODIFIERS_INTERNAL);
					}
				}
			}
		} else {
			ValaMethod* _tmp278_ = NULL;
			ValaBlock* _tmp279_ = NULL;
			ValaBlock* _tmp280_ = NULL;
			_tmp278_ = m;
			_tmp279_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp278_);
			_tmp280_ = _tmp279_;
			if (_tmp280_ != NULL) {
				const gchar* _tmp281_ = NULL;
				gchar* _tmp282_ = NULL;
				gchar* _tmp283_ = NULL;
				ValaCCodeFunction* _tmp284_ = NULL;
				ValaCCodeFunction* _tmp285_ = NULL;
				ValaMethod* _tmp286_ = NULL;
				gchar* _tmp287_ = NULL;
				gchar* _tmp288_ = NULL;
				gchar* _tmp289_ = NULL;
				gchar* _tmp290_ = NULL;
				gchar* _tmp291_ = NULL;
				gchar* _tmp292_ = NULL;
				ValaCCodeParameter* _tmp293_ = NULL;
				ValaCCodeParameter* _tmp294_ = NULL;
				ValaCCodeFunction* _tmp295_ = NULL;
				ValaCCodeFunction* _tmp296_ = NULL;
				ValaCCodeModifiers _tmp297_ = 0;
				ValaCCodeModifiers _tmp298_ = 0;
				ValaCCodeFile* _tmp299_ = NULL;
				ValaCCodeFunction* _tmp300_ = NULL;
				_tmp281_ = real_name;
				_tmp282_ = g_strconcat (_tmp281_, "_co", NULL);
				_tmp283_ = _tmp282_;
				_tmp284_ = vala_ccode_function_new (_tmp283_, "gboolean");
				_vala_ccode_node_unref0 (function);
				function = _tmp284_;
				_g_free0 (_tmp283_);
				_tmp285_ = function;
				_tmp286_ = m;
				_tmp287_ = vala_ccode_base_module_get_ccode_const_name ((ValaCodeNode*) _tmp286_);
				_tmp288_ = _tmp287_;
				_tmp289_ = vala_symbol_lower_case_to_camel_case (_tmp288_);
				_tmp290_ = _tmp289_;
				_tmp291_ = g_strconcat (_tmp290_, "Data*", NULL);
				_tmp292_ = _tmp291_;
				_tmp293_ = vala_ccode_parameter_new ("_data_", _tmp292_);
				_tmp294_ = _tmp293_;
				vala_ccode_function_add_parameter (_tmp285_, _tmp294_);
				_vala_ccode_node_unref0 (_tmp294_);
				_g_free0 (_tmp292_);
				_g_free0 (_tmp290_);
				_g_free0 (_tmp288_);
				_tmp295_ = function;
				_tmp296_ = function;
				_tmp297_ = vala_ccode_function_get_modifiers (_tmp296_);
				_tmp298_ = _tmp297_;
				vala_ccode_function_set_modifiers (_tmp296_, _tmp298_ | VALA_CCODE_MODIFIERS_STATIC);
				_tmp299_ = ((ValaCCodeBaseModule*) self)->cfile;
				_tmp300_ = function;
				vala_ccode_file_add_function_declaration (_tmp299_, _tmp300_);
			}
		}
	}
	_tmp301_ = m;
	_tmp302_ = vala_symbol_get_comment ((ValaSymbol*) _tmp301_);
	_tmp303_ = _tmp302_;
	if (_tmp303_ != NULL) {
		ValaCCodeFile* _tmp304_ = NULL;
		ValaMethod* _tmp305_ = NULL;
		ValaComment* _tmp306_ = NULL;
		ValaComment* _tmp307_ = NULL;
		const gchar* _tmp308_ = NULL;
		const gchar* _tmp309_ = NULL;
		ValaCCodeComment* _tmp310_ = NULL;
		ValaCCodeComment* _tmp311_ = NULL;
		_tmp304_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp305_ = m;
		_tmp306_ = vala_symbol_get_comment ((ValaSymbol*) _tmp305_);
		_tmp307_ = _tmp306_;
		_tmp308_ = vala_comment_get_content (_tmp307_);
		_tmp309_ = _tmp308_;
		_tmp310_ = vala_ccode_comment_new (_tmp309_);
		_tmp311_ = _tmp310_;
		vala_ccode_file_add_type_member_definition (_tmp304_, (ValaCCodeNode*) _tmp311_);
		_vala_ccode_node_unref0 (_tmp311_);
	}
	_tmp312_ = function;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp312_);
	_tmp314_ = m;
	_tmp315_ = vala_method_get_is_abstract (_tmp314_);
	_tmp316_ = _tmp315_;
	if (!_tmp316_) {
		_tmp313_ = TRUE;
	} else {
		gboolean _tmp317_ = FALSE;
		ValaMethod* _tmp318_ = NULL;
		gboolean _tmp319_ = FALSE;
		gboolean _tmp320_ = FALSE;
		_tmp318_ = m;
		_tmp319_ = vala_method_get_is_abstract (_tmp318_);
		_tmp320_ = _tmp319_;
		if (_tmp320_) {
			ValaTypeSymbol* _tmp321_ = NULL;
			ValaTypeSymbol* _tmp322_ = NULL;
			_tmp321_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
			_tmp322_ = _tmp321_;
			_tmp317_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp322_, VALA_TYPE_CLASS);
		} else {
			_tmp317_ = FALSE;
		}
		_tmp313_ = _tmp317_;
	}
	if (_tmp313_) {
		ValaMethod* _tmp323_ = NULL;
		ValaBlock* _tmp324_ = NULL;
		ValaBlock* _tmp325_ = NULL;
		_tmp323_ = m;
		_tmp324_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp323_);
		_tmp325_ = _tmp324_;
		if (_tmp325_ != NULL) {
			ValaMethod* _tmp326_ = NULL;
			gboolean _tmp327_ = FALSE;
			gboolean _tmp328_ = FALSE;
			ValaMethod* _tmp371_ = NULL;
			gboolean _tmp372_ = FALSE;
			gboolean _tmp373_ = FALSE;
			gboolean _tmp768_ = FALSE;
			gboolean _tmp769_ = FALSE;
			ValaMethod* _tmp770_ = NULL;
			ValaDataType* _tmp771_ = NULL;
			ValaDataType* _tmp772_ = NULL;
			ValaMethod* _tmp796_ = NULL;
			gboolean _tmp1008_ = FALSE;
			ValaCodeContext* _tmp1009_ = NULL;
			ValaCodeContext* _tmp1010_ = NULL;
			ValaMethod* _tmp1011_ = NULL;
			ValaMethod* _tmp1012_ = NULL;
			ValaMethod* _tmp1013_ = NULL;
			_tmp326_ = m;
			_tmp327_ = vala_method_get_coroutine (_tmp326_);
			_tmp328_ = _tmp327_;
			if (_tmp328_) {
				ValaCCodeFunction* _tmp329_ = NULL;
				ValaCCodeFunction* _tmp330_ = NULL;
				ValaCCodeIdentifier* _tmp331_ = NULL;
				ValaCCodeIdentifier* _tmp332_ = NULL;
				ValaCCodeMemberAccess* _tmp333_ = NULL;
				ValaCCodeMemberAccess* _tmp334_ = NULL;
				ValaCCodeFunction* _tmp335_ = NULL;
				ValaCCodeFunction* _tmp336_ = NULL;
				ValaCCodeConstant* _tmp337_ = NULL;
				ValaCCodeConstant* _tmp338_ = NULL;
				ValaCCodeFunction* _tmp339_ = NULL;
				ValaCCodeFunction* _tmp340_ = NULL;
				ValaCCodeFunction* _tmp359_ = NULL;
				ValaCCodeFunction* _tmp360_ = NULL;
				ValaCCodeFunction* _tmp361_ = NULL;
				ValaCCodeFunction* _tmp362_ = NULL;
				ValaCCodeIdentifier* _tmp363_ = NULL;
				ValaCCodeIdentifier* _tmp364_ = NULL;
				ValaCCodeFunctionCall* _tmp365_ = NULL;
				ValaCCodeFunctionCall* _tmp366_ = NULL;
				ValaCCodeFunction* _tmp367_ = NULL;
				ValaCCodeFunction* _tmp368_ = NULL;
				ValaCCodeFunction* _tmp369_ = NULL;
				ValaCCodeFunction* _tmp370_ = NULL;
				_tmp329_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp330_ = _tmp329_;
				_tmp331_ = vala_ccode_identifier_new ("_data_");
				_tmp332_ = _tmp331_;
				_tmp333_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp332_, "_state_");
				_tmp334_ = _tmp333_;
				vala_ccode_function_open_switch (_tmp330_, (ValaCCodeExpression*) _tmp334_);
				_vala_ccode_node_unref0 (_tmp334_);
				_vala_ccode_node_unref0 (_tmp332_);
				_tmp335_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp336_ = _tmp335_;
				_tmp337_ = vala_ccode_constant_new ("0");
				_tmp338_ = _tmp337_;
				vala_ccode_function_add_case (_tmp336_, (ValaCCodeExpression*) _tmp338_);
				_vala_ccode_node_unref0 (_tmp338_);
				_tmp339_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp340_ = _tmp339_;
				vala_ccode_function_add_goto (_tmp340_, "_state_0");
				{
					gint state = 0;
					state = 1;
					{
						gboolean _tmp341_ = FALSE;
						_tmp341_ = TRUE;
						while (TRUE) {
							gint _tmp343_ = 0;
							ValaMethod* _tmp344_ = NULL;
							gint _tmp345_ = 0;
							gint _tmp346_ = 0;
							ValaCCodeFunction* _tmp347_ = NULL;
							ValaCCodeFunction* _tmp348_ = NULL;
							gint _tmp349_ = 0;
							gchar* _tmp350_ = NULL;
							gchar* _tmp351_ = NULL;
							ValaCCodeConstant* _tmp352_ = NULL;
							ValaCCodeConstant* _tmp353_ = NULL;
							ValaCCodeFunction* _tmp354_ = NULL;
							ValaCCodeFunction* _tmp355_ = NULL;
							gint _tmp356_ = 0;
							gchar* _tmp357_ = NULL;
							gchar* _tmp358_ = NULL;
							if (!_tmp341_) {
								gint _tmp342_ = 0;
								_tmp342_ = state;
								state = _tmp342_ + 1;
							}
							_tmp341_ = FALSE;
							_tmp343_ = state;
							_tmp344_ = m;
							_tmp345_ = vala_method_get_yield_count (_tmp344_);
							_tmp346_ = _tmp345_;
							if (!(_tmp343_ <= _tmp346_)) {
								break;
							}
							_tmp347_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
							_tmp348_ = _tmp347_;
							_tmp349_ = state;
							_tmp350_ = g_strdup_printf ("%i", _tmp349_);
							_tmp351_ = _tmp350_;
							_tmp352_ = vala_ccode_constant_new (_tmp351_);
							_tmp353_ = _tmp352_;
							vala_ccode_function_add_case (_tmp348_, (ValaCCodeExpression*) _tmp353_);
							_vala_ccode_node_unref0 (_tmp353_);
							_g_free0 (_tmp351_);
							_tmp354_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
							_tmp355_ = _tmp354_;
							_tmp356_ = state;
							_tmp357_ = g_strdup_printf ("_state_%d", _tmp356_);
							_tmp358_ = _tmp357_;
							vala_ccode_function_add_goto (_tmp355_, _tmp358_);
							_g_free0 (_tmp358_);
						}
					}
				}
				_tmp359_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp360_ = _tmp359_;
				vala_ccode_function_add_default (_tmp360_);
				_tmp361_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp362_ = _tmp361_;
				_tmp363_ = vala_ccode_identifier_new ("g_assert_not_reached");
				_tmp364_ = _tmp363_;
				_tmp365_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp364_);
				_tmp366_ = _tmp365_;
				vala_ccode_function_add_expression (_tmp362_, (ValaCCodeExpression*) _tmp366_);
				_vala_ccode_node_unref0 (_tmp366_);
				_vala_ccode_node_unref0 (_tmp364_);
				_tmp367_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp368_ = _tmp367_;
				vala_ccode_function_close (_tmp368_);
				_tmp369_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp370_ = _tmp369_;
				vala_ccode_function_add_label (_tmp370_, "_state_0");
			}
			_tmp371_ = m;
			_tmp372_ = vala_method_get_closure (_tmp371_);
			_tmp373_ = _tmp372_;
			if (_tmp373_) {
				ValaBlock* closure_block = NULL;
				ValaBlock* _tmp374_ = NULL;
				ValaBlock* _tmp375_ = NULL;
				ValaBlock* _tmp376_ = NULL;
				gint block_id = 0;
				ValaBlock* _tmp377_ = NULL;
				gint _tmp378_ = 0;
				ValaMethod* _tmp418_ = NULL;
				ValaMemberBinding _tmp419_ = 0;
				ValaMemberBinding _tmp420_ = 0;
				_tmp374_ = vala_ccode_base_module_get_current_closure_block ((ValaCCodeBaseModule*) self);
				_tmp375_ = _tmp374_;
				_tmp376_ = _vala_code_node_ref0 (_tmp375_);
				closure_block = _tmp376_;
				_tmp377_ = closure_block;
				_tmp378_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp377_);
				block_id = _tmp378_;
				while (TRUE) {
					ValaBlock* parent_closure_block = NULL;
					ValaBlock* _tmp379_ = NULL;
					ValaSymbol* _tmp380_ = NULL;
					ValaSymbol* _tmp381_ = NULL;
					ValaBlock* _tmp382_ = NULL;
					ValaBlock* _tmp383_ = NULL;
					ValaBlock* _tmp384_ = NULL;
					gint parent_block_id = 0;
					ValaBlock* _tmp385_ = NULL;
					gint _tmp386_ = 0;
					ValaCCodeMemberAccess* parent_data = NULL;
					gint _tmp387_ = 0;
					gchar* _tmp388_ = NULL;
					gchar* _tmp389_ = NULL;
					ValaCCodeIdentifier* _tmp390_ = NULL;
					ValaCCodeIdentifier* _tmp391_ = NULL;
					gint _tmp392_ = 0;
					gchar* _tmp393_ = NULL;
					gchar* _tmp394_ = NULL;
					ValaCCodeMemberAccess* _tmp395_ = NULL;
					ValaCCodeMemberAccess* _tmp396_ = NULL;
					ValaCCodeFunction* _tmp397_ = NULL;
					ValaCCodeFunction* _tmp398_ = NULL;
					gint _tmp399_ = 0;
					gchar* _tmp400_ = NULL;
					gchar* _tmp401_ = NULL;
					gint _tmp402_ = 0;
					gchar* _tmp403_ = NULL;
					gchar* _tmp404_ = NULL;
					ValaCCodeVariableDeclarator* _tmp405_ = NULL;
					ValaCCodeVariableDeclarator* _tmp406_ = NULL;
					ValaCCodeFunction* _tmp407_ = NULL;
					ValaCCodeFunction* _tmp408_ = NULL;
					gint _tmp409_ = 0;
					gchar* _tmp410_ = NULL;
					gchar* _tmp411_ = NULL;
					ValaCCodeIdentifier* _tmp412_ = NULL;
					ValaCCodeIdentifier* _tmp413_ = NULL;
					ValaCCodeMemberAccess* _tmp414_ = NULL;
					ValaBlock* _tmp415_ = NULL;
					ValaBlock* _tmp416_ = NULL;
					gint _tmp417_ = 0;
					_tmp379_ = closure_block;
					_tmp380_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp379_);
					_tmp381_ = _tmp380_;
					_tmp382_ = vala_ccode_base_module_next_closure_block ((ValaCCodeBaseModule*) self, _tmp381_);
					_tmp383_ = _vala_code_node_ref0 (_tmp382_);
					parent_closure_block = _tmp383_;
					_tmp384_ = parent_closure_block;
					if (_tmp384_ == NULL) {
						_vala_code_node_unref0 (parent_closure_block);
						break;
					}
					_tmp385_ = parent_closure_block;
					_tmp386_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp385_);
					parent_block_id = _tmp386_;
					_tmp387_ = block_id;
					_tmp388_ = g_strdup_printf ("_data%d_", _tmp387_);
					_tmp389_ = _tmp388_;
					_tmp390_ = vala_ccode_identifier_new (_tmp389_);
					_tmp391_ = _tmp390_;
					_tmp392_ = parent_block_id;
					_tmp393_ = g_strdup_printf ("_data%d_", _tmp392_);
					_tmp394_ = _tmp393_;
					_tmp395_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp391_, _tmp394_);
					_tmp396_ = _tmp395_;
					_g_free0 (_tmp394_);
					_vala_ccode_node_unref0 (_tmp391_);
					_g_free0 (_tmp389_);
					parent_data = _tmp396_;
					_tmp397_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp398_ = _tmp397_;
					_tmp399_ = parent_block_id;
					_tmp400_ = g_strdup_printf ("Block%dData*", _tmp399_);
					_tmp401_ = _tmp400_;
					_tmp402_ = parent_block_id;
					_tmp403_ = g_strdup_printf ("_data%d_", _tmp402_);
					_tmp404_ = _tmp403_;
					_tmp405_ = vala_ccode_variable_declarator_new (_tmp404_, NULL, NULL);
					_tmp406_ = _tmp405_;
					vala_ccode_function_add_declaration (_tmp398_, _tmp401_, (ValaCCodeDeclarator*) _tmp406_, 0);
					_vala_ccode_node_unref0 (_tmp406_);
					_g_free0 (_tmp404_);
					_g_free0 (_tmp401_);
					_tmp407_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp408_ = _tmp407_;
					_tmp409_ = parent_block_id;
					_tmp410_ = g_strdup_printf ("_data%d_", _tmp409_);
					_tmp411_ = _tmp410_;
					_tmp412_ = vala_ccode_identifier_new (_tmp411_);
					_tmp413_ = _tmp412_;
					_tmp414_ = parent_data;
					vala_ccode_function_add_assignment (_tmp408_, (ValaCCodeExpression*) _tmp413_, (ValaCCodeExpression*) _tmp414_);
					_vala_ccode_node_unref0 (_tmp413_);
					_g_free0 (_tmp411_);
					_tmp415_ = parent_closure_block;
					_tmp416_ = _vala_code_node_ref0 (_tmp415_);
					_vala_code_node_unref0 (closure_block);
					closure_block = _tmp416_;
					_tmp417_ = parent_block_id;
					block_id = _tmp417_;
					_vala_ccode_node_unref0 (parent_data);
					_vala_code_node_unref0 (parent_closure_block);
				}
				_tmp418_ = m;
				_tmp419_ = vala_method_get_binding (_tmp418_);
				_tmp420_ = _tmp419_;
				if (_tmp420_ == VALA_MEMBER_BINDING_INSTANCE) {
					ValaCCodeMemberAccess* cself = NULL;
					gint _tmp421_ = 0;
					gchar* _tmp422_ = NULL;
					gchar* _tmp423_ = NULL;
					ValaCCodeIdentifier* _tmp424_ = NULL;
					ValaCCodeIdentifier* _tmp425_ = NULL;
					ValaCCodeMemberAccess* _tmp426_ = NULL;
					ValaCCodeMemberAccess* _tmp427_ = NULL;
					ValaCCodeFunction* _tmp428_ = NULL;
					ValaCCodeFunction* _tmp429_ = NULL;
					ValaTypeSymbol* _tmp430_ = NULL;
					ValaTypeSymbol* _tmp431_ = NULL;
					ValaDataType* _tmp432_ = NULL;
					ValaDataType* _tmp433_ = NULL;
					gchar* _tmp434_ = NULL;
					gchar* _tmp435_ = NULL;
					ValaCCodeVariableDeclarator* _tmp436_ = NULL;
					ValaCCodeVariableDeclarator* _tmp437_ = NULL;
					ValaCCodeFunction* _tmp438_ = NULL;
					ValaCCodeFunction* _tmp439_ = NULL;
					ValaCCodeIdentifier* _tmp440_ = NULL;
					ValaCCodeIdentifier* _tmp441_ = NULL;
					ValaCCodeMemberAccess* _tmp442_ = NULL;
					_tmp421_ = block_id;
					_tmp422_ = g_strdup_printf ("_data%d_", _tmp421_);
					_tmp423_ = _tmp422_;
					_tmp424_ = vala_ccode_identifier_new (_tmp423_);
					_tmp425_ = _tmp424_;
					_tmp426_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp425_, "self");
					_tmp427_ = _tmp426_;
					_vala_ccode_node_unref0 (_tmp425_);
					_g_free0 (_tmp423_);
					cself = _tmp427_;
					_tmp428_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp429_ = _tmp428_;
					_tmp430_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
					_tmp431_ = _tmp430_;
					_tmp432_ = vala_ccode_base_module_get_data_type_for_symbol (_tmp431_);
					_tmp433_ = _tmp432_;
					_tmp434_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp433_);
					_tmp435_ = _tmp434_;
					_tmp436_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
					_tmp437_ = _tmp436_;
					vala_ccode_function_add_declaration (_tmp429_, _tmp435_, (ValaCCodeDeclarator*) _tmp437_, 0);
					_vala_ccode_node_unref0 (_tmp437_);
					_g_free0 (_tmp435_);
					_vala_code_node_unref0 (_tmp433_);
					_tmp438_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp439_ = _tmp438_;
					_tmp440_ = vala_ccode_identifier_new ("self");
					_tmp441_ = _tmp440_;
					_tmp442_ = cself;
					vala_ccode_function_add_assignment (_tmp439_, (ValaCCodeExpression*) _tmp441_, (ValaCCodeExpression*) _tmp442_);
					_vala_ccode_node_unref0 (_tmp441_);
					_vala_ccode_node_unref0 (cself);
				}
				{
					ValaList* _type_param_list = NULL;
					ValaMethod* _tmp443_ = NULL;
					ValaList* _tmp444_ = NULL;
					gint _type_param_size = 0;
					ValaList* _tmp445_ = NULL;
					gint _tmp446_ = 0;
					gint _tmp447_ = 0;
					gint _type_param_index = 0;
					_tmp443_ = m;
					_tmp444_ = vala_method_get_type_parameters (_tmp443_);
					_type_param_list = _tmp444_;
					_tmp445_ = _type_param_list;
					_tmp446_ = vala_collection_get_size ((ValaCollection*) _tmp445_);
					_tmp447_ = _tmp446_;
					_type_param_size = _tmp447_;
					_type_param_index = -1;
					while (TRUE) {
						gint _tmp448_ = 0;
						gint _tmp449_ = 0;
						gint _tmp450_ = 0;
						ValaTypeParameter* type_param = NULL;
						ValaList* _tmp451_ = NULL;
						gint _tmp452_ = 0;
						gpointer _tmp453_ = NULL;
						gchar* func_name = NULL;
						ValaTypeParameter* _tmp454_ = NULL;
						const gchar* _tmp455_ = NULL;
						const gchar* _tmp456_ = NULL;
						gchar* _tmp457_ = NULL;
						gchar* _tmp458_ = NULL;
						gchar* _tmp459_ = NULL;
						ValaCCodeFunction* _tmp460_ = NULL;
						ValaCCodeFunction* _tmp461_ = NULL;
						const gchar* _tmp462_ = NULL;
						ValaCCodeVariableDeclarator* _tmp463_ = NULL;
						ValaCCodeVariableDeclarator* _tmp464_ = NULL;
						ValaCCodeFunction* _tmp465_ = NULL;
						ValaCCodeFunction* _tmp466_ = NULL;
						const gchar* _tmp467_ = NULL;
						ValaCCodeIdentifier* _tmp468_ = NULL;
						ValaCCodeIdentifier* _tmp469_ = NULL;
						gint _tmp470_ = 0;
						gchar* _tmp471_ = NULL;
						gchar* _tmp472_ = NULL;
						ValaCCodeExpression* _tmp473_ = NULL;
						ValaCCodeExpression* _tmp474_ = NULL;
						const gchar* _tmp475_ = NULL;
						ValaCCodeMemberAccess* _tmp476_ = NULL;
						ValaCCodeMemberAccess* _tmp477_ = NULL;
						ValaTypeParameter* _tmp478_ = NULL;
						const gchar* _tmp479_ = NULL;
						const gchar* _tmp480_ = NULL;
						gchar* _tmp481_ = NULL;
						gchar* _tmp482_ = NULL;
						gchar* _tmp483_ = NULL;
						ValaCCodeFunction* _tmp484_ = NULL;
						ValaCCodeFunction* _tmp485_ = NULL;
						const gchar* _tmp486_ = NULL;
						ValaCCodeVariableDeclarator* _tmp487_ = NULL;
						ValaCCodeVariableDeclarator* _tmp488_ = NULL;
						ValaCCodeFunction* _tmp489_ = NULL;
						ValaCCodeFunction* _tmp490_ = NULL;
						const gchar* _tmp491_ = NULL;
						ValaCCodeIdentifier* _tmp492_ = NULL;
						ValaCCodeIdentifier* _tmp493_ = NULL;
						gint _tmp494_ = 0;
						gchar* _tmp495_ = NULL;
						gchar* _tmp496_ = NULL;
						ValaCCodeExpression* _tmp497_ = NULL;
						ValaCCodeExpression* _tmp498_ = NULL;
						const gchar* _tmp499_ = NULL;
						ValaCCodeMemberAccess* _tmp500_ = NULL;
						ValaCCodeMemberAccess* _tmp501_ = NULL;
						ValaTypeParameter* _tmp502_ = NULL;
						const gchar* _tmp503_ = NULL;
						const gchar* _tmp504_ = NULL;
						gchar* _tmp505_ = NULL;
						gchar* _tmp506_ = NULL;
						gchar* _tmp507_ = NULL;
						ValaCCodeFunction* _tmp508_ = NULL;
						ValaCCodeFunction* _tmp509_ = NULL;
						const gchar* _tmp510_ = NULL;
						ValaCCodeVariableDeclarator* _tmp511_ = NULL;
						ValaCCodeVariableDeclarator* _tmp512_ = NULL;
						ValaCCodeFunction* _tmp513_ = NULL;
						ValaCCodeFunction* _tmp514_ = NULL;
						const gchar* _tmp515_ = NULL;
						ValaCCodeIdentifier* _tmp516_ = NULL;
						ValaCCodeIdentifier* _tmp517_ = NULL;
						gint _tmp518_ = 0;
						gchar* _tmp519_ = NULL;
						gchar* _tmp520_ = NULL;
						ValaCCodeExpression* _tmp521_ = NULL;
						ValaCCodeExpression* _tmp522_ = NULL;
						const gchar* _tmp523_ = NULL;
						ValaCCodeMemberAccess* _tmp524_ = NULL;
						ValaCCodeMemberAccess* _tmp525_ = NULL;
						_tmp448_ = _type_param_index;
						_type_param_index = _tmp448_ + 1;
						_tmp449_ = _type_param_index;
						_tmp450_ = _type_param_size;
						if (!(_tmp449_ < _tmp450_)) {
							break;
						}
						_tmp451_ = _type_param_list;
						_tmp452_ = _type_param_index;
						_tmp453_ = vala_list_get (_tmp451_, _tmp452_);
						type_param = (ValaTypeParameter*) _tmp453_;
						_tmp454_ = type_param;
						_tmp455_ = vala_symbol_get_name ((ValaSymbol*) _tmp454_);
						_tmp456_ = _tmp455_;
						_tmp457_ = g_utf8_strdown (_tmp456_, (gssize) (-1));
						_tmp458_ = _tmp457_;
						_tmp459_ = g_strdup_printf ("%s_type", _tmp458_);
						_g_free0 (func_name);
						func_name = _tmp459_;
						_g_free0 (_tmp458_);
						_tmp460_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp461_ = _tmp460_;
						_tmp462_ = func_name;
						_tmp463_ = vala_ccode_variable_declarator_new (_tmp462_, NULL, NULL);
						_tmp464_ = _tmp463_;
						vala_ccode_function_add_declaration (_tmp461_, "GType", (ValaCCodeDeclarator*) _tmp464_, 0);
						_vala_ccode_node_unref0 (_tmp464_);
						_tmp465_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp466_ = _tmp465_;
						_tmp467_ = func_name;
						_tmp468_ = vala_ccode_identifier_new (_tmp467_);
						_tmp469_ = _tmp468_;
						_tmp470_ = block_id;
						_tmp471_ = g_strdup_printf ("_data%d_", _tmp470_);
						_tmp472_ = _tmp471_;
						_tmp473_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp472_);
						_tmp474_ = _tmp473_;
						_tmp475_ = func_name;
						_tmp476_ = vala_ccode_member_access_new_pointer (_tmp474_, _tmp475_);
						_tmp477_ = _tmp476_;
						vala_ccode_function_add_assignment (_tmp466_, (ValaCCodeExpression*) _tmp469_, (ValaCCodeExpression*) _tmp477_);
						_vala_ccode_node_unref0 (_tmp477_);
						_vala_ccode_node_unref0 (_tmp474_);
						_g_free0 (_tmp472_);
						_vala_ccode_node_unref0 (_tmp469_);
						_tmp478_ = type_param;
						_tmp479_ = vala_symbol_get_name ((ValaSymbol*) _tmp478_);
						_tmp480_ = _tmp479_;
						_tmp481_ = g_utf8_strdown (_tmp480_, (gssize) (-1));
						_tmp482_ = _tmp481_;
						_tmp483_ = g_strdup_printf ("%s_dup_func", _tmp482_);
						_g_free0 (func_name);
						func_name = _tmp483_;
						_g_free0 (_tmp482_);
						_tmp484_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp485_ = _tmp484_;
						_tmp486_ = func_name;
						_tmp487_ = vala_ccode_variable_declarator_new (_tmp486_, NULL, NULL);
						_tmp488_ = _tmp487_;
						vala_ccode_function_add_declaration (_tmp485_, "GBoxedCopyFunc", (ValaCCodeDeclarator*) _tmp488_, 0);
						_vala_ccode_node_unref0 (_tmp488_);
						_tmp489_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp490_ = _tmp489_;
						_tmp491_ = func_name;
						_tmp492_ = vala_ccode_identifier_new (_tmp491_);
						_tmp493_ = _tmp492_;
						_tmp494_ = block_id;
						_tmp495_ = g_strdup_printf ("_data%d_", _tmp494_);
						_tmp496_ = _tmp495_;
						_tmp497_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp496_);
						_tmp498_ = _tmp497_;
						_tmp499_ = func_name;
						_tmp500_ = vala_ccode_member_access_new_pointer (_tmp498_, _tmp499_);
						_tmp501_ = _tmp500_;
						vala_ccode_function_add_assignment (_tmp490_, (ValaCCodeExpression*) _tmp493_, (ValaCCodeExpression*) _tmp501_);
						_vala_ccode_node_unref0 (_tmp501_);
						_vala_ccode_node_unref0 (_tmp498_);
						_g_free0 (_tmp496_);
						_vala_ccode_node_unref0 (_tmp493_);
						_tmp502_ = type_param;
						_tmp503_ = vala_symbol_get_name ((ValaSymbol*) _tmp502_);
						_tmp504_ = _tmp503_;
						_tmp505_ = g_utf8_strdown (_tmp504_, (gssize) (-1));
						_tmp506_ = _tmp505_;
						_tmp507_ = g_strdup_printf ("%s_destroy_func", _tmp506_);
						_g_free0 (func_name);
						func_name = _tmp507_;
						_g_free0 (_tmp506_);
						_tmp508_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp509_ = _tmp508_;
						_tmp510_ = func_name;
						_tmp511_ = vala_ccode_variable_declarator_new (_tmp510_, NULL, NULL);
						_tmp512_ = _tmp511_;
						vala_ccode_function_add_declaration (_tmp509_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp512_, 0);
						_vala_ccode_node_unref0 (_tmp512_);
						_tmp513_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp514_ = _tmp513_;
						_tmp515_ = func_name;
						_tmp516_ = vala_ccode_identifier_new (_tmp515_);
						_tmp517_ = _tmp516_;
						_tmp518_ = block_id;
						_tmp519_ = g_strdup_printf ("_data%d_", _tmp518_);
						_tmp520_ = _tmp519_;
						_tmp521_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp520_);
						_tmp522_ = _tmp521_;
						_tmp523_ = func_name;
						_tmp524_ = vala_ccode_member_access_new_pointer (_tmp522_, _tmp523_);
						_tmp525_ = _tmp524_;
						vala_ccode_function_add_assignment (_tmp514_, (ValaCCodeExpression*) _tmp517_, (ValaCCodeExpression*) _tmp525_);
						_vala_ccode_node_unref0 (_tmp525_);
						_vala_ccode_node_unref0 (_tmp522_);
						_g_free0 (_tmp520_);
						_vala_ccode_node_unref0 (_tmp517_);
						_g_free0 (func_name);
						_vala_code_node_unref0 (type_param);
					}
					_vala_iterable_unref0 (_type_param_list);
				}
				_vala_code_node_unref0 (closure_block);
			} else {
				gboolean _tmp526_ = FALSE;
				ValaMethod* _tmp527_ = NULL;
				ValaSymbol* _tmp528_ = NULL;
				ValaSymbol* _tmp529_ = NULL;
				_tmp527_ = m;
				_tmp528_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp527_);
				_tmp529_ = _tmp528_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp529_, VALA_TYPE_CLASS)) {
					ValaMethod* _tmp530_ = NULL;
					gboolean _tmp531_ = FALSE;
					gboolean _tmp532_ = FALSE;
					_tmp530_ = m;
					_tmp531_ = vala_method_get_coroutine (_tmp530_);
					_tmp532_ = _tmp531_;
					_tmp526_ = !_tmp532_;
				} else {
					_tmp526_ = FALSE;
				}
				if (_tmp526_) {
					ValaClass* cl = NULL;
					ValaMethod* _tmp533_ = NULL;
					ValaSymbol* _tmp534_ = NULL;
					ValaSymbol* _tmp535_ = NULL;
					ValaClass* _tmp536_ = NULL;
					gboolean _tmp537_ = FALSE;
					ValaMethod* _tmp538_ = NULL;
					gboolean _tmp539_ = FALSE;
					gboolean _tmp540_ = FALSE;
					_tmp533_ = m;
					_tmp534_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp533_);
					_tmp535_ = _tmp534_;
					_tmp536_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp535_, VALA_TYPE_CLASS, ValaClass));
					cl = _tmp536_;
					_tmp538_ = m;
					_tmp539_ = vala_method_get_overrides (_tmp538_);
					_tmp540_ = _tmp539_;
					if (_tmp540_) {
						_tmp537_ = TRUE;
					} else {
						gboolean _tmp541_ = FALSE;
						gboolean _tmp542_ = FALSE;
						ValaMethod* _tmp543_ = NULL;
						ValaMethod* _tmp544_ = NULL;
						ValaMethod* _tmp545_ = NULL;
						_tmp543_ = m;
						_tmp544_ = vala_method_get_base_interface_method (_tmp543_);
						_tmp545_ = _tmp544_;
						if (_tmp545_ != NULL) {
							ValaMethod* _tmp546_ = NULL;
							gboolean _tmp547_ = FALSE;
							gboolean _tmp548_ = FALSE;
							_tmp546_ = m;
							_tmp547_ = vala_method_get_is_abstract (_tmp546_);
							_tmp548_ = _tmp547_;
							_tmp542_ = !_tmp548_;
						} else {
							_tmp542_ = FALSE;
						}
						if (_tmp542_) {
							ValaMethod* _tmp549_ = NULL;
							gboolean _tmp550_ = FALSE;
							gboolean _tmp551_ = FALSE;
							_tmp549_ = m;
							_tmp550_ = vala_method_get_is_virtual (_tmp549_);
							_tmp551_ = _tmp550_;
							_tmp541_ = !_tmp551_;
						} else {
							_tmp541_ = FALSE;
						}
						_tmp537_ = _tmp541_;
					}
					if (_tmp537_) {
						ValaMethod* base_method = NULL;
						ValaReferenceType* base_expression_type = NULL;
						ValaMethod* _tmp552_ = NULL;
						gboolean _tmp553_ = FALSE;
						gboolean _tmp554_ = FALSE;
						ValaObjectType* self_target_type = NULL;
						ValaClass* _tmp571_ = NULL;
						ValaObjectType* _tmp572_ = NULL;
						ValaCCodeExpression* cself = NULL;
						ValaReferenceType* _tmp573_ = NULL;
						ValaCCodeIdentifier* _tmp574_ = NULL;
						ValaCCodeIdentifier* _tmp575_ = NULL;
						ValaGLibValue* _tmp576_ = NULL;
						ValaGLibValue* _tmp577_ = NULL;
						ValaObjectType* _tmp578_ = NULL;
						ValaMethod* _tmp579_ = NULL;
						ValaTargetValue* _tmp580_ = NULL;
						ValaTargetValue* _tmp581_ = NULL;
						ValaCCodeExpression* _tmp582_ = NULL;
						ValaCCodeExpression* _tmp583_ = NULL;
						ValaCCodeFunction* _tmp584_ = NULL;
						ValaCCodeFunction* _tmp585_ = NULL;
						ValaClass* _tmp586_ = NULL;
						gchar* _tmp587_ = NULL;
						gchar* _tmp588_ = NULL;
						gchar* _tmp589_ = NULL;
						gchar* _tmp590_ = NULL;
						ValaCCodeVariableDeclarator* _tmp591_ = NULL;
						ValaCCodeVariableDeclarator* _tmp592_ = NULL;
						ValaCCodeFunction* _tmp593_ = NULL;
						ValaCCodeFunction* _tmp594_ = NULL;
						ValaCCodeIdentifier* _tmp595_ = NULL;
						ValaCCodeIdentifier* _tmp596_ = NULL;
						ValaCCodeExpression* _tmp597_ = NULL;
						_tmp552_ = m;
						_tmp553_ = vala_method_get_overrides (_tmp552_);
						_tmp554_ = _tmp553_;
						if (_tmp554_) {
							ValaMethod* _tmp555_ = NULL;
							ValaMethod* _tmp556_ = NULL;
							ValaMethod* _tmp557_ = NULL;
							ValaMethod* _tmp558_ = NULL;
							ValaMethod* _tmp559_ = NULL;
							ValaSymbol* _tmp560_ = NULL;
							ValaSymbol* _tmp561_ = NULL;
							ValaObjectType* _tmp562_ = NULL;
							_tmp555_ = m;
							_tmp556_ = vala_method_get_base_method (_tmp555_);
							_tmp557_ = _tmp556_;
							_tmp558_ = _vala_code_node_ref0 (_tmp557_);
							_vala_code_node_unref0 (base_method);
							base_method = _tmp558_;
							_tmp559_ = base_method;
							_tmp560_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp559_);
							_tmp561_ = _tmp560_;
							_tmp562_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp561_, VALA_TYPE_CLASS, ValaClass));
							_vala_code_node_unref0 (base_expression_type);
							base_expression_type = (ValaReferenceType*) _tmp562_;
						} else {
							ValaMethod* _tmp563_ = NULL;
							ValaMethod* _tmp564_ = NULL;
							ValaMethod* _tmp565_ = NULL;
							ValaMethod* _tmp566_ = NULL;
							ValaMethod* _tmp567_ = NULL;
							ValaSymbol* _tmp568_ = NULL;
							ValaSymbol* _tmp569_ = NULL;
							ValaObjectType* _tmp570_ = NULL;
							_tmp563_ = m;
							_tmp564_ = vala_method_get_base_interface_method (_tmp563_);
							_tmp565_ = _tmp564_;
							_tmp566_ = _vala_code_node_ref0 (_tmp565_);
							_vala_code_node_unref0 (base_method);
							base_method = _tmp566_;
							_tmp567_ = base_method;
							_tmp568_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp567_);
							_tmp569_ = _tmp568_;
							_tmp570_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp569_, VALA_TYPE_INTERFACE, ValaInterface));
							_vala_code_node_unref0 (base_expression_type);
							base_expression_type = (ValaReferenceType*) _tmp570_;
						}
						_tmp571_ = cl;
						_tmp572_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp571_);
						self_target_type = _tmp572_;
						_tmp573_ = base_expression_type;
						_tmp574_ = vala_ccode_identifier_new ("base");
						_tmp575_ = _tmp574_;
						_tmp576_ = vala_glib_value_new ((ValaDataType*) _tmp573_, (ValaCCodeExpression*) _tmp575_, TRUE);
						_tmp577_ = _tmp576_;
						_tmp578_ = self_target_type;
						_tmp579_ = m;
						_tmp580_ = vala_ccode_base_module_transform_value ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp577_, (ValaDataType*) _tmp578_, (ValaCodeNode*) _tmp579_);
						_tmp581_ = _tmp580_;
						_tmp582_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp581_);
						_tmp583_ = _tmp582_;
						_vala_target_value_unref0 (_tmp581_);
						_vala_target_value_unref0 (_tmp577_);
						_vala_ccode_node_unref0 (_tmp575_);
						cself = _tmp583_;
						_tmp584_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp585_ = _tmp584_;
						_tmp586_ = cl;
						_tmp587_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp586_);
						_tmp588_ = _tmp587_;
						_tmp589_ = g_strdup_printf ("%s *", _tmp588_);
						_tmp590_ = _tmp589_;
						_tmp591_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
						_tmp592_ = _tmp591_;
						vala_ccode_function_add_declaration (_tmp585_, _tmp590_, (ValaCCodeDeclarator*) _tmp592_, 0);
						_vala_ccode_node_unref0 (_tmp592_);
						_g_free0 (_tmp590_);
						_g_free0 (_tmp588_);
						_tmp593_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp594_ = _tmp593_;
						_tmp595_ = vala_ccode_identifier_new ("self");
						_tmp596_ = _tmp595_;
						_tmp597_ = cself;
						vala_ccode_function_add_assignment (_tmp594_, (ValaCCodeExpression*) _tmp596_, _tmp597_);
						_vala_ccode_node_unref0 (_tmp596_);
						_vala_ccode_node_unref0 (cself);
						_vala_code_node_unref0 (self_target_type);
						_vala_code_node_unref0 (base_expression_type);
						_vala_code_node_unref0 (base_method);
					} else {
						gboolean _tmp598_ = FALSE;
						gboolean _tmp599_ = FALSE;
						gboolean _tmp600_ = FALSE;
						ValaMethod* _tmp601_ = NULL;
						ValaMemberBinding _tmp602_ = 0;
						ValaMemberBinding _tmp603_ = 0;
						_tmp601_ = m;
						_tmp602_ = vala_method_get_binding (_tmp601_);
						_tmp603_ = _tmp602_;
						if (_tmp603_ == VALA_MEMBER_BINDING_INSTANCE) {
							ValaMethod* _tmp604_ = NULL;
							_tmp604_ = m;
							_tmp600_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp604_, VALA_TYPE_CREATION_METHOD);
						} else {
							_tmp600_ = FALSE;
						}
						if (_tmp600_) {
							ValaMethod* _tmp605_ = NULL;
							ValaMethod* _tmp606_ = NULL;
							ValaMethod* _tmp607_ = NULL;
							_tmp605_ = m;
							_tmp606_ = vala_method_get_base_method (_tmp605_);
							_tmp607_ = _tmp606_;
							_tmp599_ = _tmp607_ == NULL;
						} else {
							_tmp599_ = FALSE;
						}
						if (_tmp599_) {
							ValaMethod* _tmp608_ = NULL;
							ValaMethod* _tmp609_ = NULL;
							ValaMethod* _tmp610_ = NULL;
							_tmp608_ = m;
							_tmp609_ = vala_method_get_base_interface_method (_tmp608_);
							_tmp610_ = _tmp609_;
							_tmp598_ = _tmp610_ == NULL;
						} else {
							_tmp598_ = FALSE;
						}
						if (_tmp598_) {
							ValaMethod* _tmp611_ = NULL;
							ValaDataType* _tmp612_ = NULL;
							ValaClass* _tmp613_ = NULL;
							_tmp611_ = m;
							_tmp612_ = creturn_type;
							_tmp613_ = cl;
							vala_ccode_method_module_create_method_type_check_statement (self, _tmp611_, _tmp612_, (ValaTypeSymbol*) _tmp613_, TRUE, "self");
						}
					}
					_vala_code_node_unref0 (cl);
				}
			}
			{
				ValaList* _param_list = NULL;
				ValaMethod* _tmp614_ = NULL;
				ValaList* _tmp615_ = NULL;
				gint _param_size = 0;
				ValaList* _tmp616_ = NULL;
				gint _tmp617_ = 0;
				gint _tmp618_ = 0;
				gint _param_index = 0;
				_tmp614_ = m;
				_tmp615_ = vala_method_get_parameters (_tmp614_);
				_param_list = _tmp615_;
				_tmp616_ = _param_list;
				_tmp617_ = vala_collection_get_size ((ValaCollection*) _tmp616_);
				_tmp618_ = _tmp617_;
				_param_size = _tmp618_;
				_param_index = -1;
				while (TRUE) {
					gint _tmp619_ = 0;
					gint _tmp620_ = 0;
					gint _tmp621_ = 0;
					ValaParameter* param = NULL;
					ValaList* _tmp622_ = NULL;
					gint _tmp623_ = 0;
					gpointer _tmp624_ = NULL;
					ValaParameter* _tmp625_ = NULL;
					gboolean _tmp626_ = FALSE;
					gboolean _tmp627_ = FALSE;
					ValaParameter* _tmp628_ = NULL;
					ValaParameterDirection _tmp629_ = 0;
					ValaParameterDirection _tmp630_ = 0;
					_tmp619_ = _param_index;
					_param_index = _tmp619_ + 1;
					_tmp620_ = _param_index;
					_tmp621_ = _param_size;
					if (!(_tmp620_ < _tmp621_)) {
						break;
					}
					_tmp622_ = _param_list;
					_tmp623_ = _param_index;
					_tmp624_ = vala_list_get (_tmp622_, _tmp623_);
					param = (ValaParameter*) _tmp624_;
					_tmp625_ = param;
					_tmp626_ = vala_parameter_get_ellipsis (_tmp625_);
					_tmp627_ = _tmp626_;
					if (_tmp627_) {
						_vala_code_node_unref0 (param);
						break;
					}
					_tmp628_ = param;
					_tmp629_ = vala_parameter_get_direction (_tmp628_);
					_tmp630_ = _tmp629_;
					if (_tmp630_ != VALA_PARAMETER_DIRECTION_OUT) {
						ValaTypeSymbol* t = NULL;
						ValaParameter* _tmp631_ = NULL;
						ValaDataType* _tmp632_ = NULL;
						ValaDataType* _tmp633_ = NULL;
						ValaTypeSymbol* _tmp634_ = NULL;
						ValaTypeSymbol* _tmp635_ = NULL;
						ValaTypeSymbol* _tmp636_ = NULL;
						gboolean _tmp637_ = FALSE;
						ValaTypeSymbol* _tmp638_ = NULL;
						_tmp631_ = param;
						_tmp632_ = vala_variable_get_variable_type ((ValaVariable*) _tmp631_);
						_tmp633_ = _tmp632_;
						_tmp634_ = vala_data_type_get_data_type (_tmp633_);
						_tmp635_ = _tmp634_;
						_tmp636_ = _vala_code_node_ref0 (_tmp635_);
						t = _tmp636_;
						_tmp638_ = t;
						if (_tmp638_ != NULL) {
							gboolean _tmp639_ = FALSE;
							ValaTypeSymbol* _tmp640_ = NULL;
							gboolean _tmp641_ = FALSE;
							_tmp640_ = t;
							_tmp641_ = vala_typesymbol_is_reference_type (_tmp640_);
							if (_tmp641_) {
								_tmp639_ = TRUE;
							} else {
								ValaParameter* _tmp642_ = NULL;
								ValaDataType* _tmp643_ = NULL;
								ValaDataType* _tmp644_ = NULL;
								gboolean _tmp645_ = FALSE;
								_tmp642_ = param;
								_tmp643_ = vala_variable_get_variable_type ((ValaVariable*) _tmp642_);
								_tmp644_ = _tmp643_;
								_tmp645_ = vala_data_type_is_real_struct_type (_tmp644_);
								_tmp639_ = _tmp645_;
							}
							_tmp637_ = _tmp639_;
						} else {
							_tmp637_ = FALSE;
						}
						if (_tmp637_) {
							gchar* cname = NULL;
							ValaParameter* _tmp646_ = NULL;
							const gchar* _tmp647_ = NULL;
							const gchar* _tmp648_ = NULL;
							gchar* _tmp649_ = NULL;
							gboolean _tmp650_ = FALSE;
							ValaParameter* _tmp651_ = NULL;
							ValaParameterDirection _tmp652_ = 0;
							ValaParameterDirection _tmp653_ = 0;
							ValaMethod* _tmp660_ = NULL;
							ValaDataType* _tmp661_ = NULL;
							ValaTypeSymbol* _tmp662_ = NULL;
							ValaParameter* _tmp663_ = NULL;
							ValaDataType* _tmp664_ = NULL;
							ValaDataType* _tmp665_ = NULL;
							gboolean _tmp666_ = FALSE;
							gboolean _tmp667_ = FALSE;
							const gchar* _tmp668_ = NULL;
							_tmp646_ = param;
							_tmp647_ = vala_symbol_get_name ((ValaSymbol*) _tmp646_);
							_tmp648_ = _tmp647_;
							_tmp649_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp648_);
							cname = _tmp649_;
							_tmp651_ = param;
							_tmp652_ = vala_parameter_get_direction (_tmp651_);
							_tmp653_ = _tmp652_;
							if (_tmp653_ == VALA_PARAMETER_DIRECTION_REF) {
								ValaParameter* _tmp654_ = NULL;
								ValaDataType* _tmp655_ = NULL;
								ValaDataType* _tmp656_ = NULL;
								gboolean _tmp657_ = FALSE;
								_tmp654_ = param;
								_tmp655_ = vala_variable_get_variable_type ((ValaVariable*) _tmp654_);
								_tmp656_ = _tmp655_;
								_tmp657_ = vala_data_type_is_real_struct_type (_tmp656_);
								_tmp650_ = !_tmp657_;
							} else {
								_tmp650_ = FALSE;
							}
							if (_tmp650_) {
								const gchar* _tmp658_ = NULL;
								gchar* _tmp659_ = NULL;
								_tmp658_ = cname;
								_tmp659_ = g_strconcat ("*", _tmp658_, NULL);
								_g_free0 (cname);
								cname = _tmp659_;
							}
							_tmp660_ = m;
							_tmp661_ = creturn_type;
							_tmp662_ = t;
							_tmp663_ = param;
							_tmp664_ = vala_variable_get_variable_type ((ValaVariable*) _tmp663_);
							_tmp665_ = _tmp664_;
							_tmp666_ = vala_data_type_get_nullable (_tmp665_);
							_tmp667_ = _tmp666_;
							_tmp668_ = cname;
							vala_ccode_method_module_create_method_type_check_statement (self, _tmp660_, _tmp661_, _tmp662_, !_tmp667_, _tmp668_);
							_g_free0 (cname);
						}
						_vala_code_node_unref0 (t);
					} else {
						ValaMethod* _tmp669_ = NULL;
						gboolean _tmp670_ = FALSE;
						gboolean _tmp671_ = FALSE;
						_tmp669_ = m;
						_tmp670_ = vala_method_get_coroutine (_tmp669_);
						_tmp671_ = _tmp670_;
						if (!_tmp671_) {
							ValaCCodeVariableDeclarator* vardecl = NULL;
							ValaParameter* _tmp672_ = NULL;
							const gchar* _tmp673_ = NULL;
							const gchar* _tmp674_ = NULL;
							gchar* _tmp675_ = NULL;
							gchar* _tmp676_ = NULL;
							gchar* _tmp677_ = NULL;
							gchar* _tmp678_ = NULL;
							ValaParameter* _tmp679_ = NULL;
							ValaDataType* _tmp680_ = NULL;
							ValaDataType* _tmp681_ = NULL;
							ValaCCodeExpression* _tmp682_ = NULL;
							ValaCCodeExpression* _tmp683_ = NULL;
							ValaCCodeVariableDeclarator* _tmp684_ = NULL;
							ValaCCodeVariableDeclarator* _tmp685_ = NULL;
							ValaCCodeFunction* _tmp686_ = NULL;
							ValaCCodeFunction* _tmp687_ = NULL;
							ValaParameter* _tmp688_ = NULL;
							ValaDataType* _tmp689_ = NULL;
							ValaDataType* _tmp690_ = NULL;
							gchar* _tmp691_ = NULL;
							gchar* _tmp692_ = NULL;
							ValaCCodeVariableDeclarator* _tmp693_ = NULL;
							ValaParameter* _tmp694_ = NULL;
							ValaDataType* _tmp695_ = NULL;
							ValaDataType* _tmp696_ = NULL;
							_tmp672_ = param;
							_tmp673_ = vala_symbol_get_name ((ValaSymbol*) _tmp672_);
							_tmp674_ = _tmp673_;
							_tmp675_ = g_strconcat ("_vala_", _tmp674_, NULL);
							_tmp676_ = _tmp675_;
							_tmp677_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp676_);
							_tmp678_ = _tmp677_;
							_tmp679_ = param;
							_tmp680_ = vala_variable_get_variable_type ((ValaVariable*) _tmp679_);
							_tmp681_ = _tmp680_;
							_tmp682_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp681_, TRUE);
							_tmp683_ = _tmp682_;
							_tmp684_ = vala_ccode_variable_declarator_new_zero (_tmp678_, _tmp683_, NULL);
							_tmp685_ = _tmp684_;
							_vala_ccode_node_unref0 (_tmp683_);
							_g_free0 (_tmp678_);
							_g_free0 (_tmp676_);
							vardecl = _tmp685_;
							_tmp686_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
							_tmp687_ = _tmp686_;
							_tmp688_ = param;
							_tmp689_ = vala_variable_get_variable_type ((ValaVariable*) _tmp688_);
							_tmp690_ = _tmp689_;
							_tmp691_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp690_);
							_tmp692_ = _tmp691_;
							_tmp693_ = vardecl;
							vala_ccode_function_add_declaration (_tmp687_, _tmp692_, (ValaCCodeDeclarator*) _tmp693_, 0);
							_g_free0 (_tmp692_);
							_tmp694_ = param;
							_tmp695_ = vala_variable_get_variable_type ((ValaVariable*) _tmp694_);
							_tmp696_ = _tmp695_;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp696_, VALA_TYPE_ARRAY_TYPE)) {
								ValaArrayType* array_type = NULL;
								ValaParameter* _tmp697_ = NULL;
								ValaDataType* _tmp698_ = NULL;
								ValaDataType* _tmp699_ = NULL;
								ValaArrayType* _tmp700_ = NULL;
								ValaArrayType* _tmp701_ = NULL;
								gboolean _tmp702_ = FALSE;
								gboolean _tmp703_ = FALSE;
								_tmp697_ = param;
								_tmp698_ = vala_variable_get_variable_type ((ValaVariable*) _tmp697_);
								_tmp699_ = _tmp698_;
								_tmp700_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp699_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
								array_type = _tmp700_;
								_tmp701_ = array_type;
								_tmp702_ = vala_array_type_get_fixed_length (_tmp701_);
								_tmp703_ = _tmp702_;
								if (!_tmp703_) {
									{
										gint dim = 0;
										dim = 1;
										{
											gboolean _tmp704_ = FALSE;
											_tmp704_ = TRUE;
											while (TRUE) {
												gint _tmp706_ = 0;
												ValaArrayType* _tmp707_ = NULL;
												gint _tmp708_ = 0;
												gint _tmp709_ = 0;
												ValaParameter* _tmp710_ = NULL;
												const gchar* _tmp711_ = NULL;
												const gchar* _tmp712_ = NULL;
												gchar* _tmp713_ = NULL;
												gchar* _tmp714_ = NULL;
												gchar* _tmp715_ = NULL;
												gchar* _tmp716_ = NULL;
												gint _tmp717_ = 0;
												gchar* _tmp718_ = NULL;
												gchar* _tmp719_ = NULL;
												ValaCCodeConstant* _tmp720_ = NULL;
												ValaCCodeConstant* _tmp721_ = NULL;
												ValaCCodeVariableDeclarator* _tmp722_ = NULL;
												ValaCCodeFunction* _tmp723_ = NULL;
												ValaCCodeFunction* _tmp724_ = NULL;
												ValaCCodeVariableDeclarator* _tmp725_ = NULL;
												if (!_tmp704_) {
													gint _tmp705_ = 0;
													_tmp705_ = dim;
													dim = _tmp705_ + 1;
												}
												_tmp704_ = FALSE;
												_tmp706_ = dim;
												_tmp707_ = array_type;
												_tmp708_ = vala_array_type_get_rank (_tmp707_);
												_tmp709_ = _tmp708_;
												if (!(_tmp706_ <= _tmp709_)) {
													break;
												}
												_tmp710_ = param;
												_tmp711_ = vala_symbol_get_name ((ValaSymbol*) _tmp710_);
												_tmp712_ = _tmp711_;
												_tmp713_ = g_strconcat ("_vala_", _tmp712_, NULL);
												_tmp714_ = _tmp713_;
												_tmp715_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp714_);
												_tmp716_ = _tmp715_;
												_tmp717_ = dim;
												_tmp718_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp716_, _tmp717_);
												_tmp719_ = _tmp718_;
												_tmp720_ = vala_ccode_constant_new ("0");
												_tmp721_ = _tmp720_;
												_tmp722_ = vala_ccode_variable_declarator_new_zero (_tmp719_, (ValaCCodeExpression*) _tmp721_, NULL);
												_vala_ccode_node_unref0 (vardecl);
												vardecl = _tmp722_;
												_vala_ccode_node_unref0 (_tmp721_);
												_g_free0 (_tmp719_);
												_g_free0 (_tmp716_);
												_g_free0 (_tmp714_);
												_tmp723_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
												_tmp724_ = _tmp723_;
												_tmp725_ = vardecl;
												vala_ccode_function_add_declaration (_tmp724_, "int", (ValaCCodeDeclarator*) _tmp725_, 0);
											}
										}
									}
								}
								_vala_code_node_unref0 (array_type);
							} else {
								ValaParameter* _tmp726_ = NULL;
								ValaDataType* _tmp727_ = NULL;
								ValaDataType* _tmp728_ = NULL;
								_tmp726_ = param;
								_tmp727_ = vala_variable_get_variable_type ((ValaVariable*) _tmp726_);
								_tmp728_ = _tmp727_;
								if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp728_, VALA_TYPE_DELEGATE_TYPE)) {
									ValaDelegateType* deleg_type = NULL;
									ValaParameter* _tmp729_ = NULL;
									ValaDataType* _tmp730_ = NULL;
									ValaDataType* _tmp731_ = NULL;
									ValaDelegateType* _tmp732_ = NULL;
									ValaDelegate* d = NULL;
									ValaDelegateType* _tmp733_ = NULL;
									ValaDelegate* _tmp734_ = NULL;
									ValaDelegate* _tmp735_ = NULL;
									ValaDelegate* _tmp736_ = NULL;
									ValaDelegate* _tmp737_ = NULL;
									gboolean _tmp738_ = FALSE;
									gboolean _tmp739_ = FALSE;
									_tmp729_ = param;
									_tmp730_ = vala_variable_get_variable_type ((ValaVariable*) _tmp729_);
									_tmp731_ = _tmp730_;
									_tmp732_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp731_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
									deleg_type = _tmp732_;
									_tmp733_ = deleg_type;
									_tmp734_ = vala_delegate_type_get_delegate_symbol (_tmp733_);
									_tmp735_ = _tmp734_;
									_tmp736_ = _vala_code_node_ref0 (_tmp735_);
									d = _tmp736_;
									_tmp737_ = d;
									_tmp738_ = vala_delegate_get_has_target (_tmp737_);
									_tmp739_ = _tmp738_;
									if (_tmp739_) {
										ValaParameter* _tmp740_ = NULL;
										gchar* _tmp741_ = NULL;
										gchar* _tmp742_ = NULL;
										gchar* _tmp743_ = NULL;
										gchar* _tmp744_ = NULL;
										ValaCCodeConstant* _tmp745_ = NULL;
										ValaCCodeConstant* _tmp746_ = NULL;
										ValaCCodeVariableDeclarator* _tmp747_ = NULL;
										ValaCCodeFunction* _tmp748_ = NULL;
										ValaCCodeFunction* _tmp749_ = NULL;
										ValaCCodeVariableDeclarator* _tmp750_ = NULL;
										ValaDelegateType* _tmp751_ = NULL;
										gboolean _tmp752_ = FALSE;
										_tmp740_ = param;
										_tmp741_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp740_);
										_tmp742_ = _tmp741_;
										_tmp743_ = g_strconcat ("_vala_", _tmp742_, NULL);
										_tmp744_ = _tmp743_;
										_tmp745_ = vala_ccode_constant_new ("NULL");
										_tmp746_ = _tmp745_;
										_tmp747_ = vala_ccode_variable_declarator_new_zero (_tmp744_, (ValaCCodeExpression*) _tmp746_, NULL);
										_vala_ccode_node_unref0 (vardecl);
										vardecl = _tmp747_;
										_vala_ccode_node_unref0 (_tmp746_);
										_g_free0 (_tmp744_);
										_g_free0 (_tmp742_);
										_tmp748_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
										_tmp749_ = _tmp748_;
										_tmp750_ = vardecl;
										vala_ccode_function_add_declaration (_tmp749_, "void *", (ValaCCodeDeclarator*) _tmp750_, 0);
										_tmp751_ = deleg_type;
										_tmp752_ = vala_data_type_is_disposable ((ValaDataType*) _tmp751_);
										if (_tmp752_) {
											ValaParameter* _tmp753_ = NULL;
											const gchar* _tmp754_ = NULL;
											const gchar* _tmp755_ = NULL;
											gchar* _tmp756_ = NULL;
											gchar* _tmp757_ = NULL;
											gchar* _tmp758_ = NULL;
											gchar* _tmp759_ = NULL;
											gchar* _tmp760_ = NULL;
											gchar* _tmp761_ = NULL;
											ValaCCodeConstant* _tmp762_ = NULL;
											ValaCCodeConstant* _tmp763_ = NULL;
											ValaCCodeVariableDeclarator* _tmp764_ = NULL;
											ValaCCodeFunction* _tmp765_ = NULL;
											ValaCCodeFunction* _tmp766_ = NULL;
											ValaCCodeVariableDeclarator* _tmp767_ = NULL;
											_tmp753_ = param;
											_tmp754_ = vala_symbol_get_name ((ValaSymbol*) _tmp753_);
											_tmp755_ = _tmp754_;
											_tmp756_ = g_strconcat ("_vala_", _tmp755_, NULL);
											_tmp757_ = _tmp756_;
											_tmp758_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp757_);
											_tmp759_ = _tmp758_;
											_tmp760_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp759_);
											_tmp761_ = _tmp760_;
											_tmp762_ = vala_ccode_constant_new ("NULL");
											_tmp763_ = _tmp762_;
											_tmp764_ = vala_ccode_variable_declarator_new_zero (_tmp761_, (ValaCCodeExpression*) _tmp763_, NULL);
											_vala_ccode_node_unref0 (vardecl);
											vardecl = _tmp764_;
											_vala_ccode_node_unref0 (_tmp763_);
											_g_free0 (_tmp761_);
											_g_free0 (_tmp759_);
											_g_free0 (_tmp757_);
											_tmp765_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
											_tmp766_ = _tmp765_;
											_tmp767_ = vardecl;
											vala_ccode_function_add_declaration (_tmp766_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp767_, 0);
										}
									}
									_vala_code_node_unref0 (d);
									_vala_code_node_unref0 (deleg_type);
								}
							}
							_vala_ccode_node_unref0 (vardecl);
						}
					}
					_vala_code_node_unref0 (param);
				}
				_vala_iterable_unref0 (_param_list);
			}
			_tmp770_ = m;
			_tmp771_ = vala_method_get_return_type (_tmp770_);
			_tmp772_ = _tmp771_;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp772_, VALA_TYPE_VOID_TYPE)) {
				ValaMethod* _tmp773_ = NULL;
				ValaDataType* _tmp774_ = NULL;
				ValaDataType* _tmp775_ = NULL;
				gboolean _tmp776_ = FALSE;
				_tmp773_ = m;
				_tmp774_ = vala_method_get_return_type (_tmp773_);
				_tmp775_ = _tmp774_;
				_tmp776_ = vala_data_type_is_real_non_null_struct_type (_tmp775_);
				_tmp769_ = !_tmp776_;
			} else {
				_tmp769_ = FALSE;
			}
			if (_tmp769_) {
				ValaMethod* _tmp777_ = NULL;
				gboolean _tmp778_ = FALSE;
				gboolean _tmp779_ = FALSE;
				_tmp777_ = m;
				_tmp778_ = vala_method_get_coroutine (_tmp777_);
				_tmp779_ = _tmp778_;
				_tmp768_ = !_tmp779_;
			} else {
				_tmp768_ = FALSE;
			}
			if (_tmp768_) {
				ValaCCodeVariableDeclarator* vardecl = NULL;
				ValaMethod* _tmp780_ = NULL;
				ValaDataType* _tmp781_ = NULL;
				ValaDataType* _tmp782_ = NULL;
				ValaCCodeExpression* _tmp783_ = NULL;
				ValaCCodeExpression* _tmp784_ = NULL;
				ValaCCodeVariableDeclarator* _tmp785_ = NULL;
				ValaCCodeVariableDeclarator* _tmp786_ = NULL;
				ValaCCodeVariableDeclarator* _tmp787_ = NULL;
				ValaCCodeFunction* _tmp788_ = NULL;
				ValaCCodeFunction* _tmp789_ = NULL;
				ValaMethod* _tmp790_ = NULL;
				ValaDataType* _tmp791_ = NULL;
				ValaDataType* _tmp792_ = NULL;
				gchar* _tmp793_ = NULL;
				gchar* _tmp794_ = NULL;
				ValaCCodeVariableDeclarator* _tmp795_ = NULL;
				_tmp780_ = m;
				_tmp781_ = vala_method_get_return_type (_tmp780_);
				_tmp782_ = _tmp781_;
				_tmp783_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp782_, TRUE);
				_tmp784_ = _tmp783_;
				_tmp785_ = vala_ccode_variable_declarator_new ("result", _tmp784_, NULL);
				_tmp786_ = _tmp785_;
				_vala_ccode_node_unref0 (_tmp784_);
				vardecl = _tmp786_;
				_tmp787_ = vardecl;
				vala_ccode_variable_declarator_set_init0 (_tmp787_, TRUE);
				_tmp788_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
				_tmp789_ = _tmp788_;
				_tmp790_ = m;
				_tmp791_ = vala_method_get_return_type (_tmp790_);
				_tmp792_ = _tmp791_;
				_tmp793_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp792_);
				_tmp794_ = _tmp793_;
				_tmp795_ = vardecl;
				vala_ccode_function_add_declaration (_tmp789_, _tmp794_, (ValaCCodeDeclarator*) _tmp795_, 0);
				_g_free0 (_tmp794_);
				_vala_ccode_node_unref0 (vardecl);
			}
			_tmp796_ = m;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp796_, VALA_TYPE_CREATION_METHOD)) {
				gboolean _tmp797_ = FALSE;
				_tmp797_ = in_gobject_creation_method;
				if (_tmp797_) {
					ValaMethod* _tmp798_ = NULL;
					gboolean _tmp799_ = FALSE;
					gboolean _tmp800_ = FALSE;
					_tmp798_ = m;
					_tmp799_ = vala_method_get_coroutine (_tmp798_);
					_tmp800_ = _tmp799_;
					if (!_tmp800_) {
						ValaCCodeFunction* _tmp801_ = NULL;
						ValaCCodeFunction* _tmp802_ = NULL;
						ValaTypeSymbol* _tmp803_ = NULL;
						ValaTypeSymbol* _tmp804_ = NULL;
						gchar* _tmp805_ = NULL;
						gchar* _tmp806_ = NULL;
						gchar* _tmp807_ = NULL;
						gchar* _tmp808_ = NULL;
						ValaCCodeConstant* _tmp809_ = NULL;
						ValaCCodeConstant* _tmp810_ = NULL;
						ValaCCodeVariableDeclarator* _tmp811_ = NULL;
						ValaCCodeVariableDeclarator* _tmp812_ = NULL;
						_tmp801_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp802_ = _tmp801_;
						_tmp803_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
						_tmp804_ = _tmp803_;
						_tmp805_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp804_);
						_tmp806_ = _tmp805_;
						_tmp807_ = g_strdup_printf ("%s *", _tmp806_);
						_tmp808_ = _tmp807_;
						_tmp809_ = vala_ccode_constant_new ("NULL");
						_tmp810_ = _tmp809_;
						_tmp811_ = vala_ccode_variable_declarator_new_zero ("self", (ValaCCodeExpression*) _tmp810_, NULL);
						_tmp812_ = _tmp811_;
						vala_ccode_function_add_declaration (_tmp802_, _tmp808_, (ValaCCodeDeclarator*) _tmp812_, 0);
						_vala_ccode_node_unref0 (_tmp812_);
						_vala_ccode_node_unref0 (_tmp810_);
						_g_free0 (_tmp808_);
						_g_free0 (_tmp806_);
					}
				} else {
					ValaMethod* _tmp813_ = NULL;
					gboolean _tmp814_ = FALSE;
					_tmp813_ = m;
					_tmp814_ = vala_ccode_method_module_is_gtypeinstance_creation_method (self, _tmp813_);
					if (_tmp814_) {
						ValaClass* cl = NULL;
						ValaMethod* _tmp815_ = NULL;
						ValaSymbol* _tmp816_ = NULL;
						ValaSymbol* _tmp817_ = NULL;
						ValaClass* _tmp818_ = NULL;
						ValaCCodeFunction* _tmp819_ = NULL;
						ValaCCodeFunction* _tmp820_ = NULL;
						ValaClass* _tmp821_ = NULL;
						gchar* _tmp822_ = NULL;
						gchar* _tmp823_ = NULL;
						gchar* _tmp824_ = NULL;
						gchar* _tmp825_ = NULL;
						ValaCCodeConstant* _tmp826_ = NULL;
						ValaCCodeConstant* _tmp827_ = NULL;
						ValaCCodeVariableDeclarator* _tmp828_ = NULL;
						ValaCCodeVariableDeclarator* _tmp829_ = NULL;
						gboolean _tmp830_ = FALSE;
						ValaClass* _tmp831_ = NULL;
						gboolean _tmp832_ = FALSE;
						_tmp815_ = m;
						_tmp816_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp815_);
						_tmp817_ = _tmp816_;
						_tmp818_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp817_, VALA_TYPE_CLASS, ValaClass));
						cl = _tmp818_;
						_tmp819_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
						_tmp820_ = _tmp819_;
						_tmp821_ = cl;
						_tmp822_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp821_);
						_tmp823_ = _tmp822_;
						_tmp824_ = g_strconcat (_tmp823_, "*", NULL);
						_tmp825_ = _tmp824_;
						_tmp826_ = vala_ccode_constant_new ("NULL");
						_tmp827_ = _tmp826_;
						_tmp828_ = vala_ccode_variable_declarator_new_zero ("self", (ValaCCodeExpression*) _tmp827_, NULL);
						_tmp829_ = _tmp828_;
						vala_ccode_function_add_declaration (_tmp820_, _tmp825_, (ValaCCodeDeclarator*) _tmp829_, 0);
						_vala_ccode_node_unref0 (_tmp829_);
						_vala_ccode_node_unref0 (_tmp827_);
						_g_free0 (_tmp825_);
						_g_free0 (_tmp823_);
						_tmp831_ = cl;
						_tmp832_ = vala_class_is_fundamental (_tmp831_);
						if (_tmp832_) {
							ValaMethod* _tmp833_ = NULL;
							gboolean _tmp834_ = FALSE;
							gboolean _tmp835_ = FALSE;
							_tmp833_ = m;
							_tmp834_ = vala_creation_method_get_chain_up (G_TYPE_CHECK_INSTANCE_CAST (_tmp833_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod));
							_tmp835_ = _tmp834_;
							_tmp830_ = !_tmp835_;
						} else {
							_tmp830_ = FALSE;
						}
						if (_tmp830_) {
							ValaCCodeFunctionCall* ccall = NULL;
							ValaCCodeIdentifier* _tmp836_ = NULL;
							ValaCCodeIdentifier* _tmp837_ = NULL;
							ValaCCodeFunctionCall* _tmp838_ = NULL;
							ValaCCodeFunctionCall* _tmp839_ = NULL;
							ValaCCodeFunctionCall* _tmp840_ = NULL;
							ValaCCodeExpression* _tmp841_ = NULL;
							ValaCCodeExpression* _tmp842_ = NULL;
							ValaCCodeFunction* _tmp843_ = NULL;
							ValaCCodeFunction* _tmp844_ = NULL;
							ValaCCodeExpression* _tmp845_ = NULL;
							ValaCCodeExpression* _tmp846_ = NULL;
							ValaCCodeFunctionCall* _tmp847_ = NULL;
							ValaClass* _tmp848_ = NULL;
							gchar* _tmp849_ = NULL;
							gchar* _tmp850_ = NULL;
							gchar* _tmp851_ = NULL;
							gchar* _tmp852_ = NULL;
							ValaCCodeCastExpression* _tmp853_ = NULL;
							ValaCCodeCastExpression* _tmp854_ = NULL;
							_tmp836_ = vala_ccode_identifier_new ("g_type_create_instance");
							_tmp837_ = _tmp836_;
							_tmp838_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp837_);
							_tmp839_ = _tmp838_;
							_vala_ccode_node_unref0 (_tmp837_);
							ccall = _tmp839_;
							_tmp840_ = ccall;
							_tmp841_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "object_type");
							_tmp842_ = _tmp841_;
							vala_ccode_function_call_add_argument (_tmp840_, _tmp842_);
							_vala_ccode_node_unref0 (_tmp842_);
							_tmp843_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
							_tmp844_ = _tmp843_;
							_tmp845_ = vala_ccode_base_module_get_this_cexpression ((ValaCCodeBaseModule*) self);
							_tmp846_ = _tmp845_;
							_tmp847_ = ccall;
							_tmp848_ = cl;
							_tmp849_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp848_);
							_tmp850_ = _tmp849_;
							_tmp851_ = g_strconcat (_tmp850_, "*", NULL);
							_tmp852_ = _tmp851_;
							_tmp853_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp847_, _tmp852_);
							_tmp854_ = _tmp853_;
							vala_ccode_function_add_assignment (_tmp844_, _tmp846_, (ValaCCodeExpression*) _tmp854_);
							_vala_ccode_node_unref0 (_tmp854_);
							_g_free0 (_tmp852_);
							_g_free0 (_tmp850_);
							_vala_ccode_node_unref0 (_tmp846_);
							{
								ValaList* _type_param_list = NULL;
								ValaClass* _tmp855_ = NULL;
								ValaClass* _tmp856_ = NULL;
								ValaList* _tmp857_ = NULL;
								gint _type_param_size = 0;
								ValaList* _tmp858_ = NULL;
								gint _tmp859_ = 0;
								gint _tmp860_ = 0;
								gint _type_param_index = 0;
								_tmp855_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
								_tmp856_ = _tmp855_;
								_tmp857_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp856_);
								_type_param_list = _tmp857_;
								_tmp858_ = _type_param_list;
								_tmp859_ = vala_collection_get_size ((ValaCollection*) _tmp858_);
								_tmp860_ = _tmp859_;
								_type_param_size = _tmp860_;
								_type_param_index = -1;
								while (TRUE) {
									gint _tmp861_ = 0;
									gint _tmp862_ = 0;
									gint _tmp863_ = 0;
									ValaTypeParameter* type_param = NULL;
									ValaList* _tmp864_ = NULL;
									gint _tmp865_ = 0;
									gpointer _tmp866_ = NULL;
									ValaCCodeIdentifier* param_name = NULL;
									ValaCCodeAssignment* assign = NULL;
									ValaCCodeMemberAccess* priv_access = NULL;
									ValaCCodeIdentifier* _tmp867_ = NULL;
									ValaCCodeIdentifier* _tmp868_ = NULL;
									ValaCCodeMemberAccess* _tmp869_ = NULL;
									ValaCCodeMemberAccess* _tmp870_ = NULL;
									ValaTypeParameter* _tmp871_ = NULL;
									const gchar* _tmp872_ = NULL;
									const gchar* _tmp873_ = NULL;
									gchar* _tmp874_ = NULL;
									gchar* _tmp875_ = NULL;
									gchar* _tmp876_ = NULL;
									gchar* _tmp877_ = NULL;
									ValaCCodeIdentifier* _tmp878_ = NULL;
									ValaCCodeMemberAccess* _tmp879_ = NULL;
									ValaCCodeIdentifier* _tmp880_ = NULL;
									const gchar* _tmp881_ = NULL;
									const gchar* _tmp882_ = NULL;
									ValaCCodeMemberAccess* _tmp883_ = NULL;
									ValaCCodeMemberAccess* _tmp884_ = NULL;
									ValaCCodeIdentifier* _tmp885_ = NULL;
									ValaCCodeAssignment* _tmp886_ = NULL;
									ValaCCodeFunction* _tmp887_ = NULL;
									ValaCCodeFunction* _tmp888_ = NULL;
									ValaCCodeAssignment* _tmp889_ = NULL;
									ValaTypeParameter* _tmp890_ = NULL;
									const gchar* _tmp891_ = NULL;
									const gchar* _tmp892_ = NULL;
									gchar* _tmp893_ = NULL;
									gchar* _tmp894_ = NULL;
									gchar* _tmp895_ = NULL;
									gchar* _tmp896_ = NULL;
									ValaCCodeIdentifier* _tmp897_ = NULL;
									ValaCCodeMemberAccess* _tmp898_ = NULL;
									ValaCCodeIdentifier* _tmp899_ = NULL;
									const gchar* _tmp900_ = NULL;
									const gchar* _tmp901_ = NULL;
									ValaCCodeMemberAccess* _tmp902_ = NULL;
									ValaCCodeMemberAccess* _tmp903_ = NULL;
									ValaCCodeIdentifier* _tmp904_ = NULL;
									ValaCCodeAssignment* _tmp905_ = NULL;
									ValaCCodeFunction* _tmp906_ = NULL;
									ValaCCodeFunction* _tmp907_ = NULL;
									ValaCCodeAssignment* _tmp908_ = NULL;
									ValaTypeParameter* _tmp909_ = NULL;
									const gchar* _tmp910_ = NULL;
									const gchar* _tmp911_ = NULL;
									gchar* _tmp912_ = NULL;
									gchar* _tmp913_ = NULL;
									gchar* _tmp914_ = NULL;
									gchar* _tmp915_ = NULL;
									ValaCCodeIdentifier* _tmp916_ = NULL;
									ValaCCodeMemberAccess* _tmp917_ = NULL;
									ValaCCodeIdentifier* _tmp918_ = NULL;
									const gchar* _tmp919_ = NULL;
									const gchar* _tmp920_ = NULL;
									ValaCCodeMemberAccess* _tmp921_ = NULL;
									ValaCCodeMemberAccess* _tmp922_ = NULL;
									ValaCCodeIdentifier* _tmp923_ = NULL;
									ValaCCodeAssignment* _tmp924_ = NULL;
									ValaCCodeFunction* _tmp925_ = NULL;
									ValaCCodeFunction* _tmp926_ = NULL;
									ValaCCodeAssignment* _tmp927_ = NULL;
									_tmp861_ = _type_param_index;
									_type_param_index = _tmp861_ + 1;
									_tmp862_ = _type_param_index;
									_tmp863_ = _type_param_size;
									if (!(_tmp862_ < _tmp863_)) {
										break;
									}
									_tmp864_ = _type_param_list;
									_tmp865_ = _type_param_index;
									_tmp866_ = vala_list_get (_tmp864_, _tmp865_);
									type_param = (ValaTypeParameter*) _tmp866_;
									_tmp867_ = vala_ccode_identifier_new ("self");
									_tmp868_ = _tmp867_;
									_tmp869_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp868_, "priv");
									_tmp870_ = _tmp869_;
									_vala_ccode_node_unref0 (_tmp868_);
									priv_access = _tmp870_;
									_tmp871_ = type_param;
									_tmp872_ = vala_symbol_get_name ((ValaSymbol*) _tmp871_);
									_tmp873_ = _tmp872_;
									_tmp874_ = g_utf8_strdown (_tmp873_, (gssize) (-1));
									_tmp875_ = _tmp874_;
									_tmp876_ = g_strdup_printf ("%s_type", _tmp875_);
									_tmp877_ = _tmp876_;
									_tmp878_ = vala_ccode_identifier_new (_tmp877_);
									_vala_ccode_node_unref0 (param_name);
									param_name = _tmp878_;
									_g_free0 (_tmp877_);
									_g_free0 (_tmp875_);
									_tmp879_ = priv_access;
									_tmp880_ = param_name;
									_tmp881_ = vala_ccode_identifier_get_name (_tmp880_);
									_tmp882_ = _tmp881_;
									_tmp883_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp879_, _tmp882_);
									_tmp884_ = _tmp883_;
									_tmp885_ = param_name;
									_tmp886_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp884_, (ValaCCodeExpression*) _tmp885_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
									_vala_ccode_node_unref0 (assign);
									assign = _tmp886_;
									_vala_ccode_node_unref0 (_tmp884_);
									_tmp887_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
									_tmp888_ = _tmp887_;
									_tmp889_ = assign;
									vala_ccode_function_add_expression (_tmp888_, (ValaCCodeExpression*) _tmp889_);
									_tmp890_ = type_param;
									_tmp891_ = vala_symbol_get_name ((ValaSymbol*) _tmp890_);
									_tmp892_ = _tmp891_;
									_tmp893_ = g_utf8_strdown (_tmp892_, (gssize) (-1));
									_tmp894_ = _tmp893_;
									_tmp895_ = g_strdup_printf ("%s_dup_func", _tmp894_);
									_tmp896_ = _tmp895_;
									_tmp897_ = vala_ccode_identifier_new (_tmp896_);
									_vala_ccode_node_unref0 (param_name);
									param_name = _tmp897_;
									_g_free0 (_tmp896_);
									_g_free0 (_tmp894_);
									_tmp898_ = priv_access;
									_tmp899_ = param_name;
									_tmp900_ = vala_ccode_identifier_get_name (_tmp899_);
									_tmp901_ = _tmp900_;
									_tmp902_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp898_, _tmp901_);
									_tmp903_ = _tmp902_;
									_tmp904_ = param_name;
									_tmp905_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp903_, (ValaCCodeExpression*) _tmp904_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
									_vala_ccode_node_unref0 (assign);
									assign = _tmp905_;
									_vala_ccode_node_unref0 (_tmp903_);
									_tmp906_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
									_tmp907_ = _tmp906_;
									_tmp908_ = assign;
									vala_ccode_function_add_expression (_tmp907_, (ValaCCodeExpression*) _tmp908_);
									_tmp909_ = type_param;
									_tmp910_ = vala_symbol_get_name ((ValaSymbol*) _tmp909_);
									_tmp911_ = _tmp910_;
									_tmp912_ = g_utf8_strdown (_tmp911_, (gssize) (-1));
									_tmp913_ = _tmp912_;
									_tmp914_ = g_strdup_printf ("%s_destroy_func", _tmp913_);
									_tmp915_ = _tmp914_;
									_tmp916_ = vala_ccode_identifier_new (_tmp915_);
									_vala_ccode_node_unref0 (param_name);
									param_name = _tmp916_;
									_g_free0 (_tmp915_);
									_g_free0 (_tmp913_);
									_tmp917_ = priv_access;
									_tmp918_ = param_name;
									_tmp919_ = vala_ccode_identifier_get_name (_tmp918_);
									_tmp920_ = _tmp919_;
									_tmp921_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp917_, _tmp920_);
									_tmp922_ = _tmp921_;
									_tmp923_ = param_name;
									_tmp924_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp922_, (ValaCCodeExpression*) _tmp923_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
									_vala_ccode_node_unref0 (assign);
									assign = _tmp924_;
									_vala_ccode_node_unref0 (_tmp922_);
									_tmp925_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
									_tmp926_ = _tmp925_;
									_tmp927_ = assign;
									vala_ccode_function_add_expression (_tmp926_, (ValaCCodeExpression*) _tmp927_);
									_vala_ccode_node_unref0 (priv_access);
									_vala_ccode_node_unref0 (assign);
									_vala_ccode_node_unref0 (param_name);
									_vala_code_node_unref0 (type_param);
								}
								_vala_iterable_unref0 (_type_param_list);
							}
							_vala_ccode_node_unref0 (ccall);
						}
						_vala_code_node_unref0 (cl);
					} else {
						ValaTypeSymbol* _tmp928_ = NULL;
						ValaTypeSymbol* _tmp929_ = NULL;
						_tmp928_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
						_tmp929_ = _tmp928_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp929_, VALA_TYPE_CLASS)) {
							ValaClass* cl = NULL;
							ValaMethod* _tmp930_ = NULL;
							ValaSymbol* _tmp931_ = NULL;
							ValaSymbol* _tmp932_ = NULL;
							ValaClass* _tmp933_ = NULL;
							ValaMethod* _tmp934_ = NULL;
							gboolean _tmp935_ = FALSE;
							gboolean _tmp936_ = FALSE;
							ValaMethod* _tmp946_ = NULL;
							gboolean _tmp947_ = FALSE;
							gboolean _tmp948_ = FALSE;
							ValaClass* _tmp964_ = NULL;
							ValaClass* _tmp965_ = NULL;
							ValaClass* _tmp966_ = NULL;
							_tmp930_ = m;
							_tmp931_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp930_);
							_tmp932_ = _tmp931_;
							_tmp933_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp932_, VALA_TYPE_CLASS, ValaClass));
							cl = _tmp933_;
							_tmp934_ = m;
							_tmp935_ = vala_method_get_coroutine (_tmp934_);
							_tmp936_ = _tmp935_;
							if (!_tmp936_) {
								ValaCCodeFunction* _tmp937_ = NULL;
								ValaCCodeFunction* _tmp938_ = NULL;
								ValaClass* _tmp939_ = NULL;
								gchar* _tmp940_ = NULL;
								gchar* _tmp941_ = NULL;
								gchar* _tmp942_ = NULL;
								gchar* _tmp943_ = NULL;
								ValaCCodeVariableDeclarator* _tmp944_ = NULL;
								ValaCCodeVariableDeclarator* _tmp945_ = NULL;
								_tmp937_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
								_tmp938_ = _tmp937_;
								_tmp939_ = cl;
								_tmp940_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp939_);
								_tmp941_ = _tmp940_;
								_tmp942_ = g_strconcat (_tmp941_, "*", NULL);
								_tmp943_ = _tmp942_;
								_tmp944_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
								_tmp945_ = _tmp944_;
								vala_ccode_function_add_declaration (_tmp938_, _tmp943_, (ValaCCodeDeclarator*) _tmp945_, 0);
								_vala_ccode_node_unref0 (_tmp945_);
								_g_free0 (_tmp943_);
								_g_free0 (_tmp941_);
							}
							_tmp946_ = m;
							_tmp947_ = vala_creation_method_get_chain_up (G_TYPE_CHECK_INSTANCE_CAST (_tmp946_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod));
							_tmp948_ = _tmp947_;
							if (!_tmp948_) {
								ValaCCodeFunctionCall* ccall = NULL;
								ValaCCodeIdentifier* _tmp949_ = NULL;
								ValaCCodeIdentifier* _tmp950_ = NULL;
								ValaCCodeFunctionCall* _tmp951_ = NULL;
								ValaCCodeFunctionCall* _tmp952_ = NULL;
								ValaCCodeFunctionCall* _tmp953_ = NULL;
								ValaClass* _tmp954_ = NULL;
								gchar* _tmp955_ = NULL;
								gchar* _tmp956_ = NULL;
								ValaCCodeIdentifier* _tmp957_ = NULL;
								ValaCCodeIdentifier* _tmp958_ = NULL;
								ValaCCodeFunction* _tmp959_ = NULL;
								ValaCCodeFunction* _tmp960_ = NULL;
								ValaCCodeExpression* _tmp961_ = NULL;
								ValaCCodeExpression* _tmp962_ = NULL;
								ValaCCodeFunctionCall* _tmp963_ = NULL;
								_tmp949_ = vala_ccode_identifier_new ("g_slice_new0");
								_tmp950_ = _tmp949_;
								_tmp951_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp950_);
								_tmp952_ = _tmp951_;
								_vala_ccode_node_unref0 (_tmp950_);
								ccall = _tmp952_;
								_tmp953_ = ccall;
								_tmp954_ = cl;
								_tmp955_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp954_);
								_tmp956_ = _tmp955_;
								_tmp957_ = vala_ccode_identifier_new (_tmp956_);
								_tmp958_ = _tmp957_;
								vala_ccode_function_call_add_argument (_tmp953_, (ValaCCodeExpression*) _tmp958_);
								_vala_ccode_node_unref0 (_tmp958_);
								_g_free0 (_tmp956_);
								_tmp959_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
								_tmp960_ = _tmp959_;
								_tmp961_ = vala_ccode_base_module_get_this_cexpression ((ValaCCodeBaseModule*) self);
								_tmp962_ = _tmp961_;
								_tmp963_ = ccall;
								vala_ccode_function_add_assignment (_tmp960_, _tmp962_, (ValaCCodeExpression*) _tmp963_);
								_vala_ccode_node_unref0 (_tmp962_);
								_vala_ccode_node_unref0 (ccall);
							}
							_tmp964_ = cl;
							_tmp965_ = vala_class_get_base_class (_tmp964_);
							_tmp966_ = _tmp965_;
							if (_tmp966_ == NULL) {
								ValaCCodeFunctionCall* cinitcall = NULL;
								ValaClass* _tmp967_ = NULL;
								gchar* _tmp968_ = NULL;
								gchar* _tmp969_ = NULL;
								gchar* _tmp970_ = NULL;
								gchar* _tmp971_ = NULL;
								ValaCCodeIdentifier* _tmp972_ = NULL;
								ValaCCodeIdentifier* _tmp973_ = NULL;
								ValaCCodeFunctionCall* _tmp974_ = NULL;
								ValaCCodeFunctionCall* _tmp975_ = NULL;
								ValaCCodeFunctionCall* _tmp976_ = NULL;
								ValaCCodeExpression* _tmp977_ = NULL;
								ValaCCodeExpression* _tmp978_ = NULL;
								ValaCCodeFunction* _tmp979_ = NULL;
								ValaCCodeFunction* _tmp980_ = NULL;
								ValaCCodeFunctionCall* _tmp981_ = NULL;
								_tmp967_ = cl;
								_tmp968_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp967_, NULL);
								_tmp969_ = _tmp968_;
								_tmp970_ = g_strdup_printf ("%s_instance_init", _tmp969_);
								_tmp971_ = _tmp970_;
								_tmp972_ = vala_ccode_identifier_new (_tmp971_);
								_tmp973_ = _tmp972_;
								_tmp974_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp973_);
								_tmp975_ = _tmp974_;
								_vala_ccode_node_unref0 (_tmp973_);
								_g_free0 (_tmp971_);
								_g_free0 (_tmp969_);
								cinitcall = _tmp975_;
								_tmp976_ = cinitcall;
								_tmp977_ = vala_ccode_base_module_get_this_cexpression ((ValaCCodeBaseModule*) self);
								_tmp978_ = _tmp977_;
								vala_ccode_function_call_add_argument (_tmp976_, _tmp978_);
								_vala_ccode_node_unref0 (_tmp978_);
								_tmp979_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
								_tmp980_ = _tmp979_;
								_tmp981_ = cinitcall;
								vala_ccode_function_add_expression (_tmp980_, (ValaCCodeExpression*) _tmp981_);
								_vala_ccode_node_unref0 (cinitcall);
							}
							_vala_code_node_unref0 (cl);
						} else {
							ValaStruct* st = NULL;
							ValaMethod* _tmp982_ = NULL;
							ValaSymbol* _tmp983_ = NULL;
							ValaSymbol* _tmp984_ = NULL;
							ValaStruct* _tmp985_ = NULL;
							ValaCCodeFile* _tmp986_ = NULL;
							ValaCCodeFunctionCall* czero = NULL;
							ValaCCodeIdentifier* _tmp987_ = NULL;
							ValaCCodeIdentifier* _tmp988_ = NULL;
							ValaCCodeFunctionCall* _tmp989_ = NULL;
							ValaCCodeFunctionCall* _tmp990_ = NULL;
							ValaCCodeFunctionCall* _tmp991_ = NULL;
							ValaCCodeIdentifier* _tmp992_ = NULL;
							ValaCCodeIdentifier* _tmp993_ = NULL;
							ValaCCodeFunctionCall* _tmp994_ = NULL;
							ValaCCodeConstant* _tmp995_ = NULL;
							ValaCCodeConstant* _tmp996_ = NULL;
							ValaCCodeFunctionCall* _tmp997_ = NULL;
							ValaStruct* _tmp998_ = NULL;
							gchar* _tmp999_ = NULL;
							gchar* _tmp1000_ = NULL;
							gchar* _tmp1001_ = NULL;
							gchar* _tmp1002_ = NULL;
							ValaCCodeIdentifier* _tmp1003_ = NULL;
							ValaCCodeIdentifier* _tmp1004_ = NULL;
							ValaCCodeFunction* _tmp1005_ = NULL;
							ValaCCodeFunction* _tmp1006_ = NULL;
							ValaCCodeFunctionCall* _tmp1007_ = NULL;
							_tmp982_ = m;
							_tmp983_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp982_);
							_tmp984_ = _tmp983_;
							_tmp985_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp984_, VALA_TYPE_STRUCT, ValaStruct));
							st = _tmp985_;
							_tmp986_ = ((ValaCCodeBaseModule*) self)->cfile;
							vala_ccode_file_add_include (_tmp986_, "string.h", FALSE);
							_tmp987_ = vala_ccode_identifier_new ("memset");
							_tmp988_ = _tmp987_;
							_tmp989_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp988_);
							_tmp990_ = _tmp989_;
							_vala_ccode_node_unref0 (_tmp988_);
							czero = _tmp990_;
							_tmp991_ = czero;
							_tmp992_ = vala_ccode_identifier_new ("self");
							_tmp993_ = _tmp992_;
							vala_ccode_function_call_add_argument (_tmp991_, (ValaCCodeExpression*) _tmp993_);
							_vala_ccode_node_unref0 (_tmp993_);
							_tmp994_ = czero;
							_tmp995_ = vala_ccode_constant_new ("0");
							_tmp996_ = _tmp995_;
							vala_ccode_function_call_add_argument (_tmp994_, (ValaCCodeExpression*) _tmp996_);
							_vala_ccode_node_unref0 (_tmp996_);
							_tmp997_ = czero;
							_tmp998_ = st;
							_tmp999_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp998_);
							_tmp1000_ = _tmp999_;
							_tmp1001_ = g_strdup_printf ("sizeof (%s)", _tmp1000_);
							_tmp1002_ = _tmp1001_;
							_tmp1003_ = vala_ccode_identifier_new (_tmp1002_);
							_tmp1004_ = _tmp1003_;
							vala_ccode_function_call_add_argument (_tmp997_, (ValaCCodeExpression*) _tmp1004_);
							_vala_ccode_node_unref0 (_tmp1004_);
							_g_free0 (_tmp1002_);
							_g_free0 (_tmp1000_);
							_tmp1005_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
							_tmp1006_ = _tmp1005_;
							_tmp1007_ = czero;
							vala_ccode_function_add_expression (_tmp1006_, (ValaCCodeExpression*) _tmp1007_);
							_vala_ccode_node_unref0 (czero);
							_vala_code_node_unref0 (st);
						}
					}
				}
			}
			_tmp1009_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
			_tmp1010_ = _tmp1009_;
			_tmp1011_ = vala_code_context_get_module_init_method (_tmp1010_);
			_tmp1012_ = _tmp1011_;
			_tmp1013_ = m;
			if (_tmp1012_ == _tmp1013_) {
				gboolean _tmp1014_ = FALSE;
				_tmp1014_ = ((ValaCCodeBaseModule*) self)->in_plugin;
				_tmp1008_ = _tmp1014_;
			} else {
				_tmp1008_ = FALSE;
			}
			if (_tmp1008_) {
				ValaCodeContext* _tmp1015_ = NULL;
				ValaCodeContext* _tmp1016_ = NULL;
				ValaNamespace* _tmp1017_ = NULL;
				ValaNamespace* _tmp1018_ = NULL;
				GHashFunc _tmp1019_ = NULL;
				GEqualFunc _tmp1020_ = NULL;
				ValaHashSet* _tmp1021_ = NULL;
				ValaHashSet* _tmp1022_ = NULL;
				_tmp1015_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
				_tmp1016_ = _tmp1015_;
				_tmp1017_ = vala_code_context_get_root (_tmp1016_);
				_tmp1018_ = _tmp1017_;
				_tmp1019_ = g_direct_hash;
				_tmp1020_ = g_direct_equal;
				_tmp1021_ = vala_hash_set_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, _tmp1019_, _tmp1020_);
				_tmp1022_ = _tmp1021_;
				vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp1018_, (ValaSet*) _tmp1022_);
				_vala_iterable_unref0 (_tmp1022_);
			}
			{
				ValaList* _precondition_list = NULL;
				ValaMethod* _tmp1023_ = NULL;
				ValaList* _tmp1024_ = NULL;
				gint _precondition_size = 0;
				ValaList* _tmp1025_ = NULL;
				gint _tmp1026_ = 0;
				gint _tmp1027_ = 0;
				gint _precondition_index = 0;
				_tmp1023_ = m;
				_tmp1024_ = vala_method_get_preconditions (_tmp1023_);
				_precondition_list = _tmp1024_;
				_tmp1025_ = _precondition_list;
				_tmp1026_ = vala_collection_get_size ((ValaCollection*) _tmp1025_);
				_tmp1027_ = _tmp1026_;
				_precondition_size = _tmp1027_;
				_precondition_index = -1;
				while (TRUE) {
					gint _tmp1028_ = 0;
					gint _tmp1029_ = 0;
					gint _tmp1030_ = 0;
					ValaExpression* precondition = NULL;
					ValaList* _tmp1031_ = NULL;
					gint _tmp1032_ = 0;
					gpointer _tmp1033_ = NULL;
					ValaMethod* _tmp1034_ = NULL;
					ValaDataType* _tmp1035_ = NULL;
					ValaExpression* _tmp1036_ = NULL;
					_tmp1028_ = _precondition_index;
					_precondition_index = _tmp1028_ + 1;
					_tmp1029_ = _precondition_index;
					_tmp1030_ = _precondition_size;
					if (!(_tmp1029_ < _tmp1030_)) {
						break;
					}
					_tmp1031_ = _precondition_list;
					_tmp1032_ = _precondition_index;
					_tmp1033_ = vala_list_get (_tmp1031_, _tmp1032_);
					precondition = (ValaExpression*) _tmp1033_;
					_tmp1034_ = m;
					_tmp1035_ = creturn_type;
					_tmp1036_ = precondition;
					vala_ccode_method_module_create_precondition_statement (self, (ValaCodeNode*) _tmp1034_, _tmp1035_, _tmp1036_);
					_vala_code_node_unref0 (precondition);
				}
				_vala_iterable_unref0 (_precondition_list);
			}
		}
	}
	_tmp1037_ = profile;
	if (_tmp1037_) {
		gchar* prefix = NULL;
		const gchar* _tmp1038_ = NULL;
		gchar* _tmp1039_ = NULL;
		ValaCCodeIdentifier* level = NULL;
		const gchar* _tmp1040_ = NULL;
		gchar* _tmp1041_ = NULL;
		gchar* _tmp1042_ = NULL;
		ValaCCodeIdentifier* _tmp1043_ = NULL;
		ValaCCodeIdentifier* _tmp1044_ = NULL;
		ValaCCodeFunction* _tmp1045_ = NULL;
		ValaCCodeFunction* _tmp1046_ = NULL;
		ValaCCodeIdentifier* _tmp1047_ = NULL;
		ValaCCodeUnaryExpression* _tmp1048_ = NULL;
		ValaCCodeUnaryExpression* _tmp1049_ = NULL;
		ValaCCodeUnaryExpression* _tmp1050_ = NULL;
		ValaCCodeUnaryExpression* _tmp1051_ = NULL;
		ValaCCodeIdentifier* counter = NULL;
		const gchar* _tmp1052_ = NULL;
		gchar* _tmp1053_ = NULL;
		gchar* _tmp1054_ = NULL;
		ValaCCodeIdentifier* _tmp1055_ = NULL;
		ValaCCodeIdentifier* _tmp1056_ = NULL;
		ValaCCodeFunction* _tmp1057_ = NULL;
		ValaCCodeFunction* _tmp1058_ = NULL;
		ValaCCodeIdentifier* _tmp1059_ = NULL;
		ValaCCodeUnaryExpression* _tmp1060_ = NULL;
		ValaCCodeUnaryExpression* _tmp1061_ = NULL;
		ValaCCodeIdentifier* timer = NULL;
		const gchar* _tmp1062_ = NULL;
		gchar* _tmp1063_ = NULL;
		gchar* _tmp1064_ = NULL;
		ValaCCodeIdentifier* _tmp1065_ = NULL;
		ValaCCodeIdentifier* _tmp1066_ = NULL;
		ValaCCodeFunctionCall* cont_call = NULL;
		ValaCCodeIdentifier* _tmp1067_ = NULL;
		ValaCCodeIdentifier* _tmp1068_ = NULL;
		ValaCCodeFunctionCall* _tmp1069_ = NULL;
		ValaCCodeFunctionCall* _tmp1070_ = NULL;
		ValaCCodeFunctionCall* _tmp1071_ = NULL;
		ValaCCodeIdentifier* _tmp1072_ = NULL;
		ValaCCodeFunction* _tmp1073_ = NULL;
		ValaCCodeFunction* _tmp1074_ = NULL;
		ValaCCodeFunctionCall* _tmp1075_ = NULL;
		ValaCCodeFunction* _tmp1076_ = NULL;
		ValaCCodeFunction* _tmp1077_ = NULL;
		_tmp1038_ = real_name;
		_tmp1039_ = g_strdup_printf ("_vala_prof_%s", _tmp1038_);
		prefix = _tmp1039_;
		_tmp1040_ = prefix;
		_tmp1041_ = g_strconcat (_tmp1040_, "_level", NULL);
		_tmp1042_ = _tmp1041_;
		_tmp1043_ = vala_ccode_identifier_new (_tmp1042_);
		_tmp1044_ = _tmp1043_;
		_g_free0 (_tmp1042_);
		level = _tmp1044_;
		_tmp1045_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1046_ = _tmp1045_;
		_tmp1047_ = level;
		_tmp1048_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp1047_);
		_tmp1049_ = _tmp1048_;
		_tmp1050_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp1049_);
		_tmp1051_ = _tmp1050_;
		vala_ccode_function_open_if (_tmp1046_, (ValaCCodeExpression*) _tmp1051_);
		_vala_ccode_node_unref0 (_tmp1051_);
		_vala_ccode_node_unref0 (_tmp1049_);
		_tmp1052_ = prefix;
		_tmp1053_ = g_strconcat (_tmp1052_, "_counter", NULL);
		_tmp1054_ = _tmp1053_;
		_tmp1055_ = vala_ccode_identifier_new (_tmp1054_);
		_tmp1056_ = _tmp1055_;
		_g_free0 (_tmp1054_);
		counter = _tmp1056_;
		_tmp1057_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1058_ = _tmp1057_;
		_tmp1059_ = counter;
		_tmp1060_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp1059_);
		_tmp1061_ = _tmp1060_;
		vala_ccode_function_add_expression (_tmp1058_, (ValaCCodeExpression*) _tmp1061_);
		_vala_ccode_node_unref0 (_tmp1061_);
		_tmp1062_ = prefix;
		_tmp1063_ = g_strconcat (_tmp1062_, "_timer", NULL);
		_tmp1064_ = _tmp1063_;
		_tmp1065_ = vala_ccode_identifier_new (_tmp1064_);
		_tmp1066_ = _tmp1065_;
		_g_free0 (_tmp1064_);
		timer = _tmp1066_;
		_tmp1067_ = vala_ccode_identifier_new ("g_timer_continue");
		_tmp1068_ = _tmp1067_;
		_tmp1069_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1068_);
		_tmp1070_ = _tmp1069_;
		_vala_ccode_node_unref0 (_tmp1068_);
		cont_call = _tmp1070_;
		_tmp1071_ = cont_call;
		_tmp1072_ = timer;
		vala_ccode_function_call_add_argument (_tmp1071_, (ValaCCodeExpression*) _tmp1072_);
		_tmp1073_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1074_ = _tmp1073_;
		_tmp1075_ = cont_call;
		vala_ccode_function_add_expression (_tmp1074_, (ValaCCodeExpression*) _tmp1075_);
		_tmp1076_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1077_ = _tmp1076_;
		vala_ccode_function_close (_tmp1077_);
		_vala_ccode_node_unref0 (cont_call);
		_vala_ccode_node_unref0 (timer);
		_vala_ccode_node_unref0 (counter);
		_vala_ccode_node_unref0 (level);
		_g_free0 (prefix);
	}
	_tmp1078_ = m;
	_tmp1079_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp1078_);
	_tmp1080_ = _tmp1079_;
	if (_tmp1080_ != NULL) {
		ValaMethod* _tmp1081_ = NULL;
		ValaBlock* _tmp1082_ = NULL;
		ValaBlock* _tmp1083_ = NULL;
		_tmp1081_ = m;
		_tmp1082_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp1081_);
		_tmp1083_ = _tmp1082_;
		vala_code_node_emit ((ValaCodeNode*) _tmp1083_, (ValaCodeGenerator*) self);
	}
	_tmp1084_ = profile;
	if (_tmp1084_) {
		gchar* prefix = NULL;
		const gchar* _tmp1085_ = NULL;
		gchar* _tmp1086_ = NULL;
		ValaCCodeIdentifier* level = NULL;
		const gchar* _tmp1087_ = NULL;
		gchar* _tmp1088_ = NULL;
		gchar* _tmp1089_ = NULL;
		ValaCCodeIdentifier* _tmp1090_ = NULL;
		ValaCCodeIdentifier* _tmp1091_ = NULL;
		ValaCCodeFunction* _tmp1092_ = NULL;
		ValaCCodeFunction* _tmp1093_ = NULL;
		ValaCCodeIdentifier* _tmp1094_ = NULL;
		ValaCCodeUnaryExpression* _tmp1095_ = NULL;
		ValaCCodeUnaryExpression* _tmp1096_ = NULL;
		ValaCCodeUnaryExpression* _tmp1097_ = NULL;
		ValaCCodeUnaryExpression* _tmp1098_ = NULL;
		ValaCCodeIdentifier* timer = NULL;
		const gchar* _tmp1099_ = NULL;
		gchar* _tmp1100_ = NULL;
		gchar* _tmp1101_ = NULL;
		ValaCCodeIdentifier* _tmp1102_ = NULL;
		ValaCCodeIdentifier* _tmp1103_ = NULL;
		ValaCCodeFunctionCall* stop_call = NULL;
		ValaCCodeIdentifier* _tmp1104_ = NULL;
		ValaCCodeIdentifier* _tmp1105_ = NULL;
		ValaCCodeFunctionCall* _tmp1106_ = NULL;
		ValaCCodeFunctionCall* _tmp1107_ = NULL;
		ValaCCodeFunctionCall* _tmp1108_ = NULL;
		ValaCCodeIdentifier* _tmp1109_ = NULL;
		ValaCCodeFunction* _tmp1110_ = NULL;
		ValaCCodeFunction* _tmp1111_ = NULL;
		ValaCCodeFunctionCall* _tmp1112_ = NULL;
		ValaCCodeFunction* _tmp1113_ = NULL;
		ValaCCodeFunction* _tmp1114_ = NULL;
		_tmp1085_ = real_name;
		_tmp1086_ = g_strdup_printf ("_vala_prof_%s", _tmp1085_);
		prefix = _tmp1086_;
		_tmp1087_ = prefix;
		_tmp1088_ = g_strconcat (_tmp1087_, "_level", NULL);
		_tmp1089_ = _tmp1088_;
		_tmp1090_ = vala_ccode_identifier_new (_tmp1089_);
		_tmp1091_ = _tmp1090_;
		_g_free0 (_tmp1089_);
		level = _tmp1091_;
		_tmp1092_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1093_ = _tmp1092_;
		_tmp1094_ = level;
		_tmp1095_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT, (ValaCCodeExpression*) _tmp1094_);
		_tmp1096_ = _tmp1095_;
		_tmp1097_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp1096_);
		_tmp1098_ = _tmp1097_;
		vala_ccode_function_open_if (_tmp1093_, (ValaCCodeExpression*) _tmp1098_);
		_vala_ccode_node_unref0 (_tmp1098_);
		_vala_ccode_node_unref0 (_tmp1096_);
		_tmp1099_ = prefix;
		_tmp1100_ = g_strconcat (_tmp1099_, "_timer", NULL);
		_tmp1101_ = _tmp1100_;
		_tmp1102_ = vala_ccode_identifier_new (_tmp1101_);
		_tmp1103_ = _tmp1102_;
		_g_free0 (_tmp1101_);
		timer = _tmp1103_;
		_tmp1104_ = vala_ccode_identifier_new ("g_timer_stop");
		_tmp1105_ = _tmp1104_;
		_tmp1106_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1105_);
		_tmp1107_ = _tmp1106_;
		_vala_ccode_node_unref0 (_tmp1105_);
		stop_call = _tmp1107_;
		_tmp1108_ = stop_call;
		_tmp1109_ = timer;
		vala_ccode_function_call_add_argument (_tmp1108_, (ValaCCodeExpression*) _tmp1109_);
		_tmp1110_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1111_ = _tmp1110_;
		_tmp1112_ = stop_call;
		vala_ccode_function_add_expression (_tmp1111_, (ValaCCodeExpression*) _tmp1112_);
		_tmp1113_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1114_ = _tmp1113_;
		vala_ccode_function_close (_tmp1114_);
		_vala_ccode_node_unref0 (stop_call);
		_vala_ccode_node_unref0 (timer);
		_vala_ccode_node_unref0 (level);
		_g_free0 (prefix);
	}
	_tmp1116_ = m;
	_tmp1117_ = vala_method_get_is_abstract (_tmp1116_);
	_tmp1118_ = _tmp1117_;
	if (!_tmp1118_) {
		_tmp1115_ = TRUE;
	} else {
		gboolean _tmp1119_ = FALSE;
		ValaMethod* _tmp1120_ = NULL;
		gboolean _tmp1121_ = FALSE;
		gboolean _tmp1122_ = FALSE;
		_tmp1120_ = m;
		_tmp1121_ = vala_method_get_is_abstract (_tmp1120_);
		_tmp1122_ = _tmp1121_;
		if (_tmp1122_) {
			ValaTypeSymbol* _tmp1123_ = NULL;
			ValaTypeSymbol* _tmp1124_ = NULL;
			_tmp1123_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
			_tmp1124_ = _tmp1123_;
			_tmp1119_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1124_, VALA_TYPE_CLASS);
		} else {
			_tmp1119_ = FALSE;
		}
		_tmp1115_ = _tmp1119_;
	}
	if (_tmp1115_) {
		ValaMethod* _tmp1125_ = NULL;
		ValaBlock* _tmp1126_ = NULL;
		ValaBlock* _tmp1127_ = NULL;
		_tmp1125_ = m;
		_tmp1126_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp1125_);
		_tmp1127_ = _tmp1126_;
		if (_tmp1127_ != NULL) {
			gboolean _tmp1128_ = FALSE;
			gboolean _tmp1129_ = FALSE;
			ValaMethod* _tmp1140_ = NULL;
			gboolean _tmp1141_ = FALSE;
			gboolean _tmp1142_ = FALSE;
			gboolean _tmp1143_ = FALSE;
			gboolean _tmp1144_ = FALSE;
			ValaMethod* _tmp1145_ = NULL;
			ValaDataType* _tmp1146_ = NULL;
			ValaDataType* _tmp1147_ = NULL;
			ValaMethod* _tmp1170_ = NULL;
			ValaCCodeFile* _tmp1257_ = NULL;
			ValaCCodeFunction* _tmp1258_ = NULL;
			ValaCCodeFunction* _tmp1259_ = NULL;
			_tmp1128_ = vala_ccode_base_module_get_current_method_inner_error ((ValaCCodeBaseModule*) self);
			_tmp1129_ = _tmp1128_;
			if (_tmp1129_) {
				ValaMethod* _tmp1130_ = NULL;
				gboolean _tmp1131_ = FALSE;
				gboolean _tmp1132_ = FALSE;
				_tmp1130_ = m;
				_tmp1131_ = vala_method_get_coroutine (_tmp1130_);
				_tmp1132_ = _tmp1131_;
				if (_tmp1132_) {
					ValaCCodeStruct* _tmp1133_ = NULL;
					_tmp1133_ = ((ValaCCodeBaseModule*) self)->closure_struct;
					vala_ccode_struct_add_field (_tmp1133_, "GError *", "_inner_error_", NULL);
				} else {
					ValaCCodeFunction* _tmp1134_ = NULL;
					ValaCCodeFunction* _tmp1135_ = NULL;
					ValaCCodeConstant* _tmp1136_ = NULL;
					ValaCCodeConstant* _tmp1137_ = NULL;
					ValaCCodeVariableDeclarator* _tmp1138_ = NULL;
					ValaCCodeVariableDeclarator* _tmp1139_ = NULL;
					_tmp1134_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1135_ = _tmp1134_;
					_tmp1136_ = vala_ccode_constant_new ("NULL");
					_tmp1137_ = _tmp1136_;
					_tmp1138_ = vala_ccode_variable_declarator_new_zero ("_inner_error_", (ValaCCodeExpression*) _tmp1137_, NULL);
					_tmp1139_ = _tmp1138_;
					vala_ccode_function_add_declaration (_tmp1135_, "GError *", (ValaCCodeDeclarator*) _tmp1139_, 0);
					_vala_ccode_node_unref0 (_tmp1139_);
					_vala_ccode_node_unref0 (_tmp1137_);
				}
			}
			_tmp1140_ = m;
			_tmp1141_ = vala_method_get_coroutine (_tmp1140_);
			_tmp1142_ = _tmp1141_;
			if (_tmp1142_) {
				vala_ccode_method_module_complete_async (self);
			}
			_tmp1145_ = m;
			_tmp1146_ = vala_method_get_return_type (_tmp1145_);
			_tmp1147_ = _tmp1146_;
			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp1147_, VALA_TYPE_VOID_TYPE)) {
				ValaMethod* _tmp1148_ = NULL;
				ValaDataType* _tmp1149_ = NULL;
				ValaDataType* _tmp1150_ = NULL;
				gboolean _tmp1151_ = FALSE;
				_tmp1148_ = m;
				_tmp1149_ = vala_method_get_return_type (_tmp1148_);
				_tmp1150_ = _tmp1149_;
				_tmp1151_ = vala_data_type_is_real_non_null_struct_type (_tmp1150_);
				_tmp1144_ = !_tmp1151_;
			} else {
				_tmp1144_ = FALSE;
			}
			if (_tmp1144_) {
				ValaMethod* _tmp1152_ = NULL;
				gboolean _tmp1153_ = FALSE;
				gboolean _tmp1154_ = FALSE;
				_tmp1152_ = m;
				_tmp1153_ = vala_method_get_coroutine (_tmp1152_);
				_tmp1154_ = _tmp1153_;
				_tmp1143_ = !_tmp1154_;
			} else {
				_tmp1143_ = FALSE;
			}
			if (_tmp1143_) {
				gboolean _tmp1155_ = FALSE;
				ValaMethod* _tmp1156_ = NULL;
				ValaBasicBlock* _tmp1157_ = NULL;
				ValaBasicBlock* _tmp1158_ = NULL;
				_tmp1156_ = m;
				_tmp1157_ = vala_subroutine_get_return_block ((ValaSubroutine*) _tmp1156_);
				_tmp1158_ = _tmp1157_;
				if (_tmp1158_ != NULL) {
					ValaMethod* _tmp1159_ = NULL;
					ValaBasicBlock* _tmp1160_ = NULL;
					ValaBasicBlock* _tmp1161_ = NULL;
					ValaList* _tmp1162_ = NULL;
					ValaList* _tmp1163_ = NULL;
					gint _tmp1164_ = 0;
					gint _tmp1165_ = 0;
					_tmp1159_ = m;
					_tmp1160_ = vala_subroutine_get_return_block ((ValaSubroutine*) _tmp1159_);
					_tmp1161_ = _tmp1160_;
					_tmp1162_ = vala_basic_block_get_predecessors (_tmp1161_);
					_tmp1163_ = _tmp1162_;
					_tmp1164_ = vala_collection_get_size ((ValaCollection*) _tmp1163_);
					_tmp1165_ = _tmp1164_;
					_tmp1155_ = _tmp1165_ == 0;
					_vala_iterable_unref0 (_tmp1163_);
				} else {
					_tmp1155_ = FALSE;
				}
				if (_tmp1155_) {
					ValaCCodeFunction* _tmp1166_ = NULL;
					ValaCCodeFunction* _tmp1167_ = NULL;
					ValaCCodeIdentifier* _tmp1168_ = NULL;
					ValaCCodeIdentifier* _tmp1169_ = NULL;
					_tmp1166_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1167_ = _tmp1166_;
					_tmp1168_ = vala_ccode_identifier_new ("result");
					_tmp1169_ = _tmp1168_;
					vala_ccode_function_add_return (_tmp1167_, (ValaCCodeExpression*) _tmp1169_);
					_vala_ccode_node_unref0 (_tmp1169_);
				}
			}
			_tmp1170_ = m;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1170_, VALA_TYPE_CREATION_METHOD)) {
				ValaTypeSymbol* _tmp1171_ = NULL;
				ValaTypeSymbol* _tmp1172_ = NULL;
				gboolean _tmp1177_ = FALSE;
				gboolean _tmp1178_ = FALSE;
				gboolean _tmp1179_ = FALSE;
				gboolean _tmp1180_ = FALSE;
				ValaTypeSymbol* _tmp1181_ = NULL;
				ValaTypeSymbol* _tmp1182_ = NULL;
				gboolean _tmp1238_ = FALSE;
				ValaTypeSymbol* _tmp1239_ = NULL;
				ValaTypeSymbol* _tmp1240_ = NULL;
				_tmp1171_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
				_tmp1172_ = _tmp1171_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1172_, VALA_TYPE_CLASS)) {
					ValaClass* _tmp1173_ = NULL;
					ValaClass* _tmp1174_ = NULL;
					ValaObjectType* _tmp1175_ = NULL;
					_tmp1173_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
					_tmp1174_ = _tmp1173_;
					_tmp1175_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp1174_);
					_vala_code_node_unref0 (creturn_type);
					creturn_type = (ValaDataType*) _tmp1175_;
				} else {
					ValaVoidType* _tmp1176_ = NULL;
					_tmp1176_ = vala_void_type_new (NULL);
					_vala_code_node_unref0 (creturn_type);
					creturn_type = (ValaDataType*) _tmp1176_;
				}
				_tmp1181_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
				_tmp1182_ = _tmp1181_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1182_, VALA_TYPE_CLASS)) {
					ValaTypeSymbol* _tmp1183_ = NULL;
					_tmp1183_ = ((ValaCCodeBaseModule*) self)->gobject_type;
					_tmp1180_ = _tmp1183_ != NULL;
				} else {
					_tmp1180_ = FALSE;
				}
				if (_tmp1180_) {
					ValaClass* _tmp1184_ = NULL;
					ValaClass* _tmp1185_ = NULL;
					ValaTypeSymbol* _tmp1186_ = NULL;
					gboolean _tmp1187_ = FALSE;
					_tmp1184_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
					_tmp1185_ = _tmp1184_;
					_tmp1186_ = ((ValaCCodeBaseModule*) self)->gobject_type;
					_tmp1187_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp1185_, _tmp1186_);
					_tmp1179_ = _tmp1187_;
				} else {
					_tmp1179_ = FALSE;
				}
				if (_tmp1179_) {
					ValaClass* _tmp1188_ = NULL;
					ValaClass* _tmp1189_ = NULL;
					ValaList* _tmp1190_ = NULL;
					ValaList* _tmp1191_ = NULL;
					gint _tmp1192_ = 0;
					gint _tmp1193_ = 0;
					_tmp1188_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
					_tmp1189_ = _tmp1188_;
					_tmp1190_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp1189_);
					_tmp1191_ = _tmp1190_;
					_tmp1192_ = vala_collection_get_size ((ValaCollection*) _tmp1191_);
					_tmp1193_ = _tmp1192_;
					_tmp1178_ = _tmp1193_ > 0;
					_vala_iterable_unref0 (_tmp1191_);
				} else {
					_tmp1178_ = FALSE;
				}
				if (_tmp1178_) {
					ValaMethod* _tmp1194_ = NULL;
					gboolean _tmp1195_ = FALSE;
					gboolean _tmp1196_ = FALSE;
					_tmp1194_ = m;
					_tmp1195_ = vala_creation_method_get_chain_up (G_TYPE_CHECK_INSTANCE_CAST (_tmp1194_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod));
					_tmp1196_ = _tmp1195_;
					_tmp1177_ = !_tmp1196_;
				} else {
					_tmp1177_ = FALSE;
				}
				if (_tmp1177_) {
					ValaCCodeBinaryExpression* ccond = NULL;
					ValaCCodeIdentifier* _tmp1197_ = NULL;
					ValaCCodeIdentifier* _tmp1198_ = NULL;
					ValaCCodeIdentifier* _tmp1199_ = NULL;
					ValaCCodeIdentifier* _tmp1200_ = NULL;
					ValaCCodeBinaryExpression* _tmp1201_ = NULL;
					ValaCCodeBinaryExpression* _tmp1202_ = NULL;
					ValaCCodeFunction* _tmp1203_ = NULL;
					ValaCCodeFunction* _tmp1204_ = NULL;
					ValaCCodeBinaryExpression* _tmp1205_ = NULL;
					ValaCCodeFunction* _tmp1206_ = NULL;
					ValaCCodeFunction* _tmp1207_ = NULL;
					ValaCCodeIdentifier* _tmp1208_ = NULL;
					ValaCCodeIdentifier* _tmp1209_ = NULL;
					ValaCCodeUnaryExpression* _tmp1210_ = NULL;
					ValaCCodeUnaryExpression* _tmp1211_ = NULL;
					ValaCCodeFunctionCall* cunsetcall = NULL;
					ValaCCodeIdentifier* _tmp1212_ = NULL;
					ValaCCodeIdentifier* _tmp1213_ = NULL;
					ValaCCodeFunctionCall* _tmp1214_ = NULL;
					ValaCCodeFunctionCall* _tmp1215_ = NULL;
					ValaCCodeFunctionCall* _tmp1216_ = NULL;
					ValaCCodeIdentifier* _tmp1217_ = NULL;
					ValaCCodeIdentifier* _tmp1218_ = NULL;
					ValaCCodeMemberAccess* _tmp1219_ = NULL;
					ValaCCodeMemberAccess* _tmp1220_ = NULL;
					ValaCCodeUnaryExpression* _tmp1221_ = NULL;
					ValaCCodeUnaryExpression* _tmp1222_ = NULL;
					ValaCCodeFunction* _tmp1223_ = NULL;
					ValaCCodeFunction* _tmp1224_ = NULL;
					ValaCCodeFunctionCall* _tmp1225_ = NULL;
					ValaCCodeFunction* _tmp1226_ = NULL;
					ValaCCodeFunction* _tmp1227_ = NULL;
					ValaCCodeFunctionCall* cfreeparams = NULL;
					ValaCCodeIdentifier* _tmp1228_ = NULL;
					ValaCCodeIdentifier* _tmp1229_ = NULL;
					ValaCCodeFunctionCall* _tmp1230_ = NULL;
					ValaCCodeFunctionCall* _tmp1231_ = NULL;
					ValaCCodeFunctionCall* _tmp1232_ = NULL;
					ValaCCodeIdentifier* _tmp1233_ = NULL;
					ValaCCodeIdentifier* _tmp1234_ = NULL;
					ValaCCodeFunction* _tmp1235_ = NULL;
					ValaCCodeFunction* _tmp1236_ = NULL;
					ValaCCodeFunctionCall* _tmp1237_ = NULL;
					_tmp1197_ = vala_ccode_identifier_new ("__params_it");
					_tmp1198_ = _tmp1197_;
					_tmp1199_ = vala_ccode_identifier_new ("__params");
					_tmp1200_ = _tmp1199_;
					_tmp1201_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_GREATER_THAN, (ValaCCodeExpression*) _tmp1198_, (ValaCCodeExpression*) _tmp1200_);
					_tmp1202_ = _tmp1201_;
					_vala_ccode_node_unref0 (_tmp1200_);
					_vala_ccode_node_unref0 (_tmp1198_);
					ccond = _tmp1202_;
					_tmp1203_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1204_ = _tmp1203_;
					_tmp1205_ = ccond;
					vala_ccode_function_open_while (_tmp1204_, (ValaCCodeExpression*) _tmp1205_);
					_tmp1206_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1207_ = _tmp1206_;
					_tmp1208_ = vala_ccode_identifier_new ("__params_it");
					_tmp1209_ = _tmp1208_;
					_tmp1210_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT, (ValaCCodeExpression*) _tmp1209_);
					_tmp1211_ = _tmp1210_;
					vala_ccode_function_add_expression (_tmp1207_, (ValaCCodeExpression*) _tmp1211_);
					_vala_ccode_node_unref0 (_tmp1211_);
					_vala_ccode_node_unref0 (_tmp1209_);
					_tmp1212_ = vala_ccode_identifier_new ("g_value_unset");
					_tmp1213_ = _tmp1212_;
					_tmp1214_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1213_);
					_tmp1215_ = _tmp1214_;
					_vala_ccode_node_unref0 (_tmp1213_);
					cunsetcall = _tmp1215_;
					_tmp1216_ = cunsetcall;
					_tmp1217_ = vala_ccode_identifier_new ("__params_it");
					_tmp1218_ = _tmp1217_;
					_tmp1219_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1218_, "value");
					_tmp1220_ = _tmp1219_;
					_tmp1221_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp1220_);
					_tmp1222_ = _tmp1221_;
					vala_ccode_function_call_add_argument (_tmp1216_, (ValaCCodeExpression*) _tmp1222_);
					_vala_ccode_node_unref0 (_tmp1222_);
					_vala_ccode_node_unref0 (_tmp1220_);
					_vala_ccode_node_unref0 (_tmp1218_);
					_tmp1223_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1224_ = _tmp1223_;
					_tmp1225_ = cunsetcall;
					vala_ccode_function_add_expression (_tmp1224_, (ValaCCodeExpression*) _tmp1225_);
					_tmp1226_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1227_ = _tmp1226_;
					vala_ccode_function_close (_tmp1227_);
					_tmp1228_ = vala_ccode_identifier_new ("g_free");
					_tmp1229_ = _tmp1228_;
					_tmp1230_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1229_);
					_tmp1231_ = _tmp1230_;
					_vala_ccode_node_unref0 (_tmp1229_);
					cfreeparams = _tmp1231_;
					_tmp1232_ = cfreeparams;
					_tmp1233_ = vala_ccode_identifier_new ("__params");
					_tmp1234_ = _tmp1233_;
					vala_ccode_function_call_add_argument (_tmp1232_, (ValaCCodeExpression*) _tmp1234_);
					_vala_ccode_node_unref0 (_tmp1234_);
					_tmp1235_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1236_ = _tmp1235_;
					_tmp1237_ = cfreeparams;
					vala_ccode_function_add_expression (_tmp1236_, (ValaCCodeExpression*) _tmp1237_);
					_vala_ccode_node_unref0 (cfreeparams);
					_vala_ccode_node_unref0 (cunsetcall);
					_vala_ccode_node_unref0 (ccond);
				}
				_tmp1239_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
				_tmp1240_ = _tmp1239_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1240_, VALA_TYPE_CLASS)) {
					ValaMethod* _tmp1241_ = NULL;
					gboolean _tmp1242_ = FALSE;
					gboolean _tmp1243_ = FALSE;
					_tmp1241_ = m;
					_tmp1242_ = vala_method_get_coroutine (_tmp1241_);
					_tmp1243_ = _tmp1242_;
					_tmp1238_ = !_tmp1243_;
				} else {
					_tmp1238_ = FALSE;
				}
				if (_tmp1238_) {
					ValaCCodeExpression* cresult = NULL;
					ValaCCodeIdentifier* _tmp1244_ = NULL;
					ValaMethod* _tmp1245_ = NULL;
					gchar* _tmp1246_ = NULL;
					gchar* _tmp1247_ = NULL;
					gboolean _tmp1248_ = FALSE;
					ValaCCodeFunction* _tmp1254_ = NULL;
					ValaCCodeFunction* _tmp1255_ = NULL;
					ValaCCodeExpression* _tmp1256_ = NULL;
					_tmp1244_ = vala_ccode_identifier_new ("self");
					cresult = (ValaCCodeExpression*) _tmp1244_;
					_tmp1245_ = m;
					_tmp1246_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp1245_);
					_tmp1247_ = _tmp1246_;
					_tmp1248_ = _tmp1247_ != NULL;
					_g_free0 (_tmp1247_);
					if (_tmp1248_) {
						ValaCCodeExpression* _tmp1249_ = NULL;
						ValaMethod* _tmp1250_ = NULL;
						gchar* _tmp1251_ = NULL;
						gchar* _tmp1252_ = NULL;
						ValaCCodeCastExpression* _tmp1253_ = NULL;
						_tmp1249_ = cresult;
						_tmp1250_ = m;
						_tmp1251_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp1250_);
						_tmp1252_ = _tmp1251_;
						_tmp1253_ = vala_ccode_cast_expression_new (_tmp1249_, _tmp1252_);
						_vala_ccode_node_unref0 (cresult);
						cresult = (ValaCCodeExpression*) _tmp1253_;
						_g_free0 (_tmp1252_);
					}
					_tmp1254_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
					_tmp1255_ = _tmp1254_;
					_tmp1256_ = cresult;
					vala_ccode_function_add_return (_tmp1255_, _tmp1256_);
					_vala_ccode_node_unref0 (cresult);
				}
			}
			_tmp1257_ = ((ValaCCodeBaseModule*) self)->cfile;
			_tmp1258_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp1259_ = _tmp1258_;
			vala_ccode_file_add_function (_tmp1257_, _tmp1259_);
		}
	}
	_tmp1261_ = m;
	_tmp1262_ = vala_method_get_is_abstract (_tmp1261_);
	_tmp1263_ = _tmp1262_;
	if (_tmp1263_) {
		ValaTypeSymbol* _tmp1264_ = NULL;
		ValaTypeSymbol* _tmp1265_ = NULL;
		_tmp1264_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
		_tmp1265_ = _tmp1264_;
		_tmp1260_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1265_, VALA_TYPE_CLASS);
	} else {
		_tmp1260_ = FALSE;
	}
	if (_tmp1260_) {
		ValaCCodeFunctionCall* type_from_instance_call = NULL;
		ValaCCodeIdentifier* _tmp1266_ = NULL;
		ValaCCodeIdentifier* _tmp1267_ = NULL;
		ValaCCodeFunctionCall* _tmp1268_ = NULL;
		ValaCCodeFunctionCall* _tmp1269_ = NULL;
		ValaCCodeFunctionCall* _tmp1270_ = NULL;
		ValaCCodeIdentifier* _tmp1271_ = NULL;
		ValaCCodeIdentifier* _tmp1272_ = NULL;
		ValaCCodeFunctionCall* type_name_call = NULL;
		ValaCCodeIdentifier* _tmp1273_ = NULL;
		ValaCCodeIdentifier* _tmp1274_ = NULL;
		ValaCCodeFunctionCall* _tmp1275_ = NULL;
		ValaCCodeFunctionCall* _tmp1276_ = NULL;
		ValaCCodeFunctionCall* _tmp1277_ = NULL;
		ValaCCodeFunctionCall* _tmp1278_ = NULL;
		gchar* error_string = NULL;
		ValaMethod* _tmp1279_ = NULL;
		gchar* _tmp1280_ = NULL;
		gchar* _tmp1281_ = NULL;
		gchar* _tmp1282_ = NULL;
		gchar* _tmp1283_ = NULL;
		ValaCCodeFunctionCall* cerrorcall = NULL;
		ValaCCodeIdentifier* _tmp1284_ = NULL;
		ValaCCodeIdentifier* _tmp1285_ = NULL;
		ValaCCodeFunctionCall* _tmp1286_ = NULL;
		ValaCCodeFunctionCall* _tmp1287_ = NULL;
		ValaCCodeFunctionCall* _tmp1288_ = NULL;
		const gchar* _tmp1289_ = NULL;
		ValaCCodeConstant* _tmp1290_ = NULL;
		ValaCCodeConstant* _tmp1291_ = NULL;
		ValaCCodeFunctionCall* _tmp1292_ = NULL;
		ValaCCodeFunctionCall* _tmp1293_ = NULL;
		ValaCCodeFunction* _tmp1294_ = NULL;
		ValaCCodeFunction* _tmp1295_ = NULL;
		ValaCCodeFunctionCall* _tmp1296_ = NULL;
		ValaDataType* _tmp1297_ = NULL;
		ValaCCodeFile* _tmp1298_ = NULL;
		ValaCCodeFunction* _tmp1299_ = NULL;
		ValaCCodeFunction* _tmp1300_ = NULL;
		_tmp1266_ = vala_ccode_identifier_new ("G_TYPE_FROM_INSTANCE");
		_tmp1267_ = _tmp1266_;
		_tmp1268_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1267_);
		_tmp1269_ = _tmp1268_;
		_vala_ccode_node_unref0 (_tmp1267_);
		type_from_instance_call = _tmp1269_;
		_tmp1270_ = type_from_instance_call;
		_tmp1271_ = vala_ccode_identifier_new ("self");
		_tmp1272_ = _tmp1271_;
		vala_ccode_function_call_add_argument (_tmp1270_, (ValaCCodeExpression*) _tmp1272_);
		_vala_ccode_node_unref0 (_tmp1272_);
		_tmp1273_ = vala_ccode_identifier_new ("g_type_name");
		_tmp1274_ = _tmp1273_;
		_tmp1275_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1274_);
		_tmp1276_ = _tmp1275_;
		_vala_ccode_node_unref0 (_tmp1274_);
		type_name_call = _tmp1276_;
		_tmp1277_ = type_name_call;
		_tmp1278_ = type_from_instance_call;
		vala_ccode_function_call_add_argument (_tmp1277_, (ValaCCodeExpression*) _tmp1278_);
		_tmp1279_ = m;
		_tmp1280_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp1279_);
		_tmp1281_ = _tmp1280_;
		_tmp1282_ = g_strdup_printf ("\"Type `%%s' does not implement abstract method `%s'\"", _tmp1281_);
		_tmp1283_ = _tmp1282_;
		_g_free0 (_tmp1281_);
		error_string = _tmp1283_;
		_tmp1284_ = vala_ccode_identifier_new ("g_critical");
		_tmp1285_ = _tmp1284_;
		_tmp1286_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1285_);
		_tmp1287_ = _tmp1286_;
		_vala_ccode_node_unref0 (_tmp1285_);
		cerrorcall = _tmp1287_;
		_tmp1288_ = cerrorcall;
		_tmp1289_ = error_string;
		_tmp1290_ = vala_ccode_constant_new (_tmp1289_);
		_tmp1291_ = _tmp1290_;
		vala_ccode_function_call_add_argument (_tmp1288_, (ValaCCodeExpression*) _tmp1291_);
		_vala_ccode_node_unref0 (_tmp1291_);
		_tmp1292_ = cerrorcall;
		_tmp1293_ = type_name_call;
		vala_ccode_function_call_add_argument (_tmp1292_, (ValaCCodeExpression*) _tmp1293_);
		_tmp1294_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1295_ = _tmp1294_;
		_tmp1296_ = cerrorcall;
		vala_ccode_function_add_expression (_tmp1295_, (ValaCCodeExpression*) _tmp1296_);
		_tmp1297_ = creturn_type;
		vala_ccode_base_module_return_default_value ((ValaCCodeBaseModule*) self, _tmp1297_);
		_tmp1298_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp1299_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1300_ = _tmp1299_;
		vala_ccode_file_add_function (_tmp1298_, _tmp1300_);
		_vala_ccode_node_unref0 (cerrorcall);
		_g_free0 (error_string);
		_vala_ccode_node_unref0 (type_name_call);
		_vala_ccode_node_unref0 (type_from_instance_call);
	}
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_tmp1304_ = m;
	_tmp1305_ = vala_method_get_is_abstract (_tmp1304_);
	_tmp1306_ = _tmp1305_;
	if (_tmp1306_) {
		_tmp1303_ = TRUE;
	} else {
		ValaMethod* _tmp1307_ = NULL;
		gboolean _tmp1308_ = FALSE;
		gboolean _tmp1309_ = FALSE;
		_tmp1307_ = m;
		_tmp1308_ = vala_method_get_is_virtual (_tmp1307_);
		_tmp1309_ = _tmp1308_;
		_tmp1303_ = _tmp1309_;
	}
	if (_tmp1303_) {
		ValaMethod* _tmp1310_ = NULL;
		gboolean _tmp1311_ = FALSE;
		gboolean _tmp1312_ = FALSE;
		_tmp1310_ = m;
		_tmp1311_ = vala_method_get_coroutine (_tmp1310_);
		_tmp1312_ = _tmp1311_;
		_tmp1302_ = !_tmp1312_;
	} else {
		_tmp1302_ = FALSE;
	}
	if (_tmp1302_) {
		ValaMethod* _tmp1313_ = NULL;
		ValaSignal* _tmp1314_ = NULL;
		ValaSignal* _tmp1315_ = NULL;
		_tmp1313_ = m;
		_tmp1314_ = vala_method_get_signal_reference (_tmp1313_);
		_tmp1315_ = _tmp1314_;
		_tmp1301_ = _tmp1315_ == NULL;
	} else {
		_tmp1301_ = FALSE;
	}
	if (_tmp1301_) {
		GHashFunc _tmp1316_ = NULL;
		GEqualFunc _tmp1317_ = NULL;
		GEqualFunc _tmp1318_ = NULL;
		ValaHashMap* _tmp1319_ = NULL;
		ValaHashMap* carg_map = NULL;
		GHashFunc _tmp1320_ = NULL;
		GEqualFunc _tmp1321_ = NULL;
		GEqualFunc _tmp1322_ = NULL;
		ValaHashMap* _tmp1323_ = NULL;
		ValaMethod* _tmp1324_ = NULL;
		ValaDataType* _tmp1325_ = NULL;
		ValaHashMap* _tmp1326_ = NULL;
		ValaHashMap* _tmp1327_ = NULL;
		_tmp1316_ = g_direct_hash;
		_tmp1317_ = g_direct_equal;
		_tmp1318_ = g_direct_equal;
		_tmp1319_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp1316_, _tmp1317_, _tmp1318_);
		_vala_map_unref0 (cparam_map);
		cparam_map = _tmp1319_;
		_tmp1320_ = g_direct_hash;
		_tmp1321_ = g_direct_equal;
		_tmp1322_ = g_direct_equal;
		_tmp1323_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp1320_, _tmp1321_, _tmp1322_);
		carg_map = _tmp1323_;
		_tmp1324_ = m;
		_tmp1325_ = creturn_type;
		_tmp1326_ = cparam_map;
		_tmp1327_ = carg_map;
		vala_ccode_method_module_generate_vfunc (self, _tmp1324_, _tmp1325_, (ValaMap*) _tmp1326_, (ValaMap*) _tmp1327_, "", 3);
		_vala_map_unref0 (carg_map);
	}
	_tmp1328_ = m;
	_tmp1329_ = vala_method_get_entry_point (_tmp1328_);
	_tmp1330_ = _tmp1329_;
	if (_tmp1330_) {
		ValaCCodeFunction* cmain = NULL;
		ValaCCodeFunction* _tmp1331_ = NULL;
		ValaCCodeFunction* _tmp1332_ = NULL;
		ValaCCodeFunction* _tmp1333_ = NULL;
		ValaCCodeLineDirective* _tmp1334_ = NULL;
		ValaCCodeLineDirective* _tmp1335_ = NULL;
		ValaCCodeFunction* _tmp1336_ = NULL;
		ValaCCodeParameter* _tmp1337_ = NULL;
		ValaCCodeParameter* _tmp1338_ = NULL;
		ValaCCodeFunction* _tmp1339_ = NULL;
		ValaCCodeParameter* _tmp1340_ = NULL;
		ValaCCodeParameter* _tmp1341_ = NULL;
		ValaCCodeFunction* _tmp1342_ = NULL;
		ValaCodeContext* _tmp1343_ = NULL;
		ValaCodeContext* _tmp1344_ = NULL;
		gboolean _tmp1345_ = FALSE;
		gboolean _tmp1346_ = FALSE;
		ValaCodeContext* _tmp1361_ = NULL;
		ValaCodeContext* _tmp1362_ = NULL;
		gboolean _tmp1363_ = FALSE;
		gboolean _tmp1364_ = FALSE;
		ValaCCodeIfSection* cond = NULL;
		ValaCCodeIfSection* _tmp1384_ = NULL;
		ValaCCodeFunction* _tmp1385_ = NULL;
		ValaCCodeFunction* _tmp1386_ = NULL;
		ValaCCodeIfSection* _tmp1387_ = NULL;
		ValaCCodeIfSection* _tmp1388_ = NULL;
		ValaCCodeIdentifier* _tmp1389_ = NULL;
		ValaCCodeIdentifier* _tmp1390_ = NULL;
		ValaCCodeFunctionCall* _tmp1391_ = NULL;
		ValaCCodeFunctionCall* _tmp1392_ = NULL;
		ValaCCodeExpressionStatement* _tmp1393_ = NULL;
		ValaCCodeExpressionStatement* _tmp1394_ = NULL;
		ValaCCodeFunctionCall* main_call = NULL;
		ValaCCodeFunction* _tmp1395_ = NULL;
		const gchar* _tmp1396_ = NULL;
		const gchar* _tmp1397_ = NULL;
		ValaCCodeIdentifier* _tmp1398_ = NULL;
		ValaCCodeIdentifier* _tmp1399_ = NULL;
		ValaCCodeFunctionCall* _tmp1400_ = NULL;
		ValaCCodeFunctionCall* _tmp1401_ = NULL;
		ValaMethod* _tmp1402_ = NULL;
		ValaList* _tmp1403_ = NULL;
		ValaList* _tmp1404_ = NULL;
		gint _tmp1405_ = 0;
		gint _tmp1406_ = 0;
		gboolean _tmp1407_ = FALSE;
		ValaMethod* _tmp1414_ = NULL;
		ValaDataType* _tmp1415_ = NULL;
		ValaDataType* _tmp1416_ = NULL;
		ValaCCodeFile* _tmp1427_ = NULL;
		ValaCCodeFunction* _tmp1428_ = NULL;
		_tmp1331_ = vala_ccode_function_new ("main", "int");
		cmain = _tmp1331_;
		_tmp1332_ = cmain;
		_tmp1333_ = function;
		_tmp1334_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1333_);
		_tmp1335_ = _tmp1334_;
		vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1332_, _tmp1335_);
		_tmp1336_ = cmain;
		_tmp1337_ = vala_ccode_parameter_new ("argc", "int");
		_tmp1338_ = _tmp1337_;
		vala_ccode_function_add_parameter (_tmp1336_, _tmp1338_);
		_vala_ccode_node_unref0 (_tmp1338_);
		_tmp1339_ = cmain;
		_tmp1340_ = vala_ccode_parameter_new ("argv", "char **");
		_tmp1341_ = _tmp1340_;
		vala_ccode_function_add_parameter (_tmp1339_, _tmp1341_);
		_vala_ccode_node_unref0 (_tmp1341_);
		_tmp1342_ = cmain;
		vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp1342_);
		_tmp1343_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp1344_ = _tmp1343_;
		_tmp1345_ = vala_code_context_get_mem_profiler (_tmp1344_);
		_tmp1346_ = _tmp1345_;
		if (_tmp1346_) {
			ValaCCodeFunctionCall* mem_profiler_init_call = NULL;
			ValaCCodeIdentifier* _tmp1347_ = NULL;
			ValaCCodeIdentifier* _tmp1348_ = NULL;
			ValaCCodeFunctionCall* _tmp1349_ = NULL;
			ValaCCodeFunctionCall* _tmp1350_ = NULL;
			ValaCCodeFunctionCall* _tmp1351_ = NULL;
			ValaCCodeFunction* _tmp1352_ = NULL;
			ValaCCodeLineDirective* _tmp1353_ = NULL;
			ValaCCodeLineDirective* _tmp1354_ = NULL;
			ValaCCodeFunctionCall* _tmp1355_ = NULL;
			ValaCCodeConstant* _tmp1356_ = NULL;
			ValaCCodeConstant* _tmp1357_ = NULL;
			ValaCCodeFunction* _tmp1358_ = NULL;
			ValaCCodeFunction* _tmp1359_ = NULL;
			ValaCCodeFunctionCall* _tmp1360_ = NULL;
			_tmp1347_ = vala_ccode_identifier_new ("g_mem_set_vtable");
			_tmp1348_ = _tmp1347_;
			_tmp1349_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1348_);
			_tmp1350_ = _tmp1349_;
			_vala_ccode_node_unref0 (_tmp1348_);
			mem_profiler_init_call = _tmp1350_;
			_tmp1351_ = mem_profiler_init_call;
			_tmp1352_ = cmain;
			_tmp1353_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1352_);
			_tmp1354_ = _tmp1353_;
			vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1351_, _tmp1354_);
			_tmp1355_ = mem_profiler_init_call;
			_tmp1356_ = vala_ccode_constant_new ("glib_mem_profiler_table");
			_tmp1357_ = _tmp1356_;
			vala_ccode_function_call_add_argument (_tmp1355_, (ValaCCodeExpression*) _tmp1357_);
			_vala_ccode_node_unref0 (_tmp1357_);
			_tmp1358_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp1359_ = _tmp1358_;
			_tmp1360_ = mem_profiler_init_call;
			vala_ccode_function_add_expression (_tmp1359_, (ValaCCodeExpression*) _tmp1360_);
			_vala_ccode_node_unref0 (mem_profiler_init_call);
		}
		_tmp1361_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp1362_ = _tmp1361_;
		_tmp1363_ = vala_code_context_get_thread (_tmp1362_);
		_tmp1364_ = _tmp1363_;
		if (_tmp1364_) {
			ValaCCodeFunctionCall* thread_init_call = NULL;
			ValaCCodeIdentifier* _tmp1365_ = NULL;
			ValaCCodeIdentifier* _tmp1366_ = NULL;
			ValaCCodeFunctionCall* _tmp1367_ = NULL;
			ValaCCodeFunctionCall* _tmp1368_ = NULL;
			ValaCCodeFunctionCall* _tmp1369_ = NULL;
			ValaCCodeFunction* _tmp1370_ = NULL;
			ValaCCodeLineDirective* _tmp1371_ = NULL;
			ValaCCodeLineDirective* _tmp1372_ = NULL;
			ValaCCodeFunctionCall* _tmp1373_ = NULL;
			ValaCCodeConstant* _tmp1374_ = NULL;
			ValaCCodeConstant* _tmp1375_ = NULL;
			ValaCCodeIfSection* cond = NULL;
			ValaCCodeIfSection* _tmp1376_ = NULL;
			ValaCCodeFunction* _tmp1377_ = NULL;
			ValaCCodeFunction* _tmp1378_ = NULL;
			ValaCCodeIfSection* _tmp1379_ = NULL;
			ValaCCodeIfSection* _tmp1380_ = NULL;
			ValaCCodeFunctionCall* _tmp1381_ = NULL;
			ValaCCodeExpressionStatement* _tmp1382_ = NULL;
			ValaCCodeExpressionStatement* _tmp1383_ = NULL;
			_tmp1365_ = vala_ccode_identifier_new ("g_thread_init");
			_tmp1366_ = _tmp1365_;
			_tmp1367_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1366_);
			_tmp1368_ = _tmp1367_;
			_vala_ccode_node_unref0 (_tmp1366_);
			thread_init_call = _tmp1368_;
			_tmp1369_ = thread_init_call;
			_tmp1370_ = cmain;
			_tmp1371_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1370_);
			_tmp1372_ = _tmp1371_;
			vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1369_, _tmp1372_);
			_tmp1373_ = thread_init_call;
			_tmp1374_ = vala_ccode_constant_new ("NULL");
			_tmp1375_ = _tmp1374_;
			vala_ccode_function_call_add_argument (_tmp1373_, (ValaCCodeExpression*) _tmp1375_);
			_vala_ccode_node_unref0 (_tmp1375_);
			_tmp1376_ = vala_ccode_if_section_new ("!GLIB_CHECK_VERSION (2,32,0)");
			cond = _tmp1376_;
			_tmp1377_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp1378_ = _tmp1377_;
			_tmp1379_ = cond;
			vala_ccode_function_add_statement (_tmp1378_, (ValaCCodeNode*) _tmp1379_);
			_tmp1380_ = cond;
			_tmp1381_ = thread_init_call;
			_tmp1382_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp1381_);
			_tmp1383_ = _tmp1382_;
			vala_ccode_fragment_append ((ValaCCodeFragment*) _tmp1380_, (ValaCCodeNode*) _tmp1383_);
			_vala_ccode_node_unref0 (_tmp1383_);
			_vala_ccode_node_unref0 (cond);
			_vala_ccode_node_unref0 (thread_init_call);
		}
		_tmp1384_ = vala_ccode_if_section_new ("!GLIB_CHECK_VERSION (2,35,0)");
		cond = _tmp1384_;
		_tmp1385_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp1386_ = _tmp1385_;
		_tmp1387_ = cond;
		vala_ccode_function_add_statement (_tmp1386_, (ValaCCodeNode*) _tmp1387_);
		_tmp1388_ = cond;
		_tmp1389_ = vala_ccode_identifier_new ("g_type_init");
		_tmp1390_ = _tmp1389_;
		_tmp1391_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1390_);
		_tmp1392_ = _tmp1391_;
		_tmp1393_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp1392_);
		_tmp1394_ = _tmp1393_;
		vala_ccode_fragment_append ((ValaCCodeFragment*) _tmp1388_, (ValaCCodeNode*) _tmp1394_);
		_vala_ccode_node_unref0 (_tmp1394_);
		_vala_ccode_node_unref0 (_tmp1392_);
		_vala_ccode_node_unref0 (_tmp1390_);
		_tmp1395_ = function;
		_tmp1396_ = vala_ccode_function_get_name (_tmp1395_);
		_tmp1397_ = _tmp1396_;
		_tmp1398_ = vala_ccode_identifier_new (_tmp1397_);
		_tmp1399_ = _tmp1398_;
		_tmp1400_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1399_);
		_tmp1401_ = _tmp1400_;
		_vala_ccode_node_unref0 (_tmp1399_);
		main_call = _tmp1401_;
		_tmp1402_ = m;
		_tmp1403_ = vala_method_get_parameters (_tmp1402_);
		_tmp1404_ = _tmp1403_;
		_tmp1405_ = vala_collection_get_size ((ValaCollection*) _tmp1404_);
		_tmp1406_ = _tmp1405_;
		_tmp1407_ = _tmp1406_ == 1;
		_vala_iterable_unref0 (_tmp1404_);
		if (_tmp1407_) {
			ValaCCodeFunctionCall* _tmp1408_ = NULL;
			ValaCCodeIdentifier* _tmp1409_ = NULL;
			ValaCCodeIdentifier* _tmp1410_ = NULL;
			ValaCCodeFunctionCall* _tmp1411_ = NULL;
			ValaCCodeIdentifier* _tmp1412_ = NULL;
			ValaCCodeIdentifier* _tmp1413_ = NULL;
			_tmp1408_ = main_call;
			_tmp1409_ = vala_ccode_identifier_new ("argv");
			_tmp1410_ = _tmp1409_;
			vala_ccode_function_call_add_argument (_tmp1408_, (ValaCCodeExpression*) _tmp1410_);
			_vala_ccode_node_unref0 (_tmp1410_);
			_tmp1411_ = main_call;
			_tmp1412_ = vala_ccode_identifier_new ("argc");
			_tmp1413_ = _tmp1412_;
			vala_ccode_function_call_add_argument (_tmp1411_, (ValaCCodeExpression*) _tmp1413_);
			_vala_ccode_node_unref0 (_tmp1413_);
		}
		_tmp1414_ = m;
		_tmp1415_ = vala_method_get_return_type (_tmp1414_);
		_tmp1416_ = _tmp1415_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1416_, VALA_TYPE_VOID_TYPE)) {
			ValaCCodeFunction* _tmp1417_ = NULL;
			ValaCCodeFunction* _tmp1418_ = NULL;
			ValaCCodeFunctionCall* _tmp1419_ = NULL;
			ValaCCodeFunction* _tmp1420_ = NULL;
			ValaCCodeFunction* _tmp1421_ = NULL;
			ValaCCodeConstant* _tmp1422_ = NULL;
			ValaCCodeConstant* _tmp1423_ = NULL;
			_tmp1417_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp1418_ = _tmp1417_;
			_tmp1419_ = main_call;
			vala_ccode_function_add_expression (_tmp1418_, (ValaCCodeExpression*) _tmp1419_);
			_tmp1420_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp1421_ = _tmp1420_;
			_tmp1422_ = vala_ccode_constant_new ("0");
			_tmp1423_ = _tmp1422_;
			vala_ccode_function_add_return (_tmp1421_, (ValaCCodeExpression*) _tmp1423_);
			_vala_ccode_node_unref0 (_tmp1423_);
		} else {
			ValaCCodeFunction* _tmp1424_ = NULL;
			ValaCCodeFunction* _tmp1425_ = NULL;
			ValaCCodeFunctionCall* _tmp1426_ = NULL;
			_tmp1424_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp1425_ = _tmp1424_;
			_tmp1426_ = main_call;
			vala_ccode_function_add_return (_tmp1425_, (ValaCCodeExpression*) _tmp1426_);
		}
		vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
		_tmp1427_ = ((ValaCCodeBaseModule*) self)->cfile;
		_tmp1428_ = cmain;
		vala_ccode_file_add_function (_tmp1427_, _tmp1428_);
		_vala_ccode_node_unref0 (main_call);
		_vala_ccode_node_unref0 (cond);
		_vala_ccode_node_unref0 (cmain);
	}
	vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (function);
	_vala_code_node_unref0 (creturn_type);
	_g_free0 (real_name);
}


static ValaCCodeParameter* vala_ccode_method_module_real_generate_parameter (ValaCCodeMethodModule* self, ValaParameter* param, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaMap* carg_map) {
	ValaCCodeParameter* result = NULL;
	ValaCCodeParameter* cparam = NULL;
	ValaParameter* _tmp0_ = NULL;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ValaMap* _tmp61_ = NULL;
	ValaParameter* _tmp62_ = NULL;
	gdouble _tmp63_ = 0.0;
	ValaParameter* _tmp64_ = NULL;
	gboolean _tmp65_ = FALSE;
	gboolean _tmp66_ = FALSE;
	gint _tmp67_ = 0;
	ValaCCodeParameter* _tmp68_ = NULL;
	gboolean _tmp69_ = FALSE;
	ValaMap* _tmp70_ = NULL;
	g_return_val_if_fail (param != NULL, NULL);
	g_return_val_if_fail (decl_space != NULL, NULL);
	g_return_val_if_fail (cparam_map != NULL, NULL);
	_tmp0_ = param;
	_tmp1_ = vala_parameter_get_ellipsis (_tmp0_);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		gchar* ctypename = NULL;
		ValaParameter* _tmp3_ = NULL;
		ValaDataType* _tmp4_ = NULL;
		ValaDataType* _tmp5_ = NULL;
		gchar* _tmp6_ = NULL;
		ValaParameter* _tmp7_ = NULL;
		ValaDataType* _tmp8_ = NULL;
		ValaDataType* _tmp9_ = NULL;
		ValaCCodeFile* _tmp10_ = NULL;
		ValaParameter* _tmp11_ = NULL;
		ValaDataType* _tmp12_ = NULL;
		ValaDataType* _tmp13_ = NULL;
		ValaTypeSymbol* _tmp14_ = NULL;
		ValaTypeSymbol* _tmp15_ = NULL;
		ValaParameter* _tmp46_ = NULL;
		ValaParameterDirection _tmp47_ = 0;
		ValaParameterDirection _tmp48_ = 0;
		ValaParameter* _tmp51_ = NULL;
		const gchar* _tmp52_ = NULL;
		const gchar* _tmp53_ = NULL;
		gchar* _tmp54_ = NULL;
		gchar* _tmp55_ = NULL;
		const gchar* _tmp56_ = NULL;
		ValaCCodeParameter* _tmp57_ = NULL;
		_tmp3_ = param;
		_tmp4_ = vala_variable_get_variable_type ((ValaVariable*) _tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp5_);
		ctypename = _tmp6_;
		_tmp7_ = param;
		_tmp8_ = vala_variable_get_variable_type ((ValaVariable*) _tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = decl_space;
		vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp9_, _tmp10_);
		_tmp11_ = param;
		_tmp12_ = vala_variable_get_variable_type ((ValaVariable*) _tmp11_);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_data_type_get_data_type (_tmp13_);
		_tmp15_ = _tmp14_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_STRUCT)) {
			ValaStruct* st = NULL;
			ValaParameter* _tmp16_ = NULL;
			ValaDataType* _tmp17_ = NULL;
			ValaDataType* _tmp18_ = NULL;
			ValaTypeSymbol* _tmp19_ = NULL;
			ValaTypeSymbol* _tmp20_ = NULL;
			ValaStruct* _tmp21_ = NULL;
			gboolean _tmp22_ = FALSE;
			ValaStruct* _tmp23_ = NULL;
			gboolean _tmp24_ = FALSE;
			_tmp16_ = param;
			_tmp17_ = vala_variable_get_variable_type ((ValaVariable*) _tmp16_);
			_tmp18_ = _tmp17_;
			_tmp19_ = vala_data_type_get_data_type (_tmp18_);
			_tmp20_ = _tmp19_;
			_tmp21_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_STRUCT, ValaStruct));
			st = _tmp21_;
			_tmp23_ = st;
			_tmp24_ = vala_struct_is_simple_type (_tmp23_);
			if (!_tmp24_) {
				ValaParameter* _tmp25_ = NULL;
				ValaParameterDirection _tmp26_ = 0;
				ValaParameterDirection _tmp27_ = 0;
				_tmp25_ = param;
				_tmp26_ = vala_parameter_get_direction (_tmp25_);
				_tmp27_ = _tmp26_;
				_tmp22_ = _tmp27_ == VALA_PARAMETER_DIRECTION_IN;
			} else {
				_tmp22_ = FALSE;
			}
			if (_tmp22_) {
				gboolean _tmp28_ = FALSE;
				ValaStruct* _tmp29_ = NULL;
				gboolean _tmp30_ = FALSE;
				gboolean _tmp31_ = FALSE;
				ValaParameter* _tmp39_ = NULL;
				ValaDataType* _tmp40_ = NULL;
				ValaDataType* _tmp41_ = NULL;
				gboolean _tmp42_ = FALSE;
				gboolean _tmp43_ = FALSE;
				_tmp29_ = st;
				_tmp30_ = vala_struct_get_is_immutable (_tmp29_);
				_tmp31_ = _tmp30_;
				if (_tmp31_) {
					ValaParameter* _tmp32_ = NULL;
					ValaDataType* _tmp33_ = NULL;
					ValaDataType* _tmp34_ = NULL;
					gboolean _tmp35_ = FALSE;
					gboolean _tmp36_ = FALSE;
					_tmp32_ = param;
					_tmp33_ = vala_variable_get_variable_type ((ValaVariable*) _tmp32_);
					_tmp34_ = _tmp33_;
					_tmp35_ = vala_data_type_get_value_owned (_tmp34_);
					_tmp36_ = _tmp35_;
					_tmp28_ = !_tmp36_;
				} else {
					_tmp28_ = FALSE;
				}
				if (_tmp28_) {
					const gchar* _tmp37_ = NULL;
					gchar* _tmp38_ = NULL;
					_tmp37_ = ctypename;
					_tmp38_ = g_strconcat ("const ", _tmp37_, NULL);
					_g_free0 (ctypename);
					ctypename = _tmp38_;
				}
				_tmp39_ = param;
				_tmp40_ = vala_variable_get_variable_type ((ValaVariable*) _tmp39_);
				_tmp41_ = _tmp40_;
				_tmp42_ = vala_data_type_get_nullable (_tmp41_);
				_tmp43_ = _tmp42_;
				if (!_tmp43_) {
					const gchar* _tmp44_ = NULL;
					gchar* _tmp45_ = NULL;
					_tmp44_ = ctypename;
					_tmp45_ = g_strconcat (_tmp44_, "*", NULL);
					_g_free0 (ctypename);
					ctypename = _tmp45_;
				}
			}
			_vala_code_node_unref0 (st);
		}
		_tmp46_ = param;
		_tmp47_ = vala_parameter_get_direction (_tmp46_);
		_tmp48_ = _tmp47_;
		if (_tmp48_ != VALA_PARAMETER_DIRECTION_IN) {
			const gchar* _tmp49_ = NULL;
			gchar* _tmp50_ = NULL;
			_tmp49_ = ctypename;
			_tmp50_ = g_strconcat (_tmp49_, "*", NULL);
			_g_free0 (ctypename);
			ctypename = _tmp50_;
		}
		_tmp51_ = param;
		_tmp52_ = vala_symbol_get_name ((ValaSymbol*) _tmp51_);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp53_);
		_tmp55_ = _tmp54_;
		_tmp56_ = ctypename;
		_tmp57_ = vala_ccode_parameter_new (_tmp55_, _tmp56_);
		_vala_ccode_node_unref0 (cparam);
		cparam = _tmp57_;
		_g_free0 (_tmp55_);
		_g_free0 (ctypename);
	} else {
		gboolean _tmp58_ = FALSE;
		_tmp58_ = self->priv->ellipses_to_valist;
		if (_tmp58_) {
			ValaCCodeParameter* _tmp59_ = NULL;
			_tmp59_ = vala_ccode_parameter_new ("_vala_va_list", "va_list");
			_vala_ccode_node_unref0 (cparam);
			cparam = _tmp59_;
		} else {
			ValaCCodeParameter* _tmp60_ = NULL;
			_tmp60_ = vala_ccode_parameter_new_with_ellipsis ();
			_vala_ccode_node_unref0 (cparam);
			cparam = _tmp60_;
		}
	}
	_tmp61_ = cparam_map;
	_tmp62_ = param;
	_tmp63_ = vala_ccode_base_module_get_ccode_pos (_tmp62_);
	_tmp64_ = param;
	_tmp65_ = vala_parameter_get_ellipsis (_tmp64_);
	_tmp66_ = _tmp65_;
	_tmp67_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp63_, _tmp66_);
	_tmp68_ = cparam;
	vala_map_set (_tmp61_, (gpointer) ((gintptr) _tmp67_), _tmp68_);
	_tmp70_ = carg_map;
	if (_tmp70_ != NULL) {
		ValaParameter* _tmp71_ = NULL;
		gboolean _tmp72_ = FALSE;
		gboolean _tmp73_ = FALSE;
		_tmp71_ = param;
		_tmp72_ = vala_parameter_get_ellipsis (_tmp71_);
		_tmp73_ = _tmp72_;
		_tmp69_ = !_tmp73_;
	} else {
		_tmp69_ = FALSE;
	}
	if (_tmp69_) {
		ValaMap* _tmp74_ = NULL;
		ValaParameter* _tmp75_ = NULL;
		gdouble _tmp76_ = 0.0;
		ValaParameter* _tmp77_ = NULL;
		gboolean _tmp78_ = FALSE;
		gboolean _tmp79_ = FALSE;
		gint _tmp80_ = 0;
		ValaParameter* _tmp81_ = NULL;
		const gchar* _tmp82_ = NULL;
		const gchar* _tmp83_ = NULL;
		ValaCCodeExpression* _tmp84_ = NULL;
		ValaCCodeExpression* _tmp85_ = NULL;
		_tmp74_ = carg_map;
		_tmp75_ = param;
		_tmp76_ = vala_ccode_base_module_get_ccode_pos (_tmp75_);
		_tmp77_ = param;
		_tmp78_ = vala_parameter_get_ellipsis (_tmp77_);
		_tmp79_ = _tmp78_;
		_tmp80_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp76_, _tmp79_);
		_tmp81_ = param;
		_tmp82_ = vala_symbol_get_name ((ValaSymbol*) _tmp81_);
		_tmp83_ = _tmp82_;
		_tmp84_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp83_);
		_tmp85_ = _tmp84_;
		vala_map_set (_tmp74_, (gpointer) ((gintptr) _tmp80_), _tmp85_);
		_vala_ccode_node_unref0 (_tmp85_);
	}
	result = cparam;
	return result;
}


ValaCCodeParameter* vala_ccode_method_module_generate_parameter (ValaCCodeMethodModule* self, ValaParameter* param, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaMap* carg_map) {
	g_return_val_if_fail (self != NULL, NULL);
	return VALA_CCODE_METHOD_MODULE_GET_CLASS (self)->generate_parameter (self, param, decl_space, cparam_map, carg_map);
}


static void vala_ccode_method_module_real_generate_cparameters (ValaCCodeBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction) {
	ValaCCodeMethodModule * self;
	ValaMethod* _tmp0_ = NULL;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ValaMethod* _tmp140_ = NULL;
	gboolean _tmp141_ = FALSE;
	gint _tmp343_ = 0;
	gint last_pos = 0;
	gint min_pos = 0;
	self = (ValaCCodeMethodModule*) base;
	g_return_if_fail (m != NULL);
	g_return_if_fail (decl_space != NULL);
	g_return_if_fail (cparam_map != NULL);
	g_return_if_fail (func != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_closure (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		ValaBlock* closure_block = NULL;
		ValaBlock* _tmp3_ = NULL;
		ValaBlock* _tmp4_ = NULL;
		ValaBlock* _tmp5_ = NULL;
		gint block_id = 0;
		ValaBlock* _tmp6_ = NULL;
		gint _tmp7_ = 0;
		ValaCCodeParameter* instance_param = NULL;
		gint _tmp8_ = 0;
		gchar* _tmp9_ = NULL;
		gchar* _tmp10_ = NULL;
		gint _tmp11_ = 0;
		gchar* _tmp12_ = NULL;
		gchar* _tmp13_ = NULL;
		ValaCCodeParameter* _tmp14_ = NULL;
		ValaCCodeParameter* _tmp15_ = NULL;
		ValaMap* _tmp16_ = NULL;
		ValaMethod* _tmp17_ = NULL;
		gdouble _tmp18_ = 0.0;
		gint _tmp19_ = 0;
		ValaCCodeParameter* _tmp20_ = NULL;
		_tmp3_ = vala_ccode_base_module_get_current_closure_block ((ValaCCodeBaseModule*) self);
		_tmp4_ = _tmp3_;
		_tmp5_ = _vala_code_node_ref0 (_tmp4_);
		closure_block = _tmp5_;
		_tmp6_ = closure_block;
		_tmp7_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp6_);
		block_id = _tmp7_;
		_tmp8_ = block_id;
		_tmp9_ = g_strdup_printf ("_data%d_", _tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = block_id;
		_tmp12_ = g_strdup_printf ("Block%dData*", _tmp11_);
		_tmp13_ = _tmp12_;
		_tmp14_ = vala_ccode_parameter_new (_tmp10_, _tmp13_);
		_tmp15_ = _tmp14_;
		_g_free0 (_tmp13_);
		_g_free0 (_tmp10_);
		instance_param = _tmp15_;
		_tmp16_ = cparam_map;
		_tmp17_ = m;
		_tmp18_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp17_);
		_tmp19_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp18_, FALSE);
		_tmp20_ = instance_param;
		vala_map_set (_tmp16_, (gpointer) ((gintptr) _tmp19_), _tmp20_);
		_vala_ccode_node_unref0 (instance_param);
		_vala_code_node_unref0 (closure_block);
	} else {
		gboolean _tmp21_ = FALSE;
		ValaMethod* _tmp22_ = NULL;
		ValaSymbol* _tmp23_ = NULL;
		ValaSymbol* _tmp24_ = NULL;
		_tmp22_ = m;
		_tmp23_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp22_);
		_tmp24_ = _tmp23_;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_CLASS)) {
			ValaMethod* _tmp25_ = NULL;
			_tmp25_ = m;
			_tmp21_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp25_, VALA_TYPE_CREATION_METHOD);
		} else {
			_tmp21_ = FALSE;
		}
		if (_tmp21_) {
			ValaClass* cl = NULL;
			ValaMethod* _tmp26_ = NULL;
			ValaSymbol* _tmp27_ = NULL;
			ValaSymbol* _tmp28_ = NULL;
			ValaClass* _tmp29_ = NULL;
			gboolean _tmp30_ = FALSE;
			gboolean _tmp31_ = FALSE;
			ValaClass* _tmp32_ = NULL;
			gboolean _tmp33_ = FALSE;
			gboolean _tmp34_ = FALSE;
			_tmp26_ = m;
			_tmp27_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp26_);
			_tmp28_ = _tmp27_;
			_tmp29_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_CLASS, ValaClass));
			cl = _tmp29_;
			_tmp32_ = cl;
			_tmp33_ = vala_class_get_is_compact (_tmp32_);
			_tmp34_ = _tmp33_;
			if (!_tmp34_) {
				ValaCCodeFunctionCall* _tmp35_ = NULL;
				_tmp35_ = vcall;
				_tmp31_ = _tmp35_ == NULL;
			} else {
				_tmp31_ = FALSE;
			}
			if (_tmp31_) {
				gint _tmp36_ = 0;
				_tmp36_ = direction;
				_tmp30_ = (_tmp36_ & 1) == 1;
			} else {
				_tmp30_ = FALSE;
			}
			if (_tmp30_) {
				ValaMap* _tmp37_ = NULL;
				ValaMethod* _tmp38_ = NULL;
				gdouble _tmp39_ = 0.0;
				gint _tmp40_ = 0;
				ValaCCodeParameter* _tmp41_ = NULL;
				ValaCCodeParameter* _tmp42_ = NULL;
				_tmp37_ = cparam_map;
				_tmp38_ = m;
				_tmp39_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp38_);
				_tmp40_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp39_, FALSE);
				_tmp41_ = vala_ccode_parameter_new ("object_type", "GType");
				_tmp42_ = _tmp41_;
				vala_map_set (_tmp37_, (gpointer) ((gintptr) _tmp40_), _tmp42_);
				_vala_ccode_node_unref0 (_tmp42_);
			}
			_vala_code_node_unref0 (cl);
		} else {
			gboolean _tmp43_ = FALSE;
			ValaMethod* _tmp44_ = NULL;
			ValaMemberBinding _tmp45_ = 0;
			ValaMemberBinding _tmp46_ = 0;
			_tmp44_ = m;
			_tmp45_ = vala_method_get_binding (_tmp44_);
			_tmp46_ = _tmp45_;
			if (_tmp46_ == VALA_MEMBER_BINDING_INSTANCE) {
				_tmp43_ = TRUE;
			} else {
				gboolean _tmp47_ = FALSE;
				ValaMethod* _tmp48_ = NULL;
				ValaSymbol* _tmp49_ = NULL;
				ValaSymbol* _tmp50_ = NULL;
				_tmp48_ = m;
				_tmp49_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp48_);
				_tmp50_ = _tmp49_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp50_, VALA_TYPE_STRUCT)) {
					ValaMethod* _tmp51_ = NULL;
					_tmp51_ = m;
					_tmp47_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp51_, VALA_TYPE_CREATION_METHOD);
				} else {
					_tmp47_ = FALSE;
				}
				_tmp43_ = _tmp47_;
			}
			if (_tmp43_) {
				ValaTypeSymbol* parent_type = NULL;
				ValaMethod* _tmp52_ = NULL;
				ValaTypeSymbol* _tmp53_ = NULL;
				ValaDataType* this_type = NULL;
				ValaTypeSymbol* _tmp54_ = NULL;
				ValaDataType* _tmp66_ = NULL;
				ValaCCodeFile* _tmp67_ = NULL;
				ValaCCodeParameter* instance_param = NULL;
				gboolean _tmp68_ = FALSE;
				gboolean _tmp69_ = FALSE;
				ValaMethod* _tmp70_ = NULL;
				ValaMethod* _tmp71_ = NULL;
				ValaMethod* _tmp72_ = NULL;
				ValaMap* _tmp118_ = NULL;
				ValaMethod* _tmp119_ = NULL;
				gdouble _tmp120_ = 0.0;
				gint _tmp121_ = 0;
				ValaCCodeParameter* _tmp122_ = NULL;
				_tmp52_ = m;
				_tmp53_ = vala_ccode_method_module_find_parent_type (self, (ValaSymbol*) _tmp52_);
				parent_type = _tmp53_;
				_tmp54_ = parent_type;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp54_, VALA_TYPE_CLASS)) {
					ValaTypeSymbol* _tmp55_ = NULL;
					ValaObjectType* _tmp56_ = NULL;
					_tmp55_ = parent_type;
					_tmp56_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp55_, VALA_TYPE_CLASS, ValaClass));
					_vala_code_node_unref0 (this_type);
					this_type = (ValaDataType*) _tmp56_;
				} else {
					ValaTypeSymbol* _tmp57_ = NULL;
					_tmp57_ = parent_type;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp57_, VALA_TYPE_INTERFACE)) {
						ValaTypeSymbol* _tmp58_ = NULL;
						ValaObjectType* _tmp59_ = NULL;
						_tmp58_ = parent_type;
						_tmp59_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp58_, VALA_TYPE_INTERFACE, ValaInterface));
						_vala_code_node_unref0 (this_type);
						this_type = (ValaDataType*) _tmp59_;
					} else {
						ValaTypeSymbol* _tmp60_ = NULL;
						_tmp60_ = parent_type;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp60_, VALA_TYPE_STRUCT)) {
							ValaTypeSymbol* _tmp61_ = NULL;
							ValaStructValueType* _tmp62_ = NULL;
							_tmp61_ = parent_type;
							_tmp62_ = vala_struct_value_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp61_, VALA_TYPE_STRUCT, ValaStruct));
							_vala_code_node_unref0 (this_type);
							this_type = (ValaDataType*) _tmp62_;
						} else {
							ValaTypeSymbol* _tmp63_ = NULL;
							_tmp63_ = parent_type;
							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp63_, VALA_TYPE_ENUM)) {
								ValaTypeSymbol* _tmp64_ = NULL;
								ValaEnumValueType* _tmp65_ = NULL;
								_tmp64_ = parent_type;
								_tmp65_ = vala_enum_value_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp64_, VALA_TYPE_ENUM, ValaEnum));
								_vala_code_node_unref0 (this_type);
								this_type = (ValaDataType*) _tmp65_;
							} else {
								g_assert_not_reached ();
							}
						}
					}
				}
				_tmp66_ = this_type;
				_tmp67_ = decl_space;
				vala_ccode_base_module_generate_type_declaration ((ValaCCodeBaseModule*) self, _tmp66_, _tmp67_);
				instance_param = NULL;
				_tmp70_ = m;
				_tmp71_ = vala_method_get_base_interface_method (_tmp70_);
				_tmp72_ = _tmp71_;
				if (_tmp72_ != NULL) {
					ValaMethod* _tmp73_ = NULL;
					gboolean _tmp74_ = FALSE;
					gboolean _tmp75_ = FALSE;
					_tmp73_ = m;
					_tmp74_ = vala_method_get_is_abstract (_tmp73_);
					_tmp75_ = _tmp74_;
					_tmp69_ = !_tmp75_;
				} else {
					_tmp69_ = FALSE;
				}
				if (_tmp69_) {
					ValaMethod* _tmp76_ = NULL;
					gboolean _tmp77_ = FALSE;
					gboolean _tmp78_ = FALSE;
					_tmp76_ = m;
					_tmp77_ = vala_method_get_is_virtual (_tmp76_);
					_tmp78_ = _tmp77_;
					_tmp68_ = !_tmp78_;
				} else {
					_tmp68_ = FALSE;
				}
				if (_tmp68_) {
					ValaObjectType* base_type = NULL;
					ValaMethod* _tmp79_ = NULL;
					ValaMethod* _tmp80_ = NULL;
					ValaMethod* _tmp81_ = NULL;
					ValaSymbol* _tmp82_ = NULL;
					ValaSymbol* _tmp83_ = NULL;
					ValaObjectType* _tmp84_ = NULL;
					ValaObjectType* _tmp85_ = NULL;
					gchar* _tmp86_ = NULL;
					gchar* _tmp87_ = NULL;
					ValaCCodeParameter* _tmp88_ = NULL;
					_tmp79_ = m;
					_tmp80_ = vala_method_get_base_interface_method (_tmp79_);
					_tmp81_ = _tmp80_;
					_tmp82_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp81_);
					_tmp83_ = _tmp82_;
					_tmp84_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp83_, VALA_TYPE_INTERFACE, ValaInterface));
					base_type = _tmp84_;
					_tmp85_ = base_type;
					_tmp86_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp85_);
					_tmp87_ = _tmp86_;
					_tmp88_ = vala_ccode_parameter_new ("base", _tmp87_);
					_vala_ccode_node_unref0 (instance_param);
					instance_param = _tmp88_;
					_g_free0 (_tmp87_);
					_vala_code_node_unref0 (base_type);
				} else {
					ValaMethod* _tmp89_ = NULL;
					gboolean _tmp90_ = FALSE;
					gboolean _tmp91_ = FALSE;
					_tmp89_ = m;
					_tmp90_ = vala_method_get_overrides (_tmp89_);
					_tmp91_ = _tmp90_;
					if (_tmp91_) {
						ValaObjectType* base_type = NULL;
						ValaMethod* _tmp92_ = NULL;
						ValaMethod* _tmp93_ = NULL;
						ValaMethod* _tmp94_ = NULL;
						ValaSymbol* _tmp95_ = NULL;
						ValaSymbol* _tmp96_ = NULL;
						ValaObjectType* _tmp97_ = NULL;
						ValaObjectType* _tmp98_ = NULL;
						gchar* _tmp99_ = NULL;
						gchar* _tmp100_ = NULL;
						ValaCCodeParameter* _tmp101_ = NULL;
						_tmp92_ = m;
						_tmp93_ = vala_method_get_base_method (_tmp92_);
						_tmp94_ = _tmp93_;
						_tmp95_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp94_);
						_tmp96_ = _tmp95_;
						_tmp97_ = vala_object_type_new ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp96_, VALA_TYPE_CLASS, ValaClass));
						base_type = _tmp97_;
						_tmp98_ = base_type;
						_tmp99_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp98_);
						_tmp100_ = _tmp99_;
						_tmp101_ = vala_ccode_parameter_new ("base", _tmp100_);
						_vala_ccode_node_unref0 (instance_param);
						instance_param = _tmp101_;
						_g_free0 (_tmp100_);
						_vala_code_node_unref0 (base_type);
					} else {
						gboolean _tmp102_ = FALSE;
						ValaMethod* _tmp103_ = NULL;
						ValaSymbol* _tmp104_ = NULL;
						ValaSymbol* _tmp105_ = NULL;
						_tmp103_ = m;
						_tmp104_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp103_);
						_tmp105_ = _tmp104_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp105_, VALA_TYPE_STRUCT)) {
							ValaMethod* _tmp106_ = NULL;
							ValaSymbol* _tmp107_ = NULL;
							ValaSymbol* _tmp108_ = NULL;
							gboolean _tmp109_ = FALSE;
							_tmp106_ = m;
							_tmp107_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp106_);
							_tmp108_ = _tmp107_;
							_tmp109_ = vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_STRUCT, ValaStruct));
							_tmp102_ = !_tmp109_;
						} else {
							_tmp102_ = FALSE;
						}
						if (_tmp102_) {
							ValaDataType* _tmp110_ = NULL;
							gchar* _tmp111_ = NULL;
							gchar* _tmp112_ = NULL;
							ValaCCodeParameter* _tmp113_ = NULL;
							_tmp110_ = this_type;
							_tmp111_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp110_);
							_tmp112_ = _tmp111_;
							_tmp113_ = vala_ccode_parameter_new ("*self", _tmp112_);
							_vala_ccode_node_unref0 (instance_param);
							instance_param = _tmp113_;
							_g_free0 (_tmp112_);
						} else {
							ValaDataType* _tmp114_ = NULL;
							gchar* _tmp115_ = NULL;
							gchar* _tmp116_ = NULL;
							ValaCCodeParameter* _tmp117_ = NULL;
							_tmp114_ = this_type;
							_tmp115_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp114_);
							_tmp116_ = _tmp115_;
							_tmp117_ = vala_ccode_parameter_new ("self", _tmp116_);
							_vala_ccode_node_unref0 (instance_param);
							instance_param = _tmp117_;
							_g_free0 (_tmp116_);
						}
					}
				}
				_tmp118_ = cparam_map;
				_tmp119_ = m;
				_tmp120_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp119_);
				_tmp121_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp120_, FALSE);
				_tmp122_ = instance_param;
				vala_map_set (_tmp118_, (gpointer) ((gintptr) _tmp121_), _tmp122_);
				_vala_ccode_node_unref0 (instance_param);
				_vala_code_node_unref0 (this_type);
				_vala_code_node_unref0 (parent_type);
			} else {
				ValaMethod* _tmp123_ = NULL;
				ValaMemberBinding _tmp124_ = 0;
				ValaMemberBinding _tmp125_ = 0;
				_tmp123_ = m;
				_tmp124_ = vala_method_get_binding (_tmp123_);
				_tmp125_ = _tmp124_;
				if (_tmp125_ == VALA_MEMBER_BINDING_CLASS) {
					ValaTypeSymbol* parent_type = NULL;
					ValaMethod* _tmp126_ = NULL;
					ValaTypeSymbol* _tmp127_ = NULL;
					ValaDataType* this_type = NULL;
					ValaTypeSymbol* _tmp128_ = NULL;
					ValaClassType* _tmp129_ = NULL;
					ValaCCodeParameter* class_param = NULL;
					ValaDataType* _tmp130_ = NULL;
					gchar* _tmp131_ = NULL;
					gchar* _tmp132_ = NULL;
					ValaCCodeParameter* _tmp133_ = NULL;
					ValaCCodeParameter* _tmp134_ = NULL;
					ValaMap* _tmp135_ = NULL;
					ValaMethod* _tmp136_ = NULL;
					gdouble _tmp137_ = 0.0;
					gint _tmp138_ = 0;
					ValaCCodeParameter* _tmp139_ = NULL;
					_tmp126_ = m;
					_tmp127_ = vala_ccode_method_module_find_parent_type (self, (ValaSymbol*) _tmp126_);
					parent_type = _tmp127_;
					_tmp128_ = parent_type;
					_tmp129_ = vala_class_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp128_, VALA_TYPE_CLASS, ValaClass));
					_vala_code_node_unref0 (this_type);
					this_type = (ValaDataType*) _tmp129_;
					_tmp130_ = this_type;
					_tmp131_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp130_);
					_tmp132_ = _tmp131_;
					_tmp133_ = vala_ccode_parameter_new ("klass", _tmp132_);
					_tmp134_ = _tmp133_;
					_g_free0 (_tmp132_);
					class_param = _tmp134_;
					_tmp135_ = cparam_map;
					_tmp136_ = m;
					_tmp137_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp136_);
					_tmp138_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp137_, FALSE);
					_tmp139_ = class_param;
					vala_map_set (_tmp135_, (gpointer) ((gintptr) _tmp138_), _tmp139_);
					_vala_ccode_node_unref0 (class_param);
					_vala_code_node_unref0 (this_type);
					_vala_code_node_unref0 (parent_type);
				}
			}
		}
	}
	_tmp140_ = m;
	_tmp141_ = vala_ccode_method_module_is_gtypeinstance_creation_method (self, _tmp140_);
	if (_tmp141_) {
		gint type_param_index = 0;
		ValaClass* cl = NULL;
		ValaMethod* _tmp142_ = NULL;
		ValaSymbol* _tmp143_ = NULL;
		ValaSymbol* _tmp144_ = NULL;
		ValaClass* _tmp145_ = NULL;
		type_param_index = 0;
		_tmp142_ = m;
		_tmp143_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp142_);
		_tmp144_ = _tmp143_;
		_tmp145_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp144_, VALA_TYPE_CLASS, ValaClass));
		cl = _tmp145_;
		{
			ValaList* _type_param_list = NULL;
			ValaClass* _tmp146_ = NULL;
			ValaList* _tmp147_ = NULL;
			gint _type_param_size = 0;
			ValaList* _tmp148_ = NULL;
			gint _tmp149_ = 0;
			gint _tmp150_ = 0;
			gint _type_param_index = 0;
			_tmp146_ = cl;
			_tmp147_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp146_);
			_type_param_list = _tmp147_;
			_tmp148_ = _type_param_list;
			_tmp149_ = vala_collection_get_size ((ValaCollection*) _tmp148_);
			_tmp150_ = _tmp149_;
			_type_param_size = _tmp150_;
			_type_param_index = -1;
			while (TRUE) {
				gint _tmp151_ = 0;
				gint _tmp152_ = 0;
				gint _tmp153_ = 0;
				ValaTypeParameter* type_param = NULL;
				ValaList* _tmp154_ = NULL;
				gint _tmp155_ = 0;
				gpointer _tmp156_ = NULL;
				ValaMap* _tmp157_ = NULL;
				gint _tmp158_ = 0;
				gint _tmp159_ = 0;
				ValaTypeParameter* _tmp160_ = NULL;
				const gchar* _tmp161_ = NULL;
				const gchar* _tmp162_ = NULL;
				gchar* _tmp163_ = NULL;
				gchar* _tmp164_ = NULL;
				gchar* _tmp165_ = NULL;
				gchar* _tmp166_ = NULL;
				ValaCCodeParameter* _tmp167_ = NULL;
				ValaCCodeParameter* _tmp168_ = NULL;
				ValaMap* _tmp169_ = NULL;
				gint _tmp170_ = 0;
				gint _tmp171_ = 0;
				ValaTypeParameter* _tmp172_ = NULL;
				const gchar* _tmp173_ = NULL;
				const gchar* _tmp174_ = NULL;
				gchar* _tmp175_ = NULL;
				gchar* _tmp176_ = NULL;
				gchar* _tmp177_ = NULL;
				gchar* _tmp178_ = NULL;
				ValaCCodeParameter* _tmp179_ = NULL;
				ValaCCodeParameter* _tmp180_ = NULL;
				ValaMap* _tmp181_ = NULL;
				gint _tmp182_ = 0;
				gint _tmp183_ = 0;
				ValaTypeParameter* _tmp184_ = NULL;
				const gchar* _tmp185_ = NULL;
				const gchar* _tmp186_ = NULL;
				gchar* _tmp187_ = NULL;
				gchar* _tmp188_ = NULL;
				gchar* _tmp189_ = NULL;
				gchar* _tmp190_ = NULL;
				ValaCCodeParameter* _tmp191_ = NULL;
				ValaCCodeParameter* _tmp192_ = NULL;
				ValaMap* _tmp193_ = NULL;
				gint _tmp230_ = 0;
				_tmp151_ = _type_param_index;
				_type_param_index = _tmp151_ + 1;
				_tmp152_ = _type_param_index;
				_tmp153_ = _type_param_size;
				if (!(_tmp152_ < _tmp153_)) {
					break;
				}
				_tmp154_ = _type_param_list;
				_tmp155_ = _type_param_index;
				_tmp156_ = vala_list_get (_tmp154_, _tmp155_);
				type_param = (ValaTypeParameter*) _tmp156_;
				_tmp157_ = cparam_map;
				_tmp158_ = type_param_index;
				_tmp159_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp158_) + 0.01, FALSE);
				_tmp160_ = type_param;
				_tmp161_ = vala_symbol_get_name ((ValaSymbol*) _tmp160_);
				_tmp162_ = _tmp161_;
				_tmp163_ = g_utf8_strdown (_tmp162_, (gssize) (-1));
				_tmp164_ = _tmp163_;
				_tmp165_ = g_strdup_printf ("%s_type", _tmp164_);
				_tmp166_ = _tmp165_;
				_tmp167_ = vala_ccode_parameter_new (_tmp166_, "GType");
				_tmp168_ = _tmp167_;
				vala_map_set (_tmp157_, (gpointer) ((gintptr) _tmp159_), _tmp168_);
				_vala_ccode_node_unref0 (_tmp168_);
				_g_free0 (_tmp166_);
				_g_free0 (_tmp164_);
				_tmp169_ = cparam_map;
				_tmp170_ = type_param_index;
				_tmp171_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp170_) + 0.02, FALSE);
				_tmp172_ = type_param;
				_tmp173_ = vala_symbol_get_name ((ValaSymbol*) _tmp172_);
				_tmp174_ = _tmp173_;
				_tmp175_ = g_utf8_strdown (_tmp174_, (gssize) (-1));
				_tmp176_ = _tmp175_;
				_tmp177_ = g_strdup_printf ("%s_dup_func", _tmp176_);
				_tmp178_ = _tmp177_;
				_tmp179_ = vala_ccode_parameter_new (_tmp178_, "GBoxedCopyFunc");
				_tmp180_ = _tmp179_;
				vala_map_set (_tmp169_, (gpointer) ((gintptr) _tmp171_), _tmp180_);
				_vala_ccode_node_unref0 (_tmp180_);
				_g_free0 (_tmp178_);
				_g_free0 (_tmp176_);
				_tmp181_ = cparam_map;
				_tmp182_ = type_param_index;
				_tmp183_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp182_) + 0.03, FALSE);
				_tmp184_ = type_param;
				_tmp185_ = vala_symbol_get_name ((ValaSymbol*) _tmp184_);
				_tmp186_ = _tmp185_;
				_tmp187_ = g_utf8_strdown (_tmp186_, (gssize) (-1));
				_tmp188_ = _tmp187_;
				_tmp189_ = g_strdup_printf ("%s_destroy_func", _tmp188_);
				_tmp190_ = _tmp189_;
				_tmp191_ = vala_ccode_parameter_new (_tmp190_, "GDestroyNotify");
				_tmp192_ = _tmp191_;
				vala_map_set (_tmp181_, (gpointer) ((gintptr) _tmp183_), _tmp192_);
				_vala_ccode_node_unref0 (_tmp192_);
				_g_free0 (_tmp190_);
				_g_free0 (_tmp188_);
				_tmp193_ = carg_map;
				if (_tmp193_ != NULL) {
					ValaMap* _tmp194_ = NULL;
					gint _tmp195_ = 0;
					gint _tmp196_ = 0;
					ValaTypeParameter* _tmp197_ = NULL;
					const gchar* _tmp198_ = NULL;
					const gchar* _tmp199_ = NULL;
					gchar* _tmp200_ = NULL;
					gchar* _tmp201_ = NULL;
					gchar* _tmp202_ = NULL;
					gchar* _tmp203_ = NULL;
					ValaCCodeIdentifier* _tmp204_ = NULL;
					ValaCCodeIdentifier* _tmp205_ = NULL;
					ValaMap* _tmp206_ = NULL;
					gint _tmp207_ = 0;
					gint _tmp208_ = 0;
					ValaTypeParameter* _tmp209_ = NULL;
					const gchar* _tmp210_ = NULL;
					const gchar* _tmp211_ = NULL;
					gchar* _tmp212_ = NULL;
					gchar* _tmp213_ = NULL;
					gchar* _tmp214_ = NULL;
					gchar* _tmp215_ = NULL;
					ValaCCodeIdentifier* _tmp216_ = NULL;
					ValaCCodeIdentifier* _tmp217_ = NULL;
					ValaMap* _tmp218_ = NULL;
					gint _tmp219_ = 0;
					gint _tmp220_ = 0;
					ValaTypeParameter* _tmp221_ = NULL;
					const gchar* _tmp222_ = NULL;
					const gchar* _tmp223_ = NULL;
					gchar* _tmp224_ = NULL;
					gchar* _tmp225_ = NULL;
					gchar* _tmp226_ = NULL;
					gchar* _tmp227_ = NULL;
					ValaCCodeIdentifier* _tmp228_ = NULL;
					ValaCCodeIdentifier* _tmp229_ = NULL;
					_tmp194_ = carg_map;
					_tmp195_ = type_param_index;
					_tmp196_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp195_) + 0.01, FALSE);
					_tmp197_ = type_param;
					_tmp198_ = vala_symbol_get_name ((ValaSymbol*) _tmp197_);
					_tmp199_ = _tmp198_;
					_tmp200_ = g_utf8_strdown (_tmp199_, (gssize) (-1));
					_tmp201_ = _tmp200_;
					_tmp202_ = g_strdup_printf ("%s_type", _tmp201_);
					_tmp203_ = _tmp202_;
					_tmp204_ = vala_ccode_identifier_new (_tmp203_);
					_tmp205_ = _tmp204_;
					vala_map_set (_tmp194_, (gpointer) ((gintptr) _tmp196_), (ValaCCodeExpression*) _tmp205_);
					_vala_ccode_node_unref0 (_tmp205_);
					_g_free0 (_tmp203_);
					_g_free0 (_tmp201_);
					_tmp206_ = carg_map;
					_tmp207_ = type_param_index;
					_tmp208_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp207_) + 0.02, FALSE);
					_tmp209_ = type_param;
					_tmp210_ = vala_symbol_get_name ((ValaSymbol*) _tmp209_);
					_tmp211_ = _tmp210_;
					_tmp212_ = g_utf8_strdown (_tmp211_, (gssize) (-1));
					_tmp213_ = _tmp212_;
					_tmp214_ = g_strdup_printf ("%s_dup_func", _tmp213_);
					_tmp215_ = _tmp214_;
					_tmp216_ = vala_ccode_identifier_new (_tmp215_);
					_tmp217_ = _tmp216_;
					vala_map_set (_tmp206_, (gpointer) ((gintptr) _tmp208_), (ValaCCodeExpression*) _tmp217_);
					_vala_ccode_node_unref0 (_tmp217_);
					_g_free0 (_tmp215_);
					_g_free0 (_tmp213_);
					_tmp218_ = carg_map;
					_tmp219_ = type_param_index;
					_tmp220_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp219_) + 0.03, FALSE);
					_tmp221_ = type_param;
					_tmp222_ = vala_symbol_get_name ((ValaSymbol*) _tmp221_);
					_tmp223_ = _tmp222_;
					_tmp224_ = g_utf8_strdown (_tmp223_, (gssize) (-1));
					_tmp225_ = _tmp224_;
					_tmp226_ = g_strdup_printf ("%s_destroy_func", _tmp225_);
					_tmp227_ = _tmp226_;
					_tmp228_ = vala_ccode_identifier_new (_tmp227_);
					_tmp229_ = _tmp228_;
					vala_map_set (_tmp218_, (gpointer) ((gintptr) _tmp220_), (ValaCCodeExpression*) _tmp229_);
					_vala_ccode_node_unref0 (_tmp229_);
					_g_free0 (_tmp227_);
					_g_free0 (_tmp225_);
				}
				_tmp230_ = type_param_index;
				type_param_index = _tmp230_ + 1;
				_vala_code_node_unref0 (type_param);
			}
			_vala_iterable_unref0 (_type_param_list);
		}
		_vala_code_node_unref0 (cl);
	} else {
		gboolean _tmp231_ = FALSE;
		ValaMethod* _tmp232_ = NULL;
		gboolean _tmp233_ = FALSE;
		gboolean _tmp234_ = FALSE;
		_tmp232_ = m;
		_tmp233_ = vala_method_get_closure (_tmp232_);
		_tmp234_ = _tmp233_;
		if (!_tmp234_) {
			gint _tmp235_ = 0;
			_tmp235_ = direction;
			_tmp231_ = (_tmp235_ & 1) == 1;
		} else {
			_tmp231_ = FALSE;
		}
		if (_tmp231_) {
			gint type_param_index = 0;
			type_param_index = 0;
			{
				ValaList* _type_param_list = NULL;
				ValaMethod* _tmp236_ = NULL;
				ValaList* _tmp237_ = NULL;
				gint _type_param_size = 0;
				ValaList* _tmp238_ = NULL;
				gint _tmp239_ = 0;
				gint _tmp240_ = 0;
				gint _type_param_index = 0;
				_tmp236_ = m;
				_tmp237_ = vala_method_get_type_parameters (_tmp236_);
				_type_param_list = _tmp237_;
				_tmp238_ = _type_param_list;
				_tmp239_ = vala_collection_get_size ((ValaCollection*) _tmp238_);
				_tmp240_ = _tmp239_;
				_type_param_size = _tmp240_;
				_type_param_index = -1;
				while (TRUE) {
					gint _tmp241_ = 0;
					gint _tmp242_ = 0;
					gint _tmp243_ = 0;
					ValaTypeParameter* type_param = NULL;
					ValaList* _tmp244_ = NULL;
					gint _tmp245_ = 0;
					gpointer _tmp246_ = NULL;
					ValaMap* _tmp247_ = NULL;
					gint _tmp248_ = 0;
					gint _tmp249_ = 0;
					ValaTypeParameter* _tmp250_ = NULL;
					const gchar* _tmp251_ = NULL;
					const gchar* _tmp252_ = NULL;
					gchar* _tmp253_ = NULL;
					gchar* _tmp254_ = NULL;
					gchar* _tmp255_ = NULL;
					gchar* _tmp256_ = NULL;
					ValaCCodeParameter* _tmp257_ = NULL;
					ValaCCodeParameter* _tmp258_ = NULL;
					ValaMap* _tmp259_ = NULL;
					gint _tmp260_ = 0;
					gint _tmp261_ = 0;
					ValaTypeParameter* _tmp262_ = NULL;
					const gchar* _tmp263_ = NULL;
					const gchar* _tmp264_ = NULL;
					gchar* _tmp265_ = NULL;
					gchar* _tmp266_ = NULL;
					gchar* _tmp267_ = NULL;
					gchar* _tmp268_ = NULL;
					ValaCCodeParameter* _tmp269_ = NULL;
					ValaCCodeParameter* _tmp270_ = NULL;
					ValaMap* _tmp271_ = NULL;
					gint _tmp272_ = 0;
					gint _tmp273_ = 0;
					ValaTypeParameter* _tmp274_ = NULL;
					const gchar* _tmp275_ = NULL;
					const gchar* _tmp276_ = NULL;
					gchar* _tmp277_ = NULL;
					gchar* _tmp278_ = NULL;
					gchar* _tmp279_ = NULL;
					gchar* _tmp280_ = NULL;
					ValaCCodeParameter* _tmp281_ = NULL;
					ValaCCodeParameter* _tmp282_ = NULL;
					ValaMap* _tmp283_ = NULL;
					gint _tmp320_ = 0;
					_tmp241_ = _type_param_index;
					_type_param_index = _tmp241_ + 1;
					_tmp242_ = _type_param_index;
					_tmp243_ = _type_param_size;
					if (!(_tmp242_ < _tmp243_)) {
						break;
					}
					_tmp244_ = _type_param_list;
					_tmp245_ = _type_param_index;
					_tmp246_ = vala_list_get (_tmp244_, _tmp245_);
					type_param = (ValaTypeParameter*) _tmp246_;
					_tmp247_ = cparam_map;
					_tmp248_ = type_param_index;
					_tmp249_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp248_) + 0.01, FALSE);
					_tmp250_ = type_param;
					_tmp251_ = vala_symbol_get_name ((ValaSymbol*) _tmp250_);
					_tmp252_ = _tmp251_;
					_tmp253_ = g_utf8_strdown (_tmp252_, (gssize) (-1));
					_tmp254_ = _tmp253_;
					_tmp255_ = g_strdup_printf ("%s_type", _tmp254_);
					_tmp256_ = _tmp255_;
					_tmp257_ = vala_ccode_parameter_new (_tmp256_, "GType");
					_tmp258_ = _tmp257_;
					vala_map_set (_tmp247_, (gpointer) ((gintptr) _tmp249_), _tmp258_);
					_vala_ccode_node_unref0 (_tmp258_);
					_g_free0 (_tmp256_);
					_g_free0 (_tmp254_);
					_tmp259_ = cparam_map;
					_tmp260_ = type_param_index;
					_tmp261_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp260_) + 0.02, FALSE);
					_tmp262_ = type_param;
					_tmp263_ = vala_symbol_get_name ((ValaSymbol*) _tmp262_);
					_tmp264_ = _tmp263_;
					_tmp265_ = g_utf8_strdown (_tmp264_, (gssize) (-1));
					_tmp266_ = _tmp265_;
					_tmp267_ = g_strdup_printf ("%s_dup_func", _tmp266_);
					_tmp268_ = _tmp267_;
					_tmp269_ = vala_ccode_parameter_new (_tmp268_, "GBoxedCopyFunc");
					_tmp270_ = _tmp269_;
					vala_map_set (_tmp259_, (gpointer) ((gintptr) _tmp261_), _tmp270_);
					_vala_ccode_node_unref0 (_tmp270_);
					_g_free0 (_tmp268_);
					_g_free0 (_tmp266_);
					_tmp271_ = cparam_map;
					_tmp272_ = type_param_index;
					_tmp273_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp272_) + 0.03, FALSE);
					_tmp274_ = type_param;
					_tmp275_ = vala_symbol_get_name ((ValaSymbol*) _tmp274_);
					_tmp276_ = _tmp275_;
					_tmp277_ = g_utf8_strdown (_tmp276_, (gssize) (-1));
					_tmp278_ = _tmp277_;
					_tmp279_ = g_strdup_printf ("%s_destroy_func", _tmp278_);
					_tmp280_ = _tmp279_;
					_tmp281_ = vala_ccode_parameter_new (_tmp280_, "GDestroyNotify");
					_tmp282_ = _tmp281_;
					vala_map_set (_tmp271_, (gpointer) ((gintptr) _tmp273_), _tmp282_);
					_vala_ccode_node_unref0 (_tmp282_);
					_g_free0 (_tmp280_);
					_g_free0 (_tmp278_);
					_tmp283_ = carg_map;
					if (_tmp283_ != NULL) {
						ValaMap* _tmp284_ = NULL;
						gint _tmp285_ = 0;
						gint _tmp286_ = 0;
						ValaTypeParameter* _tmp287_ = NULL;
						const gchar* _tmp288_ = NULL;
						const gchar* _tmp289_ = NULL;
						gchar* _tmp290_ = NULL;
						gchar* _tmp291_ = NULL;
						gchar* _tmp292_ = NULL;
						gchar* _tmp293_ = NULL;
						ValaCCodeIdentifier* _tmp294_ = NULL;
						ValaCCodeIdentifier* _tmp295_ = NULL;
						ValaMap* _tmp296_ = NULL;
						gint _tmp297_ = 0;
						gint _tmp298_ = 0;
						ValaTypeParameter* _tmp299_ = NULL;
						const gchar* _tmp300_ = NULL;
						const gchar* _tmp301_ = NULL;
						gchar* _tmp302_ = NULL;
						gchar* _tmp303_ = NULL;
						gchar* _tmp304_ = NULL;
						gchar* _tmp305_ = NULL;
						ValaCCodeIdentifier* _tmp306_ = NULL;
						ValaCCodeIdentifier* _tmp307_ = NULL;
						ValaMap* _tmp308_ = NULL;
						gint _tmp309_ = 0;
						gint _tmp310_ = 0;
						ValaTypeParameter* _tmp311_ = NULL;
						const gchar* _tmp312_ = NULL;
						const gchar* _tmp313_ = NULL;
						gchar* _tmp314_ = NULL;
						gchar* _tmp315_ = NULL;
						gchar* _tmp316_ = NULL;
						gchar* _tmp317_ = NULL;
						ValaCCodeIdentifier* _tmp318_ = NULL;
						ValaCCodeIdentifier* _tmp319_ = NULL;
						_tmp284_ = carg_map;
						_tmp285_ = type_param_index;
						_tmp286_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp285_) + 0.01, FALSE);
						_tmp287_ = type_param;
						_tmp288_ = vala_symbol_get_name ((ValaSymbol*) _tmp287_);
						_tmp289_ = _tmp288_;
						_tmp290_ = g_utf8_strdown (_tmp289_, (gssize) (-1));
						_tmp291_ = _tmp290_;
						_tmp292_ = g_strdup_printf ("%s_type", _tmp291_);
						_tmp293_ = _tmp292_;
						_tmp294_ = vala_ccode_identifier_new (_tmp293_);
						_tmp295_ = _tmp294_;
						vala_map_set (_tmp284_, (gpointer) ((gintptr) _tmp286_), (ValaCCodeExpression*) _tmp295_);
						_vala_ccode_node_unref0 (_tmp295_);
						_g_free0 (_tmp293_);
						_g_free0 (_tmp291_);
						_tmp296_ = carg_map;
						_tmp297_ = type_param_index;
						_tmp298_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp297_) + 0.02, FALSE);
						_tmp299_ = type_param;
						_tmp300_ = vala_symbol_get_name ((ValaSymbol*) _tmp299_);
						_tmp301_ = _tmp300_;
						_tmp302_ = g_utf8_strdown (_tmp301_, (gssize) (-1));
						_tmp303_ = _tmp302_;
						_tmp304_ = g_strdup_printf ("%s_dup_func", _tmp303_);
						_tmp305_ = _tmp304_;
						_tmp306_ = vala_ccode_identifier_new (_tmp305_);
						_tmp307_ = _tmp306_;
						vala_map_set (_tmp296_, (gpointer) ((gintptr) _tmp298_), (ValaCCodeExpression*) _tmp307_);
						_vala_ccode_node_unref0 (_tmp307_);
						_g_free0 (_tmp305_);
						_g_free0 (_tmp303_);
						_tmp308_ = carg_map;
						_tmp309_ = type_param_index;
						_tmp310_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (0.1 * _tmp309_) + 0.03, FALSE);
						_tmp311_ = type_param;
						_tmp312_ = vala_symbol_get_name ((ValaSymbol*) _tmp311_);
						_tmp313_ = _tmp312_;
						_tmp314_ = g_utf8_strdown (_tmp313_, (gssize) (-1));
						_tmp315_ = _tmp314_;
						_tmp316_ = g_strdup_printf ("%s_destroy_func", _tmp315_);
						_tmp317_ = _tmp316_;
						_tmp318_ = vala_ccode_identifier_new (_tmp317_);
						_tmp319_ = _tmp318_;
						vala_map_set (_tmp308_, (gpointer) ((gintptr) _tmp310_), (ValaCCodeExpression*) _tmp319_);
						_vala_ccode_node_unref0 (_tmp319_);
						_g_free0 (_tmp317_);
						_g_free0 (_tmp315_);
					}
					_tmp320_ = type_param_index;
					type_param_index = _tmp320_ + 1;
					_vala_code_node_unref0 (type_param);
				}
				_vala_iterable_unref0 (_type_param_list);
			}
		}
	}
	{
		ValaList* _param_list = NULL;
		ValaMethod* _tmp321_ = NULL;
		ValaList* _tmp322_ = NULL;
		gint _param_size = 0;
		ValaList* _tmp323_ = NULL;
		gint _tmp324_ = 0;
		gint _tmp325_ = 0;
		gint _param_index = 0;
		_tmp321_ = m;
		_tmp322_ = vala_method_get_parameters (_tmp321_);
		_param_list = _tmp322_;
		_tmp323_ = _param_list;
		_tmp324_ = vala_collection_get_size ((ValaCollection*) _tmp323_);
		_tmp325_ = _tmp324_;
		_param_size = _tmp325_;
		_param_index = -1;
		while (TRUE) {
			gint _tmp326_ = 0;
			gint _tmp327_ = 0;
			gint _tmp328_ = 0;
			ValaParameter* param = NULL;
			ValaList* _tmp329_ = NULL;
			gint _tmp330_ = 0;
			gpointer _tmp331_ = NULL;
			ValaParameter* _tmp332_ = NULL;
			ValaParameterDirection _tmp333_ = 0;
			ValaParameterDirection _tmp334_ = 0;
			ValaParameter* _tmp337_ = NULL;
			ValaCCodeFile* _tmp338_ = NULL;
			ValaMap* _tmp339_ = NULL;
			ValaMap* _tmp340_ = NULL;
			ValaCCodeParameter* _tmp341_ = NULL;
			ValaCCodeParameter* _tmp342_ = NULL;
			_tmp326_ = _param_index;
			_param_index = _tmp326_ + 1;
			_tmp327_ = _param_index;
			_tmp328_ = _param_size;
			if (!(_tmp327_ < _tmp328_)) {
				break;
			}
			_tmp329_ = _param_list;
			_tmp330_ = _param_index;
			_tmp331_ = vala_list_get (_tmp329_, _tmp330_);
			param = (ValaParameter*) _tmp331_;
			_tmp332_ = param;
			_tmp333_ = vala_parameter_get_direction (_tmp332_);
			_tmp334_ = _tmp333_;
			if (_tmp334_ != VALA_PARAMETER_DIRECTION_OUT) {
				gint _tmp335_ = 0;
				_tmp335_ = direction;
				if ((_tmp335_ & 1) == 0) {
					_vala_code_node_unref0 (param);
					continue;
				}
			} else {
				gint _tmp336_ = 0;
				_tmp336_ = direction;
				if ((_tmp336_ & 2) == 0) {
					_vala_code_node_unref0 (param);
					continue;
				}
			}
			_tmp337_ = param;
			_tmp338_ = decl_space;
			_tmp339_ = cparam_map;
			_tmp340_ = carg_map;
			_tmp341_ = vala_ccode_method_module_generate_parameter (self, _tmp337_, _tmp338_, _tmp339_, _tmp340_);
			_tmp342_ = _tmp341_;
			_vala_ccode_node_unref0 (_tmp342_);
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp343_ = direction;
	if ((_tmp343_ & 2) != 0) {
		ValaMethod* _tmp344_ = NULL;
		ValaCCodeFile* _tmp345_ = NULL;
		ValaCCodeFunction* _tmp346_ = NULL;
		ValaMap* _tmp347_ = NULL;
		ValaMap* _tmp348_ = NULL;
		_tmp344_ = m;
		_tmp345_ = decl_space;
		_tmp346_ = func;
		_tmp347_ = cparam_map;
		_tmp348_ = carg_map;
		vala_ccode_method_module_generate_method_result_declaration (self, _tmp344_, _tmp345_, _tmp346_, _tmp347_, _tmp348_);
	}
	last_pos = -1;
	while (TRUE) {
		gint _tmp366_ = 0;
		ValaCCodeFunction* _tmp367_ = NULL;
		ValaMap* _tmp368_ = NULL;
		gint _tmp369_ = 0;
		gpointer _tmp370_ = NULL;
		ValaCCodeParameter* _tmp371_ = NULL;
		ValaCCodeFunctionDeclarator* _tmp372_ = NULL;
		ValaCCodeFunctionCall* _tmp378_ = NULL;
		gint _tmp385_ = 0;
		min_pos = -1;
		{
			ValaIterator* _pos_it = NULL;
			ValaMap* _tmp349_ = NULL;
			ValaSet* _tmp350_ = NULL;
			ValaSet* _tmp351_ = NULL;
			ValaIterator* _tmp352_ = NULL;
			ValaIterator* _tmp353_ = NULL;
			_tmp349_ = cparam_map;
			_tmp350_ = vala_map_get_keys (_tmp349_);
			_tmp351_ = _tmp350_;
			_tmp352_ = vala_iterable_iterator ((ValaIterable*) _tmp351_);
			_tmp353_ = _tmp352_;
			_vala_iterable_unref0 (_tmp351_);
			_pos_it = _tmp353_;
			while (TRUE) {
				ValaIterator* _tmp354_ = NULL;
				gboolean _tmp355_ = FALSE;
				gint pos = 0;
				ValaIterator* _tmp356_ = NULL;
				gpointer _tmp357_ = NULL;
				gboolean _tmp358_ = FALSE;
				gint _tmp359_ = 0;
				gint _tmp360_ = 0;
				_tmp354_ = _pos_it;
				_tmp355_ = vala_iterator_next (_tmp354_);
				if (!_tmp355_) {
					break;
				}
				_tmp356_ = _pos_it;
				_tmp357_ = vala_iterator_get (_tmp356_);
				pos = (gint) ((gintptr) _tmp357_);
				_tmp359_ = pos;
				_tmp360_ = last_pos;
				if (_tmp359_ > _tmp360_) {
					gboolean _tmp361_ = FALSE;
					gint _tmp362_ = 0;
					_tmp362_ = min_pos;
					if (_tmp362_ == (-1)) {
						_tmp361_ = TRUE;
					} else {
						gint _tmp363_ = 0;
						gint _tmp364_ = 0;
						_tmp363_ = pos;
						_tmp364_ = min_pos;
						_tmp361_ = _tmp363_ < _tmp364_;
					}
					_tmp358_ = _tmp361_;
				} else {
					_tmp358_ = FALSE;
				}
				if (_tmp358_) {
					gint _tmp365_ = 0;
					_tmp365_ = pos;
					min_pos = _tmp365_;
				}
			}
			_vala_iterator_unref0 (_pos_it);
		}
		_tmp366_ = min_pos;
		if (_tmp366_ == (-1)) {
			break;
		}
		_tmp367_ = func;
		_tmp368_ = cparam_map;
		_tmp369_ = min_pos;
		_tmp370_ = vala_map_get (_tmp368_, (gpointer) ((gintptr) _tmp369_));
		_tmp371_ = (ValaCCodeParameter*) _tmp370_;
		vala_ccode_function_add_parameter (_tmp367_, _tmp371_);
		_vala_ccode_node_unref0 (_tmp371_);
		_tmp372_ = vdeclarator;
		if (_tmp372_ != NULL) {
			ValaCCodeFunctionDeclarator* _tmp373_ = NULL;
			ValaMap* _tmp374_ = NULL;
			gint _tmp375_ = 0;
			gpointer _tmp376_ = NULL;
			ValaCCodeParameter* _tmp377_ = NULL;
			_tmp373_ = vdeclarator;
			_tmp374_ = cparam_map;
			_tmp375_ = min_pos;
			_tmp376_ = vala_map_get (_tmp374_, (gpointer) ((gintptr) _tmp375_));
			_tmp377_ = (ValaCCodeParameter*) _tmp376_;
			vala_ccode_function_declarator_add_parameter (_tmp373_, _tmp377_);
			_vala_ccode_node_unref0 (_tmp377_);
		}
		_tmp378_ = vcall;
		if (_tmp378_ != NULL) {
			ValaCCodeExpression* arg = NULL;
			ValaMap* _tmp379_ = NULL;
			gint _tmp380_ = 0;
			gpointer _tmp381_ = NULL;
			ValaCCodeExpression* _tmp382_ = NULL;
			_tmp379_ = carg_map;
			_tmp380_ = min_pos;
			_tmp381_ = vala_map_get (_tmp379_, (gpointer) ((gintptr) _tmp380_));
			arg = (ValaCCodeExpression*) _tmp381_;
			_tmp382_ = arg;
			if (_tmp382_ != NULL) {
				ValaCCodeFunctionCall* _tmp383_ = NULL;
				ValaCCodeExpression* _tmp384_ = NULL;
				_tmp383_ = vcall;
				_tmp384_ = arg;
				vala_ccode_function_call_add_argument (_tmp383_, _tmp384_);
			}
			_vala_ccode_node_unref0 (arg);
		}
		_tmp385_ = min_pos;
		last_pos = _tmp385_;
	}
}


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


static gchar* string_substring (const gchar* self, glong offset, glong len) {
	gchar* result = NULL;
	glong string_length = 0L;
	gboolean _tmp0_ = FALSE;
	glong _tmp1_ = 0L;
	glong _tmp8_ = 0L;
	glong _tmp14_ = 0L;
	glong _tmp17_ = 0L;
	glong _tmp18_ = 0L;
	glong _tmp19_ = 0L;
	glong _tmp20_ = 0L;
	glong _tmp21_ = 0L;
	gchar* _tmp22_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp1_ = offset;
	if (_tmp1_ >= ((glong) 0)) {
		glong _tmp2_ = 0L;
		_tmp2_ = len;
		_tmp0_ = _tmp2_ >= ((glong) 0);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		glong _tmp3_ = 0L;
		glong _tmp4_ = 0L;
		glong _tmp5_ = 0L;
		_tmp3_ = offset;
		_tmp4_ = len;
		_tmp5_ = string_strnlen ((gchar*) self, _tmp3_ + _tmp4_);
		string_length = _tmp5_;
	} else {
		gint _tmp6_ = 0;
		gint _tmp7_ = 0;
		_tmp6_ = strlen (self);
		_tmp7_ = _tmp6_;
		string_length = (glong) _tmp7_;
	}
	_tmp8_ = offset;
	if (_tmp8_ < ((glong) 0)) {
		glong _tmp9_ = 0L;
		glong _tmp10_ = 0L;
		glong _tmp11_ = 0L;
		_tmp9_ = string_length;
		_tmp10_ = offset;
		offset = _tmp9_ + _tmp10_;
		_tmp11_ = offset;
		g_return_val_if_fail (_tmp11_ >= ((glong) 0), NULL);
	} else {
		glong _tmp12_ = 0L;
		glong _tmp13_ = 0L;
		_tmp12_ = offset;
		_tmp13_ = string_length;
		g_return_val_if_fail (_tmp12_ <= _tmp13_, NULL);
	}
	_tmp14_ = len;
	if (_tmp14_ < ((glong) 0)) {
		glong _tmp15_ = 0L;
		glong _tmp16_ = 0L;
		_tmp15_ = string_length;
		_tmp16_ = offset;
		len = _tmp15_ - _tmp16_;
	}
	_tmp17_ = offset;
	_tmp18_ = len;
	_tmp19_ = string_length;
	g_return_val_if_fail ((_tmp17_ + _tmp18_) <= _tmp19_, NULL);
	_tmp20_ = offset;
	_tmp21_ = len;
	_tmp22_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) _tmp21_);
	result = _tmp22_;
	return result;
}


void vala_ccode_method_module_generate_vfunc (ValaCCodeMethodModule* self, ValaMethod* m, ValaDataType* return_type, ValaMap* cparam_map, ValaMap* carg_map, const gchar* suffix, gint direction) {
	ValaCCodeBaseModuleEmitContext* _tmp0_ = NULL;
	ValaCCodeBaseModuleEmitContext* _tmp1_ = NULL;
	gchar* cname = NULL;
	ValaMethod* _tmp2_ = NULL;
	gchar* _tmp3_ = NULL;
	gboolean _tmp4_ = FALSE;
	const gchar* _tmp5_ = NULL;
	ValaCCodeFunction* vfunc = NULL;
	const gchar* _tmp15_ = NULL;
	const gchar* _tmp16_ = NULL;
	gchar* _tmp17_ = NULL;
	gchar* _tmp18_ = NULL;
	ValaCCodeFunction* _tmp19_ = NULL;
	ValaCCodeFunction* _tmp20_ = NULL;
	ValaCCodeFunctionCall* vcast = NULL;
	ValaMethod* _tmp21_ = NULL;
	ValaSymbol* _tmp22_ = NULL;
	ValaSymbol* _tmp23_ = NULL;
	ValaCCodeFunctionCall* _tmp48_ = NULL;
	ValaCCodeIdentifier* _tmp49_ = NULL;
	ValaCCodeIdentifier* _tmp50_ = NULL;
	ValaMethod* _tmp51_ = NULL;
	gchar* _tmp52_ = NULL;
	gboolean _tmp53_ = FALSE;
	const gchar* _tmp54_ = NULL;
	ValaCCodeFunctionCall* vcall = NULL;
	ValaCCodeFunctionCall* _tmp64_ = NULL;
	const gchar* _tmp65_ = NULL;
	const gchar* _tmp66_ = NULL;
	gchar* _tmp67_ = NULL;
	gchar* _tmp68_ = NULL;
	ValaCCodeMemberAccess* _tmp69_ = NULL;
	ValaCCodeMemberAccess* _tmp70_ = NULL;
	ValaCCodeFunctionCall* _tmp71_ = NULL;
	ValaCCodeFunctionCall* _tmp72_ = NULL;
	ValaMap* _tmp73_ = NULL;
	ValaMethod* _tmp74_ = NULL;
	gdouble _tmp75_ = 0.0;
	gint _tmp76_ = 0;
	ValaCCodeIdentifier* _tmp77_ = NULL;
	ValaCCodeIdentifier* _tmp78_ = NULL;
	ValaMethod* _tmp79_ = NULL;
	ValaCCodeFile* _tmp80_ = NULL;
	ValaMap* _tmp81_ = NULL;
	ValaCCodeFunction* _tmp82_ = NULL;
	ValaMap* _tmp83_ = NULL;
	ValaCCodeFunctionCall* _tmp84_ = NULL;
	gint _tmp85_ = 0;
	ValaCCodeFunction* _tmp86_ = NULL;
	gboolean _tmp87_ = FALSE;
	gboolean _tmp88_ = FALSE;
	gboolean _tmp89_ = FALSE;
	ValaCodeContext* _tmp90_ = NULL;
	ValaCodeContext* _tmp91_ = NULL;
	gboolean _tmp92_ = FALSE;
	gboolean _tmp93_ = FALSE;
	ValaMethod* _tmp126_ = NULL;
	ValaDataType* _tmp127_ = NULL;
	ValaMethod* _tmp128_ = NULL;
	ValaSymbol* _tmp129_ = NULL;
	ValaSymbol* _tmp130_ = NULL;
	gboolean _tmp145_ = FALSE;
	ValaDataType* _tmp146_ = NULL;
	ValaMethod* _tmp176_ = NULL;
	ValaList* _tmp177_ = NULL;
	ValaList* _tmp178_ = NULL;
	gint _tmp179_ = 0;
	gint _tmp180_ = 0;
	gboolean _tmp181_ = FALSE;
	ValaCCodeFile* _tmp199_ = NULL;
	ValaCCodeFunction* _tmp200_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	g_return_if_fail (return_type != NULL);
	g_return_if_fail (cparam_map != NULL);
	g_return_if_fail (carg_map != NULL);
	g_return_if_fail (suffix != NULL);
	_tmp0_ = vala_ccode_base_module_emit_context_new (NULL);
	_tmp1_ = _tmp0_;
	vala_ccode_base_module_push_context ((ValaCCodeBaseModule*) self, _tmp1_);
	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
	_tmp2_ = m;
	_tmp3_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp2_);
	cname = _tmp3_;
	_tmp5_ = suffix;
	if (g_strcmp0 (_tmp5_, "_finish") == 0) {
		const gchar* _tmp6_ = NULL;
		gboolean _tmp7_ = FALSE;
		_tmp6_ = cname;
		_tmp7_ = g_str_has_suffix (_tmp6_, "_async");
		_tmp4_ = _tmp7_;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		const gchar* _tmp8_ = NULL;
		const gchar* _tmp9_ = NULL;
		gint _tmp10_ = 0;
		gint _tmp11_ = 0;
		gint _tmp12_ = 0;
		gint _tmp13_ = 0;
		gchar* _tmp14_ = NULL;
		_tmp8_ = cname;
		_tmp9_ = cname;
		_tmp10_ = strlen (_tmp9_);
		_tmp11_ = _tmp10_;
		_tmp12_ = strlen ("_async");
		_tmp13_ = _tmp12_;
		_tmp14_ = string_substring (_tmp8_, (glong) 0, (glong) (_tmp11_ - _tmp13_));
		_g_free0 (cname);
		cname = _tmp14_;
	}
	_tmp15_ = cname;
	_tmp16_ = suffix;
	_tmp17_ = g_strconcat (_tmp15_, _tmp16_, NULL);
	_tmp18_ = _tmp17_;
	_tmp19_ = vala_ccode_function_new (_tmp18_, "void");
	_tmp20_ = _tmp19_;
	_g_free0 (_tmp18_);
	vfunc = _tmp20_;
	vcast = NULL;
	_tmp21_ = m;
	_tmp22_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp21_);
	_tmp23_ = _tmp22_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_INTERFACE)) {
		ValaInterface* iface = NULL;
		ValaMethod* _tmp24_ = NULL;
		ValaSymbol* _tmp25_ = NULL;
		ValaSymbol* _tmp26_ = NULL;
		ValaInterface* _tmp27_ = NULL;
		ValaInterface* _tmp28_ = NULL;
		gchar* _tmp29_ = NULL;
		gchar* _tmp30_ = NULL;
		gchar* _tmp31_ = NULL;
		gchar* _tmp32_ = NULL;
		ValaCCodeIdentifier* _tmp33_ = NULL;
		ValaCCodeIdentifier* _tmp34_ = NULL;
		ValaCCodeFunctionCall* _tmp35_ = NULL;
		_tmp24_ = m;
		_tmp25_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp24_);
		_tmp26_ = _tmp25_;
		_tmp27_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, VALA_TYPE_INTERFACE, ValaInterface));
		iface = _tmp27_;
		_tmp28_ = iface;
		_tmp29_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp28_, NULL);
		_tmp30_ = _tmp29_;
		_tmp31_ = g_strdup_printf ("%s_GET_INTERFACE", _tmp30_);
		_tmp32_ = _tmp31_;
		_tmp33_ = vala_ccode_identifier_new (_tmp32_);
		_tmp34_ = _tmp33_;
		_tmp35_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp34_);
		_vala_ccode_node_unref0 (vcast);
		vcast = _tmp35_;
		_vala_ccode_node_unref0 (_tmp34_);
		_g_free0 (_tmp32_);
		_g_free0 (_tmp30_);
		_vala_code_node_unref0 (iface);
	} else {
		ValaClass* cl = NULL;
		ValaMethod* _tmp36_ = NULL;
		ValaSymbol* _tmp37_ = NULL;
		ValaSymbol* _tmp38_ = NULL;
		ValaClass* _tmp39_ = NULL;
		ValaClass* _tmp40_ = NULL;
		gchar* _tmp41_ = NULL;
		gchar* _tmp42_ = NULL;
		gchar* _tmp43_ = NULL;
		gchar* _tmp44_ = NULL;
		ValaCCodeIdentifier* _tmp45_ = NULL;
		ValaCCodeIdentifier* _tmp46_ = NULL;
		ValaCCodeFunctionCall* _tmp47_ = NULL;
		_tmp36_ = m;
		_tmp37_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp36_);
		_tmp38_ = _tmp37_;
		_tmp39_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp38_, VALA_TYPE_CLASS, ValaClass));
		cl = _tmp39_;
		_tmp40_ = cl;
		_tmp41_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp40_, NULL);
		_tmp42_ = _tmp41_;
		_tmp43_ = g_strdup_printf ("%s_GET_CLASS", _tmp42_);
		_tmp44_ = _tmp43_;
		_tmp45_ = vala_ccode_identifier_new (_tmp44_);
		_tmp46_ = _tmp45_;
		_tmp47_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp46_);
		_vala_ccode_node_unref0 (vcast);
		vcast = _tmp47_;
		_vala_ccode_node_unref0 (_tmp46_);
		_g_free0 (_tmp44_);
		_g_free0 (_tmp42_);
		_vala_code_node_unref0 (cl);
	}
	_tmp48_ = vcast;
	_tmp49_ = vala_ccode_identifier_new ("self");
	_tmp50_ = _tmp49_;
	vala_ccode_function_call_add_argument (_tmp48_, (ValaCCodeExpression*) _tmp50_);
	_vala_ccode_node_unref0 (_tmp50_);
	_tmp51_ = m;
	_tmp52_ = vala_ccode_base_module_get_ccode_vfunc_name (_tmp51_);
	_g_free0 (cname);
	cname = _tmp52_;
	_tmp54_ = suffix;
	if (g_strcmp0 (_tmp54_, "_finish") == 0) {
		const gchar* _tmp55_ = NULL;
		gboolean _tmp56_ = FALSE;
		_tmp55_ = cname;
		_tmp56_ = g_str_has_suffix (_tmp55_, "_async");
		_tmp53_ = _tmp56_;
	} else {
		_tmp53_ = FALSE;
	}
	if (_tmp53_) {
		const gchar* _tmp57_ = NULL;
		const gchar* _tmp58_ = NULL;
		gint _tmp59_ = 0;
		gint _tmp60_ = 0;
		gint _tmp61_ = 0;
		gint _tmp62_ = 0;
		gchar* _tmp63_ = NULL;
		_tmp57_ = cname;
		_tmp58_ = cname;
		_tmp59_ = strlen (_tmp58_);
		_tmp60_ = _tmp59_;
		_tmp61_ = strlen ("_async");
		_tmp62_ = _tmp61_;
		_tmp63_ = string_substring (_tmp57_, (glong) 0, (glong) (_tmp60_ - _tmp62_));
		_g_free0 (cname);
		cname = _tmp63_;
	}
	_tmp64_ = vcast;
	_tmp65_ = cname;
	_tmp66_ = suffix;
	_tmp67_ = g_strconcat (_tmp65_, _tmp66_, NULL);
	_tmp68_ = _tmp67_;
	_tmp69_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp64_, _tmp68_);
	_tmp70_ = _tmp69_;
	_tmp71_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp70_);
	_tmp72_ = _tmp71_;
	_vala_ccode_node_unref0 (_tmp70_);
	_g_free0 (_tmp68_);
	vcall = _tmp72_;
	_tmp73_ = carg_map;
	_tmp74_ = m;
	_tmp75_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp74_);
	_tmp76_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp75_, FALSE);
	_tmp77_ = vala_ccode_identifier_new ("self");
	_tmp78_ = _tmp77_;
	vala_map_set (_tmp73_, (gpointer) ((gintptr) _tmp76_), (ValaCCodeExpression*) _tmp78_);
	_vala_ccode_node_unref0 (_tmp78_);
	_tmp79_ = m;
	_tmp80_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp81_ = cparam_map;
	_tmp82_ = vfunc;
	_tmp83_ = carg_map;
	_tmp84_ = vcall;
	_tmp85_ = direction;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp79_, _tmp80_, _tmp81_, _tmp82_, NULL, _tmp83_, _tmp84_, _tmp85_);
	_tmp86_ = vfunc;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp86_);
	_tmp90_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
	_tmp91_ = _tmp90_;
	_tmp92_ = vala_code_context_get_assert (_tmp91_);
	_tmp93_ = _tmp92_;
	if (_tmp93_) {
		ValaMethod* _tmp94_ = NULL;
		ValaDataType* _tmp95_ = NULL;
		ValaDataType* _tmp96_ = NULL;
		ValaTypeSymbol* _tmp97_ = NULL;
		ValaTypeSymbol* _tmp98_ = NULL;
		_tmp94_ = m;
		_tmp95_ = vala_method_get_return_type (_tmp94_);
		_tmp96_ = _tmp95_;
		_tmp97_ = vala_data_type_get_data_type (_tmp96_);
		_tmp98_ = _tmp97_;
		_tmp89_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp98_, VALA_TYPE_STRUCT);
	} else {
		_tmp89_ = FALSE;
	}
	if (_tmp89_) {
		ValaMethod* _tmp99_ = NULL;
		ValaDataType* _tmp100_ = NULL;
		ValaDataType* _tmp101_ = NULL;
		ValaTypeSymbol* _tmp102_ = NULL;
		ValaTypeSymbol* _tmp103_ = NULL;
		gboolean _tmp104_ = FALSE;
		_tmp99_ = m;
		_tmp100_ = vala_method_get_return_type (_tmp99_);
		_tmp101_ = _tmp100_;
		_tmp102_ = vala_data_type_get_data_type (_tmp101_);
		_tmp103_ = _tmp102_;
		_tmp104_ = vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp103_, VALA_TYPE_STRUCT, ValaStruct));
		_tmp88_ = _tmp104_;
	} else {
		_tmp88_ = FALSE;
	}
	if (_tmp88_) {
		ValaMethod* _tmp105_ = NULL;
		ValaDataType* _tmp106_ = NULL;
		ValaDataType* _tmp107_ = NULL;
		ValaCCodeExpression* _tmp108_ = NULL;
		ValaCCodeExpression* _tmp109_ = NULL;
		_tmp105_ = m;
		_tmp106_ = vala_method_get_return_type (_tmp105_);
		_tmp107_ = _tmp106_;
		_tmp108_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp107_, FALSE);
		_tmp109_ = _tmp108_;
		_tmp87_ = _tmp109_ == NULL;
		_vala_ccode_node_unref0 (_tmp109_);
	} else {
		_tmp87_ = FALSE;
	}
	if (_tmp87_) {
		ValaCCodeVariableDeclarator* vardecl = NULL;
		ValaMethod* _tmp110_ = NULL;
		ValaDataType* _tmp111_ = NULL;
		ValaDataType* _tmp112_ = NULL;
		ValaCCodeExpression* _tmp113_ = NULL;
		ValaCCodeExpression* _tmp114_ = NULL;
		ValaCCodeVariableDeclarator* _tmp115_ = NULL;
		ValaCCodeVariableDeclarator* _tmp116_ = NULL;
		ValaCCodeVariableDeclarator* _tmp117_ = NULL;
		ValaCCodeFunction* _tmp118_ = NULL;
		ValaCCodeFunction* _tmp119_ = NULL;
		ValaMethod* _tmp120_ = NULL;
		ValaDataType* _tmp121_ = NULL;
		ValaDataType* _tmp122_ = NULL;
		gchar* _tmp123_ = NULL;
		gchar* _tmp124_ = NULL;
		ValaCCodeVariableDeclarator* _tmp125_ = NULL;
		_tmp110_ = m;
		_tmp111_ = vala_method_get_return_type (_tmp110_);
		_tmp112_ = _tmp111_;
		_tmp113_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp112_, TRUE);
		_tmp114_ = _tmp113_;
		_tmp115_ = vala_ccode_variable_declarator_new ("result", _tmp114_, NULL);
		_tmp116_ = _tmp115_;
		_vala_ccode_node_unref0 (_tmp114_);
		vardecl = _tmp116_;
		_tmp117_ = vardecl;
		vala_ccode_variable_declarator_set_init0 (_tmp117_, TRUE);
		_tmp118_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp119_ = _tmp118_;
		_tmp120_ = m;
		_tmp121_ = vala_method_get_return_type (_tmp120_);
		_tmp122_ = _tmp121_;
		_tmp123_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp122_);
		_tmp124_ = _tmp123_;
		_tmp125_ = vardecl;
		vala_ccode_function_add_declaration (_tmp119_, _tmp124_, (ValaCCodeDeclarator*) _tmp125_, 0);
		_g_free0 (_tmp124_);
		_vala_ccode_node_unref0 (vardecl);
	}
	_tmp126_ = m;
	_tmp127_ = return_type;
	_tmp128_ = m;
	_tmp129_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp128_);
	_tmp130_ = _tmp129_;
	vala_ccode_method_module_create_method_type_check_statement (self, _tmp126_, _tmp127_, G_TYPE_CHECK_INSTANCE_CAST (_tmp130_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol), TRUE, "self");
	{
		ValaList* _precondition_list = NULL;
		ValaMethod* _tmp131_ = NULL;
		ValaList* _tmp132_ = NULL;
		gint _precondition_size = 0;
		ValaList* _tmp133_ = NULL;
		gint _tmp134_ = 0;
		gint _tmp135_ = 0;
		gint _precondition_index = 0;
		_tmp131_ = m;
		_tmp132_ = vala_method_get_preconditions (_tmp131_);
		_precondition_list = _tmp132_;
		_tmp133_ = _precondition_list;
		_tmp134_ = vala_collection_get_size ((ValaCollection*) _tmp133_);
		_tmp135_ = _tmp134_;
		_precondition_size = _tmp135_;
		_precondition_index = -1;
		while (TRUE) {
			gint _tmp136_ = 0;
			gint _tmp137_ = 0;
			gint _tmp138_ = 0;
			ValaExpression* precondition = NULL;
			ValaList* _tmp139_ = NULL;
			gint _tmp140_ = 0;
			gpointer _tmp141_ = NULL;
			ValaMethod* _tmp142_ = NULL;
			ValaDataType* _tmp143_ = NULL;
			ValaExpression* _tmp144_ = NULL;
			_tmp136_ = _precondition_index;
			_precondition_index = _tmp136_ + 1;
			_tmp137_ = _precondition_index;
			_tmp138_ = _precondition_size;
			if (!(_tmp137_ < _tmp138_)) {
				break;
			}
			_tmp139_ = _precondition_list;
			_tmp140_ = _precondition_index;
			_tmp141_ = vala_list_get (_tmp139_, _tmp140_);
			precondition = (ValaExpression*) _tmp141_;
			_tmp142_ = m;
			_tmp143_ = return_type;
			_tmp144_ = precondition;
			vala_ccode_method_module_create_precondition_statement (self, (ValaCodeNode*) _tmp142_, _tmp143_, _tmp144_);
			_vala_code_node_unref0 (precondition);
		}
		_vala_iterable_unref0 (_precondition_list);
	}
	_tmp146_ = return_type;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp146_, VALA_TYPE_VOID_TYPE)) {
		_tmp145_ = TRUE;
	} else {
		ValaDataType* _tmp147_ = NULL;
		gboolean _tmp148_ = FALSE;
		_tmp147_ = return_type;
		_tmp148_ = vala_data_type_is_real_non_null_struct_type (_tmp147_);
		_tmp145_ = _tmp148_;
	}
	if (_tmp145_) {
		ValaCCodeFunction* _tmp149_ = NULL;
		ValaCCodeFunction* _tmp150_ = NULL;
		ValaCCodeFunctionCall* _tmp151_ = NULL;
		_tmp149_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp150_ = _tmp149_;
		_tmp151_ = vcall;
		vala_ccode_function_add_expression (_tmp150_, (ValaCCodeExpression*) _tmp151_);
	} else {
		ValaMethod* _tmp152_ = NULL;
		ValaList* _tmp153_ = NULL;
		ValaList* _tmp154_ = NULL;
		gint _tmp155_ = 0;
		gint _tmp156_ = 0;
		gboolean _tmp157_ = FALSE;
		_tmp152_ = m;
		_tmp153_ = vala_method_get_postconditions (_tmp152_);
		_tmp154_ = _tmp153_;
		_tmp155_ = vala_collection_get_size ((ValaCollection*) _tmp154_);
		_tmp156_ = _tmp155_;
		_tmp157_ = _tmp156_ == 0;
		_vala_iterable_unref0 (_tmp154_);
		if (_tmp157_) {
			ValaCCodeFunction* _tmp158_ = NULL;
			ValaCCodeFunction* _tmp159_ = NULL;
			ValaCCodeFunctionCall* _tmp160_ = NULL;
			_tmp158_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp159_ = _tmp158_;
			_tmp160_ = vcall;
			vala_ccode_function_add_return (_tmp159_, (ValaCCodeExpression*) _tmp160_);
		} else {
			ValaCCodeFunction* _tmp161_ = NULL;
			ValaCCodeFunction* _tmp162_ = NULL;
			ValaMethod* _tmp163_ = NULL;
			ValaDataType* _tmp164_ = NULL;
			gchar* _tmp165_ = NULL;
			gchar* _tmp166_ = NULL;
			gchar* _tmp167_ = NULL;
			gchar* _tmp168_ = NULL;
			ValaCCodeVariableDeclarator* _tmp169_ = NULL;
			ValaCCodeVariableDeclarator* _tmp170_ = NULL;
			ValaCCodeFunction* _tmp171_ = NULL;
			ValaCCodeFunction* _tmp172_ = NULL;
			ValaCCodeIdentifier* _tmp173_ = NULL;
			ValaCCodeIdentifier* _tmp174_ = NULL;
			ValaCCodeFunctionCall* _tmp175_ = NULL;
			_tmp161_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp162_ = _tmp161_;
			_tmp163_ = m;
			_tmp164_ = return_type;
			_tmp165_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp164_);
			_tmp166_ = _tmp165_;
			_tmp167_ = vala_ccode_method_module_get_creturn_type (self, _tmp163_, _tmp166_);
			_tmp168_ = _tmp167_;
			_tmp169_ = vala_ccode_variable_declarator_new ("result", NULL, NULL);
			_tmp170_ = _tmp169_;
			vala_ccode_function_add_declaration (_tmp162_, _tmp168_, (ValaCCodeDeclarator*) _tmp170_, 0);
			_vala_ccode_node_unref0 (_tmp170_);
			_g_free0 (_tmp168_);
			_g_free0 (_tmp166_);
			_tmp171_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp172_ = _tmp171_;
			_tmp173_ = vala_ccode_identifier_new ("result");
			_tmp174_ = _tmp173_;
			_tmp175_ = vcall;
			vala_ccode_function_add_assignment (_tmp172_, (ValaCCodeExpression*) _tmp174_, (ValaCCodeExpression*) _tmp175_);
			_vala_ccode_node_unref0 (_tmp174_);
		}
	}
	_tmp176_ = m;
	_tmp177_ = vala_method_get_postconditions (_tmp176_);
	_tmp178_ = _tmp177_;
	_tmp179_ = vala_collection_get_size ((ValaCollection*) _tmp178_);
	_tmp180_ = _tmp179_;
	_tmp181_ = _tmp180_ > 0;
	_vala_iterable_unref0 (_tmp178_);
	if (_tmp181_) {
		ValaDataType* _tmp194_ = NULL;
		{
			ValaList* _postcondition_list = NULL;
			ValaMethod* _tmp182_ = NULL;
			ValaList* _tmp183_ = NULL;
			gint _postcondition_size = 0;
			ValaList* _tmp184_ = NULL;
			gint _tmp185_ = 0;
			gint _tmp186_ = 0;
			gint _postcondition_index = 0;
			_tmp182_ = m;
			_tmp183_ = vala_method_get_postconditions (_tmp182_);
			_postcondition_list = _tmp183_;
			_tmp184_ = _postcondition_list;
			_tmp185_ = vala_collection_get_size ((ValaCollection*) _tmp184_);
			_tmp186_ = _tmp185_;
			_postcondition_size = _tmp186_;
			_postcondition_index = -1;
			while (TRUE) {
				gint _tmp187_ = 0;
				gint _tmp188_ = 0;
				gint _tmp189_ = 0;
				ValaExpression* postcondition = NULL;
				ValaList* _tmp190_ = NULL;
				gint _tmp191_ = 0;
				gpointer _tmp192_ = NULL;
				ValaExpression* _tmp193_ = NULL;
				_tmp187_ = _postcondition_index;
				_postcondition_index = _tmp187_ + 1;
				_tmp188_ = _postcondition_index;
				_tmp189_ = _postcondition_size;
				if (!(_tmp188_ < _tmp189_)) {
					break;
				}
				_tmp190_ = _postcondition_list;
				_tmp191_ = _postcondition_index;
				_tmp192_ = vala_list_get (_tmp190_, _tmp191_);
				postcondition = (ValaExpression*) _tmp192_;
				_tmp193_ = postcondition;
				vala_ccode_base_module_create_postcondition_statement ((ValaCCodeBaseModule*) self, _tmp193_);
				_vala_code_node_unref0 (postcondition);
			}
			_vala_iterable_unref0 (_postcondition_list);
		}
		_tmp194_ = return_type;
		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp194_, VALA_TYPE_VOID_TYPE)) {
			ValaCCodeFunction* _tmp195_ = NULL;
			ValaCCodeFunction* _tmp196_ = NULL;
			ValaCCodeIdentifier* _tmp197_ = NULL;
			ValaCCodeIdentifier* _tmp198_ = NULL;
			_tmp195_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
			_tmp196_ = _tmp195_;
			_tmp197_ = vala_ccode_identifier_new ("result");
			_tmp198_ = _tmp197_;
			vala_ccode_function_add_return (_tmp196_, (ValaCCodeExpression*) _tmp198_);
			_vala_ccode_node_unref0 (_tmp198_);
		}
	}
	_tmp199_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp200_ = vfunc;
	vala_ccode_file_add_function (_tmp199_, _tmp200_);
	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
	_vala_ccode_node_unref0 (vcall);
	_vala_ccode_node_unref0 (vcast);
	_vala_ccode_node_unref0 (vfunc);
	_g_free0 (cname);
}


static void vala_ccode_method_module_create_method_type_check_statement (ValaCCodeMethodModule* self, ValaMethod* m, ValaDataType* return_type, ValaTypeSymbol* t, gboolean non_null, const gchar* var_name) {
	ValaMethod* _tmp0_ = NULL;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	g_return_if_fail (return_type != NULL);
	g_return_if_fail (t != NULL);
	g_return_if_fail (var_name != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_method_get_coroutine (_tmp0_);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		ValaMethod* _tmp3_ = NULL;
		ValaDataType* _tmp4_ = NULL;
		ValaTypeSymbol* _tmp5_ = NULL;
		gboolean _tmp6_ = FALSE;
		const gchar* _tmp7_ = NULL;
		_tmp3_ = m;
		_tmp4_ = return_type;
		_tmp5_ = t;
		_tmp6_ = non_null;
		_tmp7_ = var_name;
		vala_ccode_base_module_create_type_check_statement ((ValaCCodeBaseModule*) self, (ValaCodeNode*) _tmp3_, _tmp4_, _tmp5_, _tmp6_, _tmp7_);
	}
}


static void vala_ccode_method_module_create_precondition_statement (ValaCCodeMethodModule* self, ValaCodeNode* method_node, ValaDataType* ret_type, ValaExpression* precondition) {
	ValaCCodeFunctionCall* ccheck = NULL;
	ValaCCodeFunctionCall* _tmp0_ = NULL;
	ValaExpression* _tmp1_ = NULL;
	ValaCCodeFunctionCall* _tmp2_ = NULL;
	ValaExpression* _tmp3_ = NULL;
	ValaCCodeExpression* _tmp4_ = NULL;
	ValaCCodeExpression* _tmp5_ = NULL;
	ValaCodeNode* _tmp6_ = NULL;
	ValaCCodeFunction* _tmp36_ = NULL;
	ValaCCodeFunction* _tmp37_ = NULL;
	ValaCCodeFunctionCall* _tmp38_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (method_node != NULL);
	g_return_if_fail (ret_type != NULL);
	g_return_if_fail (precondition != NULL);
	_tmp0_ = vala_ccode_function_call_new (NULL);
	ccheck = _tmp0_;
	_tmp1_ = precondition;
	vala_code_node_emit ((ValaCodeNode*) _tmp1_, (ValaCodeGenerator*) self);
	_tmp2_ = ccheck;
	_tmp3_ = precondition;
	_tmp4_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp3_);
	_tmp5_ = _tmp4_;
	vala_ccode_function_call_add_argument (_tmp2_, _tmp5_);
	_vala_ccode_node_unref0 (_tmp5_);
	_tmp6_ = method_node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_CREATION_METHOD)) {
		ValaCCodeFunctionCall* _tmp7_ = NULL;
		ValaCCodeIdentifier* _tmp8_ = NULL;
		ValaCCodeIdentifier* _tmp9_ = NULL;
		ValaCCodeFunctionCall* _tmp10_ = NULL;
		ValaCCodeConstant* _tmp11_ = NULL;
		ValaCCodeConstant* _tmp12_ = NULL;
		_tmp7_ = ccheck;
		_tmp8_ = vala_ccode_identifier_new ("g_return_val_if_fail");
		_tmp9_ = _tmp8_;
		vala_ccode_function_call_set_call (_tmp7_, (ValaCCodeExpression*) _tmp9_);
		_vala_ccode_node_unref0 (_tmp9_);
		_tmp10_ = ccheck;
		_tmp11_ = vala_ccode_constant_new ("NULL");
		_tmp12_ = _tmp11_;
		vala_ccode_function_call_add_argument (_tmp10_, (ValaCCodeExpression*) _tmp12_);
		_vala_ccode_node_unref0 (_tmp12_);
	} else {
		gboolean _tmp13_ = FALSE;
		ValaCodeNode* _tmp14_ = NULL;
		_tmp14_ = method_node;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp14_, VALA_TYPE_METHOD)) {
			ValaCodeNode* _tmp15_ = NULL;
			gboolean _tmp16_ = FALSE;
			gboolean _tmp17_ = FALSE;
			_tmp15_ = method_node;
			_tmp16_ = vala_method_get_coroutine (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_METHOD, ValaMethod));
			_tmp17_ = _tmp16_;
			_tmp13_ = _tmp17_;
		} else {
			_tmp13_ = FALSE;
		}
		if (_tmp13_) {
			ValaCCodeFunctionCall* _tmp18_ = NULL;
			ValaCCodeIdentifier* _tmp19_ = NULL;
			ValaCCodeIdentifier* _tmp20_ = NULL;
			ValaCCodeFunctionCall* _tmp21_ = NULL;
			ValaCCodeConstant* _tmp22_ = NULL;
			ValaCCodeConstant* _tmp23_ = NULL;
			_tmp18_ = ccheck;
			_tmp19_ = vala_ccode_identifier_new ("g_return_val_if_fail");
			_tmp20_ = _tmp19_;
			vala_ccode_function_call_set_call (_tmp18_, (ValaCCodeExpression*) _tmp20_);
			_vala_ccode_node_unref0 (_tmp20_);
			_tmp21_ = ccheck;
			_tmp22_ = vala_ccode_constant_new ("FALSE");
			_tmp23_ = _tmp22_;
			vala_ccode_function_call_add_argument (_tmp21_, (ValaCCodeExpression*) _tmp23_);
			_vala_ccode_node_unref0 (_tmp23_);
		} else {
			ValaDataType* _tmp24_ = NULL;
			_tmp24_ = ret_type;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_VOID_TYPE)) {
				ValaCCodeFunctionCall* _tmp25_ = NULL;
				ValaCCodeIdentifier* _tmp26_ = NULL;
				ValaCCodeIdentifier* _tmp27_ = NULL;
				_tmp25_ = ccheck;
				_tmp26_ = vala_ccode_identifier_new ("g_return_if_fail");
				_tmp27_ = _tmp26_;
				vala_ccode_function_call_set_call (_tmp25_, (ValaCCodeExpression*) _tmp27_);
				_vala_ccode_node_unref0 (_tmp27_);
			} else {
				ValaCCodeFunctionCall* _tmp28_ = NULL;
				ValaCCodeIdentifier* _tmp29_ = NULL;
				ValaCCodeIdentifier* _tmp30_ = NULL;
				ValaCCodeExpression* cdefault = NULL;
				ValaDataType* _tmp31_ = NULL;
				ValaCCodeExpression* _tmp32_ = NULL;
				ValaCCodeExpression* _tmp33_ = NULL;
				_tmp28_ = ccheck;
				_tmp29_ = vala_ccode_identifier_new ("g_return_val_if_fail");
				_tmp30_ = _tmp29_;
				vala_ccode_function_call_set_call (_tmp28_, (ValaCCodeExpression*) _tmp30_);
				_vala_ccode_node_unref0 (_tmp30_);
				_tmp31_ = ret_type;
				_tmp32_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp31_, FALSE);
				cdefault = _tmp32_;
				_tmp33_ = cdefault;
				if (_tmp33_ != NULL) {
					ValaCCodeFunctionCall* _tmp34_ = NULL;
					ValaCCodeExpression* _tmp35_ = NULL;
					_tmp34_ = ccheck;
					_tmp35_ = cdefault;
					vala_ccode_function_call_add_argument (_tmp34_, _tmp35_);
				} else {
					_vala_ccode_node_unref0 (cdefault);
					_vala_ccode_node_unref0 (ccheck);
					return;
				}
				_vala_ccode_node_unref0 (cdefault);
			}
		}
	}
	_tmp36_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp37_ = _tmp36_;
	_tmp38_ = ccheck;
	vala_ccode_function_add_expression (_tmp37_, (ValaCCodeExpression*) _tmp38_);
	_vala_ccode_node_unref0 (ccheck);
}


static ValaTypeSymbol* vala_ccode_method_module_find_parent_type (ValaCCodeMethodModule* self, ValaSymbol* sym) {
	ValaTypeSymbol* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	while (TRUE) {
		ValaSymbol* _tmp0_ = NULL;
		ValaSymbol* _tmp1_ = NULL;
		ValaSymbol* _tmp4_ = NULL;
		ValaSymbol* _tmp5_ = NULL;
		ValaSymbol* _tmp6_ = NULL;
		_tmp0_ = sym;
		if (!(_tmp0_ != NULL)) {
			break;
		}
		_tmp1_ = sym;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_TYPESYMBOL)) {
			ValaSymbol* _tmp2_ = NULL;
			ValaTypeSymbol* _tmp3_ = NULL;
			_tmp2_ = sym;
			_tmp3_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
			result = _tmp3_;
			return result;
		}
		_tmp4_ = sym;
		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
		_tmp6_ = _tmp5_;
		sym = _tmp6_;
	}
	result = NULL;
	return result;
}


static void vala_ccode_method_module_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m) {
	ValaCCodeMethodModule * self;
	ValaCreationMethod* _tmp0_ = NULL;
	ValaSourceReference* _tmp1_ = NULL;
	ValaSourceReference* _tmp2_ = NULL;
	ValaCreationMethod* _tmp3_ = NULL;
	ValaCreationMethod* _tmp4_ = NULL;
	ValaSourceFileType _tmp5_ = 0;
	ValaSourceFileType _tmp6_ = 0;
	gboolean _tmp7_ = FALSE;
	gboolean _tmp8_ = FALSE;
	ValaTypeSymbol* _tmp9_ = NULL;
	ValaTypeSymbol* _tmp10_ = NULL;
	self = (ValaCCodeMethodModule*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = m;
	_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp0_);
	_tmp2_ = _tmp1_;
	vala_ccode_base_module_push_line ((ValaCCodeBaseModule*) self, _tmp2_);
	self->priv->ellipses_to_valist = TRUE;
	_tmp3_ = m;
	vala_code_visitor_visit_method ((ValaCodeVisitor*) self, (ValaMethod*) _tmp3_);
	self->priv->ellipses_to_valist = FALSE;
	_tmp4_ = m;
	_tmp5_ = vala_symbol_get_source_type ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	if (_tmp6_ == VALA_SOURCE_FILE_TYPE_FAST) {
		return;
	}
	_tmp9_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
	_tmp10_ = _tmp9_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_CLASS)) {
		ValaClass* _tmp11_ = NULL;
		ValaClass* _tmp12_ = NULL;
		gboolean _tmp13_ = FALSE;
		gboolean _tmp14_ = FALSE;
		_tmp11_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
		_tmp12_ = _tmp11_;
		_tmp13_ = vala_class_get_is_compact (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp8_ = !_tmp14_;
	} else {
		_tmp8_ = FALSE;
	}
	if (_tmp8_) {
		ValaClass* _tmp15_ = NULL;
		ValaClass* _tmp16_ = NULL;
		gboolean _tmp17_ = FALSE;
		gboolean _tmp18_ = FALSE;
		_tmp15_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
		_tmp16_ = _tmp15_;
		_tmp17_ = vala_class_get_is_abstract (_tmp16_);
		_tmp18_ = _tmp17_;
		_tmp7_ = !_tmp18_;
	} else {
		_tmp7_ = FALSE;
	}
	if (_tmp7_) {
		ValaCreationMethod* _tmp19_ = NULL;
		ValaCreationMethod* _tmp20_ = NULL;
		gchar* _tmp21_ = NULL;
		gchar* _tmp22_ = NULL;
		ValaCreationMethod* _tmp23_ = NULL;
		gboolean _tmp24_ = FALSE;
		_tmp19_ = m;
		_tmp20_ = m;
		_tmp21_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp20_);
		_tmp22_ = _tmp21_;
		vala_ccode_method_module_create_aux_constructor (self, _tmp19_, _tmp22_, FALSE);
		_g_free0 (_tmp22_);
		_tmp23_ = m;
		_tmp24_ = vala_method_is_variadic ((ValaMethod*) _tmp23_);
		if (_tmp24_) {
			ValaCreationMethod* _tmp25_ = NULL;
			ValaCreationMethod* _tmp26_ = NULL;
			gchar* _tmp27_ = NULL;
			gchar* _tmp28_ = NULL;
			_tmp25_ = m;
			_tmp26_ = m;
			_tmp27_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp26_);
			_tmp28_ = _tmp27_;
			vala_ccode_method_module_create_aux_constructor (self, _tmp25_, _tmp28_, TRUE);
			_g_free0 (_tmp28_);
		}
	}
	vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
}


static void vala_ccode_method_module_create_aux_constructor (ValaCCodeMethodModule* self, ValaCreationMethod* m, const gchar* func_name, gboolean self_as_first_parameter) {
	ValaCCodeFunction* vfunc = NULL;
	const gchar* _tmp0_ = NULL;
	ValaCCodeFunction* _tmp1_ = NULL;
	ValaCreationMethod* _tmp2_ = NULL;
	gboolean _tmp3_ = FALSE;
	ValaHashMap* cparam_map = NULL;
	GHashFunc _tmp19_ = NULL;
	GEqualFunc _tmp20_ = NULL;
	GEqualFunc _tmp21_ = NULL;
	ValaHashMap* _tmp22_ = NULL;
	ValaHashMap* carg_map = NULL;
	GHashFunc _tmp23_ = NULL;
	GEqualFunc _tmp24_ = NULL;
	GEqualFunc _tmp25_ = NULL;
	ValaHashMap* _tmp26_ = NULL;
	ValaCCodeFunction* _tmp27_ = NULL;
	gchar* _tmp28_ = NULL;
	ValaCreationMethod* _tmp29_ = NULL;
	gboolean _tmp30_ = FALSE;
	gchar* constructor = NULL;
	gchar* _tmp35_ = NULL;
	ValaCCodeFunctionCall* vcall = NULL;
	const gchar* _tmp36_ = NULL;
	ValaCCodeIdentifier* _tmp37_ = NULL;
	ValaCCodeIdentifier* _tmp38_ = NULL;
	ValaCCodeFunctionCall* _tmp39_ = NULL;
	ValaCCodeFunctionCall* _tmp40_ = NULL;
	gboolean _tmp41_ = FALSE;
	ValaCreationMethod* _tmp58_ = NULL;
	ValaCCodeFile* _tmp59_ = NULL;
	ValaHashMap* _tmp60_ = NULL;
	ValaCCodeFunction* _tmp61_ = NULL;
	ValaHashMap* _tmp62_ = NULL;
	ValaCCodeFunctionCall* _tmp63_ = NULL;
	ValaCreationMethod* _tmp64_ = NULL;
	gboolean _tmp65_ = FALSE;
	ValaCCodeFunction* _tmp104_ = NULL;
	ValaCCodeFunction* _tmp105_ = NULL;
	ValaCCodeFunctionCall* _tmp106_ = NULL;
	ValaCCodeFile* _tmp107_ = NULL;
	ValaCCodeFunction* _tmp108_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (m != NULL);
	g_return_if_fail (func_name != NULL);
	_tmp0_ = func_name;
	_tmp1_ = vala_ccode_function_new (_tmp0_, "void");
	vfunc = _tmp1_;
	_tmp2_ = m;
	_tmp3_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp2_);
	if (_tmp3_) {
		ValaCCodeFunction* _tmp4_ = NULL;
		ValaCCodeFunction* _tmp5_ = NULL;
		ValaCCodeModifiers _tmp6_ = 0;
		ValaCCodeModifiers _tmp7_ = 0;
		_tmp4_ = vfunc;
		_tmp5_ = vfunc;
		_tmp6_ = vala_ccode_function_get_modifiers (_tmp5_);
		_tmp7_ = _tmp6_;
		vala_ccode_function_set_modifiers (_tmp5_, _tmp7_ | VALA_CCODE_MODIFIERS_STATIC);
	} else {
		gboolean _tmp8_ = FALSE;
		ValaCodeContext* _tmp9_ = NULL;
		ValaCodeContext* _tmp10_ = NULL;
		gboolean _tmp11_ = FALSE;
		gboolean _tmp12_ = FALSE;
		_tmp9_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_code_context_get_hide_internal (_tmp10_);
		_tmp12_ = _tmp11_;
		if (_tmp12_) {
			ValaCreationMethod* _tmp13_ = NULL;
			gboolean _tmp14_ = FALSE;
			_tmp13_ = m;
			_tmp14_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp13_);
			_tmp8_ = _tmp14_;
		} else {
			_tmp8_ = FALSE;
		}
		if (_tmp8_) {
			ValaCCodeFunction* _tmp15_ = NULL;
			ValaCCodeFunction* _tmp16_ = NULL;
			ValaCCodeModifiers _tmp17_ = 0;
			ValaCCodeModifiers _tmp18_ = 0;
			_tmp15_ = vfunc;
			_tmp16_ = vfunc;
			_tmp17_ = vala_ccode_function_get_modifiers (_tmp16_);
			_tmp18_ = _tmp17_;
			vala_ccode_function_set_modifiers (_tmp16_, _tmp18_ | VALA_CCODE_MODIFIERS_INTERNAL);
		}
	}
	_tmp19_ = g_direct_hash;
	_tmp20_ = g_direct_equal;
	_tmp21_ = g_direct_equal;
	_tmp22_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp19_, _tmp20_, _tmp21_);
	cparam_map = _tmp22_;
	_tmp23_ = g_direct_hash;
	_tmp24_ = g_direct_equal;
	_tmp25_ = g_direct_equal;
	_tmp26_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp23_, _tmp24_, _tmp25_);
	carg_map = _tmp26_;
	_tmp27_ = vfunc;
	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp27_);
	_tmp29_ = m;
	_tmp30_ = vala_method_is_variadic ((ValaMethod*) _tmp29_);
	if (_tmp30_) {
		ValaCreationMethod* _tmp31_ = NULL;
		gchar* _tmp32_ = NULL;
		_tmp31_ = m;
		_tmp32_ = vala_ccode_base_module_get_ccode_constructv_name (_tmp31_);
		_g_free0 (_tmp28_);
		_tmp28_ = _tmp32_;
	} else {
		ValaCreationMethod* _tmp33_ = NULL;
		gchar* _tmp34_ = NULL;
		_tmp33_ = m;
		_tmp34_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp33_);
		_g_free0 (_tmp28_);
		_tmp28_ = _tmp34_;
	}
	_tmp35_ = g_strdup (_tmp28_);
	constructor = _tmp35_;
	_tmp36_ = constructor;
	_tmp37_ = vala_ccode_identifier_new (_tmp36_);
	_tmp38_ = _tmp37_;
	_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
	_tmp40_ = _tmp39_;
	_vala_ccode_node_unref0 (_tmp38_);
	vcall = _tmp40_;
	_tmp41_ = self_as_first_parameter;
	if (_tmp41_) {
		ValaHashMap* _tmp42_ = NULL;
		ValaCreationMethod* _tmp43_ = NULL;
		gdouble _tmp44_ = 0.0;
		gint _tmp45_ = 0;
		ValaCCodeParameter* _tmp46_ = NULL;
		ValaCCodeParameter* _tmp47_ = NULL;
		ValaCCodeFunctionCall* _tmp48_ = NULL;
		ValaCCodeExpression* _tmp49_ = NULL;
		ValaCCodeExpression* _tmp50_ = NULL;
		_tmp42_ = cparam_map;
		_tmp43_ = m;
		_tmp44_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp43_);
		_tmp45_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp44_, FALSE);
		_tmp46_ = vala_ccode_parameter_new ("object_type", "GType");
		_tmp47_ = _tmp46_;
		vala_map_set ((ValaMap*) _tmp42_, (gpointer) ((gintptr) _tmp45_), _tmp47_);
		_vala_ccode_node_unref0 (_tmp47_);
		_tmp48_ = vcall;
		_tmp49_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "object_type");
		_tmp50_ = _tmp49_;
		vala_ccode_function_call_add_argument (_tmp48_, _tmp50_);
		_vala_ccode_node_unref0 (_tmp50_);
	} else {
		ValaCCodeFunctionCall* _tmp51_ = NULL;
		ValaClass* _tmp52_ = NULL;
		ValaClass* _tmp53_ = NULL;
		gchar* _tmp54_ = NULL;
		gchar* _tmp55_ = NULL;
		ValaCCodeIdentifier* _tmp56_ = NULL;
		ValaCCodeIdentifier* _tmp57_ = NULL;
		_tmp51_ = vcall;
		_tmp52_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
		_tmp53_ = _tmp52_;
		_tmp54_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp53_);
		_tmp55_ = _tmp54_;
		_tmp56_ = vala_ccode_identifier_new (_tmp55_);
		_tmp57_ = _tmp56_;
		vala_ccode_function_call_add_argument (_tmp51_, (ValaCCodeExpression*) _tmp57_);
		_vala_ccode_node_unref0 (_tmp57_);
		_g_free0 (_tmp55_);
	}
	_tmp58_ = m;
	_tmp59_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp60_ = cparam_map;
	_tmp61_ = vfunc;
	_tmp62_ = carg_map;
	_tmp63_ = vcall;
	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, (ValaMethod*) _tmp58_, _tmp59_, (ValaMap*) _tmp60_, _tmp61_, NULL, (ValaMap*) _tmp62_, _tmp63_, 3);
	_tmp64_ = m;
	_tmp65_ = vala_method_is_variadic ((ValaMethod*) _tmp64_);
	if (_tmp65_) {
		gint last_pos = 0;
		gint second_last_pos = 0;
		ValaCCodeFunctionCall* va_start = NULL;
		ValaCCodeIdentifier* _tmp82_ = NULL;
		ValaCCodeIdentifier* _tmp83_ = NULL;
		ValaCCodeFunctionCall* _tmp84_ = NULL;
		ValaCCodeFunctionCall* _tmp85_ = NULL;
		ValaCCodeFunctionCall* _tmp86_ = NULL;
		ValaCCodeIdentifier* _tmp87_ = NULL;
		ValaCCodeIdentifier* _tmp88_ = NULL;
		ValaCCodeFunctionCall* _tmp89_ = NULL;
		ValaHashMap* _tmp90_ = NULL;
		gint _tmp91_ = 0;
		gpointer _tmp92_ = NULL;
		ValaCCodeExpression* _tmp93_ = NULL;
		ValaCCodeFunction* _tmp94_ = NULL;
		ValaCCodeFunction* _tmp95_ = NULL;
		ValaCCodeVariableDeclarator* _tmp96_ = NULL;
		ValaCCodeVariableDeclarator* _tmp97_ = NULL;
		ValaCCodeFunction* _tmp98_ = NULL;
		ValaCCodeFunction* _tmp99_ = NULL;
		ValaCCodeFunctionCall* _tmp100_ = NULL;
		ValaCCodeFunctionCall* _tmp101_ = NULL;
		ValaCCodeIdentifier* _tmp102_ = NULL;
		ValaCCodeIdentifier* _tmp103_ = NULL;
		last_pos = -1;
		second_last_pos = -1;
		{
			ValaIterator* _pos_it = NULL;
			ValaHashMap* _tmp66_ = NULL;
			ValaSet* _tmp67_ = NULL;
			ValaSet* _tmp68_ = NULL;
			ValaIterator* _tmp69_ = NULL;
			ValaIterator* _tmp70_ = NULL;
			_tmp66_ = cparam_map;
			_tmp67_ = vala_map_get_keys ((ValaMap*) _tmp66_);
			_tmp68_ = _tmp67_;
			_tmp69_ = vala_iterable_iterator ((ValaIterable*) _tmp68_);
			_tmp70_ = _tmp69_;
			_vala_iterable_unref0 (_tmp68_);
			_pos_it = _tmp70_;
			while (TRUE) {
				ValaIterator* _tmp71_ = NULL;
				gboolean _tmp72_ = FALSE;
				gint pos = 0;
				ValaIterator* _tmp73_ = NULL;
				gpointer _tmp74_ = NULL;
				gint _tmp75_ = 0;
				gint _tmp76_ = 0;
				_tmp71_ = _pos_it;
				_tmp72_ = vala_iterator_next (_tmp71_);
				if (!_tmp72_) {
					break;
				}
				_tmp73_ = _pos_it;
				_tmp74_ = vala_iterator_get (_tmp73_);
				pos = (gint) ((gintptr) _tmp74_);
				_tmp75_ = pos;
				_tmp76_ = last_pos;
				if (_tmp75_ > _tmp76_) {
					gint _tmp77_ = 0;
					gint _tmp78_ = 0;
					_tmp77_ = last_pos;
					second_last_pos = _tmp77_;
					_tmp78_ = pos;
					last_pos = _tmp78_;
				} else {
					gint _tmp79_ = 0;
					gint _tmp80_ = 0;
					_tmp79_ = pos;
					_tmp80_ = second_last_pos;
					if (_tmp79_ > _tmp80_) {
						gint _tmp81_ = 0;
						_tmp81_ = pos;
						second_last_pos = _tmp81_;
					}
				}
			}
			_vala_iterator_unref0 (_pos_it);
		}
		_tmp82_ = vala_ccode_identifier_new ("va_start");
		_tmp83_ = _tmp82_;
		_tmp84_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp83_);
		_tmp85_ = _tmp84_;
		_vala_ccode_node_unref0 (_tmp83_);
		va_start = _tmp85_;
		_tmp86_ = va_start;
		_tmp87_ = vala_ccode_identifier_new ("_vala_va_list_obj");
		_tmp88_ = _tmp87_;
		vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp88_);
		_vala_ccode_node_unref0 (_tmp88_);
		_tmp89_ = va_start;
		_tmp90_ = carg_map;
		_tmp91_ = second_last_pos;
		_tmp92_ = vala_map_get ((ValaMap*) _tmp90_, (gpointer) ((gintptr) _tmp91_));
		_tmp93_ = (ValaCCodeExpression*) _tmp92_;
		vala_ccode_function_call_add_argument (_tmp89_, _tmp93_);
		_vala_ccode_node_unref0 (_tmp93_);
		_tmp94_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp95_ = _tmp94_;
		_tmp96_ = vala_ccode_variable_declarator_new ("_vala_va_list_obj", NULL, NULL);
		_tmp97_ = _tmp96_;
		vala_ccode_function_add_declaration (_tmp95_, "va_list", (ValaCCodeDeclarator*) _tmp97_, 0);
		_vala_ccode_node_unref0 (_tmp97_);
		_tmp98_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
		_tmp99_ = _tmp98_;
		_tmp100_ = va_start;
		vala_ccode_function_add_expression (_tmp99_, (ValaCCodeExpression*) _tmp100_);
		_tmp101_ = vcall;
		_tmp102_ = vala_ccode_identifier_new ("_vala_va_list_obj");
		_tmp103_ = _tmp102_;
		vala_ccode_function_call_add_argument (_tmp101_, (ValaCCodeExpression*) _tmp103_);
		_vala_ccode_node_unref0 (_tmp103_);
		_vala_ccode_node_unref0 (va_start);
	}
	_tmp104_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
	_tmp105_ = _tmp104_;
	_tmp106_ = vcall;
	vala_ccode_function_add_return (_tmp105_, (ValaCCodeExpression*) _tmp106_);
	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
	_tmp107_ = ((ValaCCodeBaseModule*) self)->cfile;
	_tmp108_ = vfunc;
	vala_ccode_file_add_function (_tmp107_, _tmp108_);
	_vala_ccode_node_unref0 (vcall);
	_g_free0 (constructor);
	_g_free0 (_tmp28_);
	_vala_map_unref0 (carg_map);
	_vala_map_unref0 (cparam_map);
	_vala_ccode_node_unref0 (vfunc);
}


ValaCCodeMethodModule* vala_ccode_method_module_construct (GType object_type) {
	ValaCCodeMethodModule* self = NULL;
	self = (ValaCCodeMethodModule*) vala_ccode_struct_module_construct (object_type);
	return self;
}


static void vala_ccode_method_module_class_init (ValaCCodeMethodModuleClass * klass) {
	vala_ccode_method_module_parent_class = g_type_class_peek_parent (klass);
	((ValaCodeVisitorClass *) klass)->finalize = vala_ccode_method_module_finalize;
	g_type_class_add_private (klass, sizeof (ValaCCodeMethodModulePrivate));
	((ValaCCodeBaseModuleClass *) klass)->method_has_wrapper = vala_ccode_method_module_real_method_has_wrapper;
	((ValaCCodeMethodModuleClass *) klass)->generate_method_result_declaration = vala_ccode_method_module_real_generate_method_result_declaration;
	((ValaCCodeBaseModuleClass *) klass)->generate_method_declaration = vala_ccode_method_module_real_generate_method_declaration;
	((ValaCodeVisitorClass *) klass)->visit_method = vala_ccode_method_module_real_visit_method;
	((ValaCCodeMethodModuleClass *) klass)->generate_parameter = vala_ccode_method_module_real_generate_parameter;
	((ValaCCodeBaseModuleClass *) klass)->generate_cparameters = vala_ccode_method_module_real_generate_cparameters;
	((ValaCodeVisitorClass *) klass)->visit_creation_method = vala_ccode_method_module_real_visit_creation_method;
}


static void vala_ccode_method_module_instance_init (ValaCCodeMethodModule * self) {
	self->priv = VALA_CCODE_METHOD_MODULE_GET_PRIVATE (self);
	self->priv->ellipses_to_valist = FALSE;
}


static void vala_ccode_method_module_finalize (ValaCodeVisitor* obj) {
	ValaCCodeMethodModule * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModule);
	VALA_CODE_VISITOR_CLASS (vala_ccode_method_module_parent_class)->finalize (obj);
}


/**
 * The link between a method and generated code.
 */
GType vala_ccode_method_module_get_type (void) {
	static volatile gsize vala_ccode_method_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_ccode_method_module_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaCCodeMethodModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_ccode_method_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaCCodeMethodModule), 0, (GInstanceInitFunc) vala_ccode_method_module_instance_init, NULL };
		GType vala_ccode_method_module_type_id;
		vala_ccode_method_module_type_id = g_type_register_static (VALA_TYPE_CCODE_STRUCT_MODULE, "ValaCCodeMethodModule", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
		g_once_init_leave (&vala_ccode_method_module_type_id__volatile, vala_ccode_method_module_type_id);
	}
	return vala_ccode_method_module_type_id__volatile;
}



