/* gca-semantic-value.c generated by valac 0.28.0.11-bbdd, the Vala compiler
 * generated from gca-semantic-value.vala, do not modify */


#include <glib.h>
#include <glib-object.h>


#define GCA_TYPE_SOURCE_RANGE_SUPPORT (gca_source_range_support_get_type ())
#define GCA_SOURCE_RANGE_SUPPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCA_TYPE_SOURCE_RANGE_SUPPORT, GcaSourceRangeSupport))
#define GCA_IS_SOURCE_RANGE_SUPPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCA_TYPE_SOURCE_RANGE_SUPPORT))
#define GCA_SOURCE_RANGE_SUPPORT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCA_TYPE_SOURCE_RANGE_SUPPORT, GcaSourceRangeSupportIface))

typedef struct _GcaSourceRangeSupport GcaSourceRangeSupport;
typedef struct _GcaSourceRangeSupportIface GcaSourceRangeSupportIface;

#define GCA_TYPE_SOURCE_RANGE (gca_source_range_get_type ())

#define GCA_TYPE_SOURCE_LOCATION (gca_source_location_get_type ())
typedef struct _GcaSourceLocation GcaSourceLocation;
typedef struct _GcaSourceRange GcaSourceRange;

#define GCA_TYPE_SEMANTIC_VALUE (gca_semantic_value_get_type ())
#define GCA_SEMANTIC_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCA_TYPE_SEMANTIC_VALUE, GcaSemanticValue))
#define GCA_SEMANTIC_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCA_TYPE_SEMANTIC_VALUE, GcaSemanticValueClass))
#define GCA_IS_SEMANTIC_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCA_TYPE_SEMANTIC_VALUE))
#define GCA_IS_SEMANTIC_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCA_TYPE_SEMANTIC_VALUE))
#define GCA_SEMANTIC_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCA_TYPE_SEMANTIC_VALUE, GcaSemanticValueClass))

typedef struct _GcaSemanticValue GcaSemanticValue;
typedef struct _GcaSemanticValueClass GcaSemanticValueClass;
typedef struct _GcaSemanticValuePrivate GcaSemanticValuePrivate;

#define GCA_SEMANTIC_VALUE_TYPE_KIND (gca_semantic_value_kind_get_type ())

#define GCA_SEMANTIC_VALUE_TYPE_REFERENCE_TYPE (gca_semantic_value_reference_type_get_type ())
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))

struct _GcaSourceLocation {
	gint line;
	gint column;
};

struct _GcaSourceRange {
	GcaSourceLocation start;
	GcaSourceLocation end;
};

struct _GcaSourceRangeSupportIface {
	GTypeInterface parent_iface;
	GcaSourceRange* (*get_ranges) (GcaSourceRangeSupport* self, int* result_length1);
};

struct _GcaSemanticValue {
	GObject parent_instance;
	GcaSemanticValuePrivate * priv;
};

struct _GcaSemanticValueClass {
	GObjectClass parent_class;
	GcaSemanticValue* (*reference) (GcaSemanticValue* self, gint idx);
	GcaSemanticValue* (*get_definition) (GcaSemanticValue* self);
	GcaSemanticValue* (*get_declaration) (GcaSemanticValue* self);
	gint (*get_num_references) (GcaSemanticValue* self);
	GcaSemanticValue* (*get_next) (GcaSemanticValue* self);
	GcaSemanticValue* (*get_previous) (GcaSemanticValue* self);
	GcaSemanticValue* (*get_up) (GcaSemanticValue* self);
	GcaSemanticValue* (*get_down) (GcaSemanticValue* self);
};

typedef enum  {
	GCA_SEMANTIC_VALUE_KIND_NONE,
	GCA_SEMANTIC_VALUE_KIND_STRUCT,
	GCA_SEMANTIC_VALUE_KIND_UNION,
	GCA_SEMANTIC_VALUE_KIND_CLASS,
	GCA_SEMANTIC_VALUE_KIND_ENUM,
	GCA_SEMANTIC_VALUE_KIND_FIELD,
	GCA_SEMANTIC_VALUE_KIND_ENUM_VALUE,
	GCA_SEMANTIC_VALUE_KIND_FUNCTION,
	GCA_SEMANTIC_VALUE_KIND_MEMBER_FUNCTION,
	GCA_SEMANTIC_VALUE_KIND_CONSTRUCTOR,
	GCA_SEMANTIC_VALUE_KIND_DESTRUCTOR,
	GCA_SEMANTIC_VALUE_KIND_VARIABLE,
	GCA_SEMANTIC_VALUE_KIND_PARAMETER,
	GCA_SEMANTIC_VALUE_KIND_TYPEDEF,
	GCA_SEMANTIC_VALUE_KIND_NAMESPACE,
	GCA_SEMANTIC_VALUE_KIND_BLOCK
} GcaSemanticValueKind;

typedef enum  {
	GCA_SEMANTIC_VALUE_REFERENCE_TYPE_NONE = 1 << 0,
	GCA_SEMANTIC_VALUE_REFERENCE_TYPE_DECLARATION = 1 << 0,
	GCA_SEMANTIC_VALUE_REFERENCE_TYPE_REFERENCE = 1 << 1,
	GCA_SEMANTIC_VALUE_REFERENCE_TYPE_DEFINITION = 1 << 2
} GcaSemanticValueReferenceType;

struct _GcaSemanticValuePrivate {
	GcaSourceRange d_range;
	GcaSemanticValueKind d_kind;
	GcaSemanticValueReferenceType d_rtype;
};


static gpointer gca_semantic_value_parent_class = NULL;
static GcaSourceRangeSupportIface* gca_semantic_value_gca_source_range_support_parent_iface = NULL;

GType gca_source_range_get_type (void) G_GNUC_CONST;
GType gca_source_location_get_type (void) G_GNUC_CONST;
GcaSourceLocation* gca_source_location_dup (const GcaSourceLocation* self);
void gca_source_location_free (GcaSourceLocation* self);
GcaSourceRange* gca_source_range_dup (const GcaSourceRange* self);
void gca_source_range_free (GcaSourceRange* self);
GType gca_source_range_support_get_type (void) G_GNUC_CONST;
GType gca_semantic_value_get_type (void) G_GNUC_CONST;
GType gca_semantic_value_kind_get_type (void) G_GNUC_CONST;
GType gca_semantic_value_reference_type_get_type (void) G_GNUC_CONST;
#define GCA_SEMANTIC_VALUE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GCA_TYPE_SEMANTIC_VALUE, GcaSemanticValuePrivate))
enum  {
	GCA_SEMANTIC_VALUE_DUMMY_PROPERTY,
	GCA_SEMANTIC_VALUE_KIND,
	GCA_SEMANTIC_VALUE_REFERENCE_TYPE,
	GCA_SEMANTIC_VALUE_DEFINITION,
	GCA_SEMANTIC_VALUE_DECLARATION,
	GCA_SEMANTIC_VALUE_NUM_REFERENCES,
	GCA_SEMANTIC_VALUE_NEXT,
	GCA_SEMANTIC_VALUE_PREVIOUS,
	GCA_SEMANTIC_VALUE_UP,
	GCA_SEMANTIC_VALUE_DOWN
};
GcaSemanticValue* gca_semantic_value_construct (GType object_type, GcaSourceRange* range, GcaSemanticValueKind kind, GcaSemanticValueReferenceType rtype);
GcaSemanticValue* gca_semantic_value_find_child (GcaSemanticValue* self, GcaSemanticValueKind kind);
GcaSemanticValue* gca_semantic_value_get_down (GcaSemanticValue* self);
GcaSemanticValueKind gca_semantic_value_get_kind (GcaSemanticValue* self);
GcaSemanticValue* gca_semantic_value_get_next (GcaSemanticValue* self);
GcaSemanticValue* gca_semantic_value_reference (GcaSemanticValue* self, gint idx);
static GcaSemanticValue* gca_semantic_value_real_reference (GcaSemanticValue* self, gint idx);
GcaSourceRange* gca_semantic_value_get_range (GcaSemanticValue* self);
GcaSemanticValueReferenceType gca_semantic_value_get_reference_type (GcaSemanticValue* self);
GcaSemanticValue* gca_semantic_value_get_definition (GcaSemanticValue* self);
GcaSemanticValue* gca_semantic_value_get_declaration (GcaSemanticValue* self);
gint gca_semantic_value_get_num_references (GcaSemanticValue* self);
GcaSemanticValue* gca_semantic_value_get_previous (GcaSemanticValue* self);
GcaSemanticValue* gca_semantic_value_get_up (GcaSemanticValue* self);
static void gca_semantic_value_finalize (GObject* obj);
static void _vala_gca_semantic_value_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);


GType gca_semantic_value_kind_get_type (void) {
	static volatile gsize gca_semantic_value_kind_type_id__volatile = 0;
	if (g_once_init_enter (&gca_semantic_value_kind_type_id__volatile)) {
		static const GEnumValue values[] = {{GCA_SEMANTIC_VALUE_KIND_NONE, "GCA_SEMANTIC_VALUE_KIND_NONE", "none"}, {GCA_SEMANTIC_VALUE_KIND_STRUCT, "GCA_SEMANTIC_VALUE_KIND_STRUCT", "struct"}, {GCA_SEMANTIC_VALUE_KIND_UNION, "GCA_SEMANTIC_VALUE_KIND_UNION", "union"}, {GCA_SEMANTIC_VALUE_KIND_CLASS, "GCA_SEMANTIC_VALUE_KIND_CLASS", "class"}, {GCA_SEMANTIC_VALUE_KIND_ENUM, "GCA_SEMANTIC_VALUE_KIND_ENUM", "enum"}, {GCA_SEMANTIC_VALUE_KIND_FIELD, "GCA_SEMANTIC_VALUE_KIND_FIELD", "field"}, {GCA_SEMANTIC_VALUE_KIND_ENUM_VALUE, "GCA_SEMANTIC_VALUE_KIND_ENUM_VALUE", "enum-value"}, {GCA_SEMANTIC_VALUE_KIND_FUNCTION, "GCA_SEMANTIC_VALUE_KIND_FUNCTION", "function"}, {GCA_SEMANTIC_VALUE_KIND_MEMBER_FUNCTION, "GCA_SEMANTIC_VALUE_KIND_MEMBER_FUNCTION", "member-function"}, {GCA_SEMANTIC_VALUE_KIND_CONSTRUCTOR, "GCA_SEMANTIC_VALUE_KIND_CONSTRUCTOR", "constructor"}, {GCA_SEMANTIC_VALUE_KIND_DESTRUCTOR, "GCA_SEMANTIC_VALUE_KIND_DESTRUCTOR", "destructor"}, {GCA_SEMANTIC_VALUE_KIND_VARIABLE, "GCA_SEMANTIC_VALUE_KIND_VARIABLE", "variable"}, {GCA_SEMANTIC_VALUE_KIND_PARAMETER, "GCA_SEMANTIC_VALUE_KIND_PARAMETER", "parameter"}, {GCA_SEMANTIC_VALUE_KIND_TYPEDEF, "GCA_SEMANTIC_VALUE_KIND_TYPEDEF", "typedef"}, {GCA_SEMANTIC_VALUE_KIND_NAMESPACE, "GCA_SEMANTIC_VALUE_KIND_NAMESPACE", "namespace"}, {GCA_SEMANTIC_VALUE_KIND_BLOCK, "GCA_SEMANTIC_VALUE_KIND_BLOCK", "block"}, {0, NULL, NULL}};
		GType gca_semantic_value_kind_type_id;
		gca_semantic_value_kind_type_id = g_enum_register_static ("GcaSemanticValueKind", values);
		g_once_init_leave (&gca_semantic_value_kind_type_id__volatile, gca_semantic_value_kind_type_id);
	}
	return gca_semantic_value_kind_type_id__volatile;
}


GType gca_semantic_value_reference_type_get_type (void) {
	static volatile gsize gca_semantic_value_reference_type_type_id__volatile = 0;
	if (g_once_init_enter (&gca_semantic_value_reference_type_type_id__volatile)) {
		static const GFlagsValue values[] = {{GCA_SEMANTIC_VALUE_REFERENCE_TYPE_NONE, "GCA_SEMANTIC_VALUE_REFERENCE_TYPE_NONE", "none"}, {GCA_SEMANTIC_VALUE_REFERENCE_TYPE_DECLARATION, "GCA_SEMANTIC_VALUE_REFERENCE_TYPE_DECLARATION", "declaration"}, {GCA_SEMANTIC_VALUE_REFERENCE_TYPE_REFERENCE, "GCA_SEMANTIC_VALUE_REFERENCE_TYPE_REFERENCE", "reference"}, {GCA_SEMANTIC_VALUE_REFERENCE_TYPE_DEFINITION, "GCA_SEMANTIC_VALUE_REFERENCE_TYPE_DEFINITION", "definition"}, {0, NULL, NULL}};
		GType gca_semantic_value_reference_type_type_id;
		gca_semantic_value_reference_type_type_id = g_flags_register_static ("GcaSemanticValueReferenceType", values);
		g_once_init_leave (&gca_semantic_value_reference_type_type_id__volatile, gca_semantic_value_reference_type_type_id);
	}
	return gca_semantic_value_reference_type_type_id__volatile;
}


GcaSemanticValue* gca_semantic_value_construct (GType object_type, GcaSourceRange* range, GcaSemanticValueKind kind, GcaSemanticValueReferenceType rtype) {
	GcaSemanticValue * self = NULL;
	GcaSourceRange _tmp0_ = {0};
	GcaSemanticValueKind _tmp1_ = 0;
	GcaSemanticValueReferenceType _tmp2_ = 0;
	g_return_val_if_fail (range != NULL, NULL);
	self = (GcaSemanticValue*) g_object_new (object_type, NULL);
	_tmp0_ = *range;
	self->priv->d_range = _tmp0_;
	_tmp1_ = kind;
	self->priv->d_kind = _tmp1_;
	_tmp2_ = rtype;
	self->priv->d_rtype = _tmp2_;
	return self;
}


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


GcaSemanticValue* gca_semantic_value_find_child (GcaSemanticValue* self, GcaSemanticValueKind kind) {
	GcaSemanticValue* result = NULL;
	GcaSemanticValue* child = NULL;
	GcaSemanticValue* _tmp0_ = NULL;
	GcaSemanticValue* _tmp1_ = NULL;
	GcaSemanticValue* _tmp2_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = gca_semantic_value_get_down (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _g_object_ref0 (_tmp1_);
	child = _tmp2_;
	while (TRUE) {
		GcaSemanticValue* _tmp3_ = NULL;
		GcaSemanticValue* _tmp4_ = NULL;
		GcaSemanticValueKind _tmp5_ = 0;
		GcaSemanticValueKind _tmp6_ = 0;
		GcaSemanticValueKind _tmp7_ = 0;
		GcaSemanticValue* _tmp8_ = NULL;
		GcaSemanticValue* _tmp9_ = NULL;
		GcaSemanticValue* _tmp10_ = NULL;
		GcaSemanticValue* _tmp11_ = NULL;
		_tmp3_ = child;
		if (!(_tmp3_ != NULL)) {
			break;
		}
		_tmp4_ = child;
		_tmp5_ = gca_semantic_value_get_kind (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = kind;
		if (_tmp6_ == _tmp7_) {
			result = child;
			return result;
		}
		_tmp8_ = child;
		_tmp9_ = gca_semantic_value_get_next (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = _g_object_ref0 (_tmp10_);
		_g_object_unref0 (child);
		child = _tmp11_;
	}
	result = child;
	return result;
}


static GcaSemanticValue* gca_semantic_value_real_reference (GcaSemanticValue* self, gint idx) {
	g_critical ("Type `%s' does not implement abstract method `gca_semantic_value_reference'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}


GcaSemanticValue* gca_semantic_value_reference (GcaSemanticValue* self, gint idx) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->reference (self, idx);
}


static gpointer _gca_source_range_dup0 (gpointer self) {
	return self ? gca_source_range_dup (self) : NULL;
}


GcaSourceRange* gca_semantic_value_get_range (GcaSemanticValue* self) {
	GcaSourceRange* result;
	GcaSourceRange _tmp0_ = {0};
	GcaSourceRange* _tmp1_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->d_range;
	_tmp1_ = _gca_source_range_dup0 (&_tmp0_);
	result = _tmp1_;
	return result;
}


static GcaSourceRange* gca_semantic_value_real_get_ranges (GcaSourceRangeSupport* base, int* result_length1) {
	GcaSourceRange* result;
	GcaSemanticValue* self;
	GcaSourceRange _tmp0_ = {0};
	GcaSourceRange* _tmp1_ = NULL;
	GcaSourceRange* _tmp2_ = NULL;
	gint _tmp2__length1 = 0;
	self = (GcaSemanticValue*) base;
	_tmp0_ = self->priv->d_range;
	_tmp1_ = g_new0 (GcaSourceRange, 1);
	_tmp1_[0] = _tmp0_;
	_tmp2_ = _tmp1_;
	_tmp2__length1 = 1;
	if (result_length1) {
		*result_length1 = _tmp2__length1;
	}
	result = _tmp2_;
	return result;
}


GcaSemanticValueKind gca_semantic_value_get_kind (GcaSemanticValue* self) {
	GcaSemanticValueKind result;
	GcaSemanticValueKind _tmp0_ = 0;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->d_kind;
	result = _tmp0_;
	return result;
}


GcaSemanticValueReferenceType gca_semantic_value_get_reference_type (GcaSemanticValue* self) {
	GcaSemanticValueReferenceType result;
	GcaSemanticValueReferenceType _tmp0_ = 0;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->d_rtype;
	result = _tmp0_;
	return result;
}


GcaSemanticValue* gca_semantic_value_get_definition (GcaSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->get_definition (self);
}


GcaSemanticValue* gca_semantic_value_get_declaration (GcaSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->get_declaration (self);
}


gint gca_semantic_value_get_num_references (GcaSemanticValue* self) {
	g_return_val_if_fail (self != NULL, 0);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->get_num_references (self);
}


GcaSemanticValue* gca_semantic_value_get_next (GcaSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->get_next (self);
}


GcaSemanticValue* gca_semantic_value_get_previous (GcaSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->get_previous (self);
}


GcaSemanticValue* gca_semantic_value_get_up (GcaSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->get_up (self);
}


GcaSemanticValue* gca_semantic_value_get_down (GcaSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCA_SEMANTIC_VALUE_GET_CLASS (self)->get_down (self);
}


static void gca_semantic_value_class_init (GcaSemanticValueClass * klass) {
	gca_semantic_value_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (GcaSemanticValuePrivate));
	((GcaSemanticValueClass *) klass)->reference = gca_semantic_value_real_reference;
	G_OBJECT_CLASS (klass)->get_property = _vala_gca_semantic_value_get_property;
	G_OBJECT_CLASS (klass)->finalize = gca_semantic_value_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_KIND, g_param_spec_enum ("kind", "kind", "kind", GCA_SEMANTIC_VALUE_TYPE_KIND, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_REFERENCE_TYPE, g_param_spec_flags ("reference-type", "reference-type", "reference-type", GCA_SEMANTIC_VALUE_TYPE_REFERENCE_TYPE, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_DEFINITION, g_param_spec_object ("definition", "definition", "definition", GCA_TYPE_SEMANTIC_VALUE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_DECLARATION, g_param_spec_object ("declaration", "declaration", "declaration", GCA_TYPE_SEMANTIC_VALUE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_NUM_REFERENCES, g_param_spec_int ("num-references", "num-references", "num-references", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_NEXT, g_param_spec_object ("next", "next", "next", GCA_TYPE_SEMANTIC_VALUE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_PREVIOUS, g_param_spec_object ("previous", "previous", "previous", GCA_TYPE_SEMANTIC_VALUE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_UP, g_param_spec_object ("up", "up", "up", GCA_TYPE_SEMANTIC_VALUE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCA_SEMANTIC_VALUE_DOWN, g_param_spec_object ("down", "down", "down", GCA_TYPE_SEMANTIC_VALUE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
}


static void gca_semantic_value_gca_source_range_support_interface_init (GcaSourceRangeSupportIface * iface) {
	gca_semantic_value_gca_source_range_support_parent_iface = g_type_interface_peek_parent (iface);
	iface->get_ranges = gca_semantic_value_real_get_ranges;
}


static void gca_semantic_value_instance_init (GcaSemanticValue * self) {
	self->priv = GCA_SEMANTIC_VALUE_GET_PRIVATE (self);
}


static void gca_semantic_value_finalize (GObject* obj) {
	GcaSemanticValue * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GCA_TYPE_SEMANTIC_VALUE, GcaSemanticValue);
	G_OBJECT_CLASS (gca_semantic_value_parent_class)->finalize (obj);
}


GType gca_semantic_value_get_type (void) {
	static volatile gsize gca_semantic_value_type_id__volatile = 0;
	if (g_once_init_enter (&gca_semantic_value_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (GcaSemanticValueClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gca_semantic_value_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GcaSemanticValue), 0, (GInstanceInitFunc) gca_semantic_value_instance_init, NULL };
		static const GInterfaceInfo gca_source_range_support_info = { (GInterfaceInitFunc) gca_semantic_value_gca_source_range_support_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		GType gca_semantic_value_type_id;
		gca_semantic_value_type_id = g_type_register_static (G_TYPE_OBJECT, "GcaSemanticValue", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
		g_type_add_interface_static (gca_semantic_value_type_id, GCA_TYPE_SOURCE_RANGE_SUPPORT, &gca_source_range_support_info);
		g_once_init_leave (&gca_semantic_value_type_id__volatile, gca_semantic_value_type_id);
	}
	return gca_semantic_value_type_id__volatile;
}


static void _vala_gca_semantic_value_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
	GcaSemanticValue * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, GCA_TYPE_SEMANTIC_VALUE, GcaSemanticValue);
	switch (property_id) {
		case GCA_SEMANTIC_VALUE_KIND:
		g_value_set_enum (value, gca_semantic_value_get_kind (self));
		break;
		case GCA_SEMANTIC_VALUE_REFERENCE_TYPE:
		g_value_set_flags (value, gca_semantic_value_get_reference_type (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}



