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

valadovamemberaccessmodule.c

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

/* valadovamemberaccessmodule.vala
 *
 * Copyright (C) 2006-2011  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_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 _g_free0(var) (var = (g_free (var), NULL))
#define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))

#define VALA_TYPE_DOVA_VALUE (vala_dova_value_get_type ())
#define VALA_DOVA_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_VALUE, ValaDovaValue))
#define VALA_DOVA_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_VALUE, ValaDovaValueClass))
#define VALA_IS_DOVA_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_VALUE))
#define VALA_IS_DOVA_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_VALUE))
#define VALA_DOVA_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_VALUE, ValaDovaValueClass))

typedef struct _ValaDovaValue ValaDovaValue;
typedef struct _ValaDovaValueClass ValaDovaValueClass;
typedef struct _ValaDovaValuePrivate ValaDovaValuePrivate;

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;
      ValaStruct* array_struct;
      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 _ValaDovaValue {
      ValaTargetValue parent_instance;
      ValaDovaValuePrivate * priv;
      ValaCCodeExpression* cvalue;
};

struct _ValaDovaValueClass {
      ValaTargetValueClass parent_class;
};


static gpointer vala_dova_member_access_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;
enum  {
      VALA_DOVA_MEMBER_ACCESS_MODULE_DUMMY_PROPERTY
};
static void vala_dova_member_access_module_real_visit_member_access (ValaCodeVisitor* base, ValaMemberAccess* expr);
ValaCCodeExpression* vala_dova_base_module_get_cvalue (ValaDovaBaseModule* self, ValaExpression* expr);
void vala_dova_base_module_generate_method_declaration (ValaDovaBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space);
gboolean vala_dova_base_module_add_generated_external_symbol (ValaDovaBaseModule* self, ValaSymbol* external_symbol);
void vala_dova_base_module_set_cvalue (ValaDovaBaseModule* self, ValaExpression* expr, ValaCCodeExpression* cvalue);
gboolean vala_dova_base_module_method_has_wrapper (ValaDovaBaseModule* self, ValaMethod* method);
ValaLocalVariable* vala_dova_base_module_get_temp_variable (ValaDovaBaseModule* self, ValaDataType* type, gboolean value_owned, ValaCodeNode* node_reference);
void vala_dova_base_module_emit_temp_var (ValaDovaBaseModule* self, ValaLocalVariable* local);
void vala_dova_base_module_generate_enum_declaration (ValaDovaBaseModule* self, ValaEnum* en, ValaCCodeFile* decl_space);
void vala_dova_base_module_generate_constant_declaration (ValaDovaBaseModule* self, ValaConstant* c, ValaCCodeFile* decl_space);
void vala_dova_base_module_generate_property_accessor_declaration (ValaDovaBaseModule* self, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space);
ValaClass* vala_dova_base_module_get_current_class (ValaDovaBaseModule* self);
ValaTargetValue* vala_dova_member_access_module_get_local_cvalue (ValaDovaMemberAccessModule* self, ValaLocalVariable* local);
ValaDovaValue* vala_dova_value_new (ValaDataType* value_type, ValaCCodeExpression* cvalue);
ValaDovaValue* vala_dova_value_construct (GType object_type, ValaDataType* value_type, ValaCCodeExpression* cvalue);
GType vala_dova_value_get_type (void) G_GNUC_CONST;
ValaCCodeExpression* vala_dova_base_module_get_variable_cexpression (ValaDovaBaseModule* self, const gchar* name);
gint vala_dova_base_module_get_block_id (ValaDovaBaseModule* self, ValaBlock* b);
gchar* vala_dova_base_module_get_variable_cname (ValaDovaBaseModule* self, const gchar* name);
ValaTargetValue* vala_dova_member_access_module_get_parameter_cvalue (ValaDovaMemberAccessModule* self, ValaParameter* p);
ValaMethod* vala_dova_base_module_get_current_method (ValaDovaBaseModule* self);
ValaTypeSymbol* vala_dova_base_module_get_current_type_symbol (ValaDovaBaseModule* self);
ValaPropertyAccessor* vala_dova_base_module_get_current_property_accessor (ValaDovaBaseModule* self);
ValaTargetValue* vala_dova_member_access_module_get_field_cvalue (ValaDovaMemberAccessModule* self, ValaField* f, ValaTargetValue* instance);
ValaCCodeExpression* vala_dova_base_module_get_cvalue_ (ValaDovaBaseModule* self, ValaTargetValue* value);
ValaDataType* vala_dova_base_module_get_data_type_for_symbol (ValaTypeSymbol* sym);
void vala_dova_base_module_generate_field_declaration (ValaDovaBaseModule* self, ValaField* f, ValaCCodeFile* decl_space);
static ValaTargetValue* vala_dova_member_access_module_load_variable (ValaDovaMemberAccessModule* self, ValaVariable* variable, ValaTargetValue* value);
static ValaTargetValue* vala_dova_member_access_module_real_load_local (ValaCodeGenerator* base, ValaLocalVariable* local);
static ValaTargetValue* vala_dova_member_access_module_real_load_parameter (ValaCodeGenerator* base, ValaParameter* param);
static ValaTargetValue* vala_dova_member_access_module_real_load_field (ValaCodeGenerator* base, ValaField* field, ValaTargetValue* instance);
ValaDovaMemberAccessModule* vala_dova_member_access_module_construct (GType object_type);
ValaDovaControlFlowModule* vala_dova_control_flow_module_construct (GType object_type);


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


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


static void vala_dova_member_access_module_real_visit_member_access (ValaCodeVisitor* base, ValaMemberAccess* expr) {
      ValaDovaMemberAccessModule * self;
      ValaCCodeExpression* pub_inst;
      ValaDataType* base_type;
      ValaExpression* _tmp0_ = NULL;
      ValaSymbol* _tmp8_ = NULL;
      self = (ValaDovaMemberAccessModule*) base;
      g_return_if_fail (expr != NULL);
      pub_inst = NULL;
      base_type = NULL;
      _tmp0_ = vala_member_access_get_inner (expr);
      if (_tmp0_ != NULL) {
            ValaExpression* _tmp1_ = NULL;
            ValaCCodeExpression* _tmp2_ = NULL;
            ValaExpression* _tmp3_ = NULL;
            ValaDataType* _tmp4_ = NULL;
            _tmp1_ = vala_member_access_get_inner (expr);
            _tmp2_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp1_);
            _vala_ccode_node_unref0 (pub_inst);
            pub_inst = _tmp2_;
            _tmp3_ = vala_member_access_get_inner (expr);
            _tmp4_ = vala_expression_get_value_type (_tmp3_);
            if (_tmp4_ != NULL) {
                  ValaExpression* _tmp5_ = NULL;
                  ValaDataType* _tmp6_ = NULL;
                  ValaDataType* _tmp7_;
                  _tmp5_ = vala_member_access_get_inner (expr);
                  _tmp6_ = vala_expression_get_value_type (_tmp5_);
                  _tmp7_ = _vala_code_node_ref0 (_tmp6_);
                  _vala_code_node_unref0 (base_type);
                  base_type = _tmp7_;
            }
      }
      _tmp8_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
      if (VALA_IS_METHOD (_tmp8_)) {
            ValaSymbol* _tmp9_ = NULL;
            ValaMethod* _tmp10_;
            ValaMethod* m;
            ValaExpression* _tmp15_ = NULL;
            ValaMethod* _tmp38_ = NULL;
            _tmp9_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
            _tmp10_ = _vala_code_node_ref0 (VALA_METHOD (_tmp9_));
            m = _tmp10_;
            if (!VALA_IS_DYNAMIC_METHOD (m)) {
                  gboolean _tmp11_ = FALSE;
                  gboolean _tmp12_;
                  vala_dova_base_module_generate_method_declaration ((ValaDovaBaseModule*) self, m, ((ValaDovaBaseModule*) self)->cfile);
                  _tmp12_ = vala_symbol_get_external ((ValaSymbol*) m);
                  if (!_tmp12_) {
                        gboolean _tmp13_;
                        _tmp13_ = vala_symbol_get_external_package ((ValaSymbol*) m);
                        _tmp11_ = _tmp13_;
                  } else {
                        _tmp11_ = FALSE;
                  }
                  if (_tmp11_) {
                        gboolean _tmp14_;
                        _tmp14_ = vala_dova_base_module_add_generated_external_symbol ((ValaDovaBaseModule*) self, (ValaSymbol*) m);
                        if (_tmp14_) {
                              vala_code_visitor_visit_method ((ValaCodeVisitor*) self, m);
                        }
                  }
            }
            _tmp15_ = vala_member_access_get_inner (expr);
            if (VALA_IS_BASE_ACCESS (_tmp15_)) {
                  ValaMethod* _tmp16_ = NULL;
                  _tmp16_ = vala_method_get_base_method (m);
                  if (_tmp16_ != NULL) {
                        ValaMethod* _tmp17_ = NULL;
                        ValaSymbol* _tmp18_ = NULL;
                        ValaClass* _tmp19_;
                        ValaClass* base_class;
                        gchar* _tmp20_ = NULL;
                        gchar* _tmp21_;
                        const gchar* _tmp22_ = NULL;
                        gchar* _tmp23_ = NULL;
                        gchar* _tmp24_;
                        ValaCCodeIdentifier* _tmp25_ = NULL;
                        ValaCCodeIdentifier* _tmp26_;
                        _tmp17_ = vala_method_get_base_method (m);
                        _tmp18_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp17_);
                        _tmp19_ = _vala_code_node_ref0 (VALA_CLASS (_tmp18_));
                        base_class = _tmp19_;
                        _tmp20_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) base_class, NULL);
                        _tmp21_ = _tmp20_;
                        _tmp22_ = vala_symbol_get_name ((ValaSymbol*) m);
                        _tmp23_ = g_strdup_printf ("%s_base_%s", _tmp21_, _tmp22_);
                        _tmp24_ = _tmp23_;
                        _tmp25_ = vala_ccode_identifier_new (_tmp24_);
                        _tmp26_ = _tmp25_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp26_);
                        _vala_ccode_node_unref0 (_tmp26_);
                        _g_free0 (_tmp24_);
                        _g_free0 (_tmp21_);
                        _vala_code_node_unref0 (base_class);
                        _vala_code_node_unref0 (m);
                        _vala_code_node_unref0 (base_type);
                        _vala_ccode_node_unref0 (pub_inst);
                        return;
                  } else {
                        ValaMethod* _tmp27_ = NULL;
                        _tmp27_ = vala_method_get_base_interface_method (m);
                        if (_tmp27_ != NULL) {
                              ValaMethod* _tmp28_ = NULL;
                              ValaSymbol* _tmp29_ = NULL;
                              ValaInterface* _tmp30_;
                              ValaInterface* base_iface;
                              gchar* _tmp31_ = NULL;
                              gchar* _tmp32_;
                              const gchar* _tmp33_ = NULL;
                              gchar* _tmp34_ = NULL;
                              gchar* _tmp35_;
                              ValaCCodeIdentifier* _tmp36_ = NULL;
                              ValaCCodeIdentifier* _tmp37_;
                              _tmp28_ = vala_method_get_base_interface_method (m);
                              _tmp29_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp28_);
                              _tmp30_ = _vala_code_node_ref0 (VALA_INTERFACE (_tmp29_));
                              base_iface = _tmp30_;
                              _tmp31_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) base_iface, NULL);
                              _tmp32_ = _tmp31_;
                              _tmp33_ = vala_symbol_get_name ((ValaSymbol*) m);
                              _tmp34_ = g_strdup_printf ("%s_base_%s", _tmp32_, _tmp33_);
                              _tmp35_ = _tmp34_;
                              _tmp36_ = vala_ccode_identifier_new (_tmp35_);
                              _tmp37_ = _tmp36_;
                              vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp37_);
                              _vala_ccode_node_unref0 (_tmp37_);
                              _g_free0 (_tmp35_);
                              _g_free0 (_tmp32_);
                              _vala_code_node_unref0 (base_iface);
                              _vala_code_node_unref0 (m);
                              _vala_code_node_unref0 (base_type);
                              _vala_ccode_node_unref0 (pub_inst);
                              return;
                        }
                  }
            }
            _tmp38_ = vala_method_get_base_method (m);
            if (_tmp38_ != NULL) {
                  ValaMethod* _tmp39_ = NULL;
                  gboolean _tmp40_;
                  _tmp39_ = vala_method_get_base_method (m);
                  _tmp40_ = vala_dova_base_module_method_has_wrapper ((ValaDovaBaseModule*) self, _tmp39_);
                  if (!_tmp40_) {
                        ValaCCodeExpression* _tmp41_;
                        ValaCCodeExpression* inst;
                        gboolean _tmp42_ = FALSE;
                        ValaExpression* _tmp43_ = NULL;
                        ValaMethod* _tmp53_ = NULL;
                        ValaSymbol* _tmp54_ = NULL;
                        ValaClass* _tmp55_;
                        ValaClass* base_class;
                        gchar* _tmp56_ = NULL;
                        gchar* _tmp57_;
                        gchar* _tmp58_ = NULL;
                        gchar* _tmp59_;
                        ValaCCodeIdentifier* _tmp60_ = NULL;
                        ValaCCodeIdentifier* _tmp61_;
                        ValaCCodeFunctionCall* _tmp62_ = NULL;
                        ValaCCodeFunctionCall* _tmp63_;
                        ValaCCodeFunctionCall* vclass;
                        const gchar* _tmp64_ = NULL;
                        ValaCCodeMemberAccess* _tmp65_ = NULL;
                        ValaCCodeMemberAccess* _tmp66_;
                        _tmp41_ = _vala_ccode_node_ref0 (pub_inst);
                        inst = _tmp41_;
                        _tmp43_ = vala_member_access_get_inner (expr);
                        if (_tmp43_ != NULL) {
                              ValaExpression* _tmp44_ = NULL;
                              gboolean _tmp45_;
                              _tmp44_ = vala_member_access_get_inner (expr);
                              _tmp45_ = vala_expression_is_pure (_tmp44_);
                              _tmp42_ = !_tmp45_;
                        } else {
                              _tmp42_ = FALSE;
                        }
                        if (_tmp42_) {
                              ValaExpression* _tmp46_ = NULL;
                              ValaDataType* _tmp47_ = NULL;
                              ValaLocalVariable* _tmp48_ = NULL;
                              ValaLocalVariable* temp_var;
                              const gchar* _tmp49_ = NULL;
                              ValaCCodeIdentifier* _tmp50_ = NULL;
                              ValaCCodeIdentifier* ctemp;
                              ValaCCodeAssignment* _tmp51_ = NULL;
                              ValaExpression* _tmp52_ = NULL;
                              _tmp46_ = vala_member_access_get_inner (expr);
                              _tmp47_ = vala_expression_get_value_type (_tmp46_);
                              _tmp48_ = vala_dova_base_module_get_temp_variable ((ValaDovaBaseModule*) self, _tmp47_, TRUE, NULL);
                              temp_var = _tmp48_;
                              vala_dova_base_module_emit_temp_var ((ValaDovaBaseModule*) self, temp_var);
                              _tmp49_ = vala_symbol_get_name ((ValaSymbol*) temp_var);
                              _tmp50_ = vala_ccode_identifier_new (_tmp49_);
                              ctemp = _tmp50_;
                              _tmp51_ = vala_ccode_assignment_new ((ValaCCodeExpression*) ctemp, pub_inst, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
                              _vala_ccode_node_unref0 (inst);
                              inst = (ValaCCodeExpression*) _tmp51_;
                              _tmp52_ = vala_member_access_get_inner (expr);
                              vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, _tmp52_, (ValaCCodeExpression*) ctemp);
                              _vala_ccode_node_unref0 (ctemp);
                              _vala_code_node_unref0 (temp_var);
                        }
                        _tmp53_ = vala_method_get_base_method (m);
                        _tmp54_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp53_);
                        _tmp55_ = _vala_code_node_ref0 (VALA_CLASS (_tmp54_));
                        base_class = _tmp55_;
                        _tmp56_ = vala_typesymbol_get_upper_case_cname ((ValaTypeSymbol*) base_class, NULL);
                        _tmp57_ = _tmp56_;
                        _tmp58_ = g_strdup_printf ("%s_GET_CLASS", _tmp57_);
                        _tmp59_ = _tmp58_;
                        _tmp60_ = vala_ccode_identifier_new (_tmp59_);
                        _tmp61_ = _tmp60_;
                        _tmp62_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp61_);
                        _tmp63_ = _tmp62_;
                        _vala_ccode_node_unref0 (_tmp61_);
                        _g_free0 (_tmp59_);
                        _g_free0 (_tmp57_);
                        vclass = _tmp63_;
                        vala_ccode_function_call_add_argument (vclass, inst);
                        _tmp64_ = vala_symbol_get_name ((ValaSymbol*) m);
                        _tmp65_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) vclass, _tmp64_);
                        _tmp66_ = _tmp65_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp66_);
                        _vala_ccode_node_unref0 (_tmp66_);
                        _vala_ccode_node_unref0 (vclass);
                        _vala_code_node_unref0 (base_class);
                        _vala_ccode_node_unref0 (inst);
                  } else {
                        ValaMethod* _tmp67_ = NULL;
                        gchar* _tmp68_ = NULL;
                        gchar* _tmp69_;
                        ValaCCodeIdentifier* _tmp70_ = NULL;
                        ValaCCodeIdentifier* _tmp71_;
                        _tmp67_ = vala_method_get_base_method (m);
                        _tmp68_ = vala_method_get_cname (_tmp67_);
                        _tmp69_ = _tmp68_;
                        _tmp70_ = vala_ccode_identifier_new (_tmp69_);
                        _tmp71_ = _tmp70_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp71_);
                        _vala_ccode_node_unref0 (_tmp71_);
                        _g_free0 (_tmp69_);
                  }
            } else {
                  ValaMethod* _tmp72_ = NULL;
                  _tmp72_ = vala_method_get_base_interface_method (m);
                  if (_tmp72_ != NULL) {
                        ValaMethod* _tmp73_ = NULL;
                        gchar* _tmp74_ = NULL;
                        gchar* _tmp75_;
                        ValaCCodeIdentifier* _tmp76_ = NULL;
                        ValaCCodeIdentifier* _tmp77_;
                        _tmp73_ = vala_method_get_base_interface_method (m);
                        _tmp74_ = vala_method_get_cname (_tmp73_);
                        _tmp75_ = _tmp74_;
                        _tmp76_ = vala_ccode_identifier_new (_tmp75_);
                        _tmp77_ = _tmp76_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp77_);
                        _vala_ccode_node_unref0 (_tmp77_);
                        _g_free0 (_tmp75_);
                  } else {
                        if (VALA_IS_CREATION_METHOD (m)) {
                              gchar* _tmp78_ = NULL;
                              gchar* _tmp79_;
                              ValaCCodeIdentifier* _tmp80_ = NULL;
                              ValaCCodeIdentifier* _tmp81_;
                              _tmp78_ = vala_method_get_real_cname (m);
                              _tmp79_ = _tmp78_;
                              _tmp80_ = vala_ccode_identifier_new (_tmp79_);
                              _tmp81_ = _tmp80_;
                              vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp81_);
                              _vala_ccode_node_unref0 (_tmp81_);
                              _g_free0 (_tmp79_);
                        } else {
                              gchar* _tmp82_ = NULL;
                              gchar* _tmp83_;
                              ValaCCodeIdentifier* _tmp84_ = NULL;
                              ValaCCodeIdentifier* _tmp85_;
                              _tmp82_ = vala_method_get_cname (m);
                              _tmp83_ = _tmp82_;
                              _tmp84_ = vala_ccode_identifier_new (_tmp83_);
                              _tmp85_ = _tmp84_;
                              vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp85_);
                              _vala_ccode_node_unref0 (_tmp85_);
                              _g_free0 (_tmp83_);
                        }
                  }
            }
            _vala_code_node_unref0 (m);
      } else {
            ValaSymbol* _tmp86_ = NULL;
            _tmp86_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
            if (VALA_IS_ARRAY_LENGTH_FIELD (_tmp86_)) {
                  ValaExpression* _tmp87_ = NULL;
                  ValaDataType* _tmp88_ = NULL;
                  ValaArrayType* _tmp89_;
                  ValaArrayType* array_type;
                  gboolean _tmp90_;
                  _tmp87_ = vala_member_access_get_inner (expr);
                  _tmp88_ = vala_expression_get_value_type (_tmp87_);
                  _tmp89_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp88_));
                  array_type = _tmp89_;
                  _tmp90_ = vala_array_type_get_fixed_length (array_type);
                  if (_tmp90_) {
                        ValaCCodeIdentifier* _tmp91_ = NULL;
                        ValaCCodeIdentifier* _tmp92_;
                        ValaCCodeFunctionCall* _tmp93_ = NULL;
                        ValaCCodeFunctionCall* _tmp94_;
                        ValaCCodeFunctionCall* csizeof;
                        ValaCCodeIdentifier* _tmp95_ = NULL;
                        ValaCCodeIdentifier* _tmp96_;
                        ValaCCodeFunctionCall* _tmp97_ = NULL;
                        ValaCCodeFunctionCall* _tmp98_;
                        ValaCCodeFunctionCall* csizeofelement;
                        ValaCCodeConstant* _tmp99_ = NULL;
                        ValaCCodeConstant* _tmp100_;
                        ValaCCodeElementAccess* _tmp101_ = NULL;
                        ValaCCodeElementAccess* _tmp102_;
                        ValaCCodeBinaryExpression* _tmp103_ = NULL;
                        ValaCCodeBinaryExpression* _tmp104_;
                        _tmp91_ = vala_ccode_identifier_new ("sizeof");
                        _tmp92_ = _tmp91_;
                        _tmp93_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp92_);
                        _tmp94_ = _tmp93_;
                        _vala_ccode_node_unref0 (_tmp92_);
                        csizeof = _tmp94_;
                        vala_ccode_function_call_add_argument (csizeof, pub_inst);
                        _tmp95_ = vala_ccode_identifier_new ("sizeof");
                        _tmp96_ = _tmp95_;
                        _tmp97_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp96_);
                        _tmp98_ = _tmp97_;
                        _vala_ccode_node_unref0 (_tmp96_);
                        csizeofelement = _tmp98_;
                        _tmp99_ = vala_ccode_constant_new ("0");
                        _tmp100_ = _tmp99_;
                        _tmp101_ = vala_ccode_element_access_new (pub_inst, (ValaCCodeExpression*) _tmp100_);
                        _tmp102_ = _tmp101_;
                        vala_ccode_function_call_add_argument (csizeofelement, (ValaCCodeExpression*) _tmp102_);
                        _vala_ccode_node_unref0 (_tmp102_);
                        _vala_ccode_node_unref0 (_tmp100_);
                        _tmp103_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) csizeof, (ValaCCodeExpression*) csizeofelement);
                        _tmp104_ = _tmp103_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp104_);
                        _vala_ccode_node_unref0 (_tmp104_);
                        _vala_ccode_node_unref0 (csizeofelement);
                        _vala_ccode_node_unref0 (csizeof);
                  } else {
                        ValaCCodeMemberAccess* _tmp105_ = NULL;
                        ValaCCodeMemberAccess* _tmp106_;
                        _tmp105_ = vala_ccode_member_access_new (pub_inst, "length", FALSE);
                        _tmp106_ = _tmp105_;
                        vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp106_);
                        _vala_ccode_node_unref0 (_tmp106_);
                  }
                  _vala_code_node_unref0 (array_type);
            } else {
                  ValaSymbol* _tmp107_ = NULL;
                  _tmp107_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                  if (VALA_IS_FIELD (_tmp107_)) {
                        ValaSymbol* _tmp108_ = NULL;
                        ValaField* _tmp109_;
                        ValaField* f;
                        ValaTargetValue* _tmp110_ = NULL;
                        ValaExpression* _tmp111_ = NULL;
                        ValaTargetValue* _tmp114_ = NULL;
                        ValaTargetValue* _tmp115_;
                        _tmp108_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                        _tmp109_ = _vala_code_node_ref0 (VALA_FIELD (_tmp108_));
                        f = _tmp109_;
                        _tmp111_ = vala_member_access_get_inner (expr);
                        if (_tmp111_ != NULL) {
                              ValaExpression* _tmp112_ = NULL;
                              ValaTargetValue* _tmp113_ = NULL;
                              _tmp112_ = vala_member_access_get_inner (expr);
                              _tmp113_ = vala_expression_get_target_value (_tmp112_);
                              _tmp110_ = _tmp113_;
                        } else {
                              _tmp110_ = NULL;
                        }
                        _tmp114_ = vala_code_generator_load_field ((ValaCodeGenerator*) self, f, _tmp110_);
                        _tmp115_ = _tmp114_;
                        vala_expression_set_target_value ((ValaExpression*) expr, _tmp115_);
                        _vala_target_value_unref0 (_tmp115_);
                        _vala_code_node_unref0 (f);
                  } else {
                        ValaSymbol* _tmp116_ = NULL;
                        _tmp116_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                        if (VALA_IS_ENUM_VALUE (_tmp116_)) {
                              ValaSymbol* _tmp117_ = NULL;
                              ValaEnumValue* _tmp118_;
                              ValaEnumValue* ev;
                              ValaSymbol* _tmp119_ = NULL;
                              gchar* _tmp120_ = NULL;
                              gchar* _tmp121_;
                              ValaCCodeConstant* _tmp122_ = NULL;
                              ValaCCodeConstant* _tmp123_;
                              _tmp117_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                              _tmp118_ = _vala_code_node_ref0 (VALA_ENUM_VALUE (_tmp117_));
                              ev = _tmp118_;
                              _tmp119_ = vala_symbol_get_parent_symbol ((ValaSymbol*) ev);
                              vala_dova_base_module_generate_enum_declaration ((ValaDovaBaseModule*) self, VALA_ENUM (_tmp119_), ((ValaDovaBaseModule*) self)->cfile);
                              _tmp120_ = vala_constant_get_cname ((ValaConstant*) ev);
                              _tmp121_ = _tmp120_;
                              _tmp122_ = vala_ccode_constant_new (_tmp121_);
                              _tmp123_ = _tmp122_;
                              vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp123_);
                              _vala_ccode_node_unref0 (_tmp123_);
                              _g_free0 (_tmp121_);
                              _vala_code_node_unref0 (ev);
                        } else {
                              ValaSymbol* _tmp124_ = NULL;
                              _tmp124_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                              if (VALA_IS_CONSTANT (_tmp124_)) {
                                    ValaSymbol* _tmp125_ = NULL;
                                    ValaConstant* _tmp126_;
                                    ValaConstant* c;
                                    gchar* _tmp127_ = NULL;
                                    gchar* _tmp128_;
                                    ValaCCodeIdentifier* _tmp129_ = NULL;
                                    ValaCCodeIdentifier* _tmp130_;
                                    _tmp125_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                                    _tmp126_ = _vala_code_node_ref0 (VALA_CONSTANT (_tmp125_));
                                    c = _tmp126_;
                                    vala_dova_base_module_generate_constant_declaration ((ValaDovaBaseModule*) self, c, ((ValaDovaBaseModule*) self)->cfile);
                                    _tmp127_ = vala_constant_get_cname (c);
                                    _tmp128_ = _tmp127_;
                                    _tmp129_ = vala_ccode_identifier_new (_tmp128_);
                                    _tmp130_ = _tmp129_;
                                    vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) _tmp130_);
                                    _vala_ccode_node_unref0 (_tmp130_);
                                    _g_free0 (_tmp128_);
                                    _vala_code_node_unref0 (c);
                              } else {
                                    ValaSymbol* _tmp131_ = NULL;
                                    _tmp131_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                                    if (VALA_IS_PROPERTY (_tmp131_)) {
                                          ValaSymbol* _tmp132_ = NULL;
                                          ValaProperty* _tmp133_;
                                          ValaProperty* prop;
                                          ValaExpression* _tmp139_ = NULL;
                                          ValaProperty* _tmp192_;
                                          ValaProperty* base_property;
                                          ValaProperty* _tmp193_ = NULL;
                                          ValaPropertyAccessor* _tmp199_ = NULL;
                                          gchar* _tmp200_ = NULL;
                                          gchar* getter_cname;
                                          ValaCCodeIdentifier* _tmp201_ = NULL;
                                          ValaCCodeIdentifier* _tmp202_;
                                          ValaCCodeFunctionCall* _tmp203_ = NULL;
                                          ValaCCodeFunctionCall* _tmp204_;
                                          ValaCCodeFunctionCall* ccall;
                                          ValaMemberBinding _tmp205_;
                                          _tmp132_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                                          _tmp133_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp132_));
                                          prop = _tmp133_;
                                          if (!VALA_IS_DYNAMIC_PROPERTY (prop)) {
                                                ValaPropertyAccessor* _tmp134_ = NULL;
                                                gboolean _tmp135_ = FALSE;
                                                gboolean _tmp136_;
                                                _tmp134_ = vala_property_get_get_accessor (prop);
                                                vala_dova_base_module_generate_property_accessor_declaration ((ValaDovaBaseModule*) self, _tmp134_, ((ValaDovaBaseModule*) self)->cfile);
                                                _tmp136_ = vala_symbol_get_external ((ValaSymbol*) prop);
                                                if (!_tmp136_) {
                                                      gboolean _tmp137_;
                                                      _tmp137_ = vala_symbol_get_external_package ((ValaSymbol*) prop);
                                                      _tmp135_ = _tmp137_;
                                                } else {
                                                      _tmp135_ = FALSE;
                                                }
                                                if (_tmp135_) {
                                                      gboolean _tmp138_;
                                                      _tmp138_ = vala_dova_base_module_add_generated_external_symbol ((ValaDovaBaseModule*) self, (ValaSymbol*) prop);
                                                      if (_tmp138_) {
                                                            vala_code_visitor_visit_property ((ValaCodeVisitor*) self, prop);
                                                      }
                                                }
                                          }
                                          _tmp139_ = vala_member_access_get_inner (expr);
                                          if (VALA_IS_BASE_ACCESS (_tmp139_)) {
                                                ValaProperty* _tmp140_ = NULL;
                                                _tmp140_ = vala_property_get_base_property (prop);
                                                if (_tmp140_ != NULL) {
                                                      ValaProperty* _tmp141_ = NULL;
                                                      ValaSymbol* _tmp142_ = NULL;
                                                      ValaClass* _tmp143_;
                                                      ValaClass* base_class;
                                                      gchar* _tmp144_ = NULL;
                                                      gchar* _tmp145_;
                                                      gchar* _tmp146_ = NULL;
                                                      gchar* _tmp147_;
                                                      ValaCCodeIdentifier* _tmp148_ = NULL;
                                                      ValaCCodeIdentifier* _tmp149_;
                                                      ValaCCodeFunctionCall* _tmp150_ = NULL;
                                                      ValaCCodeFunctionCall* _tmp151_;
                                                      ValaCCodeFunctionCall* vcast;
                                                      ValaClass* _tmp152_ = NULL;
                                                      gchar* _tmp153_ = NULL;
                                                      gchar* _tmp154_;
                                                      gchar* _tmp155_ = NULL;
                                                      gchar* _tmp156_;
                                                      ValaCCodeIdentifier* _tmp157_ = NULL;
                                                      ValaCCodeIdentifier* _tmp158_;
                                                      const gchar* _tmp159_ = NULL;
                                                      gchar* _tmp160_ = NULL;
                                                      gchar* _tmp161_;
                                                      ValaCCodeMemberAccess* _tmp162_ = NULL;
                                                      ValaCCodeMemberAccess* _tmp163_;
                                                      ValaCCodeFunctionCall* _tmp164_ = NULL;
                                                      ValaCCodeFunctionCall* _tmp165_;
                                                      ValaCCodeFunctionCall* ccall;
                                                      ValaExpression* _tmp166_ = NULL;
                                                      ValaCCodeExpression* _tmp167_ = NULL;
                                                      ValaCCodeExpression* _tmp168_;
                                                      _tmp141_ = vala_property_get_base_property (prop);
                                                      _tmp142_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp141_);
                                                      _tmp143_ = _vala_code_node_ref0 (VALA_CLASS (_tmp142_));
                                                      base_class = _tmp143_;
                                                      _tmp144_ = vala_typesymbol_get_upper_case_cname ((ValaTypeSymbol*) base_class, NULL);
                                                      _tmp145_ = _tmp144_;
                                                      _tmp146_ = g_strdup_printf ("%s_CLASS", _tmp145_);
                                                      _tmp147_ = _tmp146_;
                                                      _tmp148_ = vala_ccode_identifier_new (_tmp147_);
                                                      _tmp149_ = _tmp148_;
                                                      _tmp150_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp149_);
                                                      _tmp151_ = _tmp150_;
                                                      _vala_ccode_node_unref0 (_tmp149_);
                                                      _g_free0 (_tmp147_);
                                                      _g_free0 (_tmp145_);
                                                      vcast = _tmp151_;
                                                      _tmp152_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
                                                      _tmp153_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) _tmp152_, NULL);
                                                      _tmp154_ = _tmp153_;
                                                      _tmp155_ = g_strdup_printf ("%s_parent_class", _tmp154_);
                                                      _tmp156_ = _tmp155_;
                                                      _tmp157_ = vala_ccode_identifier_new (_tmp156_);
                                                      _tmp158_ = _tmp157_;
                                                      vala_ccode_function_call_add_argument (vcast, (ValaCCodeExpression*) _tmp158_);
                                                      _vala_ccode_node_unref0 (_tmp158_);
                                                      _g_free0 (_tmp156_);
                                                      _g_free0 (_tmp154_);
                                                      _tmp159_ = vala_symbol_get_name ((ValaSymbol*) prop);
                                                      _tmp160_ = g_strdup_printf ("get_%s", _tmp159_);
                                                      _tmp161_ = _tmp160_;
                                                      _tmp162_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) vcast, _tmp161_);
                                                      _tmp163_ = _tmp162_;
                                                      _tmp164_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp163_);
                                                      _tmp165_ = _tmp164_;
                                                      _vala_ccode_node_unref0 (_tmp163_);
                                                      _g_free0 (_tmp161_);
                                                      ccall = _tmp165_;
                                                      _tmp166_ = vala_member_access_get_inner (expr);
                                                      _tmp167_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp166_);
                                                      _tmp168_ = _tmp167_;
                                                      vala_ccode_function_call_add_argument (ccall, _tmp168_);
                                                      _vala_ccode_node_unref0 (_tmp168_);
                                                      vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) ccall);
                                                      _vala_ccode_node_unref0 (ccall);
                                                      _vala_ccode_node_unref0 (vcast);
                                                      _vala_code_node_unref0 (base_class);
                                                      _vala_code_node_unref0 (prop);
                                                      _vala_code_node_unref0 (base_type);
                                                      _vala_ccode_node_unref0 (pub_inst);
                                                      return;
                                                } else {
                                                      ValaProperty* _tmp169_ = NULL;
                                                      _tmp169_ = vala_property_get_base_interface_property (prop);
                                                      if (_tmp169_ != NULL) {
                                                            ValaProperty* _tmp170_ = NULL;
                                                            ValaSymbol* _tmp171_ = NULL;
                                                            ValaInterface* _tmp172_;
                                                            ValaInterface* base_iface;
                                                            ValaClass* _tmp173_ = NULL;
                                                            gchar* _tmp174_ = NULL;
                                                            gchar* _tmp175_;
                                                            gchar* _tmp176_ = NULL;
                                                            gchar* _tmp177_;
                                                            gchar* _tmp178_ = NULL;
                                                            gchar* _tmp179_;
                                                            gchar* parent_iface_var;
                                                            ValaCCodeIdentifier* _tmp180_ = NULL;
                                                            ValaCCodeIdentifier* _tmp181_;
                                                            const gchar* _tmp182_ = NULL;
                                                            gchar* _tmp183_ = NULL;
                                                            gchar* _tmp184_;
                                                            ValaCCodeMemberAccess* _tmp185_ = NULL;
                                                            ValaCCodeMemberAccess* _tmp186_;
                                                            ValaCCodeFunctionCall* _tmp187_ = NULL;
                                                            ValaCCodeFunctionCall* _tmp188_;
                                                            ValaCCodeFunctionCall* ccall;
                                                            ValaExpression* _tmp189_ = NULL;
                                                            ValaCCodeExpression* _tmp190_ = NULL;
                                                            ValaCCodeExpression* _tmp191_;
                                                            _tmp170_ = vala_property_get_base_interface_property (prop);
                                                            _tmp171_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp170_);
                                                            _tmp172_ = _vala_code_node_ref0 (VALA_INTERFACE (_tmp171_));
                                                            base_iface = _tmp172_;
                                                            _tmp173_ = vala_dova_base_module_get_current_class ((ValaDovaBaseModule*) self);
                                                            _tmp174_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) _tmp173_, NULL);
                                                            _tmp175_ = _tmp174_;
                                                            _tmp176_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) base_iface, NULL);
                                                            _tmp177_ = _tmp176_;
                                                            _tmp178_ = g_strdup_printf ("%s_%s_parent_iface", _tmp175_, _tmp177_);
                                                            _tmp179_ = _tmp178_;
                                                            _g_free0 (_tmp177_);
                                                            _g_free0 (_tmp175_);
                                                            parent_iface_var = _tmp179_;
                                                            _tmp180_ = vala_ccode_identifier_new (parent_iface_var);
                                                            _tmp181_ = _tmp180_;
                                                            _tmp182_ = vala_symbol_get_name ((ValaSymbol*) prop);
                                                            _tmp183_ = g_strdup_printf ("get_%s", _tmp182_);
                                                            _tmp184_ = _tmp183_;
                                                            _tmp185_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp181_, _tmp184_);
                                                            _tmp186_ = _tmp185_;
                                                            _tmp187_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp186_);
                                                            _tmp188_ = _tmp187_;
                                                            _vala_ccode_node_unref0 (_tmp186_);
                                                            _g_free0 (_tmp184_);
                                                            _vala_ccode_node_unref0 (_tmp181_);
                                                            ccall = _tmp188_;
                                                            _tmp189_ = vala_member_access_get_inner (expr);
                                                            _tmp190_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp189_);
                                                            _tmp191_ = _tmp190_;
                                                            vala_ccode_function_call_add_argument (ccall, _tmp191_);
                                                            _vala_ccode_node_unref0 (_tmp191_);
                                                            vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) ccall);
                                                            _vala_ccode_node_unref0 (ccall);
                                                            _g_free0 (parent_iface_var);
                                                            _vala_code_node_unref0 (base_iface);
                                                            _vala_code_node_unref0 (prop);
                                                            _vala_code_node_unref0 (base_type);
                                                            _vala_ccode_node_unref0 (pub_inst);
                                                            return;
                                                      }
                                                }
                                          }
                                          _tmp192_ = _vala_code_node_ref0 (prop);
                                          base_property = _tmp192_;
                                          _tmp193_ = vala_property_get_base_property (prop);
                                          if (_tmp193_ != NULL) {
                                                ValaProperty* _tmp194_ = NULL;
                                                ValaProperty* _tmp195_;
                                                _tmp194_ = vala_property_get_base_property (prop);
                                                _tmp195_ = _vala_code_node_ref0 (_tmp194_);
                                                _vala_code_node_unref0 (base_property);
                                                base_property = _tmp195_;
                                          } else {
                                                ValaProperty* _tmp196_ = NULL;
                                                _tmp196_ = vala_property_get_base_interface_property (prop);
                                                if (_tmp196_ != NULL) {
                                                      ValaProperty* _tmp197_ = NULL;
                                                      ValaProperty* _tmp198_;
                                                      _tmp197_ = vala_property_get_base_interface_property (prop);
                                                      _tmp198_ = _vala_code_node_ref0 (_tmp197_);
                                                      _vala_code_node_unref0 (base_property);
                                                      base_property = _tmp198_;
                                                }
                                          }
                                          _tmp199_ = vala_property_get_get_accessor (base_property);
                                          _tmp200_ = vala_property_accessor_get_cname (_tmp199_);
                                          getter_cname = _tmp200_;
                                          _tmp201_ = vala_ccode_identifier_new (getter_cname);
                                          _tmp202_ = _tmp201_;
                                          _tmp203_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp202_);
                                          _tmp204_ = _tmp203_;
                                          _vala_ccode_node_unref0 (_tmp202_);
                                          ccall = _tmp204_;
                                          _tmp205_ = vala_property_get_binding (prop);
                                          if (_tmp205_ == VALA_MEMBER_BINDING_INSTANCE) {
                                                vala_ccode_function_call_add_argument (ccall, pub_inst);
                                          }
                                          vala_dova_base_module_set_cvalue ((ValaDovaBaseModule*) self, (ValaExpression*) expr, (ValaCCodeExpression*) ccall);
                                          _vala_ccode_node_unref0 (ccall);
                                          _g_free0 (getter_cname);
                                          _vala_code_node_unref0 (base_property);
                                          _vala_code_node_unref0 (prop);
                                    } else {
                                          ValaSymbol* _tmp206_ = NULL;
                                          _tmp206_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                                          if (VALA_IS_LOCAL_VARIABLE (_tmp206_)) {
                                                ValaSymbol* _tmp207_ = NULL;
                                                ValaLocalVariable* _tmp208_;
                                                ValaLocalVariable* local;
                                                ValaTargetValue* _tmp209_ = NULL;
                                                ValaTargetValue* _tmp210_;
                                                _tmp207_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                                                _tmp208_ = _vala_code_node_ref0 (VALA_LOCAL_VARIABLE (_tmp207_));
                                                local = _tmp208_;
                                                _tmp209_ = vala_code_generator_load_local ((ValaCodeGenerator*) self, local);
                                                _tmp210_ = _tmp209_;
                                                vala_expression_set_target_value ((ValaExpression*) expr, _tmp210_);
                                                _vala_target_value_unref0 (_tmp210_);
                                                _vala_code_node_unref0 (local);
                                          } else {
                                                ValaSymbol* _tmp211_ = NULL;
                                                _tmp211_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                                                if (VALA_IS_PARAMETER (_tmp211_)) {
                                                      ValaSymbol* _tmp212_ = NULL;
                                                      ValaParameter* _tmp213_;
                                                      ValaParameter* p;
                                                      ValaTargetValue* _tmp214_ = NULL;
                                                      ValaTargetValue* _tmp215_;
                                                      _tmp212_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
                                                      _tmp213_ = _vala_code_node_ref0 (VALA_PARAMETER (_tmp212_));
                                                      p = _tmp213_;
                                                      _tmp214_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, p);
                                                      _tmp215_ = _tmp214_;
                                                      vala_expression_set_target_value ((ValaExpression*) expr, _tmp215_);
                                                      _vala_target_value_unref0 (_tmp215_);
                                                      _vala_code_node_unref0 (p);
                                                }
                                          }
                                    }
                              }
                        }
                  }
            }
      }
      _vala_code_node_unref0 (base_type);
      _vala_ccode_node_unref0 (pub_inst);
}


ValaTargetValue* vala_dova_member_access_module_get_local_cvalue (ValaDovaMemberAccessModule* self, ValaLocalVariable* local) {
      ValaTargetValue* result = NULL;
      ValaDataType* _tmp0_ = NULL;
      ValaDovaValue* _tmp1_ = NULL;
      ValaDovaValue* _result_;
      gboolean _tmp2_;
      g_return_val_if_fail (self != NULL, NULL);
      g_return_val_if_fail (local != NULL, NULL);
      _tmp0_ = vala_variable_get_variable_type ((ValaVariable*) local);
      _tmp1_ = vala_dova_value_new (_tmp0_, NULL);
      _result_ = _tmp1_;
      _tmp2_ = vala_local_variable_get_is_result (local);
      if (_tmp2_) {
            ValaCCodeIdentifier* _tmp3_ = NULL;
            _tmp3_ = vala_ccode_identifier_new ("result");
            _vala_ccode_node_unref0 (_result_->cvalue);
            _result_->cvalue = (ValaCCodeExpression*) _tmp3_;
      } else {
            gboolean _tmp4_;
            _tmp4_ = vala_local_variable_get_captured (local);
            if (_tmp4_) {
                  ValaSymbol* _tmp5_ = NULL;
                  ValaBlock* _tmp6_;
                  ValaBlock* block;
                  gint _tmp7_;
                  gchar* _tmp8_ = NULL;
                  gchar* _tmp9_;
                  ValaCCodeExpression* _tmp10_ = NULL;
                  ValaCCodeExpression* _tmp11_;
                  const gchar* _tmp12_ = NULL;
                  gchar* _tmp13_ = NULL;
                  gchar* _tmp14_;
                  ValaCCodeMemberAccess* _tmp15_ = NULL;
                  _tmp5_ = vala_symbol_get_parent_symbol ((ValaSymbol*) local);
                  _tmp6_ = _vala_code_node_ref0 (VALA_BLOCK (_tmp5_));
                  block = _tmp6_;
                  _tmp7_ = vala_dova_base_module_get_block_id ((ValaDovaBaseModule*) self, block);
                  _tmp8_ = g_strdup_printf ("_data%d_", _tmp7_);
                  _tmp9_ = _tmp8_;
                  _tmp10_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp9_);
                  _tmp11_ = _tmp10_;
                  _tmp12_ = vala_symbol_get_name ((ValaSymbol*) local);
                  _tmp13_ = vala_dova_base_module_get_variable_cname ((ValaDovaBaseModule*) self, _tmp12_);
                  _tmp14_ = _tmp13_;
                  _tmp15_ = vala_ccode_member_access_new_pointer (_tmp11_, _tmp14_);
                  _vala_ccode_node_unref0 (_result_->cvalue);
                  _result_->cvalue = (ValaCCodeExpression*) _tmp15_;
                  _g_free0 (_tmp14_);
                  _vala_ccode_node_unref0 (_tmp11_);
                  _g_free0 (_tmp9_);
                  _vala_code_node_unref0 (block);
            } else {
                  const gchar* _tmp16_ = NULL;
                  ValaCCodeExpression* _tmp17_ = NULL;
                  _tmp16_ = vala_symbol_get_name ((ValaSymbol*) local);
                  _tmp17_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp16_);
                  _vala_ccode_node_unref0 (_result_->cvalue);
                  _result_->cvalue = _tmp17_;
            }
      }
      result = (ValaTargetValue*) _result_;
      return result;
}


ValaTargetValue* vala_dova_member_access_module_get_parameter_cvalue (ValaDovaMemberAccessModule* self, ValaParameter* p) {
      ValaTargetValue* result = NULL;
      ValaDataType* _tmp0_ = NULL;
      ValaDovaValue* _tmp1_ = NULL;
      ValaDovaValue* _result_;
      const gchar* _tmp2_ = NULL;
      g_return_val_if_fail (self != NULL, NULL);
      g_return_val_if_fail (p != NULL, NULL);
      _tmp0_ = vala_variable_get_variable_type ((ValaVariable*) p);
      _tmp1_ = vala_dova_value_new (_tmp0_, NULL);
      _result_ = _tmp1_;
      _tmp2_ = vala_symbol_get_name ((ValaSymbol*) p);
      if (g_strcmp0 (_tmp2_, "this") == 0) {
            gboolean _tmp3_ = FALSE;
            ValaMethod* _tmp4_ = NULL;
            _tmp4_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self);
            if (_tmp4_ != NULL) {
                  ValaMethod* _tmp5_ = NULL;
                  gboolean _tmp6_;
                  _tmp5_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self);
                  _tmp6_ = vala_method_get_coroutine (_tmp5_);
                  _tmp3_ = _tmp6_;
            } else {
                  _tmp3_ = FALSE;
            }
            if (_tmp3_) {
                  ValaCCodeIdentifier* _tmp7_ = NULL;
                  ValaCCodeIdentifier* _tmp8_;
                  ValaCCodeMemberAccess* _tmp9_ = NULL;
                  _tmp7_ = vala_ccode_identifier_new ("data");
                  _tmp8_ = _tmp7_;
                  _tmp9_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp8_, "this");
                  _vala_ccode_node_unref0 (_result_->cvalue);
                  _result_->cvalue = (ValaCCodeExpression*) _tmp9_;
                  _vala_ccode_node_unref0 (_tmp8_);
            } else {
                  ValaTypeSymbol* _tmp10_ = NULL;
                  ValaTypeSymbol* _tmp11_;
                  ValaStruct* _tmp12_;
                  ValaStruct* st;
                  gboolean _tmp13_ = FALSE;
                  gboolean _tmp14_ = FALSE;
                  gboolean _tmp15_ = FALSE;
                  gboolean _tmp16_ = FALSE;
                  _tmp10_ = vala_dova_base_module_get_current_type_symbol ((ValaDovaBaseModule*) self);
                  _tmp11_ = _tmp10_;
                  _tmp12_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp11_) ? ((ValaStruct*) _tmp11_) : NULL);
                  st = _tmp12_;
                  if (st != NULL) {
                        gboolean _tmp17_;
                        _tmp17_ = vala_struct_is_boolean_type (st);
                        _tmp16_ = !_tmp17_;
                  } else {
                        _tmp16_ = FALSE;
                  }
                  if (_tmp16_) {
                        gboolean _tmp18_;
                        _tmp18_ = vala_struct_is_integer_type (st);
                        _tmp15_ = !_tmp18_;
                  } else {
                        _tmp15_ = FALSE;
                  }
                  if (_tmp15_) {
                        gboolean _tmp19_;
                        _tmp19_ = vala_struct_is_floating_type (st);
                        _tmp14_ = !_tmp19_;
                  } else {
                        _tmp14_ = FALSE;
                  }
                  if (_tmp14_) {
                        gboolean _tmp20_ = FALSE;
                        gboolean _tmp21_;
                        _tmp21_ = vala_struct_is_simple_type (st);
                        if (!_tmp21_) {
                              _tmp20_ = TRUE;
                        } else {
                              ValaMethod* _tmp22_ = NULL;
                              _tmp22_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self);
                              _tmp20_ = VALA_IS_CREATION_METHOD (_tmp22_);
                        }
                        _tmp13_ = _tmp20_;
                  } else {
                        _tmp13_ = FALSE;
                  }
                  if (_tmp13_) {
                        ValaCCodeIdentifier* _tmp23_ = NULL;
                        _tmp23_ = vala_ccode_identifier_new ("(*this)");
                        _vala_ccode_node_unref0 (_result_->cvalue);
                        _result_->cvalue = (ValaCCodeExpression*) _tmp23_;
                  } else {
                        ValaCCodeIdentifier* _tmp24_ = NULL;
                        _tmp24_ = vala_ccode_identifier_new ("this");
                        _vala_ccode_node_unref0 (_result_->cvalue);
                        _result_->cvalue = (ValaCCodeExpression*) _tmp24_;
                  }
                  _vala_code_node_unref0 (st);
            }
      } else {
            gboolean _tmp25_;
            _tmp25_ = vala_parameter_get_captured (p);
            if (_tmp25_) {
                  ValaSymbol* _tmp26_ = NULL;
                  ValaSymbol* _tmp27_;
                  ValaBlock* _tmp28_;
                  ValaBlock* block;
                  gint _tmp32_;
                  gchar* _tmp33_ = NULL;
                  gchar* _tmp34_;
                  ValaCCodeExpression* _tmp35_ = NULL;
                  ValaCCodeExpression* _tmp36_;
                  const gchar* _tmp37_ = NULL;
                  gchar* _tmp38_ = NULL;
                  gchar* _tmp39_;
                  ValaCCodeMemberAccess* _tmp40_ = NULL;
                  _tmp26_ = vala_symbol_get_parent_symbol ((ValaSymbol*) p);
                  _tmp27_ = _tmp26_;
                  _tmp28_ = _vala_code_node_ref0 (VALA_IS_BLOCK (_tmp27_) ? ((ValaBlock*) _tmp27_) : NULL);
                  block = _tmp28_;
                  if (block == NULL) {
                        ValaSymbol* _tmp29_ = NULL;
                        ValaBlock* _tmp30_ = NULL;
                        ValaBlock* _tmp31_;
                        _tmp29_ = vala_symbol_get_parent_symbol ((ValaSymbol*) p);
                        _tmp30_ = vala_subroutine_get_body ((ValaSubroutine*) VALA_METHOD (_tmp29_));
                        _tmp31_ = _vala_code_node_ref0 (_tmp30_);
                        _vala_code_node_unref0 (block);
                        block = _tmp31_;
                  }
                  _tmp32_ = vala_dova_base_module_get_block_id ((ValaDovaBaseModule*) self, block);
                  _tmp33_ = g_strdup_printf ("_data%d_", _tmp32_);
                  _tmp34_ = _tmp33_;
                  _tmp35_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp34_);
                  _tmp36_ = _tmp35_;
                  _tmp37_ = vala_symbol_get_name ((ValaSymbol*) p);
                  _tmp38_ = vala_dova_base_module_get_variable_cname ((ValaDovaBaseModule*) self, _tmp37_);
                  _tmp39_ = _tmp38_;
                  _tmp40_ = vala_ccode_member_access_new_pointer (_tmp36_, _tmp39_);
                  _vala_ccode_node_unref0 (_result_->cvalue);
                  _result_->cvalue = (ValaCCodeExpression*) _tmp40_;
                  _g_free0 (_tmp39_);
                  _vala_ccode_node_unref0 (_tmp36_);
                  _g_free0 (_tmp34_);
                  _vala_code_node_unref0 (block);
            } else {
                  gboolean _tmp41_ = FALSE;
                  ValaMethod* _tmp42_ = NULL;
                  _tmp42_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self);
                  if (_tmp42_ != NULL) {
                        ValaMethod* _tmp43_ = NULL;
                        gboolean _tmp44_;
                        _tmp43_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self);
                        _tmp44_ = vala_method_get_coroutine (_tmp43_);
                        _tmp41_ = _tmp44_;
                  } else {
                        _tmp41_ = FALSE;
                  }
                  if (_tmp41_) {
                        const gchar* _tmp45_ = NULL;
                        ValaCCodeExpression* _tmp46_ = NULL;
                        _tmp45_ = vala_symbol_get_name ((ValaSymbol*) p);
                        _tmp46_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp45_);
                        _vala_ccode_node_unref0 (_result_->cvalue);
                        _result_->cvalue = _tmp46_;
                  } else {
                        ValaDataType* _tmp47_ = NULL;
                        ValaTypeSymbol* _tmp48_ = NULL;
                        ValaTypeSymbol* _tmp49_;
                        ValaStruct* _tmp50_;
                        ValaStruct* type_as_struct;
                        gboolean _tmp51_ = FALSE;
                        ValaParameterDirection _tmp52_;
                        _tmp47_ = vala_variable_get_variable_type ((ValaVariable*) p);
                        _tmp48_ = vala_data_type_get_data_type (_tmp47_);
                        _tmp49_ = _tmp48_;
                        _tmp50_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp49_) ? ((ValaStruct*) _tmp49_) : NULL);
                        type_as_struct = _tmp50_;
                        _tmp52_ = vala_parameter_get_direction (p);
                        if (_tmp52_ != VALA_PARAMETER_DIRECTION_IN) {
                              _tmp51_ = TRUE;
                        } else {
                              gboolean _tmp53_ = FALSE;
                              gboolean _tmp54_ = FALSE;
                              if (type_as_struct != NULL) {
                                    gboolean _tmp55_;
                                    _tmp55_ = vala_struct_is_simple_type (type_as_struct);
                                    _tmp54_ = !_tmp55_;
                              } else {
                                    _tmp54_ = FALSE;
                              }
                              if (_tmp54_) {
                                    ValaDataType* _tmp56_ = NULL;
                                    gboolean _tmp57_;
                                    _tmp56_ = vala_variable_get_variable_type ((ValaVariable*) p);
                                    _tmp57_ = vala_data_type_get_nullable (_tmp56_);
                                    _tmp53_ = !_tmp57_;
                              } else {
                                    _tmp53_ = FALSE;
                              }
                              _tmp51_ = _tmp53_;
                        }
                        if (_tmp51_) {
                              ValaDataType* _tmp58_ = NULL;
                              _tmp58_ = vala_variable_get_variable_type ((ValaVariable*) p);
                              if (VALA_IS_GENERIC_TYPE (_tmp58_)) {
                                    const gchar* _tmp59_ = NULL;
                                    ValaCCodeExpression* _tmp60_ = NULL;
                                    _tmp59_ = vala_symbol_get_name ((ValaSymbol*) p);
                                    _tmp60_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp59_);
                                    _vala_ccode_node_unref0 (_result_->cvalue);
                                    _result_->cvalue = _tmp60_;
                              } else {
                                    const gchar* _tmp61_ = NULL;
                                    gchar* _tmp62_ = NULL;
                                    gchar* _tmp63_;
                                    gchar* _tmp64_ = NULL;
                                    gchar* _tmp65_;
                                    ValaCCodeIdentifier* _tmp66_ = NULL;
                                    _tmp61_ = vala_symbol_get_name ((ValaSymbol*) p);
                                    _tmp62_ = vala_dova_base_module_get_variable_cname ((ValaDovaBaseModule*) self, _tmp61_);
                                    _tmp63_ = _tmp62_;
                                    _tmp64_ = g_strdup_printf ("(*%s)", _tmp63_);
                                    _tmp65_ = _tmp64_;
                                    _tmp66_ = vala_ccode_identifier_new (_tmp65_);
                                    _vala_ccode_node_unref0 (_result_->cvalue);
                                    _result_->cvalue = (ValaCCodeExpression*) _tmp66_;
                                    _g_free0 (_tmp65_);
                                    _g_free0 (_tmp63_);
                              }
                        } else {
                              gboolean _tmp67_ = FALSE;
                              gboolean _tmp68_ = FALSE;
                              gboolean _tmp69_ = FALSE;
                              ValaPropertyAccessor* _tmp70_ = NULL;
                              _tmp70_ = vala_dova_base_module_get_current_property_accessor ((ValaDovaBaseModule*) self);
                              if (_tmp70_ != NULL) {
                                    ValaPropertyAccessor* _tmp71_ = NULL;
                                    gboolean _tmp72_;
                                    _tmp71_ = vala_dova_base_module_get_current_property_accessor ((ValaDovaBaseModule*) self);
                                    _tmp72_ = vala_property_accessor_get_writable (_tmp71_);
                                    _tmp69_ = _tmp72_;
                              } else {
                                    _tmp69_ = FALSE;
                              }
                              if (_tmp69_) {
                                    ValaPropertyAccessor* _tmp73_ = NULL;
                                    ValaParameter* _tmp74_ = NULL;
                                    _tmp73_ = vala_dova_base_module_get_current_property_accessor ((ValaDovaBaseModule*) self);
                                    _tmp74_ = vala_property_accessor_get_value_parameter (_tmp73_);
                                    _tmp68_ = _tmp74_ == p;
                              } else {
                                    _tmp68_ = FALSE;
                              }
                              if (_tmp68_) {
                                    ValaPropertyAccessor* _tmp75_ = NULL;
                                    ValaProperty* _tmp76_ = NULL;
                                    ValaDataType* _tmp77_ = NULL;
                                    gboolean _tmp78_;
                                    _tmp75_ = vala_dova_base_module_get_current_property_accessor ((ValaDovaBaseModule*) self);
                                    _tmp76_ = vala_property_accessor_get_prop (_tmp75_);
                                    _tmp77_ = vala_property_get_property_type (_tmp76_);
                                    _tmp78_ = vala_data_type_is_real_struct_type (_tmp77_);
                                    _tmp67_ = _tmp78_;
                              } else {
                                    _tmp67_ = FALSE;
                              }
                              if (_tmp67_) {
                                    ValaCCodeIdentifier* _tmp79_ = NULL;
                                    _tmp79_ = vala_ccode_identifier_new ("(*value)");
                                    _vala_ccode_node_unref0 (_result_->cvalue);
                                    _result_->cvalue = (ValaCCodeExpression*) _tmp79_;
                              } else {
                                    const gchar* _tmp80_ = NULL;
                                    ValaCCodeExpression* _tmp81_ = NULL;
                                    _tmp80_ = vala_symbol_get_name ((ValaSymbol*) p);
                                    _tmp81_ = vala_dova_base_module_get_variable_cexpression ((ValaDovaBaseModule*) self, _tmp80_);
                                    _vala_ccode_node_unref0 (_result_->cvalue);
                                    _result_->cvalue = _tmp81_;
                              }
                        }
                        _vala_code_node_unref0 (type_as_struct);
                  }
            }
      }
      result = (ValaTargetValue*) _result_;
      return result;
}


ValaTargetValue* vala_dova_member_access_module_get_field_cvalue (ValaDovaMemberAccessModule* self, ValaField* f, ValaTargetValue* instance) {
      ValaTargetValue* result = NULL;
      ValaDataType* _tmp0_ = NULL;
      ValaDovaValue* _tmp1_ = NULL;
      ValaDovaValue* _result_;
      ValaMemberBinding _tmp2_;
      g_return_val_if_fail (self != NULL, NULL);
      g_return_val_if_fail (f != NULL, NULL);
      _tmp0_ = vala_variable_get_variable_type ((ValaVariable*) f);
      _tmp1_ = vala_dova_value_new (_tmp0_, NULL);
      _result_ = _tmp1_;
      _tmp2_ = vala_field_get_binding (f);
      if (_tmp2_ == VALA_MEMBER_BINDING_INSTANCE) {
            ValaCCodeExpression* pub_inst;
            ValaSymbol* _tmp4_ = NULL;
            ValaDataType* _tmp5_ = NULL;
            ValaDataType* instance_target_type;
            ValaTypeSymbol* _tmp6_ = NULL;
            ValaTypeSymbol* _tmp7_;
            ValaClass* _tmp8_;
            ValaClass* cl;
            gboolean dova_priv;
            gboolean _tmp9_ = FALSE;
            ValaSymbolAccessibility _tmp10_;
            ValaCCodeExpression* inst = NULL;
            gboolean _tmp22_ = FALSE;
            ValaTypeSymbol* _tmp23_ = NULL;
            gboolean _tmp24_;
            pub_inst = NULL;
            if (instance != NULL) {
                  ValaCCodeExpression* _tmp3_ = NULL;
                  _tmp3_ = vala_dova_base_module_get_cvalue_ ((ValaDovaBaseModule*) self, instance);
                  _vala_ccode_node_unref0 (pub_inst);
                  pub_inst = _tmp3_;
            }
            _tmp4_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
            _tmp5_ = vala_dova_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp4_));
            instance_target_type = _tmp5_;
            _tmp6_ = vala_data_type_get_data_type (instance_target_type);
            _tmp7_ = _tmp6_;
            _tmp8_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp7_) ? ((ValaClass*) _tmp7_) : NULL);
            cl = _tmp8_;
            dova_priv = FALSE;
            _tmp10_ = vala_symbol_get_access ((ValaSymbol*) f);
            if (_tmp10_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
                  _tmp9_ = TRUE;
            } else {
                  ValaSymbolAccessibility _tmp11_;
                  _tmp11_ = vala_symbol_get_access ((ValaSymbol*) f);
                  _tmp9_ = _tmp11_ == VALA_SYMBOL_ACCESSIBILITY_INTERNAL;
            }
            if (_tmp9_) {
                  dova_priv = TRUE;
            }
            if (dova_priv) {
                  gchar* _tmp12_ = NULL;
                  gchar* _tmp13_;
                  gchar* _tmp14_ = NULL;
                  gchar* _tmp15_;
                  ValaCCodeIdentifier* _tmp16_ = NULL;
                  ValaCCodeIdentifier* _tmp17_;
                  ValaCCodeFunctionCall* _tmp18_ = NULL;
                  ValaCCodeFunctionCall* _tmp19_;
                  ValaCCodeFunctionCall* priv_call;
                  ValaCCodeExpression* _tmp20_;
                  _tmp12_ = vala_typesymbol_get_upper_case_cname ((ValaTypeSymbol*) cl, NULL);
                  _tmp13_ = _tmp12_;
                  _tmp14_ = g_strdup_printf ("%s_GET_PRIVATE", _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_);
                  priv_call = _tmp19_;
                  vala_ccode_function_call_add_argument (priv_call, pub_inst);
                  _tmp20_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) priv_call);
                  _vala_ccode_node_unref0 (inst);
                  inst = _tmp20_;
                  _vala_ccode_node_unref0 (priv_call);
            } else {
                  ValaCCodeExpression* _tmp21_;
                  _tmp21_ = _vala_ccode_node_ref0 (pub_inst);
                  _vala_ccode_node_unref0 (inst);
                  inst = _tmp21_;
            }
            _tmp23_ = vala_data_type_get_data_type (instance_target_type);
            _tmp24_ = vala_typesymbol_is_reference_type (_tmp23_);
            if (_tmp24_) {
                  _tmp22_ = TRUE;
            } else {
                  gboolean _tmp25_ = FALSE;
                  if (instance != NULL) {
                        ValaDataType* _tmp26_ = NULL;
                        _tmp26_ = vala_target_value_get_value_type (instance);
                        _tmp25_ = VALA_IS_POINTER_TYPE (_tmp26_);
                  } else {
                        _tmp25_ = FALSE;
                  }
                  _tmp22_ = _tmp25_;
            }
            if (_tmp22_) {
                  gchar* _tmp27_ = NULL;
                  gchar* _tmp28_;
                  ValaCCodeMemberAccess* _tmp29_ = NULL;
                  _tmp27_ = vala_field_get_cname (f);
                  _tmp28_ = _tmp27_;
                  _tmp29_ = vala_ccode_member_access_new_pointer (inst, _tmp28_);
                  _vala_ccode_node_unref0 (_result_->cvalue);
                  _result_->cvalue = (ValaCCodeExpression*) _tmp29_;
                  _g_free0 (_tmp28_);
            } else {
                  gchar* _tmp30_ = NULL;
                  gchar* _tmp31_;
                  ValaCCodeMemberAccess* _tmp32_ = NULL;
                  _tmp30_ = vala_field_get_cname (f);
                  _tmp31_ = _tmp30_;
                  _tmp32_ = vala_ccode_member_access_new (inst, _tmp31_, FALSE);
                  _vala_ccode_node_unref0 (_result_->cvalue);
                  _result_->cvalue = (ValaCCodeExpression*) _tmp32_;
                  _g_free0 (_tmp31_);
            }
            _vala_ccode_node_unref0 (inst);
            _vala_code_node_unref0 (cl);
            _vala_code_node_unref0 (instance_target_type);
            _vala_ccode_node_unref0 (pub_inst);
      } else {
            gchar* _tmp33_ = NULL;
            gchar* _tmp34_;
            ValaCCodeIdentifier* _tmp35_ = NULL;
            vala_dova_base_module_generate_field_declaration ((ValaDovaBaseModule*) self, f, ((ValaDovaBaseModule*) self)->cfile);
            _tmp33_ = vala_field_get_cname (f);
            _tmp34_ = _tmp33_;
            _tmp35_ = vala_ccode_identifier_new (_tmp34_);
            _vala_ccode_node_unref0 (_result_->cvalue);
            _result_->cvalue = (ValaCCodeExpression*) _tmp35_;
            _g_free0 (_tmp34_);
      }
      result = (ValaTargetValue*) _result_;
      return result;
}


static gpointer _vala_target_value_ref0 (gpointer self) {
      return self ? vala_target_value_ref (self) : NULL;
}


static ValaTargetValue* vala_dova_member_access_module_load_variable (ValaDovaMemberAccessModule* self, ValaVariable* variable, ValaTargetValue* value) {
      ValaTargetValue* result = NULL;
      ValaTargetValue* _tmp0_;
      g_return_val_if_fail (self != NULL, NULL);
      g_return_val_if_fail (variable != NULL, NULL);
      g_return_val_if_fail (value != NULL, NULL);
      _tmp0_ = _vala_target_value_ref0 (value);
      result = _tmp0_;
      return result;
}


static ValaTargetValue* vala_dova_member_access_module_real_load_local (ValaCodeGenerator* base, ValaLocalVariable* local) {
      ValaDovaMemberAccessModule * self;
      ValaTargetValue* result = NULL;
      ValaTargetValue* _tmp0_ = NULL;
      ValaTargetValue* _tmp1_;
      ValaTargetValue* _tmp2_ = NULL;
      ValaTargetValue* _tmp3_;
      self = (ValaDovaMemberAccessModule*) base;
      g_return_val_if_fail (local != NULL, NULL);
      _tmp0_ = vala_dova_member_access_module_get_local_cvalue (self, local);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_dova_member_access_module_load_variable (self, (ValaVariable*) local, _tmp1_);
      _tmp3_ = _tmp2_;
      _vala_target_value_unref0 (_tmp1_);
      result = _tmp3_;
      return result;
}


static ValaTargetValue* vala_dova_member_access_module_real_load_parameter (ValaCodeGenerator* base, ValaParameter* param) {
      ValaDovaMemberAccessModule * self;
      ValaTargetValue* result = NULL;
      ValaTargetValue* _tmp0_ = NULL;
      ValaTargetValue* _tmp1_;
      ValaTargetValue* _tmp2_ = NULL;
      ValaTargetValue* _tmp3_;
      self = (ValaDovaMemberAccessModule*) base;
      g_return_val_if_fail (param != NULL, NULL);
      _tmp0_ = vala_dova_member_access_module_get_parameter_cvalue (self, param);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_dova_member_access_module_load_variable (self, (ValaVariable*) param, _tmp1_);
      _tmp3_ = _tmp2_;
      _vala_target_value_unref0 (_tmp1_);
      result = _tmp3_;
      return result;
}


static ValaTargetValue* vala_dova_member_access_module_real_load_field (ValaCodeGenerator* base, ValaField* field, ValaTargetValue* instance) {
      ValaDovaMemberAccessModule * self;
      ValaTargetValue* result = NULL;
      ValaTargetValue* _tmp0_ = NULL;
      ValaTargetValue* _tmp1_;
      ValaTargetValue* _tmp2_ = NULL;
      ValaTargetValue* _tmp3_;
      self = (ValaDovaMemberAccessModule*) base;
      g_return_val_if_fail (field != NULL, NULL);
      _tmp0_ = vala_dova_member_access_module_get_field_cvalue (self, field, instance);
      _tmp1_ = _tmp0_;
      _tmp2_ = vala_dova_member_access_module_load_variable (self, (ValaVariable*) field, _tmp1_);
      _tmp3_ = _tmp2_;
      _vala_target_value_unref0 (_tmp1_);
      result = _tmp3_;
      return result;
}


ValaDovaMemberAccessModule* vala_dova_member_access_module_construct (GType object_type) {
      ValaDovaMemberAccessModule* self = NULL;
      self = (ValaDovaMemberAccessModule*) vala_dova_control_flow_module_construct (object_type);
      return self;
}


static void vala_dova_member_access_module_class_init (ValaDovaMemberAccessModuleClass * klass) {
      vala_dova_member_access_module_parent_class = g_type_class_peek_parent (klass);
      VALA_CODE_VISITOR_CLASS (klass)->visit_member_access = vala_dova_member_access_module_real_visit_member_access;
      VALA_CODE_GENERATOR_CLASS (klass)->load_local = vala_dova_member_access_module_real_load_local;
      VALA_CODE_GENERATOR_CLASS (klass)->load_parameter = vala_dova_member_access_module_real_load_parameter;
      VALA_CODE_GENERATOR_CLASS (klass)->load_field = vala_dova_member_access_module_real_load_field;
}


static void vala_dova_member_access_module_instance_init (ValaDovaMemberAccessModule * self) {
}


GType vala_dova_member_access_module_get_type (void) {
      static volatile gsize vala_dova_member_access_module_type_id__volatile = 0;
      if (g_once_init_enter (&vala_dova_member_access_module_type_id__volatile)) {
            static const GTypeInfo g_define_type_info = { sizeof (ValaDovaMemberAccessModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_dova_member_access_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaDovaMemberAccessModule), 0, (GInstanceInitFunc) vala_dova_member_access_module_instance_init, NULL };
            GType vala_dova_member_access_module_type_id;
            vala_dova_member_access_module_type_id = g_type_register_static (VALA_TYPE_DOVA_CONTROL_FLOW_MODULE, "ValaDovaMemberAccessModule", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
            g_once_init_leave (&vala_dova_member_access_module_type_id__volatile, vala_dova_member_access_module_type_id);
      }
      return vala_dova_member_access_module_type_id__volatile;
}




Generated by  Doxygen 1.6.0   Back to index