/* valadovaerrormodule.c generated by valac, the Vala compiler * generated from valadovaerrormodule.vala, do not modify */ /* valadovaerrormodule.vala * * Copyright (C) 2008-2010 Jürg Billeter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Author: * Jürg Billeter * Thijs Vermeir */ #include #include #include #include #include #include #include #define VALA_TYPE_DOVA_BASE_MODULE (vala_dova_base_module_get_type ()) #define VALA_DOVA_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModule)) #define VALA_DOVA_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModuleClass)) #define VALA_IS_DOVA_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_BASE_MODULE)) #define VALA_IS_DOVA_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_BASE_MODULE)) #define VALA_DOVA_BASE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModuleClass)) typedef struct _ValaDovaBaseModule ValaDovaBaseModule; typedef struct _ValaDovaBaseModuleClass ValaDovaBaseModuleClass; typedef struct _ValaDovaBaseModulePrivate ValaDovaBaseModulePrivate; #define VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT (vala_dova_base_module_emit_context_get_type ()) #define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContext)) #define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContextClass)) #define VALA_DOVA_BASE_MODULE_IS_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT)) #define VALA_DOVA_BASE_MODULE_IS_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT)) #define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContextClass)) typedef struct _ValaDovaBaseModuleEmitContext ValaDovaBaseModuleEmitContext; typedef struct _ValaDovaBaseModuleEmitContextClass ValaDovaBaseModuleEmitContextClass; #define VALA_TYPE_DOVA_STRUCT_MODULE (vala_dova_struct_module_get_type ()) #define VALA_DOVA_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModule)) #define VALA_DOVA_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModuleClass)) #define VALA_IS_DOVA_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_STRUCT_MODULE)) #define VALA_IS_DOVA_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_STRUCT_MODULE)) #define VALA_DOVA_STRUCT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModuleClass)) typedef struct _ValaDovaStructModule ValaDovaStructModule; typedef struct _ValaDovaStructModuleClass ValaDovaStructModuleClass; typedef struct _ValaDovaStructModulePrivate ValaDovaStructModulePrivate; #define VALA_TYPE_DOVA_METHOD_MODULE (vala_dova_method_module_get_type ()) #define VALA_DOVA_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModule)) #define VALA_DOVA_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModuleClass)) #define VALA_IS_DOVA_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_METHOD_MODULE)) #define VALA_IS_DOVA_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_METHOD_MODULE)) #define VALA_DOVA_METHOD_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModuleClass)) typedef struct _ValaDovaMethodModule ValaDovaMethodModule; typedef struct _ValaDovaMethodModuleClass ValaDovaMethodModuleClass; typedef struct _ValaDovaMethodModulePrivate ValaDovaMethodModulePrivate; #define VALA_TYPE_DOVA_CONTROL_FLOW_MODULE (vala_dova_control_flow_module_get_type ()) #define VALA_DOVA_CONTROL_FLOW_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE, ValaDovaControlFlowModule)) #define VALA_DOVA_CONTROL_FLOW_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE, ValaDovaControlFlowModuleClass)) #define VALA_IS_DOVA_CONTROL_FLOW_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE)) #define VALA_IS_DOVA_CONTROL_FLOW_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE)) #define VALA_DOVA_CONTROL_FLOW_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_CONTROL_FLOW_MODULE, ValaDovaControlFlowModuleClass)) typedef struct _ValaDovaControlFlowModule ValaDovaControlFlowModule; typedef struct _ValaDovaControlFlowModuleClass ValaDovaControlFlowModuleClass; typedef struct _ValaDovaControlFlowModulePrivate ValaDovaControlFlowModulePrivate; #define VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE (vala_dova_member_access_module_get_type ()) #define VALA_DOVA_MEMBER_ACCESS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE, ValaDovaMemberAccessModule)) #define VALA_DOVA_MEMBER_ACCESS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE, ValaDovaMemberAccessModuleClass)) #define VALA_IS_DOVA_MEMBER_ACCESS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE)) #define VALA_IS_DOVA_MEMBER_ACCESS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE)) #define VALA_DOVA_MEMBER_ACCESS_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_MEMBER_ACCESS_MODULE, ValaDovaMemberAccessModuleClass)) typedef struct _ValaDovaMemberAccessModule ValaDovaMemberAccessModule; typedef struct _ValaDovaMemberAccessModuleClass ValaDovaMemberAccessModuleClass; typedef struct _ValaDovaMemberAccessModulePrivate ValaDovaMemberAccessModulePrivate; #define VALA_TYPE_DOVA_ASSIGNMENT_MODULE (vala_dova_assignment_module_get_type ()) #define VALA_DOVA_ASSIGNMENT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_ASSIGNMENT_MODULE, ValaDovaAssignmentModule)) #define VALA_DOVA_ASSIGNMENT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_ASSIGNMENT_MODULE, ValaDovaAssignmentModuleClass)) #define VALA_IS_DOVA_ASSIGNMENT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_ASSIGNMENT_MODULE)) #define VALA_IS_DOVA_ASSIGNMENT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_ASSIGNMENT_MODULE)) #define VALA_DOVA_ASSIGNMENT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_ASSIGNMENT_MODULE, ValaDovaAssignmentModuleClass)) typedef struct _ValaDovaAssignmentModule ValaDovaAssignmentModule; typedef struct _ValaDovaAssignmentModuleClass ValaDovaAssignmentModuleClass; typedef struct _ValaDovaAssignmentModulePrivate ValaDovaAssignmentModulePrivate; #define VALA_TYPE_DOVA_METHOD_CALL_MODULE (vala_dova_method_call_module_get_type ()) #define VALA_DOVA_METHOD_CALL_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_METHOD_CALL_MODULE, ValaDovaMethodCallModule)) #define VALA_DOVA_METHOD_CALL_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_METHOD_CALL_MODULE, ValaDovaMethodCallModuleClass)) #define VALA_IS_DOVA_METHOD_CALL_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_METHOD_CALL_MODULE)) #define VALA_IS_DOVA_METHOD_CALL_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_METHOD_CALL_MODULE)) #define VALA_DOVA_METHOD_CALL_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_METHOD_CALL_MODULE, ValaDovaMethodCallModuleClass)) typedef struct _ValaDovaMethodCallModule ValaDovaMethodCallModule; typedef struct _ValaDovaMethodCallModuleClass ValaDovaMethodCallModuleClass; typedef struct _ValaDovaMethodCallModulePrivate ValaDovaMethodCallModulePrivate; #define VALA_TYPE_DOVA_ARRAY_MODULE (vala_dova_array_module_get_type ()) #define VALA_DOVA_ARRAY_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_ARRAY_MODULE, ValaDovaArrayModule)) #define VALA_DOVA_ARRAY_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_ARRAY_MODULE, ValaDovaArrayModuleClass)) #define VALA_IS_DOVA_ARRAY_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_ARRAY_MODULE)) #define VALA_IS_DOVA_ARRAY_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_ARRAY_MODULE)) #define VALA_DOVA_ARRAY_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_ARRAY_MODULE, ValaDovaArrayModuleClass)) typedef struct _ValaDovaArrayModule ValaDovaArrayModule; typedef struct _ValaDovaArrayModuleClass ValaDovaArrayModuleClass; typedef struct _ValaDovaArrayModulePrivate ValaDovaArrayModulePrivate; #define VALA_TYPE_DOVA_OBJECT_MODULE (vala_dova_object_module_get_type ()) #define VALA_DOVA_OBJECT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_OBJECT_MODULE, ValaDovaObjectModule)) #define VALA_DOVA_OBJECT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_OBJECT_MODULE, ValaDovaObjectModuleClass)) #define VALA_IS_DOVA_OBJECT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_OBJECT_MODULE)) #define VALA_IS_DOVA_OBJECT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_OBJECT_MODULE)) #define VALA_DOVA_OBJECT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_OBJECT_MODULE, ValaDovaObjectModuleClass)) typedef struct _ValaDovaObjectModule ValaDovaObjectModule; typedef struct _ValaDovaObjectModuleClass ValaDovaObjectModuleClass; typedef struct _ValaDovaObjectModulePrivate ValaDovaObjectModulePrivate; #define VALA_TYPE_DOVA_VALUE_MODULE (vala_dova_value_module_get_type ()) #define VALA_DOVA_VALUE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_VALUE_MODULE, ValaDovaValueModule)) #define VALA_DOVA_VALUE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_VALUE_MODULE, ValaDovaValueModuleClass)) #define VALA_IS_DOVA_VALUE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_VALUE_MODULE)) #define VALA_IS_DOVA_VALUE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_VALUE_MODULE)) #define VALA_DOVA_VALUE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_VALUE_MODULE, ValaDovaValueModuleClass)) typedef struct _ValaDovaValueModule ValaDovaValueModule; typedef struct _ValaDovaValueModuleClass ValaDovaValueModuleClass; typedef struct _ValaDovaValueModulePrivate ValaDovaValueModulePrivate; #define VALA_TYPE_DOVA_DELEGATE_MODULE (vala_dova_delegate_module_get_type ()) #define VALA_DOVA_DELEGATE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_DELEGATE_MODULE, ValaDovaDelegateModule)) #define VALA_DOVA_DELEGATE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_DELEGATE_MODULE, ValaDovaDelegateModuleClass)) #define VALA_IS_DOVA_DELEGATE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_DELEGATE_MODULE)) #define VALA_IS_DOVA_DELEGATE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_DELEGATE_MODULE)) #define VALA_DOVA_DELEGATE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_DELEGATE_MODULE, ValaDovaDelegateModuleClass)) typedef struct _ValaDovaDelegateModule ValaDovaDelegateModule; typedef struct _ValaDovaDelegateModuleClass ValaDovaDelegateModuleClass; typedef struct _ValaDovaDelegateModulePrivate ValaDovaDelegateModulePrivate; #define VALA_TYPE_DOVA_ERROR_MODULE (vala_dova_error_module_get_type ()) #define VALA_DOVA_ERROR_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_ERROR_MODULE, ValaDovaErrorModule)) #define VALA_DOVA_ERROR_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_ERROR_MODULE, ValaDovaErrorModuleClass)) #define VALA_IS_DOVA_ERROR_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_ERROR_MODULE)) #define VALA_IS_DOVA_ERROR_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_ERROR_MODULE)) #define VALA_DOVA_ERROR_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_ERROR_MODULE, ValaDovaErrorModuleClass)) typedef struct _ValaDovaErrorModule ValaDovaErrorModule; typedef struct _ValaDovaErrorModuleClass ValaDovaErrorModuleClass; typedef struct _ValaDovaErrorModulePrivate ValaDovaErrorModulePrivate; #define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL))) #define _g_free0(var) (var = (g_free (var), NULL)) #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL))) #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL))) 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; 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 _ValaDovaAssignmentModule { ValaDovaMemberAccessModule parent_instance; ValaDovaAssignmentModulePrivate * priv; }; struct _ValaDovaAssignmentModuleClass { ValaDovaMemberAccessModuleClass parent_class; void (*store_variable) (ValaDovaAssignmentModule* self, ValaVariable* variable, ValaTargetValue* lvalue, ValaTargetValue* value, gboolean initializer); }; struct _ValaDovaMethodCallModule { ValaDovaAssignmentModule parent_instance; ValaDovaMethodCallModulePrivate * priv; }; struct _ValaDovaMethodCallModuleClass { ValaDovaAssignmentModuleClass parent_class; }; struct _ValaDovaArrayModule { ValaDovaMethodCallModule parent_instance; ValaDovaArrayModulePrivate * priv; }; struct _ValaDovaArrayModuleClass { ValaDovaMethodCallModuleClass parent_class; }; struct _ValaDovaObjectModule { ValaDovaArrayModule parent_instance; ValaDovaObjectModulePrivate * priv; }; struct _ValaDovaObjectModuleClass { ValaDovaArrayModuleClass parent_class; }; struct _ValaDovaValueModule { ValaDovaObjectModule parent_instance; ValaDovaValueModulePrivate * priv; }; struct _ValaDovaValueModuleClass { ValaDovaObjectModuleClass parent_class; }; struct _ValaDovaDelegateModule { ValaDovaValueModule parent_instance; ValaDovaDelegateModulePrivate * priv; }; struct _ValaDovaDelegateModuleClass { ValaDovaValueModuleClass parent_class; }; struct _ValaDovaErrorModule { ValaDovaDelegateModule parent_instance; ValaDovaErrorModulePrivate * priv; }; struct _ValaDovaErrorModuleClass { ValaDovaDelegateModuleClass parent_class; }; struct _ValaDovaErrorModulePrivate { gint current_try_id; gint next_try_id; gboolean is_in_catch; }; static gpointer vala_dova_error_module_parent_class = NULL; GType vala_dova_base_module_get_type (void) G_GNUC_CONST; gpointer vala_dova_base_module_emit_context_ref (gpointer instance); void vala_dova_base_module_emit_context_unref (gpointer instance); GParamSpec* vala_dova_base_module_param_spec_emit_context (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); void vala_dova_base_module_value_set_emit_context (GValue* value, gpointer v_object); void vala_dova_base_module_value_take_emit_context (GValue* value, gpointer v_object); gpointer vala_dova_base_module_value_get_emit_context (const GValue* value); GType vala_dova_base_module_emit_context_get_type (void) G_GNUC_CONST; GType vala_dova_struct_module_get_type (void) G_GNUC_CONST; GType vala_dova_method_module_get_type (void) G_GNUC_CONST; GType vala_dova_control_flow_module_get_type (void) G_GNUC_CONST; GType vala_dova_member_access_module_get_type (void) G_GNUC_CONST; GType vala_dova_assignment_module_get_type (void) G_GNUC_CONST; GType vala_dova_method_call_module_get_type (void) G_GNUC_CONST; GType vala_dova_array_module_get_type (void) G_GNUC_CONST; GType vala_dova_object_module_get_type (void) G_GNUC_CONST; GType vala_dova_value_module_get_type (void) G_GNUC_CONST; GType vala_dova_delegate_module_get_type (void) G_GNUC_CONST; GType vala_dova_error_module_get_type (void) G_GNUC_CONST; #define VALA_DOVA_ERROR_MODULE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_DOVA_ERROR_MODULE, ValaDovaErrorModulePrivate)) enum { VALA_DOVA_ERROR_MODULE_DUMMY_PROPERTY }; static void vala_dova_error_module_real_visit_throw_statement (ValaCodeVisitor* base, ValaThrowStatement* stmt); ValaCCodeFunction* vala_dova_base_module_get_ccode (ValaDovaBaseModule* self); ValaCCodeExpression* vala_dova_base_module_get_cvalue (ValaDovaBaseModule* self, ValaExpression* expr); void vala_dova_base_module_add_simple_check (ValaDovaBaseModule* self, ValaCodeNode* node, gboolean always_fails); void vala_dova_error_module_return_with_exception (ValaDovaErrorModule* self); void vala_dova_base_module_append_local_free (ValaDovaBaseModule* self, ValaSymbol* sym, gboolean stop_at_loop, ValaCodeNode* stop_at); ValaSymbol* vala_dova_base_module_get_current_symbol (ValaDovaBaseModule* self); ValaMethod* vala_dova_base_module_get_current_method (ValaDovaBaseModule* self); gchar* vala_dova_base_module_get_ccode_unref_function (ValaDovaBaseModule* self, ValaObjectTypeSymbol* node); ValaDataType* vala_dova_base_module_get_current_return_type (ValaDovaBaseModule* self); ValaCCodeExpression* vala_dova_base_module_default_value_for_type (ValaDovaBaseModule* self, ValaDataType* type, gboolean initializer_expression); static void vala_dova_error_module_uncaught_error_statement (ValaDovaErrorModule* self); static gboolean vala_dova_error_module_in_finally_block (ValaDovaErrorModule* self, ValaCodeNode* node); static void vala_dova_error_module_real_add_simple_check (ValaDovaBaseModule* base, ValaCodeNode* node, gboolean always_fails); ValaTryStatement* vala_dova_base_module_get_current_try (ValaDovaBaseModule* self); gchar* vala_dova_base_module_get_ccode_lower_case_name (ValaDovaBaseModule* self, ValaCodeNode* node, const gchar* infix); static void vala_dova_error_module_real_visit_try_statement (ValaCodeVisitor* base, ValaTryStatement* stmt); void vala_dova_base_module_set_current_try (ValaDovaBaseModule* self, ValaTryStatement* value); static void vala_dova_error_module_real_visit_catch_clause (ValaCodeVisitor* base, ValaCatchClause* clause); void vala_dova_base_module_generate_type_declaration (ValaDovaBaseModule* self, ValaDataType* type, ValaCCodeFile* decl_space); gchar* vala_dova_base_module_get_variable_cname (ValaDovaBaseModule* self, const gchar* name); gchar* vala_dova_base_module_get_ccode_name (ValaDovaBaseModule* self, ValaCodeNode* node); static void vala_dova_error_module_real_append_local_free (ValaDovaBaseModule* base, ValaSymbol* sym, gboolean stop_at_loop, ValaCodeNode* stop_at); ValaDovaErrorModule* vala_dova_error_module_new (void); ValaDovaErrorModule* vala_dova_error_module_construct (GType object_type); ValaDovaDelegateModule* vala_dova_delegate_module_new (void); ValaDovaDelegateModule* vala_dova_delegate_module_construct (GType object_type); static void vala_dova_error_module_finalize (ValaCodeVisitor* obj); static void vala_dova_error_module_real_visit_throw_statement (ValaCodeVisitor* base, ValaThrowStatement* stmt) { ValaDovaErrorModule * self; ValaCCodeFunction* _tmp0_; ValaCCodeFunction* _tmp1_; ValaCCodeIdentifier* _tmp2_; ValaCCodeIdentifier* _tmp3_; ValaThrowStatement* _tmp4_; ValaExpression* _tmp5_; ValaExpression* _tmp6_; ValaCCodeExpression* _tmp7_ = NULL; ValaCCodeExpression* _tmp8_; ValaThrowStatement* _tmp9_; self = (ValaDovaErrorModule*) base; g_return_if_fail (stmt != NULL); _tmp0_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp1_ = _tmp0_; _tmp2_ = vala_ccode_identifier_new ("dova_error"); _tmp3_ = _tmp2_; _tmp4_ = stmt; _tmp5_ = vala_throw_statement_get_error_expression (_tmp4_); _tmp6_ = _tmp5_; _tmp7_ = vala_dova_base_module_get_cvalue ((ValaDovaBaseModule*) self, _tmp6_); _tmp8_ = _tmp7_; vala_ccode_function_add_assignment (_tmp1_, (ValaCCodeExpression*) _tmp3_, _tmp8_); _vala_ccode_node_unref0 (_tmp8_); _vala_ccode_node_unref0 (_tmp3_); _tmp9_ = stmt; vala_dova_base_module_add_simple_check ((ValaDovaBaseModule*) self, (ValaCodeNode*) _tmp9_, TRUE); } static gpointer _vala_code_node_ref0 (gpointer self) { return self ? vala_code_node_ref (self) : NULL; } void vala_dova_error_module_return_with_exception (ValaDovaErrorModule* self) { ValaSymbol* _tmp0_; ValaSymbol* _tmp1_; gboolean _tmp2_ = FALSE; ValaMethod* _tmp3_; ValaMethod* _tmp4_; gboolean _tmp9_; g_return_if_fail (self != NULL); _tmp0_ = vala_dova_base_module_get_current_symbol ((ValaDovaBaseModule*) self); _tmp1_ = _tmp0_; vala_dova_base_module_append_local_free ((ValaDovaBaseModule*) self, _tmp1_, FALSE, NULL); _tmp3_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self); _tmp4_ = _tmp3_; if (VALA_IS_CREATION_METHOD (_tmp4_)) { ValaMethod* _tmp5_; ValaMethod* _tmp6_; ValaSymbol* _tmp7_; ValaSymbol* _tmp8_; _tmp5_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self); _tmp6_ = _tmp5_; _tmp7_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp6_); _tmp8_ = _tmp7_; _tmp2_ = VALA_IS_CLASS (_tmp8_); } else { _tmp2_ = FALSE; } _tmp9_ = _tmp2_; if (_tmp9_) { ValaMethod* _tmp10_; ValaMethod* _tmp11_; ValaSymbol* _tmp12_; ValaSymbol* _tmp13_; ValaClass* _tmp14_; ValaClass* cl; ValaClass* _tmp15_; gchar* _tmp16_ = NULL; gchar* _tmp17_; ValaCCodeIdentifier* _tmp18_; ValaCCodeIdentifier* _tmp19_; ValaCCodeFunctionCall* _tmp20_; ValaCCodeFunctionCall* _tmp21_; ValaCCodeFunctionCall* unref_call; ValaCCodeFunctionCall* _tmp22_; ValaCCodeIdentifier* _tmp23_; ValaCCodeIdentifier* _tmp24_; ValaCCodeFunction* _tmp25_; ValaCCodeFunction* _tmp26_; ValaCCodeFunctionCall* _tmp27_; ValaCCodeFunction* _tmp28_; ValaCCodeFunction* _tmp29_; _tmp10_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self); _tmp11_ = _tmp10_; _tmp12_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp11_); _tmp13_ = _tmp12_; _tmp14_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp13_) ? ((ValaClass*) _tmp13_) : NULL); cl = _tmp14_; _tmp15_ = cl; _tmp16_ = vala_dova_base_module_get_ccode_unref_function ((ValaDovaBaseModule*) self, (ValaObjectTypeSymbol*) _tmp15_); _tmp17_ = _tmp16_; _tmp18_ = vala_ccode_identifier_new (_tmp17_); _tmp19_ = _tmp18_; _tmp20_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp19_); _tmp21_ = _tmp20_; _vala_ccode_node_unref0 (_tmp19_); _g_free0 (_tmp17_); unref_call = _tmp21_; _tmp22_ = unref_call; _tmp23_ = vala_ccode_identifier_new ("this"); _tmp24_ = _tmp23_; vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp24_); _vala_ccode_node_unref0 (_tmp24_); _tmp25_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp26_ = _tmp25_; _tmp27_ = unref_call; vala_ccode_function_add_expression (_tmp26_, (ValaCCodeExpression*) _tmp27_); _tmp28_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp29_ = _tmp28_; vala_ccode_function_add_return (_tmp29_, NULL); _vala_ccode_node_unref0 (unref_call); _vala_code_node_unref0 (cl); } else { ValaDataType* _tmp30_; ValaDataType* _tmp31_; _tmp30_ = vala_dova_base_module_get_current_return_type ((ValaDovaBaseModule*) self); _tmp31_ = _tmp30_; if (VALA_IS_VOID_TYPE (_tmp31_)) { ValaCCodeFunction* _tmp32_; ValaCCodeFunction* _tmp33_; _tmp32_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp33_ = _tmp32_; vala_ccode_function_add_return (_tmp33_, NULL); } else { ValaCCodeFunction* _tmp34_; ValaCCodeFunction* _tmp35_; ValaDataType* _tmp36_; ValaDataType* _tmp37_; ValaCCodeExpression* _tmp38_ = NULL; ValaCCodeExpression* _tmp39_; _tmp34_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp35_ = _tmp34_; _tmp36_ = vala_dova_base_module_get_current_return_type ((ValaDovaBaseModule*) self); _tmp37_ = _tmp36_; _tmp38_ = vala_dova_base_module_default_value_for_type ((ValaDovaBaseModule*) self, _tmp37_, FALSE); _tmp39_ = _tmp38_; vala_ccode_function_add_return (_tmp35_, _tmp39_); _vala_ccode_node_unref0 (_tmp39_); } } } static void vala_dova_error_module_uncaught_error_statement (ValaDovaErrorModule* self) { ValaSymbol* _tmp0_; ValaSymbol* _tmp1_; ValaMethod* _tmp2_; ValaMethod* _tmp3_; g_return_if_fail (self != NULL); _tmp0_ = vala_dova_base_module_get_current_symbol ((ValaDovaBaseModule*) self); _tmp1_ = _tmp0_; vala_dova_base_module_append_local_free ((ValaDovaBaseModule*) self, _tmp1_, FALSE, NULL); _tmp2_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self); _tmp3_ = _tmp2_; if (VALA_IS_CREATION_METHOD (_tmp3_)) { ValaCCodeFunction* _tmp4_; ValaCCodeFunction* _tmp5_; _tmp4_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp5_ = _tmp4_; vala_ccode_function_add_return (_tmp5_, NULL); } else { ValaDataType* _tmp6_; ValaDataType* _tmp7_; _tmp6_ = vala_dova_base_module_get_current_return_type ((ValaDovaBaseModule*) self); _tmp7_ = _tmp6_; if (VALA_IS_VOID_TYPE (_tmp7_)) { ValaCCodeFunction* _tmp8_; ValaCCodeFunction* _tmp9_; _tmp8_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp9_ = _tmp8_; vala_ccode_function_add_return (_tmp9_, NULL); } else { ValaDataType* _tmp10_; ValaDataType* _tmp11_; _tmp10_ = vala_dova_base_module_get_current_return_type ((ValaDovaBaseModule*) self); _tmp11_ = _tmp10_; if (_tmp11_ != NULL) { ValaCCodeFunction* _tmp12_; ValaCCodeFunction* _tmp13_; ValaDataType* _tmp14_; ValaDataType* _tmp15_; ValaCCodeExpression* _tmp16_ = NULL; ValaCCodeExpression* _tmp17_; _tmp12_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp13_ = _tmp12_; _tmp14_ = vala_dova_base_module_get_current_return_type ((ValaDovaBaseModule*) self); _tmp15_ = _tmp14_; _tmp16_ = vala_dova_base_module_default_value_for_type ((ValaDovaBaseModule*) self, _tmp15_, FALSE); _tmp17_ = _tmp16_; vala_ccode_function_add_return (_tmp13_, _tmp17_); _vala_ccode_node_unref0 (_tmp17_); } } } } static gboolean vala_dova_error_module_in_finally_block (ValaDovaErrorModule* self, ValaCodeNode* node) { gboolean result = FALSE; ValaCodeNode* _tmp0_; ValaCodeNode* _tmp1_; ValaCodeNode* current_node; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (node != NULL, FALSE); _tmp0_ = node; _tmp1_ = _vala_code_node_ref0 (_tmp0_); current_node = _tmp1_; while (TRUE) { ValaCodeNode* _tmp2_; ValaCodeNode* _tmp3_; ValaCodeNode* _tmp4_; ValaCodeNode* _tmp5_; ValaTryStatement* _tmp6_; ValaTryStatement* try_stmt; gboolean _tmp7_ = FALSE; ValaTryStatement* _tmp8_; gboolean _tmp13_; ValaCodeNode* _tmp14_; ValaCodeNode* _tmp15_; ValaCodeNode* _tmp16_; ValaCodeNode* _tmp17_; _tmp2_ = current_node; if (!(_tmp2_ != NULL)) { break; } _tmp3_ = current_node; _tmp4_ = vala_code_node_get_parent_node (_tmp3_); _tmp5_ = _tmp4_; _tmp6_ = _vala_code_node_ref0 (VALA_IS_TRY_STATEMENT (_tmp5_) ? ((ValaTryStatement*) _tmp5_) : NULL); try_stmt = _tmp6_; _tmp8_ = try_stmt; if (_tmp8_ != NULL) { ValaTryStatement* _tmp9_; ValaBlock* _tmp10_; ValaBlock* _tmp11_; ValaCodeNode* _tmp12_; _tmp9_ = try_stmt; _tmp10_ = vala_try_statement_get_finally_body (_tmp9_); _tmp11_ = _tmp10_; _tmp12_ = current_node; _tmp7_ = VALA_CODE_NODE (_tmp11_) == _tmp12_; } else { _tmp7_ = FALSE; } _tmp13_ = _tmp7_; if (_tmp13_) { result = TRUE; _vala_code_node_unref0 (try_stmt); _vala_code_node_unref0 (current_node); return result; } _tmp14_ = current_node; _tmp15_ = vala_code_node_get_parent_node (_tmp14_); _tmp16_ = _tmp15_; _tmp17_ = _vala_code_node_ref0 (_tmp16_); _vala_code_node_unref0 (current_node); current_node = _tmp17_; _vala_code_node_unref0 (try_stmt); } result = FALSE; _vala_code_node_unref0 (current_node); return result; } static gpointer _vala_iterable_ref0 (gpointer self) { return self ? vala_iterable_ref (self) : NULL; } static gpointer _vala_ccode_node_ref0 (gpointer self) { return self ? vala_ccode_node_ref (self) : NULL; } static void vala_dova_error_module_real_add_simple_check (ValaDovaBaseModule* base, ValaCodeNode* node, gboolean always_fails) { ValaDovaErrorModule * self; gboolean _tmp0_; ValaTryStatement* _tmp10_; ValaTryStatement* _tmp11_; gboolean _tmp199_; self = (ValaDovaErrorModule*) base; g_return_if_fail (node != NULL); _tmp0_ = always_fails; if (_tmp0_) { } else { ValaCCodeIdentifier* _tmp1_; ValaCCodeIdentifier* _tmp2_; ValaCCodeConstant* _tmp3_; ValaCCodeConstant* _tmp4_; ValaCCodeBinaryExpression* _tmp5_; ValaCCodeBinaryExpression* _tmp6_; ValaCCodeBinaryExpression* ccond; ValaCCodeFunction* _tmp7_; ValaCCodeFunction* _tmp8_; ValaCCodeBinaryExpression* _tmp9_; _tmp1_ = vala_ccode_identifier_new ("dova_error"); _tmp2_ = _tmp1_; _tmp3_ = vala_ccode_constant_new ("NULL"); _tmp4_ = _tmp3_; _tmp5_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp2_, (ValaCCodeExpression*) _tmp4_); _tmp6_ = _tmp5_; _vala_ccode_node_unref0 (_tmp4_); _vala_ccode_node_unref0 (_tmp2_); ccond = _tmp6_; _tmp7_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp8_ = _tmp7_; _tmp9_ = ccond; vala_ccode_function_open_if (_tmp8_, (ValaCCodeExpression*) _tmp9_); _vala_ccode_node_unref0 (ccond); } _tmp10_ = vala_dova_base_module_get_current_try ((ValaDovaBaseModule*) self); _tmp11_ = _tmp10_; if (_tmp11_ != NULL) { ValaSymbol* _tmp12_; ValaSymbol* _tmp13_; ValaTryStatement* _tmp14_; ValaTryStatement* _tmp15_; GEqualFunc _tmp16_; ValaArrayList* _tmp17_; ValaArrayList* error_types; gboolean has_general_catch_clause; gboolean _tmp31_; gboolean _tmp129_; _tmp12_ = vala_dova_base_module_get_current_symbol ((ValaDovaBaseModule*) self); _tmp13_ = _tmp12_; _tmp14_ = vala_dova_base_module_get_current_try ((ValaDovaBaseModule*) self); _tmp15_ = _tmp14_; vala_dova_base_module_append_local_free ((ValaDovaBaseModule*) self, _tmp13_, FALSE, (ValaCodeNode*) _tmp15_); _tmp16_ = g_direct_equal; _tmp17_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, _tmp16_); error_types = _tmp17_; { ValaCodeNode* _tmp18_; ValaList* _tmp19_ = NULL; ValaList* _node_error_type_list; ValaList* _tmp20_; gint _tmp21_; gint _tmp22_; gint _node_error_type_size; gint _node_error_type_index; _tmp18_ = node; _tmp19_ = vala_code_node_get_error_types (_tmp18_); _node_error_type_list = _tmp19_; _tmp20_ = _node_error_type_list; _tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_); _tmp22_ = _tmp21_; _node_error_type_size = _tmp22_; _node_error_type_index = -1; while (TRUE) { gint _tmp23_; gint _tmp24_; gint _tmp25_; ValaList* _tmp26_; gint _tmp27_; gpointer _tmp28_ = NULL; ValaDataType* node_error_type; ValaArrayList* _tmp29_; ValaDataType* _tmp30_; _tmp23_ = _node_error_type_index; _node_error_type_index = _tmp23_ + 1; _tmp24_ = _node_error_type_index; _tmp25_ = _node_error_type_size; if (!(_tmp24_ < _tmp25_)) { break; } _tmp26_ = _node_error_type_list; _tmp27_ = _node_error_type_index; _tmp28_ = vala_list_get (_tmp26_, _tmp27_); node_error_type = (ValaDataType*) _tmp28_; _tmp29_ = error_types; _tmp30_ = node_error_type; vala_collection_add ((ValaCollection*) _tmp29_, _tmp30_); _vala_code_node_unref0 (node_error_type); } _vala_iterable_unref0 (_node_error_type_list); } has_general_catch_clause = FALSE; _tmp31_ = self->priv->is_in_catch; if (!_tmp31_) { GEqualFunc _tmp32_; ValaArrayList* _tmp33_; ValaArrayList* handled_error_types; _tmp32_ = g_direct_equal; _tmp33_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, _tmp32_); handled_error_types = _tmp33_; { ValaTryStatement* _tmp34_; ValaTryStatement* _tmp35_; ValaList* _tmp36_ = NULL; ValaList* _clause_list; ValaList* _tmp37_; gint _tmp38_; gint _tmp39_; gint _clause_size; gint _clause_index; _tmp34_ = vala_dova_base_module_get_current_try ((ValaDovaBaseModule*) self); _tmp35_ = _tmp34_; _tmp36_ = vala_try_statement_get_catch_clauses (_tmp35_); _clause_list = _tmp36_; _tmp37_ = _clause_list; _tmp38_ = vala_collection_get_size ((ValaCollection*) _tmp37_); _tmp39_ = _tmp38_; _clause_size = _tmp39_; _clause_index = -1; while (TRUE) { gint _tmp40_; gint _tmp41_; gint _tmp42_; ValaList* _tmp43_; gint _tmp44_; gpointer _tmp45_ = NULL; ValaCatchClause* clause; ValaArrayList* _tmp82_; ValaCatchClause* _tmp83_; ValaDataType* _tmp84_; ValaDataType* _tmp85_; ValaClass* _tmp86_; ValaObjectType* _tmp87_; ValaObjectType* _tmp88_; gboolean _tmp89_ = FALSE; gboolean _tmp90_; _tmp40_ = _clause_index; _clause_index = _tmp40_ + 1; _tmp41_ = _clause_index; _tmp42_ = _clause_size; if (!(_tmp41_ < _tmp42_)) { break; } _tmp43_ = _clause_list; _tmp44_ = _clause_index; _tmp45_ = vala_list_get (_tmp43_, _tmp44_); clause = (ValaCatchClause*) _tmp45_; { ValaArrayList* _tmp46_; ValaArrayList* _tmp47_; ValaArrayList* _node_error_type_list; ValaArrayList* _tmp48_; gint _tmp49_; gint _tmp50_; gint _node_error_type_size; gint _node_error_type_index; _tmp46_ = error_types; _tmp47_ = _vala_iterable_ref0 (_tmp46_); _node_error_type_list = _tmp47_; _tmp48_ = _node_error_type_list; _tmp49_ = vala_collection_get_size ((ValaCollection*) _tmp48_); _tmp50_ = _tmp49_; _node_error_type_size = _tmp50_; _node_error_type_index = -1; while (TRUE) { gint _tmp51_; gint _tmp52_; gint _tmp53_; ValaArrayList* _tmp54_; gint _tmp55_; gpointer _tmp56_ = NULL; ValaDataType* node_error_type; gboolean _tmp57_ = FALSE; ValaCatchClause* _tmp58_; ValaDataType* _tmp59_; ValaDataType* _tmp60_; gboolean _tmp66_; _tmp51_ = _node_error_type_index; _node_error_type_index = _tmp51_ + 1; _tmp52_ = _node_error_type_index; _tmp53_ = _node_error_type_size; if (!(_tmp52_ < _tmp53_)) { break; } _tmp54_ = _node_error_type_list; _tmp55_ = _node_error_type_index; _tmp56_ = vala_list_get ((ValaList*) _tmp54_, _tmp55_); node_error_type = (ValaDataType*) _tmp56_; _tmp58_ = clause; _tmp59_ = vala_catch_clause_get_error_type (_tmp58_); _tmp60_ = _tmp59_; if (_tmp60_ == NULL) { _tmp57_ = TRUE; } else { ValaDataType* _tmp61_; ValaCatchClause* _tmp62_; ValaDataType* _tmp63_; ValaDataType* _tmp64_; gboolean _tmp65_ = FALSE; _tmp61_ = node_error_type; _tmp62_ = clause; _tmp63_ = vala_catch_clause_get_error_type (_tmp62_); _tmp64_ = _tmp63_; _tmp65_ = vala_data_type_compatible (_tmp61_, _tmp64_); _tmp57_ = _tmp65_; } _tmp66_ = _tmp57_; if (_tmp66_) { ValaArrayList* _tmp67_; ValaDataType* _tmp68_; _tmp67_ = handled_error_types; _tmp68_ = node_error_type; vala_collection_add ((ValaCollection*) _tmp67_, _tmp68_); } _vala_code_node_unref0 (node_error_type); } _vala_iterable_unref0 (_node_error_type_list); } { ValaArrayList* _tmp69_; ValaArrayList* _tmp70_; ValaArrayList* _handled_error_type_list; ValaArrayList* _tmp71_; gint _tmp72_; gint _tmp73_; gint _handled_error_type_size; gint _handled_error_type_index; _tmp69_ = handled_error_types; _tmp70_ = _vala_iterable_ref0 (_tmp69_); _handled_error_type_list = _tmp70_; _tmp71_ = _handled_error_type_list; _tmp72_ = vala_collection_get_size ((ValaCollection*) _tmp71_); _tmp73_ = _tmp72_; _handled_error_type_size = _tmp73_; _handled_error_type_index = -1; while (TRUE) { gint _tmp74_; gint _tmp75_; gint _tmp76_; ValaArrayList* _tmp77_; gint _tmp78_; gpointer _tmp79_ = NULL; ValaDataType* handled_error_type; ValaArrayList* _tmp80_; ValaDataType* _tmp81_; _tmp74_ = _handled_error_type_index; _handled_error_type_index = _tmp74_ + 1; _tmp75_ = _handled_error_type_index; _tmp76_ = _handled_error_type_size; if (!(_tmp75_ < _tmp76_)) { break; } _tmp77_ = _handled_error_type_list; _tmp78_ = _handled_error_type_index; _tmp79_ = vala_list_get ((ValaList*) _tmp77_, _tmp78_); handled_error_type = (ValaDataType*) _tmp79_; _tmp80_ = error_types; _tmp81_ = handled_error_type; vala_collection_remove ((ValaCollection*) _tmp80_, _tmp81_); _vala_code_node_unref0 (handled_error_type); } _vala_iterable_unref0 (_handled_error_type_list); } _tmp82_ = handled_error_types; vala_collection_clear ((ValaCollection*) _tmp82_); _tmp83_ = clause; _tmp84_ = vala_catch_clause_get_error_type (_tmp83_); _tmp85_ = _tmp84_; _tmp86_ = ((ValaDovaBaseModule*) self)->error_class; _tmp87_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp86_); _tmp88_ = _tmp87_; _tmp89_ = vala_data_type_equals (_tmp85_, (ValaDataType*) _tmp88_); _tmp90_ = _tmp89_; _vala_code_node_unref0 (_tmp88_); if (_tmp90_) { ValaCCodeFunction* _tmp91_; ValaCCodeFunction* _tmp92_; ValaCatchClause* _tmp93_; const gchar* _tmp94_; const gchar* _tmp95_; has_general_catch_clause = TRUE; _tmp91_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp92_ = _tmp91_; _tmp93_ = clause; _tmp94_ = vala_catch_clause_get_clabel_name (_tmp93_); _tmp95_ = _tmp94_; vala_ccode_function_add_goto (_tmp92_, _tmp95_); _vala_code_node_unref0 (clause); break; } else { ValaCatchClause* _tmp96_; ValaDataType* _tmp97_; ValaDataType* _tmp98_; ValaObjectType* _tmp99_; ValaObjectType* catch_type; ValaCCodeIdentifier* _tmp100_; ValaCCodeIdentifier* _tmp101_; ValaCCodeFunctionCall* _tmp102_; ValaCCodeFunctionCall* _tmp103_; ValaCCodeFunctionCall* type_check; ValaCCodeFunctionCall* _tmp104_; ValaCCodeIdentifier* _tmp105_; ValaCCodeIdentifier* _tmp106_; ValaCCodeFunctionCall* _tmp107_; ValaObjectType* _tmp108_; ValaObjectTypeSymbol* _tmp109_; ValaObjectTypeSymbol* _tmp110_; gchar* _tmp111_ = NULL; gchar* _tmp112_; gchar* _tmp113_ = NULL; gchar* _tmp114_; ValaCCodeIdentifier* _tmp115_; ValaCCodeIdentifier* _tmp116_; ValaCCodeFunctionCall* _tmp117_; ValaCCodeFunctionCall* _tmp118_; ValaCCodeFunction* _tmp119_; ValaCCodeFunction* _tmp120_; ValaCCodeFunctionCall* _tmp121_; ValaCCodeFunction* _tmp122_; ValaCCodeFunction* _tmp123_; ValaCatchClause* _tmp124_; const gchar* _tmp125_; const gchar* _tmp126_; ValaCCodeFunction* _tmp127_; ValaCCodeFunction* _tmp128_; _tmp96_ = clause; _tmp97_ = vala_catch_clause_get_error_type (_tmp96_); _tmp98_ = _tmp97_; _tmp99_ = _vala_code_node_ref0 (VALA_IS_OBJECT_TYPE (_tmp98_) ? ((ValaObjectType*) _tmp98_) : NULL); catch_type = _tmp99_; _tmp100_ = vala_ccode_identifier_new ("any_is_a"); _tmp101_ = _tmp100_; _tmp102_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp101_); _tmp103_ = _tmp102_; _vala_ccode_node_unref0 (_tmp101_); type_check = _tmp103_; _tmp104_ = type_check; _tmp105_ = vala_ccode_identifier_new ("dova_error"); _tmp106_ = _tmp105_; vala_ccode_function_call_add_argument (_tmp104_, (ValaCCodeExpression*) _tmp106_); _vala_ccode_node_unref0 (_tmp106_); _tmp107_ = type_check; _tmp108_ = catch_type; _tmp109_ = vala_object_type_get_type_symbol (_tmp108_); _tmp110_ = _tmp109_; _tmp111_ = vala_dova_base_module_get_ccode_lower_case_name ((ValaDovaBaseModule*) self, (ValaCodeNode*) _tmp110_, NULL); _tmp112_ = _tmp111_; _tmp113_ = g_strdup_printf ("%s_type_get", _tmp112_); _tmp114_ = _tmp113_; _tmp115_ = vala_ccode_identifier_new (_tmp114_); _tmp116_ = _tmp115_; _tmp117_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp116_); _tmp118_ = _tmp117_; vala_ccode_function_call_add_argument (_tmp107_, (ValaCCodeExpression*) _tmp118_); _vala_ccode_node_unref0 (_tmp118_); _vala_ccode_node_unref0 (_tmp116_); _g_free0 (_tmp114_); _g_free0 (_tmp112_); _tmp119_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp120_ = _tmp119_; _tmp121_ = type_check; vala_ccode_function_open_if (_tmp120_, (ValaCCodeExpression*) _tmp121_); _tmp122_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp123_ = _tmp122_; _tmp124_ = clause; _tmp125_ = vala_catch_clause_get_clabel_name (_tmp124_); _tmp126_ = _tmp125_; vala_ccode_function_add_goto (_tmp123_, _tmp126_); _tmp127_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp128_ = _tmp127_; vala_ccode_function_close (_tmp128_); _vala_ccode_node_unref0 (type_check); _vala_code_node_unref0 (catch_type); } _vala_code_node_unref0 (clause); } _vala_iterable_unref0 (_clause_list); } _vala_iterable_unref0 (handled_error_types); } _tmp129_ = has_general_catch_clause; if (_tmp129_) { } else { ValaArrayList* _tmp130_; gint _tmp131_; gint _tmp132_; _tmp130_ = error_types; _tmp131_ = vala_collection_get_size ((ValaCollection*) _tmp130_); _tmp132_ = _tmp131_; if (_tmp132_ > 0) { ValaCCodeFunction* _tmp133_; ValaCCodeFunction* _tmp134_; gint _tmp135_; gchar* _tmp136_ = NULL; gchar* _tmp137_; _tmp133_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp134_ = _tmp133_; _tmp135_ = self->priv->current_try_id; _tmp136_ = g_strdup_printf ("__finally%d", _tmp135_); _tmp137_ = _tmp136_; vala_ccode_function_add_goto (_tmp134_, _tmp137_); _g_free0 (_tmp137_); } else { ValaCodeNode* _tmp138_; gboolean _tmp139_ = FALSE; _tmp138_ = node; _tmp139_ = vala_dova_error_module_in_finally_block (self, _tmp138_); if (_tmp139_) { } else { g_assert_not_reached (); } } } _vala_iterable_unref0 (error_types); } else { gboolean _tmp140_ = FALSE; ValaMethod* _tmp141_; ValaMethod* _tmp142_; gboolean _tmp149_; _tmp141_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self); _tmp142_ = _tmp141_; if (_tmp142_ != NULL) { ValaMethod* _tmp143_; ValaMethod* _tmp144_; ValaList* _tmp145_ = NULL; ValaList* _tmp146_; gint _tmp147_; gint _tmp148_; _tmp143_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self); _tmp144_ = _tmp143_; _tmp145_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp144_); _tmp146_ = _tmp145_; _tmp147_ = vala_collection_get_size ((ValaCollection*) _tmp146_); _tmp148_ = _tmp147_; _tmp140_ = _tmp148_ > 0; _vala_iterable_unref0 (_tmp146_); } else { _tmp140_ = FALSE; } _tmp149_ = _tmp140_; if (_tmp149_) { ValaCCodeExpression* ccond; ValaCCodeExpression* _tmp191_; ccond = NULL; { ValaMethod* _tmp150_; ValaMethod* _tmp151_; ValaList* _tmp152_ = NULL; ValaList* _error_type_list; ValaList* _tmp153_; gint _tmp154_; gint _tmp155_; gint _error_type_size; gint _error_type_index; _tmp150_ = vala_dova_base_module_get_current_method ((ValaDovaBaseModule*) self); _tmp151_ = _tmp150_; _tmp152_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp151_); _error_type_list = _tmp152_; _tmp153_ = _error_type_list; _tmp154_ = vala_collection_get_size ((ValaCollection*) _tmp153_); _tmp155_ = _tmp154_; _error_type_size = _tmp155_; _error_type_index = -1; while (TRUE) { gint _tmp156_; gint _tmp157_; gint _tmp158_; ValaList* _tmp159_; gint _tmp160_; gpointer _tmp161_ = NULL; ValaDataType* error_type; ValaDataType* _tmp162_; ValaClass* _tmp163_; ValaObjectType* _tmp164_; ValaObjectType* _tmp165_; gboolean _tmp166_ = FALSE; gboolean _tmp167_; ValaCCodeIdentifier* _tmp168_; ValaCCodeIdentifier* _tmp169_; ValaCCodeFunctionCall* _tmp170_; ValaCCodeFunctionCall* _tmp171_; ValaCCodeFunctionCall* type_check; ValaCCodeFunctionCall* _tmp172_; ValaCCodeIdentifier* _tmp173_; ValaCCodeIdentifier* _tmp174_; ValaCCodeFunctionCall* _tmp175_; ValaClass* _tmp176_; gchar* _tmp177_ = NULL; gchar* _tmp178_; gchar* _tmp179_ = NULL; gchar* _tmp180_; ValaCCodeIdentifier* _tmp181_; ValaCCodeIdentifier* _tmp182_; ValaCCodeFunctionCall* _tmp183_; ValaCCodeFunctionCall* _tmp184_; ValaCCodeExpression* _tmp185_; _tmp156_ = _error_type_index; _error_type_index = _tmp156_ + 1; _tmp157_ = _error_type_index; _tmp158_ = _error_type_size; if (!(_tmp157_ < _tmp158_)) { break; } _tmp159_ = _error_type_list; _tmp160_ = _error_type_index; _tmp161_ = vala_list_get (_tmp159_, _tmp160_); error_type = (ValaDataType*) _tmp161_; _tmp162_ = error_type; _tmp163_ = ((ValaDovaBaseModule*) self)->error_class; _tmp164_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp163_); _tmp165_ = _tmp164_; _tmp166_ = vala_data_type_equals (_tmp162_, (ValaDataType*) _tmp165_); _tmp167_ = _tmp166_; _vala_code_node_unref0 (_tmp165_); if (_tmp167_) { _vala_ccode_node_unref0 (ccond); ccond = NULL; _vala_code_node_unref0 (error_type); break; } _tmp168_ = vala_ccode_identifier_new ("any_is_a"); _tmp169_ = _tmp168_; _tmp170_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp169_); _tmp171_ = _tmp170_; _vala_ccode_node_unref0 (_tmp169_); type_check = _tmp171_; _tmp172_ = type_check; _tmp173_ = vala_ccode_identifier_new ("dova_error"); _tmp174_ = _tmp173_; vala_ccode_function_call_add_argument (_tmp172_, (ValaCCodeExpression*) _tmp174_); _vala_ccode_node_unref0 (_tmp174_); _tmp175_ = type_check; _tmp176_ = ((ValaDovaBaseModule*) self)->error_class; _tmp177_ = vala_dova_base_module_get_ccode_lower_case_name ((ValaDovaBaseModule*) self, (ValaCodeNode*) _tmp176_, NULL); _tmp178_ = _tmp177_; _tmp179_ = g_strdup_printf ("%s_type_get", _tmp178_); _tmp180_ = _tmp179_; _tmp181_ = vala_ccode_identifier_new (_tmp180_); _tmp182_ = _tmp181_; _tmp183_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp182_); _tmp184_ = _tmp183_; vala_ccode_function_call_add_argument (_tmp175_, (ValaCCodeExpression*) _tmp184_); _vala_ccode_node_unref0 (_tmp184_); _vala_ccode_node_unref0 (_tmp182_); _g_free0 (_tmp180_); _g_free0 (_tmp178_); _tmp185_ = ccond; if (_tmp185_ == NULL) { ValaCCodeFunctionCall* _tmp186_; ValaCCodeExpression* _tmp187_; _tmp186_ = type_check; _tmp187_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp186_); _vala_ccode_node_unref0 (ccond); ccond = _tmp187_; } else { ValaCCodeExpression* _tmp188_; ValaCCodeFunctionCall* _tmp189_; ValaCCodeBinaryExpression* _tmp190_; _tmp188_ = ccond; _tmp189_ = type_check; _tmp190_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, _tmp188_, (ValaCCodeExpression*) _tmp189_); _vala_ccode_node_unref0 (ccond); ccond = (ValaCCodeExpression*) _tmp190_; } _vala_ccode_node_unref0 (type_check); _vala_code_node_unref0 (error_type); } _vala_iterable_unref0 (_error_type_list); } _tmp191_ = ccond; if (_tmp191_ == NULL) { vala_dova_error_module_return_with_exception (self); } else { ValaCCodeFunction* _tmp192_; ValaCCodeFunction* _tmp193_; ValaCCodeExpression* _tmp194_; ValaCCodeFunction* _tmp195_; ValaCCodeFunction* _tmp196_; ValaCCodeFunction* _tmp197_; ValaCCodeFunction* _tmp198_; _tmp192_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp193_ = _tmp192_; _tmp194_ = ccond; vala_ccode_function_open_if (_tmp193_, _tmp194_); vala_dova_error_module_return_with_exception (self); _tmp195_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp196_ = _tmp195_; vala_ccode_function_add_else (_tmp196_); vala_dova_error_module_uncaught_error_statement (self); _tmp197_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp198_ = _tmp197_; vala_ccode_function_close (_tmp198_); } _vala_ccode_node_unref0 (ccond); } else { vala_dova_error_module_uncaught_error_statement (self); } } _tmp199_ = always_fails; if (!_tmp199_) { ValaCCodeFunction* _tmp200_; ValaCCodeFunction* _tmp201_; _tmp200_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp201_ = _tmp200_; vala_ccode_function_close (_tmp201_); } } static void vala_dova_error_module_real_visit_try_statement (ValaCodeVisitor* base, ValaTryStatement* stmt) { ValaDovaErrorModule * self; gint _tmp0_; gint this_try_id; ValaTryStatement* _tmp1_; ValaTryStatement* _tmp2_; ValaTryStatement* _tmp3_; ValaTryStatement* old_try; gint _tmp4_; gint old_try_id; gboolean _tmp5_; gboolean old_is_in_catch; ValaTryStatement* _tmp6_; gint _tmp7_; ValaTryStatement* _tmp28_; ValaBlock* _tmp29_; ValaBlock* _tmp30_; ValaTryStatement* _tmp48_; gint _tmp49_; gboolean _tmp50_; ValaCCodeFunction* _tmp51_; ValaCCodeFunction* _tmp52_; gint _tmp53_; gchar* _tmp54_ = NULL; gchar* _tmp55_; ValaTryStatement* _tmp56_; ValaBlock* _tmp57_; ValaBlock* _tmp58_; ValaTryStatement* _tmp62_; ValaTryStatement* _tmp63_; gboolean _tmp64_; gboolean _tmp65_; self = (ValaDovaErrorModule*) base; g_return_if_fail (stmt != NULL); _tmp0_ = self->priv->next_try_id; self->priv->next_try_id = _tmp0_ + 1; this_try_id = _tmp0_; _tmp1_ = vala_dova_base_module_get_current_try ((ValaDovaBaseModule*) self); _tmp2_ = _tmp1_; _tmp3_ = _vala_code_node_ref0 (_tmp2_); old_try = _tmp3_; _tmp4_ = self->priv->current_try_id; old_try_id = _tmp4_; _tmp5_ = self->priv->is_in_catch; old_is_in_catch = _tmp5_; _tmp6_ = stmt; vala_dova_base_module_set_current_try ((ValaDovaBaseModule*) self, _tmp6_); _tmp7_ = this_try_id; self->priv->current_try_id = _tmp7_; self->priv->is_in_catch = TRUE; { ValaTryStatement* _tmp8_; ValaList* _tmp9_ = NULL; ValaList* _clause_list; ValaList* _tmp10_; gint _tmp11_; gint _tmp12_; gint _clause_size; gint _clause_index; _tmp8_ = stmt; _tmp9_ = vala_try_statement_get_catch_clauses (_tmp8_); _clause_list = _tmp9_; _tmp10_ = _clause_list; _tmp11_ = vala_collection_get_size ((ValaCollection*) _tmp10_); _tmp12_ = _tmp11_; _clause_size = _tmp12_; _clause_index = -1; while (TRUE) { gint _tmp13_; gint _tmp14_; gint _tmp15_; ValaList* _tmp16_; gint _tmp17_; gpointer _tmp18_ = NULL; ValaCatchClause* clause; ValaCatchClause* _tmp19_; gint _tmp20_; ValaCatchClause* _tmp21_; ValaDataType* _tmp22_; ValaDataType* _tmp23_; gchar* _tmp24_ = NULL; gchar* _tmp25_; gchar* _tmp26_ = NULL; gchar* _tmp27_; _tmp13_ = _clause_index; _clause_index = _tmp13_ + 1; _tmp14_ = _clause_index; _tmp15_ = _clause_size; if (!(_tmp14_ < _tmp15_)) { break; } _tmp16_ = _clause_list; _tmp17_ = _clause_index; _tmp18_ = vala_list_get (_tmp16_, _tmp17_); clause = (ValaCatchClause*) _tmp18_; _tmp19_ = clause; _tmp20_ = this_try_id; _tmp21_ = clause; _tmp22_ = vala_catch_clause_get_error_type (_tmp21_); _tmp23_ = _tmp22_; _tmp24_ = vala_dova_base_module_get_ccode_lower_case_name ((ValaDovaBaseModule*) self, (ValaCodeNode*) _tmp23_, NULL); _tmp25_ = _tmp24_; _tmp26_ = g_strdup_printf ("__catch%d_%s", _tmp20_, _tmp25_); _tmp27_ = _tmp26_; vala_catch_clause_set_clabel_name (_tmp19_, _tmp27_); _g_free0 (_tmp27_); _g_free0 (_tmp25_); _vala_code_node_unref0 (clause); } _vala_iterable_unref0 (_clause_list); } self->priv->is_in_catch = FALSE; _tmp28_ = stmt; _tmp29_ = vala_try_statement_get_body (_tmp28_); _tmp30_ = _tmp29_; vala_code_node_emit ((ValaCodeNode*) _tmp30_, (ValaCodeGenerator*) self); self->priv->is_in_catch = TRUE; { ValaTryStatement* _tmp31_; ValaList* _tmp32_ = NULL; ValaList* _clause_list; ValaList* _tmp33_; gint _tmp34_; gint _tmp35_; gint _clause_size; gint _clause_index; _tmp31_ = stmt; _tmp32_ = vala_try_statement_get_catch_clauses (_tmp31_); _clause_list = _tmp32_; _tmp33_ = _clause_list; _tmp34_ = vala_collection_get_size ((ValaCollection*) _tmp33_); _tmp35_ = _tmp34_; _clause_size = _tmp35_; _clause_index = -1; while (TRUE) { gint _tmp36_; gint _tmp37_; gint _tmp38_; ValaList* _tmp39_; gint _tmp40_; gpointer _tmp41_ = NULL; ValaCatchClause* clause; ValaCCodeFunction* _tmp42_; ValaCCodeFunction* _tmp43_; gint _tmp44_; gchar* _tmp45_ = NULL; gchar* _tmp46_; ValaCatchClause* _tmp47_; _tmp36_ = _clause_index; _clause_index = _tmp36_ + 1; _tmp37_ = _clause_index; _tmp38_ = _clause_size; if (!(_tmp37_ < _tmp38_)) { break; } _tmp39_ = _clause_list; _tmp40_ = _clause_index; _tmp41_ = vala_list_get (_tmp39_, _tmp40_); clause = (ValaCatchClause*) _tmp41_; _tmp42_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp43_ = _tmp42_; _tmp44_ = this_try_id; _tmp45_ = g_strdup_printf ("__finally%d", _tmp44_); _tmp46_ = _tmp45_; vala_ccode_function_add_goto (_tmp43_, _tmp46_); _g_free0 (_tmp46_); _tmp47_ = clause; vala_code_node_emit ((ValaCodeNode*) _tmp47_, (ValaCodeGenerator*) self); _vala_code_node_unref0 (clause); } _vala_iterable_unref0 (_clause_list); } _tmp48_ = old_try; vala_dova_base_module_set_current_try ((ValaDovaBaseModule*) self, _tmp48_); _tmp49_ = old_try_id; self->priv->current_try_id = _tmp49_; _tmp50_ = old_is_in_catch; self->priv->is_in_catch = _tmp50_; _tmp51_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp52_ = _tmp51_; _tmp53_ = this_try_id; _tmp54_ = g_strdup_printf ("__finally%d", _tmp53_); _tmp55_ = _tmp54_; vala_ccode_function_add_label (_tmp52_, _tmp55_); _g_free0 (_tmp55_); _tmp56_ = stmt; _tmp57_ = vala_try_statement_get_finally_body (_tmp56_); _tmp58_ = _tmp57_; if (_tmp58_ != NULL) { ValaTryStatement* _tmp59_; ValaBlock* _tmp60_; ValaBlock* _tmp61_; _tmp59_ = stmt; _tmp60_ = vala_try_statement_get_finally_body (_tmp59_); _tmp61_ = _tmp60_; vala_code_node_emit ((ValaCodeNode*) _tmp61_, (ValaCodeGenerator*) self); } _tmp62_ = stmt; _tmp63_ = stmt; _tmp64_ = vala_try_statement_get_after_try_block_reachable (_tmp63_); _tmp65_ = _tmp64_; vala_dova_base_module_add_simple_check ((ValaDovaBaseModule*) self, (ValaCodeNode*) _tmp62_, !_tmp65_); _vala_code_node_unref0 (old_try); } static void vala_dova_error_module_real_visit_catch_clause (ValaCodeVisitor* base, ValaCatchClause* clause) { ValaDovaErrorModule * self; ValaCatchClause* _tmp0_; ValaDataType* _tmp1_; ValaDataType* _tmp2_; ValaCCodeFile* _tmp3_; ValaCCodeFunction* _tmp4_; ValaCCodeFunction* _tmp5_; ValaCatchClause* _tmp6_; const gchar* _tmp7_; const gchar* _tmp8_; ValaCCodeFunction* _tmp9_; ValaCCodeFunction* _tmp10_; gchar* variable_name = NULL; ValaCatchClause* _tmp11_; const gchar* _tmp12_; const gchar* _tmp13_; ValaCatchClause* _tmp19_; const gchar* _tmp20_; const gchar* _tmp21_; ValaCCodeFunction* _tmp50_; ValaCCodeFunction* _tmp51_; ValaCCodeIdentifier* _tmp52_; ValaCCodeIdentifier* _tmp53_; ValaCCodeConstant* _tmp54_; ValaCCodeConstant* _tmp55_; ValaCCodeAssignment* _tmp56_; ValaCCodeAssignment* _tmp57_; ValaCCodeExpressionStatement* _tmp58_; ValaCCodeExpressionStatement* _tmp59_; ValaCatchClause* _tmp60_; ValaBlock* _tmp61_; ValaBlock* _tmp62_; ValaCCodeFunction* _tmp63_; ValaCCodeFunction* _tmp64_; self = (ValaDovaErrorModule*) base; g_return_if_fail (clause != NULL); _tmp0_ = clause; _tmp1_ = vala_catch_clause_get_error_type (_tmp0_); _tmp2_ = _tmp1_; _tmp3_ = ((ValaDovaBaseModule*) self)->cfile; vala_dova_base_module_generate_type_declaration ((ValaDovaBaseModule*) self, _tmp2_, _tmp3_); _tmp4_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp5_ = _tmp4_; _tmp6_ = clause; _tmp7_ = vala_catch_clause_get_clabel_name (_tmp6_); _tmp8_ = _tmp7_; vala_ccode_function_add_label (_tmp5_, _tmp8_); _tmp9_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp10_ = _tmp9_; vala_ccode_function_open_block (_tmp10_); _tmp11_ = clause; _tmp12_ = vala_catch_clause_get_variable_name (_tmp11_); _tmp13_ = _tmp12_; if (_tmp13_ != NULL) { ValaCatchClause* _tmp14_; const gchar* _tmp15_; const gchar* _tmp16_; gchar* _tmp17_ = NULL; _tmp14_ = clause; _tmp15_ = vala_catch_clause_get_variable_name (_tmp14_); _tmp16_ = _tmp15_; _tmp17_ = vala_dova_base_module_get_variable_cname ((ValaDovaBaseModule*) self, _tmp16_); _g_free0 (variable_name); variable_name = _tmp17_; } else { gchar* _tmp18_; _tmp18_ = g_strdup ("__err"); _g_free0 (variable_name); variable_name = _tmp18_; } _tmp19_ = clause; _tmp20_ = vala_catch_clause_get_variable_name (_tmp19_); _tmp21_ = _tmp20_; if (_tmp21_ != NULL) { ValaCatchClause* _tmp22_; ValaDataType* _tmp23_; ValaDataType* _tmp24_; gchar* _tmp25_ = NULL; gchar* _tmp26_; ValaCCodeDeclaration* _tmp27_; ValaCCodeDeclaration* _tmp28_; ValaCCodeDeclaration* _cdecl_; ValaCCodeDeclaration* _tmp29_; const gchar* _tmp30_; ValaCCodeIdentifier* _tmp31_; ValaCCodeIdentifier* _tmp32_; ValaCCodeVariableDeclarator* _tmp33_; ValaCCodeVariableDeclarator* _tmp34_; ValaCCodeFunction* _tmp35_; ValaCCodeFunction* _tmp36_; ValaCCodeDeclaration* _tmp37_; _tmp22_ = clause; _tmp23_ = vala_catch_clause_get_error_type (_tmp22_); _tmp24_ = _tmp23_; _tmp25_ = vala_dova_base_module_get_ccode_name ((ValaDovaBaseModule*) self, (ValaCodeNode*) _tmp24_); _tmp26_ = _tmp25_; _tmp27_ = vala_ccode_declaration_new (_tmp26_); _tmp28_ = _tmp27_; _g_free0 (_tmp26_); _cdecl_ = _tmp28_; _tmp29_ = _cdecl_; _tmp30_ = variable_name; _tmp31_ = vala_ccode_identifier_new ("dova_error"); _tmp32_ = _tmp31_; _tmp33_ = vala_ccode_variable_declarator_new (_tmp30_, (ValaCCodeExpression*) _tmp32_, NULL); _tmp34_ = _tmp33_; vala_ccode_declaration_add_declarator (_tmp29_, (ValaCCodeDeclarator*) _tmp34_); _vala_ccode_node_unref0 (_tmp34_); _vala_ccode_node_unref0 (_tmp32_); _tmp35_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp36_ = _tmp35_; _tmp37_ = _cdecl_; vala_ccode_function_add_statement (_tmp36_, (ValaCCodeNode*) _tmp37_); _vala_ccode_node_unref0 (_cdecl_); } else { ValaCCodeIdentifier* _tmp38_; ValaCCodeIdentifier* _tmp39_; ValaCCodeFunctionCall* _tmp40_; ValaCCodeFunctionCall* _tmp41_; ValaCCodeFunctionCall* cclear; ValaCCodeFunctionCall* _tmp42_; ValaCCodeIdentifier* _tmp43_; ValaCCodeIdentifier* _tmp44_; ValaCCodeFunction* _tmp45_; ValaCCodeFunction* _tmp46_; ValaCCodeFunctionCall* _tmp47_; ValaCCodeExpressionStatement* _tmp48_; ValaCCodeExpressionStatement* _tmp49_; _tmp38_ = vala_ccode_identifier_new ("dova_object_unref"); _tmp39_ = _tmp38_; _tmp40_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp39_); _tmp41_ = _tmp40_; _vala_ccode_node_unref0 (_tmp39_); cclear = _tmp41_; _tmp42_ = cclear; _tmp43_ = vala_ccode_identifier_new ("dova_error"); _tmp44_ = _tmp43_; vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp44_); _vala_ccode_node_unref0 (_tmp44_); _tmp45_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp46_ = _tmp45_; _tmp47_ = cclear; _tmp48_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp47_); _tmp49_ = _tmp48_; vala_ccode_function_add_statement (_tmp46_, (ValaCCodeNode*) _tmp49_); _vala_ccode_node_unref0 (_tmp49_); _vala_ccode_node_unref0 (cclear); } _tmp50_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp51_ = _tmp50_; _tmp52_ = vala_ccode_identifier_new ("dova_error"); _tmp53_ = _tmp52_; _tmp54_ = vala_ccode_constant_new ("NULL"); _tmp55_ = _tmp54_; _tmp56_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp53_, (ValaCCodeExpression*) _tmp55_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE); _tmp57_ = _tmp56_; _tmp58_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) _tmp57_); _tmp59_ = _tmp58_; vala_ccode_function_add_statement (_tmp51_, (ValaCCodeNode*) _tmp59_); _vala_ccode_node_unref0 (_tmp59_); _vala_ccode_node_unref0 (_tmp57_); _vala_ccode_node_unref0 (_tmp55_); _vala_ccode_node_unref0 (_tmp53_); _tmp60_ = clause; _tmp61_ = vala_catch_clause_get_body (_tmp60_); _tmp62_ = _tmp61_; vala_code_node_emit ((ValaCodeNode*) _tmp62_, (ValaCodeGenerator*) self); _tmp63_ = vala_dova_base_module_get_ccode ((ValaDovaBaseModule*) self); _tmp64_ = _tmp63_; vala_ccode_function_close (_tmp64_); _g_free0 (variable_name); } static void vala_dova_error_module_real_append_local_free (ValaDovaBaseModule* base, ValaSymbol* sym, gboolean stop_at_loop, ValaCodeNode* stop_at) { ValaDovaErrorModule * self; ValaBlock* _tmp0_; ValaBlock* finally_block; ValaSymbol* _tmp1_; ValaCodeNode* _tmp2_; ValaCodeNode* _tmp3_; ValaBlock* _tmp21_; ValaSymbol* _tmp23_; gboolean _tmp24_; ValaCodeNode* _tmp25_; self = (ValaDovaErrorModule*) base; g_return_if_fail (sym != NULL); _tmp0_ = _vala_code_node_ref0 (VALA_BLOCK (NULL)); finally_block = _tmp0_; _tmp1_ = sym; _tmp2_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1_); _tmp3_ = _tmp2_; if (VALA_IS_TRY_STATEMENT (_tmp3_)) { ValaSymbol* _tmp4_; ValaCodeNode* _tmp5_; ValaCodeNode* _tmp6_; ValaBlock* _tmp7_; ValaBlock* _tmp8_; ValaBlock* _tmp9_; _tmp4_ = sym; _tmp5_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp4_); _tmp6_ = _tmp5_; _tmp7_ = vala_try_statement_get_finally_body (VALA_IS_TRY_STATEMENT (_tmp6_) ? ((ValaTryStatement*) _tmp6_) : NULL); _tmp8_ = _tmp7_; _tmp9_ = _vala_code_node_ref0 (_tmp8_); _vala_code_node_unref0 (finally_block); finally_block = _tmp9_; } else { ValaSymbol* _tmp10_; ValaCodeNode* _tmp11_; ValaCodeNode* _tmp12_; _tmp10_ = sym; _tmp11_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp10_); _tmp12_ = _tmp11_; if (VALA_IS_CATCH_CLAUSE (_tmp12_)) { ValaSymbol* _tmp13_; ValaCodeNode* _tmp14_; ValaCodeNode* _tmp15_; ValaCodeNode* _tmp16_; ValaCodeNode* _tmp17_; ValaBlock* _tmp18_; ValaBlock* _tmp19_; ValaBlock* _tmp20_; _tmp13_ = sym; _tmp14_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp13_); _tmp15_ = _tmp14_; _tmp16_ = vala_code_node_get_parent_node (_tmp15_); _tmp17_ = _tmp16_; _tmp18_ = vala_try_statement_get_finally_body (VALA_IS_TRY_STATEMENT (_tmp17_) ? ((ValaTryStatement*) _tmp17_) : NULL); _tmp19_ = _tmp18_; _tmp20_ = _vala_code_node_ref0 (_tmp19_); _vala_code_node_unref0 (finally_block); finally_block = _tmp20_; } } _tmp21_ = finally_block; if (_tmp21_ != NULL) { ValaBlock* _tmp22_; _tmp22_ = finally_block; vala_code_node_emit ((ValaCodeNode*) _tmp22_, (ValaCodeGenerator*) self); } _tmp23_ = sym; _tmp24_ = stop_at_loop; _tmp25_ = stop_at; VALA_DOVA_BASE_MODULE_CLASS (vala_dova_error_module_parent_class)->append_local_free ((ValaDovaBaseModule*) VALA_DOVA_DELEGATE_MODULE (self), _tmp23_, _tmp24_, _tmp25_); _vala_code_node_unref0 (finally_block); } ValaDovaErrorModule* vala_dova_error_module_construct (GType object_type) { ValaDovaErrorModule* self = NULL; self = (ValaDovaErrorModule*) vala_dova_delegate_module_construct (object_type); return self; } ValaDovaErrorModule* vala_dova_error_module_new (void) { return vala_dova_error_module_construct (VALA_TYPE_DOVA_ERROR_MODULE); } static void vala_dova_error_module_class_init (ValaDovaErrorModuleClass * klass) { vala_dova_error_module_parent_class = g_type_class_peek_parent (klass); VALA_CODE_VISITOR_CLASS (klass)->finalize = vala_dova_error_module_finalize; g_type_class_add_private (klass, sizeof (ValaDovaErrorModulePrivate)); VALA_CODE_VISITOR_CLASS (klass)->visit_throw_statement = vala_dova_error_module_real_visit_throw_statement; VALA_DOVA_BASE_MODULE_CLASS (klass)->add_simple_check = vala_dova_error_module_real_add_simple_check; VALA_CODE_VISITOR_CLASS (klass)->visit_try_statement = vala_dova_error_module_real_visit_try_statement; VALA_CODE_VISITOR_CLASS (klass)->visit_catch_clause = vala_dova_error_module_real_visit_catch_clause; VALA_DOVA_BASE_MODULE_CLASS (klass)->append_local_free = vala_dova_error_module_real_append_local_free; } static void vala_dova_error_module_instance_init (ValaDovaErrorModule * self) { self->priv = VALA_DOVA_ERROR_MODULE_GET_PRIVATE (self); self->priv->current_try_id = 0; self->priv->next_try_id = 0; self->priv->is_in_catch = FALSE; } static void vala_dova_error_module_finalize (ValaCodeVisitor* obj) { ValaDovaErrorModule * self; self = VALA_DOVA_ERROR_MODULE (obj); VALA_CODE_VISITOR_CLASS (vala_dova_error_module_parent_class)->finalize (obj); } GType vala_dova_error_module_get_type (void) { static volatile gsize vala_dova_error_module_type_id__volatile = 0; if (g_once_init_enter (&vala_dova_error_module_type_id__volatile)) { static const GTypeInfo g_define_type_info = { sizeof (ValaDovaErrorModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_dova_error_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaDovaErrorModule), 0, (GInstanceInitFunc) vala_dova_error_module_instance_init, NULL }; GType vala_dova_error_module_type_id; vala_dova_error_module_type_id = g_type_register_static (VALA_TYPE_DOVA_DELEGATE_MODULE, "ValaDovaErrorModule", &g_define_type_info, 0); g_once_init_leave (&vala_dova_error_module_type_id__volatile, vala_dova_error_module_type_id); } return vala_dova_error_module_type_id__volatile; }