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

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

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif
#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif

#define MAMAN_TYPE_A (maman_a_get_type ())
#define MAMAN_A(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_A, MamanA))
#define MAMAN_A_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_A, MamanAClass))
#define MAMAN_IS_A(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_A))
#define MAMAN_IS_A_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_A))
#define MAMAN_A_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_A, MamanAClass))

typedef struct _MamanA MamanA;
typedef struct _MamanAClass MamanAClass;
typedef struct _MamanAPrivate MamanAPrivate;
enum  {
	MAMAN_A_0_PROPERTY,
	MAMAN_A_NUM_PROPERTIES
};
static GParamSpec* maman_a_properties[MAMAN_A_NUM_PROPERTIES];

#define MAMAN_TYPE_B (maman_b_get_type ())
#define MAMAN_B(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_B, MamanB))
#define MAMAN_B_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_B, MamanBClass))
#define MAMAN_IS_B(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_B))
#define MAMAN_IS_B_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_B))
#define MAMAN_B_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_B, MamanBClass))

typedef struct _MamanB MamanB;
typedef struct _MamanBClass MamanBClass;
typedef struct _MamanBPrivate MamanBPrivate;
enum  {
	MAMAN_B_0_PROPERTY,
	MAMAN_B_NUM_PROPERTIES
};
static GParamSpec* maman_b_properties[MAMAN_B_NUM_PROPERTIES];

#define MAMAN_TYPE_C (maman_c_get_type ())
#define MAMAN_C(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_C, MamanC))
#define MAMAN_C_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_C, MamanCClass))
#define MAMAN_IS_C(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_C))
#define MAMAN_IS_C_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_C))
#define MAMAN_C_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_C, MamanCClass))

typedef struct _MamanC MamanC;
typedef struct _MamanCClass MamanCClass;
typedef struct _MamanCPrivate MamanCPrivate;
enum  {
	MAMAN_C_0_PROPERTY,
	MAMAN_C_NUM_PROPERTIES
};
static GParamSpec* maman_c_properties[MAMAN_C_NUM_PROPERTIES];

#define MAMAN_TYPE_BAR (maman_bar_get_type ())
#define MAMAN_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAR, MamanBar))
#define MAMAN_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_BAR, MamanBarClass))
#define MAMAN_IS_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_BAR))
#define MAMAN_IS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_BAR))
#define MAMAN_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_BAR, MamanBarClass))

typedef struct _MamanBar MamanBar;
typedef struct _MamanBarClass MamanBarClass;
typedef struct _MamanBarPrivate MamanBarPrivate;
enum  {
	MAMAN_BAR_0_PROPERTY,
	MAMAN_BAR_NUM_PROPERTIES
};
static GParamSpec* maman_bar_properties[MAMAN_BAR_NUM_PROPERTIES];
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))

struct _MamanA {
	GObject parent_instance;
	MamanAPrivate * priv;
};

struct _MamanAClass {
	GObjectClass parent_class;
};

struct _MamanB {
	MamanA parent_instance;
	MamanBPrivate * priv;
};

struct _MamanBClass {
	MamanAClass parent_class;
};

struct _MamanC {
	GObject parent_instance;
	MamanCPrivate * priv;
};

struct _MamanCClass {
	GObjectClass parent_class;
};

struct _MamanBar {
	GObject parent_instance;
	MamanBarPrivate * priv;
};

struct _MamanBarClass {
	GObjectClass parent_class;
};

static gpointer maman_a_parent_class = NULL;
static gpointer maman_b_parent_class = NULL;
static gpointer maman_c_parent_class = NULL;
static gpointer maman_bar_parent_class = NULL;

VALA_EXTERN GType maman_a_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MamanA, g_object_unref)
VALA_EXTERN MamanA* maman_a_new (void);
VALA_EXTERN MamanA* maman_a_construct (GType object_type);
static GType maman_a_get_type_once (void);
VALA_EXTERN GType maman_b_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MamanB, g_object_unref)
VALA_EXTERN MamanB* maman_b_new (void);
VALA_EXTERN MamanB* maman_b_construct (GType object_type);
static GType maman_b_get_type_once (void);
VALA_EXTERN GType maman_c_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MamanC, g_object_unref)
VALA_EXTERN MamanC* maman_c_new (void);
VALA_EXTERN MamanC* maman_c_construct (GType object_type);
static GType maman_c_get_type_once (void);
VALA_EXTERN GType maman_bar_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MamanBar, g_object_unref)
static void maman_bar_main (void);
VALA_EXTERN MamanBar* maman_bar_new (void);
VALA_EXTERN MamanBar* maman_bar_construct (GType object_type);
static GType maman_bar_get_type_once (void);

MamanA*
maman_a_construct (GType object_type)
{
	MamanA * self = NULL;
	self = (MamanA*) g_object_new (object_type, NULL);
	return self;
}

MamanA*
maman_a_new (void)
{
	return maman_a_construct (MAMAN_TYPE_A);
}

static void
maman_a_class_init (MamanAClass * klass,
                    gpointer klass_data)
{
	maman_a_parent_class = g_type_class_peek_parent (klass);
}

static void
maman_a_instance_init (MamanA * self,
                       gpointer klass)
{
}

static GType
maman_a_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (MamanAClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) maman_a_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (MamanA), 0, (GInstanceInitFunc) maman_a_instance_init, NULL };
	GType maman_a_type_id;
	maman_a_type_id = g_type_register_static (G_TYPE_OBJECT, "MamanA", &g_define_type_info, 0);
	return maman_a_type_id;
}

GType
maman_a_get_type (void)
{
	static volatile gsize maman_a_type_id__once = 0;
	if (g_once_init_enter (&maman_a_type_id__once)) {
		GType maman_a_type_id;
		maman_a_type_id = maman_a_get_type_once ();
		g_once_init_leave (&maman_a_type_id__once, maman_a_type_id);
	}
	return maman_a_type_id__once;
}

MamanB*
maman_b_construct (GType object_type)
{
	MamanB * self = NULL;
	self = (MamanB*) maman_a_construct (object_type);
	return self;
}

MamanB*
maman_b_new (void)
{
	return maman_b_construct (MAMAN_TYPE_B);
}

static void
maman_b_class_init (MamanBClass * klass,
                    gpointer klass_data)
{
	maman_b_parent_class = g_type_class_peek_parent (klass);
}

static void
maman_b_instance_init (MamanB * self,
                       gpointer klass)
{
}

static GType
maman_b_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (MamanBClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) maman_b_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (MamanB), 0, (GInstanceInitFunc) maman_b_instance_init, NULL };
	GType maman_b_type_id;
	maman_b_type_id = g_type_register_static (MAMAN_TYPE_A, "MamanB", &g_define_type_info, 0);
	return maman_b_type_id;
}

GType
maman_b_get_type (void)
{
	static volatile gsize maman_b_type_id__once = 0;
	if (g_once_init_enter (&maman_b_type_id__once)) {
		GType maman_b_type_id;
		maman_b_type_id = maman_b_get_type_once ();
		g_once_init_leave (&maman_b_type_id__once, maman_b_type_id);
	}
	return maman_b_type_id__once;
}

MamanC*
maman_c_construct (GType object_type)
{
	MamanC * self = NULL;
	self = (MamanC*) g_object_new (object_type, NULL);
	return self;
}

MamanC*
maman_c_new (void)
{
	return maman_c_construct (MAMAN_TYPE_C);
}

static void
maman_c_class_init (MamanCClass * klass,
                    gpointer klass_data)
{
	maman_c_parent_class = g_type_class_peek_parent (klass);
}

static void
maman_c_instance_init (MamanC * self,
                       gpointer klass)
{
}

static GType
maman_c_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (MamanCClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) maman_c_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (MamanC), 0, (GInstanceInitFunc) maman_c_instance_init, NULL };
	GType maman_c_type_id;
	maman_c_type_id = g_type_register_static (G_TYPE_OBJECT, "MamanC", &g_define_type_info, 0);
	return maman_c_type_id;
}

GType
maman_c_get_type (void)
{
	static volatile gsize maman_c_type_id__once = 0;
	if (g_once_init_enter (&maman_c_type_id__once)) {
		GType maman_c_type_id;
		maman_c_type_id = maman_c_get_type_once ();
		g_once_init_leave (&maman_c_type_id__once, maman_c_type_id);
	}
	return maman_c_type_id__once;
}

static void
maman_bar_main (void)
{
	MamanA* a = NULL;
	MamanA* _tmp0_;
	MamanB* b = NULL;
	MamanB* _tmp1_;
	MamanC* c = NULL;
	MamanC* _tmp2_;
	gint _tmp3_ = 0;
	MamanA* _tmp4_;
	gint _tmp5_ = 0;
	MamanB* _tmp6_;
	gint _tmp7_ = 0;
	MamanC* _tmp8_;
	FILE* _tmp9_;
	gint _tmp10_ = 0;
	MamanA* _tmp11_;
	gint _tmp12_ = 0;
	MamanB* _tmp13_;
	gint _tmp14_ = 0;
	MamanC* _tmp15_;
	FILE* _tmp16_;
	gint _tmp17_ = 0;
	MamanA* _tmp18_;
	gint _tmp19_ = 0;
	MamanB* _tmp20_;
	gint _tmp21_ = 0;
	MamanC* _tmp22_;
	FILE* _tmp23_;
	gint _tmp24_ = 0;
	MamanA* _tmp25_;
	gint _tmp26_ = 0;
	MamanB* _tmp27_;
	gint _tmp28_ = 0;
	MamanC* _tmp29_;
	FILE* _tmp30_;
	gint _tmp31_ = 0;
	MamanA* _tmp32_;
	gint _tmp33_ = 0;
	MamanB* _tmp34_;
	gint _tmp35_ = 0;
	MamanC* _tmp36_;
	FILE* _tmp37_;
	gint _tmp38_ = 0;
	MamanA* _tmp39_;
	gint _tmp40_ = 0;
	MamanB* _tmp41_;
	gint _tmp42_ = 0;
	MamanC* _tmp43_;
	FILE* _tmp44_;
	gint _tmp45_ = 0;
	MamanA* _tmp46_;
	gint _tmp47_ = 0;
	MamanB* _tmp48_;
	gint _tmp49_ = 0;
	MamanC* _tmp50_;
	FILE* _tmp51_;
	_tmp0_ = maman_a_new ();
	a = _tmp0_;
	_tmp1_ = maman_b_new ();
	b = _tmp1_;
	_tmp2_ = maman_c_new ();
	c = _tmp2_;
	_tmp4_ = a;
	if (NULL != _tmp4_) {
		_tmp3_ = 1;
	} else {
		_tmp3_ = 0;
	}
	_tmp6_ = b;
	if (NULL != _tmp6_) {
		_tmp5_ = 1;
	} else {
		_tmp5_ = 0;
	}
	_tmp8_ = c;
	if (NULL != _tmp8_) {
		_tmp7_ = 1;
	} else {
		_tmp7_ = 0;
	}
	_tmp9_ = stdout;
	fprintf (_tmp9_, "init: %d %d %d\n", _tmp3_, _tmp5_, _tmp7_);
	_tmp11_ = a;
	if (MAMAN_IS_A (_tmp11_)) {
		_tmp10_ = 1;
	} else {
		_tmp10_ = 0;
	}
	_tmp13_ = b;
	if (MAMAN_IS_A (_tmp13_)) {
		_tmp12_ = 1;
	} else {
		_tmp12_ = 0;
	}
	_tmp15_ = c;
	if (MAMAN_IS_A (_tmp15_)) {
		_tmp14_ = 1;
	} else {
		_tmp14_ = 0;
	}
	_tmp16_ = stdout;
	fprintf (_tmp16_, "is A: %d %d %d\n", _tmp10_, _tmp12_, _tmp14_);
	_tmp18_ = a;
	if (MAMAN_IS_B (_tmp18_)) {
		_tmp17_ = 1;
	} else {
		_tmp17_ = 0;
	}
	_tmp20_ = b;
	if (MAMAN_IS_B (_tmp20_)) {
		_tmp19_ = 1;
	} else {
		_tmp19_ = 0;
	}
	_tmp22_ = c;
	if (MAMAN_IS_B (_tmp22_)) {
		_tmp21_ = 1;
	} else {
		_tmp21_ = 0;
	}
	_tmp23_ = stdout;
	fprintf (_tmp23_, "is B: %d %d %d\n", _tmp17_, _tmp19_, _tmp21_);
	_tmp25_ = a;
	if (MAMAN_IS_C (_tmp25_)) {
		_tmp24_ = 1;
	} else {
		_tmp24_ = 0;
	}
	_tmp27_ = b;
	if (MAMAN_IS_C (_tmp27_)) {
		_tmp26_ = 1;
	} else {
		_tmp26_ = 0;
	}
	_tmp29_ = c;
	if (MAMAN_IS_C (_tmp29_)) {
		_tmp28_ = 1;
	} else {
		_tmp28_ = 0;
	}
	_tmp30_ = stdout;
	fprintf (_tmp30_, "is C: %d %d %d\n", _tmp24_, _tmp26_, _tmp28_);
	_tmp32_ = a;
	if (NULL != (MAMAN_IS_A (_tmp32_) ? ((MamanA*) _tmp32_) : NULL)) {
		_tmp31_ = 1;
	} else {
		_tmp31_ = 0;
	}
	_tmp34_ = b;
	if (NULL != (MAMAN_IS_A (_tmp34_) ? ((MamanA*) _tmp34_) : NULL)) {
		_tmp33_ = 1;
	} else {
		_tmp33_ = 0;
	}
	_tmp36_ = c;
	if (NULL != (MAMAN_IS_A (_tmp36_) ? ((MamanA*) _tmp36_) : NULL)) {
		_tmp35_ = 1;
	} else {
		_tmp35_ = 0;
	}
	_tmp37_ = stdout;
	fprintf (_tmp37_, "as A: %d %d %d\n", _tmp31_, _tmp33_, _tmp35_);
	_tmp39_ = a;
	if (NULL != (MAMAN_IS_B (_tmp39_) ? ((MamanB*) _tmp39_) : NULL)) {
		_tmp38_ = 1;
	} else {
		_tmp38_ = 0;
	}
	_tmp41_ = b;
	if (NULL != (MAMAN_IS_B (_tmp41_) ? ((MamanB*) _tmp41_) : NULL)) {
		_tmp40_ = 1;
	} else {
		_tmp40_ = 0;
	}
	_tmp43_ = c;
	if (NULL != (MAMAN_IS_B (_tmp43_) ? ((MamanB*) _tmp43_) : NULL)) {
		_tmp42_ = 1;
	} else {
		_tmp42_ = 0;
	}
	_tmp44_ = stdout;
	fprintf (_tmp44_, "as B: %d %d %d\n", _tmp38_, _tmp40_, _tmp42_);
	_tmp46_ = a;
	if (NULL != (MAMAN_IS_C (_tmp46_) ? ((MamanC*) _tmp46_) : NULL)) {
		_tmp45_ = 1;
	} else {
		_tmp45_ = 0;
	}
	_tmp48_ = b;
	if (NULL != (MAMAN_IS_C (_tmp48_) ? ((MamanC*) _tmp48_) : NULL)) {
		_tmp47_ = 1;
	} else {
		_tmp47_ = 0;
	}
	_tmp50_ = c;
	if (NULL != (MAMAN_IS_C (_tmp50_) ? ((MamanC*) _tmp50_) : NULL)) {
		_tmp49_ = 1;
	} else {
		_tmp49_ = 0;
	}
	_tmp51_ = stdout;
	fprintf (_tmp51_, "as C: %d %d %d\n", _tmp45_, _tmp47_, _tmp49_);
	_g_object_unref0 (c);
	_g_object_unref0 (b);
	_g_object_unref0 (a);
}

int
main (int argc,
      char ** argv)
{
	maman_bar_main ();
	return 0;
}

MamanBar*
maman_bar_construct (GType object_type)
{
	MamanBar * self = NULL;
	self = (MamanBar*) g_object_new (object_type, NULL);
	return self;
}

MamanBar*
maman_bar_new (void)
{
	return maman_bar_construct (MAMAN_TYPE_BAR);
}

static void
maman_bar_class_init (MamanBarClass * klass,
                      gpointer klass_data)
{
	maman_bar_parent_class = g_type_class_peek_parent (klass);
}

static void
maman_bar_instance_init (MamanBar * self,
                         gpointer klass)
{
}

static GType
maman_bar_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (MamanBarClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) maman_bar_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (MamanBar), 0, (GInstanceInitFunc) maman_bar_instance_init, NULL };
	GType maman_bar_type_id;
	maman_bar_type_id = g_type_register_static (G_TYPE_OBJECT, "MamanBar", &g_define_type_info, 0);
	return maman_bar_type_id;
}

GType
maman_bar_get_type (void)
{
	static volatile gsize maman_bar_type_id__once = 0;
	if (g_once_init_enter (&maman_bar_type_id__once)) {
		GType maman_bar_type_id;
		maman_bar_type_id = maman_bar_get_type_once ();
		g_once_init_leave (&maman_bar_type_id__once, maman_bar_type_id);
	}
	return maman_bar_type_id__once;
}

