/* astmerger.c generated by valac 0.12.1.1-323029-dirty, the Vala compiler
 * generated from astmerger.vala, do not modify */

/* astmerger.vala
 *
 * Copyright (C) 2009  Andrea Del Signore
 *
 * 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, see <http://www.gnu.org/licenses/>.
 *
 * Author:
 * 	Andrea Del Signore <sejerpz@tin.it>
 */

#include <glib.h>
#include <glib-object.h>
#include <vala.h>
#include <stdlib.h>
#include <string.h>
#include <gio/gio.h>
#include <valagee.h>


#define AFRODITE_TYPE_AST_MERGER (afrodite_ast_merger_get_type ())
#define AFRODITE_AST_MERGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_AST_MERGER, AfroditeAstMerger))
#define AFRODITE_AST_MERGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_AST_MERGER, AfroditeAstMergerClass))
#define AFRODITE_IS_AST_MERGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_AST_MERGER))
#define AFRODITE_IS_AST_MERGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_AST_MERGER))
#define AFRODITE_AST_MERGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_AST_MERGER, AfroditeAstMergerClass))

typedef struct _AfroditeAstMerger AfroditeAstMerger;
typedef struct _AfroditeAstMergerClass AfroditeAstMergerClass;
typedef struct _AfroditeAstMergerPrivate AfroditeAstMergerPrivate;

#define AFRODITE_TYPE_SYMBOL (afrodite_symbol_get_type ())
#define AFRODITE_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_SYMBOL, AfroditeSymbol))
#define AFRODITE_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_SYMBOL, AfroditeSymbolClass))
#define AFRODITE_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_SYMBOL))
#define AFRODITE_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_SYMBOL))
#define AFRODITE_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_SYMBOL, AfroditeSymbolClass))

typedef struct _AfroditeSymbol AfroditeSymbol;
typedef struct _AfroditeSymbolClass AfroditeSymbolClass;

#define AFRODITE_TYPE_DATA_TYPE (afrodite_data_type_get_type ())
#define AFRODITE_DATA_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_DATA_TYPE, AfroditeDataType))
#define AFRODITE_DATA_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_DATA_TYPE, AfroditeDataTypeClass))
#define AFRODITE_IS_DATA_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_DATA_TYPE))
#define AFRODITE_IS_DATA_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_DATA_TYPE))
#define AFRODITE_DATA_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_DATA_TYPE, AfroditeDataTypeClass))

typedef struct _AfroditeDataType AfroditeDataType;
typedef struct _AfroditeDataTypeClass AfroditeDataTypeClass;

#define AFRODITE_TYPE_SOURCE_REFERENCE (afrodite_source_reference_get_type ())
#define AFRODITE_SOURCE_REFERENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_SOURCE_REFERENCE, AfroditeSourceReference))
#define AFRODITE_SOURCE_REFERENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_SOURCE_REFERENCE, AfroditeSourceReferenceClass))
#define AFRODITE_IS_SOURCE_REFERENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_SOURCE_REFERENCE))
#define AFRODITE_IS_SOURCE_REFERENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_SOURCE_REFERENCE))
#define AFRODITE_SOURCE_REFERENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_SOURCE_REFERENCE, AfroditeSourceReferenceClass))

typedef struct _AfroditeSourceReference AfroditeSourceReference;
typedef struct _AfroditeSourceReferenceClass AfroditeSourceReferenceClass;

#define AFRODITE_TYPE_SOURCE_FILE (afrodite_source_file_get_type ())
#define AFRODITE_SOURCE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_SOURCE_FILE, AfroditeSourceFile))
#define AFRODITE_SOURCE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_SOURCE_FILE, AfroditeSourceFileClass))
#define AFRODITE_IS_SOURCE_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_SOURCE_FILE))
#define AFRODITE_IS_SOURCE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_SOURCE_FILE))
#define AFRODITE_SOURCE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_SOURCE_FILE, AfroditeSourceFileClass))

typedef struct _AfroditeSourceFile AfroditeSourceFile;
typedef struct _AfroditeSourceFileClass AfroditeSourceFileClass;

#define AFRODITE_TYPE_CODE_DOM (afrodite_code_dom_get_type ())
#define AFRODITE_CODE_DOM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_CODE_DOM, AfroditeCodeDom))
#define AFRODITE_CODE_DOM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_CODE_DOM, AfroditeCodeDomClass))
#define AFRODITE_IS_CODE_DOM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_CODE_DOM))
#define AFRODITE_IS_CODE_DOM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_CODE_DOM))
#define AFRODITE_CODE_DOM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_CODE_DOM, AfroditeCodeDomClass))

typedef struct _AfroditeCodeDom AfroditeCodeDom;
typedef struct _AfroditeCodeDomClass AfroditeCodeDomClass;
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _afrodite_data_type_unref0(var) ((var == NULL) ? NULL : (var = (afrodite_data_type_unref (var), NULL)))
#define _afrodite_source_file_unref0(var) ((var == NULL) ? NULL : (var = (afrodite_source_file_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
#define _afrodite_code_dom_unref0(var) ((var == NULL) ? NULL : (var = (afrodite_code_dom_unref (var), NULL)))
#define _vala_source_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_file_unref (var), NULL)))
#define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
#define _vala_code_visitor_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_visitor_unref (var), NULL)))
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
typedef struct _AfroditeAstMergerMergeValaContextData AfroditeAstMergerMergeValaContextData;

#define AFRODITE_TYPE_MEMBER_TYPE (afrodite_member_type_get_type ())
typedef struct _AfroditeAstMergerVisitNamespaceSlicedData AfroditeAstMergerVisitNamespaceSlicedData;
typedef struct _AfroditeAstMergerVisitClassSlicedData AfroditeAstMergerVisitClassSlicedData;
typedef struct _AfroditeAstMergerVisitStructSlicedData AfroditeAstMergerVisitStructSlicedData;
typedef struct _AfroditeAstMergerVisitInterfaceSlicedData AfroditeAstMergerVisitInterfaceSlicedData;
typedef struct _AfroditeAstMergerVisitMethodSlicedData AfroditeAstMergerVisitMethodSlicedData;
typedef struct _AfroditeAstMergerVisitFieldSlicedData AfroditeAstMergerVisitFieldSlicedData;
typedef struct _AfroditeAstMergerVisitConstantSlicedData AfroditeAstMergerVisitConstantSlicedData;
typedef struct _AfroditeAstMergerVisitEnumSlicedData AfroditeAstMergerVisitEnumSlicedData;
typedef struct _AfroditeAstMergerVisitDelegateSlicedData AfroditeAstMergerVisitDelegateSlicedData;
typedef struct _AfroditeSymbolPrivate AfroditeSymbolPrivate;

#define AFRODITE_TYPE_MEMBER_BINDING (afrodite_member_binding_get_type ())
#define _afrodite_source_reference_unref0(var) ((var == NULL) ? NULL : (var = (afrodite_source_reference_unref (var), NULL)))

#define AFRODITE_TYPE_SYMBOL_ACCESSIBILITY (afrodite_symbol_accessibility_get_type ())

#define AFRODITE_TYPE_ELLIPSIS_TYPE (afrodite_ellipsis_type_get_type ())
#define AFRODITE_ELLIPSIS_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_ELLIPSIS_TYPE, AfroditeEllipsisType))
#define AFRODITE_ELLIPSIS_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_ELLIPSIS_TYPE, AfroditeEllipsisTypeClass))
#define AFRODITE_IS_ELLIPSIS_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_ELLIPSIS_TYPE))
#define AFRODITE_IS_ELLIPSIS_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_ELLIPSIS_TYPE))
#define AFRODITE_ELLIPSIS_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_ELLIPSIS_TYPE, AfroditeEllipsisTypeClass))

typedef struct _AfroditeEllipsisType AfroditeEllipsisType;
typedef struct _AfroditeEllipsisTypeClass AfroditeEllipsisTypeClass;

#define AFRODITE_TYPE_COMPARE_MODE (afrodite_compare_mode_get_type ())

struct _AfroditeAstMerger {
	ValaCodeVisitor parent_instance;
	AfroditeAstMergerPrivate * priv;
};

struct _AfroditeAstMergerClass {
	ValaCodeVisitorClass parent_class;
};

struct _AfroditeAstMergerPrivate {
	AfroditeSymbol* _current;
	AfroditeDataType* _current_type;
	AfroditeSourceReference* _current_sr;
	AfroditeSourceFile* _source_file;
	AfroditeDataType* _inferred_type;
	gchar* _vala_symbol_fqn;
	gboolean _merge_glib;
	gboolean _merge_edited_file;
	AfroditeCodeDom* _codedom;
};

struct _AfroditeAstMergerMergeValaContextData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaSourceFile* source;
	ValaCodeContext* context;
	gboolean merge_glib;
	gboolean merge_edited_file;
	AfroditeSymbol* _tmp0_;
	AfroditeSymbol* _tmp1_;
	const gchar* _tmp2_;
	AfroditeSourceFile* _tmp3_;
	AfroditeSourceFile* _tmp4_;
	const gchar* _tmp5_;
	AfroditeSourceFile* _tmp6_;
	ValaList* _tmp7_;
	ValaList* _tmp8_;
	ValaList* _u_list;
	gint _tmp9_;
	gint _u_size;
	gint _u_index;
	gpointer _tmp10_;
	ValaUsingDirective* u;
	ValaSymbol* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	AfroditeDataType* _tmp14_;
	AfroditeDataType* _tmp15_;
	ValaNamespace* _tmp16_;
};

typedef enum  {
	AFRODITE_MEMBER_TYPE_NONE,
	AFRODITE_MEMBER_TYPE_VOID,
	AFRODITE_MEMBER_TYPE_CONSTANT,
	AFRODITE_MEMBER_TYPE_ENUM,
	AFRODITE_MEMBER_TYPE_ENUM_VALUE,
	AFRODITE_MEMBER_TYPE_FIELD,
	AFRODITE_MEMBER_TYPE_PROPERTY,
	AFRODITE_MEMBER_TYPE_LOCAL_VARIABLE,
	AFRODITE_MEMBER_TYPE_SIGNAL,
	AFRODITE_MEMBER_TYPE_CREATION_METHOD,
	AFRODITE_MEMBER_TYPE_CONSTRUCTOR,
	AFRODITE_MEMBER_TYPE_DESTRUCTOR,
	AFRODITE_MEMBER_TYPE_METHOD,
	AFRODITE_MEMBER_TYPE_DELEGATE,
	AFRODITE_MEMBER_TYPE_PARAMETER,
	AFRODITE_MEMBER_TYPE_TYPE_PARAMETER,
	AFRODITE_MEMBER_TYPE_ERROR_DOMAIN,
	AFRODITE_MEMBER_TYPE_ERROR_CODE,
	AFRODITE_MEMBER_TYPE_NAMESPACE,
	AFRODITE_MEMBER_TYPE_STRUCT,
	AFRODITE_MEMBER_TYPE_CLASS,
	AFRODITE_MEMBER_TYPE_INTERFACE,
	AFRODITE_MEMBER_TYPE_SCOPED_CODE_NODE
} AfroditeMemberType;

struct _AfroditeAstMergerVisitNamespaceSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaNamespace* ns;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_;
	AfroditeSourceReference* _tmp3_;
	AfroditeSymbol* _tmp4_;
	ValaList* _tmp5_;
	ValaList* _en_list;
	gint _tmp6_;
	gint _en_size;
	gint _en_index;
	gpointer _tmp7_;
	ValaEnum* en;
	ValaList* _tmp8_;
	ValaList* _edomain_list;
	gint _tmp9_;
	gint _edomain_size;
	gint _edomain_index;
	gpointer _tmp10_;
	ValaErrorDomain* edomain;
	ValaList* _tmp11_;
	ValaList* _n_list;
	gint _tmp12_;
	gint _n_size;
	gint _n_index;
	gpointer _tmp13_;
	ValaNamespace* n;
	ValaList* _tmp14_;
	ValaList* _cl_list;
	gint _tmp15_;
	gint _cl_size;
	gint _cl_index;
	gpointer _tmp16_;
	ValaClass* cl;
	ValaList* _tmp17_;
	ValaList* _iface_list;
	gint _tmp18_;
	gint _iface_size;
	gint _iface_index;
	gpointer _tmp19_;
	ValaInterface* iface;
	ValaList* _tmp20_;
	ValaList* _st_list;
	gint _tmp21_;
	gint _st_size;
	gint _st_index;
	gpointer _tmp22_;
	ValaStruct* st;
	ValaList* _tmp23_;
	ValaList* _d_list;
	gint _tmp24_;
	gint _d_size;
	gint _d_index;
	gpointer _tmp25_;
	ValaDelegate* d;
	ValaList* _tmp26_;
	ValaList* _c_list;
	gint _tmp27_;
	gint _c_size;
	gint _c_index;
	gpointer _tmp28_;
	ValaConstant* c;
	ValaList* _tmp29_;
	ValaList* _f_list;
	gint _tmp30_;
	gint _f_size;
	gint _f_index;
	gpointer _tmp31_;
	ValaField* f;
	ValaList* _tmp32_;
	ValaList* _m_list;
	gint _tmp33_;
	gint _m_size;
	gint _m_index;
	gpointer _tmp34_;
	ValaMethod* m;
	AfroditeSymbol* _tmp35_;
	gchar* _tmp36_;
};

struct _AfroditeAstMergerVisitClassSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaClass* c;
};

struct _AfroditeAstMergerVisitStructSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaStruct* st;
};

struct _AfroditeAstMergerVisitInterfaceSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaInterface* iface;
};

struct _AfroditeAstMergerVisitMethodSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaMethod* m;
};

struct _AfroditeAstMergerVisitFieldSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaField* f;
};

struct _AfroditeAstMergerVisitConstantSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaConstant* c;
};

struct _AfroditeAstMergerVisitEnumSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaEnum* e;
};

struct _AfroditeAstMergerVisitDelegateSlicedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	AfroditeAstMerger* self;
	ValaDelegate* d;
};

typedef enum  {
	AFRODITE_MEMBER_BINDING_INSTANCE = 1,
	AFRODITE_MEMBER_BINDING_CLASS = 1 << 1,
	AFRODITE_MEMBER_BINDING_STATIC = 1 << 2,
	AFRODITE_MEMBER_BINDING_ANY = (AFRODITE_MEMBER_BINDING_INSTANCE | AFRODITE_MEMBER_BINDING_CLASS) | AFRODITE_MEMBER_BINDING_STATIC
} AfroditeMemberBinding;

struct _AfroditeSymbol {
	GObject parent_instance;
	AfroditeSymbolPrivate * priv;
	ValaList* _resolved_targets;
	ValaList* resolve_targets;
	AfroditeMemberBinding binding;
	gboolean is_virtual;
	gboolean is_abstract;
	gboolean overrides;
	gint _static_child_count;
	gint _creation_method_child_count;
};

struct _AfroditeSymbolClass {
	GObjectClass parent_class;
};

typedef enum  {
	AFRODITE_SYMBOL_ACCESSIBILITY_PRIVATE = 1,
	AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL = 1 << 1,
	AFRODITE_SYMBOL_ACCESSIBILITY_PROTECTED = 1 << 2,
	AFRODITE_SYMBOL_ACCESSIBILITY_PUBLIC = 1 << 3,
	AFRODITE_SYMBOL_ACCESSIBILITY_ANY = ((AFRODITE_SYMBOL_ACCESSIBILITY_PRIVATE | AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL) | AFRODITE_SYMBOL_ACCESSIBILITY_PROTECTED) | AFRODITE_SYMBOL_ACCESSIBILITY_PUBLIC
} AfroditeSymbolAccessibility;

typedef enum  {
	AFRODITE_COMPARE_MODE_EXACT,
	AFRODITE_COMPARE_MODE_START_WITH
} AfroditeCompareMode;


static gpointer afrodite_ast_merger_parent_class = NULL;
extern AfroditeEllipsisType* afrodite_symbol_ELLIPSIS;

GType afrodite_ast_merger_get_type (void) G_GNUC_CONST;
GType afrodite_symbol_get_type (void) G_GNUC_CONST;
gpointer afrodite_data_type_ref (gpointer instance);
void afrodite_data_type_unref (gpointer instance);
GParamSpec* afrodite_param_spec_data_type (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void afrodite_value_set_data_type (GValue* value, gpointer v_object);
void afrodite_value_take_data_type (GValue* value, gpointer v_object);
gpointer afrodite_value_get_data_type (const GValue* value);
GType afrodite_data_type_get_type (void) G_GNUC_CONST;
gpointer afrodite_source_reference_ref (gpointer instance);
void afrodite_source_reference_unref (gpointer instance);
GParamSpec* afrodite_param_spec_source_reference (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void afrodite_value_set_source_reference (GValue* value, gpointer v_object);
void afrodite_value_take_source_reference (GValue* value, gpointer v_object);
gpointer afrodite_value_get_source_reference (const GValue* value);
GType afrodite_source_reference_get_type (void) G_GNUC_CONST;
gpointer afrodite_source_file_ref (gpointer instance);
void afrodite_source_file_unref (gpointer instance);
GParamSpec* afrodite_param_spec_source_file (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void afrodite_value_set_source_file (GValue* value, gpointer v_object);
void afrodite_value_take_source_file (GValue* value, gpointer v_object);
gpointer afrodite_value_get_source_file (const GValue* value);
GType afrodite_source_file_get_type (void) G_GNUC_CONST;
gpointer afrodite_code_dom_ref (gpointer instance);
void afrodite_code_dom_unref (gpointer instance);
GParamSpec* afrodite_param_spec_code_dom (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void afrodite_value_set_code_dom (GValue* value, gpointer v_object);
void afrodite_value_take_code_dom (GValue* value, gpointer v_object);
gpointer afrodite_value_get_code_dom (const GValue* value);
GType afrodite_code_dom_get_type (void) G_GNUC_CONST;
#define AFRODITE_AST_MERGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), AFRODITE_TYPE_AST_MERGER, AfroditeAstMergerPrivate))
enum  {
	AFRODITE_AST_MERGER_DUMMY_PROPERTY
};
AfroditeAstMerger* afrodite_ast_merger_new (AfroditeCodeDom* codedom);
AfroditeAstMerger* afrodite_ast_merger_construct (GType object_type, AfroditeCodeDom* codedom);
static void afrodite_ast_merger_merge_vala_context_data_free (gpointer _data);
void afrodite_ast_merger_merge_vala_context (AfroditeAstMerger* self, ValaSourceFile* source, ValaCodeContext* context, gboolean merge_glib, gboolean merge_edited_file, GAsyncReadyCallback _callback_, gpointer _user_data_);
void afrodite_ast_merger_merge_vala_context_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static gboolean afrodite_ast_merger_merge_vala_context_co (AfroditeAstMergerMergeValaContextData* data);
AfroditeSymbol* afrodite_code_dom_get_root (AfroditeCodeDom* self);
AfroditeSourceFile* afrodite_code_dom_lookup_source_file (AfroditeCodeDom* self, const gchar* filename);
AfroditeSourceFile* afrodite_code_dom_add_source_file (AfroditeCodeDom* self, const gchar* filename);
AfroditeDataType* afrodite_source_file_add_using_directive (AfroditeSourceFile* self, const gchar* name);
static void afrodite_ast_merger_visit_namespace_sliced (AfroditeAstMerger* self, ValaNamespace* ns, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_namespace_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_merge_vala_context_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
static void afrodite_ast_merger_visit_namespace_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_namespace_sliced_co (AfroditeAstMergerVisitNamespaceSlicedData* data);
GType afrodite_member_type_get_type (void) G_GNUC_CONST;
static AfroditeSymbol* afrodite_ast_merger_visit_symbol (AfroditeAstMerger* self, AfroditeMemberType type, ValaSymbol* s, AfroditeSourceReference** source_reference);
static void afrodite_ast_merger_visit_enum_sliced (AfroditeAstMerger* self, ValaEnum* e, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_enum_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_namespace_sliced_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
static void afrodite_ast_merger_visit_class_sliced (AfroditeAstMerger* self, ValaClass* c, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_class_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_interface_sliced (AfroditeAstMerger* self, ValaInterface* iface, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_interface_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_struct_sliced (AfroditeAstMerger* self, ValaStruct* st, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_struct_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_delegate_sliced (AfroditeAstMerger* self, ValaDelegate* d, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_delegate_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_constant_sliced (AfroditeAstMerger* self, ValaConstant* c, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_constant_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_field_sliced (AfroditeAstMerger* self, ValaField* f, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_field_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_method_sliced (AfroditeAstMerger* self, ValaMethod* m, GAsyncReadyCallback _callback_, gpointer _user_data_);
static void afrodite_ast_merger_visit_method_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_);
static void afrodite_ast_merger_visit_class_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_class_sliced_co (AfroditeAstMergerVisitClassSlicedData* data);
static void afrodite_ast_merger_visit_struct_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_struct_sliced_co (AfroditeAstMergerVisitStructSlicedData* data);
static void afrodite_ast_merger_visit_interface_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_interface_sliced_co (AfroditeAstMergerVisitInterfaceSlicedData* data);
static void afrodite_ast_merger_visit_method_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_method_sliced_co (AfroditeAstMergerVisitMethodSlicedData* data);
static void afrodite_ast_merger_visit_field_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_field_sliced_co (AfroditeAstMergerVisitFieldSlicedData* data);
static void afrodite_ast_merger_visit_constant_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_constant_sliced_co (AfroditeAstMergerVisitConstantSlicedData* data);
static void afrodite_ast_merger_visit_enum_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_enum_sliced_co (AfroditeAstMergerVisitEnumSlicedData* data);
static void afrodite_ast_merger_visit_delegate_sliced_data_free (gpointer _data);
static gboolean afrodite_ast_merger_visit_delegate_sliced_co (AfroditeAstMergerVisitDelegateSlicedData* data);
static void afrodite_ast_merger_real_visit_class (ValaCodeVisitor* base, ValaClass* c);
GType afrodite_member_binding_get_type (void) G_GNUC_CONST;
static void afrodite_ast_merger_real_visit_struct (ValaCodeVisitor* base, ValaStruct* s);
static void afrodite_ast_merger_set_fqn (AfroditeAstMerger* self, const gchar* name);
static AfroditeSymbol* afrodite_ast_merger_add_symbol (AfroditeAstMerger* self, AfroditeSymbol* parent, AfroditeMemberType type, ValaSymbol* s, AfroditeSourceReference** source_ref, gint last_line, gint last_column);
AfroditeSymbol* afrodite_code_dom_lookup (AfroditeCodeDom* self, const gchar* fully_qualified_name);
AfroditeSourceReference* afrodite_symbol_lookup_source_reference_filename (AfroditeSymbol* self, const gchar* filename);
const gchar* afrodite_source_file_get_filename (AfroditeSourceFile* self);
static AfroditeSourceReference* afrodite_ast_merger_create_source_reference (AfroditeAstMerger* self, ValaCodeNode* s, gint last_line, gint last_column);
void afrodite_symbol_add_source_reference (AfroditeSymbol* self, AfroditeSourceReference* reference);
void afrodite_source_file_add_symbol (AfroditeSourceFile* self, AfroditeSymbol* symbol);
gchar* afrodite_symbol_get_fully_qualified_name (AfroditeSymbol* self);
const gchar* afrodite_member_type_to_string (AfroditeMemberType self);
AfroditeSymbol* afrodite_symbol_new (const gchar* symbol_name, AfroditeMemberType type);
AfroditeSymbol* afrodite_symbol_construct (GType object_type, const gchar* symbol_name, AfroditeMemberType type);
GType afrodite_symbol_accessibility_get_type (void) G_GNUC_CONST;
static AfroditeSymbolAccessibility afrodite_ast_merger_get_vala_symbol_access (AfroditeAstMerger* self, ValaSymbolAccessibility access);
void afrodite_symbol_set_access (AfroditeSymbol* self, AfroditeSymbolAccessibility value);
void afrodite_symbol_add_child (AfroditeSymbol* self, AfroditeSymbol* child);
static AfroditeSymbol* afrodite_ast_merger_add_codenode (AfroditeAstMerger* self, AfroditeSymbol* parent, const gchar* name, AfroditeMemberType type, ValaCodeNode* c, AfroditeSourceReference** source_ref, gint last_line, gint last_column);
static AfroditeMemberBinding afrodite_ast_merger_get_vala_member_binding (AfroditeAstMerger* self, ValaMemberBinding binding);
AfroditeSourceReference* afrodite_source_reference_new (void);
AfroditeSourceReference* afrodite_source_reference_construct (GType object_type);
void afrodite_source_reference_set_file (AfroditeSourceReference* self, AfroditeSourceFile* value);
void afrodite_source_reference_set_first_line (AfroditeSourceReference* self, gint value);
void afrodite_source_reference_set_first_column (AfroditeSourceReference* self, gint value);
void afrodite_source_reference_set_last_line (AfroditeSourceReference* self, gint value);
void afrodite_source_reference_set_last_column (AfroditeSourceReference* self, gint value);
static void afrodite_ast_merger_real_visit_interface (ValaCodeVisitor* base, ValaInterface* iface);
static void afrodite_ast_merger_real_visit_method (ValaCodeVisitor* base, ValaMethod* m);
AfroditeDataType* afrodite_data_type_new (const gchar* type_name, const gchar* name);
AfroditeDataType* afrodite_data_type_construct (GType object_type, const gchar* type_name, const gchar* name);
void afrodite_symbol_set_return_type (AfroditeSymbol* self, AfroditeDataType* value);
static void afrodite_ast_merger_visit_type_for_generics (AfroditeAstMerger* self, ValaDataType* t, AfroditeDataType* ct);
AfroditeDataType* afrodite_symbol_get_return_type (AfroditeSymbol* self);
AfroditeSymbol* afrodite_symbol_get_generic_type_argument (AfroditeSymbol* self, const gchar* name);
const gchar* afrodite_data_type_get_type_name (AfroditeDataType* self);
void afrodite_data_type_set_is_generic (AfroditeDataType* self, gboolean value);
static void afrodite_ast_merger_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m);
void afrodite_symbol_set_display_name (AfroditeSymbol* self, const gchar* value);
void afrodite_data_type_set_symbol (AfroditeDataType* self, AfroditeSymbol* value);
void afrodite_symbol_add_resolved_target (AfroditeSymbol* self, AfroditeSymbol* resolve_target);
static void afrodite_ast_merger_real_visit_constructor (ValaCodeVisitor* base, ValaConstructor* m);
const gchar* afrodite_symbol_get_name (AfroditeSymbol* self);
static void afrodite_ast_merger_real_visit_destructor (ValaCodeVisitor* base, ValaDestructor* m);
const gchar* afrodite_symbol_get_display_name (AfroditeSymbol* self);
static void afrodite_ast_merger_real_visit_enum_value (ValaCodeVisitor* base, ValaEnumValue* ev);
AfroditeSymbolAccessibility afrodite_symbol_get_access (AfroditeSymbol* self);
static void afrodite_ast_merger_real_visit_enum (ValaCodeVisitor* base, ValaEnum* e);
static void afrodite_ast_merger_real_visit_delegate (ValaCodeVisitor* base, ValaDelegate* d);
static void afrodite_ast_merger_real_visit_signal (ValaCodeVisitor* base, ValaSignal* s);
static void afrodite_ast_merger_real_visit_field (ValaCodeVisitor* base, ValaField* f);
static gchar* afrodite_ast_merger_get_datatype_typename (AfroditeAstMerger* self, ValaDataType* type);
static void afrodite_ast_merger_real_visit_constant (ValaCodeVisitor* base, ValaConstant* c);
static void afrodite_ast_merger_real_visit_property (ValaCodeVisitor* base, ValaProperty* p);
static void afrodite_ast_merger_real_visit_property_accessor (ValaCodeVisitor* base, ValaPropertyAccessor* a);
static AfroditeSymbol* afrodite_ast_merger_visit_scoped_codenode (AfroditeAstMerger* self, const gchar* name, ValaCodeNode* node, ValaBlock* body);
static void afrodite_ast_merger_real_visit_error_domain (ValaCodeVisitor* base, ValaErrorDomain* ed);
static void afrodite_ast_merger_real_visit_error_code (ValaCodeVisitor* base, ValaErrorCode* ecode);
static gchar* afrodite_ast_merger_expression_to_string (AfroditeAstMerger* self, ValaExpression* e);
gchar* afrodite_utils_binary_operator_to_string (ValaBinaryOperator op);
gchar* afrodite_utils_unary_operator_to_string (ValaUnaryOperator op);
void afrodite_utils_trace (const gchar* format, ...);
static void afrodite_ast_merger_real_visit_formal_parameter (ValaCodeVisitor* base, ValaParameter* p);
GType afrodite_ellipsis_type_get_type (void) G_GNUC_CONST;
void afrodite_data_type_set_default_expression (AfroditeDataType* self, const gchar* value);
void afrodite_data_type_set_is_out (AfroditeDataType* self, gboolean value);
void afrodite_data_type_set_is_ref (AfroditeDataType* self, gboolean value);
void afrodite_data_type_set_is_array (AfroditeDataType* self, gboolean value);
void afrodite_symbol_add_parameter (AfroditeSymbol* self, AfroditeDataType* par);
static void afrodite_ast_merger_real_visit_block (ValaCodeVisitor* base, ValaBlock* b);
gint afrodite_source_reference_get_last_line (AfroditeSourceReference* self);
static void afrodite_ast_merger_real_visit_local_variable (ValaCodeVisitor* base, ValaLocalVariable* local);
void afrodite_data_type_set_type_name (AfroditeDataType* self, const gchar* value);
void afrodite_data_type_set_source_reference (AfroditeDataType* self, AfroditeSourceReference* value);
gboolean afrodite_symbol_get_has_local_variables (AfroditeSymbol* self);
AfroditeDataType* afrodite_symbol_lookup_local_variable (AfroditeSymbol* self, const gchar* name);
const gchar* afrodite_data_type_get_name (AfroditeDataType* self);
void afrodite_symbol_remove_local_variable (AfroditeSymbol* self, AfroditeDataType* variable);
void afrodite_symbol_add_local_variable (AfroditeSymbol* self, AfroditeDataType* variable);
static void afrodite_ast_merger_real_visit_lambda_expression (ValaCodeVisitor* base, ValaLambdaExpression* expr);
static void afrodite_ast_merger_real_visit_member_access (ValaCodeVisitor* base, ValaMemberAccess* expr);
GType afrodite_compare_mode_get_type (void) G_GNUC_CONST;
AfroditeDataType* afrodite_symbol_lookup_datatype_for_variable_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name, AfroditeSymbolAccessibility access);
static void afrodite_ast_merger_real_visit_method_call (ValaCodeVisitor* base, ValaMethodCall* mc);
static void afrodite_ast_merger_real_visit_object_creation_expression (ValaCodeVisitor* base, ValaObjectCreationExpression* expr);
static void afrodite_ast_merger_real_visit_initializer_list (ValaCodeVisitor* base, ValaInitializerList* list);
static void afrodite_ast_merger_real_visit_binary_expression (ValaCodeVisitor* base, ValaBinaryExpression* expr);
static void afrodite_ast_merger_real_visit_boolean_literal (ValaCodeVisitor* base, ValaBooleanLiteral* lit);
static void afrodite_ast_merger_real_visit_character_literal (ValaCodeVisitor* base, ValaCharacterLiteral* lit);
static void afrodite_ast_merger_real_visit_integer_literal (ValaCodeVisitor* base, ValaIntegerLiteral* lit);
static void afrodite_ast_merger_real_visit_real_literal (ValaCodeVisitor* base, ValaRealLiteral* lit);
static void afrodite_ast_merger_real_visit_string_literal (ValaCodeVisitor* base, ValaStringLiteral* lit);
static void afrodite_ast_merger_real_visit_declaration_statement (ValaCodeVisitor* base, ValaDeclarationStatement* stmt);
static void afrodite_ast_merger_real_visit_foreach_statement (ValaCodeVisitor* base, ValaForeachStatement* stmt);
void afrodite_data_type_set_is_iterator (AfroditeDataType* self, gboolean value);
static void afrodite_ast_merger_real_visit_while_statement (ValaCodeVisitor* base, ValaWhileStatement* stmt);
static void afrodite_ast_merger_real_visit_do_statement (ValaCodeVisitor* base, ValaDoStatement* stmt);
static void afrodite_ast_merger_real_visit_for_statement (ValaCodeVisitor* base, ValaForStatement* stmt);
static void afrodite_ast_merger_real_visit_try_statement (ValaCodeVisitor* base, ValaTryStatement* stmt);
static void afrodite_ast_merger_real_visit_catch_clause (ValaCodeVisitor* base, ValaCatchClause* clause);
static void afrodite_ast_merger_real_visit_if_statement (ValaCodeVisitor* base, ValaIfStatement* stmt);
static void afrodite_ast_merger_real_visit_switch_statement (ValaCodeVisitor* base, ValaSwitchStatement* stmt);
static void afrodite_ast_merger_real_visit_switch_section (ValaCodeVisitor* base, ValaSwitchSection* section);
static void afrodite_ast_merger_real_visit_type_parameter (ValaCodeVisitor* base, ValaTypeParameter* p);
void afrodite_symbol_add_generic_type_argument (AfroditeSymbol* self, AfroditeSymbol* sym);
static void afrodite_ast_merger_real_visit_data_type (ValaCodeVisitor* base, ValaDataType* type);
void afrodite_data_type_add_generic_type (AfroditeDataType* self, AfroditeDataType* type);
AfroditeMemberType afrodite_symbol_get_member_type (AfroditeSymbol* self);
void afrodite_symbol_add_base_type (AfroditeSymbol* self, AfroditeDataType* type);
static void afrodite_ast_merger_finalize (ValaCodeVisitor* obj);
static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
static gint _vala_array_length (gpointer array);


static gpointer _afrodite_code_dom_ref0 (gpointer self) {
	return self ? afrodite_code_dom_ref (self) : NULL;
}


AfroditeAstMerger* afrodite_ast_merger_construct (GType object_type, AfroditeCodeDom* codedom) {
	AfroditeAstMerger* self = NULL;
	AfroditeCodeDom* _tmp0_;
	g_return_val_if_fail (codedom != NULL, NULL);
	self = (AfroditeAstMerger*) vala_code_visitor_construct (object_type);
	_tmp0_ = _afrodite_code_dom_ref0 (codedom);
	_afrodite_code_dom_unref0 (self->priv->_codedom);
	self->priv->_codedom = _tmp0_;
	return self;
}


AfroditeAstMerger* afrodite_ast_merger_new (AfroditeCodeDom* codedom) {
	return afrodite_ast_merger_construct (AFRODITE_TYPE_AST_MERGER, codedom);
}


static void afrodite_ast_merger_merge_vala_context_data_free (gpointer _data) {
	AfroditeAstMergerMergeValaContextData* data;
	data = _data;
	_vala_source_file_unref0 (data->source);
	_vala_code_context_unref0 (data->context);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerMergeValaContextData, data);
}


static gpointer _vala_code_visitor_ref0 (gpointer self) {
	return self ? vala_code_visitor_ref (self) : NULL;
}


static gpointer _vala_source_file_ref0 (gpointer self) {
	return self ? vala_source_file_ref (self) : NULL;
}


static gpointer _vala_code_context_ref0 (gpointer self) {
	return self ? vala_code_context_ref (self) : NULL;
}


void afrodite_ast_merger_merge_vala_context (AfroditeAstMerger* self, ValaSourceFile* source, ValaCodeContext* context, gboolean merge_glib, gboolean merge_edited_file, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerMergeValaContextData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerMergeValaContextData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_merge_vala_context);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_merge_vala_context_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->source = _vala_source_file_ref0 (source);
	_data_->context = _vala_code_context_ref0 (context);
	_data_->merge_glib = merge_glib;
	_data_->merge_edited_file = merge_edited_file;
	afrodite_ast_merger_merge_vala_context_co (_data_);
}


void afrodite_ast_merger_merge_vala_context_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerMergeValaContextData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gpointer _g_object_ref0 (gpointer self) {
	return self ? g_object_ref (self) : NULL;
}


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


static void afrodite_ast_merger_merge_vala_context_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
	AfroditeAstMergerMergeValaContextData* data;
	data = _user_data_;
	data->_source_object_ = source_object;
	data->_res_ = _res_;
	afrodite_ast_merger_merge_vala_context_co (data);
}


static gboolean afrodite_ast_merger_merge_vala_context_co (AfroditeAstMergerMergeValaContextData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		case 1:
		goto _state_1;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	data->self->priv->_merge_glib = data->merge_glib;
	data->self->priv->_merge_edited_file = data->merge_edited_file;
	_g_free0 (data->self->priv->_vala_symbol_fqn);
	data->self->priv->_vala_symbol_fqn = NULL;
	_afrodite_data_type_unref0 (data->self->priv->_current_type);
	data->self->priv->_current_type = NULL;
	data->_tmp0_ = NULL;
	data->_tmp0_ = afrodite_code_dom_get_root (data->self->priv->_codedom);
	data->_tmp1_ = _g_object_ref0 (data->_tmp0_);
	_g_object_unref0 (data->self->priv->_current);
	data->self->priv->_current = data->_tmp1_;
	data->_tmp2_ = NULL;
	data->_tmp2_ = vala_source_file_get_filename (data->source);
	data->_tmp3_ = NULL;
	data->_tmp3_ = afrodite_code_dom_lookup_source_file (data->self->priv->_codedom, data->_tmp2_);
	data->_tmp4_ = data->_tmp3_;
	g_assert (data->_tmp4_ == NULL);
	_afrodite_source_file_unref0 (data->_tmp4_);
	data->_tmp5_ = NULL;
	data->_tmp5_ = vala_source_file_get_filename (data->source);
	data->_tmp6_ = NULL;
	data->_tmp6_ = afrodite_code_dom_add_source_file (data->self->priv->_codedom, data->_tmp5_);
	_afrodite_source_file_unref0 (data->self->priv->_source_file);
	data->self->priv->_source_file = data->_tmp6_;
	{
		data->_tmp7_ = NULL;
		data->_tmp7_ = vala_source_file_get_current_using_directives (data->source);
		data->_tmp8_ = _vala_iterable_ref0 (data->_tmp7_);
		data->_u_list = data->_tmp8_;
		data->_tmp9_ = vala_collection_get_size ((ValaCollection*) data->_u_list);
		data->_u_size = data->_tmp9_;
		data->_u_index = -1;
		while (TRUE) {
			data->_u_index = data->_u_index + 1;
			if (!(data->_u_index < data->_u_size)) {
				break;
			}
			data->_tmp10_ = NULL;
			data->_tmp10_ = vala_list_get (data->_u_list, data->_u_index);
			data->u = (ValaUsingDirective*) data->_tmp10_;
			data->_tmp11_ = NULL;
			data->_tmp11_ = vala_using_directive_get_namespace_symbol (data->u);
			data->_tmp12_ = NULL;
			data->_tmp12_ = vala_code_node_to_string ((ValaCodeNode*) data->_tmp11_);
			data->_tmp13_ = data->_tmp12_;
			data->_tmp14_ = NULL;
			data->_tmp14_ = afrodite_source_file_add_using_directive (data->self->priv->_source_file, data->_tmp13_);
			data->_tmp15_ = data->_tmp14_;
			_afrodite_data_type_unref0 (data->_tmp15_);
			_g_free0 (data->_tmp13_);
			_vala_code_node_unref0 (data->u);
		}
		_vala_iterable_unref0 (data->_u_list);
	}
	data->_tmp16_ = NULL;
	data->_tmp16_ = vala_code_context_get_root (data->context);
	data->_state_ = 1;
	afrodite_ast_merger_visit_namespace_sliced (data->self, data->_tmp16_, afrodite_ast_merger_merge_vala_context_ready, data);
	return FALSE;
	_state_1:
	afrodite_ast_merger_visit_namespace_sliced_finish (data->self, data->_res_);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_namespace_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitNamespaceSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->ns);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitNamespaceSlicedData, data);
}


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


static void afrodite_ast_merger_visit_namespace_sliced (AfroditeAstMerger* self, ValaNamespace* ns, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitNamespaceSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitNamespaceSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_namespace_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_namespace_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->ns = _vala_code_node_ref0 (ns);
	afrodite_ast_merger_visit_namespace_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_namespace_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitNamespaceSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static void afrodite_ast_merger_visit_namespace_sliced_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
	AfroditeAstMergerVisitNamespaceSlicedData* data;
	data = _user_data_;
	data->_source_object_ = source_object;
	data->_res_ = _res_;
	afrodite_ast_merger_visit_namespace_sliced_co (data);
}


static gboolean afrodite_ast_merger_visit_namespace_sliced_co (AfroditeAstMergerVisitNamespaceSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		case 1:
		goto _state_1;
		case 2:
		goto _state_2;
		case 3:
		goto _state_3;
		case 4:
		goto _state_4;
		case 5:
		goto _state_5;
		case 6:
		goto _state_6;
		case 7:
		goto _state_7;
		case 8:
		goto _state_8;
		case 9:
		goto _state_9;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	data->_tmp0_ = g_strdup (data->self->priv->_vala_symbol_fqn);
	data->prev_vala_fqn = data->_tmp0_;
	data->_tmp1_ = _g_object_ref0 (data->self->priv->_current);
	data->prev = data->_tmp1_;
	data->prev_sr = data->self->priv->_current_sr;
	data->_tmp2_ = NULL;
	data->_tmp2_ = vala_symbol_get_name ((ValaSymbol*) data->ns);
	if (data->_tmp2_ != NULL) {
		data->_tmp3_ = NULL;
		data->_tmp4_ = NULL;
		data->_tmp4_ = afrodite_ast_merger_visit_symbol (data->self, AFRODITE_MEMBER_TYPE_NAMESPACE, (ValaSymbol*) data->ns, &data->_tmp3_);
		data->self->priv->_current_sr = data->_tmp3_;
		_g_object_unref0 (data->self->priv->_current);
		data->self->priv->_current = data->_tmp4_;
	}
	{
		data->_tmp5_ = NULL;
		data->_tmp5_ = vala_namespace_get_enums (data->ns);
		data->_en_list = data->_tmp5_;
		data->_tmp6_ = vala_collection_get_size ((ValaCollection*) data->_en_list);
		data->_en_size = data->_tmp6_;
		data->_en_index = -1;
		while (TRUE) {
			data->_en_index = data->_en_index + 1;
			if (!(data->_en_index < data->_en_size)) {
				break;
			}
			data->_tmp7_ = NULL;
			data->_tmp7_ = vala_list_get (data->_en_list, data->_en_index);
			data->en = (ValaEnum*) data->_tmp7_;
			data->_state_ = 1;
			afrodite_ast_merger_visit_enum_sliced (data->self, data->en, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_1:
			afrodite_ast_merger_visit_enum_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->en);
		}
		_vala_iterable_unref0 (data->_en_list);
	}
	{
		data->_tmp8_ = NULL;
		data->_tmp8_ = vala_namespace_get_error_domains (data->ns);
		data->_edomain_list = data->_tmp8_;
		data->_tmp9_ = vala_collection_get_size ((ValaCollection*) data->_edomain_list);
		data->_edomain_size = data->_tmp9_;
		data->_edomain_index = -1;
		while (TRUE) {
			data->_edomain_index = data->_edomain_index + 1;
			if (!(data->_edomain_index < data->_edomain_size)) {
				break;
			}
			data->_tmp10_ = NULL;
			data->_tmp10_ = vala_list_get (data->_edomain_list, data->_edomain_index);
			data->edomain = (ValaErrorDomain*) data->_tmp10_;
			vala_code_node_accept ((ValaCodeNode*) data->edomain, (ValaCodeVisitor*) data->self);
			_vala_code_node_unref0 (data->edomain);
		}
		_vala_iterable_unref0 (data->_edomain_list);
	}
	{
		data->_tmp11_ = NULL;
		data->_tmp11_ = vala_namespace_get_namespaces (data->ns);
		data->_n_list = data->_tmp11_;
		data->_tmp12_ = vala_collection_get_size ((ValaCollection*) data->_n_list);
		data->_n_size = data->_tmp12_;
		data->_n_index = -1;
		while (TRUE) {
			data->_n_index = data->_n_index + 1;
			if (!(data->_n_index < data->_n_size)) {
				break;
			}
			data->_tmp13_ = NULL;
			data->_tmp13_ = vala_list_get (data->_n_list, data->_n_index);
			data->n = (ValaNamespace*) data->_tmp13_;
			data->_state_ = 2;
			afrodite_ast_merger_visit_namespace_sliced (data->self, data->n, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_2:
			afrodite_ast_merger_visit_namespace_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->n);
		}
		_vala_iterable_unref0 (data->_n_list);
	}
	{
		data->_tmp14_ = NULL;
		data->_tmp14_ = vala_namespace_get_classes (data->ns);
		data->_cl_list = data->_tmp14_;
		data->_tmp15_ = vala_collection_get_size ((ValaCollection*) data->_cl_list);
		data->_cl_size = data->_tmp15_;
		data->_cl_index = -1;
		while (TRUE) {
			data->_cl_index = data->_cl_index + 1;
			if (!(data->_cl_index < data->_cl_size)) {
				break;
			}
			data->_tmp16_ = NULL;
			data->_tmp16_ = vala_list_get (data->_cl_list, data->_cl_index);
			data->cl = (ValaClass*) data->_tmp16_;
			data->_state_ = 3;
			afrodite_ast_merger_visit_class_sliced (data->self, data->cl, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_3:
			afrodite_ast_merger_visit_class_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->cl);
		}
		_vala_iterable_unref0 (data->_cl_list);
	}
	{
		data->_tmp17_ = NULL;
		data->_tmp17_ = vala_namespace_get_interfaces (data->ns);
		data->_iface_list = data->_tmp17_;
		data->_tmp18_ = vala_collection_get_size ((ValaCollection*) data->_iface_list);
		data->_iface_size = data->_tmp18_;
		data->_iface_index = -1;
		while (TRUE) {
			data->_iface_index = data->_iface_index + 1;
			if (!(data->_iface_index < data->_iface_size)) {
				break;
			}
			data->_tmp19_ = NULL;
			data->_tmp19_ = vala_list_get (data->_iface_list, data->_iface_index);
			data->iface = (ValaInterface*) data->_tmp19_;
			data->_state_ = 4;
			afrodite_ast_merger_visit_interface_sliced (data->self, data->iface, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_4:
			afrodite_ast_merger_visit_interface_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->iface);
		}
		_vala_iterable_unref0 (data->_iface_list);
	}
	{
		data->_tmp20_ = NULL;
		data->_tmp20_ = vala_namespace_get_structs (data->ns);
		data->_st_list = data->_tmp20_;
		data->_tmp21_ = vala_collection_get_size ((ValaCollection*) data->_st_list);
		data->_st_size = data->_tmp21_;
		data->_st_index = -1;
		while (TRUE) {
			data->_st_index = data->_st_index + 1;
			if (!(data->_st_index < data->_st_size)) {
				break;
			}
			data->_tmp22_ = NULL;
			data->_tmp22_ = vala_list_get (data->_st_list, data->_st_index);
			data->st = (ValaStruct*) data->_tmp22_;
			data->_state_ = 5;
			afrodite_ast_merger_visit_struct_sliced (data->self, data->st, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_5:
			afrodite_ast_merger_visit_struct_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->st);
		}
		_vala_iterable_unref0 (data->_st_list);
	}
	{
		data->_tmp23_ = NULL;
		data->_tmp23_ = vala_namespace_get_delegates (data->ns);
		data->_d_list = data->_tmp23_;
		data->_tmp24_ = vala_collection_get_size ((ValaCollection*) data->_d_list);
		data->_d_size = data->_tmp24_;
		data->_d_index = -1;
		while (TRUE) {
			data->_d_index = data->_d_index + 1;
			if (!(data->_d_index < data->_d_size)) {
				break;
			}
			data->_tmp25_ = NULL;
			data->_tmp25_ = vala_list_get (data->_d_list, data->_d_index);
			data->d = (ValaDelegate*) data->_tmp25_;
			data->_state_ = 6;
			afrodite_ast_merger_visit_delegate_sliced (data->self, data->d, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_6:
			afrodite_ast_merger_visit_delegate_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->d);
		}
		_vala_iterable_unref0 (data->_d_list);
	}
	{
		data->_tmp26_ = NULL;
		data->_tmp26_ = vala_namespace_get_constants (data->ns);
		data->_c_list = data->_tmp26_;
		data->_tmp27_ = vala_collection_get_size ((ValaCollection*) data->_c_list);
		data->_c_size = data->_tmp27_;
		data->_c_index = -1;
		while (TRUE) {
			data->_c_index = data->_c_index + 1;
			if (!(data->_c_index < data->_c_size)) {
				break;
			}
			data->_tmp28_ = NULL;
			data->_tmp28_ = vala_list_get (data->_c_list, data->_c_index);
			data->c = (ValaConstant*) data->_tmp28_;
			data->_state_ = 7;
			afrodite_ast_merger_visit_constant_sliced (data->self, data->c, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_7:
			afrodite_ast_merger_visit_constant_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->c);
		}
		_vala_iterable_unref0 (data->_c_list);
	}
	{
		data->_tmp29_ = NULL;
		data->_tmp29_ = vala_namespace_get_fields (data->ns);
		data->_f_list = data->_tmp29_;
		data->_tmp30_ = vala_collection_get_size ((ValaCollection*) data->_f_list);
		data->_f_size = data->_tmp30_;
		data->_f_index = -1;
		while (TRUE) {
			data->_f_index = data->_f_index + 1;
			if (!(data->_f_index < data->_f_size)) {
				break;
			}
			data->_tmp31_ = NULL;
			data->_tmp31_ = vala_list_get (data->_f_list, data->_f_index);
			data->f = (ValaField*) data->_tmp31_;
			data->_state_ = 8;
			afrodite_ast_merger_visit_field_sliced (data->self, data->f, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_8:
			afrodite_ast_merger_visit_field_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->f);
		}
		_vala_iterable_unref0 (data->_f_list);
	}
	{
		data->_tmp32_ = NULL;
		data->_tmp32_ = vala_namespace_get_methods (data->ns);
		data->_m_list = data->_tmp32_;
		data->_tmp33_ = vala_collection_get_size ((ValaCollection*) data->_m_list);
		data->_m_size = data->_tmp33_;
		data->_m_index = -1;
		while (TRUE) {
			data->_m_index = data->_m_index + 1;
			if (!(data->_m_index < data->_m_size)) {
				break;
			}
			data->_tmp34_ = NULL;
			data->_tmp34_ = vala_list_get (data->_m_list, data->_m_index);
			data->m = (ValaMethod*) data->_tmp34_;
			data->_state_ = 9;
			afrodite_ast_merger_visit_method_sliced (data->self, data->m, afrodite_ast_merger_visit_namespace_sliced_ready, data);
			return FALSE;
			_state_9:
			afrodite_ast_merger_visit_method_sliced_finish (data->self, data->_res_);
			_vala_code_node_unref0 (data->m);
		}
		_vala_iterable_unref0 (data->_m_list);
	}
	data->_tmp35_ = _g_object_ref0 (data->prev);
	_g_object_unref0 (data->self->priv->_current);
	data->self->priv->_current = data->_tmp35_;
	data->self->priv->_current_sr = data->prev_sr;
	data->_tmp36_ = g_strdup (data->prev_vala_fqn);
	_g_free0 (data->self->priv->_vala_symbol_fqn);
	data->self->priv->_vala_symbol_fqn = data->_tmp36_;
	_g_object_unref0 (data->prev);
	_g_free0 (data->prev_vala_fqn);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_class_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitClassSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->c);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitClassSlicedData, data);
}


static void afrodite_ast_merger_visit_class_sliced (AfroditeAstMerger* self, ValaClass* c, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitClassSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitClassSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_class_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_class_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->c = _vala_code_node_ref0 (c);
	afrodite_ast_merger_visit_class_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_class_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitClassSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_class_sliced_co (AfroditeAstMergerVisitClassSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_class ((ValaCodeVisitor*) data->self, data->c);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_struct_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitStructSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->st);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitStructSlicedData, data);
}


static void afrodite_ast_merger_visit_struct_sliced (AfroditeAstMerger* self, ValaStruct* st, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitStructSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitStructSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_struct_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_struct_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->st = _vala_code_node_ref0 (st);
	afrodite_ast_merger_visit_struct_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_struct_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitStructSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_struct_sliced_co (AfroditeAstMergerVisitStructSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_struct ((ValaCodeVisitor*) data->self, data->st);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_interface_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitInterfaceSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->iface);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitInterfaceSlicedData, data);
}


static void afrodite_ast_merger_visit_interface_sliced (AfroditeAstMerger* self, ValaInterface* iface, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitInterfaceSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitInterfaceSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_interface_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_interface_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->iface = _vala_code_node_ref0 (iface);
	afrodite_ast_merger_visit_interface_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_interface_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitInterfaceSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_interface_sliced_co (AfroditeAstMergerVisitInterfaceSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_interface ((ValaCodeVisitor*) data->self, data->iface);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_method_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitMethodSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->m);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitMethodSlicedData, data);
}


static void afrodite_ast_merger_visit_method_sliced (AfroditeAstMerger* self, ValaMethod* m, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitMethodSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitMethodSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_method_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_method_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->m = _vala_code_node_ref0 (m);
	afrodite_ast_merger_visit_method_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_method_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitMethodSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_method_sliced_co (AfroditeAstMergerVisitMethodSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_method ((ValaCodeVisitor*) data->self, data->m);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_field_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitFieldSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->f);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitFieldSlicedData, data);
}


static void afrodite_ast_merger_visit_field_sliced (AfroditeAstMerger* self, ValaField* f, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitFieldSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitFieldSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_field_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_field_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->f = _vala_code_node_ref0 (f);
	afrodite_ast_merger_visit_field_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_field_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitFieldSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_field_sliced_co (AfroditeAstMergerVisitFieldSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_field ((ValaCodeVisitor*) data->self, data->f);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_constant_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitConstantSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->c);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitConstantSlicedData, data);
}


static void afrodite_ast_merger_visit_constant_sliced (AfroditeAstMerger* self, ValaConstant* c, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitConstantSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitConstantSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_constant_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_constant_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->c = _vala_code_node_ref0 (c);
	afrodite_ast_merger_visit_constant_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_constant_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitConstantSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_constant_sliced_co (AfroditeAstMergerVisitConstantSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_constant ((ValaCodeVisitor*) data->self, data->c);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_enum_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitEnumSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->e);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitEnumSlicedData, data);
}


static void afrodite_ast_merger_visit_enum_sliced (AfroditeAstMerger* self, ValaEnum* e, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitEnumSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitEnumSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_enum_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_enum_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->e = _vala_code_node_ref0 (e);
	afrodite_ast_merger_visit_enum_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_enum_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitEnumSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_enum_sliced_co (AfroditeAstMergerVisitEnumSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_enum ((ValaCodeVisitor*) data->self, data->e);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_visit_delegate_sliced_data_free (gpointer _data) {
	AfroditeAstMergerVisitDelegateSlicedData* data;
	data = _data;
	_vala_code_node_unref0 (data->d);
	_vala_code_visitor_unref0 (data->self);
	g_slice_free (AfroditeAstMergerVisitDelegateSlicedData, data);
}


static void afrodite_ast_merger_visit_delegate_sliced (AfroditeAstMerger* self, ValaDelegate* d, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	AfroditeAstMergerVisitDelegateSlicedData* _data_;
	_data_ = g_slice_new0 (AfroditeAstMergerVisitDelegateSlicedData);
	_data_->_async_result = g_simple_async_result_new (g_object_newv (G_TYPE_OBJECT, 0, NULL), _callback_, _user_data_, afrodite_ast_merger_visit_delegate_sliced);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, afrodite_ast_merger_visit_delegate_sliced_data_free);
	_data_->self = _vala_code_visitor_ref0 (self);
	_data_->d = _vala_code_node_ref0 (d);
	afrodite_ast_merger_visit_delegate_sliced_co (_data_);
}


static void afrodite_ast_merger_visit_delegate_sliced_finish (AfroditeAstMerger* self, GAsyncResult* _res_) {
	AfroditeAstMergerVisitDelegateSlicedData* _data_;
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
}


static gboolean afrodite_ast_merger_visit_delegate_sliced_co (AfroditeAstMergerVisitDelegateSlicedData* data) {
	switch (data->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	vala_code_visitor_visit_delegate ((ValaCodeVisitor*) data->self, data->d);
	if (data->_state_ == 0) {
		g_simple_async_result_complete_in_idle (data->_async_result);
	} else {
		g_simple_async_result_complete (data->_async_result);
	}
	g_object_unref (data->_async_result);
	return FALSE;
}


static void afrodite_ast_merger_real_visit_class (ValaCodeVisitor* base, ValaClass* c) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	AfroditeSourceReference* _tmp2_ = NULL;
	AfroditeSymbol* _tmp3_ = NULL;
	gboolean _tmp4_;
	AfroditeSymbol* _tmp5_;
	gchar* _tmp6_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (c != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp3_ = afrodite_ast_merger_visit_symbol (self, AFRODITE_MEMBER_TYPE_CLASS, (ValaSymbol*) c, &_tmp2_);
	self->priv->_current_sr = _tmp2_;
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp3_;
	_tmp4_ = vala_class_get_is_abstract (c);
	self->priv->_current->is_abstract = _tmp4_;
	vala_code_node_accept_children ((ValaCodeNode*) c, (ValaCodeVisitor*) self);
	_tmp5_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp5_;
	self->priv->_current_sr = prev_sr;
	_tmp6_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp6_;
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_struct (ValaCodeVisitor* base, ValaStruct* s) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	AfroditeSourceReference* _tmp2_ = NULL;
	AfroditeSymbol* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_;
	gchar* _tmp5_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (s != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp3_ = afrodite_ast_merger_visit_symbol (self, AFRODITE_MEMBER_TYPE_STRUCT, (ValaSymbol*) s, &_tmp2_);
	self->priv->_current_sr = _tmp2_;
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp3_;
	vala_code_node_accept_children ((ValaCodeNode*) s, (ValaCodeVisitor*) self);
	_tmp4_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp4_;
	self->priv->_current_sr = prev_sr;
	_tmp5_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp5_;
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static AfroditeSymbol* afrodite_ast_merger_visit_symbol (AfroditeAstMerger* self, AfroditeMemberType type, ValaSymbol* s, AfroditeSourceReference** source_reference) {
	AfroditeSourceReference* _source_reference = NULL;
	AfroditeSymbol* result = NULL;
	AfroditeSymbol* symbol = NULL;
	const gchar* _tmp0_ = NULL;
	const gchar* _tmp1_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (s != NULL, NULL);
	_tmp0_ = vala_symbol_get_name (s);
	afrodite_ast_merger_set_fqn (self, _tmp0_);
	_tmp1_ = vala_code_node_get_type_name ((ValaCodeNode*) s);
	if (g_strcmp0 (_tmp1_, "ValaNamespace") != 0) {
		AfroditeSourceReference* _tmp2_ = NULL;
		AfroditeSymbol* _tmp3_ = NULL;
		_tmp3_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, type, s, &_tmp2_, 0, 0);
		_source_reference = _tmp2_;
		_g_object_unref0 (symbol);
		symbol = _tmp3_;
	} else {
		AfroditeSymbol* _tmp4_ = NULL;
		_tmp4_ = afrodite_code_dom_lookup (self->priv->_codedom, self->priv->_vala_symbol_fqn);
		_g_object_unref0 (symbol);
		symbol = _tmp4_;
		if (symbol == NULL) {
			AfroditeSourceReference* _tmp5_ = NULL;
			AfroditeSymbol* _tmp6_ = NULL;
			_tmp6_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, type, s, &_tmp5_, 0, 0);
			_source_reference = _tmp5_;
			_g_object_unref0 (symbol);
			symbol = _tmp6_;
		} else {
			const gchar* _tmp7_ = NULL;
			AfroditeSourceReference* _tmp8_ = NULL;
			_tmp7_ = afrodite_source_file_get_filename (self->priv->_source_file);
			_tmp8_ = afrodite_symbol_lookup_source_reference_filename (symbol, _tmp7_);
			_source_reference = _tmp8_;
			if (_source_reference == NULL) {
				AfroditeSourceReference* _tmp9_ = NULL;
				AfroditeSourceReference* sr;
				_tmp9_ = afrodite_ast_merger_create_source_reference (self, (ValaCodeNode*) s, 0, 0);
				sr = _tmp9_;
				afrodite_symbol_add_source_reference (symbol, sr);
				_source_reference = sr;
				afrodite_source_file_add_symbol (self->priv->_source_file, symbol);
				_afrodite_source_reference_unref0 (sr);
			} else {
				gchar* _tmp10_ = NULL;
				gchar* _tmp11_;
				const gchar* _tmp12_ = NULL;
				_tmp10_ = afrodite_symbol_get_fully_qualified_name (symbol);
				_tmp11_ = _tmp10_;
				_tmp12_ = afrodite_source_file_get_filename (self->priv->_source_file);
				g_warning ("astmerger.vala:212: two sources with the same name were merged %s: %s", _tmp11_, _tmp12_);
				_g_free0 (_tmp11_);
			}
		}
	}
	result = symbol;
	if (source_reference) {
		*source_reference = _source_reference;
	}
	return result;
}


static AfroditeSymbol* afrodite_ast_merger_add_symbol (AfroditeAstMerger* self, AfroditeSymbol* parent, AfroditeMemberType type, ValaSymbol* s, AfroditeSourceReference** source_ref, gint last_line, gint last_column) {
	AfroditeSourceReference* _source_ref = NULL;
	AfroditeSymbol* result = NULL;
	const gchar* _tmp0_ = NULL;
	gchar* _tmp1_;
	gchar* name;
	AfroditeSymbol* _tmp8_ = NULL;
	AfroditeSymbol* symbol;
	const gchar* _tmp9_ = NULL;
	AfroditeSourceReference* _tmp10_ = NULL;
	ValaSymbolAccessibility _tmp12_;
	AfroditeSymbolAccessibility _tmp13_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (parent != NULL, NULL);
	g_return_val_if_fail (s != NULL, NULL);
	_tmp0_ = vala_symbol_get_name (s);
	_tmp1_ = g_strdup (_tmp0_);
	name = _tmp1_;
	if (name == NULL) {
		GEnumValue* _tmp2_;
		gchar* _tmp3_ = NULL;
		gchar* _tmp4_;
		gchar* _tmp5_ = NULL;
		gchar* _tmp6_;
		gchar* _tmp7_ = NULL;
		_tmp2_ = g_enum_get_value (g_type_class_ref (AFRODITE_TYPE_MEMBER_TYPE), type);
		_tmp3_ = g_utf8_strdown ((_tmp2_ != NULL) ? _tmp2_->value_name : NULL, (gssize) (-1));
		_tmp4_ = _tmp3_;
		_tmp5_ = afrodite_symbol_get_fully_qualified_name (self->priv->_current);
		_tmp6_ = _tmp5_;
		_tmp7_ = g_strdup_printf ("%s:%s", _tmp4_, _tmp6_);
		_g_free0 (name);
		name = _tmp7_;
		_g_free0 (_tmp6_);
		_g_free0 (_tmp4_);
	}
	_tmp8_ = afrodite_symbol_new (name, type);
	symbol = _tmp8_;
	_tmp9_ = afrodite_source_file_get_filename (self->priv->_source_file);
	_tmp10_ = afrodite_symbol_lookup_source_reference_filename (symbol, _tmp9_);
	if (_tmp10_ == NULL) {
		AfroditeSourceReference* _tmp11_ = NULL;
		AfroditeSourceReference* sr;
		_tmp11_ = afrodite_ast_merger_create_source_reference (self, (ValaCodeNode*) s, last_line, last_column);
		sr = _tmp11_;
		afrodite_symbol_add_source_reference (symbol, sr);
		_source_ref = sr;
		_afrodite_source_reference_unref0 (sr);
	}
	_tmp12_ = vala_symbol_get_access (s);
	_tmp13_ = afrodite_ast_merger_get_vala_symbol_access (self, _tmp12_);
	afrodite_symbol_set_access (symbol, _tmp13_);
	afrodite_symbol_add_child (parent, symbol);
	afrodite_source_file_add_symbol (self->priv->_source_file, symbol);
	result = symbol;
	_g_free0 (name);
	if (source_ref) {
		*source_ref = _source_ref;
	}
	return result;
}


static AfroditeSymbol* afrodite_ast_merger_add_codenode (AfroditeAstMerger* self, AfroditeSymbol* parent, const gchar* name, AfroditeMemberType type, ValaCodeNode* c, AfroditeSourceReference** source_ref, gint last_line, gint last_column) {
	AfroditeSourceReference* _source_ref = NULL;
	AfroditeSymbol* result = NULL;
	AfroditeSymbol* _tmp0_ = NULL;
	AfroditeSymbol* symbol;
	const gchar* _tmp1_ = NULL;
	AfroditeSourceReference* _tmp2_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (parent != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	g_return_val_if_fail (c != NULL, NULL);
	_tmp0_ = afrodite_symbol_new (name, type);
	symbol = _tmp0_;
	_tmp1_ = afrodite_source_file_get_filename (self->priv->_source_file);
	_tmp2_ = afrodite_symbol_lookup_source_reference_filename (symbol, _tmp1_);
	if (_tmp2_ == NULL) {
		AfroditeSourceReference* _tmp3_ = NULL;
		AfroditeSourceReference* sr;
		_tmp3_ = afrodite_ast_merger_create_source_reference (self, c, last_line, last_column);
		sr = _tmp3_;
		afrodite_symbol_add_source_reference (symbol, sr);
		_source_ref = sr;
		_afrodite_source_reference_unref0 (sr);
	}
	afrodite_symbol_set_access (symbol, AFRODITE_SYMBOL_ACCESSIBILITY_PRIVATE);
	afrodite_symbol_add_child (parent, symbol);
	afrodite_source_file_add_symbol (self->priv->_source_file, symbol);
	result = symbol;
	if (source_ref) {
		*source_ref = _source_ref;
	}
	return result;
}


static AfroditeSymbolAccessibility afrodite_ast_merger_get_vala_symbol_access (AfroditeAstMerger* self, ValaSymbolAccessibility access) {
	AfroditeSymbolAccessibility result = 0;
	g_return_val_if_fail (self != NULL, 0);
	switch (access) {
		case VALA_SYMBOL_ACCESSIBILITY_PRIVATE:
		{
			result = AFRODITE_SYMBOL_ACCESSIBILITY_PRIVATE;
			return result;
		}
		case VALA_SYMBOL_ACCESSIBILITY_INTERNAL:
		{
			result = AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL;
			return result;
		}
		case VALA_SYMBOL_ACCESSIBILITY_PROTECTED:
		{
			result = AFRODITE_SYMBOL_ACCESSIBILITY_PROTECTED;
			return result;
		}
		case VALA_SYMBOL_ACCESSIBILITY_PUBLIC:
		{
			result = AFRODITE_SYMBOL_ACCESSIBILITY_PUBLIC;
			return result;
		}
		default:
		{
			g_warning ("astmerger.vala:264: Unknown vala symbol accessibility constant");
			result = AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL;
			return result;
		}
	}
}


static AfroditeMemberBinding afrodite_ast_merger_get_vala_member_binding (AfroditeAstMerger* self, ValaMemberBinding binding) {
	AfroditeMemberBinding result = 0;
	g_return_val_if_fail (self != NULL, 0);
	switch (binding) {
		case VALA_MEMBER_BINDING_INSTANCE:
		{
			result = AFRODITE_MEMBER_BINDING_INSTANCE;
			return result;
		}
		case VALA_MEMBER_BINDING_CLASS:
		{
			result = AFRODITE_MEMBER_BINDING_CLASS;
			return result;
		}
		case VALA_MEMBER_BINDING_STATIC:
		{
			result = AFRODITE_MEMBER_BINDING_STATIC;
			return result;
		}
		default:
		{
			g_warning ("astmerger.vala:279: Unknown vala member binding constant");
			result = AFRODITE_MEMBER_BINDING_INSTANCE;
			return result;
		}
	}
}


static AfroditeSourceReference* afrodite_ast_merger_create_source_reference (AfroditeAstMerger* self, ValaCodeNode* s, gint last_line, gint last_column) {
	AfroditeSourceReference* result = NULL;
	AfroditeSourceReference* _tmp0_ = NULL;
	AfroditeSourceReference* source_ref;
	gint first_line;
	gint first_column;
	ValaSourceReference* _tmp1_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (s != NULL, NULL);
	_tmp0_ = afrodite_source_reference_new ();
	source_ref = _tmp0_;
	afrodite_source_reference_set_file (source_ref, self->priv->_source_file);
	first_line = 0;
	first_column = 0;
	_tmp1_ = vala_code_node_get_source_reference (s);
	if (_tmp1_ != NULL) {
		ValaSourceReference* _tmp2_ = NULL;
		gint _tmp3_;
		ValaSourceReference* _tmp4_ = NULL;
		gint _tmp5_;
		_tmp2_ = vala_code_node_get_source_reference (s);
		_tmp3_ = vala_source_reference_get_first_line (_tmp2_);
		first_line = _tmp3_;
		_tmp4_ = vala_code_node_get_source_reference (s);
		_tmp5_ = vala_source_reference_get_first_column (_tmp4_);
		first_column = _tmp5_;
		if (last_line == 0) {
			ValaSourceReference* _tmp6_ = NULL;
			gint _tmp7_;
			_tmp6_ = vala_code_node_get_source_reference (s);
			_tmp7_ = vala_source_reference_get_last_line (_tmp6_);
			last_line = _tmp7_;
		}
		if (last_column == 0) {
			ValaSourceReference* _tmp8_ = NULL;
			gint _tmp9_;
			_tmp8_ = vala_code_node_get_source_reference (s);
			_tmp9_ = vala_source_reference_get_last_column (_tmp8_);
			last_column = _tmp9_;
		}
	}
	afrodite_source_reference_set_first_line (source_ref, first_line);
	afrodite_source_reference_set_first_column (source_ref, first_column);
	afrodite_source_reference_set_last_line (source_ref, last_line);
	afrodite_source_reference_set_last_column (source_ref, last_column);
	result = source_ref;
	return result;
}


static void afrodite_ast_merger_set_fqn (AfroditeAstMerger* self, const gchar* name) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (name != NULL);
	if (self->priv->_vala_symbol_fqn == NULL) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (name);
		_g_free0 (self->priv->_vala_symbol_fqn);
		self->priv->_vala_symbol_fqn = _tmp0_;
	} else {
		gchar* _tmp1_ = NULL;
		_tmp1_ = g_strconcat (self->priv->_vala_symbol_fqn, ".", name, NULL);
		_g_free0 (self->priv->_vala_symbol_fqn);
		self->priv->_vala_symbol_fqn = _tmp1_;
	}
}


static void afrodite_ast_merger_real_visit_interface (ValaCodeVisitor* base, ValaInterface* iface) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	AfroditeSourceReference* _tmp2_ = NULL;
	AfroditeSymbol* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_;
	gchar* _tmp5_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (iface != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp3_ = afrodite_ast_merger_visit_symbol (self, AFRODITE_MEMBER_TYPE_INTERFACE, (ValaSymbol*) iface, &_tmp2_);
	self->priv->_current_sr = _tmp2_;
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp3_;
	vala_code_node_accept_children ((ValaCodeNode*) iface, (ValaCodeVisitor*) self);
	_tmp4_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp4_;
	self->priv->_current_sr = prev_sr;
	_tmp5_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp5_;
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_method (ValaCodeVisitor* base, ValaMethod* m) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	gint last_line;
	gboolean _tmp3_ = FALSE;
	ValaBlock* _tmp4_ = NULL;
	AfroditeSourceReference* _tmp10_ = NULL;
	AfroditeSymbol* _tmp11_ = NULL;
	AfroditeSymbol* s;
	ValaDataType* _tmp12_ = NULL;
	gchar* _tmp13_ = NULL;
	gchar* _tmp14_;
	AfroditeDataType* _tmp15_ = NULL;
	AfroditeDataType* _tmp16_;
	gboolean _tmp17_;
	gboolean _tmp18_;
	gboolean _tmp19_;
	ValaMemberBinding _tmp20_;
	AfroditeMemberBinding _tmp21_;
	AfroditeSymbol* _tmp22_;
	ValaDataType* _tmp23_ = NULL;
	AfroditeDataType* _tmp24_ = NULL;
	ValaBlock* _tmp31_ = NULL;
	AfroditeDataType* _tmp38_ = NULL;
	const gchar* _tmp39_ = NULL;
	AfroditeSymbol* _tmp40_ = NULL;
	AfroditeSymbol* gt;
	AfroditeSymbol* _tmp42_;
	gchar* _tmp43_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) m);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	last_line = 0;
	_tmp4_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp4_ != NULL) {
		ValaBlock* _tmp5_ = NULL;
		ValaSourceReference* _tmp6_ = NULL;
		_tmp5_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp6_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp5_);
		_tmp3_ = _tmp6_ != NULL;
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		ValaBlock* _tmp7_ = NULL;
		ValaSourceReference* _tmp8_ = NULL;
		gint _tmp9_;
		_tmp7_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp7_);
		_tmp9_ = vala_source_reference_get_last_line (_tmp8_);
		last_line = _tmp9_;
	}
	_tmp11_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_METHOD, (ValaSymbol*) m, &_tmp10_, last_line, 0);
	self->priv->_current_sr = _tmp10_;
	s = _tmp11_;
	_tmp12_ = vala_method_get_return_type (m);
	_tmp13_ = vala_code_node_to_string ((ValaCodeNode*) _tmp12_);
	_tmp14_ = _tmp13_;
	_tmp15_ = afrodite_data_type_new (_tmp14_, NULL);
	_tmp16_ = _tmp15_;
	afrodite_symbol_set_return_type (s, _tmp16_);
	_afrodite_data_type_unref0 (_tmp16_);
	_g_free0 (_tmp14_);
	_tmp17_ = vala_method_get_is_abstract (m);
	s->is_abstract = _tmp17_;
	_tmp18_ = vala_method_get_is_virtual (m);
	s->is_virtual = _tmp18_;
	_tmp19_ = vala_method_get_overrides (m);
	s->overrides = _tmp19_;
	_tmp20_ = vala_method_get_binding (m);
	_tmp21_ = afrodite_ast_merger_get_vala_member_binding (self, _tmp20_);
	s->binding = _tmp21_;
	_tmp22_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp22_;
	_tmp23_ = vala_method_get_return_type (m);
	_tmp24_ = afrodite_symbol_get_return_type (s);
	afrodite_ast_merger_visit_type_for_generics (self, _tmp23_, _tmp24_);
	{
		ValaList* _tmp25_ = NULL;
		ValaList* _p_list;
		gint _tmp26_;
		gint _p_size;
		gint _p_index;
		_tmp25_ = vala_method_get_type_parameters (m);
		_p_list = _tmp25_;
		_tmp26_ = vala_collection_get_size ((ValaCollection*) _p_list);
		_p_size = _tmp26_;
		_p_index = -1;
		while (TRUE) {
			gpointer _tmp27_ = NULL;
			ValaTypeParameter* p;
			_p_index = _p_index + 1;
			if (!(_p_index < _p_size)) {
				break;
			}
			_tmp27_ = vala_list_get (_p_list, _p_index);
			p = (ValaTypeParameter*) _tmp27_;
			vala_code_node_accept ((ValaCodeNode*) p, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (p);
		}
		_vala_iterable_unref0 (_p_list);
	}
	{
		ValaList* _tmp28_ = NULL;
		ValaList* _param_list;
		gint _tmp29_;
		gint _param_size;
		gint _param_index;
		_tmp28_ = vala_method_get_parameters (m);
		_param_list = _tmp28_;
		_tmp29_ = vala_collection_get_size ((ValaCollection*) _param_list);
		_param_size = _tmp29_;
		_param_index = -1;
		while (TRUE) {
			gpointer _tmp30_ = NULL;
			ValaParameter* param;
			_param_index = _param_index + 1;
			if (!(_param_index < _param_size)) {
				break;
			}
			_tmp30_ = vala_list_get (_param_list, _param_index);
			param = (ValaParameter*) _tmp30_;
			vala_code_node_accept ((ValaCodeNode*) param, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp31_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp31_ != NULL) {
		gboolean _tmp32_ = FALSE;
		gboolean _tmp33_ = FALSE;
		if (self->priv->_merge_edited_file) {
			_tmp33_ = TRUE;
		} else {
			const gchar* _tmp34_ = NULL;
			_tmp34_ = afrodite_source_file_get_filename (self->priv->_source_file);
			_tmp33_ = _tmp34_ == NULL;
		}
		if (_tmp33_) {
			_tmp32_ = TRUE;
		} else {
			const gchar* _tmp35_ = NULL;
			gboolean _tmp36_;
			_tmp35_ = afrodite_source_file_get_filename (self->priv->_source_file);
			_tmp36_ = g_str_has_suffix (_tmp35_, ".vapi");
			_tmp32_ = !_tmp36_;
		}
		if (_tmp32_) {
			ValaBlock* _tmp37_ = NULL;
			_tmp37_ = vala_subroutine_get_body ((ValaSubroutine*) m);
			vala_code_node_accept ((ValaCodeNode*) _tmp37_, (ValaCodeVisitor*) self);
		}
	}
	_tmp38_ = afrodite_symbol_get_return_type (self->priv->_current);
	_tmp39_ = afrodite_data_type_get_type_name (_tmp38_);
	_tmp40_ = afrodite_symbol_get_generic_type_argument (self->priv->_current, _tmp39_);
	gt = _tmp40_;
	if (gt != NULL) {
		AfroditeDataType* _tmp41_ = NULL;
		_tmp41_ = afrodite_symbol_get_return_type (self->priv->_current);
		afrodite_data_type_set_is_generic (_tmp41_, TRUE);
	}
	_tmp42_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp42_;
	self->priv->_current_sr = prev_sr;
	_tmp43_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp43_;
	_g_object_unref0 (gt);
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	gint last_line;
	gboolean _tmp3_ = FALSE;
	ValaBlock* _tmp4_ = NULL;
	AfroditeSourceReference* _tmp10_ = NULL;
	AfroditeSymbol* _tmp11_ = NULL;
	AfroditeSymbol* s;
	const gchar* _tmp12_ = NULL;
	gboolean _tmp23_;
	gboolean _tmp24_;
	gboolean _tmp25_;
	const gchar* _tmp26_ = NULL;
	ValaMemberBinding _tmp32_;
	AfroditeMemberBinding _tmp33_;
	AfroditeDataType* _tmp34_ = NULL;
	AfroditeSymbol* _tmp35_;
	ValaDataType* _tmp36_ = NULL;
	AfroditeDataType* _tmp37_ = NULL;
	ValaBlock* _tmp44_ = NULL;
	AfroditeSymbol* _tmp46_;
	gchar* _tmp47_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) m);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	last_line = 0;
	_tmp4_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp4_ != NULL) {
		ValaBlock* _tmp5_ = NULL;
		ValaSourceReference* _tmp6_ = NULL;
		_tmp5_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp6_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp5_);
		_tmp3_ = _tmp6_ != NULL;
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		ValaBlock* _tmp7_ = NULL;
		ValaSourceReference* _tmp8_ = NULL;
		gint _tmp9_;
		_tmp7_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp7_);
		_tmp9_ = vala_source_reference_get_last_line (_tmp8_);
		last_line = _tmp9_;
	}
	_tmp11_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_CREATION_METHOD, (ValaSymbol*) m, &_tmp10_, last_line, 0);
	self->priv->_current_sr = _tmp10_;
	s = _tmp11_;
	_tmp12_ = vala_symbol_get_name ((ValaSymbol*) m);
	if (g_strcmp0 (_tmp12_, ".new") == 0) {
		ValaDataType* _tmp13_ = NULL;
		gchar* _tmp14_ = NULL;
		gchar* _tmp15_;
		AfroditeDataType* _tmp16_ = NULL;
		AfroditeDataType* _tmp17_;
		_tmp13_ = vala_method_get_return_type ((ValaMethod*) m);
		_tmp14_ = vala_code_node_to_string ((ValaCodeNode*) _tmp13_);
		_tmp15_ = _tmp14_;
		_tmp16_ = afrodite_data_type_new (_tmp15_, NULL);
		_tmp17_ = _tmp16_;
		afrodite_symbol_set_return_type (s, _tmp17_);
		_afrodite_data_type_unref0 (_tmp17_);
		_g_free0 (_tmp15_);
	} else {
		ValaSymbol* _tmp18_ = NULL;
		gchar* _tmp19_ = NULL;
		gchar* _tmp20_;
		AfroditeDataType* _tmp21_ = NULL;
		AfroditeDataType* _tmp22_;
		_tmp18_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
		_tmp19_ = vala_symbol_get_full_name (_tmp18_);
		_tmp20_ = _tmp19_;
		_tmp21_ = afrodite_data_type_new (_tmp20_, NULL);
		_tmp22_ = _tmp21_;
		afrodite_symbol_set_return_type (s, _tmp22_);
		_afrodite_data_type_unref0 (_tmp22_);
		_g_free0 (_tmp20_);
	}
	_tmp23_ = vala_method_get_is_abstract ((ValaMethod*) m);
	s->is_abstract = _tmp23_;
	_tmp24_ = vala_method_get_is_virtual ((ValaMethod*) m);
	s->is_virtual = _tmp24_;
	_tmp25_ = vala_method_get_overrides ((ValaMethod*) m);
	s->overrides = _tmp25_;
	_tmp26_ = vala_symbol_get_name ((ValaSymbol*) m);
	if (g_strcmp0 (_tmp26_, ".new") == 0) {
		const gchar* _tmp27_ = NULL;
		_tmp27_ = vala_creation_method_get_class_name (m);
		afrodite_symbol_set_display_name (s, _tmp27_);
	} else {
		const gchar* _tmp28_ = NULL;
		const gchar* _tmp29_ = NULL;
		gchar* _tmp30_ = NULL;
		gchar* _tmp31_;
		_tmp28_ = vala_creation_method_get_class_name (m);
		_tmp29_ = vala_symbol_get_name ((ValaSymbol*) m);
		_tmp30_ = g_strdup_printf ("%s.%s", _tmp28_, _tmp29_);
		_tmp31_ = _tmp30_;
		afrodite_symbol_set_display_name (s, _tmp31_);
		_g_free0 (_tmp31_);
	}
	_tmp32_ = vala_method_get_binding ((ValaMethod*) m);
	_tmp33_ = afrodite_ast_merger_get_vala_member_binding (self, _tmp32_);
	s->binding = _tmp33_;
	_tmp34_ = afrodite_symbol_get_return_type (s);
	afrodite_data_type_set_symbol (_tmp34_, self->priv->_current);
	afrodite_symbol_add_resolved_target (self->priv->_current, s);
	_tmp35_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp35_;
	_tmp36_ = vala_method_get_return_type ((ValaMethod*) m);
	_tmp37_ = afrodite_symbol_get_return_type (s);
	afrodite_ast_merger_visit_type_for_generics (self, _tmp36_, _tmp37_);
	{
		ValaList* _tmp38_ = NULL;
		ValaList* _p_list;
		gint _tmp39_;
		gint _p_size;
		gint _p_index;
		_tmp38_ = vala_method_get_type_parameters ((ValaMethod*) m);
		_p_list = _tmp38_;
		_tmp39_ = vala_collection_get_size ((ValaCollection*) _p_list);
		_p_size = _tmp39_;
		_p_index = -1;
		while (TRUE) {
			gpointer _tmp40_ = NULL;
			ValaTypeParameter* p;
			_p_index = _p_index + 1;
			if (!(_p_index < _p_size)) {
				break;
			}
			_tmp40_ = vala_list_get (_p_list, _p_index);
			p = (ValaTypeParameter*) _tmp40_;
			vala_code_node_accept ((ValaCodeNode*) p, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (p);
		}
		_vala_iterable_unref0 (_p_list);
	}
	{
		ValaList* _tmp41_ = NULL;
		ValaList* _param_list;
		gint _tmp42_;
		gint _param_size;
		gint _param_index;
		_tmp41_ = vala_method_get_parameters ((ValaMethod*) m);
		_param_list = _tmp41_;
		_tmp42_ = vala_collection_get_size ((ValaCollection*) _param_list);
		_param_size = _tmp42_;
		_param_index = -1;
		while (TRUE) {
			gpointer _tmp43_ = NULL;
			ValaParameter* param;
			_param_index = _param_index + 1;
			if (!(_param_index < _param_size)) {
				break;
			}
			_tmp43_ = vala_list_get (_param_list, _param_index);
			param = (ValaParameter*) _tmp43_;
			vala_code_node_accept ((ValaCodeNode*) param, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp44_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp44_ != NULL) {
		ValaBlock* _tmp45_ = NULL;
		_tmp45_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		vala_code_node_accept ((ValaCodeNode*) _tmp45_, (ValaCodeVisitor*) self);
	}
	_tmp46_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp46_;
	self->priv->_current_sr = prev_sr;
	_tmp47_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp47_;
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_constructor (ValaCodeVisitor* base, ValaConstructor* m) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	gchar* _tmp2_ = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_ = NULL;
	gchar* _tmp5_;
	gint last_line;
	gboolean _tmp6_ = FALSE;
	ValaBlock* _tmp7_ = NULL;
	AfroditeSourceReference* _tmp13_ = NULL;
	AfroditeSymbol* _tmp14_ = NULL;
	AfroditeSymbol* s;
	ValaMemberBinding _tmp15_;
	AfroditeMemberBinding _tmp16_;
	gchar* _tmp17_ = NULL;
	gchar* _tmp18_;
	AfroditeDataType* _tmp19_ = NULL;
	AfroditeDataType* _tmp20_;
	AfroditeDataType* _tmp21_ = NULL;
	AfroditeSymbol* _tmp22_;
	ValaBlock* _tmp23_ = NULL;
	AfroditeSymbol* _tmp25_;
	const gchar* _tmp26_ = NULL;
	gchar* _tmp27_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = afrodite_symbol_get_fully_qualified_name (self->priv->_current);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("constructor:%s", _tmp3_);
	_tmp5_ = _tmp4_;
	afrodite_ast_merger_set_fqn (self, _tmp5_);
	_g_free0 (_tmp5_);
	_g_free0 (_tmp3_);
	last_line = 0;
	_tmp7_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp7_ != NULL) {
		ValaBlock* _tmp8_ = NULL;
		ValaSourceReference* _tmp9_ = NULL;
		_tmp8_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp9_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp8_);
		_tmp6_ = _tmp9_ != NULL;
	} else {
		_tmp6_ = FALSE;
	}
	if (_tmp6_) {
		ValaBlock* _tmp10_ = NULL;
		ValaSourceReference* _tmp11_ = NULL;
		gint _tmp12_;
		_tmp10_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp10_);
		_tmp12_ = vala_source_reference_get_last_line (_tmp11_);
		last_line = _tmp12_;
	}
	_tmp14_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_CONSTRUCTOR, (ValaSymbol*) m, &_tmp13_, last_line, 0);
	self->priv->_current_sr = _tmp13_;
	s = _tmp14_;
	_tmp15_ = vala_constructor_get_binding (m);
	_tmp16_ = afrodite_ast_merger_get_vala_member_binding (self, _tmp15_);
	s->binding = _tmp16_;
	_tmp17_ = afrodite_symbol_get_fully_qualified_name (self->priv->_current);
	_tmp18_ = _tmp17_;
	_tmp19_ = afrodite_data_type_new (_tmp18_, NULL);
	_tmp20_ = _tmp19_;
	afrodite_symbol_set_return_type (s, _tmp20_);
	_afrodite_data_type_unref0 (_tmp20_);
	_g_free0 (_tmp18_);
	_tmp21_ = afrodite_symbol_get_return_type (s);
	afrodite_data_type_set_symbol (_tmp21_, self->priv->_current);
	afrodite_symbol_add_resolved_target (self->priv->_current, s);
	_tmp22_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp22_;
	_tmp23_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp23_ != NULL) {
		ValaBlock* _tmp24_ = NULL;
		_tmp24_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		vala_code_node_accept ((ValaCodeNode*) _tmp24_, (ValaCodeVisitor*) self);
	}
	_tmp25_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp25_;
	_tmp26_ = afrodite_symbol_get_name (self->priv->_current);
	afrodite_symbol_set_display_name (s, _tmp26_);
	self->priv->_current_sr = prev_sr;
	_tmp27_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp27_;
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_destructor (ValaCodeVisitor* base, ValaDestructor* m) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	gchar* _tmp2_ = NULL;
	gchar* _tmp3_;
	gchar* _tmp4_ = NULL;
	gchar* _tmp5_;
	gint last_line;
	gboolean _tmp6_ = FALSE;
	ValaBlock* _tmp7_ = NULL;
	AfroditeSourceReference* _tmp13_ = NULL;
	AfroditeSymbol* _tmp14_ = NULL;
	AfroditeSymbol* s;
	ValaMemberBinding _tmp15_;
	AfroditeMemberBinding _tmp16_;
	const gchar* _tmp17_ = NULL;
	gchar* _tmp18_ = NULL;
	gchar* _tmp19_;
	AfroditeSymbol* _tmp20_;
	ValaBlock* _tmp21_ = NULL;
	AfroditeSymbol* _tmp23_;
	gchar* _tmp24_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (m != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = afrodite_symbol_get_fully_qualified_name (self->priv->_current);
	_tmp3_ = _tmp2_;
	_tmp4_ = g_strdup_printf ("destructor:%s", _tmp3_);
	_tmp5_ = _tmp4_;
	afrodite_ast_merger_set_fqn (self, _tmp5_);
	_g_free0 (_tmp5_);
	_g_free0 (_tmp3_);
	last_line = 0;
	_tmp7_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp7_ != NULL) {
		ValaBlock* _tmp8_ = NULL;
		ValaSourceReference* _tmp9_ = NULL;
		_tmp8_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp9_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp8_);
		_tmp6_ = _tmp9_ != NULL;
	} else {
		_tmp6_ = FALSE;
	}
	if (_tmp6_) {
		ValaBlock* _tmp10_ = NULL;
		ValaSourceReference* _tmp11_ = NULL;
		gint _tmp12_;
		_tmp10_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		_tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp10_);
		_tmp12_ = vala_source_reference_get_last_line (_tmp11_);
		last_line = _tmp12_;
	}
	_tmp14_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_DESTRUCTOR, (ValaSymbol*) m, &_tmp13_, last_line, 0);
	self->priv->_current_sr = _tmp13_;
	s = _tmp14_;
	_tmp15_ = vala_destructor_get_binding (m);
	_tmp16_ = afrodite_ast_merger_get_vala_member_binding (self, _tmp15_);
	s->binding = _tmp16_;
	_tmp17_ = afrodite_symbol_get_display_name (self->priv->_current);
	_tmp18_ = g_strdup_printf ("~%s", _tmp17_);
	_tmp19_ = _tmp18_;
	afrodite_symbol_set_display_name (s, _tmp19_);
	_g_free0 (_tmp19_);
	_tmp20_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp20_;
	_tmp21_ = vala_subroutine_get_body ((ValaSubroutine*) m);
	if (_tmp21_ != NULL) {
		ValaBlock* _tmp22_ = NULL;
		_tmp22_ = vala_subroutine_get_body ((ValaSubroutine*) m);
		vala_code_node_accept ((ValaCodeNode*) _tmp22_, (ValaCodeVisitor*) self);
	}
	_tmp23_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp23_;
	self->priv->_current_sr = prev_sr;
	_tmp24_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp24_;
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_enum_value (ValaCodeVisitor* base, ValaEnumValue* ev) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* sym;
	AfroditeSymbolAccessibility _tmp5_;
	AfroditeSymbol* _tmp6_;
	gchar* _tmp7_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (ev != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) ev);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_ENUM_VALUE, (ValaSymbol*) ev, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	sym = _tmp4_;
	_tmp5_ = afrodite_symbol_get_access (self->priv->_current);
	afrodite_symbol_set_access (sym, _tmp5_);
	sym->binding = self->priv->_current->binding;
	_tmp6_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp6_;
	self->priv->_current_sr = prev_sr;
	_tmp7_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp7_;
	_g_object_unref0 (sym);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_enum (ValaCodeVisitor* base, ValaEnum* e) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* s;
	AfroditeSymbol* _tmp5_;
	AfroditeSymbol* _tmp15_;
	gchar* _tmp16_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (e != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) e);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_ENUM, (ValaSymbol*) e, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	s = _tmp4_;
	_tmp5_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp5_;
	{
		ValaList* _tmp6_ = NULL;
		ValaList* _value_list;
		gint _tmp7_;
		gint _value_size;
		gint _value_index;
		_tmp6_ = vala_enum_get_values (e);
		_value_list = _tmp6_;
		_tmp7_ = vala_collection_get_size ((ValaCollection*) _value_list);
		_value_size = _tmp7_;
		_value_index = -1;
		while (TRUE) {
			gpointer _tmp8_ = NULL;
			ValaEnumValue* value;
			_value_index = _value_index + 1;
			if (!(_value_index < _value_size)) {
				break;
			}
			_tmp8_ = vala_list_get (_value_list, _value_index);
			value = (ValaEnumValue*) _tmp8_;
			vala_code_node_accept ((ValaCodeNode*) value, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (value);
		}
		_vala_iterable_unref0 (_value_list);
	}
	{
		ValaList* _tmp9_ = NULL;
		ValaList* _m_list;
		gint _tmp10_;
		gint _m_size;
		gint _m_index;
		_tmp9_ = vala_enum_get_methods (e);
		_m_list = _tmp9_;
		_tmp10_ = vala_collection_get_size ((ValaCollection*) _m_list);
		_m_size = _tmp10_;
		_m_index = -1;
		while (TRUE) {
			gpointer _tmp11_ = NULL;
			ValaMethod* m;
			_m_index = _m_index + 1;
			if (!(_m_index < _m_size)) {
				break;
			}
			_tmp11_ = vala_list_get (_m_list, _m_index);
			m = (ValaMethod*) _tmp11_;
			vala_code_node_accept ((ValaCodeNode*) m, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (m);
		}
		_vala_iterable_unref0 (_m_list);
	}
	{
		ValaList* _tmp12_ = NULL;
		ValaList* _c_list;
		gint _tmp13_;
		gint _c_size;
		gint _c_index;
		_tmp12_ = vala_enum_get_constants (e);
		_c_list = _tmp12_;
		_tmp13_ = vala_collection_get_size ((ValaCollection*) _c_list);
		_c_size = _tmp13_;
		_c_index = -1;
		while (TRUE) {
			gpointer _tmp14_ = NULL;
			ValaConstant* c;
			_c_index = _c_index + 1;
			if (!(_c_index < _c_size)) {
				break;
			}
			_tmp14_ = vala_list_get (_c_list, _c_index);
			c = (ValaConstant*) _tmp14_;
			vala_code_node_accept ((ValaCodeNode*) c, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (c);
		}
		_vala_iterable_unref0 (_c_list);
	}
	_tmp15_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp15_;
	self->priv->_current_sr = prev_sr;
	_tmp16_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp16_;
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_delegate (ValaCodeVisitor* base, ValaDelegate* d) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* sym;
	ValaDataType* _tmp5_ = NULL;
	gchar* _tmp6_ = NULL;
	gchar* _tmp7_;
	AfroditeDataType* _tmp8_ = NULL;
	AfroditeDataType* _tmp9_;
	AfroditeSymbol* _tmp10_;
	AfroditeDataType* _tmp17_ = NULL;
	const gchar* _tmp18_ = NULL;
	AfroditeSymbol* _tmp19_ = NULL;
	AfroditeSymbol* gt;
	AfroditeSymbol* _tmp21_;
	gchar* _tmp22_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (d != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) d);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_DELEGATE, (ValaSymbol*) d, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	sym = _tmp4_;
	_tmp5_ = vala_delegate_get_return_type (d);
	_tmp6_ = vala_code_node_to_string ((ValaCodeNode*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = afrodite_data_type_new (_tmp7_, NULL);
	_tmp9_ = _tmp8_;
	afrodite_symbol_set_return_type (sym, _tmp9_);
	_afrodite_data_type_unref0 (_tmp9_);
	_g_free0 (_tmp7_);
	_tmp10_ = _g_object_ref0 (sym);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp10_;
	{
		ValaList* _tmp11_ = NULL;
		ValaList* _p_list;
		gint _tmp12_;
		gint _p_size;
		gint _p_index;
		_tmp11_ = vala_delegate_get_type_parameters (d);
		_p_list = _tmp11_;
		_tmp12_ = vala_collection_get_size ((ValaCollection*) _p_list);
		_p_size = _tmp12_;
		_p_index = -1;
		while (TRUE) {
			gpointer _tmp13_ = NULL;
			ValaTypeParameter* p;
			_p_index = _p_index + 1;
			if (!(_p_index < _p_size)) {
				break;
			}
			_tmp13_ = vala_list_get (_p_list, _p_index);
			p = (ValaTypeParameter*) _tmp13_;
			vala_code_node_accept ((ValaCodeNode*) p, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (p);
		}
		_vala_iterable_unref0 (_p_list);
	}
	{
		ValaList* _tmp14_ = NULL;
		ValaList* _param_list;
		gint _tmp15_;
		gint _param_size;
		gint _param_index;
		_tmp14_ = vala_delegate_get_parameters (d);
		_param_list = _tmp14_;
		_tmp15_ = vala_collection_get_size ((ValaCollection*) _param_list);
		_param_size = _tmp15_;
		_param_index = -1;
		while (TRUE) {
			gpointer _tmp16_ = NULL;
			ValaParameter* param;
			_param_index = _param_index + 1;
			if (!(_param_index < _param_size)) {
				break;
			}
			_tmp16_ = vala_list_get (_param_list, _param_index);
			param = (ValaParameter*) _tmp16_;
			vala_code_node_accept ((ValaCodeNode*) param, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp17_ = afrodite_symbol_get_return_type (self->priv->_current);
	_tmp18_ = afrodite_data_type_get_type_name (_tmp17_);
	_tmp19_ = afrodite_symbol_get_generic_type_argument (self->priv->_current, _tmp18_);
	gt = _tmp19_;
	if (gt != NULL) {
		AfroditeDataType* _tmp20_ = NULL;
		_tmp20_ = afrodite_symbol_get_return_type (self->priv->_current);
		afrodite_data_type_set_is_generic (_tmp20_, TRUE);
	}
	_tmp21_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp21_;
	self->priv->_current_sr = prev_sr;
	_tmp22_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp22_;
	_g_object_unref0 (gt);
	_g_object_unref0 (sym);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_signal (ValaCodeVisitor* base, ValaSignal* s) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* sym;
	ValaDataType* _tmp5_ = NULL;
	gchar* _tmp6_ = NULL;
	gchar* _tmp7_;
	AfroditeDataType* _tmp8_ = NULL;
	AfroditeDataType* _tmp9_;
	gboolean _tmp10_;
	AfroditeSymbol* _tmp11_;
	gboolean _tmp15_ = FALSE;
	ValaMethod* _tmp16_ = NULL;
	AfroditeDataType* _tmp21_ = NULL;
	const gchar* _tmp22_ = NULL;
	AfroditeSymbol* _tmp23_ = NULL;
	AfroditeSymbol* gt;
	AfroditeSymbol* _tmp25_;
	gchar* _tmp26_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (s != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) s);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_SIGNAL, (ValaSymbol*) s, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	sym = _tmp4_;
	_tmp5_ = vala_signal_get_return_type (s);
	_tmp6_ = vala_code_node_to_string ((ValaCodeNode*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = afrodite_data_type_new (_tmp7_, NULL);
	_tmp9_ = _tmp8_;
	afrodite_symbol_set_return_type (sym, _tmp9_);
	_afrodite_data_type_unref0 (_tmp9_);
	_g_free0 (_tmp7_);
	_tmp10_ = vala_signal_get_is_virtual (s);
	sym->is_virtual = _tmp10_;
	_tmp11_ = _g_object_ref0 (sym);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp11_;
	{
		ValaList* _tmp12_ = NULL;
		ValaList* _param_list;
		gint _tmp13_;
		gint _param_size;
		gint _param_index;
		_tmp12_ = vala_signal_get_parameters (s);
		_param_list = _tmp12_;
		_tmp13_ = vala_collection_get_size ((ValaCollection*) _param_list);
		_param_size = _tmp13_;
		_param_index = -1;
		while (TRUE) {
			gpointer _tmp14_ = NULL;
			ValaParameter* param;
			_param_index = _param_index + 1;
			if (!(_param_index < _param_size)) {
				break;
			}
			_tmp14_ = vala_list_get (_param_list, _param_index);
			param = (ValaParameter*) _tmp14_;
			vala_code_node_accept ((ValaCodeNode*) param, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (param);
		}
		_vala_iterable_unref0 (_param_list);
	}
	_tmp16_ = vala_signal_get_default_handler (s);
	if (_tmp16_ == NULL) {
		ValaBlock* _tmp17_ = NULL;
		_tmp17_ = vala_signal_get_body (s);
		_tmp15_ = _tmp17_ != NULL;
	} else {
		_tmp15_ = FALSE;
	}
	if (_tmp15_) {
		ValaBlock* _tmp18_ = NULL;
		_tmp18_ = vala_signal_get_body (s);
		vala_code_node_accept ((ValaCodeNode*) _tmp18_, (ValaCodeVisitor*) self);
	} else {
		ValaMethod* _tmp19_ = NULL;
		_tmp19_ = vala_signal_get_default_handler (s);
		if (_tmp19_ != NULL) {
			ValaMethod* _tmp20_ = NULL;
			_tmp20_ = vala_signal_get_default_handler (s);
			vala_code_node_accept ((ValaCodeNode*) _tmp20_, (ValaCodeVisitor*) self);
		}
	}
	_tmp21_ = afrodite_symbol_get_return_type (self->priv->_current);
	_tmp22_ = afrodite_data_type_get_type_name (_tmp21_);
	_tmp23_ = afrodite_symbol_get_generic_type_argument (self->priv->_current, _tmp22_);
	gt = _tmp23_;
	if (gt != NULL) {
		AfroditeDataType* _tmp24_ = NULL;
		_tmp24_ = afrodite_symbol_get_return_type (self->priv->_current);
		afrodite_data_type_set_is_generic (_tmp24_, TRUE);
	}
	_tmp25_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp25_;
	self->priv->_current_sr = prev_sr;
	_tmp26_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp26_;
	_g_object_unref0 (gt);
	_g_object_unref0 (sym);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_field (ValaCodeVisitor* base, ValaField* f) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* s;
	ValaDataType* _tmp5_ = NULL;
	gchar* _tmp6_ = NULL;
	gchar* _tmp7_;
	AfroditeDataType* _tmp8_ = NULL;
	AfroditeDataType* _tmp9_;
	ValaMemberBinding _tmp10_;
	AfroditeMemberBinding _tmp11_;
	AfroditeSymbol* _tmp12_;
	AfroditeDataType* _tmp13_ = NULL;
	const gchar* _tmp14_ = NULL;
	AfroditeSymbol* _tmp15_ = NULL;
	AfroditeSymbol* gt;
	AfroditeSymbol* _tmp17_;
	gchar* _tmp18_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (f != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) f);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_FIELD, (ValaSymbol*) f, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	s = _tmp4_;
	_tmp5_ = vala_variable_get_variable_type ((ValaVariable*) f);
	_tmp6_ = afrodite_ast_merger_get_datatype_typename (self, _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = afrodite_data_type_new (_tmp7_, NULL);
	_tmp9_ = _tmp8_;
	afrodite_symbol_set_return_type (s, _tmp9_);
	_afrodite_data_type_unref0 (_tmp9_);
	_g_free0 (_tmp7_);
	_tmp10_ = vala_field_get_binding (f);
	_tmp11_ = afrodite_ast_merger_get_vala_member_binding (self, _tmp10_);
	s->binding = _tmp11_;
	_tmp12_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp12_;
	_tmp13_ = afrodite_symbol_get_return_type (self->priv->_current);
	_tmp14_ = afrodite_data_type_get_type_name (_tmp13_);
	_tmp15_ = afrodite_symbol_get_generic_type_argument (self->priv->_current, _tmp14_);
	gt = _tmp15_;
	if (gt != NULL) {
		AfroditeDataType* _tmp16_ = NULL;
		_tmp16_ = afrodite_symbol_get_return_type (self->priv->_current);
		afrodite_data_type_set_is_generic (_tmp16_, TRUE);
	}
	_tmp17_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp17_;
	self->priv->_current_sr = prev_sr;
	_tmp18_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp18_;
	_g_object_unref0 (gt);
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_constant (ValaCodeVisitor* base, ValaConstant* c) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* s;
	ValaDataType* _tmp5_ = NULL;
	gchar* _tmp6_ = NULL;
	gchar* _tmp7_;
	AfroditeDataType* _tmp8_ = NULL;
	AfroditeDataType* _tmp9_;
	AfroditeSymbol* _tmp10_;
	gchar* _tmp11_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (c != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) c);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_CONSTANT, (ValaSymbol*) c, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	s = _tmp4_;
	s->binding = AFRODITE_MEMBER_BINDING_STATIC;
	_tmp5_ = vala_constant_get_type_reference (c);
	_tmp6_ = vala_code_node_to_string ((ValaCodeNode*) _tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = afrodite_data_type_new (_tmp7_, NULL);
	_tmp9_ = _tmp8_;
	afrodite_symbol_set_return_type (s, _tmp9_);
	_afrodite_data_type_unref0 (_tmp9_);
	_g_free0 (_tmp7_);
	_tmp10_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp10_;
	self->priv->_current_sr = prev_sr;
	_tmp11_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp11_;
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_property (ValaCodeVisitor* base, ValaProperty* p) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	gint last_line;
	ValaPropertyAccessor* _tmp3_ = NULL;
	ValaPropertyAccessor* _tmp11_ = NULL;
	ValaExpression* _tmp22_ = NULL;
	AfroditeSourceReference* _tmp32_ = NULL;
	AfroditeSymbol* _tmp33_ = NULL;
	AfroditeSymbol* s;
	ValaDataType* _tmp34_ = NULL;
	gchar* _tmp35_ = NULL;
	gchar* _tmp36_;
	AfroditeDataType* _tmp37_ = NULL;
	AfroditeDataType* _tmp38_;
	AfroditeSymbol* _tmp39_;
	ValaPropertyAccessor* _tmp40_ = NULL;
	ValaPropertyAccessor* _tmp42_ = NULL;
	ValaExpression* _tmp44_ = NULL;
	AfroditeDataType* _tmp46_ = NULL;
	const gchar* _tmp47_ = NULL;
	AfroditeSymbol* _tmp48_ = NULL;
	AfroditeSymbol* gt;
	AfroditeSymbol* _tmp50_;
	gchar* _tmp51_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (p != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) p);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	last_line = 0;
	_tmp3_ = vala_property_get_get_accessor (p);
	if (_tmp3_ != NULL) {
		ValaPropertyAccessor* _tmp4_ = NULL;
		ValaBlock* _tmp5_ = NULL;
		ValaBlock* _tmp6_;
		ValaBlock* body;
		gboolean _tmp7_ = FALSE;
		_tmp4_ = vala_property_get_get_accessor (p);
		_tmp5_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp4_);
		_tmp6_ = _vala_code_node_ref0 (_tmp5_);
		body = _tmp6_;
		if (body != NULL) {
			ValaSourceReference* _tmp8_ = NULL;
			_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) body);
			_tmp7_ = _tmp8_ != NULL;
		} else {
			_tmp7_ = FALSE;
		}
		if (_tmp7_) {
			ValaSourceReference* _tmp9_ = NULL;
			gint _tmp10_;
			_tmp9_ = vala_code_node_get_source_reference ((ValaCodeNode*) body);
			_tmp10_ = vala_source_reference_get_last_line (_tmp9_);
			last_line = _tmp10_;
		}
		_vala_code_node_unref0 (body);
	}
	_tmp11_ = vala_property_get_set_accessor (p);
	if (_tmp11_ != NULL) {
		ValaPropertyAccessor* _tmp12_ = NULL;
		ValaBlock* _tmp13_ = NULL;
		ValaBlock* _tmp14_;
		ValaBlock* body;
		gboolean _tmp15_ = FALSE;
		gboolean _tmp16_ = FALSE;
		_tmp12_ = vala_property_get_set_accessor (p);
		_tmp13_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp12_);
		_tmp14_ = _vala_code_node_ref0 (_tmp13_);
		body = _tmp14_;
		if (body != NULL) {
			ValaSourceReference* _tmp17_ = NULL;
			_tmp17_ = vala_code_node_get_source_reference ((ValaCodeNode*) body);
			_tmp16_ = _tmp17_ != NULL;
		} else {
			_tmp16_ = FALSE;
		}
		if (_tmp16_) {
			ValaSourceReference* _tmp18_ = NULL;
			gint _tmp19_;
			_tmp18_ = vala_code_node_get_source_reference ((ValaCodeNode*) body);
			_tmp19_ = vala_source_reference_get_last_line (_tmp18_);
			_tmp15_ = _tmp19_ > last_line;
		} else {
			_tmp15_ = FALSE;
		}
		if (_tmp15_) {
			ValaSourceReference* _tmp20_ = NULL;
			gint _tmp21_;
			_tmp20_ = vala_code_node_get_source_reference ((ValaCodeNode*) body);
			_tmp21_ = vala_source_reference_get_last_line (_tmp20_);
			last_line = _tmp21_;
		}
		_vala_code_node_unref0 (body);
	}
	_tmp22_ = vala_property_get_initializer (p);
	if (_tmp22_ != NULL) {
		gboolean _tmp23_ = FALSE;
		ValaExpression* _tmp24_ = NULL;
		ValaSourceReference* _tmp25_ = NULL;
		_tmp24_ = vala_property_get_initializer (p);
		_tmp25_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp24_);
		if (_tmp25_ != NULL) {
			ValaExpression* _tmp26_ = NULL;
			ValaSourceReference* _tmp27_ = NULL;
			gint _tmp28_;
			_tmp26_ = vala_property_get_initializer (p);
			_tmp27_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp26_);
			_tmp28_ = vala_source_reference_get_last_line (_tmp27_);
			_tmp23_ = _tmp28_ > last_line;
		} else {
			_tmp23_ = FALSE;
		}
		if (_tmp23_) {
			ValaExpression* _tmp29_ = NULL;
			ValaSourceReference* _tmp30_ = NULL;
			gint _tmp31_;
			_tmp29_ = vala_property_get_initializer (p);
			_tmp30_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp29_);
			_tmp31_ = vala_source_reference_get_last_line (_tmp30_);
			last_line = _tmp31_;
		}
	}
	_tmp33_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_PROPERTY, (ValaSymbol*) p, &_tmp32_, last_line, 0);
	self->priv->_current_sr = _tmp32_;
	s = _tmp33_;
	_tmp34_ = vala_property_get_property_type (p);
	_tmp35_ = vala_code_node_to_string ((ValaCodeNode*) _tmp34_);
	_tmp36_ = _tmp35_;
	_tmp37_ = afrodite_data_type_new (_tmp36_, NULL);
	_tmp38_ = _tmp37_;
	afrodite_symbol_set_return_type (s, _tmp38_);
	_afrodite_data_type_unref0 (_tmp38_);
	_g_free0 (_tmp36_);
	_tmp39_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp39_;
	_tmp40_ = vala_property_get_get_accessor (p);
	if (_tmp40_ != NULL) {
		ValaPropertyAccessor* _tmp41_ = NULL;
		_tmp41_ = vala_property_get_get_accessor (p);
		vala_code_node_accept ((ValaCodeNode*) _tmp41_, (ValaCodeVisitor*) self);
	}
	_tmp42_ = vala_property_get_set_accessor (p);
	if (_tmp42_ != NULL) {
		ValaPropertyAccessor* _tmp43_ = NULL;
		_tmp43_ = vala_property_get_set_accessor (p);
		vala_code_node_accept ((ValaCodeNode*) _tmp43_, (ValaCodeVisitor*) self);
	}
	_tmp44_ = vala_property_get_initializer (p);
	if (_tmp44_ != NULL) {
		ValaExpression* _tmp45_ = NULL;
		_tmp45_ = vala_property_get_initializer (p);
		vala_code_node_accept ((ValaCodeNode*) _tmp45_, (ValaCodeVisitor*) self);
	}
	_tmp46_ = afrodite_symbol_get_return_type (self->priv->_current);
	_tmp47_ = afrodite_data_type_get_type_name (_tmp46_);
	_tmp48_ = afrodite_symbol_get_generic_type_argument (self->priv->_current, _tmp47_);
	gt = _tmp48_;
	if (gt != NULL) {
		AfroditeDataType* _tmp49_ = NULL;
		_tmp49_ = afrodite_symbol_get_return_type (self->priv->_current);
		afrodite_data_type_set_is_generic (_tmp49_, TRUE);
	}
	_tmp50_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp50_;
	self->priv->_current_sr = prev_sr;
	_tmp51_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp51_;
	_g_object_unref0 (gt);
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_property_accessor (ValaCodeVisitor* base, ValaPropertyAccessor* a) {
	AfroditeAstMerger * self;
	const gchar* _tmp0_ = NULL;
	gboolean _tmp1_;
	ValaBlock* _tmp2_ = NULL;
	AfroditeSymbol* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (a != NULL);
	_tmp1_ = vala_property_accessor_get_readable (a);
	if (_tmp1_) {
		_tmp0_ = "get";
	} else {
		_tmp0_ = "set";
	}
	_tmp2_ = vala_subroutine_get_body ((ValaSubroutine*) a);
	_tmp3_ = afrodite_ast_merger_visit_scoped_codenode (self, _tmp0_, (ValaCodeNode*) a, _tmp2_);
	_tmp4_ = _tmp3_;
	_g_object_unref0 (_tmp4_);
}


static void afrodite_ast_merger_real_visit_error_domain (ValaCodeVisitor* base, ValaErrorDomain* ed) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* s;
	AfroditeSymbol* _tmp5_;
	AfroditeSymbol* _tmp12_;
	gchar* _tmp13_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (ed != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) ed);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_ERROR_DOMAIN, (ValaSymbol*) ed, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	s = _tmp4_;
	_tmp5_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp5_;
	{
		ValaList* _tmp6_ = NULL;
		ValaList* _ecode_list;
		gint _tmp7_;
		gint _ecode_size;
		gint _ecode_index;
		_tmp6_ = vala_error_domain_get_codes (ed);
		_ecode_list = _tmp6_;
		_tmp7_ = vala_collection_get_size ((ValaCollection*) _ecode_list);
		_ecode_size = _tmp7_;
		_ecode_index = -1;
		while (TRUE) {
			gpointer _tmp8_ = NULL;
			ValaErrorCode* ecode;
			_ecode_index = _ecode_index + 1;
			if (!(_ecode_index < _ecode_size)) {
				break;
			}
			_tmp8_ = vala_list_get (_ecode_list, _ecode_index);
			ecode = (ValaErrorCode*) _tmp8_;
			vala_code_node_accept ((ValaCodeNode*) ecode, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (ecode);
		}
		_vala_iterable_unref0 (_ecode_list);
	}
	{
		ValaList* _tmp9_ = NULL;
		ValaList* _m_list;
		gint _tmp10_;
		gint _m_size;
		gint _m_index;
		_tmp9_ = vala_error_domain_get_methods (ed);
		_m_list = _tmp9_;
		_tmp10_ = vala_collection_get_size ((ValaCollection*) _m_list);
		_m_size = _tmp10_;
		_m_index = -1;
		while (TRUE) {
			gpointer _tmp11_ = NULL;
			ValaMethod* m;
			_m_index = _m_index + 1;
			if (!(_m_index < _m_size)) {
				break;
			}
			_tmp11_ = vala_list_get (_m_list, _m_index);
			m = (ValaMethod*) _tmp11_;
			vala_code_node_accept ((ValaCodeNode*) m, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (m);
		}
		_vala_iterable_unref0 (_m_list);
	}
	_tmp12_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp12_;
	self->priv->_current_sr = prev_sr;
	_tmp13_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp13_;
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_error_code (ValaCodeVisitor* base, ValaErrorCode* ecode) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	const gchar* _tmp2_ = NULL;
	AfroditeSourceReference* _tmp3_ = NULL;
	AfroditeSymbol* _tmp4_ = NULL;
	AfroditeSymbol* s;
	AfroditeSymbolAccessibility _tmp5_;
	AfroditeSymbol* _tmp6_;
	gchar* _tmp7_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (ecode != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) ecode);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp4_ = afrodite_ast_merger_add_symbol (self, self->priv->_current, AFRODITE_MEMBER_TYPE_ERROR_CODE, (ValaSymbol*) ecode, &_tmp3_, 0, 0);
	self->priv->_current_sr = _tmp3_;
	s = _tmp4_;
	_tmp5_ = afrodite_symbol_get_access (self->priv->_current);
	afrodite_symbol_set_access (s, _tmp5_);
	_tmp6_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp6_;
	self->priv->_current_sr = prev_sr;
	_tmp7_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp7_;
	_g_object_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static gchar* afrodite_ast_merger_expression_to_string (AfroditeAstMerger* self, ValaExpression* e) {
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (e != NULL, NULL);
	if (VALA_IS_LITERAL (e)) {
		gchar* _tmp0_ = NULL;
		_tmp0_ = vala_code_node_to_string ((ValaCodeNode*) e);
		result = _tmp0_;
		return result;
	} else {
		if (VALA_IS_MEMBER_ACCESS (e)) {
			ValaMemberAccess* _tmp1_;
			ValaMemberAccess* ma;
			const gchar* _tmp2_ = NULL;
			gchar* _tmp3_ = NULL;
			_tmp1_ = _vala_code_node_ref0 (VALA_MEMBER_ACCESS (e));
			ma = _tmp1_;
			_tmp2_ = vala_member_access_get_member_name (ma);
			_tmp3_ = g_strdup_printf ("%s", _tmp2_);
			result = _tmp3_;
			_vala_code_node_unref0 (ma);
			return result;
		} else {
			if (VALA_IS_BINARY_EXPRESSION (e)) {
				ValaBinaryExpression* _tmp4_;
				ValaBinaryExpression* be;
				ValaExpression* _tmp5_ = NULL;
				gchar* _tmp6_ = NULL;
				gchar* _tmp7_;
				ValaBinaryOperator _tmp8_;
				gchar* _tmp9_ = NULL;
				gchar* _tmp10_;
				ValaExpression* _tmp11_ = NULL;
				gchar* _tmp12_ = NULL;
				gchar* _tmp13_;
				gchar* _tmp14_ = NULL;
				gchar* _tmp15_;
				_tmp4_ = _vala_code_node_ref0 (VALA_BINARY_EXPRESSION (e));
				be = _tmp4_;
				_tmp5_ = vala_binary_expression_get_left (be);
				_tmp6_ = afrodite_ast_merger_expression_to_string (self, _tmp5_);
				_tmp7_ = _tmp6_;
				_tmp8_ = vala_binary_expression_get_operator (be);
				_tmp9_ = afrodite_utils_binary_operator_to_string (_tmp8_);
				_tmp10_ = _tmp9_;
				_tmp11_ = vala_binary_expression_get_right (be);
				_tmp12_ = afrodite_ast_merger_expression_to_string (self, _tmp11_);
				_tmp13_ = _tmp12_;
				_tmp14_ = g_strdup_printf ("%s %s %s", _tmp7_, _tmp10_, _tmp13_);
				_tmp15_ = _tmp14_;
				_g_free0 (_tmp13_);
				_g_free0 (_tmp10_);
				_g_free0 (_tmp7_);
				result = _tmp15_;
				_vala_code_node_unref0 (be);
				return result;
			} else {
				if (VALA_IS_UNARY_EXPRESSION (e)) {
					ValaUnaryExpression* _tmp16_;
					ValaUnaryExpression* ue;
					ValaUnaryOperator _tmp17_;
					gchar* _tmp18_ = NULL;
					gchar* _tmp19_;
					ValaExpression* _tmp20_ = NULL;
					gchar* _tmp21_ = NULL;
					gchar* _tmp22_;
					gchar* _tmp23_ = NULL;
					gchar* _tmp24_;
					_tmp16_ = _vala_code_node_ref0 (VALA_UNARY_EXPRESSION (e));
					ue = _tmp16_;
					_tmp17_ = vala_unary_expression_get_operator (ue);
					_tmp18_ = afrodite_utils_unary_operator_to_string (_tmp17_);
					_tmp19_ = _tmp18_;
					_tmp20_ = vala_unary_expression_get_inner (ue);
					_tmp21_ = afrodite_ast_merger_expression_to_string (self, _tmp20_);
					_tmp22_ = _tmp21_;
					_tmp23_ = g_strdup_printf ("%s%s", _tmp19_, _tmp22_);
					_tmp24_ = _tmp23_;
					_g_free0 (_tmp22_);
					_g_free0 (_tmp19_);
					result = _tmp24_;
					_vala_code_node_unref0 (ue);
					return result;
				} else {
					const gchar* _tmp25_ = NULL;
					_tmp25_ = vala_code_node_get_type_name ((ValaCodeNode*) e);
					afrodite_utils_trace ("astmerger.vala:746: expression_to_string, unknown expression type: %s", _tmp25_);
					result = NULL;
					return result;
				}
			}
		}
	}
}


static gpointer _afrodite_data_type_ref0 (gpointer self) {
	return self ? afrodite_data_type_ref (self) : NULL;
}


static void afrodite_ast_merger_real_visit_formal_parameter (ValaCodeVisitor* base, ValaParameter* p) {
	AfroditeAstMerger * self;
	AfroditeDataType* d = NULL;
	gboolean _tmp0_;
	const gchar* _tmp14_ = NULL;
	AfroditeSymbol* _tmp15_ = NULL;
	AfroditeSymbol* gt;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (p != NULL);
	_tmp0_ = vala_parameter_get_ellipsis (p);
	if (_tmp0_) {
		AfroditeDataType* _tmp1_;
		_tmp1_ = _afrodite_data_type_ref0 ((AfroditeDataType*) afrodite_symbol_ELLIPSIS);
		_afrodite_data_type_unref0 (d);
		d = _tmp1_;
	} else {
		ValaDataType* _tmp2_ = NULL;
		gchar* _tmp3_ = NULL;
		gchar* _tmp4_;
		const gchar* _tmp5_ = NULL;
		AfroditeDataType* _tmp6_ = NULL;
		ValaExpression* _tmp7_ = NULL;
		ValaParameterDirection _tmp11_;
		ValaDataType* _tmp12_ = NULL;
		gboolean _tmp13_;
		_tmp2_ = vala_variable_get_variable_type ((ValaVariable*) p);
		_tmp3_ = afrodite_ast_merger_get_datatype_typename (self, _tmp2_);
		_tmp4_ = _tmp3_;
		_tmp5_ = vala_symbol_get_name ((ValaSymbol*) p);
		_tmp6_ = afrodite_data_type_new (_tmp4_, _tmp5_);
		_afrodite_data_type_unref0 (d);
		d = _tmp6_;
		_g_free0 (_tmp4_);
		_tmp7_ = vala_variable_get_initializer ((ValaVariable*) p);
		if (_tmp7_ != NULL) {
			ValaExpression* _tmp8_ = NULL;
			gchar* _tmp9_ = NULL;
			gchar* _tmp10_;
			_tmp8_ = vala_variable_get_initializer ((ValaVariable*) p);
			_tmp9_ = afrodite_ast_merger_expression_to_string (self, _tmp8_);
			_tmp10_ = _tmp9_;
			afrodite_data_type_set_default_expression (d, _tmp10_);
			_g_free0 (_tmp10_);
		}
		_tmp11_ = vala_parameter_get_direction (p);
		switch (_tmp11_) {
			case VALA_PARAMETER_DIRECTION_OUT:
			{
				afrodite_data_type_set_is_out (d, TRUE);
				break;
			}
			case VALA_PARAMETER_DIRECTION_REF:
			{
				afrodite_data_type_set_is_ref (d, TRUE);
				break;
			}
			default:
			break;
		}
		_tmp12_ = vala_variable_get_variable_type ((ValaVariable*) p);
		_tmp13_ = vala_data_type_is_array (_tmp12_);
		afrodite_data_type_set_is_array (d, _tmp13_);
	}
	afrodite_symbol_add_parameter (self->priv->_current, d);
	_tmp14_ = afrodite_data_type_get_type_name (d);
	_tmp15_ = afrodite_symbol_get_generic_type_argument (self->priv->_current, _tmp14_);
	gt = _tmp15_;
	if (gt != NULL) {
		afrodite_data_type_set_is_generic (d, TRUE);
	}
	_g_object_unref0 (gt);
	_afrodite_data_type_unref0 (d);
}


static void afrodite_ast_merger_real_visit_block (ValaCodeVisitor* base, ValaBlock* b) {
	AfroditeAstMerger * self;
	gboolean _tmp0_ = FALSE;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (b != NULL);
	if (self->priv->_current != NULL) {
		_tmp0_ = self->priv->_current_sr != NULL;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gboolean _tmp1_ = FALSE;
		ValaSourceReference* _tmp2_ = NULL;
		_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) b);
		if (_tmp2_ != NULL) {
			ValaSourceReference* _tmp3_ = NULL;
			gint _tmp4_;
			gint _tmp5_;
			_tmp3_ = vala_code_node_get_source_reference ((ValaCodeNode*) b);
			_tmp4_ = vala_source_reference_get_last_line (_tmp3_);
			_tmp5_ = afrodite_source_reference_get_last_line (self->priv->_current_sr);
			_tmp1_ = _tmp4_ > _tmp5_;
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			ValaSourceReference* _tmp6_ = NULL;
			gint _tmp7_;
			_tmp6_ = vala_code_node_get_source_reference ((ValaCodeNode*) b);
			_tmp7_ = vala_source_reference_get_last_line (_tmp6_);
			afrodite_source_reference_set_last_line (self->priv->_current_sr, _tmp7_);
		}
	}
	vala_code_node_accept_children ((ValaCodeNode*) b, (ValaCodeVisitor*) self);
}


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


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


static void afrodite_ast_merger_real_visit_local_variable (ValaCodeVisitor* base, ValaLocalVariable* local) {
	AfroditeAstMerger * self;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	const gchar* _tmp2_ = NULL;
	const gchar* _tmp3_ = NULL;
	AfroditeDataType* _tmp4_ = NULL;
	AfroditeDataType* s;
	ValaDataType* _tmp5_ = NULL;
	AfroditeSourceReference* _tmp46_ = NULL;
	AfroditeSourceReference* _tmp47_;
	gboolean _tmp48_;
	ValaDataType* _tmp51_ = NULL;
	AfroditeSymbol* _tmp53_;
	gchar* _tmp54_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (local != NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	_tmp2_ = vala_symbol_get_name ((ValaSymbol*) local);
	afrodite_ast_merger_set_fqn (self, _tmp2_);
	_tmp3_ = vala_symbol_get_name ((ValaSymbol*) local);
	_tmp4_ = afrodite_data_type_new ("", _tmp3_);
	s = _tmp4_;
	_tmp5_ = vala_variable_get_variable_type ((ValaVariable*) local);
	if (_tmp5_ != NULL) {
		ValaDataType* _tmp6_ = NULL;
		gchar* _tmp7_ = NULL;
		gchar* _tmp8_;
		_tmp6_ = vala_variable_get_variable_type ((ValaVariable*) local);
		_tmp7_ = afrodite_ast_merger_get_datatype_typename (self, _tmp6_);
		_tmp8_ = _tmp7_;
		afrodite_data_type_set_type_name (s, _tmp8_);
		_g_free0 (_tmp8_);
	} else {
		ValaDataType* _tmp9_ = NULL;
		_tmp9_ = vala_variable_get_variable_type ((ValaVariable*) local);
		if (_tmp9_ == NULL) {
			ValaExpression* _tmp10_ = NULL;
			gboolean _tmp37_ = FALSE;
			const gchar* _tmp38_ = NULL;
			_tmp10_ = vala_variable_get_initializer ((ValaVariable*) local);
			if (_tmp10_ != NULL) {
				AfroditeDataType* _tmp11_;
				AfroditeDataType* prev_inferred_type;
				AfroditeDataType* _tmp12_;
				ValaExpression* _tmp13_ = NULL;
				gboolean _tmp14_ = FALSE;
				const gchar* _tmp15_ = NULL;
				gboolean _tmp24_ = FALSE;
				ValaExpression* _tmp25_ = NULL;
				AfroditeDataType* _tmp36_;
				_tmp11_ = _afrodite_data_type_ref0 (self->priv->_inferred_type);
				prev_inferred_type = _tmp11_;
				_tmp12_ = _afrodite_data_type_ref0 (s);
				_afrodite_data_type_unref0 (self->priv->_inferred_type);
				self->priv->_inferred_type = _tmp12_;
				_tmp13_ = vala_variable_get_initializer ((ValaVariable*) local);
				vala_code_node_accept ((ValaCodeNode*) _tmp13_, (ValaCodeVisitor*) self);
				_tmp15_ = afrodite_data_type_get_type_name (s);
				if (_tmp15_ != NULL) {
					gboolean _tmp16_ = FALSE;
					const gchar* _tmp17_ = NULL;
					gboolean _tmp18_;
					_tmp17_ = afrodite_data_type_get_type_name (s);
					_tmp18_ = g_str_has_prefix (_tmp17_, "this.");
					if (_tmp18_) {
						_tmp16_ = TRUE;
					} else {
						const gchar* _tmp19_ = NULL;
						gboolean _tmp20_;
						_tmp19_ = afrodite_data_type_get_type_name (s);
						_tmp20_ = g_str_has_prefix (_tmp19_, "base.");
						_tmp16_ = _tmp20_;
					}
					_tmp14_ = _tmp16_;
				} else {
					_tmp14_ = FALSE;
				}
				if (_tmp14_) {
					const gchar* _tmp21_ = NULL;
					gchar* _tmp22_ = NULL;
					gchar* _tmp23_;
					_tmp21_ = afrodite_data_type_get_type_name (s);
					_tmp22_ = string_substring (_tmp21_, (glong) 5, (glong) (-1));
					_tmp23_ = _tmp22_;
					afrodite_data_type_set_type_name (s, _tmp23_);
					_g_free0 (_tmp23_);
				}
				_tmp25_ = vala_variable_get_initializer ((ValaVariable*) local);
				if (VALA_IS_BINARY_EXPRESSION (_tmp25_)) {
					const gchar* _tmp26_ = NULL;
					_tmp26_ = afrodite_data_type_get_type_name (s);
					_tmp24_ = _tmp26_ != NULL;
				} else {
					_tmp24_ = FALSE;
				}
				if (_tmp24_) {
					const gchar* _tmp27_ = NULL;
					gchar** _tmp28_;
					gchar** _tmp29_ = NULL;
					gchar** tmps;
					gint tmps_length1;
					gint _tmps_size_;
					_tmp27_ = afrodite_data_type_get_type_name (s);
					_tmp29_ = _tmp28_ = g_strsplit (_tmp27_, ".", 0);
					tmps = _tmp29_;
					tmps_length1 = _vala_array_length (_tmp28_);
					_tmps_size_ = _vala_array_length (_tmp28_);
					if (tmps_length1 <= 2) {
						afrodite_data_type_set_type_name (s, tmps[0]);
					} else {
						gchar* _tmp30_;
						gchar* type_name;
						gint _tmp33_;
						gchar* _tmp34_ = NULL;
						gchar* _tmp35_;
						_tmp30_ = g_strdup ("");
						type_name = _tmp30_;
						{
							gint i;
							i = 0;
							{
								gboolean _tmp31_;
								_tmp31_ = TRUE;
								while (TRUE) {
									gchar* _tmp32_ = NULL;
									if (!_tmp31_) {
										i++;
									}
									_tmp31_ = FALSE;
									if (!(i < (tmps_length1 - 1))) {
										break;
									}
									_tmp32_ = g_strconcat (type_name, tmps[i], ".", NULL);
									_g_free0 (type_name);
									type_name = _tmp32_;
								}
							}
						}
						_tmp33_ = strlen (type_name);
						_tmp34_ = string_substring (type_name, (glong) 0, (glong) (_tmp33_ - 1));
						_tmp35_ = _tmp34_;
						afrodite_data_type_set_type_name (s, _tmp35_);
						_g_free0 (_tmp35_);
						_g_free0 (type_name);
					}
					tmps = (_vala_array_free (tmps, tmps_length1, (GDestroyNotify) g_free), NULL);
				}
				_tmp36_ = _afrodite_data_type_ref0 (prev_inferred_type);
				_afrodite_data_type_unref0 (self->priv->_inferred_type);
				self->priv->_inferred_type = _tmp36_;
				_afrodite_data_type_unref0 (prev_inferred_type);
			}
			_tmp38_ = afrodite_data_type_get_type_name (s);
			if (_tmp38_ != NULL) {
				const gchar* _tmp39_ = NULL;
				gboolean _tmp40_;
				_tmp39_ = afrodite_data_type_get_type_name (s);
				_tmp40_ = g_str_has_suffix (_tmp39_, "Literal");
				_tmp37_ = _tmp40_;
			} else {
				_tmp37_ = FALSE;
			}
			if (_tmp37_) {
				const gchar* _tmp41_ = NULL;
				_tmp41_ = afrodite_data_type_get_type_name (s);
				if (g_strcmp0 (_tmp41_, "ValaIntegerLiteral") == 0) {
					afrodite_data_type_set_type_name (s, "int");
				} else {
					const gchar* _tmp42_ = NULL;
					_tmp42_ = afrodite_data_type_get_type_name (s);
					if (g_strcmp0 (_tmp42_, "ValaBooleanLiteral") == 0) {
						afrodite_data_type_set_type_name (s, "bool");
					} else {
						const gchar* _tmp43_ = NULL;
						_tmp43_ = afrodite_data_type_get_type_name (s);
						if (g_strcmp0 (_tmp43_, "ValaCharacterLiteral") == 0) {
							afrodite_data_type_set_type_name (s, "char");
						} else {
							const gchar* _tmp44_ = NULL;
							_tmp44_ = afrodite_data_type_get_type_name (s);
							if (g_strcmp0 (_tmp44_, "ValaStringLiteral") == 0) {
								afrodite_data_type_set_type_name (s, "string");
							} else {
								const gchar* _tmp45_ = NULL;
								_tmp45_ = afrodite_data_type_get_type_name (s);
								if (g_strcmp0 (_tmp45_, "ValaRealLiteral") == 0) {
									afrodite_data_type_set_type_name (s, "double");
								}
							}
						}
					}
				}
			}
		}
	}
	_tmp46_ = afrodite_ast_merger_create_source_reference (self, (ValaCodeNode*) local, 0, 0);
	_tmp47_ = _tmp46_;
	afrodite_data_type_set_source_reference (s, _tmp47_);
	_afrodite_source_reference_unref0 (_tmp47_);
	_tmp48_ = afrodite_symbol_get_has_local_variables (self->priv->_current);
	if (_tmp48_) {
		const gchar* _tmp49_ = NULL;
		AfroditeDataType* _tmp50_ = NULL;
		AfroditeDataType* old_var;
		_tmp49_ = afrodite_data_type_get_name (s);
		_tmp50_ = afrodite_symbol_lookup_local_variable (self->priv->_current, _tmp49_);
		old_var = _tmp50_;
		if (old_var != NULL) {
			afrodite_symbol_remove_local_variable (self->priv->_current, old_var);
		}
		_afrodite_data_type_unref0 (old_var);
	}
	afrodite_symbol_add_local_variable (self->priv->_current, s);
	_tmp51_ = vala_variable_get_variable_type ((ValaVariable*) local);
	if (_tmp51_ != NULL) {
		ValaDataType* _tmp52_ = NULL;
		_tmp52_ = vala_variable_get_variable_type ((ValaVariable*) local);
		afrodite_ast_merger_visit_type_for_generics (self, _tmp52_, s);
	}
	_tmp53_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp53_;
	_tmp54_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp54_;
	_afrodite_data_type_unref0 (s);
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
}


static void afrodite_ast_merger_real_visit_lambda_expression (ValaCodeVisitor* base, ValaLambdaExpression* expr) {
	AfroditeAstMerger * self;
	AfroditeSymbol* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = afrodite_ast_merger_visit_scoped_codenode (self, "lambda-section", (ValaCodeNode*) expr, NULL);
	_tmp1_ = _tmp0_;
	_g_object_unref0 (_tmp1_);
}


static void afrodite_ast_merger_real_visit_member_access (ValaCodeVisitor* base, ValaMemberAccess* expr) {
	AfroditeAstMerger * self;
	const gchar* _tmp0_ = NULL;
	gchar* _tmp1_;
	gchar* member_name;
	ValaExpression* _tmp2_ = NULL;
	gboolean _tmp6_ = FALSE;
	const gchar* _tmp7_ = NULL;
	ValaExpression* _tmp12_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (expr != NULL);
	if (self->priv->_inferred_type == NULL) {
		return;
	}
	_tmp0_ = vala_member_access_get_member_name (expr);
	_tmp1_ = g_strdup (_tmp0_);
	member_name = _tmp1_;
	_tmp2_ = vala_member_access_get_inner (expr);
	if (_tmp2_ == NULL) {
		if (self->priv->_current != NULL) {
			AfroditeDataType* _tmp3_ = NULL;
			AfroditeDataType* d;
			_tmp3_ = afrodite_symbol_lookup_datatype_for_variable_name (self->priv->_current, AFRODITE_COMPARE_MODE_EXACT, member_name, AFRODITE_SYMBOL_ACCESSIBILITY_ANY);
			d = _tmp3_;
			if (d != NULL) {
				const gchar* _tmp4_ = NULL;
				gchar* _tmp5_;
				_tmp4_ = afrodite_data_type_get_type_name (d);
				_tmp5_ = g_strdup (_tmp4_);
				_g_free0 (member_name);
				member_name = _tmp5_;
			}
			_afrodite_data_type_unref0 (d);
		}
	}
	_tmp7_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
	if (_tmp7_ == NULL) {
		_tmp6_ = TRUE;
	} else {
		const gchar* _tmp8_ = NULL;
		_tmp8_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
		_tmp6_ = g_strcmp0 (_tmp8_, "") == 0;
	}
	if (_tmp6_) {
		afrodite_data_type_set_type_name (self->priv->_inferred_type, member_name);
	} else {
		const gchar* _tmp9_ = NULL;
		gchar* _tmp10_ = NULL;
		gchar* _tmp11_;
		_tmp9_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
		_tmp10_ = g_strdup_printf ("%s.%s", member_name, _tmp9_);
		_tmp11_ = _tmp10_;
		afrodite_data_type_set_type_name (self->priv->_inferred_type, _tmp11_);
		_g_free0 (_tmp11_);
	}
	_tmp12_ = vala_member_access_get_inner (expr);
	if (_tmp12_ != NULL) {
		ValaExpression* _tmp13_ = NULL;
		_tmp13_ = vala_member_access_get_inner (expr);
		vala_code_node_accept ((ValaCodeNode*) _tmp13_, (ValaCodeVisitor*) self);
	}
	_g_free0 (member_name);
}


static void afrodite_ast_merger_real_visit_method_call (ValaCodeVisitor* base, ValaMethodCall* mc) {
	AfroditeAstMerger * self;
	ValaExpression* _tmp0_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (mc != NULL);
	_tmp0_ = vala_method_call_get_call (mc);
	vala_code_node_accept ((ValaCodeNode*) _tmp0_, (ValaCodeVisitor*) self);
}


static void afrodite_ast_merger_real_visit_object_creation_expression (ValaCodeVisitor* base, ValaObjectCreationExpression* expr) {
	AfroditeAstMerger * self;
	ValaMemberAccess* _tmp0_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (expr != NULL);
	_tmp0_ = vala_object_creation_expression_get_member_name (expr);
	vala_code_node_accept ((ValaCodeNode*) _tmp0_, (ValaCodeVisitor*) self);
}


static void afrodite_ast_merger_real_visit_initializer_list (ValaCodeVisitor* base, ValaInitializerList* list) {
	AfroditeAstMerger * self;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (list != NULL);
	vala_code_node_accept_children ((ValaCodeNode*) list, (ValaCodeVisitor*) self);
}


static void afrodite_ast_merger_real_visit_binary_expression (ValaCodeVisitor* base, ValaBinaryExpression* expr) {
	AfroditeAstMerger * self;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (expr != NULL);
	vala_code_node_accept_children ((ValaCodeNode*) expr, (ValaCodeVisitor*) self);
}


static void afrodite_ast_merger_real_visit_boolean_literal (ValaCodeVisitor* base, ValaBooleanLiteral* lit) {
	AfroditeAstMerger * self;
	gboolean _tmp0_ = FALSE;
	const gchar* _tmp1_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (lit != NULL);
	if (self->priv->_inferred_type == NULL) {
		return;
	}
	_tmp1_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
	if (_tmp1_ == NULL) {
		_tmp0_ = TRUE;
	} else {
		const gchar* _tmp2_ = NULL;
		_tmp2_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
		_tmp0_ = g_strcmp0 (_tmp2_, "") == 0;
	}
	if (_tmp0_) {
		afrodite_data_type_set_type_name (self->priv->_inferred_type, "bool");
	}
}


static void afrodite_ast_merger_real_visit_character_literal (ValaCodeVisitor* base, ValaCharacterLiteral* lit) {
	AfroditeAstMerger * self;
	gboolean _tmp0_ = FALSE;
	const gchar* _tmp1_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (lit != NULL);
	if (self->priv->_inferred_type == NULL) {
		return;
	}
	_tmp1_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
	if (_tmp1_ == NULL) {
		_tmp0_ = TRUE;
	} else {
		const gchar* _tmp2_ = NULL;
		_tmp2_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
		_tmp0_ = g_strcmp0 (_tmp2_, "") == 0;
	}
	if (_tmp0_) {
		afrodite_data_type_set_type_name (self->priv->_inferred_type, "char");
	}
}


static void afrodite_ast_merger_real_visit_integer_literal (ValaCodeVisitor* base, ValaIntegerLiteral* lit) {
	AfroditeAstMerger * self;
	gboolean _tmp0_ = FALSE;
	const gchar* _tmp1_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (lit != NULL);
	if (self->priv->_inferred_type == NULL) {
		return;
	}
	_tmp1_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
	if (_tmp1_ == NULL) {
		_tmp0_ = TRUE;
	} else {
		const gchar* _tmp2_ = NULL;
		_tmp2_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
		_tmp0_ = g_strcmp0 (_tmp2_, "") == 0;
	}
	if (_tmp0_) {
		const gchar* _tmp3_ = NULL;
		_tmp3_ = vala_code_node_get_type_name ((ValaCodeNode*) lit);
		afrodite_data_type_set_type_name (self->priv->_inferred_type, _tmp3_);
	}
}


static void afrodite_ast_merger_real_visit_real_literal (ValaCodeVisitor* base, ValaRealLiteral* lit) {
	AfroditeAstMerger * self;
	gboolean _tmp0_ = FALSE;
	const gchar* _tmp1_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (lit != NULL);
	if (self->priv->_inferred_type == NULL) {
		return;
	}
	_tmp1_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
	if (_tmp1_ == NULL) {
		_tmp0_ = TRUE;
	} else {
		const gchar* _tmp2_ = NULL;
		_tmp2_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
		_tmp0_ = g_strcmp0 (_tmp2_, "") == 0;
	}
	if (_tmp0_) {
		gchar* _tmp3_ = NULL;
		gchar* _tmp4_;
		_tmp3_ = vala_real_literal_get_type_name (lit);
		_tmp4_ = _tmp3_;
		afrodite_data_type_set_type_name (self->priv->_inferred_type, _tmp4_);
		_g_free0 (_tmp4_);
	}
}


static void afrodite_ast_merger_real_visit_string_literal (ValaCodeVisitor* base, ValaStringLiteral* lit) {
	AfroditeAstMerger * self;
	gboolean _tmp0_ = FALSE;
	const gchar* _tmp1_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (lit != NULL);
	if (self->priv->_inferred_type == NULL) {
		return;
	}
	_tmp1_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
	if (_tmp1_ == NULL) {
		_tmp0_ = TRUE;
	} else {
		const gchar* _tmp2_ = NULL;
		_tmp2_ = afrodite_data_type_get_type_name (self->priv->_inferred_type);
		_tmp0_ = g_strcmp0 (_tmp2_, "") == 0;
	}
	if (_tmp0_) {
		afrodite_data_type_set_type_name (self->priv->_inferred_type, "string");
	}
}


static void afrodite_ast_merger_real_visit_declaration_statement (ValaCodeVisitor* base, ValaDeclarationStatement* stmt) {
	AfroditeAstMerger * self;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	vala_code_node_accept_children ((ValaCodeNode*) stmt, (ValaCodeVisitor*) self);
}


static void afrodite_ast_merger_real_visit_foreach_statement (ValaCodeVisitor* base, ValaForeachStatement* stmt) {
	AfroditeAstMerger * self;
	ValaBlock* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* s;
	const gchar* _tmp2_ = NULL;
	AfroditeDataType* _tmp3_ = NULL;
	AfroditeDataType* d;
	ValaDataType* _tmp4_ = NULL;
	AfroditeSourceReference* _tmp11_ = NULL;
	AfroditeSourceReference* _tmp12_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_foreach_statement_get_body (stmt);
	_tmp1_ = afrodite_ast_merger_visit_scoped_codenode (self, "foreach", (ValaCodeNode*) stmt, _tmp0_);
	s = _tmp1_;
	_tmp2_ = vala_foreach_statement_get_variable_name (stmt);
	_tmp3_ = afrodite_data_type_new ("", _tmp2_);
	d = _tmp3_;
	_tmp4_ = vala_foreach_statement_get_type_reference (stmt);
	if (_tmp4_ == NULL) {
		AfroditeDataType* _tmp5_;
		AfroditeDataType* prev_inferred_type;
		AfroditeDataType* _tmp6_;
		AfroditeDataType* _tmp7_;
		_tmp5_ = _afrodite_data_type_ref0 (self->priv->_inferred_type);
		prev_inferred_type = _tmp5_;
		_tmp6_ = _afrodite_data_type_ref0 (d);
		_afrodite_data_type_unref0 (self->priv->_inferred_type);
		self->priv->_inferred_type = _tmp6_;
		vala_code_node_accept_children ((ValaCodeNode*) stmt, (ValaCodeVisitor*) self);
		_tmp7_ = _afrodite_data_type_ref0 (prev_inferred_type);
		_afrodite_data_type_unref0 (self->priv->_inferred_type);
		self->priv->_inferred_type = _tmp7_;
		_afrodite_data_type_unref0 (prev_inferred_type);
	} else {
		ValaDataType* _tmp8_ = NULL;
		gchar* _tmp9_ = NULL;
		gchar* _tmp10_;
		_tmp8_ = vala_foreach_statement_get_type_reference (stmt);
		_tmp9_ = afrodite_ast_merger_get_datatype_typename (self, _tmp8_);
		_tmp10_ = _tmp9_;
		afrodite_data_type_set_type_name (d, _tmp10_);
		_g_free0 (_tmp10_);
	}
	afrodite_data_type_set_is_iterator (d, TRUE);
	_tmp11_ = afrodite_ast_merger_create_source_reference (self, (ValaCodeNode*) stmt, 0, 0);
	_tmp12_ = _tmp11_;
	afrodite_data_type_set_source_reference (d, _tmp12_);
	_afrodite_source_reference_unref0 (_tmp12_);
	afrodite_symbol_add_local_variable (s, d);
	_afrodite_data_type_unref0 (d);
	_g_object_unref0 (s);
}


static void afrodite_ast_merger_real_visit_while_statement (ValaCodeVisitor* base, ValaWhileStatement* stmt) {
	AfroditeAstMerger * self;
	ValaBlock* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* _tmp2_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_while_statement_get_body (stmt);
	_tmp1_ = afrodite_ast_merger_visit_scoped_codenode (self, "while", (ValaCodeNode*) stmt, _tmp0_);
	_tmp2_ = _tmp1_;
	_g_object_unref0 (_tmp2_);
}


static void afrodite_ast_merger_real_visit_do_statement (ValaCodeVisitor* base, ValaDoStatement* stmt) {
	AfroditeAstMerger * self;
	ValaBlock* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* _tmp2_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_do_statement_get_body (stmt);
	_tmp1_ = afrodite_ast_merger_visit_scoped_codenode (self, "do", (ValaCodeNode*) stmt, _tmp0_);
	_tmp2_ = _tmp1_;
	_g_object_unref0 (_tmp2_);
}


static void afrodite_ast_merger_real_visit_for_statement (ValaCodeVisitor* base, ValaForStatement* stmt) {
	AfroditeAstMerger * self;
	ValaBlock* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* _tmp2_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_for_statement_get_body (stmt);
	_tmp1_ = afrodite_ast_merger_visit_scoped_codenode (self, "for", (ValaCodeNode*) stmt, _tmp0_);
	_tmp2_ = _tmp1_;
	_g_object_unref0 (_tmp2_);
}


static void afrodite_ast_merger_real_visit_try_statement (ValaCodeVisitor* base, ValaTryStatement* stmt) {
	AfroditeAstMerger * self;
	ValaBlock* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* _tmp2_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_try_statement_get_body (stmt);
	_tmp1_ = afrodite_ast_merger_visit_scoped_codenode (self, "try", (ValaCodeNode*) stmt, _tmp0_);
	_tmp2_ = _tmp1_;
	_g_object_unref0 (_tmp2_);
}


static void afrodite_ast_merger_real_visit_catch_clause (ValaCodeVisitor* base, ValaCatchClause* clause) {
	AfroditeAstMerger * self;
	ValaBlock* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* s;
	ValaDataType* _tmp2_ = NULL;
	gchar* _tmp3_ = NULL;
	gchar* _tmp4_;
	const gchar* _tmp5_ = NULL;
	AfroditeDataType* _tmp6_ = NULL;
	AfroditeDataType* _tmp7_;
	AfroditeDataType* d;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (clause != NULL);
	_tmp0_ = vala_catch_clause_get_body (clause);
	_tmp1_ = afrodite_ast_merger_visit_scoped_codenode (self, "catch", (ValaCodeNode*) clause, _tmp0_);
	s = _tmp1_;
	_tmp2_ = vala_catch_clause_get_error_type (clause);
	_tmp3_ = afrodite_ast_merger_get_datatype_typename (self, _tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = vala_catch_clause_get_variable_name (clause);
	_tmp6_ = afrodite_data_type_new (_tmp4_, _tmp5_);
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp4_);
	d = _tmp7_;
	afrodite_symbol_add_local_variable (s, d);
	_afrodite_data_type_unref0 (d);
	_g_object_unref0 (s);
}


static void afrodite_ast_merger_real_visit_if_statement (ValaCodeVisitor* base, ValaIfStatement* stmt) {
	AfroditeAstMerger * self;
	ValaBlock* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* _tmp2_;
	ValaBlock* _tmp3_ = NULL;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = vala_if_statement_get_true_statement (stmt);
	_tmp1_ = afrodite_ast_merger_visit_scoped_codenode (self, "if", (ValaCodeNode*) stmt, _tmp0_);
	_tmp2_ = _tmp1_;
	_g_object_unref0 (_tmp2_);
	_tmp3_ = vala_if_statement_get_false_statement (stmt);
	if (_tmp3_ != NULL) {
		ValaBlock* _tmp4_ = NULL;
		AfroditeSymbol* _tmp5_ = NULL;
		AfroditeSymbol* _tmp6_;
		_tmp4_ = vala_if_statement_get_false_statement (stmt);
		_tmp5_ = afrodite_ast_merger_visit_scoped_codenode (self, "else", (ValaCodeNode*) stmt, _tmp4_);
		_tmp6_ = _tmp5_;
		_g_object_unref0 (_tmp6_);
	}
}


static void afrodite_ast_merger_real_visit_switch_statement (ValaCodeVisitor* base, ValaSwitchStatement* stmt) {
	AfroditeAstMerger * self;
	AfroditeSymbol* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (stmt != NULL);
	_tmp0_ = afrodite_ast_merger_visit_scoped_codenode (self, "switch", (ValaCodeNode*) stmt, NULL);
	_tmp1_ = _tmp0_;
	_g_object_unref0 (_tmp1_);
}


static void afrodite_ast_merger_real_visit_switch_section (ValaCodeVisitor* base, ValaSwitchSection* section) {
	AfroditeAstMerger * self;
	AfroditeSymbol* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (section != NULL);
	_tmp0_ = afrodite_ast_merger_visit_scoped_codenode (self, "switch-section", (ValaCodeNode*) section, (ValaBlock*) section);
	_tmp1_ = _tmp0_;
	_g_object_unref0 (_tmp1_);
}


static void afrodite_ast_merger_real_visit_type_parameter (ValaCodeVisitor* base, ValaTypeParameter* p) {
	AfroditeAstMerger * self;
	const gchar* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbol* symbol;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (p != NULL);
	_tmp0_ = vala_symbol_get_name ((ValaSymbol*) p);
	_tmp1_ = afrodite_symbol_new (_tmp0_, AFRODITE_MEMBER_TYPE_TYPE_PARAMETER);
	symbol = _tmp1_;
	afrodite_symbol_set_access (symbol, AFRODITE_SYMBOL_ACCESSIBILITY_ANY);
	afrodite_symbol_add_generic_type_argument (self->priv->_current, symbol);
	vala_code_node_accept_children ((ValaCodeNode*) p, (ValaCodeVisitor*) self);
	_g_object_unref0 (symbol);
}


static void afrodite_ast_merger_real_visit_data_type (ValaCodeVisitor* base, ValaDataType* type) {
	AfroditeAstMerger * self;
	gchar* _tmp0_ = NULL;
	gchar* _tmp1_;
	AfroditeDataType* _tmp2_ = NULL;
	AfroditeDataType* _tmp3_;
	AfroditeDataType* t;
	self = (AfroditeAstMerger*) base;
	g_return_if_fail (type != NULL);
	_tmp0_ = afrodite_ast_merger_get_datatype_typename (self, type);
	_tmp1_ = _tmp0_;
	_tmp2_ = afrodite_data_type_new (_tmp1_, NULL);
	_tmp3_ = _tmp2_;
	_g_free0 (_tmp1_);
	t = _tmp3_;
	if (self->priv->_current_type != NULL) {
		afrodite_data_type_add_generic_type (self->priv->_current_type, t);
	} else {
		gboolean _tmp4_ = FALSE;
		if (self->priv->_current != NULL) {
			gboolean _tmp5_ = FALSE;
			gboolean _tmp6_ = FALSE;
			AfroditeMemberType _tmp7_;
			_tmp7_ = afrodite_symbol_get_member_type (self->priv->_current);
			if (_tmp7_ == AFRODITE_MEMBER_TYPE_CLASS) {
				_tmp6_ = TRUE;
			} else {
				AfroditeMemberType _tmp8_;
				_tmp8_ = afrodite_symbol_get_member_type (self->priv->_current);
				_tmp6_ = _tmp8_ == AFRODITE_MEMBER_TYPE_INTERFACE;
			}
			if (_tmp6_) {
				_tmp5_ = TRUE;
			} else {
				AfroditeMemberType _tmp9_;
				_tmp9_ = afrodite_symbol_get_member_type (self->priv->_current);
				_tmp5_ = _tmp9_ == AFRODITE_MEMBER_TYPE_STRUCT;
			}
			_tmp4_ = _tmp5_;
		} else {
			_tmp4_ = FALSE;
		}
		if (_tmp4_) {
			gboolean _tmp10_ = FALSE;
			const gchar* _tmp11_ = NULL;
			gint _tmp12_;
			_tmp11_ = afrodite_data_type_get_type_name (t);
			_tmp12_ = strlen (_tmp11_);
			if (_tmp12_ == 1) {
				const gchar* _tmp13_ = NULL;
				gchar* _tmp14_ = NULL;
				gchar* _tmp15_;
				const gchar* _tmp16_ = NULL;
				_tmp13_ = afrodite_data_type_get_type_name (t);
				_tmp14_ = g_utf8_strup (_tmp13_, (gssize) (-1));
				_tmp15_ = _tmp14_;
				_tmp16_ = afrodite_data_type_get_type_name (t);
				_tmp10_ = g_strcmp0 (_tmp15_, _tmp16_) == 0;
				_g_free0 (_tmp15_);
			} else {
				_tmp10_ = FALSE;
			}
			if (_tmp10_) {
				gchar* _tmp17_ = NULL;
				ValaTypeParameter* _tmp18_ = NULL;
				const gchar* _tmp22_ = NULL;
				const gchar* _tmp23_ = NULL;
				gchar* _tmp24_ = NULL;
				gchar* _tmp25_;
				_tmp18_ = vala_data_type_get_type_parameter (type);
				if (_tmp18_ != NULL) {
					ValaTypeParameter* _tmp19_ = NULL;
					gchar* _tmp20_ = NULL;
					_tmp19_ = vala_data_type_get_type_parameter (type);
					_tmp20_ = vala_code_node_to_string ((ValaCodeNode*) _tmp19_);
					_g_free0 (_tmp17_);
					_tmp17_ = _tmp20_;
				} else {
					gchar* _tmp21_;
					_tmp21_ = g_strdup ("type parameter is null");
					_g_free0 (_tmp17_);
					_tmp17_ = _tmp21_;
				}
				_tmp22_ = vala_code_node_get_type_name ((ValaCodeNode*) type);
				_tmp23_ = afrodite_data_type_get_type_name (t);
				_tmp24_ = afrodite_symbol_get_fully_qualified_name (self->priv->_current);
				_tmp25_ = _tmp24_;
				afrodite_utils_trace ("astmerger.vala:1097: You should fix this hack: %s - %s: '%s' to '%s'", _tmp22_, _tmp17_, _tmp23_, _tmp25_);
				_g_free0 (_tmp25_);
				_g_free0 (_tmp17_);
			} else {
				afrodite_symbol_add_base_type (self->priv->_current, t);
				afrodite_ast_merger_visit_type_for_generics (self, type, t);
			}
		}
	}
	_afrodite_data_type_unref0 (t);
}


static void afrodite_ast_merger_visit_type_for_generics (AfroditeAstMerger* self, ValaDataType* t, AfroditeDataType* ct) {
	AfroditeDataType* _tmp0_;
	AfroditeDataType* prev_type;
	AfroditeDataType* _tmp1_;
	AfroditeDataType* _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (t != NULL);
	g_return_if_fail (ct != NULL);
	_tmp0_ = _afrodite_data_type_ref0 (self->priv->_current_type);
	prev_type = _tmp0_;
	_tmp1_ = _afrodite_data_type_ref0 (ct);
	_afrodite_data_type_unref0 (self->priv->_current_type);
	self->priv->_current_type = _tmp1_;
	{
		ValaList* _tmp2_ = NULL;
		ValaList* _type_list;
		gint _tmp3_;
		gint _type_size;
		gint _type_index;
		_tmp2_ = vala_data_type_get_type_arguments (t);
		_type_list = _tmp2_;
		_tmp3_ = vala_collection_get_size ((ValaCollection*) _type_list);
		_type_size = _tmp3_;
		_type_index = -1;
		while (TRUE) {
			gpointer _tmp4_ = NULL;
			ValaDataType* type;
			_type_index = _type_index + 1;
			if (!(_type_index < _type_size)) {
				break;
			}
			_tmp4_ = vala_list_get (_type_list, _type_index);
			type = (ValaDataType*) _tmp4_;
			vala_code_node_accept ((ValaCodeNode*) type, (ValaCodeVisitor*) self);
			_vala_code_node_unref0 (type);
		}
		_vala_iterable_unref0 (_type_list);
	}
	_tmp5_ = _afrodite_data_type_ref0 (prev_type);
	_afrodite_data_type_unref0 (self->priv->_current_type);
	self->priv->_current_type = _tmp5_;
	_afrodite_data_type_unref0 (prev_type);
}


static AfroditeSymbol* afrodite_ast_merger_visit_scoped_codenode (AfroditeAstMerger* self, const gchar* name, ValaCodeNode* node, ValaBlock* body) {
	AfroditeSymbol* result = NULL;
	gchar* _tmp0_;
	gchar* prev_vala_fqn;
	AfroditeSymbol* _tmp1_;
	AfroditeSymbol* prev;
	AfroditeSourceReference* prev_sr;
	gchar* _tmp2_ = NULL;
	gchar* _tmp3_;
	gint last_line;
	gboolean _tmp4_ = FALSE;
	gchar* _tmp8_ = NULL;
	gchar* _tmp9_;
	AfroditeSourceReference* _tmp10_ = NULL;
	AfroditeSymbol* _tmp11_ = NULL;
	AfroditeSymbol* _tmp12_;
	AfroditeSymbol* s;
	AfroditeSymbol* _tmp13_;
	AfroditeSymbol* _tmp14_;
	gchar* _tmp15_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = g_strdup (self->priv->_vala_symbol_fqn);
	prev_vala_fqn = _tmp0_;
	_tmp1_ = _g_object_ref0 (self->priv->_current);
	prev = _tmp1_;
	prev_sr = self->priv->_current_sr;
	_tmp2_ = g_strdup_printf ("!%s", name);
	_tmp3_ = _tmp2_;
	afrodite_ast_merger_set_fqn (self, _tmp3_);
	_g_free0 (_tmp3_);
	last_line = 0;
	if (body != NULL) {
		ValaSourceReference* _tmp5_ = NULL;
		_tmp5_ = vala_code_node_get_source_reference ((ValaCodeNode*) body);
		_tmp4_ = _tmp5_ != NULL;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		ValaSourceReference* _tmp6_ = NULL;
		gint _tmp7_;
		_tmp6_ = vala_code_node_get_source_reference ((ValaCodeNode*) body);
		_tmp7_ = vala_source_reference_get_last_line (_tmp6_);
		last_line = _tmp7_;
	}
	_tmp8_ = g_strdup_printf ("!%s", name);
	_tmp9_ = _tmp8_;
	_tmp11_ = afrodite_ast_merger_add_codenode (self, self->priv->_current, _tmp9_, AFRODITE_MEMBER_TYPE_SCOPED_CODE_NODE, node, &_tmp10_, last_line, 0);
	self->priv->_current_sr = _tmp10_;
	_tmp12_ = _tmp11_;
	_g_free0 (_tmp9_);
	s = _tmp12_;
	_tmp13_ = _g_object_ref0 (s);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp13_;
	if (body == NULL) {
		vala_code_node_accept_children (node, (ValaCodeVisitor*) self);
	} else {
		vala_code_node_accept_children ((ValaCodeNode*) body, (ValaCodeVisitor*) self);
	}
	_tmp14_ = _g_object_ref0 (prev);
	_g_object_unref0 (self->priv->_current);
	self->priv->_current = _tmp14_;
	self->priv->_current_sr = prev_sr;
	_tmp15_ = g_strdup (prev_vala_fqn);
	_g_free0 (self->priv->_vala_symbol_fqn);
	self->priv->_vala_symbol_fqn = _tmp15_;
	result = s;
	_g_object_unref0 (prev);
	_g_free0 (prev_vala_fqn);
	return result;
}


static gchar* afrodite_ast_merger_get_datatype_typename (AfroditeAstMerger* self, ValaDataType* type) {
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	if (VALA_IS_UNRESOLVED_TYPE (type)) {
		ValaUnresolvedSymbol* _tmp0_ = NULL;
		gchar* _tmp1_ = NULL;
		_tmp0_ = vala_unresolved_type_get_unresolved_symbol (VALA_UNRESOLVED_TYPE (type));
		_tmp1_ = vala_code_node_to_string ((ValaCodeNode*) _tmp0_);
		result = _tmp1_;
		return result;
	} else {
		if (type == NULL) {
			gchar* _tmp2_ = NULL;
			_tmp2_ = g_strdup_printf ("DataType is null: %s", self->priv->_vala_symbol_fqn);
			result = _tmp2_;
			return result;
		} else {
			gchar* _tmp3_ = NULL;
			_tmp3_ = vala_code_node_to_string ((ValaCodeNode*) type);
			result = _tmp3_;
			return result;
		}
	}
}


static void afrodite_ast_merger_class_init (AfroditeAstMergerClass * klass) {
	afrodite_ast_merger_parent_class = g_type_class_peek_parent (klass);
	VALA_CODE_VISITOR_CLASS (klass)->finalize = afrodite_ast_merger_finalize;
	g_type_class_add_private (klass, sizeof (AfroditeAstMergerPrivate));
	VALA_CODE_VISITOR_CLASS (klass)->visit_class = afrodite_ast_merger_real_visit_class;
	VALA_CODE_VISITOR_CLASS (klass)->visit_struct = afrodite_ast_merger_real_visit_struct;
	VALA_CODE_VISITOR_CLASS (klass)->visit_interface = afrodite_ast_merger_real_visit_interface;
	VALA_CODE_VISITOR_CLASS (klass)->visit_method = afrodite_ast_merger_real_visit_method;
	VALA_CODE_VISITOR_CLASS (klass)->visit_creation_method = afrodite_ast_merger_real_visit_creation_method;
	VALA_CODE_VISITOR_CLASS (klass)->visit_constructor = afrodite_ast_merger_real_visit_constructor;
	VALA_CODE_VISITOR_CLASS (klass)->visit_destructor = afrodite_ast_merger_real_visit_destructor;
	VALA_CODE_VISITOR_CLASS (klass)->visit_enum_value = afrodite_ast_merger_real_visit_enum_value;
	VALA_CODE_VISITOR_CLASS (klass)->visit_enum = afrodite_ast_merger_real_visit_enum;
	VALA_CODE_VISITOR_CLASS (klass)->visit_delegate = afrodite_ast_merger_real_visit_delegate;
	VALA_CODE_VISITOR_CLASS (klass)->visit_signal = afrodite_ast_merger_real_visit_signal;
	VALA_CODE_VISITOR_CLASS (klass)->visit_field = afrodite_ast_merger_real_visit_field;
	VALA_CODE_VISITOR_CLASS (klass)->visit_constant = afrodite_ast_merger_real_visit_constant;
	VALA_CODE_VISITOR_CLASS (klass)->visit_property = afrodite_ast_merger_real_visit_property;
	VALA_CODE_VISITOR_CLASS (klass)->visit_property_accessor = afrodite_ast_merger_real_visit_property_accessor;
	VALA_CODE_VISITOR_CLASS (klass)->visit_error_domain = afrodite_ast_merger_real_visit_error_domain;
	VALA_CODE_VISITOR_CLASS (klass)->visit_error_code = afrodite_ast_merger_real_visit_error_code;
	VALA_CODE_VISITOR_CLASS (klass)->visit_formal_parameter = afrodite_ast_merger_real_visit_formal_parameter;
	VALA_CODE_VISITOR_CLASS (klass)->visit_block = afrodite_ast_merger_real_visit_block;
	VALA_CODE_VISITOR_CLASS (klass)->visit_local_variable = afrodite_ast_merger_real_visit_local_variable;
	VALA_CODE_VISITOR_CLASS (klass)->visit_lambda_expression = afrodite_ast_merger_real_visit_lambda_expression;
	VALA_CODE_VISITOR_CLASS (klass)->visit_member_access = afrodite_ast_merger_real_visit_member_access;
	VALA_CODE_VISITOR_CLASS (klass)->visit_method_call = afrodite_ast_merger_real_visit_method_call;
	VALA_CODE_VISITOR_CLASS (klass)->visit_object_creation_expression = afrodite_ast_merger_real_visit_object_creation_expression;
	VALA_CODE_VISITOR_CLASS (klass)->visit_initializer_list = afrodite_ast_merger_real_visit_initializer_list;
	VALA_CODE_VISITOR_CLASS (klass)->visit_binary_expression = afrodite_ast_merger_real_visit_binary_expression;
	VALA_CODE_VISITOR_CLASS (klass)->visit_boolean_literal = afrodite_ast_merger_real_visit_boolean_literal;
	VALA_CODE_VISITOR_CLASS (klass)->visit_character_literal = afrodite_ast_merger_real_visit_character_literal;
	VALA_CODE_VISITOR_CLASS (klass)->visit_integer_literal = afrodite_ast_merger_real_visit_integer_literal;
	VALA_CODE_VISITOR_CLASS (klass)->visit_real_literal = afrodite_ast_merger_real_visit_real_literal;
	VALA_CODE_VISITOR_CLASS (klass)->visit_string_literal = afrodite_ast_merger_real_visit_string_literal;
	VALA_CODE_VISITOR_CLASS (klass)->visit_declaration_statement = afrodite_ast_merger_real_visit_declaration_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_foreach_statement = afrodite_ast_merger_real_visit_foreach_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_while_statement = afrodite_ast_merger_real_visit_while_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_do_statement = afrodite_ast_merger_real_visit_do_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_for_statement = afrodite_ast_merger_real_visit_for_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_try_statement = afrodite_ast_merger_real_visit_try_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_catch_clause = afrodite_ast_merger_real_visit_catch_clause;
	VALA_CODE_VISITOR_CLASS (klass)->visit_if_statement = afrodite_ast_merger_real_visit_if_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_switch_statement = afrodite_ast_merger_real_visit_switch_statement;
	VALA_CODE_VISITOR_CLASS (klass)->visit_switch_section = afrodite_ast_merger_real_visit_switch_section;
	VALA_CODE_VISITOR_CLASS (klass)->visit_type_parameter = afrodite_ast_merger_real_visit_type_parameter;
	VALA_CODE_VISITOR_CLASS (klass)->visit_data_type = afrodite_ast_merger_real_visit_data_type;
}


static void afrodite_ast_merger_instance_init (AfroditeAstMerger * self) {
	self->priv = AFRODITE_AST_MERGER_GET_PRIVATE (self);
	self->priv->_current = NULL;
	self->priv->_current_type = NULL;
	self->priv->_current_sr = NULL;
	self->priv->_source_file = NULL;
	self->priv->_inferred_type = NULL;
	self->priv->_vala_symbol_fqn = NULL;
	self->priv->_merge_glib = TRUE;
	self->priv->_merge_edited_file = FALSE;
	self->priv->_codedom = NULL;
}


static void afrodite_ast_merger_finalize (ValaCodeVisitor* obj) {
	AfroditeAstMerger * self;
	self = AFRODITE_AST_MERGER (obj);
	_g_object_unref0 (self->priv->_current);
	_afrodite_data_type_unref0 (self->priv->_current_type);
	_afrodite_source_file_unref0 (self->priv->_source_file);
	_afrodite_data_type_unref0 (self->priv->_inferred_type);
	_g_free0 (self->priv->_vala_symbol_fqn);
	_afrodite_code_dom_unref0 (self->priv->_codedom);
	VALA_CODE_VISITOR_CLASS (afrodite_ast_merger_parent_class)->finalize (obj);
}


GType afrodite_ast_merger_get_type (void) {
	static volatile gsize afrodite_ast_merger_type_id__volatile = 0;
	if (g_once_init_enter (&afrodite_ast_merger_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (AfroditeAstMergerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) afrodite_ast_merger_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (AfroditeAstMerger), 0, (GInstanceInitFunc) afrodite_ast_merger_instance_init, NULL };
		GType afrodite_ast_merger_type_id;
		afrodite_ast_merger_type_id = g_type_register_static (VALA_TYPE_CODE_VISITOR, "AfroditeAstMerger", &g_define_type_info, 0);
		g_once_init_leave (&afrodite_ast_merger_type_id__volatile, afrodite_ast_merger_type_id);
	}
	return afrodite_ast_merger_type_id__volatile;
}


static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	if ((array != NULL) && (destroy_func != NULL)) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}


static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}


static gint _vala_array_length (gpointer array) {
	int length;
	length = 0;
	if (array) {
		while (((gpointer*) array)[length]) {
			length++;
		}
	}
	return length;
}



