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

/* valagerrormodule.vala
 *
 * Copyright (C) 2008-2009  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>
 *	Thijs Vermeir <thijsvermeir@gmail.com>
 */

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


#define VALA_TYPE_CCODE_MODULE (vala_ccode_module_get_type ())
#define VALA_CCODE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_MODULE, ValaCCodeModule))
#define VALA_CCODE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_MODULE, ValaCCodeModuleClass))
#define VALA_IS_CCODE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_MODULE))
#define VALA_IS_CCODE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_MODULE))
#define VALA_CCODE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_MODULE, ValaCCodeModuleClass))

typedef struct _ValaCCodeModule ValaCCodeModule;
typedef struct _ValaCCodeModuleClass ValaCCodeModuleClass;
typedef struct _ValaCCodeModulePrivate ValaCCodeModulePrivate;

#define VALA_TYPE_CCODE_BASE_MODULE (vala_ccode_base_module_get_type ())
#define VALA_CCODE_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModule))
#define VALA_CCODE_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModuleClass))
#define VALA_IS_CCODE_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_BASE_MODULE))
#define VALA_IS_CCODE_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_BASE_MODULE))
#define VALA_CCODE_BASE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModuleClass))

typedef struct _ValaCCodeBaseModule ValaCCodeBaseModule;
typedef struct _ValaCCodeBaseModuleClass ValaCCodeBaseModuleClass;
typedef struct _ValaCCodeBaseModulePrivate ValaCCodeBaseModulePrivate;

#define VALA_TYPE_CCODE_DECLARATION_SPACE (vala_ccode_declaration_space_get_type ())
#define VALA_CCODE_DECLARATION_SPACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_DECLARATION_SPACE, ValaCCodeDeclarationSpace))
#define VALA_CCODE_DECLARATION_SPACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_DECLARATION_SPACE, ValaCCodeDeclarationSpaceClass))
#define VALA_IS_CCODE_DECLARATION_SPACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_DECLARATION_SPACE))
#define VALA_IS_CCODE_DECLARATION_SPACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_DECLARATION_SPACE))
#define VALA_CCODE_DECLARATION_SPACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_DECLARATION_SPACE, ValaCCodeDeclarationSpaceClass))

typedef struct _ValaCCodeDeclarationSpace ValaCCodeDeclarationSpace;
typedef struct _ValaCCodeDeclarationSpaceClass ValaCCodeDeclarationSpaceClass;

#define VALA_TYPE_CCODE_STRUCT_MODULE (vala_ccode_struct_module_get_type ())
#define VALA_CCODE_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_STRUCT_MODULE, ValaCCodeStructModule))
#define VALA_CCODE_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_STRUCT_MODULE, ValaCCodeStructModuleClass))
#define VALA_IS_CCODE_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_STRUCT_MODULE))
#define VALA_IS_CCODE_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_STRUCT_MODULE))
#define VALA_CCODE_STRUCT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_STRUCT_MODULE, ValaCCodeStructModuleClass))

typedef struct _ValaCCodeStructModule ValaCCodeStructModule;
typedef struct _ValaCCodeStructModuleClass ValaCCodeStructModuleClass;
typedef struct _ValaCCodeStructModulePrivate ValaCCodeStructModulePrivate;

#define VALA_TYPE_CCODE_METHOD_MODULE (vala_ccode_method_module_get_type ())
#define VALA_CCODE_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModule))
#define VALA_CCODE_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModuleClass))
#define VALA_IS_CCODE_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_METHOD_MODULE))
#define VALA_IS_CCODE_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_METHOD_MODULE))
#define VALA_CCODE_METHOD_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_METHOD_MODULE, ValaCCodeMethodModuleClass))

typedef struct _ValaCCodeMethodModule ValaCCodeMethodModule;
typedef struct _ValaCCodeMethodModuleClass ValaCCodeMethodModuleClass;
typedef struct _ValaCCodeMethodModulePrivate ValaCCodeMethodModulePrivate;

#define VALA_TYPE_CCODE_CONTROL_FLOW_MODULE (vala_ccode_control_flow_module_get_type ())
#define VALA_CCODE_CONTROL_FLOW_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_CONTROL_FLOW_MODULE, ValaCCodeControlFlowModule))
#define VALA_CCODE_CONTROL_FLOW_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_CONTROL_FLOW_MODULE, ValaCCodeControlFlowModuleClass))
#define VALA_IS_CCODE_CONTROL_FLOW_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_CONTROL_FLOW_MODULE))
#define VALA_IS_CCODE_CONTROL_FLOW_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_CONTROL_FLOW_MODULE))
#define VALA_CCODE_CONTROL_FLOW_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_CONTROL_FLOW_MODULE, ValaCCodeControlFlowModuleClass))

typedef struct _ValaCCodeControlFlowModule ValaCCodeControlFlowModule;
typedef struct _ValaCCodeControlFlowModuleClass ValaCCodeControlFlowModuleClass;
typedef struct _ValaCCodeControlFlowModulePrivate ValaCCodeControlFlowModulePrivate;

#define VALA_TYPE_CCODE_MEMBER_ACCESS_MODULE (vala_ccode_member_access_module_get_type ())
#define VALA_CCODE_MEMBER_ACCESS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_MEMBER_ACCESS_MODULE, ValaCCodeMemberAccessModule))
#define VALA_CCODE_MEMBER_ACCESS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_MEMBER_ACCESS_MODULE, ValaCCodeMemberAccessModuleClass))
#define VALA_IS_CCODE_MEMBER_ACCESS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_MEMBER_ACCESS_MODULE))
#define VALA_IS_CCODE_MEMBER_ACCESS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_MEMBER_ACCESS_MODULE))
#define VALA_CCODE_MEMBER_ACCESS_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_MEMBER_ACCESS_MODULE, ValaCCodeMemberAccessModuleClass))

typedef struct _ValaCCodeMemberAccessModule ValaCCodeMemberAccessModule;
typedef struct _ValaCCodeMemberAccessModuleClass ValaCCodeMemberAccessModuleClass;
typedef struct _ValaCCodeMemberAccessModulePrivate ValaCCodeMemberAccessModulePrivate;

#define VALA_TYPE_CCODE_ASSIGNMENT_MODULE (vala_ccode_assignment_module_get_type ())
#define VALA_CCODE_ASSIGNMENT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_ASSIGNMENT_MODULE, ValaCCodeAssignmentModule))
#define VALA_CCODE_ASSIGNMENT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_ASSIGNMENT_MODULE, ValaCCodeAssignmentModuleClass))
#define VALA_IS_CCODE_ASSIGNMENT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_ASSIGNMENT_MODULE))
#define VALA_IS_CCODE_ASSIGNMENT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_ASSIGNMENT_MODULE))
#define VALA_CCODE_ASSIGNMENT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_ASSIGNMENT_MODULE, ValaCCodeAssignmentModuleClass))

typedef struct _ValaCCodeAssignmentModule ValaCCodeAssignmentModule;
typedef struct _ValaCCodeAssignmentModuleClass ValaCCodeAssignmentModuleClass;
typedef struct _ValaCCodeAssignmentModulePrivate ValaCCodeAssignmentModulePrivate;

#define VALA_TYPE_CCODE_METHOD_CALL_MODULE (vala_ccode_method_call_module_get_type ())
#define VALA_CCODE_METHOD_CALL_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_METHOD_CALL_MODULE, ValaCCodeMethodCallModule))
#define VALA_CCODE_METHOD_CALL_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_METHOD_CALL_MODULE, ValaCCodeMethodCallModuleClass))
#define VALA_IS_CCODE_METHOD_CALL_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_METHOD_CALL_MODULE))
#define VALA_IS_CCODE_METHOD_CALL_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_METHOD_CALL_MODULE))
#define VALA_CCODE_METHOD_CALL_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_METHOD_CALL_MODULE, ValaCCodeMethodCallModuleClass))

typedef struct _ValaCCodeMethodCallModule ValaCCodeMethodCallModule;
typedef struct _ValaCCodeMethodCallModuleClass ValaCCodeMethodCallModuleClass;
typedef struct _ValaCCodeMethodCallModulePrivate ValaCCodeMethodCallModulePrivate;

#define VALA_TYPE_CCODE_ARRAY_MODULE (vala_ccode_array_module_get_type ())
#define VALA_CCODE_ARRAY_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_ARRAY_MODULE, ValaCCodeArrayModule))
#define VALA_CCODE_ARRAY_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_ARRAY_MODULE, ValaCCodeArrayModuleClass))
#define VALA_IS_CCODE_ARRAY_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_ARRAY_MODULE))
#define VALA_IS_CCODE_ARRAY_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_ARRAY_MODULE))
#define VALA_CCODE_ARRAY_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_ARRAY_MODULE, ValaCCodeArrayModuleClass))

typedef struct _ValaCCodeArrayModule ValaCCodeArrayModule;
typedef struct _ValaCCodeArrayModuleClass ValaCCodeArrayModuleClass;
typedef struct _ValaCCodeArrayModulePrivate ValaCCodeArrayModulePrivate;

#define VALA_TYPE_CCODE_DELEGATE_MODULE (vala_ccode_delegate_module_get_type ())
#define VALA_CCODE_DELEGATE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_DELEGATE_MODULE, ValaCCodeDelegateModule))
#define VALA_CCODE_DELEGATE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_DELEGATE_MODULE, ValaCCodeDelegateModuleClass))
#define VALA_IS_CCODE_DELEGATE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_DELEGATE_MODULE))
#define VALA_IS_CCODE_DELEGATE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_DELEGATE_MODULE))
#define VALA_CCODE_DELEGATE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_DELEGATE_MODULE, ValaCCodeDelegateModuleClass))

typedef struct _ValaCCodeDelegateModule ValaCCodeDelegateModule;
typedef struct _ValaCCodeDelegateModuleClass ValaCCodeDelegateModuleClass;
typedef struct _ValaCCodeDelegateModulePrivate ValaCCodeDelegateModulePrivate;

#define VALA_TYPE_GERROR_MODULE (vala_gerror_module_get_type ())
#define VALA_GERROR_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_GERROR_MODULE, ValaGErrorModule))
#define VALA_GERROR_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_GERROR_MODULE, ValaGErrorModuleClass))
#define VALA_IS_GERROR_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_GERROR_MODULE))
#define VALA_IS_GERROR_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_GERROR_MODULE))
#define VALA_GERROR_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_GERROR_MODULE, ValaGErrorModuleClass))

typedef struct _ValaGErrorModule ValaGErrorModule;
typedef struct _ValaGErrorModuleClass ValaGErrorModuleClass;
typedef struct _ValaGErrorModulePrivate ValaGErrorModulePrivate;

#define VALA_TYPE_CCODE_GENERATOR (vala_ccode_generator_get_type ())
#define VALA_CCODE_GENERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CCODE_GENERATOR, ValaCCodeGenerator))
#define VALA_CCODE_GENERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CCODE_GENERATOR, ValaCCodeGeneratorClass))
#define VALA_IS_CCODE_GENERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CCODE_GENERATOR))
#define VALA_IS_CCODE_GENERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CCODE_GENERATOR))
#define VALA_CCODE_GENERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CCODE_GENERATOR, ValaCCodeGeneratorClass))

typedef struct _ValaCCodeGenerator ValaCCodeGenerator;
typedef struct _ValaCCodeGeneratorClass ValaCCodeGeneratorClass;
#define _g_free0(var) (var = (g_free (var), NULL))
#define _vala_collection_object_unref0(var) ((var == NULL) ? NULL : (var = (vala_collection_object_unref (var), NULL)))
#define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))

struct _ValaCCodeModule {
	GTypeInstance parent_instance;
	volatile int ref_count;
	ValaCCodeModulePrivate * priv;
};

struct _ValaCCodeModuleClass {
	GTypeClass parent_class;
	void (*finalize) (ValaCCodeModule *self);
	void (*emit) (ValaCCodeModule* self, ValaCodeContext* context);
	void (*visit_source_file) (ValaCCodeModule* self, ValaSourceFile* source_file);
	void (*visit_class) (ValaCCodeModule* self, ValaClass* cl);
	void (*visit_interface) (ValaCCodeModule* self, ValaInterface* iface);
	void (*visit_struct) (ValaCCodeModule* self, ValaStruct* st);
	void (*visit_enum) (ValaCCodeModule* self, ValaEnum* en);
	void (*visit_error_domain) (ValaCCodeModule* self, ValaErrorDomain* edomain);
	void (*visit_delegate) (ValaCCodeModule* self, ValaDelegate* d);
	void (*visit_member) (ValaCCodeModule* self, ValaMember* m);
	void (*visit_constant) (ValaCCodeModule* self, ValaConstant* c);
	void (*visit_field) (ValaCCodeModule* self, ValaField* f);
	void (*visit_method) (ValaCCodeModule* self, ValaMethod* m);
	void (*visit_creation_method) (ValaCCodeModule* self, ValaCreationMethod* m);
	void (*visit_formal_parameter) (ValaCCodeModule* self, ValaFormalParameter* p);
	void (*visit_property) (ValaCCodeModule* self, ValaProperty* prop);
	void (*visit_property_accessor) (ValaCCodeModule* self, ValaPropertyAccessor* acc);
	void (*visit_signal) (ValaCCodeModule* self, ValaSignal* sig);
	void (*visit_constructor) (ValaCCodeModule* self, ValaConstructor* c);
	void (*visit_destructor) (ValaCCodeModule* self, ValaDestructor* d);
	void (*visit_block) (ValaCCodeModule* self, ValaBlock* b);
	void (*visit_empty_statement) (ValaCCodeModule* self, ValaEmptyStatement* stmt);
	void (*visit_declaration_statement) (ValaCCodeModule* self, ValaDeclarationStatement* stmt);
	void (*visit_local_variable) (ValaCCodeModule* self, ValaLocalVariable* local);
	void (*visit_initializer_list) (ValaCCodeModule* self, ValaInitializerList* list);
	void (*visit_end_full_expression) (ValaCCodeModule* self, ValaExpression* expr);
	void (*visit_expression_statement) (ValaCCodeModule* self, ValaExpressionStatement* stmt);
	void (*visit_if_statement) (ValaCCodeModule* self, ValaIfStatement* stmt);
	void (*visit_switch_statement) (ValaCCodeModule* self, ValaSwitchStatement* stmt);
	void (*visit_switch_section) (ValaCCodeModule* self, ValaSwitchSection* section);
	void (*visit_switch_label) (ValaCCodeModule* self, ValaSwitchLabel* label);
	void (*visit_loop) (ValaCCodeModule* self, ValaLoop* stmt);
	void (*visit_foreach_statement) (ValaCCodeModule* self, ValaForeachStatement* stmt);
	void (*visit_break_statement) (ValaCCodeModule* self, ValaBreakStatement* stmt);
	void (*visit_continue_statement) (ValaCCodeModule* self, ValaContinueStatement* stmt);
	void (*visit_return_statement) (ValaCCodeModule* self, ValaReturnStatement* stmt);
	void (*visit_yield_statement) (ValaCCodeModule* self, ValaYieldStatement* stmt);
	void (*visit_throw_statement) (ValaCCodeModule* self, ValaThrowStatement* stmt);
	void (*visit_try_statement) (ValaCCodeModule* self, ValaTryStatement* stmt);
	void (*visit_catch_clause) (ValaCCodeModule* self, ValaCatchClause* clause);
	void (*visit_lock_statement) (ValaCCodeModule* self, ValaLockStatement* stmt);
	void (*visit_unlock_statement) (ValaCCodeModule* self, ValaUnlockStatement* stmt);
	void (*visit_delete_statement) (ValaCCodeModule* self, ValaDeleteStatement* stmt);
	void (*visit_expression) (ValaCCodeModule* self, ValaExpression* expr);
	void (*visit_array_creation_expression) (ValaCCodeModule* self, ValaArrayCreationExpression* expr);
	void (*visit_boolean_literal) (ValaCCodeModule* self, ValaBooleanLiteral* expr);
	void (*visit_character_literal) (ValaCCodeModule* self, ValaCharacterLiteral* expr);
	void (*visit_integer_literal) (ValaCCodeModule* self, ValaIntegerLiteral* expr);
	void (*visit_real_literal) (ValaCCodeModule* self, ValaRealLiteral* expr);
	void (*visit_string_literal) (ValaCCodeModule* self, ValaStringLiteral* expr);
	void (*visit_list_literal) (ValaCCodeModule* self, ValaListLiteral* expr);
	void (*visit_set_literal) (ValaCCodeModule* self, ValaSetLiteral* expr);
	void (*visit_map_literal) (ValaCCodeModule* self, ValaMapLiteral* expr);
	void (*visit_tuple) (ValaCCodeModule* self, ValaTuple* expr);
	void (*visit_regex_literal) (ValaCCodeModule* self, ValaRegexLiteral* re);
	void (*visit_null_literal) (ValaCCodeModule* self, ValaNullLiteral* expr);
	void (*visit_member_access) (ValaCCodeModule* self, ValaMemberAccess* expr);
	void (*visit_method_call) (ValaCCodeModule* self, ValaMethodCall* expr);
	void (*visit_element_access) (ValaCCodeModule* self, ValaElementAccess* expr);
	void (*visit_slice_expression) (ValaCCodeModule* self, ValaSliceExpression* expr);
	void (*visit_base_access) (ValaCCodeModule* self, ValaBaseAccess* expr);
	void (*visit_postfix_expression) (ValaCCodeModule* self, ValaPostfixExpression* expr);
	void (*visit_object_creation_expression) (ValaCCodeModule* self, ValaObjectCreationExpression* expr);
	void (*visit_sizeof_expression) (ValaCCodeModule* self, ValaSizeofExpression* expr);
	void (*visit_typeof_expression) (ValaCCodeModule* self, ValaTypeofExpression* expr);
	void (*visit_unary_expression) (ValaCCodeModule* self, ValaUnaryExpression* expr);
	void (*visit_cast_expression) (ValaCCodeModule* self, ValaCastExpression* expr);
	void (*visit_named_argument) (ValaCCodeModule* self, ValaNamedArgument* expr);
	void (*visit_pointer_indirection) (ValaCCodeModule* self, ValaPointerIndirection* expr);
	void (*visit_addressof_expression) (ValaCCodeModule* self, ValaAddressofExpression* expr);
	void (*visit_reference_transfer_expression) (ValaCCodeModule* self, ValaReferenceTransferExpression* expr);
	void (*visit_binary_expression) (ValaCCodeModule* self, ValaBinaryExpression* expr);
	void (*visit_type_check) (ValaCCodeModule* self, ValaTypeCheck* expr);
	void (*visit_lambda_expression) (ValaCCodeModule* self, ValaLambdaExpression* l);
	void (*visit_assignment) (ValaCCodeModule* self, ValaAssignment* a);
	char* (*get_custom_creturn_type) (ValaCCodeModule* self, ValaMethod* m);
	void (*generate_dynamic_method_wrapper) (ValaCCodeModule* self, ValaDynamicMethod* method);
	gboolean (*method_has_wrapper) (ValaCCodeModule* self, ValaMethod* method);
	ValaCCodeIdentifier* (*get_value_setter_function) (ValaCCodeModule* self, ValaDataType* type_reference);
	ValaCCodeIdentifier* (*get_value_taker_function) (ValaCCodeModule* self, ValaDataType* type_reference);
	ValaCCodeExpression* (*get_construct_property_assignment) (ValaCCodeModule* self, ValaCCodeConstant* canonical_cconstant, ValaDataType* property_type, ValaCCodeExpression* value);
	ValaCCodeFunctionCall* (*get_param_spec) (ValaCCodeModule* self, ValaProperty* prop);
	ValaCCodeFunctionCall* (*get_signal_creation) (ValaCCodeModule* self, ValaSignal* sig, ValaTypeSymbol* type);
	ValaCCodeFragment* (*register_dbus_info) (ValaCCodeModule* self, ValaObjectTypeSymbol* bindable);
	char* (*get_dynamic_property_getter_cname) (ValaCCodeModule* self, ValaDynamicProperty* node);
	char* (*get_dynamic_property_setter_cname) (ValaCCodeModule* self, ValaDynamicProperty* node);
	char* (*get_dynamic_signal_cname) (ValaCCodeModule* self, ValaDynamicSignal* node);
	char* (*get_dynamic_signal_connect_wrapper_name) (ValaCCodeModule* self, ValaDynamicSignal* node);
	char* (*get_dynamic_signal_connect_after_wrapper_name) (ValaCCodeModule* self, ValaDynamicSignal* node);
	char* (*get_dynamic_signal_disconnect_wrapper_name) (ValaCCodeModule* self, ValaDynamicSignal* node);
	void (*generate_marshaller) (ValaCCodeModule* self, ValaList* params, ValaDataType* return_type, gboolean dbus);
	char* (*get_marshaller_function) (ValaCCodeModule* self, ValaList* params, ValaDataType* return_type, const char* prefix, gboolean dbus);
	char* (*get_array_length_cname) (ValaCCodeModule* self, const char* array_cname, gint dim);
	ValaCCodeExpression* (*get_array_length_cexpression) (ValaCCodeModule* self, ValaExpression* array_expr, gint dim);
	char* (*get_array_size_cname) (ValaCCodeModule* self, const char* array_cname);
	ValaCCodeExpression* (*get_array_size_cexpression) (ValaCCodeModule* self, ValaExpression* array_expr);
	void (*add_simple_check) (ValaCCodeModule* self, ValaCodeNode* node, ValaCCodeFragment* cfrag, gboolean always_fails);
};

struct _ValaCCodeBaseModule {
	ValaCCodeModule parent_instance;
	ValaCCodeBaseModulePrivate * priv;
	ValaSymbol* root_symbol;
	ValaSymbol* current_symbol;
	ValaTryStatement* current_try;
	ValaCCodeDeclarationSpace* header_declarations;
	ValaCCodeDeclarationSpace* internal_header_declarations;
	ValaCCodeDeclarationSpace* source_declarations;
	ValaCCodeFragment* source_signal_marshaller_declaration;
	ValaCCodeFragment* source_type_member_definition;
	ValaCCodeFragment* class_init_fragment;
	ValaCCodeFragment* base_init_fragment;
	ValaCCodeFragment* class_finalize_fragment;
	ValaCCodeFragment* base_finalize_fragment;
	ValaCCodeFragment* instance_init_fragment;
	ValaCCodeFragment* instance_finalize_fragment;
	ValaCCodeFragment* source_signal_marshaller_definition;
	ValaCCodeStruct* param_spec_struct;
	ValaCCodeStruct* closure_struct;
	ValaCCodeEnum* prop_enum;
	ValaCCodeFunction* function;
	ValaCCodeFragment* pre_statement_fragment;
	ValaCCodeSwitchStatement* state_switch_statement;
	ValaArrayList* temp_vars;
	ValaArrayList* temp_ref_vars;
	ValaSet* user_marshal_set;
	ValaSet* predefined_marshal_set;
	gint next_temp_var_id;
	gint next_regex_id;
	gboolean in_constructor;
	gboolean in_static_or_class_context;
	gboolean current_method_inner_error;
	gint next_coroutine_state;
	ValaDataType* void_type;
	ValaDataType* bool_type;
	ValaDataType* char_type;
	ValaDataType* uchar_type;
	ValaDataType* unichar_type;
	ValaDataType* short_type;
	ValaDataType* ushort_type;
	ValaDataType* int_type;
	ValaDataType* uint_type;
	ValaDataType* long_type;
	ValaDataType* ulong_type;
	ValaDataType* int8_type;
	ValaDataType* uint8_type;
	ValaDataType* int16_type;
	ValaDataType* uint16_type;
	ValaDataType* int32_type;
	ValaDataType* uint32_type;
	ValaDataType* int64_type;
	ValaDataType* uint64_type;
	ValaDataType* string_type;
	ValaDataType* regex_type;
	ValaDataType* float_type;
	ValaDataType* double_type;
	ValaTypeSymbol* gtype_type;
	ValaTypeSymbol* gobject_type;
	ValaErrorType* gerror_type;
	ValaClass* glist_type;
	ValaClass* gslist_type;
	ValaClass* gvaluearray_type;
	ValaTypeSymbol* gstringbuilder_type;
	ValaTypeSymbol* garray_type;
	ValaTypeSymbol* gbytearray_type;
	ValaTypeSymbol* gptrarray_type;
	ValaTypeSymbol* gthreadpool_type;
	ValaDataType* gquark_type;
	ValaDataType* genumvalue_type;
	ValaStruct* gvalue_type;
	ValaStruct* mutex_type;
	ValaTypeSymbol* type_module_type;
	ValaTypeSymbol* dbus_object_type;
	gboolean in_plugin;
	char* module_init_param_name;
	gboolean gvaluecollector_h_needed;
	gboolean requires_array_free;
	gboolean requires_array_move;
	gboolean requires_array_length;
	gboolean requires_strcmp0;
	gboolean dbus_glib_h_needed;
	gboolean dbus_glib_h_needed_in_header;
	ValaSet* wrappers;
	ValaMap* variable_name_map;
};

struct _ValaCCodeBaseModuleClass {
	ValaCCodeModuleClass parent_class;
	void (*append_vala_array_free) (ValaCCodeBaseModule* self);
	void (*append_vala_array_move) (ValaCCodeBaseModule* self);
	void (*append_vala_array_length) (ValaCCodeBaseModule* self);
	gboolean (*generate_enum_declaration) (ValaCCodeBaseModule* self, ValaEnum* en, ValaCCodeDeclarationSpace* decl_space);
	void (*generate_class_struct_declaration) (ValaCCodeBaseModule* self, ValaClass* cl, ValaCCodeDeclarationSpace* decl_space);
	void (*generate_struct_declaration) (ValaCCodeBaseModule* self, ValaStruct* st, ValaCCodeDeclarationSpace* decl_space);
	void (*generate_delegate_declaration) (ValaCCodeBaseModule* self, ValaDelegate* d, ValaCCodeDeclarationSpace* decl_space);
	void (*generate_cparameters) (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeDeclarationSpace* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction);
	ValaCCodeExpression* (*get_dup_func_expression) (ValaCCodeBaseModule* self, ValaDataType* type, ValaSourceReference* source_reference, gboolean is_chainup);
	char* (*append_struct_array_free) (ValaCCodeBaseModule* self, ValaStruct* st);
	ValaCCodeExpression* (*get_unref_expression) (ValaCCodeBaseModule* self, ValaCCodeExpression* cvar, ValaDataType* type, ValaExpression* expr, gboolean is_macro_definition);
	void (*append_local_free) (ValaCCodeBaseModule* self, ValaSymbol* sym, ValaCCodeFragment* cfrag, gboolean stop_at_loop);
	gboolean (*variable_accessible_in_finally) (ValaCCodeBaseModule* self, ValaLocalVariable* local);
	char* (*get_delegate_target_cname) (ValaCCodeBaseModule* self, const char* delegate_cname);
	ValaCCodeExpression* (*get_delegate_target_cexpression) (ValaCCodeBaseModule* self, ValaExpression* delegate_expr, ValaCCodeExpression** delegate_target_destroy_notify);
	char* (*get_delegate_target_destroy_notify_cname) (ValaCCodeBaseModule* self, const char* delegate_cname);
	ValaCCodeExpression* (*get_ref_cexpression) (ValaCCodeBaseModule* self, ValaDataType* expression_type, ValaCCodeExpression* cexpr, ValaExpression* expr, ValaCodeNode* node);
	void (*generate_class_declaration) (ValaCCodeBaseModule* self, ValaClass* cl, ValaCCodeDeclarationSpace* decl_space);
	void (*generate_interface_declaration) (ValaCCodeBaseModule* self, ValaInterface* iface, ValaCCodeDeclarationSpace* decl_space);
	void (*generate_method_declaration) (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeDeclarationSpace* decl_space);
	void (*generate_error_domain_declaration) (ValaCCodeBaseModule* self, ValaErrorDomain* edomain, ValaCCodeDeclarationSpace* decl_space);
	ValaCCodeExpression* (*get_implicit_cast_expression) (ValaCCodeBaseModule* self, ValaCCodeExpression* source_cexpr, ValaDataType* expression_type, ValaDataType* target_type, ValaExpression* expr);
	gboolean (*is_gobject_property) (ValaCCodeBaseModule* self, ValaProperty* prop);
};

struct _ValaCCodeStructModule {
	ValaCCodeBaseModule parent_instance;
	ValaCCodeStructModulePrivate * priv;
};

struct _ValaCCodeStructModuleClass {
	ValaCCodeBaseModuleClass parent_class;
};

struct _ValaCCodeMethodModule {
	ValaCCodeStructModule parent_instance;
	ValaCCodeMethodModulePrivate * priv;
};

struct _ValaCCodeMethodModuleClass {
	ValaCCodeStructModuleClass parent_class;
	void (*generate_method_result_declaration) (ValaCCodeMethodModule* self, ValaMethod* m, ValaCCodeDeclarationSpace* decl_space, ValaCCodeFunction* cfunc, ValaMap* cparam_map, ValaMap* carg_map);
	void (*generate_parameter) (ValaCCodeMethodModule* self, ValaFormalParameter* param, ValaCCodeDeclarationSpace* decl_space, ValaMap* cparam_map, ValaMap* carg_map);
};

struct _ValaCCodeControlFlowModule {
	ValaCCodeMethodModule parent_instance;
	ValaCCodeControlFlowModulePrivate * priv;
};

struct _ValaCCodeControlFlowModuleClass {
	ValaCCodeMethodModuleClass parent_class;
};

struct _ValaCCodeMemberAccessModule {
	ValaCCodeControlFlowModule parent_instance;
	ValaCCodeMemberAccessModulePrivate * priv;
};

struct _ValaCCodeMemberAccessModuleClass {
	ValaCCodeControlFlowModuleClass parent_class;
};

struct _ValaCCodeAssignmentModule {
	ValaCCodeMemberAccessModule parent_instance;
	ValaCCodeAssignmentModulePrivate * priv;
};

struct _ValaCCodeAssignmentModuleClass {
	ValaCCodeMemberAccessModuleClass parent_class;
};

struct _ValaCCodeMethodCallModule {
	ValaCCodeAssignmentModule parent_instance;
	ValaCCodeMethodCallModulePrivate * priv;
};

struct _ValaCCodeMethodCallModuleClass {
	ValaCCodeAssignmentModuleClass parent_class;
};

struct _ValaCCodeArrayModule {
	ValaCCodeMethodCallModule parent_instance;
	ValaCCodeArrayModulePrivate * priv;
};

struct _ValaCCodeArrayModuleClass {
	ValaCCodeMethodCallModuleClass parent_class;
};

struct _ValaCCodeDelegateModule {
	ValaCCodeArrayModule parent_instance;
	ValaCCodeDelegateModulePrivate * priv;
};

struct _ValaCCodeDelegateModuleClass {
	ValaCCodeArrayModuleClass parent_class;
};

struct _ValaGErrorModule {
	ValaCCodeDelegateModule parent_instance;
	ValaGErrorModulePrivate * priv;
};

struct _ValaGErrorModuleClass {
	ValaCCodeDelegateModuleClass parent_class;
	ValaCCodeStatement* (*return_with_exception) (ValaGErrorModule* self, ValaCCodeExpression* error_expr);
};

struct _ValaGErrorModulePrivate {
	gint current_try_id;
	gint next_try_id;
	gboolean is_in_catch;
};


static gpointer vala_gerror_module_parent_class = NULL;

gpointer vala_ccode_module_ref (gpointer instance);
void vala_ccode_module_unref (gpointer instance);
GParamSpec* vala_param_spec_ccode_module (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_value_set_ccode_module (GValue* value, gpointer v_object);
void vala_value_take_ccode_module (GValue* value, gpointer v_object);
gpointer vala_value_get_ccode_module (const GValue* value);
GType vala_ccode_module_get_type (void);
GType vala_ccode_base_module_get_type (void);
gpointer vala_ccode_declaration_space_ref (gpointer instance);
void vala_ccode_declaration_space_unref (gpointer instance);
GParamSpec* vala_param_spec_ccode_declaration_space (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_value_set_ccode_declaration_space (GValue* value, gpointer v_object);
void vala_value_take_ccode_declaration_space (GValue* value, gpointer v_object);
gpointer vala_value_get_ccode_declaration_space (const GValue* value);
GType vala_ccode_declaration_space_get_type (void);
GType vala_ccode_struct_module_get_type (void);
GType vala_ccode_method_module_get_type (void);
GType vala_ccode_control_flow_module_get_type (void);
GType vala_ccode_member_access_module_get_type (void);
GType vala_ccode_assignment_module_get_type (void);
GType vala_ccode_method_call_module_get_type (void);
GType vala_ccode_array_module_get_type (void);
GType vala_ccode_delegate_module_get_type (void);
GType vala_gerror_module_get_type (void);
#define VALA_GERROR_MODULE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_GERROR_MODULE, ValaGErrorModulePrivate))
enum  {
	VALA_GERROR_MODULE_DUMMY_PROPERTY
};
GType vala_ccode_generator_get_type (void);
ValaCCodeDelegateModule* vala_ccode_delegate_module_new (ValaCCodeGenerator* codegen, ValaCCodeModule* next);
ValaCCodeDelegateModule* vala_ccode_delegate_module_construct (GType object_type, ValaCCodeGenerator* codegen, ValaCCodeModule* next);
ValaGErrorModule* vala_gerror_module_new (ValaCCodeGenerator* codegen, ValaCCodeModule* next);
ValaGErrorModule* vala_gerror_module_construct (GType object_type, ValaCCodeGenerator* codegen, ValaCCodeModule* next);
gboolean vala_ccode_declaration_space_add_symbol_declaration (ValaCCodeDeclarationSpace* self, ValaSymbol* sym, const char* name);
ValaCCodeGenerator* vala_ccode_module_get_codegen (ValaCCodeModule* self);
void vala_ccode_declaration_space_add_type_definition (ValaCCodeDeclarationSpace* self, ValaCCodeNode* node);
void vala_ccode_declaration_space_add_type_member_declaration (ValaCCodeDeclarationSpace* self, ValaCCodeNode* node);
static void vala_gerror_module_real_generate_error_domain_declaration (ValaCCodeBaseModule* base, ValaErrorDomain* edomain, ValaCCodeDeclarationSpace* decl_space);
void vala_ccode_base_module_generate_error_domain_declaration (ValaCCodeBaseModule* self, ValaErrorDomain* edomain, ValaCCodeDeclarationSpace* decl_space);
static void vala_gerror_module_real_visit_error_domain (ValaCCodeModule* base, ValaErrorDomain* edomain);
ValaCCodeExpression* vala_ccode_base_module_get_variable_cexpression (ValaCCodeBaseModule* self, const char* name);
ValaCCodeModule* vala_ccode_module_get_head (ValaCCodeModule* self);
void vala_ccode_module_add_simple_check (ValaCCodeModule* self, ValaCodeNode* node, ValaCCodeFragment* cfrag, gboolean always_fails);
void vala_ccode_base_module_create_temp_decl (ValaCCodeBaseModule* self, ValaStatement* stmt, ValaList* temp_vars);
static void vala_gerror_module_real_visit_throw_statement (ValaCCodeModule* base, ValaThrowStatement* stmt);
void vala_ccode_base_module_append_local_free (ValaCCodeBaseModule* self, ValaSymbol* sym, ValaCCodeFragment* cfrag, gboolean stop_at_loop);
ValaMethod* vala_ccode_base_module_get_current_method (ValaCCodeBaseModule* self);
ValaDataType* vala_ccode_base_module_get_current_return_type (ValaCCodeBaseModule* self);
ValaCCodeExpression* vala_ccode_base_module_default_value_for_type (ValaCCodeBaseModule* self, ValaDataType* type, gboolean initializer_expression);
ValaCCodeStatement* vala_gerror_module_return_with_exception (ValaGErrorModule* self, ValaCCodeExpression* error_expr);
static ValaCCodeStatement* vala_gerror_module_real_return_with_exception (ValaGErrorModule* self, ValaCCodeExpression* error_expr);
static ValaCCodeStatement* vala_gerror_module_uncaught_error_statement (ValaGErrorModule* self, ValaCCodeExpression* inner_error, ValaCCodeBlock* block, gboolean unexpected);
static gboolean vala_gerror_module_in_finally_block (ValaGErrorModule* self, ValaCodeNode* node);
void vala_ccode_base_module_append_error_free (ValaCCodeBaseModule* self, ValaSymbol* sym, ValaCCodeFragment* cfrag, ValaTryStatement* current_try);
static void vala_gerror_module_real_add_simple_check (ValaCCodeModule* base, ValaCodeNode* node, ValaCCodeFragment* cfrag, gboolean always_fails);
static void vala_gerror_module_real_visit_try_statement (ValaCCodeModule* base, ValaTryStatement* stmt);
char* vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self, const char* name);
static void vala_gerror_module_real_visit_catch_clause (ValaCCodeModule* base, ValaCatchClause* clause);
static void vala_gerror_module_real_append_local_free (ValaCCodeBaseModule* base, ValaSymbol* sym, ValaCCodeFragment* cfrag, gboolean stop_at_loop);
static void vala_gerror_module_finalize (ValaCCodeModule* obj);



ValaGErrorModule* vala_gerror_module_construct (GType object_type, ValaCCodeGenerator* codegen, ValaCCodeModule* next) {
	ValaGErrorModule* self;
	g_return_val_if_fail (codegen != NULL, NULL);
	self = (ValaGErrorModule*) vala_ccode_delegate_module_construct (object_type, codegen, next);
	return self;
}


ValaGErrorModule* vala_gerror_module_new (ValaCCodeGenerator* codegen, ValaCCodeModule* next) {
	return vala_gerror_module_construct (VALA_TYPE_GERROR_MODULE, codegen, next);
}


static void vala_gerror_module_real_generate_error_domain_declaration (ValaCCodeBaseModule* base, ValaErrorDomain* edomain, ValaCCodeDeclarationSpace* decl_space) {
	ValaGErrorModule * self;
	char* _tmp0_;
	gboolean _tmp1_;
	char* _tmp2_;
	ValaCCodeEnum* _tmp3_;
	ValaCCodeEnum* cenum;
	char* _tmp10_;
	char* _tmp11_;
	char* quark_fun_name;
	char* _tmp13_;
	char* _tmp12_;
	ValaCCodeMacroReplacement* _tmp14_;
	ValaCCodeMacroReplacement* error_domain_define;
	char* _tmp15_;
	ValaCCodeFunction* _tmp16_;
	ValaCCodeFunction* cquark_fun;
	self = (ValaGErrorModule*) base;
	g_return_if_fail (edomain != NULL);
	g_return_if_fail (decl_space != NULL);
	if ((_tmp1_ = vala_ccode_declaration_space_add_symbol_declaration (decl_space, (ValaSymbol*) edomain, _tmp0_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) edomain, FALSE)), _g_free0 (_tmp0_), _tmp1_)) {
		return;
	}
	cenum = (_tmp3_ = vala_ccode_enum_new (_tmp2_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) edomain, FALSE)), _g_free0 (_tmp2_), _tmp3_);
	{
		ValaList* _tmp4_;
		ValaIterator* _tmp5_;
		ValaIterator* _ecode_it;
		_ecode_it = (_tmp5_ = vala_iterable_iterator ((ValaIterable*) (_tmp4_ = vala_error_domain_get_codes (edomain))), _vala_collection_object_unref0 (_tmp4_), _tmp5_);
		while (TRUE) {
			ValaErrorCode* ecode;
			if (!vala_iterator_next (_ecode_it)) {
				break;
			}
			ecode = (ValaErrorCode*) vala_iterator_get (_ecode_it);
			if (vala_error_code_get_value (ecode) == NULL) {
				ValaCCodeEnumValue* _tmp7_;
				char* _tmp6_;
				vala_ccode_enum_add_value (cenum, _tmp7_ = vala_ccode_enum_value_new (_tmp6_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) ecode, FALSE), NULL));
				_vala_ccode_node_unref0 (_tmp7_);
				_g_free0 (_tmp6_);
			} else {
				ValaCCodeEnumValue* _tmp9_;
				char* _tmp8_;
				vala_code_node_accept ((ValaCodeNode*) vala_error_code_get_value (ecode), (ValaCodeVisitor*) vala_ccode_module_get_codegen ((ValaCCodeModule*) self));
				vala_ccode_enum_add_value (cenum, _tmp9_ = vala_ccode_enum_value_new (_tmp8_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) ecode, FALSE), VALA_CCODE_EXPRESSION (vala_code_node_get_ccodenode ((ValaCodeNode*) vala_error_code_get_value (ecode)))));
				_vala_ccode_node_unref0 (_tmp9_);
				_g_free0 (_tmp8_);
			}
			_vala_code_node_unref0 (ecode);
		}
		_vala_collection_object_unref0 (_ecode_it);
	}
	vala_ccode_declaration_space_add_type_definition (decl_space, (ValaCCodeNode*) cenum);
	quark_fun_name = (_tmp11_ = g_strconcat (_tmp10_ = vala_symbol_get_lower_case_cprefix ((ValaSymbol*) edomain), "quark", NULL), _g_free0 (_tmp10_), _tmp11_);
	error_domain_define = (_tmp14_ = vala_ccode_macro_replacement_new (_tmp12_ = vala_typesymbol_get_upper_case_cname ((ValaTypeSymbol*) edomain, NULL), _tmp13_ = g_strconcat (quark_fun_name, " ()", NULL)), _g_free0 (_tmp13_), _g_free0 (_tmp12_), _tmp14_);
	vala_ccode_declaration_space_add_type_definition (decl_space, (ValaCCodeNode*) error_domain_define);
	cquark_fun = (_tmp16_ = vala_ccode_function_new (quark_fun_name, _tmp15_ = vala_typesymbol_get_cname (vala_data_type_get_data_type (((ValaCCodeBaseModule*) self)->gquark_type), FALSE)), _g_free0 (_tmp15_), _tmp16_);
	vala_ccode_declaration_space_add_type_member_declaration (decl_space, (ValaCCodeNode*) cquark_fun);
	_vala_ccode_node_unref0 (cenum);
	_g_free0 (quark_fun_name);
	_vala_ccode_node_unref0 (error_domain_define);
	_vala_ccode_node_unref0 (cquark_fun);
}


static void vala_gerror_module_real_visit_error_domain (ValaCCodeModule* base, ValaErrorDomain* edomain) {
	ValaGErrorModule * self;
	char* _tmp0_;
	char* _tmp1_;
	char* quark_fun_name;
	char* _tmp2_;
	ValaCCodeFunction* _tmp3_;
	ValaCCodeFunction* cquark_fun;
	ValaCCodeBlock* cquark_block;
	ValaCCodeIdentifier* _tmp4_;
	ValaCCodeFunctionCall* _tmp5_;
	ValaCCodeFunctionCall* cquark_call;
	ValaCCodeConstant* _tmp9_;
	char* _tmp8_;
	char* _tmp7_;
	char* _tmp6_;
	ValaCCodeReturnStatement* _tmp10_;
	self = (ValaGErrorModule*) base;
	g_return_if_fail (edomain != NULL);
	vala_ccode_base_module_generate_error_domain_declaration ((ValaCCodeBaseModule*) self, edomain, ((ValaCCodeBaseModule*) self)->source_declarations);
	if (!vala_symbol_is_internal_symbol ((ValaSymbol*) edomain)) {
		vala_ccode_base_module_generate_error_domain_declaration ((ValaCCodeBaseModule*) self, edomain, ((ValaCCodeBaseModule*) self)->header_declarations);
	}
	if (!vala_symbol_is_private_symbol ((ValaSymbol*) edomain)) {
		vala_ccode_base_module_generate_error_domain_declaration ((ValaCCodeBaseModule*) self, edomain, ((ValaCCodeBaseModule*) self)->internal_header_declarations);
	}
	quark_fun_name = (_tmp1_ = g_strconcat (_tmp0_ = vala_symbol_get_lower_case_cprefix ((ValaSymbol*) edomain), "quark", NULL), _g_free0 (_tmp0_), _tmp1_);
	cquark_fun = (_tmp3_ = vala_ccode_function_new (quark_fun_name, _tmp2_ = vala_typesymbol_get_cname (vala_data_type_get_data_type (((ValaCCodeBaseModule*) self)->gquark_type), FALSE)), _g_free0 (_tmp2_), _tmp3_);
	cquark_block = vala_ccode_block_new ();
	cquark_call = (_tmp5_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp4_ = vala_ccode_identifier_new ("g_quark_from_static_string"))), _vala_ccode_node_unref0 (_tmp4_), _tmp5_);
	vala_ccode_function_call_add_argument (cquark_call, (ValaCCodeExpression*) (_tmp9_ = vala_ccode_constant_new (_tmp8_ = g_strconcat (_tmp7_ = g_strconcat ("\"", _tmp6_ = vala_symbol_get_lower_case_cname ((ValaSymbol*) edomain, NULL), NULL), "-quark\"", NULL))));
	_vala_ccode_node_unref0 (_tmp9_);
	_g_free0 (_tmp8_);
	_g_free0 (_tmp7_);
	_g_free0 (_tmp6_);
	vala_ccode_block_add_statement (cquark_block, (ValaCCodeNode*) (_tmp10_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) cquark_call)));
	_vala_ccode_node_unref0 (_tmp10_);
	vala_ccode_function_set_block (cquark_fun, cquark_block);
	vala_ccode_fragment_append (((ValaCCodeBaseModule*) self)->source_type_member_definition, (ValaCCodeNode*) cquark_fun);
	_g_free0 (quark_fun_name);
	_vala_ccode_node_unref0 (cquark_fun);
	_vala_ccode_node_unref0 (cquark_block);
	_vala_ccode_node_unref0 (cquark_call);
}


static void vala_gerror_module_real_visit_throw_statement (ValaCCodeModule* base, ValaThrowStatement* stmt) {
	ValaGErrorModule * self;
	ValaCCodeFragment* cfrag;
	ValaCCodeExpression* _tmp0_;
	ValaCCodeAssignment* _tmp1_;
	ValaCCodeAssignment* cassign;
	ValaCCodeExpressionStatement* _tmp2_;
	self = (ValaGErrorModule*) base;
	g_return_if_fail (stmt != NULL);
	vala_code_node_accept_children ((ValaCodeNode*) stmt, (ValaCodeVisitor*) vala_ccode_module_get_codegen ((ValaCCodeModule*) self));
	cfrag = vala_ccode_fragment_new ();
	((ValaCCodeBaseModule*) self)->current_method_inner_error = TRUE;
	cassign = (_tmp1_ = vala_ccode_assignment_new (_tmp0_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "_inner_error_"), VALA_CCODE_EXPRESSION (vala_code_node_get_ccodenode ((ValaCodeNode*) vala_throw_statement_get_error_expression (stmt))), VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE), _vala_ccode_node_unref0 (_tmp0_), _tmp1_);
	vala_ccode_fragment_append (cfrag, (ValaCCodeNode*) (_tmp2_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) cassign)));
	_vala_ccode_node_unref0 (_tmp2_);
	vala_ccode_module_add_simple_check (vala_ccode_module_get_head ((ValaCCodeModule*) self), (ValaCodeNode*) stmt, cfrag, TRUE);
	vala_code_node_set_ccodenode ((ValaCodeNode*) stmt, (ValaCCodeNode*) cfrag);
	vala_ccode_base_module_create_temp_decl ((ValaCCodeBaseModule*) self, (ValaStatement*) stmt, (ValaList*) vala_throw_statement_get_error_expression (stmt)->temp_vars);
	_vala_ccode_node_unref0 (cfrag);
	_vala_ccode_node_unref0 (cassign);
}


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


static ValaCCodeStatement* vala_gerror_module_real_return_with_exception (ValaGErrorModule* self, ValaCCodeExpression* error_expr) {
	ValaCCodeStatement* result = NULL;
	ValaCCodeIdentifier* _tmp0_;
	ValaCCodeFunctionCall* _tmp1_;
	ValaCCodeFunctionCall* cpropagate;
	ValaCCodeIdentifier* _tmp2_;
	ValaCCodeBlock* cerror_block;
	ValaCCodeExpressionStatement* _tmp3_;
	ValaCCodeFragment* free_frag;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (error_expr != NULL, NULL);
	cpropagate = (_tmp1_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp0_ = vala_ccode_identifier_new ("g_propagate_error"))), _vala_ccode_node_unref0 (_tmp0_), _tmp1_);
	vala_ccode_function_call_add_argument (cpropagate, (ValaCCodeExpression*) (_tmp2_ = vala_ccode_identifier_new ("error")));
	_vala_ccode_node_unref0 (_tmp2_);
	vala_ccode_function_call_add_argument (cpropagate, error_expr);
	cerror_block = vala_ccode_block_new ();
	vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp3_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) cpropagate)));
	_vala_ccode_node_unref0 (_tmp3_);
	free_frag = vala_ccode_fragment_new ();
	vala_ccode_base_module_append_local_free ((ValaCCodeBaseModule*) self, ((ValaCCodeBaseModule*) self)->current_symbol, free_frag, FALSE);
	vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) free_frag);
	if (VALA_IS_CREATION_METHOD (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self))) {
		ValaSymbol* _tmp4_;
		ValaClass* cl;
		ValaCCodeIdentifier* _tmp6_;
		char* _tmp5_;
		ValaCCodeFunctionCall* _tmp7_;
		ValaCCodeFunctionCall* unref_call;
		ValaCCodeIdentifier* _tmp8_;
		ValaCCodeExpressionStatement* _tmp9_;
		ValaCCodeReturnStatement* _tmp11_;
		ValaCCodeConstant* _tmp10_;
		cl = _vala_code_node_ref0 ((_tmp4_ = vala_symbol_get_parent_symbol ((ValaSymbol*) vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self)), VALA_IS_CLASS (_tmp4_) ? ((ValaClass*) _tmp4_) : NULL));
		unref_call = (_tmp7_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp6_ = vala_ccode_identifier_new (_tmp5_ = vala_typesymbol_get_unref_function ((ValaTypeSymbol*) cl)))), _vala_ccode_node_unref0 (_tmp6_), _g_free0 (_tmp5_), _tmp7_);
		vala_ccode_function_call_add_argument (unref_call, (ValaCCodeExpression*) (_tmp8_ = vala_ccode_identifier_new ("self")));
		_vala_ccode_node_unref0 (_tmp8_);
		vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp9_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) unref_call)));
		_vala_ccode_node_unref0 (_tmp9_);
		vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp11_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) (_tmp10_ = vala_ccode_constant_new ("NULL")))));
		_vala_ccode_node_unref0 (_tmp11_);
		_vala_ccode_node_unref0 (_tmp10_);
		_vala_code_node_unref0 (cl);
		_vala_ccode_node_unref0 (unref_call);
	} else {
		gboolean _tmp12_ = FALSE;
		if (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self) != NULL) {
			_tmp12_ = vala_method_get_coroutine (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self));
		} else {
			_tmp12_ = FALSE;
		}
		if (_tmp12_) {
			ValaCCodeReturnStatement* _tmp14_;
			ValaCCodeConstant* _tmp13_;
			vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp14_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) (_tmp13_ = vala_ccode_constant_new ("FALSE")))));
			_vala_ccode_node_unref0 (_tmp14_);
			_vala_ccode_node_unref0 (_tmp13_);
		} else {
			if (VALA_IS_VOID_TYPE (vala_ccode_base_module_get_current_return_type ((ValaCCodeBaseModule*) self))) {
				ValaCCodeReturnStatement* _tmp15_;
				vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp15_ = vala_ccode_return_statement_new (NULL)));
				_vala_ccode_node_unref0 (_tmp15_);
			} else {
				ValaCCodeReturnStatement* _tmp17_;
				ValaCCodeExpression* _tmp16_;
				vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp17_ = vala_ccode_return_statement_new (_tmp16_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, vala_ccode_base_module_get_current_return_type ((ValaCCodeBaseModule*) self), FALSE))));
				_vala_ccode_node_unref0 (_tmp17_);
				_vala_ccode_node_unref0 (_tmp16_);
			}
		}
	}
	result = (ValaCCodeStatement*) cerror_block;
	_vala_ccode_node_unref0 (cpropagate);
	_vala_ccode_node_unref0 (free_frag);
	return result;
}


ValaCCodeStatement* vala_gerror_module_return_with_exception (ValaGErrorModule* self, ValaCCodeExpression* error_expr) {
	return VALA_GERROR_MODULE_GET_CLASS (self)->return_with_exception (self, error_expr);
}


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


static ValaCCodeStatement* vala_gerror_module_uncaught_error_statement (ValaGErrorModule* self, ValaCCodeExpression* inner_error, ValaCCodeBlock* block, gboolean unexpected) {
	ValaCCodeStatement* result = NULL;
	ValaCCodeBlock* cerror_block;
	ValaCCodeFragment* free_frag;
	ValaCCodeIdentifier* _tmp1_;
	ValaCCodeFunctionCall* _tmp2_;
	ValaCCodeFunctionCall* ccritical;
	const char* _tmp3_;
	ValaCCodeConstant* _tmp4_;
	ValaCCodeConstant* _tmp5_;
	ValaCCodeConstant* _tmp6_;
	ValaCCodeMemberAccess* _tmp7_;
	ValaCCodeIdentifier* _tmp8_;
	ValaCCodeFunctionCall* _tmp9_;
	ValaCCodeFunctionCall* domain_name;
	ValaCCodeMemberAccess* _tmp10_;
	ValaCCodeMemberAccess* _tmp11_;
	ValaCCodeIdentifier* _tmp12_;
	ValaCCodeFunctionCall* _tmp13_;
	ValaCCodeFunctionCall* cclear;
	ValaCCodeUnaryExpression* _tmp14_;
	ValaCCodeFragment* cprint_frag;
	ValaCCodeExpressionStatement* _tmp15_;
	ValaCCodeExpressionStatement* _tmp16_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (inner_error != NULL, NULL);
	cerror_block = _vala_ccode_node_ref0 (block);
	if (cerror_block == NULL) {
		ValaCCodeBlock* _tmp0_;
		cerror_block = (_tmp0_ = vala_ccode_block_new (), _vala_ccode_node_unref0 (cerror_block), _tmp0_);
	}
	free_frag = vala_ccode_fragment_new ();
	vala_ccode_base_module_append_local_free ((ValaCCodeBaseModule*) self, ((ValaCCodeBaseModule*) self)->current_symbol, free_frag, FALSE);
	vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) free_frag);
	ccritical = (_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp1_ = vala_ccode_identifier_new ("g_critical"))), _vala_ccode_node_unref0 (_tmp1_), _tmp2_);
	_tmp3_ = NULL;
	if (unexpected) {
		_tmp3_ = "\"file %s: line %d: unexpected error: %s (%s, %d)\"";
	} else {
		_tmp3_ = "\"file %s: line %d: uncaught error: %s (%s, %d)\"";
	}
	vala_ccode_function_call_add_argument (ccritical, (ValaCCodeExpression*) (_tmp4_ = vala_ccode_constant_new (_tmp3_)));
	_vala_ccode_node_unref0 (_tmp4_);
	vala_ccode_function_call_add_argument (ccritical, (ValaCCodeExpression*) (_tmp5_ = vala_ccode_constant_new ("__FILE__")));
	_vala_ccode_node_unref0 (_tmp5_);
	vala_ccode_function_call_add_argument (ccritical, (ValaCCodeExpression*) (_tmp6_ = vala_ccode_constant_new ("__LINE__")));
	_vala_ccode_node_unref0 (_tmp6_);
	vala_ccode_function_call_add_argument (ccritical, (ValaCCodeExpression*) (_tmp7_ = vala_ccode_member_access_new_pointer (inner_error, "message")));
	_vala_ccode_node_unref0 (_tmp7_);
	domain_name = (_tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp8_ = vala_ccode_identifier_new ("g_quark_to_string"))), _vala_ccode_node_unref0 (_tmp8_), _tmp9_);
	vala_ccode_function_call_add_argument (domain_name, (ValaCCodeExpression*) (_tmp10_ = vala_ccode_member_access_new_pointer (inner_error, "domain")));
	_vala_ccode_node_unref0 (_tmp10_);
	vala_ccode_function_call_add_argument (ccritical, (ValaCCodeExpression*) domain_name);
	vala_ccode_function_call_add_argument (ccritical, (ValaCCodeExpression*) (_tmp11_ = vala_ccode_member_access_new_pointer (inner_error, "code")));
	_vala_ccode_node_unref0 (_tmp11_);
	cclear = (_tmp13_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp12_ = vala_ccode_identifier_new ("g_clear_error"))), _vala_ccode_node_unref0 (_tmp12_), _tmp13_);
	vala_ccode_function_call_add_argument (cclear, (ValaCCodeExpression*) (_tmp14_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, inner_error)));
	_vala_ccode_node_unref0 (_tmp14_);
	cprint_frag = vala_ccode_fragment_new ();
	vala_ccode_fragment_append (cprint_frag, (ValaCCodeNode*) (_tmp15_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) ccritical)));
	_vala_ccode_node_unref0 (_tmp15_);
	vala_ccode_fragment_append (cprint_frag, (ValaCCodeNode*) (_tmp16_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) cclear)));
	_vala_ccode_node_unref0 (_tmp16_);
	vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) cprint_frag);
	if (VALA_IS_CREATION_METHOD (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self))) {
		ValaCCodeReturnStatement* _tmp18_;
		ValaCCodeConstant* _tmp17_;
		vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp18_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) (_tmp17_ = vala_ccode_constant_new ("NULL")))));
		_vala_ccode_node_unref0 (_tmp18_);
		_vala_ccode_node_unref0 (_tmp17_);
	} else {
		gboolean _tmp19_ = FALSE;
		if (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self) != NULL) {
			_tmp19_ = vala_method_get_coroutine (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self));
		} else {
			_tmp19_ = FALSE;
		}
		if (_tmp19_) {
			ValaCCodeReturnStatement* _tmp21_;
			ValaCCodeConstant* _tmp20_;
			vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp21_ = vala_ccode_return_statement_new ((ValaCCodeExpression*) (_tmp20_ = vala_ccode_constant_new ("FALSE")))));
			_vala_ccode_node_unref0 (_tmp21_);
			_vala_ccode_node_unref0 (_tmp20_);
		} else {
			if (VALA_IS_VOID_TYPE (vala_ccode_base_module_get_current_return_type ((ValaCCodeBaseModule*) self))) {
				ValaCCodeReturnStatement* _tmp22_;
				vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp22_ = vala_ccode_return_statement_new (NULL)));
				_vala_ccode_node_unref0 (_tmp22_);
			} else {
				if (vala_ccode_base_module_get_current_return_type ((ValaCCodeBaseModule*) self) != NULL) {
					ValaCCodeReturnStatement* _tmp24_;
					ValaCCodeExpression* _tmp23_;
					vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp24_ = vala_ccode_return_statement_new (_tmp23_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, vala_ccode_base_module_get_current_return_type ((ValaCCodeBaseModule*) self), FALSE))));
					_vala_ccode_node_unref0 (_tmp24_);
					_vala_ccode_node_unref0 (_tmp23_);
				}
			}
		}
	}
	result = (ValaCCodeStatement*) cerror_block;
	_vala_ccode_node_unref0 (free_frag);
	_vala_ccode_node_unref0 (ccritical);
	_vala_ccode_node_unref0 (domain_name);
	_vala_ccode_node_unref0 (cclear);
	_vala_ccode_node_unref0 (cprint_frag);
	return result;
}


static gboolean vala_gerror_module_in_finally_block (ValaGErrorModule* self, ValaCodeNode* node) {
	gboolean result = FALSE;
	ValaCodeNode* current_node;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (node != NULL, FALSE);
	current_node = _vala_code_node_ref0 (node);
	while (TRUE) {
		ValaCodeNode* _tmp0_;
		ValaTryStatement* try_stmt;
		gboolean _tmp1_ = FALSE;
		ValaCodeNode* _tmp2_;
		if (!(current_node != NULL)) {
			break;
		}
		try_stmt = _vala_code_node_ref0 ((_tmp0_ = vala_code_node_get_parent_node (current_node), VALA_IS_TRY_STATEMENT (_tmp0_) ? ((ValaTryStatement*) _tmp0_) : NULL));
		if (try_stmt != NULL) {
			_tmp1_ = VALA_CODE_NODE (vala_try_statement_get_finally_body (try_stmt)) == current_node;
		} else {
			_tmp1_ = FALSE;
		}
		if (_tmp1_) {
			result = TRUE;
			_vala_code_node_unref0 (try_stmt);
			_vala_code_node_unref0 (current_node);
			return result;
		}
		current_node = (_tmp2_ = _vala_code_node_ref0 (vala_code_node_get_parent_node (current_node)), _vala_code_node_unref0 (current_node), _tmp2_);
		_vala_code_node_unref0 (try_stmt);
	}
	result = FALSE;
	_vala_code_node_unref0 (current_node);
	return result;
}


static void vala_gerror_module_real_add_simple_check (ValaCCodeModule* base, ValaCodeNode* node, ValaCCodeFragment* cfrag, gboolean always_fails) {
	ValaGErrorModule * self;
	ValaCCodeExpression* inner_error;
	ValaCCodeStatement* cerror_handler;
	self = (ValaGErrorModule*) base;
	g_return_if_fail (node != NULL);
	g_return_if_fail (cfrag != NULL);
	((ValaCCodeBaseModule*) self)->current_method_inner_error = TRUE;
	inner_error = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "_inner_error_");
	cerror_handler = NULL;
	if (((ValaCCodeBaseModule*) self)->current_try != NULL) {
		ValaCCodeBlock* cerror_block;
		ValaCCodeFragment* free_frag;
		ValaArrayList* error_types;
		gboolean has_general_catch_clause;
		ValaCCodeStatement* _tmp21_;
		cerror_block = vala_ccode_block_new ();
		free_frag = vala_ccode_fragment_new ();
		vala_ccode_base_module_append_error_free ((ValaCCodeBaseModule*) self, ((ValaCCodeBaseModule*) self)->current_symbol, free_frag, ((ValaCCodeBaseModule*) self)->current_try);
		vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) free_frag);
		error_types = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, g_direct_equal);
		{
			ValaList* _tmp0_;
			ValaIterator* _tmp1_;
			ValaIterator* _node_error_type_it;
			_node_error_type_it = (_tmp1_ = vala_iterable_iterator ((ValaIterable*) (_tmp0_ = vala_code_node_get_error_types (node))), _vala_collection_object_unref0 (_tmp0_), _tmp1_);
			while (TRUE) {
				ValaDataType* node_error_type;
				if (!vala_iterator_next (_node_error_type_it)) {
					break;
				}
				node_error_type = (ValaDataType*) vala_iterator_get (_node_error_type_it);
				vala_collection_add ((ValaCollection*) error_types, node_error_type);
				_vala_code_node_unref0 (node_error_type);
			}
			_vala_collection_object_unref0 (_node_error_type_it);
		}
		has_general_catch_clause = FALSE;
		if (!self->priv->is_in_catch) {
			ValaArrayList* handled_error_types;
			handled_error_types = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, g_direct_equal);
			{
				ValaList* _tmp2_;
				ValaIterator* _tmp3_;
				ValaIterator* _clause_it;
				_clause_it = (_tmp3_ = vala_iterable_iterator ((ValaIterable*) (_tmp2_ = vala_try_statement_get_catch_clauses (((ValaCCodeBaseModule*) self)->current_try))), _vala_collection_object_unref0 (_tmp2_), _tmp3_);
				while (TRUE) {
					ValaCatchClause* clause;
					ValaCCodeGotoStatement* cgoto_stmt;
					if (!vala_iterator_next (_clause_it)) {
						break;
					}
					clause = (ValaCatchClause*) vala_iterator_get (_clause_it);
					{
						ValaIterator* _node_error_type_it;
						_node_error_type_it = vala_iterable_iterator ((ValaIterable*) error_types);
						while (TRUE) {
							ValaDataType* node_error_type;
							gboolean _tmp4_ = FALSE;
							if (!vala_iterator_next (_node_error_type_it)) {
								break;
							}
							node_error_type = (ValaDataType*) vala_iterator_get (_node_error_type_it);
							if (vala_catch_clause_get_error_type (clause) == NULL) {
								_tmp4_ = TRUE;
							} else {
								_tmp4_ = vala_data_type_compatible (node_error_type, vala_catch_clause_get_error_type (clause));
							}
							if (_tmp4_) {
								vala_collection_add ((ValaCollection*) handled_error_types, node_error_type);
							}
							_vala_code_node_unref0 (node_error_type);
						}
						_vala_collection_object_unref0 (_node_error_type_it);
					}
					{
						ValaIterator* _handled_error_type_it;
						_handled_error_type_it = vala_iterable_iterator ((ValaIterable*) handled_error_types);
						while (TRUE) {
							ValaDataType* handled_error_type;
							if (!vala_iterator_next (_handled_error_type_it)) {
								break;
							}
							handled_error_type = (ValaDataType*) vala_iterator_get (_handled_error_type_it);
							vala_collection_remove ((ValaCollection*) error_types, handled_error_type);
							_vala_code_node_unref0 (handled_error_type);
						}
						_vala_collection_object_unref0 (_handled_error_type_it);
					}
					vala_collection_clear ((ValaCollection*) handled_error_types);
					cgoto_stmt = vala_ccode_goto_statement_new (vala_catch_clause_get_clabel_name (clause));
					if (vala_data_type_equals (vala_catch_clause_get_error_type (clause), (ValaDataType*) ((ValaCCodeBaseModule*) self)->gerror_type)) {
						has_general_catch_clause = TRUE;
						vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) cgoto_stmt);
						_vala_code_node_unref0 (clause);
						_vala_ccode_node_unref0 (cgoto_stmt);
						break;
					} else {
						ValaDataType* _tmp5_;
						ValaErrorType* catch_type;
						ValaCCodeBlock* cgoto_block;
						catch_type = _vala_code_node_ref0 ((_tmp5_ = vala_catch_clause_get_error_type (clause), VALA_IS_ERROR_TYPE (_tmp5_) ? ((ValaErrorType*) _tmp5_) : NULL));
						cgoto_block = vala_ccode_block_new ();
						vala_ccode_block_add_statement (cgoto_block, (ValaCCodeNode*) cgoto_stmt);
						if (vala_error_type_get_error_code (catch_type) != NULL) {
							ValaCCodeIdentifier* _tmp6_;
							ValaCCodeFunctionCall* _tmp7_;
							ValaCCodeFunctionCall* error_match;
							ValaCCodeIdentifier* _tmp9_;
							char* _tmp8_;
							ValaCCodeIdentifier* _tmp11_;
							char* _tmp10_;
							ValaCCodeIfStatement* _tmp12_;
							error_match = (_tmp7_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp6_ = vala_ccode_identifier_new ("g_error_matches"))), _vala_ccode_node_unref0 (_tmp6_), _tmp7_);
							vala_ccode_function_call_add_argument (error_match, inner_error);
							vala_ccode_function_call_add_argument (error_match, (ValaCCodeExpression*) (_tmp9_ = vala_ccode_identifier_new (_tmp8_ = vala_typesymbol_get_upper_case_cname (vala_data_type_get_data_type ((ValaDataType*) catch_type), NULL))));
							_vala_ccode_node_unref0 (_tmp9_);
							_g_free0 (_tmp8_);
							vala_ccode_function_call_add_argument (error_match, (ValaCCodeExpression*) (_tmp11_ = vala_ccode_identifier_new (_tmp10_ = vala_typesymbol_get_cname ((ValaTypeSymbol*) vala_error_type_get_error_code (catch_type), FALSE))));
							_vala_ccode_node_unref0 (_tmp11_);
							_g_free0 (_tmp10_);
							vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp12_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) error_match, (ValaCCodeStatement*) cgoto_block, NULL)));
							_vala_ccode_node_unref0 (_tmp12_);
							_vala_ccode_node_unref0 (error_match);
						} else {
							ValaCCodeIdentifier* _tmp15_;
							char* _tmp14_;
							ValaCCodeMemberAccess* _tmp13_;
							ValaCCodeBinaryExpression* _tmp16_;
							ValaCCodeBinaryExpression* ccond;
							ValaCCodeIfStatement* _tmp17_;
							ccond = (_tmp16_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) (_tmp13_ = vala_ccode_member_access_new_pointer (inner_error, "domain")), (ValaCCodeExpression*) (_tmp15_ = vala_ccode_identifier_new (_tmp14_ = vala_typesymbol_get_upper_case_cname (vala_data_type_get_data_type (vala_catch_clause_get_error_type (clause)), NULL)))), _vala_ccode_node_unref0 (_tmp15_), _g_free0 (_tmp14_), _vala_ccode_node_unref0 (_tmp13_), _tmp16_);
							vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp17_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) ccond, (ValaCCodeStatement*) cgoto_block, NULL)));
							_vala_ccode_node_unref0 (_tmp17_);
							_vala_ccode_node_unref0 (ccond);
						}
						_vala_code_node_unref0 (catch_type);
						_vala_ccode_node_unref0 (cgoto_block);
					}
					_vala_code_node_unref0 (clause);
					_vala_ccode_node_unref0 (cgoto_stmt);
				}
				_vala_collection_object_unref0 (_clause_it);
			}
			_vala_collection_object_unref0 (handled_error_types);
		}
		if (has_general_catch_clause) {
		} else {
			if (vala_collection_get_size ((ValaCollection*) error_types) > 0) {
				ValaCCodeGotoStatement* _tmp19_;
				char* _tmp18_;
				vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp19_ = vala_ccode_goto_statement_new (_tmp18_ = g_strdup_printf ("__finally%d", self->priv->current_try_id))));
				_vala_ccode_node_unref0 (_tmp19_);
				_g_free0 (_tmp18_);
			} else {
				if (vala_gerror_module_in_finally_block (self, node)) {
				} else {
					ValaCCodeStatement* _tmp20_;
					_tmp20_ = vala_gerror_module_uncaught_error_statement (self, inner_error, cerror_block, TRUE);
					_vala_ccode_node_unref0 (_tmp20_);
				}
			}
		}
		cerror_handler = (_tmp21_ = _vala_ccode_node_ref0 ((ValaCCodeStatement*) cerror_block), _vala_ccode_node_unref0 (cerror_handler), _tmp21_);
		_vala_ccode_node_unref0 (cerror_block);
		_vala_ccode_node_unref0 (free_frag);
		_vala_collection_object_unref0 (error_types);
	} else {
		gboolean _tmp22_ = FALSE;
		if (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self) != NULL) {
			ValaList* _tmp23_;
			_tmp22_ = vala_collection_get_size ((ValaCollection*) (_tmp23_ = vala_code_node_get_error_types ((ValaCodeNode*) vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self)))) > 0;
			_vala_collection_object_unref0 (_tmp23_);
		} else {
			_tmp22_ = FALSE;
		}
		if (_tmp22_) {
			ValaCCodeBinaryExpression* ccond;
			ccond = NULL;
			{
				ValaList* _tmp24_;
				ValaIterator* _tmp25_;
				ValaIterator* _error_type_it;
				_error_type_it = (_tmp25_ = vala_iterable_iterator ((ValaIterable*) (_tmp24_ = vala_code_node_get_error_types ((ValaCodeNode*) vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self)))), _vala_collection_object_unref0 (_tmp24_), _tmp25_);
				while (TRUE) {
					ValaDataType* error_type;
					ValaCCodeIdentifier* _tmp29_;
					char* _tmp28_;
					ValaCCodeMemberAccess* _tmp27_;
					ValaCCodeBinaryExpression* _tmp30_;
					ValaCCodeBinaryExpression* domain_check;
					if (!vala_iterator_next (_error_type_it)) {
						break;
					}
					error_type = (ValaDataType*) vala_iterator_get (_error_type_it);
					if (vala_data_type_equals (error_type, (ValaDataType*) ((ValaCCodeBaseModule*) self)->gerror_type)) {
						ValaCCodeBinaryExpression* _tmp26_;
						ccond = (_tmp26_ = NULL, _vala_ccode_node_unref0 (ccond), _tmp26_);
						_vala_code_node_unref0 (error_type);
						break;
					}
					domain_check = (_tmp30_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) (_tmp27_ = vala_ccode_member_access_new_pointer (inner_error, "domain")), (ValaCCodeExpression*) (_tmp29_ = vala_ccode_identifier_new (_tmp28_ = vala_typesymbol_get_upper_case_cname (vala_data_type_get_data_type (error_type), NULL)))), _vala_ccode_node_unref0 (_tmp29_), _g_free0 (_tmp28_), _vala_ccode_node_unref0 (_tmp27_), _tmp30_);
					if (ccond == NULL) {
						ValaCCodeBinaryExpression* _tmp31_;
						ccond = (_tmp31_ = _vala_ccode_node_ref0 (domain_check), _vala_ccode_node_unref0 (ccond), _tmp31_);
					} else {
						ValaCCodeBinaryExpression* _tmp32_;
						ccond = (_tmp32_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, (ValaCCodeExpression*) ccond, (ValaCCodeExpression*) domain_check), _vala_ccode_node_unref0 (ccond), _tmp32_);
					}
					_vala_code_node_unref0 (error_type);
					_vala_ccode_node_unref0 (domain_check);
				}
				_vala_collection_object_unref0 (_error_type_it);
			}
			if (ccond == NULL) {
				ValaCCodeStatement* _tmp33_;
				cerror_handler = (_tmp33_ = vala_gerror_module_return_with_exception (self, inner_error), _vala_ccode_node_unref0 (cerror_handler), _tmp33_);
			} else {
				ValaCCodeBlock* cerror_block;
				ValaCCodeIfStatement* _tmp36_;
				ValaCCodeStatement* _tmp35_;
				ValaCCodeStatement* _tmp34_;
				ValaCCodeStatement* _tmp37_;
				cerror_block = vala_ccode_block_new ();
				vala_ccode_block_add_statement (cerror_block, (ValaCCodeNode*) (_tmp36_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) ccond, _tmp34_ = vala_gerror_module_return_with_exception (self, inner_error), _tmp35_ = vala_gerror_module_uncaught_error_statement (self, inner_error, NULL, FALSE))));
				_vala_ccode_node_unref0 (_tmp36_);
				_vala_ccode_node_unref0 (_tmp35_);
				_vala_ccode_node_unref0 (_tmp34_);
				cerror_handler = (_tmp37_ = _vala_ccode_node_ref0 ((ValaCCodeStatement*) cerror_block), _vala_ccode_node_unref0 (cerror_handler), _tmp37_);
				_vala_ccode_node_unref0 (cerror_block);
			}
			_vala_ccode_node_unref0 (ccond);
		} else {
			ValaCCodeStatement* _tmp38_;
			cerror_handler = (_tmp38_ = vala_gerror_module_uncaught_error_statement (self, inner_error, NULL, FALSE), _vala_ccode_node_unref0 (cerror_handler), _tmp38_);
		}
	}
	if (always_fails) {
		vala_ccode_fragment_append (cfrag, (ValaCCodeNode*) cerror_handler);
	} else {
		ValaCCodeConstant* _tmp39_;
		ValaCCodeBinaryExpression* _tmp40_;
		ValaCCodeBinaryExpression* ccond;
		ValaCCodeIfStatement* _tmp41_;
		ccond = (_tmp40_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, inner_error, (ValaCCodeExpression*) (_tmp39_ = vala_ccode_constant_new ("NULL"))), _vala_ccode_node_unref0 (_tmp39_), _tmp40_);
		vala_ccode_fragment_append (cfrag, (ValaCCodeNode*) (_tmp41_ = vala_ccode_if_statement_new ((ValaCCodeExpression*) ccond, cerror_handler, NULL)));
		_vala_ccode_node_unref0 (_tmp41_);
		_vala_ccode_node_unref0 (ccond);
	}
	_vala_ccode_node_unref0 (inner_error);
	_vala_ccode_node_unref0 (cerror_handler);
}


static void vala_gerror_module_real_visit_try_statement (ValaCCodeModule* base, ValaTryStatement* stmt) {
	ValaGErrorModule * self;
	gint this_try_id;
	ValaTryStatement* old_try;
	gint old_try_id;
	gboolean old_is_in_catch;
	ValaTryStatement* _tmp0_;
	ValaTryStatement* _tmp7_;
	ValaCCodeFragment* cfrag;
	ValaCCodeLabel* _tmp13_;
	char* _tmp12_;
	self = (ValaGErrorModule*) base;
	g_return_if_fail (stmt != NULL);
	this_try_id = self->priv->next_try_id++;
	old_try = _vala_code_node_ref0 (((ValaCCodeBaseModule*) self)->current_try);
	old_try_id = self->priv->current_try_id;
	old_is_in_catch = self->priv->is_in_catch;
	((ValaCCodeBaseModule*) self)->current_try = (_tmp0_ = _vala_code_node_ref0 (stmt), _vala_code_node_unref0 (((ValaCCodeBaseModule*) self)->current_try), _tmp0_);
	self->priv->current_try_id = this_try_id;
	self->priv->is_in_catch = TRUE;
	{
		ValaList* _tmp1_;
		ValaIterator* _tmp2_;
		ValaIterator* _clause_it;
		_clause_it = (_tmp2_ = vala_iterable_iterator ((ValaIterable*) (_tmp1_ = vala_try_statement_get_catch_clauses (stmt))), _vala_collection_object_unref0 (_tmp1_), _tmp2_);
		while (TRUE) {
			ValaCatchClause* clause;
			char* _tmp4_;
			char* _tmp3_;
			if (!vala_iterator_next (_clause_it)) {
				break;
			}
			clause = (ValaCatchClause*) vala_iterator_get (_clause_it);
			vala_catch_clause_set_clabel_name (clause, _tmp4_ = g_strdup_printf ("__catch%d_%s", this_try_id, _tmp3_ = vala_data_type_get_lower_case_cname (vala_catch_clause_get_error_type (clause), NULL)));
			_g_free0 (_tmp4_);
			_g_free0 (_tmp3_);
			_vala_code_node_unref0 (clause);
		}
		_vala_collection_object_unref0 (_clause_it);
	}
	if (vala_try_statement_get_finally_body (stmt) != NULL) {
		vala_code_node_accept ((ValaCodeNode*) vala_try_statement_get_finally_body (stmt), (ValaCodeVisitor*) vala_ccode_module_get_codegen ((ValaCCodeModule*) self));
	}
	self->priv->is_in_catch = FALSE;
	vala_code_node_accept ((ValaCodeNode*) vala_try_statement_get_body (stmt), (ValaCodeVisitor*) vala_ccode_module_get_codegen ((ValaCCodeModule*) self));
	self->priv->is_in_catch = TRUE;
	{
		ValaList* _tmp5_;
		ValaIterator* _tmp6_;
		ValaIterator* _clause_it;
		_clause_it = (_tmp6_ = vala_iterable_iterator ((ValaIterable*) (_tmp5_ = vala_try_statement_get_catch_clauses (stmt))), _vala_collection_object_unref0 (_tmp5_), _tmp6_);
		while (TRUE) {
			ValaCatchClause* clause;
			if (!vala_iterator_next (_clause_it)) {
				break;
			}
			clause = (ValaCatchClause*) vala_iterator_get (_clause_it);
			vala_code_node_accept ((ValaCodeNode*) clause, (ValaCodeVisitor*) vala_ccode_module_get_codegen ((ValaCCodeModule*) self));
			_vala_code_node_unref0 (clause);
		}
		_vala_collection_object_unref0 (_clause_it);
	}
	((ValaCCodeBaseModule*) self)->current_try = (_tmp7_ = _vala_code_node_ref0 (old_try), _vala_code_node_unref0 (((ValaCCodeBaseModule*) self)->current_try), _tmp7_);
	self->priv->current_try_id = old_try_id;
	self->priv->is_in_catch = old_is_in_catch;
	cfrag = vala_ccode_fragment_new ();
	vala_ccode_fragment_append (cfrag, vala_code_node_get_ccodenode ((ValaCodeNode*) vala_try_statement_get_body (stmt)));
	{
		ValaList* _tmp8_;
		ValaIterator* _tmp9_;
		ValaIterator* _clause_it;
		_clause_it = (_tmp9_ = vala_iterable_iterator ((ValaIterable*) (_tmp8_ = vala_try_statement_get_catch_clauses (stmt))), _vala_collection_object_unref0 (_tmp8_), _tmp9_);
		while (TRUE) {
			ValaCatchClause* clause;
			ValaCCodeGotoStatement* _tmp11_;
			char* _tmp10_;
			if (!vala_iterator_next (_clause_it)) {
				break;
			}
			clause = (ValaCatchClause*) vala_iterator_get (_clause_it);
			vala_ccode_fragment_append (cfrag, (ValaCCodeNode*) (_tmp11_ = vala_ccode_goto_statement_new (_tmp10_ = g_strdup_printf ("__finally%d", this_try_id))));
			_vala_ccode_node_unref0 (_tmp11_);
			_g_free0 (_tmp10_);
			vala_ccode_fragment_append (cfrag, vala_code_node_get_ccodenode ((ValaCodeNode*) clause));
			_vala_code_node_unref0 (clause);
		}
		_vala_collection_object_unref0 (_clause_it);
	}
	vala_ccode_fragment_append (cfrag, (ValaCCodeNode*) (_tmp13_ = vala_ccode_label_new (_tmp12_ = g_strdup_printf ("__finally%d", this_try_id))));
	_vala_ccode_node_unref0 (_tmp13_);
	_g_free0 (_tmp12_);
	if (vala_try_statement_get_finally_body (stmt) != NULL) {
		vala_ccode_fragment_append (cfrag, vala_code_node_get_ccodenode ((ValaCodeNode*) vala_try_statement_get_finally_body (stmt)));
	}
	vala_ccode_module_add_simple_check ((ValaCCodeModule*) self, (ValaCodeNode*) stmt, cfrag, !vala_try_statement_get_after_try_block_reachable (stmt));
	vala_code_node_set_ccodenode ((ValaCodeNode*) stmt, (ValaCCodeNode*) cfrag);
	_vala_code_node_unref0 (old_try);
	_vala_ccode_node_unref0 (cfrag);
}


static void vala_gerror_module_real_visit_catch_clause (ValaCCodeModule* base, ValaCatchClause* clause) {
	ValaGErrorModule * self;
	ValaErrorType* error_type;
	ValaCCodeFragment* cfrag;
	ValaCCodeLabel* _tmp0_;
	ValaCCodeBlock* cblock;
	char* variable_name;
	gboolean _tmp3_ = FALSE;
	ValaCCodeExpressionStatement* _tmp18_;
	ValaCCodeAssignment* _tmp17_;
	ValaCCodeConstant* _tmp16_;
	ValaCCodeExpression* _tmp15_;
	self = (ValaGErrorModule*) base;
	g_return_if_fail (clause != NULL);
	if (vala_catch_clause_get_error_variable (clause) != NULL) {
		vala_symbol_set_active ((ValaSymbol*) vala_catch_clause_get_error_variable (clause), TRUE);
	}
	((ValaCCodeBaseModule*) self)->current_method_inner_error = TRUE;
	error_type = _vala_code_node_ref0 (VALA_ERROR_TYPE (vala_catch_clause_get_error_type (clause)));
	if (vala_error_type_get_error_domain (error_type) != NULL) {
		vala_ccode_base_module_generate_error_domain_declaration ((ValaCCodeBaseModule*) self, vala_error_type_get_error_domain (error_type), ((ValaCCodeBaseModule*) self)->source_declarations);
	}
	vala_code_node_accept_children ((ValaCodeNode*) clause, (ValaCodeVisitor*) vala_ccode_module_get_codegen ((ValaCCodeModule*) self));
	cfrag = vala_ccode_fragment_new ();
	vala_ccode_fragment_append (cfrag, (ValaCCodeNode*) (_tmp0_ = vala_ccode_label_new (vala_catch_clause_get_clabel_name (clause))));
	_vala_ccode_node_unref0 (_tmp0_);
	cblock = vala_ccode_block_new ();
	variable_name = NULL;
	if (vala_catch_clause_get_variable_name (clause) != NULL) {
		char* _tmp1_;
		variable_name = (_tmp1_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, vala_catch_clause_get_variable_name (clause)), _g_free0 (variable_name), _tmp1_);
	} else {
		char* _tmp2_;
		variable_name = (_tmp2_ = g_strdup ("__err"), _g_free0 (variable_name), _tmp2_);
	}
	if (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self) != NULL) {
		_tmp3_ = vala_method_get_coroutine (vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self));
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		ValaCCodeExpressionStatement* _tmp7_;
		ValaCCodeAssignment* _tmp6_;
		ValaCCodeExpression* _tmp5_;
		ValaCCodeExpression* _tmp4_;
		vala_ccode_struct_add_field (((ValaCCodeBaseModule*) self)->closure_struct, "GError *", variable_name, NULL);
		vala_ccode_block_add_statement (cblock, (ValaCCodeNode*) (_tmp7_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) (_tmp6_ = vala_ccode_assignment_new (_tmp4_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, variable_name), _tmp5_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "_inner_error_"), VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE)))));
		_vala_ccode_node_unref0 (_tmp7_);
		_vala_ccode_node_unref0 (_tmp6_);
		_vala_ccode_node_unref0 (_tmp5_);
		_vala_ccode_node_unref0 (_tmp4_);
	} else {
		if (vala_catch_clause_get_variable_name (clause) != NULL) {
			ValaCCodeDeclaration* _cdecl_;
			ValaCCodeVariableDeclarator* _tmp9_;
			ValaCCodeExpression* _tmp8_;
			_cdecl_ = vala_ccode_declaration_new ("GError *");
			vala_ccode_declaration_add_declarator (_cdecl_, (ValaCCodeDeclarator*) (_tmp9_ = vala_ccode_variable_declarator_new (variable_name, _tmp8_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "_inner_error_"), NULL)));
			_vala_ccode_node_unref0 (_tmp9_);
			_vala_ccode_node_unref0 (_tmp8_);
			vala_ccode_block_add_statement (cblock, (ValaCCodeNode*) _cdecl_);
			_vala_ccode_node_unref0 (_cdecl_);
		} else {
			ValaCCodeIdentifier* _tmp10_;
			ValaCCodeFunctionCall* _tmp11_;
			ValaCCodeFunctionCall* cclear;
			ValaCCodeUnaryExpression* _tmp13_;
			ValaCCodeExpression* _tmp12_;
			ValaCCodeExpressionStatement* _tmp14_;
			cclear = (_tmp11_ = vala_ccode_function_call_new ((ValaCCodeExpression*) (_tmp10_ = vala_ccode_identifier_new ("g_clear_error"))), _vala_ccode_node_unref0 (_tmp10_), _tmp11_);
			vala_ccode_function_call_add_argument (cclear, (ValaCCodeExpression*) (_tmp13_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp12_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "_inner_error_"))));
			_vala_ccode_node_unref0 (_tmp13_);
			_vala_ccode_node_unref0 (_tmp12_);
			vala_ccode_block_add_statement (cblock, (ValaCCodeNode*) (_tmp14_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) cclear)));
			_vala_ccode_node_unref0 (_tmp14_);
			_vala_ccode_node_unref0 (cclear);
		}
	}
	vala_ccode_block_add_statement (cblock, (ValaCCodeNode*) (_tmp18_ = vala_ccode_expression_statement_new ((ValaCCodeExpression*) (_tmp17_ = vala_ccode_assignment_new (_tmp15_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, "_inner_error_"), (ValaCCodeExpression*) (_tmp16_ = vala_ccode_constant_new ("NULL")), VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE)))));
	_vala_ccode_node_unref0 (_tmp18_);
	_vala_ccode_node_unref0 (_tmp17_);
	_vala_ccode_node_unref0 (_tmp16_);
	_vala_ccode_node_unref0 (_tmp15_);
	vala_ccode_block_add_statement (cblock, vala_code_node_get_ccodenode ((ValaCodeNode*) vala_catch_clause_get_body (clause)));
	vala_ccode_fragment_append (cfrag, (ValaCCodeNode*) cblock);
	vala_code_node_set_ccodenode ((ValaCodeNode*) clause, (ValaCCodeNode*) cfrag);
	_vala_code_node_unref0 (error_type);
	_vala_ccode_node_unref0 (cfrag);
	_vala_ccode_node_unref0 (cblock);
	_g_free0 (variable_name);
}


static void vala_gerror_module_real_append_local_free (ValaCCodeBaseModule* base, ValaSymbol* sym, ValaCCodeFragment* cfrag, gboolean stop_at_loop) {
	ValaGErrorModule * self;
	ValaBlock* finally_block;
	self = (ValaGErrorModule*) base;
	g_return_if_fail (sym != NULL);
	g_return_if_fail (cfrag != NULL);
	finally_block = _vala_code_node_ref0 (VALA_BLOCK (NULL));
	if (VALA_IS_TRY_STATEMENT (vala_code_node_get_parent_node ((ValaCodeNode*) sym))) {
		ValaBlock* _tmp1_;
		ValaCodeNode* _tmp0_;
		finally_block = (_tmp1_ = _vala_code_node_ref0 (vala_try_statement_get_finally_body ((_tmp0_ = vala_code_node_get_parent_node ((ValaCodeNode*) sym), VALA_IS_TRY_STATEMENT (_tmp0_) ? ((ValaTryStatement*) _tmp0_) : NULL))), _vala_code_node_unref0 (finally_block), _tmp1_);
	} else {
		if (VALA_IS_CATCH_CLAUSE (vala_code_node_get_parent_node ((ValaCodeNode*) sym))) {
			ValaBlock* _tmp3_;
			ValaCodeNode* _tmp2_;
			finally_block = (_tmp3_ = _vala_code_node_ref0 (vala_try_statement_get_finally_body ((_tmp2_ = vala_code_node_get_parent_node (vala_code_node_get_parent_node ((ValaCodeNode*) sym)), VALA_IS_TRY_STATEMENT (_tmp2_) ? ((ValaTryStatement*) _tmp2_) : NULL))), _vala_code_node_unref0 (finally_block), _tmp3_);
		}
	}
	if (finally_block != NULL) {
		vala_ccode_fragment_append (cfrag, vala_code_node_get_ccodenode ((ValaCodeNode*) finally_block));
	}
	VALA_CCODE_BASE_MODULE_CLASS (vala_gerror_module_parent_class)->append_local_free ((ValaCCodeBaseModule*) VALA_CCODE_DELEGATE_MODULE (self), sym, cfrag, stop_at_loop);
	_vala_code_node_unref0 (finally_block);
}


static void vala_gerror_module_class_init (ValaGErrorModuleClass * klass) {
	vala_gerror_module_parent_class = g_type_class_peek_parent (klass);
	VALA_CCODE_MODULE_CLASS (klass)->finalize = vala_gerror_module_finalize;
	g_type_class_add_private (klass, sizeof (ValaGErrorModulePrivate));
	VALA_CCODE_BASE_MODULE_CLASS (klass)->generate_error_domain_declaration = vala_gerror_module_real_generate_error_domain_declaration;
	VALA_CCODE_MODULE_CLASS (klass)->visit_error_domain = vala_gerror_module_real_visit_error_domain;
	VALA_CCODE_MODULE_CLASS (klass)->visit_throw_statement = vala_gerror_module_real_visit_throw_statement;
	VALA_GERROR_MODULE_CLASS (klass)->return_with_exception = vala_gerror_module_real_return_with_exception;
	VALA_CCODE_MODULE_CLASS (klass)->add_simple_check = vala_gerror_module_real_add_simple_check;
	VALA_CCODE_MODULE_CLASS (klass)->visit_try_statement = vala_gerror_module_real_visit_try_statement;
	VALA_CCODE_MODULE_CLASS (klass)->visit_catch_clause = vala_gerror_module_real_visit_catch_clause;
	VALA_CCODE_BASE_MODULE_CLASS (klass)->append_local_free = vala_gerror_module_real_append_local_free;
}


static void vala_gerror_module_instance_init (ValaGErrorModule * self) {
	self->priv = VALA_GERROR_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_gerror_module_finalize (ValaCCodeModule* obj) {
	ValaGErrorModule * self;
	self = VALA_GERROR_MODULE (obj);
	VALA_CCODE_MODULE_CLASS (vala_gerror_module_parent_class)->finalize (obj);
}


GType vala_gerror_module_get_type (void) {
	static volatile gsize vala_gerror_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_gerror_module_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaGErrorModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gerror_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGErrorModule), 0, (GInstanceInitFunc) vala_gerror_module_instance_init, NULL };
		GType vala_gerror_module_type_id;
		vala_gerror_module_type_id = g_type_register_static (VALA_TYPE_CCODE_DELEGATE_MODULE, "ValaGErrorModule", &g_define_type_info, 0);
		g_once_init_leave (&vala_gerror_module_type_id__volatile, vala_gerror_module_type_id);
	}
	return vala_gerror_module_type_id__volatile;
}




