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

/* symbol.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 <valagee.h>
#include <stdlib.h>
#include <string.h>
#include <glib/gi18n-lib.h>


#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;
typedef struct _AfroditeSymbolPrivate AfroditeSymbolPrivate;

#define AFRODITE_TYPE_MEMBER_BINDING (afrodite_member_binding_get_type ())

#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_MEMBER_TYPE (afrodite_member_type_get_type ())

#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_SYMBOL_ACCESSIBILITY (afrodite_symbol_accessibility_get_type ())

#define AFRODITE_TYPE_VOID_TYPE (afrodite_void_type_get_type ())
#define AFRODITE_VOID_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_VOID_TYPE, AfroditeVoidType))
#define AFRODITE_VOID_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_VOID_TYPE, AfroditeVoidTypeClass))
#define AFRODITE_IS_VOID_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_VOID_TYPE))
#define AFRODITE_IS_VOID_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_VOID_TYPE))
#define AFRODITE_VOID_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_VOID_TYPE, AfroditeVoidTypeClass))

typedef struct _AfroditeVoidType AfroditeVoidType;
typedef struct _AfroditeVoidTypeClass AfroditeVoidTypeClass;

#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 _g_free0(var) (var = (g_free (var), NULL))
#define _afrodite_data_type_unref0(var) ((var == NULL) ? NULL : (var = (afrodite_data_type_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))

#define AFRODITE_UTILS_SYMBOLS_TYPE_PREDEFINED_SYMBOLS (afrodite_utils_symbols_predefined_symbols_get_type ())
#define AFRODITE_UTILS_SYMBOLS_PREDEFINED_SYMBOLS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_UTILS_SYMBOLS_TYPE_PREDEFINED_SYMBOLS, AfroditeUtilsSymbolsPredefinedSymbols))
#define AFRODITE_UTILS_SYMBOLS_PREDEFINED_SYMBOLS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_UTILS_SYMBOLS_TYPE_PREDEFINED_SYMBOLS, AfroditeUtilsSymbolsPredefinedSymbolsClass))
#define AFRODITE_UTILS_SYMBOLS_IS_PREDEFINED_SYMBOLS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_UTILS_SYMBOLS_TYPE_PREDEFINED_SYMBOLS))
#define AFRODITE_UTILS_SYMBOLS_IS_PREDEFINED_SYMBOLS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_UTILS_SYMBOLS_TYPE_PREDEFINED_SYMBOLS))
#define AFRODITE_UTILS_SYMBOLS_PREDEFINED_SYMBOLS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_UTILS_SYMBOLS_TYPE_PREDEFINED_SYMBOLS, AfroditeUtilsSymbolsPredefinedSymbolsClass))

typedef struct _AfroditeUtilsSymbolsPredefinedSymbols AfroditeUtilsSymbolsPredefinedSymbols;
typedef struct _AfroditeUtilsSymbolsPredefinedSymbolsClass AfroditeUtilsSymbolsPredefinedSymbolsClass;
typedef struct _AfroditeUtilsSymbolsPredefinedSymbolsPrivate AfroditeUtilsSymbolsPredefinedSymbolsPrivate;
#define _afrodite_utils_symbols_predefined_symbols_unref0(var) ((var == NULL) ? NULL : (var = (afrodite_utils_symbols_predefined_symbols_unref (var), NULL)))

#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_source_reference_unref0(var) ((var == NULL) ? NULL : (var = (afrodite_source_reference_unref (var), NULL)))
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))

#define AFRODITE_TYPE_COMPARE_MODE (afrodite_compare_mode_get_type ())

#define AFRODITE_TYPE_QUERY_OPTIONS (afrodite_query_options_get_type ())
#define AFRODITE_QUERY_OPTIONS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AFRODITE_TYPE_QUERY_OPTIONS, AfroditeQueryOptions))
#define AFRODITE_QUERY_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AFRODITE_TYPE_QUERY_OPTIONS, AfroditeQueryOptionsClass))
#define AFRODITE_IS_QUERY_OPTIONS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AFRODITE_TYPE_QUERY_OPTIONS))
#define AFRODITE_IS_QUERY_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AFRODITE_TYPE_QUERY_OPTIONS))
#define AFRODITE_QUERY_OPTIONS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AFRODITE_TYPE_QUERY_OPTIONS, AfroditeQueryOptionsClass))

typedef struct _AfroditeQueryOptions AfroditeQueryOptions;
typedef struct _AfroditeQueryOptionsClass AfroditeQueryOptionsClass;
typedef struct _AfroditeQueryOptionsPrivate AfroditeQueryOptionsPrivate;
#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))

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_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;

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;

struct _AfroditeSymbolPrivate {
	gchar* _des;
	gchar* _display_name;
	AfroditeDataType* _symbol_type;
	ValaList* _children;
	ValaList* _specialized_symbols;
	AfroditeSymbol* _parent;
	AfroditeSymbol* _generic_parent;
	gchar* _name;
	AfroditeDataType* _return_type;
	AfroditeMemberType _member_type;
	ValaList* _source_references;
	ValaList* _parameters;
	ValaList* _local_variables;
	ValaList* _base_types;
	ValaList* _generic_type_arguments;
	gboolean _is_generic_type_argument;
	AfroditeSymbolAccessibility _access;
};

struct _AfroditeUtilsSymbolsPredefinedSymbols {
	GTypeInstance parent_instance;
	volatile int ref_count;
	AfroditeUtilsSymbolsPredefinedSymbolsPrivate * priv;
	AfroditeDataType* signal_type;
};

struct _AfroditeUtilsSymbolsPredefinedSymbolsClass {
	GTypeClass parent_class;
	void (*finalize) (AfroditeUtilsSymbolsPredefinedSymbols *self);
};

typedef enum  {
	AFRODITE_COMPARE_MODE_EXACT,
	AFRODITE_COMPARE_MODE_START_WITH
} AfroditeCompareMode;

struct _AfroditeQueryOptions {
	GTypeInstance parent_instance;
	volatile int ref_count;
	AfroditeQueryOptionsPrivate * priv;
	gboolean all_symbols;
	gboolean only_creation_methods;
	gboolean only_static_factories;
	gboolean only_error_domains;
	gboolean exclude_creation_methods;
	gboolean exclude_code_node;
	AfroditeSymbolAccessibility access;
	gboolean auto_member_binding_mode;
	AfroditeMemberBinding binding;
	AfroditeCompareMode compare_mode;
};

struct _AfroditeQueryOptionsClass {
	GTypeClass parent_class;
	void (*finalize) (AfroditeQueryOptions *self);
};


static gpointer afrodite_symbol_parent_class = NULL;
extern AfroditeVoidType* afrodite_symbol_VOID;
AfroditeVoidType* afrodite_symbol_VOID = NULL;
extern AfroditeEllipsisType* afrodite_symbol_ELLIPSIS;
AfroditeEllipsisType* afrodite_symbol_ELLIPSIS = NULL;

GType afrodite_symbol_get_type (void) G_GNUC_CONST;
GType afrodite_member_binding_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;
GType afrodite_member_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;
GType afrodite_symbol_accessibility_get_type (void) G_GNUC_CONST;
#define AFRODITE_SYMBOL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), AFRODITE_TYPE_SYMBOL, AfroditeSymbolPrivate))
enum  {
	AFRODITE_SYMBOL_DUMMY_PROPERTY,
	AFRODITE_SYMBOL_PARENT,
	AFRODITE_SYMBOL_CHILDREN,
	AFRODITE_SYMBOL_RESOLVED_TARGETS,
	AFRODITE_SYMBOL_GENERIC_PARENT,
	AFRODITE_SYMBOL_NAME,
	AFRODITE_SYMBOL_FULLY_QUALIFIED_NAME,
	AFRODITE_SYMBOL_RETURN_TYPE,
	AFRODITE_SYMBOL_MEMBER_TYPE,
	AFRODITE_SYMBOL_SOURCE_REFERENCES,
	AFRODITE_SYMBOL_PARAMETERS,
	AFRODITE_SYMBOL_LOCAL_VARIABLES,
	AFRODITE_SYMBOL_BASE_TYPES,
	AFRODITE_SYMBOL_GENERIC_TYPE_ARGUMENTS,
	AFRODITE_SYMBOL_IS_GENERIC_TYPE_ARGUMENT,
	AFRODITE_SYMBOL_ACCESS,
	AFRODITE_SYMBOL_IS_ROOT,
	AFRODITE_SYMBOL_SYMBOL_TYPE,
	AFRODITE_SYMBOL_STATIC_CHILD_COUNT,
	AFRODITE_SYMBOL_CREATION_METHOD_CHILD_COUNT,
	AFRODITE_SYMBOL_HAS_CHILDREN,
	AFRODITE_SYMBOL_HAS_RESOLVED_TARGETS,
	AFRODITE_SYMBOL_HAS_PARAMETERS,
	AFRODITE_SYMBOL_HAS_GENERIC_TYPE_ARGUMENTS,
	AFRODITE_SYMBOL_HAS_LOCAL_VARIABLES,
	AFRODITE_SYMBOL_HAS_BASE_TYPES,
	AFRODITE_SYMBOL_HAS_SOURCE_REFERENCES,
	AFRODITE_SYMBOL_HAS_STATIC_CHILD,
	AFRODITE_SYMBOL_HAS_CREATION_METHOD_CHILD,
	AFRODITE_SYMBOL_IS_STATIC,
	AFRODITE_SYMBOL_DESCRIPTION,
	AFRODITE_SYMBOL_MARKUP_DESCRIPTION,
	AFRODITE_SYMBOL_INFO,
	AFRODITE_SYMBOL_DISPLAY_NAME,
	AFRODITE_SYMBOL_ACCESS_STRING,
	AFRODITE_SYMBOL_BINDING_STRING,
	AFRODITE_SYMBOL_HAS_SPECIALIZED_SYMBOLS
};
void afrodite_symbol_destroy_thyself (AfroditeSymbol* self);
GType afrodite_void_type_get_type (void) G_GNUC_CONST;
AfroditeVoidType* afrodite_void_type_new (void);
AfroditeVoidType* afrodite_void_type_construct (GType object_type);
GType afrodite_ellipsis_type_get_type (void) G_GNUC_CONST;
AfroditeEllipsisType* afrodite_ellipsis_type_new (void);
AfroditeEllipsisType* afrodite_ellipsis_type_construct (GType object_type);
AfroditeSymbol* afrodite_symbol_new (const gchar* symbol_name, AfroditeMemberType type);
AfroditeSymbol* afrodite_symbol_construct (GType object_type, const gchar* symbol_name, AfroditeMemberType type);
static void afrodite_symbol_set_name (AfroditeSymbol* self, const gchar* value);
void afrodite_symbol_set_member_type (AfroditeSymbol* self, AfroditeMemberType value);
AfroditeMemberType afrodite_symbol_get_member_type (AfroditeSymbol* self);
gpointer afrodite_utils_symbols_predefined_symbols_ref (gpointer instance);
void afrodite_utils_symbols_predefined_symbols_unref (gpointer instance);
GParamSpec* afrodite_utils_symbols_param_spec_predefined_symbols (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void afrodite_utils_symbols_value_set_predefined_symbols (GValue* value, gpointer v_object);
void afrodite_utils_symbols_value_take_predefined_symbols (GValue* value, gpointer v_object);
gpointer afrodite_utils_symbols_value_get_predefined_symbols (const GValue* value);
GType afrodite_utils_symbols_predefined_symbols_get_type (void) G_GNUC_CONST;
AfroditeUtilsSymbolsPredefinedSymbols* afrodite_utils_symbols_get_predefined (void);
gboolean afrodite_symbol_get_has_source_references (AfroditeSymbol* self);
ValaList* afrodite_symbol_get_source_references (AfroditeSymbol* self);
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;
AfroditeSourceFile* afrodite_source_reference_get_file (AfroditeSourceReference* self);
gboolean afrodite_source_file_get_has_symbols (AfroditeSourceFile* self);
gchar* afrodite_symbol_get_fully_qualified_name (AfroditeSymbol* self);
void afrodite_symbol_remove_source_reference (AfroditeSymbol* self, AfroditeSourceReference* reference);
gboolean afrodite_symbol_get_has_resolved_targets (AfroditeSymbol* self);
ValaList* afrodite_symbol_get_resolved_targets (AfroditeSymbol* self);
static void afrodite_symbol_unresolve_symbols_of_target (AfroditeSymbol* self, AfroditeSymbol* target);
void afrodite_symbol_remove_resolved_target (AfroditeSymbol* self, AfroditeSymbol* resolve_target);
gboolean afrodite_symbol_get_has_generic_type_arguments (AfroditeSymbol* self);
ValaList* afrodite_symbol_get_generic_type_arguments (AfroditeSymbol* self);
void afrodite_symbol_set_parent (AfroditeSymbol* self, AfroditeSymbol* value);
static void afrodite_symbol_remove_from_targets (AfroditeSymbol* self);
AfroditeSymbol* afrodite_symbol_get_generic_parent (AfroditeSymbol* self);
gboolean afrodite_symbol_get_has_specialized_symbols (AfroditeSymbol* self);
void afrodite_symbol_remove_specialized_symbol (AfroditeSymbol* self, AfroditeSymbol* item);
AfroditeSymbol* afrodite_symbol_get_parent (AfroditeSymbol* self);
gboolean afrodite_symbol_get_is_generic_type_argument (AfroditeSymbol* self);
void afrodite_symbol_remove_generic_type_argument (AfroditeSymbol* self, AfroditeSymbol* sym);
gboolean afrodite_symbol_get_has_children (AfroditeSymbol* self);
void afrodite_symbol_remove_child (AfroditeSymbol* self, AfroditeSymbol* child);
gboolean afrodite_data_type_get_unresolved (AfroditeDataType* self);
void afrodite_data_type_set_symbol (AfroditeDataType* self, AfroditeSymbol* value);
gboolean afrodite_symbol_get_has_parameters (AfroditeSymbol* self);
ValaList* afrodite_symbol_get_parameters (AfroditeSymbol* self);
gboolean afrodite_symbol_get_has_local_variables (AfroditeSymbol* self);
ValaList* afrodite_symbol_get_local_variables (AfroditeSymbol* self);
gboolean afrodite_symbol_get_has_base_types (AfroditeSymbol* self);
ValaList* afrodite_symbol_get_base_types (AfroditeSymbol* self);
static void afrodite_symbol_unresolve_datatype_of_target (AfroditeSymbol* self, ValaList* items, AfroditeSymbol* target);
gboolean afrodite_data_type_get_has_generic_types (AfroditeDataType* self);
ValaList* afrodite_data_type_get_generic_types (AfroditeDataType* self);
AfroditeSymbol* afrodite_data_type_get_symbol (AfroditeDataType* self);
void afrodite_symbol_add_child (AfroditeSymbol* self, AfroditeSymbol* child);
gboolean afrodite_symbol_get_is_static (AfroditeSymbol* self);
gboolean afrodite_symbol_get_has_static_child (AfroditeSymbol* self);
gint afrodite_symbol_get_static_child_count (AfroditeSymbol* self);
void afrodite_symbol_set_static_child_count (AfroditeSymbol* self, gint value);
gboolean afrodite_symbol_get_has_creation_method_child (AfroditeSymbol* self);
gint afrodite_symbol_get_creation_method_child_count (AfroditeSymbol* self);
void afrodite_symbol_set_creation_method_child_count (AfroditeSymbol* self, gint value);
ValaList* afrodite_symbol_get_children (AfroditeSymbol* self);
AfroditeSymbol* afrodite_symbol_lookup_child (AfroditeSymbol* self, const gchar* name);
const gchar* afrodite_symbol_get_name (AfroditeSymbol* self);
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 gboolean afrodite_symbol_compare_symbol_names (const gchar* name1, const gchar* name2, AfroditeCompareMode mode);
const gchar* afrodite_data_type_get_name (AfroditeDataType* self);
AfroditeDataType* afrodite_symbol_lookup_datatype_for_symbol_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name, AfroditeSymbolAccessibility access);
AfroditeSymbolAccessibility afrodite_symbol_get_access (AfroditeSymbol* self);
AfroditeDataType* afrodite_symbol_get_return_type (AfroditeSymbol* self);
AfroditeDataType* afrodite_symbol_lookup_datatype_for_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name, AfroditeSymbolAccessibility access);
AfroditeDataType* afrodite_symbol_scope_lookup_datatype_for_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name);
gboolean afrodite_source_file_get_has_using_directives (AfroditeSourceFile* self);
ValaList* afrodite_source_file_get_using_directives (AfroditeSourceFile* self);
void afrodite_symbol_add_resolved_target (AfroditeSymbol* self, AfroditeSymbol* resolve_target);
void afrodite_symbol_add_parameter (AfroditeSymbol* self, AfroditeDataType* par);
void afrodite_symbol_set_parameters (AfroditeSymbol* self, ValaList* value);
void afrodite_symbol_remove_parameter (AfroditeSymbol* self, AfroditeDataType* par);
void afrodite_symbol_add_generic_type_argument (AfroditeSymbol* self, AfroditeSymbol* sym);
void afrodite_symbol_set_generic_type_arguments (AfroditeSymbol* self, ValaList* value);
void afrodite_symbol_set_is_generic_type_argument (AfroditeSymbol* self, gboolean value);
void afrodite_symbol_add_local_variable (AfroditeSymbol* self, AfroditeDataType* variable);
void afrodite_symbol_set_local_variables (AfroditeSymbol* self, ValaList* value);
void afrodite_symbol_remove_local_variable (AfroditeSymbol* self, AfroditeDataType* variable);
AfroditeDataType* afrodite_symbol_lookup_local_variable (AfroditeSymbol* self, const gchar* name);
void afrodite_symbol_add_base_type (AfroditeSymbol* self, AfroditeDataType* type);
void afrodite_symbol_set_base_types (AfroditeSymbol* self, ValaList* value);
void afrodite_symbol_remove_base_type (AfroditeSymbol* self, AfroditeDataType* type);
void afrodite_symbol_add_source_reference (AfroditeSymbol* self, AfroditeSourceReference* reference);
void afrodite_symbol_set_source_references (AfroditeSymbol* self, ValaList* value);
void afrodite_source_file_remove_symbol_from_codedom (AfroditeSourceFile* self, AfroditeSymbol* symbol);
ValaList* afrodite_source_file_get_symbols (AfroditeSourceFile* self);
AfroditeSourceReference* afrodite_symbol_lookup_source_reference_filename (AfroditeSymbol* self, const gchar* filename);
const gchar* afrodite_source_file_get_filename (AfroditeSourceFile* self);
AfroditeSourceReference* afrodite_symbol_lookup_source_reference_sourcefile (AfroditeSymbol* self, AfroditeSourceFile* source);
gpointer afrodite_query_options_ref (gpointer instance);
void afrodite_query_options_unref (gpointer instance);
GParamSpec* afrodite_param_spec_query_options (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void afrodite_value_set_query_options (GValue* value, gpointer v_object);
void afrodite_value_take_query_options (GValue* value, gpointer v_object);
gpointer afrodite_value_get_query_options (const GValue* value);
GType afrodite_query_options_get_type (void) G_GNUC_CONST;
gboolean afrodite_symbol_check_options (AfroditeSymbol* self, AfroditeQueryOptions* options);
gchar* afrodite_symbol_build_info (AfroditeSymbol* self);
AfroditeSymbol* afrodite_symbol_get_default_constructor (AfroditeSymbol* self);
gchar* afrodite_symbol_get_description (AfroditeSymbol* self);
gchar* afrodite_data_type_get_description (AfroditeDataType* self);
gchar* afrodite_utils_symbols_get_symbol_type_description (AfroditeMemberType type);
const gchar* afrodite_symbol_get_display_name (AfroditeSymbol* self);
static gchar* afrodite_symbol_build_description (AfroditeSymbol* self, gboolean markup);
gchar* afrodite_symbol_get_access_string (AfroditeSymbol* self);
gchar* afrodite_symbol_get_binding_string (AfroditeSymbol* self);
AfroditeSymbol* afrodite_symbol_copy (AfroditeSymbol* self);
AfroditeDataType* afrodite_data_type_copy (AfroditeDataType* self);
void afrodite_symbol_set_return_type (AfroditeSymbol* self, AfroditeDataType* value);
void afrodite_symbol_set_access (AfroditeSymbol* self, AfroditeSymbolAccessibility value);
void afrodite_symbol_specialize_generic_symbol (AfroditeSymbol* self, ValaList* types);
static void afrodite_symbol_resolve_generic_type (AfroditeSymbol* self, AfroditeSymbol* symbol, const gchar* generic_type_name, AfroditeDataType* type);
const gchar* afrodite_data_type_get_type_name (AfroditeDataType* self);
void afrodite_symbol_add_specialized_symbol (AfroditeSymbol* self, AfroditeSymbol* item);
void afrodite_symbol_set_generic_parent (AfroditeSymbol* self, AfroditeSymbol* value);
AfroditeSymbol* afrodite_symbol_get_generic_type_argument (AfroditeSymbol* self, const gchar* name);
void afrodite_data_type_set_type_name (AfroditeDataType* self, const gchar* value);
void afrodite_data_type_set_name (AfroditeDataType* self, const gchar* value);
gboolean afrodite_symbol_get_is_root (AfroditeSymbol* self);
AfroditeDataType* afrodite_symbol_get_symbol_type (AfroditeSymbol* self);
gchar* afrodite_symbol_get_markup_description (AfroditeSymbol* self);
gchar* afrodite_symbol_get_info (AfroditeSymbol* self);
void afrodite_symbol_set_display_name (AfroditeSymbol* self, const gchar* value);
static void afrodite_symbol_finalize (GObject* obj);
static void _vala_afrodite_symbol_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
static void _vala_afrodite_symbol_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);


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


AfroditeSymbol* afrodite_symbol_construct (GType object_type, const gchar* symbol_name, AfroditeMemberType type) {
	AfroditeSymbol * self = NULL;
	self = (AfroditeSymbol*) g_object_new (object_type, NULL);
	afrodite_symbol_set_name (self, symbol_name);
	afrodite_symbol_set_member_type (self, type);
	if (self->priv->_member_type == AFRODITE_MEMBER_TYPE_SIGNAL) {
		AfroditeUtilsSymbolsPredefinedSymbols* _tmp0_ = NULL;
		AfroditeUtilsSymbolsPredefinedSymbols* _tmp1_;
		AfroditeDataType* _tmp2_;
		_tmp0_ = afrodite_utils_symbols_get_predefined ();
		_tmp1_ = _tmp0_;
		_tmp2_ = _afrodite_data_type_ref0 (_tmp1_->signal_type);
		_afrodite_data_type_unref0 (self->priv->_symbol_type);
		self->priv->_symbol_type = _tmp2_;
		_afrodite_utils_symbols_predefined_symbols_unref0 (_tmp1_);
	}
	return self;
}


AfroditeSymbol* afrodite_symbol_new (const gchar* symbol_name, AfroditeMemberType type) {
	return afrodite_symbol_construct (AFRODITE_TYPE_SYMBOL, symbol_name, type);
}


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


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


void afrodite_symbol_destroy_thyself (AfroditeSymbol* self) {
	gboolean _tmp10_;
	gboolean _tmp20_;
	ValaList* _tmp24_;
	ValaList* tmp;
	ValaList* _tmp25_;
	ValaList* tmp2;
	gboolean _tmp26_ = FALSE;
	AfroditeSymbol* _tmp28_ = NULL;
	g_return_if_fail (self != NULL);
	while (TRUE) {
		gboolean _tmp0_;
		gint _tmp1_;
		gint prev_size;
		gpointer _tmp2_ = NULL;
		AfroditeSourceReference* sr;
		AfroditeSourceFile* _tmp3_ = NULL;
		gboolean _tmp4_;
		gboolean _tmp8_;
		_tmp0_ = afrodite_symbol_get_has_source_references (self);
		if (!_tmp0_) {
			break;
		}
		_tmp1_ = vala_collection_get_size ((ValaCollection*) self->priv->_source_references);
		prev_size = _tmp1_;
		_tmp2_ = vala_list_get (self->priv->_source_references, 0);
		sr = (AfroditeSourceReference*) _tmp2_;
		_tmp3_ = afrodite_source_reference_get_file (sr);
		_tmp4_ = afrodite_source_file_get_has_symbols (_tmp3_);
		if (!_tmp4_) {
			gchar* _tmp5_ = NULL;
			gchar* _tmp6_;
			AfroditeSourceFile* _tmp7_ = NULL;
			_tmp5_ = afrodite_symbol_get_fully_qualified_name (self);
			_tmp6_ = _tmp5_;
			_tmp7_ = afrodite_source_reference_get_file (sr);
			g_critical ("symbol.vala:148: %s belong to source %p but it isn't listed in its sym" \
"bol table. Leak?", _tmp6_, _tmp7_);
			_g_free0 (_tmp6_);
		}
		afrodite_symbol_remove_source_reference (self, sr);
		_tmp8_ = afrodite_symbol_get_has_source_references (self);
		if (_tmp8_) {
			gint _tmp9_;
			_tmp9_ = vala_collection_get_size ((ValaCollection*) self->priv->_source_references);
			g_assert (_tmp9_ < prev_size);
		}
		_afrodite_source_reference_unref0 (sr);
	}
	_tmp10_ = afrodite_symbol_get_has_resolved_targets (self);
	if (_tmp10_) {
		{
			ValaList* _tmp11_ = NULL;
			ValaList* _tmp12_;
			ValaList* _symbol_list;
			gint _tmp13_;
			gint _symbol_size;
			gint _symbol_index;
			_tmp11_ = afrodite_symbol_get_resolved_targets (self);
			_tmp12_ = _vala_iterable_ref0 (_tmp11_);
			_symbol_list = _tmp12_;
			_tmp13_ = vala_collection_get_size ((ValaCollection*) _symbol_list);
			_symbol_size = _tmp13_;
			_symbol_index = -1;
			while (TRUE) {
				gpointer _tmp14_ = NULL;
				AfroditeSymbol* _tmp15_;
				AfroditeSymbol* symbol;
				_symbol_index = _symbol_index + 1;
				if (!(_symbol_index < _symbol_size)) {
					break;
				}
				_tmp14_ = vala_list_get (_symbol_list, _symbol_index);
				_tmp15_ = _g_object_ref0 ((AfroditeSymbol*) _tmp14_);
				symbol = _tmp15_;
				afrodite_symbol_unresolve_symbols_of_target (symbol, self);
				if (symbol->resolve_targets != NULL) {
					vala_collection_remove ((ValaCollection*) symbol->resolve_targets, self);
				}
				_g_object_unref0 (symbol);
			}
			_vala_iterable_unref0 (_symbol_list);
		}
	}
	while (TRUE) {
		gboolean _tmp16_ = FALSE;
		gpointer _tmp18_ = NULL;
		AfroditeSymbol* _tmp19_;
		AfroditeSymbol* symbol;
		if (self->resolve_targets != NULL) {
			gint _tmp17_;
			_tmp17_ = vala_collection_get_size ((ValaCollection*) self->resolve_targets);
			_tmp16_ = _tmp17_ > 0;
		} else {
			_tmp16_ = FALSE;
		}
		if (!_tmp16_) {
			break;
		}
		_tmp18_ = vala_list_get (self->resolve_targets, 0);
		_tmp19_ = _g_object_ref0 ((AfroditeSymbol*) _tmp18_);
		symbol = _tmp19_;
		afrodite_symbol_remove_resolved_target (symbol, self);
		_g_object_unref0 (symbol);
	}
	_tmp20_ = afrodite_symbol_get_has_generic_type_arguments (self);
	if (_tmp20_) {
		{
			ValaList* _tmp21_;
			ValaList* _symbol_list;
			gint _tmp22_;
			gint _symbol_size;
			gint _symbol_index;
			_tmp21_ = _vala_iterable_ref0 (self->priv->_generic_type_arguments);
			_symbol_list = _tmp21_;
			_tmp22_ = vala_collection_get_size ((ValaCollection*) _symbol_list);
			_symbol_size = _tmp22_;
			_symbol_index = -1;
			while (TRUE) {
				gpointer _tmp23_ = NULL;
				AfroditeSymbol* symbol;
				_symbol_index = _symbol_index + 1;
				if (!(_symbol_index < _symbol_size)) {
					break;
				}
				_tmp23_ = vala_list_get (_symbol_list, _symbol_index);
				symbol = (AfroditeSymbol*) _tmp23_;
				afrodite_symbol_unresolve_symbols_of_target (symbol, self);
				afrodite_symbol_set_parent (symbol, NULL);
				_g_object_unref0 (symbol);
			}
			_vala_iterable_unref0 (_symbol_list);
		}
	}
	afrodite_symbol_remove_from_targets (self);
	_tmp24_ = _vala_iterable_ref0 (self->priv->_children);
	tmp = _tmp24_;
	_vala_iterable_unref0 (self->priv->_children);
	self->priv->_children = NULL;
	_vala_iterable_unref0 (tmp);
	tmp = NULL;
	_tmp25_ = _vala_iterable_ref0 (self->priv->_specialized_symbols);
	tmp2 = _tmp25_;
	_vala_iterable_unref0 (self->priv->_specialized_symbols);
	self->priv->_specialized_symbols = NULL;
	_vala_iterable_unref0 (tmp2);
	tmp2 = NULL;
	if (self->priv->_generic_parent != NULL) {
		gboolean _tmp27_;
		_tmp27_ = afrodite_symbol_get_has_specialized_symbols (self->priv->_generic_parent);
		_tmp26_ = _tmp27_;
	} else {
		_tmp26_ = FALSE;
	}
	if (_tmp26_) {
		afrodite_symbol_remove_specialized_symbol (self->priv->_generic_parent, self);
	}
	_tmp28_ = afrodite_symbol_get_parent (self);
	if (_tmp28_ != NULL) {
		if (self->priv->_is_generic_type_argument) {
			AfroditeSymbol* _tmp29_ = NULL;
			gboolean _tmp30_;
			_tmp29_ = afrodite_symbol_get_parent (self);
			_tmp30_ = afrodite_symbol_get_has_generic_type_arguments (_tmp29_);
			if (_tmp30_) {
				AfroditeSymbol* _tmp31_ = NULL;
				_tmp31_ = afrodite_symbol_get_parent (self);
				afrodite_symbol_remove_generic_type_argument (_tmp31_, self);
			}
		} else {
			AfroditeSymbol* _tmp32_ = NULL;
			gboolean _tmp33_;
			_tmp32_ = afrodite_symbol_get_parent (self);
			_tmp33_ = afrodite_symbol_get_has_children (_tmp32_);
			if (_tmp33_) {
				AfroditeSymbol* _tmp34_ = NULL;
				_tmp34_ = afrodite_symbol_get_parent (self);
				afrodite_symbol_remove_child (_tmp34_, self);
			}
		}
	}
	_vala_iterable_unref0 (tmp2);
	_vala_iterable_unref0 (tmp);
}


static void afrodite_symbol_remove_from_targets (AfroditeSymbol* self) {
	gboolean _tmp0_ = FALSE;
	gboolean _tmp2_;
	gboolean _tmp7_;
	gboolean _tmp12_;
	gboolean _tmp17_ = FALSE;
	g_return_if_fail (self != NULL);
	if (self->priv->_return_type != NULL) {
		gboolean _tmp1_;
		_tmp1_ = afrodite_data_type_get_unresolved (self->priv->_return_type);
		_tmp0_ = !_tmp1_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		afrodite_data_type_set_symbol (self->priv->_return_type, NULL);
	}
	_tmp2_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp2_) {
		{
			ValaList* _tmp3_;
			ValaList* _item_list;
			gint _tmp4_;
			gint _item_size;
			gint _item_index;
			_tmp3_ = _vala_iterable_ref0 (self->priv->_parameters);
			_item_list = _tmp3_;
			_tmp4_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp4_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp5_ = NULL;
				AfroditeDataType* item;
				gboolean _tmp6_;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp5_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp5_;
				_tmp6_ = afrodite_data_type_get_unresolved (item);
				if (!_tmp6_) {
					afrodite_data_type_set_symbol (item, NULL);
				}
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp7_ = afrodite_symbol_get_has_local_variables (self);
	if (_tmp7_) {
		{
			ValaList* _tmp8_;
			ValaList* _item_list;
			gint _tmp9_;
			gint _item_size;
			gint _item_index;
			_tmp8_ = _vala_iterable_ref0 (self->priv->_local_variables);
			_item_list = _tmp8_;
			_tmp9_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp9_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp10_ = NULL;
				AfroditeDataType* item;
				gboolean _tmp11_;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp10_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp10_;
				_tmp11_ = afrodite_data_type_get_unresolved (item);
				if (!_tmp11_) {
					afrodite_data_type_set_symbol (item, NULL);
				}
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp12_ = afrodite_symbol_get_has_base_types (self);
	if (_tmp12_) {
		{
			ValaList* _tmp13_;
			ValaList* _item_list;
			gint _tmp14_;
			gint _item_size;
			gint _item_index;
			_tmp13_ = _vala_iterable_ref0 (self->priv->_base_types);
			_item_list = _tmp13_;
			_tmp14_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp14_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp15_ = NULL;
				AfroditeDataType* item;
				gboolean _tmp16_;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp15_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp15_;
				_tmp16_ = afrodite_data_type_get_unresolved (item);
				if (!_tmp16_) {
					afrodite_data_type_set_symbol (item, NULL);
				}
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	if (self->priv->_symbol_type != NULL) {
		gboolean _tmp18_;
		_tmp18_ = afrodite_data_type_get_unresolved (self->priv->_symbol_type);
		_tmp17_ = !_tmp18_;
	} else {
		_tmp17_ = FALSE;
	}
	if (_tmp17_) {
		afrodite_data_type_set_symbol (self->priv->_symbol_type, NULL);
	}
}


static void afrodite_symbol_unresolve_datatype_of_target (AfroditeSymbol* self, ValaList* items, AfroditeSymbol* target) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (items != NULL);
	g_return_if_fail (target != NULL);
	{
		ValaList* _tmp0_;
		ValaList* _item_list;
		gint _tmp1_;
		gint _item_size;
		gint _item_index;
		_tmp0_ = _vala_iterable_ref0 (items);
		_item_list = _tmp0_;
		_tmp1_ = vala_collection_get_size ((ValaCollection*) _item_list);
		_item_size = _tmp1_;
		_item_index = -1;
		while (TRUE) {
			gpointer _tmp2_ = NULL;
			AfroditeDataType* item;
			gboolean _tmp3_;
			AfroditeSymbol* _tmp9_ = NULL;
			_item_index = _item_index + 1;
			if (!(_item_index < _item_size)) {
				break;
			}
			_tmp2_ = vala_list_get (_item_list, _item_index);
			item = (AfroditeDataType*) _tmp2_;
			_tmp3_ = afrodite_data_type_get_has_generic_types (item);
			if (_tmp3_) {
				{
					ValaList* _tmp4_ = NULL;
					ValaList* _tmp5_;
					ValaList* _generic_item_list;
					gint _tmp6_;
					gint _generic_item_size;
					gint _generic_item_index;
					_tmp4_ = afrodite_data_type_get_generic_types (item);
					_tmp5_ = _vala_iterable_ref0 (_tmp4_);
					_generic_item_list = _tmp5_;
					_tmp6_ = vala_collection_get_size ((ValaCollection*) _generic_item_list);
					_generic_item_size = _tmp6_;
					_generic_item_index = -1;
					while (TRUE) {
						gpointer _tmp7_ = NULL;
						AfroditeDataType* generic_item;
						AfroditeSymbol* _tmp8_ = NULL;
						_generic_item_index = _generic_item_index + 1;
						if (!(_generic_item_index < _generic_item_size)) {
							break;
						}
						_tmp7_ = vala_list_get (_generic_item_list, _generic_item_index);
						generic_item = (AfroditeDataType*) _tmp7_;
						_tmp8_ = afrodite_data_type_get_symbol (generic_item);
						if (_tmp8_ == target) {
							afrodite_data_type_set_symbol (generic_item, NULL);
						}
						_afrodite_data_type_unref0 (generic_item);
					}
					_vala_iterable_unref0 (_generic_item_list);
				}
			}
			_tmp9_ = afrodite_data_type_get_symbol (item);
			if (_tmp9_ == target) {
				afrodite_data_type_set_symbol (item, NULL);
			}
			_afrodite_data_type_unref0 (item);
		}
		_vala_iterable_unref0 (_item_list);
	}
}


static void afrodite_symbol_unresolve_symbols_of_target (AfroditeSymbol* self, AfroditeSymbol* target) {
	gboolean _tmp1_;
	gboolean _tmp2_;
	gboolean _tmp3_;
	gboolean _tmp4_ = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (target != NULL);
	if (self->priv->_return_type != NULL) {
		AfroditeSymbol* _tmp0_ = NULL;
		_tmp0_ = afrodite_data_type_get_symbol (self->priv->_return_type);
		if (_tmp0_ == target) {
			afrodite_data_type_set_symbol (self->priv->_return_type, NULL);
		}
	}
	_tmp1_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp1_) {
		afrodite_symbol_unresolve_datatype_of_target (self, self->priv->_parameters, target);
	}
	_tmp2_ = afrodite_symbol_get_has_local_variables (self);
	if (_tmp2_) {
		afrodite_symbol_unresolve_datatype_of_target (self, self->priv->_local_variables, target);
	}
	_tmp3_ = afrodite_symbol_get_has_base_types (self);
	if (_tmp3_) {
		afrodite_symbol_unresolve_datatype_of_target (self, self->priv->_base_types, target);
	}
	if (self->priv->_symbol_type != NULL) {
		AfroditeSymbol* _tmp5_ = NULL;
		_tmp5_ = afrodite_data_type_get_symbol (self->priv->_symbol_type);
		_tmp4_ = _tmp5_ == target;
	} else {
		_tmp4_ = FALSE;
	}
	if (_tmp4_) {
		afrodite_data_type_set_symbol (self->priv->_symbol_type, NULL);
	}
}


void afrodite_symbol_add_child (AfroditeSymbol* self, AfroditeSymbol* child) {
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_;
	gboolean _tmp6_ = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (child != NULL);
	g_assert (child != self);
	if (self->priv->_children == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_SYMBOL, (GBoxedCopyFunc) g_object_ref, g_object_unref, g_direct_equal);
		_vala_iterable_unref0 (self->priv->_children);
		self->priv->_children = (ValaList*) _tmp0_;
	}
	vala_collection_add ((ValaCollection*) self->priv->_children, child);
	afrodite_symbol_set_parent (child, self);
	_tmp2_ = afrodite_symbol_get_is_static (child);
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		gboolean _tmp3_;
		_tmp3_ = afrodite_symbol_get_has_static_child (child);
		_tmp1_ = _tmp3_;
	}
	if (_tmp1_) {
		gint _tmp4_;
		gint _tmp5_;
		_tmp4_ = afrodite_symbol_get_static_child_count (self);
		_tmp5_ = _tmp4_;
		afrodite_symbol_set_static_child_count (self, _tmp5_ + 1);
	}
	if (child->priv->_member_type == AFRODITE_MEMBER_TYPE_CREATION_METHOD) {
		_tmp6_ = TRUE;
	} else {
		gboolean _tmp7_;
		_tmp7_ = afrodite_symbol_get_has_creation_method_child (child);
		_tmp6_ = _tmp7_;
	}
	if (_tmp6_) {
		gint _tmp8_;
		gint _tmp9_;
		_tmp8_ = afrodite_symbol_get_creation_method_child_count (self);
		_tmp9_ = _tmp8_;
		afrodite_symbol_set_creation_method_child_count (self, _tmp9_ + 1);
	}
}


void afrodite_symbol_remove_child (AfroditeSymbol* self, AfroditeSymbol* child) {
	ValaList* _tmp0_ = NULL;
	AfroditeSymbol* _tmp1_ = NULL;
	gint _tmp2_;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp9_ = FALSE;
	g_return_if_fail (self != NULL);
	g_return_if_fail (child != NULL);
	_tmp0_ = afrodite_symbol_get_children (self);
	vala_collection_remove ((ValaCollection*) _tmp0_, child);
	_tmp1_ = afrodite_symbol_get_parent (child);
	if (_tmp1_ == self) {
		afrodite_symbol_set_parent (child, NULL);
	}
	_tmp2_ = vala_collection_get_size ((ValaCollection*) self->priv->_children);
	if (_tmp2_ == 0) {
		_vala_iterable_unref0 (self->priv->_children);
		self->priv->_children = NULL;
	}
	if (self->_static_child_count > 0) {
		gboolean _tmp4_ = FALSE;
		gboolean _tmp5_;
		_tmp5_ = afrodite_symbol_get_is_static (child);
		if (_tmp5_) {
			_tmp4_ = TRUE;
		} else {
			gboolean _tmp6_;
			_tmp6_ = afrodite_symbol_get_has_static_child (child);
			_tmp4_ = _tmp6_;
		}
		_tmp3_ = _tmp4_;
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		gint _tmp7_;
		gint _tmp8_;
		_tmp7_ = afrodite_symbol_get_static_child_count (self);
		_tmp8_ = _tmp7_;
		afrodite_symbol_set_static_child_count (self, _tmp8_ - 1);
	}
	if (self->_creation_method_child_count > 0) {
		gboolean _tmp10_ = FALSE;
		if (child->priv->_member_type == AFRODITE_MEMBER_TYPE_CREATION_METHOD) {
			_tmp10_ = TRUE;
		} else {
			gboolean _tmp11_;
			_tmp11_ = afrodite_symbol_get_has_creation_method_child (child);
			_tmp10_ = _tmp11_;
		}
		_tmp9_ = _tmp10_;
	} else {
		_tmp9_ = FALSE;
	}
	if (_tmp9_) {
		gint _tmp12_;
		gint _tmp13_;
		_tmp12_ = afrodite_symbol_get_creation_method_child_count (self);
		_tmp13_ = _tmp12_;
		afrodite_symbol_set_creation_method_child_count (self, _tmp13_ + 1);
	}
}


AfroditeSymbol* afrodite_symbol_lookup_child (AfroditeSymbol* self, const gchar* name) {
	AfroditeSymbol* result = NULL;
	gboolean _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_has_children (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_ = NULL;
			ValaList* _tmp2_;
			ValaList* _s_list;
			gint _tmp3_;
			gint _s_size;
			gint _s_index;
			_tmp1_ = afrodite_symbol_get_children (self);
			_tmp2_ = _vala_iterable_ref0 (_tmp1_);
			_s_list = _tmp2_;
			_tmp3_ = vala_collection_get_size ((ValaCollection*) _s_list);
			_s_size = _tmp3_;
			_s_index = -1;
			while (TRUE) {
				gpointer _tmp4_ = NULL;
				AfroditeSymbol* s;
				_s_index = _s_index + 1;
				if (!(_s_index < _s_size)) {
					break;
				}
				_tmp4_ = vala_list_get (_s_list, _s_index);
				s = (AfroditeSymbol*) _tmp4_;
				if (g_strcmp0 (s->priv->_name, name) == 0) {
					result = s;
					_vala_iterable_unref0 (_s_list);
					return result;
				}
				_g_object_unref0 (s);
			}
			_vala_iterable_unref0 (_s_list);
		}
	}
	result = NULL;
	return result;
}


AfroditeDataType* afrodite_symbol_lookup_datatype_for_variable_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name, AfroditeSymbolAccessibility access) {
	AfroditeDataType* result = NULL;
	gboolean _tmp0_;
	gboolean _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_has_local_variables (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_;
			ValaList* _d_list;
			gint _tmp2_;
			gint _d_size;
			gint _d_index;
			_tmp1_ = _vala_iterable_ref0 (self->priv->_local_variables);
			_d_list = _tmp1_;
			_tmp2_ = vala_collection_get_size ((ValaCollection*) _d_list);
			_d_size = _tmp2_;
			_d_index = -1;
			while (TRUE) {
				gpointer _tmp3_ = NULL;
				AfroditeDataType* d;
				const gchar* _tmp4_ = NULL;
				gboolean _tmp5_;
				_d_index = _d_index + 1;
				if (!(_d_index < _d_size)) {
					break;
				}
				_tmp3_ = vala_list_get (_d_list, _d_index);
				d = (AfroditeDataType*) _tmp3_;
				_tmp4_ = afrodite_data_type_get_name (d);
				_tmp5_ = afrodite_symbol_compare_symbol_names (_tmp4_, name, mode);
				if (_tmp5_) {
					result = d;
					_vala_iterable_unref0 (_d_list);
					return result;
				}
				_afrodite_data_type_unref0 (d);
			}
			_vala_iterable_unref0 (_d_list);
		}
	}
	_tmp6_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp6_) {
		{
			ValaList* _tmp7_;
			ValaList* _type_list;
			gint _tmp8_;
			gint _type_size;
			gint _type_index;
			_tmp7_ = _vala_iterable_ref0 (self->priv->_parameters);
			_type_list = _tmp7_;
			_tmp8_ = vala_collection_get_size ((ValaCollection*) _type_list);
			_type_size = _tmp8_;
			_type_index = -1;
			while (TRUE) {
				gpointer _tmp9_ = NULL;
				AfroditeDataType* type;
				const gchar* _tmp10_ = NULL;
				gboolean _tmp11_;
				_type_index = _type_index + 1;
				if (!(_type_index < _type_size)) {
					break;
				}
				_tmp9_ = vala_list_get (_type_list, _type_index);
				type = (AfroditeDataType*) _tmp9_;
				_tmp10_ = afrodite_data_type_get_name (type);
				_tmp11_ = afrodite_symbol_compare_symbol_names (_tmp10_, name, mode);
				if (_tmp11_) {
					result = type;
					_vala_iterable_unref0 (_type_list);
					return result;
				}
				_afrodite_data_type_unref0 (type);
			}
			_vala_iterable_unref0 (_type_list);
		}
	}
	result = NULL;
	return result;
}


AfroditeDataType* afrodite_symbol_lookup_datatype_for_symbol_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name, AfroditeSymbolAccessibility access) {
	AfroditeDataType* result = NULL;
	gboolean _tmp0_;
	gboolean _tmp9_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_has_children (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_ = NULL;
			ValaList* _tmp2_;
			ValaList* _s_list;
			gint _tmp3_;
			gint _s_size;
			gint _s_index;
			_tmp1_ = afrodite_symbol_get_children (self);
			_tmp2_ = _vala_iterable_ref0 (_tmp1_);
			_s_list = _tmp2_;
			_tmp3_ = vala_collection_get_size ((ValaCollection*) _s_list);
			_s_size = _tmp3_;
			_s_index = -1;
			while (TRUE) {
				gpointer _tmp4_ = NULL;
				AfroditeSymbol* s;
				gboolean _tmp5_ = FALSE;
				AfroditeSymbolAccessibility _tmp6_;
				_s_index = _s_index + 1;
				if (!(_s_index < _s_size)) {
					break;
				}
				_tmp4_ = vala_list_get (_s_list, _s_index);
				s = (AfroditeSymbol*) _tmp4_;
				_tmp6_ = afrodite_symbol_get_access (s);
				if ((_tmp6_ & access) != 0) {
					gboolean _tmp7_;
					_tmp7_ = afrodite_symbol_compare_symbol_names (s->priv->_name, name, mode);
					_tmp5_ = _tmp7_;
				} else {
					_tmp5_ = FALSE;
				}
				if (_tmp5_) {
					AfroditeDataType* _tmp8_;
					_tmp8_ = _afrodite_data_type_ref0 (s->priv->_return_type);
					result = _tmp8_;
					_g_object_unref0 (s);
					_vala_iterable_unref0 (_s_list);
					return result;
				}
				_g_object_unref0 (s);
			}
			_vala_iterable_unref0 (_s_list);
		}
	}
	_tmp9_ = afrodite_symbol_get_has_base_types (self);
	if (_tmp9_) {
		{
			ValaList* _tmp10_;
			ValaList* _d_list;
			gint _tmp11_;
			gint _d_size;
			gint _d_index;
			_tmp10_ = _vala_iterable_ref0 (self->priv->_base_types);
			_d_list = _tmp10_;
			_tmp11_ = vala_collection_get_size ((ValaCollection*) _d_list);
			_d_size = _tmp11_;
			_d_index = -1;
			while (TRUE) {
				gpointer _tmp12_ = NULL;
				AfroditeDataType* d;
				AfroditeSymbol* _tmp13_ = NULL;
				_d_index = _d_index + 1;
				if (!(_d_index < _d_size)) {
					break;
				}
				_tmp12_ = vala_list_get (_d_list, _d_index);
				d = (AfroditeDataType*) _tmp12_;
				_tmp13_ = afrodite_data_type_get_symbol (d);
				if (_tmp13_ != NULL) {
					AfroditeSymbol* _tmp14_ = NULL;
					AfroditeDataType* _tmp15_ = NULL;
					AfroditeDataType* r;
					_tmp14_ = afrodite_data_type_get_symbol (d);
					_tmp15_ = afrodite_symbol_lookup_datatype_for_symbol_name (_tmp14_, mode, name, (AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL | AFRODITE_SYMBOL_ACCESSIBILITY_PROTECTED) | AFRODITE_SYMBOL_ACCESSIBILITY_PROTECTED);
					r = _tmp15_;
					if (r != NULL) {
						result = d;
						_afrodite_data_type_unref0 (r);
						_vala_iterable_unref0 (_d_list);
						return result;
					}
					_afrodite_data_type_unref0 (r);
				}
				_afrodite_data_type_unref0 (d);
			}
			_vala_iterable_unref0 (_d_list);
		}
	}
	result = NULL;
	return result;
}


AfroditeDataType* afrodite_symbol_lookup_datatype_for_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name, AfroditeSymbolAccessibility access) {
	AfroditeDataType* result = NULL;
	AfroditeDataType* _tmp0_ = NULL;
	AfroditeDataType* _result_;
	AfroditeDataType* _tmp1_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = afrodite_symbol_lookup_datatype_for_variable_name (self, mode, name, access);
	_result_ = _tmp0_;
	if (_result_ != NULL) {
		result = _result_;
		return result;
	}
	_tmp1_ = afrodite_symbol_lookup_datatype_for_symbol_name (self, mode, name, access);
	result = _tmp1_;
	_afrodite_data_type_unref0 (_result_);
	return result;
}


AfroditeDataType* afrodite_symbol_scope_lookup_datatype_for_name (AfroditeSymbol* self, AfroditeCompareMode mode, const gchar* name) {
	AfroditeDataType* result = NULL;
	AfroditeDataType* _tmp0_ = NULL;
	AfroditeDataType* _result_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = afrodite_symbol_lookup_datatype_for_name (self, mode, name, AFRODITE_SYMBOL_ACCESSIBILITY_ANY);
	_result_ = _tmp0_;
	if (_result_ == NULL) {
		AfroditeSymbol* _tmp1_ = NULL;
		_tmp1_ = afrodite_symbol_get_parent (self);
		if (_tmp1_ != NULL) {
			AfroditeSymbol* _tmp2_ = NULL;
			AfroditeDataType* _tmp3_ = NULL;
			_tmp2_ = afrodite_symbol_get_parent (self);
			_tmp3_ = afrodite_symbol_scope_lookup_datatype_for_name (_tmp2_, mode, name);
			_afrodite_data_type_unref0 (_result_);
			_result_ = _tmp3_;
		}
		if (_result_ == NULL) {
			gboolean _tmp4_;
			_tmp4_ = afrodite_symbol_get_has_source_references (self);
			if (_tmp4_) {
				{
					ValaList* _tmp5_;
					ValaList* _s_list;
					gint _tmp6_;
					gint _s_size;
					gint _s_index;
					_tmp5_ = _vala_iterable_ref0 (self->priv->_source_references);
					_s_list = _tmp5_;
					_tmp6_ = vala_collection_get_size ((ValaCollection*) _s_list);
					_s_size = _tmp6_;
					_s_index = -1;
					while (TRUE) {
						gpointer _tmp7_ = NULL;
						AfroditeSourceReference* s;
						AfroditeSourceFile* _tmp8_ = NULL;
						gboolean _tmp9_;
						_s_index = _s_index + 1;
						if (!(_s_index < _s_size)) {
							break;
						}
						_tmp7_ = vala_list_get (_s_list, _s_index);
						s = (AfroditeSourceReference*) _tmp7_;
						_tmp8_ = afrodite_source_reference_get_file (s);
						_tmp9_ = afrodite_source_file_get_has_using_directives (_tmp8_);
						if (_tmp9_) {
							{
								AfroditeSourceFile* _tmp10_ = NULL;
								ValaList* _tmp11_ = NULL;
								ValaList* _tmp12_;
								ValaList* _u_list;
								gint _tmp13_;
								gint _u_size;
								gint _u_index;
								_tmp10_ = afrodite_source_reference_get_file (s);
								_tmp11_ = afrodite_source_file_get_using_directives (_tmp10_);
								_tmp12_ = _vala_iterable_ref0 (_tmp11_);
								_u_list = _tmp12_;
								_tmp13_ = vala_collection_get_size ((ValaCollection*) _u_list);
								_u_size = _tmp13_;
								_u_index = -1;
								while (TRUE) {
									gpointer _tmp14_ = NULL;
									AfroditeDataType* u;
									gboolean _tmp15_;
									_u_index = _u_index + 1;
									if (!(_u_index < _u_size)) {
										break;
									}
									_tmp14_ = vala_list_get (_u_list, _u_index);
									u = (AfroditeDataType*) _tmp14_;
									_tmp15_ = afrodite_data_type_get_unresolved (u);
									if (!_tmp15_) {
										AfroditeSymbol* _tmp16_ = NULL;
										AfroditeDataType* _tmp17_ = NULL;
										_tmp16_ = afrodite_data_type_get_symbol (u);
										_tmp17_ = afrodite_symbol_lookup_datatype_for_symbol_name (_tmp16_, mode, name, AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL | AFRODITE_SYMBOL_ACCESSIBILITY_PUBLIC);
										_afrodite_data_type_unref0 (_result_);
										_result_ = _tmp17_;
										if (_result_ != NULL) {
											_afrodite_data_type_unref0 (u);
											break;
										}
									}
									_afrodite_data_type_unref0 (u);
								}
								_vala_iterable_unref0 (_u_list);
							}
						}
						if (_result_ != NULL) {
							_afrodite_source_reference_unref0 (s);
							break;
						}
						_afrodite_source_reference_unref0 (s);
					}
					_vala_iterable_unref0 (_s_list);
				}
			}
		}
	}
	result = _result_;
	return result;
}


static gboolean afrodite_symbol_compare_symbol_names (const gchar* name1, const gchar* name2, AfroditeCompareMode mode) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	if (mode == AFRODITE_COMPARE_MODE_START_WITH) {
		_tmp1_ = name1 != NULL;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		_tmp0_ = name2 != NULL;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gboolean _tmp2_;
		_tmp2_ = g_str_has_prefix (name1, name2);
		result = _tmp2_;
		return result;
	} else {
		result = g_strcmp0 (name1, name2) == 0;
		return result;
	}
}


void afrodite_symbol_add_resolved_target (AfroditeSymbol* self, AfroditeSymbol* resolve_target) {
	gboolean _tmp1_;
	gboolean _tmp3_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (resolve_target != NULL);
	g_assert (resolve_target != self);
	if (self->_resolved_targets == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_SYMBOL, NULL, NULL, g_direct_equal);
		_vala_iterable_unref0 (self->_resolved_targets);
		self->_resolved_targets = (ValaList*) _tmp0_;
	}
	_tmp1_ = vala_collection_contains ((ValaCollection*) self->_resolved_targets, resolve_target);
	if (!_tmp1_) {
		vala_collection_add ((ValaCollection*) self->_resolved_targets, resolve_target);
	}
	if (resolve_target->resolve_targets == NULL) {
		ValaArrayList* _tmp2_ = NULL;
		_tmp2_ = vala_array_list_new (AFRODITE_TYPE_SYMBOL, NULL, NULL, g_direct_equal);
		_vala_iterable_unref0 (resolve_target->resolve_targets);
		resolve_target->resolve_targets = (ValaList*) _tmp2_;
	}
	_tmp3_ = vala_collection_contains ((ValaCollection*) resolve_target->resolve_targets, self);
	if (!_tmp3_) {
		vala_collection_add ((ValaCollection*) resolve_target->resolve_targets, self);
	}
}


void afrodite_symbol_remove_resolved_target (AfroditeSymbol* self, AfroditeSymbol* resolve_target) {
	gint _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (resolve_target != NULL);
	vala_collection_remove ((ValaCollection*) self->_resolved_targets, resolve_target);
	_tmp0_ = vala_collection_get_size ((ValaCollection*) self->_resolved_targets);
	if (_tmp0_ == 0) {
		_vala_iterable_unref0 (self->_resolved_targets);
		self->_resolved_targets = NULL;
	}
	if (resolve_target->resolve_targets != NULL) {
		gint _tmp1_;
		vala_collection_remove ((ValaCollection*) resolve_target->resolve_targets, self);
		_tmp1_ = vala_collection_get_size ((ValaCollection*) resolve_target->resolve_targets);
		if (_tmp1_ == 0) {
			_vala_iterable_unref0 (resolve_target->resolve_targets);
			resolve_target->resolve_targets = NULL;
		}
	}
}


void afrodite_symbol_add_parameter (AfroditeSymbol* self, AfroditeDataType* par) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (par != NULL);
	if (self->priv->_parameters == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		ValaArrayList* _tmp1_;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_DATA_TYPE, (GBoxedCopyFunc) afrodite_data_type_ref, afrodite_data_type_unref, g_direct_equal);
		_tmp1_ = _tmp0_;
		afrodite_symbol_set_parameters (self, (ValaList*) _tmp1_);
		_vala_iterable_unref0 (_tmp1_);
	}
	vala_collection_add ((ValaCollection*) self->priv->_parameters, par);
}


void afrodite_symbol_remove_parameter (AfroditeSymbol* self, AfroditeDataType* par) {
	gint _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (par != NULL);
	vala_collection_remove ((ValaCollection*) self->priv->_parameters, par);
	_tmp0_ = vala_collection_get_size ((ValaCollection*) self->priv->_parameters);
	if (_tmp0_ == 0) {
		afrodite_symbol_set_parameters (self, NULL);
	}
}


void afrodite_symbol_add_generic_type_argument (AfroditeSymbol* self, AfroditeSymbol* sym) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (sym != NULL);
	g_assert (sym != self);
	if (self->priv->_generic_type_arguments == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		ValaArrayList* _tmp1_;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_SYMBOL, (GBoxedCopyFunc) g_object_ref, g_object_unref, g_direct_equal);
		_tmp1_ = _tmp0_;
		afrodite_symbol_set_generic_type_arguments (self, (ValaList*) _tmp1_);
		_vala_iterable_unref0 (_tmp1_);
	}
	vala_collection_add ((ValaCollection*) self->priv->_generic_type_arguments, sym);
	afrodite_symbol_set_is_generic_type_argument (sym, TRUE);
	afrodite_symbol_set_parent (sym, self);
}


void afrodite_symbol_remove_generic_type_argument (AfroditeSymbol* self, AfroditeSymbol* sym) {
	AfroditeSymbol* _tmp0_ = NULL;
	gint _tmp1_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (sym != NULL);
	g_assert (sym != self);
	vala_collection_remove ((ValaCollection*) self->priv->_generic_type_arguments, sym);
	_tmp0_ = afrodite_symbol_get_parent (sym);
	if (_tmp0_ == self) {
		afrodite_symbol_set_parent (sym, NULL);
	}
	_tmp1_ = vala_collection_get_size ((ValaCollection*) self->priv->_generic_type_arguments);
	if (_tmp1_ == 0) {
		afrodite_symbol_set_generic_type_arguments (self, NULL);
	}
}


void afrodite_symbol_add_local_variable (AfroditeSymbol* self, AfroditeDataType* variable) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (variable != NULL);
	if (self->priv->_local_variables == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		ValaArrayList* _tmp1_;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_DATA_TYPE, (GBoxedCopyFunc) afrodite_data_type_ref, afrodite_data_type_unref, g_direct_equal);
		_tmp1_ = _tmp0_;
		afrodite_symbol_set_local_variables (self, (ValaList*) _tmp1_);
		_vala_iterable_unref0 (_tmp1_);
	}
	vala_collection_add ((ValaCollection*) self->priv->_local_variables, variable);
}


void afrodite_symbol_remove_local_variable (AfroditeSymbol* self, AfroditeDataType* variable) {
	gint _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (variable != NULL);
	vala_collection_remove ((ValaCollection*) self->priv->_local_variables, variable);
	_tmp0_ = vala_collection_get_size ((ValaCollection*) self->priv->_local_variables);
	if (_tmp0_ == 0) {
		afrodite_symbol_set_local_variables (self, NULL);
	}
}


AfroditeDataType* afrodite_symbol_lookup_local_variable (AfroditeSymbol* self, const gchar* name) {
	AfroditeDataType* result = NULL;
	gboolean _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_has_local_variables (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_;
			ValaList* _d_list;
			gint _tmp2_;
			gint _d_size;
			gint _d_index;
			_tmp1_ = _vala_iterable_ref0 (self->priv->_local_variables);
			_d_list = _tmp1_;
			_tmp2_ = vala_collection_get_size ((ValaCollection*) _d_list);
			_d_size = _tmp2_;
			_d_index = -1;
			while (TRUE) {
				gpointer _tmp3_ = NULL;
				AfroditeDataType* d;
				const gchar* _tmp4_ = NULL;
				_d_index = _d_index + 1;
				if (!(_d_index < _d_size)) {
					break;
				}
				_tmp3_ = vala_list_get (_d_list, _d_index);
				d = (AfroditeDataType*) _tmp3_;
				_tmp4_ = afrodite_data_type_get_name (d);
				if (g_strcmp0 (_tmp4_, name) == 0) {
					result = d;
					_vala_iterable_unref0 (_d_list);
					return result;
				}
				_afrodite_data_type_unref0 (d);
			}
			_vala_iterable_unref0 (_d_list);
		}
	}
	result = NULL;
	return result;
}


void afrodite_symbol_add_base_type (AfroditeSymbol* self, AfroditeDataType* type) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (type != NULL);
	if (self->priv->_base_types == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		ValaArrayList* _tmp1_;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_DATA_TYPE, (GBoxedCopyFunc) afrodite_data_type_ref, afrodite_data_type_unref, g_direct_equal);
		_tmp1_ = _tmp0_;
		afrodite_symbol_set_base_types (self, (ValaList*) _tmp1_);
		_vala_iterable_unref0 (_tmp1_);
	}
	vala_collection_add ((ValaCollection*) self->priv->_base_types, type);
}


void afrodite_symbol_remove_base_type (AfroditeSymbol* self, AfroditeDataType* type) {
	gint _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (type != NULL);
	vala_collection_remove ((ValaCollection*) self->priv->_base_types, type);
	_tmp0_ = vala_collection_get_size ((ValaCollection*) self->priv->_base_types);
	if (_tmp0_ == 0) {
		afrodite_symbol_set_base_types (self, NULL);
	}
}


void afrodite_symbol_add_source_reference (AfroditeSymbol* self, AfroditeSourceReference* reference) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (reference != NULL);
	if (self->priv->_source_references == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		ValaArrayList* _tmp1_;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_SOURCE_REFERENCE, (GBoxedCopyFunc) afrodite_source_reference_ref, afrodite_source_reference_unref, g_direct_equal);
		_tmp1_ = _tmp0_;
		afrodite_symbol_set_source_references (self, (ValaList*) _tmp1_);
		_vala_iterable_unref0 (_tmp1_);
	}
	vala_collection_add ((ValaCollection*) self->priv->_source_references, reference);
}


void afrodite_symbol_remove_source_reference (AfroditeSymbol* self, AfroditeSourceReference* reference) {
	gint _tmp0_;
	AfroditeSourceFile* _tmp2_ = NULL;
	ValaList* _tmp3_ = NULL;
	gboolean _tmp4_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (reference != NULL);
	vala_collection_remove ((ValaCollection*) self->priv->_source_references, reference);
	_tmp0_ = vala_collection_get_size ((ValaCollection*) self->priv->_source_references);
	if (_tmp0_ == 0) {
		AfroditeSourceFile* _tmp1_ = NULL;
		afrodite_symbol_set_source_references (self, NULL);
		_tmp1_ = afrodite_source_reference_get_file (reference);
		afrodite_source_file_remove_symbol_from_codedom (_tmp1_, self);
	}
	_tmp2_ = afrodite_source_reference_get_file (reference);
	_tmp3_ = afrodite_source_file_get_symbols (_tmp2_);
	vala_collection_remove ((ValaCollection*) _tmp3_, self);
	_tmp4_ = afrodite_symbol_get_has_specialized_symbols (self);
	if (_tmp4_) {
		{
			ValaList* _tmp5_;
			ValaList* _item_list;
			gint _tmp6_;
			gint _item_size;
			gint _item_index;
			_tmp5_ = _vala_iterable_ref0 (self->priv->_specialized_symbols);
			_item_list = _tmp5_;
			_tmp6_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp6_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp7_ = NULL;
				AfroditeSymbol* item;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp7_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeSymbol*) _tmp7_;
				afrodite_symbol_remove_source_reference (item, reference);
				_g_object_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
}


AfroditeSourceReference* afrodite_symbol_lookup_source_reference_filename (AfroditeSymbol* self, const gchar* filename) {
	AfroditeSourceReference* result = NULL;
	AfroditeSourceReference* _result_;
	gboolean _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (filename != NULL, NULL);
	_result_ = NULL;
	_tmp0_ = afrodite_symbol_get_has_source_references (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_;
			ValaList* _reference_list;
			gint _tmp2_;
			gint _reference_size;
			gint _reference_index;
			_tmp1_ = _vala_iterable_ref0 (self->priv->_source_references);
			_reference_list = _tmp1_;
			_tmp2_ = vala_collection_get_size ((ValaCollection*) _reference_list);
			_reference_size = _tmp2_;
			_reference_index = -1;
			while (TRUE) {
				gpointer _tmp3_ = NULL;
				AfroditeSourceReference* reference;
				AfroditeSourceFile* _tmp4_ = NULL;
				const gchar* _tmp5_ = NULL;
				_reference_index = _reference_index + 1;
				if (!(_reference_index < _reference_size)) {
					break;
				}
				_tmp3_ = vala_list_get (_reference_list, _reference_index);
				reference = (AfroditeSourceReference*) _tmp3_;
				_tmp4_ = afrodite_source_reference_get_file (reference);
				_tmp5_ = afrodite_source_file_get_filename (_tmp4_);
				if (g_strcmp0 (_tmp5_, filename) == 0) {
					_result_ = reference;
				}
				_afrodite_source_reference_unref0 (reference);
				break;
			}
			_vala_iterable_unref0 (_reference_list);
		}
	}
	result = _result_;
	return result;
}


AfroditeSourceReference* afrodite_symbol_lookup_source_reference_sourcefile (AfroditeSymbol* self, AfroditeSourceFile* source) {
	AfroditeSourceReference* result = NULL;
	gboolean _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (source != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_has_source_references (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_;
			ValaList* _reference_list;
			gint _tmp2_;
			gint _reference_size;
			gint _reference_index;
			_tmp1_ = _vala_iterable_ref0 (self->priv->_source_references);
			_reference_list = _tmp1_;
			_tmp2_ = vala_collection_get_size ((ValaCollection*) _reference_list);
			_reference_size = _tmp2_;
			_reference_index = -1;
			while (TRUE) {
				gpointer _tmp3_ = NULL;
				AfroditeSourceReference* reference;
				AfroditeSourceFile* _tmp4_ = NULL;
				_reference_index = _reference_index + 1;
				if (!(_reference_index < _reference_size)) {
					break;
				}
				_tmp3_ = vala_list_get (_reference_list, _reference_index);
				reference = (AfroditeSourceReference*) _tmp3_;
				_tmp4_ = afrodite_source_reference_get_file (reference);
				if (_tmp4_ == source) {
					result = reference;
					_vala_iterable_unref0 (_reference_list);
					return result;
				}
				_afrodite_source_reference_unref0 (reference);
			}
			_vala_iterable_unref0 (_reference_list);
		}
	}
	result = NULL;
	return result;
}


gboolean afrodite_symbol_check_options (AfroditeSymbol* self, AfroditeQueryOptions* options) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp2_ = FALSE;
	AfroditeSymbolAccessibility _tmp5_;
	g_return_val_if_fail (self != NULL, FALSE);
	if (self->priv->_name != NULL) {
		gboolean _tmp1_;
		_tmp1_ = g_str_has_prefix (self->priv->_name, "*");
		_tmp0_ = _tmp1_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	}
	if (options->exclude_code_node) {
		gboolean _tmp3_ = FALSE;
		if (self->priv->_name == NULL) {
			_tmp3_ = TRUE;
		} else {
			gboolean _tmp4_;
			_tmp4_ = g_str_has_prefix (self->priv->_name, "!");
			_tmp3_ = _tmp4_;
		}
		_tmp2_ = _tmp3_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		result = FALSE;
		return result;
	}
	if (options->all_symbols) {
		result = TRUE;
		return result;
	}
	_tmp5_ = afrodite_symbol_get_access (self);
	if ((_tmp5_ & options->access) != 0) {
		gboolean _tmp6_ = FALSE;
		gboolean _tmp10_ = FALSE;
		gboolean _tmp11_ = FALSE;
		gboolean _tmp12_ = FALSE;
		gboolean _tmp14_ = FALSE;
		if (options->only_static_factories) {
			gboolean _tmp7_ = FALSE;
			gboolean _tmp8_;
			_tmp8_ = afrodite_symbol_get_is_static (self);
			if (!_tmp8_) {
				gboolean _tmp9_;
				_tmp9_ = afrodite_symbol_get_has_static_child (self);
				_tmp7_ = !_tmp9_;
			} else {
				_tmp7_ = FALSE;
			}
			_tmp6_ = _tmp7_;
		} else {
			_tmp6_ = FALSE;
		}
		if (_tmp6_) {
			result = FALSE;
			return result;
		}
		if (options->only_creation_methods) {
			_tmp12_ = self->priv->_member_type != AFRODITE_MEMBER_TYPE_CREATION_METHOD;
		} else {
			_tmp12_ = FALSE;
		}
		if (_tmp12_) {
			_tmp11_ = self->priv->_member_type != AFRODITE_MEMBER_TYPE_ERROR_DOMAIN;
		} else {
			_tmp11_ = FALSE;
		}
		if (_tmp11_) {
			gboolean _tmp13_;
			_tmp13_ = afrodite_symbol_get_has_creation_method_child (self);
			_tmp10_ = !_tmp13_;
		} else {
			_tmp10_ = FALSE;
		}
		if (_tmp10_) {
			result = FALSE;
			return result;
		}
		if (options->exclude_creation_methods) {
			_tmp14_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_CREATION_METHOD;
		} else {
			_tmp14_ = FALSE;
		}
		if (_tmp14_) {
			result = FALSE;
			return result;
		}
		if (self->priv->_member_type == AFRODITE_MEMBER_TYPE_DESTRUCTOR) {
			result = FALSE;
			return result;
		}
		if ((self->binding & options->binding) == 0) {
			result = FALSE;
			return result;
		}
		result = TRUE;
		return result;
	}
	result = FALSE;
	return result;
}


gchar* afrodite_symbol_build_info (AfroditeSymbol* self) {
	gchar* result = NULL;
	gint param_count;
	gchar* params = NULL;
	gchar* generic_args = NULL;
	GString* _tmp2_ = NULL;
	GString* sb;
	gboolean _tmp3_;
	gboolean _tmp11_;
	gchar* _tmp22_;
	gchar* return_type_descr;
	gchar* _tmp23_ = NULL;
	gchar* type_name_descr;
	const gchar* _tmp27_ = NULL;
	const gchar* _tmp28_ = NULL;
	const gchar* _tmp29_ = NULL;
	const gchar* _tmp30_ = NULL;
	gboolean _tmp31_ = FALSE;
	gboolean _tmp32_ = FALSE;
	gboolean _tmp33_ = FALSE;
	gchar* _tmp34_;
	g_return_val_if_fail (self != NULL, NULL);
	if (self->priv->_member_type == AFRODITE_MEMBER_TYPE_CLASS) {
		AfroditeSymbol* _tmp0_ = NULL;
		AfroditeSymbol* s;
		_tmp0_ = afrodite_symbol_get_default_constructor (self);
		s = _tmp0_;
		if (s != NULL) {
			gchar* _tmp1_ = NULL;
			_tmp1_ = afrodite_symbol_build_info (s);
			result = _tmp1_;
			_g_object_unref0 (s);
			return result;
		}
		_g_object_unref0 (s);
	}
	param_count = 0;
	_tmp2_ = g_string_new ("");
	sb = _tmp2_;
	_tmp3_ = afrodite_symbol_get_has_generic_type_arguments (self);
	if (_tmp3_) {
		gchar* _tmp9_;
		g_string_append (sb, "&lt;");
		{
			ValaList* _tmp4_;
			ValaList* _s_list;
			gint _tmp5_;
			gint _s_size;
			gint _s_index;
			_tmp4_ = _vala_iterable_ref0 (self->priv->_generic_type_arguments);
			_s_list = _tmp4_;
			_tmp5_ = vala_collection_get_size ((ValaCollection*) _s_list);
			_s_size = _tmp5_;
			_s_index = -1;
			while (TRUE) {
				gpointer _tmp6_ = NULL;
				AfroditeSymbol* s;
				gchar* _tmp7_ = NULL;
				gchar* _tmp8_;
				_s_index = _s_index + 1;
				if (!(_s_index < _s_size)) {
					break;
				}
				_tmp6_ = vala_list_get (_s_list, _s_index);
				s = (AfroditeSymbol*) _tmp6_;
				_tmp7_ = afrodite_symbol_get_description (s);
				_tmp8_ = _tmp7_;
				g_string_append_printf (sb, "%s, ", _tmp8_);
				_g_free0 (_tmp8_);
				_g_object_unref0 (s);
			}
			_vala_iterable_unref0 (_s_list);
		}
		g_string_truncate (sb, (gsize) (sb->len - 2));
		g_string_append (sb, "&gt;");
		_tmp9_ = g_strdup (sb->str);
		_g_free0 (generic_args);
		generic_args = _tmp9_;
		g_string_truncate (sb, (gsize) 0);
	} else {
		gchar* _tmp10_;
		_tmp10_ = g_strdup ("");
		_g_free0 (generic_args);
		generic_args = _tmp10_;
	}
	_tmp11_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp11_) {
		gint _tmp12_;
		gchar* sep = NULL;
		gchar* _tmp20_;
		_tmp12_ = vala_collection_get_size ((ValaCollection*) self->priv->_parameters);
		param_count = _tmp12_;
		if (param_count > 2) {
			gchar* _tmp13_;
			_tmp13_ = g_strdup ("\n");
			_g_free0 (sep);
			sep = _tmp13_;
		} else {
			gchar* _tmp14_;
			_tmp14_ = g_strdup (" ");
			_g_free0 (sep);
			sep = _tmp14_;
		}
		{
			ValaList* _tmp15_;
			ValaList* _type_list;
			gint _tmp16_;
			gint _type_size;
			gint _type_index;
			_tmp15_ = _vala_iterable_ref0 (self->priv->_parameters);
			_type_list = _tmp15_;
			_tmp16_ = vala_collection_get_size ((ValaCollection*) _type_list);
			_type_size = _tmp16_;
			_type_index = -1;
			while (TRUE) {
				gpointer _tmp17_ = NULL;
				AfroditeDataType* type;
				gchar* _tmp18_ = NULL;
				gchar* _tmp19_;
				_type_index = _type_index + 1;
				if (!(_type_index < _type_size)) {
					break;
				}
				_tmp17_ = vala_list_get (_type_list, _type_index);
				type = (AfroditeDataType*) _tmp17_;
				_tmp18_ = afrodite_data_type_get_description (type);
				_tmp19_ = _tmp18_;
				g_string_append_printf (sb, "%s,%s", _tmp19_, sep);
				_g_free0 (_tmp19_);
				_afrodite_data_type_unref0 (type);
			}
			_vala_iterable_unref0 (_type_list);
		}
		g_string_truncate (sb, (gsize) (sb->len - 2));
		_tmp20_ = g_strdup (sb->str);
		_g_free0 (params);
		params = _tmp20_;
		g_string_truncate (sb, (gsize) 0);
		_g_free0 (sep);
	} else {
		gchar* _tmp21_;
		_tmp21_ = g_strdup ("");
		_g_free0 (params);
		params = _tmp21_;
	}
	_tmp22_ = g_strdup ("");
	return_type_descr = _tmp22_;
	_tmp23_ = afrodite_utils_symbols_get_symbol_type_description (self->priv->_member_type);
	type_name_descr = _tmp23_;
	if (self->priv->_return_type != NULL) {
		if (self->priv->_member_type == AFRODITE_MEMBER_TYPE_CREATION_METHOD) {
			const gchar* _tmp24_ = NULL;
			gchar* _tmp25_;
			_tmp24_ = _ ("Class");
			_tmp25_ = g_strdup (_tmp24_);
			_g_free0 (type_name_descr);
			type_name_descr = _tmp25_;
		} else {
			gchar* _tmp26_ = NULL;
			_tmp26_ = afrodite_data_type_get_description (self->priv->_return_type);
			_g_free0 (return_type_descr);
			return_type_descr = _tmp26_;
		}
	}
	if (param_count > 2) {
		_tmp27_ = "\n";
	} else {
		_tmp27_ = " ";
	}
	if (param_count > 2) {
		_tmp28_ = "\n";
	} else {
		_tmp28_ = "";
	}
	_tmp29_ = afrodite_symbol_get_display_name (self);
	_tmp30_ = afrodite_symbol_get_display_name (self);
	g_string_append_printf (sb, "%s: %s\n\n%s%s<b>%s</b> %s (%s%s)", type_name_descr, _tmp29_, return_type_descr, _tmp27_, _tmp30_, generic_args, _tmp28_, params);
	if (self->priv->_member_type != AFRODITE_MEMBER_TYPE_METHOD) {
		_tmp33_ = self->priv->_member_type != AFRODITE_MEMBER_TYPE_CREATION_METHOD;
	} else {
		_tmp33_ = FALSE;
	}
	if (_tmp33_) {
		_tmp32_ = self->priv->_member_type != AFRODITE_MEMBER_TYPE_DELEGATE;
	} else {
		_tmp32_ = FALSE;
	}
	if (_tmp32_) {
		_tmp31_ = self->priv->_member_type != AFRODITE_MEMBER_TYPE_SIGNAL;
	} else {
		_tmp31_ = FALSE;
	}
	if (_tmp31_) {
		g_string_truncate (sb, (gsize) (sb->len - 3));
	}
	_tmp34_ = g_strdup (sb->str);
	result = _tmp34_;
	_g_free0 (type_name_descr);
	_g_free0 (return_type_descr);
	_g_string_free0 (sb);
	_g_free0 (generic_args);
	_g_free0 (params);
	return result;
}


static gchar* afrodite_symbol_build_description (AfroditeSymbol* self, gboolean markup) {
	gchar* result = NULL;
	GString* _tmp0_ = NULL;
	GString* sb;
	gboolean _tmp10_ = FALSE;
	gboolean _tmp21_;
	gboolean _tmp25_ = FALSE;
	gboolean _tmp26_ = FALSE;
	gboolean _tmp27_ = FALSE;
	gboolean _tmp28_ = FALSE;
	gboolean _tmp29_;
	gboolean _tmp30_;
	gboolean _tmp36_ = FALSE;
	gboolean _tmp37_ = FALSE;
	gboolean _tmp38_ = FALSE;
	gboolean _tmp39_ = FALSE;
	gboolean _tmp40_;
	gboolean _tmp41_;
	gchar* _tmp47_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = g_string_new ("");
	sb = _tmp0_;
	if (self->priv->_member_type != AFRODITE_MEMBER_TYPE_ENUM_VALUE) {
		gchar* _tmp1_ = NULL;
		gchar* _tmp2_;
		gchar* _tmp3_ = NULL;
		gchar* _tmp4_;
		gboolean _tmp5_;
		_tmp1_ = afrodite_symbol_get_access_string (self);
		_tmp2_ = _tmp1_;
		g_string_append (sb, _tmp2_);
		_g_free0 (_tmp2_);
		g_string_append (sb, " ");
		_tmp3_ = afrodite_symbol_get_binding_string (self);
		_tmp4_ = _tmp3_;
		_tmp5_ = g_strcmp0 (_tmp4_, "") != 0;
		_g_free0 (_tmp4_);
		if (_tmp5_) {
			gchar* _tmp6_ = NULL;
			gchar* _tmp7_;
			_tmp6_ = afrodite_symbol_get_binding_string (self);
			_tmp7_ = _tmp6_;
			g_string_append (sb, _tmp7_);
			_g_free0 (_tmp7_);
			g_string_append (sb, " ");
		}
	}
	if (self->priv->_return_type != NULL) {
		if (self->priv->_member_type == AFRODITE_MEMBER_TYPE_CONSTRUCTOR) {
			g_string_append (sb, "constructor: ");
		} else {
			gchar* _tmp8_ = NULL;
			gchar* _tmp9_;
			_tmp8_ = afrodite_data_type_get_description (self->priv->_return_type);
			_tmp9_ = _tmp8_;
			g_string_append_printf (sb, "%s ", _tmp9_);
			_g_free0 (_tmp9_);
		}
	}
	if (markup) {
		gboolean _tmp11_ = FALSE;
		gboolean _tmp12_ = FALSE;
		gboolean _tmp13_ = FALSE;
		gboolean _tmp14_ = FALSE;
		gboolean _tmp15_ = FALSE;
		gboolean _tmp16_ = FALSE;
		if (self->priv->_member_type == AFRODITE_MEMBER_TYPE_PROPERTY) {
			_tmp16_ = TRUE;
		} else {
			_tmp16_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_METHOD;
		}
		if (_tmp16_) {
			_tmp15_ = TRUE;
		} else {
			_tmp15_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_DELEGATE;
		}
		if (_tmp15_) {
			_tmp14_ = TRUE;
		} else {
			_tmp14_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_CREATION_METHOD;
		}
		if (_tmp14_) {
			_tmp13_ = TRUE;
		} else {
			_tmp13_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_SIGNAL;
		}
		if (_tmp13_) {
			_tmp12_ = TRUE;
		} else {
			_tmp12_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_FIELD;
		}
		if (_tmp12_) {
			_tmp11_ = TRUE;
		} else {
			_tmp11_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_CONSTRUCTOR;
		}
		_tmp10_ = _tmp11_;
	} else {
		_tmp10_ = FALSE;
	}
	if (_tmp10_) {
		const gchar* _tmp17_ = NULL;
		gchar* _tmp18_ = NULL;
		gchar* _tmp19_;
		_tmp17_ = afrodite_symbol_get_display_name (self);
		_tmp18_ = g_strdup_printf ("<b>%s</b>", _tmp17_);
		_tmp19_ = _tmp18_;
		g_string_append_printf (sb, "%s", _tmp19_);
		_g_free0 (_tmp19_);
	} else {
		const gchar* _tmp20_ = NULL;
		_tmp20_ = afrodite_symbol_get_display_name (self);
		g_string_append (sb, _tmp20_);
	}
	_tmp21_ = afrodite_symbol_get_has_generic_type_arguments (self);
	if (_tmp21_) {
		g_string_append (sb, "&lt;");
		{
			ValaList* _tmp22_;
			ValaList* _s_list;
			gint _tmp23_;
			gint _s_size;
			gint _s_index;
			_tmp22_ = _vala_iterable_ref0 (self->priv->_generic_type_arguments);
			_s_list = _tmp22_;
			_tmp23_ = vala_collection_get_size ((ValaCollection*) _s_list);
			_s_size = _tmp23_;
			_s_index = -1;
			while (TRUE) {
				gpointer _tmp24_ = NULL;
				AfroditeSymbol* s;
				_s_index = _s_index + 1;
				if (!(_s_index < _s_size)) {
					break;
				}
				_tmp24_ = vala_list_get (_s_list, _s_index);
				s = (AfroditeSymbol*) _tmp24_;
				g_string_append_printf (sb, "%s, ", s->priv->_name);
				_g_object_unref0 (s);
			}
			_vala_iterable_unref0 (_s_list);
		}
		g_string_truncate (sb, (gsize) (sb->len - 2));
		g_string_append (sb, "&gt;");
	}
	_tmp29_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp29_) {
		_tmp28_ = TRUE;
	} else {
		_tmp28_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_METHOD;
	}
	if (_tmp28_) {
		_tmp27_ = TRUE;
	} else {
		_tmp27_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_CREATION_METHOD;
	}
	if (_tmp27_) {
		_tmp26_ = TRUE;
	} else {
		_tmp26_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_DELEGATE;
	}
	if (_tmp26_) {
		_tmp25_ = TRUE;
	} else {
		_tmp25_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_SIGNAL;
	}
	if (_tmp25_) {
		g_string_append (sb, " (");
	}
	_tmp30_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp30_) {
		{
			ValaList* _tmp31_;
			ValaList* _type_list;
			gint _tmp32_;
			gint _type_size;
			gint _type_index;
			_tmp31_ = _vala_iterable_ref0 (self->priv->_parameters);
			_type_list = _tmp31_;
			_tmp32_ = vala_collection_get_size ((ValaCollection*) _type_list);
			_type_size = _tmp32_;
			_type_index = -1;
			while (TRUE) {
				gpointer _tmp33_ = NULL;
				AfroditeDataType* type;
				gchar* _tmp34_ = NULL;
				gchar* _tmp35_;
				_type_index = _type_index + 1;
				if (!(_type_index < _type_size)) {
					break;
				}
				_tmp33_ = vala_list_get (_type_list, _type_index);
				type = (AfroditeDataType*) _tmp33_;
				_tmp34_ = afrodite_data_type_get_description (type);
				_tmp35_ = _tmp34_;
				g_string_append_printf (sb, "%s, ", _tmp35_);
				_g_free0 (_tmp35_);
				_afrodite_data_type_unref0 (type);
			}
			_vala_iterable_unref0 (_type_list);
		}
		g_string_truncate (sb, (gsize) (sb->len - 2));
	}
	_tmp40_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp40_) {
		_tmp39_ = TRUE;
	} else {
		_tmp39_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_METHOD;
	}
	if (_tmp39_) {
		_tmp38_ = TRUE;
	} else {
		_tmp38_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_CREATION_METHOD;
	}
	if (_tmp38_) {
		_tmp37_ = TRUE;
	} else {
		_tmp37_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_DELEGATE;
	}
	if (_tmp37_) {
		_tmp36_ = TRUE;
	} else {
		_tmp36_ = self->priv->_member_type == AFRODITE_MEMBER_TYPE_SIGNAL;
	}
	if (_tmp36_) {
		g_string_append (sb, ")");
	}
	_tmp41_ = afrodite_symbol_get_has_base_types (self);
	if (_tmp41_) {
		g_string_append (sb, " : ");
		{
			ValaList* _tmp42_;
			ValaList* _type_list;
			gint _tmp43_;
			gint _type_size;
			gint _type_index;
			_tmp42_ = _vala_iterable_ref0 (self->priv->_base_types);
			_type_list = _tmp42_;
			_tmp43_ = vala_collection_get_size ((ValaCollection*) _type_list);
			_type_size = _tmp43_;
			_type_index = -1;
			while (TRUE) {
				gpointer _tmp44_ = NULL;
				AfroditeDataType* type;
				gchar* _tmp45_ = NULL;
				gchar* _tmp46_;
				_type_index = _type_index + 1;
				if (!(_type_index < _type_size)) {
					break;
				}
				_tmp44_ = vala_list_get (_type_list, _type_index);
				type = (AfroditeDataType*) _tmp44_;
				_tmp45_ = afrodite_data_type_get_description (type);
				_tmp46_ = _tmp45_;
				g_string_append_printf (sb, "%s, ", _tmp46_);
				_g_free0 (_tmp46_);
				_afrodite_data_type_unref0 (type);
			}
			_vala_iterable_unref0 (_type_list);
		}
		g_string_truncate (sb, (gsize) (sb->len - 2));
	}
	_tmp47_ = g_strdup (sb->str);
	result = _tmp47_;
	_g_string_free0 (sb);
	return result;
}


AfroditeSymbol* afrodite_symbol_get_default_constructor (AfroditeSymbol* self) {
	AfroditeSymbol* result = NULL;
	gboolean _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_has_children (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_;
			ValaList* _s_list;
			gint _tmp2_;
			gint _s_size;
			gint _s_index;
			_tmp1_ = _vala_iterable_ref0 (self->priv->_children);
			_s_list = _tmp1_;
			_tmp2_ = vala_collection_get_size ((ValaCollection*) _s_list);
			_s_size = _tmp2_;
			_s_index = -1;
			while (TRUE) {
				gpointer _tmp3_ = NULL;
				AfroditeSymbol* s;
				_s_index = _s_index + 1;
				if (!(_s_index < _s_size)) {
					break;
				}
				_tmp3_ = vala_list_get (_s_list, _s_index);
				s = (AfroditeSymbol*) _tmp3_;
				if (g_strcmp0 (s->priv->_name, "new") == 0) {
					result = s;
					_vala_iterable_unref0 (_s_list);
					return result;
				}
				_g_object_unref0 (s);
			}
			_vala_iterable_unref0 (_s_list);
		}
	}
	result = NULL;
	return result;
}


AfroditeSymbol* afrodite_symbol_copy (AfroditeSymbol* self) {
	AfroditeSymbol* result = NULL;
	AfroditeSymbol* _tmp0_ = NULL;
	AfroditeSymbol* res;
	AfroditeSymbol* _tmp1_ = NULL;
	AfroditeSymbolAccessibility _tmp4_;
	AfroditeDataType* _tmp5_;
	gboolean _tmp6_;
	gboolean _tmp12_;
	gboolean _tmp18_;
	gboolean _tmp24_;
	gboolean _tmp30_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = afrodite_symbol_new (self->priv->_name, self->priv->_member_type);
	res = _tmp0_;
	_tmp1_ = afrodite_symbol_get_parent (self);
	afrodite_symbol_set_parent (res, _tmp1_);
	if (self->priv->_return_type != NULL) {
		AfroditeDataType* _tmp2_ = NULL;
		AfroditeDataType* _tmp3_;
		_tmp2_ = afrodite_data_type_copy (self->priv->_return_type);
		_tmp3_ = _tmp2_;
		afrodite_symbol_set_return_type (res, _tmp3_);
		_afrodite_data_type_unref0 (_tmp3_);
	}
	_tmp4_ = afrodite_symbol_get_access (self);
	afrodite_symbol_set_access (res, _tmp4_);
	res->binding = self->binding;
	res->is_virtual = self->is_virtual;
	res->is_abstract = self->is_abstract;
	res->overrides = self->overrides;
	_tmp5_ = _afrodite_data_type_ref0 (self->priv->_symbol_type);
	_afrodite_data_type_unref0 (res->priv->_symbol_type);
	res->priv->_symbol_type = _tmp5_;
	res->_static_child_count = self->_static_child_count;
	res->_creation_method_child_count = self->_creation_method_child_count;
	_tmp6_ = afrodite_symbol_get_has_children (self);
	if (_tmp6_) {
		{
			ValaList* _tmp7_ = NULL;
			ValaList* _tmp8_;
			ValaList* _item_list;
			gint _tmp9_;
			gint _item_size;
			gint _item_index;
			_tmp7_ = afrodite_symbol_get_children (self);
			_tmp8_ = _vala_iterable_ref0 (_tmp7_);
			_item_list = _tmp8_;
			_tmp9_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp9_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp10_ = NULL;
				AfroditeSymbol* item;
				AfroditeSymbol* _tmp11_ = NULL;
				AfroditeSymbol* s;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp10_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeSymbol*) _tmp10_;
				_tmp11_ = afrodite_symbol_copy (item);
				s = _tmp11_;
				afrodite_symbol_add_child (res, s);
				_g_object_unref0 (s);
				_g_object_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp12_ = afrodite_symbol_get_has_source_references (self);
	if (_tmp12_) {
		{
			ValaList* _tmp13_;
			ValaList* _item_list;
			gint _tmp14_;
			gint _item_size;
			gint _item_index;
			_tmp13_ = _vala_iterable_ref0 (self->priv->_source_references);
			_item_list = _tmp13_;
			_tmp14_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp14_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp15_ = NULL;
				AfroditeSourceReference* item;
				AfroditeSourceFile* _tmp16_ = NULL;
				ValaList* _tmp17_ = NULL;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp15_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeSourceReference*) _tmp15_;
				afrodite_symbol_add_source_reference (res, item);
				_tmp16_ = afrodite_source_reference_get_file (item);
				_tmp17_ = afrodite_source_file_get_symbols (_tmp16_);
				vala_collection_add ((ValaCollection*) _tmp17_, res);
				_afrodite_source_reference_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp18_ = afrodite_symbol_get_has_parameters (self);
	if (_tmp18_) {
		{
			ValaList* _tmp19_;
			ValaList* _item_list;
			gint _tmp20_;
			gint _item_size;
			gint _item_index;
			_tmp19_ = _vala_iterable_ref0 (self->priv->_parameters);
			_item_list = _tmp19_;
			_tmp20_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp20_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp21_ = NULL;
				AfroditeDataType* item;
				AfroditeDataType* _tmp22_ = NULL;
				AfroditeDataType* _tmp23_;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp21_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp21_;
				_tmp22_ = afrodite_data_type_copy (item);
				_tmp23_ = _tmp22_;
				afrodite_symbol_add_parameter (res, _tmp23_);
				_afrodite_data_type_unref0 (_tmp23_);
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp24_ = afrodite_symbol_get_has_local_variables (self);
	if (_tmp24_) {
		{
			ValaList* _tmp25_;
			ValaList* _item_list;
			gint _tmp26_;
			gint _item_size;
			gint _item_index;
			_tmp25_ = _vala_iterable_ref0 (self->priv->_local_variables);
			_item_list = _tmp25_;
			_tmp26_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp26_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp27_ = NULL;
				AfroditeDataType* item;
				AfroditeDataType* _tmp28_ = NULL;
				AfroditeDataType* _tmp29_;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp27_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp27_;
				_tmp28_ = afrodite_data_type_copy (item);
				_tmp29_ = _tmp28_;
				afrodite_symbol_add_local_variable (res, _tmp29_);
				_afrodite_data_type_unref0 (_tmp29_);
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp30_ = afrodite_symbol_get_has_base_types (self);
	if (_tmp30_) {
		{
			ValaList* _tmp31_;
			ValaList* _item_list;
			gint _tmp32_;
			gint _item_size;
			gint _item_index;
			_tmp31_ = _vala_iterable_ref0 (self->priv->_base_types);
			_item_list = _tmp31_;
			_tmp32_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp32_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp33_ = NULL;
				AfroditeDataType* item;
				AfroditeDataType* _tmp34_ = NULL;
				AfroditeDataType* d;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp33_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp33_;
				_tmp34_ = afrodite_data_type_copy (item);
				d = _tmp34_;
				afrodite_symbol_add_base_type (res, d);
				_afrodite_data_type_unref0 (d);
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	if (self->priv->_generic_type_arguments != NULL) {
		{
			ValaList* _tmp35_;
			ValaList* _item_list;
			gint _tmp36_;
			gint _item_size;
			gint _item_index;
			_tmp35_ = _vala_iterable_ref0 (self->priv->_generic_type_arguments);
			_item_list = _tmp35_;
			_tmp36_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp36_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp37_ = NULL;
				AfroditeSymbol* item;
				AfroditeSymbol* _tmp38_ = NULL;
				AfroditeSymbol* _tmp39_;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp37_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeSymbol*) _tmp37_;
				_tmp38_ = afrodite_symbol_copy (item);
				_tmp39_ = _tmp38_;
				afrodite_symbol_add_generic_type_argument (res, _tmp39_);
				_g_object_unref0 (_tmp39_);
				_g_object_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	result = res;
	return result;
}


void afrodite_symbol_specialize_generic_symbol (AfroditeSymbol* self, ValaList* types) {
	g_return_if_fail (self != NULL);
	g_return_if_fail (types != NULL);
	{
		gint i;
		i = 0;
		{
			gboolean _tmp0_;
			_tmp0_ = TRUE;
			while (TRUE) {
				gint _tmp1_;
				gint _tmp2_;
				gpointer _tmp3_ = NULL;
				AfroditeSymbol* _tmp4_;
				gchar* _tmp5_ = NULL;
				gchar* _tmp6_;
				gchar* _tmp7_;
				gchar* _tmp11_;
				gchar* name;
				gpointer _tmp12_ = NULL;
				AfroditeDataType* _tmp13_;
				gpointer _tmp14_ = NULL;
				AfroditeSymbol* _tmp15_;
				gpointer _tmp16_ = NULL;
				AfroditeDataType* _tmp17_;
				const gchar* _tmp18_ = NULL;
				gpointer _tmp19_ = NULL;
				AfroditeSymbol* _tmp20_;
				gpointer _tmp21_ = NULL;
				AfroditeDataType* _tmp22_;
				if (!_tmp0_) {
					i++;
				}
				_tmp0_ = FALSE;
				_tmp1_ = vala_collection_get_size ((ValaCollection*) types);
				if (!(i < _tmp1_)) {
					break;
				}
				_tmp2_ = vala_collection_get_size ((ValaCollection*) self->priv->_generic_type_arguments);
				if (_tmp2_ <= i) {
					break;
				}
				_tmp3_ = vala_list_get (self->priv->_generic_type_arguments, i);
				_tmp4_ = (AfroditeSymbol*) _tmp3_;
				_tmp5_ = afrodite_symbol_get_fully_qualified_name (_tmp4_);
				_tmp6_ = _tmp5_;
				_g_object_unref0 (_tmp4_);
				_tmp7_ = _tmp6_;
				if (_tmp7_ == NULL) {
					gpointer _tmp8_ = NULL;
					AfroditeSymbol* _tmp9_;
					gchar* _tmp10_;
					_tmp8_ = vala_list_get (self->priv->_generic_type_arguments, i);
					_tmp9_ = (AfroditeSymbol*) _tmp8_;
					_tmp10_ = g_strdup (_tmp9_->priv->_name);
					_g_free0 (_tmp7_);
					_tmp7_ = _tmp10_;
					_g_object_unref0 (_tmp9_);
				}
				_tmp11_ = g_strdup (_tmp7_);
				name = _tmp11_;
				_tmp12_ = vala_list_get (types, i);
				_tmp13_ = (AfroditeDataType*) _tmp12_;
				afrodite_symbol_resolve_generic_type (self, self, name, _tmp13_);
				_afrodite_data_type_unref0 (_tmp13_);
				_tmp14_ = vala_list_get (self->priv->_generic_type_arguments, i);
				_tmp15_ = (AfroditeSymbol*) _tmp14_;
				_tmp16_ = vala_list_get (types, i);
				_tmp17_ = (AfroditeDataType*) _tmp16_;
				_tmp18_ = afrodite_data_type_get_type_name (_tmp17_);
				afrodite_symbol_set_name (_tmp15_, _tmp18_);
				_afrodite_data_type_unref0 (_tmp17_);
				_g_object_unref0 (_tmp15_);
				_tmp19_ = vala_list_get (self->priv->_generic_type_arguments, i);
				_tmp20_ = (AfroditeSymbol*) _tmp19_;
				_tmp21_ = vala_list_get (types, i);
				_tmp22_ = (AfroditeDataType*) _tmp21_;
				afrodite_symbol_set_return_type (_tmp20_, _tmp22_);
				_afrodite_data_type_unref0 (_tmp22_);
				_g_object_unref0 (_tmp20_);
				_g_free0 (self->priv->_des);
				self->priv->_des = NULL;
				_g_free0 (name);
				_g_free0 (_tmp7_);
			}
		}
	}
}


void afrodite_symbol_add_specialized_symbol (AfroditeSymbol* self, AfroditeSymbol* item) {
	g_return_if_fail (self != NULL);
	g_assert (item != self);
	if (self->priv->_specialized_symbols == NULL) {
		ValaArrayList* _tmp0_ = NULL;
		_tmp0_ = vala_array_list_new (AFRODITE_TYPE_SYMBOL, (GBoxedCopyFunc) g_object_ref, g_object_unref, g_direct_equal);
		_vala_iterable_unref0 (self->priv->_specialized_symbols);
		self->priv->_specialized_symbols = (ValaList*) _tmp0_;
	}
	vala_collection_add ((ValaCollection*) self->priv->_specialized_symbols, item);
	afrodite_symbol_set_generic_parent (item, self);
}


void afrodite_symbol_remove_specialized_symbol (AfroditeSymbol* self, AfroditeSymbol* item) {
	gint _tmp0_;
	g_return_if_fail (self != NULL);
	g_assert (item != self);
	vala_collection_remove ((ValaCollection*) self->priv->_specialized_symbols, item);
	if (item->priv->_generic_parent == self) {
		afrodite_symbol_set_generic_parent (item, NULL);
	}
	_tmp0_ = vala_collection_get_size ((ValaCollection*) self->priv->_specialized_symbols);
	if (_tmp0_ == 0) {
		_vala_iterable_unref0 (self->priv->_specialized_symbols);
		self->priv->_specialized_symbols = NULL;
	}
}


AfroditeSymbol* afrodite_symbol_get_generic_type_argument (AfroditeSymbol* self, const gchar* name) {
	AfroditeSymbol* result = NULL;
	gboolean _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_has_generic_type_arguments (self);
	if (_tmp0_) {
		{
			ValaList* _tmp1_;
			ValaList* _arg_list;
			gint _tmp2_;
			gint _arg_size;
			gint _arg_index;
			_tmp1_ = _vala_iterable_ref0 (self->priv->_generic_type_arguments);
			_arg_list = _tmp1_;
			_tmp2_ = vala_collection_get_size ((ValaCollection*) _arg_list);
			_arg_size = _tmp2_;
			_arg_index = -1;
			while (TRUE) {
				gpointer _tmp3_ = NULL;
				AfroditeSymbol* arg;
				_arg_index = _arg_index + 1;
				if (!(_arg_index < _arg_size)) {
					break;
				}
				_tmp3_ = vala_list_get (_arg_list, _arg_index);
				arg = (AfroditeSymbol*) _tmp3_;
				if (g_strcmp0 (arg->priv->_name, name) == 0) {
					result = arg;
					_vala_iterable_unref0 (_arg_list);
					return result;
				}
				_g_object_unref0 (arg);
			}
			_vala_iterable_unref0 (_arg_list);
		}
	}
	if (self->priv->_parent != NULL) {
		AfroditeSymbol* _tmp4_ = NULL;
		_tmp4_ = afrodite_symbol_get_generic_type_argument (self->priv->_parent, name);
		result = _tmp4_;
		return result;
	}
	result = NULL;
	return result;
}


static void afrodite_symbol_resolve_generic_type (AfroditeSymbol* self, AfroditeSymbol* symbol, const gchar* generic_type_name, AfroditeDataType* type) {
	gboolean _tmp1_;
	gboolean _tmp17_;
	gboolean _tmp24_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (symbol != NULL);
	g_return_if_fail (generic_type_name != NULL);
	g_return_if_fail (type != NULL);
	if (symbol->priv->_return_type != NULL) {
		const gchar* _tmp0_ = NULL;
		_tmp0_ = afrodite_data_type_get_type_name (symbol->priv->_return_type);
		if (g_strcmp0 (_tmp0_, generic_type_name) == 0) {
			afrodite_symbol_set_return_type (symbol, type);
		}
	}
	_tmp1_ = afrodite_symbol_get_has_children (symbol);
	if (_tmp1_) {
		{
			ValaList* _tmp2_ = NULL;
			ValaList* _tmp3_;
			ValaList* _item_list;
			gint _tmp4_;
			gint _item_size;
			gint _item_index;
			_tmp2_ = afrodite_symbol_get_children (symbol);
			_tmp3_ = _vala_iterable_ref0 (_tmp2_);
			_item_list = _tmp3_;
			_tmp4_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp4_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp5_ = NULL;
				AfroditeSymbol* item;
				gboolean _tmp6_ = FALSE;
				gboolean _tmp8_;
				gboolean _tmp16_;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp5_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeSymbol*) _tmp5_;
				if (item->priv->_return_type != NULL) {
					const gchar* _tmp7_ = NULL;
					_tmp7_ = afrodite_data_type_get_type_name (item->priv->_return_type);
					_tmp6_ = g_strcmp0 (_tmp7_, generic_type_name) == 0;
				} else {
					_tmp6_ = FALSE;
				}
				if (_tmp6_) {
					afrodite_symbol_set_return_type (item, type);
				}
				_tmp8_ = afrodite_symbol_get_has_parameters (item);
				if (_tmp8_) {
					{
						ValaList* _tmp9_;
						ValaList* _par_list;
						gint _tmp10_;
						gint _par_size;
						gint _par_index;
						_tmp9_ = _vala_iterable_ref0 (item->priv->_parameters);
						_par_list = _tmp9_;
						_tmp10_ = vala_collection_get_size ((ValaCollection*) _par_list);
						_par_size = _tmp10_;
						_par_index = -1;
						while (TRUE) {
							gpointer _tmp11_ = NULL;
							AfroditeDataType* par;
							const gchar* _tmp12_ = NULL;
							_par_index = _par_index + 1;
							if (!(_par_index < _par_size)) {
								break;
							}
							_tmp11_ = vala_list_get (_par_list, _par_index);
							par = (AfroditeDataType*) _tmp11_;
							_tmp12_ = afrodite_data_type_get_type_name (par);
							if (g_strcmp0 (_tmp12_, generic_type_name) == 0) {
								const gchar* _tmp13_ = NULL;
								const gchar* _tmp14_ = NULL;
								AfroditeSymbol* _tmp15_ = NULL;
								_tmp13_ = afrodite_data_type_get_type_name (type);
								afrodite_data_type_set_type_name (par, _tmp13_);
								_tmp14_ = afrodite_data_type_get_name (type);
								afrodite_data_type_set_name (par, _tmp14_);
								_tmp15_ = afrodite_data_type_get_symbol (type);
								afrodite_data_type_set_symbol (par, _tmp15_);
							}
							_afrodite_data_type_unref0 (par);
						}
						_vala_iterable_unref0 (_par_list);
					}
				}
				_tmp16_ = afrodite_symbol_get_has_children (item);
				if (_tmp16_) {
					afrodite_symbol_resolve_generic_type (self, item, generic_type_name, type);
				}
				_g_object_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp17_ = afrodite_symbol_get_has_local_variables (symbol);
	if (_tmp17_) {
		{
			ValaList* _tmp18_;
			ValaList* _item_list;
			gint _tmp19_;
			gint _item_size;
			gint _item_index;
			_tmp18_ = _vala_iterable_ref0 (symbol->priv->_local_variables);
			_item_list = _tmp18_;
			_tmp19_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp19_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp20_ = NULL;
				AfroditeDataType* item;
				const gchar* _tmp21_ = NULL;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp20_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp20_;
				_tmp21_ = afrodite_data_type_get_type_name (item);
				if (g_strcmp0 (_tmp21_, generic_type_name) == 0) {
					const gchar* _tmp22_ = NULL;
					AfroditeSymbol* _tmp23_ = NULL;
					_tmp22_ = afrodite_data_type_get_type_name (type);
					afrodite_data_type_set_type_name (item, _tmp22_);
					_tmp23_ = afrodite_data_type_get_symbol (type);
					afrodite_data_type_set_symbol (item, _tmp23_);
				}
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
	_tmp24_ = afrodite_symbol_get_has_parameters (symbol);
	if (_tmp24_) {
		{
			ValaList* _tmp25_;
			ValaList* _item_list;
			gint _tmp26_;
			gint _item_size;
			gint _item_index;
			_tmp25_ = _vala_iterable_ref0 (symbol->priv->_parameters);
			_item_list = _tmp25_;
			_tmp26_ = vala_collection_get_size ((ValaCollection*) _item_list);
			_item_size = _tmp26_;
			_item_index = -1;
			while (TRUE) {
				gpointer _tmp27_ = NULL;
				AfroditeDataType* item;
				const gchar* _tmp28_ = NULL;
				_item_index = _item_index + 1;
				if (!(_item_index < _item_size)) {
					break;
				}
				_tmp27_ = vala_list_get (_item_list, _item_index);
				item = (AfroditeDataType*) _tmp27_;
				_tmp28_ = afrodite_data_type_get_type_name (item);
				if (g_strcmp0 (_tmp28_, generic_type_name) == 0) {
					const gchar* _tmp29_ = NULL;
					const gchar* _tmp30_ = NULL;
					AfroditeSymbol* _tmp31_ = NULL;
					_tmp29_ = afrodite_data_type_get_type_name (type);
					afrodite_data_type_set_type_name (item, _tmp29_);
					_tmp30_ = afrodite_data_type_get_type_name (type);
					afrodite_data_type_set_name (item, _tmp30_);
					_tmp31_ = afrodite_data_type_get_symbol (type);
					afrodite_data_type_set_symbol (item, _tmp31_);
				}
				_afrodite_data_type_unref0 (item);
			}
			_vala_iterable_unref0 (_item_list);
		}
	}
}


AfroditeSymbol* afrodite_symbol_get_parent (AfroditeSymbol* self) {
	AfroditeSymbol* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_parent;
	return result;
}


void afrodite_symbol_set_parent (AfroditeSymbol* self, AfroditeSymbol* value) {
	g_return_if_fail (self != NULL);
	g_assert (value != self);
	self->priv->_parent = value;
	g_object_notify ((GObject *) self, "parent");
}


ValaList* afrodite_symbol_get_children (AfroditeSymbol* self) {
	ValaList* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_children;
	return result;
}


ValaList* afrodite_symbol_get_resolved_targets (AfroditeSymbol* self) {
	ValaList* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->_resolved_targets;
	return result;
}


AfroditeSymbol* afrodite_symbol_get_generic_parent (AfroditeSymbol* self) {
	AfroditeSymbol* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_generic_parent;
	return result;
}


void afrodite_symbol_set_generic_parent (AfroditeSymbol* self, AfroditeSymbol* value) {
	g_return_if_fail (self != NULL);
	self->priv->_generic_parent = value;
	g_object_notify ((GObject *) self, "generic-parent");
}


const gchar* afrodite_symbol_get_name (AfroditeSymbol* self) {
	const gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_name;
	return result;
}


static void afrodite_symbol_set_name (AfroditeSymbol* self, const gchar* value) {
	gchar* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = g_strdup (value);
	_g_free0 (self->priv->_name);
	self->priv->_name = _tmp0_;
	g_object_notify ((GObject *) self, "name");
}


gchar* afrodite_symbol_get_fully_qualified_name (AfroditeSymbol* self) {
	gchar* result;
	gchar* _tmp0_ = NULL;
	gboolean _tmp1_ = FALSE;
	AfroditeSymbol* _tmp2_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp2_ = afrodite_symbol_get_parent (self);
	if (_tmp2_ == NULL) {
		_tmp1_ = TRUE;
	} else {
		AfroditeSymbol* _tmp3_ = NULL;
		gboolean _tmp4_;
		_tmp3_ = afrodite_symbol_get_parent (self);
		_tmp4_ = afrodite_symbol_get_is_root (_tmp3_);
		_tmp1_ = _tmp4_;
	}
	if (_tmp1_) {
		gchar* _tmp5_;
		_tmp5_ = g_strdup (self->priv->_name);
		_g_free0 (_tmp0_);
		_tmp0_ = _tmp5_;
	} else {
		AfroditeSymbol* _tmp6_ = NULL;
		gchar* _tmp7_ = NULL;
		gchar* _tmp8_;
		gchar* _tmp9_ = NULL;
		_tmp6_ = afrodite_symbol_get_parent (self);
		_tmp7_ = afrodite_symbol_get_fully_qualified_name (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = g_strdup_printf ("%s.%s", _tmp8_, self->priv->_name);
		_g_free0 (_tmp0_);
		_tmp0_ = _tmp9_;
		_g_free0 (_tmp8_);
	}
	result = _tmp0_;
	return result;
}


AfroditeDataType* afrodite_symbol_get_return_type (AfroditeSymbol* self) {
	AfroditeDataType* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_return_type;
	return result;
}


void afrodite_symbol_set_return_type (AfroditeSymbol* self, AfroditeDataType* value) {
	AfroditeDataType* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _afrodite_data_type_ref0 (value);
	_afrodite_data_type_unref0 (self->priv->_return_type);
	self->priv->_return_type = _tmp0_;
	g_object_notify ((GObject *) self, "return-type");
}


AfroditeMemberType afrodite_symbol_get_member_type (AfroditeSymbol* self) {
	AfroditeMemberType result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_member_type;
	return result;
}


void afrodite_symbol_set_member_type (AfroditeSymbol* self, AfroditeMemberType value) {
	g_return_if_fail (self != NULL);
	self->priv->_member_type = value;
	g_object_notify ((GObject *) self, "member-type");
}


ValaList* afrodite_symbol_get_source_references (AfroditeSymbol* self) {
	ValaList* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_source_references;
	return result;
}


void afrodite_symbol_set_source_references (AfroditeSymbol* self, ValaList* value) {
	ValaList* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _vala_iterable_ref0 (value);
	_vala_iterable_unref0 (self->priv->_source_references);
	self->priv->_source_references = _tmp0_;
	g_object_notify ((GObject *) self, "source-references");
}


ValaList* afrodite_symbol_get_parameters (AfroditeSymbol* self) {
	ValaList* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_parameters;
	return result;
}


void afrodite_symbol_set_parameters (AfroditeSymbol* self, ValaList* value) {
	ValaList* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _vala_iterable_ref0 (value);
	_vala_iterable_unref0 (self->priv->_parameters);
	self->priv->_parameters = _tmp0_;
	g_object_notify ((GObject *) self, "parameters");
}


ValaList* afrodite_symbol_get_local_variables (AfroditeSymbol* self) {
	ValaList* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_local_variables;
	return result;
}


void afrodite_symbol_set_local_variables (AfroditeSymbol* self, ValaList* value) {
	ValaList* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _vala_iterable_ref0 (value);
	_vala_iterable_unref0 (self->priv->_local_variables);
	self->priv->_local_variables = _tmp0_;
	g_object_notify ((GObject *) self, "local-variables");
}


ValaList* afrodite_symbol_get_base_types (AfroditeSymbol* self) {
	ValaList* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_base_types;
	return result;
}


void afrodite_symbol_set_base_types (AfroditeSymbol* self, ValaList* value) {
	ValaList* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _vala_iterable_ref0 (value);
	_vala_iterable_unref0 (self->priv->_base_types);
	self->priv->_base_types = _tmp0_;
	g_object_notify ((GObject *) self, "base-types");
}


ValaList* afrodite_symbol_get_generic_type_arguments (AfroditeSymbol* self) {
	ValaList* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self->priv->_generic_type_arguments;
	return result;
}


void afrodite_symbol_set_generic_type_arguments (AfroditeSymbol* self, ValaList* value) {
	ValaList* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _vala_iterable_ref0 (value);
	_vala_iterable_unref0 (self->priv->_generic_type_arguments);
	self->priv->_generic_type_arguments = _tmp0_;
	g_object_notify ((GObject *) self, "generic-type-arguments");
}


gboolean afrodite_symbol_get_is_generic_type_argument (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_is_generic_type_argument;
	return result;
}


void afrodite_symbol_set_is_generic_type_argument (AfroditeSymbol* self, gboolean value) {
	g_return_if_fail (self != NULL);
	self->priv->_is_generic_type_argument = value;
	g_object_notify ((GObject *) self, "is-generic-type-argument");
}


AfroditeSymbolAccessibility afrodite_symbol_get_access (AfroditeSymbol* self) {
	AfroditeSymbolAccessibility result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_access;
	return result;
}


void afrodite_symbol_set_access (AfroditeSymbol* self, AfroditeSymbolAccessibility value) {
	g_return_if_fail (self != NULL);
	self->priv->_access = value;
	g_object_notify ((GObject *) self, "access");
}


gboolean afrodite_symbol_get_is_root (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_name == NULL;
	return result;
}


AfroditeDataType* afrodite_symbol_get_symbol_type (AfroditeSymbol* self) {
	AfroditeDataType* result;
	g_return_val_if_fail (self != NULL, NULL);
	if (self->priv->_symbol_type == NULL) {
		result = self->priv->_return_type;
		return result;
	}
	result = self->priv->_symbol_type;
	return result;
}


gint afrodite_symbol_get_static_child_count (AfroditeSymbol* self) {
	gint result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->_static_child_count;
	return result;
}


void afrodite_symbol_set_static_child_count (AfroditeSymbol* self, gint value) {
	gint delta;
	AfroditeSymbol* _tmp0_ = NULL;
	g_return_if_fail (self != NULL);
	delta = value - self->_static_child_count;
	self->_static_child_count = value;
	_tmp0_ = afrodite_symbol_get_parent (self);
	if (_tmp0_ != NULL) {
		AfroditeSymbol* _tmp1_ = NULL;
		AfroditeSymbol* _tmp2_ = NULL;
		gint _tmp3_;
		_tmp1_ = afrodite_symbol_get_parent (self);
		_tmp2_ = afrodite_symbol_get_parent (self);
		_tmp3_ = afrodite_symbol_get_static_child_count (_tmp2_);
		afrodite_symbol_set_static_child_count (_tmp2_, _tmp3_ + delta);
	}
	g_object_notify ((GObject *) self, "static-child-count");
}


gint afrodite_symbol_get_creation_method_child_count (AfroditeSymbol* self) {
	gint result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->_creation_method_child_count;
	return result;
}


void afrodite_symbol_set_creation_method_child_count (AfroditeSymbol* self, gint value) {
	gint delta;
	AfroditeSymbol* _tmp0_ = NULL;
	g_return_if_fail (self != NULL);
	delta = value - self->_creation_method_child_count;
	self->_creation_method_child_count = value;
	_tmp0_ = afrodite_symbol_get_parent (self);
	if (_tmp0_ != NULL) {
		AfroditeSymbol* _tmp1_ = NULL;
		AfroditeSymbol* _tmp2_ = NULL;
		gint _tmp3_;
		_tmp1_ = afrodite_symbol_get_parent (self);
		_tmp2_ = afrodite_symbol_get_parent (self);
		_tmp3_ = afrodite_symbol_get_creation_method_child_count (_tmp2_);
		afrodite_symbol_set_creation_method_child_count (_tmp2_, _tmp3_ + delta);
	}
	g_object_notify ((GObject *) self, "creation-method-child-count");
}


gboolean afrodite_symbol_get_has_children (AfroditeSymbol* self) {
	gboolean result;
	gboolean _tmp0_ = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	if (self->priv->_children != NULL) {
		gint _tmp1_;
		_tmp1_ = vala_collection_get_size ((ValaCollection*) self->priv->_children);
		_tmp0_ = _tmp1_ > 0;
	} else {
		_tmp0_ = FALSE;
	}
	result = _tmp0_;
	return result;
}


gboolean afrodite_symbol_get_has_resolved_targets (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->_resolved_targets != NULL;
	return result;
}


gboolean afrodite_symbol_get_has_parameters (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_parameters != NULL;
	return result;
}


gboolean afrodite_symbol_get_has_generic_type_arguments (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_generic_type_arguments != NULL;
	return result;
}


gboolean afrodite_symbol_get_has_local_variables (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_local_variables != NULL;
	return result;
}


gboolean afrodite_symbol_get_has_base_types (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_base_types != NULL;
	return result;
}


gboolean afrodite_symbol_get_has_source_references (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_source_references != NULL;
	return result;
}


gboolean afrodite_symbol_get_has_static_child (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->_static_child_count > 0;
	return result;
}


gboolean afrodite_symbol_get_has_creation_method_child (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->_creation_method_child_count > 0;
	return result;
}


gboolean afrodite_symbol_get_is_static (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = (self->binding & AFRODITE_MEMBER_BINDING_STATIC) != 0;
	return result;
}


gchar* afrodite_symbol_get_description (AfroditeSymbol* self) {
	gchar* result;
	gchar* _tmp0_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = afrodite_symbol_build_description (self, FALSE);
	result = _tmp0_;
	return result;
}


gchar* afrodite_symbol_get_markup_description (AfroditeSymbol* self) {
	gchar* result;
	gchar* _tmp0_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = afrodite_symbol_build_description (self, TRUE);
	result = _tmp0_;
	return result;
}


gchar* afrodite_symbol_get_info (AfroditeSymbol* self) {
	gchar* result;
	gchar* _tmp0_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = afrodite_symbol_build_info (self);
	result = _tmp0_;
	return result;
}


const gchar* afrodite_symbol_get_display_name (AfroditeSymbol* self) {
	const gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	if (self->priv->_display_name == NULL) {
		result = self->priv->_name;
		return result;
	}
	result = self->priv->_display_name;
	return result;
}


void afrodite_symbol_set_display_name (AfroditeSymbol* self, const gchar* value) {
	gchar* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = g_strdup (value);
	_g_free0 (self->priv->_display_name);
	self->priv->_display_name = _tmp0_;
	g_object_notify ((GObject *) self, "display-name");
}


gchar* afrodite_symbol_get_access_string (AfroditeSymbol* self) {
	gchar* result;
	gchar* res = NULL;
	AfroditeSymbolAccessibility _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = afrodite_symbol_get_access (self);
	switch (_tmp0_) {
		case AFRODITE_SYMBOL_ACCESSIBILITY_PRIVATE:
		{
			gchar* _tmp1_;
			_tmp1_ = g_strdup ("private");
			_g_free0 (res);
			res = _tmp1_;
			break;
		}
		case AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL:
		{
			gchar* _tmp2_;
			_tmp2_ = g_strdup ("internal");
			_g_free0 (res);
			res = _tmp2_;
			break;
		}
		case AFRODITE_SYMBOL_ACCESSIBILITY_PROTECTED:
		{
			gchar* _tmp3_;
			_tmp3_ = g_strdup ("protected");
			_g_free0 (res);
			res = _tmp3_;
			break;
		}
		case AFRODITE_SYMBOL_ACCESSIBILITY_PUBLIC:
		{
			gchar* _tmp4_;
			_tmp4_ = g_strdup ("public");
			_g_free0 (res);
			res = _tmp4_;
			break;
		}
		default:
		{
			gchar* _tmp5_;
			_tmp5_ = g_strdup ("unknown");
			_g_free0 (res);
			res = _tmp5_;
			break;
		}
	}
	result = res;
	return result;
}


gchar* afrodite_symbol_get_binding_string (AfroditeSymbol* self) {
	gchar* result;
	gchar* res = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	switch (self->binding) {
		case AFRODITE_MEMBER_BINDING_CLASS:
		{
			gchar* _tmp0_;
			_tmp0_ = g_strdup ("class");
			_g_free0 (res);
			res = _tmp0_;
			break;
		}
		case AFRODITE_MEMBER_BINDING_INSTANCE:
		{
			gchar* _tmp1_;
			_tmp1_ = g_strdup ("");
			_g_free0 (res);
			res = _tmp1_;
			break;
		}
		case AFRODITE_MEMBER_BINDING_STATIC:
		{
			gchar* _tmp2_;
			_tmp2_ = g_strdup ("static");
			_g_free0 (res);
			res = _tmp2_;
			break;
		}
		default:
		{
			gchar* _tmp3_;
			_tmp3_ = g_strdup ("unknown");
			_g_free0 (res);
			res = _tmp3_;
			break;
		}
	}
	result = res;
	return result;
}


gboolean afrodite_symbol_get_has_specialized_symbols (AfroditeSymbol* self) {
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_specialized_symbols != NULL;
	return result;
}


static void afrodite_symbol_class_init (AfroditeSymbolClass * klass) {
	AfroditeVoidType* _tmp0_ = NULL;
	AfroditeEllipsisType* _tmp1_ = NULL;
	afrodite_symbol_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (AfroditeSymbolPrivate));
	G_OBJECT_CLASS (klass)->get_property = _vala_afrodite_symbol_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_afrodite_symbol_set_property;
	G_OBJECT_CLASS (klass)->finalize = afrodite_symbol_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_PARENT, g_param_spec_object ("parent", "parent", "parent", AFRODITE_TYPE_SYMBOL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_CHILDREN, vala_param_spec_iterable ("children", "children", "children", VALA_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_RESOLVED_TARGETS, vala_param_spec_iterable ("resolved-targets", "resolved-targets", "resolved-targets", VALA_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_GENERIC_PARENT, g_param_spec_object ("generic-parent", "generic-parent", "generic-parent", AFRODITE_TYPE_SYMBOL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_NAME, g_param_spec_string ("name", "name", "name", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_FULLY_QUALIFIED_NAME, g_param_spec_string ("fully-qualified-name", "fully-qualified-name", "fully-qualified-name", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_RETURN_TYPE, afrodite_param_spec_data_type ("return-type", "return-type", "return-type", AFRODITE_TYPE_DATA_TYPE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_MEMBER_TYPE, g_param_spec_enum ("member-type", "member-type", "member-type", AFRODITE_TYPE_MEMBER_TYPE, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_SOURCE_REFERENCES, vala_param_spec_iterable ("source-references", "source-references", "source-references", VALA_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_PARAMETERS, vala_param_spec_iterable ("parameters", "parameters", "parameters", VALA_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_LOCAL_VARIABLES, vala_param_spec_iterable ("local-variables", "local-variables", "local-variables", VALA_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_BASE_TYPES, vala_param_spec_iterable ("base-types", "base-types", "base-types", VALA_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_GENERIC_TYPE_ARGUMENTS, vala_param_spec_iterable ("generic-type-arguments", "generic-type-arguments", "generic-type-arguments", VALA_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_IS_GENERIC_TYPE_ARGUMENT, g_param_spec_boolean ("is-generic-type-argument", "is-generic-type-argument", "is-generic-type-argument", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_ACCESS, g_param_spec_flags ("access", "access", "access", AFRODITE_TYPE_SYMBOL_ACCESSIBILITY, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_IS_ROOT, g_param_spec_boolean ("is-root", "is-root", "is-root", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_SYMBOL_TYPE, afrodite_param_spec_data_type ("symbol-type", "symbol-type", "symbol-type", AFRODITE_TYPE_DATA_TYPE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_STATIC_CHILD_COUNT, g_param_spec_int ("static-child-count", "static-child-count", "static-child-count", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_CREATION_METHOD_CHILD_COUNT, g_param_spec_int ("creation-method-child-count", "creation-method-child-count", "creation-method-child-count", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_CHILDREN, g_param_spec_boolean ("has-children", "has-children", "has-children", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_RESOLVED_TARGETS, g_param_spec_boolean ("has-resolved-targets", "has-resolved-targets", "has-resolved-targets", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_PARAMETERS, g_param_spec_boolean ("has-parameters", "has-parameters", "has-parameters", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_GENERIC_TYPE_ARGUMENTS, g_param_spec_boolean ("has-generic-type-arguments", "has-generic-type-arguments", "has-generic-type-arguments", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_LOCAL_VARIABLES, g_param_spec_boolean ("has-local-variables", "has-local-variables", "has-local-variables", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_BASE_TYPES, g_param_spec_boolean ("has-base-types", "has-base-types", "has-base-types", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_SOURCE_REFERENCES, g_param_spec_boolean ("has-source-references", "has-source-references", "has-source-references", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_STATIC_CHILD, g_param_spec_boolean ("has-static-child", "has-static-child", "has-static-child", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_CREATION_METHOD_CHILD, g_param_spec_boolean ("has-creation-method-child", "has-creation-method-child", "has-creation-method-child", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_IS_STATIC, g_param_spec_boolean ("is-static", "is-static", "is-static", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_DESCRIPTION, g_param_spec_string ("description", "description", "description", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_MARKUP_DESCRIPTION, g_param_spec_string ("markup-description", "markup-description", "markup-description", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_INFO, g_param_spec_string ("info", "info", "info", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_DISPLAY_NAME, g_param_spec_string ("display-name", "display-name", "display-name", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_ACCESS_STRING, g_param_spec_string ("access-string", "access-string", "access-string", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_BINDING_STRING, g_param_spec_string ("binding-string", "binding-string", "binding-string", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), AFRODITE_SYMBOL_HAS_SPECIALIZED_SYMBOLS, g_param_spec_boolean ("has-specialized-symbols", "has-specialized-symbols", "has-specialized-symbols", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	_tmp0_ = afrodite_void_type_new ();
	afrodite_symbol_VOID = _tmp0_;
	_tmp1_ = afrodite_ellipsis_type_new ();
	afrodite_symbol_ELLIPSIS = _tmp1_;
}


static void afrodite_symbol_instance_init (AfroditeSymbol * self) {
	self->priv = AFRODITE_SYMBOL_GET_PRIVATE (self);
	self->priv->_des = NULL;
	self->priv->_display_name = NULL;
	self->priv->_symbol_type = NULL;
	self->priv->_children = NULL;
	self->priv->_specialized_symbols = NULL;
	self->_resolved_targets = NULL;
	self->resolve_targets = NULL;
	self->priv->_access = AFRODITE_SYMBOL_ACCESSIBILITY_INTERNAL;
	self->binding = AFRODITE_MEMBER_BINDING_INSTANCE;
	self->is_virtual = FALSE;
	self->is_abstract = FALSE;
	self->overrides = FALSE;
	self->_static_child_count = 0;
	self->_creation_method_child_count = 0;
}


static void afrodite_symbol_finalize (GObject* obj) {
	AfroditeSymbol * self;
	self = AFRODITE_SYMBOL (obj);
	afrodite_symbol_destroy_thyself (self);
	_g_free0 (self->priv->_des);
	_g_free0 (self->priv->_display_name);
	_afrodite_data_type_unref0 (self->priv->_symbol_type);
	_vala_iterable_unref0 (self->priv->_children);
	_vala_iterable_unref0 (self->priv->_specialized_symbols);
	_vala_iterable_unref0 (self->_resolved_targets);
	_vala_iterable_unref0 (self->resolve_targets);
	_g_free0 (self->priv->_name);
	_afrodite_data_type_unref0 (self->priv->_return_type);
	_vala_iterable_unref0 (self->priv->_source_references);
	_vala_iterable_unref0 (self->priv->_parameters);
	_vala_iterable_unref0 (self->priv->_local_variables);
	_vala_iterable_unref0 (self->priv->_base_types);
	_vala_iterable_unref0 (self->priv->_generic_type_arguments);
	G_OBJECT_CLASS (afrodite_symbol_parent_class)->finalize (obj);
}


GType afrodite_symbol_get_type (void) {
	static volatile gsize afrodite_symbol_type_id__volatile = 0;
	if (g_once_init_enter (&afrodite_symbol_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (AfroditeSymbolClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) afrodite_symbol_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (AfroditeSymbol), 0, (GInstanceInitFunc) afrodite_symbol_instance_init, NULL };
		GType afrodite_symbol_type_id;
		afrodite_symbol_type_id = g_type_register_static (G_TYPE_OBJECT, "AfroditeSymbol", &g_define_type_info, 0);
		g_once_init_leave (&afrodite_symbol_type_id__volatile, afrodite_symbol_type_id);
	}
	return afrodite_symbol_type_id__volatile;
}


static void _vala_afrodite_symbol_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
	AfroditeSymbol * self;
	self = AFRODITE_SYMBOL (object);
	switch (property_id) {
		case AFRODITE_SYMBOL_PARENT:
		g_value_set_object (value, afrodite_symbol_get_parent (self));
		break;
		case AFRODITE_SYMBOL_CHILDREN:
		vala_value_set_iterable (value, afrodite_symbol_get_children (self));
		break;
		case AFRODITE_SYMBOL_RESOLVED_TARGETS:
		vala_value_set_iterable (value, afrodite_symbol_get_resolved_targets (self));
		break;
		case AFRODITE_SYMBOL_GENERIC_PARENT:
		g_value_set_object (value, afrodite_symbol_get_generic_parent (self));
		break;
		case AFRODITE_SYMBOL_NAME:
		g_value_set_string (value, afrodite_symbol_get_name (self));
		break;
		case AFRODITE_SYMBOL_FULLY_QUALIFIED_NAME:
		g_value_take_string (value, afrodite_symbol_get_fully_qualified_name (self));
		break;
		case AFRODITE_SYMBOL_RETURN_TYPE:
		afrodite_value_set_data_type (value, afrodite_symbol_get_return_type (self));
		break;
		case AFRODITE_SYMBOL_MEMBER_TYPE:
		g_value_set_enum (value, afrodite_symbol_get_member_type (self));
		break;
		case AFRODITE_SYMBOL_SOURCE_REFERENCES:
		vala_value_set_iterable (value, afrodite_symbol_get_source_references (self));
		break;
		case AFRODITE_SYMBOL_PARAMETERS:
		vala_value_set_iterable (value, afrodite_symbol_get_parameters (self));
		break;
		case AFRODITE_SYMBOL_LOCAL_VARIABLES:
		vala_value_set_iterable (value, afrodite_symbol_get_local_variables (self));
		break;
		case AFRODITE_SYMBOL_BASE_TYPES:
		vala_value_set_iterable (value, afrodite_symbol_get_base_types (self));
		break;
		case AFRODITE_SYMBOL_GENERIC_TYPE_ARGUMENTS:
		vala_value_set_iterable (value, afrodite_symbol_get_generic_type_arguments (self));
		break;
		case AFRODITE_SYMBOL_IS_GENERIC_TYPE_ARGUMENT:
		g_value_set_boolean (value, afrodite_symbol_get_is_generic_type_argument (self));
		break;
		case AFRODITE_SYMBOL_ACCESS:
		g_value_set_flags (value, afrodite_symbol_get_access (self));
		break;
		case AFRODITE_SYMBOL_IS_ROOT:
		g_value_set_boolean (value, afrodite_symbol_get_is_root (self));
		break;
		case AFRODITE_SYMBOL_SYMBOL_TYPE:
		afrodite_value_set_data_type (value, afrodite_symbol_get_symbol_type (self));
		break;
		case AFRODITE_SYMBOL_STATIC_CHILD_COUNT:
		g_value_set_int (value, afrodite_symbol_get_static_child_count (self));
		break;
		case AFRODITE_SYMBOL_CREATION_METHOD_CHILD_COUNT:
		g_value_set_int (value, afrodite_symbol_get_creation_method_child_count (self));
		break;
		case AFRODITE_SYMBOL_HAS_CHILDREN:
		g_value_set_boolean (value, afrodite_symbol_get_has_children (self));
		break;
		case AFRODITE_SYMBOL_HAS_RESOLVED_TARGETS:
		g_value_set_boolean (value, afrodite_symbol_get_has_resolved_targets (self));
		break;
		case AFRODITE_SYMBOL_HAS_PARAMETERS:
		g_value_set_boolean (value, afrodite_symbol_get_has_parameters (self));
		break;
		case AFRODITE_SYMBOL_HAS_GENERIC_TYPE_ARGUMENTS:
		g_value_set_boolean (value, afrodite_symbol_get_has_generic_type_arguments (self));
		break;
		case AFRODITE_SYMBOL_HAS_LOCAL_VARIABLES:
		g_value_set_boolean (value, afrodite_symbol_get_has_local_variables (self));
		break;
		case AFRODITE_SYMBOL_HAS_BASE_TYPES:
		g_value_set_boolean (value, afrodite_symbol_get_has_base_types (self));
		break;
		case AFRODITE_SYMBOL_HAS_SOURCE_REFERENCES:
		g_value_set_boolean (value, afrodite_symbol_get_has_source_references (self));
		break;
		case AFRODITE_SYMBOL_HAS_STATIC_CHILD:
		g_value_set_boolean (value, afrodite_symbol_get_has_static_child (self));
		break;
		case AFRODITE_SYMBOL_HAS_CREATION_METHOD_CHILD:
		g_value_set_boolean (value, afrodite_symbol_get_has_creation_method_child (self));
		break;
		case AFRODITE_SYMBOL_IS_STATIC:
		g_value_set_boolean (value, afrodite_symbol_get_is_static (self));
		break;
		case AFRODITE_SYMBOL_DESCRIPTION:
		g_value_take_string (value, afrodite_symbol_get_description (self));
		break;
		case AFRODITE_SYMBOL_MARKUP_DESCRIPTION:
		g_value_take_string (value, afrodite_symbol_get_markup_description (self));
		break;
		case AFRODITE_SYMBOL_INFO:
		g_value_take_string (value, afrodite_symbol_get_info (self));
		break;
		case AFRODITE_SYMBOL_DISPLAY_NAME:
		g_value_set_string (value, afrodite_symbol_get_display_name (self));
		break;
		case AFRODITE_SYMBOL_ACCESS_STRING:
		g_value_take_string (value, afrodite_symbol_get_access_string (self));
		break;
		case AFRODITE_SYMBOL_BINDING_STRING:
		g_value_take_string (value, afrodite_symbol_get_binding_string (self));
		break;
		case AFRODITE_SYMBOL_HAS_SPECIALIZED_SYMBOLS:
		g_value_set_boolean (value, afrodite_symbol_get_has_specialized_symbols (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


static void _vala_afrodite_symbol_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
	AfroditeSymbol * self;
	self = AFRODITE_SYMBOL (object);
	switch (property_id) {
		case AFRODITE_SYMBOL_PARENT:
		afrodite_symbol_set_parent (self, g_value_get_object (value));
		break;
		case AFRODITE_SYMBOL_GENERIC_PARENT:
		afrodite_symbol_set_generic_parent (self, g_value_get_object (value));
		break;
		case AFRODITE_SYMBOL_NAME:
		afrodite_symbol_set_name (self, g_value_get_string (value));
		break;
		case AFRODITE_SYMBOL_RETURN_TYPE:
		afrodite_symbol_set_return_type (self, afrodite_value_get_data_type (value));
		break;
		case AFRODITE_SYMBOL_MEMBER_TYPE:
		afrodite_symbol_set_member_type (self, g_value_get_enum (value));
		break;
		case AFRODITE_SYMBOL_SOURCE_REFERENCES:
		afrodite_symbol_set_source_references (self, vala_value_get_iterable (value));
		break;
		case AFRODITE_SYMBOL_PARAMETERS:
		afrodite_symbol_set_parameters (self, vala_value_get_iterable (value));
		break;
		case AFRODITE_SYMBOL_LOCAL_VARIABLES:
		afrodite_symbol_set_local_variables (self, vala_value_get_iterable (value));
		break;
		case AFRODITE_SYMBOL_BASE_TYPES:
		afrodite_symbol_set_base_types (self, vala_value_get_iterable (value));
		break;
		case AFRODITE_SYMBOL_GENERIC_TYPE_ARGUMENTS:
		afrodite_symbol_set_generic_type_arguments (self, vala_value_get_iterable (value));
		break;
		case AFRODITE_SYMBOL_IS_GENERIC_TYPE_ARGUMENT:
		afrodite_symbol_set_is_generic_type_argument (self, g_value_get_boolean (value));
		break;
		case AFRODITE_SYMBOL_ACCESS:
		afrodite_symbol_set_access (self, g_value_get_flags (value));
		break;
		case AFRODITE_SYMBOL_STATIC_CHILD_COUNT:
		afrodite_symbol_set_static_child_count (self, g_value_get_int (value));
		break;
		case AFRODITE_SYMBOL_CREATION_METHOD_CHILD_COUNT:
		afrodite_symbol_set_creation_method_child_count (self, g_value_get_int (value));
		break;
		case AFRODITE_SYMBOL_DISPLAY_NAME:
		afrodite_symbol_set_display_name (self, g_value_get_string (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


GType afrodite_member_type_get_type (void) {
	static volatile gsize afrodite_member_type_type_id__volatile = 0;
	if (g_once_init_enter (&afrodite_member_type_type_id__volatile)) {
		static const GEnumValue values[] = {{AFRODITE_MEMBER_TYPE_NONE, "AFRODITE_MEMBER_TYPE_NONE", "none"}, {AFRODITE_MEMBER_TYPE_VOID, "AFRODITE_MEMBER_TYPE_VOID", "void"}, {AFRODITE_MEMBER_TYPE_CONSTANT, "AFRODITE_MEMBER_TYPE_CONSTANT", "constant"}, {AFRODITE_MEMBER_TYPE_ENUM, "AFRODITE_MEMBER_TYPE_ENUM", "enum"}, {AFRODITE_MEMBER_TYPE_ENUM_VALUE, "AFRODITE_MEMBER_TYPE_ENUM_VALUE", "enum-value"}, {AFRODITE_MEMBER_TYPE_FIELD, "AFRODITE_MEMBER_TYPE_FIELD", "field"}, {AFRODITE_MEMBER_TYPE_PROPERTY, "AFRODITE_MEMBER_TYPE_PROPERTY", "property"}, {AFRODITE_MEMBER_TYPE_LOCAL_VARIABLE, "AFRODITE_MEMBER_TYPE_LOCAL_VARIABLE", "local-variable"}, {AFRODITE_MEMBER_TYPE_SIGNAL, "AFRODITE_MEMBER_TYPE_SIGNAL", "signal"}, {AFRODITE_MEMBER_TYPE_CREATION_METHOD, "AFRODITE_MEMBER_TYPE_CREATION_METHOD", "creation-method"}, {AFRODITE_MEMBER_TYPE_CONSTRUCTOR, "AFRODITE_MEMBER_TYPE_CONSTRUCTOR", "constructor"}, {AFRODITE_MEMBER_TYPE_DESTRUCTOR, "AFRODITE_MEMBER_TYPE_DESTRUCTOR", "destructor"}, {AFRODITE_MEMBER_TYPE_METHOD, "AFRODITE_MEMBER_TYPE_METHOD", "method"}, {AFRODITE_MEMBER_TYPE_DELEGATE, "AFRODITE_MEMBER_TYPE_DELEGATE", "delegate"}, {AFRODITE_MEMBER_TYPE_PARAMETER, "AFRODITE_MEMBER_TYPE_PARAMETER", "parameter"}, {AFRODITE_MEMBER_TYPE_TYPE_PARAMETER, "AFRODITE_MEMBER_TYPE_TYPE_PARAMETER", "type-parameter"}, {AFRODITE_MEMBER_TYPE_ERROR_DOMAIN, "AFRODITE_MEMBER_TYPE_ERROR_DOMAIN", "error-domain"}, {AFRODITE_MEMBER_TYPE_ERROR_CODE, "AFRODITE_MEMBER_TYPE_ERROR_CODE", "error-code"}, {AFRODITE_MEMBER_TYPE_NAMESPACE, "AFRODITE_MEMBER_TYPE_NAMESPACE", "namespace"}, {AFRODITE_MEMBER_TYPE_STRUCT, "AFRODITE_MEMBER_TYPE_STRUCT", "struct"}, {AFRODITE_MEMBER_TYPE_CLASS, "AFRODITE_MEMBER_TYPE_CLASS", "class"}, {AFRODITE_MEMBER_TYPE_INTERFACE, "AFRODITE_MEMBER_TYPE_INTERFACE", "interface"}, {AFRODITE_MEMBER_TYPE_SCOPED_CODE_NODE, "AFRODITE_MEMBER_TYPE_SCOPED_CODE_NODE", "scoped-code-node"}, {0, NULL, NULL}};
		GType afrodite_member_type_type_id;
		afrodite_member_type_type_id = g_enum_register_static ("AfroditeMemberType", values);
		g_once_init_leave (&afrodite_member_type_type_id__volatile, afrodite_member_type_type_id);
	}
	return afrodite_member_type_type_id__volatile;
}



