/* gcp-semantic-value.c generated by valac 0.19.0, the Vala compiler
 * generated from gcp-semantic-value.vala, do not modify */


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


#define GCP_TYPE_SOURCE_RANGE_SUPPORT (gcp_source_range_support_get_type ())
#define GCP_SOURCE_RANGE_SUPPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCP_TYPE_SOURCE_RANGE_SUPPORT, GcpSourceRangeSupport))
#define GCP_IS_SOURCE_RANGE_SUPPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCP_TYPE_SOURCE_RANGE_SUPPORT))
#define GCP_SOURCE_RANGE_SUPPORT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GCP_TYPE_SOURCE_RANGE_SUPPORT, GcpSourceRangeSupportIface))

typedef struct _GcpSourceRangeSupport GcpSourceRangeSupport;
typedef struct _GcpSourceRangeSupportIface GcpSourceRangeSupportIface;

#define GCP_TYPE_SOURCE_RANGE (gcp_source_range_get_type ())
#define GCP_SOURCE_RANGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCP_TYPE_SOURCE_RANGE, GcpSourceRange))
#define GCP_SOURCE_RANGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCP_TYPE_SOURCE_RANGE, GcpSourceRangeClass))
#define GCP_IS_SOURCE_RANGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCP_TYPE_SOURCE_RANGE))
#define GCP_IS_SOURCE_RANGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCP_TYPE_SOURCE_RANGE))
#define GCP_SOURCE_RANGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCP_TYPE_SOURCE_RANGE, GcpSourceRangeClass))

typedef struct _GcpSourceRange GcpSourceRange;
typedef struct _GcpSourceRangeClass GcpSourceRangeClass;

#define GCP_TYPE_SEMANTIC_VALUE (gcp_semantic_value_get_type ())
#define GCP_SEMANTIC_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCP_TYPE_SEMANTIC_VALUE, GcpSemanticValue))
#define GCP_SEMANTIC_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCP_TYPE_SEMANTIC_VALUE, GcpSemanticValueClass))
#define GCP_IS_SEMANTIC_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCP_TYPE_SEMANTIC_VALUE))
#define GCP_IS_SEMANTIC_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCP_TYPE_SEMANTIC_VALUE))
#define GCP_SEMANTIC_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCP_TYPE_SEMANTIC_VALUE, GcpSemanticValueClass))

typedef struct _GcpSemanticValue GcpSemanticValue;
typedef struct _GcpSemanticValueClass GcpSemanticValueClass;
typedef struct _GcpSemanticValuePrivate GcpSemanticValuePrivate;

#define GCP_SEMANTIC_VALUE_TYPE_KIND (gcp_semantic_value_kind_get_type ())

#define GCP_SEMANTIC_VALUE_TYPE_REFERENCE_TYPE (gcp_semantic_value_reference_type_get_type ())
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))

struct _GcpSourceRangeSupportIface {
	GTypeInterface parent_iface;
	GcpSourceRange* (*get_range) (GcpSourceRangeSupport* self);
	GcpSourceRange** (*get_ranges) (GcpSourceRangeSupport* self, int* result_length1);
};

struct _GcpSemanticValue {
	GObject parent_instance;
	GcpSemanticValuePrivate * priv;
};

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

typedef enum  {
	GCP_SEMANTIC_VALUE_KIND_NONE,
	GCP_SEMANTIC_VALUE_KIND_STRUCT,
	GCP_SEMANTIC_VALUE_KIND_UNION,
	GCP_SEMANTIC_VALUE_KIND_CLASS,
	GCP_SEMANTIC_VALUE_KIND_ENUM,
	GCP_SEMANTIC_VALUE_KIND_FIELD,
	GCP_SEMANTIC_VALUE_KIND_ENUM_VALUE,
	GCP_SEMANTIC_VALUE_KIND_FUNCTION,
	GCP_SEMANTIC_VALUE_KIND_MEMBER_FUNCTION,
	GCP_SEMANTIC_VALUE_KIND_CONSTRUCTOR,
	GCP_SEMANTIC_VALUE_KIND_DESTRUCTOR,
	GCP_SEMANTIC_VALUE_KIND_VARIABLE,
	GCP_SEMANTIC_VALUE_KIND_PARAMETER,
	GCP_SEMANTIC_VALUE_KIND_TYPEDEF,
	GCP_SEMANTIC_VALUE_KIND_NAMESPACE,
	GCP_SEMANTIC_VALUE_KIND_BLOCK
} GcpSemanticValueKind;

typedef enum  {
	GCP_SEMANTIC_VALUE_REFERENCE_TYPE_NONE = 1 << 0,
	GCP_SEMANTIC_VALUE_REFERENCE_TYPE_DECLARATION = 1 << 0,
	GCP_SEMANTIC_VALUE_REFERENCE_TYPE_REFERENCE = 1 << 1,
	GCP_SEMANTIC_VALUE_REFERENCE_TYPE_DEFINITION = 1 << 2
} GcpSemanticValueReferenceType;

struct _GcpSemanticValuePrivate {
	GcpSourceRange* d_range;
	GcpSemanticValueKind d_kind;
	GcpSemanticValueReferenceType d_rtype;
};


static gpointer gcp_semantic_value_parent_class = NULL;
static GcpSourceRangeSupportIface* gcp_semantic_value_gcp_source_range_support_parent_iface = NULL;

GType gcp_source_range_get_type (void) G_GNUC_CONST;
GType gcp_source_range_support_get_type (void) G_GNUC_CONST;
GType gcp_semantic_value_get_type (void) G_GNUC_CONST;
GType gcp_semantic_value_kind_get_type (void) G_GNUC_CONST;
GType gcp_semantic_value_reference_type_get_type (void) G_GNUC_CONST;
#define GCP_SEMANTIC_VALUE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GCP_TYPE_SEMANTIC_VALUE, GcpSemanticValuePrivate))
enum  {
	GCP_SEMANTIC_VALUE_DUMMY_PROPERTY,
	GCP_SEMANTIC_VALUE_RANGE,
	GCP_SEMANTIC_VALUE_KIND,
	GCP_SEMANTIC_VALUE_REFERENCE_TYPE,
	GCP_SEMANTIC_VALUE_DEFINITION,
	GCP_SEMANTIC_VALUE_DECLARATION,
	GCP_SEMANTIC_VALUE_NUM_REFERENCES,
	GCP_SEMANTIC_VALUE_NEXT,
	GCP_SEMANTIC_VALUE_PREVIOUS,
	GCP_SEMANTIC_VALUE_UP,
	GCP_SEMANTIC_VALUE_DOWN
};
GcpSemanticValue* gcp_semantic_value_construct (GType object_type, GcpSourceRange* range, GcpSemanticValueKind kind, GcpSemanticValueReferenceType rtype);
GcpSemanticValue* gcp_semantic_value_find_child (GcpSemanticValue* self, GcpSemanticValueKind kind);
GcpSemanticValue* gcp_semantic_value_get_down (GcpSemanticValue* self);
GcpSemanticValueKind gcp_semantic_value_get_kind (GcpSemanticValue* self);
GcpSemanticValue* gcp_semantic_value_get_next (GcpSemanticValue* self);
GcpSemanticValue* gcp_semantic_value_reference (GcpSemanticValue* self, gint idx);
static GcpSemanticValue* gcp_semantic_value_real_reference (GcpSemanticValue* self, gint idx);
GcpSemanticValueReferenceType gcp_semantic_value_get_reference_type (GcpSemanticValue* self);
GcpSemanticValue* gcp_semantic_value_get_definition (GcpSemanticValue* self);
GcpSemanticValue* gcp_semantic_value_get_declaration (GcpSemanticValue* self);
gint gcp_semantic_value_get_num_references (GcpSemanticValue* self);
GcpSemanticValue* gcp_semantic_value_get_previous (GcpSemanticValue* self);
GcpSemanticValue* gcp_semantic_value_get_up (GcpSemanticValue* self);
static void gcp_semantic_value_finalize (GObject* obj);
GcpSourceRange* gcp_source_range_support_get_range (GcpSourceRangeSupport* self);
static void _vala_gcp_semantic_value_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);


GType gcp_semantic_value_kind_get_type (void) {
	static volatile gsize gcp_semantic_value_kind_type_id__volatile = 0;
	if (g_once_init_enter (&gcp_semantic_value_kind_type_id__volatile)) {
		static const GEnumValue values[] = {{GCP_SEMANTIC_VALUE_KIND_NONE, "GCP_SEMANTIC_VALUE_KIND_NONE", "none"}, {GCP_SEMANTIC_VALUE_KIND_STRUCT, "GCP_SEMANTIC_VALUE_KIND_STRUCT", "struct"}, {GCP_SEMANTIC_VALUE_KIND_UNION, "GCP_SEMANTIC_VALUE_KIND_UNION", "union"}, {GCP_SEMANTIC_VALUE_KIND_CLASS, "GCP_SEMANTIC_VALUE_KIND_CLASS", "class"}, {GCP_SEMANTIC_VALUE_KIND_ENUM, "GCP_SEMANTIC_VALUE_KIND_ENUM", "enum"}, {GCP_SEMANTIC_VALUE_KIND_FIELD, "GCP_SEMANTIC_VALUE_KIND_FIELD", "field"}, {GCP_SEMANTIC_VALUE_KIND_ENUM_VALUE, "GCP_SEMANTIC_VALUE_KIND_ENUM_VALUE", "enum-value"}, {GCP_SEMANTIC_VALUE_KIND_FUNCTION, "GCP_SEMANTIC_VALUE_KIND_FUNCTION", "function"}, {GCP_SEMANTIC_VALUE_KIND_MEMBER_FUNCTION, "GCP_SEMANTIC_VALUE_KIND_MEMBER_FUNCTION", "member-function"}, {GCP_SEMANTIC_VALUE_KIND_CONSTRUCTOR, "GCP_SEMANTIC_VALUE_KIND_CONSTRUCTOR", "constructor"}, {GCP_SEMANTIC_VALUE_KIND_DESTRUCTOR, "GCP_SEMANTIC_VALUE_KIND_DESTRUCTOR", "destructor"}, {GCP_SEMANTIC_VALUE_KIND_VARIABLE, "GCP_SEMANTIC_VALUE_KIND_VARIABLE", "variable"}, {GCP_SEMANTIC_VALUE_KIND_PARAMETER, "GCP_SEMANTIC_VALUE_KIND_PARAMETER", "parameter"}, {GCP_SEMANTIC_VALUE_KIND_TYPEDEF, "GCP_SEMANTIC_VALUE_KIND_TYPEDEF", "typedef"}, {GCP_SEMANTIC_VALUE_KIND_NAMESPACE, "GCP_SEMANTIC_VALUE_KIND_NAMESPACE", "namespace"}, {GCP_SEMANTIC_VALUE_KIND_BLOCK, "GCP_SEMANTIC_VALUE_KIND_BLOCK", "block"}, {0, NULL, NULL}};
		GType gcp_semantic_value_kind_type_id;
		gcp_semantic_value_kind_type_id = g_enum_register_static ("GcpSemanticValueKind", values);
		g_once_init_leave (&gcp_semantic_value_kind_type_id__volatile, gcp_semantic_value_kind_type_id);
	}
	return gcp_semantic_value_kind_type_id__volatile;
}


GType gcp_semantic_value_reference_type_get_type (void) {
	static volatile gsize gcp_semantic_value_reference_type_type_id__volatile = 0;
	if (g_once_init_enter (&gcp_semantic_value_reference_type_type_id__volatile)) {
		static const GFlagsValue values[] = {{GCP_SEMANTIC_VALUE_REFERENCE_TYPE_NONE, "GCP_SEMANTIC_VALUE_REFERENCE_TYPE_NONE", "none"}, {GCP_SEMANTIC_VALUE_REFERENCE_TYPE_DECLARATION, "GCP_SEMANTIC_VALUE_REFERENCE_TYPE_DECLARATION", "declaration"}, {GCP_SEMANTIC_VALUE_REFERENCE_TYPE_REFERENCE, "GCP_SEMANTIC_VALUE_REFERENCE_TYPE_REFERENCE", "reference"}, {GCP_SEMANTIC_VALUE_REFERENCE_TYPE_DEFINITION, "GCP_SEMANTIC_VALUE_REFERENCE_TYPE_DEFINITION", "definition"}, {0, NULL, NULL}};
		GType gcp_semantic_value_reference_type_type_id;
		gcp_semantic_value_reference_type_type_id = g_flags_register_static ("GcpSemanticValueReferenceType", values);
		g_once_init_leave (&gcp_semantic_value_reference_type_type_id__volatile, gcp_semantic_value_reference_type_type_id);
	}
	return gcp_semantic_value_reference_type_type_id__volatile;
}


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


GcpSemanticValue* gcp_semantic_value_construct (GType object_type, GcpSourceRange* range, GcpSemanticValueKind kind, GcpSemanticValueReferenceType rtype) {
	GcpSemanticValue * self = NULL;
	GcpSourceRange* _tmp0_;
	GcpSourceRange* _tmp1_;
	GcpSemanticValueKind _tmp2_;
	GcpSemanticValueReferenceType _tmp3_;
	g_return_val_if_fail (range != NULL, NULL);
	self = (GcpSemanticValue*) g_object_new (object_type, NULL);
	_tmp0_ = range;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	_g_object_unref0 (self->priv->d_range);
	self->priv->d_range = _tmp1_;
	_tmp2_ = kind;
	self->priv->d_kind = _tmp2_;
	_tmp3_ = rtype;
	self->priv->d_rtype = _tmp3_;
	return self;
}


GcpSemanticValue* gcp_semantic_value_find_child (GcpSemanticValue* self, GcpSemanticValueKind kind) {
	GcpSemanticValue* result = NULL;
	GcpSemanticValue* _tmp0_;
	GcpSemanticValue* _tmp1_;
	GcpSemanticValue* _tmp2_;
	GcpSemanticValue* child;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = gcp_semantic_value_get_down (self);
	_tmp1_ = _tmp0_;
	_tmp2_ = _g_object_ref0 (_tmp1_);
	child = _tmp2_;
	while (TRUE) {
		GcpSemanticValue* _tmp3_;
		GcpSemanticValue* _tmp4_;
		GcpSemanticValueKind _tmp5_;
		GcpSemanticValueKind _tmp6_;
		GcpSemanticValueKind _tmp7_;
		GcpSemanticValue* _tmp8_;
		GcpSemanticValue* _tmp9_;
		GcpSemanticValue* _tmp10_;
		GcpSemanticValue* _tmp11_;
		_tmp3_ = child;
		if (!(_tmp3_ != NULL)) {
			break;
		}
		_tmp4_ = child;
		_tmp5_ = gcp_semantic_value_get_kind (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp7_ = kind;
		if (_tmp6_ == _tmp7_) {
			result = child;
			return result;
		}
		_tmp8_ = child;
		_tmp9_ = gcp_semantic_value_get_next (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = _g_object_ref0 (_tmp10_);
		_g_object_unref0 (child);
		child = _tmp11_;
	}
	result = child;
	return result;
}


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


GcpSemanticValue* gcp_semantic_value_reference (GcpSemanticValue* self, gint idx) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->reference (self, idx);
}


static GcpSourceRange* gcp_semantic_value_real_get_range (GcpSourceRangeSupport* base) {
	GcpSourceRange* result;
	GcpSemanticValue* self;
	GcpSourceRange* _tmp0_;
	GcpSourceRange* _tmp1_;
	self = (GcpSemanticValue*) base;
	_tmp0_ = self->priv->d_range;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	result = _tmp1_;
	return result;
}


static GcpSourceRange** gcp_semantic_value_real_get_ranges (GcpSourceRangeSupport* base, int* result_length1) {
	GcpSourceRange** result;
	GcpSemanticValue* self;
	GcpSourceRange* _tmp0_;
	GcpSourceRange* _tmp1_;
	GcpSourceRange** _tmp2_ = NULL;
	GcpSourceRange** _tmp3_;
	gint _tmp3__length1;
	self = (GcpSemanticValue*) base;
	_tmp0_ = self->priv->d_range;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	_tmp2_ = g_new0 (GcpSourceRange*, 1 + 1);
	_tmp2_[0] = _tmp1_;
	_tmp3_ = _tmp2_;
	_tmp3__length1 = 1;
	if (result_length1) {
		*result_length1 = _tmp3__length1;
	}
	result = _tmp3_;
	return result;
}


GcpSemanticValueKind gcp_semantic_value_get_kind (GcpSemanticValue* self) {
	GcpSemanticValueKind result;
	GcpSemanticValueKind _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->d_kind;
	result = _tmp0_;
	return result;
}


GcpSemanticValueReferenceType gcp_semantic_value_get_reference_type (GcpSemanticValue* self) {
	GcpSemanticValueReferenceType result;
	GcpSemanticValueReferenceType _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->d_rtype;
	result = _tmp0_;
	return result;
}


GcpSemanticValue* gcp_semantic_value_get_definition (GcpSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->get_definition (self);
}


GcpSemanticValue* gcp_semantic_value_get_declaration (GcpSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->get_declaration (self);
}


gint gcp_semantic_value_get_num_references (GcpSemanticValue* self) {
	g_return_val_if_fail (self != NULL, 0);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->get_num_references (self);
}


GcpSemanticValue* gcp_semantic_value_get_next (GcpSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->get_next (self);
}


GcpSemanticValue* gcp_semantic_value_get_previous (GcpSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->get_previous (self);
}


GcpSemanticValue* gcp_semantic_value_get_up (GcpSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->get_up (self);
}


GcpSemanticValue* gcp_semantic_value_get_down (GcpSemanticValue* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GCP_SEMANTIC_VALUE_GET_CLASS (self)->get_down (self);
}


static void gcp_semantic_value_class_init (GcpSemanticValueClass * klass) {
	gcp_semantic_value_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (GcpSemanticValuePrivate));
	GCP_SEMANTIC_VALUE_CLASS (klass)->reference = gcp_semantic_value_real_reference;
	G_OBJECT_CLASS (klass)->get_property = _vala_gcp_semantic_value_get_property;
	G_OBJECT_CLASS (klass)->finalize = gcp_semantic_value_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCP_SEMANTIC_VALUE_RANGE, g_param_spec_object ("range", "range", "range", GCP_TYPE_SOURCE_RANGE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GCP_SEMANTIC_VALUE_KIND, g_param_spec_enum ("kind", "kind", "kind", GCP_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), GCP_SEMANTIC_VALUE_REFERENCE_TYPE, g_param_spec_flags ("reference-type", "reference-type", "reference-type", GCP_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), GCP_SEMANTIC_VALUE_DEFINITION, g_param_spec_object ("definition", "definition", "definition", GCP_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), GCP_SEMANTIC_VALUE_DECLARATION, g_param_spec_object ("declaration", "declaration", "declaration", GCP_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), GCP_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), GCP_SEMANTIC_VALUE_NEXT, g_param_spec_object ("next", "next", "next", GCP_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), GCP_SEMANTIC_VALUE_PREVIOUS, g_param_spec_object ("previous", "previous", "previous", GCP_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), GCP_SEMANTIC_VALUE_UP, g_param_spec_object ("up", "up", "up", GCP_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), GCP_SEMANTIC_VALUE_DOWN, g_param_spec_object ("down", "down", "down", GCP_TYPE_SEMANTIC_VALUE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
}


static void gcp_semantic_value_gcp_source_range_support_interface_init (GcpSourceRangeSupportIface * iface) {
	gcp_semantic_value_gcp_source_range_support_parent_iface = g_type_interface_peek_parent (iface);
	iface->get_range = gcp_semantic_value_real_get_range;
	iface->get_ranges = gcp_semantic_value_real_get_ranges;
}


static void gcp_semantic_value_instance_init (GcpSemanticValue * self) {
	self->priv = GCP_SEMANTIC_VALUE_GET_PRIVATE (self);
}


static void gcp_semantic_value_finalize (GObject* obj) {
	GcpSemanticValue * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GCP_TYPE_SEMANTIC_VALUE, GcpSemanticValue);
	_g_object_unref0 (self->priv->d_range);
	G_OBJECT_CLASS (gcp_semantic_value_parent_class)->finalize (obj);
}


GType gcp_semantic_value_get_type (void) {
	static volatile gsize gcp_semantic_value_type_id__volatile = 0;
	if (g_once_init_enter (&gcp_semantic_value_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (GcpSemanticValueClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gcp_semantic_value_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GcpSemanticValue), 0, (GInstanceInitFunc) gcp_semantic_value_instance_init, NULL };
		static const GInterfaceInfo gcp_source_range_support_info = { (GInterfaceInitFunc) gcp_semantic_value_gcp_source_range_support_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		GType gcp_semantic_value_type_id;
		gcp_semantic_value_type_id = g_type_register_static (G_TYPE_OBJECT, "GcpSemanticValue", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
		g_type_add_interface_static (gcp_semantic_value_type_id, GCP_TYPE_SOURCE_RANGE_SUPPORT, &gcp_source_range_support_info);
		g_once_init_leave (&gcp_semantic_value_type_id__volatile, gcp_semantic_value_type_id);
	}
	return gcp_semantic_value_type_id__volatile;
}


static void _vala_gcp_semantic_value_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
	GcpSemanticValue * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, GCP_TYPE_SEMANTIC_VALUE, GcpSemanticValue);
	switch (property_id) {
		case GCP_SEMANTIC_VALUE_RANGE:
		g_value_take_object (value, gcp_source_range_support_get_range ((GcpSourceRangeSupport*) self));
		break;
		case GCP_SEMANTIC_VALUE_KIND:
		g_value_set_enum (value, gcp_semantic_value_get_kind (self));
		break;
		case GCP_SEMANTIC_VALUE_REFERENCE_TYPE:
		g_value_set_flags (value, gcp_semantic_value_get_reference_type (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}



