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

/* valacodevisitor.vala
 *
 * Copyright (C) 2006-2010  Jürg Billeter
 * Copyright (C) 2006-2008  Raffaele Sandrini
 *
 * 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>
 *	Raffaele Sandrini <raffaele@sandrini.ch>
 */

#include "vala.h"
#include <glib.h>
#include <gobject/gvaluecollector.h>

typedef struct _ValaParamSpecCodeVisitor ValaParamSpecCodeVisitor;

struct _ValaParamSpecCodeVisitor {
	GParamSpec parent_instance;
};

static gpointer vala_code_visitor_parent_class = NULL;

static void vala_code_visitor_real_visit_source_file (ValaCodeVisitor* self,
                                               ValaSourceFile* source_file);
static void vala_code_visitor_real_visit_namespace (ValaCodeVisitor* self,
                                             ValaNamespace* ns);
static void vala_code_visitor_real_visit_class (ValaCodeVisitor* self,
                                         ValaClass* cl);
static void vala_code_visitor_real_visit_struct (ValaCodeVisitor* self,
                                          ValaStruct* st);
static void vala_code_visitor_real_visit_interface (ValaCodeVisitor* self,
                                             ValaInterface* iface);
static void vala_code_visitor_real_visit_enum (ValaCodeVisitor* self,
                                        ValaEnum* en);
static void vala_code_visitor_real_visit_enum_value (ValaCodeVisitor* self,
                                              ValaEnumValue* ev);
static void vala_code_visitor_real_visit_error_domain (ValaCodeVisitor* self,
                                                ValaErrorDomain* edomain);
static void vala_code_visitor_real_visit_error_code (ValaCodeVisitor* self,
                                              ValaErrorCode* ecode);
static void vala_code_visitor_real_visit_delegate (ValaCodeVisitor* self,
                                            ValaDelegate* d);
static void vala_code_visitor_real_visit_constant (ValaCodeVisitor* self,
                                            ValaConstant* c);
static void vala_code_visitor_real_visit_field (ValaCodeVisitor* self,
                                         ValaField* f);
static void vala_code_visitor_real_visit_method (ValaCodeVisitor* self,
                                          ValaMethod* m);
static void vala_code_visitor_real_visit_creation_method (ValaCodeVisitor* self,
                                                   ValaCreationMethod* m);
static void vala_code_visitor_real_visit_formal_parameter (ValaCodeVisitor* self,
                                                    ValaParameter* p);
static void vala_code_visitor_real_visit_property (ValaCodeVisitor* self,
                                            ValaProperty* prop);
static void vala_code_visitor_real_visit_property_accessor (ValaCodeVisitor* self,
                                                     ValaPropertyAccessor* acc);
static void vala_code_visitor_real_visit_signal (ValaCodeVisitor* self,
                                          ValaSignal* sig);
static void vala_code_visitor_real_visit_constructor (ValaCodeVisitor* self,
                                               ValaConstructor* c);
static void vala_code_visitor_real_visit_destructor (ValaCodeVisitor* self,
                                              ValaDestructor* d);
static void vala_code_visitor_real_visit_type_parameter (ValaCodeVisitor* self,
                                                  ValaTypeParameter* p);
static void vala_code_visitor_real_visit_using_directive (ValaCodeVisitor* self,
                                                   ValaUsingDirective* ns);
static void vala_code_visitor_real_visit_data_type (ValaCodeVisitor* self,
                                             ValaDataType* type);
static void vala_code_visitor_real_visit_block (ValaCodeVisitor* self,
                                         ValaBlock* b);
static void vala_code_visitor_real_visit_empty_statement (ValaCodeVisitor* self,
                                                   ValaEmptyStatement* stmt);
static void vala_code_visitor_real_visit_declaration_statement (ValaCodeVisitor* self,
                                                         ValaDeclarationStatement* stmt);
static void vala_code_visitor_real_visit_local_variable (ValaCodeVisitor* self,
                                                  ValaLocalVariable* local);
static void vala_code_visitor_real_visit_initializer_list (ValaCodeVisitor* self,
                                                    ValaInitializerList* list);
static void vala_code_visitor_real_visit_expression_statement (ValaCodeVisitor* self,
                                                        ValaExpressionStatement* stmt);
static void vala_code_visitor_real_visit_if_statement (ValaCodeVisitor* self,
                                                ValaIfStatement* stmt);
static void vala_code_visitor_real_visit_switch_statement (ValaCodeVisitor* self,
                                                    ValaSwitchStatement* stmt);
static void vala_code_visitor_real_visit_switch_section (ValaCodeVisitor* self,
                                                  ValaSwitchSection* section);
static void vala_code_visitor_real_visit_switch_label (ValaCodeVisitor* self,
                                                ValaSwitchLabel* label);
static void vala_code_visitor_real_visit_loop_statement (ValaCodeVisitor* self,
                                                  ValaLoopStatement* stmt);
static void vala_code_visitor_real_visit_while_statement (ValaCodeVisitor* self,
                                                   ValaWhileStatement* stmt);
static void vala_code_visitor_real_visit_do_statement (ValaCodeVisitor* self,
                                                ValaDoStatement* stmt);
static void vala_code_visitor_real_visit_for_statement (ValaCodeVisitor* self,
                                                 ValaForStatement* stmt);
static void vala_code_visitor_real_visit_foreach_statement (ValaCodeVisitor* self,
                                                     ValaForeachStatement* stmt);
static void vala_code_visitor_real_visit_break_statement (ValaCodeVisitor* self,
                                                   ValaBreakStatement* stmt);
static void vala_code_visitor_real_visit_continue_statement (ValaCodeVisitor* self,
                                                      ValaContinueStatement* stmt);
static void vala_code_visitor_real_visit_return_statement (ValaCodeVisitor* self,
                                                    ValaReturnStatement* stmt);
static void vala_code_visitor_real_visit_yield_statement (ValaCodeVisitor* self,
                                                   ValaYieldStatement* y);
static void vala_code_visitor_real_visit_throw_statement (ValaCodeVisitor* self,
                                                   ValaThrowStatement* stmt);
static void vala_code_visitor_real_visit_try_statement (ValaCodeVisitor* self,
                                                 ValaTryStatement* stmt);
static void vala_code_visitor_real_visit_catch_clause (ValaCodeVisitor* self,
                                                ValaCatchClause* clause);
static void vala_code_visitor_real_visit_lock_statement (ValaCodeVisitor* self,
                                                  ValaLockStatement* stmt);
static void vala_code_visitor_real_visit_unlock_statement (ValaCodeVisitor* self,
                                                    ValaUnlockStatement* stmt);
static void vala_code_visitor_real_visit_with_statement (ValaCodeVisitor* self,
                                                  ValaWithStatement* stmt);
static void vala_code_visitor_real_visit_delete_statement (ValaCodeVisitor* self,
                                                    ValaDeleteStatement* stmt);
static void vala_code_visitor_real_visit_expression (ValaCodeVisitor* self,
                                              ValaExpression* expr);
static void vala_code_visitor_real_visit_array_creation_expression (ValaCodeVisitor* self,
                                                             ValaArrayCreationExpression* expr);
static void vala_code_visitor_real_visit_boolean_literal (ValaCodeVisitor* self,
                                                   ValaBooleanLiteral* lit);
static void vala_code_visitor_real_visit_character_literal (ValaCodeVisitor* self,
                                                     ValaCharacterLiteral* lit);
static void vala_code_visitor_real_visit_integer_literal (ValaCodeVisitor* self,
                                                   ValaIntegerLiteral* lit);
static void vala_code_visitor_real_visit_real_literal (ValaCodeVisitor* self,
                                                ValaRealLiteral* lit);
static void vala_code_visitor_real_visit_regex_literal (ValaCodeVisitor* self,
                                                 ValaRegexLiteral* lit);
static void vala_code_visitor_real_visit_string_literal (ValaCodeVisitor* self,
                                                  ValaStringLiteral* lit);
static void vala_code_visitor_real_visit_template (ValaCodeVisitor* self,
                                            ValaTemplate* tmpl);
static void vala_code_visitor_real_visit_tuple (ValaCodeVisitor* self,
                                         ValaTuple* tuple);
static void vala_code_visitor_real_visit_null_literal (ValaCodeVisitor* self,
                                                ValaNullLiteral* lit);
static void vala_code_visitor_real_visit_member_access (ValaCodeVisitor* self,
                                                 ValaMemberAccess* expr);
static void vala_code_visitor_real_visit_method_call (ValaCodeVisitor* self,
                                               ValaMethodCall* expr);
static void vala_code_visitor_real_visit_element_access (ValaCodeVisitor* self,
                                                  ValaElementAccess* expr);
static void vala_code_visitor_real_visit_slice_expression (ValaCodeVisitor* self,
                                                    ValaSliceExpression* expr);
static void vala_code_visitor_real_visit_base_access (ValaCodeVisitor* self,
                                               ValaBaseAccess* expr);
static void vala_code_visitor_real_visit_postfix_expression (ValaCodeVisitor* self,
                                                      ValaPostfixExpression* expr);
static void vala_code_visitor_real_visit_object_creation_expression (ValaCodeVisitor* self,
                                                              ValaObjectCreationExpression* expr);
static void vala_code_visitor_real_visit_sizeof_expression (ValaCodeVisitor* self,
                                                     ValaSizeofExpression* expr);
static void vala_code_visitor_real_visit_typeof_expression (ValaCodeVisitor* self,
                                                     ValaTypeofExpression* expr);
static void vala_code_visitor_real_visit_unary_expression (ValaCodeVisitor* self,
                                                    ValaUnaryExpression* expr);
static void vala_code_visitor_real_visit_cast_expression (ValaCodeVisitor* self,
                                                   ValaCastExpression* expr);
static void vala_code_visitor_real_visit_named_argument (ValaCodeVisitor* self,
                                                  ValaNamedArgument* expr);
static void vala_code_visitor_real_visit_pointer_indirection (ValaCodeVisitor* self,
                                                       ValaPointerIndirection* expr);
static void vala_code_visitor_real_visit_addressof_expression (ValaCodeVisitor* self,
                                                        ValaAddressofExpression* expr);
static void vala_code_visitor_real_visit_reference_transfer_expression (ValaCodeVisitor* self,
                                                                 ValaReferenceTransferExpression* expr);
static void vala_code_visitor_real_visit_binary_expression (ValaCodeVisitor* self,
                                                     ValaBinaryExpression* expr);
static void vala_code_visitor_real_visit_type_check (ValaCodeVisitor* self,
                                              ValaTypeCheck* expr);
static void vala_code_visitor_real_visit_conditional_expression (ValaCodeVisitor* self,
                                                          ValaConditionalExpression* expr);
static void vala_code_visitor_real_visit_lambda_expression (ValaCodeVisitor* self,
                                                     ValaLambdaExpression* expr);
static void vala_code_visitor_real_visit_assignment (ValaCodeVisitor* self,
                                              ValaAssignment* a);
static void vala_code_visitor_real_visit_end_full_expression (ValaCodeVisitor* self,
                                                       ValaExpression* expr);
static void vala_code_visitor_finalize (ValaCodeVisitor * obj);
static GType vala_code_visitor_get_type_once (void);

/**
 * Visit operation called for source files.
 *
 * @param source_file a source file
 */
static void
vala_code_visitor_real_visit_source_file (ValaCodeVisitor* self,
                                          ValaSourceFile* source_file)
{
	g_return_if_fail (source_file != NULL);
}

void
vala_code_visitor_visit_source_file (ValaCodeVisitor* self,
                                     ValaSourceFile* source_file)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_source_file) {
		_klass_->visit_source_file (self, source_file);
	}
}

/**
 * Visit operation called for namespaces.
 *
 * @param ns a namespace
 */
static void
vala_code_visitor_real_visit_namespace (ValaCodeVisitor* self,
                                        ValaNamespace* ns)
{
	g_return_if_fail (ns != NULL);
}

void
vala_code_visitor_visit_namespace (ValaCodeVisitor* self,
                                   ValaNamespace* ns)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_namespace) {
		_klass_->visit_namespace (self, ns);
	}
}

/**
 * Visit operation called for classes.
 *
 * @param cl a class
 */
static void
vala_code_visitor_real_visit_class (ValaCodeVisitor* self,
                                    ValaClass* cl)
{
	g_return_if_fail (cl != NULL);
}

void
vala_code_visitor_visit_class (ValaCodeVisitor* self,
                               ValaClass* cl)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_class) {
		_klass_->visit_class (self, cl);
	}
}

/**
 * Visit operation called for structs.
 *
 * @param st a struct
 */
static void
vala_code_visitor_real_visit_struct (ValaCodeVisitor* self,
                                     ValaStruct* st)
{
	g_return_if_fail (st != NULL);
}

void
vala_code_visitor_visit_struct (ValaCodeVisitor* self,
                                ValaStruct* st)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_struct) {
		_klass_->visit_struct (self, st);
	}
}

/**
 * Visit operation called for interfaces.
 *
 * @param iface an interface
 */
static void
vala_code_visitor_real_visit_interface (ValaCodeVisitor* self,
                                        ValaInterface* iface)
{
	g_return_if_fail (iface != NULL);
}

void
vala_code_visitor_visit_interface (ValaCodeVisitor* self,
                                   ValaInterface* iface)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_interface) {
		_klass_->visit_interface (self, iface);
	}
}

/**
 * Visit operation called for enums.
 *
 * @param en an enum
 */
static void
vala_code_visitor_real_visit_enum (ValaCodeVisitor* self,
                                   ValaEnum* en)
{
	g_return_if_fail (en != NULL);
}

void
vala_code_visitor_visit_enum (ValaCodeVisitor* self,
                              ValaEnum* en)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_enum) {
		_klass_->visit_enum (self, en);
	}
}

/**
 * Visit operation called for enum values.
 *
 * @param ev an enum value
 */
static void
vala_code_visitor_real_visit_enum_value (ValaCodeVisitor* self,
                                         ValaEnumValue* ev)
{
	g_return_if_fail (ev != NULL);
}

void
vala_code_visitor_visit_enum_value (ValaCodeVisitor* self,
                                    ValaEnumValue* ev)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_enum_value) {
		_klass_->visit_enum_value (self, ev);
	}
}

/**
 * Visit operation called for error domains.
 *
 * @param edomain an error domain
 */
static void
vala_code_visitor_real_visit_error_domain (ValaCodeVisitor* self,
                                           ValaErrorDomain* edomain)
{
	g_return_if_fail (edomain != NULL);
}

void
vala_code_visitor_visit_error_domain (ValaCodeVisitor* self,
                                      ValaErrorDomain* edomain)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_error_domain) {
		_klass_->visit_error_domain (self, edomain);
	}
}

/**
 * Visit operation called for error codes.
 *
 * @param ecode an error code
 */
static void
vala_code_visitor_real_visit_error_code (ValaCodeVisitor* self,
                                         ValaErrorCode* ecode)
{
	g_return_if_fail (ecode != NULL);
}

void
vala_code_visitor_visit_error_code (ValaCodeVisitor* self,
                                    ValaErrorCode* ecode)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_error_code) {
		_klass_->visit_error_code (self, ecode);
	}
}

/**
 * Visit operation called for delegates.
 *
 * @param d a delegate
 */
static void
vala_code_visitor_real_visit_delegate (ValaCodeVisitor* self,
                                       ValaDelegate* d)
{
	g_return_if_fail (d != NULL);
}

void
vala_code_visitor_visit_delegate (ValaCodeVisitor* self,
                                  ValaDelegate* d)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_delegate) {
		_klass_->visit_delegate (self, d);
	}
}

/**
 * Visit operation called for constants.
 *
 * @param c a constant
 */
static void
vala_code_visitor_real_visit_constant (ValaCodeVisitor* self,
                                       ValaConstant* c)
{
	g_return_if_fail (c != NULL);
}

void
vala_code_visitor_visit_constant (ValaCodeVisitor* self,
                                  ValaConstant* c)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_constant) {
		_klass_->visit_constant (self, c);
	}
}

/**
 * Visit operation called for fields.
 *
 * @param f a field
 */
static void
vala_code_visitor_real_visit_field (ValaCodeVisitor* self,
                                    ValaField* f)
{
	g_return_if_fail (f != NULL);
}

void
vala_code_visitor_visit_field (ValaCodeVisitor* self,
                               ValaField* f)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_field) {
		_klass_->visit_field (self, f);
	}
}

/**
 * Visit operation called for methods.
 *
 * @param m a method
 */
static void
vala_code_visitor_real_visit_method (ValaCodeVisitor* self,
                                     ValaMethod* m)
{
	g_return_if_fail (m != NULL);
}

void
vala_code_visitor_visit_method (ValaCodeVisitor* self,
                                ValaMethod* m)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_method) {
		_klass_->visit_method (self, m);
	}
}

/**
 * Visit operation called for creation methods.
 *
 * @param m a method
 */
static void
vala_code_visitor_real_visit_creation_method (ValaCodeVisitor* self,
                                              ValaCreationMethod* m)
{
	g_return_if_fail (m != NULL);
}

void
vala_code_visitor_visit_creation_method (ValaCodeVisitor* self,
                                         ValaCreationMethod* m)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_creation_method) {
		_klass_->visit_creation_method (self, m);
	}
}

/**
 * Visit operation called for formal parameters.
 *
 * @param p a formal parameter
 */
static void
vala_code_visitor_real_visit_formal_parameter (ValaCodeVisitor* self,
                                               ValaParameter* p)
{
	g_return_if_fail (p != NULL);
}

void
vala_code_visitor_visit_formal_parameter (ValaCodeVisitor* self,
                                          ValaParameter* p)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_formal_parameter) {
		_klass_->visit_formal_parameter (self, p);
	}
}

/**
 * Visit operation called for properties.
 *
 * @param prop a property
 */
static void
vala_code_visitor_real_visit_property (ValaCodeVisitor* self,
                                       ValaProperty* prop)
{
	g_return_if_fail (prop != NULL);
}

void
vala_code_visitor_visit_property (ValaCodeVisitor* self,
                                  ValaProperty* prop)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_property) {
		_klass_->visit_property (self, prop);
	}
}

/**
 * Visit operation called for property accessors.
 *
 * @param acc a property accessor
 */
static void
vala_code_visitor_real_visit_property_accessor (ValaCodeVisitor* self,
                                                ValaPropertyAccessor* acc)
{
	g_return_if_fail (acc != NULL);
}

void
vala_code_visitor_visit_property_accessor (ValaCodeVisitor* self,
                                           ValaPropertyAccessor* acc)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_property_accessor) {
		_klass_->visit_property_accessor (self, acc);
	}
}

/**
 * Visit operation called for signals.
 *
 * @param sig a signal
 */
static void
vala_code_visitor_real_visit_signal (ValaCodeVisitor* self,
                                     ValaSignal* sig)
{
	g_return_if_fail (sig != NULL);
}

void
vala_code_visitor_visit_signal (ValaCodeVisitor* self,
                                ValaSignal* sig)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_signal) {
		_klass_->visit_signal (self, sig);
	}
}

/**
 * Visit operation called for constructors.
 *
 * @param c a constructor
 */
static void
vala_code_visitor_real_visit_constructor (ValaCodeVisitor* self,
                                          ValaConstructor* c)
{
	g_return_if_fail (c != NULL);
}

void
vala_code_visitor_visit_constructor (ValaCodeVisitor* self,
                                     ValaConstructor* c)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_constructor) {
		_klass_->visit_constructor (self, c);
	}
}

/**
 * Visit operation called for destructors.
 *
 * @param d a destructor
 */
static void
vala_code_visitor_real_visit_destructor (ValaCodeVisitor* self,
                                         ValaDestructor* d)
{
	g_return_if_fail (d != NULL);
}

void
vala_code_visitor_visit_destructor (ValaCodeVisitor* self,
                                    ValaDestructor* d)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_destructor) {
		_klass_->visit_destructor (self, d);
	}
}

/**
 * Visit operation called for type parameters.
 *
 * @param p a type parameter
 */
static void
vala_code_visitor_real_visit_type_parameter (ValaCodeVisitor* self,
                                             ValaTypeParameter* p)
{
	g_return_if_fail (p != NULL);
}

void
vala_code_visitor_visit_type_parameter (ValaCodeVisitor* self,
                                        ValaTypeParameter* p)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_type_parameter) {
		_klass_->visit_type_parameter (self, p);
	}
}

/**
 * Visit operation called for using directives.
 *
 * @param ns a using directive
 */
static void
vala_code_visitor_real_visit_using_directive (ValaCodeVisitor* self,
                                              ValaUsingDirective* ns)
{
	g_return_if_fail (ns != NULL);
}

void
vala_code_visitor_visit_using_directive (ValaCodeVisitor* self,
                                         ValaUsingDirective* ns)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_using_directive) {
		_klass_->visit_using_directive (self, ns);
	}
}

/**
 * Visit operation called for type references.
 *
 * @param type a type reference
 */
static void
vala_code_visitor_real_visit_data_type (ValaCodeVisitor* self,
                                        ValaDataType* type)
{
	g_return_if_fail (type != NULL);
}

void
vala_code_visitor_visit_data_type (ValaCodeVisitor* self,
                                   ValaDataType* type)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_data_type) {
		_klass_->visit_data_type (self, type);
	}
}

/**
 * Visit operation called for blocks.
 *
 * @param b a block
 */
static void
vala_code_visitor_real_visit_block (ValaCodeVisitor* self,
                                    ValaBlock* b)
{
	g_return_if_fail (b != NULL);
}

void
vala_code_visitor_visit_block (ValaCodeVisitor* self,
                               ValaBlock* b)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_block) {
		_klass_->visit_block (self, b);
	}
}

/**
 * Visit operation called for empty statements.
 *
 * @param stmt an empty statement
 */
static void
vala_code_visitor_real_visit_empty_statement (ValaCodeVisitor* self,
                                              ValaEmptyStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_empty_statement (ValaCodeVisitor* self,
                                         ValaEmptyStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_empty_statement) {
		_klass_->visit_empty_statement (self, stmt);
	}
}

/**
 * Visit operation called for declaration statements.
 *
 * @param stmt a declaration statement
 */
static void
vala_code_visitor_real_visit_declaration_statement (ValaCodeVisitor* self,
                                                    ValaDeclarationStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_declaration_statement (ValaCodeVisitor* self,
                                               ValaDeclarationStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_declaration_statement) {
		_klass_->visit_declaration_statement (self, stmt);
	}
}

/**
 * Visit operation called for local variables.
 *
 * @param local a local variable
 */
static void
vala_code_visitor_real_visit_local_variable (ValaCodeVisitor* self,
                                             ValaLocalVariable* local)
{
	g_return_if_fail (local != NULL);
}

void
vala_code_visitor_visit_local_variable (ValaCodeVisitor* self,
                                        ValaLocalVariable* local)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_local_variable) {
		_klass_->visit_local_variable (self, local);
	}
}

/**
 * Visit operation called for initializer lists
 *
 * @param list an initializer list
 */
static void
vala_code_visitor_real_visit_initializer_list (ValaCodeVisitor* self,
                                               ValaInitializerList* list)
{
	g_return_if_fail (list != NULL);
}

void
vala_code_visitor_visit_initializer_list (ValaCodeVisitor* self,
                                          ValaInitializerList* list)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_initializer_list) {
		_klass_->visit_initializer_list (self, list);
	}
}

/**
 * Visit operation called for expression statements.
 *
 * @param stmt an expression statement
 */
static void
vala_code_visitor_real_visit_expression_statement (ValaCodeVisitor* self,
                                                   ValaExpressionStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_expression_statement (ValaCodeVisitor* self,
                                              ValaExpressionStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_expression_statement) {
		_klass_->visit_expression_statement (self, stmt);
	}
}

/**
 * Visit operation called for if statements.
 *
 * @param stmt an if statement
 */
static void
vala_code_visitor_real_visit_if_statement (ValaCodeVisitor* self,
                                           ValaIfStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_if_statement (ValaCodeVisitor* self,
                                      ValaIfStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_if_statement) {
		_klass_->visit_if_statement (self, stmt);
	}
}

/**
 * Visit operation called for switch statements.
 *
 * @param stmt a switch statement
 */
static void
vala_code_visitor_real_visit_switch_statement (ValaCodeVisitor* self,
                                               ValaSwitchStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_switch_statement (ValaCodeVisitor* self,
                                          ValaSwitchStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_switch_statement) {
		_klass_->visit_switch_statement (self, stmt);
	}
}

/**
 * Visit operation called for switch sections.
 *
 * @param section a switch section
 */
static void
vala_code_visitor_real_visit_switch_section (ValaCodeVisitor* self,
                                             ValaSwitchSection* section)
{
	g_return_if_fail (section != NULL);
}

void
vala_code_visitor_visit_switch_section (ValaCodeVisitor* self,
                                        ValaSwitchSection* section)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_switch_section) {
		_klass_->visit_switch_section (self, section);
	}
}

/**
 * Visit operation called for switch label.
 *
 * @param label a switch label
 */
static void
vala_code_visitor_real_visit_switch_label (ValaCodeVisitor* self,
                                           ValaSwitchLabel* label)
{
	g_return_if_fail (label != NULL);
}

void
vala_code_visitor_visit_switch_label (ValaCodeVisitor* self,
                                      ValaSwitchLabel* label)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_switch_label) {
		_klass_->visit_switch_label (self, label);
	}
}

/**
 * Visit operation called for loops.
 *
 * @param stmt a loop
 */
static void
vala_code_visitor_real_visit_loop_statement (ValaCodeVisitor* self,
                                             ValaLoopStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_loop_statement (ValaCodeVisitor* self,
                                        ValaLoopStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_loop_statement) {
		_klass_->visit_loop_statement (self, stmt);
	}
}

/**
 * Visit operation called for while statements.
 *
 * @param stmt an while statement
 */
static void
vala_code_visitor_real_visit_while_statement (ValaCodeVisitor* self,
                                              ValaWhileStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_while_statement (ValaCodeVisitor* self,
                                         ValaWhileStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_while_statement) {
		_klass_->visit_while_statement (self, stmt);
	}
}

/**
 * Visit operation called for do statements.
 *
 * @param stmt a do statement
 */
static void
vala_code_visitor_real_visit_do_statement (ValaCodeVisitor* self,
                                           ValaDoStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_do_statement (ValaCodeVisitor* self,
                                      ValaDoStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_do_statement) {
		_klass_->visit_do_statement (self, stmt);
	}
}

/**
 * Visit operation called for for statements.
 *
 * @param stmt a for statement
 */
static void
vala_code_visitor_real_visit_for_statement (ValaCodeVisitor* self,
                                            ValaForStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_for_statement (ValaCodeVisitor* self,
                                       ValaForStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_for_statement) {
		_klass_->visit_for_statement (self, stmt);
	}
}

/**
 * Visit operation called for foreach statements.
 *
 * @param stmt a foreach statement
 */
static void
vala_code_visitor_real_visit_foreach_statement (ValaCodeVisitor* self,
                                                ValaForeachStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_foreach_statement (ValaCodeVisitor* self,
                                           ValaForeachStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_foreach_statement) {
		_klass_->visit_foreach_statement (self, stmt);
	}
}

/**
 * Visit operation called for break statements.
 *
 * @param stmt a break statement
 */
static void
vala_code_visitor_real_visit_break_statement (ValaCodeVisitor* self,
                                              ValaBreakStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_break_statement (ValaCodeVisitor* self,
                                         ValaBreakStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_break_statement) {
		_klass_->visit_break_statement (self, stmt);
	}
}

/**
 * Visit operation called for continue statements.
 *
 * @param stmt a continue statement
 */
static void
vala_code_visitor_real_visit_continue_statement (ValaCodeVisitor* self,
                                                 ValaContinueStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_continue_statement (ValaCodeVisitor* self,
                                            ValaContinueStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_continue_statement) {
		_klass_->visit_continue_statement (self, stmt);
	}
}

/**
 * Visit operation called for return statements.
 *
 * @param stmt a return statement
 */
static void
vala_code_visitor_real_visit_return_statement (ValaCodeVisitor* self,
                                               ValaReturnStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_return_statement (ValaCodeVisitor* self,
                                          ValaReturnStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_return_statement) {
		_klass_->visit_return_statement (self, stmt);
	}
}

/**
 * Visit operation called for yield statement.
 *
 * @param y a yield statement
 */
static void
vala_code_visitor_real_visit_yield_statement (ValaCodeVisitor* self,
                                              ValaYieldStatement* y)
{
	g_return_if_fail (y != NULL);
}

void
vala_code_visitor_visit_yield_statement (ValaCodeVisitor* self,
                                         ValaYieldStatement* y)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_yield_statement) {
		_klass_->visit_yield_statement (self, y);
	}
}

/**
 * Visit operation called for throw statements.
 *
 * @param stmt a throw statement
 */
static void
vala_code_visitor_real_visit_throw_statement (ValaCodeVisitor* self,
                                              ValaThrowStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_throw_statement (ValaCodeVisitor* self,
                                         ValaThrowStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_throw_statement) {
		_klass_->visit_throw_statement (self, stmt);
	}
}

/**
 * Visit operation called for try statements.
 *
 * @param stmt a try statement
 */
static void
vala_code_visitor_real_visit_try_statement (ValaCodeVisitor* self,
                                            ValaTryStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_try_statement (ValaCodeVisitor* self,
                                       ValaTryStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_try_statement) {
		_klass_->visit_try_statement (self, stmt);
	}
}

/**
 * Visit operation called for catch clauses.
 *
 * @param clause a catch clause
 */
static void
vala_code_visitor_real_visit_catch_clause (ValaCodeVisitor* self,
                                           ValaCatchClause* clause)
{
	g_return_if_fail (clause != NULL);
}

void
vala_code_visitor_visit_catch_clause (ValaCodeVisitor* self,
                                      ValaCatchClause* clause)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_catch_clause) {
		_klass_->visit_catch_clause (self, clause);
	}
}

/**
 * Visit operation called for lock statements before the body has been visited.
 *
 * @param stmt a lock statement
 */
static void
vala_code_visitor_real_visit_lock_statement (ValaCodeVisitor* self,
                                             ValaLockStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_lock_statement (ValaCodeVisitor* self,
                                        ValaLockStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_lock_statement) {
		_klass_->visit_lock_statement (self, stmt);
	}
}

/**
 * Visit operation called for unlock statements.
 *
 * @param stmt an unlock statement
 */
static void
vala_code_visitor_real_visit_unlock_statement (ValaCodeVisitor* self,
                                               ValaUnlockStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_unlock_statement (ValaCodeVisitor* self,
                                          ValaUnlockStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_unlock_statement) {
		_klass_->visit_unlock_statement (self, stmt);
	}
}

/**
 * Visit operation called for with statements.
 *
 * @param stmt a with statement
 */
static void
vala_code_visitor_real_visit_with_statement (ValaCodeVisitor* self,
                                             ValaWithStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_with_statement (ValaCodeVisitor* self,
                                        ValaWithStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_with_statement) {
		_klass_->visit_with_statement (self, stmt);
	}
}

/**
 * Visit operation called for delete statements.
 *
 * @param stmt a delete statement
 */
static void
vala_code_visitor_real_visit_delete_statement (ValaCodeVisitor* self,
                                               ValaDeleteStatement* stmt)
{
	g_return_if_fail (stmt != NULL);
}

void
vala_code_visitor_visit_delete_statement (ValaCodeVisitor* self,
                                          ValaDeleteStatement* stmt)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_delete_statement) {
		_klass_->visit_delete_statement (self, stmt);
	}
}

/**
 * Visit operations called for expressions.
 *
 * @param expr an expression
 */
static void
vala_code_visitor_real_visit_expression (ValaCodeVisitor* self,
                                         ValaExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_expression (ValaCodeVisitor* self,
                                    ValaExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_expression) {
		_klass_->visit_expression (self, expr);
	}
}

/**
 * Visit operations called for array creation expressions.
 *
 * @param expr an array creation expression
 */
static void
vala_code_visitor_real_visit_array_creation_expression (ValaCodeVisitor* self,
                                                        ValaArrayCreationExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_array_creation_expression (ValaCodeVisitor* self,
                                                   ValaArrayCreationExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_array_creation_expression) {
		_klass_->visit_array_creation_expression (self, expr);
	}
}

/**
 * Visit operation called for boolean literals.
 *
 * @param lit a boolean literal
 */
static void
vala_code_visitor_real_visit_boolean_literal (ValaCodeVisitor* self,
                                              ValaBooleanLiteral* lit)
{
	g_return_if_fail (lit != NULL);
}

void
vala_code_visitor_visit_boolean_literal (ValaCodeVisitor* self,
                                         ValaBooleanLiteral* lit)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_boolean_literal) {
		_klass_->visit_boolean_literal (self, lit);
	}
}

/**
 * Visit operation called for character literals.
 *
 * @param lit a character literal
 */
static void
vala_code_visitor_real_visit_character_literal (ValaCodeVisitor* self,
                                                ValaCharacterLiteral* lit)
{
	g_return_if_fail (lit != NULL);
}

void
vala_code_visitor_visit_character_literal (ValaCodeVisitor* self,
                                           ValaCharacterLiteral* lit)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_character_literal) {
		_klass_->visit_character_literal (self, lit);
	}
}

/**
 * Visit operation called for integer literals.
 *
 * @param lit an integer literal
 */
static void
vala_code_visitor_real_visit_integer_literal (ValaCodeVisitor* self,
                                              ValaIntegerLiteral* lit)
{
	g_return_if_fail (lit != NULL);
}

void
vala_code_visitor_visit_integer_literal (ValaCodeVisitor* self,
                                         ValaIntegerLiteral* lit)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_integer_literal) {
		_klass_->visit_integer_literal (self, lit);
	}
}

/**
 * Visit operation called for real literals.
 *
 * @param lit a real literal
 */
static void
vala_code_visitor_real_visit_real_literal (ValaCodeVisitor* self,
                                           ValaRealLiteral* lit)
{
	g_return_if_fail (lit != NULL);
}

void
vala_code_visitor_visit_real_literal (ValaCodeVisitor* self,
                                      ValaRealLiteral* lit)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_real_literal) {
		_klass_->visit_real_literal (self, lit);
	}
}

/**
 * Visit operation called for regex literals.
 *
 * @param lit a regex literal
 */
static void
vala_code_visitor_real_visit_regex_literal (ValaCodeVisitor* self,
                                            ValaRegexLiteral* lit)
{
	g_return_if_fail (lit != NULL);
}

void
vala_code_visitor_visit_regex_literal (ValaCodeVisitor* self,
                                       ValaRegexLiteral* lit)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_regex_literal) {
		_klass_->visit_regex_literal (self, lit);
	}
}

/**
 * Visit operation called for string literals.
 *
 * @param lit a string literal
 */
static void
vala_code_visitor_real_visit_string_literal (ValaCodeVisitor* self,
                                             ValaStringLiteral* lit)
{
	g_return_if_fail (lit != NULL);
}

void
vala_code_visitor_visit_string_literal (ValaCodeVisitor* self,
                                        ValaStringLiteral* lit)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_string_literal) {
		_klass_->visit_string_literal (self, lit);
	}
}

/**
 * Visit operation called for string templates.
 *
 * @param tmpl a string template
 */
static void
vala_code_visitor_real_visit_template (ValaCodeVisitor* self,
                                       ValaTemplate* tmpl)
{
	g_return_if_fail (tmpl != NULL);
}

void
vala_code_visitor_visit_template (ValaCodeVisitor* self,
                                  ValaTemplate* tmpl)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_template) {
		_klass_->visit_template (self, tmpl);
	}
}

/**
 * Visit operation called for tuples.
 *
 * @param tuple a tuple
 */
static void
vala_code_visitor_real_visit_tuple (ValaCodeVisitor* self,
                                    ValaTuple* tuple)
{
	g_return_if_fail (tuple != NULL);
}

void
vala_code_visitor_visit_tuple (ValaCodeVisitor* self,
                               ValaTuple* tuple)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_tuple) {
		_klass_->visit_tuple (self, tuple);
	}
}

/**
 * Visit operation called for null literals.
 *
 * @param lit a null literal
 */
static void
vala_code_visitor_real_visit_null_literal (ValaCodeVisitor* self,
                                           ValaNullLiteral* lit)
{
	g_return_if_fail (lit != NULL);
}

void
vala_code_visitor_visit_null_literal (ValaCodeVisitor* self,
                                      ValaNullLiteral* lit)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_null_literal) {
		_klass_->visit_null_literal (self, lit);
	}
}

/**
 * Visit operation called for member access expressions.
 *
 * @param expr a member access expression
 */
static void
vala_code_visitor_real_visit_member_access (ValaCodeVisitor* self,
                                            ValaMemberAccess* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_member_access (ValaCodeVisitor* self,
                                       ValaMemberAccess* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_member_access) {
		_klass_->visit_member_access (self, expr);
	}
}

/**
 * Visit operation called for invocation expressions.
 *
 * @param expr an invocation expression
 */
static void
vala_code_visitor_real_visit_method_call (ValaCodeVisitor* self,
                                          ValaMethodCall* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_method_call (ValaCodeVisitor* self,
                                     ValaMethodCall* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_method_call) {
		_klass_->visit_method_call (self, expr);
	}
}

/**
 * Visit operation called for element access expressions.
 *
 * @param expr an element access expression
 */
static void
vala_code_visitor_real_visit_element_access (ValaCodeVisitor* self,
                                             ValaElementAccess* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_element_access (ValaCodeVisitor* self,
                                        ValaElementAccess* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_element_access) {
		_klass_->visit_element_access (self, expr);
	}
}

/**
 * Visit operation called for array slice expressions.
 *
 * @param expr an array slice expression
 */
static void
vala_code_visitor_real_visit_slice_expression (ValaCodeVisitor* self,
                                               ValaSliceExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_slice_expression (ValaCodeVisitor* self,
                                          ValaSliceExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_slice_expression) {
		_klass_->visit_slice_expression (self, expr);
	}
}

/**
 * Visit operation called for base access expressions.
 *
 * @param expr a base access expression
 */
static void
vala_code_visitor_real_visit_base_access (ValaCodeVisitor* self,
                                          ValaBaseAccess* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_base_access (ValaCodeVisitor* self,
                                     ValaBaseAccess* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_base_access) {
		_klass_->visit_base_access (self, expr);
	}
}

/**
 * Visit operation called for postfix expressions.
 *
 * @param expr a postfix expression
 */
static void
vala_code_visitor_real_visit_postfix_expression (ValaCodeVisitor* self,
                                                 ValaPostfixExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_postfix_expression (ValaCodeVisitor* self,
                                            ValaPostfixExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_postfix_expression) {
		_klass_->visit_postfix_expression (self, expr);
	}
}

/**
 * Visit operation called for object creation expressions.
 *
 * @param expr an object creation expression
 */
static void
vala_code_visitor_real_visit_object_creation_expression (ValaCodeVisitor* self,
                                                         ValaObjectCreationExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_object_creation_expression (ValaCodeVisitor* self,
                                                    ValaObjectCreationExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_object_creation_expression) {
		_klass_->visit_object_creation_expression (self, expr);
	}
}

/**
 * Visit operation called for sizeof expressions.
 *
 * @param expr a sizeof expression
 */
static void
vala_code_visitor_real_visit_sizeof_expression (ValaCodeVisitor* self,
                                                ValaSizeofExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_sizeof_expression (ValaCodeVisitor* self,
                                           ValaSizeofExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_sizeof_expression) {
		_klass_->visit_sizeof_expression (self, expr);
	}
}

/**
 * Visit operation called for typeof expressions.
 *
 * @param expr a typeof expression
 */
static void
vala_code_visitor_real_visit_typeof_expression (ValaCodeVisitor* self,
                                                ValaTypeofExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_typeof_expression (ValaCodeVisitor* self,
                                           ValaTypeofExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_typeof_expression) {
		_klass_->visit_typeof_expression (self, expr);
	}
}

/**
 * Visit operation called for unary expressions.
 *
 * @param expr an unary expression
 */
static void
vala_code_visitor_real_visit_unary_expression (ValaCodeVisitor* self,
                                               ValaUnaryExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_unary_expression (ValaCodeVisitor* self,
                                          ValaUnaryExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_unary_expression) {
		_klass_->visit_unary_expression (self, expr);
	}
}

/**
 * Visit operation called for call expressions.
 *
 * @param expr a call expression
 */
static void
vala_code_visitor_real_visit_cast_expression (ValaCodeVisitor* self,
                                              ValaCastExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_cast_expression (ValaCodeVisitor* self,
                                         ValaCastExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_cast_expression) {
		_klass_->visit_cast_expression (self, expr);
	}
}

/**
 * Visit operation called for named arguments.
 *
 * @param expr a named argument
 */
static void
vala_code_visitor_real_visit_named_argument (ValaCodeVisitor* self,
                                             ValaNamedArgument* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_named_argument (ValaCodeVisitor* self,
                                        ValaNamedArgument* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_named_argument) {
		_klass_->visit_named_argument (self, expr);
	}
}

/**
 * Visit operation called for pointer indirections.
 *
 * @param expr a pointer indirection
 */
static void
vala_code_visitor_real_visit_pointer_indirection (ValaCodeVisitor* self,
                                                  ValaPointerIndirection* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_pointer_indirection (ValaCodeVisitor* self,
                                             ValaPointerIndirection* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_pointer_indirection) {
		_klass_->visit_pointer_indirection (self, expr);
	}
}

/**
 * Visit operation called for address-of expressions.
 *
 * @param expr an address-of expression
 */
static void
vala_code_visitor_real_visit_addressof_expression (ValaCodeVisitor* self,
                                                   ValaAddressofExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_addressof_expression (ValaCodeVisitor* self,
                                              ValaAddressofExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_addressof_expression) {
		_klass_->visit_addressof_expression (self, expr);
	}
}

/**
 * Visit operation called for reference transfer expressions.
 *
 * @param expr a reference transfer expression
 */
static void
vala_code_visitor_real_visit_reference_transfer_expression (ValaCodeVisitor* self,
                                                            ValaReferenceTransferExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_reference_transfer_expression (ValaCodeVisitor* self,
                                                       ValaReferenceTransferExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_reference_transfer_expression) {
		_klass_->visit_reference_transfer_expression (self, expr);
	}
}

/**
 * Visit operation called for binary expressions.
 *
 * @param expr a binary expression
 */
static void
vala_code_visitor_real_visit_binary_expression (ValaCodeVisitor* self,
                                                ValaBinaryExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_binary_expression (ValaCodeVisitor* self,
                                           ValaBinaryExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_binary_expression) {
		_klass_->visit_binary_expression (self, expr);
	}
}

/**
 * Visit operation called for type checks.
 *
 * @param expr a type check expression
 */
static void
vala_code_visitor_real_visit_type_check (ValaCodeVisitor* self,
                                         ValaTypeCheck* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_type_check (ValaCodeVisitor* self,
                                    ValaTypeCheck* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_type_check) {
		_klass_->visit_type_check (self, expr);
	}
}

/**
 * Visit operation called for conditional expressions.
 *
 * @param expr a conditional expression
 */
static void
vala_code_visitor_real_visit_conditional_expression (ValaCodeVisitor* self,
                                                     ValaConditionalExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_conditional_expression (ValaCodeVisitor* self,
                                                ValaConditionalExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_conditional_expression) {
		_klass_->visit_conditional_expression (self, expr);
	}
}

/**
 * Visit operation called for lambda expressions.
 *
 * @param expr a lambda expression
 */
static void
vala_code_visitor_real_visit_lambda_expression (ValaCodeVisitor* self,
                                                ValaLambdaExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_lambda_expression (ValaCodeVisitor* self,
                                           ValaLambdaExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_lambda_expression) {
		_klass_->visit_lambda_expression (self, expr);
	}
}

/**
 * Visit operation called for assignments.
 *
 * @param a an assignment
 */
static void
vala_code_visitor_real_visit_assignment (ValaCodeVisitor* self,
                                         ValaAssignment* a)
{
	g_return_if_fail (a != NULL);
}

void
vala_code_visitor_visit_assignment (ValaCodeVisitor* self,
                                    ValaAssignment* a)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_assignment) {
		_klass_->visit_assignment (self, a);
	}
}

/**
 * Visit operation called at end of full expressions.
 *
 * @param expr a full expression
 */
static void
vala_code_visitor_real_visit_end_full_expression (ValaCodeVisitor* self,
                                                  ValaExpression* expr)
{
	g_return_if_fail (expr != NULL);
}

void
vala_code_visitor_visit_end_full_expression (ValaCodeVisitor* self,
                                             ValaExpression* expr)
{
	ValaCodeVisitorClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = VALA_CODE_VISITOR_GET_CLASS (self);
	if (_klass_->visit_end_full_expression) {
		_klass_->visit_end_full_expression (self, expr);
	}
}

ValaCodeVisitor*
vala_code_visitor_construct (GType object_type)
{
	ValaCodeVisitor* self = NULL;
	self = (ValaCodeVisitor*) g_type_create_instance (object_type);
	return self;
}

static void
vala_value_code_visitor_init (GValue* value)
{
	value->data[0].v_pointer = NULL;
}

static void
vala_value_code_visitor_free_value (GValue* value)
{
	if (value->data[0].v_pointer) {
		vala_code_visitor_unref (value->data[0].v_pointer);
	}
}

static void
vala_value_code_visitor_copy_value (const GValue* src_value,
                                    GValue* dest_value)
{
	if (src_value->data[0].v_pointer) {
		dest_value->data[0].v_pointer = vala_code_visitor_ref (src_value->data[0].v_pointer);
	} else {
		dest_value->data[0].v_pointer = NULL;
	}
}

static gpointer
vala_value_code_visitor_peek_pointer (const GValue* value)
{
	return value->data[0].v_pointer;
}

static gchar*
vala_value_code_visitor_collect_value (GValue* value,
                                       guint n_collect_values,
                                       GTypeCValue* collect_values,
                                       guint collect_flags)
{
	if (collect_values[0].v_pointer) {
		ValaCodeVisitor * object;
		object = collect_values[0].v_pointer;
		if (object->parent_instance.g_class == NULL) {
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		}
		value->data[0].v_pointer = vala_code_visitor_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}

static gchar*
vala_value_code_visitor_lcopy_value (const GValue* value,
                                     guint n_collect_values,
                                     GTypeCValue* collect_values,
                                     guint collect_flags)
{
	ValaCodeVisitor ** object_p;
	object_p = collect_values[0].v_pointer;
	if (!object_p) {
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
	}
	if (!value->data[0].v_pointer) {
		*object_p = NULL;
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
		*object_p = value->data[0].v_pointer;
	} else {
		*object_p = vala_code_visitor_ref (value->data[0].v_pointer);
	}
	return NULL;
}

GParamSpec*
vala_param_spec_code_visitor (const gchar* name,
                              const gchar* nick,
                              const gchar* blurb,
                              GType object_type,
                              GParamFlags flags)
{
	ValaParamSpecCodeVisitor* spec;
	g_return_val_if_fail (g_type_is_a (object_type, VALA_TYPE_CODE_VISITOR), NULL);
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
	G_PARAM_SPEC (spec)->value_type = object_type;
	return G_PARAM_SPEC (spec);
}

gpointer
vala_value_get_code_visitor (const GValue* value)
{
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_CODE_VISITOR), NULL);
	return value->data[0].v_pointer;
}

void
vala_value_set_code_visitor (GValue* value,
                             gpointer v_object)
{
	ValaCodeVisitor * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_CODE_VISITOR));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_CODE_VISITOR));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
		vala_code_visitor_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		vala_code_visitor_unref (old);
	}
}

void
vala_value_take_code_visitor (GValue* value,
                              gpointer v_object)
{
	ValaCodeVisitor * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_CODE_VISITOR));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_CODE_VISITOR));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		vala_code_visitor_unref (old);
	}
}

static void
vala_code_visitor_class_init (ValaCodeVisitorClass * klass,
                              gpointer klass_data)
{
	vala_code_visitor_parent_class = g_type_class_peek_parent (klass);
	((ValaCodeVisitorClass *) klass)->finalize = vala_code_visitor_finalize;
	((ValaCodeVisitorClass *) klass)->visit_source_file = (void (*) (ValaCodeVisitor*, ValaSourceFile*)) vala_code_visitor_real_visit_source_file;
	((ValaCodeVisitorClass *) klass)->visit_namespace = (void (*) (ValaCodeVisitor*, ValaNamespace*)) vala_code_visitor_real_visit_namespace;
	((ValaCodeVisitorClass *) klass)->visit_class = (void (*) (ValaCodeVisitor*, ValaClass*)) vala_code_visitor_real_visit_class;
	((ValaCodeVisitorClass *) klass)->visit_struct = (void (*) (ValaCodeVisitor*, ValaStruct*)) vala_code_visitor_real_visit_struct;
	((ValaCodeVisitorClass *) klass)->visit_interface = (void (*) (ValaCodeVisitor*, ValaInterface*)) vala_code_visitor_real_visit_interface;
	((ValaCodeVisitorClass *) klass)->visit_enum = (void (*) (ValaCodeVisitor*, ValaEnum*)) vala_code_visitor_real_visit_enum;
	((ValaCodeVisitorClass *) klass)->visit_enum_value = (void (*) (ValaCodeVisitor*, ValaEnumValue*)) vala_code_visitor_real_visit_enum_value;
	((ValaCodeVisitorClass *) klass)->visit_error_domain = (void (*) (ValaCodeVisitor*, ValaErrorDomain*)) vala_code_visitor_real_visit_error_domain;
	((ValaCodeVisitorClass *) klass)->visit_error_code = (void (*) (ValaCodeVisitor*, ValaErrorCode*)) vala_code_visitor_real_visit_error_code;
	((ValaCodeVisitorClass *) klass)->visit_delegate = (void (*) (ValaCodeVisitor*, ValaDelegate*)) vala_code_visitor_real_visit_delegate;
	((ValaCodeVisitorClass *) klass)->visit_constant = (void (*) (ValaCodeVisitor*, ValaConstant*)) vala_code_visitor_real_visit_constant;
	((ValaCodeVisitorClass *) klass)->visit_field = (void (*) (ValaCodeVisitor*, ValaField*)) vala_code_visitor_real_visit_field;
	((ValaCodeVisitorClass *) klass)->visit_method = (void (*) (ValaCodeVisitor*, ValaMethod*)) vala_code_visitor_real_visit_method;
	((ValaCodeVisitorClass *) klass)->visit_creation_method = (void (*) (ValaCodeVisitor*, ValaCreationMethod*)) vala_code_visitor_real_visit_creation_method;
	((ValaCodeVisitorClass *) klass)->visit_formal_parameter = (void (*) (ValaCodeVisitor*, ValaParameter*)) vala_code_visitor_real_visit_formal_parameter;
	((ValaCodeVisitorClass *) klass)->visit_property = (void (*) (ValaCodeVisitor*, ValaProperty*)) vala_code_visitor_real_visit_property;
	((ValaCodeVisitorClass *) klass)->visit_property_accessor = (void (*) (ValaCodeVisitor*, ValaPropertyAccessor*)) vala_code_visitor_real_visit_property_accessor;
	((ValaCodeVisitorClass *) klass)->visit_signal = (void (*) (ValaCodeVisitor*, ValaSignal*)) vala_code_visitor_real_visit_signal;
	((ValaCodeVisitorClass *) klass)->visit_constructor = (void (*) (ValaCodeVisitor*, ValaConstructor*)) vala_code_visitor_real_visit_constructor;
	((ValaCodeVisitorClass *) klass)->visit_destructor = (void (*) (ValaCodeVisitor*, ValaDestructor*)) vala_code_visitor_real_visit_destructor;
	((ValaCodeVisitorClass *) klass)->visit_type_parameter = (void (*) (ValaCodeVisitor*, ValaTypeParameter*)) vala_code_visitor_real_visit_type_parameter;
	((ValaCodeVisitorClass *) klass)->visit_using_directive = (void (*) (ValaCodeVisitor*, ValaUsingDirective*)) vala_code_visitor_real_visit_using_directive;
	((ValaCodeVisitorClass *) klass)->visit_data_type = (void (*) (ValaCodeVisitor*, ValaDataType*)) vala_code_visitor_real_visit_data_type;
	((ValaCodeVisitorClass *) klass)->visit_block = (void (*) (ValaCodeVisitor*, ValaBlock*)) vala_code_visitor_real_visit_block;
	((ValaCodeVisitorClass *) klass)->visit_empty_statement = (void (*) (ValaCodeVisitor*, ValaEmptyStatement*)) vala_code_visitor_real_visit_empty_statement;
	((ValaCodeVisitorClass *) klass)->visit_declaration_statement = (void (*) (ValaCodeVisitor*, ValaDeclarationStatement*)) vala_code_visitor_real_visit_declaration_statement;
	((ValaCodeVisitorClass *) klass)->visit_local_variable = (void (*) (ValaCodeVisitor*, ValaLocalVariable*)) vala_code_visitor_real_visit_local_variable;
	((ValaCodeVisitorClass *) klass)->visit_initializer_list = (void (*) (ValaCodeVisitor*, ValaInitializerList*)) vala_code_visitor_real_visit_initializer_list;
	((ValaCodeVisitorClass *) klass)->visit_expression_statement = (void (*) (ValaCodeVisitor*, ValaExpressionStatement*)) vala_code_visitor_real_visit_expression_statement;
	((ValaCodeVisitorClass *) klass)->visit_if_statement = (void (*) (ValaCodeVisitor*, ValaIfStatement*)) vala_code_visitor_real_visit_if_statement;
	((ValaCodeVisitorClass *) klass)->visit_switch_statement = (void (*) (ValaCodeVisitor*, ValaSwitchStatement*)) vala_code_visitor_real_visit_switch_statement;
	((ValaCodeVisitorClass *) klass)->visit_switch_section = (void (*) (ValaCodeVisitor*, ValaSwitchSection*)) vala_code_visitor_real_visit_switch_section;
	((ValaCodeVisitorClass *) klass)->visit_switch_label = (void (*) (ValaCodeVisitor*, ValaSwitchLabel*)) vala_code_visitor_real_visit_switch_label;
	((ValaCodeVisitorClass *) klass)->visit_loop_statement = (void (*) (ValaCodeVisitor*, ValaLoopStatement*)) vala_code_visitor_real_visit_loop_statement;
	((ValaCodeVisitorClass *) klass)->visit_while_statement = (void (*) (ValaCodeVisitor*, ValaWhileStatement*)) vala_code_visitor_real_visit_while_statement;
	((ValaCodeVisitorClass *) klass)->visit_do_statement = (void (*) (ValaCodeVisitor*, ValaDoStatement*)) vala_code_visitor_real_visit_do_statement;
	((ValaCodeVisitorClass *) klass)->visit_for_statement = (void (*) (ValaCodeVisitor*, ValaForStatement*)) vala_code_visitor_real_visit_for_statement;
	((ValaCodeVisitorClass *) klass)->visit_foreach_statement = (void (*) (ValaCodeVisitor*, ValaForeachStatement*)) vala_code_visitor_real_visit_foreach_statement;
	((ValaCodeVisitorClass *) klass)->visit_break_statement = (void (*) (ValaCodeVisitor*, ValaBreakStatement*)) vala_code_visitor_real_visit_break_statement;
	((ValaCodeVisitorClass *) klass)->visit_continue_statement = (void (*) (ValaCodeVisitor*, ValaContinueStatement*)) vala_code_visitor_real_visit_continue_statement;
	((ValaCodeVisitorClass *) klass)->visit_return_statement = (void (*) (ValaCodeVisitor*, ValaReturnStatement*)) vala_code_visitor_real_visit_return_statement;
	((ValaCodeVisitorClass *) klass)->visit_yield_statement = (void (*) (ValaCodeVisitor*, ValaYieldStatement*)) vala_code_visitor_real_visit_yield_statement;
	((ValaCodeVisitorClass *) klass)->visit_throw_statement = (void (*) (ValaCodeVisitor*, ValaThrowStatement*)) vala_code_visitor_real_visit_throw_statement;
	((ValaCodeVisitorClass *) klass)->visit_try_statement = (void (*) (ValaCodeVisitor*, ValaTryStatement*)) vala_code_visitor_real_visit_try_statement;
	((ValaCodeVisitorClass *) klass)->visit_catch_clause = (void (*) (ValaCodeVisitor*, ValaCatchClause*)) vala_code_visitor_real_visit_catch_clause;
	((ValaCodeVisitorClass *) klass)->visit_lock_statement = (void (*) (ValaCodeVisitor*, ValaLockStatement*)) vala_code_visitor_real_visit_lock_statement;
	((ValaCodeVisitorClass *) klass)->visit_unlock_statement = (void (*) (ValaCodeVisitor*, ValaUnlockStatement*)) vala_code_visitor_real_visit_unlock_statement;
	((ValaCodeVisitorClass *) klass)->visit_with_statement = (void (*) (ValaCodeVisitor*, ValaWithStatement*)) vala_code_visitor_real_visit_with_statement;
	((ValaCodeVisitorClass *) klass)->visit_delete_statement = (void (*) (ValaCodeVisitor*, ValaDeleteStatement*)) vala_code_visitor_real_visit_delete_statement;
	((ValaCodeVisitorClass *) klass)->visit_expression = (void (*) (ValaCodeVisitor*, ValaExpression*)) vala_code_visitor_real_visit_expression;
	((ValaCodeVisitorClass *) klass)->visit_array_creation_expression = (void (*) (ValaCodeVisitor*, ValaArrayCreationExpression*)) vala_code_visitor_real_visit_array_creation_expression;
	((ValaCodeVisitorClass *) klass)->visit_boolean_literal = (void (*) (ValaCodeVisitor*, ValaBooleanLiteral*)) vala_code_visitor_real_visit_boolean_literal;
	((ValaCodeVisitorClass *) klass)->visit_character_literal = (void (*) (ValaCodeVisitor*, ValaCharacterLiteral*)) vala_code_visitor_real_visit_character_literal;
	((ValaCodeVisitorClass *) klass)->visit_integer_literal = (void (*) (ValaCodeVisitor*, ValaIntegerLiteral*)) vala_code_visitor_real_visit_integer_literal;
	((ValaCodeVisitorClass *) klass)->visit_real_literal = (void (*) (ValaCodeVisitor*, ValaRealLiteral*)) vala_code_visitor_real_visit_real_literal;
	((ValaCodeVisitorClass *) klass)->visit_regex_literal = (void (*) (ValaCodeVisitor*, ValaRegexLiteral*)) vala_code_visitor_real_visit_regex_literal;
	((ValaCodeVisitorClass *) klass)->visit_string_literal = (void (*) (ValaCodeVisitor*, ValaStringLiteral*)) vala_code_visitor_real_visit_string_literal;
	((ValaCodeVisitorClass *) klass)->visit_template = (void (*) (ValaCodeVisitor*, ValaTemplate*)) vala_code_visitor_real_visit_template;
	((ValaCodeVisitorClass *) klass)->visit_tuple = (void (*) (ValaCodeVisitor*, ValaTuple*)) vala_code_visitor_real_visit_tuple;
	((ValaCodeVisitorClass *) klass)->visit_null_literal = (void (*) (ValaCodeVisitor*, ValaNullLiteral*)) vala_code_visitor_real_visit_null_literal;
	((ValaCodeVisitorClass *) klass)->visit_member_access = (void (*) (ValaCodeVisitor*, ValaMemberAccess*)) vala_code_visitor_real_visit_member_access;
	((ValaCodeVisitorClass *) klass)->visit_method_call = (void (*) (ValaCodeVisitor*, ValaMethodCall*)) vala_code_visitor_real_visit_method_call;
	((ValaCodeVisitorClass *) klass)->visit_element_access = (void (*) (ValaCodeVisitor*, ValaElementAccess*)) vala_code_visitor_real_visit_element_access;
	((ValaCodeVisitorClass *) klass)->visit_slice_expression = (void (*) (ValaCodeVisitor*, ValaSliceExpression*)) vala_code_visitor_real_visit_slice_expression;
	((ValaCodeVisitorClass *) klass)->visit_base_access = (void (*) (ValaCodeVisitor*, ValaBaseAccess*)) vala_code_visitor_real_visit_base_access;
	((ValaCodeVisitorClass *) klass)->visit_postfix_expression = (void (*) (ValaCodeVisitor*, ValaPostfixExpression*)) vala_code_visitor_real_visit_postfix_expression;
	((ValaCodeVisitorClass *) klass)->visit_object_creation_expression = (void (*) (ValaCodeVisitor*, ValaObjectCreationExpression*)) vala_code_visitor_real_visit_object_creation_expression;
	((ValaCodeVisitorClass *) klass)->visit_sizeof_expression = (void (*) (ValaCodeVisitor*, ValaSizeofExpression*)) vala_code_visitor_real_visit_sizeof_expression;
	((ValaCodeVisitorClass *) klass)->visit_typeof_expression = (void (*) (ValaCodeVisitor*, ValaTypeofExpression*)) vala_code_visitor_real_visit_typeof_expression;
	((ValaCodeVisitorClass *) klass)->visit_unary_expression = (void (*) (ValaCodeVisitor*, ValaUnaryExpression*)) vala_code_visitor_real_visit_unary_expression;
	((ValaCodeVisitorClass *) klass)->visit_cast_expression = (void (*) (ValaCodeVisitor*, ValaCastExpression*)) vala_code_visitor_real_visit_cast_expression;
	((ValaCodeVisitorClass *) klass)->visit_named_argument = (void (*) (ValaCodeVisitor*, ValaNamedArgument*)) vala_code_visitor_real_visit_named_argument;
	((ValaCodeVisitorClass *) klass)->visit_pointer_indirection = (void (*) (ValaCodeVisitor*, ValaPointerIndirection*)) vala_code_visitor_real_visit_pointer_indirection;
	((ValaCodeVisitorClass *) klass)->visit_addressof_expression = (void (*) (ValaCodeVisitor*, ValaAddressofExpression*)) vala_code_visitor_real_visit_addressof_expression;
	((ValaCodeVisitorClass *) klass)->visit_reference_transfer_expression = (void (*) (ValaCodeVisitor*, ValaReferenceTransferExpression*)) vala_code_visitor_real_visit_reference_transfer_expression;
	((ValaCodeVisitorClass *) klass)->visit_binary_expression = (void (*) (ValaCodeVisitor*, ValaBinaryExpression*)) vala_code_visitor_real_visit_binary_expression;
	((ValaCodeVisitorClass *) klass)->visit_type_check = (void (*) (ValaCodeVisitor*, ValaTypeCheck*)) vala_code_visitor_real_visit_type_check;
	((ValaCodeVisitorClass *) klass)->visit_conditional_expression = (void (*) (ValaCodeVisitor*, ValaConditionalExpression*)) vala_code_visitor_real_visit_conditional_expression;
	((ValaCodeVisitorClass *) klass)->visit_lambda_expression = (void (*) (ValaCodeVisitor*, ValaLambdaExpression*)) vala_code_visitor_real_visit_lambda_expression;
	((ValaCodeVisitorClass *) klass)->visit_assignment = (void (*) (ValaCodeVisitor*, ValaAssignment*)) vala_code_visitor_real_visit_assignment;
	((ValaCodeVisitorClass *) klass)->visit_end_full_expression = (void (*) (ValaCodeVisitor*, ValaExpression*)) vala_code_visitor_real_visit_end_full_expression;
}

static void
vala_code_visitor_instance_init (ValaCodeVisitor * self,
                                 gpointer klass)
{
	self->ref_count = 1;
}

static void
vala_code_visitor_finalize (ValaCodeVisitor * obj)
{
	ValaCodeVisitor * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_CODE_VISITOR, ValaCodeVisitor);
	g_signal_handlers_destroy (self);
}

/**
 * Abstract code node visitor for traversing source code tree.
 */
static GType
vala_code_visitor_get_type_once (void)
{
	static const GTypeValueTable g_define_type_value_table = { vala_value_code_visitor_init, vala_value_code_visitor_free_value, vala_value_code_visitor_copy_value, vala_value_code_visitor_peek_pointer, "p", vala_value_code_visitor_collect_value, "p", vala_value_code_visitor_lcopy_value };
	static const GTypeInfo g_define_type_info = { sizeof (ValaCodeVisitorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_code_visitor_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaCodeVisitor), 0, (GInstanceInitFunc) vala_code_visitor_instance_init, &g_define_type_value_table };
	static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
	GType vala_code_visitor_type_id;
	vala_code_visitor_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaCodeVisitor", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
	return vala_code_visitor_type_id;
}

GType
vala_code_visitor_get_type (void)
{
	static volatile gsize vala_code_visitor_type_id__once = 0;
	if (g_once_init_enter (&vala_code_visitor_type_id__once)) {
		GType vala_code_visitor_type_id;
		vala_code_visitor_type_id = vala_code_visitor_get_type_once ();
		g_once_init_leave (&vala_code_visitor_type_id__once, vala_code_visitor_type_id);
	}
	return vala_code_visitor_type_id__once;
}

gpointer
vala_code_visitor_ref (gpointer instance)
{
	ValaCodeVisitor * self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}

void
vala_code_visitor_unref (gpointer instance)
{
	ValaCodeVisitor * self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		VALA_CODE_VISITOR_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}

