Logo Search packages:      
Sourcecode: vala-0.12 version File versions  Download package

valadovaobjectmodule.c

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

/* valadovaobjectmodule.vala
 *
 * Copyright (C) 2009-2010  Jürg Billeter
 *
 * 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, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 * Author:
 *    Jürg Billeter <j@bitron.ch>
 */

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


#define VALA_TYPE_DOVA_BASE_MODULE (vala_dova_base_module_get_type ())
#define VALA_DOVA_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModule))
#define VALA_DOVA_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModuleClass))
#define VALA_IS_DOVA_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_BASE_MODULE))
#define VALA_IS_DOVA_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_BASE_MODULE))
#define VALA_DOVA_BASE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModuleClass))

typedef struct _ValaDovaBaseModule ValaDovaBaseModule;
typedef struct _ValaDovaBaseModuleClass ValaDovaBaseModuleClass;
typedef struct _ValaDovaBaseModulePrivate ValaDovaBaseModulePrivate;

#define VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT (vala_dova_base_module_emit_context_get_type ())
#define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContext))
#define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContextClass))
#define VALA_DOVA_BASE_MODULE_IS_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT))
#define VALA_DOVA_BASE_MODULE_IS_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT))
#define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContextClass))

typedef struct _ValaDovaBaseModuleEmitContext ValaDovaBaseModuleEmitContext;
typedef struct _ValaDovaBaseModuleEmitContextClass ValaDovaBaseModuleEmitContextClass;

#define VALA_TYPE_DOVA_STRUCT_MODULE (vala_dova_struct_module_get_type ())
#define VALA_DOVA_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModule))
#define VALA_DOVA_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModuleClass))
#define VALA_IS_DOVA_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_STRUCT_MODULE))
#define VALA_IS_DOVA_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_STRUCT_MODULE))
#define VALA_DOVA_STRUCT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModuleClass))

typedef struct _ValaDovaStructModule ValaDovaStructModule;
typedef struct _ValaDovaStructModuleClass ValaDovaStructModuleClass;
typedef struct _ValaDovaStructModulePrivate ValaDovaStructModulePrivate;

#define VALA_TYPE_DOVA_METHOD_MODULE (vala_dova_method_module_get_type ())
#define VALA_DOVA_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModule))
#define VALA_DOVA_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModuleClass))
#define VALA_IS_DOVA_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_METHOD_MODULE))
#define VALA_IS_DOVA_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_METHOD_MODULE))
#define VALA_DOVA_METHOD_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModuleClass))

typedef struct _ValaDovaMethodModule ValaDovaMethodModule;
typedef struct _ValaDovaMethodModuleClass ValaDovaMethodModuleClass;
typedef struct _ValaDovaMethodModulePrivate ValaDovaMethodModulePrivate;

#define VALA_TYPE_DOVA_CONTROL_FLOW_MODULE (vala_dova_control_flow_module_get_type ())
#define VALA_DOVA_CONTROL_FLOW_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE, ValaDovaControlFlowModule))
#define VALA_DOVA_CONTROL_FLOW_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE, ValaDovaControlFlowModuleClass))
#define VALA_IS_DOVA_CONTROL_FLOW_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE))
#define VALA_IS_DOVA_CONTROL_FLOW_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE))
#define VALA_DOVA_CONTROL_FLOW_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE, ValaDovaControlFlowModuleClass))

typedef struct _ValaDovaControlFlowModule ValaDovaControlFlowModule;
typedef struct _ValaDovaControlFlowModuleClass ValaDovaControlFlowModuleClass;
typedef struct _ValaDovaControlFlowModulePrivate ValaDovaControlFlowModulePrivate;

#define VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE (vala_dova_member_access_module_get_type ())
#define VALA_DOVA_MEMBER_ACCESS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE, ValaDovaMemberAccessModule))
#define VALA_DOVA_MEMBER_ACCESS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE, ValaDovaMemberAccessModuleClass))
#define VALA_IS_DOVA_MEMBER_ACCESS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE))
#define VALA_IS_DOVA_MEMBER_ACCESS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE))
#define VALA_DOVA_MEMBER_ACCESS_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE, ValaDovaMemberAccessModuleClass))

typedef struct _ValaDovaMemberAccessModule ValaDovaMemberAccessModule;
typedef struct _ValaDovaMemberAccessModuleClass ValaDovaMemberAccessModuleClass;
typedef struct _ValaDovaMemberAccessModulePrivate ValaDovaMemberAccessModulePrivate;

#define VALA_TYPE_DOVA_ASSIGNMENT_MODULE (vala_dova_assignment_module_get_type ())
#define VALA_DOVA_ASSIGNMENT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_ASSIGNMENT_MODULE, ValaDovaAssignmentModule))
#define VALA_DOVA_ASSIGNMENT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_ASSIGNMENT_MODULE, ValaDovaAssignmentModuleClass))
#define VALA_IS_DOVA_ASSIGNMENT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_ASSIGNMENT_MODULE))
#define VALA_IS_DOVA_ASSIGNMENT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_ASSIGNMENT_MODULE))
#define VALA_DOVA_ASSIGNMENT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_ASSIGNMENT_MODULE, ValaDovaAssignmentModuleClass))

typedef struct _ValaDovaAssignmentModule ValaDovaAssignmentModule;
typedef struct _ValaDovaAssignmentModuleClass ValaDovaAssignmentModuleClass;
typedef struct _ValaDovaAssignmentModulePrivate ValaDovaAssignmentModulePrivate;

#define VALA_TYPE_DOVA_METHOD_CALL_MODULE (vala_dova_method_call_module_get_type ())
#define VALA_DOVA_METHOD_CALL_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_METHOD_CALL_MODULE, ValaDovaMethodCallModule))
#define VALA_DOVA_METHOD_CALL_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_METHOD_CALL_MODULE, ValaDovaMethodCallModuleClass))
#define VALA_IS_DOVA_METHOD_CALL_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_METHOD_CALL_MODULE))
#define VALA_IS_DOVA_METHOD_CALL_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_METHOD_CALL_MODULE))
#define VALA_DOVA_METHOD_CALL_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_METHOD_CALL_MODULE, ValaDovaMethodCallModuleClass))

typedef struct _ValaDovaMethodCallModule ValaDovaMethodCallModule;
typedef struct _ValaDovaMethodCallModuleClass ValaDovaMethodCallModuleClass;
typedef struct _ValaDovaMethodCallModulePrivate ValaDovaMethodCallModulePrivate;

#define VALA_TYPE_DOVA_ARRAY_MODULE (vala_dova_array_module_get_type ())
#define VALA_DOVA_ARRAY_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_ARRAY_MODULE, ValaDovaArrayModule))
#define VALA_DOVA_ARRAY_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_ARRAY_MODULE, ValaDovaArrayModuleClass))
#define VALA_IS_DOVA_ARRAY_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_ARRAY_MODULE))
#define VALA_IS_DOVA_ARRAY_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_ARRAY_MODULE))
#define VALA_DOVA_ARRAY_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_ARRAY_MODULE, ValaDovaArrayModuleClass))

typedef struct _ValaDovaArrayModule ValaDovaArrayModule;
typedef struct _ValaDovaArrayModuleClass ValaDovaArrayModuleClass;
typedef struct _ValaDovaArrayModulePrivate ValaDovaArrayModulePrivate;

#define VALA_TYPE_DOVA_OBJECT_MODULE (vala_dova_object_module_get_type ())
#define VALA_DOVA_OBJECT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_OBJECT_MODULE, ValaDovaObjectModule))
#define VALA_DOVA_OBJECT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_OBJECT_MODULE, ValaDovaObjectModuleClass))
#define VALA_IS_DOVA_OBJECT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_OBJECT_MODULE))
#define VALA_IS_DOVA_OBJECT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_OBJECT_MODULE))
#define VALA_DOVA_OBJECT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_OBJECT_MODULE, ValaDovaObjectModuleClass))

typedef struct _ValaDovaObjectModule ValaDovaObjectModule;
typedef struct _ValaDovaObjectModuleClass ValaDovaObjectModuleClass;
typedef struct _ValaDovaObjectModulePrivate ValaDovaObjectModulePrivate;
#define _g_free0(var) (var = (g_free (var), NULL))
#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _vala_dova_base_module_emit_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_dova_base_module_emit_context_unref (var), NULL)))

struct _ValaDovaBaseModule {
      ValaCodeGenerator parent_instance;
      ValaDovaBaseModulePrivate * priv;
      ValaSymbol* root_symbol;
      ValaDovaBaseModuleEmitContext* emit_context;
      ValaCCodeFile* header_file;
      ValaCCodeFile* cfile;
      ValaList* static_fields;
      gint next_wrapper_id;
      ValaDataType* void_type;
      ValaDataType* bool_type;
      ValaDataType* char_type;
      ValaDataType* int_type;
      ValaDataType* uint_type;
      ValaDataType* string_type;
      ValaDataType* float_type;
      ValaDataType* double_type;
      ValaClass* object_class;
      ValaClass* type_class;
      ValaClass* value_class;
      ValaClass* string_class;
      ValaClass* array_class;
      ValaClass* delegate_class;
      ValaClass* error_class;
};

struct _ValaDovaBaseModuleClass {
      ValaCodeGeneratorClass parent_class;
      void (*generate_struct_declaration) (ValaDovaBaseModule* self, ValaStruct* st, ValaCCodeFile* decl_space);
      void (*generate_delegate_declaration) (ValaDovaBaseModule* self, ValaDelegate* d, ValaCCodeFile* decl_space);
      void (*generate_cparameters) (ValaDovaBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaCCodeFunctionCall* vcall);
      void (*generate_property_accessor_declaration) (ValaDovaBaseModule* self, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space);
      ValaCCodeExpression* (*get_dup_func_expression) (ValaDovaBaseModule* self, ValaDataType* type, ValaSourceReference* source_reference, gboolean is_chainup);
      void (*append_local_free) (ValaDovaBaseModule* self, ValaSymbol* sym, gboolean stop_at_loop, ValaCodeNode* stop_at);
      ValaCCodeExpression* (*get_ref_cexpression) (ValaDovaBaseModule* self, ValaDataType* expression_type, ValaCCodeExpression* cexpr, ValaExpression* expr, ValaCodeNode* node);
      void (*generate_class_declaration) (ValaDovaBaseModule* self, ValaClass* cl, ValaCCodeFile* decl_space);
      void (*generate_interface_declaration) (ValaDovaBaseModule* self, ValaInterface* iface, ValaCCodeFile* decl_space);
      void (*generate_method_declaration) (ValaDovaBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space);
      ValaCCodeExpression* (*get_implicit_cast_expression) (ValaDovaBaseModule* self, ValaCCodeExpression* source_cexpr, ValaDataType* expression_type, ValaDataType* target_type, ValaExpression* expr);
      gchar* (*get_custom_creturn_type) (ValaDovaBaseModule* self, ValaMethod* m);
      gboolean (*method_has_wrapper) (ValaDovaBaseModule* self, ValaMethod* method);
      void (*add_simple_check) (ValaDovaBaseModule* self, ValaCodeNode* node, gboolean always_fails);
};

struct _ValaDovaStructModule {
      ValaDovaBaseModule parent_instance;
      ValaDovaStructModulePrivate * priv;
};

struct _ValaDovaStructModuleClass {
      ValaDovaBaseModuleClass parent_class;
};

struct _ValaDovaMethodModule {
      ValaDovaStructModule parent_instance;
      ValaDovaMethodModulePrivate * priv;
};

struct _ValaDovaMethodModuleClass {
      ValaDovaStructModuleClass parent_class;
};

struct _ValaDovaControlFlowModule {
      ValaDovaMethodModule parent_instance;
      ValaDovaControlFlowModulePrivate * priv;
};

struct _ValaDovaControlFlowModuleClass {
      ValaDovaMethodModuleClass parent_class;
};

struct _ValaDovaMemberAccessModule {
      ValaDovaControlFlowModule parent_instance;
      ValaDovaMemberAccessModulePrivate * priv;
};

struct _ValaDovaMemberAccessModuleClass {
      ValaDovaControlFlowModuleClass parent_class;
};

struct _ValaDovaAssignmentModule {
      ValaDovaMemberAccessModule parent_instance;
      ValaDovaAssignmentModulePrivate * priv;
};

struct _ValaDovaAssignmentModuleClass {
      ValaDovaMemberAccessModuleClass parent_class;
};

struct _ValaDovaMethodCallModule {
      ValaDovaAssignmentModule parent_instance;
      ValaDovaMethodCallModulePrivate * priv;
};

struct _ValaDovaMethodCallModuleClass {
      ValaDovaAssignmentModuleClass parent_class;
};

struct _ValaDovaArrayModule {
      ValaDovaMethodCallModule parent_instance;
      ValaDovaArrayModulePrivate * priv;
};

struct _ValaDovaArrayModuleClass {
      ValaDovaMethodCallModuleClass parent_class;
};

struct _ValaDovaObjectModule {
      ValaDovaArrayModule parent_instance;
      ValaDovaObjectModulePrivate * priv;
};

struct _ValaDovaObjectModuleClass {
      ValaDovaArrayModuleClass parent_class;
};


static gpointer vala_dova_object_module_parent_class = NULL;

GType vala_dova_base_module_get_type (void) G_GNUC_CONST;
gpointer vala_dova_base_module_emit_context_ref (gpointer instance);
void vala_dova_base_module_emit_context_unref (gpointer instance);
GParamSpec* vala_dova_base_module_param_spec_emit_context (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_dova_base_module_value_set_emit_context (GValue* value, gpointer v_object);
void vala_dova_base_module_value_take_emit_context (GValue* value, gpointer v_object);
gpointer vala_dova_base_module_value_get_emit_context (const GValue* value);
GType vala_dova_base_module_emit_context_get_type (void) G_GNUC_CONST;
GType vala_dova_struct_module_get_type (void) G_GNUC_CONST;
GType vala_dova_method_module_get_type (void) G_GNUC_CONST;
GType vala_dova_control_flow_module_get_type (void) G_GNUC_CONST;
GType vala_dova_member_access_module_get_type (void) G_GNUC_CONST;
GType vala_dova_assignment_module_get_type (void) G_GNUC_CONST;
GType vala_dova_method_call_module_get_type (void) G_GNUC_CONST;
GType vala_dova_array_module_get_type (void) G_GNUC_CONST;
GType vala_dova_object_module_get_type (void) G_GNUC_CONST;
enum  {
      VALA_DOVA_OBJECT_MODULE_DUMMY_PROPERTY
};
static void vala_dova_object_module_real_generate_class_declaration (ValaDovaBaseModule* base, ValaClass* cl, ValaCCodeFile* decl_space);
gboolean vala_dova_base_module_add_symbol_declaration (ValaDovaBaseModule* self, ValaCCodeFile* decl_space, ValaSymbol* sym, const gchar* name);
void vala_dova_base_module_generate_class_declaration (ValaDovaBaseModule* self, ValaClass* cl, ValaCCodeFile* decl_space);
void vala_dova_base_module_generate_method_declaration (ValaDovaBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space);
static void vala_dova_object_module_generate_virtual_method_declaration (ValaDovaObjectModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeStruct* type_struct);
void vala_dova_base_module_generate_cparameters (ValaDovaBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaCCodeFunctionCall* vcall);
static gboolean vala_dova_object_module_has_instance_struct (ValaDovaObjectModule* self, ValaClass* cl);
static gboolean vala_dova_object_module_has_type_struct (ValaDovaObjectModule* self, ValaClass* cl);
static void vala_dova_object_module_generate_class_private_declaration (ValaDovaObjectModule* self, ValaClass* cl, ValaCCodeFile* decl_space);
void vala_dova_base_module_generate_type_declaration (ValaDovaBaseModule* self, ValaDataType* type, ValaCCodeFile* decl_space);
static ValaCCodeFunction* vala_dova_object_module_create_set_value_copy_function (ValaDovaObjectModule* self, gboolean decl_only);
void vala_dova_object_module_declare_set_value_copy_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space);
static ValaCCodeFunction* vala_dova_object_module_create_set_value_equals_function (ValaDovaObjectModule* self, gboolean decl_only);
void vala_dova_object_module_declare_set_value_equals_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space);
static ValaCCodeFunction* vala_dova_object_module_create_set_value_hash_function (ValaDovaObjectModule* self, gboolean decl_only);
void vala_dova_object_module_declare_set_value_hash_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space);
static ValaCCodeFunction* vala_dova_object_module_create_set_value_to_any_function (ValaDovaObjectModule* self, gboolean decl_only);
void vala_dova_object_module_declare_set_value_to_any_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space);
static ValaCCodeFunction* vala_dova_object_module_create_set_value_from_any_function (ValaDovaObjectModule* self, gboolean decl_only);
void vala_dova_object_module_declare_set_value_from_any_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space);
ValaCCodeBlock* vala_dova_object_module_generate_type_get_function (ValaDovaObjectModule* self, ValaTypeSymbol* cl, ValaClass* base_class);
void vala_dova_base_module_generate_property_accessor_declaration (ValaDovaBaseModule* self, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space);
ValaCCodeExpression* vala_dova_base_module_get_type_private_from_type (ValaDovaBaseModule* self, ValaObjectTypeSymbol* type_symbol, ValaCCodeExpression* type_expression);
ValaCCodeExpression* vala_dova_base_module_get_type_id_expression (ValaDovaBaseModule* self, ValaDataType* type, gboolean is_chainup);
static void vala_dova_object_module_add_finalize_function (ValaDovaObjectModule* self, ValaClass* cl);
void vala_dova_base_module_push_function (ValaDovaBaseModule* self, ValaCCodeFunction* func);
gboolean vala_dova_base_module_requires_destroy (ValaDovaBaseModule* self, ValaDataType* type);
ValaDataType* vala_dova_base_module_get_data_type_for_symbol (ValaTypeSymbol* sym);
void vala_dova_base_module_set_cvalue (ValaDovaBaseModule* self, ValaExpression* expr, ValaCCodeExpression* cvalue);
ValaCCodeFunction* vala_dova_base_module_get_ccode (ValaDovaBaseModule* self);
ValaCCodeExpression* vala_dova_base_module_get_unref_expression (ValaDovaBaseModule* self, ValaCCodeExpression* cvar, ValaDataType* type, ValaExpression* expr);
void vala_dova_base_module_pop_function (ValaDovaBaseModule* self);
static void vala_dova_object_module_real_visit_class (ValaCodeVisitor* base, ValaClass* cl);
void vala_dova_base_module_push_context (ValaDovaBaseModule* self, ValaDovaBaseModuleEmitContext* emit_context);
ValaDovaBaseModuleEmitContext* vala_dova_base_module_emit_context_new (ValaSymbol* symbol);
ValaDovaBaseModuleEmitContext* vala_dova_base_module_emit_context_construct (GType object_type, ValaSymbol* symbol);
void vala_dova_base_module_generate_interface_declaration (ValaDovaBaseModule* self, ValaInterface* iface, ValaCCodeFile* decl_space);
void vala_dova_base_module_pop_context (ValaDovaBaseModule* self);
static void vala_dova_object_module_real_visit_interface (ValaCodeVisitor* base, ValaInterface* iface);
static void vala_dova_object_module_real_generate_property_accessor_declaration (ValaDovaBaseModule* base, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space);
static void vala_dova_object_module_real_visit_property_accessor (ValaCodeVisitor* base, ValaPropertyAccessor* acc);
ValaDataType* vala_dova_base_module_get_current_return_type (ValaDovaBaseModule* self);
static ValaCCodeExpression* vala_dova_object_module_get_type_from_instance (ValaDovaObjectModule* self, ValaCCodeExpression* instance_expression);
ValaCCodeExpression* vala_dova_base_module_default_value_for_type (ValaDovaBaseModule* self, ValaDataType* type, gboolean initializer_expression);
static void vala_dova_object_module_real_generate_interface_declaration (ValaDovaBaseModule* base, ValaInterface* iface, ValaCCodeFile* decl_space);
static gboolean vala_dova_object_module_real_method_has_wrapper (ValaDovaBaseModule* base, ValaMethod* method);
static gchar* vala_dova_object_module_real_get_custom_creturn_type (ValaDovaBaseModule* base, ValaMethod* m);
static void vala_dova_object_module_real_generate_method_declaration (ValaDovaBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space);
static void vala_dova_object_module_real_visit_method (ValaCodeVisitor* base, ValaMethod* m);
ValaCodeContext* vala_dova_base_module_get_context (ValaDovaBaseModule* self);
static void vala_dova_object_module_add_module_init (ValaDovaObjectModule* self);
ValaBlock* vala_dova_base_module_get_current_closure_block (ValaDovaBaseModule* self);
gint vala_dova_base_module_get_block_id (ValaDovaBaseModule* self, ValaBlock* b);
ValaBlock* vala_dova_base_module_next_closure_block (ValaDovaBaseModule* self, ValaSymbol* sym);
ValaClass* vala_dova_base_module_get_current_class (ValaDovaBaseModule* self);
ValaCCodeExpression* vala_dova_base_module_get_variable_cexpression (ValaDovaBaseModule* self, const gchar* name);
static void vala_dova_object_module_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m);
ValaTypeSymbol* vala_dova_base_module_get_current_type_symbol (ValaDovaBaseModule* self);
static ValaTypeSymbol* vala_dova_object_module_find_parent_type (ValaDovaObjectModule* self, ValaSymbol* sym);
static void vala_dova_object_module_real_generate_cparameters (ValaDovaBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaCCodeFunctionCall* vcall);
gchar* vala_dova_base_module_get_variable_cname (ValaDovaBaseModule* self, const gchar* name);
static void vala_dova_object_module_real_visit_element_access (ValaCodeVisitor* base, ValaElementAccess* expr);
ValaCCodeExpression* vala_dova_base_module_get_cvalue (ValaDovaBaseModule* self, ValaExpression* expr);
ValaDovaObjectModule* vala_dova_object_module_new (void);
ValaDovaObjectModule* vala_dova_object_module_construct (GType object_type);
ValaDovaArrayModule* vala_dova_array_module_new (void);
ValaDovaArrayModule* vala_dova_array_module_construct (GType object_type);


static void vala_dova_object_module_real_generate_class_declaration (ValaDovaBaseModule* base, ValaClass* cl, ValaCCodeFile* decl_space) {
      ValaDovaObjectModule * self;
      gchar* _tmp0_ = NULL;
      gchar* _tmp1_;
      gboolean _tmp2_;
      gboolean _tmp3_;
      ValaClass* _tmp4_ = NULL;
      ValaClass* _tmp33_ = NULL;
      ValaClass* _tmp69_ = NULL;
      ValaScope* _tmp70_ = NULL;
      ValaSymbol* _tmp71_ = NULL;
      ValaMethod* _tmp72_;
      ValaScope* _tmp73_ = NULL;
      ValaSymbol* _tmp74_ = NULL;
      ValaMethod* _tmp75_;
      gchar* _tmp76_ = NULL;
      gchar* _tmp77_;
      gchar* _tmp78_ = NULL;
      gchar* _tmp79_;
      ValaCCodeFunction* _tmp80_ = NULL;
      ValaCCodeFunction* _tmp81_;
      ValaCCodeFunction* type_fun;
      gboolean _tmp82_;
      gchar* _tmp93_ = NULL;
      gchar* _tmp94_;
      gchar* _tmp95_ = NULL;
      gchar* _tmp96_;
      ValaCCodeFunction* _tmp97_ = NULL;
      ValaCCodeFunction* _tmp98_;
      ValaCCodeFunction* type_init_fun;
      gboolean _tmp99_;
      ValaCCodeParameter* _tmp100_ = NULL;
      ValaCCodeParameter* _tmp101_;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (cl != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) cl, _tmp1_);
      _tmp3_ = _tmp2_;
      _g_free0 (_tmp1_);
      if (_tmp3_) {
            return;
      }
      _tmp4_ = vala_class_get_base_class (cl);
      if (_tmp4_ == NULL) {
            gchar* _tmp5_ = NULL;
            gchar* _tmp6_;
            gchar* _tmp7_ = NULL;
            gchar* _tmp8_;
            gchar* _tmp9_ = NULL;
            gchar* _tmp10_;
            ValaCCodeVariableDeclarator* _tmp11_ = NULL;
            ValaCCodeVariableDeclarator* _tmp12_;
            ValaCCodeTypeDefinition* _tmp13_ = NULL;
            ValaCCodeTypeDefinition* _tmp14_;
            _tmp5_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
            _tmp6_ = _tmp5_;
            _tmp7_ = g_strdup_printf ("struct _%s", _tmp6_);
            _tmp8_ = _tmp7_;
            _tmp9_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
            _tmp10_ = _tmp9_;
            _tmp11_ = vala_ccode_variable_declarator_new (_tmp10_, NULL, NULL);
            _tmp12_ = _tmp11_;
            _tmp13_ = vala_ccode_type_definition_new (_tmp8_, (ValaCCodeDeclarator*) _tmp12_);
            _tmp14_ = _tmp13_;
            vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp14_);
            _vala_ccode_node_unref0 (_tmp14_);
            _vala_ccode_node_unref0 (_tmp12_);
            _g_free0 (_tmp10_);
            _g_free0 (_tmp8_);
            _g_free0 (_tmp6_);
      } else {
            ValaTypeSymbol* _tmp15_ = NULL;
            _tmp15_ = vala_data_type_get_data_type (((ValaDovaBaseModule*) self)->string_type);
            if (VALA_TYPESYMBOL (cl) == _tmp15_) {
                  ValaClass* _tmp16_ = NULL;
                  gchar* _tmp17_ = NULL;
                  gchar* _tmp18_;
                  ValaCCodeVariableDeclarator* _tmp19_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp20_;
                  ValaCCodeTypeDefinition* _tmp21_ = NULL;
                  ValaCCodeTypeDefinition* _tmp22_;
                  _tmp16_ = vala_class_get_base_class (cl);
                  vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, _tmp16_, decl_space);
                  _tmp17_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
                  _tmp18_ = _tmp17_;
                  _tmp19_ = vala_ccode_variable_declarator_new (_tmp18_, NULL, NULL);
                  _tmp20_ = _tmp19_;
                  _tmp21_ = vala_ccode_type_definition_new ("const uint8_t *", (ValaCCodeDeclarator*) _tmp20_);
                  _tmp22_ = _tmp21_;
                  vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp22_);
                  _vala_ccode_node_unref0 (_tmp22_);
                  _vala_ccode_node_unref0 (_tmp20_);
                  _g_free0 (_tmp18_);
            } else {
                  ValaClass* _tmp23_ = NULL;
                  ValaClass* _tmp24_ = NULL;
                  gchar* _tmp25_ = NULL;
                  gchar* _tmp26_;
                  gchar* _tmp27_ = NULL;
                  gchar* _tmp28_;
                  ValaCCodeVariableDeclarator* _tmp29_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp30_;
                  ValaCCodeTypeDefinition* _tmp31_ = NULL;
                  ValaCCodeTypeDefinition* _tmp32_;
                  _tmp23_ = vala_class_get_base_class (cl);
                  vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, _tmp23_, decl_space);
                  _tmp24_ = vala_class_get_base_class (cl);
                  _tmp25_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) _tmp24_, FALSE);
                  _tmp26_ = _tmp25_;
                  _tmp27_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
                  _tmp28_ = _tmp27_;
                  _tmp29_ = vala_ccode_variable_declarator_new (_tmp28_, NULL, NULL);
                  _tmp30_ = _tmp29_;
                  _tmp31_ = vala_ccode_type_definition_new (_tmp26_, (ValaCCodeDeclarator*) _tmp30_);
                  _tmp32_ = _tmp31_;
                  vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp32_);
                  _vala_ccode_node_unref0 (_tmp32_);
                  _vala_ccode_node_unref0 (_tmp30_);
                  _g_free0 (_tmp28_);
                  _g_free0 (_tmp26_);
            }
      }
      _tmp33_ = vala_class_get_base_class (cl);
      if (_tmp33_ == NULL) {
            gchar* _tmp34_ = NULL;
            gchar* _tmp35_;
            gchar* _tmp36_ = NULL;
            gchar* _tmp37_;
            ValaCCodeStruct* _tmp38_ = NULL;
            ValaCCodeStruct* _tmp39_;
            ValaCCodeStruct* instance_struct;
            _tmp34_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
            _tmp35_ = _tmp34_;
            _tmp36_ = g_strdup_printf ("_%s", _tmp35_);
            _tmp37_ = _tmp36_;
            _tmp38_ = vala_ccode_struct_new (_tmp37_);
            _tmp39_ = _tmp38_;
            _g_free0 (_tmp37_);
            _g_free0 (_tmp35_);
            instance_struct = _tmp39_;
            vala_ccode_struct_add_field (instance_struct, "DovaType *", "type", NULL);
            vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) instance_struct);
            _vala_ccode_node_unref0 (instance_struct);
      } else {
            if (cl == ((ValaDovaBaseModule*) self)->type_class) {
                  ValaCCodeFunction* _tmp40_ = NULL;
                  ValaCCodeFunction* value_copy_function;
                  ValaCCodeParameter* _tmp41_ = NULL;
                  ValaCCodeParameter* _tmp42_;
                  ValaCCodeParameter* _tmp43_ = NULL;
                  ValaCCodeParameter* _tmp44_;
                  ValaCCodeParameter* _tmp45_ = NULL;
                  ValaCCodeParameter* _tmp46_;
                  ValaCCodeParameter* _tmp47_ = NULL;
                  ValaCCodeParameter* _tmp48_;
                  ValaCCodeParameter* _tmp49_ = NULL;
                  ValaCCodeParameter* _tmp50_;
                  ValaCCodeFunction* _tmp51_ = NULL;
                  ValaCCodeFunction* value_equals_function;
                  ValaCCodeParameter* _tmp52_ = NULL;
                  ValaCCodeParameter* _tmp53_;
                  ValaCCodeParameter* _tmp54_ = NULL;
                  ValaCCodeParameter* _tmp55_;
                  ValaCCodeParameter* _tmp56_ = NULL;
                  ValaCCodeParameter* _tmp57_;
                  ValaCCodeParameter* _tmp58_ = NULL;
                  ValaCCodeParameter* _tmp59_;
                  ValaCCodeParameter* _tmp60_ = NULL;
                  ValaCCodeParameter* _tmp61_;
                  ValaCCodeFunction* _tmp62_ = NULL;
                  ValaCCodeFunction* value_hash_function;
                  ValaCCodeParameter* _tmp63_ = NULL;
                  ValaCCodeParameter* _tmp64_;
                  ValaCCodeParameter* _tmp65_ = NULL;
                  ValaCCodeParameter* _tmp66_;
                  ValaCCodeParameter* _tmp67_ = NULL;
                  ValaCCodeParameter* _tmp68_;
                  _tmp40_ = vala_ccode_function_new ("dova_type_value_copy", "void");
                  value_copy_function = _tmp40_;
                  _tmp41_ = vala_ccode_parameter_new ("type", "DovaType *");
                  _tmp42_ = _tmp41_;
                  vala_ccode_function_add_parameter (value_copy_function, _tmp42_);
                  _vala_ccode_node_unref0 (_tmp42_);
                  _tmp43_ = vala_ccode_parameter_new ("dest", "void *");
                  _tmp44_ = _tmp43_;
                  vala_ccode_function_add_parameter (value_copy_function, _tmp44_);
                  _vala_ccode_node_unref0 (_tmp44_);
                  _tmp45_ = vala_ccode_parameter_new ("dest_index", "intptr_t");
                  _tmp46_ = _tmp45_;
                  vala_ccode_function_add_parameter (value_copy_function, _tmp46_);
                  _vala_ccode_node_unref0 (_tmp46_);
                  _tmp47_ = vala_ccode_parameter_new ("src", "void *");
                  _tmp48_ = _tmp47_;
                  vala_ccode_function_add_parameter (value_copy_function, _tmp48_);
                  _vala_ccode_node_unref0 (_tmp48_);
                  _tmp49_ = vala_ccode_parameter_new ("src_index", "intptr_t");
                  _tmp50_ = _tmp49_;
                  vala_ccode_function_add_parameter (value_copy_function, _tmp50_);
                  _vala_ccode_node_unref0 (_tmp50_);
                  vala_ccode_file_add_function_declaration (((ValaDovaBaseModule*) self)->cfile, value_copy_function);
                  _tmp51_ = vala_ccode_function_new ("dova_type_value_equals", "bool");
                  value_equals_function = _tmp51_;
                  _tmp52_ = vala_ccode_parameter_new ("type", "DovaType *");
                  _tmp53_ = _tmp52_;
                  vala_ccode_function_add_parameter (value_equals_function, _tmp53_);
                  _vala_ccode_node_unref0 (_tmp53_);
                  _tmp54_ = vala_ccode_parameter_new ("value", "void *");
                  _tmp55_ = _tmp54_;
                  vala_ccode_function_add_parameter (value_equals_function, _tmp55_);
                  _vala_ccode_node_unref0 (_tmp55_);
                  _tmp56_ = vala_ccode_parameter_new ("value_index", "intptr_t");
                  _tmp57_ = _tmp56_;
                  vala_ccode_function_add_parameter (value_equals_function, _tmp57_);
                  _vala_ccode_node_unref0 (_tmp57_);
                  _tmp58_ = vala_ccode_parameter_new ("other", "void *");
                  _tmp59_ = _tmp58_;
                  vala_ccode_function_add_parameter (value_equals_function, _tmp59_);
                  _vala_ccode_node_unref0 (_tmp59_);
                  _tmp60_ = vala_ccode_parameter_new ("other_index", "intptr_t");
                  _tmp61_ = _tmp60_;
                  vala_ccode_function_add_parameter (value_equals_function, _tmp61_);
                  _vala_ccode_node_unref0 (_tmp61_);
                  vala_ccode_file_add_function_declaration (((ValaDovaBaseModule*) self)->cfile, value_equals_function);
                  _tmp62_ = vala_ccode_function_new ("dova_type_value_hash", "uintptr_t");
                  value_hash_function = _tmp62_;
                  _tmp63_ = vala_ccode_parameter_new ("type", "DovaType *");
                  _tmp64_ = _tmp63_;
                  vala_ccode_function_add_parameter (value_hash_function, _tmp64_);
                  _vala_ccode_node_unref0 (_tmp64_);
                  _tmp65_ = vala_ccode_parameter_new ("value", "void *");
                  _tmp66_ = _tmp65_;
                  vala_ccode_function_add_parameter (value_hash_function, _tmp66_);
                  _vala_ccode_node_unref0 (_tmp66_);
                  _tmp67_ = vala_ccode_parameter_new ("value_index", "intptr_t");
                  _tmp68_ = _tmp67_;
                  vala_ccode_function_add_parameter (value_hash_function, _tmp68_);
                  _vala_ccode_node_unref0 (_tmp68_);
                  vala_ccode_file_add_function_declaration (((ValaDovaBaseModule*) self)->cfile, value_hash_function);
                  _vala_ccode_node_unref0 (value_hash_function);
                  _vala_ccode_node_unref0 (value_equals_function);
                  _vala_ccode_node_unref0 (value_copy_function);
            }
      }
      _tmp69_ = vala_class_get_base_class (cl);
      if (_tmp69_ != NULL) {
            vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, ((ValaDovaBaseModule*) self)->type_class, decl_space);
      }
      _tmp70_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->object_class);
      _tmp71_ = vala_scope_lookup (_tmp70_, "ref");
      _tmp72_ = VALA_METHOD (_tmp71_);
      vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, _tmp72_, decl_space);
      _vala_code_node_unref0 (_tmp72_);
      _tmp73_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->object_class);
      _tmp74_ = vala_scope_lookup (_tmp73_, "unref");
      _tmp75_ = VALA_METHOD (_tmp74_);
      vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, _tmp75_, decl_space);
      _vala_code_node_unref0 (_tmp75_);
      _tmp76_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp77_ = _tmp76_;
      _tmp78_ = g_strdup_printf ("%s_type_get", _tmp77_);
      _tmp79_ = _tmp78_;
      _tmp80_ = vala_ccode_function_new (_tmp79_, "DovaType *");
      _tmp81_ = _tmp80_;
      _g_free0 (_tmp79_);
      _g_free0 (_tmp77_);
      type_fun = _tmp81_;
      _tmp82_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
      if (_tmp82_) {
            vala_ccode_function_set_modifiers (type_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      {
            ValaList* _tmp83_ = NULL;
            ValaList* _type_param_list;
            gint _tmp84_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp83_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
            _type_param_list = _tmp83_;
            _tmp84_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp84_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp85_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp86_ = NULL;
                  gchar* _tmp87_ = NULL;
                  gchar* _tmp88_;
                  gchar* _tmp89_ = NULL;
                  gchar* _tmp90_;
                  ValaCCodeParameter* _tmp91_ = NULL;
                  ValaCCodeParameter* _tmp92_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp85_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp85_;
                  _tmp86_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp87_ = g_utf8_strdown (_tmp86_, (gssize) (-1));
                  _tmp88_ = _tmp87_;
                  _tmp89_ = g_strdup_printf ("%s_type", _tmp88_);
                  _tmp90_ = _tmp89_;
                  _tmp91_ = vala_ccode_parameter_new (_tmp90_, "DovaType *");
                  _tmp92_ = _tmp91_;
                  vala_ccode_function_add_parameter (type_fun, _tmp92_);
                  _vala_ccode_node_unref0 (_tmp92_);
                  _g_free0 (_tmp90_);
                  _g_free0 (_tmp88_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      vala_ccode_file_add_function_declaration (decl_space, type_fun);
      _tmp93_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp94_ = _tmp93_;
      _tmp95_ = g_strdup_printf ("%s_type_init", _tmp94_);
      _tmp96_ = _tmp95_;
      _tmp97_ = vala_ccode_function_new (_tmp96_, "void");
      _tmp98_ = _tmp97_;
      _g_free0 (_tmp96_);
      _g_free0 (_tmp94_);
      type_init_fun = _tmp98_;
      _tmp99_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
      if (_tmp99_) {
            vala_ccode_function_set_modifiers (type_init_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      _tmp100_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp101_ = _tmp100_;
      vala_ccode_function_add_parameter (type_init_fun, _tmp101_);
      _vala_ccode_node_unref0 (_tmp101_);
      {
            ValaList* _tmp102_ = NULL;
            ValaList* _type_param_list;
            gint _tmp103_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp102_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
            _type_param_list = _tmp102_;
            _tmp103_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp103_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp104_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp105_ = NULL;
                  gchar* _tmp106_ = NULL;
                  gchar* _tmp107_;
                  gchar* _tmp108_ = NULL;
                  gchar* _tmp109_;
                  ValaCCodeParameter* _tmp110_ = NULL;
                  ValaCCodeParameter* _tmp111_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp104_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp104_;
                  _tmp105_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp106_ = g_utf8_strdown (_tmp105_, (gssize) (-1));
                  _tmp107_ = _tmp106_;
                  _tmp108_ = g_strdup_printf ("%s_type", _tmp107_);
                  _tmp109_ = _tmp108_;
                  _tmp110_ = vala_ccode_parameter_new (_tmp109_, "DovaType *");
                  _tmp111_ = _tmp110_;
                  vala_ccode_function_add_parameter (type_init_fun, _tmp111_);
                  _vala_ccode_node_unref0 (_tmp111_);
                  _g_free0 (_tmp109_);
                  _g_free0 (_tmp107_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      vala_ccode_file_add_function_declaration (decl_space, type_init_fun);
      _vala_ccode_node_unref0 (type_init_fun);
      _vala_ccode_node_unref0 (type_fun);
}


static void vala_dova_object_module_generate_virtual_method_declaration (ValaDovaObjectModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeStruct* type_struct) {
      gboolean _tmp0_ = FALSE;
      gboolean _tmp1_;
      const gchar* _tmp3_ = NULL;
      ValaCCodeFunctionDeclarator* _tmp4_ = NULL;
      ValaCCodeFunctionDeclarator* vdeclarator;
      ValaCCodeFunction* _tmp5_ = NULL;
      ValaCCodeFunction* _tmp6_;
      ValaDataType* _tmp7_ = NULL;
      gchar* _tmp8_ = NULL;
      gchar* _tmp9_;
      ValaCCodeDeclaration* _tmp10_ = NULL;
      ValaCCodeDeclaration* _tmp11_;
      ValaCCodeDeclaration* vdecl;
      g_return_if_fail (self != NULL);
      g_return_if_fail (m != NULL);
      g_return_if_fail (decl_space != NULL);
      g_return_if_fail (type_struct != NULL);
      _tmp1_ = vala_method_get_is_abstract (m);
      if (!_tmp1_) {
            gboolean _tmp2_;
            _tmp2_ = vala_method_get_is_virtual (m);
            _tmp0_ = !_tmp2_;
      } else {
            _tmp0_ = FALSE;
      }
      if (_tmp0_) {
            return;
      }
      _tmp3_ = vala_method_get_vfunc_name (m);
      _tmp4_ = vala_ccode_function_declarator_new (_tmp3_);
      vdeclarator = _tmp4_;
      _tmp5_ = vala_ccode_function_new ("fake", "void");
      _tmp6_ = _tmp5_;
      vala_dova_base_module_generate_cparameters ((ValaDovaBaseModule*) self, m, decl_space, _tmp6_, vdeclarator, NULL);
      _vala_ccode_node_unref0 (_tmp6_);
      _tmp7_ = vala_method_get_return_type (m);
      _tmp8_ = vala_data_type_get_cname (_tmp7_);
      _tmp9_ = _tmp8_;
      _tmp10_ = vala_ccode_declaration_new (_tmp9_);
      _tmp11_ = _tmp10_;
      _g_free0 (_tmp9_);
      vdecl = _tmp11_;
      vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
      vala_ccode_struct_add_declaration (type_struct, vdecl);
      _vala_ccode_node_unref0 (vdecl);
      _vala_ccode_node_unref0 (vdeclarator);
}


static gboolean vala_dova_object_module_has_instance_struct (ValaDovaObjectModule* self, ValaClass* cl) {
      gboolean result = FALSE;
      g_return_val_if_fail (self != NULL, FALSE);
      g_return_val_if_fail (cl != NULL, FALSE);
      {
            ValaList* _tmp0_ = NULL;
            ValaList* _f_list;
            gint _tmp1_;
            gint _f_size;
            gint _f_index;
            _tmp0_ = vala_class_get_fields (cl);
            _f_list = _tmp0_;
            _tmp1_ = vala_collection_get_size ((ValaCollection*) _f_list);
            _f_size = _tmp1_;
            _f_index = -1;
            while (TRUE) {
                  gpointer _tmp2_ = NULL;
                  ValaField* f;
                  ValaMemberBinding _tmp3_;
                  _f_index = _f_index + 1;
                  if (!(_f_index < _f_size)) {
                        break;
                  }
                  _tmp2_ = vala_list_get (_f_list, _f_index);
                  f = (ValaField*) _tmp2_;
                  _tmp3_ = vala_field_get_binding (f);
                  if (_tmp3_ == VALA_MEMBER_BINDING_INSTANCE) {
                        result = TRUE;
                        _vala_code_node_unref0 (f);
                        _vala_iterable_unref0 (_f_list);
                        return result;
                  }
                  _vala_code_node_unref0 (f);
            }
            _vala_iterable_unref0 (_f_list);
      }
      result = FALSE;
      return result;
}


static gboolean vala_dova_object_module_has_type_struct (ValaDovaObjectModule* self, ValaClass* cl) {
      gboolean result = FALSE;
      ValaList* _tmp0_ = NULL;
      ValaList* _tmp1_;
      gint _tmp2_;
      gboolean _tmp3_;
      g_return_val_if_fail (self != NULL, FALSE);
      g_return_val_if_fail (cl != NULL, FALSE);
      _tmp0_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
      _tmp3_ = _tmp2_ > 0;
      _vala_iterable_unref0 (_tmp1_);
      if (_tmp3_) {
            result = TRUE;
            return result;
      }
      {
            ValaList* _tmp4_ = NULL;
            ValaList* _m_list;
            gint _tmp5_;
            gint _m_size;
            gint _m_index;
            _tmp4_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
            _m_list = _tmp4_;
            _tmp5_ = vala_collection_get_size ((ValaCollection*) _m_list);
            _m_size = _tmp5_;
            _m_index = -1;
            while (TRUE) {
                  gpointer _tmp6_ = NULL;
                  ValaMethod* m;
                  gboolean _tmp7_ = FALSE;
                  gboolean _tmp8_;
                  _m_index = _m_index + 1;
                  if (!(_m_index < _m_size)) {
                        break;
                  }
                  _tmp6_ = vala_list_get (_m_list, _m_index);
                  m = (ValaMethod*) _tmp6_;
                  _tmp8_ = vala_method_get_is_abstract (m);
                  if (_tmp8_) {
                        _tmp7_ = TRUE;
                  } else {
                        gboolean _tmp9_;
                        _tmp9_ = vala_method_get_is_virtual (m);
                        _tmp7_ = _tmp9_;
                  }
                  if (_tmp7_) {
                        result = TRUE;
                        _vala_code_node_unref0 (m);
                        _vala_iterable_unref0 (_m_list);
                        return result;
                  }
                  _vala_code_node_unref0 (m);
            }
            _vala_iterable_unref0 (_m_list);
      }
      {
            ValaList* _tmp10_ = NULL;
            ValaList* _prop_list;
            gint _tmp11_;
            gint _prop_size;
            gint _prop_index;
            _tmp10_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
            _prop_list = _tmp10_;
            _tmp11_ = vala_collection_get_size ((ValaCollection*) _prop_list);
            _prop_size = _tmp11_;
            _prop_index = -1;
            while (TRUE) {
                  gpointer _tmp12_ = NULL;
                  ValaProperty* prop;
                  gboolean _tmp13_ = FALSE;
                  gboolean _tmp14_;
                  _prop_index = _prop_index + 1;
                  if (!(_prop_index < _prop_size)) {
                        break;
                  }
                  _tmp12_ = vala_list_get (_prop_list, _prop_index);
                  prop = (ValaProperty*) _tmp12_;
                  _tmp14_ = vala_property_get_is_abstract (prop);
                  if (_tmp14_) {
                        _tmp13_ = TRUE;
                  } else {
                        gboolean _tmp15_;
                        _tmp15_ = vala_property_get_is_virtual (prop);
                        _tmp13_ = _tmp15_;
                  }
                  if (_tmp13_) {
                        result = TRUE;
                        _vala_code_node_unref0 (prop);
                        _vala_iterable_unref0 (_prop_list);
                        return result;
                  }
                  _vala_code_node_unref0 (prop);
            }
            _vala_iterable_unref0 (_prop_list);
      }
      result = FALSE;
      return result;
}


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


static void vala_dova_object_module_generate_class_private_declaration (ValaDovaObjectModule* self, ValaClass* cl, ValaCCodeFile* decl_space) {
      gchar* _tmp0_ = NULL;
      gchar* _tmp1_;
      gchar* _tmp2_;
      gchar* _tmp3_;
      gboolean _tmp4_;
      gboolean _tmp5_;
      gchar* _tmp6_ = NULL;
      gchar* _tmp7_;
      gchar* _tmp8_ = NULL;
      gchar* _tmp9_;
      ValaCCodeStruct* _tmp10_ = NULL;
      ValaCCodeStruct* _tmp11_;
      ValaCCodeStruct* instance_priv_struct;
      gchar* _tmp12_ = NULL;
      gchar* _tmp13_;
      gchar* _tmp14_ = NULL;
      gchar* _tmp15_;
      ValaCCodeStruct* _tmp16_ = NULL;
      ValaCCodeStruct* _tmp17_;
      ValaCCodeStruct* type_priv_struct;
      gchar* _tmp34_ = NULL;
      gchar* _tmp35_;
      gboolean _tmp36_;
      gboolean _tmp126_;
      gboolean _tmp138_;
      ValaCCodeDeclaration* _tmp150_ = NULL;
      ValaCCodeDeclaration* _cdecl_;
      gchar* _tmp151_ = NULL;
      gchar* _tmp152_;
      gchar* _tmp153_ = NULL;
      gchar* _tmp154_;
      ValaCCodeConstant* _tmp155_ = NULL;
      ValaCCodeConstant* _tmp156_;
      ValaCCodeVariableDeclarator* _tmp157_ = NULL;
      ValaCCodeVariableDeclarator* _tmp158_;
      ValaCCodeExpression* type_offset = NULL;
      gchar* macro = NULL;
      ValaClass* _tmp159_ = NULL;
      gboolean _tmp178_;
      ValaCCodeDeclaration* _tmp185_ = NULL;
      gchar* _tmp186_ = NULL;
      gchar* _tmp187_;
      gchar* _tmp188_ = NULL;
      gchar* _tmp189_;
      ValaCCodeVariableDeclarator* _tmp190_ = NULL;
      ValaCCodeVariableDeclarator* _tmp191_;
      g_return_if_fail (self != NULL);
      g_return_if_fail (cl != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
      _tmp1_ = _tmp0_;
      _tmp2_ = g_strconcat (_tmp1_, "Private", NULL);
      _tmp3_ = _tmp2_;
      _tmp4_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) cl, _tmp3_);
      _tmp5_ = _tmp4_;
      _g_free0 (_tmp3_);
      _g_free0 (_tmp1_);
      if (_tmp5_) {
            return;
      }
      _tmp6_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
      _tmp7_ = _tmp6_;
      _tmp8_ = g_strdup_printf ("_%sPrivate", _tmp7_);
      _tmp9_ = _tmp8_;
      _tmp10_ = vala_ccode_struct_new (_tmp9_);
      _tmp11_ = _tmp10_;
      _g_free0 (_tmp9_);
      _g_free0 (_tmp7_);
      instance_priv_struct = _tmp11_;
      _tmp12_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
      _tmp13_ = _tmp12_;
      _tmp14_ = g_strdup_printf ("_%sTypePrivate", _tmp13_);
      _tmp15_ = _tmp14_;
      _tmp16_ = vala_ccode_struct_new (_tmp15_);
      _tmp17_ = _tmp16_;
      _g_free0 (_tmp15_);
      _g_free0 (_tmp13_);
      type_priv_struct = _tmp17_;
      {
            ValaList* _tmp18_ = NULL;
            ValaList* _f_list;
            gint _tmp19_;
            gint _f_size;
            gint _f_index;
            _tmp18_ = vala_class_get_fields (cl);
            _f_list = _tmp18_;
            _tmp19_ = vala_collection_get_size ((ValaCollection*) _f_list);
            _f_size = _tmp19_;
            _f_index = -1;
            while (TRUE) {
                  gpointer _tmp20_ = NULL;
                  ValaField* f;
                  ValaMemberBinding _tmp21_;
                  _f_index = _f_index + 1;
                  if (!(_f_index < _f_size)) {
                        break;
                  }
                  _tmp20_ = vala_list_get (_f_list, _f_index);
                  f = (ValaField*) _tmp20_;
                  _tmp21_ = vala_field_get_binding (f);
                  if (_tmp21_ == VALA_MEMBER_BINDING_INSTANCE) {
                        ValaDataType* _tmp22_ = NULL;
                        ValaDataType* _tmp23_ = NULL;
                        gchar* _tmp24_ = NULL;
                        gchar* field_ctype;
                        gboolean _tmp25_;
                        gchar* _tmp27_ = NULL;
                        gchar* _tmp28_;
                        ValaDataType* _tmp29_ = NULL;
                        gchar* _tmp30_ = NULL;
                        gchar* _tmp31_;
                        gchar* _tmp32_;
                        gchar* _tmp33_;
                        _tmp22_ = vala_variable_get_variable_type ((ValaVariable*) f);
                        vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, _tmp22_, decl_space);
                        _tmp23_ = vala_variable_get_variable_type ((ValaVariable*) f);
                        _tmp24_ = vala_data_type_get_cname (_tmp23_);
                        field_ctype = _tmp24_;
                        _tmp25_ = vala_field_get_is_volatile (f);
                        if (_tmp25_) {
                              gchar* _tmp26_;
                              _tmp26_ = g_strconcat ("volatile ", field_ctype, NULL);
                              _g_free0 (field_ctype);
                              field_ctype = _tmp26_;
                        }
                        _tmp27_ = vala_field_get_cname (f);
                        _tmp28_ = _tmp27_;
                        _tmp29_ = vala_variable_get_variable_type ((ValaVariable*) f);
                        _tmp30_ = vala_data_type_get_cdeclarator_suffix (_tmp29_);
                        _tmp31_ = _tmp30_;
                        _tmp32_ = g_strconcat (_tmp28_, _tmp31_, NULL);
                        _tmp33_ = _tmp32_;
                        vala_ccode_struct_add_field (instance_priv_struct, field_ctype, _tmp33_, NULL);
                        _g_free0 (_tmp33_);
                        _g_free0 (_tmp31_);
                        _g_free0 (_tmp28_);
                        _g_free0 (field_ctype);
                  }
                  _vala_code_node_unref0 (f);
            }
            _vala_iterable_unref0 (_f_list);
      }
      _tmp34_ = vala_symbol_get_full_name ((ValaSymbol*) cl);
      _tmp35_ = _tmp34_;
      _tmp36_ = g_strcmp0 (_tmp35_, "Dova.Type") == 0;
      _g_free0 (_tmp35_);
      if (_tmp36_) {
            ValaCCodeFunctionDeclarator* _tmp37_ = NULL;
            ValaCCodeFunctionDeclarator* vdeclarator;
            ValaCCodeParameter* _tmp38_ = NULL;
            ValaCCodeParameter* _tmp39_;
            ValaCCodeParameter* _tmp40_ = NULL;
            ValaCCodeParameter* _tmp41_;
            ValaCCodeParameter* _tmp42_ = NULL;
            ValaCCodeParameter* _tmp43_;
            ValaCCodeParameter* _tmp44_ = NULL;
            ValaCCodeParameter* _tmp45_;
            ValaCCodeDeclaration* _tmp46_ = NULL;
            ValaCCodeDeclaration* vdecl;
            ValaCCodeFunctionDeclarator* _tmp47_ = NULL;
            ValaCCodeParameter* _tmp48_ = NULL;
            ValaCCodeParameter* _tmp49_;
            ValaCCodeParameter* _tmp50_ = NULL;
            ValaCCodeParameter* _tmp51_;
            ValaCCodeParameter* _tmp52_ = NULL;
            ValaCCodeParameter* _tmp53_;
            ValaCCodeParameter* _tmp54_ = NULL;
            ValaCCodeParameter* _tmp55_;
            ValaCCodeDeclaration* _tmp56_ = NULL;
            ValaCCodeFunctionDeclarator* _tmp57_ = NULL;
            ValaCCodeParameter* _tmp58_ = NULL;
            ValaCCodeParameter* _tmp59_;
            ValaCCodeParameter* _tmp60_ = NULL;
            ValaCCodeParameter* _tmp61_;
            ValaCCodeDeclaration* _tmp62_ = NULL;
            ValaCCodeFunctionDeclarator* _tmp63_ = NULL;
            ValaCCodeParameter* _tmp64_ = NULL;
            ValaCCodeParameter* _tmp65_;
            ValaCCodeParameter* _tmp66_ = NULL;
            ValaCCodeParameter* _tmp67_;
            ValaCCodeDeclaration* _tmp68_ = NULL;
            ValaCCodeFunctionDeclarator* _tmp69_ = NULL;
            ValaCCodeParameter* _tmp70_ = NULL;
            ValaCCodeParameter* _tmp71_;
            ValaCCodeParameter* _tmp72_ = NULL;
            ValaCCodeParameter* _tmp73_;
            ValaCCodeParameter* _tmp74_ = NULL;
            ValaCCodeParameter* _tmp75_;
            ValaCCodeDeclaration* _tmp76_ = NULL;
            _tmp37_ = vala_ccode_function_declarator_new ("value_copy");
            vdeclarator = _tmp37_;
            _tmp38_ = vala_ccode_parameter_new ("dest", "void *");
            _tmp39_ = _tmp38_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp39_);
            _vala_ccode_node_unref0 (_tmp39_);
            _tmp40_ = vala_ccode_parameter_new ("dest_index", "intptr_t");
            _tmp41_ = _tmp40_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp41_);
            _vala_ccode_node_unref0 (_tmp41_);
            _tmp42_ = vala_ccode_parameter_new ("src", "void *");
            _tmp43_ = _tmp42_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp43_);
            _vala_ccode_node_unref0 (_tmp43_);
            _tmp44_ = vala_ccode_parameter_new ("src_index", "intptr_t");
            _tmp45_ = _tmp44_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp45_);
            _vala_ccode_node_unref0 (_tmp45_);
            _tmp46_ = vala_ccode_declaration_new ("void");
            vdecl = _tmp46_;
            vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
            vala_ccode_struct_add_declaration (instance_priv_struct, vdecl);
            _tmp47_ = vala_ccode_function_declarator_new ("value_equals");
            _vala_ccode_node_unref0 (vdeclarator);
            vdeclarator = _tmp47_;
            _tmp48_ = vala_ccode_parameter_new ("value", "void *");
            _tmp49_ = _tmp48_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp49_);
            _vala_ccode_node_unref0 (_tmp49_);
            _tmp50_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp51_ = _tmp50_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp51_);
            _vala_ccode_node_unref0 (_tmp51_);
            _tmp52_ = vala_ccode_parameter_new ("other", "void *");
            _tmp53_ = _tmp52_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp53_);
            _vala_ccode_node_unref0 (_tmp53_);
            _tmp54_ = vala_ccode_parameter_new ("other_index", "intptr_t");
            _tmp55_ = _tmp54_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp55_);
            _vala_ccode_node_unref0 (_tmp55_);
            _tmp56_ = vala_ccode_declaration_new ("bool");
            _vala_ccode_node_unref0 (vdecl);
            vdecl = _tmp56_;
            vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
            vala_ccode_struct_add_declaration (instance_priv_struct, vdecl);
            _tmp57_ = vala_ccode_function_declarator_new ("value_hash");
            _vala_ccode_node_unref0 (vdeclarator);
            vdeclarator = _tmp57_;
            _tmp58_ = vala_ccode_parameter_new ("value", "void *");
            _tmp59_ = _tmp58_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp59_);
            _vala_ccode_node_unref0 (_tmp59_);
            _tmp60_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp61_ = _tmp60_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp61_);
            _vala_ccode_node_unref0 (_tmp61_);
            _tmp62_ = vala_ccode_declaration_new ("uintptr_t");
            _vala_ccode_node_unref0 (vdecl);
            vdecl = _tmp62_;
            vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
            vala_ccode_struct_add_declaration (instance_priv_struct, vdecl);
            _tmp63_ = vala_ccode_function_declarator_new ("value_to_any");
            _vala_ccode_node_unref0 (vdeclarator);
            vdeclarator = _tmp63_;
            _tmp64_ = vala_ccode_parameter_new ("value", "void *");
            _tmp65_ = _tmp64_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp65_);
            _vala_ccode_node_unref0 (_tmp65_);
            _tmp66_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp67_ = _tmp66_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp67_);
            _vala_ccode_node_unref0 (_tmp67_);
            _tmp68_ = vala_ccode_declaration_new ("DovaObject *");
            _vala_ccode_node_unref0 (vdecl);
            vdecl = _tmp68_;
            vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
            vala_ccode_struct_add_declaration (instance_priv_struct, vdecl);
            _tmp69_ = vala_ccode_function_declarator_new ("value_from_any");
            _vala_ccode_node_unref0 (vdeclarator);
            vdeclarator = _tmp69_;
            _tmp70_ = vala_ccode_parameter_new ("any_", "any *");
            _tmp71_ = _tmp70_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp71_);
            _vala_ccode_node_unref0 (_tmp71_);
            _tmp72_ = vala_ccode_parameter_new ("value", "void *");
            _tmp73_ = _tmp72_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp73_);
            _vala_ccode_node_unref0 (_tmp73_);
            _tmp74_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp75_ = _tmp74_;
            vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp75_);
            _vala_ccode_node_unref0 (_tmp75_);
            _tmp76_ = vala_ccode_declaration_new ("void");
            _vala_ccode_node_unref0 (vdecl);
            vdecl = _tmp76_;
            vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
            vala_ccode_struct_add_declaration (instance_priv_struct, vdecl);
            _vala_ccode_node_unref0 (vdecl);
            _vala_ccode_node_unref0 (vdeclarator);
      }
      {
            ValaList* _tmp77_ = NULL;
            ValaList* _type_param_list;
            gint _tmp78_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp77_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
            _type_param_list = _tmp77_;
            _tmp78_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp78_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp79_ = NULL;
                  ValaTypeParameter* type_param;
                  ValaCCodeDeclaration* _tmp80_ = NULL;
                  ValaCCodeDeclaration* type_param_decl;
                  const gchar* _tmp81_ = NULL;
                  gchar* _tmp82_ = NULL;
                  gchar* _tmp83_;
                  gchar* _tmp84_ = NULL;
                  gchar* _tmp85_;
                  ValaCCodeVariableDeclarator* _tmp86_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp87_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp79_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp79_;
                  _tmp80_ = vala_ccode_declaration_new ("DovaType *");
                  type_param_decl = _tmp80_;
                  _tmp81_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp82_ = g_utf8_strdown (_tmp81_, (gssize) (-1));
                  _tmp83_ = _tmp82_;
                  _tmp84_ = g_strdup_printf ("%s_type", _tmp83_);
                  _tmp85_ = _tmp84_;
                  _tmp86_ = vala_ccode_variable_declarator_new (_tmp85_, NULL, NULL);
                  _tmp87_ = _tmp86_;
                  vala_ccode_declaration_add_declarator (type_param_decl, (ValaCCodeDeclarator*) _tmp87_);
                  _vala_ccode_node_unref0 (_tmp87_);
                  _g_free0 (_tmp85_);
                  _g_free0 (_tmp83_);
                  vala_ccode_struct_add_declaration (type_priv_struct, type_param_decl);
                  _vala_ccode_node_unref0 (type_param_decl);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      {
            ValaList* _tmp88_ = NULL;
            ValaList* _m_list;
            gint _tmp89_;
            gint _m_size;
            gint _m_index;
            _tmp88_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
            _m_list = _tmp88_;
            _tmp89_ = vala_collection_get_size ((ValaCollection*) _m_list);
            _m_size = _tmp89_;
            _m_index = -1;
            while (TRUE) {
                  gpointer _tmp90_ = NULL;
                  ValaMethod* m;
                  _m_index = _m_index + 1;
                  if (!(_m_index < _m_size)) {
                        break;
                  }
                  _tmp90_ = vala_list_get (_m_list, _m_index);
                  m = (ValaMethod*) _tmp90_;
                  vala_dova_object_module_generate_virtual_method_declaration (self, m, decl_space, type_priv_struct);
                  _vala_code_node_unref0 (m);
            }
            _vala_iterable_unref0 (_m_list);
      }
      {
            ValaList* _tmp91_ = NULL;
            ValaList* _prop_list;
            gint _tmp92_;
            gint _prop_size;
            gint _prop_index;
            _tmp91_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
            _prop_list = _tmp91_;
            _tmp92_ = vala_collection_get_size ((ValaCollection*) _prop_list);
            _prop_size = _tmp92_;
            _prop_index = -1;
            while (TRUE) {
                  gpointer _tmp93_ = NULL;
                  ValaProperty* prop;
                  gboolean _tmp94_ = FALSE;
                  gboolean _tmp95_;
                  ValaDataType* _tmp97_ = NULL;
                  ValaSymbol* _tmp98_ = NULL;
                  ValaObjectTypeSymbol* _tmp99_;
                  ValaObjectTypeSymbol* t;
                  ValaObjectType* _tmp100_ = NULL;
                  ValaObjectType* this_type;
                  gchar* _tmp101_ = NULL;
                  gchar* _tmp102_;
                  ValaCCodeParameter* _tmp103_ = NULL;
                  ValaCCodeParameter* _tmp104_;
                  ValaCCodeParameter* cselfparam;
                  ValaDataType* _tmp105_ = NULL;
                  gchar* _tmp106_ = NULL;
                  gchar* _tmp107_;
                  ValaCCodeParameter* _tmp108_ = NULL;
                  ValaCCodeParameter* _tmp109_;
                  ValaCCodeParameter* cvalueparam;
                  ValaPropertyAccessor* _tmp110_ = NULL;
                  ValaPropertyAccessor* _tmp119_ = NULL;
                  _prop_index = _prop_index + 1;
                  if (!(_prop_index < _prop_size)) {
                        break;
                  }
                  _tmp93_ = vala_list_get (_prop_list, _prop_index);
                  prop = (ValaProperty*) _tmp93_;
                  _tmp95_ = vala_property_get_is_abstract (prop);
                  if (!_tmp95_) {
                        gboolean _tmp96_;
                        _tmp96_ = vala_property_get_is_virtual (prop);
                        _tmp94_ = !_tmp96_;
                  } else {
                        _tmp94_ = FALSE;
                  }
                  if (_tmp94_) {
                        _vala_code_node_unref0 (prop);
                        continue;
                  }
                  _tmp97_ = vala_property_get_property_type (prop);
                  vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, _tmp97_, decl_space);
                  _tmp98_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
                  _tmp99_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE_SYMBOL (_tmp98_));
                  t = _tmp99_;
                  _tmp100_ = vala_object_type_new (t);
                  this_type = _tmp100_;
                  _tmp101_ = vala_data_type_get_cname ((ValaDataType*) this_type);
                  _tmp102_ = _tmp101_;
                  _tmp103_ = vala_ccode_parameter_new ("this", _tmp102_);
                  _tmp104_ = _tmp103_;
                  _g_free0 (_tmp102_);
                  cselfparam = _tmp104_;
                  _tmp105_ = vala_property_get_property_type (prop);
                  _tmp106_ = vala_data_type_get_cname (_tmp105_);
                  _tmp107_ = _tmp106_;
                  _tmp108_ = vala_ccode_parameter_new ("value", _tmp107_);
                  _tmp109_ = _tmp108_;
                  _g_free0 (_tmp107_);
                  cvalueparam = _tmp109_;
                  _tmp110_ = vala_property_get_get_accessor (prop);
                  if (_tmp110_ != NULL) {
                        const gchar* _tmp111_ = NULL;
                        gchar* _tmp112_ = NULL;
                        gchar* _tmp113_;
                        ValaCCodeFunctionDeclarator* _tmp114_ = NULL;
                        ValaCCodeFunctionDeclarator* _tmp115_;
                        ValaCCodeFunctionDeclarator* vdeclarator;
                        ValaDataType* _tmp116_ = NULL;
                        gchar* _tmp117_ = NULL;
                        gchar* creturn_type;
                        ValaCCodeDeclaration* _tmp118_ = NULL;
                        ValaCCodeDeclaration* vdecl;
                        _tmp111_ = vala_symbol_get_name ((ValaSymbol*) prop);
                        _tmp112_ = g_strdup_printf ("get_%s", _tmp111_);
                        _tmp113_ = _tmp112_;
                        _tmp114_ = vala_ccode_function_declarator_new (_tmp113_);
                        _tmp115_ = _tmp114_;
                        _g_free0 (_tmp113_);
                        vdeclarator = _tmp115_;
                        vala_ccode_function_declarator_add_parameter (vdeclarator, cselfparam);
                        _tmp116_ = vala_property_get_property_type (prop);
                        _tmp117_ = vala_data_type_get_cname (_tmp116_);
                        creturn_type = _tmp117_;
                        _tmp118_ = vala_ccode_declaration_new (creturn_type);
                        vdecl = _tmp118_;
                        vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
                        vala_ccode_struct_add_declaration (type_priv_struct, vdecl);
                        _vala_ccode_node_unref0 (vdecl);
                        _g_free0 (creturn_type);
                        _vala_ccode_node_unref0 (vdeclarator);
                  }
                  _tmp119_ = vala_property_get_set_accessor (prop);
                  if (_tmp119_ != NULL) {
                        const gchar* _tmp120_ = NULL;
                        gchar* _tmp121_ = NULL;
                        gchar* _tmp122_;
                        ValaCCodeFunctionDeclarator* _tmp123_ = NULL;
                        ValaCCodeFunctionDeclarator* _tmp124_;
                        ValaCCodeFunctionDeclarator* vdeclarator;
                        ValaCCodeDeclaration* _tmp125_ = NULL;
                        ValaCCodeDeclaration* vdecl;
                        _tmp120_ = vala_symbol_get_name ((ValaSymbol*) prop);
                        _tmp121_ = g_strdup_printf ("set_%s", _tmp120_);
                        _tmp122_ = _tmp121_;
                        _tmp123_ = vala_ccode_function_declarator_new (_tmp122_);
                        _tmp124_ = _tmp123_;
                        _g_free0 (_tmp122_);
                        vdeclarator = _tmp124_;
                        vala_ccode_function_declarator_add_parameter (vdeclarator, cselfparam);
                        vala_ccode_function_declarator_add_parameter (vdeclarator, cvalueparam);
                        _tmp125_ = vala_ccode_declaration_new ("void");
                        vdecl = _tmp125_;
                        vala_ccode_declaration_add_declarator (vdecl, (ValaCCodeDeclarator*) vdeclarator);
                        vala_ccode_struct_add_declaration (type_priv_struct, vdecl);
                        _vala_ccode_node_unref0 (vdecl);
                        _vala_ccode_node_unref0 (vdeclarator);
                  }
                  _vala_ccode_node_unref0 (cvalueparam);
                  _vala_ccode_node_unref0 (cselfparam);
                  _vala_code_node_unref0 (this_type);
                  _vala_code_node_unref0 (t);
                  _vala_code_node_unref0 (prop);
            }
            _vala_iterable_unref0 (_prop_list);
      }
      _tmp126_ = vala_ccode_struct_get_is_empty (instance_priv_struct);
      if (!_tmp126_) {
            const gchar* _tmp127_ = NULL;
            gchar* _tmp128_ = NULL;
            gchar* _tmp129_;
            gchar* _tmp130_ = NULL;
            gchar* _tmp131_;
            gchar* _tmp132_ = NULL;
            gchar* _tmp133_;
            ValaCCodeVariableDeclarator* _tmp134_ = NULL;
            ValaCCodeVariableDeclarator* _tmp135_;
            ValaCCodeTypeDefinition* _tmp136_ = NULL;
            ValaCCodeTypeDefinition* _tmp137_;
            _tmp127_ = vala_ccode_struct_get_name (instance_priv_struct);
            _tmp128_ = g_strdup_printf ("struct %s", _tmp127_);
            _tmp129_ = _tmp128_;
            _tmp130_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
            _tmp131_ = _tmp130_;
            _tmp132_ = g_strdup_printf ("%sPrivate", _tmp131_);
            _tmp133_ = _tmp132_;
            _tmp134_ = vala_ccode_variable_declarator_new (_tmp133_, NULL, NULL);
            _tmp135_ = _tmp134_;
            _tmp136_ = vala_ccode_type_definition_new (_tmp129_, (ValaCCodeDeclarator*) _tmp135_);
            _tmp137_ = _tmp136_;
            vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp137_);
            _vala_ccode_node_unref0 (_tmp137_);
            _vala_ccode_node_unref0 (_tmp135_);
            _g_free0 (_tmp133_);
            _g_free0 (_tmp131_);
            _g_free0 (_tmp129_);
            vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) instance_priv_struct);
      }
      _tmp138_ = vala_ccode_struct_get_is_empty (type_priv_struct);
      if (!_tmp138_) {
            const gchar* _tmp139_ = NULL;
            gchar* _tmp140_ = NULL;
            gchar* _tmp141_;
            gchar* _tmp142_ = NULL;
            gchar* _tmp143_;
            gchar* _tmp144_ = NULL;
            gchar* _tmp145_;
            ValaCCodeVariableDeclarator* _tmp146_ = NULL;
            ValaCCodeVariableDeclarator* _tmp147_;
            ValaCCodeTypeDefinition* _tmp148_ = NULL;
            ValaCCodeTypeDefinition* _tmp149_;
            _tmp139_ = vala_ccode_struct_get_name (type_priv_struct);
            _tmp140_ = g_strdup_printf ("struct %s", _tmp139_);
            _tmp141_ = _tmp140_;
            _tmp142_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
            _tmp143_ = _tmp142_;
            _tmp144_ = g_strdup_printf ("%sTypePrivate", _tmp143_);
            _tmp145_ = _tmp144_;
            _tmp146_ = vala_ccode_variable_declarator_new (_tmp145_, NULL, NULL);
            _tmp147_ = _tmp146_;
            _tmp148_ = vala_ccode_type_definition_new (_tmp141_, (ValaCCodeDeclarator*) _tmp147_);
            _tmp149_ = _tmp148_;
            vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp149_);
            _vala_ccode_node_unref0 (_tmp149_);
            _vala_ccode_node_unref0 (_tmp147_);
            _g_free0 (_tmp145_);
            _g_free0 (_tmp143_);
            _g_free0 (_tmp141_);
            vala_ccode_file_add_type_definition (decl_space, (ValaCCodeNode*) type_priv_struct);
      }
      _tmp150_ = vala_ccode_declaration_new ("intptr_t");
      _cdecl_ = _tmp150_;
      _tmp151_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp152_ = _tmp151_;
      _tmp153_ = g_strdup_printf ("_%s_object_offset", _tmp152_);
      _tmp154_ = _tmp153_;
      _tmp155_ = vala_ccode_constant_new ("0");
      _tmp156_ = _tmp155_;
      _tmp157_ = vala_ccode_variable_declarator_new (_tmp154_, (ValaCCodeExpression*) _tmp156_, NULL);
      _tmp158_ = _tmp157_;
      vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp158_);
      _vala_ccode_node_unref0 (_tmp158_);
      _vala_ccode_node_unref0 (_tmp156_);
      _g_free0 (_tmp154_);
      _g_free0 (_tmp152_);
      vala_ccode_declaration_set_modifiers (_cdecl_, VALA_CCODE_MODIFIERS_STATIC);
      vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _cdecl_);
      _tmp159_ = vala_class_get_base_class (cl);
      if (_tmp159_ == NULL) {
            gchar* _tmp160_ = NULL;
            gchar* _tmp161_;
            gchar* _tmp162_ = NULL;
            ValaCCodeConstant* _tmp163_ = NULL;
            _tmp160_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
            _tmp161_ = _tmp160_;
            _tmp162_ = g_strdup_printf ("((%sPrivate *) o)", _tmp161_);
            _g_free0 (macro);
            macro = _tmp162_;
            _g_free0 (_tmp161_);
            _tmp163_ = vala_ccode_constant_new ("sizeof (anyPrivate) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePri" \
"vate)");
            _vala_ccode_node_unref0 (type_offset);
            type_offset = (ValaCCodeExpression*) _tmp163_;
      } else {
            if (cl == ((ValaDovaBaseModule*) self)->object_class) {
                  gchar* _tmp164_ = NULL;
                  gchar* _tmp165_;
                  gchar* _tmp166_ = NULL;
                  ValaCCodeConstant* _tmp167_ = NULL;
                  _tmp164_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
                  _tmp165_ = _tmp164_;
                  _tmp166_ = g_strdup_printf ("((%sPrivate *) (((char *) o) + sizeof (anyPrivate)))", _tmp165_);
                  _g_free0 (macro);
                  macro = _tmp166_;
                  _g_free0 (_tmp165_);
                  _tmp167_ = vala_ccode_constant_new ("sizeof (anyPrivate) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePri" \
"vate) + sizeof (anyTypePrivate)");
                  _vala_ccode_node_unref0 (type_offset);
                  type_offset = (ValaCCodeExpression*) _tmp167_;
            } else {
                  if (cl == ((ValaDovaBaseModule*) self)->type_class) {
                        gchar* _tmp168_ = NULL;
                        gchar* _tmp169_;
                        gchar* _tmp170_ = NULL;
                        ValaCCodeConstant* _tmp171_ = NULL;
                        _tmp168_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
                        _tmp169_ = _tmp168_;
                        _tmp170_ = g_strdup_printf ("((%sPrivate *) (((char *) o) + sizeof (anyPrivate) + sizeof (DovaObjec" \
"tPrivate)))", _tmp169_);
                        _g_free0 (macro);
                        macro = _tmp170_;
                        _g_free0 (_tmp169_);
                        _tmp171_ = vala_ccode_constant_new ("sizeof (anyPrivate) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePri" \
"vate) + sizeof (anyTypePrivate) + sizeof (DovaObjectTypePrivate)");
                        _vala_ccode_node_unref0 (type_offset);
                        type_offset = (ValaCCodeExpression*) _tmp171_;
                  } else {
                        gchar* _tmp172_ = NULL;
                        gchar* _tmp173_;
                        gchar* _tmp174_ = NULL;
                        gchar* _tmp175_;
                        gchar* _tmp176_ = NULL;
                        ValaCCodeConstant* _tmp177_ = NULL;
                        _tmp172_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
                        _tmp173_ = _tmp172_;
                        _tmp174_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
                        _tmp175_ = _tmp174_;
                        _tmp176_ = g_strdup_printf ("((%sPrivate *) (((char *) o) + _%s_object_offset))", _tmp173_, _tmp175_);
                        _g_free0 (macro);
                        macro = _tmp176_;
                        _g_free0 (_tmp175_);
                        _g_free0 (_tmp173_);
                        _tmp177_ = vala_ccode_constant_new ("0");
                        _vala_ccode_node_unref0 (type_offset);
                        type_offset = (ValaCCodeExpression*) _tmp177_;
                  }
            }
      }
      _tmp178_ = vala_ccode_struct_get_is_empty (instance_priv_struct);
      if (!_tmp178_) {
            gchar* _tmp179_ = NULL;
            gchar* _tmp180_;
            gchar* _tmp181_ = NULL;
            gchar* _tmp182_;
            ValaCCodeMacroReplacement* _tmp183_ = NULL;
            ValaCCodeMacroReplacement* _tmp184_;
            _tmp179_ = vala_typesymbol_get_upper_case_cname ((ValaTypeSymbol*) cl, NULL);
            _tmp180_ = _tmp179_;
            _tmp181_ = g_strdup_printf ("%s_GET_PRIVATE(o)", _tmp180_);
            _tmp182_ = _tmp181_;
            _tmp183_ = vala_ccode_macro_replacement_new (_tmp182_, macro);
            _tmp184_ = _tmp183_;
            vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp184_);
            _vala_ccode_node_unref0 (_tmp184_);
            _g_free0 (_tmp182_);
            _g_free0 (_tmp180_);
      }
      _tmp185_ = vala_ccode_declaration_new ("intptr_t");
      _vala_ccode_node_unref0 (_cdecl_);
      _cdecl_ = _tmp185_;
      _tmp186_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp187_ = _tmp186_;
      _tmp188_ = g_strdup_printf ("_%s_type_offset", _tmp187_);
      _tmp189_ = _tmp188_;
      _tmp190_ = vala_ccode_variable_declarator_new (_tmp189_, type_offset, NULL);
      _tmp191_ = _tmp190_;
      vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp191_);
      _vala_ccode_node_unref0 (_tmp191_);
      _g_free0 (_tmp189_);
      _g_free0 (_tmp187_);
      vala_ccode_declaration_set_modifiers (_cdecl_, VALA_CCODE_MODIFIERS_STATIC);
      vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _cdecl_);
      _g_free0 (macro);
      _vala_ccode_node_unref0 (type_offset);
      _vala_ccode_node_unref0 (_cdecl_);
      _vala_ccode_node_unref0 (type_priv_struct);
      _vala_ccode_node_unref0 (instance_priv_struct);
}


static ValaCCodeFunction* vala_dova_object_module_create_set_value_copy_function (ValaDovaObjectModule* self, gboolean decl_only) {
      ValaCCodeFunction* result = NULL;
      ValaCCodeFunction* _tmp0_ = NULL;
      ValaCCodeFunction* _result_;
      ValaCCodeParameter* _tmp1_ = NULL;
      ValaCCodeParameter* _tmp2_;
      ValaCCodeParameter* _tmp3_ = NULL;
      ValaCCodeParameter* _tmp4_;
      ValaCCodeBlock* _tmp5_ = NULL;
      ValaCCodeBlock* _tmp6_;
      ValaCCodeIdentifier* _tmp7_ = NULL;
      ValaCCodeIdentifier* _tmp8_;
      ValaCCodeFunctionCall* _tmp9_ = NULL;
      ValaCCodeFunctionCall* _tmp10_;
      ValaCCodeFunctionCall* priv_call;
      ValaCCodeIdentifier* _tmp11_ = NULL;
      ValaCCodeIdentifier* _tmp12_;
      ValaCCodeBlock* _tmp13_ = NULL;
      ValaCCodeMemberAccess* _tmp14_ = NULL;
      ValaCCodeMemberAccess* _tmp15_;
      ValaCCodeIdentifier* _tmp16_ = NULL;
      ValaCCodeIdentifier* _tmp17_;
      ValaCCodeAssignment* _tmp18_ = NULL;
      ValaCCodeAssignment* _tmp19_;
      ValaCCodeExpressionStatement* _tmp20_ = NULL;
      ValaCCodeExpressionStatement* _tmp21_;
      g_return_val_if_fail (self != NULL, NULL);
      _tmp0_ = vala_ccode_function_new ("dova_type_set_value_copy", "void");
      _result_ = _tmp0_;
      _tmp1_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp2_ = _tmp1_;
      vala_ccode_function_add_parameter (_result_, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
      _tmp3_ = vala_ccode_parameter_new ("(*function) (void *dest, intptr_t dest_index, void *src, intptr_t src_" \
"index)", "void");
      _tmp4_ = _tmp3_;
      vala_ccode_function_add_parameter (_result_, _tmp4_);
      _vala_ccode_node_unref0 (_tmp4_);
      if (decl_only) {
            result = _result_;
            return result;
      }
      _tmp5_ = vala_ccode_block_new ();
      _tmp6_ = _tmp5_;
      vala_ccode_function_set_block (_result_, _tmp6_);
      _vala_ccode_node_unref0 (_tmp6_);
      _tmp7_ = vala_ccode_identifier_new ("DOVA_TYPE_GET_PRIVATE");
      _tmp8_ = _tmp7_;
      _tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
      _tmp10_ = _tmp9_;
      _vala_ccode_node_unref0 (_tmp8_);
      priv_call = _tmp10_;
      _tmp11_ = vala_ccode_identifier_new ("type");
      _tmp12_ = _tmp11_;
      vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp12_);
      _vala_ccode_node_unref0 (_tmp12_);
      _tmp13_ = vala_ccode_function_get_block (_result_);
      _tmp14_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_copy");
      _tmp15_ = _tmp14_;
      _tmp16_ = vala_ccode_identifier_new ("function");
      _tmp17_ = _tmp16_;
      _tmp18_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp15_, (ValaCCodeExpression*) _tmp17_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
      _tmp19_ = _tmp18_;
      _tmp20_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp19_);
      _tmp21_ = _tmp20_;
      vala_ccode_block_add_statement (_tmp13_, (ValaCCodeNode*) _tmp21_);
      _vala_ccode_node_unref0 (_tmp21_);
      _vala_ccode_node_unref0 (_tmp19_);
      _vala_ccode_node_unref0 (_tmp17_);
      _vala_ccode_node_unref0 (_tmp15_);
      result = _result_;
      _vala_ccode_node_unref0 (priv_call);
      return result;
}


void vala_dova_object_module_declare_set_value_copy_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space) {
      gboolean _tmp0_;
      ValaCCodeFunction* _tmp1_ = NULL;
      ValaCCodeFunction* _tmp2_;
      g_return_if_fail (self != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class, "dova_type_set_value_copy");
      if (_tmp0_) {
            return;
      }
      _tmp1_ = vala_dova_object_module_create_set_value_copy_function (self, TRUE);
      _tmp2_ = _tmp1_;
      vala_ccode_file_add_function_declaration (decl_space, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
}


static ValaCCodeFunction* vala_dova_object_module_create_set_value_equals_function (ValaDovaObjectModule* self, gboolean decl_only) {
      ValaCCodeFunction* result = NULL;
      ValaCCodeFunction* _tmp0_ = NULL;
      ValaCCodeFunction* _result_;
      ValaCCodeParameter* _tmp1_ = NULL;
      ValaCCodeParameter* _tmp2_;
      ValaCCodeParameter* _tmp3_ = NULL;
      ValaCCodeParameter* _tmp4_;
      ValaCCodeBlock* _tmp5_ = NULL;
      ValaCCodeBlock* _tmp6_;
      ValaCCodeIdentifier* _tmp7_ = NULL;
      ValaCCodeIdentifier* _tmp8_;
      ValaCCodeFunctionCall* _tmp9_ = NULL;
      ValaCCodeFunctionCall* _tmp10_;
      ValaCCodeFunctionCall* priv_call;
      ValaCCodeIdentifier* _tmp11_ = NULL;
      ValaCCodeIdentifier* _tmp12_;
      ValaCCodeBlock* _tmp13_ = NULL;
      ValaCCodeMemberAccess* _tmp14_ = NULL;
      ValaCCodeMemberAccess* _tmp15_;
      ValaCCodeIdentifier* _tmp16_ = NULL;
      ValaCCodeIdentifier* _tmp17_;
      ValaCCodeAssignment* _tmp18_ = NULL;
      ValaCCodeAssignment* _tmp19_;
      ValaCCodeExpressionStatement* _tmp20_ = NULL;
      ValaCCodeExpressionStatement* _tmp21_;
      g_return_val_if_fail (self != NULL, NULL);
      _tmp0_ = vala_ccode_function_new ("dova_type_set_value_equals", "void");
      _result_ = _tmp0_;
      _tmp1_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp2_ = _tmp1_;
      vala_ccode_function_add_parameter (_result_, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
      _tmp3_ = vala_ccode_parameter_new ("(*function) (void *value, intptr_t value_index, void *other, intptr_t " \
"other_index)", "bool");
      _tmp4_ = _tmp3_;
      vala_ccode_function_add_parameter (_result_, _tmp4_);
      _vala_ccode_node_unref0 (_tmp4_);
      if (decl_only) {
            result = _result_;
            return result;
      }
      _tmp5_ = vala_ccode_block_new ();
      _tmp6_ = _tmp5_;
      vala_ccode_function_set_block (_result_, _tmp6_);
      _vala_ccode_node_unref0 (_tmp6_);
      _tmp7_ = vala_ccode_identifier_new ("DOVA_TYPE_GET_PRIVATE");
      _tmp8_ = _tmp7_;
      _tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
      _tmp10_ = _tmp9_;
      _vala_ccode_node_unref0 (_tmp8_);
      priv_call = _tmp10_;
      _tmp11_ = vala_ccode_identifier_new ("type");
      _tmp12_ = _tmp11_;
      vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp12_);
      _vala_ccode_node_unref0 (_tmp12_);
      _tmp13_ = vala_ccode_function_get_block (_result_);
      _tmp14_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_equals");
      _tmp15_ = _tmp14_;
      _tmp16_ = vala_ccode_identifier_new ("function");
      _tmp17_ = _tmp16_;
      _tmp18_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp15_, (ValaCCodeExpression*) _tmp17_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
      _tmp19_ = _tmp18_;
      _tmp20_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp19_);
      _tmp21_ = _tmp20_;
      vala_ccode_block_add_statement (_tmp13_, (ValaCCodeNode*) _tmp21_);
      _vala_ccode_node_unref0 (_tmp21_);
      _vala_ccode_node_unref0 (_tmp19_);
      _vala_ccode_node_unref0 (_tmp17_);
      _vala_ccode_node_unref0 (_tmp15_);
      result = _result_;
      _vala_ccode_node_unref0 (priv_call);
      return result;
}


void vala_dova_object_module_declare_set_value_equals_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space) {
      gboolean _tmp0_;
      ValaCCodeFunction* _tmp1_ = NULL;
      ValaCCodeFunction* _tmp2_;
      g_return_if_fail (self != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class, "dova_type_set_value_equals");
      if (_tmp0_) {
            return;
      }
      _tmp1_ = vala_dova_object_module_create_set_value_equals_function (self, TRUE);
      _tmp2_ = _tmp1_;
      vala_ccode_file_add_function_declaration (decl_space, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
}


static ValaCCodeFunction* vala_dova_object_module_create_set_value_hash_function (ValaDovaObjectModule* self, gboolean decl_only) {
      ValaCCodeFunction* result = NULL;
      ValaCCodeFunction* _tmp0_ = NULL;
      ValaCCodeFunction* _result_;
      ValaCCodeParameter* _tmp1_ = NULL;
      ValaCCodeParameter* _tmp2_;
      ValaCCodeParameter* _tmp3_ = NULL;
      ValaCCodeParameter* _tmp4_;
      ValaCCodeBlock* _tmp5_ = NULL;
      ValaCCodeBlock* _tmp6_;
      ValaCCodeIdentifier* _tmp7_ = NULL;
      ValaCCodeIdentifier* _tmp8_;
      ValaCCodeFunctionCall* _tmp9_ = NULL;
      ValaCCodeFunctionCall* _tmp10_;
      ValaCCodeFunctionCall* priv_call;
      ValaCCodeIdentifier* _tmp11_ = NULL;
      ValaCCodeIdentifier* _tmp12_;
      ValaCCodeBlock* _tmp13_ = NULL;
      ValaCCodeMemberAccess* _tmp14_ = NULL;
      ValaCCodeMemberAccess* _tmp15_;
      ValaCCodeIdentifier* _tmp16_ = NULL;
      ValaCCodeIdentifier* _tmp17_;
      ValaCCodeAssignment* _tmp18_ = NULL;
      ValaCCodeAssignment* _tmp19_;
      ValaCCodeExpressionStatement* _tmp20_ = NULL;
      ValaCCodeExpressionStatement* _tmp21_;
      g_return_val_if_fail (self != NULL, NULL);
      _tmp0_ = vala_ccode_function_new ("dova_type_set_value_hash", "void");
      _result_ = _tmp0_;
      _tmp1_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp2_ = _tmp1_;
      vala_ccode_function_add_parameter (_result_, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
      _tmp3_ = vala_ccode_parameter_new ("(*function) (void *value, intptr_t value_index)", "uintptr_t");
      _tmp4_ = _tmp3_;
      vala_ccode_function_add_parameter (_result_, _tmp4_);
      _vala_ccode_node_unref0 (_tmp4_);
      if (decl_only) {
            result = _result_;
            return result;
      }
      _tmp5_ = vala_ccode_block_new ();
      _tmp6_ = _tmp5_;
      vala_ccode_function_set_block (_result_, _tmp6_);
      _vala_ccode_node_unref0 (_tmp6_);
      _tmp7_ = vala_ccode_identifier_new ("DOVA_TYPE_GET_PRIVATE");
      _tmp8_ = _tmp7_;
      _tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
      _tmp10_ = _tmp9_;
      _vala_ccode_node_unref0 (_tmp8_);
      priv_call = _tmp10_;
      _tmp11_ = vala_ccode_identifier_new ("type");
      _tmp12_ = _tmp11_;
      vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp12_);
      _vala_ccode_node_unref0 (_tmp12_);
      _tmp13_ = vala_ccode_function_get_block (_result_);
      _tmp14_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_hash");
      _tmp15_ = _tmp14_;
      _tmp16_ = vala_ccode_identifier_new ("function");
      _tmp17_ = _tmp16_;
      _tmp18_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp15_, (ValaCCodeExpression*) _tmp17_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
      _tmp19_ = _tmp18_;
      _tmp20_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp19_);
      _tmp21_ = _tmp20_;
      vala_ccode_block_add_statement (_tmp13_, (ValaCCodeNode*) _tmp21_);
      _vala_ccode_node_unref0 (_tmp21_);
      _vala_ccode_node_unref0 (_tmp19_);
      _vala_ccode_node_unref0 (_tmp17_);
      _vala_ccode_node_unref0 (_tmp15_);
      result = _result_;
      _vala_ccode_node_unref0 (priv_call);
      return result;
}


void vala_dova_object_module_declare_set_value_hash_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space) {
      gboolean _tmp0_;
      ValaCCodeFunction* _tmp1_ = NULL;
      ValaCCodeFunction* _tmp2_;
      g_return_if_fail (self != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class, "dova_type_set_value_hash");
      if (_tmp0_) {
            return;
      }
      _tmp1_ = vala_dova_object_module_create_set_value_hash_function (self, TRUE);
      _tmp2_ = _tmp1_;
      vala_ccode_file_add_function_declaration (decl_space, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
}


static ValaCCodeFunction* vala_dova_object_module_create_set_value_to_any_function (ValaDovaObjectModule* self, gboolean decl_only) {
      ValaCCodeFunction* result = NULL;
      ValaCCodeFunction* _tmp0_ = NULL;
      ValaCCodeFunction* _result_;
      ValaCCodeParameter* _tmp1_ = NULL;
      ValaCCodeParameter* _tmp2_;
      ValaCCodeParameter* _tmp3_ = NULL;
      ValaCCodeParameter* _tmp4_;
      ValaCCodeBlock* _tmp5_ = NULL;
      ValaCCodeBlock* _tmp6_;
      ValaCCodeIdentifier* _tmp7_ = NULL;
      ValaCCodeIdentifier* _tmp8_;
      ValaCCodeFunctionCall* _tmp9_ = NULL;
      ValaCCodeFunctionCall* _tmp10_;
      ValaCCodeFunctionCall* priv_call;
      ValaCCodeIdentifier* _tmp11_ = NULL;
      ValaCCodeIdentifier* _tmp12_;
      ValaCCodeBlock* _tmp13_ = NULL;
      ValaCCodeMemberAccess* _tmp14_ = NULL;
      ValaCCodeMemberAccess* _tmp15_;
      ValaCCodeIdentifier* _tmp16_ = NULL;
      ValaCCodeIdentifier* _tmp17_;
      ValaCCodeAssignment* _tmp18_ = NULL;
      ValaCCodeAssignment* _tmp19_;
      ValaCCodeExpressionStatement* _tmp20_ = NULL;
      ValaCCodeExpressionStatement* _tmp21_;
      g_return_val_if_fail (self != NULL, NULL);
      _tmp0_ = vala_ccode_function_new ("dova_type_set_value_to_any", "void");
      _result_ = _tmp0_;
      _tmp1_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp2_ = _tmp1_;
      vala_ccode_function_add_parameter (_result_, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
      _tmp3_ = vala_ccode_parameter_new ("(*function) (void *value, intptr_t value_index)", "DovaObject *");
      _tmp4_ = _tmp3_;
      vala_ccode_function_add_parameter (_result_, _tmp4_);
      _vala_ccode_node_unref0 (_tmp4_);
      if (decl_only) {
            result = _result_;
            return result;
      }
      _tmp5_ = vala_ccode_block_new ();
      _tmp6_ = _tmp5_;
      vala_ccode_function_set_block (_result_, _tmp6_);
      _vala_ccode_node_unref0 (_tmp6_);
      _tmp7_ = vala_ccode_identifier_new ("DOVA_TYPE_GET_PRIVATE");
      _tmp8_ = _tmp7_;
      _tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
      _tmp10_ = _tmp9_;
      _vala_ccode_node_unref0 (_tmp8_);
      priv_call = _tmp10_;
      _tmp11_ = vala_ccode_identifier_new ("type");
      _tmp12_ = _tmp11_;
      vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp12_);
      _vala_ccode_node_unref0 (_tmp12_);
      _tmp13_ = vala_ccode_function_get_block (_result_);
      _tmp14_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_to_any");
      _tmp15_ = _tmp14_;
      _tmp16_ = vala_ccode_identifier_new ("function");
      _tmp17_ = _tmp16_;
      _tmp18_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp15_, (ValaCCodeExpression*) _tmp17_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
      _tmp19_ = _tmp18_;
      _tmp20_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp19_);
      _tmp21_ = _tmp20_;
      vala_ccode_block_add_statement (_tmp13_, (ValaCCodeNode*) _tmp21_);
      _vala_ccode_node_unref0 (_tmp21_);
      _vala_ccode_node_unref0 (_tmp19_);
      _vala_ccode_node_unref0 (_tmp17_);
      _vala_ccode_node_unref0 (_tmp15_);
      result = _result_;
      _vala_ccode_node_unref0 (priv_call);
      return result;
}


void vala_dova_object_module_declare_set_value_to_any_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space) {
      gboolean _tmp0_;
      ValaCCodeFunction* _tmp1_ = NULL;
      ValaCCodeFunction* _tmp2_;
      g_return_if_fail (self != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class, "dova_type_set_value_to_any");
      if (_tmp0_) {
            return;
      }
      _tmp1_ = vala_dova_object_module_create_set_value_to_any_function (self, TRUE);
      _tmp2_ = _tmp1_;
      vala_ccode_file_add_function_declaration (decl_space, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
}


static ValaCCodeFunction* vala_dova_object_module_create_set_value_from_any_function (ValaDovaObjectModule* self, gboolean decl_only) {
      ValaCCodeFunction* result = NULL;
      ValaCCodeFunction* _tmp0_ = NULL;
      ValaCCodeFunction* _result_;
      ValaCCodeParameter* _tmp1_ = NULL;
      ValaCCodeParameter* _tmp2_;
      ValaCCodeParameter* _tmp3_ = NULL;
      ValaCCodeParameter* _tmp4_;
      ValaCCodeBlock* _tmp5_ = NULL;
      ValaCCodeBlock* _tmp6_;
      ValaCCodeIdentifier* _tmp7_ = NULL;
      ValaCCodeIdentifier* _tmp8_;
      ValaCCodeFunctionCall* _tmp9_ = NULL;
      ValaCCodeFunctionCall* _tmp10_;
      ValaCCodeFunctionCall* priv_call;
      ValaCCodeIdentifier* _tmp11_ = NULL;
      ValaCCodeIdentifier* _tmp12_;
      ValaCCodeBlock* _tmp13_ = NULL;
      ValaCCodeMemberAccess* _tmp14_ = NULL;
      ValaCCodeMemberAccess* _tmp15_;
      ValaCCodeIdentifier* _tmp16_ = NULL;
      ValaCCodeIdentifier* _tmp17_;
      ValaCCodeAssignment* _tmp18_ = NULL;
      ValaCCodeAssignment* _tmp19_;
      ValaCCodeExpressionStatement* _tmp20_ = NULL;
      ValaCCodeExpressionStatement* _tmp21_;
      g_return_val_if_fail (self != NULL, NULL);
      _tmp0_ = vala_ccode_function_new ("dova_type_set_value_from_any", "void");
      _result_ = _tmp0_;
      _tmp1_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp2_ = _tmp1_;
      vala_ccode_function_add_parameter (_result_, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
      _tmp3_ = vala_ccode_parameter_new ("(*function) (DovaObject *any, void *value, intptr_t value_index)", "void");
      _tmp4_ = _tmp3_;
      vala_ccode_function_add_parameter (_result_, _tmp4_);
      _vala_ccode_node_unref0 (_tmp4_);
      if (decl_only) {
            result = _result_;
            return result;
      }
      _tmp5_ = vala_ccode_block_new ();
      _tmp6_ = _tmp5_;
      vala_ccode_function_set_block (_result_, _tmp6_);
      _vala_ccode_node_unref0 (_tmp6_);
      _tmp7_ = vala_ccode_identifier_new ("DOVA_TYPE_GET_PRIVATE");
      _tmp8_ = _tmp7_;
      _tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
      _tmp10_ = _tmp9_;
      _vala_ccode_node_unref0 (_tmp8_);
      priv_call = _tmp10_;
      _tmp11_ = vala_ccode_identifier_new ("type");
      _tmp12_ = _tmp11_;
      vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp12_);
      _vala_ccode_node_unref0 (_tmp12_);
      _tmp13_ = vala_ccode_function_get_block (_result_);
      _tmp14_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_from_any");
      _tmp15_ = _tmp14_;
      _tmp16_ = vala_ccode_identifier_new ("function");
      _tmp17_ = _tmp16_;
      _tmp18_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp15_, (ValaCCodeExpression*) _tmp17_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
      _tmp19_ = _tmp18_;
      _tmp20_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp19_);
      _tmp21_ = _tmp20_;
      vala_ccode_block_add_statement (_tmp13_, (ValaCCodeNode*) _tmp21_);
      _vala_ccode_node_unref0 (_tmp21_);
      _vala_ccode_node_unref0 (_tmp19_);
      _vala_ccode_node_unref0 (_tmp17_);
      _vala_ccode_node_unref0 (_tmp15_);
      result = _result_;
      _vala_ccode_node_unref0 (priv_call);
      return result;
}


void vala_dova_object_module_declare_set_value_from_any_function (ValaDovaObjectModule* self, ValaCCodeFile* decl_space) {
      gboolean _tmp0_;
      ValaCCodeFunction* _tmp1_ = NULL;
      ValaCCodeFunction* _tmp2_;
      g_return_if_fail (self != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class, "dova_type_set_value_from_any");
      if (_tmp0_) {
            return;
      }
      _tmp1_ = vala_dova_object_module_create_set_value_from_any_function (self, TRUE);
      _tmp2_ = _tmp1_;
      vala_ccode_file_add_function_declaration (decl_space, _tmp2_);
      _vala_ccode_node_unref0 (_tmp2_);
}


static gpointer _vala_ccode_node_ref0 (gpointer self) {
      return self ? vala_ccode_node_ref (self) : NULL;
}


ValaCCodeBlock* vala_dova_object_module_generate_type_get_function (ValaDovaObjectModule* self, ValaTypeSymbol* cl, ValaClass* base_class) {
      ValaCCodeBlock* result = NULL;
      ValaDataType* base_class_type;
      gboolean _tmp0_ = FALSE;
      ValaCCodeDeclaration* _tmp6_ = NULL;
      ValaCCodeDeclaration* _cdecl_;
      gchar* _tmp7_ = NULL;
      gchar* _tmp8_;
      gchar* _tmp9_ = NULL;
      gchar* _tmp10_;
      ValaCCodeConstant* _tmp11_ = NULL;
      ValaCCodeConstant* _tmp12_;
      ValaCCodeVariableDeclarator* _tmp13_ = NULL;
      ValaCCodeVariableDeclarator* _tmp14_;
      gchar* _tmp15_ = NULL;
      gchar* _tmp16_;
      gchar* _tmp17_ = NULL;
      gchar* _tmp18_;
      ValaCCodeFunction* _tmp19_ = NULL;
      ValaCCodeFunction* _tmp20_;
      ValaCCodeFunction* type_fun;
      gboolean _tmp21_;
      ValaTypeSymbol* _tmp22_;
      ValaObjectTypeSymbol* _tmp23_;
      ValaObjectTypeSymbol* object_type_symbol;
      ValaCCodeBlock* _tmp34_ = NULL;
      ValaCCodeBlock* _tmp35_;
      ValaCCodeBlock* _tmp36_ = NULL;
      ValaCCodeBlock* type_init_block;
      gchar* _tmp186_ = NULL;
      gchar* _tmp187_;
      gchar* _tmp188_ = NULL;
      gchar* _tmp189_;
      ValaCCodeIdentifier* _tmp190_ = NULL;
      ValaCCodeIdentifier* _tmp191_;
      ValaCCodeFunctionCall* _tmp192_ = NULL;
      ValaCCodeFunctionCall* _tmp193_;
      ValaCCodeFunctionCall* type_init_call;
      gchar* _tmp194_ = NULL;
      gchar* _tmp195_;
      gchar* _tmp196_ = NULL;
      gchar* _tmp197_;
      ValaCCodeIdentifier* _tmp198_ = NULL;
      ValaCCodeIdentifier* _tmp199_;
      ValaCCodeExpressionStatement* _tmp207_ = NULL;
      ValaCCodeExpressionStatement* _tmp208_;
      ValaCCodeBlock* _tmp209_ = NULL;
      gchar* _tmp210_ = NULL;
      gchar* _tmp211_;
      gchar* _tmp212_ = NULL;
      gchar* _tmp213_;
      ValaCCodeIdentifier* _tmp214_ = NULL;
      ValaCCodeIdentifier* _tmp215_;
      ValaCCodeUnaryExpression* _tmp216_ = NULL;
      ValaCCodeUnaryExpression* _tmp217_;
      ValaCCodeIfStatement* _tmp218_ = NULL;
      ValaCCodeIfStatement* _tmp219_;
      gboolean _tmp220_ = FALSE;
      ValaCCodeBlock* _tmp416_ = NULL;
      gchar* _tmp417_ = NULL;
      gchar* _tmp418_;
      gchar* _tmp419_ = NULL;
      gchar* _tmp420_;
      ValaCCodeIdentifier* _tmp421_ = NULL;
      ValaCCodeIdentifier* _tmp422_;
      ValaCCodeReturnStatement* _tmp423_ = NULL;
      ValaCCodeReturnStatement* _tmp424_;
      gchar* _tmp425_ = NULL;
      gchar* _tmp426_;
      gchar* _tmp427_ = NULL;
      gchar* _tmp428_;
      ValaCCodeFunction* _tmp429_ = NULL;
      ValaCCodeFunction* _tmp430_;
      ValaCCodeFunction* type_init_fun;
      gboolean _tmp431_;
      ValaCCodeParameter* _tmp432_ = NULL;
      ValaCCodeParameter* _tmp433_;
      ValaCCodeBlock* _tmp444_ = NULL;
      ValaCCodeBlock* _tmp445_;
      gboolean _tmp446_ = FALSE;
      gboolean _tmp447_ = FALSE;
      gboolean _tmp448_ = FALSE;
      ValaCCodeBlock* _tmp818_ = NULL;
      ValaCCodeBlock* _tmp819_;
      g_return_val_if_fail (self != NULL, NULL);
      g_return_val_if_fail (cl != NULL, NULL);
      base_class_type = NULL;
      if (base_class != NULL) {
            _tmp0_ = VALA_IS_CLASS (cl);
      } else {
            _tmp0_ = FALSE;
      }
      if (_tmp0_) {
            {
                  ValaList* _tmp1_ = NULL;
                  ValaList* _base_type_list;
                  gint _tmp2_;
                  gint _base_type_size;
                  gint _base_type_index;
                  _tmp1_ = vala_class_get_base_types (VALA_CLASS (cl));
                  _base_type_list = _tmp1_;
                  _tmp2_ = vala_collection_get_size ((ValaCollection*) _base_type_list);
                  _base_type_size = _tmp2_;
                  _base_type_index = -1;
                  while (TRUE) {
                        gpointer _tmp3_ = NULL;
                        ValaDataType* base_type;
                        ValaTypeSymbol* _tmp4_ = NULL;
                        _base_type_index = _base_type_index + 1;
                        if (!(_base_type_index < _base_type_size)) {
                              break;
                        }
                        _tmp3_ = vala_list_get (_base_type_list, _base_type_index);
                        base_type = (ValaDataType*) _tmp3_;
                        _tmp4_ = vala_data_type_get_data_type (base_type);
                        if (_tmp4_ == VALA_TYPESYMBOL (base_class)) {
                              ValaDataType* _tmp5_;
                              _tmp5_ = _vala_code_node_ref0 (base_type);
                              _vala_code_node_unref0 (base_class_type);
                              base_class_type = _tmp5_;
                              _vala_code_node_unref0 (base_type);
                              break;
                        }
                        _vala_code_node_unref0 (base_type);
                  }
                  _vala_iterable_unref0 (_base_type_list);
            }
      }
      _tmp6_ = vala_ccode_declaration_new ("DovaType *");
      _cdecl_ = _tmp6_;
      _tmp7_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp8_ = _tmp7_;
      _tmp9_ = g_strdup_printf ("%s_type", _tmp8_);
      _tmp10_ = _tmp9_;
      _tmp11_ = vala_ccode_constant_new ("NULL");
      _tmp12_ = _tmp11_;
      _tmp13_ = vala_ccode_variable_declarator_new (_tmp10_, (ValaCCodeExpression*) _tmp12_, NULL);
      _tmp14_ = _tmp13_;
      vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp14_);
      _vala_ccode_node_unref0 (_tmp14_);
      _vala_ccode_node_unref0 (_tmp12_);
      _g_free0 (_tmp10_);
      _g_free0 (_tmp8_);
      vala_ccode_declaration_set_modifiers (_cdecl_, VALA_CCODE_MODIFIERS_STATIC);
      vala_ccode_file_add_type_member_declaration (((ValaDovaBaseModule*) self)->cfile, (ValaCCodeNode*) _cdecl_);
      _tmp15_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp16_ = _tmp15_;
      _tmp17_ = g_strdup_printf ("%s_type_get", _tmp16_);
      _tmp18_ = _tmp17_;
      _tmp19_ = vala_ccode_function_new (_tmp18_, "DovaType *");
      _tmp20_ = _tmp19_;
      _g_free0 (_tmp18_);
      _g_free0 (_tmp16_);
      type_fun = _tmp20_;
      _tmp21_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
      if (_tmp21_) {
            vala_ccode_function_set_modifiers (type_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      _tmp22_ = cl;
      _tmp23_ = _vala_code_node_ref0 (VALA_IS_OBJECT_TYPE_SYMBOL (_tmp22_) ? ((ValaObjectTypeSymbol*) _tmp22_) : NULL);
      object_type_symbol = _tmp23_;
      if (object_type_symbol != NULL) {
            {
                  ValaList* _tmp24_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp25_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp24_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
                  _type_param_list = _tmp24_;
                  _tmp25_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp25_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp26_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp27_ = NULL;
                        gchar* _tmp28_ = NULL;
                        gchar* _tmp29_;
                        gchar* _tmp30_ = NULL;
                        gchar* _tmp31_;
                        ValaCCodeParameter* _tmp32_ = NULL;
                        ValaCCodeParameter* _tmp33_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp26_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp26_;
                        _tmp27_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp28_ = g_utf8_strdown (_tmp27_, (gssize) (-1));
                        _tmp29_ = _tmp28_;
                        _tmp30_ = g_strdup_printf ("%s_type", _tmp29_);
                        _tmp31_ = _tmp30_;
                        _tmp32_ = vala_ccode_parameter_new (_tmp31_, "DovaType *");
                        _tmp33_ = _tmp32_;
                        vala_ccode_function_add_parameter (type_fun, _tmp33_);
                        _vala_ccode_node_unref0 (_tmp33_);
                        _g_free0 (_tmp31_);
                        _g_free0 (_tmp29_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
      }
      _tmp34_ = vala_ccode_block_new ();
      _tmp35_ = _tmp34_;
      vala_ccode_function_set_block (type_fun, _tmp35_);
      _vala_ccode_node_unref0 (_tmp35_);
      _tmp36_ = vala_ccode_block_new ();
      type_init_block = _tmp36_;
      if (base_class == NULL) {
            ValaCCodeIdentifier* _tmp37_ = NULL;
            ValaCCodeIdentifier* _tmp38_;
            ValaCCodeFunctionCall* _tmp39_ = NULL;
            ValaCCodeFunctionCall* _tmp40_;
            ValaCCodeFunctionCall* sizeof_call;
            gchar* _tmp41_ = NULL;
            gchar* _tmp42_;
            gchar* _tmp43_ = NULL;
            gchar* _tmp44_;
            ValaCCodeIdentifier* _tmp45_ = NULL;
            ValaCCodeIdentifier* _tmp46_;
            ValaCCodeIdentifier* _tmp47_ = NULL;
            ValaCCodeIdentifier* _tmp48_;
            ValaCCodeFunctionCall* _tmp49_ = NULL;
            ValaCCodeFunctionCall* _tmp50_;
            ValaCCodeFunctionCall* calloc_call;
            ValaCCodeConstant* _tmp51_ = NULL;
            ValaCCodeConstant* _tmp52_;
            ValaCCodeConstant* _tmp53_ = NULL;
            ValaCCodeConstant* _tmp54_;
            gchar* _tmp55_ = NULL;
            gchar* _tmp56_;
            gchar* _tmp57_ = NULL;
            gchar* _tmp58_;
            ValaCCodeIdentifier* _tmp59_ = NULL;
            ValaCCodeIdentifier* _tmp60_;
            ValaCCodeAssignment* _tmp61_ = NULL;
            ValaCCodeAssignment* _tmp62_;
            ValaCCodeExpressionStatement* _tmp63_ = NULL;
            ValaCCodeExpressionStatement* _tmp64_;
            ValaCCodeIdentifier* _tmp65_ = NULL;
            ValaCCodeIdentifier* _tmp66_;
            ValaCCodeFunctionCall* _tmp67_ = NULL;
            ValaCCodeFunctionCall* _tmp68_;
            ValaCCodeFunctionCall* set_size;
            gchar* _tmp69_ = NULL;
            gchar* _tmp70_;
            gchar* _tmp71_ = NULL;
            gchar* _tmp72_;
            ValaCCodeIdentifier* _tmp73_ = NULL;
            ValaCCodeIdentifier* _tmp74_;
            ValaCCodeExpressionStatement* _tmp75_ = NULL;
            ValaCCodeExpressionStatement* _tmp76_;
            ValaCCodeIdentifier* _tmp77_ = NULL;
            ValaCCodeIdentifier* _tmp78_;
            ValaCCodeConstant* _tmp79_ = NULL;
            ValaCCodeConstant* _tmp80_;
            ValaCCodeAssignment* _tmp81_ = NULL;
            ValaCCodeAssignment* _tmp82_;
            ValaCCodeExpressionStatement* _tmp83_ = NULL;
            ValaCCodeExpressionStatement* _tmp84_;
            ValaCCodeIdentifier* _tmp85_ = NULL;
            ValaCCodeIdentifier* _tmp86_;
            ValaCCodeFunctionCall* _tmp87_ = NULL;
            gchar* _tmp88_ = NULL;
            gchar* _tmp89_;
            gchar* _tmp90_ = NULL;
            gchar* _tmp91_;
            ValaCCodeIdentifier* _tmp92_ = NULL;
            ValaCCodeIdentifier* _tmp93_;
            ValaCCodeConstant* _tmp94_ = NULL;
            ValaCCodeConstant* _tmp95_;
            ValaCCodeExpressionStatement* _tmp96_ = NULL;
            ValaCCodeExpressionStatement* _tmp97_;
            gchar* _tmp98_ = NULL;
            gchar* _tmp99_;
            gchar* _tmp100_ = NULL;
            gchar* _tmp101_;
            ValaCCodeIdentifier* _tmp102_ = NULL;
            ValaCCodeIdentifier* _tmp103_;
            ValaCCodeMemberAccess* _tmp104_ = NULL;
            ValaCCodeMemberAccess* _tmp105_;
            ValaCCodeIdentifier* _tmp106_ = NULL;
            ValaCCodeIdentifier* _tmp107_;
            ValaCCodeFunctionCall* _tmp108_ = NULL;
            ValaCCodeFunctionCall* _tmp109_;
            ValaCCodeAssignment* _tmp110_ = NULL;
            ValaCCodeAssignment* _tmp111_;
            ValaCCodeExpressionStatement* _tmp112_ = NULL;
            ValaCCodeExpressionStatement* _tmp113_;
            _tmp37_ = vala_ccode_identifier_new ("sizeof");
            _tmp38_ = _tmp37_;
            _tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
            _tmp40_ = _tmp39_;
            _vala_ccode_node_unref0 (_tmp38_);
            sizeof_call = _tmp40_;
            _tmp41_ = vala_typesymbol_get_cname (cl, FALSE);
            _tmp42_ = _tmp41_;
            _tmp43_ = g_strdup_printf ("%sPrivate", _tmp42_);
            _tmp44_ = _tmp43_;
            _tmp45_ = vala_ccode_identifier_new (_tmp44_);
            _tmp46_ = _tmp45_;
            vala_ccode_function_call_add_argument (sizeof_call, (ValaCCodeExpression*) _tmp46_);
            _vala_ccode_node_unref0 (_tmp46_);
            _g_free0 (_tmp44_);
            _g_free0 (_tmp42_);
            _tmp47_ = vala_ccode_identifier_new ("calloc");
            _tmp48_ = _tmp47_;
            _tmp49_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp48_);
            _tmp50_ = _tmp49_;
            _vala_ccode_node_unref0 (_tmp48_);
            calloc_call = _tmp50_;
            _tmp51_ = vala_ccode_constant_new ("1");
            _tmp52_ = _tmp51_;
            vala_ccode_function_call_add_argument (calloc_call, (ValaCCodeExpression*) _tmp52_);
            _vala_ccode_node_unref0 (_tmp52_);
            _tmp53_ = vala_ccode_constant_new ("sizeof (anyPrivate) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePri" \
"vate) + sizeof (anyTypePrivate)");
            _tmp54_ = _tmp53_;
            vala_ccode_function_call_add_argument (calloc_call, (ValaCCodeExpression*) _tmp54_);
            _vala_ccode_node_unref0 (_tmp54_);
            _tmp55_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp56_ = _tmp55_;
            _tmp57_ = g_strdup_printf ("%s_type", _tmp56_);
            _tmp58_ = _tmp57_;
            _tmp59_ = vala_ccode_identifier_new (_tmp58_);
            _tmp60_ = _tmp59_;
            _tmp61_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp60_, (ValaCCodeExpression*) calloc_call, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp62_ = _tmp61_;
            _tmp63_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp62_);
            _tmp64_ = _tmp63_;
            vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp64_);
            _vala_ccode_node_unref0 (_tmp64_);
            _vala_ccode_node_unref0 (_tmp62_);
            _vala_ccode_node_unref0 (_tmp60_);
            _g_free0 (_tmp58_);
            _g_free0 (_tmp56_);
            _tmp65_ = vala_ccode_identifier_new ("dova_type_set_object_size");
            _tmp66_ = _tmp65_;
            _tmp67_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp66_);
            _tmp68_ = _tmp67_;
            _vala_ccode_node_unref0 (_tmp66_);
            set_size = _tmp68_;
            _tmp69_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp70_ = _tmp69_;
            _tmp71_ = g_strdup_printf ("%s_type", _tmp70_);
            _tmp72_ = _tmp71_;
            _tmp73_ = vala_ccode_identifier_new (_tmp72_);
            _tmp74_ = _tmp73_;
            vala_ccode_function_call_add_argument (set_size, (ValaCCodeExpression*) _tmp74_);
            _vala_ccode_node_unref0 (_tmp74_);
            _g_free0 (_tmp72_);
            _g_free0 (_tmp70_);
            vala_ccode_function_call_add_argument (set_size, (ValaCCodeExpression*) sizeof_call);
            _tmp75_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) set_size);
            _tmp76_ = _tmp75_;
            vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp76_);
            _vala_ccode_node_unref0 (_tmp76_);
            _tmp77_ = vala_ccode_identifier_new ("_any_type_offset");
            _tmp78_ = _tmp77_;
            _tmp79_ = vala_ccode_constant_new ("sizeof (any) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePrivate)");
            _tmp80_ = _tmp79_;
            _tmp81_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp78_, (ValaCCodeExpression*) _tmp80_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp82_ = _tmp81_;
            _tmp83_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp82_);
            _tmp84_ = _tmp83_;
            vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp84_);
            _vala_ccode_node_unref0 (_tmp84_);
            _vala_ccode_node_unref0 (_tmp82_);
            _vala_ccode_node_unref0 (_tmp80_);
            _vala_ccode_node_unref0 (_tmp78_);
            _tmp85_ = vala_ccode_identifier_new ("dova_type_set_type_size");
            _tmp86_ = _tmp85_;
            _tmp87_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp86_);
            _vala_ccode_node_unref0 (set_size);
            set_size = _tmp87_;
            _vala_ccode_node_unref0 (_tmp86_);
            _tmp88_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp89_ = _tmp88_;
            _tmp90_ = g_strdup_printf ("%s_type", _tmp89_);
            _tmp91_ = _tmp90_;
            _tmp92_ = vala_ccode_identifier_new (_tmp91_);
            _tmp93_ = _tmp92_;
            vala_ccode_function_call_add_argument (set_size, (ValaCCodeExpression*) _tmp93_);
            _vala_ccode_node_unref0 (_tmp93_);
            _g_free0 (_tmp91_);
            _g_free0 (_tmp89_);
            _tmp94_ = vala_ccode_constant_new ("sizeof (any) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePrivate) +" \
" sizeof (anyTypePrivate)");
            _tmp95_ = _tmp94_;
            vala_ccode_function_call_add_argument (set_size, (ValaCCodeExpression*) _tmp95_);
            _vala_ccode_node_unref0 (_tmp95_);
            _tmp96_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) set_size);
            _tmp97_ = _tmp96_;
            vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp97_);
            _vala_ccode_node_unref0 (_tmp97_);
            _tmp98_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp99_ = _tmp98_;
            _tmp100_ = g_strdup_printf ("%s_type", _tmp99_);
            _tmp101_ = _tmp100_;
            _tmp102_ = vala_ccode_identifier_new (_tmp101_);
            _tmp103_ = _tmp102_;
            _tmp104_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp103_, "type");
            _tmp105_ = _tmp104_;
            _tmp106_ = vala_ccode_identifier_new ("dova_type_type_get");
            _tmp107_ = _tmp106_;
            _tmp108_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp107_);
            _tmp109_ = _tmp108_;
            _tmp110_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp105_, (ValaCCodeExpression*) _tmp109_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp111_ = _tmp110_;
            _tmp112_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp111_);
            _tmp113_ = _tmp112_;
            vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp113_);
            _vala_ccode_node_unref0 (_tmp113_);
            _vala_ccode_node_unref0 (_tmp111_);
            _vala_ccode_node_unref0 (_tmp109_);
            _vala_ccode_node_unref0 (_tmp107_);
            _vala_ccode_node_unref0 (_tmp105_);
            _vala_ccode_node_unref0 (_tmp103_);
            _g_free0 (_tmp101_);
            _g_free0 (_tmp99_);
            _vala_ccode_node_unref0 (set_size);
            _vala_ccode_node_unref0 (calloc_call);
            _vala_ccode_node_unref0 (sizeof_call);
      } else {
            ValaScope* _tmp114_ = NULL;
            ValaSymbol* _tmp115_ = NULL;
            ValaMethod* _tmp116_;
            ValaScope* _tmp117_ = NULL;
            ValaSymbol* _tmp118_ = NULL;
            ValaMethod* _tmp119_;
            gchar* _tmp120_ = NULL;
            gchar* _tmp121_;
            gchar* _tmp122_ = NULL;
            gchar* _tmp123_;
            ValaCCodeIdentifier* _tmp124_ = NULL;
            ValaCCodeIdentifier* _tmp125_;
            ValaCCodeFunctionCall* _tmp126_ = NULL;
            ValaCCodeFunctionCall* _tmp127_;
            ValaCCodeFunctionCall* base_type;
            ValaCCodeIdentifier* _tmp135_ = NULL;
            ValaCCodeIdentifier* _tmp136_;
            ValaCCodeFunctionCall* _tmp137_ = NULL;
            ValaCCodeFunctionCall* _tmp138_;
            ValaCCodeFunctionCall* alloc_call;
            gboolean _tmp139_ = FALSE;
            gboolean _tmp149_ = FALSE;
            gboolean _tmp150_ = FALSE;
            gchar* _tmp160_ = NULL;
            gchar* _tmp161_;
            gchar* _tmp162_ = NULL;
            gchar* _tmp163_;
            ValaCCodeIdentifier* _tmp164_ = NULL;
            ValaCCodeIdentifier* _tmp165_;
            ValaCCodeUnaryExpression* _tmp166_ = NULL;
            ValaCCodeUnaryExpression* _tmp167_;
            gchar* _tmp168_ = NULL;
            gchar* _tmp169_;
            gchar* _tmp170_ = NULL;
            gchar* _tmp171_;
            ValaCCodeIdentifier* _tmp172_ = NULL;
            ValaCCodeIdentifier* _tmp173_;
            ValaCCodeUnaryExpression* _tmp174_ = NULL;
            ValaCCodeUnaryExpression* _tmp175_;
            gchar* _tmp176_ = NULL;
            gchar* _tmp177_;
            gchar* _tmp178_ = NULL;
            gchar* _tmp179_;
            ValaCCodeIdentifier* _tmp180_ = NULL;
            ValaCCodeIdentifier* _tmp181_;
            ValaCCodeUnaryExpression* _tmp182_ = NULL;
            ValaCCodeUnaryExpression* _tmp183_;
            ValaCCodeExpressionStatement* _tmp184_ = NULL;
            ValaCCodeExpressionStatement* _tmp185_;
            _tmp114_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->object_class);
            _tmp115_ = vala_scope_lookup (_tmp114_, "alloc");
            _tmp116_ = VALA_METHOD (_tmp115_);
            vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, _tmp116_, ((ValaDovaBaseModule*) self)->cfile);
            _vala_code_node_unref0 (_tmp116_);
            _tmp117_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class);
            _tmp118_ = vala_scope_lookup (_tmp117_, "alloc");
            _tmp119_ = VALA_METHOD (_tmp118_);
            vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, _tmp119_, ((ValaDovaBaseModule*) self)->cfile);
            _vala_code_node_unref0 (_tmp119_);
            _tmp120_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) base_class, NULL);
            _tmp121_ = _tmp120_;
            _tmp122_ = g_strdup_printf ("%s_type_get", _tmp121_);
            _tmp123_ = _tmp122_;
            _tmp124_ = vala_ccode_identifier_new (_tmp123_);
            _tmp125_ = _tmp124_;
            _tmp126_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp125_);
            _tmp127_ = _tmp126_;
            _vala_ccode_node_unref0 (_tmp125_);
            _g_free0 (_tmp123_);
            _g_free0 (_tmp121_);
            base_type = _tmp127_;
            {
                  gint i;
                  i = 0;
                  {
                        gboolean _tmp128_;
                        _tmp128_ = TRUE;
                        while (TRUE) {
                              ValaList* _tmp129_ = NULL;
                              ValaList* _tmp130_;
                              gint _tmp131_;
                              gboolean _tmp132_;
                              ValaCCodeConstant* _tmp133_ = NULL;
                              ValaCCodeConstant* _tmp134_;
                              if (!_tmp128_) {
                                    i++;
                              }
                              _tmp128_ = FALSE;
                              _tmp129_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) base_class);
                              _tmp130_ = _tmp129_;
                              _tmp131_ = vala_collection_get_size ((ValaCollection*) _tmp130_);
                              _tmp132_ = !(i < _tmp131_);
                              _vala_iterable_unref0 (_tmp130_);
                              if (_tmp132_) {
                                    break;
                              }
                              _tmp133_ = vala_ccode_constant_new ("NULL");
                              _tmp134_ = _tmp133_;
                              vala_ccode_function_call_add_argument (base_type, (ValaCCodeExpression*) _tmp134_);
                              _vala_ccode_node_unref0 (_tmp134_);
                        }
                  }
            }
            _tmp135_ = vala_ccode_identifier_new ("dova_type_alloc");
            _tmp136_ = _tmp135_;
            _tmp137_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp136_);
            _tmp138_ = _tmp137_;
            _vala_ccode_node_unref0 (_tmp136_);
            alloc_call = _tmp138_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) base_type);
            if (!VALA_IS_CLASS (cl)) {
                  _tmp139_ = TRUE;
            } else {
                  gboolean _tmp140_;
                  _tmp140_ = vala_dova_object_module_has_instance_struct (self, VALA_CLASS (cl));
                  _tmp139_ = _tmp140_;
            }
            if (_tmp139_) {
                  gchar* _tmp141_ = NULL;
                  gchar* _tmp142_;
                  gchar* _tmp143_ = NULL;
                  gchar* _tmp144_;
                  ValaCCodeConstant* _tmp145_ = NULL;
                  ValaCCodeConstant* _tmp146_;
                  _tmp141_ = vala_typesymbol_get_cname (cl, FALSE);
                  _tmp142_ = _tmp141_;
                  _tmp143_ = g_strdup_printf ("sizeof (%sPrivate)", _tmp142_);
                  _tmp144_ = _tmp143_;
                  _tmp145_ = vala_ccode_constant_new (_tmp144_);
                  _tmp146_ = _tmp145_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp146_);
                  _vala_ccode_node_unref0 (_tmp146_);
                  _g_free0 (_tmp144_);
                  _g_free0 (_tmp142_);
            } else {
                  ValaCCodeConstant* _tmp147_ = NULL;
                  ValaCCodeConstant* _tmp148_;
                  _tmp147_ = vala_ccode_constant_new ("0");
                  _tmp148_ = _tmp147_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp148_);
                  _vala_ccode_node_unref0 (_tmp148_);
            }
            if (!VALA_IS_CLASS (cl)) {
                  _tmp150_ = TRUE;
            } else {
                  gboolean _tmp151_;
                  _tmp151_ = vala_dova_object_module_has_type_struct (self, VALA_CLASS (cl));
                  _tmp150_ = _tmp151_;
            }
            if (_tmp150_) {
                  _tmp149_ = !VALA_IS_DELEGATE (cl);
            } else {
                  _tmp149_ = FALSE;
            }
            if (_tmp149_) {
                  gchar* _tmp152_ = NULL;
                  gchar* _tmp153_;
                  gchar* _tmp154_ = NULL;
                  gchar* _tmp155_;
                  ValaCCodeConstant* _tmp156_ = NULL;
                  ValaCCodeConstant* _tmp157_;
                  _tmp152_ = vala_typesymbol_get_cname (cl, FALSE);
                  _tmp153_ = _tmp152_;
                  _tmp154_ = g_strdup_printf ("sizeof (%sTypePrivate)", _tmp153_);
                  _tmp155_ = _tmp154_;
                  _tmp156_ = vala_ccode_constant_new (_tmp155_);
                  _tmp157_ = _tmp156_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp157_);
                  _vala_ccode_node_unref0 (_tmp157_);
                  _g_free0 (_tmp155_);
                  _g_free0 (_tmp153_);
            } else {
                  ValaCCodeConstant* _tmp158_ = NULL;
                  ValaCCodeConstant* _tmp159_;
                  _tmp158_ = vala_ccode_constant_new ("0");
                  _tmp159_ = _tmp158_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp159_);
                  _vala_ccode_node_unref0 (_tmp159_);
            }
            _tmp160_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp161_ = _tmp160_;
            _tmp162_ = g_strdup_printf ("%s_type", _tmp161_);
            _tmp163_ = _tmp162_;
            _tmp164_ = vala_ccode_identifier_new (_tmp163_);
            _tmp165_ = _tmp164_;
            _tmp166_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp165_);
            _tmp167_ = _tmp166_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp167_);
            _vala_ccode_node_unref0 (_tmp167_);
            _vala_ccode_node_unref0 (_tmp165_);
            _g_free0 (_tmp163_);
            _g_free0 (_tmp161_);
            _tmp168_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp169_ = _tmp168_;
            _tmp170_ = g_strdup_printf ("_%s_object_offset", _tmp169_);
            _tmp171_ = _tmp170_;
            _tmp172_ = vala_ccode_identifier_new (_tmp171_);
            _tmp173_ = _tmp172_;
            _tmp174_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp173_);
            _tmp175_ = _tmp174_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp175_);
            _vala_ccode_node_unref0 (_tmp175_);
            _vala_ccode_node_unref0 (_tmp173_);
            _g_free0 (_tmp171_);
            _g_free0 (_tmp169_);
            _tmp176_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp177_ = _tmp176_;
            _tmp178_ = g_strdup_printf ("_%s_type_offset", _tmp177_);
            _tmp179_ = _tmp178_;
            _tmp180_ = vala_ccode_identifier_new (_tmp179_);
            _tmp181_ = _tmp180_;
            _tmp182_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp181_);
            _tmp183_ = _tmp182_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp183_);
            _vala_ccode_node_unref0 (_tmp183_);
            _vala_ccode_node_unref0 (_tmp181_);
            _g_free0 (_tmp179_);
            _g_free0 (_tmp177_);
            _tmp184_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) alloc_call);
            _tmp185_ = _tmp184_;
            vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp185_);
            _vala_ccode_node_unref0 (_tmp185_);
            _vala_ccode_node_unref0 (alloc_call);
            _vala_ccode_node_unref0 (base_type);
      }
      _tmp186_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp187_ = _tmp186_;
      _tmp188_ = g_strdup_printf ("%s_type_init", _tmp187_);
      _tmp189_ = _tmp188_;
      _tmp190_ = vala_ccode_identifier_new (_tmp189_);
      _tmp191_ = _tmp190_;
      _tmp192_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp191_);
      _tmp193_ = _tmp192_;
      _vala_ccode_node_unref0 (_tmp191_);
      _g_free0 (_tmp189_);
      _g_free0 (_tmp187_);
      type_init_call = _tmp193_;
      _tmp194_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp195_ = _tmp194_;
      _tmp196_ = g_strdup_printf ("%s_type", _tmp195_);
      _tmp197_ = _tmp196_;
      _tmp198_ = vala_ccode_identifier_new (_tmp197_);
      _tmp199_ = _tmp198_;
      vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp199_);
      _vala_ccode_node_unref0 (_tmp199_);
      _g_free0 (_tmp197_);
      _g_free0 (_tmp195_);
      if (object_type_symbol != NULL) {
            {
                  gint i;
                  i = 0;
                  {
                        gboolean _tmp200_;
                        _tmp200_ = TRUE;
                        while (TRUE) {
                              ValaList* _tmp201_ = NULL;
                              ValaList* _tmp202_;
                              gint _tmp203_;
                              gboolean _tmp204_;
                              ValaCCodeConstant* _tmp205_ = NULL;
                              ValaCCodeConstant* _tmp206_;
                              if (!_tmp200_) {
                                    i++;
                              }
                              _tmp200_ = FALSE;
                              _tmp201_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
                              _tmp202_ = _tmp201_;
                              _tmp203_ = vala_collection_get_size ((ValaCollection*) _tmp202_);
                              _tmp204_ = !(i < _tmp203_);
                              _vala_iterable_unref0 (_tmp202_);
                              if (_tmp204_) {
                                    break;
                              }
                              _tmp205_ = vala_ccode_constant_new ("NULL");
                              _tmp206_ = _tmp205_;
                              vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp206_);
                              _vala_ccode_node_unref0 (_tmp206_);
                        }
                  }
            }
      }
      _tmp207_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) type_init_call);
      _tmp208_ = _tmp207_;
      vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp208_);
      _vala_ccode_node_unref0 (_tmp208_);
      _tmp209_ = vala_ccode_function_get_block (type_fun);
      _tmp210_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp211_ = _tmp210_;
      _tmp212_ = g_strdup_printf ("%s_type", _tmp211_);
      _tmp213_ = _tmp212_;
      _tmp214_ = vala_ccode_identifier_new (_tmp213_);
      _tmp215_ = _tmp214_;
      _tmp216_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp215_);
      _tmp217_ = _tmp216_;
      _tmp218_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp217_, (ValaCCodeStatement*) type_init_block, NULL);
      _tmp219_ = _tmp218_;
      vala_ccode_block_add_statement (_tmp209_, (ValaCCodeNode*) _tmp219_);
      _vala_ccode_node_unref0 (_tmp219_);
      _vala_ccode_node_unref0 (_tmp217_);
      _vala_ccode_node_unref0 (_tmp215_);
      _g_free0 (_tmp213_);
      _g_free0 (_tmp211_);
      if (object_type_symbol != NULL) {
            ValaList* _tmp221_ = NULL;
            ValaList* _tmp222_;
            gint _tmp223_;
            _tmp221_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
            _tmp222_ = _tmp221_;
            _tmp223_ = vala_collection_get_size ((ValaCollection*) _tmp222_);
            _tmp220_ = _tmp223_ > 0;
            _vala_iterable_unref0 (_tmp222_);
      } else {
            _tmp220_ = FALSE;
      }
      if (_tmp220_) {
            ValaCCodeBlock* _tmp224_ = NULL;
            ValaCCodeBlock* specialized_type_get_block;
            ValaScope* _tmp225_ = NULL;
            ValaSymbol* _tmp226_ = NULL;
            ValaProperty* _tmp227_;
            ValaPropertyAccessor* _tmp228_ = NULL;
            ValaScope* _tmp229_ = NULL;
            ValaSymbol* _tmp230_ = NULL;
            ValaMethod* _tmp231_;
            ValaCCodeIdentifier* _tmp232_ = NULL;
            ValaCCodeIdentifier* _tmp233_;
            ValaCCodeFunctionCall* _tmp234_ = NULL;
            ValaCCodeFunctionCall* _tmp235_;
            ValaCCodeFunctionCall* first;
            gchar* _tmp236_ = NULL;
            gchar* _tmp237_;
            gchar* _tmp238_ = NULL;
            gchar* _tmp239_;
            ValaCCodeIdentifier* _tmp240_ = NULL;
            ValaCCodeIdentifier* _tmp241_;
            ValaCCodeDeclaration* _tmp242_ = NULL;
            ValaCCodeVariableDeclarator* _tmp243_ = NULL;
            ValaCCodeVariableDeclarator* _tmp244_;
            ValaCCodeIdentifier* _tmp245_ = NULL;
            ValaCCodeIdentifier* _tmp246_;
            ValaCCodeFunctionCall* _tmp247_ = NULL;
            ValaCCodeFunctionCall* _tmp248_;
            ValaCCodeFunctionCall* next;
            ValaCCodeIdentifier* _tmp249_ = NULL;
            ValaCCodeIdentifier* _tmp250_;
            ValaCCodeBlock* _tmp251_ = NULL;
            ValaCCodeBlock* next_check;
            ValaCCodeIdentifier* _tmp252_ = NULL;
            ValaCCodeIdentifier* _tmp253_;
            ValaCCodeExpression* _tmp254_ = NULL;
            ValaCCodeExpression* _tmp255_;
            ValaList* _tmp256_ = NULL;
            ValaList* _tmp257_;
            gpointer _tmp258_ = NULL;
            ValaTypeParameter* _tmp259_;
            const gchar* _tmp260_ = NULL;
            gchar* _tmp261_ = NULL;
            gchar* _tmp262_;
            gchar* _tmp263_ = NULL;
            gchar* _tmp264_;
            ValaCCodeMemberAccess* _tmp265_ = NULL;
            ValaCCodeMemberAccess* _tmp266_;
            ValaList* _tmp267_ = NULL;
            ValaList* _tmp268_;
            gpointer _tmp269_ = NULL;
            ValaTypeParameter* _tmp270_;
            const gchar* _tmp271_ = NULL;
            gchar* _tmp272_ = NULL;
            gchar* _tmp273_;
            gchar* _tmp274_ = NULL;
            gchar* _tmp275_;
            ValaCCodeIdentifier* _tmp276_ = NULL;
            ValaCCodeIdentifier* _tmp277_;
            ValaCCodeBinaryExpression* _tmp278_ = NULL;
            ValaCCodeBinaryExpression* _tmp279_;
            ValaCCodeBreakStatement* _tmp280_ = NULL;
            ValaCCodeBreakStatement* _tmp281_;
            ValaCCodeIfStatement* _tmp282_ = NULL;
            ValaCCodeIfStatement* _tmp283_;
            ValaCCodeIdentifier* _tmp284_ = NULL;
            ValaCCodeIdentifier* _tmp285_;
            ValaCCodeAssignment* _tmp286_ = NULL;
            ValaCCodeAssignment* _tmp287_;
            ValaCCodeExpressionStatement* _tmp288_ = NULL;
            ValaCCodeExpressionStatement* _tmp289_;
            ValaCCodeIdentifier* _tmp290_ = NULL;
            ValaCCodeIdentifier* _tmp291_;
            ValaCCodeWhileStatement* _tmp292_ = NULL;
            ValaCCodeWhileStatement* _tmp293_;
            ValaCCodeBlock* _tmp294_ = NULL;
            ValaCCodeBlock* specialized_type_init_block;
            ValaScope* _tmp295_ = NULL;
            ValaSymbol* _tmp296_ = NULL;
            ValaMethod* _tmp297_;
            gchar* _tmp298_ = NULL;
            gchar* _tmp299_;
            gchar* _tmp300_ = NULL;
            gchar* _tmp301_;
            ValaCCodeIdentifier* _tmp302_ = NULL;
            ValaCCodeIdentifier* _tmp303_;
            ValaCCodeFunctionCall* _tmp304_ = NULL;
            ValaCCodeFunctionCall* _tmp305_;
            ValaCCodeFunctionCall* base_type;
            ValaCCodeIdentifier* _tmp311_ = NULL;
            ValaCCodeIdentifier* _tmp312_;
            ValaCCodeFunctionCall* _tmp313_ = NULL;
            ValaCCodeFunctionCall* _tmp314_;
            ValaCCodeFunctionCall* alloc_call;
            gboolean _tmp315_ = FALSE;
            gboolean _tmp325_ = FALSE;
            ValaCCodeIdentifier* _tmp335_ = NULL;
            ValaCCodeIdentifier* _tmp336_;
            ValaCCodeUnaryExpression* _tmp337_ = NULL;
            ValaCCodeUnaryExpression* _tmp338_;
            gchar* _tmp339_ = NULL;
            gchar* _tmp340_;
            gchar* _tmp341_ = NULL;
            gchar* _tmp342_;
            ValaCCodeIdentifier* _tmp343_ = NULL;
            ValaCCodeIdentifier* _tmp344_;
            ValaCCodeUnaryExpression* _tmp345_ = NULL;
            ValaCCodeUnaryExpression* _tmp346_;
            gchar* _tmp347_ = NULL;
            gchar* _tmp348_;
            gchar* _tmp349_ = NULL;
            gchar* _tmp350_;
            ValaCCodeIdentifier* _tmp351_ = NULL;
            ValaCCodeIdentifier* _tmp352_;
            ValaCCodeUnaryExpression* _tmp353_ = NULL;
            ValaCCodeUnaryExpression* _tmp354_;
            ValaCCodeExpressionStatement* _tmp355_ = NULL;
            ValaCCodeExpressionStatement* _tmp356_;
            gchar* _tmp357_ = NULL;
            gchar* _tmp358_;
            gchar* _tmp359_ = NULL;
            gchar* _tmp360_;
            ValaCCodeIdentifier* _tmp361_ = NULL;
            ValaCCodeIdentifier* _tmp362_;
            ValaCCodeFunctionCall* _tmp363_ = NULL;
            ValaCCodeIdentifier* _tmp364_ = NULL;
            ValaCCodeIdentifier* _tmp365_;
            ValaCCodeExpressionStatement* _tmp376_ = NULL;
            ValaCCodeExpressionStatement* _tmp377_;
            ValaCCodeIdentifier* _tmp378_ = NULL;
            ValaCCodeIdentifier* _tmp379_;
            ValaCCodeFunctionCall* _tmp380_ = NULL;
            ValaCCodeFunctionCall* _tmp381_;
            ValaCCodeFunctionCall* insert_call;
            gchar* _tmp382_ = NULL;
            gchar* _tmp383_;
            gchar* _tmp384_ = NULL;
            gchar* _tmp385_;
            ValaCCodeIdentifier* _tmp386_ = NULL;
            ValaCCodeIdentifier* _tmp387_;
            ValaCCodeIdentifier* _tmp388_ = NULL;
            ValaCCodeIdentifier* _tmp389_;
            ValaCCodeExpressionStatement* _tmp390_ = NULL;
            ValaCCodeExpressionStatement* _tmp391_;
            ValaCCodeIdentifier* _tmp392_ = NULL;
            ValaCCodeIdentifier* _tmp393_;
            ValaCCodeUnaryExpression* _tmp394_ = NULL;
            ValaCCodeUnaryExpression* _tmp395_;
            ValaCCodeIfStatement* _tmp396_ = NULL;
            ValaCCodeIfStatement* _tmp397_;
            ValaCCodeIdentifier* _tmp398_ = NULL;
            ValaCCodeIdentifier* _tmp399_;
            ValaCCodeReturnStatement* _tmp400_ = NULL;
            ValaCCodeReturnStatement* _tmp401_;
            ValaCCodeBlock* _tmp402_ = NULL;
            ValaList* _tmp403_ = NULL;
            ValaList* _tmp404_;
            gpointer _tmp405_ = NULL;
            ValaTypeParameter* _tmp406_;
            const gchar* _tmp407_ = NULL;
            gchar* _tmp408_ = NULL;
            gchar* _tmp409_;
            gchar* _tmp410_ = NULL;
            gchar* _tmp411_;
            ValaCCodeIdentifier* _tmp412_ = NULL;
            ValaCCodeIdentifier* _tmp413_;
            ValaCCodeIfStatement* _tmp414_ = NULL;
            ValaCCodeIfStatement* _tmp415_;
            _tmp224_ = vala_ccode_block_new ();
            specialized_type_get_block = _tmp224_;
            _tmp225_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class);
            _tmp226_ = vala_scope_lookup (_tmp225_, "next_type");
            _tmp227_ = VALA_PROPERTY (_tmp226_);
            _tmp228_ = vala_property_get_get_accessor (_tmp227_);
            vala_dova_base_module_generate_property_accessor_declaration ((ValaDovaBaseModule*) self, _tmp228_, ((ValaDovaBaseModule*) self)->cfile);
            _vala_code_node_unref0 (_tmp227_);
            _tmp229_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class);
            _tmp230_ = vala_scope_lookup (_tmp229_, "insert_type");
            _tmp231_ = VALA_METHOD (_tmp230_);
            vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, _tmp231_, ((ValaDovaBaseModule*) self)->cfile);
            _vala_code_node_unref0 (_tmp231_);
            _tmp232_ = vala_ccode_identifier_new ("dova_type_get_next_type");
            _tmp233_ = _tmp232_;
            _tmp234_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp233_);
            _tmp235_ = _tmp234_;
            _vala_ccode_node_unref0 (_tmp233_);
            first = _tmp235_;
            _tmp236_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp237_ = _tmp236_;
            _tmp238_ = g_strdup_printf ("%s_type", _tmp237_);
            _tmp239_ = _tmp238_;
            _tmp240_ = vala_ccode_identifier_new (_tmp239_);
            _tmp241_ = _tmp240_;
            vala_ccode_function_call_add_argument (first, (ValaCCodeExpression*) _tmp241_);
            _vala_ccode_node_unref0 (_tmp241_);
            _g_free0 (_tmp239_);
            _g_free0 (_tmp237_);
            _tmp242_ = vala_ccode_declaration_new ("DovaType *");
            _vala_ccode_node_unref0 (_cdecl_);
            _cdecl_ = _tmp242_;
            _tmp243_ = vala_ccode_variable_declarator_new ("result", (ValaCCodeExpression*) first, NULL);
            _tmp244_ = _tmp243_;
            vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp244_);
            _vala_ccode_node_unref0 (_tmp244_);
            vala_ccode_block_add_statement (specialized_type_get_block, (ValaCCodeNode*) _cdecl_);
            _tmp245_ = vala_ccode_identifier_new ("dova_type_get_next_type");
            _tmp246_ = _tmp245_;
            _tmp247_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp246_);
            _tmp248_ = _tmp247_;
            _vala_ccode_node_unref0 (_tmp246_);
            next = _tmp248_;
            _tmp249_ = vala_ccode_identifier_new ("result");
            _tmp250_ = _tmp249_;
            vala_ccode_function_call_add_argument (next, (ValaCCodeExpression*) _tmp250_);
            _vala_ccode_node_unref0 (_tmp250_);
            _tmp251_ = vala_ccode_block_new ();
            next_check = _tmp251_;
            _tmp252_ = vala_ccode_identifier_new ("result");
            _tmp253_ = _tmp252_;
            _tmp254_ = vala_dova_base_module_get_type_private_from_type ((ValaDovaBaseModule*) self, object_type_symbol, (ValaCCodeExpression*) _tmp253_);
            _tmp255_ = _tmp254_;
            _tmp256_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
            _tmp257_ = _tmp256_;
            _tmp258_ = vala_list_get (_tmp257_, 0);
            _tmp259_ = (ValaTypeParameter*) _tmp258_;
            _tmp260_ = vala_symbol_get_name ((ValaSymbol*) _tmp259_);
            _tmp261_ = g_utf8_strdown (_tmp260_, (gssize) (-1));
            _tmp262_ = _tmp261_;
            _tmp263_ = g_strdup_printf ("%s_type", _tmp262_);
            _tmp264_ = _tmp263_;
            _tmp265_ = vala_ccode_member_access_new_pointer (_tmp255_, _tmp264_);
            _tmp266_ = _tmp265_;
            _tmp267_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
            _tmp268_ = _tmp267_;
            _tmp269_ = vala_list_get (_tmp268_, 0);
            _tmp270_ = (ValaTypeParameter*) _tmp269_;
            _tmp271_ = vala_symbol_get_name ((ValaSymbol*) _tmp270_);
            _tmp272_ = g_utf8_strdown (_tmp271_, (gssize) (-1));
            _tmp273_ = _tmp272_;
            _tmp274_ = g_strdup_printf ("%s_type", _tmp273_);
            _tmp275_ = _tmp274_;
            _tmp276_ = vala_ccode_identifier_new (_tmp275_);
            _tmp277_ = _tmp276_;
            _tmp278_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp266_, (ValaCCodeExpression*) _tmp277_);
            _tmp279_ = _tmp278_;
            _tmp280_ = vala_ccode_break_statement_new ();
            _tmp281_ = _tmp280_;
            _tmp282_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp279_, (ValaCCodeStatement*) _tmp281_, NULL);
            _tmp283_ = _tmp282_;
            vala_ccode_block_add_statement (next_check, (ValaCCodeNode*) _tmp283_);
            _vala_ccode_node_unref0 (_tmp283_);
            _vala_ccode_node_unref0 (_tmp281_);
            _vala_ccode_node_unref0 (_tmp279_);
            _vala_ccode_node_unref0 (_tmp277_);
            _g_free0 (_tmp275_);
            _g_free0 (_tmp273_);
            _vala_code_node_unref0 (_tmp270_);
            _vala_iterable_unref0 (_tmp268_);
            _vala_ccode_node_unref0 (_tmp266_);
            _g_free0 (_tmp264_);
            _g_free0 (_tmp262_);
            _vala_code_node_unref0 (_tmp259_);
            _vala_iterable_unref0 (_tmp257_);
            _vala_ccode_node_unref0 (_tmp255_);
            _vala_ccode_node_unref0 (_tmp253_);
            _tmp284_ = vala_ccode_identifier_new ("result");
            _tmp285_ = _tmp284_;
            _tmp286_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp285_, (ValaCCodeExpression*) next, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp287_ = _tmp286_;
            _tmp288_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp287_);
            _tmp289_ = _tmp288_;
            vala_ccode_block_add_statement (next_check, (ValaCCodeNode*) _tmp289_);
            _vala_ccode_node_unref0 (_tmp289_);
            _vala_ccode_node_unref0 (_tmp287_);
            _vala_ccode_node_unref0 (_tmp285_);
            _tmp290_ = vala_ccode_identifier_new ("result");
            _tmp291_ = _tmp290_;
            _tmp292_ = vala_ccode_while_statement_new ((ValaCCodeExpression*) _tmp291_, (ValaCCodeStatement*) next_check);
            _tmp293_ = _tmp292_;
            vala_ccode_block_add_statement (specialized_type_get_block, (ValaCCodeNode*) _tmp293_);
            _vala_ccode_node_unref0 (_tmp293_);
            _vala_ccode_node_unref0 (_tmp291_);
            _tmp294_ = vala_ccode_block_new ();
            specialized_type_init_block = _tmp294_;
            _tmp295_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->type_class);
            _tmp296_ = vala_scope_lookup (_tmp295_, "alloc");
            _tmp297_ = VALA_METHOD (_tmp296_);
            vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, _tmp297_, ((ValaDovaBaseModule*) self)->cfile);
            _vala_code_node_unref0 (_tmp297_);
            _tmp298_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) base_class, NULL);
            _tmp299_ = _tmp298_;
            _tmp300_ = g_strdup_printf ("%s_type_get", _tmp299_);
            _tmp301_ = _tmp300_;
            _tmp302_ = vala_ccode_identifier_new (_tmp301_);
            _tmp303_ = _tmp302_;
            _tmp304_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp303_);
            _tmp305_ = _tmp304_;
            _vala_ccode_node_unref0 (_tmp303_);
            _g_free0 (_tmp301_);
            _g_free0 (_tmp299_);
            base_type = _tmp305_;
            if (base_class_type != NULL) {
                  {
                        ValaList* _tmp306_ = NULL;
                        ValaList* _type_arg_list;
                        gint _tmp307_;
                        gint _type_arg_size;
                        gint _type_arg_index;
                        _tmp306_ = vala_data_type_get_type_arguments (base_class_type);
                        _type_arg_list = _tmp306_;
                        _tmp307_ = vala_collection_get_size ((ValaCollection*) _type_arg_list);
                        _type_arg_size = _tmp307_;
                        _type_arg_index = -1;
                        while (TRUE) {
                              gpointer _tmp308_ = NULL;
                              ValaDataType* type_arg;
                              ValaCCodeExpression* _tmp309_ = NULL;
                              ValaCCodeExpression* _tmp310_;
                              _type_arg_index = _type_arg_index + 1;
                              if (!(_type_arg_index < _type_arg_size)) {
                                    break;
                              }
                              _tmp308_ = vala_list_get (_type_arg_list, _type_arg_index);
                              type_arg = (ValaDataType*) _tmp308_;
                              _tmp309_ = vala_dova_base_module_get_type_id_expression ((ValaDovaBaseModule*) self, type_arg, TRUE);
                              _tmp310_ = _tmp309_;
                              vala_ccode_function_call_add_argument (base_type, _tmp310_);
                              _vala_ccode_node_unref0 (_tmp310_);
                              _vala_code_node_unref0 (type_arg);
                        }
                        _vala_iterable_unref0 (_type_arg_list);
                  }
            }
            _tmp311_ = vala_ccode_identifier_new ("dova_type_alloc");
            _tmp312_ = _tmp311_;
            _tmp313_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp312_);
            _tmp314_ = _tmp313_;
            _vala_ccode_node_unref0 (_tmp312_);
            alloc_call = _tmp314_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) base_type);
            if (!VALA_IS_CLASS (cl)) {
                  _tmp315_ = TRUE;
            } else {
                  gboolean _tmp316_;
                  _tmp316_ = vala_dova_object_module_has_instance_struct (self, VALA_CLASS (cl));
                  _tmp315_ = _tmp316_;
            }
            if (_tmp315_) {
                  gchar* _tmp317_ = NULL;
                  gchar* _tmp318_;
                  gchar* _tmp319_ = NULL;
                  gchar* _tmp320_;
                  ValaCCodeConstant* _tmp321_ = NULL;
                  ValaCCodeConstant* _tmp322_;
                  _tmp317_ = vala_typesymbol_get_cname (cl, FALSE);
                  _tmp318_ = _tmp317_;
                  _tmp319_ = g_strdup_printf ("sizeof (%sPrivate)", _tmp318_);
                  _tmp320_ = _tmp319_;
                  _tmp321_ = vala_ccode_constant_new (_tmp320_);
                  _tmp322_ = _tmp321_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp322_);
                  _vala_ccode_node_unref0 (_tmp322_);
                  _g_free0 (_tmp320_);
                  _g_free0 (_tmp318_);
            } else {
                  ValaCCodeConstant* _tmp323_ = NULL;
                  ValaCCodeConstant* _tmp324_;
                  _tmp323_ = vala_ccode_constant_new ("0");
                  _tmp324_ = _tmp323_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp324_);
                  _vala_ccode_node_unref0 (_tmp324_);
            }
            if (!VALA_IS_CLASS (cl)) {
                  _tmp325_ = TRUE;
            } else {
                  gboolean _tmp326_;
                  _tmp326_ = vala_dova_object_module_has_type_struct (self, VALA_CLASS (cl));
                  _tmp325_ = _tmp326_;
            }
            if (_tmp325_) {
                  gchar* _tmp327_ = NULL;
                  gchar* _tmp328_;
                  gchar* _tmp329_ = NULL;
                  gchar* _tmp330_;
                  ValaCCodeConstant* _tmp331_ = NULL;
                  ValaCCodeConstant* _tmp332_;
                  _tmp327_ = vala_typesymbol_get_cname (cl, FALSE);
                  _tmp328_ = _tmp327_;
                  _tmp329_ = g_strdup_printf ("sizeof (%sTypePrivate)", _tmp328_);
                  _tmp330_ = _tmp329_;
                  _tmp331_ = vala_ccode_constant_new (_tmp330_);
                  _tmp332_ = _tmp331_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp332_);
                  _vala_ccode_node_unref0 (_tmp332_);
                  _g_free0 (_tmp330_);
                  _g_free0 (_tmp328_);
            } else {
                  ValaCCodeConstant* _tmp333_ = NULL;
                  ValaCCodeConstant* _tmp334_;
                  _tmp333_ = vala_ccode_constant_new ("0");
                  _tmp334_ = _tmp333_;
                  vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp334_);
                  _vala_ccode_node_unref0 (_tmp334_);
            }
            _tmp335_ = vala_ccode_identifier_new ("result");
            _tmp336_ = _tmp335_;
            _tmp337_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp336_);
            _tmp338_ = _tmp337_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp338_);
            _vala_ccode_node_unref0 (_tmp338_);
            _vala_ccode_node_unref0 (_tmp336_);
            _tmp339_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp340_ = _tmp339_;
            _tmp341_ = g_strdup_printf ("_%s_object_offset", _tmp340_);
            _tmp342_ = _tmp341_;
            _tmp343_ = vala_ccode_identifier_new (_tmp342_);
            _tmp344_ = _tmp343_;
            _tmp345_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp344_);
            _tmp346_ = _tmp345_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp346_);
            _vala_ccode_node_unref0 (_tmp346_);
            _vala_ccode_node_unref0 (_tmp344_);
            _g_free0 (_tmp342_);
            _g_free0 (_tmp340_);
            _tmp347_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp348_ = _tmp347_;
            _tmp349_ = g_strdup_printf ("_%s_type_offset", _tmp348_);
            _tmp350_ = _tmp349_;
            _tmp351_ = vala_ccode_identifier_new (_tmp350_);
            _tmp352_ = _tmp351_;
            _tmp353_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp352_);
            _tmp354_ = _tmp353_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) _tmp354_);
            _vala_ccode_node_unref0 (_tmp354_);
            _vala_ccode_node_unref0 (_tmp352_);
            _g_free0 (_tmp350_);
            _g_free0 (_tmp348_);
            _tmp355_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) alloc_call);
            _tmp356_ = _tmp355_;
            vala_ccode_block_add_statement (specialized_type_init_block, (ValaCCodeNode*) _tmp356_);
            _vala_ccode_node_unref0 (_tmp356_);
            _tmp357_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp358_ = _tmp357_;
            _tmp359_ = g_strdup_printf ("%s_type_init", _tmp358_);
            _tmp360_ = _tmp359_;
            _tmp361_ = vala_ccode_identifier_new (_tmp360_);
            _tmp362_ = _tmp361_;
            _tmp363_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp362_);
            _vala_ccode_node_unref0 (type_init_call);
            type_init_call = _tmp363_;
            _vala_ccode_node_unref0 (_tmp362_);
            _g_free0 (_tmp360_);
            _g_free0 (_tmp358_);
            _tmp364_ = vala_ccode_identifier_new ("result");
            _tmp365_ = _tmp364_;
            vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp365_);
            _vala_ccode_node_unref0 (_tmp365_);
            {
                  ValaList* _tmp366_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp367_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp366_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
                  _type_param_list = _tmp366_;
                  _tmp367_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp367_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp368_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp369_ = NULL;
                        gchar* _tmp370_ = NULL;
                        gchar* _tmp371_;
                        gchar* _tmp372_ = NULL;
                        gchar* _tmp373_;
                        ValaCCodeIdentifier* _tmp374_ = NULL;
                        ValaCCodeIdentifier* _tmp375_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp368_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp368_;
                        _tmp369_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp370_ = g_utf8_strdown (_tmp369_, (gssize) (-1));
                        _tmp371_ = _tmp370_;
                        _tmp372_ = g_strdup_printf ("%s_type", _tmp371_);
                        _tmp373_ = _tmp372_;
                        _tmp374_ = vala_ccode_identifier_new (_tmp373_);
                        _tmp375_ = _tmp374_;
                        vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp375_);
                        _vala_ccode_node_unref0 (_tmp375_);
                        _g_free0 (_tmp373_);
                        _g_free0 (_tmp371_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
            _tmp376_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) type_init_call);
            _tmp377_ = _tmp376_;
            vala_ccode_block_add_statement (specialized_type_init_block, (ValaCCodeNode*) _tmp377_);
            _vala_ccode_node_unref0 (_tmp377_);
            _tmp378_ = vala_ccode_identifier_new ("dova_type_insert_type");
            _tmp379_ = _tmp378_;
            _tmp380_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp379_);
            _tmp381_ = _tmp380_;
            _vala_ccode_node_unref0 (_tmp379_);
            insert_call = _tmp381_;
            _tmp382_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp383_ = _tmp382_;
            _tmp384_ = g_strdup_printf ("%s_type", _tmp383_);
            _tmp385_ = _tmp384_;
            _tmp386_ = vala_ccode_identifier_new (_tmp385_);
            _tmp387_ = _tmp386_;
            vala_ccode_function_call_add_argument (insert_call, (ValaCCodeExpression*) _tmp387_);
            _vala_ccode_node_unref0 (_tmp387_);
            _g_free0 (_tmp385_);
            _g_free0 (_tmp383_);
            _tmp388_ = vala_ccode_identifier_new ("result");
            _tmp389_ = _tmp388_;
            vala_ccode_function_call_add_argument (insert_call, (ValaCCodeExpression*) _tmp389_);
            _vala_ccode_node_unref0 (_tmp389_);
            _tmp390_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) insert_call);
            _tmp391_ = _tmp390_;
            vala_ccode_block_add_statement (specialized_type_init_block, (ValaCCodeNode*) _tmp391_);
            _vala_ccode_node_unref0 (_tmp391_);
            _tmp392_ = vala_ccode_identifier_new ("result");
            _tmp393_ = _tmp392_;
            _tmp394_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp393_);
            _tmp395_ = _tmp394_;
            _tmp396_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp395_, (ValaCCodeStatement*) specialized_type_init_block, NULL);
            _tmp397_ = _tmp396_;
            vala_ccode_block_add_statement (specialized_type_get_block, (ValaCCodeNode*) _tmp397_);
            _vala_ccode_node_unref0 (_tmp397_);
            _vala_ccode_node_unref0 (_tmp395_);
            _vala_ccode_node_unref0 (_tmp393_);
            _tmp398_ = vala_ccode_identifier_new ("result");
            _tmp399_ = _tmp398_;
            _tmp400_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp399_);
            _tmp401_ = _tmp400_;
            vala_ccode_block_add_statement (specialized_type_get_block, (ValaCCodeNode*) _tmp401_);
            _vala_ccode_node_unref0 (_tmp401_);
            _vala_ccode_node_unref0 (_tmp399_);
            _tmp402_ = vala_ccode_function_get_block (type_fun);
            _tmp403_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
            _tmp404_ = _tmp403_;
            _tmp405_ = vala_list_get (_tmp404_, 0);
            _tmp406_ = (ValaTypeParameter*) _tmp405_;
            _tmp407_ = vala_symbol_get_name ((ValaSymbol*) _tmp406_);
            _tmp408_ = g_utf8_strdown (_tmp407_, (gssize) (-1));
            _tmp409_ = _tmp408_;
            _tmp410_ = g_strdup_printf ("%s_type", _tmp409_);
            _tmp411_ = _tmp410_;
            _tmp412_ = vala_ccode_identifier_new (_tmp411_);
            _tmp413_ = _tmp412_;
            _tmp414_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp413_, (ValaCCodeStatement*) specialized_type_get_block, NULL);
            _tmp415_ = _tmp414_;
            vala_ccode_block_add_statement (_tmp402_, (ValaCCodeNode*) _tmp415_);
            _vala_ccode_node_unref0 (_tmp415_);
            _vala_ccode_node_unref0 (_tmp413_);
            _g_free0 (_tmp411_);
            _g_free0 (_tmp409_);
            _vala_code_node_unref0 (_tmp406_);
            _vala_iterable_unref0 (_tmp404_);
            _vala_ccode_node_unref0 (insert_call);
            _vala_ccode_node_unref0 (alloc_call);
            _vala_ccode_node_unref0 (base_type);
            _vala_ccode_node_unref0 (specialized_type_init_block);
            _vala_ccode_node_unref0 (next_check);
            _vala_ccode_node_unref0 (next);
            _vala_ccode_node_unref0 (first);
            _vala_ccode_node_unref0 (specialized_type_get_block);
      }
      _tmp416_ = vala_ccode_function_get_block (type_fun);
      _tmp417_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp418_ = _tmp417_;
      _tmp419_ = g_strdup_printf ("%s_type", _tmp418_);
      _tmp420_ = _tmp419_;
      _tmp421_ = vala_ccode_identifier_new (_tmp420_);
      _tmp422_ = _tmp421_;
      _tmp423_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp422_);
      _tmp424_ = _tmp423_;
      vala_ccode_block_add_statement (_tmp416_, (ValaCCodeNode*) _tmp424_);
      _vala_ccode_node_unref0 (_tmp424_);
      _vala_ccode_node_unref0 (_tmp422_);
      _g_free0 (_tmp420_);
      _g_free0 (_tmp418_);
      vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, type_fun);
      _tmp425_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
      _tmp426_ = _tmp425_;
      _tmp427_ = g_strdup_printf ("%s_type_init", _tmp426_);
      _tmp428_ = _tmp427_;
      _tmp429_ = vala_ccode_function_new (_tmp428_, "void");
      _tmp430_ = _tmp429_;
      _g_free0 (_tmp428_);
      _g_free0 (_tmp426_);
      type_init_fun = _tmp430_;
      _tmp431_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
      if (_tmp431_) {
            vala_ccode_function_set_modifiers (type_init_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      _tmp432_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp433_ = _tmp432_;
      vala_ccode_function_add_parameter (type_init_fun, _tmp433_);
      _vala_ccode_node_unref0 (_tmp433_);
      if (object_type_symbol != NULL) {
            {
                  ValaList* _tmp434_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp435_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp434_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
                  _type_param_list = _tmp434_;
                  _tmp435_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp435_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp436_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp437_ = NULL;
                        gchar* _tmp438_ = NULL;
                        gchar* _tmp439_;
                        gchar* _tmp440_ = NULL;
                        gchar* _tmp441_;
                        ValaCCodeParameter* _tmp442_ = NULL;
                        ValaCCodeParameter* _tmp443_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp436_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp436_;
                        _tmp437_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp438_ = g_utf8_strdown (_tmp437_, (gssize) (-1));
                        _tmp439_ = _tmp438_;
                        _tmp440_ = g_strdup_printf ("%s_type", _tmp439_);
                        _tmp441_ = _tmp440_;
                        _tmp442_ = vala_ccode_parameter_new (_tmp441_, "DovaType *");
                        _tmp443_ = _tmp442_;
                        vala_ccode_function_add_parameter (type_init_fun, _tmp443_);
                        _vala_ccode_node_unref0 (_tmp443_);
                        _g_free0 (_tmp441_);
                        _g_free0 (_tmp439_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
      }
      _tmp444_ = vala_ccode_block_new ();
      _tmp445_ = _tmp444_;
      vala_ccode_function_set_block (type_init_fun, _tmp445_);
      _vala_ccode_node_unref0 (_tmp445_);
      if (base_class == NULL) {
            _tmp448_ = TRUE;
      } else {
            _tmp448_ = cl == VALA_TYPESYMBOL (((ValaDovaBaseModule*) self)->object_class);
      }
      if (_tmp448_) {
            _tmp447_ = TRUE;
      } else {
            _tmp447_ = cl == VALA_TYPESYMBOL (((ValaDovaBaseModule*) self)->value_class);
      }
      if (_tmp447_) {
            _tmp446_ = TRUE;
      } else {
            _tmp446_ = cl == VALA_TYPESYMBOL (((ValaDovaBaseModule*) self)->string_class);
      }
      if (_tmp446_) {
            ValaCCodeIdentifier* _tmp449_ = NULL;
            ValaCCodeIdentifier* _tmp450_;
            ValaCCodeFunctionCall* _tmp451_ = NULL;
            ValaCCodeFunctionCall* _tmp452_;
            ValaCCodeFunctionCall* sizeof_call;
            ValaCCodeIdentifier* _tmp453_ = NULL;
            ValaCCodeIdentifier* _tmp454_;
            ValaCCodeIdentifier* _tmp455_ = NULL;
            ValaCCodeIdentifier* _tmp456_;
            ValaCCodeFunctionCall* _tmp457_ = NULL;
            ValaCCodeFunctionCall* _tmp458_;
            ValaCCodeFunctionCall* set_size;
            ValaCCodeIdentifier* _tmp459_ = NULL;
            ValaCCodeIdentifier* _tmp460_;
            ValaCCodeBlock* _tmp461_ = NULL;
            ValaCCodeExpressionStatement* _tmp462_ = NULL;
            ValaCCodeExpressionStatement* _tmp463_;
            ValaCCodeIdentifier* _tmp464_ = NULL;
            ValaCCodeIdentifier* _tmp465_;
            ValaCCodeFunctionCall* _tmp466_ = NULL;
            ValaCCodeFunctionCall* _tmp467_;
            ValaCCodeFunctionCall* value_copy_call;
            ValaCCodeIdentifier* _tmp468_ = NULL;
            ValaCCodeIdentifier* _tmp469_;
            gchar* _tmp470_ = NULL;
            gchar* _tmp471_;
            gchar* _tmp472_ = NULL;
            gchar* _tmp473_;
            ValaCCodeIdentifier* _tmp474_ = NULL;
            ValaCCodeIdentifier* _tmp475_;
            ValaCCodeCastExpression* _tmp476_ = NULL;
            ValaCCodeCastExpression* _tmp477_;
            ValaCCodeBlock* _tmp478_ = NULL;
            ValaCCodeExpressionStatement* _tmp479_ = NULL;
            ValaCCodeExpressionStatement* _tmp480_;
            gchar* _tmp481_ = NULL;
            gchar* _tmp482_;
            gchar* _tmp483_ = NULL;
            gchar* _tmp484_;
            ValaCCodeFunction* _tmp485_ = NULL;
            ValaCCodeFunction* _tmp486_;
            ValaCCodeFunction* function;
            ValaCCodeParameter* _tmp487_ = NULL;
            ValaCCodeParameter* _tmp488_;
            ValaCCodeParameter* _tmp489_ = NULL;
            ValaCCodeParameter* _tmp490_;
            ValaCCodeParameter* _tmp491_ = NULL;
            ValaCCodeParameter* _tmp492_;
            ValaCCodeParameter* _tmp493_ = NULL;
            ValaCCodeParameter* _tmp494_;
            ValaCCodeBlock* _tmp495_ = NULL;
            ValaCCodeBlock* _tmp496_;
            ValaCCodeFragment* _tmp497_ = NULL;
            ValaCCodeFragment* cfrag;
            ValaCCodeBlock* _tmp498_ = NULL;
            ValaCCodeIdentifier* _tmp499_ = NULL;
            ValaCCodeIdentifier* _tmp500_;
            ValaCCodeIdentifier* _tmp501_ = NULL;
            ValaCCodeIdentifier* _tmp502_;
            ValaCCodeBinaryExpression* _tmp503_ = NULL;
            ValaCCodeBinaryExpression* _tmp504_;
            ValaCCodeBinaryExpression* dest;
            ValaCCodeIdentifier* _tmp505_ = NULL;
            ValaCCodeIdentifier* _tmp506_;
            ValaCCodeIdentifier* _tmp507_ = NULL;
            ValaCCodeIdentifier* _tmp508_;
            ValaCCodeBinaryExpression* _tmp509_ = NULL;
            ValaCCodeBinaryExpression* _tmp510_;
            ValaCCodeBinaryExpression* src;
            gchar* _tmp511_ = NULL;
            gchar* _tmp512_;
            gchar* _tmp513_ = NULL;
            gchar* _tmp514_;
            ValaCCodeIdentifier* _tmp515_ = NULL;
            ValaCCodeIdentifier* _tmp516_;
            ValaCCodeFunctionCall* _tmp517_ = NULL;
            ValaCCodeFunctionCall* _tmp518_;
            ValaCCodeFunctionCall* unref_call;
            ValaCCodeUnaryExpression* _tmp519_ = NULL;
            ValaCCodeUnaryExpression* _tmp520_;
            ValaCCodeBlock* _tmp521_ = NULL;
            ValaCCodeBlock* unref_block;
            ValaCCodeExpressionStatement* _tmp522_ = NULL;
            ValaCCodeExpressionStatement* _tmp523_;
            ValaCCodeUnaryExpression* _tmp524_ = NULL;
            ValaCCodeUnaryExpression* _tmp525_;
            ValaCCodeConstant* _tmp526_ = NULL;
            ValaCCodeConstant* _tmp527_;
            ValaCCodeAssignment* _tmp528_ = NULL;
            ValaCCodeAssignment* _tmp529_;
            ValaCCodeExpressionStatement* _tmp530_ = NULL;
            ValaCCodeExpressionStatement* _tmp531_;
            ValaCCodeBlock* _tmp532_ = NULL;
            ValaCCodeUnaryExpression* _tmp533_ = NULL;
            ValaCCodeUnaryExpression* _tmp534_;
            ValaCCodeIfStatement* _tmp535_ = NULL;
            ValaCCodeIfStatement* _tmp536_;
            gchar* _tmp537_ = NULL;
            gchar* _tmp538_;
            gchar* _tmp539_ = NULL;
            gchar* _tmp540_;
            ValaCCodeIdentifier* _tmp541_ = NULL;
            ValaCCodeIdentifier* _tmp542_;
            ValaCCodeFunctionCall* _tmp543_ = NULL;
            ValaCCodeFunctionCall* _tmp544_;
            ValaCCodeFunctionCall* ref_call;
            ValaCCodeUnaryExpression* _tmp545_ = NULL;
            ValaCCodeUnaryExpression* _tmp546_;
            ValaCCodeBlock* _tmp547_ = NULL;
            ValaCCodeBlock* ref_block;
            ValaCCodeUnaryExpression* _tmp548_ = NULL;
            ValaCCodeUnaryExpression* _tmp549_;
            ValaCCodeAssignment* _tmp550_ = NULL;
            ValaCCodeAssignment* _tmp551_;
            ValaCCodeExpressionStatement* _tmp552_ = NULL;
            ValaCCodeExpressionStatement* _tmp553_;
            ValaCCodeBlock* _tmp554_ = NULL;
            ValaCCodeIdentifier* _tmp555_ = NULL;
            ValaCCodeIdentifier* _tmp556_;
            ValaCCodeIfStatement* _tmp557_ = NULL;
            ValaCCodeIfStatement* _tmp558_;
            gchar* _tmp671_ = NULL;
            gchar* _tmp672_;
            gchar* _tmp673_ = NULL;
            gchar* _tmp674_;
            ValaCCodeFunction* _tmp675_ = NULL;
            ValaCCodeFunction* _tmp676_;
            ValaCCodeFunction* value_to_any_fun;
            gchar* _tmp677_ = NULL;
            gchar* _tmp678_;
            gchar* _tmp679_;
            gchar* _tmp680_;
            ValaCCodeParameter* _tmp681_ = NULL;
            ValaCCodeParameter* _tmp682_;
            ValaCCodeParameter* _tmp683_ = NULL;
            ValaCCodeParameter* _tmp684_;
            ValaCCodeBlock* _tmp685_ = NULL;
            ValaCCodeBlock* _tmp686_;
            ValaCCodeIdentifier* _tmp687_ = NULL;
            ValaCCodeIdentifier* _tmp688_;
            ValaCCodeIdentifier* _tmp689_ = NULL;
            ValaCCodeIdentifier* _tmp690_;
            ValaCCodeBinaryExpression* _tmp691_ = NULL;
            ValaCCodeBinaryExpression* _tmp692_;
            ValaCCodeBinaryExpression* val;
            gchar* _tmp693_ = NULL;
            gchar* _tmp694_;
            gchar* _tmp695_ = NULL;
            gchar* _tmp696_;
            gchar* to_any_fun;
            ValaCCodeIdentifier* _tmp698_ = NULL;
            ValaCCodeIdentifier* _tmp699_;
            ValaCCodeFunctionCall* _tmp700_ = NULL;
            ValaCCodeFunctionCall* _tmp701_;
            ValaCCodeFunctionCall* ccall;
            ValaCCodeUnaryExpression* _tmp702_ = NULL;
            ValaCCodeUnaryExpression* _tmp703_;
            ValaCCodeBlock* _tmp704_ = NULL;
            ValaCCodeReturnStatement* _tmp705_ = NULL;
            ValaCCodeReturnStatement* _tmp706_;
            ValaCCodeIdentifier* _tmp707_ = NULL;
            ValaCCodeIdentifier* _tmp708_;
            ValaCCodeFunctionCall* _tmp709_ = NULL;
            ValaCCodeFunctionCall* _tmp710_;
            ValaCCodeFunctionCall* value_to_any_call;
            ValaCCodeIdentifier* _tmp711_ = NULL;
            ValaCCodeIdentifier* _tmp712_;
            gchar* _tmp713_ = NULL;
            gchar* _tmp714_;
            gchar* _tmp715_ = NULL;
            gchar* _tmp716_;
            ValaCCodeIdentifier* _tmp717_ = NULL;
            ValaCCodeIdentifier* _tmp718_;
            ValaCCodeBlock* _tmp719_ = NULL;
            ValaCCodeExpressionStatement* _tmp720_ = NULL;
            ValaCCodeExpressionStatement* _tmp721_;
            gchar* _tmp722_ = NULL;
            gchar* _tmp723_;
            gchar* _tmp724_ = NULL;
            gchar* _tmp725_;
            ValaCCodeFunction* _tmp726_ = NULL;
            ValaCCodeFunction* _tmp727_;
            ValaCCodeFunction* value_from_any_fun;
            ValaCCodeParameter* _tmp728_ = NULL;
            ValaCCodeParameter* _tmp729_;
            gchar* _tmp730_ = NULL;
            gchar* _tmp731_;
            gchar* _tmp732_;
            gchar* _tmp733_;
            ValaCCodeParameter* _tmp734_ = NULL;
            ValaCCodeParameter* _tmp735_;
            ValaCCodeParameter* _tmp736_ = NULL;
            ValaCCodeParameter* _tmp737_;
            ValaCCodeBlock* _tmp738_ = NULL;
            ValaCCodeBlock* _tmp739_;
            gchar* _tmp740_ = NULL;
            gchar* _tmp741_;
            gchar* _tmp742_ = NULL;
            gchar* _tmp743_;
            gchar* from_any_fun;
            ValaCCodeIdentifier* _tmp745_ = NULL;
            ValaCCodeIdentifier* _tmp746_;
            ValaCCodeFunctionCall* _tmp747_ = NULL;
            ValaCCodeIdentifier* _tmp748_ = NULL;
            ValaCCodeIdentifier* _tmp749_;
            ValaCCodeBlock* _tmp750_ = NULL;
            ValaCCodeUnaryExpression* _tmp751_ = NULL;
            ValaCCodeUnaryExpression* _tmp752_;
            ValaCCodeAssignment* _tmp753_ = NULL;
            ValaCCodeAssignment* _tmp754_;
            ValaCCodeExpressionStatement* _tmp755_ = NULL;
            ValaCCodeExpressionStatement* _tmp756_;
            ValaCCodeBlock* _tmp757_ = NULL;
            ValaCCodeReturnStatement* _tmp758_ = NULL;
            ValaCCodeReturnStatement* _tmp759_;
            ValaCCodeIdentifier* _tmp760_ = NULL;
            ValaCCodeIdentifier* _tmp761_;
            ValaCCodeFunctionCall* _tmp762_ = NULL;
            ValaCCodeFunctionCall* _tmp763_;
            ValaCCodeFunctionCall* value_from_any_call;
            ValaCCodeIdentifier* _tmp764_ = NULL;
            ValaCCodeIdentifier* _tmp765_;
            gchar* _tmp766_ = NULL;
            gchar* _tmp767_;
            gchar* _tmp768_ = NULL;
            gchar* _tmp769_;
            ValaCCodeIdentifier* _tmp770_ = NULL;
            ValaCCodeIdentifier* _tmp771_;
            ValaCCodeBlock* _tmp772_ = NULL;
            ValaCCodeExpressionStatement* _tmp773_ = NULL;
            ValaCCodeExpressionStatement* _tmp774_;
            _tmp449_ = vala_ccode_identifier_new ("sizeof");
            _tmp450_ = _tmp449_;
            _tmp451_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp450_);
            _tmp452_ = _tmp451_;
            _vala_ccode_node_unref0 (_tmp450_);
            sizeof_call = _tmp452_;
            _tmp453_ = vala_ccode_identifier_new ("void *");
            _tmp454_ = _tmp453_;
            vala_ccode_function_call_add_argument (sizeof_call, (ValaCCodeExpression*) _tmp454_);
            _vala_ccode_node_unref0 (_tmp454_);
            _tmp455_ = vala_ccode_identifier_new ("dova_type_set_value_size");
            _tmp456_ = _tmp455_;
            _tmp457_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp456_);
            _tmp458_ = _tmp457_;
            _vala_ccode_node_unref0 (_tmp456_);
            set_size = _tmp458_;
            _tmp459_ = vala_ccode_identifier_new ("type");
            _tmp460_ = _tmp459_;
            vala_ccode_function_call_add_argument (set_size, (ValaCCodeExpression*) _tmp460_);
            _vala_ccode_node_unref0 (_tmp460_);
            vala_ccode_function_call_add_argument (set_size, (ValaCCodeExpression*) sizeof_call);
            _tmp461_ = vala_ccode_function_get_block (type_init_fun);
            _tmp462_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) set_size);
            _tmp463_ = _tmp462_;
            vala_ccode_block_add_statement (_tmp461_, (ValaCCodeNode*) _tmp463_);
            _vala_ccode_node_unref0 (_tmp463_);
            vala_dova_object_module_declare_set_value_copy_function (self, ((ValaDovaBaseModule*) self)->cfile);
            _tmp464_ = vala_ccode_identifier_new ("dova_type_set_value_copy");
            _tmp465_ = _tmp464_;
            _tmp466_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp465_);
            _tmp467_ = _tmp466_;
            _vala_ccode_node_unref0 (_tmp465_);
            value_copy_call = _tmp467_;
            _tmp468_ = vala_ccode_identifier_new ("type");
            _tmp469_ = _tmp468_;
            vala_ccode_function_call_add_argument (value_copy_call, (ValaCCodeExpression*) _tmp469_);
            _vala_ccode_node_unref0 (_tmp469_);
            _tmp470_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp471_ = _tmp470_;
            _tmp472_ = g_strdup_printf ("%s_copy", _tmp471_);
            _tmp473_ = _tmp472_;
            _tmp474_ = vala_ccode_identifier_new (_tmp473_);
            _tmp475_ = _tmp474_;
            _tmp476_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp475_, "void (*)(void *, intptr_t,  void *, intptr_t)");
            _tmp477_ = _tmp476_;
            vala_ccode_function_call_add_argument (value_copy_call, (ValaCCodeExpression*) _tmp477_);
            _vala_ccode_node_unref0 (_tmp477_);
            _vala_ccode_node_unref0 (_tmp475_);
            _g_free0 (_tmp473_);
            _g_free0 (_tmp471_);
            _tmp478_ = vala_ccode_function_get_block (type_init_fun);
            _tmp479_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) value_copy_call);
            _tmp480_ = _tmp479_;
            vala_ccode_block_add_statement (_tmp478_, (ValaCCodeNode*) _tmp480_);
            _vala_ccode_node_unref0 (_tmp480_);
            _tmp481_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp482_ = _tmp481_;
            _tmp483_ = g_strdup_printf ("%s_copy", _tmp482_);
            _tmp484_ = _tmp483_;
            _tmp485_ = vala_ccode_function_new (_tmp484_, "void");
            _tmp486_ = _tmp485_;
            _g_free0 (_tmp484_);
            _g_free0 (_tmp482_);
            function = _tmp486_;
            vala_ccode_function_set_modifiers (function, VALA_CCODE_MODIFIERS_STATIC);
            _tmp487_ = vala_ccode_parameter_new ("dest", "any **");
            _tmp488_ = _tmp487_;
            vala_ccode_function_add_parameter (function, _tmp488_);
            _vala_ccode_node_unref0 (_tmp488_);
            _tmp489_ = vala_ccode_parameter_new ("dest_index", "intptr_t");
            _tmp490_ = _tmp489_;
            vala_ccode_function_add_parameter (function, _tmp490_);
            _vala_ccode_node_unref0 (_tmp490_);
            _tmp491_ = vala_ccode_parameter_new ("src", "any **");
            _tmp492_ = _tmp491_;
            vala_ccode_function_add_parameter (function, _tmp492_);
            _vala_ccode_node_unref0 (_tmp492_);
            _tmp493_ = vala_ccode_parameter_new ("src_index", "intptr_t");
            _tmp494_ = _tmp493_;
            vala_ccode_function_add_parameter (function, _tmp494_);
            _vala_ccode_node_unref0 (_tmp494_);
            _tmp495_ = vala_ccode_block_new ();
            _tmp496_ = _tmp495_;
            vala_ccode_function_set_block (function, _tmp496_);
            _vala_ccode_node_unref0 (_tmp496_);
            _tmp497_ = vala_ccode_fragment_new ();
            cfrag = _tmp497_;
            _tmp498_ = vala_ccode_function_get_block (function);
            vala_ccode_block_add_statement (_tmp498_, (ValaCCodeNode*) cfrag);
            _tmp499_ = vala_ccode_identifier_new ("dest");
            _tmp500_ = _tmp499_;
            _tmp501_ = vala_ccode_identifier_new ("dest_index");
            _tmp502_ = _tmp501_;
            _tmp503_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp500_, (ValaCCodeExpression*) _tmp502_);
            _tmp504_ = _tmp503_;
            _vala_ccode_node_unref0 (_tmp502_);
            _vala_ccode_node_unref0 (_tmp500_);
            dest = _tmp504_;
            _tmp505_ = vala_ccode_identifier_new ("src");
            _tmp506_ = _tmp505_;
            _tmp507_ = vala_ccode_identifier_new ("src_index");
            _tmp508_ = _tmp507_;
            _tmp509_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp506_, (ValaCCodeExpression*) _tmp508_);
            _tmp510_ = _tmp509_;
            _vala_ccode_node_unref0 (_tmp508_);
            _vala_ccode_node_unref0 (_tmp506_);
            src = _tmp510_;
            _tmp511_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp512_ = _tmp511_;
            _tmp513_ = g_strdup_printf ("%s_unref", _tmp512_);
            _tmp514_ = _tmp513_;
            _tmp515_ = vala_ccode_identifier_new (_tmp514_);
            _tmp516_ = _tmp515_;
            _tmp517_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp516_);
            _tmp518_ = _tmp517_;
            _vala_ccode_node_unref0 (_tmp516_);
            _g_free0 (_tmp514_);
            _g_free0 (_tmp512_);
            unref_call = _tmp518_;
            _tmp519_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) dest);
            _tmp520_ = _tmp519_;
            vala_ccode_function_call_add_argument (unref_call, (ValaCCodeExpression*) _tmp520_);
            _vala_ccode_node_unref0 (_tmp520_);
            _tmp521_ = vala_ccode_block_new ();
            unref_block = _tmp521_;
            _tmp522_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) unref_call);
            _tmp523_ = _tmp522_;
            vala_ccode_block_add_statement (unref_block, (ValaCCodeNode*) _tmp523_);
            _vala_ccode_node_unref0 (_tmp523_);
            _tmp524_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) dest);
            _tmp525_ = _tmp524_;
            _tmp526_ = vala_ccode_constant_new ("NULL");
            _tmp527_ = _tmp526_;
            _tmp528_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp525_, (ValaCCodeExpression*) _tmp527_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp529_ = _tmp528_;
            _tmp530_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp529_);
            _tmp531_ = _tmp530_;
            vala_ccode_block_add_statement (unref_block, (ValaCCodeNode*) _tmp531_);
            _vala_ccode_node_unref0 (_tmp531_);
            _vala_ccode_node_unref0 (_tmp529_);
            _vala_ccode_node_unref0 (_tmp527_);
            _vala_ccode_node_unref0 (_tmp525_);
            _tmp532_ = vala_ccode_function_get_block (function);
            _tmp533_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) dest);
            _tmp534_ = _tmp533_;
            _tmp535_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp534_, (ValaCCodeStatement*) unref_block, NULL);
            _tmp536_ = _tmp535_;
            vala_ccode_block_add_statement (_tmp532_, (ValaCCodeNode*) _tmp536_);
            _vala_ccode_node_unref0 (_tmp536_);
            _vala_ccode_node_unref0 (_tmp534_);
            _tmp537_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp538_ = _tmp537_;
            _tmp539_ = g_strdup_printf ("%s_ref", _tmp538_);
            _tmp540_ = _tmp539_;
            _tmp541_ = vala_ccode_identifier_new (_tmp540_);
            _tmp542_ = _tmp541_;
            _tmp543_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp542_);
            _tmp544_ = _tmp543_;
            _vala_ccode_node_unref0 (_tmp542_);
            _g_free0 (_tmp540_);
            _g_free0 (_tmp538_);
            ref_call = _tmp544_;
            _tmp545_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) src);
            _tmp546_ = _tmp545_;
            vala_ccode_function_call_add_argument (ref_call, (ValaCCodeExpression*) _tmp546_);
            _vala_ccode_node_unref0 (_tmp546_);
            _tmp547_ = vala_ccode_block_new ();
            ref_block = _tmp547_;
            _tmp548_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) dest);
            _tmp549_ = _tmp548_;
            _tmp550_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp549_, (ValaCCodeExpression*) ref_call, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp551_ = _tmp550_;
            _tmp552_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp551_);
            _tmp553_ = _tmp552_;
            vala_ccode_block_add_statement (ref_block, (ValaCCodeNode*) _tmp553_);
            _vala_ccode_node_unref0 (_tmp553_);
            _vala_ccode_node_unref0 (_tmp551_);
            _vala_ccode_node_unref0 (_tmp549_);
            _tmp554_ = vala_ccode_function_get_block (function);
            _tmp555_ = vala_ccode_identifier_new ("src");
            _tmp556_ = _tmp555_;
            _tmp557_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp556_, (ValaCCodeStatement*) ref_block, NULL);
            _tmp558_ = _tmp557_;
            vala_ccode_block_add_statement (_tmp554_, (ValaCCodeNode*) _tmp558_);
            _vala_ccode_node_unref0 (_tmp558_);
            _vala_ccode_node_unref0 (_tmp556_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, function);
            {
                  gchar* _tmp559_ = NULL;
                  gchar* _tmp560_;
                  gchar* _tmp561_ = NULL;
                  gchar* _tmp562_;
                  ValaCCodeFunction* _tmp563_ = NULL;
                  ValaCCodeFunction* _tmp564_;
                  ValaCCodeFunction* value_equals_fun;
                  gchar* _tmp565_ = NULL;
                  gchar* _tmp566_;
                  gchar* _tmp567_;
                  gchar* _tmp568_;
                  ValaCCodeParameter* _tmp569_ = NULL;
                  ValaCCodeParameter* _tmp570_;
                  ValaCCodeParameter* _tmp571_ = NULL;
                  ValaCCodeParameter* _tmp572_;
                  gchar* _tmp573_ = NULL;
                  gchar* _tmp574_;
                  gchar* _tmp575_;
                  gchar* _tmp576_;
                  ValaCCodeParameter* _tmp577_ = NULL;
                  ValaCCodeParameter* _tmp578_;
                  ValaCCodeParameter* _tmp579_ = NULL;
                  ValaCCodeParameter* _tmp580_;
                  ValaCCodeBlock* _tmp581_ = NULL;
                  ValaCCodeBlock* _tmp582_;
                  ValaCCodeIdentifier* _tmp583_ = NULL;
                  ValaCCodeIdentifier* _tmp584_;
                  ValaCCodeIdentifier* _tmp585_ = NULL;
                  ValaCCodeIdentifier* _tmp586_;
                  ValaCCodeBinaryExpression* _tmp587_ = NULL;
                  ValaCCodeBinaryExpression* _tmp588_;
                  ValaCCodeBinaryExpression* val;
                  ValaCCodeIdentifier* _tmp589_ = NULL;
                  ValaCCodeIdentifier* _tmp590_;
                  ValaCCodeIdentifier* _tmp591_ = NULL;
                  ValaCCodeIdentifier* _tmp592_;
                  ValaCCodeBinaryExpression* _tmp593_ = NULL;
                  ValaCCodeBinaryExpression* _tmp594_;
                  ValaCCodeBinaryExpression* other;
                  ValaCCodeIdentifier* _tmp595_ = NULL;
                  ValaCCodeIdentifier* _tmp596_;
                  ValaCCodeFunctionCall* _tmp597_ = NULL;
                  ValaCCodeFunctionCall* _tmp598_;
                  ValaCCodeFunctionCall* ccall;
                  ValaCCodeUnaryExpression* _tmp599_ = NULL;
                  ValaCCodeUnaryExpression* _tmp600_;
                  ValaCCodeUnaryExpression* _tmp601_ = NULL;
                  ValaCCodeUnaryExpression* _tmp602_;
                  ValaCCodeBlock* _tmp603_ = NULL;
                  ValaCCodeReturnStatement* _tmp604_ = NULL;
                  ValaCCodeReturnStatement* _tmp605_;
                  ValaCCodeIdentifier* _tmp606_ = NULL;
                  ValaCCodeIdentifier* _tmp607_;
                  ValaCCodeFunctionCall* _tmp608_ = NULL;
                  ValaCCodeFunctionCall* _tmp609_;
                  ValaCCodeFunctionCall* value_equals_call;
                  ValaCCodeIdentifier* _tmp610_ = NULL;
                  ValaCCodeIdentifier* _tmp611_;
                  gchar* _tmp612_ = NULL;
                  gchar* _tmp613_;
                  gchar* _tmp614_ = NULL;
                  gchar* _tmp615_;
                  ValaCCodeIdentifier* _tmp616_ = NULL;
                  ValaCCodeIdentifier* _tmp617_;
                  ValaCCodeCastExpression* _tmp618_ = NULL;
                  ValaCCodeCastExpression* _tmp619_;
                  ValaCCodeBlock* _tmp620_ = NULL;
                  ValaCCodeExpressionStatement* _tmp621_ = NULL;
                  ValaCCodeExpressionStatement* _tmp622_;
                  _tmp559_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
                  _tmp560_ = _tmp559_;
                  _tmp561_ = g_strdup_printf ("%s_value_equals", _tmp560_);
                  _tmp562_ = _tmp561_;
                  _tmp563_ = vala_ccode_function_new (_tmp562_, "bool");
                  _tmp564_ = _tmp563_;
                  _g_free0 (_tmp562_);
                  _g_free0 (_tmp560_);
                  value_equals_fun = _tmp564_;
                  vala_ccode_function_set_modifiers (value_equals_fun, VALA_CCODE_MODIFIERS_STATIC);
                  _tmp565_ = vala_typesymbol_get_cname (cl, FALSE);
                  _tmp566_ = _tmp565_;
                  _tmp567_ = g_strconcat (_tmp566_, "**", NULL);
                  _tmp568_ = _tmp567_;
                  _tmp569_ = vala_ccode_parameter_new ("value", _tmp568_);
                  _tmp570_ = _tmp569_;
                  vala_ccode_function_add_parameter (value_equals_fun, _tmp570_);
                  _vala_ccode_node_unref0 (_tmp570_);
                  _g_free0 (_tmp568_);
                  _g_free0 (_tmp566_);
                  _tmp571_ = vala_ccode_parameter_new ("value_index", "intptr_t");
                  _tmp572_ = _tmp571_;
                  vala_ccode_function_add_parameter (value_equals_fun, _tmp572_);
                  _vala_ccode_node_unref0 (_tmp572_);
                  _tmp573_ = vala_typesymbol_get_cname (cl, FALSE);
                  _tmp574_ = _tmp573_;
                  _tmp575_ = g_strconcat (_tmp574_, "**", NULL);
                  _tmp576_ = _tmp575_;
                  _tmp577_ = vala_ccode_parameter_new ("other", _tmp576_);
                  _tmp578_ = _tmp577_;
                  vala_ccode_function_add_parameter (value_equals_fun, _tmp578_);
                  _vala_ccode_node_unref0 (_tmp578_);
                  _g_free0 (_tmp576_);
                  _g_free0 (_tmp574_);
                  _tmp579_ = vala_ccode_parameter_new ("other_index", "intptr_t");
                  _tmp580_ = _tmp579_;
                  vala_ccode_function_add_parameter (value_equals_fun, _tmp580_);
                  _vala_ccode_node_unref0 (_tmp580_);
                  _tmp581_ = vala_ccode_block_new ();
                  _tmp582_ = _tmp581_;
                  vala_ccode_function_set_block (value_equals_fun, _tmp582_);
                  _vala_ccode_node_unref0 (_tmp582_);
                  _tmp583_ = vala_ccode_identifier_new ("value");
                  _tmp584_ = _tmp583_;
                  _tmp585_ = vala_ccode_identifier_new ("value_index");
                  _tmp586_ = _tmp585_;
                  _tmp587_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp584_, (ValaCCodeExpression*) _tmp586_);
                  _tmp588_ = _tmp587_;
                  _vala_ccode_node_unref0 (_tmp586_);
                  _vala_ccode_node_unref0 (_tmp584_);
                  val = _tmp588_;
                  _tmp589_ = vala_ccode_identifier_new ("other");
                  _tmp590_ = _tmp589_;
                  _tmp591_ = vala_ccode_identifier_new ("other_index");
                  _tmp592_ = _tmp591_;
                  _tmp593_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp590_, (ValaCCodeExpression*) _tmp592_);
                  _tmp594_ = _tmp593_;
                  _vala_ccode_node_unref0 (_tmp592_);
                  _vala_ccode_node_unref0 (_tmp590_);
                  other = _tmp594_;
                  _tmp595_ = vala_ccode_identifier_new ("any_equals");
                  _tmp596_ = _tmp595_;
                  _tmp597_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp596_);
                  _tmp598_ = _tmp597_;
                  _vala_ccode_node_unref0 (_tmp596_);
                  ccall = _tmp598_;
                  _tmp599_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) val);
                  _tmp600_ = _tmp599_;
                  vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp600_);
                  _vala_ccode_node_unref0 (_tmp600_);
                  _tmp601_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) other);
                  _tmp602_ = _tmp601_;
                  vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp602_);
                  _vala_ccode_node_unref0 (_tmp602_);
                  _tmp603_ = vala_ccode_function_get_block (value_equals_fun);
                  _tmp604_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
                  _tmp605_ = _tmp604_;
                  vala_ccode_block_add_statement (_tmp603_, (ValaCCodeNode*) _tmp605_);
                  _vala_ccode_node_unref0 (_tmp605_);
                  vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_equals_fun);
                  vala_dova_object_module_declare_set_value_equals_function (self, ((ValaDovaBaseModule*) self)->cfile);
                  _tmp606_ = vala_ccode_identifier_new ("dova_type_set_value_equals");
                  _tmp607_ = _tmp606_;
                  _tmp608_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp607_);
                  _tmp609_ = _tmp608_;
                  _vala_ccode_node_unref0 (_tmp607_);
                  value_equals_call = _tmp609_;
                  _tmp610_ = vala_ccode_identifier_new ("type");
                  _tmp611_ = _tmp610_;
                  vala_ccode_function_call_add_argument (value_equals_call, (ValaCCodeExpression*) _tmp611_);
                  _vala_ccode_node_unref0 (_tmp611_);
                  _tmp612_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
                  _tmp613_ = _tmp612_;
                  _tmp614_ = g_strdup_printf ("%s_value_equals", _tmp613_);
                  _tmp615_ = _tmp614_;
                  _tmp616_ = vala_ccode_identifier_new (_tmp615_);
                  _tmp617_ = _tmp616_;
                  _tmp618_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp617_, "bool (*)(void *, intptr_t,  void *, intptr_t)");
                  _tmp619_ = _tmp618_;
                  vala_ccode_function_call_add_argument (value_equals_call, (ValaCCodeExpression*) _tmp619_);
                  _vala_ccode_node_unref0 (_tmp619_);
                  _vala_ccode_node_unref0 (_tmp617_);
                  _g_free0 (_tmp615_);
                  _g_free0 (_tmp613_);
                  _tmp620_ = vala_ccode_function_get_block (type_init_fun);
                  _tmp621_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) value_equals_call);
                  _tmp622_ = _tmp621_;
                  vala_ccode_block_add_statement (_tmp620_, (ValaCCodeNode*) _tmp622_);
                  _vala_ccode_node_unref0 (_tmp622_);
                  _vala_ccode_node_unref0 (value_equals_call);
                  _vala_ccode_node_unref0 (ccall);
                  _vala_ccode_node_unref0 (other);
                  _vala_ccode_node_unref0 (val);
                  _vala_ccode_node_unref0 (value_equals_fun);
            }
            {
                  gchar* _tmp623_ = NULL;
                  gchar* _tmp624_;
                  gchar* _tmp625_ = NULL;
                  gchar* _tmp626_;
                  ValaCCodeFunction* _tmp627_ = NULL;
                  ValaCCodeFunction* _tmp628_;
                  ValaCCodeFunction* value_hash_fun;
                  gchar* _tmp629_ = NULL;
                  gchar* _tmp630_;
                  gchar* _tmp631_;
                  gchar* _tmp632_;
                  ValaCCodeParameter* _tmp633_ = NULL;
                  ValaCCodeParameter* _tmp634_;
                  ValaCCodeParameter* _tmp635_ = NULL;
                  ValaCCodeParameter* _tmp636_;
                  ValaCCodeBlock* _tmp637_ = NULL;
                  ValaCCodeBlock* _tmp638_;
                  ValaCCodeIdentifier* _tmp639_ = NULL;
                  ValaCCodeIdentifier* _tmp640_;
                  ValaCCodeIdentifier* _tmp641_ = NULL;
                  ValaCCodeIdentifier* _tmp642_;
                  ValaCCodeBinaryExpression* _tmp643_ = NULL;
                  ValaCCodeBinaryExpression* _tmp644_;
                  ValaCCodeBinaryExpression* val;
                  ValaCCodeIdentifier* _tmp645_ = NULL;
                  ValaCCodeIdentifier* _tmp646_;
                  ValaCCodeFunctionCall* _tmp647_ = NULL;
                  ValaCCodeFunctionCall* _tmp648_;
                  ValaCCodeFunctionCall* ccall;
                  ValaCCodeUnaryExpression* _tmp649_ = NULL;
                  ValaCCodeUnaryExpression* _tmp650_;
                  ValaCCodeBlock* _tmp651_ = NULL;
                  ValaCCodeReturnStatement* _tmp652_ = NULL;
                  ValaCCodeReturnStatement* _tmp653_;
                  ValaCCodeIdentifier* _tmp654_ = NULL;
                  ValaCCodeIdentifier* _tmp655_;
                  ValaCCodeFunctionCall* _tmp656_ = NULL;
                  ValaCCodeFunctionCall* _tmp657_;
                  ValaCCodeFunctionCall* value_hash_call;
                  ValaCCodeIdentifier* _tmp658_ = NULL;
                  ValaCCodeIdentifier* _tmp659_;
                  gchar* _tmp660_ = NULL;
                  gchar* _tmp661_;
                  gchar* _tmp662_ = NULL;
                  gchar* _tmp663_;
                  ValaCCodeIdentifier* _tmp664_ = NULL;
                  ValaCCodeIdentifier* _tmp665_;
                  ValaCCodeCastExpression* _tmp666_ = NULL;
                  ValaCCodeCastExpression* _tmp667_;
                  ValaCCodeBlock* _tmp668_ = NULL;
                  ValaCCodeExpressionStatement* _tmp669_ = NULL;
                  ValaCCodeExpressionStatement* _tmp670_;
                  _tmp623_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
                  _tmp624_ = _tmp623_;
                  _tmp625_ = g_strdup_printf ("%s_value_hash", _tmp624_);
                  _tmp626_ = _tmp625_;
                  _tmp627_ = vala_ccode_function_new (_tmp626_, "uintptr_t");
                  _tmp628_ = _tmp627_;
                  _g_free0 (_tmp626_);
                  _g_free0 (_tmp624_);
                  value_hash_fun = _tmp628_;
                  vala_ccode_function_set_modifiers (value_hash_fun, VALA_CCODE_MODIFIERS_STATIC);
                  _tmp629_ = vala_typesymbol_get_cname (cl, FALSE);
                  _tmp630_ = _tmp629_;
                  _tmp631_ = g_strconcat (_tmp630_, "**", NULL);
                  _tmp632_ = _tmp631_;
                  _tmp633_ = vala_ccode_parameter_new ("value", _tmp632_);
                  _tmp634_ = _tmp633_;
                  vala_ccode_function_add_parameter (value_hash_fun, _tmp634_);
                  _vala_ccode_node_unref0 (_tmp634_);
                  _g_free0 (_tmp632_);
                  _g_free0 (_tmp630_);
                  _tmp635_ = vala_ccode_parameter_new ("value_index", "intptr_t");
                  _tmp636_ = _tmp635_;
                  vala_ccode_function_add_parameter (value_hash_fun, _tmp636_);
                  _vala_ccode_node_unref0 (_tmp636_);
                  _tmp637_ = vala_ccode_block_new ();
                  _tmp638_ = _tmp637_;
                  vala_ccode_function_set_block (value_hash_fun, _tmp638_);
                  _vala_ccode_node_unref0 (_tmp638_);
                  _tmp639_ = vala_ccode_identifier_new ("value");
                  _tmp640_ = _tmp639_;
                  _tmp641_ = vala_ccode_identifier_new ("value_index");
                  _tmp642_ = _tmp641_;
                  _tmp643_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp640_, (ValaCCodeExpression*) _tmp642_);
                  _tmp644_ = _tmp643_;
                  _vala_ccode_node_unref0 (_tmp642_);
                  _vala_ccode_node_unref0 (_tmp640_);
                  val = _tmp644_;
                  _tmp645_ = vala_ccode_identifier_new ("any_hash");
                  _tmp646_ = _tmp645_;
                  _tmp647_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp646_);
                  _tmp648_ = _tmp647_;
                  _vala_ccode_node_unref0 (_tmp646_);
                  ccall = _tmp648_;
                  _tmp649_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) val);
                  _tmp650_ = _tmp649_;
                  vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp650_);
                  _vala_ccode_node_unref0 (_tmp650_);
                  _tmp651_ = vala_ccode_function_get_block (value_hash_fun);
                  _tmp652_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
                  _tmp653_ = _tmp652_;
                  vala_ccode_block_add_statement (_tmp651_, (ValaCCodeNode*) _tmp653_);
                  _vala_ccode_node_unref0 (_tmp653_);
                  vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_hash_fun);
                  vala_dova_object_module_declare_set_value_hash_function (self, ((ValaDovaBaseModule*) self)->cfile);
                  _tmp654_ = vala_ccode_identifier_new ("dova_type_set_value_hash");
                  _tmp655_ = _tmp654_;
                  _tmp656_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp655_);
                  _tmp657_ = _tmp656_;
                  _vala_ccode_node_unref0 (_tmp655_);
                  value_hash_call = _tmp657_;
                  _tmp658_ = vala_ccode_identifier_new ("type");
                  _tmp659_ = _tmp658_;
                  vala_ccode_function_call_add_argument (value_hash_call, (ValaCCodeExpression*) _tmp659_);
                  _vala_ccode_node_unref0 (_tmp659_);
                  _tmp660_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
                  _tmp661_ = _tmp660_;
                  _tmp662_ = g_strdup_printf ("%s_value_hash", _tmp661_);
                  _tmp663_ = _tmp662_;
                  _tmp664_ = vala_ccode_identifier_new (_tmp663_);
                  _tmp665_ = _tmp664_;
                  _tmp666_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp665_, "uintptr_t (*)(void *, intptr_t)");
                  _tmp667_ = _tmp666_;
                  vala_ccode_function_call_add_argument (value_hash_call, (ValaCCodeExpression*) _tmp667_);
                  _vala_ccode_node_unref0 (_tmp667_);
                  _vala_ccode_node_unref0 (_tmp665_);
                  _g_free0 (_tmp663_);
                  _g_free0 (_tmp661_);
                  _tmp668_ = vala_ccode_function_get_block (type_init_fun);
                  _tmp669_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) value_hash_call);
                  _tmp670_ = _tmp669_;
                  vala_ccode_block_add_statement (_tmp668_, (ValaCCodeNode*) _tmp670_);
                  _vala_ccode_node_unref0 (_tmp670_);
                  _vala_ccode_node_unref0 (value_hash_call);
                  _vala_ccode_node_unref0 (ccall);
                  _vala_ccode_node_unref0 (val);
                  _vala_ccode_node_unref0 (value_hash_fun);
            }
            _tmp671_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp672_ = _tmp671_;
            _tmp673_ = g_strdup_printf ("%s_value_to_any", _tmp672_);
            _tmp674_ = _tmp673_;
            _tmp675_ = vala_ccode_function_new (_tmp674_, "any*");
            _tmp676_ = _tmp675_;
            _g_free0 (_tmp674_);
            _g_free0 (_tmp672_);
            value_to_any_fun = _tmp676_;
            vala_ccode_function_set_modifiers (value_to_any_fun, VALA_CCODE_MODIFIERS_STATIC);
            _tmp677_ = vala_typesymbol_get_cname (cl, FALSE);
            _tmp678_ = _tmp677_;
            _tmp679_ = g_strconcat (_tmp678_, "**", NULL);
            _tmp680_ = _tmp679_;
            _tmp681_ = vala_ccode_parameter_new ("value", _tmp680_);
            _tmp682_ = _tmp681_;
            vala_ccode_function_add_parameter (value_to_any_fun, _tmp682_);
            _vala_ccode_node_unref0 (_tmp682_);
            _g_free0 (_tmp680_);
            _g_free0 (_tmp678_);
            _tmp683_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp684_ = _tmp683_;
            vala_ccode_function_add_parameter (value_to_any_fun, _tmp684_);
            _vala_ccode_node_unref0 (_tmp684_);
            _tmp685_ = vala_ccode_block_new ();
            _tmp686_ = _tmp685_;
            vala_ccode_function_set_block (value_to_any_fun, _tmp686_);
            _vala_ccode_node_unref0 (_tmp686_);
            _tmp687_ = vala_ccode_identifier_new ("value");
            _tmp688_ = _tmp687_;
            _tmp689_ = vala_ccode_identifier_new ("value_index");
            _tmp690_ = _tmp689_;
            _tmp691_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp688_, (ValaCCodeExpression*) _tmp690_);
            _tmp692_ = _tmp691_;
            _vala_ccode_node_unref0 (_tmp690_);
            _vala_ccode_node_unref0 (_tmp688_);
            val = _tmp692_;
            _tmp693_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp694_ = _tmp693_;
            _tmp695_ = g_strdup_printf ("%s_ref", _tmp694_);
            _tmp696_ = _tmp695_;
            _g_free0 (_tmp694_);
            to_any_fun = _tmp696_;
            if (cl == VALA_TYPESYMBOL (((ValaDovaBaseModule*) self)->string_class)) {
                  gchar* _tmp697_;
                  _tmp697_ = g_strdup ("string_to_any");
                  _g_free0 (to_any_fun);
                  to_any_fun = _tmp697_;
            }
            _tmp698_ = vala_ccode_identifier_new (to_any_fun);
            _tmp699_ = _tmp698_;
            _tmp700_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp699_);
            _tmp701_ = _tmp700_;
            _vala_ccode_node_unref0 (_tmp699_);
            ccall = _tmp701_;
            _tmp702_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) val);
            _tmp703_ = _tmp702_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp703_);
            _vala_ccode_node_unref0 (_tmp703_);
            _tmp704_ = vala_ccode_function_get_block (value_to_any_fun);
            _tmp705_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
            _tmp706_ = _tmp705_;
            vala_ccode_block_add_statement (_tmp704_, (ValaCCodeNode*) _tmp706_);
            _vala_ccode_node_unref0 (_tmp706_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_to_any_fun);
            vala_dova_object_module_declare_set_value_to_any_function (self, ((ValaDovaBaseModule*) self)->cfile);
            _tmp707_ = vala_ccode_identifier_new ("dova_type_set_value_to_any");
            _tmp708_ = _tmp707_;
            _tmp709_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp708_);
            _tmp710_ = _tmp709_;
            _vala_ccode_node_unref0 (_tmp708_);
            value_to_any_call = _tmp710_;
            _tmp711_ = vala_ccode_identifier_new ("type");
            _tmp712_ = _tmp711_;
            vala_ccode_function_call_add_argument (value_to_any_call, (ValaCCodeExpression*) _tmp712_);
            _vala_ccode_node_unref0 (_tmp712_);
            _tmp713_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp714_ = _tmp713_;
            _tmp715_ = g_strdup_printf ("%s_value_to_any", _tmp714_);
            _tmp716_ = _tmp715_;
            _tmp717_ = vala_ccode_identifier_new (_tmp716_);
            _tmp718_ = _tmp717_;
            vala_ccode_function_call_add_argument (value_to_any_call, (ValaCCodeExpression*) _tmp718_);
            _vala_ccode_node_unref0 (_tmp718_);
            _g_free0 (_tmp716_);
            _g_free0 (_tmp714_);
            _tmp719_ = vala_ccode_function_get_block (type_init_fun);
            _tmp720_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) value_to_any_call);
            _tmp721_ = _tmp720_;
            vala_ccode_block_add_statement (_tmp719_, (ValaCCodeNode*) _tmp721_);
            _vala_ccode_node_unref0 (_tmp721_);
            _tmp722_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp723_ = _tmp722_;
            _tmp724_ = g_strdup_printf ("%s_value_from_any", _tmp723_);
            _tmp725_ = _tmp724_;
            _tmp726_ = vala_ccode_function_new (_tmp725_, "void");
            _tmp727_ = _tmp726_;
            _g_free0 (_tmp725_);
            _g_free0 (_tmp723_);
            value_from_any_fun = _tmp727_;
            vala_ccode_function_set_modifiers (value_from_any_fun, VALA_CCODE_MODIFIERS_STATIC);
            _tmp728_ = vala_ccode_parameter_new ("any_", "any *");
            _tmp729_ = _tmp728_;
            vala_ccode_function_add_parameter (value_from_any_fun, _tmp729_);
            _vala_ccode_node_unref0 (_tmp729_);
            _tmp730_ = vala_typesymbol_get_cname (cl, FALSE);
            _tmp731_ = _tmp730_;
            _tmp732_ = g_strconcat (_tmp731_, "**", NULL);
            _tmp733_ = _tmp732_;
            _tmp734_ = vala_ccode_parameter_new ("value", _tmp733_);
            _tmp735_ = _tmp734_;
            vala_ccode_function_add_parameter (value_from_any_fun, _tmp735_);
            _vala_ccode_node_unref0 (_tmp735_);
            _g_free0 (_tmp733_);
            _g_free0 (_tmp731_);
            _tmp736_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp737_ = _tmp736_;
            vala_ccode_function_add_parameter (value_from_any_fun, _tmp737_);
            _vala_ccode_node_unref0 (_tmp737_);
            _tmp738_ = vala_ccode_block_new ();
            _tmp739_ = _tmp738_;
            vala_ccode_function_set_block (value_from_any_fun, _tmp739_);
            _vala_ccode_node_unref0 (_tmp739_);
            _tmp740_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp741_ = _tmp740_;
            _tmp742_ = g_strdup_printf ("%s_ref", _tmp741_);
            _tmp743_ = _tmp742_;
            _g_free0 (_tmp741_);
            from_any_fun = _tmp743_;
            if (cl == VALA_TYPESYMBOL (((ValaDovaBaseModule*) self)->string_class)) {
                  gchar* _tmp744_;
                  _tmp744_ = g_strdup ("string_from_any");
                  _g_free0 (from_any_fun);
                  from_any_fun = _tmp744_;
            }
            _tmp745_ = vala_ccode_identifier_new (from_any_fun);
            _tmp746_ = _tmp745_;
            _tmp747_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp746_);
            _vala_ccode_node_unref0 (ccall);
            ccall = _tmp747_;
            _vala_ccode_node_unref0 (_tmp746_);
            _tmp748_ = vala_ccode_identifier_new ("any_");
            _tmp749_ = _tmp748_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp749_);
            _vala_ccode_node_unref0 (_tmp749_);
            _tmp750_ = vala_ccode_function_get_block (value_from_any_fun);
            _tmp751_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) val);
            _tmp752_ = _tmp751_;
            _tmp753_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp752_, (ValaCCodeExpression*) ccall, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp754_ = _tmp753_;
            _tmp755_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp754_);
            _tmp756_ = _tmp755_;
            vala_ccode_block_add_statement (_tmp750_, (ValaCCodeNode*) _tmp756_);
            _vala_ccode_node_unref0 (_tmp756_);
            _vala_ccode_node_unref0 (_tmp754_);
            _vala_ccode_node_unref0 (_tmp752_);
            _tmp757_ = vala_ccode_function_get_block (value_from_any_fun);
            _tmp758_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
            _tmp759_ = _tmp758_;
            vala_ccode_block_add_statement (_tmp757_, (ValaCCodeNode*) _tmp759_);
            _vala_ccode_node_unref0 (_tmp759_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_from_any_fun);
            vala_dova_object_module_declare_set_value_from_any_function (self, ((ValaDovaBaseModule*) self)->cfile);
            _tmp760_ = vala_ccode_identifier_new ("dova_type_set_value_from_any");
            _tmp761_ = _tmp760_;
            _tmp762_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp761_);
            _tmp763_ = _tmp762_;
            _vala_ccode_node_unref0 (_tmp761_);
            value_from_any_call = _tmp763_;
            _tmp764_ = vala_ccode_identifier_new ("type");
            _tmp765_ = _tmp764_;
            vala_ccode_function_call_add_argument (value_from_any_call, (ValaCCodeExpression*) _tmp765_);
            _vala_ccode_node_unref0 (_tmp765_);
            _tmp766_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) cl, NULL);
            _tmp767_ = _tmp766_;
            _tmp768_ = g_strdup_printf ("%s_value_from_any", _tmp767_);
            _tmp769_ = _tmp768_;
            _tmp770_ = vala_ccode_identifier_new (_tmp769_);
            _tmp771_ = _tmp770_;
            vala_ccode_function_call_add_argument (value_from_any_call, (ValaCCodeExpression*) _tmp771_);
            _vala_ccode_node_unref0 (_tmp771_);
            _g_free0 (_tmp769_);
            _g_free0 (_tmp767_);
            _tmp772_ = vala_ccode_function_get_block (type_init_fun);
            _tmp773_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) value_from_any_call);
            _tmp774_ = _tmp773_;
            vala_ccode_block_add_statement (_tmp772_, (ValaCCodeNode*) _tmp774_);
            _vala_ccode_node_unref0 (_tmp774_);
            _vala_ccode_node_unref0 (value_from_any_call);
            _g_free0 (from_any_fun);
            _vala_ccode_node_unref0 (value_from_any_fun);
            _vala_ccode_node_unref0 (value_to_any_call);
            _vala_ccode_node_unref0 (ccall);
            _g_free0 (to_any_fun);
            _vala_ccode_node_unref0 (val);
            _vala_ccode_node_unref0 (value_to_any_fun);
            _vala_ccode_node_unref0 (ref_block);
            _vala_ccode_node_unref0 (ref_call);
            _vala_ccode_node_unref0 (unref_block);
            _vala_ccode_node_unref0 (unref_call);
            _vala_ccode_node_unref0 (src);
            _vala_ccode_node_unref0 (dest);
            _vala_ccode_node_unref0 (cfrag);
            _vala_ccode_node_unref0 (function);
            _vala_ccode_node_unref0 (value_copy_call);
            _vala_ccode_node_unref0 (set_size);
            _vala_ccode_node_unref0 (sizeof_call);
      } else {
            gchar* _tmp775_ = NULL;
            gchar* _tmp776_;
            gchar* _tmp777_ = NULL;
            gchar* _tmp778_;
            ValaCCodeIdentifier* _tmp779_ = NULL;
            ValaCCodeIdentifier* _tmp780_;
            ValaCCodeFunctionCall* _tmp781_ = NULL;
            ValaCCodeIdentifier* _tmp782_ = NULL;
            ValaCCodeIdentifier* _tmp783_;
            ValaCCodeBlock* _tmp789_ = NULL;
            ValaCCodeExpressionStatement* _tmp790_ = NULL;
            ValaCCodeExpressionStatement* _tmp791_;
            _tmp775_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) base_class, NULL);
            _tmp776_ = _tmp775_;
            _tmp777_ = g_strdup_printf ("%s_type_init", _tmp776_);
            _tmp778_ = _tmp777_;
            _tmp779_ = vala_ccode_identifier_new (_tmp778_);
            _tmp780_ = _tmp779_;
            _tmp781_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp780_);
            _vala_ccode_node_unref0 (type_init_call);
            type_init_call = _tmp781_;
            _vala_ccode_node_unref0 (_tmp780_);
            _g_free0 (_tmp778_);
            _g_free0 (_tmp776_);
            _tmp782_ = vala_ccode_identifier_new ("type");
            _tmp783_ = _tmp782_;
            vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp783_);
            _vala_ccode_node_unref0 (_tmp783_);
            if (base_class_type != NULL) {
                  {
                        ValaList* _tmp784_ = NULL;
                        ValaList* _type_arg_list;
                        gint _tmp785_;
                        gint _type_arg_size;
                        gint _type_arg_index;
                        _tmp784_ = vala_data_type_get_type_arguments (base_class_type);
                        _type_arg_list = _tmp784_;
                        _tmp785_ = vala_collection_get_size ((ValaCollection*) _type_arg_list);
                        _type_arg_size = _tmp785_;
                        _type_arg_index = -1;
                        while (TRUE) {
                              gpointer _tmp786_ = NULL;
                              ValaDataType* type_arg;
                              ValaCCodeExpression* _tmp787_ = NULL;
                              ValaCCodeExpression* _tmp788_;
                              _type_arg_index = _type_arg_index + 1;
                              if (!(_type_arg_index < _type_arg_size)) {
                                    break;
                              }
                              _tmp786_ = vala_list_get (_type_arg_list, _type_arg_index);
                              type_arg = (ValaDataType*) _tmp786_;
                              _tmp787_ = vala_dova_base_module_get_type_id_expression ((ValaDovaBaseModule*) self, type_arg, TRUE);
                              _tmp788_ = _tmp787_;
                              vala_ccode_function_call_add_argument (type_init_call, _tmp788_);
                              _vala_ccode_node_unref0 (_tmp788_);
                              _vala_code_node_unref0 (type_arg);
                        }
                        _vala_iterable_unref0 (_type_arg_list);
                  }
            }
            _tmp789_ = vala_ccode_function_get_block (type_init_fun);
            _tmp790_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) type_init_call);
            _tmp791_ = _tmp790_;
            vala_ccode_block_add_statement (_tmp789_, (ValaCCodeNode*) _tmp791_);
            _vala_ccode_node_unref0 (_tmp791_);
            if (object_type_symbol != NULL) {
                  {
                        ValaList* _tmp792_ = NULL;
                        ValaList* _type_param_list;
                        gint _tmp793_;
                        gint _type_param_size;
                        gint _type_param_index;
                        _tmp792_ = vala_object_type_symbol_get_type_parameters (object_type_symbol);
                        _type_param_list = _tmp792_;
                        _tmp793_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                        _type_param_size = _tmp793_;
                        _type_param_index = -1;
                        while (TRUE) {
                              gpointer _tmp794_ = NULL;
                              ValaTypeParameter* type_param;
                              ValaCCodeBlock* _tmp795_ = NULL;
                              ValaCCodeIdentifier* _tmp796_ = NULL;
                              ValaCCodeIdentifier* _tmp797_;
                              ValaCCodeExpression* _tmp798_ = NULL;
                              ValaCCodeExpression* _tmp799_;
                              const gchar* _tmp800_ = NULL;
                              gchar* _tmp801_ = NULL;
                              gchar* _tmp802_;
                              gchar* _tmp803_ = NULL;
                              gchar* _tmp804_;
                              ValaCCodeMemberAccess* _tmp805_ = NULL;
                              ValaCCodeMemberAccess* _tmp806_;
                              const gchar* _tmp807_ = NULL;
                              gchar* _tmp808_ = NULL;
                              gchar* _tmp809_;
                              gchar* _tmp810_ = NULL;
                              gchar* _tmp811_;
                              ValaCCodeIdentifier* _tmp812_ = NULL;
                              ValaCCodeIdentifier* _tmp813_;
                              ValaCCodeAssignment* _tmp814_ = NULL;
                              ValaCCodeAssignment* _tmp815_;
                              ValaCCodeExpressionStatement* _tmp816_ = NULL;
                              ValaCCodeExpressionStatement* _tmp817_;
                              _type_param_index = _type_param_index + 1;
                              if (!(_type_param_index < _type_param_size)) {
                                    break;
                              }
                              _tmp794_ = vala_list_get (_type_param_list, _type_param_index);
                              type_param = (ValaTypeParameter*) _tmp794_;
                              _tmp795_ = vala_ccode_function_get_block (type_init_fun);
                              _tmp796_ = vala_ccode_identifier_new ("type");
                              _tmp797_ = _tmp796_;
                              _tmp798_ = vala_dova_base_module_get_type_private_from_type ((ValaDovaBaseModule*) self, object_type_symbol, (ValaCCodeExpression*) _tmp797_);
                              _tmp799_ = _tmp798_;
                              _tmp800_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                              _tmp801_ = g_utf8_strdown (_tmp800_, (gssize) (-1));
                              _tmp802_ = _tmp801_;
                              _tmp803_ = g_strdup_printf ("%s_type", _tmp802_);
                              _tmp804_ = _tmp803_;
                              _tmp805_ = vala_ccode_member_access_new_pointer (_tmp799_, _tmp804_);
                              _tmp806_ = _tmp805_;
                              _tmp807_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                              _tmp808_ = g_utf8_strdown (_tmp807_, (gssize) (-1));
                              _tmp809_ = _tmp808_;
                              _tmp810_ = g_strdup_printf ("%s_type", _tmp809_);
                              _tmp811_ = _tmp810_;
                              _tmp812_ = vala_ccode_identifier_new (_tmp811_);
                              _tmp813_ = _tmp812_;
                              _tmp814_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp806_, (ValaCCodeExpression*) _tmp813_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
                              _tmp815_ = _tmp814_;
                              _tmp816_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp815_);
                              _tmp817_ = _tmp816_;
                              vala_ccode_block_add_statement (_tmp795_, (ValaCCodeNode*) _tmp817_);
                              _vala_ccode_node_unref0 (_tmp817_);
                              _vala_ccode_node_unref0 (_tmp815_);
                              _vala_ccode_node_unref0 (_tmp813_);
                              _g_free0 (_tmp811_);
                              _g_free0 (_tmp809_);
                              _vala_ccode_node_unref0 (_tmp806_);
                              _g_free0 (_tmp804_);
                              _g_free0 (_tmp802_);
                              _vala_ccode_node_unref0 (_tmp799_);
                              _vala_ccode_node_unref0 (_tmp797_);
                              _vala_code_node_unref0 (type_param);
                        }
                        _vala_iterable_unref0 (_type_param_list);
                  }
            }
      }
      vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, type_init_fun);
      _tmp818_ = vala_ccode_function_get_block (type_init_fun);
      _tmp819_ = _vala_ccode_node_ref0 (_tmp818_);
      result = _tmp819_;
      _vala_ccode_node_unref0 (type_init_fun);
      _vala_ccode_node_unref0 (type_init_call);
      _vala_ccode_node_unref0 (type_init_block);
      _vala_code_node_unref0 (object_type_symbol);
      _vala_ccode_node_unref0 (type_fun);
      _vala_ccode_node_unref0 (_cdecl_);
      _vala_code_node_unref0 (base_class_type);
      return result;
}


static void vala_dova_object_module_add_finalize_function (ValaDovaObjectModule* self, ValaClass* cl) {
      gchar* _tmp0_ = NULL;
      gchar* _tmp1_;
      gchar* _tmp2_ = NULL;
      gchar* _tmp3_;
      ValaCCodeFunction* _tmp4_ = NULL;
      ValaCCodeFunction* _tmp5_;
      ValaCCodeFunction* function;
      gchar* _tmp6_ = NULL;
      gchar* _tmp7_;
      gchar* _tmp8_;
      gchar* _tmp9_;
      ValaCCodeParameter* _tmp10_ = NULL;
      ValaCCodeParameter* _tmp11_;
      ValaDestructor* _tmp12_ = NULL;
      g_return_if_fail (self != NULL);
      g_return_if_fail (cl != NULL);
      _tmp0_ = vala_symbol_get_lower_case_cprefix ((ValaSymbol*) cl);
      _tmp1_ = _tmp0_;
      _tmp2_ = g_strdup_printf ("%sfinalize", _tmp1_);
      _tmp3_ = _tmp2_;
      _tmp4_ = vala_ccode_function_new (_tmp3_, "void");
      _tmp5_ = _tmp4_;
      _g_free0 (_tmp3_);
      _g_free0 (_tmp1_);
      function = _tmp5_;
      vala_ccode_function_set_modifiers (function, VALA_CCODE_MODIFIERS_STATIC);
      _tmp6_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) cl, FALSE);
      _tmp7_ = _tmp6_;
      _tmp8_ = g_strconcat (_tmp7_, "*", NULL);
      _tmp9_ = _tmp8_;
      _tmp10_ = vala_ccode_parameter_new ("this", _tmp9_);
      _tmp11_ = _tmp10_;
      vala_ccode_function_add_parameter (function, _tmp11_);
      _vala_ccode_node_unref0 (_tmp11_);
      _g_free0 (_tmp9_);
      _g_free0 (_tmp7_);
      vala_dova_base_module_push_function ((ValaDovaBaseModule*) self, function);
      vala_ccode_file_add_function_declaration (((ValaDovaBaseModule*) self)->cfile, function);
      _tmp12_ = vala_class_get_destructor (cl);
      if (_tmp12_ != NULL) {
            ValaDestructor* _tmp13_ = NULL;
            ValaBlock* _tmp14_ = NULL;
            _tmp13_ = vala_class_get_destructor (cl);
            _tmp14_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp13_);
            vala_code_node_emit ((ValaCodeNode*) _tmp14_, (ValaCodeGenerator*) self);
      }
      {
            ValaList* _tmp15_ = NULL;
            ValaList* _f_list;
            gint _tmp16_;
            gint _f_size;
            gint _f_index;
            _tmp15_ = vala_class_get_fields (cl);
            _f_list = _tmp15_;
            _tmp16_ = vala_collection_get_size ((ValaCollection*) _f_list);
            _f_size = _tmp16_;
            _f_index = -1;
            while (TRUE) {
                  gpointer _tmp17_ = NULL;
                  ValaField* f;
                  ValaMemberBinding _tmp18_;
                  _f_index = _f_index + 1;
                  if (!(_f_index < _f_size)) {
                        break;
                  }
                  _tmp17_ = vala_list_get (_f_list, _f_index);
                  f = (ValaField*) _tmp17_;
                  _tmp18_ = vala_field_get_binding (f);
                  if (_tmp18_ == VALA_MEMBER_BINDING_INSTANCE) {
                        ValaCCodeExpression* lhs;
                        gboolean _tmp19_;
                        ValaDataType* _tmp38_ = NULL;
                        gboolean _tmp39_;
                        lhs = NULL;
                        _tmp19_ = vala_symbol_is_internal_symbol ((ValaSymbol*) f);
                        if (_tmp19_) {
                              gchar* _tmp20_ = NULL;
                              gchar* _tmp21_;
                              gchar* _tmp22_ = NULL;
                              gchar* _tmp23_;
                              ValaCCodeIdentifier* _tmp24_ = NULL;
                              ValaCCodeIdentifier* _tmp25_;
                              ValaCCodeFunctionCall* _tmp26_ = NULL;
                              ValaCCodeFunctionCall* _tmp27_;
                              ValaCCodeFunctionCall* priv_call;
                              ValaCCodeIdentifier* _tmp28_ = NULL;
                              ValaCCodeIdentifier* _tmp29_;
                              gchar* _tmp30_ = NULL;
                              gchar* _tmp31_;
                              ValaCCodeMemberAccess* _tmp32_ = NULL;
                              _tmp20_ = vala_typesymbol_get_upper_case_cname ((ValaTypeSymbol*) cl, NULL);
                              _tmp21_ = _tmp20_;
                              _tmp22_ = g_strdup_printf ("%s_GET_PRIVATE", _tmp21_);
                              _tmp23_ = _tmp22_;
                              _tmp24_ = vala_ccode_identifier_new (_tmp23_);
                              _tmp25_ = _tmp24_;
                              _tmp26_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp25_);
                              _tmp27_ = _tmp26_;
                              _vala_ccode_node_unref0 (_tmp25_);
                              _g_free0 (_tmp23_);
                              _g_free0 (_tmp21_);
                              priv_call = _tmp27_;
                              _tmp28_ = vala_ccode_identifier_new ("this");
                              _tmp29_ = _tmp28_;
                              vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp29_);
                              _vala_ccode_node_unref0 (_tmp29_);
                              _tmp30_ = vala_field_get_cname (f);
                              _tmp31_ = _tmp30_;
                              _tmp32_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, _tmp31_);
                              _vala_ccode_node_unref0 (lhs);
                              lhs = (ValaCCodeExpression*) _tmp32_;
                              _g_free0 (_tmp31_);
                              _vala_ccode_node_unref0 (priv_call);
                        } else {
                              ValaCCodeIdentifier* _tmp33_ = NULL;
                              ValaCCodeIdentifier* _tmp34_;
                              gchar* _tmp35_ = NULL;
                              gchar* _tmp36_;
                              ValaCCodeMemberAccess* _tmp37_ = NULL;
                              _tmp33_ = vala_ccode_identifier_new ("this");
                              _tmp34_ = _tmp33_;
                              _tmp35_ = vala_field_get_cname (f);
                              _tmp36_ = _tmp35_;
                              _tmp37_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp34_, _tmp36_);
                              _vala_ccode_node_unref0 (lhs);
                              lhs = (ValaCCodeExpression*) _tmp37_;
                              _g_free0 (_tmp36_);
                              _vala_ccode_node_unref0 (_tmp34_);
                        }
                        _tmp38_ = vala_variable_get_variable_type ((ValaVariable*) f);
                        _tmp39_ = vala_dova_base_module_requires_destroy ((ValaDovaBaseModule*) self, _tmp38_);
                        if (_tmp39_) {
                              ValaMemberAccess* _tmp40_ = NULL;
                              ValaMemberAccess* this_access;
                              ValaSymbol* _tmp41_ = NULL;
                              ValaDataType* _tmp42_ = NULL;
                              ValaDataType* _tmp43_;
                              ValaSymbol* _tmp44_ = NULL;
                              ValaSymbol* _tmp45_;
                              ValaStruct* _tmp46_;
                              ValaStruct* field_st;
                              gboolean _tmp47_ = FALSE;
                              const gchar* _tmp53_ = NULL;
                              ValaMemberAccess* _tmp54_ = NULL;
                              ValaMemberAccess* ma;
                              ValaCCodeFunction* _tmp55_ = NULL;
                              ValaDataType* _tmp56_ = NULL;
                              ValaCCodeExpression* _tmp57_ = NULL;
                              ValaCCodeExpression* _tmp58_;
                              _tmp40_ = vala_member_access_new_simple ("this", NULL);
                              this_access = _tmp40_;
                              _tmp41_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
                              _tmp42_ = vala_dova_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp41_));
                              _tmp43_ = _tmp42_;
                              vala_expression_set_value_type ((ValaExpression*) this_access, _tmp43_);
                              _vala_code_node_unref0 (_tmp43_);
                              _tmp44_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
                              _tmp45_ = _tmp44_;
                              _tmp46_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp45_) ? ((ValaStruct*) _tmp45_) : NULL);
                              field_st = _tmp46_;
                              if (field_st != NULL) {
                                    gboolean _tmp48_;
                                    _tmp48_ = vala_struct_is_simple_type (field_st);
                                    _tmp47_ = !_tmp48_;
                              } else {
                                    _tmp47_ = FALSE;
                              }
                              if (_tmp47_) {
                                    ValaCCodeIdentifier* _tmp49_ = NULL;
                                    ValaCCodeIdentifier* _tmp50_;
                                    _tmp49_ = vala_ccode_identifier_new ("(*this)");
                                    _tmp50_ = _tmp49_;
                                    vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) this_access, (ValaCCodeExpression*) _tmp50_);
                                    _vala_ccode_node_unref0 (_tmp50_);
                              } else {
                                    ValaCCodeIdentifier* _tmp51_ = NULL;
                                    ValaCCodeIdentifier* _tmp52_;
                                    _tmp51_ = vala_ccode_identifier_new ("this");
                                    _tmp52_ = _tmp51_;
                                    vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) this_access, (ValaCCodeExpression*) _tmp52_);
                                    _vala_ccode_node_unref0 (_tmp52_);
                              }
                              _tmp53_ = vala_symbol_get_name ((ValaSymbol*) f);
                              _tmp54_ = vala_member_access_new ((ValaExpression*) this_access, _tmp53_, NULL);
                              ma = _tmp54_;
                              vala_expression_set_symbol_reference ((ValaExpression*) ma, (ValaSymbol*) f);
                              _tmp55_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                              _tmp56_ = vala_variable_get_variable_type ((ValaVariable*) f);
                              _tmp57_ = vala_dova_base_module_get_unref_expression ((ValaDovaBaseModule*) self, lhs, _tmp56_, (ValaExpression*) ma);
                              _tmp58_ = _tmp57_;
                              vala_ccode_function_add_expression (_tmp55_, _tmp58_);
                              _vala_ccode_node_unref0 (_tmp58_);
                              _vala_code_node_unref0 (ma);
                              _vala_code_node_unref0 (field_st);
                              _vala_code_node_unref0 (this_access);
                        }
                        _vala_ccode_node_unref0 (lhs);
                  }
                  _vala_code_node_unref0 (f);
            }
            _vala_iterable_unref0 (_f_list);
      }
      {
            ValaList* _tmp59_ = NULL;
            ValaList* _base_type_list;
            gint _tmp60_;
            gint _base_type_size;
            gint _base_type_index;
            _tmp59_ = vala_class_get_base_types (cl);
            _base_type_list = _tmp59_;
            _tmp60_ = vala_collection_get_size ((ValaCollection*) _base_type_list);
            _base_type_size = _tmp60_;
            _base_type_index = -1;
            while (TRUE) {
                  gpointer _tmp61_ = NULL;
                  ValaDataType* base_type;
                  ValaObjectType* _tmp62_;
                  ValaObjectType* object_type;
                  ValaObjectTypeSymbol* _tmp63_ = NULL;
                  _base_type_index = _base_type_index + 1;
                  if (!(_base_type_index < _base_type_size)) {
                        break;
                  }
                  _tmp61_ = vala_list_get (_base_type_list, _base_type_index);
                  base_type = (ValaDataType*) _tmp61_;
                  _tmp62_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE (base_type));
                  object_type = _tmp62_;
                  _tmp63_ = vala_object_type_get_type_symbol (object_type);
                  if (VALA_IS_CLASS (_tmp63_)) {
                        ValaCCodeIdentifier* _tmp64_ = NULL;
                        ValaCCodeIdentifier* _tmp65_;
                        ValaCCodeFunctionCall* _tmp66_ = NULL;
                        ValaCCodeFunctionCall* _tmp67_;
                        ValaCCodeFunctionCall* ccall;
                        ValaObjectTypeSymbol* _tmp68_ = NULL;
                        gchar* _tmp69_ = NULL;
                        gchar* _tmp70_;
                        gchar* _tmp71_ = NULL;
                        gchar* _tmp72_;
                        ValaCCodeIdentifier* _tmp73_ = NULL;
                        ValaCCodeIdentifier* _tmp74_;
                        ValaCCodeFunctionCall* _tmp75_ = NULL;
                        ValaCCodeFunctionCall* _tmp76_;
                        ValaCCodeFunctionCall* type_get_call;
                        ValaCCodeIdentifier* _tmp82_ = NULL;
                        ValaCCodeIdentifier* _tmp83_;
                        ValaCCodeFunction* _tmp84_ = NULL;
                        ValaCCodeExpressionStatement* _tmp85_ = NULL;
                        ValaCCodeExpressionStatement* _tmp86_;
                        _tmp64_ = vala_ccode_identifier_new ("dova_object_base_finalize");
                        _tmp65_ = _tmp64_;
                        _tmp66_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp65_);
                        _tmp67_ = _tmp66_;
                        _vala_ccode_node_unref0 (_tmp65_);
                        ccall = _tmp67_;
                        _tmp68_ = vala_object_type_get_type_symbol (object_type);
                        _tmp69_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) _tmp68_, NULL);
                        _tmp70_ = _tmp69_;
                        _tmp71_ = g_strdup_printf ("%s_type_get", _tmp70_);
                        _tmp72_ = _tmp71_;
                        _tmp73_ = vala_ccode_identifier_new (_tmp72_);
                        _tmp74_ = _tmp73_;
                        _tmp75_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp74_);
                        _tmp76_ = _tmp75_;
                        _vala_ccode_node_unref0 (_tmp74_);
                        _g_free0 (_tmp72_);
                        _g_free0 (_tmp70_);
                        type_get_call = _tmp76_;
                        {
                              ValaList* _tmp77_ = NULL;
                              ValaList* _type_arg_list;
                              gint _tmp78_;
                              gint _type_arg_size;
                              gint _type_arg_index;
                              _tmp77_ = vala_data_type_get_type_arguments (base_type);
                              _type_arg_list = _tmp77_;
                              _tmp78_ = vala_collection_get_size ((ValaCollection*) _type_arg_list);
                              _type_arg_size = _tmp78_;
                              _type_arg_index = -1;
                              while (TRUE) {
                                    gpointer _tmp79_ = NULL;
                                    ValaDataType* type_arg;
                                    ValaCCodeExpression* _tmp80_ = NULL;
                                    ValaCCodeExpression* _tmp81_;
                                    _type_arg_index = _type_arg_index + 1;
                                    if (!(_type_arg_index < _type_arg_size)) {
                                          break;
                                    }
                                    _tmp79_ = vala_list_get (_type_arg_list, _type_arg_index);
                                    type_arg = (ValaDataType*) _tmp79_;
                                    _tmp80_ = vala_dova_base_module_get_type_id_expression ((ValaDovaBaseModule*) self, type_arg, FALSE);
                                    _tmp81_ = _tmp80_;
                                    vala_ccode_function_call_add_argument (type_get_call, _tmp81_);
                                    _vala_ccode_node_unref0 (_tmp81_);
                                    _vala_code_node_unref0 (type_arg);
                              }
                              _vala_iterable_unref0 (_type_arg_list);
                        }
                        vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) type_get_call);
                        _tmp82_ = vala_ccode_identifier_new ("this");
                        _tmp83_ = _tmp82_;
                        vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp83_);
                        _vala_ccode_node_unref0 (_tmp83_);
                        _tmp84_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                        _tmp85_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) ccall);
                        _tmp86_ = _tmp85_;
                        vala_ccode_function_add_statement (_tmp84_, (ValaCCodeNode*) _tmp86_);
                        _vala_ccode_node_unref0 (_tmp86_);
                        _vala_ccode_node_unref0 (type_get_call);
                        _vala_ccode_node_unref0 (ccall);
                  }
                  _vala_code_node_unref0 (object_type);
                  _vala_code_node_unref0 (base_type);
            }
            _vala_iterable_unref0 (_base_type_list);
      }
      vala_dova_base_module_pop_function ((ValaDovaBaseModule*) self);
      vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, function);
      _vala_ccode_node_unref0 (function);
}


static void vala_dova_object_module_real_visit_class (ValaCodeVisitor* base, ValaClass* cl) {
      ValaDovaObjectModule * self;
      ValaDovaBaseModuleEmitContext* _tmp0_ = NULL;
      ValaDovaBaseModuleEmitContext* _tmp1_;
      gboolean _tmp2_;
      ValaClass* _tmp3_ = NULL;
      ValaCCodeBlock* _tmp4_ = NULL;
      ValaCCodeBlock* type_init_block;
      gboolean _tmp29_ = FALSE;
      gboolean _tmp30_ = FALSE;
      ValaClass* _tmp31_ = NULL;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (cl != NULL);
      _tmp0_ = vala_dova_base_module_emit_context_new ((ValaSymbol*) cl);
      _tmp1_ = _tmp0_;
      vala_dova_base_module_push_context ((ValaDovaBaseModule*) self, _tmp1_);
      _vala_dova_base_module_emit_context_unref0 (_tmp1_);
      vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, cl, ((ValaDovaBaseModule*) self)->cfile);
      vala_dova_object_module_generate_class_private_declaration (self, cl, ((ValaDovaBaseModule*) self)->cfile);
      _tmp2_ = vala_symbol_is_internal_symbol ((ValaSymbol*) cl);
      if (!_tmp2_) {
            vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, cl, ((ValaDovaBaseModule*) self)->header_file);
      }
      vala_code_node_accept_children ((ValaCodeNode*) cl, (ValaCodeVisitor*) self);
      _tmp3_ = vala_class_get_base_class (cl);
      _tmp4_ = vala_dova_object_module_generate_type_get_function (self, (ValaTypeSymbol*) cl, _tmp3_);
      type_init_block = _tmp4_;
      {
            ValaList* _tmp5_ = NULL;
            ValaList* _base_type_list;
            gint _tmp6_;
            gint _base_type_size;
            gint _base_type_index;
            _tmp5_ = vala_class_get_base_types (cl);
            _base_type_list = _tmp5_;
            _tmp6_ = vala_collection_get_size ((ValaCollection*) _base_type_list);
            _base_type_size = _tmp6_;
            _base_type_index = -1;
            while (TRUE) {
                  gpointer _tmp7_ = NULL;
                  ValaDataType* base_type;
                  ValaObjectType* _tmp8_;
                  ValaObjectType* object_type;
                  ValaObjectTypeSymbol* _tmp9_ = NULL;
                  _base_type_index = _base_type_index + 1;
                  if (!(_base_type_index < _base_type_size)) {
                        break;
                  }
                  _tmp7_ = vala_list_get (_base_type_list, _base_type_index);
                  base_type = (ValaDataType*) _tmp7_;
                  _tmp8_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE (base_type));
                  object_type = _tmp8_;
                  _tmp9_ = vala_object_type_get_type_symbol (object_type);
                  if (VALA_IS_INTERFACE (_tmp9_)) {
                        ValaObjectTypeSymbol* _tmp10_ = NULL;
                        ValaObjectTypeSymbol* _tmp11_ = NULL;
                        gchar* _tmp12_ = NULL;
                        gchar* _tmp13_;
                        gchar* _tmp14_ = NULL;
                        gchar* _tmp15_;
                        ValaCCodeIdentifier* _tmp16_ = NULL;
                        ValaCCodeIdentifier* _tmp17_;
                        ValaCCodeFunctionCall* _tmp18_ = NULL;
                        ValaCCodeFunctionCall* _tmp19_;
                        ValaCCodeFunctionCall* type_init_call;
                        ValaCCodeIdentifier* _tmp20_ = NULL;
                        ValaCCodeIdentifier* _tmp21_;
                        ValaCCodeExpressionStatement* _tmp27_ = NULL;
                        ValaCCodeExpressionStatement* _tmp28_;
                        _tmp10_ = vala_object_type_get_type_symbol (object_type);
                        vala_dova_base_module_generate_interface_declaration ((ValaDovaBaseModule*) self, VALA_INTERFACE (_tmp10_), ((ValaDovaBaseModule*) self)->cfile);
                        _tmp11_ = vala_object_type_get_type_symbol (object_type);
                        _tmp12_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) _tmp11_, NULL);
                        _tmp13_ = _tmp12_;
                        _tmp14_ = g_strdup_printf ("%s_type_init", _tmp13_);
                        _tmp15_ = _tmp14_;
                        _tmp16_ = vala_ccode_identifier_new (_tmp15_);
                        _tmp17_ = _tmp16_;
                        _tmp18_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp17_);
                        _tmp19_ = _tmp18_;
                        _vala_ccode_node_unref0 (_tmp17_);
                        _g_free0 (_tmp15_);
                        _g_free0 (_tmp13_);
                        type_init_call = _tmp19_;
                        _tmp20_ = vala_ccode_identifier_new ("type");
                        _tmp21_ = _tmp20_;
                        vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp21_);
                        _vala_ccode_node_unref0 (_tmp21_);
                        {
                              ValaList* _tmp22_ = NULL;
                              ValaList* _type_arg_list;
                              gint _tmp23_;
                              gint _type_arg_size;
                              gint _type_arg_index;
                              _tmp22_ = vala_data_type_get_type_arguments (base_type);
                              _type_arg_list = _tmp22_;
                              _tmp23_ = vala_collection_get_size ((ValaCollection*) _type_arg_list);
                              _type_arg_size = _tmp23_;
                              _type_arg_index = -1;
                              while (TRUE) {
                                    gpointer _tmp24_ = NULL;
                                    ValaDataType* type_arg;
                                    ValaCCodeExpression* _tmp25_ = NULL;
                                    ValaCCodeExpression* _tmp26_;
                                    _type_arg_index = _type_arg_index + 1;
                                    if (!(_type_arg_index < _type_arg_size)) {
                                          break;
                                    }
                                    _tmp24_ = vala_list_get (_type_arg_list, _type_arg_index);
                                    type_arg = (ValaDataType*) _tmp24_;
                                    _tmp25_ = vala_dova_base_module_get_type_id_expression ((ValaDovaBaseModule*) self, type_arg, TRUE);
                                    _tmp26_ = _tmp25_;
                                    vala_ccode_function_call_add_argument (type_init_call, _tmp26_);
                                    _vala_ccode_node_unref0 (_tmp26_);
                                    _vala_code_node_unref0 (type_arg);
                              }
                              _vala_iterable_unref0 (_type_arg_list);
                        }
                        _tmp27_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) type_init_call);
                        _tmp28_ = _tmp27_;
                        vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp28_);
                        _vala_ccode_node_unref0 (_tmp28_);
                        _vala_ccode_node_unref0 (type_init_call);
                  }
                  _vala_code_node_unref0 (object_type);
                  _vala_code_node_unref0 (base_type);
            }
            _vala_iterable_unref0 (_base_type_list);
      }
      _tmp31_ = vala_class_get_base_class (cl);
      if (_tmp31_ != NULL) {
            gboolean _tmp32_;
            _tmp32_ = vala_class_is_fundamental (cl);
            _tmp30_ = !_tmp32_;
      } else {
            _tmp30_ = FALSE;
      }
      if (_tmp30_) {
            gboolean _tmp33_ = FALSE;
            ValaList* _tmp34_ = NULL;
            ValaList* _tmp35_;
            gint _tmp36_;
            gboolean _tmp37_;
            _tmp34_ = vala_class_get_fields (cl);
            _tmp35_ = _tmp34_;
            _tmp36_ = vala_collection_get_size ((ValaCollection*) _tmp35_);
            _tmp37_ = _tmp36_ > 0;
            _vala_iterable_unref0 (_tmp35_);
            if (_tmp37_) {
                  _tmp33_ = TRUE;
            } else {
                  ValaDestructor* _tmp38_ = NULL;
                  _tmp38_ = vala_class_get_destructor (cl);
                  _tmp33_ = _tmp38_ != NULL;
            }
            _tmp29_ = _tmp33_;
      } else {
            _tmp29_ = FALSE;
      }
      if (_tmp29_) {
            ValaScope* _tmp39_ = NULL;
            ValaSymbol* _tmp40_ = NULL;
            ValaMethod* _tmp41_;
            ValaCCodeIdentifier* _tmp42_ = NULL;
            ValaCCodeIdentifier* _tmp43_;
            ValaCCodeFunctionCall* _tmp44_ = NULL;
            ValaCCodeFunctionCall* _tmp45_;
            ValaCCodeFunctionCall* override_call;
            ValaCCodeIdentifier* _tmp46_ = NULL;
            ValaCCodeIdentifier* _tmp47_;
            gchar* _tmp48_ = NULL;
            gchar* _tmp49_;
            gchar* _tmp50_ = NULL;
            gchar* _tmp51_;
            ValaCCodeIdentifier* _tmp52_ = NULL;
            ValaCCodeIdentifier* _tmp53_;
            ValaCCodeExpressionStatement* _tmp54_ = NULL;
            ValaCCodeExpressionStatement* _tmp55_;
            vala_dova_object_module_add_finalize_function (self, cl);
            _tmp39_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->object_class);
            _tmp40_ = vala_scope_lookup (_tmp39_, "finalize");
            _tmp41_ = VALA_METHOD (_tmp40_);
            vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, _tmp41_, ((ValaDovaBaseModule*) self)->cfile);
            _vala_code_node_unref0 (_tmp41_);
            _tmp42_ = vala_ccode_identifier_new ("dova_object_override_finalize");
            _tmp43_ = _tmp42_;
            _tmp44_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp43_);
            _tmp45_ = _tmp44_;
            _vala_ccode_node_unref0 (_tmp43_);
            override_call = _tmp45_;
            _tmp46_ = vala_ccode_identifier_new ("type");
            _tmp47_ = _tmp46_;
            vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp47_);
            _vala_ccode_node_unref0 (_tmp47_);
            _tmp48_ = vala_symbol_get_lower_case_cprefix ((ValaSymbol*) cl);
            _tmp49_ = _tmp48_;
            _tmp50_ = g_strdup_printf ("%sfinalize", _tmp49_);
            _tmp51_ = _tmp50_;
            _tmp52_ = vala_ccode_identifier_new (_tmp51_);
            _tmp53_ = _tmp52_;
            vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp53_);
            _vala_ccode_node_unref0 (_tmp53_);
            _g_free0 (_tmp51_);
            _g_free0 (_tmp49_);
            _tmp54_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) override_call);
            _tmp55_ = _tmp54_;
            vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp55_);
            _vala_ccode_node_unref0 (_tmp55_);
            _vala_ccode_node_unref0 (override_call);
      }
      {
            ValaList* _tmp56_ = NULL;
            ValaList* _m_list;
            gint _tmp57_;
            gint _m_size;
            gint _m_index;
            _tmp56_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
            _m_list = _tmp56_;
            _tmp57_ = vala_collection_get_size ((ValaCollection*) _m_list);
            _m_size = _tmp57_;
            _m_index = -1;
            while (TRUE) {
                  gpointer _tmp58_ = NULL;
                  ValaMethod* m;
                  gboolean _tmp59_ = FALSE;
                  gboolean _tmp60_;
                  _m_index = _m_index + 1;
                  if (!(_m_index < _m_size)) {
                        break;
                  }
                  _tmp58_ = vala_list_get (_m_list, _m_index);
                  m = (ValaMethod*) _tmp58_;
                  _tmp60_ = vala_method_get_is_virtual (m);
                  if (_tmp60_) {
                        _tmp59_ = TRUE;
                  } else {
                        gboolean _tmp61_;
                        _tmp61_ = vala_method_get_overrides (m);
                        _tmp59_ = _tmp61_;
                  }
                  if (_tmp59_) {
                        ValaMethod* _tmp62_ = NULL;
                        ValaSymbol* _tmp63_ = NULL;
                        gchar* _tmp64_ = NULL;
                        gchar* _tmp65_;
                        const gchar* _tmp66_ = NULL;
                        gchar* _tmp67_ = NULL;
                        gchar* _tmp68_;
                        ValaCCodeIdentifier* _tmp69_ = NULL;
                        ValaCCodeIdentifier* _tmp70_;
                        ValaCCodeFunctionCall* _tmp71_ = NULL;
                        ValaCCodeFunctionCall* _tmp72_;
                        ValaCCodeFunctionCall* override_call;
                        ValaCCodeIdentifier* _tmp73_ = NULL;
                        ValaCCodeIdentifier* _tmp74_;
                        gchar* _tmp75_ = NULL;
                        gchar* _tmp76_;
                        ValaCCodeIdentifier* _tmp77_ = NULL;
                        ValaCCodeIdentifier* _tmp78_;
                        ValaCCodeExpressionStatement* _tmp79_ = NULL;
                        ValaCCodeExpressionStatement* _tmp80_;
                        _tmp62_ = vala_method_get_base_method (m);
                        _tmp63_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp62_);
                        _tmp64_ = vala_symbol_get_lower_case_cprefix (_tmp63_);
                        _tmp65_ = _tmp64_;
                        _tmp66_ = vala_symbol_get_name ((ValaSymbol*) m);
                        _tmp67_ = g_strdup_printf ("%soverride_%s", _tmp65_, _tmp66_);
                        _tmp68_ = _tmp67_;
                        _tmp69_ = vala_ccode_identifier_new (_tmp68_);
                        _tmp70_ = _tmp69_;
                        _tmp71_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp70_);
                        _tmp72_ = _tmp71_;
                        _vala_ccode_node_unref0 (_tmp70_);
                        _g_free0 (_tmp68_);
                        _g_free0 (_tmp65_);
                        override_call = _tmp72_;
                        _tmp73_ = vala_ccode_identifier_new ("type");
                        _tmp74_ = _tmp73_;
                        vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp74_);
                        _vala_ccode_node_unref0 (_tmp74_);
                        _tmp75_ = vala_method_get_real_cname (m);
                        _tmp76_ = _tmp75_;
                        _tmp77_ = vala_ccode_identifier_new (_tmp76_);
                        _tmp78_ = _tmp77_;
                        vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp78_);
                        _vala_ccode_node_unref0 (_tmp78_);
                        _g_free0 (_tmp76_);
                        _tmp79_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) override_call);
                        _tmp80_ = _tmp79_;
                        vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp80_);
                        _vala_ccode_node_unref0 (_tmp80_);
                        _vala_ccode_node_unref0 (override_call);
                  } else {
                        ValaMethod* _tmp81_ = NULL;
                        _tmp81_ = vala_method_get_base_interface_method (m);
                        if (_tmp81_ != NULL) {
                              ValaMethod* _tmp82_ = NULL;
                              ValaSymbol* _tmp83_ = NULL;
                              gchar* _tmp84_ = NULL;
                              gchar* _tmp85_;
                              const gchar* _tmp86_ = NULL;
                              gchar* _tmp87_ = NULL;
                              gchar* _tmp88_;
                              ValaCCodeIdentifier* _tmp89_ = NULL;
                              ValaCCodeIdentifier* _tmp90_;
                              ValaCCodeFunctionCall* _tmp91_ = NULL;
                              ValaCCodeFunctionCall* _tmp92_;
                              ValaCCodeFunctionCall* override_call;
                              ValaCCodeIdentifier* _tmp93_ = NULL;
                              ValaCCodeIdentifier* _tmp94_;
                              gchar* _tmp95_ = NULL;
                              gchar* _tmp96_;
                              ValaCCodeIdentifier* _tmp97_ = NULL;
                              ValaCCodeIdentifier* _tmp98_;
                              ValaCCodeExpressionStatement* _tmp99_ = NULL;
                              ValaCCodeExpressionStatement* _tmp100_;
                              _tmp82_ = vala_method_get_base_interface_method (m);
                              _tmp83_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp82_);
                              _tmp84_ = vala_symbol_get_lower_case_cprefix (_tmp83_);
                              _tmp85_ = _tmp84_;
                              _tmp86_ = vala_symbol_get_name ((ValaSymbol*) m);
                              _tmp87_ = g_strdup_printf ("%soverride_%s", _tmp85_, _tmp86_);
                              _tmp88_ = _tmp87_;
                              _tmp89_ = vala_ccode_identifier_new (_tmp88_);
                              _tmp90_ = _tmp89_;
                              _tmp91_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp90_);
                              _tmp92_ = _tmp91_;
                              _vala_ccode_node_unref0 (_tmp90_);
                              _g_free0 (_tmp88_);
                              _g_free0 (_tmp85_);
                              override_call = _tmp92_;
                              _tmp93_ = vala_ccode_identifier_new ("type");
                              _tmp94_ = _tmp93_;
                              vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp94_);
                              _vala_ccode_node_unref0 (_tmp94_);
                              _tmp95_ = vala_method_get_real_cname (m);
                              _tmp96_ = _tmp95_;
                              _tmp97_ = vala_ccode_identifier_new (_tmp96_);
                              _tmp98_ = _tmp97_;
                              vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp98_);
                              _vala_ccode_node_unref0 (_tmp98_);
                              _g_free0 (_tmp96_);
                              _tmp99_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) override_call);
                              _tmp100_ = _tmp99_;
                              vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp100_);
                              _vala_ccode_node_unref0 (_tmp100_);
                              _vala_ccode_node_unref0 (override_call);
                        }
                  }
                  _vala_code_node_unref0 (m);
            }
            _vala_iterable_unref0 (_m_list);
      }
      {
            ValaList* _tmp101_ = NULL;
            ValaList* _prop_list;
            gint _tmp102_;
            gint _prop_size;
            gint _prop_index;
            _tmp101_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) cl);
            _prop_list = _tmp101_;
            _tmp102_ = vala_collection_get_size ((ValaCollection*) _prop_list);
            _prop_size = _tmp102_;
            _prop_index = -1;
            while (TRUE) {
                  gpointer _tmp103_ = NULL;
                  ValaProperty* prop;
                  gboolean _tmp104_ = FALSE;
                  gboolean _tmp105_;
                  _prop_index = _prop_index + 1;
                  if (!(_prop_index < _prop_size)) {
                        break;
                  }
                  _tmp103_ = vala_list_get (_prop_list, _prop_index);
                  prop = (ValaProperty*) _tmp103_;
                  _tmp105_ = vala_property_get_is_virtual (prop);
                  if (_tmp105_) {
                        _tmp104_ = TRUE;
                  } else {
                        gboolean _tmp106_;
                        _tmp106_ = vala_property_get_overrides (prop);
                        _tmp104_ = _tmp106_;
                  }
                  if (_tmp104_) {
                        ValaPropertyAccessor* _tmp107_ = NULL;
                        ValaPropertyAccessor* _tmp128_ = NULL;
                        _tmp107_ = vala_property_get_get_accessor (prop);
                        if (_tmp107_ != NULL) {
                              ValaProperty* _tmp108_ = NULL;
                              ValaSymbol* _tmp109_ = NULL;
                              gchar* _tmp110_ = NULL;
                              gchar* _tmp111_;
                              const gchar* _tmp112_ = NULL;
                              gchar* _tmp113_ = NULL;
                              gchar* _tmp114_;
                              ValaCCodeIdentifier* _tmp115_ = NULL;
                              ValaCCodeIdentifier* _tmp116_;
                              ValaCCodeFunctionCall* _tmp117_ = NULL;
                              ValaCCodeFunctionCall* _tmp118_;
                              ValaCCodeFunctionCall* override_call;
                              ValaCCodeIdentifier* _tmp119_ = NULL;
                              ValaCCodeIdentifier* _tmp120_;
                              ValaPropertyAccessor* _tmp121_ = NULL;
                              gchar* _tmp122_ = NULL;
                              gchar* _tmp123_;
                              ValaCCodeIdentifier* _tmp124_ = NULL;
                              ValaCCodeIdentifier* _tmp125_;
                              ValaCCodeExpressionStatement* _tmp126_ = NULL;
                              ValaCCodeExpressionStatement* _tmp127_;
                              _tmp108_ = vala_property_get_base_property (prop);
                              _tmp109_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp108_);
                              _tmp110_ = vala_symbol_get_lower_case_cprefix (_tmp109_);
                              _tmp111_ = _tmp110_;
                              _tmp112_ = vala_symbol_get_name ((ValaSymbol*) prop);
                              _tmp113_ = g_strdup_printf ("%soverride_get_%s", _tmp111_, _tmp112_);
                              _tmp114_ = _tmp113_;
                              _tmp115_ = vala_ccode_identifier_new (_tmp114_);
                              _tmp116_ = _tmp115_;
                              _tmp117_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp116_);
                              _tmp118_ = _tmp117_;
                              _vala_ccode_node_unref0 (_tmp116_);
                              _g_free0 (_tmp114_);
                              _g_free0 (_tmp111_);
                              override_call = _tmp118_;
                              _tmp119_ = vala_ccode_identifier_new ("type");
                              _tmp120_ = _tmp119_;
                              vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp120_);
                              _vala_ccode_node_unref0 (_tmp120_);
                              _tmp121_ = vala_property_get_get_accessor (prop);
                              _tmp122_ = vala_property_accessor_get_cname (_tmp121_);
                              _tmp123_ = _tmp122_;
                              _tmp124_ = vala_ccode_identifier_new (_tmp123_);
                              _tmp125_ = _tmp124_;
                              vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp125_);
                              _vala_ccode_node_unref0 (_tmp125_);
                              _g_free0 (_tmp123_);
                              _tmp126_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) override_call);
                              _tmp127_ = _tmp126_;
                              vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp127_);
                              _vala_ccode_node_unref0 (_tmp127_);
                              _vala_ccode_node_unref0 (override_call);
                        }
                        _tmp128_ = vala_property_get_set_accessor (prop);
                        if (_tmp128_ != NULL) {
                              ValaProperty* _tmp129_ = NULL;
                              ValaSymbol* _tmp130_ = NULL;
                              gchar* _tmp131_ = NULL;
                              gchar* _tmp132_;
                              const gchar* _tmp133_ = NULL;
                              gchar* _tmp134_ = NULL;
                              gchar* _tmp135_;
                              ValaCCodeIdentifier* _tmp136_ = NULL;
                              ValaCCodeIdentifier* _tmp137_;
                              ValaCCodeFunctionCall* _tmp138_ = NULL;
                              ValaCCodeFunctionCall* _tmp139_;
                              ValaCCodeFunctionCall* override_call;
                              ValaCCodeIdentifier* _tmp140_ = NULL;
                              ValaCCodeIdentifier* _tmp141_;
                              ValaPropertyAccessor* _tmp142_ = NULL;
                              gchar* _tmp143_ = NULL;
                              gchar* _tmp144_;
                              ValaCCodeIdentifier* _tmp145_ = NULL;
                              ValaCCodeIdentifier* _tmp146_;
                              ValaCCodeExpressionStatement* _tmp147_ = NULL;
                              ValaCCodeExpressionStatement* _tmp148_;
                              _tmp129_ = vala_property_get_base_property (prop);
                              _tmp130_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp129_);
                              _tmp131_ = vala_symbol_get_lower_case_cprefix (_tmp130_);
                              _tmp132_ = _tmp131_;
                              _tmp133_ = vala_symbol_get_name ((ValaSymbol*) prop);
                              _tmp134_ = g_strdup_printf ("%soverride_set_%s", _tmp132_, _tmp133_);
                              _tmp135_ = _tmp134_;
                              _tmp136_ = vala_ccode_identifier_new (_tmp135_);
                              _tmp137_ = _tmp136_;
                              _tmp138_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp137_);
                              _tmp139_ = _tmp138_;
                              _vala_ccode_node_unref0 (_tmp137_);
                              _g_free0 (_tmp135_);
                              _g_free0 (_tmp132_);
                              override_call = _tmp139_;
                              _tmp140_ = vala_ccode_identifier_new ("type");
                              _tmp141_ = _tmp140_;
                              vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp141_);
                              _vala_ccode_node_unref0 (_tmp141_);
                              _tmp142_ = vala_property_get_set_accessor (prop);
                              _tmp143_ = vala_property_accessor_get_cname (_tmp142_);
                              _tmp144_ = _tmp143_;
                              _tmp145_ = vala_ccode_identifier_new (_tmp144_);
                              _tmp146_ = _tmp145_;
                              vala_ccode_function_call_add_argument (override_call, (ValaCCodeExpression*) _tmp146_);
                              _vala_ccode_node_unref0 (_tmp146_);
                              _g_free0 (_tmp144_);
                              _tmp147_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) override_call);
                              _tmp148_ = _tmp147_;
                              vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp148_);
                              _vala_ccode_node_unref0 (_tmp148_);
                              _vala_ccode_node_unref0 (override_call);
                        }
                  }
                  _vala_code_node_unref0 (prop);
            }
            _vala_iterable_unref0 (_prop_list);
      }
      if (cl == ((ValaDovaBaseModule*) self)->type_class) {
            ValaCCodeIdentifier* _tmp149_ = NULL;
            ValaCCodeIdentifier* _tmp150_;
            ValaCCodeFunctionCall* _tmp151_ = NULL;
            ValaCCodeFunctionCall* _tmp152_;
            ValaCCodeFunctionCall* priv_call;
            ValaCCodeIdentifier* _tmp153_ = NULL;
            ValaCCodeIdentifier* _tmp154_;
            ValaCCodeFunction* _tmp155_ = NULL;
            ValaCCodeFunction* value_copy_function;
            ValaCCodeParameter* _tmp156_ = NULL;
            ValaCCodeParameter* _tmp157_;
            ValaCCodeParameter* _tmp158_ = NULL;
            ValaCCodeParameter* _tmp159_;
            ValaCCodeParameter* _tmp160_ = NULL;
            ValaCCodeParameter* _tmp161_;
            ValaCCodeParameter* _tmp162_ = NULL;
            ValaCCodeParameter* _tmp163_;
            ValaCCodeParameter* _tmp164_ = NULL;
            ValaCCodeParameter* _tmp165_;
            ValaCCodeBlock* _tmp166_ = NULL;
            ValaCCodeBlock* _tmp167_;
            ValaCCodeMemberAccess* _tmp168_ = NULL;
            ValaCCodeMemberAccess* _tmp169_;
            ValaCCodeFunctionCall* _tmp170_ = NULL;
            ValaCCodeFunctionCall* _tmp171_;
            ValaCCodeFunctionCall* ccall;
            ValaCCodeIdentifier* _tmp172_ = NULL;
            ValaCCodeIdentifier* _tmp173_;
            ValaCCodeIdentifier* _tmp174_ = NULL;
            ValaCCodeIdentifier* _tmp175_;
            ValaCCodeIdentifier* _tmp176_ = NULL;
            ValaCCodeIdentifier* _tmp177_;
            ValaCCodeIdentifier* _tmp178_ = NULL;
            ValaCCodeIdentifier* _tmp179_;
            ValaCCodeBlock* _tmp180_ = NULL;
            ValaCCodeExpressionStatement* _tmp181_ = NULL;
            ValaCCodeExpressionStatement* _tmp182_;
            ValaCCodeFunction* _tmp183_ = NULL;
            ValaCCodeFunction* _tmp184_;
            ValaCCodeFunction* _tmp185_ = NULL;
            ValaCCodeFunction* value_equals_function;
            ValaCCodeParameter* _tmp186_ = NULL;
            ValaCCodeParameter* _tmp187_;
            ValaCCodeParameter* _tmp188_ = NULL;
            ValaCCodeParameter* _tmp189_;
            ValaCCodeParameter* _tmp190_ = NULL;
            ValaCCodeParameter* _tmp191_;
            ValaCCodeParameter* _tmp192_ = NULL;
            ValaCCodeParameter* _tmp193_;
            ValaCCodeParameter* _tmp194_ = NULL;
            ValaCCodeParameter* _tmp195_;
            ValaCCodeBlock* _tmp196_ = NULL;
            ValaCCodeBlock* _tmp197_;
            ValaCCodeMemberAccess* _tmp198_ = NULL;
            ValaCCodeMemberAccess* _tmp199_;
            ValaCCodeFunctionCall* _tmp200_ = NULL;
            ValaCCodeIdentifier* _tmp201_ = NULL;
            ValaCCodeIdentifier* _tmp202_;
            ValaCCodeIdentifier* _tmp203_ = NULL;
            ValaCCodeIdentifier* _tmp204_;
            ValaCCodeIdentifier* _tmp205_ = NULL;
            ValaCCodeIdentifier* _tmp206_;
            ValaCCodeIdentifier* _tmp207_ = NULL;
            ValaCCodeIdentifier* _tmp208_;
            ValaCCodeBlock* _tmp209_ = NULL;
            ValaCCodeReturnStatement* _tmp210_ = NULL;
            ValaCCodeReturnStatement* _tmp211_;
            ValaCCodeFunction* _tmp212_ = NULL;
            ValaCCodeFunction* _tmp213_;
            ValaCCodeFunction* _tmp214_ = NULL;
            ValaCCodeFunction* value_hash_function;
            ValaCCodeParameter* _tmp215_ = NULL;
            ValaCCodeParameter* _tmp216_;
            ValaCCodeParameter* _tmp217_ = NULL;
            ValaCCodeParameter* _tmp218_;
            ValaCCodeParameter* _tmp219_ = NULL;
            ValaCCodeParameter* _tmp220_;
            ValaCCodeBlock* _tmp221_ = NULL;
            ValaCCodeBlock* _tmp222_;
            ValaCCodeMemberAccess* _tmp223_ = NULL;
            ValaCCodeMemberAccess* _tmp224_;
            ValaCCodeFunctionCall* _tmp225_ = NULL;
            ValaCCodeIdentifier* _tmp226_ = NULL;
            ValaCCodeIdentifier* _tmp227_;
            ValaCCodeIdentifier* _tmp228_ = NULL;
            ValaCCodeIdentifier* _tmp229_;
            ValaCCodeBlock* _tmp230_ = NULL;
            ValaCCodeReturnStatement* _tmp231_ = NULL;
            ValaCCodeReturnStatement* _tmp232_;
            ValaCCodeFunction* _tmp233_ = NULL;
            ValaCCodeFunction* _tmp234_;
            ValaCCodeFunction* _tmp235_ = NULL;
            ValaCCodeFunction* value_to_any_function;
            ValaCCodeParameter* _tmp236_ = NULL;
            ValaCCodeParameter* _tmp237_;
            ValaCCodeParameter* _tmp238_ = NULL;
            ValaCCodeParameter* _tmp239_;
            ValaCCodeParameter* _tmp240_ = NULL;
            ValaCCodeParameter* _tmp241_;
            ValaCCodeBlock* _tmp242_ = NULL;
            ValaCCodeBlock* _tmp243_;
            ValaCCodeMemberAccess* _tmp244_ = NULL;
            ValaCCodeMemberAccess* _tmp245_;
            ValaCCodeFunctionCall* _tmp246_ = NULL;
            ValaCCodeIdentifier* _tmp247_ = NULL;
            ValaCCodeIdentifier* _tmp248_;
            ValaCCodeIdentifier* _tmp249_ = NULL;
            ValaCCodeIdentifier* _tmp250_;
            ValaCCodeBlock* _tmp251_ = NULL;
            ValaCCodeReturnStatement* _tmp252_ = NULL;
            ValaCCodeReturnStatement* _tmp253_;
            ValaCCodeFunction* _tmp254_ = NULL;
            ValaCCodeFunction* _tmp255_;
            ValaCCodeFunction* _tmp256_ = NULL;
            ValaCCodeFunction* value_from_any_function;
            ValaCCodeParameter* _tmp257_ = NULL;
            ValaCCodeParameter* _tmp258_;
            ValaCCodeParameter* _tmp259_ = NULL;
            ValaCCodeParameter* _tmp260_;
            ValaCCodeParameter* _tmp261_ = NULL;
            ValaCCodeParameter* _tmp262_;
            ValaCCodeParameter* _tmp263_ = NULL;
            ValaCCodeParameter* _tmp264_;
            ValaCCodeBlock* _tmp265_ = NULL;
            ValaCCodeBlock* _tmp266_;
            ValaCCodeMemberAccess* _tmp267_ = NULL;
            ValaCCodeMemberAccess* _tmp268_;
            ValaCCodeFunctionCall* _tmp269_ = NULL;
            ValaCCodeIdentifier* _tmp270_ = NULL;
            ValaCCodeIdentifier* _tmp271_;
            ValaCCodeIdentifier* _tmp272_ = NULL;
            ValaCCodeIdentifier* _tmp273_;
            ValaCCodeIdentifier* _tmp274_ = NULL;
            ValaCCodeIdentifier* _tmp275_;
            ValaCCodeBlock* _tmp276_ = NULL;
            ValaCCodeReturnStatement* _tmp277_ = NULL;
            ValaCCodeReturnStatement* _tmp278_;
            ValaCCodeFunction* _tmp279_ = NULL;
            ValaCCodeFunction* _tmp280_;
            _tmp149_ = vala_ccode_identifier_new ("DOVA_TYPE_GET_PRIVATE");
            _tmp150_ = _tmp149_;
            _tmp151_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp150_);
            _tmp152_ = _tmp151_;
            _vala_ccode_node_unref0 (_tmp150_);
            priv_call = _tmp152_;
            _tmp153_ = vala_ccode_identifier_new ("type");
            _tmp154_ = _tmp153_;
            vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp154_);
            _vala_ccode_node_unref0 (_tmp154_);
            _tmp155_ = vala_ccode_function_new ("dova_type_value_copy", "void");
            value_copy_function = _tmp155_;
            _tmp156_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp157_ = _tmp156_;
            vala_ccode_function_add_parameter (value_copy_function, _tmp157_);
            _vala_ccode_node_unref0 (_tmp157_);
            _tmp158_ = vala_ccode_parameter_new ("dest", "void *");
            _tmp159_ = _tmp158_;
            vala_ccode_function_add_parameter (value_copy_function, _tmp159_);
            _vala_ccode_node_unref0 (_tmp159_);
            _tmp160_ = vala_ccode_parameter_new ("dest_index", "intptr_t");
            _tmp161_ = _tmp160_;
            vala_ccode_function_add_parameter (value_copy_function, _tmp161_);
            _vala_ccode_node_unref0 (_tmp161_);
            _tmp162_ = vala_ccode_parameter_new ("src", "void *");
            _tmp163_ = _tmp162_;
            vala_ccode_function_add_parameter (value_copy_function, _tmp163_);
            _vala_ccode_node_unref0 (_tmp163_);
            _tmp164_ = vala_ccode_parameter_new ("src_index", "intptr_t");
            _tmp165_ = _tmp164_;
            vala_ccode_function_add_parameter (value_copy_function, _tmp165_);
            _vala_ccode_node_unref0 (_tmp165_);
            _tmp166_ = vala_ccode_block_new ();
            _tmp167_ = _tmp166_;
            vala_ccode_function_set_block (value_copy_function, _tmp167_);
            _vala_ccode_node_unref0 (_tmp167_);
            _tmp168_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_copy");
            _tmp169_ = _tmp168_;
            _tmp170_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp169_);
            _tmp171_ = _tmp170_;
            _vala_ccode_node_unref0 (_tmp169_);
            ccall = _tmp171_;
            _tmp172_ = vala_ccode_identifier_new ("dest");
            _tmp173_ = _tmp172_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp173_);
            _vala_ccode_node_unref0 (_tmp173_);
            _tmp174_ = vala_ccode_identifier_new ("dest_index");
            _tmp175_ = _tmp174_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp175_);
            _vala_ccode_node_unref0 (_tmp175_);
            _tmp176_ = vala_ccode_identifier_new ("src");
            _tmp177_ = _tmp176_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp177_);
            _vala_ccode_node_unref0 (_tmp177_);
            _tmp178_ = vala_ccode_identifier_new ("src_index");
            _tmp179_ = _tmp178_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp179_);
            _vala_ccode_node_unref0 (_tmp179_);
            _tmp180_ = vala_ccode_function_get_block (value_copy_function);
            _tmp181_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) ccall);
            _tmp182_ = _tmp181_;
            vala_ccode_block_add_statement (_tmp180_, (ValaCCodeNode*) _tmp182_);
            _vala_ccode_node_unref0 (_tmp182_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_copy_function);
            vala_dova_object_module_declare_set_value_copy_function (self, ((ValaDovaBaseModule*) self)->cfile);
            vala_dova_object_module_declare_set_value_copy_function (self, ((ValaDovaBaseModule*) self)->header_file);
            _tmp183_ = vala_dova_object_module_create_set_value_copy_function (self, FALSE);
            _tmp184_ = _tmp183_;
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, _tmp184_);
            _vala_ccode_node_unref0 (_tmp184_);
            _tmp185_ = vala_ccode_function_new ("dova_type_value_equals", "bool");
            value_equals_function = _tmp185_;
            _tmp186_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp187_ = _tmp186_;
            vala_ccode_function_add_parameter (value_equals_function, _tmp187_);
            _vala_ccode_node_unref0 (_tmp187_);
            _tmp188_ = vala_ccode_parameter_new ("value", "void *");
            _tmp189_ = _tmp188_;
            vala_ccode_function_add_parameter (value_equals_function, _tmp189_);
            _vala_ccode_node_unref0 (_tmp189_);
            _tmp190_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp191_ = _tmp190_;
            vala_ccode_function_add_parameter (value_equals_function, _tmp191_);
            _vala_ccode_node_unref0 (_tmp191_);
            _tmp192_ = vala_ccode_parameter_new ("other", "void *");
            _tmp193_ = _tmp192_;
            vala_ccode_function_add_parameter (value_equals_function, _tmp193_);
            _vala_ccode_node_unref0 (_tmp193_);
            _tmp194_ = vala_ccode_parameter_new ("other_index", "intptr_t");
            _tmp195_ = _tmp194_;
            vala_ccode_function_add_parameter (value_equals_function, _tmp195_);
            _vala_ccode_node_unref0 (_tmp195_);
            _tmp196_ = vala_ccode_block_new ();
            _tmp197_ = _tmp196_;
            vala_ccode_function_set_block (value_equals_function, _tmp197_);
            _vala_ccode_node_unref0 (_tmp197_);
            _tmp198_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_equals");
            _tmp199_ = _tmp198_;
            _tmp200_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp199_);
            _vala_ccode_node_unref0 (ccall);
            ccall = _tmp200_;
            _vala_ccode_node_unref0 (_tmp199_);
            _tmp201_ = vala_ccode_identifier_new ("value");
            _tmp202_ = _tmp201_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp202_);
            _vala_ccode_node_unref0 (_tmp202_);
            _tmp203_ = vala_ccode_identifier_new ("value_index");
            _tmp204_ = _tmp203_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp204_);
            _vala_ccode_node_unref0 (_tmp204_);
            _tmp205_ = vala_ccode_identifier_new ("other");
            _tmp206_ = _tmp205_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp206_);
            _vala_ccode_node_unref0 (_tmp206_);
            _tmp207_ = vala_ccode_identifier_new ("other_index");
            _tmp208_ = _tmp207_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp208_);
            _vala_ccode_node_unref0 (_tmp208_);
            _tmp209_ = vala_ccode_function_get_block (value_equals_function);
            _tmp210_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
            _tmp211_ = _tmp210_;
            vala_ccode_block_add_statement (_tmp209_, (ValaCCodeNode*) _tmp211_);
            _vala_ccode_node_unref0 (_tmp211_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_equals_function);
            vala_dova_object_module_declare_set_value_equals_function (self, ((ValaDovaBaseModule*) self)->cfile);
            vala_dova_object_module_declare_set_value_equals_function (self, ((ValaDovaBaseModule*) self)->header_file);
            _tmp212_ = vala_dova_object_module_create_set_value_equals_function (self, FALSE);
            _tmp213_ = _tmp212_;
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, _tmp213_);
            _vala_ccode_node_unref0 (_tmp213_);
            _tmp214_ = vala_ccode_function_new ("dova_type_value_hash", "uintptr_t");
            value_hash_function = _tmp214_;
            _tmp215_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp216_ = _tmp215_;
            vala_ccode_function_add_parameter (value_hash_function, _tmp216_);
            _vala_ccode_node_unref0 (_tmp216_);
            _tmp217_ = vala_ccode_parameter_new ("value", "void *");
            _tmp218_ = _tmp217_;
            vala_ccode_function_add_parameter (value_hash_function, _tmp218_);
            _vala_ccode_node_unref0 (_tmp218_);
            _tmp219_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp220_ = _tmp219_;
            vala_ccode_function_add_parameter (value_hash_function, _tmp220_);
            _vala_ccode_node_unref0 (_tmp220_);
            _tmp221_ = vala_ccode_block_new ();
            _tmp222_ = _tmp221_;
            vala_ccode_function_set_block (value_hash_function, _tmp222_);
            _vala_ccode_node_unref0 (_tmp222_);
            _tmp223_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_hash");
            _tmp224_ = _tmp223_;
            _tmp225_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp224_);
            _vala_ccode_node_unref0 (ccall);
            ccall = _tmp225_;
            _vala_ccode_node_unref0 (_tmp224_);
            _tmp226_ = vala_ccode_identifier_new ("value");
            _tmp227_ = _tmp226_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp227_);
            _vala_ccode_node_unref0 (_tmp227_);
            _tmp228_ = vala_ccode_identifier_new ("value_index");
            _tmp229_ = _tmp228_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp229_);
            _vala_ccode_node_unref0 (_tmp229_);
            _tmp230_ = vala_ccode_function_get_block (value_hash_function);
            _tmp231_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
            _tmp232_ = _tmp231_;
            vala_ccode_block_add_statement (_tmp230_, (ValaCCodeNode*) _tmp232_);
            _vala_ccode_node_unref0 (_tmp232_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_hash_function);
            vala_dova_object_module_declare_set_value_hash_function (self, ((ValaDovaBaseModule*) self)->cfile);
            vala_dova_object_module_declare_set_value_hash_function (self, ((ValaDovaBaseModule*) self)->header_file);
            _tmp233_ = vala_dova_object_module_create_set_value_hash_function (self, FALSE);
            _tmp234_ = _tmp233_;
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, _tmp234_);
            _vala_ccode_node_unref0 (_tmp234_);
            _tmp235_ = vala_ccode_function_new ("dova_type_value_to_any", "DovaObject *");
            value_to_any_function = _tmp235_;
            _tmp236_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp237_ = _tmp236_;
            vala_ccode_function_add_parameter (value_to_any_function, _tmp237_);
            _vala_ccode_node_unref0 (_tmp237_);
            _tmp238_ = vala_ccode_parameter_new ("value", "void *");
            _tmp239_ = _tmp238_;
            vala_ccode_function_add_parameter (value_to_any_function, _tmp239_);
            _vala_ccode_node_unref0 (_tmp239_);
            _tmp240_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp241_ = _tmp240_;
            vala_ccode_function_add_parameter (value_to_any_function, _tmp241_);
            _vala_ccode_node_unref0 (_tmp241_);
            _tmp242_ = vala_ccode_block_new ();
            _tmp243_ = _tmp242_;
            vala_ccode_function_set_block (value_to_any_function, _tmp243_);
            _vala_ccode_node_unref0 (_tmp243_);
            _tmp244_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_to_any");
            _tmp245_ = _tmp244_;
            _tmp246_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp245_);
            _vala_ccode_node_unref0 (ccall);
            ccall = _tmp246_;
            _vala_ccode_node_unref0 (_tmp245_);
            _tmp247_ = vala_ccode_identifier_new ("value");
            _tmp248_ = _tmp247_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp248_);
            _vala_ccode_node_unref0 (_tmp248_);
            _tmp249_ = vala_ccode_identifier_new ("value_index");
            _tmp250_ = _tmp249_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp250_);
            _vala_ccode_node_unref0 (_tmp250_);
            _tmp251_ = vala_ccode_function_get_block (value_to_any_function);
            _tmp252_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
            _tmp253_ = _tmp252_;
            vala_ccode_block_add_statement (_tmp251_, (ValaCCodeNode*) _tmp253_);
            _vala_ccode_node_unref0 (_tmp253_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_to_any_function);
            vala_dova_object_module_declare_set_value_to_any_function (self, ((ValaDovaBaseModule*) self)->cfile);
            vala_dova_object_module_declare_set_value_to_any_function (self, ((ValaDovaBaseModule*) self)->header_file);
            _tmp254_ = vala_dova_object_module_create_set_value_to_any_function (self, FALSE);
            _tmp255_ = _tmp254_;
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, _tmp255_);
            _vala_ccode_node_unref0 (_tmp255_);
            _tmp256_ = vala_ccode_function_new ("dova_type_value_from_any", "void");
            value_from_any_function = _tmp256_;
            _tmp257_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp258_ = _tmp257_;
            vala_ccode_function_add_parameter (value_from_any_function, _tmp258_);
            _vala_ccode_node_unref0 (_tmp258_);
            _tmp259_ = vala_ccode_parameter_new ("any_", "any *");
            _tmp260_ = _tmp259_;
            vala_ccode_function_add_parameter (value_from_any_function, _tmp260_);
            _vala_ccode_node_unref0 (_tmp260_);
            _tmp261_ = vala_ccode_parameter_new ("value", "void *");
            _tmp262_ = _tmp261_;
            vala_ccode_function_add_parameter (value_from_any_function, _tmp262_);
            _vala_ccode_node_unref0 (_tmp262_);
            _tmp263_ = vala_ccode_parameter_new ("value_index", "intptr_t");
            _tmp264_ = _tmp263_;
            vala_ccode_function_add_parameter (value_from_any_function, _tmp264_);
            _vala_ccode_node_unref0 (_tmp264_);
            _tmp265_ = vala_ccode_block_new ();
            _tmp266_ = _tmp265_;
            vala_ccode_function_set_block (value_from_any_function, _tmp266_);
            _vala_ccode_node_unref0 (_tmp266_);
            _tmp267_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, "value_from_any");
            _tmp268_ = _tmp267_;
            _tmp269_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp268_);
            _vala_ccode_node_unref0 (ccall);
            ccall = _tmp269_;
            _vala_ccode_node_unref0 (_tmp268_);
            _tmp270_ = vala_ccode_identifier_new ("any_");
            _tmp271_ = _tmp270_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp271_);
            _vala_ccode_node_unref0 (_tmp271_);
            _tmp272_ = vala_ccode_identifier_new ("value");
            _tmp273_ = _tmp272_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp273_);
            _vala_ccode_node_unref0 (_tmp273_);
            _tmp274_ = vala_ccode_identifier_new ("value_index");
            _tmp275_ = _tmp274_;
            vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp275_);
            _vala_ccode_node_unref0 (_tmp275_);
            _tmp276_ = vala_ccode_function_get_block (value_from_any_function);
            _tmp277_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) ccall);
            _tmp278_ = _tmp277_;
            vala_ccode_block_add_statement (_tmp276_, (ValaCCodeNode*) _tmp278_);
            _vala_ccode_node_unref0 (_tmp278_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, value_from_any_function);
            vala_dova_object_module_declare_set_value_from_any_function (self, ((ValaDovaBaseModule*) self)->cfile);
            vala_dova_object_module_declare_set_value_from_any_function (self, ((ValaDovaBaseModule*) self)->header_file);
            _tmp279_ = vala_dova_object_module_create_set_value_from_any_function (self, FALSE);
            _tmp280_ = _tmp279_;
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, _tmp280_);
            _vala_ccode_node_unref0 (_tmp280_);
            _vala_ccode_node_unref0 (value_from_any_function);
            _vala_ccode_node_unref0 (value_to_any_function);
            _vala_ccode_node_unref0 (value_hash_function);
            _vala_ccode_node_unref0 (value_equals_function);
            _vala_ccode_node_unref0 (ccall);
            _vala_ccode_node_unref0 (value_copy_function);
            _vala_ccode_node_unref0 (priv_call);
      }
      vala_dova_base_module_pop_context ((ValaDovaBaseModule*) self);
      _vala_ccode_node_unref0 (type_init_block);
}


static void vala_dova_object_module_real_visit_interface (ValaCodeVisitor* base, ValaInterface* iface) {
      ValaDovaObjectModule * self;
      ValaDovaBaseModuleEmitContext* _tmp0_ = NULL;
      ValaDovaBaseModuleEmitContext* _tmp1_;
      gchar* _tmp2_ = NULL;
      gchar* _tmp3_;
      gchar* _tmp4_ = NULL;
      gchar* _tmp5_;
      ValaCCodeStruct* _tmp6_ = NULL;
      ValaCCodeStruct* _tmp7_;
      ValaCCodeStruct* type_priv_struct;
      gboolean _tmp22_;
      ValaCCodeDeclaration* _tmp34_ = NULL;
      ValaCCodeDeclaration* _cdecl_;
      gchar* _tmp35_ = NULL;
      gchar* _tmp36_;
      gchar* _tmp37_ = NULL;
      gchar* _tmp38_;
      ValaCCodeConstant* _tmp39_ = NULL;
      ValaCCodeConstant* _tmp40_;
      ValaCCodeVariableDeclarator* _tmp41_ = NULL;
      ValaCCodeVariableDeclarator* _tmp42_;
      gchar* _tmp43_ = NULL;
      gchar* _tmp44_;
      gchar* _tmp45_ = NULL;
      gchar* _tmp46_;
      ValaCCodeFunction* _tmp47_ = NULL;
      ValaCCodeFunction* _tmp48_;
      ValaCCodeFunction* type_fun;
      gboolean _tmp49_;
      ValaCCodeBlock* _tmp60_ = NULL;
      ValaCCodeBlock* _tmp61_;
      ValaCCodeBlock* _tmp62_ = NULL;
      ValaCCodeBlock* type_init_block;
      ValaCCodeIdentifier* _tmp63_ = NULL;
      ValaCCodeIdentifier* _tmp64_;
      ValaCCodeFunctionCall* _tmp65_ = NULL;
      ValaCCodeFunctionCall* _tmp66_;
      ValaCCodeFunctionCall* calloc_call;
      ValaCCodeConstant* _tmp67_ = NULL;
      ValaCCodeConstant* _tmp68_;
      gboolean _tmp69_;
      gchar* _tmp78_ = NULL;
      gchar* _tmp79_;
      gchar* _tmp80_ = NULL;
      gchar* _tmp81_;
      ValaCCodeIdentifier* _tmp82_ = NULL;
      ValaCCodeIdentifier* _tmp83_;
      ValaCCodeAssignment* _tmp84_ = NULL;
      ValaCCodeAssignment* _tmp85_;
      ValaCCodeExpressionStatement* _tmp86_ = NULL;
      ValaCCodeExpressionStatement* _tmp87_;
      ValaCCodeIdentifier* _tmp88_ = NULL;
      ValaCCodeIdentifier* _tmp89_;
      ValaCCodeFunctionCall* _tmp90_ = NULL;
      ValaCCodeFunctionCall* _tmp91_;
      ValaCCodeFunctionCall* any_type_init_call;
      gchar* _tmp92_ = NULL;
      gchar* _tmp93_;
      gchar* _tmp94_ = NULL;
      gchar* _tmp95_;
      ValaCCodeIdentifier* _tmp96_ = NULL;
      ValaCCodeIdentifier* _tmp97_;
      ValaCCodeExpressionStatement* _tmp98_ = NULL;
      ValaCCodeExpressionStatement* _tmp99_;
      gchar* _tmp100_ = NULL;
      gchar* _tmp101_;
      gchar* _tmp102_ = NULL;
      gchar* _tmp103_;
      ValaCCodeIdentifier* _tmp104_ = NULL;
      ValaCCodeIdentifier* _tmp105_;
      ValaCCodeFunctionCall* _tmp106_ = NULL;
      ValaCCodeFunctionCall* _tmp107_;
      ValaCCodeFunctionCall* type_init_call;
      gchar* _tmp108_ = NULL;
      gchar* _tmp109_;
      gchar* _tmp110_ = NULL;
      gchar* _tmp111_;
      ValaCCodeIdentifier* _tmp112_ = NULL;
      ValaCCodeIdentifier* _tmp113_;
      ValaCCodeExpressionStatement* _tmp124_ = NULL;
      ValaCCodeExpressionStatement* _tmp125_;
      ValaCCodeBlock* _tmp126_ = NULL;
      gchar* _tmp127_ = NULL;
      gchar* _tmp128_;
      gchar* _tmp129_ = NULL;
      gchar* _tmp130_;
      ValaCCodeIdentifier* _tmp131_ = NULL;
      ValaCCodeIdentifier* _tmp132_;
      ValaCCodeUnaryExpression* _tmp133_ = NULL;
      ValaCCodeUnaryExpression* _tmp134_;
      ValaCCodeIfStatement* _tmp135_ = NULL;
      ValaCCodeIfStatement* _tmp136_;
      ValaCCodeBlock* _tmp137_ = NULL;
      gchar* _tmp138_ = NULL;
      gchar* _tmp139_;
      gchar* _tmp140_ = NULL;
      gchar* _tmp141_;
      ValaCCodeIdentifier* _tmp142_ = NULL;
      ValaCCodeIdentifier* _tmp143_;
      ValaCCodeReturnStatement* _tmp144_ = NULL;
      ValaCCodeReturnStatement* _tmp145_;
      gchar* _tmp146_ = NULL;
      gchar* _tmp147_;
      gchar* _tmp148_ = NULL;
      gchar* _tmp149_;
      ValaCCodeFunction* _tmp150_ = NULL;
      ValaCCodeFunction* _tmp151_;
      ValaCCodeFunction* type_init_fun;
      gboolean _tmp152_;
      ValaCCodeParameter* _tmp153_ = NULL;
      ValaCCodeParameter* _tmp154_;
      ValaCCodeBlock* _tmp165_ = NULL;
      ValaCCodeBlock* _tmp166_;
      ValaCCodeIdentifier* _tmp185_ = NULL;
      ValaCCodeIdentifier* _tmp186_;
      ValaCCodeFunctionCall* _tmp187_ = NULL;
      ValaCCodeFunctionCall* _tmp188_;
      ValaCCodeFunctionCall* vtable_alloc;
      ValaCCodeConstant* _tmp189_ = NULL;
      ValaCCodeConstant* _tmp190_;
      gchar* _tmp191_ = NULL;
      gchar* _tmp192_;
      gchar* _tmp193_ = NULL;
      gchar* _tmp194_;
      ValaCCodeConstant* _tmp195_ = NULL;
      ValaCCodeConstant* _tmp196_;
      gchar* _tmp197_ = NULL;
      gchar* _tmp198_;
      gchar* _tmp199_ = NULL;
      gchar* _tmp200_;
      ValaCCodeIdentifier* _tmp201_ = NULL;
      ValaCCodeIdentifier* _tmp202_;
      ValaCCodeFunctionCall* _tmp203_ = NULL;
      ValaCCodeFunctionCall* _tmp204_;
      ValaCCodeFunctionCall* type_get_call;
      gboolean _tmp215_;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (iface != NULL);
      _tmp0_ = vala_dova_base_module_emit_context_new ((ValaSymbol*) iface);
      _tmp1_ = _tmp0_;
      vala_dova_base_module_push_context ((ValaDovaBaseModule*) self, _tmp1_);
      _vala_dova_base_module_emit_context_unref0 (_tmp1_);
      vala_dova_base_module_generate_interface_declaration ((ValaDovaBaseModule*) self, iface, ((ValaDovaBaseModule*) self)->cfile);
      _tmp2_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) iface, FALSE);
      _tmp3_ = _tmp2_;
      _tmp4_ = g_strdup_printf ("_%sTypePrivate", _tmp3_);
      _tmp5_ = _tmp4_;
      _tmp6_ = vala_ccode_struct_new (_tmp5_);
      _tmp7_ = _tmp6_;
      _g_free0 (_tmp5_);
      _g_free0 (_tmp3_);
      type_priv_struct = _tmp7_;
      {
            ValaList* _tmp8_ = NULL;
            ValaList* _type_param_list;
            gint _tmp9_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp8_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
            _type_param_list = _tmp8_;
            _tmp9_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp9_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp10_ = NULL;
                  ValaTypeParameter* type_param;
                  ValaCCodeDeclaration* _tmp11_ = NULL;
                  ValaCCodeDeclaration* type_param_decl;
                  const gchar* _tmp12_ = NULL;
                  gchar* _tmp13_ = NULL;
                  gchar* _tmp14_;
                  gchar* _tmp15_ = NULL;
                  gchar* _tmp16_;
                  ValaCCodeVariableDeclarator* _tmp17_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp18_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp10_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp10_;
                  _tmp11_ = vala_ccode_declaration_new ("DovaType *");
                  type_param_decl = _tmp11_;
                  _tmp12_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp13_ = g_utf8_strdown (_tmp12_, (gssize) (-1));
                  _tmp14_ = _tmp13_;
                  _tmp15_ = g_strdup_printf ("%s_type", _tmp14_);
                  _tmp16_ = _tmp15_;
                  _tmp17_ = vala_ccode_variable_declarator_new (_tmp16_, NULL, NULL);
                  _tmp18_ = _tmp17_;
                  vala_ccode_declaration_add_declarator (type_param_decl, (ValaCCodeDeclarator*) _tmp18_);
                  _vala_ccode_node_unref0 (_tmp18_);
                  _g_free0 (_tmp16_);
                  _g_free0 (_tmp14_);
                  vala_ccode_struct_add_declaration (type_priv_struct, type_param_decl);
                  _vala_ccode_node_unref0 (type_param_decl);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      {
            ValaList* _tmp19_ = NULL;
            ValaList* _m_list;
            gint _tmp20_;
            gint _m_size;
            gint _m_index;
            _tmp19_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) iface);
            _m_list = _tmp19_;
            _tmp20_ = vala_collection_get_size ((ValaCollection*) _m_list);
            _m_size = _tmp20_;
            _m_index = -1;
            while (TRUE) {
                  gpointer _tmp21_ = NULL;
                  ValaMethod* m;
                  _m_index = _m_index + 1;
                  if (!(_m_index < _m_size)) {
                        break;
                  }
                  _tmp21_ = vala_list_get (_m_list, _m_index);
                  m = (ValaMethod*) _tmp21_;
                  vala_dova_object_module_generate_virtual_method_declaration (self, m, ((ValaDovaBaseModule*) self)->cfile, type_priv_struct);
                  _vala_code_node_unref0 (m);
            }
            _vala_iterable_unref0 (_m_list);
      }
      _tmp22_ = vala_ccode_struct_get_is_empty (type_priv_struct);
      if (!_tmp22_) {
            const gchar* _tmp23_ = NULL;
            gchar* _tmp24_ = NULL;
            gchar* _tmp25_;
            gchar* _tmp26_ = NULL;
            gchar* _tmp27_;
            gchar* _tmp28_ = NULL;
            gchar* _tmp29_;
            ValaCCodeVariableDeclarator* _tmp30_ = NULL;
            ValaCCodeVariableDeclarator* _tmp31_;
            ValaCCodeTypeDefinition* _tmp32_ = NULL;
            ValaCCodeTypeDefinition* _tmp33_;
            _tmp23_ = vala_ccode_struct_get_name (type_priv_struct);
            _tmp24_ = g_strdup_printf ("struct %s", _tmp23_);
            _tmp25_ = _tmp24_;
            _tmp26_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) iface, FALSE);
            _tmp27_ = _tmp26_;
            _tmp28_ = g_strdup_printf ("%sTypePrivate", _tmp27_);
            _tmp29_ = _tmp28_;
            _tmp30_ = vala_ccode_variable_declarator_new (_tmp29_, NULL, NULL);
            _tmp31_ = _tmp30_;
            _tmp32_ = vala_ccode_type_definition_new (_tmp25_, (ValaCCodeDeclarator*) _tmp31_);
            _tmp33_ = _tmp32_;
            vala_ccode_file_add_type_declaration (((ValaDovaBaseModule*) self)->cfile, (ValaCCodeNode*) _tmp33_);
            _vala_ccode_node_unref0 (_tmp33_);
            _vala_ccode_node_unref0 (_tmp31_);
            _g_free0 (_tmp29_);
            _g_free0 (_tmp27_);
            _g_free0 (_tmp25_);
            vala_ccode_file_add_type_definition (((ValaDovaBaseModule*) self)->cfile, (ValaCCodeNode*) type_priv_struct);
      }
      _tmp34_ = vala_ccode_declaration_new ("DovaType *");
      _cdecl_ = _tmp34_;
      _tmp35_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp36_ = _tmp35_;
      _tmp37_ = g_strdup_printf ("%s_type", _tmp36_);
      _tmp38_ = _tmp37_;
      _tmp39_ = vala_ccode_constant_new ("NULL");
      _tmp40_ = _tmp39_;
      _tmp41_ = vala_ccode_variable_declarator_new (_tmp38_, (ValaCCodeExpression*) _tmp40_, NULL);
      _tmp42_ = _tmp41_;
      vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp42_);
      _vala_ccode_node_unref0 (_tmp42_);
      _vala_ccode_node_unref0 (_tmp40_);
      _g_free0 (_tmp38_);
      _g_free0 (_tmp36_);
      vala_ccode_declaration_set_modifiers (_cdecl_, VALA_CCODE_MODIFIERS_STATIC);
      vala_ccode_file_add_type_member_declaration (((ValaDovaBaseModule*) self)->cfile, (ValaCCodeNode*) _cdecl_);
      _tmp43_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp44_ = _tmp43_;
      _tmp45_ = g_strdup_printf ("%s_type_get", _tmp44_);
      _tmp46_ = _tmp45_;
      _tmp47_ = vala_ccode_function_new (_tmp46_, "DovaType *");
      _tmp48_ = _tmp47_;
      _g_free0 (_tmp46_);
      _g_free0 (_tmp44_);
      type_fun = _tmp48_;
      _tmp49_ = vala_symbol_is_internal_symbol ((ValaSymbol*) iface);
      if (_tmp49_) {
            vala_ccode_function_set_modifiers (type_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      {
            ValaList* _tmp50_ = NULL;
            ValaList* _type_param_list;
            gint _tmp51_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp50_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
            _type_param_list = _tmp50_;
            _tmp51_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp51_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp52_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp53_ = NULL;
                  gchar* _tmp54_ = NULL;
                  gchar* _tmp55_;
                  gchar* _tmp56_ = NULL;
                  gchar* _tmp57_;
                  ValaCCodeParameter* _tmp58_ = NULL;
                  ValaCCodeParameter* _tmp59_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp52_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp52_;
                  _tmp53_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp54_ = g_utf8_strdown (_tmp53_, (gssize) (-1));
                  _tmp55_ = _tmp54_;
                  _tmp56_ = g_strdup_printf ("%s_type", _tmp55_);
                  _tmp57_ = _tmp56_;
                  _tmp58_ = vala_ccode_parameter_new (_tmp57_, "DovaType *");
                  _tmp59_ = _tmp58_;
                  vala_ccode_function_add_parameter (type_fun, _tmp59_);
                  _vala_ccode_node_unref0 (_tmp59_);
                  _g_free0 (_tmp57_);
                  _g_free0 (_tmp55_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      _tmp60_ = vala_ccode_block_new ();
      _tmp61_ = _tmp60_;
      vala_ccode_function_set_block (type_fun, _tmp61_);
      _vala_ccode_node_unref0 (_tmp61_);
      _tmp62_ = vala_ccode_block_new ();
      type_init_block = _tmp62_;
      _tmp63_ = vala_ccode_identifier_new ("calloc");
      _tmp64_ = _tmp63_;
      _tmp65_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp64_);
      _tmp66_ = _tmp65_;
      _vala_ccode_node_unref0 (_tmp64_);
      calloc_call = _tmp66_;
      _tmp67_ = vala_ccode_constant_new ("1");
      _tmp68_ = _tmp67_;
      vala_ccode_function_call_add_argument (calloc_call, (ValaCCodeExpression*) _tmp68_);
      _vala_ccode_node_unref0 (_tmp68_);
      _tmp69_ = vala_ccode_struct_get_is_empty (type_priv_struct);
      if (!_tmp69_) {
            gchar* _tmp70_ = NULL;
            gchar* _tmp71_;
            gchar* _tmp72_ = NULL;
            gchar* _tmp73_;
            ValaCCodeConstant* _tmp74_ = NULL;
            ValaCCodeConstant* _tmp75_;
            _tmp70_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) iface, FALSE);
            _tmp71_ = _tmp70_;
            _tmp72_ = g_strdup_printf ("dova_type_get_type_size (dova_type_type_get ()) + sizeof (%sTypePrivat" \
"e)", _tmp71_);
            _tmp73_ = _tmp72_;
            _tmp74_ = vala_ccode_constant_new (_tmp73_);
            _tmp75_ = _tmp74_;
            vala_ccode_function_call_add_argument (calloc_call, (ValaCCodeExpression*) _tmp75_);
            _vala_ccode_node_unref0 (_tmp75_);
            _g_free0 (_tmp73_);
            _g_free0 (_tmp71_);
      } else {
            ValaCCodeConstant* _tmp76_ = NULL;
            ValaCCodeConstant* _tmp77_;
            _tmp76_ = vala_ccode_constant_new ("dova_type_get_type_size (dova_type_type_get ())");
            _tmp77_ = _tmp76_;
            vala_ccode_function_call_add_argument (calloc_call, (ValaCCodeExpression*) _tmp77_);
            _vala_ccode_node_unref0 (_tmp77_);
      }
      _tmp78_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp79_ = _tmp78_;
      _tmp80_ = g_strdup_printf ("%s_type", _tmp79_);
      _tmp81_ = _tmp80_;
      _tmp82_ = vala_ccode_identifier_new (_tmp81_);
      _tmp83_ = _tmp82_;
      _tmp84_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp83_, (ValaCCodeExpression*) calloc_call, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
      _tmp85_ = _tmp84_;
      _tmp86_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp85_);
      _tmp87_ = _tmp86_;
      vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp87_);
      _vala_ccode_node_unref0 (_tmp87_);
      _vala_ccode_node_unref0 (_tmp85_);
      _vala_ccode_node_unref0 (_tmp83_);
      _g_free0 (_tmp81_);
      _g_free0 (_tmp79_);
      _tmp88_ = vala_ccode_identifier_new ("any_type_init");
      _tmp89_ = _tmp88_;
      _tmp90_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp89_);
      _tmp91_ = _tmp90_;
      _vala_ccode_node_unref0 (_tmp89_);
      any_type_init_call = _tmp91_;
      _tmp92_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp93_ = _tmp92_;
      _tmp94_ = g_strdup_printf ("%s_type", _tmp93_);
      _tmp95_ = _tmp94_;
      _tmp96_ = vala_ccode_identifier_new (_tmp95_);
      _tmp97_ = _tmp96_;
      vala_ccode_function_call_add_argument (any_type_init_call, (ValaCCodeExpression*) _tmp97_);
      _vala_ccode_node_unref0 (_tmp97_);
      _g_free0 (_tmp95_);
      _g_free0 (_tmp93_);
      _tmp98_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) any_type_init_call);
      _tmp99_ = _tmp98_;
      vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp99_);
      _vala_ccode_node_unref0 (_tmp99_);
      _tmp100_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp101_ = _tmp100_;
      _tmp102_ = g_strdup_printf ("%s_type_init", _tmp101_);
      _tmp103_ = _tmp102_;
      _tmp104_ = vala_ccode_identifier_new (_tmp103_);
      _tmp105_ = _tmp104_;
      _tmp106_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp105_);
      _tmp107_ = _tmp106_;
      _vala_ccode_node_unref0 (_tmp105_);
      _g_free0 (_tmp103_);
      _g_free0 (_tmp101_);
      type_init_call = _tmp107_;
      _tmp108_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp109_ = _tmp108_;
      _tmp110_ = g_strdup_printf ("%s_type", _tmp109_);
      _tmp111_ = _tmp110_;
      _tmp112_ = vala_ccode_identifier_new (_tmp111_);
      _tmp113_ = _tmp112_;
      vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp113_);
      _vala_ccode_node_unref0 (_tmp113_);
      _g_free0 (_tmp111_);
      _g_free0 (_tmp109_);
      {
            ValaList* _tmp114_ = NULL;
            ValaList* _type_param_list;
            gint _tmp115_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp114_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
            _type_param_list = _tmp114_;
            _tmp115_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp115_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp116_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp117_ = NULL;
                  gchar* _tmp118_ = NULL;
                  gchar* _tmp119_;
                  gchar* _tmp120_ = NULL;
                  gchar* _tmp121_;
                  ValaCCodeIdentifier* _tmp122_ = NULL;
                  ValaCCodeIdentifier* _tmp123_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp116_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp116_;
                  _tmp117_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp118_ = g_utf8_strdown (_tmp117_, (gssize) (-1));
                  _tmp119_ = _tmp118_;
                  _tmp120_ = g_strdup_printf ("%s_type", _tmp119_);
                  _tmp121_ = _tmp120_;
                  _tmp122_ = vala_ccode_identifier_new (_tmp121_);
                  _tmp123_ = _tmp122_;
                  vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp123_);
                  _vala_ccode_node_unref0 (_tmp123_);
                  _g_free0 (_tmp121_);
                  _g_free0 (_tmp119_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      _tmp124_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) type_init_call);
      _tmp125_ = _tmp124_;
      vala_ccode_block_add_statement (type_init_block, (ValaCCodeNode*) _tmp125_);
      _vala_ccode_node_unref0 (_tmp125_);
      _tmp126_ = vala_ccode_function_get_block (type_fun);
      _tmp127_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp128_ = _tmp127_;
      _tmp129_ = g_strdup_printf ("%s_type", _tmp128_);
      _tmp130_ = _tmp129_;
      _tmp131_ = vala_ccode_identifier_new (_tmp130_);
      _tmp132_ = _tmp131_;
      _tmp133_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp132_);
      _tmp134_ = _tmp133_;
      _tmp135_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp134_, (ValaCCodeStatement*) type_init_block, NULL);
      _tmp136_ = _tmp135_;
      vala_ccode_block_add_statement (_tmp126_, (ValaCCodeNode*) _tmp136_);
      _vala_ccode_node_unref0 (_tmp136_);
      _vala_ccode_node_unref0 (_tmp134_);
      _vala_ccode_node_unref0 (_tmp132_);
      _g_free0 (_tmp130_);
      _g_free0 (_tmp128_);
      _tmp137_ = vala_ccode_function_get_block (type_fun);
      _tmp138_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp139_ = _tmp138_;
      _tmp140_ = g_strdup_printf ("%s_type", _tmp139_);
      _tmp141_ = _tmp140_;
      _tmp142_ = vala_ccode_identifier_new (_tmp141_);
      _tmp143_ = _tmp142_;
      _tmp144_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp143_);
      _tmp145_ = _tmp144_;
      vala_ccode_block_add_statement (_tmp137_, (ValaCCodeNode*) _tmp145_);
      _vala_ccode_node_unref0 (_tmp145_);
      _vala_ccode_node_unref0 (_tmp143_);
      _g_free0 (_tmp141_);
      _g_free0 (_tmp139_);
      vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, type_fun);
      _tmp146_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp147_ = _tmp146_;
      _tmp148_ = g_strdup_printf ("%s_type_init", _tmp147_);
      _tmp149_ = _tmp148_;
      _tmp150_ = vala_ccode_function_new (_tmp149_, "void");
      _tmp151_ = _tmp150_;
      _g_free0 (_tmp149_);
      _g_free0 (_tmp147_);
      type_init_fun = _tmp151_;
      _tmp152_ = vala_symbol_is_internal_symbol ((ValaSymbol*) iface);
      if (_tmp152_) {
            vala_ccode_function_set_modifiers (type_init_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      _tmp153_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp154_ = _tmp153_;
      vala_ccode_function_add_parameter (type_init_fun, _tmp154_);
      _vala_ccode_node_unref0 (_tmp154_);
      {
            ValaList* _tmp155_ = NULL;
            ValaList* _type_param_list;
            gint _tmp156_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp155_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
            _type_param_list = _tmp155_;
            _tmp156_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp156_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp157_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp158_ = NULL;
                  gchar* _tmp159_ = NULL;
                  gchar* _tmp160_;
                  gchar* _tmp161_ = NULL;
                  gchar* _tmp162_;
                  ValaCCodeParameter* _tmp163_ = NULL;
                  ValaCCodeParameter* _tmp164_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp157_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp157_;
                  _tmp158_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp159_ = g_utf8_strdown (_tmp158_, (gssize) (-1));
                  _tmp160_ = _tmp159_;
                  _tmp161_ = g_strdup_printf ("%s_type", _tmp160_);
                  _tmp162_ = _tmp161_;
                  _tmp163_ = vala_ccode_parameter_new (_tmp162_, "DovaType *");
                  _tmp164_ = _tmp163_;
                  vala_ccode_function_add_parameter (type_init_fun, _tmp164_);
                  _vala_ccode_node_unref0 (_tmp164_);
                  _g_free0 (_tmp162_);
                  _g_free0 (_tmp160_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      _tmp165_ = vala_ccode_block_new ();
      _tmp166_ = _tmp165_;
      vala_ccode_function_set_block (type_init_fun, _tmp166_);
      _vala_ccode_node_unref0 (_tmp166_);
      {
            ValaList* _tmp167_ = NULL;
            ValaList* _base_type_list;
            gint _tmp168_;
            gint _base_type_size;
            gint _base_type_index;
            _tmp167_ = vala_interface_get_prerequisites (iface);
            _base_type_list = _tmp167_;
            _tmp168_ = vala_collection_get_size ((ValaCollection*) _base_type_list);
            _base_type_size = _tmp168_;
            _base_type_index = -1;
            while (TRUE) {
                  gpointer _tmp169_ = NULL;
                  ValaDataType* base_type;
                  ValaObjectType* _tmp170_;
                  ValaObjectType* object_type;
                  ValaObjectTypeSymbol* _tmp171_ = NULL;
                  _base_type_index = _base_type_index + 1;
                  if (!(_base_type_index < _base_type_size)) {
                        break;
                  }
                  _tmp169_ = vala_list_get (_base_type_list, _base_type_index);
                  base_type = (ValaDataType*) _tmp169_;
                  _tmp170_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE (base_type));
                  object_type = _tmp170_;
                  _tmp171_ = vala_object_type_get_type_symbol (object_type);
                  if (VALA_IS_INTERFACE (_tmp171_)) {
                        ValaObjectTypeSymbol* _tmp172_ = NULL;
                        gchar* _tmp173_ = NULL;
                        gchar* _tmp174_;
                        gchar* _tmp175_ = NULL;
                        gchar* _tmp176_;
                        ValaCCodeIdentifier* _tmp177_ = NULL;
                        ValaCCodeIdentifier* _tmp178_;
                        ValaCCodeFunctionCall* _tmp179_ = NULL;
                        ValaCCodeIdentifier* _tmp180_ = NULL;
                        ValaCCodeIdentifier* _tmp181_;
                        ValaCCodeBlock* _tmp182_ = NULL;
                        ValaCCodeExpressionStatement* _tmp183_ = NULL;
                        ValaCCodeExpressionStatement* _tmp184_;
                        _tmp172_ = vala_object_type_get_type_symbol (object_type);
                        _tmp173_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) _tmp172_, NULL);
                        _tmp174_ = _tmp173_;
                        _tmp175_ = g_strdup_printf ("%s_type_init", _tmp174_);
                        _tmp176_ = _tmp175_;
                        _tmp177_ = vala_ccode_identifier_new (_tmp176_);
                        _tmp178_ = _tmp177_;
                        _tmp179_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp178_);
                        _vala_ccode_node_unref0 (type_init_call);
                        type_init_call = _tmp179_;
                        _vala_ccode_node_unref0 (_tmp178_);
                        _g_free0 (_tmp176_);
                        _g_free0 (_tmp174_);
                        _tmp180_ = vala_ccode_identifier_new ("type");
                        _tmp181_ = _tmp180_;
                        vala_ccode_function_call_add_argument (type_init_call, (ValaCCodeExpression*) _tmp181_);
                        _vala_ccode_node_unref0 (_tmp181_);
                        _tmp182_ = vala_ccode_function_get_block (type_init_fun);
                        _tmp183_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) type_init_call);
                        _tmp184_ = _tmp183_;
                        vala_ccode_block_add_statement (_tmp182_, (ValaCCodeNode*) _tmp184_);
                        _vala_ccode_node_unref0 (_tmp184_);
                  }
                  _vala_code_node_unref0 (object_type);
                  _vala_code_node_unref0 (base_type);
            }
            _vala_iterable_unref0 (_base_type_list);
      }
      _tmp185_ = vala_ccode_identifier_new ("calloc");
      _tmp186_ = _tmp185_;
      _tmp187_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp186_);
      _tmp188_ = _tmp187_;
      _vala_ccode_node_unref0 (_tmp186_);
      vtable_alloc = _tmp188_;
      _tmp189_ = vala_ccode_constant_new ("1");
      _tmp190_ = _tmp189_;
      vala_ccode_function_call_add_argument (vtable_alloc, (ValaCCodeExpression*) _tmp190_);
      _vala_ccode_node_unref0 (_tmp190_);
      _tmp191_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) iface, FALSE);
      _tmp192_ = _tmp191_;
      _tmp193_ = g_strdup_printf ("sizeof (%sTypePrivate)", _tmp192_);
      _tmp194_ = _tmp193_;
      _tmp195_ = vala_ccode_constant_new (_tmp194_);
      _tmp196_ = _tmp195_;
      vala_ccode_function_call_add_argument (vtable_alloc, (ValaCCodeExpression*) _tmp196_);
      _vala_ccode_node_unref0 (_tmp196_);
      _g_free0 (_tmp194_);
      _g_free0 (_tmp192_);
      _tmp197_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp198_ = _tmp197_;
      _tmp199_ = g_strdup_printf ("%s_type_get", _tmp198_);
      _tmp200_ = _tmp199_;
      _tmp201_ = vala_ccode_identifier_new (_tmp200_);
      _tmp202_ = _tmp201_;
      _tmp203_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp202_);
      _tmp204_ = _tmp203_;
      _vala_ccode_node_unref0 (_tmp202_);
      _g_free0 (_tmp200_);
      _g_free0 (_tmp198_);
      type_get_call = _tmp204_;
      {
            ValaList* _tmp205_ = NULL;
            ValaList* _type_param_list;
            gint _tmp206_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp205_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
            _type_param_list = _tmp205_;
            _tmp206_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp206_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp207_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp208_ = NULL;
                  gchar* _tmp209_ = NULL;
                  gchar* _tmp210_;
                  gchar* _tmp211_ = NULL;
                  gchar* _tmp212_;
                  ValaCCodeIdentifier* _tmp213_ = NULL;
                  ValaCCodeIdentifier* _tmp214_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp207_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp207_;
                  _tmp208_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp209_ = g_utf8_strdown (_tmp208_, (gssize) (-1));
                  _tmp210_ = _tmp209_;
                  _tmp211_ = g_strdup_printf ("%s_type", _tmp210_);
                  _tmp212_ = _tmp211_;
                  _tmp213_ = vala_ccode_identifier_new (_tmp212_);
                  _tmp214_ = _tmp213_;
                  vala_ccode_function_call_add_argument (type_get_call, (ValaCCodeExpression*) _tmp214_);
                  _vala_ccode_node_unref0 (_tmp214_);
                  _g_free0 (_tmp212_);
                  _g_free0 (_tmp210_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      _tmp215_ = vala_ccode_struct_get_is_empty (type_priv_struct);
      if (!_tmp215_) {
            ValaCCodeIdentifier* _tmp216_ = NULL;
            ValaCCodeIdentifier* _tmp217_;
            ValaCCodeFunctionCall* _tmp218_ = NULL;
            ValaCCodeFunctionCall* _tmp219_;
            ValaCCodeFunctionCall* add_interface_call;
            ValaCCodeIdentifier* _tmp220_ = NULL;
            ValaCCodeIdentifier* _tmp221_;
            ValaCCodeBlock* _tmp222_ = NULL;
            ValaCCodeExpressionStatement* _tmp223_ = NULL;
            ValaCCodeExpressionStatement* _tmp224_;
            _tmp216_ = vala_ccode_identifier_new ("dova_type_add_interface");
            _tmp217_ = _tmp216_;
            _tmp218_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp217_);
            _tmp219_ = _tmp218_;
            _vala_ccode_node_unref0 (_tmp217_);
            add_interface_call = _tmp219_;
            _tmp220_ = vala_ccode_identifier_new ("type");
            _tmp221_ = _tmp220_;
            vala_ccode_function_call_add_argument (add_interface_call, (ValaCCodeExpression*) _tmp221_);
            _vala_ccode_node_unref0 (_tmp221_);
            vala_ccode_function_call_add_argument (add_interface_call, (ValaCCodeExpression*) type_get_call);
            vala_ccode_function_call_add_argument (add_interface_call, (ValaCCodeExpression*) vtable_alloc);
            _tmp222_ = vala_ccode_function_get_block (type_init_fun);
            _tmp223_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) add_interface_call);
            _tmp224_ = _tmp223_;
            vala_ccode_block_add_statement (_tmp222_, (ValaCCodeNode*) _tmp224_);
            _vala_ccode_node_unref0 (_tmp224_);
            _vala_ccode_node_unref0 (add_interface_call);
      }
      vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, type_init_fun);
      vala_code_node_accept_children ((ValaCodeNode*) iface, (ValaCodeVisitor*) self);
      vala_dova_base_module_pop_context ((ValaDovaBaseModule*) self);
      _vala_ccode_node_unref0 (type_get_call);
      _vala_ccode_node_unref0 (vtable_alloc);
      _vala_ccode_node_unref0 (type_init_fun);
      _vala_ccode_node_unref0 (type_init_call);
      _vala_ccode_node_unref0 (any_type_init_call);
      _vala_ccode_node_unref0 (calloc_call);
      _vala_ccode_node_unref0 (type_init_block);
      _vala_ccode_node_unref0 (type_fun);
      _vala_ccode_node_unref0 (_cdecl_);
      _vala_ccode_node_unref0 (type_priv_struct);
}


static void vala_dova_object_module_real_generate_property_accessor_declaration (ValaDovaBaseModule* base, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space) {
      ValaDovaObjectModule * self;
      ValaProperty* _tmp0_ = NULL;
      gchar* _tmp1_ = NULL;
      gchar* _tmp2_;
      gboolean _tmp3_;
      gboolean _tmp4_;
      ValaProperty* _tmp5_ = NULL;
      ValaProperty* _tmp6_;
      ValaProperty* prop;
      ValaDataType* _tmp7_ = NULL;
      ValaCCodeFunction* function = NULL;
      gboolean _tmp8_;
      ValaMemberBinding _tmp18_;
      gboolean _tmp30_;
      gboolean _tmp36_ = FALSE;
      gboolean _tmp37_;
      gboolean _tmp40_ = FALSE;
      gboolean _tmp41_;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (acc != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_property_accessor_get_prop (acc);
      _tmp1_ = vala_property_accessor_get_cname (acc);
      _tmp2_ = _tmp1_;
      _tmp3_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) _tmp0_, _tmp2_);
      _tmp4_ = _tmp3_;
      _g_free0 (_tmp2_);
      if (_tmp4_) {
            return;
      }
      _tmp5_ = vala_property_accessor_get_prop (acc);
      _tmp6_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp5_));
      prop = _tmp6_;
      _tmp7_ = vala_property_accessor_get_value_type (acc);
      vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, _tmp7_, decl_space);
      _tmp8_ = vala_property_accessor_get_readable (acc);
      if (_tmp8_) {
            gchar* _tmp9_ = NULL;
            gchar* _tmp10_;
            ValaDataType* _tmp11_ = NULL;
            gchar* _tmp12_ = NULL;
            gchar* _tmp13_;
            ValaCCodeFunction* _tmp14_ = NULL;
            _tmp9_ = vala_property_accessor_get_cname (acc);
            _tmp10_ = _tmp9_;
            _tmp11_ = vala_property_accessor_get_value_type (acc);
            _tmp12_ = vala_data_type_get_cname (_tmp11_);
            _tmp13_ = _tmp12_;
            _tmp14_ = vala_ccode_function_new (_tmp10_, _tmp13_);
            _vala_ccode_node_unref0 (function);
            function = _tmp14_;
            _g_free0 (_tmp13_);
            _g_free0 (_tmp10_);
      } else {
            gchar* _tmp15_ = NULL;
            gchar* _tmp16_;
            ValaCCodeFunction* _tmp17_ = NULL;
            _tmp15_ = vala_property_accessor_get_cname (acc);
            _tmp16_ = _tmp15_;
            _tmp17_ = vala_ccode_function_new (_tmp16_, "void");
            _vala_ccode_node_unref0 (function);
            function = _tmp17_;
            _g_free0 (_tmp16_);
      }
      _tmp18_ = vala_property_get_binding (prop);
      if (_tmp18_ == VALA_MEMBER_BINDING_INSTANCE) {
            ValaDataType* this_type = NULL;
            ValaSymbol* _tmp19_ = NULL;
            gchar* _tmp26_ = NULL;
            gchar* _tmp27_;
            ValaCCodeParameter* _tmp28_ = NULL;
            ValaCCodeParameter* _tmp29_;
            ValaCCodeParameter* cselfparam;
            _tmp19_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            if (VALA_IS_STRUCT (_tmp19_)) {
                  ValaSymbol* _tmp20_ = NULL;
                  ValaStruct* _tmp21_;
                  ValaStruct* st;
                  ValaDataType* _tmp22_ = NULL;
                  _tmp20_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
                  _tmp21_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp20_));
                  st = _tmp21_;
                  _tmp22_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaTypeSymbol*) st);
                  _vala_code_node_unref0 (this_type);
                  this_type = _tmp22_;
                  _vala_code_node_unref0 (st);
            } else {
                  ValaSymbol* _tmp23_ = NULL;
                  ValaObjectTypeSymbol* _tmp24_;
                  ValaObjectTypeSymbol* t;
                  ValaObjectType* _tmp25_ = NULL;
                  _tmp23_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
                  _tmp24_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE_SYMBOL (_tmp23_));
                  t = _tmp24_;
                  _tmp25_ = vala_object_type_new (t);
                  _vala_code_node_unref0 (this_type);
                  this_type = (ValaDataType*) _tmp25_;
                  _vala_code_node_unref0 (t);
            }
            vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, this_type, decl_space);
            _tmp26_ = vala_data_type_get_cname (this_type);
            _tmp27_ = _tmp26_;
            _tmp28_ = vala_ccode_parameter_new ("this", _tmp27_);
            _tmp29_ = _tmp28_;
            _g_free0 (_tmp27_);
            cselfparam = _tmp29_;
            vala_ccode_function_add_parameter (function, cselfparam);
            _vala_ccode_node_unref0 (cselfparam);
            _vala_code_node_unref0 (this_type);
      }
      _tmp30_ = vala_property_accessor_get_writable (acc);
      if (_tmp30_) {
            ValaDataType* _tmp31_ = NULL;
            gchar* _tmp32_ = NULL;
            gchar* _tmp33_;
            ValaCCodeParameter* _tmp34_ = NULL;
            ValaCCodeParameter* _tmp35_;
            ValaCCodeParameter* cvalueparam;
            _tmp31_ = vala_property_accessor_get_value_type (acc);
            _tmp32_ = vala_data_type_get_cname (_tmp31_);
            _tmp33_ = _tmp32_;
            _tmp34_ = vala_ccode_parameter_new ("value", _tmp33_);
            _tmp35_ = _tmp34_;
            _g_free0 (_tmp33_);
            cvalueparam = _tmp35_;
            vala_ccode_function_add_parameter (function, cvalueparam);
            _vala_ccode_node_unref0 (cvalueparam);
      }
      _tmp37_ = vala_symbol_is_internal_symbol ((ValaSymbol*) prop);
      if (_tmp37_) {
            _tmp36_ = TRUE;
      } else {
            gboolean _tmp38_;
            _tmp38_ = vala_symbol_is_internal_symbol ((ValaSymbol*) acc);
            _tmp36_ = _tmp38_;
      }
      if (_tmp36_) {
            ValaCCodeModifiers _tmp39_;
            _tmp39_ = vala_ccode_function_get_modifiers (function);
            vala_ccode_function_set_modifiers (function, _tmp39_ | VALA_CCODE_MODIFIERS_STATIC);
      }
      vala_ccode_file_add_function_declaration (decl_space, function);
      _tmp41_ = vala_property_get_is_abstract (prop);
      if (_tmp41_) {
            _tmp40_ = TRUE;
      } else {
            gboolean _tmp42_;
            _tmp42_ = vala_property_get_is_virtual (prop);
            _tmp40_ = _tmp42_;
      }
      if (_tmp40_) {
            ValaSymbol* _tmp43_ = NULL;
            gchar* _tmp44_ = NULL;
            gchar* _tmp45_;
            gchar* _tmp46_ = NULL;
            gchar* _tmp47_;
            gchar* param_list;
            gboolean _tmp48_;
            gchar* _tmp54_;
            const gchar* _tmp55_ = NULL;
            gboolean _tmp56_;
            ValaSymbol* _tmp57_ = NULL;
            gchar* _tmp58_ = NULL;
            gchar* _tmp59_;
            const gchar* _tmp60_ = NULL;
            gchar* _tmp61_ = NULL;
            gchar* _tmp62_;
            ValaCCodeFunction* _tmp63_ = NULL;
            ValaCCodeFunction* _tmp64_;
            ValaCCodeFunction* override_func;
            ValaCCodeParameter* _tmp65_ = NULL;
            ValaCCodeParameter* _tmp66_;
            gchar* _tmp67_ = NULL;
            gboolean _tmp68_;
            gchar* _tmp72_ = NULL;
            gchar* _tmp73_;
            ValaCCodeParameter* _tmp74_ = NULL;
            ValaCCodeParameter* _tmp75_;
            _tmp43_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp44_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_OBJECT_TYPE_SYMBOL (_tmp43_), FALSE);
            _tmp45_ = _tmp44_;
            _tmp46_ = g_strdup_printf ("(%s *this", _tmp45_);
            _tmp47_ = _tmp46_;
            _g_free0 (_tmp45_);
            param_list = _tmp47_;
            _tmp48_ = vala_property_accessor_get_readable (acc);
            if (!_tmp48_) {
                  gchar* _tmp49_;
                  ValaDataType* _tmp50_ = NULL;
                  gchar* _tmp51_ = NULL;
                  gchar* _tmp52_;
                  gchar* _tmp53_;
                  _tmp49_ = g_strconcat (param_list, ", ", NULL);
                  _g_free0 (param_list);
                  param_list = _tmp49_;
                  _tmp50_ = vala_property_accessor_get_value_type (acc);
                  _tmp51_ = vala_data_type_get_cname (_tmp50_);
                  _tmp52_ = _tmp51_;
                  _tmp53_ = g_strconcat (param_list, _tmp52_, NULL);
                  _g_free0 (param_list);
                  param_list = _tmp53_;
                  _g_free0 (_tmp52_);
            }
            _tmp54_ = g_strconcat (param_list, ")", NULL);
            _g_free0 (param_list);
            param_list = _tmp54_;
            _tmp56_ = vala_property_accessor_get_readable (acc);
            if (_tmp56_) {
                  _tmp55_ = "get";
            } else {
                  _tmp55_ = "set";
            }
            _tmp57_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp58_ = vala_symbol_get_lower_case_cprefix (_tmp57_);
            _tmp59_ = _tmp58_;
            _tmp60_ = vala_symbol_get_name ((ValaSymbol*) prop);
            _tmp61_ = g_strdup_printf ("%soverride_%s_%s", _tmp59_, _tmp55_, _tmp60_);
            _tmp62_ = _tmp61_;
            _tmp63_ = vala_ccode_function_new (_tmp62_, "void");
            _tmp64_ = _tmp63_;
            _g_free0 (_tmp62_);
            _g_free0 (_tmp59_);
            override_func = _tmp64_;
            _tmp65_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp66_ = _tmp65_;
            vala_ccode_function_add_parameter (override_func, _tmp66_);
            _vala_ccode_node_unref0 (_tmp66_);
            _tmp68_ = vala_property_accessor_get_readable (acc);
            if (_tmp68_) {
                  ValaDataType* _tmp69_ = NULL;
                  gchar* _tmp70_ = NULL;
                  _tmp69_ = vala_property_accessor_get_value_type (acc);
                  _tmp70_ = vala_data_type_get_cname (_tmp69_);
                  _g_free0 (_tmp67_);
                  _tmp67_ = _tmp70_;
            } else {
                  gchar* _tmp71_;
                  _tmp71_ = g_strdup ("void");
                  _g_free0 (_tmp67_);
                  _tmp67_ = _tmp71_;
            }
            _tmp72_ = g_strdup_printf ("(*function) %s", param_list);
            _tmp73_ = _tmp72_;
            _tmp74_ = vala_ccode_parameter_new (_tmp73_, _tmp67_);
            _tmp75_ = _tmp74_;
            vala_ccode_function_add_parameter (override_func, _tmp75_);
            _vala_ccode_node_unref0 (_tmp75_);
            _g_free0 (_tmp73_);
            vala_ccode_file_add_function_declaration (decl_space, override_func);
            _g_free0 (_tmp67_);
            _vala_ccode_node_unref0 (override_func);
            _g_free0 (param_list);
      }
      _vala_ccode_node_unref0 (function);
      _vala_code_node_unref0 (prop);
}


static void vala_dova_object_module_real_visit_property_accessor (ValaCodeVisitor* base, ValaPropertyAccessor* acc) {
      ValaDovaObjectModule * self;
      ValaDovaBaseModuleEmitContext* _tmp0_ = NULL;
      ValaDovaBaseModuleEmitContext* _tmp1_;
      ValaProperty* _tmp2_ = NULL;
      ValaProperty* _tmp3_;
      ValaProperty* prop;
      gboolean _tmp4_ = FALSE;
      gboolean _tmp5_ = FALSE;
      gboolean _tmp6_;
      ValaDataType* this_type = NULL;
      ValaSymbol* _tmp16_ = NULL;
      gchar* _tmp23_ = NULL;
      gchar* _tmp24_;
      ValaCCodeParameter* _tmp25_ = NULL;
      ValaCCodeParameter* _tmp26_;
      ValaCCodeParameter* cselfparam;
      ValaDataType* _tmp27_ = NULL;
      gchar* _tmp28_ = NULL;
      gchar* _tmp29_;
      ValaCCodeParameter* _tmp30_ = NULL;
      ValaCCodeParameter* _tmp31_;
      ValaCCodeParameter* cvalueparam;
      gchar* _tmp32_ = NULL;
      gchar* cname;
      gboolean _tmp33_ = FALSE;
      gboolean _tmp34_;
      gboolean _tmp132_;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (acc != NULL);
      _tmp0_ = vala_dova_base_module_emit_context_new ((ValaSymbol*) acc);
      _tmp1_ = _tmp0_;
      vala_dova_base_module_push_context ((ValaDovaBaseModule*) self, _tmp1_);
      _vala_dova_base_module_emit_context_unref0 (_tmp1_);
      _tmp2_ = vala_property_accessor_get_prop (acc);
      _tmp3_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp2_));
      prop = _tmp3_;
      _tmp6_ = vala_property_get_is_abstract (prop);
      if (_tmp6_) {
            _tmp5_ = TRUE;
      } else {
            gboolean _tmp7_;
            _tmp7_ = vala_property_get_is_virtual (prop);
            _tmp5_ = _tmp7_;
      }
      if (_tmp5_) {
            _tmp4_ = TRUE;
      } else {
            gboolean _tmp8_ = FALSE;
            ValaProperty* _tmp9_ = NULL;
            _tmp9_ = vala_property_get_base_property (prop);
            if (_tmp9_ == NULL) {
                  ValaProperty* _tmp10_ = NULL;
                  _tmp10_ = vala_property_get_base_interface_property (prop);
                  _tmp8_ = _tmp10_ == NULL;
            } else {
                  _tmp8_ = FALSE;
            }
            _tmp4_ = _tmp8_;
      }
      if (_tmp4_) {
            gboolean _tmp11_ = FALSE;
            gboolean _tmp12_;
            vala_dova_base_module_generate_property_accessor_declaration ((ValaDovaBaseModule*) self, acc, ((ValaDovaBaseModule*) self)->cfile);
            _tmp12_ = vala_symbol_is_internal_symbol ((ValaSymbol*) prop);
            if (!_tmp12_) {
                  gboolean _tmp13_ = FALSE;
                  ValaSymbolAccessibility _tmp14_;
                  _tmp14_ = vala_symbol_get_access ((ValaSymbol*) acc);
                  if (_tmp14_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
                        _tmp13_ = TRUE;
                  } else {
                        ValaSymbolAccessibility _tmp15_;
                        _tmp15_ = vala_symbol_get_access ((ValaSymbol*) acc);
                        _tmp13_ = _tmp15_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED;
                  }
                  _tmp11_ = _tmp13_;
            } else {
                  _tmp11_ = FALSE;
            }
            if (_tmp11_) {
                  vala_dova_base_module_generate_property_accessor_declaration ((ValaDovaBaseModule*) self, acc, ((ValaDovaBaseModule*) self)->header_file);
            }
      }
      _tmp16_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
      if (VALA_IS_STRUCT (_tmp16_)) {
            ValaSymbol* _tmp17_ = NULL;
            ValaStruct* _tmp18_;
            ValaStruct* st;
            ValaDataType* _tmp19_ = NULL;
            _tmp17_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp18_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp17_));
            st = _tmp18_;
            _tmp19_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaTypeSymbol*) st);
            _vala_code_node_unref0 (this_type);
            this_type = _tmp19_;
            _vala_code_node_unref0 (st);
      } else {
            ValaSymbol* _tmp20_ = NULL;
            ValaObjectTypeSymbol* _tmp21_;
            ValaObjectTypeSymbol* t;
            ValaObjectType* _tmp22_ = NULL;
            _tmp20_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp21_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE_SYMBOL (_tmp20_));
            t = _tmp21_;
            _tmp22_ = vala_object_type_new (t);
            _vala_code_node_unref0 (this_type);
            this_type = (ValaDataType*) _tmp22_;
            _vala_code_node_unref0 (t);
      }
      _tmp23_ = vala_data_type_get_cname (this_type);
      _tmp24_ = _tmp23_;
      _tmp25_ = vala_ccode_parameter_new ("this", _tmp24_);
      _tmp26_ = _tmp25_;
      _g_free0 (_tmp24_);
      cselfparam = _tmp26_;
      _tmp27_ = vala_property_accessor_get_value_type (acc);
      _tmp28_ = vala_data_type_get_cname (_tmp27_);
      _tmp29_ = _tmp28_;
      _tmp30_ = vala_ccode_parameter_new ("value", _tmp29_);
      _tmp31_ = _tmp30_;
      _g_free0 (_tmp29_);
      cvalueparam = _tmp31_;
      _tmp32_ = vala_property_accessor_get_cname (acc);
      cname = _tmp32_;
      _tmp34_ = vala_property_get_is_abstract (prop);
      if (_tmp34_) {
            _tmp33_ = TRUE;
      } else {
            gboolean _tmp35_;
            _tmp35_ = vala_property_get_is_virtual (prop);
            _tmp33_ = _tmp35_;
      }
      if (_tmp33_) {
            ValaCCodeFunction* function = NULL;
            gboolean _tmp36_;
            gboolean _tmp46_;
            gboolean _tmp47_ = FALSE;
            gboolean _tmp48_ = FALSE;
            gboolean _tmp49_;
            ValaSymbol* _tmp55_ = NULL;
            ValaCCodeIdentifier* _tmp56_ = NULL;
            ValaCCodeIdentifier* _tmp57_;
            ValaCCodeExpression* _tmp58_ = NULL;
            ValaCCodeExpression* _tmp59_;
            ValaCCodeExpression* _tmp60_ = NULL;
            ValaCCodeExpression* _tmp61_;
            ValaCCodeExpression* vcast;
            gboolean _tmp62_;
            ValaSymbol* _tmp85_ = NULL;
            gchar* _tmp86_ = NULL;
            gchar* _tmp87_;
            gchar* _tmp88_ = NULL;
            gchar* _tmp89_;
            gchar* param_list;
            gboolean _tmp90_;
            gchar* _tmp96_;
            const gchar* _tmp97_ = NULL;
            gboolean _tmp98_;
            ValaSymbol* _tmp99_ = NULL;
            gchar* _tmp100_ = NULL;
            gchar* _tmp101_;
            const gchar* _tmp102_ = NULL;
            gchar* _tmp103_ = NULL;
            gchar* _tmp104_;
            ValaCCodeFunction* _tmp105_ = NULL;
            ValaCCodeFunction* _tmp106_;
            ValaCCodeFunction* override_func;
            ValaCCodeParameter* _tmp107_ = NULL;
            ValaCCodeParameter* _tmp108_;
            gchar* _tmp109_ = NULL;
            gboolean _tmp110_;
            gchar* _tmp114_ = NULL;
            gchar* _tmp115_;
            ValaCCodeParameter* _tmp116_ = NULL;
            ValaCCodeParameter* _tmp117_;
            ValaSymbol* _tmp118_ = NULL;
            ValaCCodeIdentifier* _tmp119_ = NULL;
            ValaCCodeIdentifier* _tmp120_;
            ValaCCodeExpression* _tmp121_ = NULL;
            const gchar* _tmp122_ = NULL;
            gboolean _tmp123_;
            ValaCCodeFunction* _tmp124_ = NULL;
            const gchar* _tmp125_ = NULL;
            gchar* _tmp126_ = NULL;
            gchar* _tmp127_;
            ValaCCodeMemberAccess* _tmp128_ = NULL;
            ValaCCodeMemberAccess* _tmp129_;
            ValaCCodeIdentifier* _tmp130_ = NULL;
            ValaCCodeIdentifier* _tmp131_;
            _tmp36_ = vala_property_accessor_get_readable (acc);
            if (_tmp36_) {
                  gchar* _tmp37_ = NULL;
                  gchar* _tmp38_;
                  ValaDataType* _tmp39_ = NULL;
                  gchar* _tmp40_ = NULL;
                  gchar* _tmp41_;
                  ValaCCodeFunction* _tmp42_ = NULL;
                  _tmp37_ = vala_property_accessor_get_cname (acc);
                  _tmp38_ = _tmp37_;
                  _tmp39_ = vala_dova_base_module_get_current_return_type ((ValaDovaBaseModule*) self);
                  _tmp40_ = vala_data_type_get_cname (_tmp39_);
                  _tmp41_ = _tmp40_;
                  _tmp42_ = vala_ccode_function_new (_tmp38_, _tmp41_);
                  _vala_ccode_node_unref0 (function);
                  function = _tmp42_;
                  _g_free0 (_tmp41_);
                  _g_free0 (_tmp38_);
            } else {
                  gchar* _tmp43_ = NULL;
                  gchar* _tmp44_;
                  ValaCCodeFunction* _tmp45_ = NULL;
                  _tmp43_ = vala_property_accessor_get_cname (acc);
                  _tmp44_ = _tmp43_;
                  _tmp45_ = vala_ccode_function_new (_tmp44_, "void");
                  _vala_ccode_node_unref0 (function);
                  function = _tmp45_;
                  _g_free0 (_tmp44_);
            }
            vala_ccode_function_add_parameter (function, cselfparam);
            _tmp46_ = vala_property_accessor_get_writable (acc);
            if (_tmp46_) {
                  vala_ccode_function_add_parameter (function, cvalueparam);
            }
            _tmp49_ = vala_symbol_is_internal_symbol ((ValaSymbol*) prop);
            if (_tmp49_) {
                  _tmp48_ = TRUE;
            } else {
                  gboolean _tmp50_ = FALSE;
                  gboolean _tmp51_;
                  _tmp51_ = vala_property_accessor_get_readable (acc);
                  if (_tmp51_) {
                        _tmp50_ = TRUE;
                  } else {
                        gboolean _tmp52_;
                        _tmp52_ = vala_property_accessor_get_writable (acc);
                        _tmp50_ = _tmp52_;
                  }
                  _tmp48_ = !_tmp50_;
            }
            if (_tmp48_) {
                  _tmp47_ = TRUE;
            } else {
                  gboolean _tmp53_;
                  _tmp53_ = vala_symbol_is_internal_symbol ((ValaSymbol*) acc);
                  _tmp47_ = _tmp53_;
            }
            if (_tmp47_) {
                  ValaCCodeModifiers _tmp54_;
                  _tmp54_ = vala_ccode_function_get_modifiers (function);
                  vala_ccode_function_set_modifiers (function, _tmp54_ | VALA_CCODE_MODIFIERS_STATIC);
            }
            vala_dova_base_module_push_function ((ValaDovaBaseModule*) self, function);
            _tmp55_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp56_ = vala_ccode_identifier_new ("this");
            _tmp57_ = _tmp56_;
            _tmp58_ = vala_dova_object_module_get_type_from_instance (self, (ValaCCodeExpression*) _tmp57_);
            _tmp59_ = _tmp58_;
            _tmp60_ = vala_dova_base_module_get_type_private_from_type ((ValaDovaBaseModule*) self, VALA_OBJECT_TYPE_SYMBOL (_tmp55_), _tmp59_);
            _tmp61_ = _tmp60_;
            _vala_ccode_node_unref0 (_tmp59_);
            _vala_ccode_node_unref0 (_tmp57_);
            vcast = _tmp61_;
            _tmp62_ = vala_property_accessor_get_readable (acc);
            if (_tmp62_) {
                  const gchar* _tmp63_ = NULL;
                  gchar* _tmp64_ = NULL;
                  gchar* _tmp65_;
                  ValaCCodeMemberAccess* _tmp66_ = NULL;
                  ValaCCodeMemberAccess* _tmp67_;
                  ValaCCodeFunctionCall* _tmp68_ = NULL;
                  ValaCCodeFunctionCall* _tmp69_;
                  ValaCCodeFunctionCall* vcall;
                  ValaCCodeIdentifier* _tmp70_ = NULL;
                  ValaCCodeIdentifier* _tmp71_;
                  ValaCCodeFunction* _tmp72_ = NULL;
                  _tmp63_ = vala_symbol_get_name ((ValaSymbol*) prop);
                  _tmp64_ = g_strdup_printf ("get_%s", _tmp63_);
                  _tmp65_ = _tmp64_;
                  _tmp66_ = vala_ccode_member_access_new_pointer (vcast, _tmp65_);
                  _tmp67_ = _tmp66_;
                  _tmp68_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp67_);
                  _tmp69_ = _tmp68_;
                  _vala_ccode_node_unref0 (_tmp67_);
                  _g_free0 (_tmp65_);
                  vcall = _tmp69_;
                  _tmp70_ = vala_ccode_identifier_new ("this");
                  _tmp71_ = _tmp70_;
                  vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp71_);
                  _vala_ccode_node_unref0 (_tmp71_);
                  _tmp72_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_return (_tmp72_, (ValaCCodeExpression*) vcall);
                  _vala_ccode_node_unref0 (vcall);
            } else {
                  const gchar* _tmp73_ = NULL;
                  gchar* _tmp74_ = NULL;
                  gchar* _tmp75_;
                  ValaCCodeMemberAccess* _tmp76_ = NULL;
                  ValaCCodeMemberAccess* _tmp77_;
                  ValaCCodeFunctionCall* _tmp78_ = NULL;
                  ValaCCodeFunctionCall* _tmp79_;
                  ValaCCodeFunctionCall* vcall;
                  ValaCCodeIdentifier* _tmp80_ = NULL;
                  ValaCCodeIdentifier* _tmp81_;
                  ValaCCodeIdentifier* _tmp82_ = NULL;
                  ValaCCodeIdentifier* _tmp83_;
                  ValaCCodeFunction* _tmp84_ = NULL;
                  _tmp73_ = vala_symbol_get_name ((ValaSymbol*) prop);
                  _tmp74_ = g_strdup_printf ("set_%s", _tmp73_);
                  _tmp75_ = _tmp74_;
                  _tmp76_ = vala_ccode_member_access_new_pointer (vcast, _tmp75_);
                  _tmp77_ = _tmp76_;
                  _tmp78_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp77_);
                  _tmp79_ = _tmp78_;
                  _vala_ccode_node_unref0 (_tmp77_);
                  _g_free0 (_tmp75_);
                  vcall = _tmp79_;
                  _tmp80_ = vala_ccode_identifier_new ("this");
                  _tmp81_ = _tmp80_;
                  vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp81_);
                  _vala_ccode_node_unref0 (_tmp81_);
                  _tmp82_ = vala_ccode_identifier_new ("value");
                  _tmp83_ = _tmp82_;
                  vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp83_);
                  _vala_ccode_node_unref0 (_tmp83_);
                  _tmp84_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_expression (_tmp84_, (ValaCCodeExpression*) vcall);
                  _vala_ccode_node_unref0 (vcall);
            }
            vala_dova_base_module_pop_function ((ValaDovaBaseModule*) self);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, function);
            _tmp85_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp86_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_OBJECT_TYPE_SYMBOL (_tmp85_), FALSE);
            _tmp87_ = _tmp86_;
            _tmp88_ = g_strdup_printf ("(%s *this", _tmp87_);
            _tmp89_ = _tmp88_;
            _g_free0 (_tmp87_);
            param_list = _tmp89_;
            _tmp90_ = vala_property_accessor_get_readable (acc);
            if (!_tmp90_) {
                  gchar* _tmp91_;
                  ValaDataType* _tmp92_ = NULL;
                  gchar* _tmp93_ = NULL;
                  gchar* _tmp94_;
                  gchar* _tmp95_;
                  _tmp91_ = g_strconcat (param_list, ", ", NULL);
                  _g_free0 (param_list);
                  param_list = _tmp91_;
                  _tmp92_ = vala_property_accessor_get_value_type (acc);
                  _tmp93_ = vala_data_type_get_cname (_tmp92_);
                  _tmp94_ = _tmp93_;
                  _tmp95_ = g_strconcat (param_list, _tmp94_, NULL);
                  _g_free0 (param_list);
                  param_list = _tmp95_;
                  _g_free0 (_tmp94_);
            }
            _tmp96_ = g_strconcat (param_list, ")", NULL);
            _g_free0 (param_list);
            param_list = _tmp96_;
            _tmp98_ = vala_property_accessor_get_readable (acc);
            if (_tmp98_) {
                  _tmp97_ = "get";
            } else {
                  _tmp97_ = "set";
            }
            _tmp99_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp100_ = vala_symbol_get_lower_case_cprefix (_tmp99_);
            _tmp101_ = _tmp100_;
            _tmp102_ = vala_symbol_get_name ((ValaSymbol*) prop);
            _tmp103_ = g_strdup_printf ("%soverride_%s_%s", _tmp101_, _tmp97_, _tmp102_);
            _tmp104_ = _tmp103_;
            _tmp105_ = vala_ccode_function_new (_tmp104_, "void");
            _tmp106_ = _tmp105_;
            _g_free0 (_tmp104_);
            _g_free0 (_tmp101_);
            override_func = _tmp106_;
            _tmp107_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp108_ = _tmp107_;
            vala_ccode_function_add_parameter (override_func, _tmp108_);
            _vala_ccode_node_unref0 (_tmp108_);
            _tmp110_ = vala_property_accessor_get_readable (acc);
            if (_tmp110_) {
                  ValaDataType* _tmp111_ = NULL;
                  gchar* _tmp112_ = NULL;
                  _tmp111_ = vala_property_accessor_get_value_type (acc);
                  _tmp112_ = vala_data_type_get_cname (_tmp111_);
                  _g_free0 (_tmp109_);
                  _tmp109_ = _tmp112_;
            } else {
                  gchar* _tmp113_;
                  _tmp113_ = g_strdup ("void");
                  _g_free0 (_tmp109_);
                  _tmp109_ = _tmp113_;
            }
            _tmp114_ = g_strdup_printf ("(*function) %s", param_list);
            _tmp115_ = _tmp114_;
            _tmp116_ = vala_ccode_parameter_new (_tmp115_, _tmp109_);
            _tmp117_ = _tmp116_;
            vala_ccode_function_add_parameter (override_func, _tmp117_);
            _vala_ccode_node_unref0 (_tmp117_);
            _g_free0 (_tmp115_);
            vala_dova_base_module_push_function ((ValaDovaBaseModule*) self, override_func);
            _tmp118_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
            _tmp119_ = vala_ccode_identifier_new ("type");
            _tmp120_ = _tmp119_;
            _tmp121_ = vala_dova_base_module_get_type_private_from_type ((ValaDovaBaseModule*) self, VALA_OBJECT_TYPE_SYMBOL (_tmp118_), (ValaCCodeExpression*) _tmp120_);
            _vala_ccode_node_unref0 (vcast);
            vcast = _tmp121_;
            _vala_ccode_node_unref0 (_tmp120_);
            _tmp123_ = vala_property_accessor_get_readable (acc);
            if (_tmp123_) {
                  _tmp122_ = "get";
            } else {
                  _tmp122_ = "set";
            }
            _tmp124_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
            _tmp125_ = vala_symbol_get_name ((ValaSymbol*) prop);
            _tmp126_ = g_strdup_printf ("%s_%s", _tmp122_, _tmp125_);
            _tmp127_ = _tmp126_;
            _tmp128_ = vala_ccode_member_access_new_pointer (vcast, _tmp127_);
            _tmp129_ = _tmp128_;
            _tmp130_ = vala_ccode_identifier_new ("function");
            _tmp131_ = _tmp130_;
            vala_ccode_function_add_assignment (_tmp124_, (ValaCCodeExpression*) _tmp129_, (ValaCCodeExpression*) _tmp131_);
            _vala_ccode_node_unref0 (_tmp131_);
            _vala_ccode_node_unref0 (_tmp129_);
            _g_free0 (_tmp127_);
            vala_dova_base_module_pop_function ((ValaDovaBaseModule*) self);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, override_func);
            _g_free0 (_tmp109_);
            _vala_ccode_node_unref0 (override_func);
            _g_free0 (param_list);
            _vala_ccode_node_unref0 (vcast);
            _vala_ccode_node_unref0 (function);
      }
      _tmp132_ = vala_property_get_is_abstract (prop);
      if (!_tmp132_) {
            ValaCCodeFunction* function = NULL;
            gboolean _tmp133_;
            ValaMemberBinding _tmp139_;
            gboolean _tmp140_;
            gboolean _tmp141_ = FALSE;
            gboolean _tmp142_ = FALSE;
            gboolean _tmp143_;
            ValaLocalVariable* _tmp149_ = NULL;
            ValaBlock* _tmp151_ = NULL;
            gboolean _tmp152_;
            _tmp133_ = vala_property_accessor_get_writable (acc);
            if (_tmp133_) {
                  ValaCCodeFunction* _tmp134_ = NULL;
                  _tmp134_ = vala_ccode_function_new (cname, "void");
                  _vala_ccode_node_unref0 (function);
                  function = _tmp134_;
            } else {
                  ValaDataType* _tmp135_ = NULL;
                  gchar* _tmp136_ = NULL;
                  gchar* _tmp137_;
                  ValaCCodeFunction* _tmp138_ = NULL;
                  _tmp135_ = vala_property_accessor_get_value_type (acc);
                  _tmp136_ = vala_data_type_get_cname (_tmp135_);
                  _tmp137_ = _tmp136_;
                  _tmp138_ = vala_ccode_function_new (cname, _tmp137_);
                  _vala_ccode_node_unref0 (function);
                  function = _tmp138_;
                  _g_free0 (_tmp137_);
            }
            _tmp139_ = vala_property_get_binding (prop);
            if (_tmp139_ == VALA_MEMBER_BINDING_INSTANCE) {
                  vala_ccode_function_add_parameter (function, cselfparam);
            }
            _tmp140_ = vala_property_accessor_get_writable (acc);
            if (_tmp140_) {
                  vala_ccode_function_add_parameter (function, cvalueparam);
            }
            _tmp143_ = vala_symbol_is_internal_symbol ((ValaSymbol*) prop);
            if (_tmp143_) {
                  _tmp142_ = TRUE;
            } else {
                  gboolean _tmp144_ = FALSE;
                  gboolean _tmp145_;
                  _tmp145_ = vala_property_accessor_get_readable (acc);
                  if (_tmp145_) {
                        _tmp144_ = TRUE;
                  } else {
                        gboolean _tmp146_;
                        _tmp146_ = vala_property_accessor_get_writable (acc);
                        _tmp144_ = _tmp146_;
                  }
                  _tmp142_ = !_tmp144_;
            }
            if (_tmp142_) {
                  _tmp141_ = TRUE;
            } else {
                  gboolean _tmp147_;
                  _tmp147_ = vala_symbol_is_internal_symbol ((ValaSymbol*) acc);
                  _tmp141_ = _tmp147_;
            }
            if (_tmp141_) {
                  ValaCCodeModifiers _tmp148_;
                  _tmp148_ = vala_ccode_function_get_modifiers (function);
                  vala_ccode_function_set_modifiers (function, _tmp148_ | VALA_CCODE_MODIFIERS_STATIC);
            }
            vala_dova_base_module_push_function ((ValaDovaBaseModule*) self, function);
            _tmp149_ = vala_subroutine_get_result_var ((ValaSubroutine*) acc);
            if (_tmp149_ != NULL) {
                  ValaLocalVariable* _tmp150_ = NULL;
                  _tmp150_ = vala_subroutine_get_result_var ((ValaSubroutine*) acc);
                  vala_code_node_accept ((ValaCodeNode*) _tmp150_, (ValaCodeVisitor*) self);
            }
            _tmp151_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
            vala_code_node_emit ((ValaCodeNode*) _tmp151_, (ValaCodeGenerator*) self);
            _tmp152_ = vala_property_accessor_get_readable (acc);
            if (_tmp152_) {
                  ValaDataType* _tmp153_ = NULL;
                  gchar* _tmp154_ = NULL;
                  gchar* _tmp155_;
                  ValaCCodeDeclaration* _tmp156_ = NULL;
                  ValaCCodeDeclaration* _tmp157_;
                  ValaCCodeDeclaration* _cdecl_;
                  ValaDataType* _tmp158_ = NULL;
                  ValaCCodeExpression* _tmp159_ = NULL;
                  ValaCCodeExpression* _tmp160_;
                  ValaCCodeVariableDeclarator* _tmp161_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp162_;
                  ValaCCodeBlock* _tmp163_ = NULL;
                  ValaCCodeBlock* _tmp164_ = NULL;
                  ValaCCodeIdentifier* _tmp165_ = NULL;
                  ValaCCodeIdentifier* _tmp166_;
                  ValaCCodeReturnStatement* _tmp167_ = NULL;
                  ValaCCodeReturnStatement* _tmp168_;
                  _tmp153_ = vala_property_accessor_get_value_type (acc);
                  _tmp154_ = vala_data_type_get_cname (_tmp153_);
                  _tmp155_ = _tmp154_;
                  _tmp156_ = vala_ccode_declaration_new (_tmp155_);
                  _tmp157_ = _tmp156_;
                  _g_free0 (_tmp155_);
                  _cdecl_ = _tmp157_;
                  _tmp158_ = vala_property_accessor_get_value_type (acc);
                  _tmp159_ = vala_dova_base_module_default_value_for_type ((ValaDovaBaseModule*) self, _tmp158_, TRUE);
                  _tmp160_ = _tmp159_;
                  _tmp161_ = vala_ccode_variable_declarator_new_zero ("result", _tmp160_, NULL);
                  _tmp162_ = _tmp161_;
                  vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp162_);
                  _vala_ccode_node_unref0 (_tmp162_);
                  _vala_ccode_node_unref0 (_tmp160_);
                  _tmp163_ = vala_ccode_function_get_block (function);
                  vala_ccode_block_prepend_statement (_tmp163_, (ValaCCodeNode*) _cdecl_);
                  _tmp164_ = vala_ccode_function_get_block (function);
                  _tmp165_ = vala_ccode_identifier_new ("result");
                  _tmp166_ = _tmp165_;
                  _tmp167_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp166_);
                  _tmp168_ = _tmp167_;
                  vala_ccode_block_add_statement (_tmp164_, (ValaCCodeNode*) _tmp168_);
                  _vala_ccode_node_unref0 (_tmp168_);
                  _vala_ccode_node_unref0 (_tmp166_);
                  _vala_ccode_node_unref0 (_cdecl_);
            }
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, function);
            _vala_ccode_node_unref0 (function);
      }
      vala_dova_base_module_pop_context ((ValaDovaBaseModule*) self);
      _g_free0 (cname);
      _vala_ccode_node_unref0 (cvalueparam);
      _vala_ccode_node_unref0 (cselfparam);
      _vala_code_node_unref0 (this_type);
      _vala_code_node_unref0 (prop);
}


static void vala_dova_object_module_real_generate_interface_declaration (ValaDovaBaseModule* base, ValaInterface* iface, ValaCCodeFile* decl_space) {
      ValaDovaObjectModule * self;
      gchar* _tmp0_ = NULL;
      gchar* _tmp1_;
      gboolean _tmp2_;
      gboolean _tmp3_;
      gchar* _tmp4_ = NULL;
      gchar* _tmp5_;
      ValaCCodeVariableDeclarator* _tmp6_ = NULL;
      ValaCCodeVariableDeclarator* _tmp7_;
      ValaCCodeTypeDefinition* _tmp8_ = NULL;
      ValaCCodeTypeDefinition* _tmp9_;
      gchar* _tmp10_ = NULL;
      gchar* _tmp11_;
      gchar* _tmp12_ = NULL;
      gchar* _tmp13_;
      ValaCCodeFunction* _tmp14_ = NULL;
      ValaCCodeFunction* _tmp15_;
      ValaCCodeFunction* type_fun;
      gboolean _tmp16_;
      gchar* _tmp27_ = NULL;
      gchar* _tmp28_;
      gchar* _tmp29_ = NULL;
      gchar* _tmp30_;
      ValaCCodeFunction* _tmp31_ = NULL;
      ValaCCodeFunction* _tmp32_;
      ValaCCodeFunction* type_init_fun;
      gboolean _tmp33_;
      ValaCCodeParameter* _tmp34_ = NULL;
      ValaCCodeParameter* _tmp35_;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (iface != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) iface, FALSE);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) iface, _tmp1_);
      _tmp3_ = _tmp2_;
      _g_free0 (_tmp1_);
      if (_tmp3_) {
            return;
      }
      vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, ((ValaDovaBaseModule*) self)->object_class, decl_space);
      _tmp4_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) iface, FALSE);
      _tmp5_ = _tmp4_;
      _tmp6_ = vala_ccode_variable_declarator_new (_tmp5_, NULL, NULL);
      _tmp7_ = _tmp6_;
      _tmp8_ = vala_ccode_type_definition_new ("DovaObject", (ValaCCodeDeclarator*) _tmp7_);
      _tmp9_ = _tmp8_;
      vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp9_);
      _vala_ccode_node_unref0 (_tmp9_);
      _vala_ccode_node_unref0 (_tmp7_);
      _g_free0 (_tmp5_);
      vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, ((ValaDovaBaseModule*) self)->type_class, decl_space);
      _tmp10_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp11_ = _tmp10_;
      _tmp12_ = g_strdup_printf ("%s_type_get", _tmp11_);
      _tmp13_ = _tmp12_;
      _tmp14_ = vala_ccode_function_new (_tmp13_, "DovaType *");
      _tmp15_ = _tmp14_;
      _g_free0 (_tmp13_);
      _g_free0 (_tmp11_);
      type_fun = _tmp15_;
      _tmp16_ = vala_symbol_is_internal_symbol ((ValaSymbol*) iface);
      if (_tmp16_) {
            vala_ccode_function_set_modifiers (type_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      {
            ValaList* _tmp17_ = NULL;
            ValaList* _type_param_list;
            gint _tmp18_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp17_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
            _type_param_list = _tmp17_;
            _tmp18_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp18_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp19_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp20_ = NULL;
                  gchar* _tmp21_ = NULL;
                  gchar* _tmp22_;
                  gchar* _tmp23_ = NULL;
                  gchar* _tmp24_;
                  ValaCCodeParameter* _tmp25_ = NULL;
                  ValaCCodeParameter* _tmp26_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp19_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp19_;
                  _tmp20_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp21_ = g_utf8_strdown (_tmp20_, (gssize) (-1));
                  _tmp22_ = _tmp21_;
                  _tmp23_ = g_strdup_printf ("%s_type", _tmp22_);
                  _tmp24_ = _tmp23_;
                  _tmp25_ = vala_ccode_parameter_new (_tmp24_, "DovaType *");
                  _tmp26_ = _tmp25_;
                  vala_ccode_function_add_parameter (type_fun, _tmp26_);
                  _vala_ccode_node_unref0 (_tmp26_);
                  _g_free0 (_tmp24_);
                  _g_free0 (_tmp22_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      vala_ccode_file_add_function_declaration (decl_space, type_fun);
      _tmp27_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) iface, NULL);
      _tmp28_ = _tmp27_;
      _tmp29_ = g_strdup_printf ("%s_type_init", _tmp28_);
      _tmp30_ = _tmp29_;
      _tmp31_ = vala_ccode_function_new (_tmp30_, "void");
      _tmp32_ = _tmp31_;
      _g_free0 (_tmp30_);
      _g_free0 (_tmp28_);
      type_init_fun = _tmp32_;
      _tmp33_ = vala_symbol_is_internal_symbol ((ValaSymbol*) iface);
      if (_tmp33_) {
            vala_ccode_function_set_modifiers (type_init_fun, VALA_CCODE_MODIFIERS_STATIC);
      }
      _tmp34_ = vala_ccode_parameter_new ("type", "DovaType *");
      _tmp35_ = _tmp34_;
      vala_ccode_function_add_parameter (type_init_fun, _tmp35_);
      _vala_ccode_node_unref0 (_tmp35_);
      {
            ValaList* _tmp36_ = NULL;
            ValaList* _type_param_list;
            gint _tmp37_;
            gint _type_param_size;
            gint _type_param_index;
            _tmp36_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) iface);
            _type_param_list = _tmp36_;
            _tmp37_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
            _type_param_size = _tmp37_;
            _type_param_index = -1;
            while (TRUE) {
                  gpointer _tmp38_ = NULL;
                  ValaTypeParameter* type_param;
                  const gchar* _tmp39_ = NULL;
                  gchar* _tmp40_ = NULL;
                  gchar* _tmp41_;
                  gchar* _tmp42_ = NULL;
                  gchar* _tmp43_;
                  ValaCCodeParameter* _tmp44_ = NULL;
                  ValaCCodeParameter* _tmp45_;
                  _type_param_index = _type_param_index + 1;
                  if (!(_type_param_index < _type_param_size)) {
                        break;
                  }
                  _tmp38_ = vala_list_get (_type_param_list, _type_param_index);
                  type_param = (ValaTypeParameter*) _tmp38_;
                  _tmp39_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                  _tmp40_ = g_utf8_strdown (_tmp39_, (gssize) (-1));
                  _tmp41_ = _tmp40_;
                  _tmp42_ = g_strdup_printf ("%s_type", _tmp41_);
                  _tmp43_ = _tmp42_;
                  _tmp44_ = vala_ccode_parameter_new (_tmp43_, "DovaType *");
                  _tmp45_ = _tmp44_;
                  vala_ccode_function_add_parameter (type_init_fun, _tmp45_);
                  _vala_ccode_node_unref0 (_tmp45_);
                  _g_free0 (_tmp43_);
                  _g_free0 (_tmp41_);
                  _vala_code_node_unref0 (type_param);
            }
            _vala_iterable_unref0 (_type_param_list);
      }
      vala_ccode_file_add_function_declaration (decl_space, type_init_fun);
      _vala_ccode_node_unref0 (type_init_fun);
      _vala_ccode_node_unref0 (type_fun);
}


static gboolean vala_dova_object_module_real_method_has_wrapper (ValaDovaBaseModule* base, ValaMethod* method) {
      ValaDovaObjectModule * self;
      gboolean result = FALSE;
      ValaAttribute* _tmp0_ = NULL;
      ValaAttribute* _tmp1_;
      gboolean _tmp2_;
      self = (ValaDovaObjectModule*) base;
      g_return_val_if_fail (method != NULL, FALSE);
      _tmp0_ = vala_code_node_get_attribute ((ValaCodeNode*) method, "NoWrapper");
      _tmp1_ = _tmp0_;
      _tmp2_ = _tmp1_ == NULL;
      _vala_code_node_unref0 (_tmp1_);
      result = _tmp2_;
      return result;
}


static gchar* vala_dova_object_module_real_get_custom_creturn_type (ValaDovaBaseModule* base, ValaMethod* m) {
      ValaDovaObjectModule * self;
      gchar* result = NULL;
      ValaAttribute* _tmp0_ = NULL;
      ValaAttribute* attr;
      self = (ValaDovaObjectModule*) base;
      g_return_val_if_fail (m != NULL, NULL);
      _tmp0_ = vala_code_node_get_attribute ((ValaCodeNode*) m, "CCode");
      attr = _tmp0_;
      if (attr != NULL) {
            gchar* _tmp1_ = NULL;
            gchar* type;
            _tmp1_ = vala_attribute_get_string (attr, "type");
            type = _tmp1_;
            if (type != NULL) {
                  result = type;
                  _vala_code_node_unref0 (attr);
                  return result;
            }
            _g_free0 (type);
      }
      result = NULL;
      _vala_code_node_unref0 (attr);
      return result;
}


static void vala_dova_object_module_real_generate_method_declaration (ValaDovaBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space) {
      ValaDovaObjectModule * self;
      gchar* _tmp0_ = NULL;
      gchar* _tmp1_;
      gboolean _tmp2_;
      gboolean _tmp3_;
      gchar* _tmp4_ = NULL;
      gchar* _tmp5_;
      ValaCCodeFunction* _tmp6_ = NULL;
      ValaCCodeFunction* _tmp7_;
      ValaCCodeFunction* function;
      gboolean _tmp8_;
      ValaCCodeIdentifier* _tmp12_ = NULL;
      ValaCCodeIdentifier* _tmp13_;
      ValaCCodeFunctionCall* _tmp14_ = NULL;
      ValaCCodeFunctionCall* _tmp15_;
      gboolean _tmp16_ = FALSE;
      gboolean _tmp17_;
      gboolean _tmp63_ = FALSE;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (m != NULL);
      g_return_if_fail (decl_space != NULL);
      _tmp0_ = vala_method_get_cname (m);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_dova_base_module_add_symbol_declaration ((ValaDovaBaseModule*) self, decl_space, (ValaSymbol*) m, _tmp1_);
      _tmp3_ = _tmp2_;
      _g_free0 (_tmp1_);
      if (_tmp3_) {
            return;
      }
      _tmp4_ = vala_method_get_cname (m);
      _tmp5_ = _tmp4_;
      _tmp6_ = vala_ccode_function_new (_tmp5_, "void");
      _tmp7_ = _tmp6_;
      _g_free0 (_tmp5_);
      function = _tmp7_;
      _tmp8_ = vala_symbol_is_internal_symbol ((ValaSymbol*) m);
      if (_tmp8_) {
            ValaCCodeModifiers _tmp9_;
            gboolean _tmp10_;
            _tmp9_ = vala_ccode_function_get_modifiers (function);
            vala_ccode_function_set_modifiers (function, _tmp9_ | VALA_CCODE_MODIFIERS_STATIC);
            _tmp10_ = vala_method_get_is_inline (m);
            if (_tmp10_) {
                  ValaCCodeModifiers _tmp11_;
                  _tmp11_ = vala_ccode_function_get_modifiers (function);
                  vala_ccode_function_set_modifiers (function, _tmp11_ | VALA_CCODE_MODIFIERS_INLINE);
            }
      }
      _tmp12_ = vala_ccode_identifier_new ("fake");
      _tmp13_ = _tmp12_;
      _tmp14_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp13_);
      _tmp15_ = _tmp14_;
      vala_dova_base_module_generate_cparameters ((ValaDovaBaseModule*) self, m, decl_space, function, NULL, _tmp15_);
      _vala_ccode_node_unref0 (_tmp15_);
      _vala_ccode_node_unref0 (_tmp13_);
      vala_ccode_file_add_function_declaration (decl_space, function);
      _tmp17_ = vala_method_get_is_abstract (m);
      if (_tmp17_) {
            _tmp16_ = TRUE;
      } else {
            gboolean _tmp18_;
            _tmp18_ = vala_method_get_is_virtual (m);
            _tmp16_ = _tmp18_;
      }
      if (_tmp16_) {
            ValaCCodeFunction* _tmp19_ = NULL;
            ValaCCodeFunction* base_func;
            ValaSymbol* _tmp20_ = NULL;
            gchar* _tmp21_ = NULL;
            gchar* _tmp22_;
            const gchar* _tmp23_ = NULL;
            gchar* _tmp24_ = NULL;
            gchar* _tmp25_;
            ValaCCodeParameter* _tmp26_ = NULL;
            ValaCCodeParameter* _tmp27_;
            ValaSymbol* _tmp28_ = NULL;
            gchar* _tmp29_ = NULL;
            gchar* _tmp30_;
            gchar* _tmp31_ = NULL;
            gchar* _tmp32_;
            gchar* param_list;
            ValaDataType* _tmp41_ = NULL;
            gchar* _tmp43_;
            ValaSymbol* _tmp44_ = NULL;
            gchar* _tmp45_ = NULL;
            gchar* _tmp46_;
            const gchar* _tmp47_ = NULL;
            gchar* _tmp48_ = NULL;
            gchar* _tmp49_;
            ValaCCodeFunction* _tmp50_ = NULL;
            ValaCCodeFunction* _tmp51_;
            ValaCCodeFunction* override_func;
            ValaCCodeParameter* _tmp52_ = NULL;
            ValaCCodeParameter* _tmp53_;
            gchar* _tmp54_ = NULL;
            ValaDataType* _tmp55_ = NULL;
            gchar* _tmp59_ = NULL;
            gchar* _tmp60_;
            ValaCCodeParameter* _tmp61_ = NULL;
            ValaCCodeParameter* _tmp62_;
            _tmp19_ = vala_ccode_function_copy (function);
            base_func = _tmp19_;
            _tmp20_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp21_ = vala_symbol_get_lower_case_cprefix (_tmp20_);
            _tmp22_ = _tmp21_;
            _tmp23_ = vala_symbol_get_name ((ValaSymbol*) m);
            _tmp24_ = g_strdup_printf ("%sbase_%s", _tmp22_, _tmp23_);
            _tmp25_ = _tmp24_;
            vala_ccode_function_set_name (base_func, _tmp25_);
            _g_free0 (_tmp25_);
            _g_free0 (_tmp22_);
            _tmp26_ = vala_ccode_parameter_new ("base_type", "DovaType *");
            _tmp27_ = _tmp26_;
            vala_ccode_function_insert_parameter (base_func, 0, _tmp27_);
            _vala_ccode_node_unref0 (_tmp27_);
            vala_ccode_file_add_function_declaration (decl_space, base_func);
            _tmp28_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp29_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_OBJECT_TYPE_SYMBOL (_tmp28_), FALSE);
            _tmp30_ = _tmp29_;
            _tmp31_ = g_strdup_printf ("(%s *this", _tmp30_);
            _tmp32_ = _tmp31_;
            _g_free0 (_tmp30_);
            param_list = _tmp32_;
            {
                  ValaList* _tmp33_ = NULL;
                  ValaList* _param_list;
                  gint _tmp34_;
                  gint _param_size;
                  gint _param_index;
                  _tmp33_ = vala_method_get_parameters (m);
                  _param_list = _tmp33_;
                  _tmp34_ = vala_collection_get_size ((ValaCollection*) _param_list);
                  _param_size = _tmp34_;
                  _param_index = -1;
                  while (TRUE) {
                        gpointer _tmp35_ = NULL;
                        ValaParameter* param;
                        gchar* _tmp36_;
                        ValaDataType* _tmp37_ = NULL;
                        gchar* _tmp38_ = NULL;
                        gchar* _tmp39_;
                        gchar* _tmp40_;
                        _param_index = _param_index + 1;
                        if (!(_param_index < _param_size)) {
                              break;
                        }
                        _tmp35_ = vala_list_get (_param_list, _param_index);
                        param = (ValaParameter*) _tmp35_;
                        _tmp36_ = g_strconcat (param_list, ", ", NULL);
                        _g_free0 (param_list);
                        param_list = _tmp36_;
                        _tmp37_ = vala_variable_get_variable_type ((ValaVariable*) param);
                        _tmp38_ = vala_data_type_get_cname (_tmp37_);
                        _tmp39_ = _tmp38_;
                        _tmp40_ = g_strconcat (param_list, _tmp39_, NULL);
                        _g_free0 (param_list);
                        param_list = _tmp40_;
                        _g_free0 (_tmp39_);
                        _vala_code_node_unref0 (param);
                  }
                  _vala_iterable_unref0 (_param_list);
            }
            _tmp41_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp41_)) {
                  gchar* _tmp42_;
                  _tmp42_ = g_strconcat (param_list, ", void *", NULL);
                  _g_free0 (param_list);
                  param_list = _tmp42_;
            }
            _tmp43_ = g_strconcat (param_list, ")", NULL);
            _g_free0 (param_list);
            param_list = _tmp43_;
            _tmp44_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp45_ = vala_symbol_get_lower_case_cprefix (_tmp44_);
            _tmp46_ = _tmp45_;
            _tmp47_ = vala_symbol_get_name ((ValaSymbol*) m);
            _tmp48_ = g_strdup_printf ("%soverride_%s", _tmp46_, _tmp47_);
            _tmp49_ = _tmp48_;
            _tmp50_ = vala_ccode_function_new (_tmp49_, "void");
            _tmp51_ = _tmp50_;
            _g_free0 (_tmp49_);
            _g_free0 (_tmp46_);
            override_func = _tmp51_;
            _tmp52_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp53_ = _tmp52_;
            vala_ccode_function_add_parameter (override_func, _tmp53_);
            _vala_ccode_node_unref0 (_tmp53_);
            _tmp55_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp55_)) {
                  gchar* _tmp56_;
                  _tmp56_ = g_strdup ("void");
                  _g_free0 (_tmp54_);
                  _tmp54_ = _tmp56_;
            } else {
                  ValaDataType* _tmp57_ = NULL;
                  gchar* _tmp58_ = NULL;
                  _tmp57_ = vala_method_get_return_type (m);
                  _tmp58_ = vala_data_type_get_cname (_tmp57_);
                  _g_free0 (_tmp54_);
                  _tmp54_ = _tmp58_;
            }
            _tmp59_ = g_strdup_printf ("(*function) %s", param_list);
            _tmp60_ = _tmp59_;
            _tmp61_ = vala_ccode_parameter_new (_tmp60_, _tmp54_);
            _tmp62_ = _tmp61_;
            vala_ccode_function_add_parameter (override_func, _tmp62_);
            _vala_ccode_node_unref0 (_tmp62_);
            _g_free0 (_tmp60_);
            vala_ccode_file_add_function_declaration (decl_space, override_func);
            _g_free0 (_tmp54_);
            _vala_ccode_node_unref0 (override_func);
            _g_free0 (param_list);
            _vala_ccode_node_unref0 (base_func);
      }
      if (VALA_IS_CREATION_METHOD (m)) {
            ValaSymbol* _tmp64_ = NULL;
            _tmp64_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp63_ = VALA_IS_CLASS (_tmp64_);
      } else {
            _tmp63_ = FALSE;
      }
      if (_tmp63_) {
            ValaSymbol* _tmp65_ = NULL;
            gchar* _tmp66_ = NULL;
            gchar* _tmp67_;
            ValaCCodeFunction* _tmp68_ = NULL;
            gboolean _tmp69_;
            _tmp65_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, VALA_CLASS (_tmp65_), decl_space);
            _tmp66_ = vala_method_get_real_cname (m);
            _tmp67_ = _tmp66_;
            _tmp68_ = vala_ccode_function_new (_tmp67_, "void");
            _vala_ccode_node_unref0 (function);
            function = _tmp68_;
            _g_free0 (_tmp67_);
            _tmp69_ = vala_symbol_is_internal_symbol ((ValaSymbol*) m);
            if (_tmp69_) {
                  ValaCCodeModifiers _tmp70_;
                  _tmp70_ = vala_ccode_function_get_modifiers (function);
                  vala_ccode_function_set_modifiers (function, _tmp70_ | VALA_CCODE_MODIFIERS_STATIC);
            }
            vala_dova_base_module_generate_cparameters ((ValaDovaBaseModule*) self, m, decl_space, function, NULL, NULL);
            vala_ccode_file_add_function_declaration (decl_space, function);
      }
      _vala_ccode_node_unref0 (function);
}


static ValaCCodeExpression* vala_dova_object_module_get_type_from_instance (ValaDovaObjectModule* self, ValaCCodeExpression* instance_expression) {
      ValaCCodeExpression* result = NULL;
      ValaCCodeCastExpression* _tmp0_ = NULL;
      ValaCCodeCastExpression* _tmp1_;
      ValaCCodeMemberAccess* _tmp2_ = NULL;
      ValaCCodeExpression* _tmp3_;
      g_return_val_if_fail (self != NULL, NULL);
      g_return_val_if_fail (instance_expression != NULL, NULL);
      _tmp0_ = vala_ccode_cast_expression_new (instance_expression, "DovaObject *");
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1_, "type");
      _tmp3_ = (ValaCCodeExpression*) _tmp2_;
      _vala_ccode_node_unref0 (_tmp1_);
      result = _tmp3_;
      return result;
}


static void vala_dova_object_module_real_visit_method (ValaCodeVisitor* base, ValaMethod* m) {
      ValaDovaObjectModule * self;
      ValaDovaBaseModuleEmitContext* _tmp0_ = NULL;
      ValaDovaBaseModuleEmitContext* _tmp1_;
      gboolean _tmp11_;
      gchar* _tmp12_ = NULL;
      gchar* _tmp13_;
      ValaCCodeFunction* _tmp14_ = NULL;
      ValaCCodeFunction* _tmp15_;
      ValaCCodeFunction* function;
      gboolean _tmp16_;
      gboolean _tmp146_ = FALSE;
      gboolean _tmp147_;
      gboolean _tmp417_;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (m != NULL);
      _tmp0_ = vala_dova_base_module_emit_context_new ((ValaSymbol*) m);
      _tmp1_ = _tmp0_;
      vala_dova_base_module_push_context ((ValaDovaBaseModule*) self, _tmp1_);
      _vala_dova_base_module_emit_context_unref0 (_tmp1_);
      {
            ValaList* _tmp2_ = NULL;
            ValaList* _param_list;
            gint _tmp3_;
            gint _param_size;
            gint _param_index;
            _tmp2_ = vala_method_get_parameters (m);
            _param_list = _tmp2_;
            _tmp3_ = vala_collection_get_size ((ValaCollection*) _param_list);
            _param_size = _tmp3_;
            _param_index = -1;
            while (TRUE) {
                  gpointer _tmp4_ = NULL;
                  ValaParameter* param;
                  _param_index = _param_index + 1;
                  if (!(_param_index < _param_size)) {
                        break;
                  }
                  _tmp4_ = vala_list_get (_param_list, _param_index);
                  param = (ValaParameter*) _tmp4_;
                  vala_code_node_accept ((ValaCodeNode*) param, (ValaCodeVisitor*) self);
                  _vala_code_node_unref0 (param);
            }
            _vala_iterable_unref0 (_param_list);
      }
      {
            ValaList* _tmp5_ = NULL;
            ValaList* _precondition_list;
            gint _tmp6_;
            gint _precondition_size;
            gint _precondition_index;
            _tmp5_ = vala_method_get_preconditions (m);
            _precondition_list = _tmp5_;
            _tmp6_ = vala_collection_get_size ((ValaCollection*) _precondition_list);
            _precondition_size = _tmp6_;
            _precondition_index = -1;
            while (TRUE) {
                  gpointer _tmp7_ = NULL;
                  ValaExpression* precondition;
                  _precondition_index = _precondition_index + 1;
                  if (!(_precondition_index < _precondition_size)) {
                        break;
                  }
                  _tmp7_ = vala_list_get (_precondition_list, _precondition_index);
                  precondition = (ValaExpression*) _tmp7_;
                  vala_code_node_emit ((ValaCodeNode*) precondition, (ValaCodeGenerator*) self);
                  _vala_code_node_unref0 (precondition);
            }
            _vala_iterable_unref0 (_precondition_list);
      }
      {
            ValaList* _tmp8_ = NULL;
            ValaList* _postcondition_list;
            gint _tmp9_;
            gint _postcondition_size;
            gint _postcondition_index;
            _tmp8_ = vala_method_get_postconditions (m);
            _postcondition_list = _tmp8_;
            _tmp9_ = vala_collection_get_size ((ValaCollection*) _postcondition_list);
            _postcondition_size = _tmp9_;
            _postcondition_index = -1;
            while (TRUE) {
                  gpointer _tmp10_ = NULL;
                  ValaExpression* postcondition;
                  _postcondition_index = _postcondition_index + 1;
                  if (!(_postcondition_index < _postcondition_size)) {
                        break;
                  }
                  _tmp10_ = vala_list_get (_postcondition_list, _postcondition_index);
                  postcondition = (ValaExpression*) _tmp10_;
                  vala_code_node_emit ((ValaCodeNode*) postcondition, (ValaCodeGenerator*) self);
                  _vala_code_node_unref0 (postcondition);
            }
            _vala_iterable_unref0 (_postcondition_list);
      }
      vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, m, ((ValaDovaBaseModule*) self)->cfile);
      _tmp11_ = vala_symbol_is_internal_symbol ((ValaSymbol*) m);
      if (!_tmp11_) {
            vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, m, ((ValaDovaBaseModule*) self)->header_file);
      }
      _tmp12_ = vala_method_get_real_cname (m);
      _tmp13_ = _tmp12_;
      _tmp14_ = vala_ccode_function_new (_tmp13_, "void");
      _tmp15_ = _tmp14_;
      _g_free0 (_tmp13_);
      function = _tmp15_;
      vala_dova_base_module_generate_cparameters ((ValaDovaBaseModule*) self, m, ((ValaDovaBaseModule*) self)->cfile, function, NULL, NULL);
      _tmp16_ = vala_method_get_is_abstract (m);
      if (!_tmp16_) {
            gboolean _tmp17_ = FALSE;
            ValaMethod* _tmp18_ = NULL;
            ValaBlock* _tmp23_ = NULL;
            _tmp18_ = vala_method_get_base_method (m);
            if (_tmp18_ != NULL) {
                  _tmp17_ = TRUE;
            } else {
                  ValaMethod* _tmp19_ = NULL;
                  _tmp19_ = vala_method_get_base_interface_method (m);
                  _tmp17_ = _tmp19_ != NULL;
            }
            if (_tmp17_) {
                  ValaCCodeModifiers _tmp20_;
                  _tmp20_ = vala_ccode_function_get_modifiers (function);
                  vala_ccode_function_set_modifiers (function, _tmp20_ | VALA_CCODE_MODIFIERS_STATIC);
                  vala_ccode_file_add_function_declaration (((ValaDovaBaseModule*) self)->cfile, function);
            } else {
                  gboolean _tmp21_;
                  _tmp21_ = vala_symbol_is_internal_symbol ((ValaSymbol*) m);
                  if (_tmp21_) {
                        ValaCCodeModifiers _tmp22_;
                        _tmp22_ = vala_ccode_function_get_modifiers (function);
                        vala_ccode_function_set_modifiers (function, _tmp22_ | VALA_CCODE_MODIFIERS_STATIC);
                  }
            }
            _tmp23_ = vala_subroutine_get_body ((ValaSubroutine*) m);
            if (_tmp23_ != NULL) {
                  ValaCodeContext* _tmp24_ = NULL;
                  ValaMethod* _tmp25_ = NULL;
                  gboolean _tmp26_;
                  ValaLocalVariable* _tmp100_ = NULL;
                  ValaBlock* _tmp102_ = NULL;
                  gboolean _tmp103_ = FALSE;
                  ValaDataType* _tmp104_ = NULL;
                  ValaSymbol* _tmp122_ = NULL;
                  ValaSymbol* _tmp123_;
                  ValaStruct* _tmp124_;
                  ValaStruct* st;
                  gboolean _tmp125_ = FALSE;
                  gboolean _tmp126_ = FALSE;
                  vala_dova_base_module_push_function ((ValaDovaBaseModule*) self, function);
                  _tmp24_ = vala_dova_base_module_get_context ((ValaDovaBaseModule*) self);
                  _tmp25_ = vala_code_context_get_module_init_method (_tmp24_);
                  if (_tmp25_ == m) {
                        vala_dova_object_module_add_module_init (self);
                  }
                  _tmp26_ = vala_method_get_closure (m);
                  if (_tmp26_) {
                        ValaBlock* _tmp27_ = NULL;
                        ValaBlock* _tmp28_;
                        ValaBlock* closure_block;
                        gint _tmp29_;
                        gint block_id;
                        ValaMemberBinding _tmp52_;
                        _tmp27_ = vala_dova_base_module_get_current_closure_block ((ValaDovaBaseModule*) self);
                        _tmp28_ = _vala_code_node_ref0 (_tmp27_);
                        closure_block = _tmp28_;
                        _tmp29_ = vala_dova_base_module_get_block_id ((ValaDovaBaseModule*) self, closure_block);
                        block_id = _tmp29_;
                        while (TRUE) {
                              ValaSymbol* _tmp30_ = NULL;
                              ValaBlock* _tmp31_ = NULL;
                              ValaBlock* _tmp32_;
                              ValaBlock* parent_closure_block;
                              gint _tmp33_;
                              gint parent_block_id;
                              gchar* _tmp34_ = NULL;
                              gchar* _tmp35_;
                              ValaCCodeIdentifier* _tmp36_ = NULL;
                              ValaCCodeIdentifier* _tmp37_;
                              gchar* _tmp38_ = NULL;
                              gchar* _tmp39_;
                              ValaCCodeMemberAccess* _tmp40_ = NULL;
                              ValaCCodeMemberAccess* _tmp41_;
                              ValaCCodeMemberAccess* parent_data;
                              gchar* _tmp42_ = NULL;
                              gchar* _tmp43_;
                              ValaCCodeDeclaration* _tmp44_ = NULL;
                              ValaCCodeDeclaration* _tmp45_;
                              ValaCCodeDeclaration* _cdecl_;
                              gchar* _tmp46_ = NULL;
                              gchar* _tmp47_;
                              ValaCCodeVariableDeclarator* _tmp48_ = NULL;
                              ValaCCodeVariableDeclarator* _tmp49_;
                              ValaCCodeFunction* _tmp50_ = NULL;
                              ValaBlock* _tmp51_;
                              _tmp30_ = vala_symbol_get_parent_symbol ((ValaSymbol*) closure_block);
                              _tmp31_ = vala_dova_base_module_next_closure_block ((ValaDovaBaseModule*) self, _tmp30_);
                              _tmp32_ = _vala_code_node_ref0 (_tmp31_);
                              parent_closure_block = _tmp32_;
                              if (parent_closure_block == NULL) {
                                    _vala_code_node_unref0 (parent_closure_block);
                                    break;
                              }
                              _tmp33_ = vala_dova_base_module_get_block_id ((ValaDovaBaseModule*) self, parent_closure_block);
                              parent_block_id = _tmp33_;
                              _tmp34_ = g_strdup_printf ("_data%d_", block_id);
                              _tmp35_ = _tmp34_;
                              _tmp36_ = vala_ccode_identifier_new (_tmp35_);
                              _tmp37_ = _tmp36_;
                              _tmp38_ = g_strdup_printf ("_data%d_", parent_block_id);
                              _tmp39_ = _tmp38_;
                              _tmp40_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp37_, _tmp39_);
                              _tmp41_ = _tmp40_;
                              _g_free0 (_tmp39_);
                              _vala_ccode_node_unref0 (_tmp37_);
                              _g_free0 (_tmp35_);
                              parent_data = _tmp41_;
                              _tmp42_ = g_strdup_printf ("Block%dData*", parent_block_id);
                              _tmp43_ = _tmp42_;
                              _tmp44_ = vala_ccode_declaration_new (_tmp43_);
                              _tmp45_ = _tmp44_;
                              _g_free0 (_tmp43_);
                              _cdecl_ = _tmp45_;
                              _tmp46_ = g_strdup_printf ("_data%d_", parent_block_id);
                              _tmp47_ = _tmp46_;
                              _tmp48_ = vala_ccode_variable_declarator_new (_tmp47_, (ValaCCodeExpression*) parent_data, NULL);
                              _tmp49_ = _tmp48_;
                              vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp49_);
                              _vala_ccode_node_unref0 (_tmp49_);
                              _g_free0 (_tmp47_);
                              _tmp50_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                              vala_ccode_function_add_statement (_tmp50_, (ValaCCodeNode*) _cdecl_);
                              _tmp51_ = _vala_code_node_ref0 (parent_closure_block);
                              _vala_code_node_unref0 (closure_block);
                              closure_block = _tmp51_;
                              block_id = parent_block_id;
                              _vala_ccode_node_unref0 (_cdecl_);
                              _vala_ccode_node_unref0 (parent_data);
                              _vala_code_node_unref0 (parent_closure_block);
                        }
                        _tmp52_ = vala_method_get_binding (m);
                        if (_tmp52_ == VALA_MEMBER_BINDING_INSTANCE) {
                              gchar* _tmp53_ = NULL;
                              gchar* _tmp54_;
                              ValaCCodeIdentifier* _tmp55_ = NULL;
                              ValaCCodeIdentifier* _tmp56_;
                              ValaCCodeMemberAccess* _tmp57_ = NULL;
                              ValaCCodeMemberAccess* _tmp58_;
                              ValaCCodeMemberAccess* cself;
                              ValaClass* _tmp59_ = NULL;
                              gchar* _tmp60_ = NULL;
                              gchar* _tmp61_;
                              gchar* _tmp62_ = NULL;
                              gchar* _tmp63_;
                              ValaCCodeDeclaration* _tmp64_ = NULL;
                              ValaCCodeDeclaration* _tmp65_;
                              ValaCCodeDeclaration* _cdecl_;
                              ValaCCodeVariableDeclarator* _tmp66_ = NULL;
                              ValaCCodeVariableDeclarator* _tmp67_;
                              ValaCCodeFunction* _tmp68_ = NULL;
                              _tmp53_ = g_strdup_printf ("_data%d_", block_id);
                              _tmp54_ = _tmp53_;
                              _tmp55_ = vala_ccode_identifier_new (_tmp54_);
                              _tmp56_ = _tmp55_;
                              _tmp57_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp56_, "this");
                              _tmp58_ = _tmp57_;
                              _vala_ccode_node_unref0 (_tmp56_);
                              _g_free0 (_tmp54_);
                              cself = _tmp58_;
                              _tmp59_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
                              _tmp60_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) _tmp59_, FALSE);
                              _tmp61_ = _tmp60_;
                              _tmp62_ = g_strdup_printf ("%s *", _tmp61_);
                              _tmp63_ = _tmp62_;
                              _tmp64_ = vala_ccode_declaration_new (_tmp63_);
                              _tmp65_ = _tmp64_;
                              _g_free0 (_tmp63_);
                              _g_free0 (_tmp61_);
                              _cdecl_ = _tmp65_;
                              _tmp66_ = vala_ccode_variable_declarator_new ("this", (ValaCCodeExpression*) cself, NULL);
                              _tmp67_ = _tmp66_;
                              vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp67_);
                              _vala_ccode_node_unref0 (_tmp67_);
                              _tmp68_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                              vala_ccode_function_add_statement (_tmp68_, (ValaCCodeNode*) _cdecl_);
                              _vala_ccode_node_unref0 (_cdecl_);
                              _vala_ccode_node_unref0 (cself);
                        }
                        _vala_code_node_unref0 (closure_block);
                  }
                  {
                        ValaList* _tmp69_ = NULL;
                        ValaList* _param_list;
                        gint _tmp70_;
                        gint _param_size;
                        gint _param_index;
                        _tmp69_ = vala_method_get_parameters (m);
                        _param_list = _tmp69_;
                        _tmp70_ = vala_collection_get_size ((ValaCollection*) _param_list);
                        _param_size = _tmp70_;
                        _param_index = -1;
                        while (TRUE) {
                              gpointer _tmp71_ = NULL;
                              ValaParameter* param;
                              gboolean _tmp72_;
                              ValaDataType* _tmp73_ = NULL;
                              ValaTypeSymbol* _tmp74_ = NULL;
                              ValaTypeSymbol* _tmp75_;
                              ValaTypeSymbol* t;
                              gboolean _tmp76_ = FALSE;
                              _param_index = _param_index + 1;
                              if (!(_param_index < _param_size)) {
                                    break;
                              }
                              _tmp71_ = vala_list_get (_param_list, _param_index);
                              param = (ValaParameter*) _tmp71_;
                              _tmp72_ = vala_parameter_get_ellipsis (param);
                              if (_tmp72_) {
                                    _vala_code_node_unref0 (param);
                                    break;
                              }
                              _tmp73_ = vala_variable_get_variable_type ((ValaVariable*) param);
                              _tmp74_ = vala_data_type_get_data_type (_tmp73_);
                              _tmp75_ = _vala_code_node_ref0 (_tmp74_);
                              t = _tmp75_;
                              if (t != NULL) {
                                    gboolean _tmp77_;
                                    _tmp77_ = vala_typesymbol_is_reference_type (t);
                                    _tmp76_ = _tmp77_;
                              } else {
                                    _tmp76_ = FALSE;
                              }
                              if (_tmp76_) {
                                    ValaParameterDirection _tmp78_;
                                    _tmp78_ = vala_parameter_get_direction (param);
                                    if (_tmp78_ == VALA_PARAMETER_DIRECTION_OUT) {
                                          const gchar* _tmp79_ = NULL;
                                          ValaCCodeExpression* _tmp80_ = NULL;
                                          ValaCCodeExpression* _tmp81_;
                                          ValaCCodeUnaryExpression* _tmp82_ = NULL;
                                          ValaCCodeUnaryExpression* _tmp83_;
                                          ValaCCodeConstant* _tmp84_ = NULL;
                                          ValaCCodeConstant* _tmp85_;
                                          ValaCCodeAssignment* _tmp86_ = NULL;
                                          ValaCCodeAssignment* _tmp87_;
                                          ValaCCodeAssignment* a;
                                          ValaCCodeBlock* _tmp88_ = NULL;
                                          ValaCCodeBlock* cblock;
                                          ValaCCodeExpressionStatement* _tmp89_ = NULL;
                                          ValaCCodeExpressionStatement* _tmp90_;
                                          const gchar* _tmp91_ = NULL;
                                          ValaCCodeIdentifier* _tmp92_ = NULL;
                                          ValaCCodeIdentifier* _tmp93_;
                                          ValaCCodeConstant* _tmp94_ = NULL;
                                          ValaCCodeConstant* _tmp95_;
                                          ValaCCodeBinaryExpression* _tmp96_ = NULL;
                                          ValaCCodeBinaryExpression* _tmp97_;
                                          ValaCCodeBinaryExpression* condition;
                                          ValaCCodeIfStatement* _tmp98_ = NULL;
                                          ValaCCodeIfStatement* if_statement;
                                          ValaCCodeFunction* _tmp99_ = NULL;
                                          _tmp79_ = vala_symbol_get_name ((ValaSymbol*) param);
                                          _tmp80_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp79_);
                                          _tmp81_ = _tmp80_;
                                          _tmp82_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp81_);
                                          _tmp83_ = _tmp82_;
                                          _tmp84_ = vala_ccode_constant_new ("NULL");
                                          _tmp85_ = _tmp84_;
                                          _tmp86_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp83_, (ValaCCodeExpression*) _tmp85_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
                                          _tmp87_ = _tmp86_;
                                          _vala_ccode_node_unref0 (_tmp85_);
                                          _vala_ccode_node_unref0 (_tmp83_);
                                          _vala_ccode_node_unref0 (_tmp81_);
                                          a = _tmp87_;
                                          _tmp88_ = vala_ccode_block_new ();
                                          cblock = _tmp88_;
                                          _tmp89_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) a);
                                          _tmp90_ = _tmp89_;
                                          vala_ccode_block_add_statement (cblock, (ValaCCodeNode*) _tmp90_);
                                          _vala_ccode_node_unref0 (_tmp90_);
                                          _tmp91_ = vala_symbol_get_name ((ValaSymbol*) param);
                                          _tmp92_ = vala_ccode_identifier_new (_tmp91_);
                                          _tmp93_ = _tmp92_;
                                          _tmp94_ = vala_ccode_constant_new ("NULL");
                                          _tmp95_ = _tmp94_;
                                          _tmp96_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp93_, (ValaCCodeExpression*) _tmp95_);
                                          _tmp97_ = _tmp96_;
                                          _vala_ccode_node_unref0 (_tmp95_);
                                          _vala_ccode_node_unref0 (_tmp93_);
                                          condition = _tmp97_;
                                          _tmp98_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) condition, (ValaCCodeStatement*) cblock, NULL);
                                          if_statement = _tmp98_;
                                          _tmp99_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                                          vala_ccode_function_add_statement (_tmp99_, (ValaCCodeNode*) if_statement);
                                          _vala_ccode_node_unref0 (if_statement);
                                          _vala_ccode_node_unref0 (condition);
                                          _vala_ccode_node_unref0 (cblock);
                                          _vala_ccode_node_unref0 (a);
                                    }
                              }
                              _vala_code_node_unref0 (t);
                              _vala_code_node_unref0 (param);
                        }
                        _vala_iterable_unref0 (_param_list);
                  }
                  _tmp100_ = vala_subroutine_get_result_var ((ValaSubroutine*) m);
                  if (_tmp100_ != NULL) {
                        ValaLocalVariable* _tmp101_ = NULL;
                        _tmp101_ = vala_subroutine_get_result_var ((ValaSubroutine*) m);
                        vala_code_node_accept ((ValaCodeNode*) _tmp101_, (ValaCodeVisitor*) self);
                  }
                  _tmp102_ = vala_subroutine_get_body ((ValaSubroutine*) m);
                  vala_code_node_emit ((ValaCodeNode*) _tmp102_, (ValaCodeGenerator*) self);
                  _tmp104_ = vala_method_get_return_type (m);
                  if (!VALA_IS_VOID_TYPE (_tmp104_)) {
                        ValaDataType* _tmp105_ = NULL;
                        _tmp105_ = vala_method_get_return_type (m);
                        _tmp103_ = !VALA_IS_GENERIC_TYPE (_tmp105_);
                  } else {
                        _tmp103_ = FALSE;
                  }
                  if (_tmp103_) {
                        ValaDataType* _tmp106_ = NULL;
                        gchar* _tmp107_ = NULL;
                        gchar* _tmp108_;
                        ValaCCodeDeclaration* _tmp109_ = NULL;
                        ValaCCodeDeclaration* _tmp110_;
                        ValaCCodeDeclaration* _cdecl_;
                        ValaDataType* _tmp111_ = NULL;
                        ValaCCodeExpression* _tmp112_ = NULL;
                        ValaCCodeExpression* _tmp113_;
                        ValaCCodeVariableDeclarator* _tmp114_ = NULL;
                        ValaCCodeVariableDeclarator* _tmp115_;
                        ValaCCodeFunction* _tmp116_ = NULL;
                        ValaCCodeFunction* _tmp117_ = NULL;
                        ValaCCodeIdentifier* _tmp118_ = NULL;
                        ValaCCodeIdentifier* _tmp119_;
                        ValaCCodeReturnStatement* _tmp120_ = NULL;
                        ValaCCodeReturnStatement* _tmp121_;
                        _tmp106_ = vala_method_get_return_type (m);
                        _tmp107_ = vala_data_type_get_cname (_tmp106_);
                        _tmp108_ = _tmp107_;
                        _tmp109_ = vala_ccode_declaration_new (_tmp108_);
                        _tmp110_ = _tmp109_;
                        _g_free0 (_tmp108_);
                        _cdecl_ = _tmp110_;
                        _tmp111_ = vala_method_get_return_type (m);
                        _tmp112_ = vala_dova_base_module_default_value_for_type ((ValaDovaBaseModule*) self, _tmp111_, TRUE);
                        _tmp113_ = _tmp112_;
                        _tmp114_ = vala_ccode_variable_declarator_new_zero ("result", _tmp113_, NULL);
                        _tmp115_ = _tmp114_;
                        vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp115_);
                        _vala_ccode_node_unref0 (_tmp115_);
                        _vala_ccode_node_unref0 (_tmp113_);
                        _tmp116_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                        vala_ccode_function_add_statement (_tmp116_, (ValaCCodeNode*) _cdecl_);
                        _tmp117_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                        _tmp118_ = vala_ccode_identifier_new ("result");
                        _tmp119_ = _tmp118_;
                        _tmp120_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp119_);
                        _tmp121_ = _tmp120_;
                        vala_ccode_function_add_statement (_tmp117_, (ValaCCodeNode*) _tmp121_);
                        _vala_ccode_node_unref0 (_tmp121_);
                        _vala_ccode_node_unref0 (_tmp119_);
                        _vala_ccode_node_unref0 (_cdecl_);
                  }
                  _tmp122_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
                  _tmp123_ = _tmp122_;
                  _tmp124_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp123_) ? ((ValaStruct*) _tmp123_) : NULL);
                  st = _tmp124_;
                  if (VALA_IS_CREATION_METHOD (m)) {
                        _tmp126_ = st != NULL;
                  } else {
                        _tmp126_ = FALSE;
                  }
                  if (_tmp126_) {
                        gboolean _tmp127_ = FALSE;
                        gboolean _tmp128_ = FALSE;
                        gboolean _tmp129_;
                        _tmp129_ = vala_struct_is_boolean_type (st);
                        if (_tmp129_) {
                              _tmp128_ = TRUE;
                        } else {
                              gboolean _tmp130_;
                              _tmp130_ = vala_struct_is_integer_type (st);
                              _tmp128_ = _tmp130_;
                        }
                        if (_tmp128_) {
                              _tmp127_ = TRUE;
                        } else {
                              gboolean _tmp131_;
                              _tmp131_ = vala_struct_is_floating_type (st);
                              _tmp127_ = _tmp131_;
                        }
                        _tmp125_ = _tmp127_;
                  } else {
                        _tmp125_ = FALSE;
                  }
                  if (_tmp125_) {
                        gchar* _tmp132_ = NULL;
                        gchar* _tmp133_;
                        ValaCCodeDeclaration* _tmp134_ = NULL;
                        ValaCCodeDeclaration* _tmp135_;
                        ValaCCodeDeclaration* _cdecl_;
                        ValaCCodeConstant* _tmp136_ = NULL;
                        ValaCCodeConstant* _tmp137_;
                        ValaCCodeVariableDeclarator* _tmp138_ = NULL;
                        ValaCCodeVariableDeclarator* _tmp139_;
                        ValaCCodeFunction* _tmp140_ = NULL;
                        ValaCCodeFunction* _tmp141_ = NULL;
                        ValaCCodeIdentifier* _tmp142_ = NULL;
                        ValaCCodeIdentifier* _tmp143_;
                        ValaCCodeReturnStatement* _tmp144_ = NULL;
                        ValaCCodeReturnStatement* _tmp145_;
                        _tmp132_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) st, FALSE);
                        _tmp133_ = _tmp132_;
                        _tmp134_ = vala_ccode_declaration_new (_tmp133_);
                        _tmp135_ = _tmp134_;
                        _g_free0 (_tmp133_);
                        _cdecl_ = _tmp135_;
                        _tmp136_ = vala_ccode_constant_new ("0");
                        _tmp137_ = _tmp136_;
                        _tmp138_ = vala_ccode_variable_declarator_new ("this", (ValaCCodeExpression*) _tmp137_, NULL);
                        _tmp139_ = _tmp138_;
                        vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp139_);
                        _vala_ccode_node_unref0 (_tmp139_);
                        _vala_ccode_node_unref0 (_tmp137_);
                        _tmp140_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                        vala_ccode_function_add_statement (_tmp140_, (ValaCCodeNode*) _cdecl_);
                        _tmp141_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                        _tmp142_ = vala_ccode_identifier_new ("this");
                        _tmp143_ = _tmp142_;
                        _tmp144_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp143_);
                        _tmp145_ = _tmp144_;
                        vala_ccode_function_add_statement (_tmp141_, (ValaCCodeNode*) _tmp145_);
                        _vala_ccode_node_unref0 (_tmp145_);
                        _vala_ccode_node_unref0 (_tmp143_);
                        _vala_ccode_node_unref0 (_cdecl_);
                  }
                  vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, function);
                  _vala_code_node_unref0 (st);
            }
      }
      _tmp147_ = vala_method_get_is_abstract (m);
      if (_tmp147_) {
            _tmp146_ = TRUE;
      } else {
            gboolean _tmp148_;
            _tmp148_ = vala_method_get_is_virtual (m);
            _tmp146_ = _tmp148_;
      }
      if (_tmp146_) {
            gchar* _tmp149_ = NULL;
            ValaDataType* _tmp150_ = NULL;
            gchar* _tmp154_ = NULL;
            gchar* _tmp155_;
            ValaCCodeFunction* _tmp156_ = NULL;
            ValaCCodeFunction* _tmp157_;
            ValaCCodeFunction* vfunc;
            ValaCCodeBlock* _tmp158_ = NULL;
            ValaCCodeBlock* _tmp159_;
            ValaSymbol* _tmp160_ = NULL;
            gchar* _tmp161_ = NULL;
            gchar* _tmp162_;
            gchar* _tmp163_ = NULL;
            gchar* _tmp164_;
            ValaCCodeParameter* _tmp165_ = NULL;
            ValaCCodeParameter* _tmp166_;
            ValaDataType* _tmp187_ = NULL;
            gchar* _tmp190_ = NULL;
            gchar* _tmp191_;
            gboolean _tmp192_;
            ValaSymbol* _tmp241_ = NULL;
            ValaCCodeIdentifier* _tmp242_ = NULL;
            ValaCCodeIdentifier* _tmp243_;
            ValaCCodeExpression* _tmp244_ = NULL;
            ValaCCodeExpression* _tmp245_;
            ValaCCodeExpression* _tmp246_ = NULL;
            ValaCCodeExpression* _tmp247_;
            ValaCCodeExpression* vcast;
            const gchar* _tmp248_ = NULL;
            ValaCCodeMemberAccess* _tmp249_ = NULL;
            ValaCCodeMemberAccess* _tmp250_;
            ValaCCodeFunctionCall* _tmp251_ = NULL;
            ValaCCodeFunctionCall* _tmp252_;
            ValaCCodeFunctionCall* vcall;
            ValaCCodeIdentifier* _tmp253_ = NULL;
            ValaCCodeIdentifier* _tmp254_;
            ValaDataType* _tmp271_ = NULL;
            gboolean _tmp274_ = FALSE;
            ValaDataType* _tmp275_ = NULL;
            gchar* _tmp283_ = NULL;
            ValaDataType* _tmp284_ = NULL;
            ValaSymbol* _tmp288_ = NULL;
            gchar* _tmp289_ = NULL;
            gchar* _tmp290_;
            const gchar* _tmp291_ = NULL;
            gchar* _tmp292_ = NULL;
            gchar* _tmp293_;
            ValaCCodeFunction* _tmp294_ = NULL;
            ValaCCodeBlock* _tmp295_ = NULL;
            ValaCCodeBlock* _tmp296_;
            ValaCCodeParameter* _tmp297_ = NULL;
            ValaCCodeParameter* _tmp298_;
            ValaSymbol* _tmp299_ = NULL;
            gchar* _tmp300_ = NULL;
            gchar* _tmp301_;
            gchar* _tmp302_ = NULL;
            gchar* _tmp303_;
            ValaCCodeParameter* _tmp304_ = NULL;
            ValaCCodeParameter* _tmp305_;
            ValaDataType* _tmp326_ = NULL;
            ValaCCodeIdentifier* _tmp329_ = NULL;
            ValaCCodeIdentifier* base_type;
            ValaSymbol* _tmp330_ = NULL;
            ValaCCodeExpression* _tmp331_ = NULL;
            const gchar* _tmp332_ = NULL;
            ValaCCodeMemberAccess* _tmp333_ = NULL;
            ValaCCodeMemberAccess* _tmp334_;
            ValaCCodeFunctionCall* _tmp335_ = NULL;
            ValaCCodeIdentifier* _tmp336_ = NULL;
            ValaCCodeIdentifier* _tmp337_;
            ValaDataType* _tmp354_ = NULL;
            gboolean _tmp357_ = FALSE;
            ValaDataType* _tmp358_ = NULL;
            ValaSymbol* _tmp366_ = NULL;
            gchar* _tmp367_ = NULL;
            gchar* _tmp368_;
            gchar* _tmp369_ = NULL;
            gchar* _tmp370_;
            gchar* param_list;
            ValaDataType* _tmp379_ = NULL;
            gchar* _tmp381_;
            ValaSymbol* _tmp382_ = NULL;
            gchar* _tmp383_ = NULL;
            gchar* _tmp384_;
            const gchar* _tmp385_ = NULL;
            gchar* _tmp386_ = NULL;
            gchar* _tmp387_;
            ValaCCodeFunction* _tmp388_ = NULL;
            ValaCCodeFunction* _tmp389_;
            ValaCCodeFunction* override_func;
            ValaCCodeParameter* _tmp390_ = NULL;
            ValaCCodeParameter* _tmp391_;
            gchar* _tmp392_ = NULL;
            ValaDataType* _tmp393_ = NULL;
            gchar* _tmp397_ = NULL;
            gchar* _tmp398_;
            ValaCCodeParameter* _tmp399_ = NULL;
            ValaCCodeParameter* _tmp400_;
            ValaCCodeBlock* _tmp401_ = NULL;
            ValaCCodeBlock* _tmp402_;
            ValaSymbol* _tmp403_ = NULL;
            ValaCCodeIdentifier* _tmp404_ = NULL;
            ValaCCodeIdentifier* _tmp405_;
            ValaCCodeExpression* _tmp406_ = NULL;
            ValaCCodeBlock* _tmp407_ = NULL;
            const gchar* _tmp408_ = NULL;
            ValaCCodeMemberAccess* _tmp409_ = NULL;
            ValaCCodeMemberAccess* _tmp410_;
            ValaCCodeIdentifier* _tmp411_ = NULL;
            ValaCCodeIdentifier* _tmp412_;
            ValaCCodeAssignment* _tmp413_ = NULL;
            ValaCCodeAssignment* _tmp414_;
            ValaCCodeExpressionStatement* _tmp415_ = NULL;
            ValaCCodeExpressionStatement* _tmp416_;
            vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, VALA_CLASS (((ValaDovaBaseModule*) self)->object_class), ((ValaDovaBaseModule*) self)->cfile);
            _tmp150_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp150_)) {
                  gchar* _tmp151_;
                  _tmp151_ = g_strdup ("void");
                  _g_free0 (_tmp149_);
                  _tmp149_ = _tmp151_;
            } else {
                  ValaDataType* _tmp152_ = NULL;
                  gchar* _tmp153_ = NULL;
                  _tmp152_ = vala_method_get_return_type (m);
                  _tmp153_ = vala_data_type_get_cname (_tmp152_);
                  _g_free0 (_tmp149_);
                  _tmp149_ = _tmp153_;
            }
            _tmp154_ = vala_method_get_cname (m);
            _tmp155_ = _tmp154_;
            _tmp156_ = vala_ccode_function_new (_tmp155_, _tmp149_);
            _tmp157_ = _tmp156_;
            _g_free0 (_tmp155_);
            vfunc = _tmp157_;
            _tmp158_ = vala_ccode_block_new ();
            _tmp159_ = _tmp158_;
            vala_ccode_function_set_block (vfunc, _tmp159_);
            _vala_ccode_node_unref0 (_tmp159_);
            _tmp160_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp161_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_OBJECT_TYPE_SYMBOL (_tmp160_), FALSE);
            _tmp162_ = _tmp161_;
            _tmp163_ = g_strdup_printf ("%s *", _tmp162_);
            _tmp164_ = _tmp163_;
            _tmp165_ = vala_ccode_parameter_new ("this", _tmp164_);
            _tmp166_ = _tmp165_;
            vala_ccode_function_add_parameter (vfunc, _tmp166_);
            _vala_ccode_node_unref0 (_tmp166_);
            _g_free0 (_tmp164_);
            _g_free0 (_tmp162_);
            {
                  ValaList* _tmp167_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp168_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp167_ = vala_method_get_type_parameters (m);
                  _type_param_list = _tmp167_;
                  _tmp168_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp168_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp169_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp170_ = NULL;
                        gchar* _tmp171_ = NULL;
                        gchar* _tmp172_;
                        gchar* _tmp173_ = NULL;
                        gchar* _tmp174_;
                        ValaCCodeParameter* _tmp175_ = NULL;
                        ValaCCodeParameter* _tmp176_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp169_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp169_;
                        _tmp170_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp171_ = g_utf8_strdown (_tmp170_, (gssize) (-1));
                        _tmp172_ = _tmp171_;
                        _tmp173_ = g_strdup_printf ("%s_type", _tmp172_);
                        _tmp174_ = _tmp173_;
                        _tmp175_ = vala_ccode_parameter_new (_tmp174_, "DovaType*");
                        _tmp176_ = _tmp175_;
                        vala_ccode_function_add_parameter (vfunc, _tmp176_);
                        _vala_ccode_node_unref0 (_tmp176_);
                        _g_free0 (_tmp174_);
                        _g_free0 (_tmp172_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
            {
                  ValaList* _tmp177_ = NULL;
                  ValaList* _param_list;
                  gint _tmp178_;
                  gint _param_size;
                  gint _param_index;
                  _tmp177_ = vala_method_get_parameters (m);
                  _param_list = _tmp177_;
                  _tmp178_ = vala_collection_get_size ((ValaCollection*) _param_list);
                  _param_size = _tmp178_;
                  _param_index = -1;
                  while (TRUE) {
                        gpointer _tmp179_ = NULL;
                        ValaParameter* param;
                        ValaDataType* _tmp180_ = NULL;
                        gchar* _tmp181_ = NULL;
                        gchar* ctypename;
                        ValaParameterDirection _tmp182_;
                        const gchar* _tmp184_ = NULL;
                        ValaCCodeParameter* _tmp185_ = NULL;
                        ValaCCodeParameter* _tmp186_;
                        _param_index = _param_index + 1;
                        if (!(_param_index < _param_size)) {
                              break;
                        }
                        _tmp179_ = vala_list_get (_param_list, _param_index);
                        param = (ValaParameter*) _tmp179_;
                        _tmp180_ = vala_variable_get_variable_type ((ValaVariable*) param);
                        _tmp181_ = vala_data_type_get_cname (_tmp180_);
                        ctypename = _tmp181_;
                        _tmp182_ = vala_parameter_get_direction (param);
                        if (_tmp182_ != VALA_PARAMETER_DIRECTION_IN) {
                              gchar* _tmp183_;
                              _tmp183_ = g_strconcat (ctypename, "*", NULL);
                              _g_free0 (ctypename);
                              ctypename = _tmp183_;
                        }
                        _tmp184_ = vala_symbol_get_name ((ValaSymbol*) param);
                        _tmp185_ = vala_ccode_parameter_new (_tmp184_, ctypename);
                        _tmp186_ = _tmp185_;
                        vala_ccode_function_add_parameter (vfunc, _tmp186_);
                        _vala_ccode_node_unref0 (_tmp186_);
                        _g_free0 (ctypename);
                        _vala_code_node_unref0 (param);
                  }
                  _vala_iterable_unref0 (_param_list);
            }
            _tmp187_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp187_)) {
                  ValaCCodeParameter* _tmp188_ = NULL;
                  ValaCCodeParameter* _tmp189_;
                  _tmp188_ = vala_ccode_parameter_new ("result", "void *");
                  _tmp189_ = _tmp188_;
                  vala_ccode_function_add_parameter (vfunc, _tmp189_);
                  _vala_ccode_node_unref0 (_tmp189_);
            }
            _tmp190_ = vala_symbol_get_full_name ((ValaSymbol*) m);
            _tmp191_ = _tmp190_;
            _tmp192_ = g_strcmp0 (_tmp191_, "any.equals") == 0;
            _g_free0 (_tmp191_);
            if (_tmp192_) {
                  ValaCCodeBlock* _tmp193_ = NULL;
                  ValaCCodeBlock* null_block;
                  ValaCCodeIdentifier* _tmp194_ = NULL;
                  ValaCCodeIdentifier* _tmp195_;
                  ValaCCodeUnaryExpression* _tmp196_ = NULL;
                  ValaCCodeUnaryExpression* _tmp197_;
                  ValaCCodeReturnStatement* _tmp198_ = NULL;
                  ValaCCodeReturnStatement* _tmp199_;
                  ValaCCodeBlock* _tmp200_ = NULL;
                  ValaCCodeIdentifier* _tmp201_ = NULL;
                  ValaCCodeIdentifier* _tmp202_;
                  ValaCCodeUnaryExpression* _tmp203_ = NULL;
                  ValaCCodeUnaryExpression* _tmp204_;
                  ValaCCodeIfStatement* _tmp205_ = NULL;
                  ValaCCodeIfStatement* _tmp206_;
                  _tmp193_ = vala_ccode_block_new ();
                  null_block = _tmp193_;
                  _tmp194_ = vala_ccode_identifier_new ("other");
                  _tmp195_ = _tmp194_;
                  _tmp196_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp195_);
                  _tmp197_ = _tmp196_;
                  _tmp198_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp197_);
                  _tmp199_ = _tmp198_;
                  vala_ccode_block_add_statement (null_block, (ValaCCodeNode*) _tmp199_);
                  _vala_ccode_node_unref0 (_tmp199_);
                  _vala_ccode_node_unref0 (_tmp197_);
                  _vala_ccode_node_unref0 (_tmp195_);
                  _tmp200_ = vala_ccode_function_get_block (vfunc);
                  _tmp201_ = vala_ccode_identifier_new ("this");
                  _tmp202_ = _tmp201_;
                  _tmp203_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp202_);
                  _tmp204_ = _tmp203_;
                  _tmp205_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp204_, (ValaCCodeStatement*) null_block, NULL);
                  _tmp206_ = _tmp205_;
                  vala_ccode_block_add_statement (_tmp200_, (ValaCCodeNode*) _tmp206_);
                  _vala_ccode_node_unref0 (_tmp206_);
                  _vala_ccode_node_unref0 (_tmp204_);
                  _vala_ccode_node_unref0 (_tmp202_);
                  _vala_ccode_node_unref0 (null_block);
            } else {
                  gchar* _tmp207_ = NULL;
                  gchar* _tmp208_;
                  gboolean _tmp209_;
                  _tmp207_ = vala_symbol_get_full_name ((ValaSymbol*) m);
                  _tmp208_ = _tmp207_;
                  _tmp209_ = g_strcmp0 (_tmp208_, "any.hash") == 0;
                  _g_free0 (_tmp208_);
                  if (_tmp209_) {
                        ValaCCodeBlock* _tmp210_ = NULL;
                        ValaCCodeBlock* null_block;
                        ValaCCodeConstant* _tmp211_ = NULL;
                        ValaCCodeConstant* _tmp212_;
                        ValaCCodeReturnStatement* _tmp213_ = NULL;
                        ValaCCodeReturnStatement* _tmp214_;
                        ValaCCodeBlock* _tmp215_ = NULL;
                        ValaCCodeIdentifier* _tmp216_ = NULL;
                        ValaCCodeIdentifier* _tmp217_;
                        ValaCCodeUnaryExpression* _tmp218_ = NULL;
                        ValaCCodeUnaryExpression* _tmp219_;
                        ValaCCodeIfStatement* _tmp220_ = NULL;
                        ValaCCodeIfStatement* _tmp221_;
                        _tmp210_ = vala_ccode_block_new ();
                        null_block = _tmp210_;
                        _tmp211_ = vala_ccode_constant_new ("0");
                        _tmp212_ = _tmp211_;
                        _tmp213_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp212_);
                        _tmp214_ = _tmp213_;
                        vala_ccode_block_add_statement (null_block, (ValaCCodeNode*) _tmp214_);
                        _vala_ccode_node_unref0 (_tmp214_);
                        _vala_ccode_node_unref0 (_tmp212_);
                        _tmp215_ = vala_ccode_function_get_block (vfunc);
                        _tmp216_ = vala_ccode_identifier_new ("this");
                        _tmp217_ = _tmp216_;
                        _tmp218_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp217_);
                        _tmp219_ = _tmp218_;
                        _tmp220_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp219_, (ValaCCodeStatement*) null_block, NULL);
                        _tmp221_ = _tmp220_;
                        vala_ccode_block_add_statement (_tmp215_, (ValaCCodeNode*) _tmp221_);
                        _vala_ccode_node_unref0 (_tmp221_);
                        _vala_ccode_node_unref0 (_tmp219_);
                        _vala_ccode_node_unref0 (_tmp217_);
                        _vala_ccode_node_unref0 (null_block);
                  } else {
                        gchar* _tmp222_ = NULL;
                        gchar* _tmp223_;
                        gboolean _tmp224_;
                        _tmp222_ = vala_symbol_get_full_name ((ValaSymbol*) m);
                        _tmp223_ = _tmp222_;
                        _tmp224_ = g_strcmp0 (_tmp223_, "any.to_string") == 0;
                        _g_free0 (_tmp223_);
                        if (_tmp224_) {
                              ValaCCodeIdentifier* _tmp225_ = NULL;
                              ValaCCodeIdentifier* _tmp226_;
                              ValaCCodeFunctionCall* _tmp227_ = NULL;
                              ValaCCodeFunctionCall* _tmp228_;
                              ValaCCodeFunctionCall* null_string;
                              ValaCCodeConstant* _tmp229_ = NULL;
                              ValaCCodeConstant* _tmp230_;
                              ValaCCodeBlock* _tmp231_ = NULL;
                              ValaCCodeBlock* null_block;
                              ValaCCodeReturnStatement* _tmp232_ = NULL;
                              ValaCCodeReturnStatement* _tmp233_;
                              ValaCCodeBlock* _tmp234_ = NULL;
                              ValaCCodeIdentifier* _tmp235_ = NULL;
                              ValaCCodeIdentifier* _tmp236_;
                              ValaCCodeUnaryExpression* _tmp237_ = NULL;
                              ValaCCodeUnaryExpression* _tmp238_;
                              ValaCCodeIfStatement* _tmp239_ = NULL;
                              ValaCCodeIfStatement* _tmp240_;
                              _tmp225_ = vala_ccode_identifier_new ("string_create_from_cstring");
                              _tmp226_ = _tmp225_;
                              _tmp227_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp226_);
                              _tmp228_ = _tmp227_;
                              _vala_ccode_node_unref0 (_tmp226_);
                              null_string = _tmp228_;
                              _tmp229_ = vala_ccode_constant_new ("\"(null)\"");
                              _tmp230_ = _tmp229_;
                              vala_ccode_function_call_add_argument (null_string, (ValaCCodeExpression*) _tmp230_);
                              _vala_ccode_node_unref0 (_tmp230_);
                              _tmp231_ = vala_ccode_block_new ();
                              null_block = _tmp231_;
                              _tmp232_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) null_string);
                              _tmp233_ = _tmp232_;
                              vala_ccode_block_add_statement (null_block, (ValaCCodeNode*) _tmp233_);
                              _vala_ccode_node_unref0 (_tmp233_);
                              _tmp234_ = vala_ccode_function_get_block (vfunc);
                              _tmp235_ = vala_ccode_identifier_new ("this");
                              _tmp236_ = _tmp235_;
                              _tmp237_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp236_);
                              _tmp238_ = _tmp237_;
                              _tmp239_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) _tmp238_, (ValaCCodeStatement*) null_block, NULL);
                              _tmp240_ = _tmp239_;
                              vala_ccode_block_add_statement (_tmp234_, (ValaCCodeNode*) _tmp240_);
                              _vala_ccode_node_unref0 (_tmp240_);
                              _vala_ccode_node_unref0 (_tmp238_);
                              _vala_ccode_node_unref0 (_tmp236_);
                              _vala_ccode_node_unref0 (null_block);
                              _vala_ccode_node_unref0 (null_string);
                        }
                  }
            }
            _tmp241_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp242_ = vala_ccode_identifier_new ("this");
            _tmp243_ = _tmp242_;
            _tmp244_ = vala_dova_object_module_get_type_from_instance (self, (ValaCCodeExpression*) _tmp243_);
            _tmp245_ = _tmp244_;
            _tmp246_ = vala_dova_base_module_get_type_private_from_type ((ValaDovaBaseModule*) self, VALA_OBJECT_TYPE_SYMBOL (_tmp241_), _tmp245_);
            _tmp247_ = _tmp246_;
            _vala_ccode_node_unref0 (_tmp245_);
            _vala_ccode_node_unref0 (_tmp243_);
            vcast = _tmp247_;
            _tmp248_ = vala_method_get_vfunc_name (m);
            _tmp249_ = vala_ccode_member_access_new_pointer (vcast, _tmp248_);
            _tmp250_ = _tmp249_;
            _tmp251_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp250_);
            _tmp252_ = _tmp251_;
            _vala_ccode_node_unref0 (_tmp250_);
            vcall = _tmp252_;
            _tmp253_ = vala_ccode_identifier_new ("this");
            _tmp254_ = _tmp253_;
            vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp254_);
            _vala_ccode_node_unref0 (_tmp254_);
            {
                  ValaList* _tmp255_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp256_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp255_ = vala_method_get_type_parameters (m);
                  _type_param_list = _tmp255_;
                  _tmp256_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp256_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp257_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp258_ = NULL;
                        gchar* _tmp259_ = NULL;
                        gchar* _tmp260_;
                        gchar* _tmp261_ = NULL;
                        gchar* _tmp262_;
                        ValaCCodeIdentifier* _tmp263_ = NULL;
                        ValaCCodeIdentifier* _tmp264_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp257_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp257_;
                        _tmp258_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp259_ = g_utf8_strdown (_tmp258_, (gssize) (-1));
                        _tmp260_ = _tmp259_;
                        _tmp261_ = g_strdup_printf ("%s_type", _tmp260_);
                        _tmp262_ = _tmp261_;
                        _tmp263_ = vala_ccode_identifier_new (_tmp262_);
                        _tmp264_ = _tmp263_;
                        vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp264_);
                        _vala_ccode_node_unref0 (_tmp264_);
                        _g_free0 (_tmp262_);
                        _g_free0 (_tmp260_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
            {
                  ValaList* _tmp265_ = NULL;
                  ValaList* _param_list;
                  gint _tmp266_;
                  gint _param_size;
                  gint _param_index;
                  _tmp265_ = vala_method_get_parameters (m);
                  _param_list = _tmp265_;
                  _tmp266_ = vala_collection_get_size ((ValaCollection*) _param_list);
                  _param_size = _tmp266_;
                  _param_index = -1;
                  while (TRUE) {
                        gpointer _tmp267_ = NULL;
                        ValaParameter* param;
                        const gchar* _tmp268_ = NULL;
                        ValaCCodeIdentifier* _tmp269_ = NULL;
                        ValaCCodeIdentifier* _tmp270_;
                        _param_index = _param_index + 1;
                        if (!(_param_index < _param_size)) {
                              break;
                        }
                        _tmp267_ = vala_list_get (_param_list, _param_index);
                        param = (ValaParameter*) _tmp267_;
                        _tmp268_ = vala_symbol_get_name ((ValaSymbol*) param);
                        _tmp269_ = vala_ccode_identifier_new (_tmp268_);
                        _tmp270_ = _tmp269_;
                        vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp270_);
                        _vala_ccode_node_unref0 (_tmp270_);
                        _vala_code_node_unref0 (param);
                  }
                  _vala_iterable_unref0 (_param_list);
            }
            _tmp271_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp271_)) {
                  ValaCCodeIdentifier* _tmp272_ = NULL;
                  ValaCCodeIdentifier* _tmp273_;
                  _tmp272_ = vala_ccode_identifier_new ("result");
                  _tmp273_ = _tmp272_;
                  vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp273_);
                  _vala_ccode_node_unref0 (_tmp273_);
            }
            _tmp275_ = vala_method_get_return_type (m);
            if (VALA_IS_VOID_TYPE (_tmp275_)) {
                  _tmp274_ = TRUE;
            } else {
                  ValaDataType* _tmp276_ = NULL;
                  _tmp276_ = vala_method_get_return_type (m);
                  _tmp274_ = VALA_IS_GENERIC_TYPE (_tmp276_);
            }
            if (_tmp274_) {
                  ValaCCodeBlock* _tmp277_ = NULL;
                  ValaCCodeExpressionStatement* _tmp278_ = NULL;
                  ValaCCodeExpressionStatement* _tmp279_;
                  _tmp277_ = vala_ccode_function_get_block (vfunc);
                  _tmp278_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) vcall);
                  _tmp279_ = _tmp278_;
                  vala_ccode_block_add_statement (_tmp277_, (ValaCCodeNode*) _tmp279_);
                  _vala_ccode_node_unref0 (_tmp279_);
            } else {
                  ValaCCodeBlock* _tmp280_ = NULL;
                  ValaCCodeReturnStatement* _tmp281_ = NULL;
                  ValaCCodeReturnStatement* _tmp282_;
                  _tmp280_ = vala_ccode_function_get_block (vfunc);
                  _tmp281_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) vcall);
                  _tmp282_ = _tmp281_;
                  vala_ccode_block_add_statement (_tmp280_, (ValaCCodeNode*) _tmp282_);
                  _vala_ccode_node_unref0 (_tmp282_);
            }
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, vfunc);
            _tmp284_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp284_)) {
                  gchar* _tmp285_;
                  _tmp285_ = g_strdup ("void");
                  _g_free0 (_tmp283_);
                  _tmp283_ = _tmp285_;
            } else {
                  ValaDataType* _tmp286_ = NULL;
                  gchar* _tmp287_ = NULL;
                  _tmp286_ = vala_method_get_return_type (m);
                  _tmp287_ = vala_data_type_get_cname (_tmp286_);
                  _g_free0 (_tmp283_);
                  _tmp283_ = _tmp287_;
            }
            _tmp288_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp289_ = vala_symbol_get_lower_case_cprefix (_tmp288_);
            _tmp290_ = _tmp289_;
            _tmp291_ = vala_symbol_get_name ((ValaSymbol*) m);
            _tmp292_ = g_strdup_printf ("%sbase_%s", _tmp290_, _tmp291_);
            _tmp293_ = _tmp292_;
            _tmp294_ = vala_ccode_function_new (_tmp293_, _tmp283_);
            _vala_ccode_node_unref0 (vfunc);
            vfunc = _tmp294_;
            _g_free0 (_tmp293_);
            _g_free0 (_tmp290_);
            _tmp295_ = vala_ccode_block_new ();
            _tmp296_ = _tmp295_;
            vala_ccode_function_set_block (vfunc, _tmp296_);
            _vala_ccode_node_unref0 (_tmp296_);
            _tmp297_ = vala_ccode_parameter_new ("base_type", "DovaType *");
            _tmp298_ = _tmp297_;
            vala_ccode_function_add_parameter (vfunc, _tmp298_);
            _vala_ccode_node_unref0 (_tmp298_);
            _tmp299_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp300_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_OBJECT_TYPE_SYMBOL (_tmp299_), FALSE);
            _tmp301_ = _tmp300_;
            _tmp302_ = g_strdup_printf ("%s *", _tmp301_);
            _tmp303_ = _tmp302_;
            _tmp304_ = vala_ccode_parameter_new ("this", _tmp303_);
            _tmp305_ = _tmp304_;
            vala_ccode_function_add_parameter (vfunc, _tmp305_);
            _vala_ccode_node_unref0 (_tmp305_);
            _g_free0 (_tmp303_);
            _g_free0 (_tmp301_);
            {
                  ValaList* _tmp306_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp307_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp306_ = vala_method_get_type_parameters (m);
                  _type_param_list = _tmp306_;
                  _tmp307_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp307_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp308_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp309_ = NULL;
                        gchar* _tmp310_ = NULL;
                        gchar* _tmp311_;
                        gchar* _tmp312_ = NULL;
                        gchar* _tmp313_;
                        ValaCCodeParameter* _tmp314_ = NULL;
                        ValaCCodeParameter* _tmp315_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp308_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp308_;
                        _tmp309_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp310_ = g_utf8_strdown (_tmp309_, (gssize) (-1));
                        _tmp311_ = _tmp310_;
                        _tmp312_ = g_strdup_printf ("%s_type", _tmp311_);
                        _tmp313_ = _tmp312_;
                        _tmp314_ = vala_ccode_parameter_new (_tmp313_, "DovaType*");
                        _tmp315_ = _tmp314_;
                        vala_ccode_function_add_parameter (vfunc, _tmp315_);
                        _vala_ccode_node_unref0 (_tmp315_);
                        _g_free0 (_tmp313_);
                        _g_free0 (_tmp311_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
            {
                  ValaList* _tmp316_ = NULL;
                  ValaList* _param_list;
                  gint _tmp317_;
                  gint _param_size;
                  gint _param_index;
                  _tmp316_ = vala_method_get_parameters (m);
                  _param_list = _tmp316_;
                  _tmp317_ = vala_collection_get_size ((ValaCollection*) _param_list);
                  _param_size = _tmp317_;
                  _param_index = -1;
                  while (TRUE) {
                        gpointer _tmp318_ = NULL;
                        ValaParameter* param;
                        ValaDataType* _tmp319_ = NULL;
                        gchar* _tmp320_ = NULL;
                        gchar* ctypename;
                        ValaParameterDirection _tmp321_;
                        const gchar* _tmp323_ = NULL;
                        ValaCCodeParameter* _tmp324_ = NULL;
                        ValaCCodeParameter* _tmp325_;
                        _param_index = _param_index + 1;
                        if (!(_param_index < _param_size)) {
                              break;
                        }
                        _tmp318_ = vala_list_get (_param_list, _param_index);
                        param = (ValaParameter*) _tmp318_;
                        _tmp319_ = vala_variable_get_variable_type ((ValaVariable*) param);
                        _tmp320_ = vala_data_type_get_cname (_tmp319_);
                        ctypename = _tmp320_;
                        _tmp321_ = vala_parameter_get_direction (param);
                        if (_tmp321_ != VALA_PARAMETER_DIRECTION_IN) {
                              gchar* _tmp322_;
                              _tmp322_ = g_strconcat (ctypename, "*", NULL);
                              _g_free0 (ctypename);
                              ctypename = _tmp322_;
                        }
                        _tmp323_ = vala_symbol_get_name ((ValaSymbol*) param);
                        _tmp324_ = vala_ccode_parameter_new (_tmp323_, ctypename);
                        _tmp325_ = _tmp324_;
                        vala_ccode_function_add_parameter (vfunc, _tmp325_);
                        _vala_ccode_node_unref0 (_tmp325_);
                        _g_free0 (ctypename);
                        _vala_code_node_unref0 (param);
                  }
                  _vala_iterable_unref0 (_param_list);
            }
            _tmp326_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp326_)) {
                  ValaCCodeParameter* _tmp327_ = NULL;
                  ValaCCodeParameter* _tmp328_;
                  _tmp327_ = vala_ccode_parameter_new ("result", "void *");
                  _tmp328_ = _tmp327_;
                  vala_ccode_function_add_parameter (vfunc, _tmp328_);
                  _vala_ccode_node_unref0 (_tmp328_);
            }
            _tmp329_ = vala_ccode_identifier_new ("base_type");
            base_type = _tmp329_;
            _tmp330_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp331_ = vala_dova_base_module_get_type_private_from_type ((ValaDovaBaseModule*) self, VALA_OBJECT_TYPE_SYMBOL (_tmp330_), (ValaCCodeExpression*) base_type);
            _vala_ccode_node_unref0 (vcast);
            vcast = _tmp331_;
            _tmp332_ = vala_method_get_vfunc_name (m);
            _tmp333_ = vala_ccode_member_access_new_pointer (vcast, _tmp332_);
            _tmp334_ = _tmp333_;
            _tmp335_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp334_);
            _vala_ccode_node_unref0 (vcall);
            vcall = _tmp335_;
            _vala_ccode_node_unref0 (_tmp334_);
            _tmp336_ = vala_ccode_identifier_new ("this");
            _tmp337_ = _tmp336_;
            vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp337_);
            _vala_ccode_node_unref0 (_tmp337_);
            {
                  ValaList* _tmp338_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp339_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp338_ = vala_method_get_type_parameters (m);
                  _type_param_list = _tmp338_;
                  _tmp339_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp339_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp340_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp341_ = NULL;
                        gchar* _tmp342_ = NULL;
                        gchar* _tmp343_;
                        gchar* _tmp344_ = NULL;
                        gchar* _tmp345_;
                        ValaCCodeIdentifier* _tmp346_ = NULL;
                        ValaCCodeIdentifier* _tmp347_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp340_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp340_;
                        _tmp341_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp342_ = g_utf8_strdown (_tmp341_, (gssize) (-1));
                        _tmp343_ = _tmp342_;
                        _tmp344_ = g_strdup_printf ("%s_type", _tmp343_);
                        _tmp345_ = _tmp344_;
                        _tmp346_ = vala_ccode_identifier_new (_tmp345_);
                        _tmp347_ = _tmp346_;
                        vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp347_);
                        _vala_ccode_node_unref0 (_tmp347_);
                        _g_free0 (_tmp345_);
                        _g_free0 (_tmp343_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
            {
                  ValaList* _tmp348_ = NULL;
                  ValaList* _param_list;
                  gint _tmp349_;
                  gint _param_size;
                  gint _param_index;
                  _tmp348_ = vala_method_get_parameters (m);
                  _param_list = _tmp348_;
                  _tmp349_ = vala_collection_get_size ((ValaCollection*) _param_list);
                  _param_size = _tmp349_;
                  _param_index = -1;
                  while (TRUE) {
                        gpointer _tmp350_ = NULL;
                        ValaParameter* param;
                        const gchar* _tmp351_ = NULL;
                        ValaCCodeIdentifier* _tmp352_ = NULL;
                        ValaCCodeIdentifier* _tmp353_;
                        _param_index = _param_index + 1;
                        if (!(_param_index < _param_size)) {
                              break;
                        }
                        _tmp350_ = vala_list_get (_param_list, _param_index);
                        param = (ValaParameter*) _tmp350_;
                        _tmp351_ = vala_symbol_get_name ((ValaSymbol*) param);
                        _tmp352_ = vala_ccode_identifier_new (_tmp351_);
                        _tmp353_ = _tmp352_;
                        vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp353_);
                        _vala_ccode_node_unref0 (_tmp353_);
                        _vala_code_node_unref0 (param);
                  }
                  _vala_iterable_unref0 (_param_list);
            }
            _tmp354_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp354_)) {
                  ValaCCodeIdentifier* _tmp355_ = NULL;
                  ValaCCodeIdentifier* _tmp356_;
                  _tmp355_ = vala_ccode_identifier_new ("result");
                  _tmp356_ = _tmp355_;
                  vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp356_);
                  _vala_ccode_node_unref0 (_tmp356_);
            }
            _tmp358_ = vala_method_get_return_type (m);
            if (VALA_IS_VOID_TYPE (_tmp358_)) {
                  _tmp357_ = TRUE;
            } else {
                  ValaDataType* _tmp359_ = NULL;
                  _tmp359_ = vala_method_get_return_type (m);
                  _tmp357_ = VALA_IS_GENERIC_TYPE (_tmp359_);
            }
            if (_tmp357_) {
                  ValaCCodeBlock* _tmp360_ = NULL;
                  ValaCCodeExpressionStatement* _tmp361_ = NULL;
                  ValaCCodeExpressionStatement* _tmp362_;
                  _tmp360_ = vala_ccode_function_get_block (vfunc);
                  _tmp361_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) vcall);
                  _tmp362_ = _tmp361_;
                  vala_ccode_block_add_statement (_tmp360_, (ValaCCodeNode*) _tmp362_);
                  _vala_ccode_node_unref0 (_tmp362_);
            } else {
                  ValaCCodeBlock* _tmp363_ = NULL;
                  ValaCCodeReturnStatement* _tmp364_ = NULL;
                  ValaCCodeReturnStatement* _tmp365_;
                  _tmp363_ = vala_ccode_function_get_block (vfunc);
                  _tmp364_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) vcall);
                  _tmp365_ = _tmp364_;
                  vala_ccode_block_add_statement (_tmp363_, (ValaCCodeNode*) _tmp365_);
                  _vala_ccode_node_unref0 (_tmp365_);
            }
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, vfunc);
            _tmp366_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp367_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_OBJECT_TYPE_SYMBOL (_tmp366_), FALSE);
            _tmp368_ = _tmp367_;
            _tmp369_ = g_strdup_printf ("(%s *this", _tmp368_);
            _tmp370_ = _tmp369_;
            _g_free0 (_tmp368_);
            param_list = _tmp370_;
            {
                  ValaList* _tmp371_ = NULL;
                  ValaList* _param_list;
                  gint _tmp372_;
                  gint _param_size;
                  gint _param_index;
                  _tmp371_ = vala_method_get_parameters (m);
                  _param_list = _tmp371_;
                  _tmp372_ = vala_collection_get_size ((ValaCollection*) _param_list);
                  _param_size = _tmp372_;
                  _param_index = -1;
                  while (TRUE) {
                        gpointer _tmp373_ = NULL;
                        ValaParameter* param;
                        gchar* _tmp374_;
                        ValaDataType* _tmp375_ = NULL;
                        gchar* _tmp376_ = NULL;
                        gchar* _tmp377_;
                        gchar* _tmp378_;
                        _param_index = _param_index + 1;
                        if (!(_param_index < _param_size)) {
                              break;
                        }
                        _tmp373_ = vala_list_get (_param_list, _param_index);
                        param = (ValaParameter*) _tmp373_;
                        _tmp374_ = g_strconcat (param_list, ", ", NULL);
                        _g_free0 (param_list);
                        param_list = _tmp374_;
                        _tmp375_ = vala_variable_get_variable_type ((ValaVariable*) param);
                        _tmp376_ = vala_data_type_get_cname (_tmp375_);
                        _tmp377_ = _tmp376_;
                        _tmp378_ = g_strconcat (param_list, _tmp377_, NULL);
                        _g_free0 (param_list);
                        param_list = _tmp378_;
                        _g_free0 (_tmp377_);
                        _vala_code_node_unref0 (param);
                  }
                  _vala_iterable_unref0 (_param_list);
            }
            _tmp379_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp379_)) {
                  gchar* _tmp380_;
                  _tmp380_ = g_strconcat (param_list, ", void *", NULL);
                  _g_free0 (param_list);
                  param_list = _tmp380_;
            }
            _tmp381_ = g_strconcat (param_list, ")", NULL);
            _g_free0 (param_list);
            param_list = _tmp381_;
            _tmp382_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp383_ = vala_symbol_get_lower_case_cprefix (_tmp382_);
            _tmp384_ = _tmp383_;
            _tmp385_ = vala_symbol_get_name ((ValaSymbol*) m);
            _tmp386_ = g_strdup_printf ("%soverride_%s", _tmp384_, _tmp385_);
            _tmp387_ = _tmp386_;
            _tmp388_ = vala_ccode_function_new (_tmp387_, "void");
            _tmp389_ = _tmp388_;
            _g_free0 (_tmp387_);
            _g_free0 (_tmp384_);
            override_func = _tmp389_;
            _tmp390_ = vala_ccode_parameter_new ("type", "DovaType *");
            _tmp391_ = _tmp390_;
            vala_ccode_function_add_parameter (override_func, _tmp391_);
            _vala_ccode_node_unref0 (_tmp391_);
            _tmp393_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp393_)) {
                  gchar* _tmp394_;
                  _tmp394_ = g_strdup ("void");
                  _g_free0 (_tmp392_);
                  _tmp392_ = _tmp394_;
            } else {
                  ValaDataType* _tmp395_ = NULL;
                  gchar* _tmp396_ = NULL;
                  _tmp395_ = vala_method_get_return_type (m);
                  _tmp396_ = vala_data_type_get_cname (_tmp395_);
                  _g_free0 (_tmp392_);
                  _tmp392_ = _tmp396_;
            }
            _tmp397_ = g_strdup_printf ("(*function) %s", param_list);
            _tmp398_ = _tmp397_;
            _tmp399_ = vala_ccode_parameter_new (_tmp398_, _tmp392_);
            _tmp400_ = _tmp399_;
            vala_ccode_function_add_parameter (override_func, _tmp400_);
            _vala_ccode_node_unref0 (_tmp400_);
            _g_free0 (_tmp398_);
            _tmp401_ = vala_ccode_block_new ();
            _tmp402_ = _tmp401_;
            vala_ccode_function_set_block (override_func, _tmp402_);
            _vala_ccode_node_unref0 (_tmp402_);
            _tmp403_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp404_ = vala_ccode_identifier_new ("type");
            _tmp405_ = _tmp404_;
            _tmp406_ = vala_dova_base_module_get_type_private_from_type ((ValaDovaBaseModule*) self, VALA_OBJECT_TYPE_SYMBOL (_tmp403_), (ValaCCodeExpression*) _tmp405_);
            _vala_ccode_node_unref0 (vcast);
            vcast = _tmp406_;
            _vala_ccode_node_unref0 (_tmp405_);
            _tmp407_ = vala_ccode_function_get_block (override_func);
            _tmp408_ = vala_symbol_get_name ((ValaSymbol*) m);
            _tmp409_ = vala_ccode_member_access_new_pointer (vcast, _tmp408_);
            _tmp410_ = _tmp409_;
            _tmp411_ = vala_ccode_identifier_new ("function");
            _tmp412_ = _tmp411_;
            _tmp413_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp410_, (ValaCCodeExpression*) _tmp412_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp414_ = _tmp413_;
            _tmp415_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp414_);
            _tmp416_ = _tmp415_;
            vala_ccode_block_add_statement (_tmp407_, (ValaCCodeNode*) _tmp416_);
            _vala_ccode_node_unref0 (_tmp416_);
            _vala_ccode_node_unref0 (_tmp414_);
            _vala_ccode_node_unref0 (_tmp412_);
            _vala_ccode_node_unref0 (_tmp410_);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, override_func);
            _g_free0 (_tmp392_);
            _vala_ccode_node_unref0 (override_func);
            _g_free0 (param_list);
            _vala_ccode_node_unref0 (base_type);
            _g_free0 (_tmp283_);
            _vala_ccode_node_unref0 (vcall);
            _vala_ccode_node_unref0 (vcast);
            _vala_ccode_node_unref0 (vfunc);
            _g_free0 (_tmp149_);
      }
      vala_dova_base_module_pop_context ((ValaDovaBaseModule*) self);
      _tmp417_ = vala_method_get_entry_point (m);
      if (_tmp417_) {
            ValaObjectType* _tmp418_ = NULL;
            ValaObjectType* _tmp419_;
            ValaCCodeFunction* _tmp420_ = NULL;
            ValaCCodeFunction* cmain;
            ValaCCodeLineDirective* _tmp421_ = NULL;
            ValaCCodeParameter* _tmp422_ = NULL;
            ValaCCodeParameter* _tmp423_;
            ValaCCodeParameter* _tmp424_ = NULL;
            ValaCCodeParameter* _tmp425_;
            ValaCCodeIdentifier* _tmp426_ = NULL;
            ValaCCodeIdentifier* _tmp427_;
            ValaCCodeFunctionCall* _tmp428_ = NULL;
            ValaCCodeFunctionCall* _tmp429_;
            ValaCCodeFunctionCall* dova_init_call;
            ValaCCodeIdentifier* _tmp430_ = NULL;
            ValaCCodeIdentifier* _tmp431_;
            ValaCCodeIdentifier* _tmp432_ = NULL;
            ValaCCodeIdentifier* _tmp433_;
            ValaCCodeFunction* _tmp434_ = NULL;
            ValaCCodeExpressionStatement* _tmp435_ = NULL;
            ValaCCodeExpressionStatement* _tmp436_;
            ValaCCodeDeclaration* _tmp437_ = NULL;
            ValaCCodeDeclaration* _cdecl_;
            ValaCCodeConstant* _tmp438_ = NULL;
            ValaCCodeConstant* _tmp439_;
            ValaCCodeVariableDeclarator* _tmp440_ = NULL;
            ValaCCodeVariableDeclarator* _tmp441_;
            ValaCCodeFunction* _tmp442_ = NULL;
            const gchar* _tmp443_ = NULL;
            ValaCCodeIdentifier* _tmp444_ = NULL;
            ValaCCodeIdentifier* _tmp445_;
            ValaCCodeFunctionCall* _tmp446_ = NULL;
            ValaCCodeFunctionCall* _tmp447_;
            ValaCCodeFunctionCall* main_call;
            ValaList* _tmp448_ = NULL;
            ValaList* _tmp449_;
            gint _tmp450_;
            gboolean _tmp451_;
            ValaDataType* _tmp522_ = NULL;
            ValaList* _tmp534_ = NULL;
            ValaList* _tmp535_;
            gint _tmp536_;
            gboolean _tmp537_;
            ValaCCodeIdentifier* _tmp547_ = NULL;
            ValaCCodeIdentifier* _tmp548_;
            ValaCCodeReturnStatement* _tmp549_ = NULL;
            ValaCCodeReturnStatement* _tmp550_;
            ValaCCodeReturnStatement* ret_stmt;
            ValaCCodeLineDirective* _tmp551_ = NULL;
            ValaCCodeFunction* _tmp552_ = NULL;
            _tmp418_ = vala_object_type_new ((ValaObjectTypeSymbol*) ((ValaDovaBaseModule*) self)->array_class);
            _tmp419_ = _tmp418_;
            vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, (ValaDataType*) _tmp419_, ((ValaDovaBaseModule*) self)->cfile);
            _vala_code_node_unref0 (_tmp419_);
            _tmp420_ = vala_ccode_function_new ("main", "int");
            cmain = _tmp420_;
            _tmp421_ = vala_ccode_node_get_line ((ValaCCodeNode*) function);
            vala_ccode_node_set_line ((ValaCCodeNode*) cmain, _tmp421_);
            _tmp422_ = vala_ccode_parameter_new ("argc", "int");
            _tmp423_ = _tmp422_;
            vala_ccode_function_add_parameter (cmain, _tmp423_);
            _vala_ccode_node_unref0 (_tmp423_);
            _tmp424_ = vala_ccode_parameter_new ("argv", "char **");
            _tmp425_ = _tmp424_;
            vala_ccode_function_add_parameter (cmain, _tmp425_);
            _vala_ccode_node_unref0 (_tmp425_);
            vala_dova_base_module_push_function ((ValaDovaBaseModule*) self, cmain);
            _tmp426_ = vala_ccode_identifier_new ("dova_init");
            _tmp427_ = _tmp426_;
            _tmp428_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp427_);
            _tmp429_ = _tmp428_;
            _vala_ccode_node_unref0 (_tmp427_);
            dova_init_call = _tmp429_;
            _tmp430_ = vala_ccode_identifier_new ("argc");
            _tmp431_ = _tmp430_;
            vala_ccode_function_call_add_argument (dova_init_call, (ValaCCodeExpression*) _tmp431_);
            _vala_ccode_node_unref0 (_tmp431_);
            _tmp432_ = vala_ccode_identifier_new ("argv");
            _tmp433_ = _tmp432_;
            vala_ccode_function_call_add_argument (dova_init_call, (ValaCCodeExpression*) _tmp433_);
            _vala_ccode_node_unref0 (_tmp433_);
            _tmp434_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
            _tmp435_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) dova_init_call);
            _tmp436_ = _tmp435_;
            vala_ccode_function_add_statement (_tmp434_, (ValaCCodeNode*) _tmp436_);
            _vala_ccode_node_unref0 (_tmp436_);
            vala_dova_object_module_add_module_init (self);
            _tmp437_ = vala_ccode_declaration_new ("int");
            _cdecl_ = _tmp437_;
            _tmp438_ = vala_ccode_constant_new ("0");
            _tmp439_ = _tmp438_;
            _tmp440_ = vala_ccode_variable_declarator_new ("result", (ValaCCodeExpression*) _tmp439_, NULL);
            _tmp441_ = _tmp440_;
            vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp441_);
            _vala_ccode_node_unref0 (_tmp441_);
            _vala_ccode_node_unref0 (_tmp439_);
            _tmp442_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
            vala_ccode_function_add_statement (_tmp442_, (ValaCCodeNode*) _cdecl_);
            _tmp443_ = vala_ccode_function_get_name (function);
            _tmp444_ = vala_ccode_identifier_new (_tmp443_);
            _tmp445_ = _tmp444_;
            _tmp446_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp445_);
            _tmp447_ = _tmp446_;
            _vala_ccode_node_unref0 (_tmp445_);
            main_call = _tmp447_;
            _tmp448_ = vala_method_get_parameters (m);
            _tmp449_ = _tmp448_;
            _tmp450_ = vala_collection_get_size ((ValaCollection*) _tmp449_);
            _tmp451_ = _tmp450_ == 1;
            _vala_iterable_unref0 (_tmp449_);
            if (_tmp451_) {
                  ValaCCodeIdentifier* _tmp452_ = NULL;
                  ValaCCodeIdentifier* _tmp453_;
                  ValaCCodeFunctionCall* _tmp454_ = NULL;
                  ValaCCodeFunctionCall* _tmp455_;
                  ValaCCodeFunctionCall* array_creation;
                  ValaCCodeIdentifier* _tmp456_ = NULL;
                  ValaCCodeIdentifier* _tmp457_;
                  ValaCCodeFunctionCall* _tmp458_ = NULL;
                  ValaCCodeFunctionCall* _tmp459_;
                  ValaCCodeIdentifier* _tmp460_ = NULL;
                  ValaCCodeIdentifier* _tmp461_;
                  ValaCCodeDeclaration* _tmp462_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp463_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp464_;
                  ValaCCodeFunction* _tmp465_ = NULL;
                  ValaCCodeIdentifier* _tmp466_ = NULL;
                  ValaCCodeIdentifier* _tmp467_;
                  ValaCCodeFunctionCall* _tmp468_ = NULL;
                  ValaCCodeFunctionCall* _tmp469_;
                  ValaCCodeFunctionCall* array_data;
                  ValaCCodeIdentifier* _tmp470_ = NULL;
                  ValaCCodeIdentifier* _tmp471_;
                  ValaCCodeDeclaration* _tmp472_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp473_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp474_;
                  ValaCCodeFunction* _tmp475_ = NULL;
                  ValaCCodeDeclaration* _tmp476_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp477_ = NULL;
                  ValaCCodeVariableDeclarator* _tmp478_;
                  ValaCCodeFunction* _tmp479_ = NULL;
                  ValaCCodeIdentifier* _tmp480_ = NULL;
                  ValaCCodeIdentifier* _tmp481_;
                  ValaCCodeFunctionCall* _tmp482_ = NULL;
                  ValaCCodeFunctionCall* _tmp483_;
                  ValaCCodeFunctionCall* string_creation;
                  ValaCCodeIdentifier* _tmp484_ = NULL;
                  ValaCCodeIdentifier* _tmp485_;
                  ValaCCodeIdentifier* _tmp486_ = NULL;
                  ValaCCodeIdentifier* _tmp487_;
                  ValaCCodeElementAccess* _tmp488_ = NULL;
                  ValaCCodeElementAccess* _tmp489_;
                  ValaCCodeBlock* _tmp490_ = NULL;
                  ValaCCodeBlock* loop_block;
                  ValaCCodeIdentifier* _tmp491_ = NULL;
                  ValaCCodeIdentifier* _tmp492_;
                  ValaCCodeIdentifier* _tmp493_ = NULL;
                  ValaCCodeIdentifier* _tmp494_;
                  ValaCCodeElementAccess* _tmp495_ = NULL;
                  ValaCCodeElementAccess* _tmp496_;
                  ValaCCodeAssignment* _tmp497_ = NULL;
                  ValaCCodeAssignment* _tmp498_;
                  ValaCCodeExpressionStatement* _tmp499_ = NULL;
                  ValaCCodeExpressionStatement* _tmp500_;
                  ValaCCodeIdentifier* _tmp501_ = NULL;
                  ValaCCodeIdentifier* _tmp502_;
                  ValaCCodeIdentifier* _tmp503_ = NULL;
                  ValaCCodeIdentifier* _tmp504_;
                  ValaCCodeBinaryExpression* _tmp505_ = NULL;
                  ValaCCodeBinaryExpression* _tmp506_;
                  ValaCCodeForStatement* _tmp507_ = NULL;
                  ValaCCodeForStatement* _tmp508_;
                  ValaCCodeForStatement* for_stmt;
                  ValaCCodeIdentifier* _tmp509_ = NULL;
                  ValaCCodeIdentifier* _tmp510_;
                  ValaCCodeConstant* _tmp511_ = NULL;
                  ValaCCodeConstant* _tmp512_;
                  ValaCCodeAssignment* _tmp513_ = NULL;
                  ValaCCodeAssignment* _tmp514_;
                  ValaCCodeIdentifier* _tmp515_ = NULL;
                  ValaCCodeIdentifier* _tmp516_;
                  ValaCCodeUnaryExpression* _tmp517_ = NULL;
                  ValaCCodeUnaryExpression* _tmp518_;
                  ValaCCodeFunction* _tmp519_ = NULL;
                  ValaCCodeIdentifier* _tmp520_ = NULL;
                  ValaCCodeIdentifier* _tmp521_;
                  _tmp452_ = vala_ccode_identifier_new ("dova_array_new");
                  _tmp453_ = _tmp452_;
                  _tmp454_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp453_);
                  _tmp455_ = _tmp454_;
                  _vala_ccode_node_unref0 (_tmp453_);
                  array_creation = _tmp455_;
                  _tmp456_ = vala_ccode_identifier_new ("string_type_get");
                  _tmp457_ = _tmp456_;
                  _tmp458_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp457_);
                  _tmp459_ = _tmp458_;
                  vala_ccode_function_call_add_argument (array_creation, (ValaCCodeExpression*) _tmp459_);
                  _vala_ccode_node_unref0 (_tmp459_);
                  _vala_ccode_node_unref0 (_tmp457_);
                  _tmp460_ = vala_ccode_identifier_new ("argc");
                  _tmp461_ = _tmp460_;
                  vala_ccode_function_call_add_argument (array_creation, (ValaCCodeExpression*) _tmp461_);
                  _vala_ccode_node_unref0 (_tmp461_);
                  _tmp462_ = vala_ccode_declaration_new ("DovaArray*");
                  _vala_ccode_node_unref0 (_cdecl_);
                  _cdecl_ = _tmp462_;
                  _tmp463_ = vala_ccode_variable_declarator_new ("args", (ValaCCodeExpression*) array_creation, NULL);
                  _tmp464_ = _tmp463_;
                  vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp464_);
                  _vala_ccode_node_unref0 (_tmp464_);
                  _tmp465_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_statement (_tmp465_, (ValaCCodeNode*) _cdecl_);
                  _tmp466_ = vala_ccode_identifier_new ("dova_array_get_data");
                  _tmp467_ = _tmp466_;
                  _tmp468_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp467_);
                  _tmp469_ = _tmp468_;
                  _vala_ccode_node_unref0 (_tmp467_);
                  array_data = _tmp469_;
                  _tmp470_ = vala_ccode_identifier_new ("args");
                  _tmp471_ = _tmp470_;
                  vala_ccode_function_call_add_argument (array_data, (ValaCCodeExpression*) _tmp471_);
                  _vala_ccode_node_unref0 (_tmp471_);
                  _tmp472_ = vala_ccode_declaration_new ("string_t*");
                  _vala_ccode_node_unref0 (_cdecl_);
                  _cdecl_ = _tmp472_;
                  _tmp473_ = vala_ccode_variable_declarator_new ("args_data", (ValaCCodeExpression*) array_data, NULL);
                  _tmp474_ = _tmp473_;
                  vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp474_);
                  _vala_ccode_node_unref0 (_tmp474_);
                  _tmp475_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_statement (_tmp475_, (ValaCCodeNode*) _cdecl_);
                  _tmp476_ = vala_ccode_declaration_new ("int");
                  _vala_ccode_node_unref0 (_cdecl_);
                  _cdecl_ = _tmp476_;
                  _tmp477_ = vala_ccode_variable_declarator_new ("argi", NULL, NULL);
                  _tmp478_ = _tmp477_;
                  vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp478_);
                  _vala_ccode_node_unref0 (_tmp478_);
                  _tmp479_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_statement (_tmp479_, (ValaCCodeNode*) _cdecl_);
                  _tmp480_ = vala_ccode_identifier_new ("string_create_from_cstring");
                  _tmp481_ = _tmp480_;
                  _tmp482_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp481_);
                  _tmp483_ = _tmp482_;
                  _vala_ccode_node_unref0 (_tmp481_);
                  string_creation = _tmp483_;
                  _tmp484_ = vala_ccode_identifier_new ("argv");
                  _tmp485_ = _tmp484_;
                  _tmp486_ = vala_ccode_identifier_new ("argi");
                  _tmp487_ = _tmp486_;
                  _tmp488_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp485_, (ValaCCodeExpression*) _tmp487_);
                  _tmp489_ = _tmp488_;
                  vala_ccode_function_call_add_argument (string_creation, (ValaCCodeExpression*) _tmp489_);
                  _vala_ccode_node_unref0 (_tmp489_);
                  _vala_ccode_node_unref0 (_tmp487_);
                  _vala_ccode_node_unref0 (_tmp485_);
                  _tmp490_ = vala_ccode_block_new ();
                  loop_block = _tmp490_;
                  _tmp491_ = vala_ccode_identifier_new ("args_data");
                  _tmp492_ = _tmp491_;
                  _tmp493_ = vala_ccode_identifier_new ("argi");
                  _tmp494_ = _tmp493_;
                  _tmp495_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp492_, (ValaCCodeExpression*) _tmp494_);
                  _tmp496_ = _tmp495_;
                  _tmp497_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp496_, (ValaCCodeExpression*) string_creation, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
                  _tmp498_ = _tmp497_;
                  _tmp499_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp498_);
                  _tmp500_ = _tmp499_;
                  vala_ccode_block_add_statement (loop_block, (ValaCCodeNode*) _tmp500_);
                  _vala_ccode_node_unref0 (_tmp500_);
                  _vala_ccode_node_unref0 (_tmp498_);
                  _vala_ccode_node_unref0 (_tmp496_);
                  _vala_ccode_node_unref0 (_tmp494_);
                  _vala_ccode_node_unref0 (_tmp492_);
                  _tmp501_ = vala_ccode_identifier_new ("argi");
                  _tmp502_ = _tmp501_;
                  _tmp503_ = vala_ccode_identifier_new ("argc");
                  _tmp504_ = _tmp503_;
                  _tmp505_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_LESS_THAN, (ValaCCodeExpression*) _tmp502_, (ValaCCodeExpression*) _tmp504_);
                  _tmp506_ = _tmp505_;
                  _tmp507_ = vala_ccode_for_statement_new ((ValaCCodeExpression*) _tmp506_, (ValaCCodeStatement*) loop_block);
                  _tmp508_ = _tmp507_;
                  _vala_ccode_node_unref0 (_tmp506_);
                  _vala_ccode_node_unref0 (_tmp504_);
                  _vala_ccode_node_unref0 (_tmp502_);
                  for_stmt = _tmp508_;
                  _tmp509_ = vala_ccode_identifier_new ("argi");
                  _tmp510_ = _tmp509_;
                  _tmp511_ = vala_ccode_constant_new ("0");
                  _tmp512_ = _tmp511_;
                  _tmp513_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp510_, (ValaCCodeExpression*) _tmp512_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
                  _tmp514_ = _tmp513_;
                  vala_ccode_for_statement_add_initializer (for_stmt, (ValaCCodeExpression*) _tmp514_);
                  _vala_ccode_node_unref0 (_tmp514_);
                  _vala_ccode_node_unref0 (_tmp512_);
                  _vala_ccode_node_unref0 (_tmp510_);
                  _tmp515_ = vala_ccode_identifier_new ("argi");
                  _tmp516_ = _tmp515_;
                  _tmp517_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp516_);
                  _tmp518_ = _tmp517_;
                  vala_ccode_for_statement_add_iterator (for_stmt, (ValaCCodeExpression*) _tmp518_);
                  _vala_ccode_node_unref0 (_tmp518_);
                  _vala_ccode_node_unref0 (_tmp516_);
                  _tmp519_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_statement (_tmp519_, (ValaCCodeNode*) for_stmt);
                  _tmp520_ = vala_ccode_identifier_new ("args");
                  _tmp521_ = _tmp520_;
                  vala_ccode_function_call_add_argument (main_call, (ValaCCodeExpression*) _tmp521_);
                  _vala_ccode_node_unref0 (_tmp521_);
                  _vala_ccode_node_unref0 (for_stmt);
                  _vala_ccode_node_unref0 (loop_block);
                  _vala_ccode_node_unref0 (string_creation);
                  _vala_ccode_node_unref0 (array_data);
                  _vala_ccode_node_unref0 (array_creation);
            }
            _tmp522_ = vala_method_get_return_type (m);
            if (VALA_IS_VOID_TYPE (_tmp522_)) {
                  ValaCCodeExpressionStatement* _tmp523_ = NULL;
                  ValaCCodeExpressionStatement* main_stmt;
                  ValaCCodeLineDirective* _tmp524_ = NULL;
                  ValaCCodeFunction* _tmp525_ = NULL;
                  _tmp523_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) main_call);
                  main_stmt = _tmp523_;
                  _tmp524_ = vala_ccode_node_get_line ((ValaCCodeNode*) cmain);
                  vala_ccode_node_set_line ((ValaCCodeNode*) main_stmt, _tmp524_);
                  _tmp525_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_statement (_tmp525_, (ValaCCodeNode*) main_stmt);
                  _vala_ccode_node_unref0 (main_stmt);
            } else {
                  ValaCCodeIdentifier* _tmp526_ = NULL;
                  ValaCCodeIdentifier* _tmp527_;
                  ValaCCodeAssignment* _tmp528_ = NULL;
                  ValaCCodeAssignment* _tmp529_;
                  ValaCCodeExpressionStatement* _tmp530_ = NULL;
                  ValaCCodeExpressionStatement* _tmp531_;
                  ValaCCodeExpressionStatement* main_stmt;
                  ValaCCodeLineDirective* _tmp532_ = NULL;
                  ValaCCodeFunction* _tmp533_ = NULL;
                  _tmp526_ = vala_ccode_identifier_new ("result");
                  _tmp527_ = _tmp526_;
                  _tmp528_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp527_, (ValaCCodeExpression*) main_call, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
                  _tmp529_ = _tmp528_;
                  _tmp530_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp529_);
                  _tmp531_ = _tmp530_;
                  _vala_ccode_node_unref0 (_tmp529_);
                  _vala_ccode_node_unref0 (_tmp527_);
                  main_stmt = _tmp531_;
                  _tmp532_ = vala_ccode_node_get_line ((ValaCCodeNode*) cmain);
                  vala_ccode_node_set_line ((ValaCCodeNode*) main_stmt, _tmp532_);
                  _tmp533_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_statement (_tmp533_, (ValaCCodeNode*) main_stmt);
                  _vala_ccode_node_unref0 (main_stmt);
            }
            _tmp534_ = vala_method_get_parameters (m);
            _tmp535_ = _tmp534_;
            _tmp536_ = vala_collection_get_size ((ValaCollection*) _tmp535_);
            _tmp537_ = _tmp536_ == 1;
            _vala_iterable_unref0 (_tmp535_);
            if (_tmp537_) {
                  ValaCCodeIdentifier* _tmp538_ = NULL;
                  ValaCCodeIdentifier* _tmp539_;
                  ValaCCodeFunctionCall* _tmp540_ = NULL;
                  ValaCCodeFunctionCall* _tmp541_;
                  ValaCCodeFunctionCall* unref;
                  ValaCCodeIdentifier* _tmp542_ = NULL;
                  ValaCCodeIdentifier* _tmp543_;
                  ValaCCodeFunction* _tmp544_ = NULL;
                  ValaCCodeExpressionStatement* _tmp545_ = NULL;
                  ValaCCodeExpressionStatement* _tmp546_;
                  _tmp538_ = vala_ccode_identifier_new ("dova_object_unref");
                  _tmp539_ = _tmp538_;
                  _tmp540_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp539_);
                  _tmp541_ = _tmp540_;
                  _vala_ccode_node_unref0 (_tmp539_);
                  unref = _tmp541_;
                  _tmp542_ = vala_ccode_identifier_new ("args");
                  _tmp543_ = _tmp542_;
                  vala_ccode_function_call_add_argument (unref, (ValaCCodeExpression*) _tmp543_);
                  _vala_ccode_node_unref0 (_tmp543_);
                  _tmp544_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  _tmp545_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) unref);
                  _tmp546_ = _tmp545_;
                  vala_ccode_function_add_statement (_tmp544_, (ValaCCodeNode*) _tmp546_);
                  _vala_ccode_node_unref0 (_tmp546_);
                  _vala_ccode_node_unref0 (unref);
            }
            _tmp547_ = vala_ccode_identifier_new ("result");
            _tmp548_ = _tmp547_;
            _tmp549_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp548_);
            _tmp550_ = _tmp549_;
            _vala_ccode_node_unref0 (_tmp548_);
            ret_stmt = _tmp550_;
            _tmp551_ = vala_ccode_node_get_line ((ValaCCodeNode*) cmain);
            vala_ccode_node_set_line ((ValaCCodeNode*) ret_stmt, _tmp551_);
            _tmp552_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
            vala_ccode_function_add_statement (_tmp552_, (ValaCCodeNode*) ret_stmt);
            vala_dova_base_module_pop_function ((ValaDovaBaseModule*) self);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, cmain);
            _vala_ccode_node_unref0 (ret_stmt);
            _vala_ccode_node_unref0 (main_call);
            _vala_ccode_node_unref0 (_cdecl_);
            _vala_ccode_node_unref0 (dova_init_call);
            _vala_ccode_node_unref0 (cmain);
      }
      _vala_ccode_node_unref0 (function);
}


static void vala_dova_object_module_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* m) {
      ValaDovaObjectModule * self;
      gboolean _tmp0_;
      gboolean visible;
      ValaDataType* creturn_type = NULL;
      ValaTypeSymbol* _tmp1_ = NULL;
      gboolean _tmp5_ = FALSE;
      ValaTypeSymbol* _tmp6_ = NULL;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (m != NULL);
      _tmp0_ = vala_symbol_is_internal_symbol ((ValaSymbol*) m);
      visible = !_tmp0_;
      vala_code_visitor_visit_method ((ValaCodeVisitor*) self, (ValaMethod*) m);
      _tmp1_ = vala_dova_base_module_get_current_type_symbol ((ValaDovaBaseModule*) self);
      if (VALA_IS_CLASS (_tmp1_)) {
            ValaClass* _tmp2_ = NULL;
            ValaObjectType* _tmp3_ = NULL;
            _tmp2_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
            _tmp3_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp2_);
            _vala_code_node_unref0 (creturn_type);
            creturn_type = (ValaDataType*) _tmp3_;
      } else {
            ValaVoidType* _tmp4_ = NULL;
            _tmp4_ = vala_void_type_new (NULL);
            _vala_code_node_unref0 (creturn_type);
            creturn_type = (ValaDataType*) _tmp4_;
      }
      _tmp6_ = vala_dova_base_module_get_current_type_symbol ((ValaDovaBaseModule*) self);
      if (VALA_IS_CLASS (_tmp6_)) {
            ValaClass* _tmp7_ = NULL;
            gboolean _tmp8_;
            _tmp7_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
            _tmp8_ = vala_class_get_is_abstract (_tmp7_);
            _tmp5_ = !_tmp8_;
      } else {
            _tmp5_ = FALSE;
      }
      if (_tmp5_) {
            gchar* _tmp9_ = NULL;
            gchar* _tmp10_;
            ValaCCodeFunction* _tmp11_ = NULL;
            ValaCCodeFunction* _tmp12_;
            ValaCCodeFunction* vfunc;
            ValaCCodeBlock* _tmp13_ = NULL;
            ValaCCodeBlock* vblock;
            ValaTypeSymbol* _tmp14_ = NULL;
            gchar* _tmp15_ = NULL;
            gchar* _tmp16_;
            gchar* _tmp17_ = NULL;
            gchar* _tmp18_;
            ValaCCodeDeclaration* _tmp19_ = NULL;
            ValaCCodeDeclaration* _tmp20_;
            ValaCCodeDeclaration* _cdecl_;
            ValaCCodeVariableDeclarator* _tmp21_ = NULL;
            ValaCCodeVariableDeclarator* _tmp22_;
            ValaClass* _tmp23_ = NULL;
            gchar* _tmp24_ = NULL;
            gchar* _tmp25_;
            gchar* _tmp26_;
            gchar* _tmp27_;
            ValaCCodeIdentifier* _tmp28_ = NULL;
            ValaCCodeIdentifier* _tmp29_;
            ValaCCodeFunctionCall* _tmp30_ = NULL;
            ValaCCodeFunctionCall* _tmp31_;
            ValaCCodeFunctionCall* type_get;
            ValaCCodeIdentifier* _tmp43_ = NULL;
            ValaCCodeIdentifier* _tmp44_;
            ValaCCodeFunctionCall* _tmp45_ = NULL;
            ValaCCodeFunctionCall* _tmp46_;
            ValaCCodeFunctionCall* alloc_call;
            ValaCCodeIdentifier* _tmp47_ = NULL;
            ValaCCodeIdentifier* _tmp48_;
            ValaTypeSymbol* _tmp49_ = NULL;
            gchar* _tmp50_ = NULL;
            gchar* _tmp51_;
            gchar* _tmp52_ = NULL;
            gchar* _tmp53_;
            ValaCCodeCastExpression* _tmp54_ = NULL;
            ValaCCodeCastExpression* _tmp55_;
            ValaCCodeAssignment* _tmp56_ = NULL;
            ValaCCodeAssignment* _tmp57_;
            ValaCCodeExpressionStatement* _tmp58_ = NULL;
            ValaCCodeExpressionStatement* _tmp59_;
            gchar* _tmp105_ = NULL;
            gchar* _tmp106_;
            ValaCCodeIdentifier* _tmp107_ = NULL;
            ValaCCodeIdentifier* _tmp108_;
            ValaCCodeFunctionCall* _tmp109_ = NULL;
            ValaCCodeFunctionCall* _tmp110_;
            ValaCCodeFunctionCall* vcall;
            ValaCCodeIdentifier* _tmp111_ = NULL;
            ValaCCodeIdentifier* _tmp112_;
            ValaCCodeExpressionStatement* _tmp113_ = NULL;
            ValaCCodeExpressionStatement* _tmp114_;
            ValaCCodeIdentifier* _tmp115_ = NULL;
            ValaCCodeIdentifier* _tmp116_;
            ValaCCodeReturnStatement* _tmp117_ = NULL;
            ValaCCodeStatement* _tmp118_;
            ValaCCodeStatement* cstmt;
            ValaCCodeLineDirective* _tmp119_ = NULL;
            _tmp9_ = vala_method_get_cname ((ValaMethod*) m);
            _tmp10_ = _tmp9_;
            _tmp11_ = vala_ccode_function_new (_tmp10_, "void");
            _tmp12_ = _tmp11_;
            _g_free0 (_tmp10_);
            vfunc = _tmp12_;
            _tmp13_ = vala_ccode_block_new ();
            vblock = _tmp13_;
            _tmp14_ = vala_dova_base_module_get_current_type_symbol ((ValaDovaBaseModule*) self);
            _tmp15_ = vala_typesymbol_get_cname (_tmp14_, FALSE);
            _tmp16_ = _tmp15_;
            _tmp17_ = g_strdup_printf ("%s *", _tmp16_);
            _tmp18_ = _tmp17_;
            _tmp19_ = vala_ccode_declaration_new (_tmp18_);
            _tmp20_ = _tmp19_;
            _g_free0 (_tmp18_);
            _g_free0 (_tmp16_);
            _cdecl_ = _tmp20_;
            _tmp21_ = vala_ccode_variable_declarator_new ("this", NULL, NULL);
            _tmp22_ = _tmp21_;
            vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) _tmp22_);
            _vala_ccode_node_unref0 (_tmp22_);
            vala_ccode_block_add_statement (vblock, (ValaCCodeNode*) _cdecl_);
            _tmp23_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
            _tmp24_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) _tmp23_, NULL);
            _tmp25_ = _tmp24_;
            _tmp26_ = g_strconcat (_tmp25_, "_type_get", NULL);
            _tmp27_ = _tmp26_;
            _tmp28_ = vala_ccode_identifier_new (_tmp27_);
            _tmp29_ = _tmp28_;
            _tmp30_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp29_);
            _tmp31_ = _tmp30_;
            _vala_ccode_node_unref0 (_tmp29_);
            _g_free0 (_tmp27_);
            _g_free0 (_tmp25_);
            type_get = _tmp31_;
            {
                  ValaClass* _tmp32_ = NULL;
                  ValaList* _tmp33_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp34_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp32_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
                  _tmp33_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp32_);
                  _type_param_list = _tmp33_;
                  _tmp34_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp34_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp35_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp36_ = NULL;
                        gchar* _tmp37_ = NULL;
                        gchar* _tmp38_;
                        gchar* _tmp39_ = NULL;
                        gchar* _tmp40_;
                        ValaCCodeIdentifier* _tmp41_ = NULL;
                        ValaCCodeIdentifier* _tmp42_;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp35_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp35_;
                        _tmp36_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp37_ = g_utf8_strdown (_tmp36_, (gssize) (-1));
                        _tmp38_ = _tmp37_;
                        _tmp39_ = g_strdup_printf ("%s_type", _tmp38_);
                        _tmp40_ = _tmp39_;
                        _tmp41_ = vala_ccode_identifier_new (_tmp40_);
                        _tmp42_ = _tmp41_;
                        vala_ccode_function_call_add_argument (type_get, (ValaCCodeExpression*) _tmp42_);
                        _vala_ccode_node_unref0 (_tmp42_);
                        _g_free0 (_tmp40_);
                        _g_free0 (_tmp38_);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
            _tmp43_ = vala_ccode_identifier_new ("dova_object_alloc");
            _tmp44_ = _tmp43_;
            _tmp45_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp44_);
            _tmp46_ = _tmp45_;
            _vala_ccode_node_unref0 (_tmp44_);
            alloc_call = _tmp46_;
            vala_ccode_function_call_add_argument (alloc_call, (ValaCCodeExpression*) type_get);
            _tmp47_ = vala_ccode_identifier_new ("this");
            _tmp48_ = _tmp47_;
            _tmp49_ = vala_dova_base_module_get_current_type_symbol ((ValaDovaBaseModule*) self);
            _tmp50_ = vala_typesymbol_get_cname (_tmp49_, FALSE);
            _tmp51_ = _tmp50_;
            _tmp52_ = g_strdup_printf ("%s *", _tmp51_);
            _tmp53_ = _tmp52_;
            _tmp54_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) alloc_call, _tmp53_);
            _tmp55_ = _tmp54_;
            _tmp56_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp48_, (ValaCCodeExpression*) _tmp55_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
            _tmp57_ = _tmp56_;
            _tmp58_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp57_);
            _tmp59_ = _tmp58_;
            vala_ccode_block_add_statement (vblock, (ValaCCodeNode*) _tmp59_);
            _vala_ccode_node_unref0 (_tmp59_);
            _vala_ccode_node_unref0 (_tmp57_);
            _vala_ccode_node_unref0 (_tmp55_);
            _g_free0 (_tmp53_);
            _g_free0 (_tmp51_);
            _vala_ccode_node_unref0 (_tmp48_);
            {
                  ValaClass* _tmp60_ = NULL;
                  ValaList* _tmp61_ = NULL;
                  ValaList* _f_list;
                  gint _tmp62_;
                  gint _f_size;
                  gint _f_index;
                  _tmp60_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
                  _tmp61_ = vala_class_get_fields (_tmp60_);
                  _f_list = _tmp61_;
                  _tmp62_ = vala_collection_get_size ((ValaCollection*) _f_list);
                  _f_size = _tmp62_;
                  _f_index = -1;
                  while (TRUE) {
                        gpointer _tmp63_ = NULL;
                        ValaField* f;
                        gboolean _tmp64_ = FALSE;
                        ValaMemberBinding _tmp65_;
                        ValaDataType* _tmp67_ = NULL;
                        ValaGenericType* _tmp68_;
                        ValaGenericType* generic_type;
                        ValaCCodeIdentifier* _tmp69_ = NULL;
                        ValaCCodeIdentifier* _tmp70_;
                        ValaCCodeFunctionCall* _tmp71_ = NULL;
                        ValaCCodeFunctionCall* _tmp72_;
                        ValaCCodeFunctionCall* type_get_value_size;
                        ValaTypeParameter* _tmp73_ = NULL;
                        const gchar* _tmp74_ = NULL;
                        gchar* _tmp75_ = NULL;
                        gchar* _tmp76_;
                        gchar* _tmp77_ = NULL;
                        gchar* _tmp78_;
                        ValaCCodeIdentifier* _tmp79_ = NULL;
                        ValaCCodeIdentifier* _tmp80_;
                        ValaCCodeIdentifier* _tmp81_ = NULL;
                        ValaCCodeIdentifier* _tmp82_;
                        ValaCCodeFunctionCall* _tmp83_ = NULL;
                        ValaCCodeFunctionCall* _tmp84_;
                        ValaCCodeFunctionCall* calloc_call;
                        ValaCCodeConstant* _tmp85_ = NULL;
                        ValaCCodeConstant* _tmp86_;
                        ValaClass* _tmp87_ = NULL;
                        gchar* _tmp88_ = NULL;
                        gchar* _tmp89_;
                        gchar* _tmp90_ = NULL;
                        gchar* _tmp91_;
                        ValaCCodeIdentifier* _tmp92_ = NULL;
                        ValaCCodeIdentifier* _tmp93_;
                        ValaCCodeFunctionCall* _tmp94_ = NULL;
                        ValaCCodeFunctionCall* _tmp95_;
                        ValaCCodeFunctionCall* priv_call;
                        ValaCCodeIdentifier* _tmp96_ = NULL;
                        ValaCCodeIdentifier* _tmp97_;
                        const gchar* _tmp98_ = NULL;
                        ValaCCodeMemberAccess* _tmp99_ = NULL;
                        ValaCCodeMemberAccess* _tmp100_;
                        ValaCCodeAssignment* _tmp101_ = NULL;
                        ValaCCodeAssignment* _tmp102_;
                        ValaCCodeExpressionStatement* _tmp103_ = NULL;
                        ValaCCodeExpressionStatement* _tmp104_;
                        _f_index = _f_index + 1;
                        if (!(_f_index < _f_size)) {
                              break;
                        }
                        _tmp63_ = vala_list_get (_f_list, _f_index);
                        f = (ValaField*) _tmp63_;
                        _tmp65_ = vala_field_get_binding (f);
                        if (_tmp65_ != VALA_MEMBER_BINDING_INSTANCE) {
                              _tmp64_ = TRUE;
                        } else {
                              ValaDataType* _tmp66_ = NULL;
                              _tmp66_ = vala_variable_get_variable_type ((ValaVariable*) f);
                              _tmp64_ = !VALA_IS_GENERIC_TYPE (_tmp66_);
                        }
                        if (_tmp64_) {
                              _vala_code_node_unref0 (f);
                              continue;
                        }
                        _tmp67_ = vala_variable_get_variable_type ((ValaVariable*) f);
                        _tmp68_ = _vala_code_node_ref0 (VALA_GENERIC_TYPE (_tmp67_));
                        generic_type = _tmp68_;
                        _tmp69_ = vala_ccode_identifier_new ("dova_type_get_value_size");
                        _tmp70_ = _tmp69_;
                        _tmp71_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp70_);
                        _tmp72_ = _tmp71_;
                        _vala_ccode_node_unref0 (_tmp70_);
                        type_get_value_size = _tmp72_;
                        _tmp73_ = vala_data_type_get_type_parameter ((ValaDataType*) generic_type);
                        _tmp74_ = vala_symbol_get_name ((ValaSymbol*) _tmp73_);
                        _tmp75_ = g_utf8_strdown (_tmp74_, (gssize) (-1));
                        _tmp76_ = _tmp75_;
                        _tmp77_ = g_strdup_printf ("%s_type", _tmp76_);
                        _tmp78_ = _tmp77_;
                        _tmp79_ = vala_ccode_identifier_new (_tmp78_);
                        _tmp80_ = _tmp79_;
                        vala_ccode_function_call_add_argument (type_get_value_size, (ValaCCodeExpression*) _tmp80_);
                        _vala_ccode_node_unref0 (_tmp80_);
                        _g_free0 (_tmp78_);
                        _g_free0 (_tmp76_);
                        _tmp81_ = vala_ccode_identifier_new ("calloc");
                        _tmp82_ = _tmp81_;
                        _tmp83_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp82_);
                        _tmp84_ = _tmp83_;
                        _vala_ccode_node_unref0 (_tmp82_);
                        calloc_call = _tmp84_;
                        _tmp85_ = vala_ccode_constant_new ("1");
                        _tmp86_ = _tmp85_;
                        vala_ccode_function_call_add_argument (calloc_call, (ValaCCodeExpression*) _tmp86_);
                        _vala_ccode_node_unref0 (_tmp86_);
                        vala_ccode_function_call_add_argument (calloc_call, (ValaCCodeExpression*) type_get_value_size);
                        _tmp87_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
                        _tmp88_ = vala_typesymbol_get_upper_case_cname ((ValaTypeSymbol*) _tmp87_, NULL);
                        _tmp89_ = _tmp88_;
                        _tmp90_ = g_strdup_printf ("%s_GET_PRIVATE", _tmp89_);
                        _tmp91_ = _tmp90_;
                        _tmp92_ = vala_ccode_identifier_new (_tmp91_);
                        _tmp93_ = _tmp92_;
                        _tmp94_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp93_);
                        _tmp95_ = _tmp94_;
                        _vala_ccode_node_unref0 (_tmp93_);
                        _g_free0 (_tmp91_);
                        _g_free0 (_tmp89_);
                        priv_call = _tmp95_;
                        _tmp96_ = vala_ccode_identifier_new ("this");
                        _tmp97_ = _tmp96_;
                        vala_ccode_function_call_add_argument (priv_call, (ValaCCodeExpression*) _tmp97_);
                        _vala_ccode_node_unref0 (_tmp97_);
                        _tmp98_ = vala_symbol_get_name ((ValaSymbol*) f);
                        _tmp99_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) priv_call, _tmp98_);
                        _tmp100_ = _tmp99_;
                        _tmp101_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp100_, (ValaCCodeExpression*) calloc_call, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
                        _tmp102_ = _tmp101_;
                        _tmp103_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp102_);
                        _tmp104_ = _tmp103_;
                        vala_ccode_block_add_statement (vblock, (ValaCCodeNode*) _tmp104_);
                        _vala_ccode_node_unref0 (_tmp104_);
                        _vala_ccode_node_unref0 (_tmp102_);
                        _vala_ccode_node_unref0 (_tmp100_);
                        _vala_ccode_node_unref0 (priv_call);
                        _vala_ccode_node_unref0 (calloc_call);
                        _vala_ccode_node_unref0 (type_get_value_size);
                        _vala_code_node_unref0 (generic_type);
                        _vala_code_node_unref0 (f);
                  }
                  _vala_iterable_unref0 (_f_list);
            }
            _tmp105_ = vala_method_get_real_cname ((ValaMethod*) m);
            _tmp106_ = _tmp105_;
            _tmp107_ = vala_ccode_identifier_new (_tmp106_);
            _tmp108_ = _tmp107_;
            _tmp109_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp108_);
            _tmp110_ = _tmp109_;
            _vala_ccode_node_unref0 (_tmp108_);
            _g_free0 (_tmp106_);
            vcall = _tmp110_;
            _tmp111_ = vala_ccode_identifier_new ("this");
            _tmp112_ = _tmp111_;
            vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp112_);
            _vala_ccode_node_unref0 (_tmp112_);
            _tmp113_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) vcall);
            _tmp114_ = _tmp113_;
            vala_ccode_block_add_statement (vblock, (ValaCCodeNode*) _tmp114_);
            _vala_ccode_node_unref0 (_tmp114_);
            vala_dova_base_module_generate_cparameters ((ValaDovaBaseModule*) self, (ValaMethod*) m, ((ValaDovaBaseModule*) self)->cfile, vfunc, NULL, vcall);
            _tmp115_ = vala_ccode_identifier_new ("this");
            _tmp116_ = _tmp115_;
            _tmp117_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) _tmp116_);
            _tmp118_ = (ValaCCodeStatement*) _tmp117_;
            _vala_ccode_node_unref0 (_tmp116_);
            cstmt = _tmp118_;
            _tmp119_ = vala_ccode_node_get_line ((ValaCCodeNode*) vfunc);
            vala_ccode_node_set_line ((ValaCCodeNode*) cstmt, _tmp119_);
            vala_ccode_block_add_statement (vblock, (ValaCCodeNode*) cstmt);
            if (!visible) {
                  ValaCCodeModifiers _tmp120_;
                  _tmp120_ = vala_ccode_function_get_modifiers (vfunc);
                  vala_ccode_function_set_modifiers (vfunc, _tmp120_ | VALA_CCODE_MODIFIERS_STATIC);
            }
            vala_ccode_file_add_function_declaration (((ValaDovaBaseModule*) self)->cfile, vfunc);
            vala_ccode_function_set_block (vfunc, vblock);
            vala_ccode_file_add_function (((ValaDovaBaseModule*) self)->cfile, vfunc);
            _vala_ccode_node_unref0 (cstmt);
            _vala_ccode_node_unref0 (vcall);
            _vala_ccode_node_unref0 (alloc_call);
            _vala_ccode_node_unref0 (type_get);
            _vala_ccode_node_unref0 (_cdecl_);
            _vala_ccode_node_unref0 (vblock);
            _vala_ccode_node_unref0 (vfunc);
      }
      _vala_code_node_unref0 (creturn_type);
}


static ValaTypeSymbol* vala_dova_object_module_find_parent_type (ValaDovaObjectModule* self, ValaSymbol* sym) {
      ValaTypeSymbol* result = NULL;
      g_return_val_if_fail (self != NULL, NULL);
      g_return_val_if_fail (sym != NULL, NULL);
      while (TRUE) {
            ValaSymbol* _tmp1_ = NULL;
            if (!(sym != NULL)) {
                  break;
            }
            if (VALA_IS_TYPESYMBOL (sym)) {
                  ValaTypeSymbol* _tmp0_;
                  _tmp0_ = _vala_code_node_ref0 (VALA_TYPESYMBOL (sym));
                  result = _tmp0_;
                  return result;
            }
            _tmp1_ = vala_symbol_get_parent_symbol (sym);
            sym = _tmp1_;
      }
      result = NULL;
      return result;
}


static void vala_dova_object_module_real_generate_cparameters (ValaDovaBaseModule* base, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaCCodeFunctionCall* vcall) {
      ValaDovaObjectModule * self;
      ValaCCodeParameter* instance_param;
      gboolean _tmp0_;
      gboolean _tmp106_ = FALSE;
      gboolean _tmp107_ = FALSE;
      ValaSymbol* _tmp108_ = NULL;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (m != NULL);
      g_return_if_fail (decl_space != NULL);
      g_return_if_fail (func != NULL);
      instance_param = NULL;
      _tmp0_ = vala_method_get_closure (m);
      if (_tmp0_) {
            ValaBlock* _tmp1_ = NULL;
            ValaBlock* _tmp2_;
            ValaBlock* closure_block;
            gint _tmp3_;
            gint block_id;
            gchar* _tmp4_ = NULL;
            gchar* _tmp5_;
            gchar* _tmp6_ = NULL;
            gchar* _tmp7_;
            ValaCCodeParameter* _tmp8_ = NULL;
            _tmp1_ = vala_dova_base_module_get_current_closure_block ((ValaDovaBaseModule*) self);
            _tmp2_ = _vala_code_node_ref0 (_tmp1_);
            closure_block = _tmp2_;
            _tmp3_ = vala_dova_base_module_get_block_id ((ValaDovaBaseModule*) self, closure_block);
            block_id = _tmp3_;
            _tmp4_ = g_strdup_printf ("_data%d_", block_id);
            _tmp5_ = _tmp4_;
            _tmp6_ = g_strdup_printf ("Block%dData*", block_id);
            _tmp7_ = _tmp6_;
            _tmp8_ = vala_ccode_parameter_new (_tmp5_, _tmp7_);
            _vala_ccode_node_unref0 (instance_param);
            instance_param = _tmp8_;
            _g_free0 (_tmp7_);
            _g_free0 (_tmp5_);
            _vala_code_node_unref0 (closure_block);
      } else {
            gboolean _tmp9_ = FALSE;
            ValaSymbol* _tmp10_ = NULL;
            _tmp10_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            if (VALA_IS_CLASS (_tmp10_)) {
                  _tmp9_ = VALA_IS_CREATION_METHOD (m);
            } else {
                  _tmp9_ = FALSE;
            }
            if (_tmp9_) {
                  if (vcall == NULL) {
                        ValaSymbol* _tmp11_ = NULL;
                        gchar* _tmp12_ = NULL;
                        gchar* _tmp13_;
                        gchar* _tmp14_;
                        gchar* _tmp15_;
                        ValaCCodeParameter* _tmp16_ = NULL;
                        _tmp11_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
                        _tmp12_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_CLASS (_tmp11_), FALSE);
                        _tmp13_ = _tmp12_;
                        _tmp14_ = g_strconcat (_tmp13_, "*", NULL);
                        _tmp15_ = _tmp14_;
                        _tmp16_ = vala_ccode_parameter_new ("this", _tmp15_);
                        _vala_ccode_node_unref0 (instance_param);
                        instance_param = _tmp16_;
                        _g_free0 (_tmp15_);
                        _g_free0 (_tmp13_);
                  }
            } else {
                  gboolean _tmp17_ = FALSE;
                  ValaMemberBinding _tmp18_;
                  _tmp18_ = vala_method_get_binding (m);
                  if (_tmp18_ == VALA_MEMBER_BINDING_INSTANCE) {
                        _tmp17_ = TRUE;
                  } else {
                        gboolean _tmp19_ = FALSE;
                        ValaSymbol* _tmp20_ = NULL;
                        _tmp20_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
                        if (VALA_IS_STRUCT (_tmp20_)) {
                              _tmp19_ = VALA_IS_CREATION_METHOD (m);
                        } else {
                              _tmp19_ = FALSE;
                        }
                        _tmp17_ = _tmp19_;
                  }
                  if (_tmp17_) {
                        ValaTypeSymbol* _tmp21_ = NULL;
                        ValaTypeSymbol* parent_type;
                        ValaDataType* _tmp22_ = NULL;
                        ValaDataType* this_type;
                        gboolean _tmp23_ = FALSE;
                        gboolean _tmp24_ = FALSE;
                        ValaMethod* _tmp25_ = NULL;
                        _tmp21_ = vala_dova_object_module_find_parent_type (self, (ValaSymbol*) m);
                        parent_type = _tmp21_;
                        _tmp22_ = vala_dova_base_module_get_data_type_for_symbol (parent_type);
                        this_type = _tmp22_;
                        vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, this_type, decl_space);
                        _tmp25_ = vala_method_get_base_interface_method (m);
                        if (_tmp25_ != NULL) {
                              gboolean _tmp26_;
                              _tmp26_ = vala_method_get_is_abstract (m);
                              _tmp24_ = !_tmp26_;
                        } else {
                              _tmp24_ = FALSE;
                        }
                        if (_tmp24_) {
                              gboolean _tmp27_;
                              _tmp27_ = vala_method_get_is_virtual (m);
                              _tmp23_ = !_tmp27_;
                        } else {
                              _tmp23_ = FALSE;
                        }
                        if (_tmp23_) {
                              ValaMethod* _tmp28_ = NULL;
                              ValaSymbol* _tmp29_ = NULL;
                              ValaObjectType* _tmp30_ = NULL;
                              ValaObjectType* base_type;
                              gchar* _tmp31_ = NULL;
                              gchar* _tmp32_;
                              ValaCCodeParameter* _tmp33_ = NULL;
                              _tmp28_ = vala_method_get_base_interface_method (m);
                              _tmp29_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp28_);
                              _tmp30_ = vala_object_type_new ((ValaObjectTypeSymbol*) VALA_INTERFACE (_tmp29_));
                              base_type = _tmp30_;
                              _tmp31_ = vala_data_type_get_cname ((ValaDataType*) base_type);
                              _tmp32_ = _tmp31_;
                              _tmp33_ = vala_ccode_parameter_new ("this", _tmp32_);
                              _vala_ccode_node_unref0 (instance_param);
                              instance_param = _tmp33_;
                              _g_free0 (_tmp32_);
                              _vala_code_node_unref0 (base_type);
                        } else {
                              gboolean _tmp34_;
                              _tmp34_ = vala_method_get_overrides (m);
                              if (_tmp34_) {
                                    ValaMethod* _tmp35_ = NULL;
                                    ValaSymbol* _tmp36_ = NULL;
                                    ValaObjectType* _tmp37_ = NULL;
                                    ValaObjectType* base_type;
                                    gchar* _tmp38_ = NULL;
                                    gchar* _tmp39_;
                                    ValaCCodeParameter* _tmp40_ = NULL;
                                    _tmp35_ = vala_method_get_base_method (m);
                                    _tmp36_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp35_);
                                    _tmp37_ = vala_object_type_new ((ValaObjectTypeSymbol*) VALA_CLASS (_tmp36_));
                                    base_type = _tmp37_;
                                    vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, (ValaDataType*) base_type, decl_space);
                                    _tmp38_ = vala_data_type_get_cname ((ValaDataType*) base_type);
                                    _tmp39_ = _tmp38_;
                                    _tmp40_ = vala_ccode_parameter_new ("this", _tmp39_);
                                    _vala_ccode_node_unref0 (instance_param);
                                    instance_param = _tmp40_;
                                    _g_free0 (_tmp39_);
                                    _vala_code_node_unref0 (base_type);
                              } else {
                                    gboolean _tmp41_ = FALSE;
                                    ValaSymbol* _tmp42_ = NULL;
                                    _tmp42_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
                                    if (VALA_IS_STRUCT (_tmp42_)) {
                                          _tmp41_ = VALA_IS_CREATION_METHOD (m);
                                    } else {
                                          _tmp41_ = FALSE;
                                    }
                                    if (_tmp41_) {
                                          ValaSymbol* _tmp43_ = NULL;
                                          ValaStruct* _tmp44_;
                                          ValaStruct* st;
                                          gboolean _tmp45_ = FALSE;
                                          gboolean _tmp46_ = FALSE;
                                          gboolean _tmp47_;
                                          _tmp43_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
                                          _tmp44_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp43_));
                                          st = _tmp44_;
                                          _tmp47_ = vala_struct_is_boolean_type (st);
                                          if (_tmp47_) {
                                                _tmp46_ = TRUE;
                                          } else {
                                                gboolean _tmp48_;
                                                _tmp48_ = vala_struct_is_integer_type (st);
                                                _tmp46_ = _tmp48_;
                                          }
                                          if (_tmp46_) {
                                                _tmp45_ = TRUE;
                                          } else {
                                                gboolean _tmp49_;
                                                _tmp49_ = vala_struct_is_floating_type (st);
                                                _tmp45_ = _tmp49_;
                                          }
                                          if (_tmp45_) {
                                          } else {
                                                gchar* _tmp50_ = NULL;
                                                gchar* _tmp51_;
                                                ValaCCodeParameter* _tmp52_ = NULL;
                                                _tmp50_ = vala_data_type_get_cname (this_type);
                                                _tmp51_ = _tmp50_;
                                                _tmp52_ = vala_ccode_parameter_new ("*this", _tmp51_);
                                                _vala_ccode_node_unref0 (instance_param);
                                                instance_param = _tmp52_;
                                                _g_free0 (_tmp51_);
                                          }
                                          _vala_code_node_unref0 (st);
                                    } else {
                                          gchar* _tmp53_ = NULL;
                                          gchar* _tmp54_;
                                          ValaCCodeParameter* _tmp55_ = NULL;
                                          _tmp53_ = vala_data_type_get_cname (this_type);
                                          _tmp54_ = _tmp53_;
                                          _tmp55_ = vala_ccode_parameter_new ("this", _tmp54_);
                                          _vala_ccode_node_unref0 (instance_param);
                                          instance_param = _tmp55_;
                                          _g_free0 (_tmp54_);
                                    }
                              }
                        }
                        _vala_code_node_unref0 (this_type);
                        _vala_code_node_unref0 (parent_type);
                  }
            }
      }
      if (instance_param != NULL) {
            vala_ccode_function_add_parameter (func, instance_param);
            if (vdeclarator != NULL) {
                  vala_ccode_function_declarator_add_parameter (vdeclarator, instance_param);
            }
      }
      if (VALA_IS_CREATION_METHOD (m)) {
            ValaSymbol* _tmp56_ = NULL;
            vala_dova_base_module_generate_class_declaration ((ValaDovaBaseModule*) self, VALA_CLASS (((ValaDovaBaseModule*) self)->type_class), decl_space);
            _tmp56_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            if (VALA_IS_CLASS (_tmp56_)) {
                  ValaSymbol* _tmp57_ = NULL;
                  ValaClass* _tmp58_;
                  ValaClass* cl;
                  _tmp57_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
                  _tmp58_ = _vala_code_node_ref0 (VALA_CLASS (_tmp57_));
                  cl = _tmp58_;
                  {
                        ValaList* _tmp59_ = NULL;
                        ValaList* _type_param_list;
                        gint _tmp60_;
                        gint _type_param_size;
                        gint _type_param_index;
                        _tmp59_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
                        _type_param_list = _tmp59_;
                        _tmp60_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                        _type_param_size = _tmp60_;
                        _type_param_index = -1;
                        while (TRUE) {
                              gpointer _tmp61_ = NULL;
                              ValaTypeParameter* type_param;
                              const gchar* _tmp62_ = NULL;
                              gchar* _tmp63_ = NULL;
                              gchar* _tmp64_;
                              gchar* _tmp65_ = NULL;
                              gchar* _tmp66_;
                              ValaCCodeParameter* _tmp67_ = NULL;
                              ValaCCodeParameter* _tmp68_;
                              ValaCCodeParameter* cparam;
                              _type_param_index = _type_param_index + 1;
                              if (!(_type_param_index < _type_param_size)) {
                                    break;
                              }
                              _tmp61_ = vala_list_get (_type_param_list, _type_param_index);
                              type_param = (ValaTypeParameter*) _tmp61_;
                              _tmp62_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                              _tmp63_ = g_utf8_strdown (_tmp62_, (gssize) (-1));
                              _tmp64_ = _tmp63_;
                              _tmp65_ = g_strdup_printf ("%s_type", _tmp64_);
                              _tmp66_ = _tmp65_;
                              _tmp67_ = vala_ccode_parameter_new (_tmp66_, "DovaType*");
                              _tmp68_ = _tmp67_;
                              _g_free0 (_tmp66_);
                              _g_free0 (_tmp64_);
                              cparam = _tmp68_;
                              if (vcall != NULL) {
                                    vala_ccode_function_add_parameter (func, cparam);
                              }
                              _vala_ccode_node_unref0 (cparam);
                              _vala_code_node_unref0 (type_param);
                        }
                        _vala_iterable_unref0 (_type_param_list);
                  }
                  _vala_code_node_unref0 (cl);
            }
      } else {
            {
                  ValaList* _tmp69_ = NULL;
                  ValaList* _type_param_list;
                  gint _tmp70_;
                  gint _type_param_size;
                  gint _type_param_index;
                  _tmp69_ = vala_method_get_type_parameters (m);
                  _type_param_list = _tmp69_;
                  _tmp70_ = vala_collection_get_size ((ValaCollection*) _type_param_list);
                  _type_param_size = _tmp70_;
                  _type_param_index = -1;
                  while (TRUE) {
                        gpointer _tmp71_ = NULL;
                        ValaTypeParameter* type_param;
                        const gchar* _tmp72_ = NULL;
                        gchar* _tmp73_ = NULL;
                        gchar* _tmp74_;
                        gchar* _tmp75_ = NULL;
                        gchar* _tmp76_;
                        ValaCCodeParameter* _tmp77_ = NULL;
                        ValaCCodeParameter* _tmp78_;
                        ValaCCodeParameter* cparam;
                        _type_param_index = _type_param_index + 1;
                        if (!(_type_param_index < _type_param_size)) {
                              break;
                        }
                        _tmp71_ = vala_list_get (_type_param_list, _type_param_index);
                        type_param = (ValaTypeParameter*) _tmp71_;
                        _tmp72_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                        _tmp73_ = g_utf8_strdown (_tmp72_, (gssize) (-1));
                        _tmp74_ = _tmp73_;
                        _tmp75_ = g_strdup_printf ("%s_type", _tmp74_);
                        _tmp76_ = _tmp75_;
                        _tmp77_ = vala_ccode_parameter_new (_tmp76_, "DovaType*");
                        _tmp78_ = _tmp77_;
                        _g_free0 (_tmp76_);
                        _g_free0 (_tmp74_);
                        cparam = _tmp78_;
                        vala_ccode_function_add_parameter (func, cparam);
                        if (vdeclarator != NULL) {
                              vala_ccode_function_declarator_add_parameter (vdeclarator, cparam);
                        }
                        if (vcall != NULL) {
                              const gchar* _tmp79_ = NULL;
                              gchar* _tmp80_ = NULL;
                              gchar* _tmp81_;
                              gchar* _tmp82_ = NULL;
                              gchar* _tmp83_;
                              ValaCCodeIdentifier* _tmp84_ = NULL;
                              ValaCCodeIdentifier* _tmp85_;
                              _tmp79_ = vala_symbol_get_name ((ValaSymbol*) type_param);
                              _tmp80_ = g_utf8_strdown (_tmp79_, (gssize) (-1));
                              _tmp81_ = _tmp80_;
                              _tmp82_ = g_strdup_printf ("%s_type", _tmp81_);
                              _tmp83_ = _tmp82_;
                              _tmp84_ = vala_ccode_identifier_new (_tmp83_);
                              _tmp85_ = _tmp84_;
                              vala_ccode_function_call_add_argument (vcall, (ValaCCodeExpression*) _tmp85_);
                              _vala_ccode_node_unref0 (_tmp85_);
                              _g_free0 (_tmp83_);
                              _g_free0 (_tmp81_);
                        }
                        _vala_ccode_node_unref0 (cparam);
                        _vala_code_node_unref0 (type_param);
                  }
                  _vala_iterable_unref0 (_type_param_list);
            }
      }
      {
            ValaList* _tmp86_ = NULL;
            ValaList* _param_list;
            gint _tmp87_;
            gint _param_size;
            gint _param_index;
            _tmp86_ = vala_method_get_parameters (m);
            _param_list = _tmp86_;
            _tmp87_ = vala_collection_get_size ((ValaCollection*) _param_list);
            _param_size = _tmp87_;
            _param_index = -1;
            while (TRUE) {
                  gpointer _tmp88_ = NULL;
                  ValaParameter* param;
                  ValaCCodeParameter* cparam = NULL;
                  gboolean _tmp89_;
                  _param_index = _param_index + 1;
                  if (!(_param_index < _param_size)) {
                        break;
                  }
                  _tmp88_ = vala_list_get (_param_list, _param_index);
                  param = (ValaParameter*) _tmp88_;
                  _tmp89_ = vala_parameter_get_ellipsis (param);
                  if (!_tmp89_) {
                        ValaDataType* _tmp90_ = NULL;
                        gchar* _tmp91_ = NULL;
                        gchar* ctypename;
                        ValaDataType* _tmp92_ = NULL;
                        gboolean _tmp93_ = FALSE;
                        ValaParameterDirection _tmp94_;
                        const gchar* _tmp97_ = NULL;
                        gchar* _tmp98_ = NULL;
                        gchar* _tmp99_;
                        ValaCCodeParameter* _tmp100_ = NULL;
                        _tmp90_ = vala_variable_get_variable_type ((ValaVariable*) param);
                        _tmp91_ = vala_data_type_get_cname (_tmp90_);
                        ctypename = _tmp91_;
                        _tmp92_ = vala_variable_get_variable_type ((ValaVariable*) param);
                        vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, _tmp92_, decl_space);
                        _tmp94_ = vala_parameter_get_direction (param);
                        if (_tmp94_ != VALA_PARAMETER_DIRECTION_IN) {
                              ValaDataType* _tmp95_ = NULL;
                              _tmp95_ = vala_variable_get_variable_type ((ValaVariable*) param);
                              _tmp93_ = !VALA_IS_GENERIC_TYPE (_tmp95_);
                        } else {
                              _tmp93_ = FALSE;
                        }
                        if (_tmp93_) {
                              gchar* _tmp96_;
                              _tmp96_ = g_strconcat (ctypename, "*", NULL);
                              _g_free0 (ctypename);
                              ctypename = _tmp96_;
                        }
                        _tmp97_ = vala_symbol_get_name ((ValaSymbol*) param);
                        _tmp98_ = vala_dova_base_module_get_variable_cname ((ValaDovaBaseModule*) self, _tmp97_);
                        _tmp99_ = _tmp98_;
                        _tmp100_ = vala_ccode_parameter_new (_tmp99_, ctypename);
                        _vala_ccode_node_unref0 (cparam);
                        cparam = _tmp100_;
                        _g_free0 (_tmp99_);
                        _g_free0 (ctypename);
                  } else {
                        ValaCCodeParameter* _tmp101_ = NULL;
                        _tmp101_ = vala_ccode_parameter_new_with_ellipsis ();
                        _vala_ccode_node_unref0 (cparam);
                        cparam = _tmp101_;
                  }
                  vala_ccode_function_add_parameter (func, cparam);
                  if (vdeclarator != NULL) {
                        vala_ccode_function_declarator_add_parameter (vdeclarator, cparam);
                  }
                  if (vcall != NULL) {
                        const gchar* _tmp102_ = NULL;
                        _tmp102_ = vala_symbol_get_name ((ValaSymbol*) param);
                        if (_tmp102_ != NULL) {
                              const gchar* _tmp103_ = NULL;
                              ValaCCodeExpression* _tmp104_ = NULL;
                              ValaCCodeExpression* _tmp105_;
                              _tmp103_ = vala_symbol_get_name ((ValaSymbol*) param);
                              _tmp104_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp103_);
                              _tmp105_ = _tmp104_;
                              vala_ccode_function_call_add_argument (vcall, _tmp105_);
                              _vala_ccode_node_unref0 (_tmp105_);
                        }
                  }
                  _vala_ccode_node_unref0 (cparam);
                  _vala_code_node_unref0 (param);
            }
            _vala_iterable_unref0 (_param_list);
      }
      _tmp108_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
      if (VALA_IS_CLASS (_tmp108_)) {
            _tmp107_ = VALA_IS_CREATION_METHOD (m);
      } else {
            _tmp107_ = FALSE;
      }
      if (_tmp107_) {
            _tmp106_ = vcall != NULL;
      } else {
            _tmp106_ = FALSE;
      }
      if (_tmp106_) {
            ValaSymbol* _tmp109_ = NULL;
            gchar* _tmp110_ = NULL;
            gchar* _tmp111_;
            gchar* _tmp112_;
            gchar* _tmp113_;
            _tmp109_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
            _tmp110_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) VALA_CLASS (_tmp109_), FALSE);
            _tmp111_ = _tmp110_;
            _tmp112_ = g_strconcat (_tmp111_, "*", NULL);
            _tmp113_ = _tmp112_;
            vala_ccode_function_set_return_type (func, _tmp113_);
            _g_free0 (_tmp113_);
            _g_free0 (_tmp111_);
      } else {
            ValaDataType* _tmp114_ = NULL;
            ValaDataType* _tmp134_ = NULL;
            _tmp114_ = vala_method_get_return_type (m);
            if (VALA_IS_GENERIC_TYPE (_tmp114_)) {
                  ValaCCodeParameter* _tmp115_ = NULL;
                  ValaCCodeParameter* _tmp116_;
                  _tmp115_ = vala_ccode_parameter_new ("result", "void *");
                  _tmp116_ = _tmp115_;
                  vala_ccode_function_add_parameter (func, _tmp116_);
                  _vala_ccode_node_unref0 (_tmp116_);
                  if (vdeclarator != NULL) {
                        ValaCCodeParameter* _tmp117_ = NULL;
                        ValaCCodeParameter* _tmp118_;
                        _tmp117_ = vala_ccode_parameter_new ("result", "void *");
                        _tmp118_ = _tmp117_;
                        vala_ccode_function_declarator_add_parameter (vdeclarator, _tmp118_);
                        _vala_ccode_node_unref0 (_tmp118_);
                  }
            } else {
                  ValaSymbol* _tmp119_ = NULL;
                  ValaSymbol* _tmp120_;
                  ValaStruct* _tmp121_;
                  ValaStruct* st;
                  gboolean _tmp122_ = FALSE;
                  gboolean _tmp123_ = FALSE;
                  _tmp119_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
                  _tmp120_ = _tmp119_;
                  _tmp121_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp120_) ? ((ValaStruct*) _tmp120_) : NULL);
                  st = _tmp121_;
                  if (VALA_IS_CREATION_METHOD (m)) {
                        _tmp123_ = st != NULL;
                  } else {
                        _tmp123_ = FALSE;
                  }
                  if (_tmp123_) {
                        gboolean _tmp124_ = FALSE;
                        gboolean _tmp125_ = FALSE;
                        gboolean _tmp126_;
                        _tmp126_ = vala_struct_is_boolean_type (st);
                        if (_tmp126_) {
                              _tmp125_ = TRUE;
                        } else {
                              gboolean _tmp127_;
                              _tmp127_ = vala_struct_is_integer_type (st);
                              _tmp125_ = _tmp127_;
                        }
                        if (_tmp125_) {
                              _tmp124_ = TRUE;
                        } else {
                              gboolean _tmp128_;
                              _tmp128_ = vala_struct_is_floating_type (st);
                              _tmp124_ = _tmp128_;
                        }
                        _tmp122_ = _tmp124_;
                  } else {
                        _tmp122_ = FALSE;
                  }
                  if (_tmp122_) {
                        gchar* _tmp129_ = NULL;
                        gchar* _tmp130_;
                        _tmp129_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) st, FALSE);
                        _tmp130_ = _tmp129_;
                        vala_ccode_function_set_return_type (func, _tmp130_);
                        _g_free0 (_tmp130_);
                  } else {
                        ValaDataType* _tmp131_ = NULL;
                        gchar* _tmp132_ = NULL;
                        gchar* _tmp133_;
                        _tmp131_ = vala_method_get_return_type (m);
                        _tmp132_ = vala_data_type_get_cname (_tmp131_);
                        _tmp133_ = _tmp132_;
                        vala_ccode_function_set_return_type (func, _tmp133_);
                        _g_free0 (_tmp133_);
                  }
                  _vala_code_node_unref0 (st);
            }
            _tmp134_ = vala_method_get_return_type (m);
            vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, _tmp134_, decl_space);
      }
      _vala_ccode_node_unref0 (instance_param);
}


static void vala_dova_object_module_real_visit_element_access (ValaCodeVisitor* base, ValaElementAccess* expr) {
      ValaDovaObjectModule * self;
      ValaExpression* _tmp0_ = NULL;
      ValaDataType* _tmp1_ = NULL;
      ValaDataType* _tmp2_;
      ValaArrayType* _tmp3_;
      ValaArrayType* array_type;
      self = (ValaDovaObjectModule*) base;
      g_return_if_fail (expr != NULL);
      _tmp0_ = vala_element_access_get_container (expr);
      _tmp1_ = vala_expression_get_value_type (_tmp0_);
      _tmp2_ = _tmp1_;
      _tmp3_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp2_) ? ((ValaArrayType*) _tmp2_) : NULL);
      array_type = _tmp3_;
      if (array_type != NULL) {
            ValaList* _tmp4_ = NULL;
            ValaList* indices;
            gpointer _tmp5_ = NULL;
            ValaExpression* _tmp6_;
            ValaCCodeExpression* _tmp7_ = NULL;
            ValaCCodeExpression* _tmp8_;
            ValaCCodeExpression* cindex;
            gboolean _tmp9_;
            vala_code_node_accept_children ((ValaCodeNode*) expr, (ValaCodeVisitor*) self);
            _tmp4_ = vala_element_access_get_indices (expr);
            indices = _tmp4_;
            _tmp5_ = vala_list_get (indices, 0);
            _tmp6_ = (ValaExpression*) _tmp5_;
            _tmp7_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp6_);
            _tmp8_ = _tmp7_;
            _vala_code_node_unref0 (_tmp6_);
            cindex = _tmp8_;
            _tmp9_ = vala_array_type_get_inline_allocated (array_type);
            if (_tmp9_) {
                  ValaExpression* _tmp10_ = NULL;
                  ValaCCodeExpression* _tmp11_ = NULL;
                  ValaCCodeExpression* _tmp12_;
                  ValaCCodeElementAccess* _tmp13_ = NULL;
                  ValaCCodeElementAccess* _tmp14_;
                  _tmp10_ = vala_element_access_get_container (expr);
                  _tmp11_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp10_);
                  _tmp12_ = _tmp11_;
                  _tmp13_ = vala_ccode_element_access_new (_tmp12_, cindex);
                  _tmp14_ = _tmp13_;
                  vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp14_);
                  _vala_ccode_node_unref0 (_tmp14_);
                  _vala_ccode_node_unref0 (_tmp12_);
            } else {
                  ValaScope* _tmp15_ = NULL;
                  ValaSymbol* _tmp16_ = NULL;
                  ValaProperty* _tmp17_;
                  ValaPropertyAccessor* _tmp18_ = NULL;
                  ValaCCodeIdentifier* _tmp19_ = NULL;
                  ValaCCodeIdentifier* _tmp20_;
                  ValaCCodeFunctionCall* _tmp21_ = NULL;
                  ValaCCodeFunctionCall* _tmp22_;
                  ValaCCodeFunctionCall* ccontainer;
                  ValaExpression* _tmp23_ = NULL;
                  ValaCCodeExpression* _tmp24_ = NULL;
                  ValaCCodeExpression* _tmp25_;
                  ValaDataType* _tmp26_ = NULL;
                  _tmp15_ = vala_symbol_get_scope ((ValaSymbol*) ((ValaDovaBaseModule*) self)->array_class);
                  _tmp16_ = vala_scope_lookup (_tmp15_, "data");
                  _tmp17_ = VALA_PROPERTY (_tmp16_);
                  _tmp18_ = vala_property_get_get_accessor (_tmp17_);
                  vala_dova_base_module_generate_property_accessor_declaration ((ValaDovaBaseModule*) self, _tmp18_, ((ValaDovaBaseModule*) self)->cfile);
                  _vala_code_node_unref0 (_tmp17_);
                  _tmp19_ = vala_ccode_identifier_new ("dova_array_get_data");
                  _tmp20_ = _tmp19_;
                  _tmp21_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp20_);
                  _tmp22_ = _tmp21_;
                  _vala_ccode_node_unref0 (_tmp20_);
                  ccontainer = _tmp22_;
                  _tmp23_ = vala_element_access_get_container (expr);
                  _tmp24_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp23_);
                  _tmp25_ = _tmp24_;
                  vala_ccode_function_call_add_argument (ccontainer, _tmp25_);
                  _vala_ccode_node_unref0 (_tmp25_);
                  _tmp26_ = vala_array_type_get_element_type (array_type);
                  if (VALA_IS_GENERIC_TYPE (_tmp26_)) {
                        ValaCCodeIdentifier* _tmp27_ = NULL;
                        ValaCCodeIdentifier* _tmp28_;
                        ValaCCodeFunctionCall* _tmp29_ = NULL;
                        ValaCCodeFunctionCall* _tmp30_;
                        ValaCCodeFunctionCall* value_size;
                        ValaDataType* _tmp31_ = NULL;
                        ValaCCodeExpression* _tmp32_ = NULL;
                        ValaCCodeExpression* _tmp33_;
                        ValaCCodeCastExpression* _tmp34_ = NULL;
                        ValaCCodeCastExpression* _tmp35_;
                        ValaCCodeBinaryExpression* _tmp36_ = NULL;
                        ValaCCodeBinaryExpression* _tmp37_;
                        ValaCCodeBinaryExpression* _tmp38_ = NULL;
                        ValaCCodeBinaryExpression* _tmp39_;
                        _tmp27_ = vala_ccode_identifier_new ("dova_type_get_value_size");
                        _tmp28_ = _tmp27_;
                        _tmp29_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp28_);
                        _tmp30_ = _tmp29_;
                        _vala_ccode_node_unref0 (_tmp28_);
                        value_size = _tmp30_;
                        _tmp31_ = vala_array_type_get_element_type (array_type);
                        _tmp32_ = vala_dova_base_module_get_type_id_expression ((ValaDovaBaseModule*) self, _tmp31_, FALSE);
                        _tmp33_ = _tmp32_;
                        vala_ccode_function_call_add_argument (value_size, _tmp33_);
                        _vala_ccode_node_unref0 (_tmp33_);
                        _tmp34_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) ccontainer, "char*");
                        _tmp35_ = _tmp34_;
                        _tmp36_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, (ValaCCodeExpression*) value_size, cindex);
                        _tmp37_ = _tmp36_;
                        _tmp38_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp35_, (ValaCCodeExpression*) _tmp37_);
                        _tmp39_ = _tmp38_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp39_);
                        _vala_ccode_node_unref0 (_tmp39_);
                        _vala_ccode_node_unref0 (_tmp37_);
                        _vala_ccode_node_unref0 (_tmp35_);
                        _vala_ccode_node_unref0 (value_size);
                  } else {
                        ValaDataType* _tmp40_ = NULL;
                        gchar* _tmp41_ = NULL;
                        gchar* _tmp42_;
                        gchar* _tmp43_ = NULL;
                        gchar* _tmp44_;
                        ValaCCodeCastExpression* _tmp45_ = NULL;
                        ValaCCodeCastExpression* _tmp46_;
                        ValaCCodeElementAccess* _tmp47_ = NULL;
                        ValaCCodeElementAccess* _tmp48_;
                        _tmp40_ = vala_array_type_get_element_type (array_type);
                        _tmp41_ = vala_data_type_get_cname (_tmp40_);
                        _tmp42_ = _tmp41_;
                        _tmp43_ = g_strdup_printf ("%s*", _tmp42_);
                        _tmp44_ = _tmp43_;
                        _tmp45_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) ccontainer, _tmp44_);
                        _tmp46_ = _tmp45_;
                        _tmp47_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp46_, cindex);
                        _tmp48_ = _tmp47_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp48_);
                        _vala_ccode_node_unref0 (_tmp48_);
                        _vala_ccode_node_unref0 (_tmp46_);
                        _g_free0 (_tmp44_);
                        _g_free0 (_tmp42_);
                  }
                  _vala_ccode_node_unref0 (ccontainer);
            }
            _vala_ccode_node_unref0 (cindex);
            _vala_iterable_unref0 (indices);
      } else {
            VALA_CODE_VISITOR_CLASS (vala_dova_object_module_parent_class)->visit_element_access ((ValaCodeVisitor*) VALA_DOVA_ARRAY_MODULE (self), expr);
      }
      _vala_code_node_unref0 (array_type);
}


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


static void vala_dova_object_module_add_module_init (ValaDovaObjectModule* self) {
      g_return_if_fail (self != NULL);
      {
            ValaList* _tmp0_;
            ValaList* _field_list;
            gint _tmp1_;
            gint _field_size;
            gint _field_index;
            _tmp0_ = _vala_iterable_ref0 (((ValaDovaBaseModule*) self)->static_fields);
            _field_list = _tmp0_;
            _tmp1_ = vala_collection_get_size ((ValaCollection*) _field_list);
            _field_size = _tmp1_;
            _field_index = -1;
            while (TRUE) {
                  gpointer _tmp2_ = NULL;
                  ValaField* field;
                  ValaExpression* _tmp3_ = NULL;
                  gchar* _tmp4_ = NULL;
                  gchar* _tmp5_;
                  ValaCCodeIdentifier* _tmp6_ = NULL;
                  ValaCCodeIdentifier* _tmp7_;
                  ValaCCodeIdentifier* lhs;
                  ValaExpression* _tmp8_ = NULL;
                  ValaCCodeExpression* _tmp9_ = NULL;
                  ValaCCodeExpression* rhs;
                  ValaCCodeFunction* _tmp10_ = NULL;
                  _field_index = _field_index + 1;
                  if (!(_field_index < _field_size)) {
                        break;
                  }
                  _tmp2_ = vala_list_get (_field_list, _field_index);
                  field = (ValaField*) _tmp2_;
                  _tmp3_ = vala_variable_get_initializer ((ValaVariable*) field);
                  vala_code_node_emit ((ValaCodeNode*) _tmp3_, (ValaCodeGenerator*) self);
                  _tmp4_ = vala_field_get_cname (field);
                  _tmp5_ = _tmp4_;
                  _tmp6_ = vala_ccode_identifier_new (_tmp5_);
                  _tmp7_ = _tmp6_;
                  _g_free0 (_tmp5_);
                  lhs = _tmp7_;
                  _tmp8_ = vala_variable_get_initializer ((ValaVariable*) field);
                  _tmp9_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp8_);
                  rhs = _tmp9_;
                  _tmp10_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self);
                  vala_ccode_function_add_assignment (_tmp10_, (ValaCCodeExpression*) lhs, rhs);
                  _vala_ccode_node_unref0 (rhs);
                  _vala_ccode_node_unref0 (lhs);
                  _vala_code_node_unref0 (field);
            }
            _vala_iterable_unref0 (_field_list);
      }
}


ValaDovaObjectModule* vala_dova_object_module_construct (GType object_type) {
      ValaDovaObjectModule* self = NULL;
      self = (ValaDovaObjectModule*) vala_dova_array_module_construct (object_type);
      return self;
}


ValaDovaObjectModule* vala_dova_object_module_new (void) {
      return vala_dova_object_module_construct (VALA_TYPE_DOVA_OBJECT_MODULE);
}


static void vala_dova_object_module_class_init (ValaDovaObjectModuleClass * klass) {
      vala_dova_object_module_parent_class = g_type_class_peek_parent (klass);
      VALA_DOVA_BASE_MODULE_CLASS (klass)->generate_class_declaration = vala_dova_object_module_real_generate_class_declaration;
      VALA_CODE_VISITOR_CLASS (klass)->visit_class = vala_dova_object_module_real_visit_class;
      VALA_CODE_VISITOR_CLASS (klass)->visit_interface = vala_dova_object_module_real_visit_interface;
      VALA_DOVA_BASE_MODULE_CLASS (klass)->generate_property_accessor_declaration = vala_dova_object_module_real_generate_property_accessor_declaration;
      VALA_CODE_VISITOR_CLASS (klass)->visit_property_accessor = vala_dova_object_module_real_visit_property_accessor;
      VALA_DOVA_BASE_MODULE_CLASS (klass)->generate_interface_declaration = vala_dova_object_module_real_generate_interface_declaration;
      VALA_DOVA_BASE_MODULE_CLASS (klass)->method_has_wrapper = vala_dova_object_module_real_method_has_wrapper;
      VALA_DOVA_BASE_MODULE_CLASS (klass)->get_custom_creturn_type = vala_dova_object_module_real_get_custom_creturn_type;
      VALA_DOVA_BASE_MODULE_CLASS (klass)->generate_method_declaration = vala_dova_object_module_real_generate_method_declaration;
      VALA_CODE_VISITOR_CLASS (klass)->visit_method = vala_dova_object_module_real_visit_method;
      VALA_CODE_VISITOR_CLASS (klass)->visit_creation_method = vala_dova_object_module_real_visit_creation_method;
      VALA_DOVA_BASE_MODULE_CLASS (klass)->generate_cparameters = vala_dova_object_module_real_generate_cparameters;
      VALA_CODE_VISITOR_CLASS (klass)->visit_element_access = vala_dova_object_module_real_visit_element_access;
}


static void vala_dova_object_module_instance_init (ValaDovaObjectModule * self) {
}


GType vala_dova_object_module_get_type (void) {
      static volatile gsize vala_dova_object_module_type_id__volatile = 0;
      if (g_once_init_enter (&vala_dova_object_module_type_id__volatile)) {
            static const GTypeInfo g_define_type_info = { sizeof (ValaDovaObjectModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_dova_object_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaDovaObjectModule), 0, (GInstanceInitFunc) vala_dova_object_module_instance_init, NULL };
            GType vala_dova_object_module_type_id;
            vala_dova_object_module_type_id = g_type_register_static (VALA_TYPE_DOVA_ARRAY_MODULE, "ValaDovaObjectModule", &g_define_type_info, 0);
            g_once_init_leave (&vala_dova_object_module_type_id__volatile, vala_dova_object_module_type_id);
      }
      return vala_dova_object_module_type_id__volatile;
}




Generated by  Doxygen 1.6.0   Back to index