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

/* treebuilder.vala
 *
 * Copyright (C) 2011  Florian Brosch
 *
 * 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:
 * 	Florian Brosch <flo.brosch@gmail.com>
 */

#include <glib.h>
#include <glib-object.h>
#include <vala.h>
#include <valagee.h>
#include <valadoc.h>
#include <stdlib.h>
#include <string.h>
#include <valacodegen.h>
#include <glib/gstdio.h>
#include <stdio.h>
#include <gobject/gvaluecollector.h>


#define VALADOC_DRIVERS_TYPE_TREE_BUILDER (valadoc_drivers_tree_builder_get_type ())
#define VALADOC_DRIVERS_TREE_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALADOC_DRIVERS_TYPE_TREE_BUILDER, ValadocDriversTreeBuilder))
#define VALADOC_DRIVERS_TREE_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALADOC_DRIVERS_TYPE_TREE_BUILDER, ValadocDriversTreeBuilderClass))
#define VALADOC_DRIVERS_IS_TREE_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALADOC_DRIVERS_TYPE_TREE_BUILDER))
#define VALADOC_DRIVERS_IS_TREE_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALADOC_DRIVERS_TYPE_TREE_BUILDER))
#define VALADOC_DRIVERS_TREE_BUILDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALADOC_DRIVERS_TYPE_TREE_BUILDER, ValadocDriversTreeBuilderClass))

typedef struct _ValadocDriversTreeBuilder ValadocDriversTreeBuilder;
typedef struct _ValadocDriversTreeBuilderClass ValadocDriversTreeBuilderClass;
typedef struct _ValadocDriversTreeBuilderPrivate ValadocDriversTreeBuilderPrivate;

#define VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA (valadoc_drivers_tree_builder_package_meta_data_get_type ())
#define VALADOC_DRIVERS_TREE_BUILDER_PACKAGE_META_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA, ValadocDriversTreeBuilderPackageMetaData))
#define VALADOC_DRIVERS_TREE_BUILDER_PACKAGE_META_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA, ValadocDriversTreeBuilderPackageMetaDataClass))
#define VALADOC_DRIVERS_TREE_BUILDER_IS_PACKAGE_META_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA))
#define VALADOC_DRIVERS_TREE_BUILDER_IS_PACKAGE_META_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA))
#define VALADOC_DRIVERS_TREE_BUILDER_PACKAGE_META_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA, ValadocDriversTreeBuilderPackageMetaDataClass))

typedef struct _ValadocDriversTreeBuilderPackageMetaData ValadocDriversTreeBuilderPackageMetaData;
typedef struct _ValadocDriversTreeBuilderPackageMetaDataClass ValadocDriversTreeBuilderPackageMetaDataClass;
#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
#define _valadoc_drivers_tree_builder_package_meta_data_unref0(var) ((var == NULL) ? NULL : (var = (valadoc_drivers_tree_builder_package_meta_data_unref (var), NULL)))
#define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL)))
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _valadoc_api_tree_unref0(var) ((var == NULL) ? NULL : (var = (valadoc_api_tree_unref (var), NULL)))
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
#define _valadoc_api_source_comment_unref0(var) ((var == NULL) ? NULL : (var = (valadoc_api_source_comment_unref (var), NULL)))
#define _vala_source_reference_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_reference_unref (var), NULL)))
#define _vala_comment_unref0(var) ((var == NULL) ? NULL : (var = (vala_comment_unref (var), NULL)))
#define _vala_map_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_iterator_unref (var), NULL)))
typedef struct _ValadocDriversTreeBuilderPackageMetaDataPrivate ValadocDriversTreeBuilderPackageMetaDataPrivate;
#define _vala_source_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_file_unref (var), NULL)))
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
#define _vala_code_visitor_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_visitor_unref (var), NULL)))
#define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
typedef struct _ValadocDriversTreeBuilderParamSpecPackageMetaData ValadocDriversTreeBuilderParamSpecPackageMetaData;
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);

struct _ValadocDriversTreeBuilder {
	ValaCodeVisitor parent_instance;
	ValadocDriversTreeBuilderPrivate * priv;
};

struct _ValadocDriversTreeBuilderClass {
	ValaCodeVisitorClass parent_class;
};

struct _ValadocDriversTreeBuilderPrivate {
	ValaArrayList* packages;
	ValadocDriversTreeBuilderPackageMetaData* source_package;
	ValaHashMap* files;
	ValaHashMap* symbol_map;
	ValadocErrorReporter* reporter;
	ValadocSettings* settings;
	ValadocApiNode* current_node;
	ValadocApiTree* tree;
	ValadocApiClass* glib_error;
};

struct _ValadocDriversTreeBuilderPackageMetaData {
	GTypeInstance parent_instance;
	volatile int ref_count;
	ValadocDriversTreeBuilderPackageMetaDataPrivate * priv;
	ValadocApiPackage* package;
	ValaHashMap* namespaces;
	ValaArrayList* files;
};

struct _ValadocDriversTreeBuilderPackageMetaDataClass {
	GTypeClass parent_class;
	void (*finalize) (ValadocDriversTreeBuilderPackageMetaData *self);
};

struct _ValadocDriversTreeBuilderParamSpecPackageMetaData {
	GParamSpec parent_instance;
};


static gpointer valadoc_drivers_tree_builder_parent_class = NULL;
static gpointer valadoc_drivers_tree_builder_package_meta_data_parent_class = NULL;

GType valadoc_drivers_tree_builder_get_type (void) G_GNUC_CONST;
static gpointer valadoc_drivers_tree_builder_package_meta_data_ref (gpointer instance);
static void valadoc_drivers_tree_builder_package_meta_data_unref (gpointer instance);
static GParamSpec* valadoc_drivers_tree_builder_param_spec_package_meta_data (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED;
static void valadoc_drivers_tree_builder_value_set_package_meta_data (GValue* value, gpointer v_object) G_GNUC_UNUSED;
static void valadoc_drivers_tree_builder_value_take_package_meta_data (GValue* value, gpointer v_object) G_GNUC_UNUSED;
static gpointer valadoc_drivers_tree_builder_value_get_package_meta_data (const GValue* value) G_GNUC_UNUSED;
static GType valadoc_drivers_tree_builder_package_meta_data_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
#define VALADOC_DRIVERS_TREE_BUILDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALADOC_DRIVERS_TYPE_TREE_BUILDER, ValadocDriversTreeBuilderPrivate))
ValadocApiClass* valadoc_drivers_tree_builder_get_glib_error (ValadocDriversTreeBuilder* self);
ValaHashMap* valadoc_drivers_tree_builder_get_symbol_map (ValadocDriversTreeBuilder* self);
static ValadocApiPointer* valadoc_drivers_tree_builder_create_pointer (ValadocDriversTreeBuilder* self, ValaPointerType* vtyperef, ValadocApiItem* parent, ValadocApiNode* caller);
static ValadocApiArray* valadoc_drivers_tree_builder_create_array (ValadocDriversTreeBuilder* self, ValaArrayType* vtyperef, ValadocApiItem* parent, ValadocApiNode* caller);
static ValadocApiTypeReference* valadoc_drivers_tree_builder_create_type_reference (ValadocDriversTreeBuilder* self, ValaDataType* vtyperef, ValadocApiItem* parent, ValadocApiNode* caller);
static gboolean valadoc_drivers_tree_builder_type_reference_pass_ownership (ValadocDriversTreeBuilder* self, ValaDataType* element);
static ValadocApiOwnership valadoc_drivers_tree_builder_get_type_reference_ownership (ValadocDriversTreeBuilder* self, ValaDataType* element);
static void valadoc_drivers_tree_builder_process_attributes (ValadocDriversTreeBuilder* self, ValadocApiSymbol* parent, GList* lst);
static gboolean _vala_string_array_contains (gchar* * stack, int stack_length, gchar* needle);
static gchar* valadoc_drivers_tree_builder_get_ccode_type_id (ValadocDriversTreeBuilder* self, ValaCodeNode* node);
static gboolean valadoc_drivers_tree_builder_is_reference_counting (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym);
static gchar* valadoc_drivers_tree_builder_get_ref_function (ValadocDriversTreeBuilder* self, ValaClass* sym);
static gchar* valadoc_drivers_tree_builder_get_unref_function (ValadocDriversTreeBuilder* self, ValaClass* sym);
static gchar* valadoc_drivers_tree_builder_get_finalize_function_name (ValadocDriversTreeBuilder* self, ValaClass* element);
static gchar* valadoc_drivers_tree_builder_get_free_function_name (ValadocDriversTreeBuilder* self, ValaClass* element);
static gchar* valadoc_drivers_tree_builder_get_finish_name (ValadocDriversTreeBuilder* self, ValaMethod* m);
static gchar* valadoc_drivers_tree_builder_get_take_value_function (ValadocDriversTreeBuilder* self, ValaClass* sym);
static gchar* valadoc_drivers_tree_builder_get_get_value_function (ValadocDriversTreeBuilder* self, ValaClass* sym);
static gchar* valadoc_drivers_tree_builder_get_set_value_function (ValadocDriversTreeBuilder* self, ValaClass* sym);
static gchar* valadoc_drivers_tree_builder_get_param_spec_function (ValadocDriversTreeBuilder* self, ValaCodeNode* sym);
static gchar* valadoc_drivers_tree_builder_get_dup_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym);
static gchar* valadoc_drivers_tree_builder_get_copy_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym);
static gchar* valadoc_drivers_tree_builder_get_destroy_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym);
static gchar* valadoc_drivers_tree_builder_get_free_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym);
static gchar* valadoc_drivers_tree_builder_get_cname (ValadocDriversTreeBuilder* self, ValaSymbol* symbol);
static ValadocApiSourceComment* valadoc_drivers_tree_builder_create_comment (ValadocDriversTreeBuilder* self, ValaComment* comment);
static gchar* valadoc_drivers_tree_builder_get_method_name (ValadocDriversTreeBuilder* self, ValaMethod* element);
static gchar* valadoc_drivers_tree_builder_get_quark_macro_name (ValadocDriversTreeBuilder* self, ValaErrorDomain* element);
static gchar* valadoc_drivers_tree_builder_get_private_cname (ValadocDriversTreeBuilder* self, ValaClass* element);
static gchar* valadoc_drivers_tree_builder_get_class_macro_name (ValadocDriversTreeBuilder* self, ValaClass* element);
static gchar* valadoc_drivers_tree_builder_get_class_type_macro_name (ValadocDriversTreeBuilder* self, ValaClass* element);
static gchar* valadoc_drivers_tree_builder_get_is_type_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element);
static gchar* valadoc_drivers_tree_builder_get_is_class_type_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element);
static gchar* valadoc_drivers_tree_builder_get_type_function_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element);
static gchar* valadoc_drivers_tree_builder_get_type_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element);
static gchar* valadoc_drivers_tree_builder_get_type_cast_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element);
static gchar* valadoc_drivers_tree_builder_get_interface_macro_name (ValadocDriversTreeBuilder* self, ValaInterface* element);
static gchar* valadoc_drivers_tree_builder_get_quark_function_name (ValadocDriversTreeBuilder* self, ValaErrorDomain* element);
static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_get_package_meta_data (ValadocDriversTreeBuilder* self, ValadocApiPackage* pkg);
static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_register_package (ValadocDriversTreeBuilder* self, ValadocApiPackage* package);
static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_package_meta_data_new (ValadocApiPackage* package);
static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_package_meta_data_construct (GType object_type, ValadocApiPackage* package);
static ValadocApiSourceFile* valadoc_drivers_tree_builder_register_source_file (ValadocDriversTreeBuilder* self, ValadocDriversTreeBuilderPackageMetaData* meta_data, ValaSourceFile* source_file);
static void valadoc_drivers_tree_builder_package_meta_data_register_source_file (ValadocDriversTreeBuilderPackageMetaData* self, ValaSourceFile* file);
static ValadocApiSourceFile* valadoc_drivers_tree_builder_get_source_file (ValadocDriversTreeBuilder* self, ValaSymbol* symbol);
static ValadocApiPackage* valadoc_drivers_tree_builder_find_package_for_file (ValadocDriversTreeBuilder* self, ValaSourceFile* source_file);
static gboolean valadoc_drivers_tree_builder_package_meta_data_is_package_for_file (ValadocDriversTreeBuilderPackageMetaData* self, ValaSourceFile* source_file);
static ValadocApiNamespace* valadoc_drivers_tree_builder_get_namespace (ValadocDriversTreeBuilder* self, ValadocApiPackage* pkg, ValaSymbol* symbol, ValadocApiSourceFile* file);
static ValadocApiNamespace* valadoc_drivers_tree_builder_package_meta_data_get_namespace (ValadocDriversTreeBuilderPackageMetaData* self, ValaNamespace* vns, ValadocApiSourceFile* file);
static ValadocMethodBindingType valadoc_drivers_tree_builder_get_method_binding_type (ValadocDriversTreeBuilder* self, ValaMethod* element);
static ValadocApiSymbolAccessibility valadoc_drivers_tree_builder_get_access_modifier (ValadocDriversTreeBuilder* self, ValaSymbol* symbol);
static ValadocApiPropertyAccessorType valadoc_drivers_tree_builder_get_property_accessor_type (ValadocDriversTreeBuilder* self, ValaPropertyAccessor* element);
static gboolean valadoc_drivers_tree_builder_is_type_reference_unowned (ValadocDriversTreeBuilder* self, ValaDataType* element);
static gboolean valadoc_drivers_tree_builder_is_type_reference_owned (ValadocDriversTreeBuilder* self, ValaDataType* element);
static gboolean valadoc_drivers_tree_builder_is_type_reference_weak (ValadocDriversTreeBuilder* self, ValaDataType* element);
static ValadocApiOwnership valadoc_drivers_tree_builder_get_property_ownership (ValadocDriversTreeBuilder* self, ValaPropertyAccessor* element);
static ValadocApiPropertyBindingType valadoc_drivers_tree_builder_get_property_binding_type (ValadocDriversTreeBuilder* self, ValaProperty* element);
static ValadocApiFormalParameterType valadoc_drivers_tree_builder_get_formal_parameter_type (ValadocDriversTreeBuilder* self, ValaParameter* element);
static gchar* valadoc_drivers_tree_builder_get_package_name (ValadocDriversTreeBuilder* self, const gchar* path);
static gboolean valadoc_drivers_tree_builder_add_package (ValadocDriversTreeBuilder* self, ValaCodeContext* context, const gchar* pkg);
static void valadoc_drivers_tree_builder_add_deps (ValadocDriversTreeBuilder* self, ValaCodeContext* context, const gchar* file_path, const gchar* pkg_name);
static void valadoc_drivers_tree_builder_add_depencies (ValadocDriversTreeBuilder* self, ValaCodeContext* context, gchar** packages, int packages_length1);
static void valadoc_drivers_tree_builder_add_documented_files (ValadocDriversTreeBuilder* self, ValaCodeContext* context, gchar** sources, int sources_length1);
static ValaCodeContext* valadoc_drivers_tree_builder_create_valac_tree (ValadocDriversTreeBuilder* self, ValadocSettings* settings);
static gchar** _vala_array_dup1 (gchar** self, int length);
static gchar** _vala_array_dup2 (gchar** self, int length);
static gchar** _vala_array_dup3 (gchar** self, int length);
static void valadoc_drivers_tree_builder_process_children (ValadocDriversTreeBuilder* self, ValadocApiNode* node, ValaCodeNode* element);
static ValadocApiNode* valadoc_drivers_tree_builder_get_parent_node_for (ValadocDriversTreeBuilder* self, ValaSymbol* element);
static void valadoc_drivers_tree_builder_real_visit_namespace (ValaCodeVisitor* base, ValaNamespace* element);
static void valadoc_drivers_tree_builder_real_visit_class (ValaCodeVisitor* base, ValaClass* element);
static void valadoc_drivers_tree_builder_real_visit_interface (ValaCodeVisitor* base, ValaInterface* element);
static void valadoc_drivers_tree_builder_real_visit_struct (ValaCodeVisitor* base, ValaStruct* element);
static void valadoc_drivers_tree_builder_real_visit_field (ValaCodeVisitor* base, ValaField* element);
static void valadoc_drivers_tree_builder_real_visit_property (ValaCodeVisitor* base, ValaProperty* element);
static void valadoc_drivers_tree_builder_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* element);
static void valadoc_drivers_tree_builder_real_visit_method (ValaCodeVisitor* base, ValaMethod* element);
static void valadoc_drivers_tree_builder_real_visit_signal (ValaCodeVisitor* base, ValaSignal* element);
static void valadoc_drivers_tree_builder_real_visit_delegate (ValaCodeVisitor* base, ValaDelegate* element);
static void valadoc_drivers_tree_builder_real_visit_enum (ValaCodeVisitor* base, ValaEnum* element);
static void valadoc_drivers_tree_builder_real_visit_enum_value (ValaCodeVisitor* base, ValaEnumValue* element);
static void valadoc_drivers_tree_builder_real_visit_constant (ValaCodeVisitor* base, ValaConstant* element);
static void valadoc_drivers_tree_builder_real_visit_error_domain (ValaCodeVisitor* base, ValaErrorDomain* element);
static void valadoc_drivers_tree_builder_real_visit_error_code (ValaCodeVisitor* base, ValaErrorCode* element);
static void valadoc_drivers_tree_builder_real_visit_type_parameter (ValaCodeVisitor* base, ValaTypeParameter* element);
static void valadoc_drivers_tree_builder_real_visit_formal_parameter (ValaCodeVisitor* base, ValaParameter* element);
ValadocApiTree* valadoc_drivers_tree_builder_build (ValadocDriversTreeBuilder* self, ValadocSettings* settings, ValadocErrorReporter* reporter);
ValadocDriversTreeBuilder* valadoc_drivers_tree_builder_new (void);
ValadocDriversTreeBuilder* valadoc_drivers_tree_builder_construct (GType object_type);
static void valadoc_drivers_tree_builder_package_meta_data_finalize (ValadocDriversTreeBuilderPackageMetaData * obj);
static void valadoc_drivers_tree_builder_finalize (ValaCodeVisitor * obj);
static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
static gint _vala_array_length (gpointer array);


static gpointer _g_object_ref0 (gpointer self) {
	return self ? g_object_ref (self) : NULL;
}


ValadocApiClass* valadoc_drivers_tree_builder_get_glib_error (ValadocDriversTreeBuilder* self) {
	ValadocApiClass* result = NULL;
	ValadocApiClass* _tmp0_;
	ValadocApiClass* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->glib_error;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	result = _tmp1_;
	return result;
}


static gpointer _vala_map_ref0 (gpointer self) {
	return self ? vala_map_ref (self) : NULL;
}


ValaHashMap* valadoc_drivers_tree_builder_get_symbol_map (ValadocDriversTreeBuilder* self) {
	ValaHashMap* result = NULL;
	ValaHashMap* _tmp0_;
	ValaHashMap* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->symbol_map;
	_tmp1_ = _vala_map_ref0 (_tmp0_);
	result = _tmp1_;
	return result;
}


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


static ValadocApiPointer* valadoc_drivers_tree_builder_create_pointer (ValadocDriversTreeBuilder* self, ValaPointerType* vtyperef, ValadocApiItem* parent, ValadocApiNode* caller) {
	ValadocApiPointer* result = NULL;
	ValadocApiPointer* ptr = NULL;
	ValadocApiItem* _tmp0_;
	ValaPointerType* _tmp1_;
	ValadocApiPointer* _tmp2_;
	ValaDataType* vntype = NULL;
	ValaPointerType* _tmp3_;
	ValaDataType* _tmp4_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (vtyperef != NULL, NULL);
	g_return_val_if_fail (parent != NULL, NULL);
	g_return_val_if_fail (caller != NULL, NULL);
	_tmp0_ = parent;
	_tmp1_ = vtyperef;
	_tmp2_ = valadoc_api_pointer_new (_tmp0_, _tmp1_);
	ptr = _tmp2_;
	_tmp3_ = vtyperef;
	_tmp4_ = vala_pointer_type_get_base_type (_tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = _vala_code_node_ref0 (_tmp5_);
	vntype = _tmp6_;
	_tmp7_ = vntype;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_POINTER_TYPE)) {
		ValadocApiPointer* _tmp8_;
		ValaDataType* _tmp9_;
		ValadocApiPointer* _tmp10_;
		ValadocApiNode* _tmp11_;
		ValadocApiPointer* _tmp12_;
		ValadocApiPointer* _tmp13_;
		_tmp8_ = ptr;
		_tmp9_ = vntype;
		_tmp10_ = ptr;
		_tmp11_ = caller;
		_tmp12_ = valadoc_drivers_tree_builder_create_pointer (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_POINTER_TYPE, ValaPointerType), (ValadocApiItem*) _tmp10_, _tmp11_);
		_tmp13_ = _tmp12_;
		valadoc_api_pointer_set_data_type (_tmp8_, (ValadocApiItem*) _tmp13_);
		_g_object_unref0 (_tmp13_);
	} else {
		ValaDataType* _tmp14_;
		_tmp14_ = vntype;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp14_, VALA_TYPE_ARRAY_TYPE)) {
			ValadocApiPointer* _tmp15_;
			ValaDataType* _tmp16_;
			ValadocApiPointer* _tmp17_;
			ValadocApiNode* _tmp18_;
			ValadocApiArray* _tmp19_;
			ValadocApiArray* _tmp20_;
			_tmp15_ = ptr;
			_tmp16_ = vntype;
			_tmp17_ = ptr;
			_tmp18_ = caller;
			_tmp19_ = valadoc_drivers_tree_builder_create_array (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), (ValadocApiItem*) _tmp17_, _tmp18_);
			_tmp20_ = _tmp19_;
			valadoc_api_pointer_set_data_type (_tmp15_, (ValadocApiItem*) _tmp20_);
			_g_object_unref0 (_tmp20_);
		} else {
			ValadocApiPointer* _tmp21_;
			ValaDataType* _tmp22_;
			ValadocApiPointer* _tmp23_;
			ValadocApiNode* _tmp24_;
			ValadocApiTypeReference* _tmp25_;
			ValadocApiTypeReference* _tmp26_;
			_tmp21_ = ptr;
			_tmp22_ = vntype;
			_tmp23_ = ptr;
			_tmp24_ = caller;
			_tmp25_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp22_, (ValadocApiItem*) _tmp23_, _tmp24_);
			_tmp26_ = _tmp25_;
			valadoc_api_pointer_set_data_type (_tmp21_, (ValadocApiItem*) _tmp26_);
			_g_object_unref0 (_tmp26_);
		}
	}
	result = ptr;
	_vala_code_node_unref0 (vntype);
	return result;
}


static ValadocApiArray* valadoc_drivers_tree_builder_create_array (ValadocDriversTreeBuilder* self, ValaArrayType* vtyperef, ValadocApiItem* parent, ValadocApiNode* caller) {
	ValadocApiArray* result = NULL;
	ValadocApiArray* arr = NULL;
	ValadocApiItem* _tmp0_;
	ValaArrayType* _tmp1_;
	ValadocApiArray* _tmp2_;
	ValaDataType* vntype = NULL;
	ValaArrayType* _tmp3_;
	ValaDataType* _tmp4_;
	ValaDataType* _tmp5_;
	ValaDataType* _tmp6_;
	ValaDataType* _tmp7_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (vtyperef != NULL, NULL);
	g_return_val_if_fail (parent != NULL, NULL);
	g_return_val_if_fail (caller != NULL, NULL);
	_tmp0_ = parent;
	_tmp1_ = vtyperef;
	_tmp2_ = valadoc_api_array_new (_tmp0_, _tmp1_);
	arr = _tmp2_;
	_tmp3_ = vtyperef;
	_tmp4_ = vala_array_type_get_element_type (_tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = _vala_code_node_ref0 (_tmp5_);
	vntype = _tmp6_;
	_tmp7_ = vntype;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_ARRAY_TYPE)) {
		ValadocApiArray* _tmp8_;
		ValaDataType* _tmp9_;
		ValadocApiArray* _tmp10_;
		ValadocApiNode* _tmp11_;
		ValadocApiTypeReference* _tmp12_;
		ValadocApiTypeReference* _tmp13_;
		_tmp8_ = arr;
		_tmp9_ = vntype;
		_tmp10_ = arr;
		_tmp11_ = caller;
		_tmp12_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp9_, (ValadocApiItem*) _tmp10_, _tmp11_);
		_tmp13_ = _tmp12_;
		valadoc_api_array_set_data_type (_tmp8_, (ValadocApiItem*) _tmp13_);
		_g_object_unref0 (_tmp13_);
	} else {
		ValadocApiArray* _tmp14_;
		ValaDataType* _tmp15_;
		ValadocApiArray* _tmp16_;
		ValadocApiNode* _tmp17_;
		ValadocApiTypeReference* _tmp18_;
		ValadocApiTypeReference* _tmp19_;
		_tmp14_ = arr;
		_tmp15_ = vntype;
		_tmp16_ = arr;
		_tmp17_ = caller;
		_tmp18_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp15_, (ValadocApiItem*) _tmp16_, _tmp17_);
		_tmp19_ = _tmp18_;
		valadoc_api_array_set_data_type (_tmp14_, (ValadocApiItem*) _tmp19_);
		_g_object_unref0 (_tmp19_);
	}
	result = arr;
	_vala_code_node_unref0 (vntype);
	return result;
}


static ValadocApiTypeReference* valadoc_drivers_tree_builder_create_type_reference (ValadocDriversTreeBuilder* self, ValaDataType* vtyperef, ValadocApiItem* parent, ValadocApiNode* caller) {
	ValadocApiTypeReference* result = NULL;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ValaDataType* _tmp3_;
	gboolean is_nullable = FALSE;
	gchar* _tmp9_ = NULL;
	gboolean _tmp10_ = FALSE;
	ValaDataType* _tmp11_;
	gchar* signature = NULL;
	gchar* _tmp19_;
	gboolean pass_ownership = FALSE;
	ValaDataType* _tmp20_;
	gboolean _tmp21_;
	ValadocApiOwnership ownership = 0;
	ValaDataType* _tmp22_;
	ValadocApiOwnership _tmp23_;
	gboolean _tmp24_ = FALSE;
	ValaDataType* _tmp25_;
	gboolean is_dynamic = FALSE;
	ValadocApiTypeReference* type_ref = NULL;
	ValadocApiItem* _tmp29_;
	ValadocApiOwnership _tmp30_;
	gboolean _tmp31_;
	gboolean _tmp32_;
	gboolean _tmp33_;
	const gchar* _tmp34_;
	ValaDataType* _tmp35_;
	ValadocApiTypeReference* _tmp36_;
	ValaDataType* _tmp37_;
	ValaDataType* _tmp51_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (parent != NULL, NULL);
	g_return_val_if_fail (caller != NULL, NULL);
	_tmp3_ = vtyperef;
	if (_tmp3_ != NULL) {
		ValaDataType* _tmp4_;
		gboolean _tmp5_;
		gboolean _tmp6_;
		_tmp4_ = vtyperef;
		_tmp5_ = vala_data_type_get_nullable (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp2_ = _tmp6_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		ValaDataType* _tmp7_;
		_tmp7_ = vtyperef;
		_tmp1_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_GENERIC_TYPE);
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		ValaDataType* _tmp8_;
		_tmp8_ = vtyperef;
		_tmp0_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_POINTER_TYPE);
	} else {
		_tmp0_ = FALSE;
	}
	is_nullable = _tmp0_;
	_tmp11_ = vtyperef;
	if (_tmp11_ != NULL) {
		ValaDataType* _tmp12_;
		ValaTypeSymbol* _tmp13_;
		ValaTypeSymbol* _tmp14_;
		_tmp12_ = vtyperef;
		_tmp13_ = vala_data_type_get_data_type (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp10_ = _tmp14_ != NULL;
	} else {
		_tmp10_ = FALSE;
	}
	if (_tmp10_) {
		ValaDataType* _tmp15_;
		ValaTypeSymbol* _tmp16_;
		ValaTypeSymbol* _tmp17_;
		gchar* _tmp18_;
		_tmp15_ = vtyperef;
		_tmp16_ = vala_data_type_get_data_type (_tmp15_);
		_tmp17_ = _tmp16_;
		_tmp18_ = vala_gvariant_module_get_dbus_signature ((ValaSymbol*) _tmp17_);
		_g_free0 (_tmp9_);
		_tmp9_ = _tmp18_;
	} else {
		_g_free0 (_tmp9_);
		_tmp9_ = NULL;
	}
	_tmp19_ = g_strdup (_tmp9_);
	signature = _tmp19_;
	_tmp20_ = vtyperef;
	_tmp21_ = valadoc_drivers_tree_builder_type_reference_pass_ownership (self, _tmp20_);
	pass_ownership = _tmp21_;
	_tmp22_ = vtyperef;
	_tmp23_ = valadoc_drivers_tree_builder_get_type_reference_ownership (self, _tmp22_);
	ownership = _tmp23_;
	_tmp25_ = vtyperef;
	if (_tmp25_ != NULL) {
		ValaDataType* _tmp26_;
		gboolean _tmp27_;
		gboolean _tmp28_;
		_tmp26_ = vtyperef;
		_tmp27_ = vala_data_type_get_is_dynamic (_tmp26_);
		_tmp28_ = _tmp27_;
		_tmp24_ = _tmp28_;
	} else {
		_tmp24_ = FALSE;
	}
	is_dynamic = _tmp24_;
	_tmp29_ = parent;
	_tmp30_ = ownership;
	_tmp31_ = pass_ownership;
	_tmp32_ = is_dynamic;
	_tmp33_ = is_nullable;
	_tmp34_ = signature;
	_tmp35_ = vtyperef;
	_tmp36_ = valadoc_api_typereference_new (_tmp29_, _tmp30_, _tmp31_, _tmp32_, _tmp33_, _tmp34_, _tmp35_);
	type_ref = _tmp36_;
	_tmp37_ = vtyperef;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp37_, VALA_TYPE_POINTER_TYPE)) {
		ValadocApiTypeReference* _tmp38_;
		ValaDataType* _tmp39_;
		ValadocApiTypeReference* _tmp40_;
		ValadocApiNode* _tmp41_;
		ValadocApiPointer* _tmp42_;
		ValadocApiPointer* _tmp43_;
		_tmp38_ = type_ref;
		_tmp39_ = vtyperef;
		_tmp40_ = type_ref;
		_tmp41_ = caller;
		_tmp42_ = valadoc_drivers_tree_builder_create_pointer (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, VALA_TYPE_POINTER_TYPE, ValaPointerType), (ValadocApiItem*) _tmp40_, _tmp41_);
		_tmp43_ = _tmp42_;
		valadoc_api_typereference_set_data_type (_tmp38_, (ValadocApiItem*) _tmp43_);
		_g_object_unref0 (_tmp43_);
	} else {
		ValaDataType* _tmp44_;
		_tmp44_ = vtyperef;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, VALA_TYPE_ARRAY_TYPE)) {
			ValadocApiTypeReference* _tmp45_;
			ValaDataType* _tmp46_;
			ValadocApiTypeReference* _tmp47_;
			ValadocApiNode* _tmp48_;
			ValadocApiArray* _tmp49_;
			ValadocApiArray* _tmp50_;
			_tmp45_ = type_ref;
			_tmp46_ = vtyperef;
			_tmp47_ = type_ref;
			_tmp48_ = caller;
			_tmp49_ = valadoc_drivers_tree_builder_create_array (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), (ValadocApiItem*) _tmp47_, _tmp48_);
			_tmp50_ = _tmp49_;
			valadoc_api_typereference_set_data_type (_tmp45_, (ValadocApiItem*) _tmp50_);
			_g_object_unref0 (_tmp50_);
		}
	}
	_tmp51_ = vtyperef;
	if (_tmp51_ != NULL) {
		{
			ValaList* _vdtype_list = NULL;
			ValaDataType* _tmp52_;
			ValaList* _tmp53_;
			gint _vdtype_size = 0;
			ValaList* _tmp54_;
			gint _tmp55_;
			gint _tmp56_;
			gint _vdtype_index = 0;
			_tmp52_ = vtyperef;
			_tmp53_ = vala_data_type_get_type_arguments (_tmp52_);
			_vdtype_list = _tmp53_;
			_tmp54_ = _vdtype_list;
			_tmp55_ = vala_collection_get_size ((ValaCollection*) _tmp54_);
			_tmp56_ = _tmp55_;
			_vdtype_size = _tmp56_;
			_vdtype_index = -1;
			while (TRUE) {
				gint _tmp57_;
				gint _tmp58_;
				gint _tmp59_;
				ValaDataType* vdtype = NULL;
				ValaList* _tmp60_;
				gint _tmp61_;
				gpointer _tmp62_;
				ValadocApiTypeReference* type_param = NULL;
				ValaDataType* _tmp63_;
				ValadocApiTypeReference* _tmp64_;
				ValadocApiNode* _tmp65_;
				ValadocApiTypeReference* _tmp66_;
				ValadocApiTypeReference* _tmp67_;
				ValadocApiTypeReference* _tmp68_;
				_tmp57_ = _vdtype_index;
				_vdtype_index = _tmp57_ + 1;
				_tmp58_ = _vdtype_index;
				_tmp59_ = _vdtype_size;
				if (!(_tmp58_ < _tmp59_)) {
					break;
				}
				_tmp60_ = _vdtype_list;
				_tmp61_ = _vdtype_index;
				_tmp62_ = vala_list_get (_tmp60_, _tmp61_);
				vdtype = (ValaDataType*) _tmp62_;
				_tmp63_ = vdtype;
				_tmp64_ = type_ref;
				_tmp65_ = caller;
				_tmp66_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp63_, (ValadocApiItem*) _tmp64_, _tmp65_);
				type_param = _tmp66_;
				_tmp67_ = type_ref;
				_tmp68_ = type_param;
				valadoc_api_typereference_add_type_argument (_tmp67_, _tmp68_);
				_g_object_unref0 (type_param);
				_vala_code_node_unref0 (vdtype);
			}
			_vala_iterable_unref0 (_vdtype_list);
		}
	}
	result = type_ref;
	_g_free0 (signature);
	_g_free0 (_tmp9_);
	return result;
}


static gboolean bool_parse (const gchar* str) {
	gboolean result = FALSE;
	const gchar* _tmp0_;
	g_return_val_if_fail (str != NULL, FALSE);
	_tmp0_ = str;
	if (g_strcmp0 (_tmp0_, "true") == 0) {
		result = TRUE;
		return result;
	} else {
		result = FALSE;
		return result;
	}
}


static gboolean _vala_string_array_contains (gchar* * stack, int stack_length, gchar* needle) {
	int i;
	for (i = 0; i < stack_length; i++) {
		if (g_strcmp0 (stack[i], needle) == 0) {
			return TRUE;
		}
	}
	return FALSE;
}


static void valadoc_drivers_tree_builder_process_attributes (ValadocDriversTreeBuilder* self, ValadocApiSymbol* parent, GList* lst) {
	gchar** attributes = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar** _tmp22_;
	gint attributes_length1;
	gint _attributes_size_;
	gchar* tmp = NULL;
	gchar* _tmp23_;
	GList* _tmp24_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (parent != NULL);
	_tmp0_ = g_strdup ("ReturnsModifiedPointer");
	_tmp1_ = g_strdup ("DestroysInstance");
	_tmp2_ = g_strdup ("GenericAccessors");
	_tmp3_ = g_strdup ("NoAccessorMethod");
	_tmp4_ = g_strdup ("NoArrayLength");
	_tmp5_ = g_strdup ("Experimental");
	_tmp6_ = g_strdup ("Diagnostics");
	_tmp7_ = g_strdup ("PrintfFormat");
	_tmp8_ = g_strdup ("PointerType");
	_tmp9_ = g_strdup ("ScanfFormat");
	_tmp10_ = g_strdup ("ThreadLocal");
	_tmp11_ = g_strdup ("SimpleType");
	_tmp12_ = g_strdup ("HasEmitter");
	_tmp13_ = g_strdup ("ModuleInit");
	_tmp14_ = g_strdup ("NoWrapper");
	_tmp15_ = g_strdup ("Immutable");
	_tmp16_ = g_strdup ("ErrorBase");
	_tmp17_ = g_strdup ("NoReturn");
	_tmp18_ = g_strdup ("NoThrow");
	_tmp19_ = g_strdup ("Compact");
	_tmp20_ = g_strdup ("Assert");
	_tmp21_ = g_strdup ("Flags");
	_tmp22_ = g_new0 (gchar*, 22 + 1);
	_tmp22_[0] = _tmp0_;
	_tmp22_[1] = _tmp1_;
	_tmp22_[2] = _tmp2_;
	_tmp22_[3] = _tmp3_;
	_tmp22_[4] = _tmp4_;
	_tmp22_[5] = _tmp5_;
	_tmp22_[6] = _tmp6_;
	_tmp22_[7] = _tmp7_;
	_tmp22_[8] = _tmp8_;
	_tmp22_[9] = _tmp9_;
	_tmp22_[10] = _tmp10_;
	_tmp22_[11] = _tmp11_;
	_tmp22_[12] = _tmp12_;
	_tmp22_[13] = _tmp13_;
	_tmp22_[14] = _tmp14_;
	_tmp22_[15] = _tmp15_;
	_tmp22_[16] = _tmp16_;
	_tmp22_[17] = _tmp17_;
	_tmp22_[18] = _tmp18_;
	_tmp22_[19] = _tmp19_;
	_tmp22_[20] = _tmp20_;
	_tmp22_[21] = _tmp21_;
	attributes = _tmp22_;
	attributes_length1 = 22;
	_attributes_size_ = attributes_length1;
	_tmp23_ = g_strdup ("");
	tmp = _tmp23_;
	_tmp24_ = lst;
	{
		GList* att_collection = NULL;
		GList* att_it = NULL;
		att_collection = _tmp24_;
		for (att_it = att_collection; att_it != NULL; att_it = att_it->next) {
			ValaAttribute* _tmp25_;
			ValaAttribute* att = NULL;
			_tmp25_ = _vala_code_node_ref0 ((ValaAttribute*) att_it->data);
			att = _tmp25_;
			{
				gboolean _tmp26_ = FALSE;
				gboolean _tmp27_ = FALSE;
				ValaAttribute* _tmp28_;
				const gchar* _tmp29_;
				const gchar* _tmp30_;
				_tmp28_ = att;
				_tmp29_ = vala_attribute_get_name (_tmp28_);
				_tmp30_ = _tmp29_;
				if (g_strcmp0 (_tmp30_, "CCode") == 0) {
					ValaAttribute* _tmp31_;
					ValaMap* _tmp32_;
					gpointer _tmp33_;
					const gchar* _tmp34_;
					_tmp31_ = att;
					_tmp32_ = _tmp31_->args;
					_tmp33_ = vala_map_get (_tmp32_, "has_target");
					_g_free0 (tmp);
					tmp = (gchar*) _tmp33_;
					_tmp34_ = tmp;
					_tmp27_ = _tmp34_ != NULL;
				} else {
					_tmp27_ = FALSE;
				}
				if (_tmp27_) {
					const gchar* _tmp35_;
					_tmp35_ = tmp;
					_tmp26_ = g_strcmp0 (_tmp35_, "false") == 0;
				} else {
					_tmp26_ = FALSE;
				}
				if (_tmp26_) {
					ValadocApiAttribute* new_attribute = NULL;
					ValadocApiSymbol* _tmp36_;
					ValadocApiSymbol* _tmp37_;
					ValadocApiSourceFile* _tmp38_;
					ValadocApiSourceFile* _tmp39_;
					ValaAttribute* _tmp40_;
					const gchar* _tmp41_;
					const gchar* _tmp42_;
					ValaAttribute* _tmp43_;
					ValadocApiAttribute* _tmp44_;
					ValadocApiAttribute* _tmp45_;
					ValadocApiAttribute* _tmp46_;
					ValaAttribute* _tmp47_;
					ValadocApiAttributeArgument* _tmp48_;
					ValadocApiAttributeArgument* _tmp49_;
					ValadocApiSymbol* _tmp50_;
					ValadocApiAttribute* _tmp51_;
					_tmp36_ = parent;
					_tmp37_ = parent;
					_tmp38_ = valadoc_api_node_get_source_file ((ValadocApiNode*) _tmp37_);
					_tmp39_ = _tmp38_;
					_tmp40_ = att;
					_tmp41_ = vala_attribute_get_name (_tmp40_);
					_tmp42_ = _tmp41_;
					_tmp43_ = att;
					_tmp44_ = valadoc_api_attribute_new ((ValadocApiNode*) _tmp36_, _tmp39_, _tmp42_, _tmp43_);
					_tmp45_ = _tmp44_;
					_g_object_unref0 (_tmp39_);
					new_attribute = _tmp45_;
					_tmp46_ = new_attribute;
					_tmp47_ = att;
					_tmp48_ = valadoc_api_attribute_add_boolean (_tmp46_, "has_target", FALSE, _tmp47_);
					_tmp49_ = _tmp48_;
					_g_object_unref0 (_tmp49_);
					_tmp50_ = parent;
					_tmp51_ = new_attribute;
					valadoc_api_symbol_add_attribute (_tmp50_, _tmp51_);
					_g_object_unref0 (new_attribute);
				} else {
					ValaAttribute* _tmp52_;
					const gchar* _tmp53_;
					const gchar* _tmp54_;
					_tmp52_ = att;
					_tmp53_ = vala_attribute_get_name (_tmp52_);
					_tmp54_ = _tmp53_;
					if (g_strcmp0 (_tmp54_, "Version") == 0) {
						ValadocApiAttribute* new_attribute = NULL;
						ValadocApiSymbol* _tmp55_;
						ValadocApiSymbol* _tmp56_;
						ValadocApiSourceFile* _tmp57_;
						ValadocApiSourceFile* _tmp58_;
						ValaAttribute* _tmp59_;
						const gchar* _tmp60_;
						const gchar* _tmp61_;
						ValaAttribute* _tmp62_;
						ValadocApiAttribute* _tmp63_;
						ValadocApiAttribute* _tmp64_;
						ValaAttribute* _tmp65_;
						ValaMap* _tmp66_;
						gpointer _tmp67_;
						const gchar* _tmp68_;
						ValaAttribute* _tmp75_;
						ValaMap* _tmp76_;
						gpointer _tmp77_;
						const gchar* _tmp78_;
						ValaAttribute* _tmp84_;
						ValaMap* _tmp85_;
						gpointer _tmp86_;
						const gchar* _tmp87_;
						ValaAttribute* _tmp102_;
						ValaMap* _tmp103_;
						gpointer _tmp104_;
						const gchar* _tmp105_;
						ValadocApiSymbol* _tmp111_;
						ValadocApiAttribute* _tmp112_;
						_tmp55_ = parent;
						_tmp56_ = parent;
						_tmp57_ = valadoc_api_node_get_source_file ((ValadocApiNode*) _tmp56_);
						_tmp58_ = _tmp57_;
						_tmp59_ = att;
						_tmp60_ = vala_attribute_get_name (_tmp59_);
						_tmp61_ = _tmp60_;
						_tmp62_ = att;
						_tmp63_ = valadoc_api_attribute_new ((ValadocApiNode*) _tmp55_, _tmp58_, _tmp61_, _tmp62_);
						_tmp64_ = _tmp63_;
						_g_object_unref0 (_tmp58_);
						new_attribute = _tmp64_;
						_tmp65_ = att;
						_tmp66_ = _tmp65_->args;
						_tmp67_ = vala_map_get (_tmp66_, "deprecated");
						_g_free0 (tmp);
						tmp = (gchar*) _tmp67_;
						_tmp68_ = tmp;
						if (_tmp68_ != NULL) {
							ValadocApiAttribute* _tmp69_;
							const gchar* _tmp70_;
							gboolean _tmp71_;
							ValaAttribute* _tmp72_;
							ValadocApiAttributeArgument* _tmp73_;
							ValadocApiAttributeArgument* _tmp74_;
							_tmp69_ = new_attribute;
							_tmp70_ = tmp;
							_tmp71_ = bool_parse (_tmp70_);
							_tmp72_ = att;
							_tmp73_ = valadoc_api_attribute_add_boolean (_tmp69_, "deprecated", _tmp71_, _tmp72_);
							_tmp74_ = _tmp73_;
							_g_object_unref0 (_tmp74_);
						}
						_tmp75_ = att;
						_tmp76_ = _tmp75_->args;
						_tmp77_ = vala_map_get (_tmp76_, "since");
						_g_free0 (tmp);
						tmp = (gchar*) _tmp77_;
						_tmp78_ = tmp;
						if (_tmp78_ != NULL) {
							ValadocApiAttribute* _tmp79_;
							const gchar* _tmp80_;
							ValaAttribute* _tmp81_;
							ValadocApiAttributeArgument* _tmp82_;
							ValadocApiAttributeArgument* _tmp83_;
							_tmp79_ = new_attribute;
							_tmp80_ = tmp;
							_tmp81_ = att;
							_tmp82_ = valadoc_api_attribute_add_string (_tmp79_, "since", _tmp80_, _tmp81_);
							_tmp83_ = _tmp82_;
							_g_object_unref0 (_tmp83_);
						}
						_tmp84_ = att;
						_tmp85_ = _tmp84_->args;
						_tmp86_ = vala_map_get (_tmp85_, "deprecated_since");
						_g_free0 (tmp);
						tmp = (gchar*) _tmp86_;
						_tmp87_ = tmp;
						if (_tmp87_ != NULL) {
							ValadocApiAttribute* _tmp88_;
							const gchar* _tmp89_;
							ValaAttribute* _tmp90_;
							ValadocApiAttributeArgument* _tmp91_;
							ValadocApiAttributeArgument* _tmp92_;
							ValaAttribute* _tmp93_;
							ValaMap* _tmp94_;
							gpointer _tmp95_;
							gchar* _tmp96_;
							gboolean _tmp97_;
							_tmp88_ = new_attribute;
							_tmp89_ = tmp;
							_tmp90_ = att;
							_tmp91_ = valadoc_api_attribute_add_string (_tmp88_, "deprecated_since", _tmp89_, _tmp90_);
							_tmp92_ = _tmp91_;
							_g_object_unref0 (_tmp92_);
							_tmp93_ = att;
							_tmp94_ = _tmp93_->args;
							_tmp95_ = vala_map_get (_tmp94_, "deprecated");
							_tmp96_ = (gchar*) _tmp95_;
							_tmp97_ = _tmp96_ == NULL;
							_g_free0 (_tmp96_);
							if (_tmp97_) {
								ValadocApiAttribute* _tmp98_;
								ValaAttribute* _tmp99_;
								ValadocApiAttributeArgument* _tmp100_;
								ValadocApiAttributeArgument* _tmp101_;
								_tmp98_ = new_attribute;
								_tmp99_ = att;
								_tmp100_ = valadoc_api_attribute_add_boolean (_tmp98_, "deprecated", TRUE, _tmp99_);
								_tmp101_ = _tmp100_;
								_g_object_unref0 (_tmp101_);
							}
						}
						_tmp102_ = att;
						_tmp103_ = _tmp102_->args;
						_tmp104_ = vala_map_get (_tmp103_, "replacement");
						_g_free0 (tmp);
						tmp = (gchar*) _tmp104_;
						_tmp105_ = tmp;
						if (_tmp105_ != NULL) {
							ValadocApiAttribute* _tmp106_;
							const gchar* _tmp107_;
							ValaAttribute* _tmp108_;
							ValadocApiAttributeArgument* _tmp109_;
							ValadocApiAttributeArgument* _tmp110_;
							_tmp106_ = new_attribute;
							_tmp107_ = tmp;
							_tmp108_ = att;
							_tmp109_ = valadoc_api_attribute_add_string (_tmp106_, "replacement", _tmp107_, _tmp108_);
							_tmp110_ = _tmp109_;
							_g_object_unref0 (_tmp110_);
						}
						_tmp111_ = parent;
						_tmp112_ = new_attribute;
						valadoc_api_symbol_add_attribute (_tmp111_, _tmp112_);
						_g_object_unref0 (new_attribute);
					} else {
						ValaAttribute* _tmp113_;
						const gchar* _tmp114_;
						const gchar* _tmp115_;
						_tmp113_ = att;
						_tmp114_ = vala_attribute_get_name (_tmp113_);
						_tmp115_ = _tmp114_;
						if (g_strcmp0 (_tmp115_, "Deprecated") == 0) {
							ValadocApiAttribute* new_attribute = NULL;
							ValadocApiSymbol* _tmp116_;
							ValadocApiSymbol* _tmp117_;
							ValadocApiSourceFile* _tmp118_;
							ValadocApiSourceFile* _tmp119_;
							ValaAttribute* _tmp120_;
							const gchar* _tmp121_;
							const gchar* _tmp122_;
							ValaAttribute* _tmp123_;
							ValadocApiAttribute* _tmp124_;
							ValadocApiAttribute* _tmp125_;
							ValaAttribute* _tmp126_;
							ValaMap* _tmp127_;
							gpointer _tmp128_;
							const gchar* _tmp129_;
							ValaAttribute* _tmp135_;
							ValaMap* _tmp136_;
							gpointer _tmp137_;
							const gchar* _tmp138_;
							ValadocApiSymbol* _tmp144_;
							ValadocApiAttribute* _tmp145_;
							_tmp116_ = parent;
							_tmp117_ = parent;
							_tmp118_ = valadoc_api_node_get_source_file ((ValadocApiNode*) _tmp117_);
							_tmp119_ = _tmp118_;
							_tmp120_ = att;
							_tmp121_ = vala_attribute_get_name (_tmp120_);
							_tmp122_ = _tmp121_;
							_tmp123_ = att;
							_tmp124_ = valadoc_api_attribute_new ((ValadocApiNode*) _tmp116_, _tmp119_, _tmp122_, _tmp123_);
							_tmp125_ = _tmp124_;
							_g_object_unref0 (_tmp119_);
							new_attribute = _tmp125_;
							_tmp126_ = att;
							_tmp127_ = _tmp126_->args;
							_tmp128_ = vala_map_get (_tmp127_, "since");
							_g_free0 (tmp);
							tmp = (gchar*) _tmp128_;
							_tmp129_ = tmp;
							if (_tmp129_ != NULL) {
								ValadocApiAttribute* _tmp130_;
								const gchar* _tmp131_;
								ValaAttribute* _tmp132_;
								ValadocApiAttributeArgument* _tmp133_;
								ValadocApiAttributeArgument* _tmp134_;
								_tmp130_ = new_attribute;
								_tmp131_ = tmp;
								_tmp132_ = att;
								_tmp133_ = valadoc_api_attribute_add_string (_tmp130_, "since", _tmp131_, _tmp132_);
								_tmp134_ = _tmp133_;
								_g_object_unref0 (_tmp134_);
							}
							_tmp135_ = att;
							_tmp136_ = _tmp135_->args;
							_tmp137_ = vala_map_get (_tmp136_, "replacement");
							_g_free0 (tmp);
							tmp = (gchar*) _tmp137_;
							_tmp138_ = tmp;
							if (_tmp138_ != NULL) {
								ValadocApiAttribute* _tmp139_;
								const gchar* _tmp140_;
								ValaAttribute* _tmp141_;
								ValadocApiAttributeArgument* _tmp142_;
								ValadocApiAttributeArgument* _tmp143_;
								_tmp139_ = new_attribute;
								_tmp140_ = tmp;
								_tmp141_ = att;
								_tmp142_ = valadoc_api_attribute_add_string (_tmp139_, "replacement", _tmp140_, _tmp141_);
								_tmp143_ = _tmp142_;
								_g_object_unref0 (_tmp143_);
							}
							_tmp144_ = parent;
							_tmp145_ = new_attribute;
							valadoc_api_symbol_add_attribute (_tmp144_, _tmp145_);
							_g_object_unref0 (new_attribute);
						} else {
							ValaAttribute* _tmp146_;
							const gchar* _tmp147_;
							const gchar* _tmp148_;
							gchar** _tmp149_;
							gint _tmp149__length1;
							_tmp146_ = att;
							_tmp147_ = vala_attribute_get_name (_tmp146_);
							_tmp148_ = _tmp147_;
							_tmp149_ = attributes;
							_tmp149__length1 = attributes_length1;
							if (_vala_string_array_contains (_tmp149_, _tmp149__length1, _tmp148_)) {
								ValadocApiAttribute* new_attribute = NULL;
								ValadocApiSymbol* _tmp150_;
								ValadocApiSymbol* _tmp151_;
								ValadocApiSourceFile* _tmp152_;
								ValadocApiSourceFile* _tmp153_;
								ValaAttribute* _tmp154_;
								const gchar* _tmp155_;
								const gchar* _tmp156_;
								ValaAttribute* _tmp157_;
								ValadocApiAttribute* _tmp158_;
								ValadocApiAttribute* _tmp159_;
								ValadocApiSymbol* _tmp160_;
								ValadocApiAttribute* _tmp161_;
								_tmp150_ = parent;
								_tmp151_ = parent;
								_tmp152_ = valadoc_api_node_get_source_file ((ValadocApiNode*) _tmp151_);
								_tmp153_ = _tmp152_;
								_tmp154_ = att;
								_tmp155_ = vala_attribute_get_name (_tmp154_);
								_tmp156_ = _tmp155_;
								_tmp157_ = att;
								_tmp158_ = valadoc_api_attribute_new ((ValadocApiNode*) _tmp150_, _tmp153_, _tmp156_, _tmp157_);
								_tmp159_ = _tmp158_;
								_g_object_unref0 (_tmp153_);
								new_attribute = _tmp159_;
								_tmp160_ = parent;
								_tmp161_ = new_attribute;
								valadoc_api_symbol_add_attribute (_tmp160_, _tmp161_);
								_g_object_unref0 (new_attribute);
							}
						}
					}
				}
				_vala_code_node_unref0 (att);
			}
		}
	}
	_g_free0 (tmp);
	attributes = (_vala_array_free (attributes, attributes_length1, (GDestroyNotify) g_free), NULL);
}


static gchar* valadoc_drivers_tree_builder_get_ccode_type_id (ValadocDriversTreeBuilder* self, ValaCodeNode* node) {
	gchar* result = NULL;
	ValaCodeNode* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = node;
	_tmp1_ = vala_get_ccode_type_id (_tmp0_);
	result = _tmp1_;
	return result;
}


static gboolean valadoc_drivers_tree_builder_is_reference_counting (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym) {
	gboolean result = FALSE;
	ValaTypeSymbol* _tmp0_;
	gboolean _tmp1_;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (sym != NULL, FALSE);
	_tmp0_ = sym;
	_tmp1_ = vala_is_reference_counting (_tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_ref_function (ValadocDriversTreeBuilder* self, ValaClass* sym) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) _tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_unref_function (ValadocDriversTreeBuilder* self, ValaClass* sym) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) _tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_finalize_function_name (ValadocDriversTreeBuilder* self, ValaClass* element) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gboolean _tmp1_;
	ValaClass* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_class_is_fundamental (_tmp0_);
	if (!_tmp1_) {
		result = NULL;
		return result;
	}
	_tmp2_ = element;
	_tmp3_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp2_, NULL);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_strdup_printf ("%s_finalize", _tmp4_);
	_tmp6_ = _tmp5_;
	_g_free0 (_tmp4_);
	result = _tmp6_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_free_function_name (ValadocDriversTreeBuilder* self, ValaClass* element) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaClass* _tmp3_;
	gchar* _tmp4_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_class_get_is_compact (_tmp0_);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		result = NULL;
		return result;
	}
	_tmp3_ = element;
	_tmp4_ = vala_get_ccode_free_function ((ValaTypeSymbol*) _tmp3_);
	result = _tmp4_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_finish_name (ValadocDriversTreeBuilder* self, ValaMethod* m) {
	gchar* result = NULL;
	ValaMethod* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (m != NULL, NULL);
	_tmp0_ = m;
	_tmp1_ = vala_get_ccode_finish_name (_tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_take_value_function (ValadocDriversTreeBuilder* self, ValaClass* sym) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_take_value_function ((ValaCodeNode*) _tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_get_value_function (ValadocDriversTreeBuilder* self, ValaClass* sym) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_get_value_function ((ValaCodeNode*) _tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_set_value_function (ValadocDriversTreeBuilder* self, ValaClass* sym) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_set_value_function ((ValaCodeNode*) _tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_param_spec_function (ValadocDriversTreeBuilder* self, ValaCodeNode* sym) {
	gchar* result = NULL;
	ValaCodeNode* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_param_spec_function (_tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_dup_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym) {
	gchar* result = NULL;
	ValaTypeSymbol* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_dup_function (_tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_copy_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym) {
	gchar* result = NULL;
	ValaTypeSymbol* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_copy_function (_tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_destroy_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym) {
	gchar* result = NULL;
	ValaTypeSymbol* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_destroy_function (_tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_free_function (ValadocDriversTreeBuilder* self, ValaTypeSymbol* sym) {
	gchar* result = NULL;
	ValaTypeSymbol* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (sym != NULL, NULL);
	_tmp0_ = sym;
	_tmp1_ = vala_get_ccode_free_function (_tmp0_);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_cname (ValadocDriversTreeBuilder* self, ValaSymbol* symbol) {
	gchar* result = NULL;
	ValaSymbol* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (symbol != NULL, NULL);
	_tmp0_ = symbol;
	_tmp1_ = vala_get_ccode_name ((ValaCodeNode*) _tmp0_);
	result = _tmp1_;
	return result;
}


static gpointer _vala_source_reference_ref0 (gpointer self) {
	return self ? vala_source_reference_ref (self) : NULL;
}


static ValadocApiSourceComment* valadoc_drivers_tree_builder_create_comment (ValadocDriversTreeBuilder* self, ValaComment* comment) {
	ValadocApiSourceComment* result = NULL;
	ValaComment* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = comment;
	if (_tmp0_ != NULL) {
		ValaSourceReference* pos = NULL;
		ValaComment* _tmp1_;
		ValaSourceReference* _tmp2_;
		ValaSourceReference* _tmp3_;
		ValaSourceReference* _tmp4_;
		ValadocApiSourceFile* file = NULL;
		ValaHashMap* _tmp5_;
		ValaSourceReference* _tmp6_;
		ValaSourceFile* _tmp7_;
		ValaSourceFile* _tmp8_;
		gpointer _tmp9_;
		ValaComment* _tmp10_;
		_tmp1_ = comment;
		_tmp2_ = vala_comment_get_source_reference (_tmp1_);
		_tmp3_ = _tmp2_;
		_tmp4_ = _vala_source_reference_ref0 (_tmp3_);
		pos = _tmp4_;
		_tmp5_ = self->priv->files;
		_tmp6_ = pos;
		_tmp7_ = vala_source_reference_get_file (_tmp6_);
		_tmp8_ = _tmp7_;
		_tmp9_ = vala_map_get ((ValaMap*) _tmp5_, _tmp8_);
		file = (ValadocApiSourceFile*) _tmp9_;
		_tmp10_ = comment;
		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_GIR_COMMENT)) {
			ValadocApiGirSourceComment* tmp = NULL;
			ValaComment* _tmp11_;
			const gchar* _tmp12_;
			const gchar* _tmp13_;
			ValadocApiSourceFile* _tmp14_;
			ValaSourceReference* _tmp15_;
			ValaSourceLocation _tmp16_ = {0};
			ValaSourceLocation _tmp17_;
			gint _tmp18_;
			ValaSourceReference* _tmp19_;
			ValaSourceLocation _tmp20_ = {0};
			ValaSourceLocation _tmp21_;
			gint _tmp22_;
			ValaSourceReference* _tmp23_;
			ValaSourceLocation _tmp24_ = {0};
			ValaSourceLocation _tmp25_;
			gint _tmp26_;
			ValaSourceReference* _tmp27_;
			ValaSourceLocation _tmp28_ = {0};
			ValaSourceLocation _tmp29_;
			gint _tmp30_;
			ValadocApiGirSourceComment* _tmp31_;
			ValaComment* _tmp32_;
			ValaComment* _tmp33_;
			ValaComment* _tmp34_;
			ValaMapIterator* it = NULL;
			ValaComment* _tmp66_;
			ValaMapIterator* _tmp67_;
			_tmp11_ = comment;
			_tmp12_ = vala_comment_get_content (_tmp11_);
			_tmp13_ = _tmp12_;
			_tmp14_ = file;
			_tmp15_ = pos;
			vala_source_reference_get_begin (_tmp15_, &_tmp16_);
			_tmp17_ = _tmp16_;
			_tmp18_ = _tmp17_.line;
			_tmp19_ = pos;
			vala_source_reference_get_begin (_tmp19_, &_tmp20_);
			_tmp21_ = _tmp20_;
			_tmp22_ = _tmp21_.column;
			_tmp23_ = pos;
			vala_source_reference_get_end (_tmp23_, &_tmp24_);
			_tmp25_ = _tmp24_;
			_tmp26_ = _tmp25_.line;
			_tmp27_ = pos;
			vala_source_reference_get_end (_tmp27_, &_tmp28_);
			_tmp29_ = _tmp28_;
			_tmp30_ = _tmp29_.column;
			_tmp31_ = valadoc_api_gir_source_comment_new (_tmp13_, _tmp14_, _tmp18_, _tmp22_, _tmp26_, _tmp30_);
			tmp = _tmp31_;
			_tmp32_ = comment;
			_tmp33_ = vala_gir_comment_get_return_content (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, VALA_TYPE_GIR_COMMENT, ValaGirComment));
			_tmp34_ = _tmp33_;
			if (_tmp34_ != NULL) {
				ValaSourceReference* return_pos = NULL;
				ValaComment* _tmp35_;
				ValaComment* _tmp36_;
				ValaComment* _tmp37_;
				ValaSourceReference* _tmp38_;
				ValaSourceReference* _tmp39_;
				ValaSourceReference* _tmp40_;
				ValadocApiGirSourceComment* _tmp41_;
				ValaComment* _tmp42_;
				ValaComment* _tmp43_;
				ValaComment* _tmp44_;
				const gchar* _tmp45_;
				const gchar* _tmp46_;
				ValadocApiSourceFile* _tmp47_;
				ValaSourceReference* _tmp48_;
				ValaSourceLocation _tmp49_ = {0};
				ValaSourceLocation _tmp50_;
				gint _tmp51_;
				ValaSourceReference* _tmp52_;
				ValaSourceLocation _tmp53_ = {0};
				ValaSourceLocation _tmp54_;
				gint _tmp55_;
				ValaSourceReference* _tmp56_;
				ValaSourceLocation _tmp57_ = {0};
				ValaSourceLocation _tmp58_;
				gint _tmp59_;
				ValaSourceReference* _tmp60_;
				ValaSourceLocation _tmp61_ = {0};
				ValaSourceLocation _tmp62_;
				gint _tmp63_;
				ValadocApiSourceComment* _tmp64_;
				ValadocApiSourceComment* _tmp65_;
				_tmp35_ = comment;
				_tmp36_ = vala_gir_comment_get_return_content (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, VALA_TYPE_GIR_COMMENT, ValaGirComment));
				_tmp37_ = _tmp36_;
				_tmp38_ = vala_comment_get_source_reference (_tmp37_);
				_tmp39_ = _tmp38_;
				_tmp40_ = _vala_source_reference_ref0 (_tmp39_);
				return_pos = _tmp40_;
				_tmp41_ = tmp;
				_tmp42_ = comment;
				_tmp43_ = vala_gir_comment_get_return_content (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_GIR_COMMENT, ValaGirComment));
				_tmp44_ = _tmp43_;
				_tmp45_ = vala_comment_get_content (_tmp44_);
				_tmp46_ = _tmp45_;
				_tmp47_ = file;
				_tmp48_ = return_pos;
				vala_source_reference_get_begin (_tmp48_, &_tmp49_);
				_tmp50_ = _tmp49_;
				_tmp51_ = _tmp50_.line;
				_tmp52_ = return_pos;
				vala_source_reference_get_begin (_tmp52_, &_tmp53_);
				_tmp54_ = _tmp53_;
				_tmp55_ = _tmp54_.column;
				_tmp56_ = return_pos;
				vala_source_reference_get_end (_tmp56_, &_tmp57_);
				_tmp58_ = _tmp57_;
				_tmp59_ = _tmp58_.line;
				_tmp60_ = return_pos;
				vala_source_reference_get_end (_tmp60_, &_tmp61_);
				_tmp62_ = _tmp61_;
				_tmp63_ = _tmp62_.column;
				_tmp64_ = valadoc_api_source_comment_new (_tmp46_, _tmp47_, _tmp51_, _tmp55_, _tmp59_, _tmp63_);
				_tmp65_ = _tmp64_;
				valadoc_api_gir_source_comment_set_return_comment (_tmp41_, _tmp65_);
				_valadoc_api_source_comment_unref0 (_tmp65_);
				_vala_source_reference_unref0 (return_pos);
			}
			_tmp66_ = comment;
			_tmp67_ = vala_gir_comment_parameter_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp66_, VALA_TYPE_GIR_COMMENT, ValaGirComment));
			it = _tmp67_;
			while (TRUE) {
				ValaMapIterator* _tmp68_;
				gboolean _tmp69_;
				ValaComment* vala_param = NULL;
				ValaMapIterator* _tmp70_;
				gpointer _tmp71_;
				ValaSourceReference* param_pos = NULL;
				ValaComment* _tmp72_;
				ValaSourceReference* _tmp73_;
				ValaSourceReference* _tmp74_;
				ValaSourceReference* _tmp75_;
				ValadocApiSourceComment* param_comment = NULL;
				ValaComment* _tmp76_;
				const gchar* _tmp77_;
				const gchar* _tmp78_;
				ValadocApiSourceFile* _tmp79_;
				ValaSourceReference* _tmp80_;
				ValaSourceLocation _tmp81_ = {0};
				ValaSourceLocation _tmp82_;
				gint _tmp83_;
				ValaSourceReference* _tmp84_;
				ValaSourceLocation _tmp85_ = {0};
				ValaSourceLocation _tmp86_;
				gint _tmp87_;
				ValaSourceReference* _tmp88_;
				ValaSourceLocation _tmp89_ = {0};
				ValaSourceLocation _tmp90_;
				gint _tmp91_;
				ValaSourceReference* _tmp92_;
				ValaSourceLocation _tmp93_ = {0};
				ValaSourceLocation _tmp94_;
				gint _tmp95_;
				ValadocApiSourceComment* _tmp96_;
				ValadocApiGirSourceComment* _tmp97_;
				ValaMapIterator* _tmp98_;
				gpointer _tmp99_;
				gchar* _tmp100_;
				ValadocApiSourceComment* _tmp101_;
				_tmp68_ = it;
				_tmp69_ = vala_map_iterator_next (_tmp68_);
				if (!_tmp69_) {
					break;
				}
				_tmp70_ = it;
				_tmp71_ = vala_map_iterator_get_value (_tmp70_);
				vala_param = (ValaComment*) _tmp71_;
				_tmp72_ = vala_param;
				_tmp73_ = vala_comment_get_source_reference (_tmp72_);
				_tmp74_ = _tmp73_;
				_tmp75_ = _vala_source_reference_ref0 (_tmp74_);
				param_pos = _tmp75_;
				_tmp76_ = vala_param;
				_tmp77_ = vala_comment_get_content (_tmp76_);
				_tmp78_ = _tmp77_;
				_tmp79_ = file;
				_tmp80_ = param_pos;
				vala_source_reference_get_begin (_tmp80_, &_tmp81_);
				_tmp82_ = _tmp81_;
				_tmp83_ = _tmp82_.line;
				_tmp84_ = param_pos;
				vala_source_reference_get_begin (_tmp84_, &_tmp85_);
				_tmp86_ = _tmp85_;
				_tmp87_ = _tmp86_.column;
				_tmp88_ = param_pos;
				vala_source_reference_get_end (_tmp88_, &_tmp89_);
				_tmp90_ = _tmp89_;
				_tmp91_ = _tmp90_.line;
				_tmp92_ = param_pos;
				vala_source_reference_get_end (_tmp92_, &_tmp93_);
				_tmp94_ = _tmp93_;
				_tmp95_ = _tmp94_.column;
				_tmp96_ = valadoc_api_source_comment_new (_tmp78_, _tmp79_, _tmp83_, _tmp87_, _tmp91_, _tmp95_);
				param_comment = _tmp96_;
				_tmp97_ = tmp;
				_tmp98_ = it;
				_tmp99_ = vala_map_iterator_get_key (_tmp98_);
				_tmp100_ = (gchar*) _tmp99_;
				_tmp101_ = param_comment;
				valadoc_api_gir_source_comment_add_parameter_content (_tmp97_, _tmp100_, _tmp101_);
				_g_free0 (_tmp100_);
				_valadoc_api_source_comment_unref0 (param_comment);
				_vala_source_reference_unref0 (param_pos);
				_vala_comment_unref0 (vala_param);
			}
			result = (ValadocApiSourceComment*) tmp;
			_vala_map_iterator_unref0 (it);
			_g_object_unref0 (file);
			_vala_source_reference_unref0 (pos);
			return result;
		} else {
			ValaComment* _tmp102_;
			const gchar* _tmp103_;
			const gchar* _tmp104_;
			ValadocApiSourceFile* _tmp105_;
			ValaSourceReference* _tmp106_;
			ValaSourceLocation _tmp107_ = {0};
			ValaSourceLocation _tmp108_;
			gint _tmp109_;
			ValaSourceReference* _tmp110_;
			ValaSourceLocation _tmp111_ = {0};
			ValaSourceLocation _tmp112_;
			gint _tmp113_;
			ValaSourceReference* _tmp114_;
			ValaSourceLocation _tmp115_ = {0};
			ValaSourceLocation _tmp116_;
			gint _tmp117_;
			ValaSourceReference* _tmp118_;
			ValaSourceLocation _tmp119_ = {0};
			ValaSourceLocation _tmp120_;
			gint _tmp121_;
			ValadocApiSourceComment* _tmp122_;
			_tmp102_ = comment;
			_tmp103_ = vala_comment_get_content (_tmp102_);
			_tmp104_ = _tmp103_;
			_tmp105_ = file;
			_tmp106_ = pos;
			vala_source_reference_get_begin (_tmp106_, &_tmp107_);
			_tmp108_ = _tmp107_;
			_tmp109_ = _tmp108_.line;
			_tmp110_ = pos;
			vala_source_reference_get_begin (_tmp110_, &_tmp111_);
			_tmp112_ = _tmp111_;
			_tmp113_ = _tmp112_.column;
			_tmp114_ = pos;
			vala_source_reference_get_end (_tmp114_, &_tmp115_);
			_tmp116_ = _tmp115_;
			_tmp117_ = _tmp116_.line;
			_tmp118_ = pos;
			vala_source_reference_get_end (_tmp118_, &_tmp119_);
			_tmp120_ = _tmp119_;
			_tmp121_ = _tmp120_.column;
			_tmp122_ = valadoc_api_source_comment_new (_tmp104_, _tmp105_, _tmp109_, _tmp113_, _tmp117_, _tmp121_);
			result = _tmp122_;
			_g_object_unref0 (file);
			_vala_source_reference_unref0 (pos);
			return result;
		}
		_g_object_unref0 (file);
		_vala_source_reference_unref0 (pos);
	}
	result = NULL;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_method_name (ValadocDriversTreeBuilder* self, ValaMethod* element) {
	gchar* result = NULL;
	ValaMethod* _tmp0_;
	ValaMethod* _tmp22_;
	const gchar* _tmp23_;
	const gchar* _tmp24_;
	gchar* _tmp25_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, VALA_TYPE_CREATION_METHOD)) {
		ValaMethod* _tmp1_;
		const gchar* _tmp2_;
		const gchar* _tmp3_;
		_tmp1_ = element;
		_tmp2_ = vala_symbol_get_name ((ValaSymbol*) _tmp1_);
		_tmp3_ = _tmp2_;
		if (g_strcmp0 (_tmp3_, ".new") == 0) {
			ValaMethod* _tmp4_;
			ValaSymbol* _tmp5_;
			ValaSymbol* _tmp6_;
			const gchar* _tmp7_;
			const gchar* _tmp8_;
			gchar* _tmp9_;
			_tmp4_ = element;
			_tmp5_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp4_);
			_tmp6_ = _tmp5_;
			_tmp7_ = vala_symbol_get_name (_tmp6_);
			_tmp8_ = _tmp7_;
			_tmp9_ = g_strdup (_tmp8_);
			result = _tmp9_;
			return result;
		} else {
			ValaMethod* _tmp10_;
			ValaSymbol* _tmp11_;
			ValaSymbol* _tmp12_;
			const gchar* _tmp13_;
			const gchar* _tmp14_;
			gchar* _tmp15_;
			gchar* _tmp16_;
			ValaMethod* _tmp17_;
			const gchar* _tmp18_;
			const gchar* _tmp19_;
			gchar* _tmp20_;
			gchar* _tmp21_;
			_tmp10_ = element;
			_tmp11_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp10_);
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_symbol_get_name (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp15_ = g_strconcat (_tmp14_, ".", NULL);
			_tmp16_ = _tmp15_;
			_tmp17_ = element;
			_tmp18_ = vala_symbol_get_name ((ValaSymbol*) _tmp17_);
			_tmp19_ = _tmp18_;
			_tmp20_ = g_strconcat (_tmp16_, _tmp19_, NULL);
			_tmp21_ = _tmp20_;
			_g_free0 (_tmp16_);
			result = _tmp21_;
			return result;
		}
	}
	_tmp22_ = element;
	_tmp23_ = vala_symbol_get_name ((ValaSymbol*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = g_strdup (_tmp24_);
	result = _tmp25_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_quark_macro_name (ValadocDriversTreeBuilder* self, ValaErrorDomain* element) {
	gchar* result = NULL;
	ValaErrorDomain* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp0_, NULL);
	result = _tmp1_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_private_cname (ValadocDriversTreeBuilder* self, ValaClass* element) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	gchar* cname = NULL;
	ValaClass* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_ = NULL;
	const gchar* _tmp6_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_class_get_is_compact (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		result = NULL;
		return result;
	}
	_tmp3_ = element;
	_tmp4_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp3_);
	cname = _tmp4_;
	_tmp6_ = cname;
	if (_tmp6_ != NULL) {
		const gchar* _tmp7_;
		gchar* _tmp8_;
		_tmp7_ = cname;
		_tmp8_ = g_strconcat (_tmp7_, "Private", NULL);
		_g_free0 (_tmp5_);
		_tmp5_ = _tmp8_;
	} else {
		_g_free0 (_tmp5_);
		_tmp5_ = NULL;
	}
	result = _tmp5_;
	_g_free0 (cname);
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_class_macro_name (ValadocDriversTreeBuilder* self, ValaClass* element) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaClass* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_class_get_is_compact (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		result = NULL;
		return result;
	}
	_tmp3_ = element;
	_tmp4_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp3_, NULL);
	_tmp5_ = _tmp4_;
	_tmp6_ = g_strdup_printf ("%s_GET_CLASS", _tmp5_);
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	result = _tmp7_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_class_type_macro_name (ValadocDriversTreeBuilder* self, ValaClass* element) {
	gchar* result = NULL;
	ValaClass* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	ValaClass* _tmp3_;
	gchar* _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_class_get_is_compact (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		result = NULL;
		return result;
	}
	_tmp3_ = element;
	_tmp4_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp3_, NULL);
	_tmp5_ = _tmp4_;
	_tmp6_ = g_strdup_printf ("%s_CLASS", _tmp5_);
	_tmp7_ = _tmp6_;
	_g_free0 (_tmp5_);
	result = _tmp7_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_is_type_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element) {
	gchar* result = NULL;
	gchar* name = NULL;
	ValaTypeSymbol* _tmp0_;
	gchar* _tmp1_;
	const gchar* _tmp2_ = NULL;
	gboolean _tmp3_ = FALSE;
	const gchar* _tmp4_;
	gchar* _tmp7_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_get_ccode_type_check_function (_tmp0_);
	name = _tmp1_;
	_tmp4_ = name;
	if (_tmp4_ != NULL) {
		const gchar* _tmp5_;
		_tmp5_ = name;
		_tmp3_ = g_strcmp0 (_tmp5_, "") != 0;
	} else {
		_tmp3_ = FALSE;
	}
	if (_tmp3_) {
		const gchar* _tmp6_;
		_tmp6_ = name;
		_tmp2_ = _tmp6_;
	} else {
		_tmp2_ = NULL;
	}
	_tmp7_ = g_strdup (_tmp2_);
	result = _tmp7_;
	_g_free0 (name);
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_is_class_type_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element) {
	gchar* result = NULL;
	gchar* name = NULL;
	ValaTypeSymbol* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_ = NULL;
	const gchar* _tmp3_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_is_type_macro_name (self, _tmp0_);
	name = _tmp1_;
	_tmp3_ = name;
	if (_tmp3_ != NULL) {
		const gchar* _tmp4_;
		gchar* _tmp5_;
		_tmp4_ = name;
		_tmp5_ = g_strconcat (_tmp4_, "_CLASS", NULL);
		_g_free0 (_tmp2_);
		_tmp2_ = _tmp5_;
	} else {
		_g_free0 (_tmp2_);
		_tmp2_ = NULL;
	}
	result = _tmp2_;
	_g_free0 (name);
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_type_function_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element) {
	gchar* result = NULL;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ValaTypeSymbol* _tmp3_;
	ValaTypeSymbol* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp3_ = element;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS)) {
		ValaTypeSymbol* _tmp4_;
		gboolean _tmp5_;
		gboolean _tmp6_;
		_tmp4_ = element;
		_tmp5_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, VALA_TYPE_CLASS, ValaClass));
		_tmp6_ = _tmp5_;
		_tmp2_ = _tmp6_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp7_;
		_tmp7_ = element;
		_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_ERROR_DOMAIN);
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp8_;
		_tmp8_ = element;
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_DELEGATE);
	}
	if (_tmp0_) {
		result = NULL;
		return result;
	}
	_tmp9_ = element;
	_tmp10_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp9_, NULL);
	_tmp11_ = _tmp10_;
	_tmp12_ = g_strdup_printf ("%s_get_type", _tmp11_);
	_tmp13_ = _tmp12_;
	_g_free0 (_tmp11_);
	result = _tmp13_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_type_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element) {
	gchar* result = NULL;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ValaTypeSymbol* _tmp3_;
	ValaTypeSymbol* _tmp9_;
	gchar* _tmp10_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp3_ = element;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS)) {
		ValaTypeSymbol* _tmp4_;
		gboolean _tmp5_;
		gboolean _tmp6_;
		_tmp4_ = element;
		_tmp5_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, VALA_TYPE_CLASS, ValaClass));
		_tmp6_ = _tmp5_;
		_tmp2_ = _tmp6_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp7_;
		_tmp7_ = element;
		_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_ERROR_DOMAIN);
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp8_;
		_tmp8_ = element;
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_DELEGATE);
	}
	if (_tmp0_) {
		result = NULL;
		return result;
	}
	_tmp9_ = element;
	_tmp10_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp9_);
	result = _tmp10_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_type_cast_macro_name (ValadocDriversTreeBuilder* self, ValaTypeSymbol* element) {
	gchar* result = NULL;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	ValaTypeSymbol* _tmp2_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp2_ = element;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CLASS)) {
		ValaTypeSymbol* _tmp3_;
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp3_ = element;
		_tmp4_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_CLASS, ValaClass));
		_tmp5_ = _tmp4_;
		_tmp1_ = !_tmp5_;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		ValaTypeSymbol* _tmp6_;
		_tmp6_ = element;
		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_INTERFACE);
	}
	if (_tmp0_) {
		ValaTypeSymbol* _tmp7_;
		gchar* _tmp8_;
		_tmp7_ = element;
		_tmp8_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp7_, NULL);
		result = _tmp8_;
		return result;
	} else {
		result = NULL;
		return result;
	}
}


static gchar* valadoc_drivers_tree_builder_get_interface_macro_name (ValadocDriversTreeBuilder* self, ValaInterface* element) {
	gchar* result = NULL;
	ValaInterface* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp0_, NULL);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strdup_printf ("%s_GET_INTERFACE", _tmp2_);
	_tmp4_ = _tmp3_;
	_g_free0 (_tmp2_);
	result = _tmp4_;
	return result;
}


static gchar* valadoc_drivers_tree_builder_get_quark_function_name (ValadocDriversTreeBuilder* self, ValaErrorDomain* element) {
	gchar* result = NULL;
	ValaErrorDomain* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_strconcat (_tmp2_, "quark", NULL);
	_tmp4_ = _tmp3_;
	_g_free0 (_tmp2_);
	result = _tmp4_;
	return result;
}


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


static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_get_package_meta_data (ValadocDriversTreeBuilder* self, ValadocApiPackage* pkg) {
	ValadocDriversTreeBuilderPackageMetaData* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (pkg != NULL, NULL);
	{
		ValaArrayList* _data_list = NULL;
		ValaArrayList* _tmp0_;
		ValaArrayList* _tmp1_;
		gint _data_size = 0;
		ValaArrayList* _tmp2_;
		gint _tmp3_;
		gint _tmp4_;
		gint _data_index = 0;
		_tmp0_ = self->priv->packages;
		_tmp1_ = _vala_iterable_ref0 (_tmp0_);
		_data_list = _tmp1_;
		_tmp2_ = _data_list;
		_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
		_tmp4_ = _tmp3_;
		_data_size = _tmp4_;
		_data_index = -1;
		while (TRUE) {
			gint _tmp5_;
			gint _tmp6_;
			gint _tmp7_;
			ValadocDriversTreeBuilderPackageMetaData* data = NULL;
			ValaArrayList* _tmp8_;
			gint _tmp9_;
			gpointer _tmp10_;
			ValadocDriversTreeBuilderPackageMetaData* _tmp11_;
			ValadocApiPackage* _tmp12_;
			ValadocApiPackage* _tmp13_;
			_tmp5_ = _data_index;
			_data_index = _tmp5_ + 1;
			_tmp6_ = _data_index;
			_tmp7_ = _data_size;
			if (!(_tmp6_ < _tmp7_)) {
				break;
			}
			_tmp8_ = _data_list;
			_tmp9_ = _data_index;
			_tmp10_ = vala_list_get ((ValaList*) _tmp8_, _tmp9_);
			data = (ValadocDriversTreeBuilderPackageMetaData*) _tmp10_;
			_tmp11_ = data;
			_tmp12_ = _tmp11_->package;
			_tmp13_ = pkg;
			if (_tmp12_ == _tmp13_) {
				result = data;
				_vala_iterable_unref0 (_data_list);
				return result;
			}
			_valadoc_drivers_tree_builder_package_meta_data_unref0 (data);
		}
		_vala_iterable_unref0 (_data_list);
	}
	result = NULL;
	return result;
}


static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_register_package (ValadocDriversTreeBuilder* self, ValadocApiPackage* package) {
	ValadocDriversTreeBuilderPackageMetaData* result = NULL;
	ValadocDriversTreeBuilderPackageMetaData* meta_data = NULL;
	ValadocApiPackage* _tmp0_;
	ValadocDriversTreeBuilderPackageMetaData* _tmp1_;
	ValadocApiTree* _tmp2_;
	ValadocApiPackage* _tmp3_;
	ValaArrayList* _tmp4_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (package != NULL, NULL);
	_tmp0_ = package;
	_tmp1_ = valadoc_drivers_tree_builder_package_meta_data_new (_tmp0_);
	meta_data = _tmp1_;
	_tmp2_ = self->priv->tree;
	_tmp3_ = package;
	valadoc_api_tree_add_package (_tmp2_, _tmp3_);
	_tmp4_ = self->priv->packages;
	vala_collection_add ((ValaCollection*) _tmp4_, meta_data);
	result = meta_data;
	return result;
}


static ValadocApiSourceFile* valadoc_drivers_tree_builder_register_source_file (ValadocDriversTreeBuilder* self, ValadocDriversTreeBuilderPackageMetaData* meta_data, ValaSourceFile* source_file) {
	ValadocApiSourceFile* result = NULL;
	ValadocApiSourceFile* file = NULL;
	ValadocDriversTreeBuilderPackageMetaData* _tmp0_;
	ValadocApiPackage* _tmp1_;
	ValaSourceFile* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	ValaSourceFile* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	ValaSourceFile* _tmp8_;
	ValadocApiSourceFile* _tmp9_;
	ValadocApiSourceFile* _tmp10_;
	ValaHashMap* _tmp11_;
	ValaSourceFile* _tmp12_;
	ValadocDriversTreeBuilderPackageMetaData* _tmp13_;
	ValaSourceFile* _tmp14_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (meta_data != NULL, NULL);
	g_return_val_if_fail (source_file != NULL, NULL);
	_tmp0_ = meta_data;
	_tmp1_ = _tmp0_->package;
	_tmp2_ = source_file;
	_tmp3_ = vala_source_file_get_relative_filename (_tmp2_);
	_tmp4_ = _tmp3_;
	_tmp5_ = source_file;
	_tmp6_ = vala_source_file_get_csource_filename (_tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = source_file;
	_tmp9_ = valadoc_api_source_file_new (_tmp1_, _tmp4_, _tmp7_, _tmp8_);
	_tmp10_ = _tmp9_;
	_g_free0 (_tmp7_);
	_g_free0 (_tmp4_);
	file = _tmp10_;
	_tmp11_ = self->priv->files;
	_tmp12_ = source_file;
	vala_map_set ((ValaMap*) _tmp11_, _tmp12_, file);
	_tmp13_ = meta_data;
	_tmp14_ = source_file;
	valadoc_drivers_tree_builder_package_meta_data_register_source_file (_tmp13_, _tmp14_);
	result = file;
	return result;
}


static ValadocApiSourceFile* valadoc_drivers_tree_builder_get_source_file (ValadocDriversTreeBuilder* self, ValaSymbol* symbol) {
	ValadocApiSourceFile* result = NULL;
	ValaSourceReference* source_ref = NULL;
	ValaSymbol* _tmp0_;
	ValaSourceReference* _tmp1_;
	ValaSourceReference* _tmp2_;
	ValaSourceReference* _tmp3_;
	ValaSourceReference* _tmp4_;
	ValadocApiSourceFile* file = NULL;
	ValaHashMap* _tmp5_;
	ValaSourceReference* _tmp6_;
	ValaSourceFile* _tmp7_;
	ValaSourceFile* _tmp8_;
	gpointer _tmp9_;
	ValadocApiSourceFile* _tmp10_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (symbol != NULL, NULL);
	_tmp0_ = symbol;
	_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = _vala_source_reference_ref0 (_tmp2_);
	source_ref = _tmp3_;
	_tmp4_ = source_ref;
	if (_tmp4_ == NULL) {
		result = NULL;
		_vala_source_reference_unref0 (source_ref);
		return result;
	}
	_tmp5_ = self->priv->files;
	_tmp6_ = source_ref;
	_tmp7_ = vala_source_reference_get_file (_tmp6_);
	_tmp8_ = _tmp7_;
	_tmp9_ = vala_map_get ((ValaMap*) _tmp5_, _tmp8_);
	file = (ValadocApiSourceFile*) _tmp9_;
	_tmp10_ = file;
	_vala_assert (_tmp10_ != NULL, "file != null");
	result = file;
	_vala_source_reference_unref0 (source_ref);
	return result;
}


static ValadocApiPackage* valadoc_drivers_tree_builder_find_package_for_file (ValadocDriversTreeBuilder* self, ValaSourceFile* source_file) {
	ValadocApiPackage* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (source_file != NULL, NULL);
	{
		ValaArrayList* _pkg_list = NULL;
		ValaArrayList* _tmp0_;
		ValaArrayList* _tmp1_;
		gint _pkg_size = 0;
		ValaArrayList* _tmp2_;
		gint _tmp3_;
		gint _tmp4_;
		gint _pkg_index = 0;
		_tmp0_ = self->priv->packages;
		_tmp1_ = _vala_iterable_ref0 (_tmp0_);
		_pkg_list = _tmp1_;
		_tmp2_ = _pkg_list;
		_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
		_tmp4_ = _tmp3_;
		_pkg_size = _tmp4_;
		_pkg_index = -1;
		while (TRUE) {
			gint _tmp5_;
			gint _tmp6_;
			gint _tmp7_;
			ValadocDriversTreeBuilderPackageMetaData* pkg = NULL;
			ValaArrayList* _tmp8_;
			gint _tmp9_;
			gpointer _tmp10_;
			ValadocDriversTreeBuilderPackageMetaData* _tmp11_;
			ValaSourceFile* _tmp12_;
			gboolean _tmp13_;
			_tmp5_ = _pkg_index;
			_pkg_index = _tmp5_ + 1;
			_tmp6_ = _pkg_index;
			_tmp7_ = _pkg_size;
			if (!(_tmp6_ < _tmp7_)) {
				break;
			}
			_tmp8_ = _pkg_list;
			_tmp9_ = _pkg_index;
			_tmp10_ = vala_list_get ((ValaList*) _tmp8_, _tmp9_);
			pkg = (ValadocDriversTreeBuilderPackageMetaData*) _tmp10_;
			_tmp11_ = pkg;
			_tmp12_ = source_file;
			_tmp13_ = valadoc_drivers_tree_builder_package_meta_data_is_package_for_file (_tmp11_, _tmp12_);
			if (_tmp13_) {
				ValadocDriversTreeBuilderPackageMetaData* _tmp14_;
				ValadocApiPackage* _tmp15_;
				ValadocApiPackage* _tmp16_;
				_tmp14_ = pkg;
				_tmp15_ = _tmp14_->package;
				_tmp16_ = _g_object_ref0 (_tmp15_);
				result = _tmp16_;
				_valadoc_drivers_tree_builder_package_meta_data_unref0 (pkg);
				_vala_iterable_unref0 (_pkg_list);
				return result;
			}
			_valadoc_drivers_tree_builder_package_meta_data_unref0 (pkg);
		}
		_vala_iterable_unref0 (_pkg_list);
	}
	result = NULL;
	return result;
}


static ValadocApiNamespace* valadoc_drivers_tree_builder_get_namespace (ValadocDriversTreeBuilder* self, ValadocApiPackage* pkg, ValaSymbol* symbol, ValadocApiSourceFile* file) {
	ValadocApiNamespace* result = NULL;
	ValaSymbol* namespace_symbol = NULL;
	ValaSymbol* _tmp0_;
	ValaSymbol* _tmp1_;
	ValadocDriversTreeBuilderPackageMetaData* meta_data = NULL;
	ValadocApiPackage* _tmp7_;
	ValadocDriversTreeBuilderPackageMetaData* _tmp8_;
	ValaSymbol* _tmp9_;
	ValadocApiSourceFile* _tmp10_;
	ValadocApiNamespace* _tmp11_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (pkg != NULL, NULL);
	g_return_val_if_fail (symbol != NULL, NULL);
	_tmp0_ = symbol;
	_tmp1_ = _vala_code_node_ref0 (_tmp0_);
	namespace_symbol = _tmp1_;
	while (TRUE) {
		ValaSymbol* _tmp2_;
		ValaSymbol* _tmp3_;
		ValaSymbol* _tmp4_;
		ValaSymbol* _tmp5_;
		ValaSymbol* _tmp6_;
		_tmp2_ = namespace_symbol;
		if (!(!G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_NAMESPACE))) {
			break;
		}
		_tmp3_ = namespace_symbol;
		_tmp4_ = vala_symbol_get_parent_symbol (_tmp3_);
		_tmp5_ = _tmp4_;
		_tmp6_ = _vala_code_node_ref0 (_tmp5_);
		_vala_code_node_unref0 (namespace_symbol);
		namespace_symbol = _tmp6_;
	}
	_tmp7_ = pkg;
	_tmp8_ = valadoc_drivers_tree_builder_get_package_meta_data (self, _tmp7_);
	meta_data = _tmp8_;
	_vala_assert (meta_data != NULL, "meta_data != null");
	_tmp9_ = namespace_symbol;
	_tmp10_ = file;
	_tmp11_ = valadoc_drivers_tree_builder_package_meta_data_get_namespace (meta_data, G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_NAMESPACE, ValaNamespace), _tmp10_);
	result = _tmp11_;
	_valadoc_drivers_tree_builder_package_meta_data_unref0 (meta_data);
	_vala_code_node_unref0 (namespace_symbol);
	return result;
}


static ValadocMethodBindingType valadoc_drivers_tree_builder_get_method_binding_type (ValadocDriversTreeBuilder* self, ValaMethod* element) {
	ValadocMethodBindingType result = 0;
	ValaMethod* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	g_return_val_if_fail (self != NULL, 0);
	g_return_val_if_fail (element != NULL, 0);
	_tmp0_ = element;
	_tmp1_ = vala_method_get_is_inline (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		result = VALADOC_METHOD_BINDING_TYPE_INLINE;
		return result;
	} else {
		ValaMethod* _tmp3_;
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp3_ = element;
		_tmp4_ = vala_method_get_is_abstract (_tmp3_);
		_tmp5_ = _tmp4_;
		if (_tmp5_) {
			result = VALADOC_METHOD_BINDING_TYPE_ABSTRACT;
			return result;
		} else {
			ValaMethod* _tmp6_;
			gboolean _tmp7_;
			gboolean _tmp8_;
			_tmp6_ = element;
			_tmp7_ = vala_method_get_is_virtual (_tmp6_);
			_tmp8_ = _tmp7_;
			if (_tmp8_) {
				result = VALADOC_METHOD_BINDING_TYPE_VIRTUAL;
				return result;
			} else {
				ValaMethod* _tmp9_;
				gboolean _tmp10_;
				gboolean _tmp11_;
				_tmp9_ = element;
				_tmp10_ = vala_method_get_overrides (_tmp9_);
				_tmp11_ = _tmp10_;
				if (_tmp11_) {
					result = VALADOC_METHOD_BINDING_TYPE_OVERRIDE;
					return result;
				} else {
					ValaMethod* _tmp12_;
					gboolean _tmp13_;
					gboolean _tmp14_;
					_tmp12_ = element;
					_tmp13_ = vala_method_get_is_inline (_tmp12_);
					_tmp14_ = _tmp13_;
					if (_tmp14_) {
						result = VALADOC_METHOD_BINDING_TYPE_INLINE;
						return result;
					} else {
						ValaMethod* _tmp15_;
						ValaMemberBinding _tmp16_;
						ValaMemberBinding _tmp17_;
						_tmp15_ = element;
						_tmp16_ = vala_method_get_binding (_tmp15_);
						_tmp17_ = _tmp16_;
						if (_tmp17_ != VALA_MEMBER_BINDING_INSTANCE) {
							result = VALADOC_METHOD_BINDING_TYPE_STATIC;
							return result;
						}
					}
				}
			}
		}
	}
	result = VALADOC_METHOD_BINDING_TYPE_UNMODIFIED;
	return result;
}


static ValadocApiSymbolAccessibility valadoc_drivers_tree_builder_get_access_modifier (ValadocDriversTreeBuilder* self, ValaSymbol* symbol) {
	ValadocApiSymbolAccessibility result = 0;
	ValaSymbol* _tmp0_;
	ValaSymbolAccessibility _tmp1_;
	ValaSymbolAccessibility _tmp2_;
	g_return_val_if_fail (self != NULL, 0);
	g_return_val_if_fail (symbol != NULL, 0);
	_tmp0_ = symbol;
	_tmp1_ = vala_symbol_get_access (_tmp0_);
	_tmp2_ = _tmp1_;
	switch (_tmp2_) {
		case VALA_SYMBOL_ACCESSIBILITY_PROTECTED:
		{
			result = VALADOC_API_SYMBOL_ACCESSIBILITY_PROTECTED;
			return result;
		}
		case VALA_SYMBOL_ACCESSIBILITY_INTERNAL:
		{
			result = VALADOC_API_SYMBOL_ACCESSIBILITY_INTERNAL;
			return result;
		}
		case VALA_SYMBOL_ACCESSIBILITY_PRIVATE:
		{
			result = VALADOC_API_SYMBOL_ACCESSIBILITY_PRIVATE;
			return result;
		}
		case VALA_SYMBOL_ACCESSIBILITY_PUBLIC:
		{
			result = VALADOC_API_SYMBOL_ACCESSIBILITY_PUBLIC;
			return result;
		}
		default:
		{
			g_error ("treebuilder.vala:593: Unknown symbol accessibility modifier found");
		}
	}
}


static ValadocApiPropertyAccessorType valadoc_drivers_tree_builder_get_property_accessor_type (ValadocDriversTreeBuilder* self, ValaPropertyAccessor* element) {
	ValadocApiPropertyAccessorType result = 0;
	ValaPropertyAccessor* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	g_return_val_if_fail (self != NULL, 0);
	g_return_val_if_fail (element != NULL, 0);
	_tmp0_ = element;
	_tmp1_ = vala_property_accessor_get_construction (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		ValaPropertyAccessor* _tmp3_;
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp3_ = element;
		_tmp4_ = vala_property_accessor_get_writable (_tmp3_);
		_tmp5_ = _tmp4_;
		if (_tmp5_) {
			result = VALADOC_API_PROPERTY_ACCESSOR_TYPE_CONSTRUCT | VALADOC_API_PROPERTY_ACCESSOR_TYPE_SET;
			return result;
		}
		result = VALADOC_API_PROPERTY_ACCESSOR_TYPE_CONSTRUCT;
		return result;
	} else {
		ValaPropertyAccessor* _tmp6_;
		gboolean _tmp7_;
		gboolean _tmp8_;
		_tmp6_ = element;
		_tmp7_ = vala_property_accessor_get_writable (_tmp6_);
		_tmp8_ = _tmp7_;
		if (_tmp8_) {
			result = VALADOC_API_PROPERTY_ACCESSOR_TYPE_SET;
			return result;
		} else {
			ValaPropertyAccessor* _tmp9_;
			gboolean _tmp10_;
			gboolean _tmp11_;
			_tmp9_ = element;
			_tmp10_ = vala_property_accessor_get_readable (_tmp9_);
			_tmp11_ = _tmp10_;
			if (_tmp11_) {
				result = VALADOC_API_PROPERTY_ACCESSOR_TYPE_GET;
				return result;
			}
		}
	}
	g_error ("treebuilder.vala:609: Unknown symbol accessibility type");
}


static gboolean valadoc_drivers_tree_builder_type_reference_pass_ownership (ValadocDriversTreeBuilder* self, ValaDataType* element) {
	gboolean result = FALSE;
	ValaDataType* _tmp0_;
	ValaCodeNode* node = NULL;
	ValaDataType* _tmp1_;
	ValaCodeNode* _tmp2_;
	ValaCodeNode* _tmp3_;
	ValaCodeNode* _tmp4_;
	ValaCodeNode* _tmp5_;
	ValaCodeNode* _tmp15_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = element;
	if (_tmp0_ == NULL) {
		result = FALSE;
		return result;
	}
	_tmp1_ = element;
	_tmp2_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1_);
	_tmp3_ = _tmp2_;
	node = _tmp3_;
	_tmp4_ = node;
	if (_tmp4_ == NULL) {
		result = FALSE;
		return result;
	}
	_tmp5_ = node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_PARAMETER)) {
		gboolean _tmp6_ = FALSE;
		ValaCodeNode* _tmp7_;
		ValaParameterDirection _tmp8_;
		ValaParameterDirection _tmp9_;
		_tmp7_ = node;
		_tmp8_ = vala_parameter_get_direction (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_PARAMETER, ValaParameter));
		_tmp9_ = _tmp8_;
		if (_tmp9_ == VALA_PARAMETER_DIRECTION_IN) {
			ValaCodeNode* _tmp10_;
			ValaDataType* _tmp11_;
			ValaDataType* _tmp12_;
			gboolean _tmp13_;
			gboolean _tmp14_;
			_tmp10_ = node;
			_tmp11_ = vala_variable_get_variable_type ((ValaVariable*) G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_PARAMETER, ValaParameter));
			_tmp12_ = _tmp11_;
			_tmp13_ = vala_data_type_get_value_owned (_tmp12_);
			_tmp14_ = _tmp13_;
			_tmp6_ = _tmp14_;
		} else {
			_tmp6_ = FALSE;
		}
		result = _tmp6_;
		return result;
	}
	_tmp15_ = node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_PROPERTY)) {
		ValaCodeNode* _tmp16_;
		ValaDataType* _tmp17_;
		ValaDataType* _tmp18_;
		gboolean _tmp19_;
		gboolean _tmp20_;
		_tmp16_ = node;
		_tmp17_ = vala_property_get_property_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, VALA_TYPE_PROPERTY, ValaProperty));
		_tmp18_ = _tmp17_;
		_tmp19_ = vala_data_type_get_value_owned (_tmp18_);
		_tmp20_ = _tmp19_;
		result = _tmp20_;
		return result;
	}
	result = FALSE;
	return result;
}


static gboolean valadoc_drivers_tree_builder_is_type_reference_unowned (ValadocDriversTreeBuilder* self, ValaDataType* element) {
	gboolean result = FALSE;
	ValaDataType* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaDataType* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	ValaTypeSymbol* _tmp4_;
	gboolean _tmp9_ = FALSE;
	ValaDataType* _tmp10_;
	ValaCodeNode* _tmp11_;
	ValaCodeNode* _tmp12_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = element;
	if (_tmp0_ == NULL) {
		result = FALSE;
		return result;
	}
	_tmp2_ = element;
	_tmp3_ = vala_data_type_get_data_type (_tmp2_);
	_tmp4_ = _tmp3_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_TYPESYMBOL)) {
		ValaDataType* _tmp5_;
		ValaTypeSymbol* _tmp6_;
		ValaTypeSymbol* _tmp7_;
		gboolean _tmp8_;
		_tmp5_ = element;
		_tmp6_ = vala_data_type_get_data_type (_tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = valadoc_drivers_tree_builder_is_reference_counting (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
		_tmp1_ = _tmp8_ == TRUE;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		result = FALSE;
		return result;
	}
	_tmp10_ = element;
	_tmp11_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp10_);
	_tmp12_ = _tmp11_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_PARAMETER) == FALSE) {
		ValaDataType* _tmp13_;
		gboolean _tmp14_;
		_tmp13_ = element;
		_tmp14_ = vala_data_type_is_weak (_tmp13_);
		_tmp9_ = _tmp14_;
	} else {
		_tmp9_ = FALSE;
	}
	result = _tmp9_;
	return result;
}


static gboolean valadoc_drivers_tree_builder_is_type_reference_owned (ValadocDriversTreeBuilder* self, ValaDataType* element) {
	gboolean result = FALSE;
	ValaDataType* _tmp0_;
	ValaCodeNode* parent = NULL;
	ValaDataType* _tmp1_;
	ValaCodeNode* _tmp2_;
	ValaCodeNode* _tmp3_;
	ValaCodeNode* _tmp4_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = element;
	if (_tmp0_ == NULL) {
		result = FALSE;
		return result;
	}
	_tmp1_ = element;
	_tmp2_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1_);
	_tmp3_ = _tmp2_;
	parent = _tmp3_;
	_tmp4_ = parent;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_PARAMETER)) {
		ValaCodeNode* _tmp5_;
		ValaParameterDirection _tmp6_;
		ValaParameterDirection _tmp7_;
		ValaCodeNode* _tmp8_;
		ValaDataType* _tmp9_;
		ValaDataType* _tmp10_;
		gboolean _tmp11_;
		gboolean _tmp12_;
		_tmp5_ = parent;
		_tmp6_ = vala_parameter_get_direction (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, VALA_TYPE_PARAMETER, ValaParameter));
		_tmp7_ = _tmp6_;
		if (_tmp7_ != VALA_PARAMETER_DIRECTION_IN) {
			result = FALSE;
			return result;
		}
		_tmp8_ = parent;
		_tmp9_ = vala_variable_get_variable_type ((ValaVariable*) G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_PARAMETER, ValaParameter));
		_tmp10_ = _tmp9_;
		_tmp11_ = vala_data_type_get_value_owned (_tmp10_);
		_tmp12_ = _tmp11_;
		result = _tmp12_;
		return result;
	}
	result = FALSE;
	return result;
}


static gboolean valadoc_drivers_tree_builder_is_type_reference_weak (ValadocDriversTreeBuilder* self, ValaDataType* element) {
	gboolean result = FALSE;
	ValaDataType* _tmp0_;
	gboolean _tmp1_ = FALSE;
	ValaDataType* _tmp2_;
	ValaTypeSymbol* _tmp3_;
	ValaTypeSymbol* _tmp4_;
	ValaDataType* _tmp9_;
	gboolean _tmp10_ = FALSE;
	ValaDataType* _tmp11_;
	ValaCodeNode* _tmp12_;
	ValaCodeNode* _tmp13_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = element;
	if (_tmp0_ == NULL) {
		result = FALSE;
		return result;
	}
	_tmp2_ = element;
	_tmp3_ = vala_data_type_get_data_type (_tmp2_);
	_tmp4_ = _tmp3_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_TYPESYMBOL)) {
		ValaDataType* _tmp5_;
		ValaTypeSymbol* _tmp6_;
		ValaTypeSymbol* _tmp7_;
		gboolean _tmp8_;
		_tmp5_ = element;
		_tmp6_ = vala_data_type_get_data_type (_tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = valadoc_drivers_tree_builder_is_reference_counting (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
		_tmp1_ = _tmp8_ == FALSE;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		result = FALSE;
		return result;
	}
	_tmp9_ = element;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, VALA_TYPE_ARRAY_TYPE)) {
		result = FALSE;
		return result;
	}
	_tmp11_ = element;
	_tmp12_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp11_);
	_tmp13_ = _tmp12_;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_PARAMETER) == FALSE) {
		ValaDataType* _tmp14_;
		gboolean _tmp15_;
		_tmp14_ = element;
		_tmp15_ = vala_data_type_is_weak (_tmp14_);
		_tmp10_ = _tmp15_;
	} else {
		_tmp10_ = FALSE;
	}
	result = _tmp10_;
	return result;
}


static ValadocApiOwnership valadoc_drivers_tree_builder_get_type_reference_ownership (ValadocDriversTreeBuilder* self, ValaDataType* element) {
	ValadocApiOwnership result = 0;
	ValaDataType* _tmp0_;
	gboolean _tmp1_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_is_type_reference_owned (self, _tmp0_);
	if (_tmp1_) {
		result = VALADOC_API_OWNERSHIP_OWNED;
		return result;
	} else {
		ValaDataType* _tmp2_;
		gboolean _tmp3_;
		_tmp2_ = element;
		_tmp3_ = valadoc_drivers_tree_builder_is_type_reference_weak (self, _tmp2_);
		if (_tmp3_) {
			result = VALADOC_API_OWNERSHIP_WEAK;
			return result;
		} else {
			ValaDataType* _tmp4_;
			gboolean _tmp5_;
			_tmp4_ = element;
			_tmp5_ = valadoc_drivers_tree_builder_is_type_reference_unowned (self, _tmp4_);
			if (_tmp5_) {
				result = VALADOC_API_OWNERSHIP_UNOWNED;
				return result;
			}
		}
	}
	result = VALADOC_API_OWNERSHIP_DEFAULT;
	return result;
}


static ValadocApiOwnership valadoc_drivers_tree_builder_get_property_ownership (ValadocDriversTreeBuilder* self, ValaPropertyAccessor* element) {
	ValadocApiOwnership result = 0;
	ValaPropertyAccessor* _tmp0_;
	ValaDataType* _tmp1_;
	ValaDataType* _tmp2_;
	gboolean _tmp3_;
	gboolean _tmp4_;
	g_return_val_if_fail (self != NULL, 0);
	g_return_val_if_fail (element != NULL, 0);
	_tmp0_ = element;
	_tmp1_ = vala_property_accessor_get_value_type (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = vala_data_type_get_value_owned (_tmp2_);
	_tmp4_ = _tmp3_;
	if (_tmp4_) {
		result = VALADOC_API_OWNERSHIP_OWNED;
		return result;
	}
	result = VALADOC_API_OWNERSHIP_UNOWNED;
	return result;
}


static ValadocApiPropertyBindingType valadoc_drivers_tree_builder_get_property_binding_type (ValadocDriversTreeBuilder* self, ValaProperty* element) {
	ValadocApiPropertyBindingType result = 0;
	ValaProperty* _tmp0_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	g_return_val_if_fail (self != NULL, 0);
	g_return_val_if_fail (element != NULL, 0);
	_tmp0_ = element;
	_tmp1_ = vala_property_get_is_abstract (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_) {
		result = VALADOC_API_PROPERTY_BINDING_TYPE_ABSTRACT;
		return result;
	} else {
		ValaProperty* _tmp3_;
		gboolean _tmp4_;
		gboolean _tmp5_;
		_tmp3_ = element;
		_tmp4_ = vala_property_get_is_virtual (_tmp3_);
		_tmp5_ = _tmp4_;
		if (_tmp5_) {
			result = VALADOC_API_PROPERTY_BINDING_TYPE_VIRTUAL;
			return result;
		} else {
			ValaProperty* _tmp6_;
			gboolean _tmp7_;
			gboolean _tmp8_;
			_tmp6_ = element;
			_tmp7_ = vala_property_get_overrides (_tmp6_);
			_tmp8_ = _tmp7_;
			if (_tmp8_) {
				result = VALADOC_API_PROPERTY_BINDING_TYPE_OVERRIDE;
				return result;
			}
		}
	}
	result = VALADOC_API_PROPERTY_BINDING_TYPE_UNMODIFIED;
	return result;
}


static ValadocApiFormalParameterType valadoc_drivers_tree_builder_get_formal_parameter_type (ValadocDriversTreeBuilder* self, ValaParameter* element) {
	ValadocApiFormalParameterType result = 0;
	ValaParameter* _tmp0_;
	ValaParameterDirection _tmp1_;
	ValaParameterDirection _tmp2_;
	g_return_val_if_fail (self != NULL, 0);
	g_return_val_if_fail (element != NULL, 0);
	_tmp0_ = element;
	_tmp1_ = vala_parameter_get_direction (_tmp0_);
	_tmp2_ = _tmp1_;
	if (_tmp2_ == VALA_PARAMETER_DIRECTION_OUT) {
		result = VALADOC_API_FORMAL_PARAMETER_TYPE_OUT;
		return result;
	} else {
		ValaParameter* _tmp3_;
		ValaParameterDirection _tmp4_;
		ValaParameterDirection _tmp5_;
		_tmp3_ = element;
		_tmp4_ = vala_parameter_get_direction (_tmp3_);
		_tmp5_ = _tmp4_;
		if (_tmp5_ == VALA_PARAMETER_DIRECTION_REF) {
			result = VALADOC_API_FORMAL_PARAMETER_TYPE_REF;
			return result;
		} else {
			ValaParameter* _tmp6_;
			ValaParameterDirection _tmp7_;
			ValaParameterDirection _tmp8_;
			_tmp6_ = element;
			_tmp7_ = vala_parameter_get_direction (_tmp6_);
			_tmp8_ = _tmp7_;
			if (_tmp8_ == VALA_PARAMETER_DIRECTION_IN) {
				result = VALADOC_API_FORMAL_PARAMETER_TYPE_IN;
				return result;
			}
		}
	}
	g_error ("treebuilder.vala:731: Unknown formal parameter type");
}


static glong string_strnlen (gchar* str, glong maxlen) {
	glong result = 0L;
	gchar* end = NULL;
	gchar* _tmp0_;
	glong _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	_tmp0_ = str;
	_tmp1_ = maxlen;
	_tmp2_ = memchr (_tmp0_, 0, (gsize) _tmp1_);
	end = _tmp2_;
	_tmp3_ = end;
	if (_tmp3_ == NULL) {
		glong _tmp4_;
		_tmp4_ = maxlen;
		result = _tmp4_;
		return result;
	} else {
		gchar* _tmp5_;
		gchar* _tmp6_;
		_tmp5_ = end;
		_tmp6_ = str;
		result = (glong) (_tmp5_ - _tmp6_);
		return result;
	}
}


static gchar* string_substring (const gchar* self, glong offset, glong len) {
	gchar* result = NULL;
	glong string_length = 0L;
	gboolean _tmp0_ = FALSE;
	glong _tmp1_;
	glong _tmp8_;
	glong _tmp14_;
	glong _tmp17_;
	glong _tmp18_;
	glong _tmp19_;
	glong _tmp20_;
	glong _tmp21_;
	gchar* _tmp22_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp1_ = offset;
	if (_tmp1_ >= ((glong) 0)) {
		glong _tmp2_;
		_tmp2_ = len;
		_tmp0_ = _tmp2_ >= ((glong) 0);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		glong _tmp3_;
		glong _tmp4_;
		glong _tmp5_;
		_tmp3_ = offset;
		_tmp4_ = len;
		_tmp5_ = string_strnlen ((gchar*) self, _tmp3_ + _tmp4_);
		string_length = _tmp5_;
	} else {
		gint _tmp6_;
		gint _tmp7_;
		_tmp6_ = strlen (self);
		_tmp7_ = _tmp6_;
		string_length = (glong) _tmp7_;
	}
	_tmp8_ = offset;
	if (_tmp8_ < ((glong) 0)) {
		glong _tmp9_;
		glong _tmp10_;
		glong _tmp11_;
		_tmp9_ = string_length;
		_tmp10_ = offset;
		offset = _tmp9_ + _tmp10_;
		_tmp11_ = offset;
		g_return_val_if_fail (_tmp11_ >= ((glong) 0), NULL);
	} else {
		glong _tmp12_;
		glong _tmp13_;
		_tmp12_ = offset;
		_tmp13_ = string_length;
		g_return_val_if_fail (_tmp12_ <= _tmp13_, NULL);
	}
	_tmp14_ = len;
	if (_tmp14_ < ((glong) 0)) {
		glong _tmp15_;
		glong _tmp16_;
		_tmp15_ = string_length;
		_tmp16_ = offset;
		len = _tmp15_ - _tmp16_;
	}
	_tmp17_ = offset;
	_tmp18_ = len;
	_tmp19_ = string_length;
	g_return_val_if_fail ((_tmp17_ + _tmp18_) <= _tmp19_, NULL);
	_tmp20_ = offset;
	_tmp21_ = len;
	_tmp22_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) _tmp21_);
	result = _tmp22_;
	return result;
}


static gint string_last_index_of_char (const gchar* self, gunichar c, gint start_index) {
	gint result = 0;
	gchar* _result_ = NULL;
	gint _tmp0_;
	gunichar _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = start_index;
	_tmp1_ = c;
	_tmp2_ = g_utf8_strrchr (((gchar*) self) + _tmp0_, (gssize) -1, _tmp1_);
	_result_ = _tmp2_;
	_tmp3_ = _result_;
	if (_tmp3_ != NULL) {
		gchar* _tmp4_;
		_tmp4_ = _result_;
		result = (gint) (_tmp4_ - ((gchar*) self));
		return result;
	} else {
		result = -1;
		return result;
	}
}


static gchar* valadoc_drivers_tree_builder_get_package_name (ValadocDriversTreeBuilder* self, const gchar* path) {
	gchar* result = NULL;
	gchar* file_name = NULL;
	const gchar* _tmp0_;
	gchar* _tmp1_;
	gint _tmp2_;
	gchar* _tmp3_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (path != NULL, NULL);
	_tmp0_ = path;
	_tmp1_ = g_path_get_basename (_tmp0_);
	file_name = _tmp1_;
	_tmp2_ = string_last_index_of_char (file_name, (gunichar) '.', 0);
	_tmp3_ = string_substring (file_name, (glong) 0, (glong) _tmp2_);
	result = _tmp3_;
	_g_free0 (file_name);
	return result;
}


static gboolean valadoc_drivers_tree_builder_add_package (ValadocDriversTreeBuilder* self, ValaCodeContext* context, const gchar* pkg) {
	gboolean result = FALSE;
	ValaCodeContext* _tmp0_;
	const gchar* _tmp1_;
	gboolean _tmp2_;
	gchar* vapi_name = NULL;
	const gchar* _tmp3_;
	gchar* _tmp4_;
	gchar* gir_name = NULL;
	const gchar* _tmp5_;
	gchar* _tmp6_;
	ValadocSettings* _tmp7_;
	gchar** _tmp8_;
	gint _tmp8__length1;
	gchar* _tmp17_ = NULL;
	ValaCodeContext* _tmp18_;
	const gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* package_path = NULL;
	gchar* _tmp24_;
	const gchar* _tmp25_;
	ValaCodeContext* _tmp29_;
	const gchar* _tmp30_;
	ValaSourceFile* vfile = NULL;
	ValaCodeContext* _tmp31_;
	const gchar* _tmp32_;
	ValaSourceFile* _tmp33_;
	ValaCodeContext* _tmp34_;
	ValaSourceFile* _tmp35_;
	ValadocApiPackage* vdpkg = NULL;
	const gchar* _tmp36_;
	ValadocApiPackage* _tmp37_;
	ValadocApiPackage* _tmp38_;
	ValadocDriversTreeBuilderPackageMetaData* _tmp39_;
	ValadocDriversTreeBuilderPackageMetaData* _tmp40_;
	ValaSourceFile* _tmp41_;
	ValadocApiSourceFile* _tmp42_;
	ValadocApiSourceFile* _tmp43_;
	ValaCodeContext* _tmp44_;
	const gchar* _tmp45_;
	gchar* _tmp46_;
	gchar* _tmp47_;
	const gchar* _tmp48_;
	gchar* _tmp49_;
	gchar* _tmp50_;
	gchar* _tmp51_;
	gchar* _tmp52_;
	const gchar* _tmp53_;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (context != NULL, FALSE);
	g_return_val_if_fail (pkg != NULL, FALSE);
	_tmp0_ = context;
	_tmp1_ = pkg;
	_tmp2_ = vala_code_context_has_package (_tmp0_, _tmp1_);
	if (_tmp2_) {
		result = TRUE;
		return result;
	}
	_tmp3_ = pkg;
	_tmp4_ = g_strconcat (_tmp3_, ".vapi", NULL);
	vapi_name = _tmp4_;
	_tmp5_ = pkg;
	_tmp6_ = g_strconcat (_tmp5_, ".gir", NULL);
	gir_name = _tmp6_;
	_tmp7_ = self->priv->settings;
	_tmp8_ = _tmp7_->source_files;
	_tmp8__length1 = _tmp7_->source_files_length1;
	{
		gchar** source_file_collection = NULL;
		gint source_file_collection_length1 = 0;
		gint _source_file_collection_size_ = 0;
		gint source_file_it = 0;
		source_file_collection = _tmp8_;
		source_file_collection_length1 = _tmp8__length1;
		for (source_file_it = 0; source_file_it < _tmp8__length1; source_file_it = source_file_it + 1) {
			gchar* _tmp9_;
			gchar* source_file = NULL;
			_tmp9_ = g_strdup (source_file_collection[source_file_it]);
			source_file = _tmp9_;
			{
				gchar* basename = NULL;
				const gchar* _tmp10_;
				gchar* _tmp11_;
				gboolean _tmp12_ = FALSE;
				const gchar* _tmp13_;
				const gchar* _tmp14_;
				_tmp10_ = source_file;
				_tmp11_ = g_path_get_basename (_tmp10_);
				basename = _tmp11_;
				_tmp13_ = basename;
				_tmp14_ = vapi_name;
				if (g_strcmp0 (_tmp13_, _tmp14_) == 0) {
					_tmp12_ = TRUE;
				} else {
					const gchar* _tmp15_;
					const gchar* _tmp16_;
					_tmp15_ = basename;
					_tmp16_ = gir_name;
					_tmp12_ = g_strcmp0 (_tmp15_, _tmp16_) == 0;
				}
				if (_tmp12_) {
					result = TRUE;
					_g_free0 (basename);
					_g_free0 (source_file);
					_g_free0 (gir_name);
					_g_free0 (vapi_name);
					return result;
				}
				_g_free0 (basename);
				_g_free0 (source_file);
			}
		}
	}
	_tmp18_ = context;
	_tmp19_ = pkg;
	_tmp20_ = vala_code_context_get_vapi_path (_tmp18_, _tmp19_);
	_tmp17_ = _tmp20_;
	if (_tmp17_ == NULL) {
		ValaCodeContext* _tmp21_;
		const gchar* _tmp22_;
		gchar* _tmp23_;
		_tmp21_ = context;
		_tmp22_ = pkg;
		_tmp23_ = vala_code_context_get_gir_path (_tmp21_, _tmp22_);
		_g_free0 (_tmp17_);
		_tmp17_ = _tmp23_;
	}
	_tmp24_ = g_strdup (_tmp17_);
	package_path = _tmp24_;
	_tmp25_ = package_path;
	if (_tmp25_ == NULL) {
		const gchar* _tmp26_;
		gchar* _tmp27_;
		gchar* _tmp28_;
		_tmp26_ = pkg;
		_tmp27_ = g_strdup_printf ("Package `%s' not found in specified Vala API directories or GObject-In" \
"trospection GIR directories", _tmp26_);
		_tmp28_ = _tmp27_;
		vala_report_error (NULL, _tmp28_);
		_g_free0 (_tmp28_);
		result = FALSE;
		_g_free0 (package_path);
		_g_free0 (_tmp17_);
		_g_free0 (gir_name);
		_g_free0 (vapi_name);
		return result;
	}
	_tmp29_ = context;
	_tmp30_ = pkg;
	vala_code_context_add_package (_tmp29_, _tmp30_);
	_tmp31_ = context;
	_tmp32_ = package_path;
	_tmp33_ = vala_source_file_new (_tmp31_, VALA_SOURCE_FILE_TYPE_PACKAGE, _tmp32_, NULL, FALSE);
	vfile = _tmp33_;
	_tmp34_ = context;
	_tmp35_ = vfile;
	vala_code_context_add_source_file (_tmp34_, _tmp35_);
	_tmp36_ = pkg;
	_tmp37_ = valadoc_api_package_new (_tmp36_, TRUE, NULL);
	vdpkg = _tmp37_;
	_tmp38_ = vdpkg;
	_tmp39_ = valadoc_drivers_tree_builder_register_package (self, _tmp38_);
	_tmp40_ = _tmp39_;
	_tmp41_ = vfile;
	_tmp42_ = valadoc_drivers_tree_builder_register_source_file (self, _tmp40_, _tmp41_);
	_tmp43_ = _tmp42_;
	_g_object_unref0 (_tmp43_);
	_valadoc_drivers_tree_builder_package_meta_data_unref0 (_tmp40_);
	_tmp44_ = context;
	_tmp45_ = package_path;
	_tmp46_ = g_path_get_dirname (_tmp45_);
	_tmp47_ = _tmp46_;
	_tmp48_ = pkg;
	_tmp49_ = g_strdup_printf ("%s.deps", _tmp48_);
	_tmp50_ = _tmp49_;
	_tmp51_ = g_build_filename (_tmp47_, _tmp50_, NULL);
	_tmp52_ = _tmp51_;
	_tmp53_ = pkg;
	valadoc_drivers_tree_builder_add_deps (self, _tmp44_, _tmp52_, _tmp53_);
	_g_free0 (_tmp52_);
	_g_free0 (_tmp50_);
	_g_free0 (_tmp47_);
	result = TRUE;
	_g_object_unref0 (vdpkg);
	_vala_source_file_unref0 (vfile);
	_g_free0 (package_path);
	_g_free0 (_tmp17_);
	_g_free0 (gir_name);
	_g_free0 (vapi_name);
	return result;
}


static gchar* string_strip (const gchar* self) {
	gchar* result = NULL;
	gchar* _result_ = NULL;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = g_strdup (self);
	_result_ = _tmp0_;
	_tmp1_ = _result_;
	g_strstrip (_tmp1_);
	result = _result_;
	return result;
}


static void valadoc_drivers_tree_builder_add_deps (ValadocDriversTreeBuilder* self, ValaCodeContext* context, const gchar* file_path, const gchar* pkg_name) {
	const gchar* _tmp0_;
	gboolean _tmp1_;
	GError * _inner_error_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (context != NULL);
	g_return_if_fail (file_path != NULL);
	g_return_if_fail (pkg_name != NULL);
	_tmp0_ = file_path;
	_tmp1_ = g_file_test (_tmp0_, G_FILE_TEST_EXISTS);
	if (_tmp1_) {
		{
			gchar* deps_content = NULL;
			gulong deps_len = 0UL;
			const gchar* _tmp2_;
			gchar* _tmp3_ = NULL;
			gsize _tmp4_ = 0UL;
			const gchar* _tmp5_;
			gchar** _tmp6_;
			gchar** _tmp7_;
			_tmp2_ = file_path;
			g_file_get_contents (_tmp2_, &_tmp3_, &_tmp4_, &_inner_error_);
			_g_free0 (deps_content);
			deps_content = _tmp3_;
			deps_len = (gulong) _tmp4_;
			if (G_UNLIKELY (_inner_error_ != NULL)) {
				_g_free0 (deps_content);
				if (_inner_error_->domain == G_FILE_ERROR) {
					goto __catch0_g_file_error;
				}
				_g_free0 (deps_content);
				g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
				g_clear_error (&_inner_error_);
				return;
			}
			_tmp5_ = deps_content;
			_tmp7_ = _tmp6_ = g_strsplit (_tmp5_, "\n", 0);
			{
				gchar** dep_collection = NULL;
				gint dep_collection_length1 = 0;
				gint _dep_collection_size_ = 0;
				gint dep_it = 0;
				dep_collection = _tmp7_;
				dep_collection_length1 = _vala_array_length (_tmp6_);
				for (dep_it = 0; dep_it < _vala_array_length (_tmp6_); dep_it = dep_it + 1) {
					gchar* _tmp8_;
					gchar* dep = NULL;
					_tmp8_ = g_strdup (dep_collection[dep_it]);
					dep = _tmp8_;
					{
						const gchar* _tmp9_;
						gchar* _tmp10_;
						const gchar* _tmp11_;
						_tmp9_ = dep;
						_tmp10_ = string_strip (_tmp9_);
						_g_free0 (dep);
						dep = _tmp10_;
						_tmp11_ = dep;
						if (g_strcmp0 (_tmp11_, "") != 0) {
							ValaCodeContext* _tmp12_;
							const gchar* _tmp13_;
							gboolean _tmp14_;
							_tmp12_ = context;
							_tmp13_ = dep;
							_tmp14_ = valadoc_drivers_tree_builder_add_package (self, _tmp12_, _tmp13_);
							if (!_tmp14_) {
								const gchar* _tmp15_;
								const gchar* _tmp16_;
								gchar* _tmp17_;
								gchar* _tmp18_;
								_tmp15_ = dep;
								_tmp16_ = pkg_name;
								_tmp17_ = g_strdup_printf ("%s, dependency of %s, not found in specified Vala API directories", _tmp15_, _tmp16_);
								_tmp18_ = _tmp17_;
								vala_report_error (NULL, _tmp18_);
								_g_free0 (_tmp18_);
							}
						}
						_g_free0 (dep);
					}
				}
				dep_collection = (_vala_array_free (dep_collection, dep_collection_length1, (GDestroyNotify) g_free), NULL);
			}
			_g_free0 (deps_content);
		}
		goto __finally0;
		__catch0_g_file_error:
		{
			GError* e = NULL;
			GError* _tmp19_;
			const gchar* _tmp20_;
			gchar* _tmp21_;
			gchar* _tmp22_;
			e = _inner_error_;
			_inner_error_ = NULL;
			_tmp19_ = e;
			_tmp20_ = _tmp19_->message;
			_tmp21_ = g_strdup_printf ("Unable to read dependency file: %s", _tmp20_);
			_tmp22_ = _tmp21_;
			vala_report_error (NULL, _tmp22_);
			_g_free0 (_tmp22_);
			_g_error_free0 (e);
		}
		__finally0:
		if (G_UNLIKELY (_inner_error_ != NULL)) {
			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
	}
}


/**
 * Adds the specified packages to the list of used packages.
 *
 * @param context The code context
 * @param packages a list of package names
 */
static void valadoc_drivers_tree_builder_add_depencies (ValadocDriversTreeBuilder* self, ValaCodeContext* context, gchar** packages, int packages_length1) {
	gchar** _tmp0_;
	gint _tmp0__length1;
	g_return_if_fail (self != NULL);
	g_return_if_fail (context != NULL);
	_tmp0_ = packages;
	_tmp0__length1 = packages_length1;
	{
		gchar** package_collection = NULL;
		gint package_collection_length1 = 0;
		gint _package_collection_size_ = 0;
		gint package_it = 0;
		package_collection = _tmp0_;
		package_collection_length1 = _tmp0__length1;
		for (package_it = 0; package_it < _tmp0__length1; package_it = package_it + 1) {
			gchar* _tmp1_;
			gchar* package = NULL;
			_tmp1_ = g_strdup (package_collection[package_it]);
			package = _tmp1_;
			{
				ValaCodeContext* _tmp2_;
				const gchar* _tmp3_;
				gboolean _tmp4_;
				_tmp2_ = context;
				_tmp3_ = package;
				_tmp4_ = valadoc_drivers_tree_builder_add_package (self, _tmp2_, _tmp3_);
				if (!_tmp4_) {
					const gchar* _tmp5_;
					gchar* _tmp6_;
					gchar* _tmp7_;
					_tmp5_ = package;
					_tmp6_ = g_strdup_printf ("Package `%s' not found in specified Vala API directories or GObject-In" \
"trospection GIR directories", _tmp5_);
					_tmp7_ = _tmp6_;
					vala_report_error (NULL, _tmp7_);
					_g_free0 (_tmp7_);
				}
				_g_free0 (package);
			}
		}
	}
}


/**
 * Add the specified source file to the context. Only .vala, .vapi, .gs,
 * and .c files are supported.
 */
static void valadoc_drivers_tree_builder_add_documented_files (ValadocDriversTreeBuilder* self, ValaCodeContext* context, gchar** sources, int sources_length1) {
	gchar** _tmp0_;
	gint _tmp0__length1;
	gchar** _tmp1_;
	gint _tmp1__length1;
	g_return_if_fail (self != NULL);
	g_return_if_fail (context != NULL);
	_tmp0_ = sources;
	_tmp0__length1 = sources_length1;
	if (_tmp0_ == NULL) {
		return;
	}
	_tmp1_ = sources;
	_tmp1__length1 = sources_length1;
	{
		gchar** source_collection = NULL;
		gint source_collection_length1 = 0;
		gint _source_collection_size_ = 0;
		gint source_it = 0;
		source_collection = _tmp1_;
		source_collection_length1 = _tmp1__length1;
		for (source_it = 0; source_it < _tmp1__length1; source_it = source_it + 1) {
			gchar* _tmp2_;
			gchar* source = NULL;
			_tmp2_ = g_strdup (source_collection[source_it]);
			source = _tmp2_;
			{
				const gchar* _tmp3_;
				gboolean _tmp4_;
				_tmp3_ = source;
				_tmp4_ = g_file_test (_tmp3_, G_FILE_TEST_EXISTS);
				if (_tmp4_) {
					gchar* rpath = NULL;
					const gchar* _tmp5_;
					gchar* _tmp6_;
					gboolean _tmp7_ = FALSE;
					const gchar* _tmp8_;
					gboolean _tmp9_;
					_tmp5_ = source;
					_tmp6_ = valadoc_realpath (_tmp5_);
					rpath = _tmp6_;
					_tmp8_ = source;
					_tmp9_ = g_str_has_suffix (_tmp8_, ".vala");
					if (_tmp9_) {
						_tmp7_ = TRUE;
					} else {
						const gchar* _tmp10_;
						gboolean _tmp11_;
						_tmp10_ = source;
						_tmp11_ = g_str_has_suffix (_tmp10_, ".gs");
						_tmp7_ = _tmp11_;
					}
					if (_tmp7_) {
						ValaSourceFile* source_file = NULL;
						ValaCodeContext* _tmp12_;
						const gchar* _tmp13_;
						ValaSourceFile* _tmp14_;
						ValadocDriversTreeBuilderPackageMetaData* _tmp15_;
						ValadocDriversTreeBuilderPackageMetaData* _tmp21_;
						ValaSourceFile* _tmp22_;
						ValadocApiSourceFile* _tmp23_;
						ValadocApiSourceFile* _tmp24_;
						ValaCodeContext* _tmp25_;
						ValaProfile _tmp26_;
						ValaProfile _tmp27_;
						ValaCodeContext* _tmp38_;
						ValaSourceFile* _tmp39_;
						_tmp12_ = context;
						_tmp13_ = rpath;
						_tmp14_ = vala_source_file_new (_tmp12_, VALA_SOURCE_FILE_TYPE_SOURCE, _tmp13_, NULL, FALSE);
						source_file = _tmp14_;
						_tmp15_ = self->priv->source_package;
						if (_tmp15_ == NULL) {
							ValadocSettings* _tmp16_;
							const gchar* _tmp17_;
							ValadocApiPackage* _tmp18_;
							ValadocApiPackage* _tmp19_;
							ValadocDriversTreeBuilderPackageMetaData* _tmp20_;
							_tmp16_ = self->priv->settings;
							_tmp17_ = _tmp16_->pkg_name;
							_tmp18_ = valadoc_api_package_new (_tmp17_, FALSE, NULL);
							_tmp19_ = _tmp18_;
							_tmp20_ = valadoc_drivers_tree_builder_register_package (self, _tmp19_);
							_valadoc_drivers_tree_builder_package_meta_data_unref0 (self->priv->source_package);
							self->priv->source_package = _tmp20_;
							_g_object_unref0 (_tmp19_);
						}
						_tmp21_ = self->priv->source_package;
						_tmp22_ = source_file;
						_tmp23_ = valadoc_drivers_tree_builder_register_source_file (self, _tmp21_, _tmp22_);
						_tmp24_ = _tmp23_;
						_g_object_unref0 (_tmp24_);
						_tmp25_ = context;
						_tmp26_ = vala_code_context_get_profile (_tmp25_);
						_tmp27_ = _tmp26_;
						if (_tmp27_ == VALA_PROFILE_GOBJECT) {
							ValaUsingDirective* ns_ref = NULL;
							ValaUnresolvedSymbol* _tmp28_;
							ValaUnresolvedSymbol* _tmp29_;
							ValaUsingDirective* _tmp30_;
							ValaUsingDirective* _tmp31_;
							ValaSourceFile* _tmp32_;
							ValaUsingDirective* _tmp33_;
							ValaCodeContext* _tmp34_;
							ValaNamespace* _tmp35_;
							ValaNamespace* _tmp36_;
							ValaUsingDirective* _tmp37_;
							_tmp28_ = vala_unresolved_symbol_new (NULL, "GLib", NULL);
							_tmp29_ = _tmp28_;
							_tmp30_ = vala_using_directive_new ((ValaSymbol*) _tmp29_, NULL);
							_tmp31_ = _tmp30_;
							_vala_code_node_unref0 (_tmp29_);
							ns_ref = _tmp31_;
							_tmp32_ = source_file;
							_tmp33_ = ns_ref;
							vala_source_file_add_using_directive (_tmp32_, _tmp33_);
							_tmp34_ = context;
							_tmp35_ = vala_code_context_get_root (_tmp34_);
							_tmp36_ = _tmp35_;
							_tmp37_ = ns_ref;
							vala_namespace_add_using_directive (_tmp36_, _tmp37_);
							_vala_code_node_unref0 (ns_ref);
						}
						_tmp38_ = context;
						_tmp39_ = source_file;
						vala_code_context_add_source_file (_tmp38_, _tmp39_);
						_vala_source_file_unref0 (source_file);
					} else {
						gboolean _tmp40_ = FALSE;
						const gchar* _tmp41_;
						gboolean _tmp42_;
						_tmp41_ = source;
						_tmp42_ = g_str_has_suffix (_tmp41_, ".vapi");
						if (_tmp42_) {
							_tmp40_ = TRUE;
						} else {
							const gchar* _tmp43_;
							gboolean _tmp44_;
							_tmp43_ = source;
							_tmp44_ = g_str_has_suffix (_tmp43_, ".gir");
							_tmp40_ = _tmp44_;
						}
						if (_tmp40_) {
							gchar* file_name = NULL;
							const gchar* _tmp45_;
							gchar* _tmp46_;
							ValaSourceFile* vfile = NULL;
							ValaCodeContext* _tmp47_;
							const gchar* _tmp48_;
							ValaSourceFile* _tmp49_;
							ValaCodeContext* _tmp50_;
							ValaSourceFile* _tmp51_;
							ValadocDriversTreeBuilderPackageMetaData* _tmp52_;
							ValadocDriversTreeBuilderPackageMetaData* _tmp58_;
							ValaSourceFile* _tmp59_;
							ValadocApiSourceFile* _tmp60_;
							ValadocApiSourceFile* _tmp61_;
							ValaCodeContext* _tmp62_;
							const gchar* _tmp63_;
							gchar* _tmp64_;
							gchar* _tmp65_;
							const gchar* _tmp66_;
							gchar* _tmp67_;
							gchar* _tmp68_;
							gchar* _tmp69_;
							gchar* _tmp70_;
							const gchar* _tmp71_;
							_tmp45_ = source;
							_tmp46_ = valadoc_drivers_tree_builder_get_package_name (self, _tmp45_);
							file_name = _tmp46_;
							_tmp47_ = context;
							_tmp48_ = rpath;
							_tmp49_ = vala_source_file_new (_tmp47_, VALA_SOURCE_FILE_TYPE_PACKAGE, _tmp48_, NULL, FALSE);
							vfile = _tmp49_;
							_tmp50_ = context;
							_tmp51_ = vfile;
							vala_code_context_add_source_file (_tmp50_, _tmp51_);
							_tmp52_ = self->priv->source_package;
							if (_tmp52_ == NULL) {
								ValadocSettings* _tmp53_;
								const gchar* _tmp54_;
								ValadocApiPackage* _tmp55_;
								ValadocApiPackage* _tmp56_;
								ValadocDriversTreeBuilderPackageMetaData* _tmp57_;
								_tmp53_ = self->priv->settings;
								_tmp54_ = _tmp53_->pkg_name;
								_tmp55_ = valadoc_api_package_new (_tmp54_, FALSE, NULL);
								_tmp56_ = _tmp55_;
								_tmp57_ = valadoc_drivers_tree_builder_register_package (self, _tmp56_);
								_valadoc_drivers_tree_builder_package_meta_data_unref0 (self->priv->source_package);
								self->priv->source_package = _tmp57_;
								_g_object_unref0 (_tmp56_);
							}
							_tmp58_ = self->priv->source_package;
							_tmp59_ = vfile;
							_tmp60_ = valadoc_drivers_tree_builder_register_source_file (self, _tmp58_, _tmp59_);
							_tmp61_ = _tmp60_;
							_g_object_unref0 (_tmp61_);
							_tmp62_ = context;
							_tmp63_ = source;
							_tmp64_ = g_path_get_dirname (_tmp63_);
							_tmp65_ = _tmp64_;
							_tmp66_ = file_name;
							_tmp67_ = g_strdup_printf ("%s.deps", _tmp66_);
							_tmp68_ = _tmp67_;
							_tmp69_ = g_build_filename (_tmp65_, _tmp68_, NULL);
							_tmp70_ = _tmp69_;
							_tmp71_ = file_name;
							valadoc_drivers_tree_builder_add_deps (self, _tmp62_, _tmp70_, _tmp71_);
							_g_free0 (_tmp70_);
							_g_free0 (_tmp68_);
							_g_free0 (_tmp65_);
							_vala_source_file_unref0 (vfile);
							_g_free0 (file_name);
						} else {
							const gchar* _tmp72_;
							gboolean _tmp73_;
							_tmp72_ = source;
							_tmp73_ = g_str_has_suffix (_tmp72_, ".c");
							if (_tmp73_) {
								ValaCodeContext* _tmp74_;
								const gchar* _tmp75_;
								ValadocApiTree* _tmp76_;
								const gchar* _tmp77_;
								_tmp74_ = context;
								_tmp75_ = rpath;
								vala_code_context_add_c_source_file (_tmp74_, _tmp75_);
								_tmp76_ = self->priv->tree;
								_tmp77_ = rpath;
								valadoc_api_tree_add_external_c_files (_tmp76_, _tmp77_);
							} else {
								const gchar* _tmp78_;
								gchar* _tmp79_;
								gchar* _tmp80_;
								_tmp78_ = source;
								_tmp79_ = g_strdup_printf ("%s is not a supported source file type. Only .vala, .vapi, .gs, and .c" \
" files are supported.", _tmp78_);
								_tmp80_ = _tmp79_;
								vala_report_error (NULL, _tmp80_);
								_g_free0 (_tmp80_);
							}
						}
					}
					_g_free0 (rpath);
				} else {
					const gchar* _tmp81_;
					gchar* _tmp82_;
					gchar* _tmp83_;
					_tmp81_ = source;
					_tmp82_ = g_strdup_printf ("%s not found", _tmp81_);
					_tmp83_ = _tmp82_;
					vala_report_error (NULL, _tmp83_);
					_g_free0 (_tmp83_);
				}
				_g_free0 (source);
			}
		}
	}
}


static gchar** _vala_array_dup1 (gchar** self, int length) {
	gchar** result;
	int i;
	result = g_new0 (gchar*, length + 1);
	for (i = 0; i < length; i++) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (self[i]);
		result[i] = _tmp0_;
	}
	return result;
}


static gchar** _vala_array_dup2 (gchar** self, int length) {
	gchar** result;
	int i;
	result = g_new0 (gchar*, length + 1);
	for (i = 0; i < length; i++) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (self[i]);
		result[i] = _tmp0_;
	}
	return result;
}


static gchar** _vala_array_dup3 (gchar** self, int length) {
	gchar** result;
	int i;
	result = g_new0 (gchar*, length + 1);
	for (i = 0; i < length; i++) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (self[i]);
		result[i] = _tmp0_;
	}
	return result;
}


static ValaCodeContext* valadoc_drivers_tree_builder_create_valac_tree (ValadocDriversTreeBuilder* self, ValadocSettings* settings) {
	ValaCodeContext* result = NULL;
	ValaCodeContext* context = NULL;
	ValaCodeContext* _tmp0_;
	ValaCodeContext* _tmp1_;
	ValaCodeContext* _tmp2_;
	ValadocSettings* _tmp3_;
	gboolean _tmp4_;
	gboolean _tmp5_ = FALSE;
	ValadocSettings* _tmp6_;
	gboolean _tmp7_;
	ValaCodeContext* _tmp10_;
	ValaCodeContext* _tmp11_;
	ValadocSettings* _tmp12_;
	gchar** _tmp13_;
	gint _tmp13__length1;
	gchar** _tmp14_;
	gint _tmp14__length1;
	ValaCodeContext* _tmp15_;
	ValaReport* _tmp16_;
	ValaReport* _tmp17_;
	ValadocSettings* _tmp18_;
	gboolean _tmp19_;
	ValaCodeContext* _tmp20_;
	ValadocSettings* _tmp21_;
	gchar** _tmp22_;
	gint _tmp22__length1;
	gchar** _tmp23_;
	gint _tmp23__length1;
	ValaCodeContext* _tmp24_;
	ValadocSettings* _tmp25_;
	gchar** _tmp26_;
	gint _tmp26__length1;
	gchar** _tmp27_;
	gint _tmp27__length1;
	ValadocSettings* _tmp28_;
	const gchar* _tmp29_;
	ValadocSettings* _tmp38_;
	const gchar* _tmp39_;
	gboolean _tmp49_ = FALSE;
	gboolean _tmp50_ = FALSE;
	ValadocSettings* _tmp51_;
	const gchar* _tmp52_;
	ValadocSettings* _tmp59_;
	gchar** _tmp60_;
	gint _tmp60__length1;
	ValaCodeContext* _tmp73_;
	ValaProfile _tmp74_;
	ValaProfile _tmp75_;
	ValaCodeContext* _tmp108_;
	ValadocSettings* _tmp109_;
	gchar** _tmp110_;
	gint _tmp110__length1;
	ValadocErrorReporter* _tmp111_;
	gint _tmp112_;
	gint _tmp113_;
	ValaCodeContext* _tmp114_;
	ValadocSettings* _tmp115_;
	gchar** _tmp116_;
	gint _tmp116__length1;
	ValadocErrorReporter* _tmp117_;
	gint _tmp118_;
	gint _tmp119_;
	ValaParser* parser = NULL;
	ValaParser* _tmp120_;
	ValaParser* _tmp121_;
	ValaCodeContext* _tmp122_;
	ValaCodeContext* _tmp123_;
	ValaReport* _tmp124_;
	ValaReport* _tmp125_;
	gint _tmp126_;
	ValaGirParser* gir_parser = NULL;
	ValaGirParser* _tmp127_;
	ValaGirParser* _tmp128_;
	ValaCodeContext* _tmp129_;
	ValaCodeContext* _tmp130_;
	ValaReport* _tmp131_;
	ValaReport* _tmp132_;
	gint _tmp133_;
	ValaCodeContext* _tmp134_;
	ValaCodeContext* _tmp135_;
	ValaReport* _tmp136_;
	ValaReport* _tmp137_;
	gint _tmp138_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (settings != NULL, NULL);
	_tmp0_ = vala_code_context_new ();
	context = _tmp0_;
	_tmp1_ = context;
	vala_code_context_push (_tmp1_);
	_tmp2_ = context;
	_tmp3_ = settings;
	_tmp4_ = _tmp3_->experimental;
	vala_code_context_set_experimental (_tmp2_, _tmp4_);
	_tmp6_ = settings;
	_tmp7_ = _tmp6_->experimental;
	if (_tmp7_) {
		_tmp5_ = TRUE;
	} else {
		ValadocSettings* _tmp8_;
		gboolean _tmp9_;
		_tmp8_ = settings;
		_tmp9_ = _tmp8_->experimental_non_null;
		_tmp5_ = _tmp9_;
	}
	_tmp10_ = context;
	vala_code_context_set_experimental_non_null (_tmp10_, _tmp5_);
	_tmp11_ = context;
	_tmp12_ = settings;
	_tmp13_ = _tmp12_->vapi_directories;
	_tmp13__length1 = _tmp12_->vapi_directories_length1;
	_tmp14_ = (_tmp13_ != NULL) ? _vala_array_dup1 (_tmp13_, _tmp13__length1) : ((gpointer) _tmp13_);
	_tmp14__length1 = _tmp13__length1;
	_tmp11_->vapi_directories = (_vala_array_free (_tmp11_->vapi_directories, _tmp11_->vapi_directories_length1, (GDestroyNotify) g_free), NULL);
	_tmp11_->vapi_directories = _tmp14_;
	_tmp11_->vapi_directories_length1 = _tmp14__length1;
	_tmp15_ = context;
	_tmp16_ = vala_code_context_get_report (_tmp15_);
	_tmp17_ = _tmp16_;
	_tmp18_ = settings;
	_tmp19_ = _tmp18_->verbose;
	vala_report_set_enable_warnings (_tmp17_, _tmp19_);
	_tmp20_ = context;
	_tmp21_ = settings;
	_tmp22_ = _tmp21_->metadata_directories;
	_tmp22__length1 = _tmp21_->metadata_directories_length1;
	_tmp23_ = (_tmp22_ != NULL) ? _vala_array_dup2 (_tmp22_, _tmp22__length1) : ((gpointer) _tmp22_);
	_tmp23__length1 = _tmp22__length1;
	_tmp20_->metadata_directories = (_vala_array_free (_tmp20_->metadata_directories, _tmp20_->metadata_directories_length1, (GDestroyNotify) g_free), NULL);
	_tmp20_->metadata_directories = _tmp23_;
	_tmp20_->metadata_directories_length1 = _tmp23__length1;
	_tmp24_ = context;
	_tmp25_ = settings;
	_tmp26_ = _tmp25_->gir_directories;
	_tmp26__length1 = _tmp25_->gir_directories_length1;
	_tmp27_ = (_tmp26_ != NULL) ? _vala_array_dup3 (_tmp26_, _tmp26__length1) : ((gpointer) _tmp26_);
	_tmp27__length1 = _tmp26__length1;
	_tmp24_->gir_directories = (_vala_array_free (_tmp24_->gir_directories, _tmp24_->gir_directories_length1, (GDestroyNotify) g_free), NULL);
	_tmp24_->gir_directories = _tmp27_;
	_tmp24_->gir_directories_length1 = _tmp27__length1;
	_tmp28_ = settings;
	_tmp29_ = _tmp28_->basedir;
	if (_tmp29_ == NULL) {
		ValaCodeContext* _tmp30_;
		gchar* _tmp31_;
		gchar* _tmp32_;
		_tmp30_ = context;
		_tmp31_ = valadoc_realpath (".");
		_tmp32_ = _tmp31_;
		vala_code_context_set_basedir (_tmp30_, _tmp32_);
		_g_free0 (_tmp32_);
	} else {
		ValaCodeContext* _tmp33_;
		ValadocSettings* _tmp34_;
		const gchar* _tmp35_;
		gchar* _tmp36_;
		gchar* _tmp37_;
		_tmp33_ = context;
		_tmp34_ = settings;
		_tmp35_ = _tmp34_->basedir;
		_tmp36_ = valadoc_realpath (_tmp35_);
		_tmp37_ = _tmp36_;
		vala_code_context_set_basedir (_tmp33_, _tmp37_);
		_g_free0 (_tmp37_);
	}
	_tmp38_ = settings;
	_tmp39_ = _tmp38_->directory;
	if (_tmp39_ != NULL) {
		ValaCodeContext* _tmp40_;
		ValadocSettings* _tmp41_;
		const gchar* _tmp42_;
		gchar* _tmp43_;
		gchar* _tmp44_;
		_tmp40_ = context;
		_tmp41_ = settings;
		_tmp42_ = _tmp41_->directory;
		_tmp43_ = valadoc_realpath (_tmp42_);
		_tmp44_ = _tmp43_;
		vala_code_context_set_directory (_tmp40_, _tmp44_);
		_g_free0 (_tmp44_);
	} else {
		ValaCodeContext* _tmp45_;
		ValaCodeContext* _tmp46_;
		const gchar* _tmp47_;
		const gchar* _tmp48_;
		_tmp45_ = context;
		_tmp46_ = context;
		_tmp47_ = vala_code_context_get_basedir (_tmp46_);
		_tmp48_ = _tmp47_;
		vala_code_context_set_directory (_tmp45_, _tmp48_);
	}
	_tmp51_ = settings;
	_tmp52_ = _tmp51_->profile;
	if (g_strcmp0 (_tmp52_, "gobject-2.0") == 0) {
		_tmp50_ = TRUE;
	} else {
		ValadocSettings* _tmp53_;
		const gchar* _tmp54_;
		_tmp53_ = settings;
		_tmp54_ = _tmp53_->profile;
		_tmp50_ = g_strcmp0 (_tmp54_, "gobject") == 0;
	}
	if (_tmp50_) {
		_tmp49_ = TRUE;
	} else {
		ValadocSettings* _tmp55_;
		const gchar* _tmp56_;
		_tmp55_ = settings;
		_tmp56_ = _tmp55_->profile;
		_tmp49_ = _tmp56_ == NULL;
	}
	if (_tmp49_) {
		ValaCodeContext* _tmp57_;
		ValaCodeContext* _tmp58_;
		_tmp57_ = context;
		vala_code_context_set_profile (_tmp57_, VALA_PROFILE_GOBJECT);
		_tmp58_ = context;
		vala_code_context_add_define (_tmp58_, "GOBJECT");
	}
	_tmp59_ = settings;
	_tmp60_ = _tmp59_->defines;
	_tmp60__length1 = _tmp59_->defines_length1;
	if (_tmp60_ != NULL) {
		ValadocSettings* _tmp61_;
		gchar** _tmp62_;
		gint _tmp62__length1;
		_tmp61_ = settings;
		_tmp62_ = _tmp61_->defines;
		_tmp62__length1 = _tmp61_->defines_length1;
		{
			gchar** define_collection = NULL;
			gint define_collection_length1 = 0;
			gint _define_collection_size_ = 0;
			gint define_it = 0;
			define_collection = _tmp62_;
			define_collection_length1 = _tmp62__length1;
			for (define_it = 0; define_it < _tmp62__length1; define_it = define_it + 1) {
				gchar* _tmp63_;
				gchar* define = NULL;
				_tmp63_ = g_strdup (define_collection[define_it]);
				define = _tmp63_;
				{
					ValaCodeContext* _tmp64_;
					const gchar* _tmp65_;
					_tmp64_ = context;
					_tmp65_ = define;
					vala_code_context_add_define (_tmp64_, _tmp65_);
					_g_free0 (define);
				}
			}
		}
	}
	{
		gint i = 0;
		i = 2;
		{
			gboolean _tmp66_ = FALSE;
			_tmp66_ = TRUE;
			while (TRUE) {
				gint _tmp68_;
				ValaCodeContext* _tmp69_;
				gint _tmp70_;
				gchar* _tmp71_;
				gchar* _tmp72_;
				if (!_tmp66_) {
					gint _tmp67_;
					_tmp67_ = i;
					i = _tmp67_ + 2;
				}
				_tmp66_ = FALSE;
				_tmp68_ = i;
				if (!(_tmp68_ <= 38)) {
					break;
				}
				_tmp69_ = context;
				_tmp70_ = i;
				_tmp71_ = g_strdup_printf ("VALA_0_%d", _tmp70_);
				_tmp72_ = _tmp71_;
				vala_code_context_add_define (_tmp69_, _tmp72_);
				_g_free0 (_tmp72_);
			}
		}
	}
	_tmp73_ = context;
	_tmp74_ = vala_code_context_get_profile (_tmp73_);
	_tmp75_ = _tmp74_;
	if (_tmp75_ == VALA_PROFILE_GOBJECT) {
		gint glib_major = 0;
		gint glib_minor = 0;
		ValaCodeContext* _tmp76_;
		gint _tmp77_;
		ValaCodeContext* _tmp78_;
		gint _tmp79_;
		ValaCodeContext* _tmp80_;
		gint _tmp81_;
		gint _tmp82_;
		gboolean _tmp83_ = FALSE;
		ValadocSettings* _tmp84_;
		const gchar* _tmp85_;
		ValaCodeContext* _tmp89_;
		gint _tmp90_;
		ValaCodeContext* _tmp91_;
		gint _tmp92_;
		ValaCodeContext* _tmp93_;
		gint _tmp94_;
		gint _tmp95_;
		ValaCodeContext* _tmp104_;
		gboolean _tmp105_;
		ValaCodeContext* _tmp106_;
		gboolean _tmp107_;
		glib_major = 2;
		glib_minor = 24;
		_tmp76_ = context;
		_tmp77_ = glib_major;
		vala_code_context_set_target_glib_major (_tmp76_, _tmp77_);
		_tmp78_ = context;
		_tmp79_ = glib_minor;
		vala_code_context_set_target_glib_minor (_tmp78_, _tmp79_);
		_tmp80_ = context;
		_tmp81_ = vala_code_context_get_target_glib_major (_tmp80_);
		_tmp82_ = _tmp81_;
		if (_tmp82_ != 2) {
			vala_report_error (NULL, "This version of valac only supports GLib 2");
		}
		_tmp84_ = settings;
		_tmp85_ = _tmp84_->target_glib;
		if (_tmp85_ != NULL) {
			ValadocSettings* _tmp86_;
			const gchar* _tmp87_;
			gint _tmp88_;
			_tmp86_ = settings;
			_tmp87_ = _tmp86_->target_glib;
			_tmp88_ = sscanf (_tmp87_, "%d.%d", &glib_major, &glib_minor);
			_tmp83_ = _tmp88_ != 2;
		} else {
			_tmp83_ = FALSE;
		}
		if (_tmp83_) {
			vala_report_error (NULL, "Invalid format for --target-glib");
		}
		_tmp89_ = context;
		_tmp90_ = glib_major;
		vala_code_context_set_target_glib_major (_tmp89_, _tmp90_);
		_tmp91_ = context;
		_tmp92_ = glib_minor;
		vala_code_context_set_target_glib_minor (_tmp91_, _tmp92_);
		_tmp93_ = context;
		_tmp94_ = vala_code_context_get_target_glib_major (_tmp93_);
		_tmp95_ = _tmp94_;
		if (_tmp95_ != 2) {
			vala_report_error (NULL, "This version of valac only supports GLib 2");
		}
		{
			gint i = 0;
			i = 16;
			{
				gboolean _tmp96_ = FALSE;
				_tmp96_ = TRUE;
				while (TRUE) {
					gint _tmp98_;
					gint _tmp99_;
					ValaCodeContext* _tmp100_;
					gint _tmp101_;
					gchar* _tmp102_;
					gchar* _tmp103_;
					if (!_tmp96_) {
						gint _tmp97_;
						_tmp97_ = i;
						i = _tmp97_ + 2;
					}
					_tmp96_ = FALSE;
					_tmp98_ = i;
					_tmp99_ = glib_minor;
					if (!(_tmp98_ <= _tmp99_)) {
						break;
					}
					_tmp100_ = context;
					_tmp101_ = i;
					_tmp102_ = g_strdup_printf ("GLIB_2_%d", _tmp101_);
					_tmp103_ = _tmp102_;
					vala_code_context_add_define (_tmp100_, _tmp103_);
					_g_free0 (_tmp103_);
				}
			}
		}
		_tmp104_ = context;
		_tmp105_ = valadoc_drivers_tree_builder_add_package (self, _tmp104_, "glib-2.0");
		if (!_tmp105_) {
			vala_report_error (NULL, "glib-2.0 not found in specified Vala API directories");
		}
		_tmp106_ = context;
		_tmp107_ = valadoc_drivers_tree_builder_add_package (self, _tmp106_, "gobject-2.0");
		if (!_tmp107_) {
			vala_report_error (NULL, "gobject-2.0 not found in specified Vala API directories");
		}
	}
	_tmp108_ = context;
	_tmp109_ = settings;
	_tmp110_ = _tmp109_->packages;
	_tmp110__length1 = _tmp109_->packages_length1;
	valadoc_drivers_tree_builder_add_depencies (self, _tmp108_, _tmp110_, _tmp110__length1);
	_tmp111_ = self->priv->reporter;
	_tmp112_ = valadoc_error_reporter_get_errors (_tmp111_);
	_tmp113_ = _tmp112_;
	if (_tmp113_ > 0) {
		result = context;
		return result;
	}
	_tmp114_ = context;
	_tmp115_ = settings;
	_tmp116_ = _tmp115_->source_files;
	_tmp116__length1 = _tmp115_->source_files_length1;
	valadoc_drivers_tree_builder_add_documented_files (self, _tmp114_, _tmp116_, _tmp116__length1);
	_tmp117_ = self->priv->reporter;
	_tmp118_ = valadoc_error_reporter_get_errors (_tmp117_);
	_tmp119_ = _tmp118_;
	if (_tmp119_ > 0) {
		result = context;
		return result;
	}
	_tmp120_ = vala_parser_new ();
	parser = _tmp120_;
	_tmp121_ = parser;
	_tmp122_ = context;
	vala_parser_parse (_tmp121_, _tmp122_);
	_tmp123_ = context;
	_tmp124_ = vala_code_context_get_report (_tmp123_);
	_tmp125_ = _tmp124_;
	_tmp126_ = vala_report_get_errors (_tmp125_);
	if (_tmp126_ > 0) {
		result = context;
		_vala_code_visitor_unref0 (parser);
		return result;
	}
	_tmp127_ = vala_gir_parser_new ();
	gir_parser = _tmp127_;
	_tmp128_ = gir_parser;
	_tmp129_ = context;
	vala_gir_parser_parse (_tmp128_, _tmp129_);
	_tmp130_ = context;
	_tmp131_ = vala_code_context_get_report (_tmp130_);
	_tmp132_ = _tmp131_;
	_tmp133_ = vala_report_get_errors (_tmp132_);
	if (_tmp133_ > 0) {
		result = context;
		_vala_code_visitor_unref0 (gir_parser);
		_vala_code_visitor_unref0 (parser);
		return result;
	}
	_tmp134_ = context;
	vala_code_context_check (_tmp134_);
	_tmp135_ = context;
	_tmp136_ = vala_code_context_get_report (_tmp135_);
	_tmp137_ = _tmp136_;
	_tmp138_ = vala_report_get_errors (_tmp137_);
	if (_tmp138_ > 0) {
		result = context;
		_vala_code_visitor_unref0 (gir_parser);
		_vala_code_visitor_unref0 (parser);
		return result;
	}
	result = context;
	_vala_code_visitor_unref0 (gir_parser);
	_vala_code_visitor_unref0 (parser);
	return result;
}


static void valadoc_drivers_tree_builder_process_children (ValadocDriversTreeBuilder* self, ValadocApiNode* node, ValaCodeNode* element) {
	ValadocApiNode* old_node = NULL;
	ValadocApiNode* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiNode* _tmp2_;
	ValadocApiNode* _tmp3_;
	ValaCodeNode* _tmp4_;
	ValadocApiNode* _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (node != NULL);
	g_return_if_fail (element != NULL);
	_tmp0_ = self->priv->current_node;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	old_node = _tmp1_;
	_tmp2_ = node;
	_tmp3_ = _g_object_ref0 (_tmp2_);
	_g_object_unref0 (self->priv->current_node);
	self->priv->current_node = _tmp3_;
	_tmp4_ = element;
	vala_code_node_accept_children (_tmp4_, (ValaCodeVisitor*) self);
	_tmp5_ = _g_object_ref0 (old_node);
	_g_object_unref0 (self->priv->current_node);
	self->priv->current_node = _tmp5_;
	_g_object_unref0 (old_node);
}


static gpointer _vala_source_file_ref0 (gpointer self) {
	return self ? vala_source_file_ref (self) : NULL;
}


static ValadocApiNode* valadoc_drivers_tree_builder_get_parent_node_for (ValadocDriversTreeBuilder* self, ValaSymbol* element) {
	ValadocApiNode* result = NULL;
	ValadocApiNode* _tmp0_;
	ValaSourceFile* vala_source_file = NULL;
	ValaSymbol* _tmp3_;
	ValaSourceReference* _tmp4_;
	ValaSourceReference* _tmp5_;
	ValaSourceFile* _tmp6_;
	ValaSourceFile* _tmp7_;
	ValaSourceFile* _tmp8_;
	ValadocApiPackage* package = NULL;
	ValaSourceFile* _tmp9_;
	ValadocApiPackage* _tmp10_;
	ValadocApiSourceFile* source_file = NULL;
	ValaSymbol* _tmp11_;
	ValadocApiSourceFile* _tmp12_;
	ValadocApiPackage* _tmp13_;
	ValaSymbol* _tmp14_;
	ValadocApiSourceFile* _tmp15_;
	ValadocApiNamespace* _tmp16_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	_tmp0_ = self->priv->current_node;
	if (_tmp0_ != NULL) {
		ValadocApiNode* _tmp1_;
		ValadocApiNode* _tmp2_;
		_tmp1_ = self->priv->current_node;
		_tmp2_ = _g_object_ref0 (_tmp1_);
		result = _tmp2_;
		return result;
	}
	_tmp3_ = element;
	_tmp4_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp3_);
	_tmp5_ = _tmp4_;
	_tmp6_ = vala_source_reference_get_file (_tmp5_);
	_tmp7_ = _tmp6_;
	_tmp8_ = _vala_source_file_ref0 (_tmp7_);
	vala_source_file = _tmp8_;
	_tmp9_ = vala_source_file;
	_tmp10_ = valadoc_drivers_tree_builder_find_package_for_file (self, _tmp9_);
	package = _tmp10_;
	_tmp11_ = element;
	_tmp12_ = valadoc_drivers_tree_builder_get_source_file (self, _tmp11_);
	source_file = _tmp12_;
	_tmp13_ = package;
	_tmp14_ = element;
	_tmp15_ = source_file;
	_tmp16_ = valadoc_drivers_tree_builder_get_namespace (self, _tmp13_, _tmp14_, _tmp15_);
	result = (ValadocApiNode*) _tmp16_;
	_g_object_unref0 (source_file);
	_g_object_unref0 (package);
	_vala_source_file_unref0 (vala_source_file);
	return result;
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_namespace (ValaCodeVisitor* base, ValaNamespace* element) {
	ValadocDriversTreeBuilder * self;
	ValaNamespace* _tmp0_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	vala_code_node_accept_children ((ValaCodeNode*) _tmp0_, (ValaCodeVisitor*) self);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_class (ValaCodeVisitor* base, ValaClass* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaClass* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaClass* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaClass* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	gboolean _tmp8_ = FALSE;
	ValaClass* _tmp9_;
	ValaClass* _tmp10_;
	ValaClass* _tmp11_;
	gboolean is_basic_type = FALSE;
	ValadocApiClass* node = NULL;
	ValadocApiNode* _tmp15_;
	ValadocApiSourceFile* _tmp16_;
	ValaClass* _tmp17_;
	const gchar* _tmp18_;
	const gchar* _tmp19_;
	ValaClass* _tmp20_;
	ValadocApiSymbolAccessibility _tmp21_;
	ValadocApiSourceComment* _tmp22_;
	ValaClass* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	ValaClass* _tmp26_;
	gchar* _tmp27_;
	gchar* _tmp28_;
	ValaClass* _tmp29_;
	gchar* _tmp30_;
	gchar* _tmp31_;
	ValaClass* _tmp32_;
	gchar* _tmp33_;
	gchar* _tmp34_;
	ValaClass* _tmp35_;
	gchar* _tmp36_;
	gchar* _tmp37_;
	ValaClass* _tmp38_;
	gchar* _tmp39_;
	gchar* _tmp40_;
	ValaClass* _tmp41_;
	gchar* _tmp42_;
	gchar* _tmp43_;
	ValaClass* _tmp44_;
	gchar* _tmp45_;
	gchar* _tmp46_;
	ValaClass* _tmp47_;
	gchar* _tmp48_;
	gchar* _tmp49_;
	ValaClass* _tmp50_;
	gchar* _tmp51_;
	gchar* _tmp52_;
	ValaClass* _tmp53_;
	gchar* _tmp54_;
	gchar* _tmp55_;
	ValaClass* _tmp56_;
	gchar* _tmp57_;
	gchar* _tmp58_;
	ValaClass* _tmp59_;
	gchar* _tmp60_;
	gchar* _tmp61_;
	ValaClass* _tmp62_;
	gchar* _tmp63_;
	gchar* _tmp64_;
	ValaClass* _tmp65_;
	gchar* _tmp66_;
	gchar* _tmp67_;
	ValaClass* _tmp68_;
	gchar* _tmp69_;
	gchar* _tmp70_;
	ValaClass* _tmp71_;
	gchar* _tmp72_;
	gchar* _tmp73_;
	ValaClass* _tmp74_;
	gchar* _tmp75_;
	gchar* _tmp76_;
	ValaClass* _tmp77_;
	gchar* _tmp78_;
	gchar* _tmp79_;
	ValaClass* _tmp80_;
	gboolean _tmp81_;
	ValaClass* _tmp82_;
	gboolean _tmp83_;
	gboolean _tmp84_;
	gboolean _tmp85_;
	ValaClass* _tmp86_;
	ValadocApiClass* _tmp87_;
	ValadocApiClass* _tmp88_;
	ValaHashMap* _tmp89_;
	ValaClass* _tmp90_;
	ValadocApiClass* _tmp91_;
	ValadocApiNode* _tmp92_;
	ValadocApiClass* _tmp93_;
	ValadocApiClass* _tmp119_;
	ValaClass* _tmp120_;
	GList* _tmp121_;
	ValadocApiClass* _tmp122_;
	ValaClass* _tmp123_;
	gboolean _tmp124_ = FALSE;
	ValadocApiClass* _tmp125_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp9_ = element;
	_tmp10_ = vala_class_get_base_class (_tmp9_);
	_tmp11_ = _tmp10_;
	if (_tmp11_ == NULL) {
		ValaClass* _tmp12_;
		const gchar* _tmp13_;
		const gchar* _tmp14_;
		_tmp12_ = element;
		_tmp13_ = vala_symbol_get_name ((ValaSymbol*) _tmp12_);
		_tmp14_ = _tmp13_;
		_tmp8_ = g_strcmp0 (_tmp14_, "string") == 0;
	} else {
		_tmp8_ = FALSE;
	}
	is_basic_type = _tmp8_;
	_tmp15_ = parent;
	_tmp16_ = file;
	_tmp17_ = element;
	_tmp18_ = vala_symbol_get_name ((ValaSymbol*) _tmp17_);
	_tmp19_ = _tmp18_;
	_tmp20_ = element;
	_tmp21_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp20_);
	_tmp22_ = comment;
	_tmp23_ = element;
	_tmp24_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp23_);
	_tmp25_ = _tmp24_;
	_tmp26_ = element;
	_tmp27_ = valadoc_drivers_tree_builder_get_private_cname (self, _tmp26_);
	_tmp28_ = _tmp27_;
	_tmp29_ = element;
	_tmp30_ = valadoc_drivers_tree_builder_get_class_macro_name (self, _tmp29_);
	_tmp31_ = _tmp30_;
	_tmp32_ = element;
	_tmp33_ = valadoc_drivers_tree_builder_get_type_macro_name (self, (ValaTypeSymbol*) _tmp32_);
	_tmp34_ = _tmp33_;
	_tmp35_ = element;
	_tmp36_ = valadoc_drivers_tree_builder_get_is_type_macro_name (self, (ValaTypeSymbol*) _tmp35_);
	_tmp37_ = _tmp36_;
	_tmp38_ = element;
	_tmp39_ = valadoc_drivers_tree_builder_get_type_cast_macro_name (self, (ValaTypeSymbol*) _tmp38_);
	_tmp40_ = _tmp39_;
	_tmp41_ = element;
	_tmp42_ = valadoc_drivers_tree_builder_get_type_function_name (self, (ValaTypeSymbol*) _tmp41_);
	_tmp43_ = _tmp42_;
	_tmp44_ = element;
	_tmp45_ = valadoc_drivers_tree_builder_get_class_type_macro_name (self, _tmp44_);
	_tmp46_ = _tmp45_;
	_tmp47_ = element;
	_tmp48_ = valadoc_drivers_tree_builder_get_is_class_type_macro_name (self, (ValaTypeSymbol*) _tmp47_);
	_tmp49_ = _tmp48_;
	_tmp50_ = element;
	_tmp51_ = vala_gd_bus_module_get_dbus_name ((ValaTypeSymbol*) _tmp50_);
	_tmp52_ = _tmp51_;
	_tmp53_ = element;
	_tmp54_ = valadoc_drivers_tree_builder_get_ccode_type_id (self, (ValaCodeNode*) _tmp53_);
	_tmp55_ = _tmp54_;
	_tmp56_ = element;
	_tmp57_ = valadoc_drivers_tree_builder_get_param_spec_function (self, (ValaCodeNode*) _tmp56_);
	_tmp58_ = _tmp57_;
	_tmp59_ = element;
	_tmp60_ = valadoc_drivers_tree_builder_get_ref_function (self, _tmp59_);
	_tmp61_ = _tmp60_;
	_tmp62_ = element;
	_tmp63_ = valadoc_drivers_tree_builder_get_unref_function (self, _tmp62_);
	_tmp64_ = _tmp63_;
	_tmp65_ = element;
	_tmp66_ = valadoc_drivers_tree_builder_get_free_function_name (self, _tmp65_);
	_tmp67_ = _tmp66_;
	_tmp68_ = element;
	_tmp69_ = valadoc_drivers_tree_builder_get_finalize_function_name (self, _tmp68_);
	_tmp70_ = _tmp69_;
	_tmp71_ = element;
	_tmp72_ = valadoc_drivers_tree_builder_get_take_value_function (self, _tmp71_);
	_tmp73_ = _tmp72_;
	_tmp74_ = element;
	_tmp75_ = valadoc_drivers_tree_builder_get_get_value_function (self, _tmp74_);
	_tmp76_ = _tmp75_;
	_tmp77_ = element;
	_tmp78_ = valadoc_drivers_tree_builder_get_set_value_function (self, _tmp77_);
	_tmp79_ = _tmp78_;
	_tmp80_ = element;
	_tmp81_ = vala_class_is_fundamental (_tmp80_);
	_tmp82_ = element;
	_tmp83_ = vala_class_get_is_abstract (_tmp82_);
	_tmp84_ = _tmp83_;
	_tmp85_ = is_basic_type;
	_tmp86_ = element;
	_tmp87_ = valadoc_api_class_new (_tmp15_, _tmp16_, _tmp19_, _tmp21_, _tmp22_, _tmp25_, _tmp28_, _tmp31_, _tmp34_, _tmp37_, _tmp40_, _tmp43_, _tmp46_, _tmp49_, _tmp52_, _tmp55_, _tmp58_, _tmp61_, _tmp64_, _tmp67_, _tmp70_, _tmp73_, _tmp76_, _tmp79_, _tmp81_, _tmp84_, _tmp85_, _tmp86_);
	_tmp88_ = _tmp87_;
	_g_free0 (_tmp79_);
	_g_free0 (_tmp76_);
	_g_free0 (_tmp73_);
	_g_free0 (_tmp70_);
	_g_free0 (_tmp67_);
	_g_free0 (_tmp64_);
	_g_free0 (_tmp61_);
	_g_free0 (_tmp58_);
	_g_free0 (_tmp55_);
	_g_free0 (_tmp52_);
	_g_free0 (_tmp49_);
	_g_free0 (_tmp46_);
	_g_free0 (_tmp43_);
	_g_free0 (_tmp40_);
	_g_free0 (_tmp37_);
	_g_free0 (_tmp34_);
	_g_free0 (_tmp31_);
	_g_free0 (_tmp28_);
	_g_free0 (_tmp25_);
	node = _tmp88_;
	_tmp89_ = self->priv->symbol_map;
	_tmp90_ = element;
	_tmp91_ = node;
	vala_map_set ((ValaMap*) _tmp89_, (ValaSymbol*) _tmp90_, (ValadocApiSymbol*) _tmp91_);
	_tmp92_ = parent;
	_tmp93_ = node;
	valadoc_api_node_add_child (_tmp92_, (ValadocApiSymbol*) _tmp93_);
	{
		ValaList* _vala_type_ref_list = NULL;
		ValaClass* _tmp94_;
		ValaList* _tmp95_;
		gint _vala_type_ref_size = 0;
		ValaList* _tmp96_;
		gint _tmp97_;
		gint _tmp98_;
		gint _vala_type_ref_index = 0;
		_tmp94_ = element;
		_tmp95_ = vala_class_get_base_types (_tmp94_);
		_vala_type_ref_list = _tmp95_;
		_tmp96_ = _vala_type_ref_list;
		_tmp97_ = vala_collection_get_size ((ValaCollection*) _tmp96_);
		_tmp98_ = _tmp97_;
		_vala_type_ref_size = _tmp98_;
		_vala_type_ref_index = -1;
		while (TRUE) {
			gint _tmp99_;
			gint _tmp100_;
			gint _tmp101_;
			ValaDataType* vala_type_ref = NULL;
			ValaList* _tmp102_;
			gint _tmp103_;
			gpointer _tmp104_;
			ValadocApiTypeReference* type_ref = NULL;
			ValaDataType* _tmp105_;
			ValadocApiClass* _tmp106_;
			ValadocApiClass* _tmp107_;
			ValadocApiTypeReference* _tmp108_;
			ValaDataType* _tmp109_;
			ValaTypeSymbol* _tmp110_;
			ValaTypeSymbol* _tmp111_;
			_tmp99_ = _vala_type_ref_index;
			_vala_type_ref_index = _tmp99_ + 1;
			_tmp100_ = _vala_type_ref_index;
			_tmp101_ = _vala_type_ref_size;
			if (!(_tmp100_ < _tmp101_)) {
				break;
			}
			_tmp102_ = _vala_type_ref_list;
			_tmp103_ = _vala_type_ref_index;
			_tmp104_ = vala_list_get (_tmp102_, _tmp103_);
			vala_type_ref = (ValaDataType*) _tmp104_;
			_tmp105_ = vala_type_ref;
			_tmp106_ = node;
			_tmp107_ = node;
			_tmp108_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp105_, (ValadocApiItem*) _tmp106_, (ValadocApiNode*) _tmp107_);
			type_ref = _tmp108_;
			_tmp109_ = vala_type_ref;
			_tmp110_ = vala_data_type_get_data_type (_tmp109_);
			_tmp111_ = _tmp110_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp111_, VALA_TYPE_INTERFACE)) {
				ValadocApiClass* _tmp112_;
				ValadocApiTypeReference* _tmp113_;
				_tmp112_ = node;
				_tmp113_ = type_ref;
				valadoc_api_class_add_interface (_tmp112_, _tmp113_);
			} else {
				ValaDataType* _tmp114_;
				ValaTypeSymbol* _tmp115_;
				ValaTypeSymbol* _tmp116_;
				_tmp114_ = vala_type_ref;
				_tmp115_ = vala_data_type_get_data_type (_tmp114_);
				_tmp116_ = _tmp115_;
				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp116_, VALA_TYPE_CLASS)) {
					ValadocApiClass* _tmp117_;
					ValadocApiTypeReference* _tmp118_;
					_tmp117_ = node;
					_tmp118_ = type_ref;
					valadoc_api_class_set_base_type (_tmp117_, _tmp118_);
				}
			}
			_g_object_unref0 (type_ref);
			_vala_code_node_unref0 (vala_type_ref);
		}
		_vala_iterable_unref0 (_vala_type_ref_list);
	}
	_tmp119_ = node;
	_tmp120_ = element;
	_tmp121_ = ((ValaCodeNode*) _tmp120_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) _tmp119_, _tmp121_);
	_tmp122_ = node;
	_tmp123_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) _tmp122_, (ValaCodeNode*) _tmp123_);
	_tmp125_ = self->priv->glib_error;
	if (_tmp125_ == NULL) {
		ValadocApiClass* _tmp126_;
		gchar* _tmp127_;
		gchar* _tmp128_;
		_tmp126_ = node;
		_tmp127_ = valadoc_api_node_get_full_name ((ValadocApiNode*) _tmp126_);
		_tmp128_ = _tmp127_;
		_tmp124_ = g_strcmp0 (_tmp128_, "GLib.Error") == 0;
		_g_free0 (_tmp128_);
	} else {
		_tmp124_ = FALSE;
	}
	if (_tmp124_) {
		ValadocApiClass* _tmp129_;
		ValadocApiClass* _tmp130_;
		_tmp129_ = node;
		_tmp130_ = _g_object_ref0 (_tmp129_);
		_g_object_unref0 (self->priv->glib_error);
		self->priv->glib_error = _tmp130_;
	}
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_interface (ValaCodeVisitor* base, ValaInterface* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaInterface* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaInterface* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaInterface* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiInterface* node = NULL;
	ValadocApiNode* _tmp8_;
	ValadocApiSourceFile* _tmp9_;
	ValaInterface* _tmp10_;
	const gchar* _tmp11_;
	const gchar* _tmp12_;
	ValaInterface* _tmp13_;
	ValadocApiSymbolAccessibility _tmp14_;
	ValadocApiSourceComment* _tmp15_;
	ValaInterface* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	ValaInterface* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	ValaInterface* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	ValaInterface* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	ValaInterface* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	ValaInterface* _tmp31_;
	gchar* _tmp32_;
	gchar* _tmp33_;
	ValaInterface* _tmp34_;
	gchar* _tmp35_;
	gchar* _tmp36_;
	ValaInterface* _tmp37_;
	ValadocApiInterface* _tmp38_;
	ValadocApiInterface* _tmp39_;
	ValaHashMap* _tmp40_;
	ValaInterface* _tmp41_;
	ValadocApiInterface* _tmp42_;
	ValadocApiNode* _tmp43_;
	ValadocApiInterface* _tmp44_;
	ValadocApiInterface* _tmp67_;
	ValaInterface* _tmp68_;
	GList* _tmp69_;
	ValadocApiInterface* _tmp70_;
	ValaInterface* _tmp71_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = parent;
	_tmp9_ = file;
	_tmp10_ = element;
	_tmp11_ = vala_symbol_get_name ((ValaSymbol*) _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = element;
	_tmp14_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp13_);
	_tmp15_ = comment;
	_tmp16_ = element;
	_tmp17_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = valadoc_drivers_tree_builder_get_type_macro_name (self, (ValaTypeSymbol*) _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = element;
	_tmp23_ = valadoc_drivers_tree_builder_get_is_type_macro_name (self, (ValaTypeSymbol*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = element;
	_tmp26_ = valadoc_drivers_tree_builder_get_type_cast_macro_name (self, (ValaTypeSymbol*) _tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = element;
	_tmp29_ = valadoc_drivers_tree_builder_get_type_function_name (self, (ValaTypeSymbol*) _tmp28_);
	_tmp30_ = _tmp29_;
	_tmp31_ = element;
	_tmp32_ = valadoc_drivers_tree_builder_get_interface_macro_name (self, _tmp31_);
	_tmp33_ = _tmp32_;
	_tmp34_ = element;
	_tmp35_ = vala_gd_bus_module_get_dbus_name ((ValaTypeSymbol*) _tmp34_);
	_tmp36_ = _tmp35_;
	_tmp37_ = element;
	_tmp38_ = valadoc_api_interface_new (_tmp8_, _tmp9_, _tmp12_, _tmp14_, _tmp15_, _tmp18_, _tmp21_, _tmp24_, _tmp27_, _tmp30_, _tmp33_, _tmp36_, _tmp37_);
	_tmp39_ = _tmp38_;
	_g_free0 (_tmp36_);
	_g_free0 (_tmp33_);
	_g_free0 (_tmp30_);
	_g_free0 (_tmp27_);
	_g_free0 (_tmp24_);
	_g_free0 (_tmp21_);
	_g_free0 (_tmp18_);
	node = _tmp39_;
	_tmp40_ = self->priv->symbol_map;
	_tmp41_ = element;
	_tmp42_ = node;
	vala_map_set ((ValaMap*) _tmp40_, (ValaSymbol*) _tmp41_, (ValadocApiSymbol*) _tmp42_);
	_tmp43_ = parent;
	_tmp44_ = node;
	valadoc_api_node_add_child (_tmp43_, (ValadocApiSymbol*) _tmp44_);
	{
		ValaList* _vala_type_ref_list = NULL;
		ValaInterface* _tmp45_;
		ValaList* _tmp46_;
		gint _vala_type_ref_size = 0;
		ValaList* _tmp47_;
		gint _tmp48_;
		gint _tmp49_;
		gint _vala_type_ref_index = 0;
		_tmp45_ = element;
		_tmp46_ = vala_interface_get_prerequisites (_tmp45_);
		_vala_type_ref_list = _tmp46_;
		_tmp47_ = _vala_type_ref_list;
		_tmp48_ = vala_collection_get_size ((ValaCollection*) _tmp47_);
		_tmp49_ = _tmp48_;
		_vala_type_ref_size = _tmp49_;
		_vala_type_ref_index = -1;
		while (TRUE) {
			gint _tmp50_;
			gint _tmp51_;
			gint _tmp52_;
			ValaDataType* vala_type_ref = NULL;
			ValaList* _tmp53_;
			gint _tmp54_;
			gpointer _tmp55_;
			ValadocApiTypeReference* type_ref = NULL;
			ValaDataType* _tmp56_;
			ValadocApiInterface* _tmp57_;
			ValadocApiInterface* _tmp58_;
			ValadocApiTypeReference* _tmp59_;
			ValaDataType* _tmp60_;
			ValaTypeSymbol* _tmp61_;
			ValaTypeSymbol* _tmp62_;
			_tmp50_ = _vala_type_ref_index;
			_vala_type_ref_index = _tmp50_ + 1;
			_tmp51_ = _vala_type_ref_index;
			_tmp52_ = _vala_type_ref_size;
			if (!(_tmp51_ < _tmp52_)) {
				break;
			}
			_tmp53_ = _vala_type_ref_list;
			_tmp54_ = _vala_type_ref_index;
			_tmp55_ = vala_list_get (_tmp53_, _tmp54_);
			vala_type_ref = (ValaDataType*) _tmp55_;
			_tmp56_ = vala_type_ref;
			_tmp57_ = node;
			_tmp58_ = node;
			_tmp59_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp56_, (ValadocApiItem*) _tmp57_, (ValadocApiNode*) _tmp58_);
			type_ref = _tmp59_;
			_tmp60_ = vala_type_ref;
			_tmp61_ = vala_data_type_get_data_type (_tmp60_);
			_tmp62_ = _tmp61_;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp62_, VALA_TYPE_INTERFACE)) {
				ValadocApiInterface* _tmp63_;
				ValadocApiTypeReference* _tmp64_;
				_tmp63_ = node;
				_tmp64_ = type_ref;
				valadoc_api_interface_add_interface (_tmp63_, _tmp64_);
			} else {
				ValadocApiInterface* _tmp65_;
				ValadocApiTypeReference* _tmp66_;
				_tmp65_ = node;
				_tmp66_ = type_ref;
				valadoc_api_interface_set_base_type (_tmp65_, _tmp66_);
			}
			_g_object_unref0 (type_ref);
			_vala_code_node_unref0 (vala_type_ref);
		}
		_vala_iterable_unref0 (_vala_type_ref_list);
	}
	_tmp67_ = node;
	_tmp68_ = element;
	_tmp69_ = ((ValaCodeNode*) _tmp68_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) _tmp67_, _tmp69_);
	_tmp70_ = node;
	_tmp71_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) _tmp70_, (ValaCodeNode*) _tmp71_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_struct (ValaCodeVisitor* base, ValaStruct* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaStruct* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaStruct* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaStruct* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	gboolean _tmp8_ = FALSE;
	ValaStruct* _tmp9_;
	ValaDataType* _tmp10_;
	ValaDataType* _tmp11_;
	gboolean is_basic_type = FALSE;
	ValadocApiStruct* node = NULL;
	ValadocApiNode* _tmp20_;
	ValadocApiSourceFile* _tmp21_;
	ValaStruct* _tmp22_;
	const gchar* _tmp23_;
	const gchar* _tmp24_;
	ValaStruct* _tmp25_;
	ValadocApiSymbolAccessibility _tmp26_;
	ValadocApiSourceComment* _tmp27_;
	ValaStruct* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	ValaStruct* _tmp31_;
	gchar* _tmp32_;
	gchar* _tmp33_;
	ValaStruct* _tmp34_;
	gchar* _tmp35_;
	gchar* _tmp36_;
	ValaStruct* _tmp37_;
	gchar* _tmp38_;
	gchar* _tmp39_;
	ValaStruct* _tmp40_;
	gchar* _tmp41_;
	gchar* _tmp42_;
	ValaStruct* _tmp43_;
	gchar* _tmp44_;
	gchar* _tmp45_;
	ValaStruct* _tmp46_;
	gchar* _tmp47_;
	gchar* _tmp48_;
	ValaStruct* _tmp49_;
	gchar* _tmp50_;
	gchar* _tmp51_;
	gboolean _tmp52_;
	ValaStruct* _tmp53_;
	ValadocApiStruct* _tmp54_;
	ValadocApiStruct* _tmp55_;
	ValaHashMap* _tmp56_;
	ValaStruct* _tmp57_;
	ValadocApiStruct* _tmp58_;
	ValadocApiNode* _tmp59_;
	ValadocApiStruct* _tmp60_;
	ValaValueType* basetype = NULL;
	ValaStruct* _tmp61_;
	ValaDataType* _tmp62_;
	ValaDataType* _tmp63_;
	ValaValueType* _tmp64_;
	ValaValueType* _tmp65_;
	ValadocApiStruct* _tmp72_;
	ValaStruct* _tmp73_;
	GList* _tmp74_;
	ValadocApiStruct* _tmp75_;
	ValaStruct* _tmp76_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp9_ = element;
	_tmp10_ = vala_struct_get_base_type (_tmp9_);
	_tmp11_ = _tmp10_;
	if (_tmp11_ == NULL) {
		gboolean _tmp12_ = FALSE;
		gboolean _tmp13_ = FALSE;
		ValaStruct* _tmp14_;
		gboolean _tmp15_;
		_tmp14_ = element;
		_tmp15_ = vala_struct_is_boolean_type (_tmp14_);
		if (_tmp15_) {
			_tmp13_ = TRUE;
		} else {
			ValaStruct* _tmp16_;
			gboolean _tmp17_;
			_tmp16_ = element;
			_tmp17_ = vala_struct_is_floating_type (_tmp16_);
			_tmp13_ = _tmp17_;
		}
		if (_tmp13_) {
			_tmp12_ = TRUE;
		} else {
			ValaStruct* _tmp18_;
			gboolean _tmp19_;
			_tmp18_ = element;
			_tmp19_ = vala_struct_is_integer_type (_tmp18_);
			_tmp12_ = _tmp19_;
		}
		_tmp8_ = _tmp12_;
	} else {
		_tmp8_ = FALSE;
	}
	is_basic_type = _tmp8_;
	_tmp20_ = parent;
	_tmp21_ = file;
	_tmp22_ = element;
	_tmp23_ = vala_symbol_get_name ((ValaSymbol*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = element;
	_tmp26_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp25_);
	_tmp27_ = comment;
	_tmp28_ = element;
	_tmp29_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp28_);
	_tmp30_ = _tmp29_;
	_tmp31_ = element;
	_tmp32_ = valadoc_drivers_tree_builder_get_type_macro_name (self, (ValaTypeSymbol*) _tmp31_);
	_tmp33_ = _tmp32_;
	_tmp34_ = element;
	_tmp35_ = valadoc_drivers_tree_builder_get_type_function_name (self, (ValaTypeSymbol*) _tmp34_);
	_tmp36_ = _tmp35_;
	_tmp37_ = element;
	_tmp38_ = valadoc_drivers_tree_builder_get_ccode_type_id (self, (ValaCodeNode*) _tmp37_);
	_tmp39_ = _tmp38_;
	_tmp40_ = element;
	_tmp41_ = valadoc_drivers_tree_builder_get_dup_function (self, (ValaTypeSymbol*) _tmp40_);
	_tmp42_ = _tmp41_;
	_tmp43_ = element;
	_tmp44_ = valadoc_drivers_tree_builder_get_copy_function (self, (ValaTypeSymbol*) _tmp43_);
	_tmp45_ = _tmp44_;
	_tmp46_ = element;
	_tmp47_ = valadoc_drivers_tree_builder_get_destroy_function (self, (ValaTypeSymbol*) _tmp46_);
	_tmp48_ = _tmp47_;
	_tmp49_ = element;
	_tmp50_ = valadoc_drivers_tree_builder_get_free_function (self, (ValaTypeSymbol*) _tmp49_);
	_tmp51_ = _tmp50_;
	_tmp52_ = is_basic_type;
	_tmp53_ = element;
	_tmp54_ = valadoc_api_struct_new (_tmp20_, _tmp21_, _tmp24_, _tmp26_, _tmp27_, _tmp30_, _tmp33_, _tmp36_, _tmp39_, _tmp42_, _tmp45_, _tmp48_, _tmp51_, _tmp52_, _tmp53_);
	_tmp55_ = _tmp54_;
	_g_free0 (_tmp51_);
	_g_free0 (_tmp48_);
	_g_free0 (_tmp45_);
	_g_free0 (_tmp42_);
	_g_free0 (_tmp39_);
	_g_free0 (_tmp36_);
	_g_free0 (_tmp33_);
	_g_free0 (_tmp30_);
	node = _tmp55_;
	_tmp56_ = self->priv->symbol_map;
	_tmp57_ = element;
	_tmp58_ = node;
	vala_map_set ((ValaMap*) _tmp56_, (ValaSymbol*) _tmp57_, (ValadocApiSymbol*) _tmp58_);
	_tmp59_ = parent;
	_tmp60_ = node;
	valadoc_api_node_add_child (_tmp59_, (ValadocApiSymbol*) _tmp60_);
	_tmp61_ = element;
	_tmp62_ = vala_struct_get_base_type (_tmp61_);
	_tmp63_ = _tmp62_;
	_tmp64_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp63_, VALA_TYPE_VALUE_TYPE) ? ((ValaValueType*) _tmp63_) : NULL);
	basetype = _tmp64_;
	_tmp65_ = basetype;
	if (_tmp65_ != NULL) {
		ValadocApiStruct* _tmp66_;
		ValaValueType* _tmp67_;
		ValadocApiStruct* _tmp68_;
		ValadocApiStruct* _tmp69_;
		ValadocApiTypeReference* _tmp70_;
		ValadocApiTypeReference* _tmp71_;
		_tmp66_ = node;
		_tmp67_ = basetype;
		_tmp68_ = node;
		_tmp69_ = node;
		_tmp70_ = valadoc_drivers_tree_builder_create_type_reference (self, (ValaDataType*) _tmp67_, (ValadocApiItem*) _tmp68_, (ValadocApiNode*) _tmp69_);
		_tmp71_ = _tmp70_;
		valadoc_api_struct_set_base_type (_tmp66_, _tmp71_);
		_g_object_unref0 (_tmp71_);
	}
	_tmp72_ = node;
	_tmp73_ = element;
	_tmp74_ = ((ValaCodeNode*) _tmp73_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) _tmp72_, _tmp74_);
	_tmp75_ = node;
	_tmp76_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) _tmp75_, (ValaCodeNode*) _tmp76_);
	_vala_code_node_unref0 (basetype);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_field (ValaCodeVisitor* base, ValaField* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaField* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaField* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaField* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiField* node = NULL;
	ValaField* _tmp8_;
	const gchar* _tmp9_;
	const gchar* _tmp10_;
	ValaField* _tmp11_;
	ValadocApiSymbolAccessibility _tmp12_;
	ValaField* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaField* _tmp16_;
	ValaMemberBinding _tmp17_;
	ValaMemberBinding _tmp18_;
	ValaField* _tmp19_;
	gboolean _tmp20_;
	gboolean _tmp21_;
	ValaField* _tmp22_;
	ValadocApiField* _tmp23_;
	ValadocApiField* _tmp24_;
	ValaField* _tmp25_;
	ValaDataType* _tmp26_;
	ValaDataType* _tmp27_;
	ValadocApiTypeReference* _tmp28_;
	ValadocApiTypeReference* _tmp29_;
	ValaHashMap* _tmp30_;
	ValaField* _tmp31_;
	ValaField* _tmp32_;
	GList* _tmp33_;
	ValaField* _tmp34_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = element;
	_tmp9_ = vala_symbol_get_name ((ValaSymbol*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = element;
	_tmp12_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp11_);
	_tmp13_ = element;
	_tmp14_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = element;
	_tmp17_ = vala_field_get_binding (_tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = vala_field_get_is_volatile (_tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = element;
	_tmp23_ = valadoc_api_field_new (parent, file, _tmp10_, _tmp12_, comment, _tmp15_, _tmp18_ == VALA_MEMBER_BINDING_STATIC, _tmp21_, _tmp22_);
	_tmp24_ = _tmp23_;
	_g_free0 (_tmp15_);
	node = _tmp24_;
	_tmp25_ = element;
	_tmp26_ = vala_variable_get_variable_type ((ValaVariable*) _tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp27_, (ValadocApiItem*) node, (ValadocApiNode*) node);
	_tmp29_ = _tmp28_;
	valadoc_api_field_set_field_type (node, _tmp29_);
	_g_object_unref0 (_tmp29_);
	_tmp30_ = self->priv->symbol_map;
	_tmp31_ = element;
	vala_map_set ((ValaMap*) _tmp30_, (ValaSymbol*) _tmp31_, (ValadocApiSymbol*) node);
	valadoc_api_node_add_child (parent, (ValadocApiSymbol*) node);
	_tmp32_ = element;
	_tmp33_ = ((ValaCodeNode*) _tmp32_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) node, _tmp33_);
	_tmp34_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp34_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_property (ValaCodeVisitor* base, ValaProperty* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaProperty* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaProperty* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaProperty* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiProperty* node = NULL;
	ValadocApiNode* _tmp8_;
	ValadocApiSourceFile* _tmp9_;
	ValaProperty* _tmp10_;
	const gchar* _tmp11_;
	const gchar* _tmp12_;
	ValaProperty* _tmp13_;
	ValadocApiSymbolAccessibility _tmp14_;
	ValadocApiSourceComment* _tmp15_;
	ValaProperty* _tmp16_;
	const gchar* _tmp17_;
	const gchar* _tmp18_;
	ValaProperty* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	ValaProperty* _tmp22_;
	gboolean _tmp23_;
	ValaProperty* _tmp24_;
	ValadocApiPropertyBindingType _tmp25_;
	ValaProperty* _tmp26_;
	ValadocApiProperty* _tmp27_;
	ValadocApiProperty* _tmp28_;
	ValadocApiProperty* _tmp29_;
	ValaProperty* _tmp30_;
	ValaDataType* _tmp31_;
	ValaDataType* _tmp32_;
	ValadocApiProperty* _tmp33_;
	ValadocApiProperty* _tmp34_;
	ValadocApiTypeReference* _tmp35_;
	ValadocApiTypeReference* _tmp36_;
	ValaHashMap* _tmp37_;
	ValaProperty* _tmp38_;
	ValadocApiProperty* _tmp39_;
	ValadocApiNode* _tmp40_;
	ValadocApiProperty* _tmp41_;
	ValaProperty* _tmp42_;
	ValaPropertyAccessor* _tmp43_;
	ValaPropertyAccessor* _tmp44_;
	ValaProperty* _tmp67_;
	ValaPropertyAccessor* _tmp68_;
	ValaPropertyAccessor* _tmp69_;
	ValadocApiProperty* _tmp92_;
	ValaProperty* _tmp93_;
	GList* _tmp94_;
	ValadocApiProperty* _tmp95_;
	ValaProperty* _tmp96_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = parent;
	_tmp9_ = file;
	_tmp10_ = element;
	_tmp11_ = vala_symbol_get_name ((ValaSymbol*) _tmp10_);
	_tmp12_ = _tmp11_;
	_tmp13_ = element;
	_tmp14_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp13_);
	_tmp15_ = comment;
	_tmp16_ = element;
	_tmp17_ = vala_property_get_nick (_tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = vala_gd_bus_module_get_dbus_name_for_member ((ValaSymbol*) _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = element;
	_tmp23_ = vala_gd_bus_module_is_dbus_visible ((ValaCodeNode*) _tmp22_);
	_tmp24_ = element;
	_tmp25_ = valadoc_drivers_tree_builder_get_property_binding_type (self, _tmp24_);
	_tmp26_ = element;
	_tmp27_ = valadoc_api_property_new (_tmp8_, _tmp9_, _tmp12_, _tmp14_, _tmp15_, _tmp18_, _tmp21_, _tmp23_, _tmp25_, _tmp26_);
	_tmp28_ = _tmp27_;
	_g_free0 (_tmp21_);
	node = _tmp28_;
	_tmp29_ = node;
	_tmp30_ = element;
	_tmp31_ = vala_property_get_property_type (_tmp30_);
	_tmp32_ = _tmp31_;
	_tmp33_ = node;
	_tmp34_ = node;
	_tmp35_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp32_, (ValadocApiItem*) _tmp33_, (ValadocApiNode*) _tmp34_);
	_tmp36_ = _tmp35_;
	valadoc_api_property_set_property_type (_tmp29_, _tmp36_);
	_g_object_unref0 (_tmp36_);
	_tmp37_ = self->priv->symbol_map;
	_tmp38_ = element;
	_tmp39_ = node;
	vala_map_set ((ValaMap*) _tmp37_, (ValaSymbol*) _tmp38_, (ValadocApiSymbol*) _tmp39_);
	_tmp40_ = parent;
	_tmp41_ = node;
	valadoc_api_node_add_child (_tmp40_, (ValadocApiSymbol*) _tmp41_);
	_tmp42_ = element;
	_tmp43_ = vala_property_get_get_accessor (_tmp42_);
	_tmp44_ = _tmp43_;
	if (_tmp44_ != NULL) {
		ValaPropertyAccessor* accessor = NULL;
		ValaProperty* _tmp45_;
		ValaPropertyAccessor* _tmp46_;
		ValaPropertyAccessor* _tmp47_;
		ValaPropertyAccessor* _tmp48_;
		ValadocApiProperty* _tmp49_;
		ValadocApiProperty* _tmp50_;
		ValadocApiSourceFile* _tmp51_;
		ValaProperty* _tmp52_;
		const gchar* _tmp53_;
		const gchar* _tmp54_;
		ValaPropertyAccessor* _tmp55_;
		ValadocApiSymbolAccessibility _tmp56_;
		ValaPropertyAccessor* _tmp57_;
		gchar* _tmp58_;
		gchar* _tmp59_;
		ValaPropertyAccessor* _tmp60_;
		ValadocApiPropertyAccessorType _tmp61_;
		ValaPropertyAccessor* _tmp62_;
		ValadocApiOwnership _tmp63_;
		ValaPropertyAccessor* _tmp64_;
		ValadocApiPropertyAccessor* _tmp65_;
		ValadocApiPropertyAccessor* _tmp66_;
		_tmp45_ = element;
		_tmp46_ = vala_property_get_get_accessor (_tmp45_);
		_tmp47_ = _tmp46_;
		_tmp48_ = _vala_code_node_ref0 (_tmp47_);
		accessor = _tmp48_;
		_tmp49_ = node;
		_tmp50_ = node;
		_tmp51_ = file;
		_tmp52_ = element;
		_tmp53_ = vala_symbol_get_name ((ValaSymbol*) _tmp52_);
		_tmp54_ = _tmp53_;
		_tmp55_ = accessor;
		_tmp56_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp55_);
		_tmp57_ = accessor;
		_tmp58_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp57_);
		_tmp59_ = _tmp58_;
		_tmp60_ = accessor;
		_tmp61_ = valadoc_drivers_tree_builder_get_property_accessor_type (self, _tmp60_);
		_tmp62_ = accessor;
		_tmp63_ = valadoc_drivers_tree_builder_get_property_ownership (self, _tmp62_);
		_tmp64_ = accessor;
		_tmp65_ = valadoc_api_property_accessor_new (_tmp50_, _tmp51_, _tmp54_, _tmp56_, _tmp59_, _tmp61_, _tmp63_, _tmp64_);
		_tmp66_ = _tmp65_;
		valadoc_api_property_set_getter (_tmp49_, _tmp66_);
		_g_object_unref0 (_tmp66_);
		_g_free0 (_tmp59_);
		_vala_code_node_unref0 (accessor);
	}
	_tmp67_ = element;
	_tmp68_ = vala_property_get_set_accessor (_tmp67_);
	_tmp69_ = _tmp68_;
	if (_tmp69_ != NULL) {
		ValaPropertyAccessor* accessor = NULL;
		ValaProperty* _tmp70_;
		ValaPropertyAccessor* _tmp71_;
		ValaPropertyAccessor* _tmp72_;
		ValaPropertyAccessor* _tmp73_;
		ValadocApiProperty* _tmp74_;
		ValadocApiProperty* _tmp75_;
		ValadocApiSourceFile* _tmp76_;
		ValaProperty* _tmp77_;
		const gchar* _tmp78_;
		const gchar* _tmp79_;
		ValaPropertyAccessor* _tmp80_;
		ValadocApiSymbolAccessibility _tmp81_;
		ValaPropertyAccessor* _tmp82_;
		gchar* _tmp83_;
		gchar* _tmp84_;
		ValaPropertyAccessor* _tmp85_;
		ValadocApiPropertyAccessorType _tmp86_;
		ValaPropertyAccessor* _tmp87_;
		ValadocApiOwnership _tmp88_;
		ValaPropertyAccessor* _tmp89_;
		ValadocApiPropertyAccessor* _tmp90_;
		ValadocApiPropertyAccessor* _tmp91_;
		_tmp70_ = element;
		_tmp71_ = vala_property_get_set_accessor (_tmp70_);
		_tmp72_ = _tmp71_;
		_tmp73_ = _vala_code_node_ref0 (_tmp72_);
		accessor = _tmp73_;
		_tmp74_ = node;
		_tmp75_ = node;
		_tmp76_ = file;
		_tmp77_ = element;
		_tmp78_ = vala_symbol_get_name ((ValaSymbol*) _tmp77_);
		_tmp79_ = _tmp78_;
		_tmp80_ = accessor;
		_tmp81_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp80_);
		_tmp82_ = accessor;
		_tmp83_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp82_);
		_tmp84_ = _tmp83_;
		_tmp85_ = accessor;
		_tmp86_ = valadoc_drivers_tree_builder_get_property_accessor_type (self, _tmp85_);
		_tmp87_ = accessor;
		_tmp88_ = valadoc_drivers_tree_builder_get_property_ownership (self, _tmp87_);
		_tmp89_ = accessor;
		_tmp90_ = valadoc_api_property_accessor_new (_tmp75_, _tmp76_, _tmp79_, _tmp81_, _tmp84_, _tmp86_, _tmp88_, _tmp89_);
		_tmp91_ = _tmp90_;
		valadoc_api_property_set_setter (_tmp74_, _tmp91_);
		_g_object_unref0 (_tmp91_);
		_g_free0 (_tmp84_);
		_vala_code_node_unref0 (accessor);
	}
	_tmp92_ = node;
	_tmp93_ = element;
	_tmp94_ = ((ValaCodeNode*) _tmp93_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) _tmp92_, _tmp94_);
	_tmp95_ = node;
	_tmp96_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) _tmp95_, (ValaCodeNode*) _tmp96_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_creation_method (ValaCodeVisitor* base, ValaCreationMethod* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaCreationMethod* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaCreationMethod* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaCreationMethod* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	gchar* _tmp8_ = NULL;
	ValaCreationMethod* _tmp9_;
	gboolean _tmp10_;
	gboolean _tmp11_;
	ValadocApiMethod* node = NULL;
	ValadocApiNode* _tmp14_;
	ValadocApiSourceFile* _tmp15_;
	ValaCreationMethod* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	ValaCreationMethod* _tmp19_;
	ValadocApiSymbolAccessibility _tmp20_;
	ValadocApiSourceComment* _tmp21_;
	ValaCreationMethod* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	ValaCreationMethod* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	ValaCreationMethod* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	ValaCreationMethod* _tmp31_;
	ValadocMethodBindingType _tmp32_;
	ValaCreationMethod* _tmp33_;
	gboolean _tmp34_;
	gboolean _tmp35_;
	ValaCreationMethod* _tmp36_;
	gboolean _tmp37_;
	ValaCreationMethod* _tmp38_;
	ValaCreationMethod* _tmp39_;
	ValadocApiMethod* _tmp40_;
	ValadocApiMethod* _tmp41_;
	ValaCreationMethod* _tmp42_;
	ValaDataType* _tmp43_;
	ValaDataType* _tmp44_;
	ValadocApiTypeReference* _tmp45_;
	ValadocApiTypeReference* _tmp46_;
	ValaHashMap* _tmp47_;
	ValaCreationMethod* _tmp48_;
	ValadocApiNode* _tmp49_;
	ValaCreationMethod* _tmp50_;
	GList* _tmp51_;
	ValaCreationMethod* _tmp52_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp9_ = element;
	_tmp10_ = vala_method_get_coroutine ((ValaMethod*) _tmp9_);
	_tmp11_ = _tmp10_;
	if (_tmp11_) {
		ValaCreationMethod* _tmp12_;
		gchar* _tmp13_;
		_tmp12_ = element;
		_tmp13_ = valadoc_drivers_tree_builder_get_finish_name (self, (ValaMethod*) _tmp12_);
		_g_free0 (_tmp8_);
		_tmp8_ = _tmp13_;
	} else {
		_g_free0 (_tmp8_);
		_tmp8_ = NULL;
	}
	_tmp14_ = parent;
	_tmp15_ = file;
	_tmp16_ = element;
	_tmp17_ = valadoc_drivers_tree_builder_get_method_name (self, (ValaMethod*) _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp19_);
	_tmp21_ = comment;
	_tmp22_ = element;
	_tmp23_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = element;
	_tmp26_ = vala_gd_bus_module_get_dbus_name_for_member ((ValaSymbol*) _tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = element;
	_tmp29_ = vala_gd_bus_module_dbus_result_name ((ValaMethod*) _tmp28_);
	_tmp30_ = _tmp29_;
	_tmp31_ = element;
	_tmp32_ = valadoc_drivers_tree_builder_get_method_binding_type (self, (ValaMethod*) _tmp31_);
	_tmp33_ = element;
	_tmp34_ = vala_method_get_coroutine ((ValaMethod*) _tmp33_);
	_tmp35_ = _tmp34_;
	_tmp36_ = element;
	_tmp37_ = vala_gd_bus_module_is_dbus_visible ((ValaCodeNode*) _tmp36_);
	_tmp38_ = element;
	_tmp39_ = element;
	_tmp40_ = valadoc_api_method_new (_tmp14_, _tmp15_, _tmp18_, _tmp20_, _tmp21_, _tmp24_, _tmp27_, _tmp30_, _tmp8_, _tmp32_, _tmp35_, _tmp37_, G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, VALA_TYPE_CREATION_METHOD), _tmp39_);
	_tmp41_ = _tmp40_;
	_g_free0 (_tmp30_);
	_g_free0 (_tmp27_);
	_g_free0 (_tmp24_);
	_g_free0 (_tmp18_);
	node = _tmp41_;
	_tmp42_ = element;
	_tmp43_ = vala_callable_get_return_type ((ValaCallable*) _tmp42_);
	_tmp44_ = _tmp43_;
	_tmp45_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp44_, (ValadocApiItem*) node, (ValadocApiNode*) node);
	_tmp46_ = _tmp45_;
	valadoc_api_callable_set_return_type ((ValadocApiCallable*) node, _tmp46_);
	_g_object_unref0 (_tmp46_);
	_tmp47_ = self->priv->symbol_map;
	_tmp48_ = element;
	vala_map_set ((ValaMap*) _tmp47_, (ValaSymbol*) _tmp48_, (ValadocApiSymbol*) node);
	_tmp49_ = parent;
	valadoc_api_node_add_child (_tmp49_, (ValadocApiSymbol*) node);
	_tmp50_ = element;
	_tmp51_ = ((ValaCodeNode*) _tmp50_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) node, _tmp51_);
	_tmp52_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp52_);
	_g_object_unref0 (node);
	_g_free0 (_tmp8_);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_method (ValaCodeVisitor* base, ValaMethod* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaMethod* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaMethod* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaMethod* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	gchar* _tmp8_ = NULL;
	ValaMethod* _tmp9_;
	gboolean _tmp10_;
	gboolean _tmp11_;
	ValadocApiMethod* node = NULL;
	ValadocApiNode* _tmp14_;
	ValadocApiSourceFile* _tmp15_;
	ValaMethod* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	ValaMethod* _tmp19_;
	ValadocApiSymbolAccessibility _tmp20_;
	ValadocApiSourceComment* _tmp21_;
	ValaMethod* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	ValaMethod* _tmp25_;
	gchar* _tmp26_;
	gchar* _tmp27_;
	ValaMethod* _tmp28_;
	gchar* _tmp29_;
	gchar* _tmp30_;
	ValaMethod* _tmp31_;
	ValadocMethodBindingType _tmp32_;
	ValaMethod* _tmp33_;
	gboolean _tmp34_;
	gboolean _tmp35_;
	ValaMethod* _tmp36_;
	gboolean _tmp37_;
	ValaMethod* _tmp38_;
	ValaMethod* _tmp39_;
	ValadocApiMethod* _tmp40_;
	ValadocApiMethod* _tmp41_;
	ValaMethod* _tmp42_;
	ValaDataType* _tmp43_;
	ValaDataType* _tmp44_;
	ValadocApiTypeReference* _tmp45_;
	ValadocApiTypeReference* _tmp46_;
	ValaHashMap* _tmp47_;
	ValaMethod* _tmp48_;
	ValadocApiNode* _tmp49_;
	ValaMethod* _tmp50_;
	GList* _tmp51_;
	ValaMethod* _tmp52_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp9_ = element;
	_tmp10_ = vala_method_get_coroutine (_tmp9_);
	_tmp11_ = _tmp10_;
	if (_tmp11_) {
		ValaMethod* _tmp12_;
		gchar* _tmp13_;
		_tmp12_ = element;
		_tmp13_ = valadoc_drivers_tree_builder_get_finish_name (self, _tmp12_);
		_g_free0 (_tmp8_);
		_tmp8_ = _tmp13_;
	} else {
		_g_free0 (_tmp8_);
		_tmp8_ = NULL;
	}
	_tmp14_ = parent;
	_tmp15_ = file;
	_tmp16_ = element;
	_tmp17_ = valadoc_drivers_tree_builder_get_method_name (self, _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp19_);
	_tmp21_ = comment;
	_tmp22_ = element;
	_tmp23_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = element;
	_tmp26_ = vala_gd_bus_module_get_dbus_name_for_member ((ValaSymbol*) _tmp25_);
	_tmp27_ = _tmp26_;
	_tmp28_ = element;
	_tmp29_ = vala_gd_bus_module_dbus_result_name (_tmp28_);
	_tmp30_ = _tmp29_;
	_tmp31_ = element;
	_tmp32_ = valadoc_drivers_tree_builder_get_method_binding_type (self, _tmp31_);
	_tmp33_ = element;
	_tmp34_ = vala_method_get_coroutine (_tmp33_);
	_tmp35_ = _tmp34_;
	_tmp36_ = element;
	_tmp37_ = vala_gd_bus_module_is_dbus_visible ((ValaCodeNode*) _tmp36_);
	_tmp38_ = element;
	_tmp39_ = element;
	_tmp40_ = valadoc_api_method_new (_tmp14_, _tmp15_, _tmp18_, _tmp20_, _tmp21_, _tmp24_, _tmp27_, _tmp30_, _tmp8_, _tmp32_, _tmp35_, _tmp37_, G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, VALA_TYPE_CREATION_METHOD), _tmp39_);
	_tmp41_ = _tmp40_;
	_g_free0 (_tmp30_);
	_g_free0 (_tmp27_);
	_g_free0 (_tmp24_);
	_g_free0 (_tmp18_);
	node = _tmp41_;
	_tmp42_ = element;
	_tmp43_ = vala_callable_get_return_type ((ValaCallable*) _tmp42_);
	_tmp44_ = _tmp43_;
	_tmp45_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp44_, (ValadocApiItem*) node, (ValadocApiNode*) node);
	_tmp46_ = _tmp45_;
	valadoc_api_callable_set_return_type ((ValadocApiCallable*) node, _tmp46_);
	_g_object_unref0 (_tmp46_);
	_tmp47_ = self->priv->symbol_map;
	_tmp48_ = element;
	vala_map_set ((ValaMap*) _tmp47_, (ValaSymbol*) _tmp48_, (ValadocApiSymbol*) node);
	_tmp49_ = parent;
	valadoc_api_node_add_child (_tmp49_, (ValadocApiSymbol*) node);
	_tmp50_ = element;
	_tmp51_ = ((ValaCodeNode*) _tmp50_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) node, _tmp51_);
	_tmp52_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp52_);
	_g_object_unref0 (node);
	_g_free0 (_tmp8_);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_signal (ValaCodeVisitor* base, ValaSignal* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaSignal* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaSignal* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaSignal* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	gchar* _tmp8_ = NULL;
	ValaSignal* _tmp9_;
	ValaMethod* _tmp10_;
	ValaMethod* _tmp11_;
	ValadocApiSignal* node = NULL;
	ValadocApiNode* _tmp16_;
	ValadocApiSourceFile* _tmp17_;
	ValaSignal* _tmp18_;
	const gchar* _tmp19_;
	const gchar* _tmp20_;
	ValaSignal* _tmp21_;
	ValadocApiSymbolAccessibility _tmp22_;
	ValadocApiSourceComment* _tmp23_;
	ValaSignal* _tmp24_;
	gchar* _tmp25_;
	gchar* _tmp26_;
	ValaSignal* _tmp27_;
	gchar* _tmp28_;
	gchar* _tmp29_;
	ValaSignal* _tmp30_;
	gboolean _tmp31_;
	ValaSignal* _tmp32_;
	gboolean _tmp33_;
	gboolean _tmp34_;
	ValaSignal* _tmp35_;
	ValadocApiSignal* _tmp36_;
	ValadocApiSignal* _tmp37_;
	ValaSignal* _tmp38_;
	ValaDataType* _tmp39_;
	ValaDataType* _tmp40_;
	ValadocApiTypeReference* _tmp41_;
	ValadocApiTypeReference* _tmp42_;
	ValaHashMap* _tmp43_;
	ValaSignal* _tmp44_;
	ValadocApiNode* _tmp45_;
	ValaSignal* _tmp46_;
	GList* _tmp47_;
	ValaSignal* _tmp48_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp9_ = element;
	_tmp10_ = vala_signal_get_default_handler (_tmp9_);
	_tmp11_ = _tmp10_;
	if (_tmp11_ != NULL) {
		ValaSignal* _tmp12_;
		ValaMethod* _tmp13_;
		ValaMethod* _tmp14_;
		gchar* _tmp15_;
		_tmp12_ = element;
		_tmp13_ = vala_signal_get_default_handler (_tmp12_);
		_tmp14_ = _tmp13_;
		_tmp15_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp14_);
		_g_free0 (_tmp8_);
		_tmp8_ = _tmp15_;
	} else {
		_g_free0 (_tmp8_);
		_tmp8_ = NULL;
	}
	_tmp16_ = parent;
	_tmp17_ = file;
	_tmp18_ = element;
	_tmp19_ = vala_symbol_get_name ((ValaSymbol*) _tmp18_);
	_tmp20_ = _tmp19_;
	_tmp21_ = element;
	_tmp22_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp21_);
	_tmp23_ = comment;
	_tmp24_ = element;
	_tmp25_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp24_);
	_tmp26_ = _tmp25_;
	_tmp27_ = element;
	_tmp28_ = vala_gd_bus_module_get_dbus_name_for_member ((ValaSymbol*) _tmp27_);
	_tmp29_ = _tmp28_;
	_tmp30_ = element;
	_tmp31_ = vala_gd_bus_module_is_dbus_visible ((ValaCodeNode*) _tmp30_);
	_tmp32_ = element;
	_tmp33_ = vala_signal_get_is_virtual (_tmp32_);
	_tmp34_ = _tmp33_;
	_tmp35_ = element;
	_tmp36_ = valadoc_api_signal_new (_tmp16_, _tmp17_, _tmp20_, _tmp22_, _tmp23_, _tmp26_, _tmp8_, _tmp29_, _tmp31_, _tmp34_, _tmp35_);
	_tmp37_ = _tmp36_;
	_g_free0 (_tmp29_);
	_g_free0 (_tmp26_);
	node = _tmp37_;
	_tmp38_ = element;
	_tmp39_ = vala_callable_get_return_type ((ValaCallable*) _tmp38_);
	_tmp40_ = _tmp39_;
	_tmp41_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp40_, (ValadocApiItem*) node, (ValadocApiNode*) node);
	_tmp42_ = _tmp41_;
	valadoc_api_callable_set_return_type ((ValadocApiCallable*) node, _tmp42_);
	_g_object_unref0 (_tmp42_);
	_tmp43_ = self->priv->symbol_map;
	_tmp44_ = element;
	vala_map_set ((ValaMap*) _tmp43_, (ValaSymbol*) _tmp44_, (ValadocApiSymbol*) node);
	_tmp45_ = parent;
	valadoc_api_node_add_child (_tmp45_, (ValadocApiSymbol*) node);
	_tmp46_ = element;
	_tmp47_ = ((ValaCodeNode*) _tmp46_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) node, _tmp47_);
	_tmp48_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp48_);
	_g_object_unref0 (node);
	_g_free0 (_tmp8_);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_delegate (ValaCodeVisitor* base, ValaDelegate* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaDelegate* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaDelegate* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaDelegate* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiDelegate* node = NULL;
	ValaDelegate* _tmp8_;
	const gchar* _tmp9_;
	const gchar* _tmp10_;
	ValaDelegate* _tmp11_;
	ValadocApiSymbolAccessibility _tmp12_;
	ValaDelegate* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaDelegate* _tmp16_;
	gboolean _tmp17_;
	gboolean _tmp18_;
	ValaDelegate* _tmp19_;
	ValadocApiDelegate* _tmp20_;
	ValadocApiDelegate* _tmp21_;
	ValaDelegate* _tmp22_;
	ValaDataType* _tmp23_;
	ValaDataType* _tmp24_;
	ValadocApiTypeReference* _tmp25_;
	ValadocApiTypeReference* _tmp26_;
	ValaHashMap* _tmp27_;
	ValaDelegate* _tmp28_;
	ValaDelegate* _tmp29_;
	GList* _tmp30_;
	ValaDelegate* _tmp31_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = element;
	_tmp9_ = vala_symbol_get_name ((ValaSymbol*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = element;
	_tmp12_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp11_);
	_tmp13_ = element;
	_tmp14_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = element;
	_tmp17_ = vala_delegate_get_has_target (_tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = valadoc_api_delegate_new (parent, file, _tmp10_, _tmp12_, comment, _tmp15_, !_tmp18_, _tmp19_);
	_tmp21_ = _tmp20_;
	_g_free0 (_tmp15_);
	node = _tmp21_;
	_tmp22_ = element;
	_tmp23_ = vala_callable_get_return_type ((ValaCallable*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp24_, (ValadocApiItem*) node, (ValadocApiNode*) node);
	_tmp26_ = _tmp25_;
	valadoc_api_callable_set_return_type ((ValadocApiCallable*) node, _tmp26_);
	_g_object_unref0 (_tmp26_);
	_tmp27_ = self->priv->symbol_map;
	_tmp28_ = element;
	vala_map_set ((ValaMap*) _tmp27_, (ValaSymbol*) _tmp28_, (ValadocApiSymbol*) node);
	valadoc_api_node_add_child (parent, (ValadocApiSymbol*) node);
	_tmp29_ = element;
	_tmp30_ = ((ValaCodeNode*) _tmp29_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) node, _tmp30_);
	_tmp31_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp31_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_enum (ValaCodeVisitor* base, ValaEnum* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaEnum* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaEnum* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaEnum* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiSymbol* node = NULL;
	ValaEnum* _tmp8_;
	const gchar* _tmp9_;
	const gchar* _tmp10_;
	ValaEnum* _tmp11_;
	ValadocApiSymbolAccessibility _tmp12_;
	ValaEnum* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaEnum* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	ValaEnum* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	ValaEnum* _tmp22_;
	ValadocApiEnum* _tmp23_;
	ValadocApiSymbol* _tmp24_;
	ValaHashMap* _tmp25_;
	ValaEnum* _tmp26_;
	ValaEnum* _tmp27_;
	GList* _tmp28_;
	ValaEnum* _tmp29_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = element;
	_tmp9_ = vala_symbol_get_name ((ValaSymbol*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = element;
	_tmp12_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp11_);
	_tmp13_ = element;
	_tmp14_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = element;
	_tmp17_ = valadoc_drivers_tree_builder_get_type_macro_name (self, (ValaTypeSymbol*) _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = valadoc_drivers_tree_builder_get_type_function_name (self, (ValaTypeSymbol*) _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = element;
	_tmp23_ = valadoc_api_enum_new (parent, file, _tmp10_, _tmp12_, comment, _tmp15_, _tmp18_, _tmp21_, _tmp22_);
	_tmp24_ = (ValadocApiSymbol*) _tmp23_;
	_g_free0 (_tmp21_);
	_g_free0 (_tmp18_);
	_g_free0 (_tmp15_);
	node = _tmp24_;
	_tmp25_ = self->priv->symbol_map;
	_tmp26_ = element;
	vala_map_set ((ValaMap*) _tmp25_, (ValaSymbol*) _tmp26_, node);
	valadoc_api_node_add_child (parent, node);
	_tmp27_ = element;
	_tmp28_ = ((ValaCodeNode*) _tmp27_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, node, _tmp28_);
	_tmp29_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp29_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_enum_value (ValaCodeVisitor* base, ValaEnumValue* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiEnum* parent = NULL;
	ValaEnumValue* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaEnumValue* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaEnumValue* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiSymbol* node = NULL;
	ValaEnumValue* _tmp8_;
	const gchar* _tmp9_;
	const gchar* _tmp10_;
	ValaEnumValue* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	ValaEnumValue* _tmp14_;
	ValadocApiEnumValue* _tmp15_;
	ValadocApiSymbol* _tmp16_;
	ValaHashMap* _tmp17_;
	ValaEnumValue* _tmp18_;
	ValaEnumValue* _tmp19_;
	GList* _tmp20_;
	ValaEnumValue* _tmp21_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALADOC_API_TYPE_ENUM, ValadocApiEnum);
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = element;
	_tmp9_ = vala_symbol_get_name ((ValaSymbol*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = element;
	_tmp12_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = element;
	_tmp15_ = valadoc_api_enum_value_new (parent, file, _tmp10_, comment, _tmp13_, _tmp14_);
	_tmp16_ = (ValadocApiSymbol*) _tmp15_;
	_g_free0 (_tmp13_);
	node = _tmp16_;
	_tmp17_ = self->priv->symbol_map;
	_tmp18_ = element;
	vala_map_set ((ValaMap*) _tmp17_, (ValaSymbol*) _tmp18_, node);
	valadoc_api_node_add_child ((ValadocApiNode*) parent, node);
	_tmp19_ = element;
	_tmp20_ = ((ValaCodeNode*) _tmp19_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, node, _tmp20_);
	_tmp21_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp21_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_constant (ValaCodeVisitor* base, ValaConstant* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaConstant* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaConstant* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaConstant* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiConstant* node = NULL;
	ValaConstant* _tmp8_;
	const gchar* _tmp9_;
	const gchar* _tmp10_;
	ValaConstant* _tmp11_;
	ValadocApiSymbolAccessibility _tmp12_;
	ValaConstant* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaConstant* _tmp16_;
	ValadocApiConstant* _tmp17_;
	ValadocApiConstant* _tmp18_;
	ValaConstant* _tmp19_;
	ValaDataType* _tmp20_;
	ValaDataType* _tmp21_;
	ValadocApiTypeReference* _tmp22_;
	ValadocApiTypeReference* _tmp23_;
	ValaHashMap* _tmp24_;
	ValaConstant* _tmp25_;
	ValaConstant* _tmp26_;
	GList* _tmp27_;
	ValaConstant* _tmp28_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = element;
	_tmp9_ = vala_symbol_get_name ((ValaSymbol*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = element;
	_tmp12_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp11_);
	_tmp13_ = element;
	_tmp14_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = element;
	_tmp17_ = valadoc_api_constant_new (parent, file, _tmp10_, _tmp12_, comment, _tmp15_, _tmp16_);
	_tmp18_ = _tmp17_;
	_g_free0 (_tmp15_);
	node = _tmp18_;
	_tmp19_ = element;
	_tmp20_ = vala_constant_get_type_reference (_tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp21_, (ValadocApiItem*) node, (ValadocApiNode*) node);
	_tmp23_ = _tmp22_;
	valadoc_api_constant_set_constant_type (node, _tmp23_);
	_g_object_unref0 (_tmp23_);
	_tmp24_ = self->priv->symbol_map;
	_tmp25_ = element;
	vala_map_set ((ValaMap*) _tmp24_, (ValaSymbol*) _tmp25_, (ValadocApiSymbol*) node);
	valadoc_api_node_add_child (parent, (ValadocApiSymbol*) node);
	_tmp26_ = element;
	_tmp27_ = ((ValaCodeNode*) _tmp26_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, (ValadocApiSymbol*) node, _tmp27_);
	_tmp28_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp28_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_error_domain (ValaCodeVisitor* base, ValaErrorDomain* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaErrorDomain* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaErrorDomain* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaErrorDomain* _tmp4_;
	ValaComment* _tmp5_;
	ValaComment* _tmp6_;
	ValadocApiSourceComment* _tmp7_;
	ValadocApiSymbol* node = NULL;
	ValaErrorDomain* _tmp8_;
	const gchar* _tmp9_;
	const gchar* _tmp10_;
	ValaErrorDomain* _tmp11_;
	ValadocApiSymbolAccessibility _tmp12_;
	ValaErrorDomain* _tmp13_;
	gchar* _tmp14_;
	gchar* _tmp15_;
	ValaErrorDomain* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	ValaErrorDomain* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	ValaErrorDomain* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	ValaErrorDomain* _tmp25_;
	ValadocApiErrorDomain* _tmp26_;
	ValadocApiSymbol* _tmp27_;
	ValaHashMap* _tmp28_;
	ValaErrorDomain* _tmp29_;
	ValaErrorDomain* _tmp30_;
	GList* _tmp31_;
	ValaErrorDomain* _tmp32_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = valadoc_drivers_tree_builder_create_comment (self, _tmp6_);
	comment = _tmp7_;
	_tmp8_ = element;
	_tmp9_ = vala_symbol_get_name ((ValaSymbol*) _tmp8_);
	_tmp10_ = _tmp9_;
	_tmp11_ = element;
	_tmp12_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp11_);
	_tmp13_ = element;
	_tmp14_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = element;
	_tmp17_ = valadoc_drivers_tree_builder_get_quark_macro_name (self, _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = valadoc_drivers_tree_builder_get_quark_function_name (self, _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = element;
	_tmp23_ = vala_gd_bus_module_get_dbus_name ((ValaTypeSymbol*) _tmp22_);
	_tmp24_ = _tmp23_;
	_tmp25_ = element;
	_tmp26_ = valadoc_api_error_domain_new (parent, file, _tmp10_, _tmp12_, comment, _tmp15_, _tmp18_, _tmp21_, _tmp24_, _tmp25_);
	_tmp27_ = (ValadocApiSymbol*) _tmp26_;
	_g_free0 (_tmp24_);
	_g_free0 (_tmp21_);
	_g_free0 (_tmp18_);
	_g_free0 (_tmp15_);
	node = _tmp27_;
	_tmp28_ = self->priv->symbol_map;
	_tmp29_ = element;
	vala_map_set ((ValaMap*) _tmp28_, (ValaSymbol*) _tmp29_, node);
	valadoc_api_node_add_child (parent, node);
	_tmp30_ = element;
	_tmp31_ = ((ValaCodeNode*) _tmp30_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, node, _tmp31_);
	_tmp32_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp32_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_error_code (ValaCodeVisitor* base, ValaErrorCode* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiErrorDomain* parent = NULL;
	ValaErrorCode* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaErrorCode* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSourceFile* _tmp4_;
	ValadocApiSourceComment* comment = NULL;
	ValaErrorCode* _tmp7_;
	ValaComment* _tmp8_;
	ValaComment* _tmp9_;
	ValadocApiSourceComment* _tmp10_;
	ValadocApiSymbol* node = NULL;
	ValadocApiErrorDomain* _tmp11_;
	ValadocApiSourceFile* _tmp12_;
	ValaErrorCode* _tmp13_;
	const gchar* _tmp14_;
	const gchar* _tmp15_;
	ValaErrorCode* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	ValaErrorCode* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	ValaErrorCode* _tmp22_;
	ValadocApiErrorCode* _tmp23_;
	ValadocApiSymbol* _tmp24_;
	ValaHashMap* _tmp25_;
	ValaErrorCode* _tmp26_;
	ValadocApiErrorDomain* _tmp27_;
	ValaErrorCode* _tmp28_;
	GList* _tmp29_;
	ValaErrorCode* _tmp30_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALADOC_API_TYPE_ERROR_DOMAIN, ValadocApiErrorDomain);
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = file;
	if (_tmp4_ == NULL) {
		ValadocApiErrorDomain* _tmp5_;
		ValadocApiSourceFile* _tmp6_;
		_tmp5_ = parent;
		_tmp6_ = valadoc_api_node_get_source_file ((ValadocApiNode*) _tmp5_);
		_g_object_unref0 (file);
		file = _tmp6_;
	}
	_tmp7_ = element;
	_tmp8_ = vala_symbol_get_comment ((ValaSymbol*) _tmp7_);
	_tmp9_ = _tmp8_;
	_tmp10_ = valadoc_drivers_tree_builder_create_comment (self, _tmp9_);
	comment = _tmp10_;
	_tmp11_ = parent;
	_tmp12_ = file;
	_tmp13_ = element;
	_tmp14_ = vala_symbol_get_name ((ValaSymbol*) _tmp13_);
	_tmp15_ = _tmp14_;
	_tmp16_ = element;
	_tmp17_ = valadoc_drivers_tree_builder_get_cname (self, (ValaSymbol*) _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = element;
	_tmp20_ = vala_gd_bus_module_get_dbus_name_for_member ((ValaSymbol*) _tmp19_);
	_tmp21_ = _tmp20_;
	_tmp22_ = element;
	_tmp23_ = valadoc_api_error_code_new (_tmp11_, _tmp12_, _tmp15_, comment, _tmp18_, _tmp21_, _tmp22_);
	_tmp24_ = (ValadocApiSymbol*) _tmp23_;
	_g_free0 (_tmp21_);
	_g_free0 (_tmp18_);
	node = _tmp24_;
	_tmp25_ = self->priv->symbol_map;
	_tmp26_ = element;
	vala_map_set ((ValaMap*) _tmp25_, (ValaSymbol*) _tmp26_, node);
	_tmp27_ = parent;
	valadoc_api_node_add_child ((ValadocApiNode*) _tmp27_, node);
	_tmp28_ = element;
	_tmp29_ = ((ValaCodeNode*) _tmp28_)->attributes;
	valadoc_drivers_tree_builder_process_attributes (self, node, _tmp29_);
	_tmp30_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp30_);
	_g_object_unref0 (node);
	_valadoc_api_source_comment_unref0 (comment);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_type_parameter (ValaCodeVisitor* base, ValaTypeParameter* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaTypeParameter* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaTypeParameter* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiSymbol* node = NULL;
	ValaTypeParameter* _tmp4_;
	const gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaTypeParameter* _tmp7_;
	ValadocApiTypeParameter* _tmp8_;
	ValaHashMap* _tmp9_;
	ValaTypeParameter* _tmp10_;
	ValaTypeParameter* _tmp11_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_name ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = element;
	_tmp8_ = valadoc_api_typeparameter_new (parent, file, _tmp6_, _tmp7_);
	node = (ValadocApiSymbol*) _tmp8_;
	_tmp9_ = self->priv->symbol_map;
	_tmp10_ = element;
	vala_map_set ((ValaMap*) _tmp9_, (ValaSymbol*) _tmp10_, node);
	valadoc_api_node_add_child (parent, node);
	_tmp11_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp11_);
	_g_object_unref0 (node);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


/**
 * {@inheritDoc}
 */
static void valadoc_drivers_tree_builder_real_visit_formal_parameter (ValaCodeVisitor* base, ValaParameter* element) {
	ValadocDriversTreeBuilder * self;
	ValadocApiNode* parent = NULL;
	ValaParameter* _tmp0_;
	ValadocApiNode* _tmp1_;
	ValadocApiSourceFile* file = NULL;
	ValaParameter* _tmp2_;
	ValadocApiSourceFile* _tmp3_;
	ValadocApiFormalParameter* node = NULL;
	ValaParameter* _tmp4_;
	const gchar* _tmp5_;
	const gchar* _tmp6_;
	ValaParameter* _tmp7_;
	ValadocApiSymbolAccessibility _tmp8_;
	ValaParameter* _tmp9_;
	ValadocApiFormalParameterType _tmp10_;
	ValaParameter* _tmp11_;
	gboolean _tmp12_;
	gboolean _tmp13_;
	ValaParameter* _tmp14_;
	ValadocApiFormalParameter* _tmp15_;
	ValaParameter* _tmp16_;
	ValaDataType* _tmp17_;
	ValaDataType* _tmp18_;
	ValadocApiTypeReference* _tmp19_;
	ValadocApiTypeReference* _tmp20_;
	ValaParameter* _tmp21_;
	self = (ValadocDriversTreeBuilder*) base;
	g_return_if_fail (element != NULL);
	_tmp0_ = element;
	_tmp1_ = valadoc_drivers_tree_builder_get_parent_node_for (self, (ValaSymbol*) _tmp0_);
	parent = _tmp1_;
	_tmp2_ = element;
	_tmp3_ = valadoc_drivers_tree_builder_get_source_file (self, (ValaSymbol*) _tmp2_);
	file = _tmp3_;
	_tmp4_ = element;
	_tmp5_ = vala_symbol_get_name ((ValaSymbol*) _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = element;
	_tmp8_ = valadoc_drivers_tree_builder_get_access_modifier (self, (ValaSymbol*) _tmp7_);
	_tmp9_ = element;
	_tmp10_ = valadoc_drivers_tree_builder_get_formal_parameter_type (self, _tmp9_);
	_tmp11_ = element;
	_tmp12_ = vala_parameter_get_ellipsis (_tmp11_);
	_tmp13_ = _tmp12_;
	_tmp14_ = element;
	_tmp15_ = valadoc_api_formal_parameter_new (parent, file, _tmp6_, _tmp8_, _tmp10_, _tmp13_, _tmp14_);
	node = _tmp15_;
	_tmp16_ = element;
	_tmp17_ = vala_variable_get_variable_type ((ValaVariable*) _tmp16_);
	_tmp18_ = _tmp17_;
	_tmp19_ = valadoc_drivers_tree_builder_create_type_reference (self, _tmp18_, (ValadocApiItem*) node, (ValadocApiNode*) node);
	_tmp20_ = _tmp19_;
	valadoc_api_formal_parameter_set_parameter_type (node, _tmp20_);
	_g_object_unref0 (_tmp20_);
	valadoc_api_node_add_child (parent, (ValadocApiSymbol*) node);
	_tmp21_ = element;
	valadoc_drivers_tree_builder_process_children (self, (ValadocApiNode*) node, (ValaCodeNode*) _tmp21_);
	_g_object_unref0 (node);
	_g_object_unref0 (file);
	_g_object_unref0 (parent);
}


static gpointer _valadoc_api_tree_ref0 (gpointer self) {
	return self ? valadoc_api_tree_ref (self) : NULL;
}


ValadocApiTree* valadoc_drivers_tree_builder_build (ValadocDriversTreeBuilder* self, ValadocSettings* settings, ValadocErrorReporter* reporter) {
	ValadocApiTree* result = NULL;
	ValadocSettings* _tmp0_;
	ValadocSettings* _tmp1_;
	ValadocErrorReporter* _tmp2_;
	ValadocErrorReporter* _tmp3_;
	ValadocErrorReporter* _tmp4_;
	ValadocSettings* _tmp5_;
	ValadocApiTree* _tmp6_;
	ValaCodeContext* context = NULL;
	ValadocSettings* _tmp7_;
	ValaCodeContext* _tmp8_;
	ValadocApiTree* _tmp9_;
	ValaCodeContext* _tmp10_;
	ValadocErrorReporter* _tmp11_;
	ValaCodeContext* _tmp12_;
	ValaReport* _tmp13_;
	ValaReport* _tmp14_;
	gint _tmp15_;
	ValadocErrorReporter* _tmp16_;
	ValaCodeContext* _tmp17_;
	ValaReport* _tmp18_;
	ValaReport* _tmp19_;
	gint _tmp20_;
	ValaCodeContext* _tmp21_;
	ValaCodeContext* _tmp59_;
	ValadocApiTree* _tmp60_ = NULL;
	ValadocErrorReporter* _tmp61_;
	gint _tmp62_;
	gint _tmp63_;
	ValadocApiTree* _tmp65_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (settings != NULL, NULL);
	g_return_val_if_fail (reporter != NULL, NULL);
	_tmp0_ = settings;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	_g_object_unref0 (self->priv->settings);
	self->priv->settings = _tmp1_;
	_tmp2_ = reporter;
	_tmp3_ = _g_object_ref0 (_tmp2_);
	_g_object_unref0 (self->priv->reporter);
	self->priv->reporter = _tmp3_;
	_tmp4_ = reporter;
	_tmp5_ = settings;
	_tmp6_ = valadoc_api_tree_new (_tmp4_, _tmp5_, NULL);
	_valadoc_api_tree_unref0 (self->priv->tree);
	self->priv->tree = _tmp6_;
	_tmp7_ = settings;
	_tmp8_ = valadoc_drivers_tree_builder_create_valac_tree (self, _tmp7_);
	context = _tmp8_;
	_tmp9_ = self->priv->tree;
	_tmp10_ = context;
	valadoc_api_tree_set_data (_tmp9_, _tmp10_);
	_tmp11_ = reporter;
	_tmp12_ = context;
	_tmp13_ = vala_code_context_get_report (_tmp12_);
	_tmp14_ = _tmp13_;
	_tmp15_ = vala_report_get_warnings (_tmp14_);
	valadoc_error_reporter_set_warnings_offset (_tmp11_, _tmp15_);
	_tmp16_ = reporter;
	_tmp17_ = context;
	_tmp18_ = vala_code_context_get_report (_tmp17_);
	_tmp19_ = _tmp18_;
	_tmp20_ = vala_report_get_errors (_tmp19_);
	valadoc_error_reporter_set_errors_offset (_tmp16_, _tmp20_);
	_tmp21_ = context;
	if (_tmp21_ == NULL) {
		result = NULL;
		_vala_code_context_unref0 (context);
		return result;
	}
	{
		ValaList* _vfile_list = NULL;
		ValaCodeContext* _tmp22_;
		ValaList* _tmp23_;
		gint _vfile_size = 0;
		ValaList* _tmp24_;
		gint _tmp25_;
		gint _tmp26_;
		gint _vfile_index = 0;
		_tmp22_ = context;
		_tmp23_ = vala_code_context_get_source_files (_tmp22_);
		_vfile_list = _tmp23_;
		_tmp24_ = _vfile_list;
		_tmp25_ = vala_collection_get_size ((ValaCollection*) _tmp24_);
		_tmp26_ = _tmp25_;
		_vfile_size = _tmp26_;
		_vfile_index = -1;
		while (TRUE) {
			gint _tmp27_;
			gint _tmp28_;
			gint _tmp29_;
			ValaSourceFile* vfile = NULL;
			ValaList* _tmp30_;
			gint _tmp31_;
			gpointer _tmp32_;
			gboolean _tmp33_ = FALSE;
			gboolean _tmp34_ = FALSE;
			ValaSourceFile* _tmp35_;
			ValaSourceFileType _tmp36_;
			ValaSourceFileType _tmp37_;
			_tmp27_ = _vfile_index;
			_vfile_index = _tmp27_ + 1;
			_tmp28_ = _vfile_index;
			_tmp29_ = _vfile_size;
			if (!(_tmp28_ < _tmp29_)) {
				break;
			}
			_tmp30_ = _vfile_list;
			_tmp31_ = _vfile_index;
			_tmp32_ = vala_list_get (_tmp30_, _tmp31_);
			vfile = (ValaSourceFile*) _tmp32_;
			_tmp35_ = vfile;
			_tmp36_ = vala_source_file_get_file_type (_tmp35_);
			_tmp37_ = _tmp36_;
			if (_tmp37_ == VALA_SOURCE_FILE_TYPE_PACKAGE) {
				ValaSourceFile* _tmp38_;
				ValaList* _tmp39_;
				ValaList* _tmp40_;
				gint _tmp41_;
				gint _tmp42_;
				_tmp38_ = vfile;
				_tmp39_ = vala_source_file_get_nodes (_tmp38_);
				_tmp40_ = _tmp39_;
				_tmp41_ = vala_collection_get_size ((ValaCollection*) _tmp40_);
				_tmp42_ = _tmp41_;
				_tmp34_ = _tmp42_ > 0;
				_vala_iterable_unref0 (_tmp40_);
			} else {
				_tmp34_ = FALSE;
			}
			if (_tmp34_) {
				ValaHashMap* _tmp43_;
				ValaSourceFile* _tmp44_;
				gboolean _tmp45_;
				_tmp43_ = self->priv->files;
				_tmp44_ = vfile;
				_tmp45_ = vala_map_contains ((ValaMap*) _tmp43_, _tmp44_);
				_tmp33_ = _tmp45_ == FALSE;
			} else {
				_tmp33_ = FALSE;
			}
			if (_tmp33_) {
				ValadocApiPackage* vdpkg = NULL;
				ValaSourceFile* _tmp46_;
				const gchar* _tmp47_;
				const gchar* _tmp48_;
				gchar* _tmp49_;
				gchar* _tmp50_;
				ValadocApiPackage* _tmp51_;
				ValadocApiPackage* _tmp52_;
				ValadocApiPackage* _tmp53_;
				ValadocDriversTreeBuilderPackageMetaData* _tmp54_;
				ValadocDriversTreeBuilderPackageMetaData* _tmp55_;
				ValaSourceFile* _tmp56_;
				ValadocApiSourceFile* _tmp57_;
				ValadocApiSourceFile* _tmp58_;
				_tmp46_ = vfile;
				_tmp47_ = vala_source_file_get_filename (_tmp46_);
				_tmp48_ = _tmp47_;
				_tmp49_ = valadoc_drivers_tree_builder_get_package_name (self, _tmp48_);
				_tmp50_ = _tmp49_;
				_tmp51_ = valadoc_api_package_new (_tmp50_, TRUE, NULL);
				_tmp52_ = _tmp51_;
				_g_free0 (_tmp50_);
				vdpkg = _tmp52_;
				_tmp53_ = vdpkg;
				_tmp54_ = valadoc_drivers_tree_builder_register_package (self, _tmp53_);
				_tmp55_ = _tmp54_;
				_tmp56_ = vfile;
				_tmp57_ = valadoc_drivers_tree_builder_register_source_file (self, _tmp55_, _tmp56_);
				_tmp58_ = _tmp57_;
				_g_object_unref0 (_tmp58_);
				_valadoc_drivers_tree_builder_package_meta_data_unref0 (_tmp55_);
				_g_object_unref0 (vdpkg);
			}
			_vala_source_file_unref0 (vfile);
		}
		_vala_iterable_unref0 (_vfile_list);
	}
	_tmp59_ = context;
	vala_code_context_accept (_tmp59_, (ValaCodeVisitor*) self);
	_tmp61_ = reporter;
	_tmp62_ = valadoc_error_reporter_get_errors (_tmp61_);
	_tmp63_ = _tmp62_;
	if (_tmp63_ == 0) {
		ValadocApiTree* _tmp64_;
		_tmp64_ = self->priv->tree;
		_tmp60_ = _tmp64_;
	} else {
		_tmp60_ = NULL;
	}
	_tmp65_ = _valadoc_api_tree_ref0 (_tmp60_);
	result = _tmp65_;
	_vala_code_context_unref0 (context);
	return result;
}


ValadocDriversTreeBuilder* valadoc_drivers_tree_builder_construct (GType object_type) {
	ValadocDriversTreeBuilder* self = NULL;
	self = (ValadocDriversTreeBuilder*) vala_code_visitor_construct (object_type);
	return self;
}


ValadocDriversTreeBuilder* valadoc_drivers_tree_builder_new (void) {
	return valadoc_drivers_tree_builder_construct (VALADOC_DRIVERS_TYPE_TREE_BUILDER);
}


static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_package_meta_data_construct (GType object_type, ValadocApiPackage* package) {
	ValadocDriversTreeBuilderPackageMetaData* self = NULL;
	ValadocApiPackage* _tmp0_;
	ValadocApiPackage* _tmp1_;
	g_return_val_if_fail (package != NULL, NULL);
	self = (ValadocDriversTreeBuilderPackageMetaData*) g_type_create_instance (object_type);
	_tmp0_ = package;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	_g_object_unref0 (self->package);
	self->package = _tmp1_;
	return self;
}


static ValadocDriversTreeBuilderPackageMetaData* valadoc_drivers_tree_builder_package_meta_data_new (ValadocApiPackage* package) {
	return valadoc_drivers_tree_builder_package_meta_data_construct (VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA, package);
}


static ValadocApiNamespace* valadoc_drivers_tree_builder_package_meta_data_get_namespace (ValadocDriversTreeBuilderPackageMetaData* self, ValaNamespace* vns, ValadocApiSourceFile* file) {
	ValadocApiNamespace* result = NULL;
	ValadocApiNamespace* ns = NULL;
	ValaHashMap* _tmp0_;
	ValaNamespace* _tmp1_;
	gpointer _tmp2_;
	ValadocApiNamespace* _tmp3_;
	ValadocApiSourceComment* comment = NULL;
	ValaNamespace* _tmp4_;
	ValaSourceReference* _tmp5_;
	ValaSourceReference* _tmp6_;
	ValaSymbol* parent_vns = NULL;
	ValaNamespace* _tmp87_;
	ValaSymbol* _tmp88_;
	ValaSymbol* _tmp89_;
	ValaSymbol* _tmp90_;
	ValaSymbol* _tmp91_;
	ValaHashMap* _tmp115_;
	ValaNamespace* _tmp116_;
	ValadocApiNamespace* _tmp117_;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (vns != NULL, NULL);
	g_return_val_if_fail (file != NULL, NULL);
	_tmp0_ = self->namespaces;
	_tmp1_ = vns;
	_tmp2_ = vala_map_get ((ValaMap*) _tmp0_, _tmp1_);
	ns = (ValadocApiNamespace*) _tmp2_;
	_tmp3_ = ns;
	if (_tmp3_ != NULL) {
		result = ns;
		return result;
	}
	comment = NULL;
	_tmp4_ = vns;
	_tmp5_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp4_);
	_tmp6_ = _tmp5_;
	if (_tmp6_ != NULL) {
		{
			ValaList* _c_list = NULL;
			ValaNamespace* _tmp7_;
			ValaList* _tmp8_;
			gint _c_size = 0;
			ValaList* _tmp9_;
			gint _tmp10_;
			gint _tmp11_;
			gint _c_index = 0;
			_tmp7_ = vns;
			_tmp8_ = vala_namespace_get_comments (_tmp7_);
			_c_list = _tmp8_;
			_tmp9_ = _c_list;
			_tmp10_ = vala_collection_get_size ((ValaCollection*) _tmp9_);
			_tmp11_ = _tmp10_;
			_c_size = _tmp11_;
			_c_index = -1;
			while (TRUE) {
				gint _tmp12_;
				gint _tmp13_;
				gint _tmp14_;
				ValaComment* c = NULL;
				ValaList* _tmp15_;
				gint _tmp16_;
				gpointer _tmp17_;
				gboolean _tmp18_ = FALSE;
				ValaComment* _tmp19_;
				ValaSourceReference* _tmp20_;
				ValaSourceReference* _tmp21_;
				ValaSourceFile* _tmp22_;
				ValaSourceFile* _tmp23_;
				ValadocApiSourceFile* _tmp24_;
				void* _tmp25_;
				void* _tmp26_;
				_tmp12_ = _c_index;
				_c_index = _tmp12_ + 1;
				_tmp13_ = _c_index;
				_tmp14_ = _c_size;
				if (!(_tmp13_ < _tmp14_)) {
					break;
				}
				_tmp15_ = _c_list;
				_tmp16_ = _c_index;
				_tmp17_ = vala_list_get (_tmp15_, _tmp16_);
				c = (ValaComment*) _tmp17_;
				_tmp19_ = c;
				_tmp20_ = vala_comment_get_source_reference (_tmp19_);
				_tmp21_ = _tmp20_;
				_tmp22_ = vala_source_reference_get_file (_tmp21_);
				_tmp23_ = _tmp22_;
				_tmp24_ = file;
				_tmp25_ = valadoc_api_source_file_get_data (_tmp24_);
				_tmp26_ = _tmp25_;
				if (_tmp23_ == _tmp26_) {
					_tmp18_ = TRUE;
				} else {
					gboolean _tmp27_ = FALSE;
					ValaComment* _tmp28_;
					ValaSourceReference* _tmp29_;
					ValaSourceReference* _tmp30_;
					ValaSourceFile* _tmp31_;
					ValaSourceFile* _tmp32_;
					ValaSourceFileType _tmp33_;
					ValaSourceFileType _tmp34_;
					_tmp28_ = c;
					_tmp29_ = vala_comment_get_source_reference (_tmp28_);
					_tmp30_ = _tmp29_;
					_tmp31_ = vala_source_reference_get_file (_tmp30_);
					_tmp32_ = _tmp31_;
					_tmp33_ = vala_source_file_get_file_type (_tmp32_);
					_tmp34_ = _tmp33_;
					if (_tmp34_ == VALA_SOURCE_FILE_TYPE_SOURCE) {
						ValadocApiSourceFile* _tmp35_;
						void* _tmp36_;
						void* _tmp37_;
						ValaSourceFileType _tmp38_;
						ValaSourceFileType _tmp39_;
						_tmp35_ = file;
						_tmp36_ = valadoc_api_source_file_get_data (_tmp35_);
						_tmp37_ = _tmp36_;
						_tmp38_ = vala_source_file_get_file_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp37_, VALA_TYPE_SOURCE_FILE, ValaSourceFile));
						_tmp39_ = _tmp38_;
						_tmp27_ = _tmp39_ == VALA_SOURCE_FILE_TYPE_SOURCE;
					} else {
						_tmp27_ = FALSE;
					}
					_tmp18_ = _tmp27_;
				}
				if (_tmp18_) {
					ValaSourceReference* pos = NULL;
					ValaComment* _tmp40_;
					ValaSourceReference* _tmp41_;
					ValaSourceReference* _tmp42_;
					ValaSourceReference* _tmp43_;
					ValaComment* _tmp44_;
					_tmp40_ = c;
					_tmp41_ = vala_comment_get_source_reference (_tmp40_);
					_tmp42_ = _tmp41_;
					_tmp43_ = _vala_source_reference_ref0 (_tmp42_);
					pos = _tmp43_;
					_tmp44_ = c;
					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, VALA_TYPE_GIR_COMMENT)) {
						ValaComment* _tmp45_;
						const gchar* _tmp46_;
						const gchar* _tmp47_;
						ValadocApiSourceFile* _tmp48_;
						ValaSourceReference* _tmp49_;
						ValaSourceLocation _tmp50_ = {0};
						ValaSourceLocation _tmp51_;
						gint _tmp52_;
						ValaSourceReference* _tmp53_;
						ValaSourceLocation _tmp54_ = {0};
						ValaSourceLocation _tmp55_;
						gint _tmp56_;
						ValaSourceReference* _tmp57_;
						ValaSourceLocation _tmp58_ = {0};
						ValaSourceLocation _tmp59_;
						gint _tmp60_;
						ValaSourceReference* _tmp61_;
						ValaSourceLocation _tmp62_ = {0};
						ValaSourceLocation _tmp63_;
						gint _tmp64_;
						ValadocApiGirSourceComment* _tmp65_;
						_tmp45_ = c;
						_tmp46_ = vala_comment_get_content (_tmp45_);
						_tmp47_ = _tmp46_;
						_tmp48_ = file;
						_tmp49_ = pos;
						vala_source_reference_get_begin (_tmp49_, &_tmp50_);
						_tmp51_ = _tmp50_;
						_tmp52_ = _tmp51_.line;
						_tmp53_ = pos;
						vala_source_reference_get_begin (_tmp53_, &_tmp54_);
						_tmp55_ = _tmp54_;
						_tmp56_ = _tmp55_.column;
						_tmp57_ = pos;
						vala_source_reference_get_end (_tmp57_, &_tmp58_);
						_tmp59_ = _tmp58_;
						_tmp60_ = _tmp59_.line;
						_tmp61_ = pos;
						vala_source_reference_get_end (_tmp61_, &_tmp62_);
						_tmp63_ = _tmp62_;
						_tmp64_ = _tmp63_.column;
						_tmp65_ = valadoc_api_gir_source_comment_new (_tmp47_, _tmp48_, _tmp52_, _tmp56_, _tmp60_, _tmp64_);
						_valadoc_api_source_comment_unref0 (comment);
						comment = (ValadocApiSourceComment*) _tmp65_;
					} else {
						ValaComment* _tmp66_;
						const gchar* _tmp67_;
						const gchar* _tmp68_;
						ValadocApiSourceFile* _tmp69_;
						ValaSourceReference* _tmp70_;
						ValaSourceLocation _tmp71_ = {0};
						ValaSourceLocation _tmp72_;
						gint _tmp73_;
						ValaSourceReference* _tmp74_;
						ValaSourceLocation _tmp75_ = {0};
						ValaSourceLocation _tmp76_;
						gint _tmp77_;
						ValaSourceReference* _tmp78_;
						ValaSourceLocation _tmp79_ = {0};
						ValaSourceLocation _tmp80_;
						gint _tmp81_;
						ValaSourceReference* _tmp82_;
						ValaSourceLocation _tmp83_ = {0};
						ValaSourceLocation _tmp84_;
						gint _tmp85_;
						ValadocApiSourceComment* _tmp86_;
						_tmp66_ = c;
						_tmp67_ = vala_comment_get_content (_tmp66_);
						_tmp68_ = _tmp67_;
						_tmp69_ = file;
						_tmp70_ = pos;
						vala_source_reference_get_begin (_tmp70_, &_tmp71_);
						_tmp72_ = _tmp71_;
						_tmp73_ = _tmp72_.line;
						_tmp74_ = pos;
						vala_source_reference_get_begin (_tmp74_, &_tmp75_);
						_tmp76_ = _tmp75_;
						_tmp77_ = _tmp76_.column;
						_tmp78_ = pos;
						vala_source_reference_get_end (_tmp78_, &_tmp79_);
						_tmp80_ = _tmp79_;
						_tmp81_ = _tmp80_.line;
						_tmp82_ = pos;
						vala_source_reference_get_end (_tmp82_, &_tmp83_);
						_tmp84_ = _tmp83_;
						_tmp85_ = _tmp84_.column;
						_tmp86_ = valadoc_api_source_comment_new (_tmp68_, _tmp69_, _tmp73_, _tmp77_, _tmp81_, _tmp85_);
						_valadoc_api_source_comment_unref0 (comment);
						comment = _tmp86_;
					}
					_vala_source_reference_unref0 (pos);
					_vala_comment_unref0 (c);
					break;
				}
				_vala_comment_unref0 (c);
			}
			_vala_iterable_unref0 (_c_list);
		}
	}
	_tmp87_ = vns;
	_tmp88_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp87_);
	_tmp89_ = _tmp88_;
	_tmp90_ = _vala_code_node_ref0 (_tmp89_);
	parent_vns = _tmp90_;
	_tmp91_ = parent_vns;
	if (_tmp91_ == NULL) {
		ValadocApiPackage* _tmp92_;
		ValadocApiSourceFile* _tmp93_;
		ValaNamespace* _tmp94_;
		const gchar* _tmp95_;
		const gchar* _tmp96_;
		ValadocApiSourceComment* _tmp97_;
		ValaNamespace* _tmp98_;
		ValadocApiNamespace* _tmp99_;
		ValadocApiPackage* _tmp100_;
		ValadocApiNamespace* _tmp101_;
		_tmp92_ = self->package;
		_tmp93_ = file;
		_tmp94_ = vns;
		_tmp95_ = vala_symbol_get_name ((ValaSymbol*) _tmp94_);
		_tmp96_ = _tmp95_;
		_tmp97_ = comment;
		_tmp98_ = vns;
		_tmp99_ = valadoc_api_namespace_new ((ValadocApiNode*) _tmp92_, _tmp93_, _tmp96_, _tmp97_, _tmp98_);
		_g_object_unref0 (ns);
		ns = _tmp99_;
		_tmp100_ = self->package;
		_tmp101_ = ns;
		valadoc_api_node_add_child ((ValadocApiNode*) _tmp100_, (ValadocApiSymbol*) _tmp101_);
	} else {
		ValadocApiNamespace* parent_ns = NULL;
		ValaSymbol* _tmp102_;
		ValadocApiSourceFile* _tmp103_;
		ValadocApiNamespace* _tmp104_;
		ValadocApiNamespace* _tmp105_;
		ValadocApiSourceFile* _tmp106_;
		ValaNamespace* _tmp107_;
		const gchar* _tmp108_;
		const gchar* _tmp109_;
		ValadocApiSourceComment* _tmp110_;
		ValaNamespace* _tmp111_;
		ValadocApiNamespace* _tmp112_;
		ValadocApiNamespace* _tmp113_;
		ValadocApiNamespace* _tmp114_;
		_tmp102_ = parent_vns;
		_tmp103_ = file;
		_tmp104_ = valadoc_drivers_tree_builder_package_meta_data_get_namespace (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp102_, VALA_TYPE_NAMESPACE, ValaNamespace), _tmp103_);
		parent_ns = _tmp104_;
		_tmp105_ = parent_ns;
		_tmp106_ = file;
		_tmp107_ = vns;
		_tmp108_ = vala_symbol_get_name ((ValaSymbol*) _tmp107_);
		_tmp109_ = _tmp108_;
		_tmp110_ = comment;
		_tmp111_ = vns;
		_tmp112_ = valadoc_api_namespace_new ((ValadocApiNode*) _tmp105_, _tmp106_, _tmp109_, _tmp110_, _tmp111_);
		_g_object_unref0 (ns);
		ns = _tmp112_;
		_tmp113_ = parent_ns;
		_tmp114_ = ns;
		valadoc_api_node_add_child ((ValadocApiNode*) _tmp113_, (ValadocApiSymbol*) _tmp114_);
		_g_object_unref0 (parent_ns);
	}
	_tmp115_ = self->namespaces;
	_tmp116_ = vns;
	_tmp117_ = ns;
	vala_map_set ((ValaMap*) _tmp115_, _tmp116_, _tmp117_);
	result = ns;
	_vala_code_node_unref0 (parent_vns);
	_valadoc_api_source_comment_unref0 (comment);
	return result;
}


static void valadoc_drivers_tree_builder_package_meta_data_register_source_file (ValadocDriversTreeBuilderPackageMetaData* self, ValaSourceFile* file) {
	ValaArrayList* _tmp0_;
	ValaSourceFile* _tmp1_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (file != NULL);
	_tmp0_ = self->files;
	_tmp1_ = file;
	vala_collection_add ((ValaCollection*) _tmp0_, _tmp1_);
}


static gboolean valadoc_drivers_tree_builder_package_meta_data_is_package_for_file (ValadocDriversTreeBuilderPackageMetaData* self, ValaSourceFile* source_file) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	ValaSourceFile* _tmp1_;
	ValaSourceFileType _tmp2_;
	ValaSourceFileType _tmp3_;
	ValaArrayList* _tmp7_;
	ValaSourceFile* _tmp8_;
	gboolean _tmp9_;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (source_file != NULL, FALSE);
	_tmp1_ = source_file;
	_tmp2_ = vala_source_file_get_file_type (_tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ == VALA_SOURCE_FILE_TYPE_SOURCE) {
		ValadocApiPackage* _tmp4_;
		gboolean _tmp5_;
		gboolean _tmp6_;
		_tmp4_ = self->package;
		_tmp5_ = valadoc_api_package_get_is_package (_tmp4_);
		_tmp6_ = _tmp5_;
		_tmp0_ = !_tmp6_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	}
	_tmp7_ = self->files;
	_tmp8_ = source_file;
	_tmp9_ = vala_collection_contains ((ValaCollection*) _tmp7_, _tmp8_);
	result = _tmp9_;
	return result;
}


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


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


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


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


static gchar* valadoc_drivers_tree_builder_value_package_meta_data_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		ValadocDriversTreeBuilderPackageMetaData * 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 = valadoc_drivers_tree_builder_package_meta_data_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* valadoc_drivers_tree_builder_value_package_meta_data_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	ValadocDriversTreeBuilderPackageMetaData ** 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 = valadoc_drivers_tree_builder_package_meta_data_ref (value->data[0].v_pointer);
	}
	return NULL;
}


static GParamSpec* valadoc_drivers_tree_builder_param_spec_package_meta_data (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	ValadocDriversTreeBuilderParamSpecPackageMetaData* spec;
	g_return_val_if_fail (g_type_is_a (object_type, VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA), 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);
}


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


static void valadoc_drivers_tree_builder_value_set_package_meta_data (GValue* value, gpointer v_object) {
	ValadocDriversTreeBuilderPackageMetaData * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA));
		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;
		valadoc_drivers_tree_builder_package_meta_data_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		valadoc_drivers_tree_builder_package_meta_data_unref (old);
	}
}


static void valadoc_drivers_tree_builder_value_take_package_meta_data (GValue* value, gpointer v_object) {
	ValadocDriversTreeBuilderPackageMetaData * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA));
		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) {
		valadoc_drivers_tree_builder_package_meta_data_unref (old);
	}
}


static void valadoc_drivers_tree_builder_package_meta_data_class_init (ValadocDriversTreeBuilderPackageMetaDataClass * klass) {
	valadoc_drivers_tree_builder_package_meta_data_parent_class = g_type_class_peek_parent (klass);
	((ValadocDriversTreeBuilderPackageMetaDataClass *) klass)->finalize = valadoc_drivers_tree_builder_package_meta_data_finalize;
}


static void valadoc_drivers_tree_builder_package_meta_data_instance_init (ValadocDriversTreeBuilderPackageMetaData * self) {
	GHashFunc _tmp0_;
	GEqualFunc _tmp1_;
	GEqualFunc _tmp2_;
	ValaHashMap* _tmp3_;
	GEqualFunc _tmp4_;
	ValaArrayList* _tmp5_;
	_tmp0_ = g_direct_hash;
	_tmp1_ = g_direct_equal;
	_tmp2_ = g_direct_equal;
	_tmp3_ = vala_hash_map_new (VALA_TYPE_NAMESPACE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, VALADOC_API_TYPE_NAMESPACE, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, _tmp0_, _tmp1_, _tmp2_);
	self->namespaces = _tmp3_;
	_tmp4_ = g_direct_equal;
	_tmp5_ = vala_array_list_new (VALA_TYPE_SOURCE_FILE, (GBoxedCopyFunc) vala_source_file_ref, (GDestroyNotify) vala_source_file_unref, _tmp4_);
	self->files = _tmp5_;
	self->ref_count = 1;
}


static void valadoc_drivers_tree_builder_package_meta_data_finalize (ValadocDriversTreeBuilderPackageMetaData * obj) {
	ValadocDriversTreeBuilderPackageMetaData * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA, ValadocDriversTreeBuilderPackageMetaData);
	g_signal_handlers_destroy (self);
	_g_object_unref0 (self->package);
	_vala_map_unref0 (self->namespaces);
	_vala_iterable_unref0 (self->files);
}


static GType valadoc_drivers_tree_builder_package_meta_data_get_type (void) {
	static volatile gsize valadoc_drivers_tree_builder_package_meta_data_type_id__volatile = 0;
	if (g_once_init_enter (&valadoc_drivers_tree_builder_package_meta_data_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { valadoc_drivers_tree_builder_value_package_meta_data_init, valadoc_drivers_tree_builder_value_package_meta_data_free_value, valadoc_drivers_tree_builder_value_package_meta_data_copy_value, valadoc_drivers_tree_builder_value_package_meta_data_peek_pointer, "p", valadoc_drivers_tree_builder_value_package_meta_data_collect_value, "p", valadoc_drivers_tree_builder_value_package_meta_data_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (ValadocDriversTreeBuilderPackageMetaDataClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) valadoc_drivers_tree_builder_package_meta_data_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValadocDriversTreeBuilderPackageMetaData), 0, (GInstanceInitFunc) valadoc_drivers_tree_builder_package_meta_data_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 valadoc_drivers_tree_builder_package_meta_data_type_id;
		valadoc_drivers_tree_builder_package_meta_data_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValadocDriversTreeBuilderPackageMetaData", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&valadoc_drivers_tree_builder_package_meta_data_type_id__volatile, valadoc_drivers_tree_builder_package_meta_data_type_id);
	}
	return valadoc_drivers_tree_builder_package_meta_data_type_id__volatile;
}


static gpointer valadoc_drivers_tree_builder_package_meta_data_ref (gpointer instance) {
	ValadocDriversTreeBuilderPackageMetaData * self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}


static void valadoc_drivers_tree_builder_package_meta_data_unref (gpointer instance) {
	ValadocDriversTreeBuilderPackageMetaData * self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		VALADOC_DRIVERS_TREE_BUILDER_PACKAGE_META_DATA_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


static void valadoc_drivers_tree_builder_class_init (ValadocDriversTreeBuilderClass * klass) {
	valadoc_drivers_tree_builder_parent_class = g_type_class_peek_parent (klass);
	((ValaCodeVisitorClass *) klass)->finalize = valadoc_drivers_tree_builder_finalize;
	g_type_class_add_private (klass, sizeof (ValadocDriversTreeBuilderPrivate));
	((ValaCodeVisitorClass *) klass)->visit_namespace = (void (*) (ValaCodeVisitor *, ValaNamespace*)) valadoc_drivers_tree_builder_real_visit_namespace;
	((ValaCodeVisitorClass *) klass)->visit_class = (void (*) (ValaCodeVisitor *, ValaClass*)) valadoc_drivers_tree_builder_real_visit_class;
	((ValaCodeVisitorClass *) klass)->visit_interface = (void (*) (ValaCodeVisitor *, ValaInterface*)) valadoc_drivers_tree_builder_real_visit_interface;
	((ValaCodeVisitorClass *) klass)->visit_struct = (void (*) (ValaCodeVisitor *, ValaStruct*)) valadoc_drivers_tree_builder_real_visit_struct;
	((ValaCodeVisitorClass *) klass)->visit_field = (void (*) (ValaCodeVisitor *, ValaField*)) valadoc_drivers_tree_builder_real_visit_field;
	((ValaCodeVisitorClass *) klass)->visit_property = (void (*) (ValaCodeVisitor *, ValaProperty*)) valadoc_drivers_tree_builder_real_visit_property;
	((ValaCodeVisitorClass *) klass)->visit_creation_method = (void (*) (ValaCodeVisitor *, ValaCreationMethod*)) valadoc_drivers_tree_builder_real_visit_creation_method;
	((ValaCodeVisitorClass *) klass)->visit_method = (void (*) (ValaCodeVisitor *, ValaMethod*)) valadoc_drivers_tree_builder_real_visit_method;
	((ValaCodeVisitorClass *) klass)->visit_signal = (void (*) (ValaCodeVisitor *, ValaSignal*)) valadoc_drivers_tree_builder_real_visit_signal;
	((ValaCodeVisitorClass *) klass)->visit_delegate = (void (*) (ValaCodeVisitor *, ValaDelegate*)) valadoc_drivers_tree_builder_real_visit_delegate;
	((ValaCodeVisitorClass *) klass)->visit_enum = (void (*) (ValaCodeVisitor *, ValaEnum*)) valadoc_drivers_tree_builder_real_visit_enum;
	((ValaCodeVisitorClass *) klass)->visit_enum_value = (void (*) (ValaCodeVisitor *, ValaEnumValue*)) valadoc_drivers_tree_builder_real_visit_enum_value;
	((ValaCodeVisitorClass *) klass)->visit_constant = (void (*) (ValaCodeVisitor *, ValaConstant*)) valadoc_drivers_tree_builder_real_visit_constant;
	((ValaCodeVisitorClass *) klass)->visit_error_domain = (void (*) (ValaCodeVisitor *, ValaErrorDomain*)) valadoc_drivers_tree_builder_real_visit_error_domain;
	((ValaCodeVisitorClass *) klass)->visit_error_code = (void (*) (ValaCodeVisitor *, ValaErrorCode*)) valadoc_drivers_tree_builder_real_visit_error_code;
	((ValaCodeVisitorClass *) klass)->visit_type_parameter = (void (*) (ValaCodeVisitor *, ValaTypeParameter*)) valadoc_drivers_tree_builder_real_visit_type_parameter;
	((ValaCodeVisitorClass *) klass)->visit_formal_parameter = (void (*) (ValaCodeVisitor *, ValaParameter*)) valadoc_drivers_tree_builder_real_visit_formal_parameter;
}


static void valadoc_drivers_tree_builder_instance_init (ValadocDriversTreeBuilder * self) {
	GEqualFunc _tmp0_;
	ValaArrayList* _tmp1_;
	GHashFunc _tmp2_;
	GEqualFunc _tmp3_;
	GEqualFunc _tmp4_;
	ValaHashMap* _tmp5_;
	GHashFunc _tmp6_;
	GEqualFunc _tmp7_;
	GEqualFunc _tmp8_;
	ValaHashMap* _tmp9_;
	self->priv = VALADOC_DRIVERS_TREE_BUILDER_GET_PRIVATE (self);
	_tmp0_ = g_direct_equal;
	_tmp1_ = vala_array_list_new (VALADOC_DRIVERS_TREE_BUILDER_TYPE_PACKAGE_META_DATA, (GBoxedCopyFunc) valadoc_drivers_tree_builder_package_meta_data_ref, (GDestroyNotify) valadoc_drivers_tree_builder_package_meta_data_unref, _tmp0_);
	self->priv->packages = _tmp1_;
	_tmp2_ = g_direct_hash;
	_tmp3_ = g_direct_equal;
	_tmp4_ = g_direct_equal;
	_tmp5_ = vala_hash_map_new (VALA_TYPE_SOURCE_FILE, (GBoxedCopyFunc) vala_source_file_ref, (GDestroyNotify) vala_source_file_unref, VALADOC_API_TYPE_SOURCE_FILE, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, _tmp2_, _tmp3_, _tmp4_);
	self->priv->files = _tmp5_;
	_tmp6_ = g_direct_hash;
	_tmp7_ = g_direct_equal;
	_tmp8_ = g_direct_equal;
	_tmp9_ = vala_hash_map_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, VALADOC_API_TYPE_SYMBOL, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, _tmp6_, _tmp7_, _tmp8_);
	self->priv->symbol_map = _tmp9_;
	self->priv->glib_error = NULL;
}


static void valadoc_drivers_tree_builder_finalize (ValaCodeVisitor * obj) {
	ValadocDriversTreeBuilder * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALADOC_DRIVERS_TYPE_TREE_BUILDER, ValadocDriversTreeBuilder);
	_vala_iterable_unref0 (self->priv->packages);
	_valadoc_drivers_tree_builder_package_meta_data_unref0 (self->priv->source_package);
	_vala_map_unref0 (self->priv->files);
	_vala_map_unref0 (self->priv->symbol_map);
	_g_object_unref0 (self->priv->reporter);
	_g_object_unref0 (self->priv->settings);
	_g_object_unref0 (self->priv->current_node);
	_valadoc_api_tree_unref0 (self->priv->tree);
	_g_object_unref0 (self->priv->glib_error);
	VALA_CODE_VISITOR_CLASS (valadoc_drivers_tree_builder_parent_class)->finalize (obj);
}


/**
 * Creates an simpler, minimized, more abstract AST for valacs AST.
 */
GType valadoc_drivers_tree_builder_get_type (void) {
	static volatile gsize valadoc_drivers_tree_builder_type_id__volatile = 0;
	if (g_once_init_enter (&valadoc_drivers_tree_builder_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValadocDriversTreeBuilderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) valadoc_drivers_tree_builder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValadocDriversTreeBuilder), 0, (GInstanceInitFunc) valadoc_drivers_tree_builder_instance_init, NULL };
		GType valadoc_drivers_tree_builder_type_id;
		valadoc_drivers_tree_builder_type_id = g_type_register_static (VALA_TYPE_CODE_VISITOR, "ValadocDriversTreeBuilder", &g_define_type_info, 0);
		g_once_init_leave (&valadoc_drivers_tree_builder_type_id__volatile, valadoc_drivers_tree_builder_type_id);
	}
	return valadoc_drivers_tree_builder_type_id__volatile;
}


static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	if ((array != NULL) && (destroy_func != NULL)) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}


static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}


static gint _vala_array_length (gpointer array) {
	int length;
	length = 0;
	if (array) {
		while (((gpointer*) array)[length]) {
			length++;
		}
	}
	return length;
}



