/* valagirparser.c generated by valac, the Vala compiler * generated from valagirparser.vala, do not modify */ /* valagirparser.vala * * Copyright (C) 2008-2012 Jürg Billeter * Copyright (C) 2011-2014 Luca Bruno * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Author: * Jürg Billeter * Luca Bruno */ #include "vala.h" #include #include #include #include #include #include #include #include #include #include #define VALA_GIR_PARSER_TYPE_NODE (vala_gir_parser_node_get_type ()) #define VALA_GIR_PARSER_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_GIR_PARSER_TYPE_NODE, ValaGirParserNode)) #define VALA_GIR_PARSER_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_GIR_PARSER_TYPE_NODE, ValaGirParserNodeClass)) #define VALA_GIR_PARSER_IS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_GIR_PARSER_TYPE_NODE)) #define VALA_GIR_PARSER_IS_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_GIR_PARSER_TYPE_NODE)) #define VALA_GIR_PARSER_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_GIR_PARSER_TYPE_NODE, ValaGirParserNodeClass)) typedef struct _ValaGirParserNode ValaGirParserNode; typedef struct _ValaGirParserNodeClass ValaGirParserNodeClass; #define VALA_GIR_PARSER_TYPE_METADATA (vala_gir_parser_metadata_get_type ()) #define VALA_GIR_PARSER_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_GIR_PARSER_TYPE_METADATA, ValaGirParserMetadata)) #define VALA_GIR_PARSER_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_GIR_PARSER_TYPE_METADATA, ValaGirParserMetadataClass)) #define VALA_GIR_PARSER_IS_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_GIR_PARSER_TYPE_METADATA)) #define VALA_GIR_PARSER_IS_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_GIR_PARSER_TYPE_METADATA)) #define VALA_GIR_PARSER_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_GIR_PARSER_TYPE_METADATA, ValaGirParserMetadataClass)) typedef struct _ValaGirParserMetadata ValaGirParserMetadata; typedef struct _ValaGirParserMetadataClass ValaGirParserMetadataClass; typedef enum { VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP, VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN, VALA_GIR_PARSER_ARGUMENT_TYPE_NEW, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME, VALA_GIR_PARSER_ARGUMENT_TYPE_NAME, VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED, VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED, VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT, VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED, VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE, VALA_GIR_PARSER_ARGUMENT_TYPE_SINCE, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_NULL_TERMINATED, VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT, VALA_GIR_PARSER_ARGUMENT_TYPE_OUT, VALA_GIR_PARSER_ARGUMENT_TYPE_REF, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME, VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, VALA_GIR_PARSER_ARGUMENT_TYPE_COMPACT, VALA_GIR_PARSER_ARGUMENT_TYPE_SEALED, VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE, VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS, VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD, VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL, VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CSUFFIX, VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE, VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_NAME, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_INSTANCE, VALA_GIR_PARSER_ARGUMENT_TYPE_SYMBOL_TYPE, VALA_GIR_PARSER_ARGUMENT_TYPE_INSTANCE_IDX, VALA_GIR_PARSER_ARGUMENT_TYPE_EXPERIMENTAL, VALA_GIR_PARSER_ARGUMENT_TYPE_FEATURE_TEST_MACRO, VALA_GIR_PARSER_ARGUMENT_TYPE_FLOATING, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ID, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_GET_FUNCTION, VALA_GIR_PARSER_ARGUMENT_TYPE_RETURN_VOID, VALA_GIR_PARSER_ARGUMENT_TYPE_RETURNS_MODIFIED_POINTER, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET_CNAME, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY_NOTIFY_CNAME, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_VFUNC_NAME, VALA_GIR_PARSER_ARGUMENT_TYPE_NO_ACCESSOR_METHOD, VALA_GIR_PARSER_ARGUMENT_TYPE_NO_WRAPPER, VALA_GIR_PARSER_ARGUMENT_TYPE_CNAME, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET, VALA_GIR_PARSER_ARGUMENT_TYPE_CTYPE } ValaGirParserArgumentType; #define VALA_GIR_PARSER_TYPE_ARGUMENT_TYPE (vala_gir_parser_argument_type_get_type ()) #define _g_free0(var) (var = (g_free (var), NULL)) #define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL))) #define _g_type_class_unref0(var) ((var == NULL) ? NULL : (var = (g_type_class_unref (var), NULL))) #define _vala_markup_reader_unref0(var) ((var == NULL) ? NULL : (var = (vala_markup_reader_unref (var), NULL))) #define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL))) #define _vala_source_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_file_unref (var), NULL))) #define _vala_gir_parser_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_gir_parser_node_unref (var), NULL))) #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL))) #define _vala_gir_parser_metadata_unref0(var) ((var == NULL) ? NULL : (var = (vala_gir_parser_metadata_unref (var), NULL))) #define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL))) typedef struct _ValaGirParserNodePrivate ValaGirParserNodePrivate; #define VALA_GIR_PARSER_TYPE_PARAMETER_INFO (vala_gir_parser_parameter_info_get_type ()) #define VALA_GIR_PARSER_PARAMETER_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_GIR_PARSER_TYPE_PARAMETER_INFO, ValaGirParserParameterInfo)) #define VALA_GIR_PARSER_PARAMETER_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_GIR_PARSER_TYPE_PARAMETER_INFO, ValaGirParserParameterInfoClass)) #define VALA_GIR_PARSER_IS_PARAMETER_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_GIR_PARSER_TYPE_PARAMETER_INFO)) #define VALA_GIR_PARSER_IS_PARAMETER_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_GIR_PARSER_TYPE_PARAMETER_INFO)) #define VALA_GIR_PARSER_PARAMETER_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_GIR_PARSER_TYPE_PARAMETER_INFO, ValaGirParserParameterInfoClass)) typedef struct _ValaGirParserParameterInfo ValaGirParserParameterInfo; typedef struct _ValaGirParserParameterInfoClass ValaGirParserParameterInfoClass; #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL))) #define _vala_source_reference_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_reference_unref (var), NULL))) #define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL))) #define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL))) #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL))) #define _g_match_info_unref0(var) ((var == NULL) ? NULL : (var = (g_match_info_unref (var), NULL))) typedef struct _ValaGirParserParameterInfoPrivate ValaGirParserParameterInfoPrivate; #define VALA_GIR_PARSER_TYPE_METADATA_PARSER (vala_gir_parser_metadata_parser_get_type ()) #define VALA_GIR_PARSER_METADATA_PARSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_GIR_PARSER_TYPE_METADATA_PARSER, ValaGirParserMetadataParser)) #define VALA_GIR_PARSER_METADATA_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_GIR_PARSER_TYPE_METADATA_PARSER, ValaGirParserMetadataParserClass)) #define VALA_GIR_PARSER_IS_METADATA_PARSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_GIR_PARSER_TYPE_METADATA_PARSER)) #define VALA_GIR_PARSER_IS_METADATA_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_GIR_PARSER_TYPE_METADATA_PARSER)) #define VALA_GIR_PARSER_METADATA_PARSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_GIR_PARSER_TYPE_METADATA_PARSER, ValaGirParserMetadataParserClass)) typedef struct _ValaGirParserMetadataParser ValaGirParserMetadataParser; typedef struct _ValaGirParserMetadataParserClass ValaGirParserMetadataParserClass; #define _vala_gir_parser_metadata_parser_unref0(var) ((var == NULL) ? NULL : (var = (vala_gir_parser_metadata_parser_unref (var), NULL))) #define _vala_comment_unref0(var) ((var == NULL) ? NULL : (var = (vala_comment_unref (var), NULL))) #define _vala_gir_parser_parameter_info_unref0(var) ((var == NULL) ? NULL : (var = (vala_gir_parser_parameter_info_unref (var), NULL))) typedef struct _ValaGirParserMetadataPrivate ValaGirParserMetadataPrivate; #define VALA_GIR_PARSER_TYPE_ARGUMENT (vala_gir_parser_argument_get_type ()) #define VALA_GIR_PARSER_ARGUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_GIR_PARSER_TYPE_ARGUMENT, ValaGirParserArgument)) #define VALA_GIR_PARSER_ARGUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_GIR_PARSER_TYPE_ARGUMENT, ValaGirParserArgumentClass)) #define VALA_GIR_PARSER_IS_ARGUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_GIR_PARSER_TYPE_ARGUMENT)) #define VALA_GIR_PARSER_IS_ARGUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_GIR_PARSER_TYPE_ARGUMENT)) #define VALA_GIR_PARSER_ARGUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_GIR_PARSER_TYPE_ARGUMENT, ValaGirParserArgumentClass)) typedef struct _ValaGirParserArgument ValaGirParserArgument; typedef struct _ValaGirParserArgumentClass ValaGirParserArgumentClass; typedef struct _ValaGirParserArgumentPrivate ValaGirParserArgumentPrivate; #define _vala_gir_parser_argument_unref0(var) ((var == NULL) ? NULL : (var = (vala_gir_parser_argument_unref (var), NULL))) #define _vala_map_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_iterator_unref (var), NULL))) typedef struct _ValaGirParserParamSpecArgument ValaGirParserParamSpecArgument; #define VALA_GIR_PARSER_TYPE_METADATA_SET (vala_gir_parser_metadata_set_get_type ()) #define VALA_GIR_PARSER_METADATA_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_GIR_PARSER_TYPE_METADATA_SET, ValaGirParserMetadataSet)) #define VALA_GIR_PARSER_METADATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_GIR_PARSER_TYPE_METADATA_SET, ValaGirParserMetadataSetClass)) #define VALA_GIR_PARSER_IS_METADATA_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_GIR_PARSER_TYPE_METADATA_SET)) #define VALA_GIR_PARSER_IS_METADATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_GIR_PARSER_TYPE_METADATA_SET)) #define VALA_GIR_PARSER_METADATA_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_GIR_PARSER_TYPE_METADATA_SET, ValaGirParserMetadataSetClass)) typedef struct _ValaGirParserMetadataSet ValaGirParserMetadataSet; typedef struct _ValaGirParserMetadataSetClass ValaGirParserMetadataSetClass; typedef struct _ValaGirParserMetadataSetPrivate ValaGirParserMetadataSetPrivate; #define _g_pattern_spec_free0(var) ((var == NULL) ? NULL : (var = (g_pattern_spec_free (var), NULL))) typedef struct _ValaGirParserParamSpecMetadata ValaGirParserParamSpecMetadata; typedef struct _ValaGirParserMetadataParserPrivate ValaGirParserMetadataParserPrivate; #define _vala_scanner_unref0(var) ((var == NULL) ? NULL : (var = (vala_scanner_unref (var), NULL))) typedef struct _ValaGirParserParamSpecMetadataParser ValaGirParserParamSpecMetadataParser; typedef struct _ValaGirParserParamSpecNode ValaGirParserParamSpecNode; typedef struct _ValaGirParserParamSpecParameterInfo ValaGirParserParamSpecParameterInfo; #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 _ValaGirParserPrivate { ValaMarkupReader* reader; ValaCodeContext* context; ValaSourceFile* current_source_file; ValaGirParserNode* root; ValaArrayList* metadata_roots; ValaSourceLocation begin; ValaSourceLocation end; ValaMarkupTokenType current_token; gchar** cheader_filenames; gint cheader_filenames_length1; gint _cheader_filenames_size_; ValaArrayList* metadata_stack; ValaGirParserMetadata* metadata; ValaArrayList* tree_stack; ValaGirParserNode* current; ValaGirParserNode* old_current; ValaSet* provided_namespaces; ValaHashMap* unresolved_symbols_map; ValaArrayList* unresolved_gir_symbols; ValaHashMap* unresolved_type_arguments; ValaArrayList* ifaces_needing_object_prereq; }; struct _ValaGirParserNode { GTypeInstance parent_instance; volatile int ref_count; ValaGirParserNode* parent; gchar* element_type; gchar* name; ValaMap* girdata; ValaGirParserMetadata* metadata; ValaSourceReference* source_reference; ValaArrayList* members; ValaHashMap* scope; ValaGirComment* comment; ValaSymbol* symbol; gboolean new_symbol; gboolean merged; gboolean processed; gint return_array_length_idx; ValaList* parameters; ValaArrayList* array_length_parameters; ValaArrayList* closure_parameters; ValaArrayList* destroy_parameters; ValaUnresolvedSymbol* gtype_struct_for; ValaUnresolvedSymbol* type_struct; ValaDataType* base_type; gint array_length_idx; gboolean deprecated; guint64 deprecated_version; gchar* deprecated_since; gchar* deprecated_replacement; ValaGirParserNodePrivate * priv; }; struct _ValaGirParserNodeClass { GTypeClass parent_class; void (*finalize) (ValaGirParserNode *self); }; struct _ValaGirParserParameterInfo { GTypeInstance parent_instance; volatile int ref_count; ValaParameter* param; gfloat vala_idx; gint array_length_idx; gint closure_idx; gint destroy_idx; gboolean keep; gboolean is_async; gboolean is_async_result; gboolean is_error; ValaGirParserParameterInfoPrivate * priv; }; struct _ValaGirParserParameterInfoClass { GTypeClass parent_class; void (*finalize) (ValaGirParserParameterInfo *self); }; struct _ValaGirParserMetadata { GTypeInstance parent_instance; volatile int ref_count; GPatternSpec* pattern_spec; gchar* selector; ValaSourceReference* source_reference; gboolean used; ValaMap* args; ValaArrayList* children; ValaGirParserMetadataPrivate * priv; }; struct _ValaGirParserMetadataClass { GTypeClass parent_class; void (*finalize) (ValaGirParserMetadata *self); }; struct _ValaGirParserArgument { GTypeInstance parent_instance; volatile int ref_count; ValaExpression* expression; ValaSourceReference* source_reference; gboolean used; ValaGirParserArgumentPrivate * priv; }; struct _ValaGirParserArgumentClass { GTypeClass parent_class; void (*finalize) (ValaGirParserArgument *self); }; struct _ValaGirParserParamSpecArgument { GParamSpec parent_instance; }; struct _ValaGirParserMetadataSet { ValaGirParserMetadata parent_instance; ValaGirParserMetadataSetPrivate * priv; }; struct _ValaGirParserMetadataSetClass { ValaGirParserMetadataClass parent_class; }; struct _ValaGirParserParamSpecMetadata { GParamSpec parent_instance; }; struct _ValaGirParserMetadataParser { GTypeInstance parent_instance; volatile int ref_count; ValaGirParserMetadataParserPrivate * priv; }; struct _ValaGirParserMetadataParserClass { GTypeClass parent_class; void (*finalize) (ValaGirParserMetadataParser *self); }; struct _ValaGirParserMetadataParserPrivate { ValaGirParserMetadata* tree; ValaScanner* scanner; ValaSourceLocation begin; ValaSourceLocation end; ValaSourceLocation old_end; ValaTokenType current; ValaGirParserMetadata* parent_metadata; }; struct _ValaGirParserParamSpecMetadataParser { GParamSpec parent_instance; }; struct _ValaGirParserParamSpecNode { GParamSpec parent_instance; }; struct _ValaGirParserParamSpecParameterInfo { GParamSpec parent_instance; }; static gint ValaGirParser_private_offset; static gpointer vala_gir_parser_parent_class = NULL; static GRegex* vala_gir_parser_type_from_string_regex; static GRegex* vala_gir_parser_type_from_string_regex = NULL; static ValaArrayList* vala_gir_parser_node_new_namespaces; static gpointer vala_gir_parser_argument_parent_class = NULL; static gpointer vala_gir_parser_metadata_set_parent_class = NULL; static gpointer vala_gir_parser_metadata_parent_class = NULL; static ValaGirParserMetadata* vala_gir_parser_metadata__empty; static ValaGirParserMetadata* vala_gir_parser_metadata__empty = NULL; static gint ValaGirParserMetadataParser_private_offset; static gpointer vala_gir_parser_metadata_parser_parent_class = NULL; static gpointer vala_gir_parser_node_parent_class = NULL; static ValaArrayList* vala_gir_parser_node_new_namespaces = NULL; static gpointer vala_gir_parser_parameter_info_parent_class = NULL; static gpointer vala_gir_parser_node_ref (gpointer instance); static void vala_gir_parser_node_unref (gpointer instance); static GParamSpec* vala_gir_parser_param_spec_node (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED; static void vala_gir_parser_value_set_node (GValue* value, gpointer v_object) G_GNUC_UNUSED; static void vala_gir_parser_value_take_node (GValue* value, gpointer v_object) G_GNUC_UNUSED; static gpointer vala_gir_parser_value_get_node (const GValue* value) G_GNUC_UNUSED; static GType vala_gir_parser_node_get_type (void) G_GNUC_CONST G_GNUC_UNUSED; static gpointer vala_gir_parser_metadata_ref (gpointer instance); static void vala_gir_parser_metadata_unref (gpointer instance); static GParamSpec* vala_gir_parser_param_spec_metadata (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED; static void vala_gir_parser_value_set_metadata (GValue* value, gpointer v_object) G_GNUC_UNUSED; static void vala_gir_parser_value_take_metadata (GValue* value, gpointer v_object) G_GNUC_UNUSED; static gpointer vala_gir_parser_value_get_metadata (const GValue* value) G_GNUC_UNUSED; static GType vala_gir_parser_metadata_get_type (void) G_GNUC_CONST G_GNUC_UNUSED; static GType vala_gir_parser_argument_type_get_type (void) G_GNUC_CONST G_GNUC_UNUSED; static ValaGirParserArgumentType* vala_gir_parser_argument_type_from_string (const gchar* name); static ValaGirParserArgumentType* _vala_gir_parser_argument_type_dup (ValaGirParserArgumentType* self); #define VALA_GIR_PARSER_GIR_VERSION "1.2" static guint vala_gir_parser_unresolved_symbol_hash (ValaUnresolvedSymbol* sym); static guint _vala_gir_parser_unresolved_symbol_hash_ghash_func (gconstpointer key); static gboolean vala_gir_parser_unresolved_symbol_equal (ValaUnresolvedSymbol* sym1, ValaUnresolvedSymbol* sym2); static gboolean _vala_gir_parser_unresolved_symbol_equal_gequal_func (gconstpointer a, gconstpointer b); static ValaGirParserNode* vala_gir_parser_node_new (const gchar* name); static ValaGirParserNode* vala_gir_parser_node_construct (GType object_type, const gchar* name); static gpointer vala_gir_parser_parameter_info_ref (gpointer instance); static void vala_gir_parser_parameter_info_unref (gpointer instance); static GParamSpec* vala_gir_parser_param_spec_parameter_info (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED; static void vala_gir_parser_value_set_parameter_info (GValue* value, gpointer v_object) G_GNUC_UNUSED; static void vala_gir_parser_value_take_parameter_info (GValue* value, gpointer v_object) G_GNUC_UNUSED; static gpointer vala_gir_parser_value_get_parameter_info (const GValue* value) G_GNUC_UNUSED; static GType vala_gir_parser_parameter_info_get_type (void) G_GNUC_CONST G_GNUC_UNUSED; static void vala_gir_parser_map_vala_to_gir (ValaGirParser* self); static void vala_gir_parser_resolve_gir_symbols (ValaGirParser* self); static void vala_gir_parser_create_new_namespaces (ValaGirParser* self); static void vala_gir_parser_resolve_type_arguments (ValaGirParser* self); static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser* parser); static void vala_gir_parser_report_unused_metadata (ValaGirParser* self, ValaGirParserMetadata* metadata); static void vala_gir_parser_set_symbol_mapping (ValaGirParser* self, ValaUnresolvedSymbol* map_from, ValaSymbol* map_to); static void vala_gir_parser_real_visit_source_file (ValaCodeVisitor* base, ValaSourceFile* source_file); static ValaGirParserMetadata* vala_gir_parser_metadata_get_empty (void); static void vala_gir_parser_next (ValaGirParser* self); static ValaSourceReference* vala_gir_parser_get_current_src (ValaGirParser* self); static void vala_gir_parser_parse_repository (ValaGirParser* self); static void vala_gir_parser_start_element (ValaGirParser* self, const gchar* name); static void vala_gir_parser_end_element (ValaGirParser* self, const gchar* name); static void vala_gir_parser_skip_element (ValaGirParser* self); static ValaSourceReference* vala_gir_parser_get_src (ValaGirParser* self, ValaSourceLocation* begin, ValaSourceLocation* end); static void vala_gir_parser_add_symbol_to_container (ValaSymbol* container, ValaSymbol* sym); static gboolean vala_gir_parser_is_container (ValaSymbol* sym); static ValaUnresolvedSymbol* vala_gir_parser_parse_symbol_from_string (ValaGirParser* self, const gchar* symbol_string, ValaSourceReference* source_reference); static void vala_gir_parser_assume_parameter_names (ValaGirParser* self, ValaSignal* sig, ValaSymbol* sym, gboolean skip_first); static ValaGirParserNode* vala_gir_parser_find_invoker (ValaGirParser* self, ValaGirParserNode* node); static ValaGirParserMetadata* vala_gir_parser_get_current_metadata (ValaGirParser* self); static ValaGirParserMetadata* vala_gir_parser_metadata_match_child (ValaGirParserMetadata* self, const gchar* name, const gchar* selector); static gboolean vala_gir_parser_push_metadata (ValaGirParser* self); static gboolean vala_gir_parser_metadata_has_argument (ValaGirParserMetadata* self, ValaGirParserArgumentType key); static gboolean vala_gir_parser_metadata_get_bool (ValaGirParserMetadata* self, ValaGirParserArgumentType arg, gboolean default_value); static void vala_gir_parser_pop_metadata (ValaGirParser* self); static gboolean vala_gir_parser_parse_type_arguments_from_string (ValaGirParser* self, ValaDataType* parent_type, const gchar* type_arguments, ValaSourceReference* source_reference); static ValaDataType* vala_gir_parser_parse_type_from_string (ValaGirParser* self, const gchar* type_string, gboolean owned_by_default, ValaSourceReference* source_reference); static gchar* vala_gir_parser_element_get_string (ValaGirParser* self, const gchar* attribute_name, ValaGirParserArgumentType arg_type); static gchar* vala_gir_parser_metadata_get_string (ValaGirParserMetadata* self, ValaGirParserArgumentType arg); static ValaDataType* vala_gir_parser_element_get_type (ValaGirParser* self, ValaDataType* orig_type, gboolean owned_by_default, gboolean* no_array_length, gboolean* array_null_terminated, gboolean* changed); static ValaSourceReference* vala_gir_parser_metadata_get_source_reference (ValaGirParserMetadata* self, ValaGirParserArgumentType arg); static gchar* vala_gir_parser_element_get_name (ValaGirParser* self, const gchar* gir_name); static gchar* vala_gir_parser_element_get_type_id (ValaGirParser* self); static void vala_gir_parser_set_array_ccode (ValaGirParser* self, ValaSymbol* sym, ValaGirParserParameterInfo* info); static ValaGirParserNode* vala_gir_parser_node_lookup (ValaGirParserNode* self, const gchar* name, gboolean create_namespace, ValaSourceReference* source_reference); static gchar* vala_gir_parser_node_get_cname (ValaGirParserNode* self); static void vala_gir_parser_set_type_id_ccode (ValaGirParser* self, ValaSymbol* sym); static void vala_gir_parser_parse_namespace (ValaGirParser* self); static void vala_gir_parser_parse_include (ValaGirParser* self); static gchar* vala_gir_parser_parse_package (ValaGirParser* self); static void vala_gir_parser_parse_c_include (ValaGirParser* self); static void _vala_array_add1 (gchar** * array, gint* length, gint* size, gchar* value); static ValaGirParserNode* vala_gir_parser_resolve_node (ValaGirParser* self, ValaGirParserNode* parent_scope, ValaUnresolvedSymbol* unresolved_sym, gboolean create_namespace); static ValaSymbol* vala_gir_parser_resolve_symbol (ValaGirParser* self, ValaGirParserNode* parent_scope, ValaUnresolvedSymbol* unresolved_sym); static void vala_gir_parser_push_node (ValaGirParser* self, const gchar* name, gboolean merge); static void vala_gir_parser_node_add_member (ValaGirParserNode* self, ValaGirParserNode* node); static gchar* vala_gir_parser_node_get_gir_name (ValaGirParserNode* self); static ValaUnresolvedSymbol* vala_gir_parser_node_get_unresolved_symbol (ValaGirParserNode* self); static void vala_gir_parser_pop_node (ValaGirParser* self); static gpointer vala_gir_parser_metadata_parser_ref (gpointer instance); static void vala_gir_parser_metadata_parser_unref (gpointer instance); static GParamSpec* vala_gir_parser_param_spec_metadata_parser (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED; static void vala_gir_parser_value_set_metadata_parser (GValue* value, gpointer v_object) G_GNUC_UNUSED; static void vala_gir_parser_value_take_metadata_parser (GValue* value, gpointer v_object) G_GNUC_UNUSED; static gpointer vala_gir_parser_value_get_metadata_parser (const GValue* value) G_GNUC_UNUSED; static GType vala_gir_parser_metadata_parser_get_type (void) G_GNUC_CONST G_GNUC_UNUSED; static ValaGirParserMetadataParser* vala_gir_parser_metadata_parser_new (void); static ValaGirParserMetadataParser* vala_gir_parser_metadata_parser_construct (GType object_type); static ValaGirParserMetadata* vala_gir_parser_metadata_parser_parse_metadata (ValaGirParserMetadataParser* self, ValaSourceFile* metadata_file); static void _vala_code_node_unref0_ (gpointer var); static inline void _g_list_free__vala_code_node_unref0_ (GList* self); static void vala_gir_parser_parse_alias (ValaGirParser* self); static void vala_gir_parser_parse_error_domain (ValaGirParser* self); static void vala_gir_parser_parse_enumeration (ValaGirParser* self, const gchar* element_name, gboolean error_domain); static void vala_gir_parser_parse_bitfield (ValaGirParser* self); static void vala_gir_parser_parse_method (ValaGirParser* self, const gchar* element_name); static void vala_gir_parser_parse_callback (ValaGirParser* self); static void vala_gir_parser_parse_record (ValaGirParser* self); static void vala_gir_parser_parse_boxed (ValaGirParser* self, const gchar* element_name); static void vala_gir_parser_parse_class (ValaGirParser* self); static void vala_gir_parser_parse_interface (ValaGirParser* self); static void vala_gir_parser_parse_union (ValaGirParser* self); static void vala_gir_parser_parse_constant (ValaGirParser* self); static ValaGirComment* vala_gir_parser_parse_symbol_doc (ValaGirParser* self); static ValaDataType* vala_gir_parser_parse_type (ValaGirParser* self, gchar* * ctype, gint* array_length_idx, gboolean transfer_elements, gboolean* no_array_length, gboolean* array_null_terminated); static void vala_gir_parser_calculate_common_prefix (ValaGirParser* self, gchar* * common_prefix, const gchar* cname); static ValaComment* vala_gir_parser_parse_doc (ValaGirParser* self); static void vala_gir_parser_parse_error_member (ValaGirParser* self); static void vala_gir_parser_parse_enumeration_member (ValaGirParser* self); static ValaExpression* vala_gir_parser_metadata_get_expression (ValaGirParserMetadata* self, ValaGirParserArgumentType arg); static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gchar* * ctype, gint* array_length_idx, gboolean* no_array_length, gboolean* array_null_terminated, ValaComment* * comment); static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint* array_length_idx, gint* closure_idx, gint* destroy_idx, gchar* * scope, ValaComment* * comment, const gchar* default_name); static gint vala_gir_parser_metadata_get_integer (ValaGirParserMetadata* self, ValaGirParserArgumentType arg); static ValaDataType* vala_gir_parser_parse_type_from_gir_name (ValaGirParser* self, const gchar* type_name, gboolean* no_array_length, gboolean* array_null_terminated, const gchar* ctype); static void vala_gir_parser_parse_field (ValaGirParser* self); static void vala_gir_parser_parse_constructor (ValaGirParser* self); static ValaProperty* vala_gir_parser_parse_property (ValaGirParser* self); static void vala_gir_parser_parse_signal (ValaGirParser* self); static void vala_gir_parser_parse_function (ValaGirParser* self, const gchar* element_name); G_GNUC_INTERNAL void vala_gir_comment_add_content_for_parameter (ValaGirComment* self, const gchar* name, ValaComment* comment); static ValaGirParserParameterInfo* vala_gir_parser_parameter_info_new (ValaParameter* param, gint array_length_idx, gint closure_idx, gint destroy_idx, gboolean is_async); static ValaGirParserParameterInfo* vala_gir_parser_parameter_info_construct (GType object_type, ValaParameter* param, gint array_length_idx, gint closure_idx, gint destroy_idx, gboolean is_async); static gpointer vala_gir_parser_argument_ref (gpointer instance); static void vala_gir_parser_argument_unref (gpointer instance); static GParamSpec* vala_gir_parser_param_spec_argument (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED; static void vala_gir_parser_value_set_argument (GValue* value, gpointer v_object) G_GNUC_UNUSED; static void vala_gir_parser_value_take_argument (GValue* value, gpointer v_object) G_GNUC_UNUSED; static gpointer vala_gir_parser_value_get_argument (const GValue* value) G_GNUC_UNUSED; static GType vala_gir_parser_argument_get_type (void) G_GNUC_CONST G_GNUC_UNUSED; static void vala_gir_parser_process_interface (ValaGirParser* self, ValaGirParserNode* iface_node); static void vala_gir_parser_process_alias (ValaGirParser* self, ValaGirParserNode* alias); static gchar* vala_gir_parser_node_get_full_name (ValaGirParserNode* self); static void vala_gir_parser_process_callable (ValaGirParser* self, ValaGirParserNode* node); static void vala_gir_parser_find_parent (ValaGirParser* self, const gchar* cname, ValaGirParserNode* current, ValaGirParserNode* * best, gint* match); static gchar* vala_gir_parser_node_get_lower_case_cprefix (ValaGirParserNode* self); static gboolean vala_gir_parser_same_gir (ValaGirParser* self, ValaSymbol* gir_component, ValaSymbol* sym); static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaGirParserNode* ns, ValaGirParserNode* node); static void vala_gir_parser_node_remove_member (ValaGirParserNode* self, ValaGirParserNode* node); static void vala_gir_parser_process_virtual_method_field (ValaGirParser* self, ValaGirParserNode* node, ValaDelegate* d, ValaUnresolvedSymbol* gtype_struct_for); static gchar* vala_gir_parser_node_to_string (ValaGirParserNode* self); static ValaArrayList* vala_gir_parser_node_lookup_all (ValaGirParserNode* self, const gchar* name); static void vala_gir_parser_process_async_method (ValaGirParser* self, ValaGirParserNode* node); static gchar* vala_gir_parser_node_get_finish_cname (ValaGirParserNode* self); static ValaGirParserNode* vala_gir_parser_base_interface_property (ValaGirParser* self, ValaGirParserNode* prop_node); static ValaGirParserArgument* vala_gir_parser_argument_new (ValaExpression* expression, ValaSourceReference* source_reference); static ValaGirParserArgument* vala_gir_parser_argument_construct (GType object_type, ValaExpression* expression, ValaSourceReference* source_reference); static void vala_gir_parser_argument_finalize (ValaGirParserArgument * obj); static GType vala_gir_parser_argument_get_type_once (void); static GType vala_gir_parser_metadata_set_get_type (void) G_GNUC_CONST G_GNUC_UNUSED; static ValaGirParserMetadataSet* vala_gir_parser_metadata_set_new (const gchar* selector); static ValaGirParserMetadataSet* vala_gir_parser_metadata_set_construct (GType object_type, const gchar* selector); static ValaGirParserMetadata* vala_gir_parser_metadata_new (const gchar* pattern, const gchar* selector, ValaSourceReference* source_reference); static ValaGirParserMetadata* vala_gir_parser_metadata_construct (GType object_type, const gchar* pattern, const gchar* selector, ValaSourceReference* source_reference); static void vala_gir_parser_metadata_set_add_sibling (ValaGirParserMetadataSet* self, ValaGirParserMetadata* metadata); static void vala_gir_parser_metadata_add_child (ValaGirParserMetadata* self, ValaGirParserMetadata* metadata); static GType vala_gir_parser_metadata_set_get_type_once (void); static void vala_gir_parser_metadata_add_argument (ValaGirParserMetadata* self, ValaGirParserArgumentType key, ValaGirParserArgument* value); static void vala_gir_parser_metadata_finalize (ValaGirParserMetadata * obj); static GType vala_gir_parser_metadata_get_type_once (void); static ValaSourceReference* vala_gir_parser_metadata_parser_get_current_src (ValaGirParserMetadataParser* self); static ValaSourceReference* vala_gir_parser_metadata_parser_get_src (ValaGirParserMetadataParser* self, ValaSourceLocation* begin, ValaSourceLocation* end); static ValaTokenType vala_gir_parser_metadata_parser_next (ValaGirParserMetadataParser* self); static gboolean vala_gir_parser_metadata_parser_parse_rule (ValaGirParserMetadataParser* self); static gboolean vala_gir_parser_metadata_parser_has_space (ValaGirParserMetadataParser* self); static gboolean vala_gir_parser_metadata_parser_has_newline (ValaGirParserMetadataParser* self); static gchar* vala_gir_parser_metadata_parser_get_string (ValaGirParserMetadataParser* self, ValaSourceLocation* begin, ValaSourceLocation* end); static gchar* vala_gir_parser_metadata_parser_parse_identifier (ValaGirParserMetadataParser* self, gboolean is_glob); static gchar* vala_gir_parser_metadata_parser_parse_selector (ValaGirParserMetadataParser* self); static ValaGirParserMetadata* vala_gir_parser_metadata_parser_parse_pattern (ValaGirParserMetadataParser* self); static ValaExpression* vala_gir_parser_metadata_parser_parse_expression (ValaGirParserMetadataParser* self); static gboolean vala_gir_parser_metadata_parser_parse_args (ValaGirParserMetadataParser* self, ValaGirParserMetadata* metadata); static void vala_gir_parser_metadata_parser_finalize (ValaGirParserMetadataParser * obj); static GType vala_gir_parser_metadata_parser_get_type_once (void); static gchar* vala_gir_parser_node_get_default_gir_name (ValaGirParserNode* self); static gchar* vala_gir_parser_node_get_default_lower_case_cprefix (ValaGirParserNode* self); static gchar* vala_gir_parser_node_get_lower_case_csuffix (ValaGirParserNode* self); static gchar* vala_gir_parser_node_get_default_lower_case_csuffix (ValaGirParserNode* self); static gchar* vala_gir_parser_node_get_cprefix (ValaGirParserNode* self); static gchar* vala_gir_parser_node_get_default_cname (ValaGirParserNode* self); static gchar* vala_gir_parser_node_get_cheader_filename (ValaGirParserNode* self); static guint64 vala_gir_parser_node_parse_version_string (const gchar* version); static void vala_gir_parser_node_move_class_methods (ValaGirParserNode* target, ValaGirParserNode* source); static void vala_gir_parser_node_finalize (ValaGirParserNode * obj); static GType vala_gir_parser_node_get_type_once (void); static void vala_gir_parser_parameter_info_finalize (ValaGirParserParameterInfo * obj); static GType vala_gir_parser_parameter_info_get_type_once (void); static void vala_gir_parser_finalize (ValaCodeVisitor * obj); static GType vala_gir_parser_get_type_once (void); 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 inline gpointer vala_gir_parser_get_instance_private (ValaGirParser* self) { return G_STRUCT_MEMBER_P (self, ValaGirParser_private_offset); } static gchar* string_replace (const gchar* self, const gchar* old, const gchar* replacement) { gboolean _tmp0_ = FALSE; gboolean _tmp1_ = FALSE; GError* _inner_error0_ = NULL; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (old != NULL, NULL); g_return_val_if_fail (replacement != NULL, NULL); if ((*((gchar*) self)) == '\0') { _tmp1_ = TRUE; } else { _tmp1_ = (*((gchar*) old)) == '\0'; } if (_tmp1_) { _tmp0_ = TRUE; } else { _tmp0_ = g_strcmp0 (old, replacement) == 0; } if (_tmp0_) { gchar* _tmp2_; _tmp2_ = g_strdup (self); result = _tmp2_; return result; } { GRegex* regex = NULL; gchar* _tmp3_; gchar* _tmp4_; GRegex* _tmp5_; GRegex* _tmp6_; gchar* _tmp7_ = NULL; GRegex* _tmp8_; gchar* _tmp9_; gchar* _tmp10_; _tmp3_ = g_regex_escape_string (old, -1); _tmp4_ = _tmp3_; _tmp5_ = g_regex_new (_tmp4_, 0, 0, &_inner_error0_); _tmp6_ = _tmp5_; _g_free0 (_tmp4_); regex = _tmp6_; if (G_UNLIKELY (_inner_error0_ != NULL)) { _g_free0 (_tmp7_); _g_regex_unref0 (regex); if (_inner_error0_->domain == G_REGEX_ERROR) { goto __catch0_g_regex_error; } g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); g_clear_error (&_inner_error0_); return NULL; } _tmp8_ = regex; _tmp9_ = g_regex_replace_literal (_tmp8_, self, (gssize) -1, 0, replacement, 0, &_inner_error0_); _tmp7_ = _tmp9_; if (G_UNLIKELY (_inner_error0_ != NULL)) { _g_free0 (_tmp7_); _g_regex_unref0 (regex); if (_inner_error0_->domain == G_REGEX_ERROR) { goto __catch0_g_regex_error; } g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); g_clear_error (&_inner_error0_); return NULL; } _tmp10_ = _tmp7_; _tmp7_ = NULL; result = _tmp10_; _g_free0 (_tmp7_); _g_regex_unref0 (regex); return result; } goto __finally0; __catch0_g_regex_error: { g_clear_error (&_inner_error0_); g_assert_not_reached (); } __finally0: g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); g_clear_error (&_inner_error0_); return NULL; } static ValaGirParserArgumentType* _vala_gir_parser_argument_type_dup (ValaGirParserArgumentType* self) { ValaGirParserArgumentType* dup; dup = g_new0 (ValaGirParserArgumentType, 1); memcpy (dup, self, sizeof (ValaGirParserArgumentType)); return dup; } static gpointer __vala_gir_parser_argument_type_dup0 (gpointer self) { return self ? _vala_gir_parser_argument_type_dup (self) : NULL; } static ValaGirParserArgumentType* vala_gir_parser_argument_type_from_string (const gchar* name) { GEnumClass* enum_class = NULL; GTypeClass* _tmp0_; gchar* nick = NULL; gchar* _tmp1_; GEnumValue* enum_value = NULL; GEnumClass* _tmp2_; const gchar* _tmp3_; GEnumValue* _tmp4_; ValaGirParserArgumentType* result = NULL; g_return_val_if_fail (name != NULL, NULL); _tmp0_ = g_type_class_ref (VALA_GIR_PARSER_TYPE_ARGUMENT_TYPE); enum_class = (GEnumClass*) _tmp0_; _tmp1_ = string_replace (name, "_", "-"); nick = _tmp1_; _tmp2_ = enum_class; _tmp3_ = nick; enum_value = g_enum_get_value_by_nick (_tmp2_, _tmp3_); _tmp4_ = enum_value; if (_tmp4_ != NULL) { ValaGirParserArgumentType value = 0; GEnumValue* _tmp5_; ValaGirParserArgumentType* _tmp6_; _tmp5_ = enum_value; value = (ValaGirParserArgumentType) (*_tmp5_).value; _tmp6_ = __vala_gir_parser_argument_type_dup0 (&value); result = _tmp6_; _g_free0 (nick); _g_type_class_unref0 (enum_class); return result; } result = NULL; _g_free0 (nick); _g_type_class_unref0 (enum_class); return result; } static GType vala_gir_parser_argument_type_get_type_once (void) { static const GEnumValue values[] = {{VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP, "VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP", "skip"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN, "VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN", "hidden"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NEW, "VALA_GIR_PARSER_ARGUMENT_TYPE_NEW", "new"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE", "type"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS", "type-arguments"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME", "cheader-filename"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_NAME", "name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED, "VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED", "owned"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED, "VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED", "unowned"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT, "VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT", "parent"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE, "VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE", "nullable"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED", "deprecated"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT, "VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT", "replacement"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE", "deprecated-since"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SINCE, "VALA_GIR_PARSER_ARGUMENT_TYPE_SINCE", "since"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY", "array"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX", "array-length-idx"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_NULL_TERMINATED, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_NULL_TERMINATED", "array-null-terminated"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT", "default"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_OUT, "VALA_GIR_PARSER_ARGUMENT_TYPE_OUT", "out"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_REF, "VALA_GIR_PARSER_ARGUMENT_TYPE_REF", "ref"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME", "vfunc-name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL, "VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL", "virtual"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, "VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT", "abstract"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_COMPACT, "VALA_GIR_PARSER_ARGUMENT_TYPE_COMPACT", "compact"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SEALED, "VALA_GIR_PARSER_ARGUMENT_TYPE_SEALED", "sealed"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE", "scope"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT, "VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT", "struct"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS, "VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS", "throws"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT, "VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT", "printf-format"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD", "array-length-field"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL, "VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL", "sentinel"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE, "VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE", "closure"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY, "VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY", "destroy"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX, "VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX", "cprefix"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX, "VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX", "lower-case-cprefix"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CSUFFIX, "VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CSUFFIX", "lower-case-csuffix"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN, "VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN", "errordomain"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE, "VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE", "destroys-instance"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE", "base-type"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_NAME", "finish-name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_INSTANCE, "VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_INSTANCE", "finish-instance"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SYMBOL_TYPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_SYMBOL_TYPE", "symbol-type"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_INSTANCE_IDX, "VALA_GIR_PARSER_ARGUMENT_TYPE_INSTANCE_IDX", "instance-idx"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_EXPERIMENTAL, "VALA_GIR_PARSER_ARGUMENT_TYPE_EXPERIMENTAL", "experimental"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_FEATURE_TEST_MACRO, "VALA_GIR_PARSER_ARGUMENT_TYPE_FEATURE_TEST_MACRO", "feature-test-macro"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_FLOATING, "VALA_GIR_PARSER_ARGUMENT_TYPE_FLOATING", "floating"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ID, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ID", "type-id"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_GET_FUNCTION, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_GET_FUNCTION", "type-get-function"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_RETURN_VOID, "VALA_GIR_PARSER_ARGUMENT_TYPE_RETURN_VOID", "return-void"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_RETURNS_MODIFIED_POINTER, "VALA_GIR_PARSER_ARGUMENT_TYPE_RETURNS_MODIFIED_POINTER", "returns-modified-pointer"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET_CNAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET_CNAME", "delegate-target-cname"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY_NOTIFY_CNAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY_NOTIFY_CNAME", "destroy-notify-cname"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_VFUNC_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_VFUNC_NAME", "finish-vfunc-name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NO_ACCESSOR_METHOD, "VALA_GIR_PARSER_ARGUMENT_TYPE_NO_ACCESSOR_METHOD", "no-accessor-method"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NO_WRAPPER, "VALA_GIR_PARSER_ARGUMENT_TYPE_NO_WRAPPER", "no-wrapper"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CNAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_CNAME", "cname"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET, "VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET", "delegate-target"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CTYPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_CTYPE", "ctype"}, {0, NULL, NULL}}; GType vala_gir_parser_argument_type_type_id; vala_gir_parser_argument_type_type_id = g_enum_register_static ("ValaGirParserArgumentType", values); return vala_gir_parser_argument_type_type_id; } static GType vala_gir_parser_argument_type_get_type (void) { static volatile gsize vala_gir_parser_argument_type_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_argument_type_type_id__volatile)) { GType vala_gir_parser_argument_type_type_id; vala_gir_parser_argument_type_type_id = vala_gir_parser_argument_type_get_type_once (); g_once_init_leave (&vala_gir_parser_argument_type_type_id__volatile, vala_gir_parser_argument_type_type_id); } return vala_gir_parser_argument_type_type_id__volatile; } static guint _vala_gir_parser_unresolved_symbol_hash_ghash_func (gconstpointer key) { guint result; result = vala_gir_parser_unresolved_symbol_hash ((ValaUnresolvedSymbol*) key); return result; } static gboolean _vala_gir_parser_unresolved_symbol_equal_gequal_func (gconstpointer a, gconstpointer b) { gboolean result; result = vala_gir_parser_unresolved_symbol_equal ((ValaUnresolvedSymbol*) a, (ValaUnresolvedSymbol*) b); return result; } /** * Parses all .gir source files in the specified code * context and builds a code tree. * * @param context a code context */ static gpointer _vala_code_context_ref0 (gpointer self) { return self ? vala_code_context_ref (self) : NULL; } static gpointer _vala_code_node_ref0 (gpointer self) { return self ? vala_code_node_ref (self) : NULL; } static gpointer _vala_gir_parser_node_ref0 (gpointer self) { return self ? vala_gir_parser_node_ref (self) : NULL; } static gpointer _vala_iterable_ref0 (gpointer self) { return self ? vala_iterable_ref (self) : NULL; } void vala_gir_parser_parse (ValaGirParser* self, ValaCodeContext* context) { ValaCodeContext* _tmp0_; ValaGirParserNode* _tmp1_; ValaGirParserNode* _tmp2_; ValaNamespace* _tmp3_; ValaNamespace* _tmp4_; ValaSymbol* _tmp5_; GEqualFunc _tmp6_; ValaArrayList* _tmp7_; ValaGirParserNode* _tmp8_; ValaGirParserNode* _tmp9_; ValaGirParserNode* _tmp10_; ValaNamespace* glib_ns = NULL; ValaNamespace* _tmp11_; ValaNamespace* _tmp12_; ValaScope* _tmp13_; ValaScope* _tmp14_; ValaSymbol* _tmp15_; ValaNamespace* _tmp16_; ValaNamespace* _tmp17_; g_return_if_fail (self != NULL); g_return_if_fail (context != NULL); _tmp0_ = _vala_code_context_ref0 (context); _vala_code_context_unref0 (self->priv->context); self->priv->context = _tmp0_; _tmp1_ = vala_gir_parser_node_new (NULL); _vala_gir_parser_node_unref0 (self->priv->root); self->priv->root = _tmp1_; _tmp2_ = self->priv->root; _tmp3_ = vala_code_context_get_root (context); _tmp4_ = _tmp3_; _tmp5_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp4_); _vala_code_node_unref0 (_tmp2_->symbol); _tmp2_->symbol = _tmp5_; _tmp6_ = g_direct_equal; _tmp7_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_NODE, (GBoxedCopyFunc) vala_gir_parser_node_ref, (GDestroyNotify) vala_gir_parser_node_unref, _tmp6_); _vala_iterable_unref0 (self->priv->tree_stack); self->priv->tree_stack = _tmp7_; _tmp8_ = self->priv->root; _tmp9_ = _vala_gir_parser_node_ref0 (_tmp8_); _vala_gir_parser_node_unref0 (self->priv->current); self->priv->current = _tmp9_; vala_gir_parser_map_vala_to_gir (self); vala_code_context_accept (context, (ValaCodeVisitor*) self); vala_gir_parser_resolve_gir_symbols (self); vala_gir_parser_create_new_namespaces (self); vala_gir_parser_resolve_type_arguments (self); _tmp10_ = self->priv->root; vala_gir_parser_node_process (_tmp10_, self); _tmp11_ = vala_code_context_get_root (context); _tmp12_ = _tmp11_; _tmp13_ = vala_symbol_get_scope ((ValaSymbol*) _tmp12_); _tmp14_ = _tmp13_; _tmp15_ = vala_scope_lookup (_tmp14_, "GLib"); _tmp16_ = VALA_IS_NAMESPACE (_tmp15_) ? ((ValaNamespace*) _tmp15_) : NULL; if (_tmp16_ == NULL) { _vala_code_node_unref0 (_tmp15_); } glib_ns = _tmp16_; _tmp17_ = glib_ns; if (_tmp17_ != NULL) { ValaClass* object_type = NULL; ValaNamespace* _tmp18_; ValaScope* _tmp19_; ValaScope* _tmp20_; ValaSymbol* _tmp21_; _tmp18_ = glib_ns; _tmp19_ = vala_symbol_get_scope ((ValaSymbol*) _tmp18_); _tmp20_ = _tmp19_; _tmp21_ = vala_scope_lookup (_tmp20_, "Object"); object_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_CLASS, ValaClass); { ValaArrayList* _iface_list = NULL; ValaArrayList* _tmp22_; ValaArrayList* _tmp23_; gint _iface_size = 0; ValaArrayList* _tmp24_; gint _tmp25_; gint _tmp26_; gint _iface_index = 0; _tmp22_ = self->priv->ifaces_needing_object_prereq; _tmp23_ = _vala_iterable_ref0 (_tmp22_); _iface_list = _tmp23_; _tmp24_ = _iface_list; _tmp25_ = vala_collection_get_size ((ValaCollection*) _tmp24_); _tmp26_ = _tmp25_; _iface_size = _tmp26_; _iface_index = -1; while (TRUE) { gint _tmp27_; gint _tmp28_; ValaInterface* iface = NULL; ValaArrayList* _tmp29_; gpointer _tmp30_; ValaInterface* _tmp31_; ValaClass* _tmp32_; ValaObjectType* _tmp33_; ValaObjectType* _tmp34_; _iface_index = _iface_index + 1; _tmp27_ = _iface_index; _tmp28_ = _iface_size; if (!(_tmp27_ < _tmp28_)) { break; } _tmp29_ = _iface_list; _tmp30_ = vala_list_get ((ValaList*) _tmp29_, _iface_index); iface = (ValaInterface*) _tmp30_; _tmp31_ = iface; _tmp32_ = object_type; _tmp33_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp32_); _tmp34_ = _tmp33_; vala_interface_add_prerequisite (_tmp31_, (ValaDataType*) _tmp34_); _vala_code_node_unref0 (_tmp34_); _vala_code_node_unref0 (iface); } _vala_iterable_unref0 (_iface_list); } _vala_code_node_unref0 (object_type); } { ValaArrayList* _metadata_list = NULL; ValaArrayList* _tmp35_; ValaArrayList* _tmp36_; gint _metadata_size = 0; ValaArrayList* _tmp37_; gint _tmp38_; gint _tmp39_; gint _metadata_index = 0; _tmp35_ = self->priv->metadata_roots; _tmp36_ = _vala_iterable_ref0 (_tmp35_); _metadata_list = _tmp36_; _tmp37_ = _metadata_list; _tmp38_ = vala_collection_get_size ((ValaCollection*) _tmp37_); _tmp39_ = _tmp38_; _metadata_size = _tmp39_; _metadata_index = -1; while (TRUE) { gint _tmp40_; gint _tmp41_; ValaGirParserMetadata* metadata = NULL; ValaArrayList* _tmp42_; gpointer _tmp43_; ValaGirParserMetadata* _tmp44_; _metadata_index = _metadata_index + 1; _tmp40_ = _metadata_index; _tmp41_ = _metadata_size; if (!(_tmp40_ < _tmp41_)) { break; } _tmp42_ = _metadata_list; _tmp43_ = vala_list_get ((ValaList*) _tmp42_, _metadata_index); metadata = (ValaGirParserMetadata*) _tmp43_; _tmp44_ = metadata; vala_gir_parser_report_unused_metadata (self, _tmp44_); _vala_gir_parser_metadata_unref0 (metadata); } _vala_iterable_unref0 (_metadata_list); } _vala_code_context_unref0 (self->priv->context); self->priv->context = NULL; _vala_code_node_unref0 (glib_ns); } static void vala_gir_parser_map_vala_to_gir (ValaGirParser* self) { g_return_if_fail (self != NULL); { ValaList* _source_file_list = NULL; ValaCodeContext* _tmp0_; ValaList* _tmp1_; ValaList* _tmp2_; gint _source_file_size = 0; ValaList* _tmp3_; gint _tmp4_; gint _tmp5_; gint _source_file_index = 0; _tmp0_ = self->priv->context; _tmp1_ = vala_code_context_get_source_files (_tmp0_); _tmp2_ = _vala_iterable_ref0 (_tmp1_); _source_file_list = _tmp2_; _tmp3_ = _source_file_list; _tmp4_ = vala_collection_get_size ((ValaCollection*) _tmp3_); _tmp5_ = _tmp4_; _source_file_size = _tmp5_; _source_file_index = -1; while (TRUE) { gint _tmp6_; gint _tmp7_; ValaSourceFile* source_file = NULL; ValaList* _tmp8_; gpointer _tmp9_; gchar* gir_namespace = NULL; ValaSourceFile* _tmp10_; const gchar* _tmp11_; const gchar* _tmp12_; gchar* _tmp13_; gchar* gir_version = NULL; ValaSourceFile* _tmp14_; const gchar* _tmp15_; const gchar* _tmp16_; gchar* _tmp17_; ValaNamespace* ns = NULL; const gchar* _tmp18_; const gchar* _tmp37_; ValaSet* _tmp38_; const gchar* _tmp39_; const gchar* _tmp40_; gchar* _tmp41_; gchar* _tmp42_; ValaUnresolvedSymbol* gir_symbol = NULL; const gchar* _tmp43_; ValaUnresolvedSymbol* _tmp44_; const gchar* _tmp45_; ValaNamespace* _tmp46_; const gchar* _tmp47_; const gchar* _tmp48_; _source_file_index = _source_file_index + 1; _tmp6_ = _source_file_index; _tmp7_ = _source_file_size; if (!(_tmp6_ < _tmp7_)) { break; } _tmp8_ = _source_file_list; _tmp9_ = vala_list_get (_tmp8_, _source_file_index); source_file = (ValaSourceFile*) _tmp9_; _tmp10_ = source_file; _tmp11_ = vala_source_file_get_gir_namespace (_tmp10_); _tmp12_ = _tmp11_; _tmp13_ = g_strdup (_tmp12_); gir_namespace = _tmp13_; _tmp14_ = source_file; _tmp15_ = vala_source_file_get_gir_version (_tmp14_); _tmp16_ = _tmp15_; _tmp17_ = g_strdup (_tmp16_); gir_version = _tmp17_; ns = NULL; _tmp18_ = gir_namespace; if (_tmp18_ == NULL) { { ValaList* _node_list = NULL; ValaSourceFile* _tmp19_; ValaList* _tmp20_; ValaList* _tmp21_; gint _node_size = 0; ValaList* _tmp22_; gint _tmp23_; gint _tmp24_; gint _node_index = 0; _tmp19_ = source_file; _tmp20_ = vala_source_file_get_nodes (_tmp19_); _tmp21_ = _vala_iterable_ref0 (_tmp20_); _node_list = _tmp21_; _tmp22_ = _node_list; _tmp23_ = vala_collection_get_size ((ValaCollection*) _tmp22_); _tmp24_ = _tmp23_; _node_size = _tmp24_; _node_index = -1; while (TRUE) { gint _tmp25_; gint _tmp26_; ValaCodeNode* node = NULL; ValaList* _tmp27_; gpointer _tmp28_; ValaCodeNode* _tmp29_; _node_index = _node_index + 1; _tmp25_ = _node_index; _tmp26_ = _node_size; if (!(_tmp25_ < _tmp26_)) { break; } _tmp27_ = _node_list; _tmp28_ = vala_list_get (_tmp27_, _node_index); node = (ValaCodeNode*) _tmp28_; _tmp29_ = node; if (VALA_IS_NAMESPACE (_tmp29_)) { ValaCodeNode* _tmp30_; ValaNamespace* _tmp31_; ValaNamespace* _tmp32_; gchar* _tmp33_; const gchar* _tmp34_; _tmp30_ = node; _tmp31_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_NAMESPACE, ValaNamespace)); _vala_code_node_unref0 (ns); ns = _tmp31_; _tmp32_ = ns; _tmp33_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp32_, "CCode", "gir_namespace", NULL); _g_free0 (gir_namespace); gir_namespace = _tmp33_; _tmp34_ = gir_namespace; if (_tmp34_ != NULL) { ValaNamespace* _tmp35_; gchar* _tmp36_; _tmp35_ = ns; _tmp36_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp35_, "CCode", "gir_version", NULL); _g_free0 (gir_version); gir_version = _tmp36_; _vala_code_node_unref0 (node); break; } } _vala_code_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } } _tmp37_ = gir_namespace; if (_tmp37_ == NULL) { _vala_code_node_unref0 (ns); _g_free0 (gir_version); _g_free0 (gir_namespace); _vala_source_file_unref0 (source_file); continue; } _tmp38_ = self->priv->provided_namespaces; _tmp39_ = gir_namespace; _tmp40_ = gir_version; _tmp41_ = g_strdup_printf ("%s-%s", _tmp39_, _tmp40_); _tmp42_ = _tmp41_; vala_collection_add ((ValaCollection*) _tmp38_, _tmp42_); _g_free0 (_tmp42_); _tmp43_ = gir_namespace; _tmp44_ = vala_unresolved_symbol_new (NULL, _tmp43_, NULL); gir_symbol = _tmp44_; _tmp45_ = gir_namespace; _tmp46_ = ns; _tmp47_ = vala_symbol_get_name ((ValaSymbol*) _tmp46_); _tmp48_ = _tmp47_; if (g_strcmp0 (_tmp45_, _tmp48_) != 0) { ValaUnresolvedSymbol* _tmp49_; ValaNamespace* _tmp50_; _tmp49_ = gir_symbol; _tmp50_ = ns; vala_gir_parser_set_symbol_mapping (self, _tmp49_, (ValaSymbol*) _tmp50_); } { ValaList* _node_list = NULL; ValaSourceFile* _tmp51_; ValaList* _tmp52_; ValaList* _tmp53_; gint _node_size = 0; ValaList* _tmp54_; gint _tmp55_; gint _tmp56_; gint _node_index = 0; _tmp51_ = source_file; _tmp52_ = vala_source_file_get_nodes (_tmp51_); _tmp53_ = _vala_iterable_ref0 (_tmp52_); _node_list = _tmp53_; _tmp54_ = _node_list; _tmp55_ = vala_collection_get_size ((ValaCollection*) _tmp54_); _tmp56_ = _tmp55_; _node_size = _tmp56_; _node_index = -1; while (TRUE) { gint _tmp57_; gint _tmp58_; ValaCodeNode* node = NULL; ValaList* _tmp59_; gpointer _tmp60_; ValaCodeNode* _tmp61_; _node_index = _node_index + 1; _tmp57_ = _node_index; _tmp58_ = _node_size; if (!(_tmp57_ < _tmp58_)) { break; } _tmp59_ = _node_list; _tmp60_ = vala_list_get (_tmp59_, _node_index); node = (ValaCodeNode*) _tmp60_; _tmp61_ = node; if (vala_code_node_has_attribute_argument (_tmp61_, "GIR", "name")) { ValaUnresolvedSymbol* map_from = NULL; ValaUnresolvedSymbol* _tmp62_; ValaCodeNode* _tmp63_; gchar* _tmp64_; gchar* _tmp65_; ValaUnresolvedSymbol* _tmp66_; ValaUnresolvedSymbol* _tmp67_; ValaUnresolvedSymbol* _tmp68_; ValaCodeNode* _tmp69_; _tmp62_ = gir_symbol; _tmp63_ = node; _tmp64_ = vala_code_node_get_attribute_string (_tmp63_, "GIR", "name", NULL); _tmp65_ = _tmp64_; _tmp66_ = vala_unresolved_symbol_new (_tmp62_, _tmp65_, NULL); _tmp67_ = _tmp66_; _g_free0 (_tmp65_); map_from = _tmp67_; _tmp68_ = map_from; _tmp69_ = node; vala_gir_parser_set_symbol_mapping (self, _tmp68_, G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_SYMBOL, ValaSymbol)); _vala_code_node_unref0 (map_from); } _vala_code_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } _vala_code_node_unref0 (gir_symbol); _vala_code_node_unref0 (ns); _g_free0 (gir_version); _g_free0 (gir_namespace); _vala_source_file_unref0 (source_file); } _vala_iterable_unref0 (_source_file_list); } } static void vala_gir_parser_real_visit_source_file (ValaCodeVisitor* base, ValaSourceFile* source_file) { ValaGirParser * self; const gchar* _tmp0_; const gchar* _tmp1_; self = (ValaGirParser*) base; g_return_if_fail (source_file != NULL); _tmp0_ = vala_source_file_get_filename (source_file); _tmp1_ = _tmp0_; if (g_str_has_suffix (_tmp1_, ".gir")) { vala_gir_parser_parse_file (self, source_file); } } static gpointer _vala_gir_parser_metadata_ref0 (gpointer self) { return self ? vala_gir_parser_metadata_ref (self) : NULL; } static gpointer _vala_source_file_ref0 (gpointer self) { return self ? vala_source_file_ref (self) : NULL; } void vala_gir_parser_parse_file (ValaGirParser* self, ValaSourceFile* source_file) { gboolean has_global_context = FALSE; ValaCodeContext* _tmp0_; GEqualFunc _tmp4_; ValaArrayList* _tmp5_; ValaGirParserMetadata* _tmp6_; ValaGirParserMetadata* _tmp7_; ValaGirParserMetadata* _tmp8_; ValaSourceFile* _tmp9_; const gchar* _tmp10_; const gchar* _tmp11_; ValaMarkupReader* _tmp12_; g_return_if_fail (self != NULL); g_return_if_fail (source_file != NULL); _tmp0_ = self->priv->context; has_global_context = _tmp0_ != NULL; if (!has_global_context) { ValaCodeContext* _tmp1_; ValaCodeContext* _tmp2_; ValaCodeContext* _tmp3_; _tmp1_ = vala_source_file_get_context (source_file); _tmp2_ = _tmp1_; _tmp3_ = _vala_code_context_ref0 (_tmp2_); _vala_code_context_unref0 (self->priv->context); self->priv->context = _tmp3_; } _tmp4_ = g_direct_equal; _tmp5_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_METADATA, (GBoxedCopyFunc) vala_gir_parser_metadata_ref, (GDestroyNotify) vala_gir_parser_metadata_unref, _tmp4_); _vala_iterable_unref0 (self->priv->metadata_stack); self->priv->metadata_stack = _tmp5_; _tmp6_ = vala_gir_parser_metadata_get_empty (); _tmp7_ = _tmp6_; _tmp8_ = _vala_gir_parser_metadata_ref0 (_tmp7_); _vala_gir_parser_metadata_unref0 (self->priv->metadata); self->priv->metadata = _tmp8_; self->priv->cheader_filenames = (_vala_array_free (self->priv->cheader_filenames, self->priv->cheader_filenames_length1, (GDestroyNotify) g_free), NULL); self->priv->cheader_filenames = NULL; self->priv->cheader_filenames_length1 = 0; self->priv->_cheader_filenames_size_ = self->priv->cheader_filenames_length1; _tmp9_ = _vala_source_file_ref0 (source_file); _vala_source_file_unref0 (self->priv->current_source_file); self->priv->current_source_file = _tmp9_; _tmp10_ = vala_source_file_get_filename (source_file); _tmp11_ = _tmp10_; _tmp12_ = vala_markup_reader_new (_tmp11_); _vala_markup_reader_unref0 (self->priv->reader); self->priv->reader = _tmp12_; { gboolean _tmp13_ = FALSE; _tmp13_ = TRUE; while (TRUE) { ValaMarkupTokenType _tmp19_; if (!_tmp13_) { gboolean _tmp14_ = FALSE; ValaMarkupTokenType _tmp15_; _tmp15_ = self->priv->current_token; if (_tmp15_ != VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) { ValaMarkupReader* _tmp16_; const gchar* _tmp17_; const gchar* _tmp18_; _tmp16_ = self->priv->reader; _tmp17_ = vala_markup_reader_get_name (_tmp16_); _tmp18_ = _tmp17_; _tmp14_ = g_strcmp0 (_tmp18_, "repository") != 0; } else { _tmp14_ = FALSE; } if (!_tmp14_) { break; } } _tmp13_ = FALSE; vala_gir_parser_next (self); _tmp19_ = self->priv->current_token; if (_tmp19_ == VALA_MARKUP_TOKEN_TYPE_EOF) { ValaSourceReference* _tmp20_; ValaSourceReference* _tmp21_; _tmp20_ = vala_gir_parser_get_current_src (self); _tmp21_ = _tmp20_; vala_report_error (_tmp21_, "unexpected end of file"); _vala_source_reference_unref0 (_tmp21_); return; } } } vala_gir_parser_parse_repository (self); _vala_markup_reader_unref0 (self->priv->reader); self->priv->reader = NULL; _vala_source_file_unref0 (self->priv->current_source_file); self->priv->current_source_file = NULL; if (!has_global_context) { _vala_code_context_unref0 (self->priv->context); self->priv->context = NULL; } } static void vala_gir_parser_next (ValaGirParser* self) { ValaMarkupReader* _tmp0_; ValaSourceLocation _tmp1_ = {0}; ValaSourceLocation _tmp2_ = {0}; ValaMarkupTokenType _tmp3_; g_return_if_fail (self != NULL); _tmp0_ = self->priv->reader; _tmp3_ = vala_markup_reader_read_token (_tmp0_, &_tmp1_, &_tmp2_); self->priv->begin = _tmp1_; self->priv->end = _tmp2_; self->priv->current_token = _tmp3_; } static void vala_gir_parser_start_element (ValaGirParser* self, const gchar* name) { gboolean _tmp0_ = FALSE; ValaMarkupTokenType _tmp1_; g_return_if_fail (self != NULL); g_return_if_fail (name != NULL); _tmp1_ = self->priv->current_token; if (_tmp1_ != VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) { _tmp0_ = TRUE; } else { ValaMarkupReader* _tmp2_; const gchar* _tmp3_; const gchar* _tmp4_; _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_name (_tmp2_); _tmp4_ = _tmp3_; _tmp0_ = g_strcmp0 (_tmp4_, name) != 0; } if (_tmp0_) { ValaSourceReference* _tmp5_; ValaSourceReference* _tmp6_; gchar* _tmp7_; gchar* _tmp8_; _tmp5_ = vala_gir_parser_get_current_src (self); _tmp6_ = _tmp5_; _tmp7_ = g_strdup_printf ("expected start element of `%s'", name); _tmp8_ = _tmp7_; vala_report_error (_tmp6_, _tmp8_); _g_free0 (_tmp8_); _vala_source_reference_unref0 (_tmp6_); } } static void vala_gir_parser_end_element (ValaGirParser* self, const gchar* name) { g_return_if_fail (self != NULL); g_return_if_fail (name != NULL); while (TRUE) { gboolean _tmp0_ = FALSE; ValaMarkupTokenType _tmp1_; ValaSourceReference* _tmp5_; ValaSourceReference* _tmp6_; gchar* _tmp7_; gchar* _tmp8_; _tmp1_ = self->priv->current_token; if (_tmp1_ != VALA_MARKUP_TOKEN_TYPE_END_ELEMENT) { _tmp0_ = TRUE; } else { ValaMarkupReader* _tmp2_; const gchar* _tmp3_; const gchar* _tmp4_; _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_name (_tmp2_); _tmp4_ = _tmp3_; _tmp0_ = g_strcmp0 (_tmp4_, name) != 0; } if (!_tmp0_) { break; } _tmp5_ = vala_gir_parser_get_current_src (self); _tmp6_ = _tmp5_; _tmp7_ = g_strdup_printf ("expected end element of `%s'", name); _tmp8_ = _tmp7_; vala_report_warning (_tmp6_, _tmp8_); _g_free0 (_tmp8_); _vala_source_reference_unref0 (_tmp6_); vala_gir_parser_skip_element (self); } vala_gir_parser_next (self); } static ValaSourceReference* vala_gir_parser_get_current_src (ValaGirParser* self) { ValaSourceFile* _tmp0_; ValaSourceLocation _tmp1_; ValaSourceLocation _tmp2_; ValaSourceReference* _tmp3_; ValaSourceReference* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->current_source_file; _tmp1_ = self->priv->begin; _tmp2_ = self->priv->end; _tmp3_ = vala_source_reference_new (_tmp0_, &_tmp1_, &_tmp2_); result = _tmp3_; return result; } static ValaSourceReference* vala_gir_parser_get_src (ValaGirParser* self, ValaSourceLocation* begin, ValaSourceLocation* end) { ValaSourceLocation e = {0}; ValaSourceLocation _tmp0_; ValaSourceFile* _tmp1_; ValaSourceLocation _tmp2_; ValaSourceLocation _tmp3_; ValaSourceReference* _tmp4_; ValaSourceReference* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (begin != NULL, NULL); _tmp0_ = self->priv->end; e = _tmp0_; if (end != NULL) { e = *end; } _tmp1_ = self->priv->current_source_file; _tmp2_ = *begin; _tmp3_ = e; _tmp4_ = vala_source_reference_new (_tmp1_, &_tmp2_, &_tmp3_); result = _tmp4_; return result; } static void vala_gir_parser_add_symbol_to_container (ValaSymbol* container, ValaSymbol* sym) { g_return_if_fail (container != NULL); g_return_if_fail (sym != NULL); if (VALA_IS_CLASS (container)) { ValaClass* cl = NULL; cl = G_TYPE_CHECK_INSTANCE_CAST (container, VALA_TYPE_CLASS, ValaClass); if (VALA_IS_CLASS (sym)) { ValaClass* _tmp0_; _tmp0_ = cl; vala_symbol_add_class ((ValaSymbol*) _tmp0_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass)); } else { if (VALA_IS_CONSTANT (sym)) { ValaClass* _tmp1_; _tmp1_ = cl; vala_symbol_add_constant ((ValaSymbol*) _tmp1_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant)); } else { if (VALA_IS_ENUM (sym)) { ValaClass* _tmp2_; _tmp2_ = cl; vala_symbol_add_enum ((ValaSymbol*) _tmp2_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM, ValaEnum)); } else { if (VALA_IS_FIELD (sym)) { ValaClass* _tmp3_; _tmp3_ = cl; vala_symbol_add_field ((ValaSymbol*) _tmp3_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField)); } else { if (VALA_IS_METHOD (sym)) { ValaClass* _tmp4_; _tmp4_ = cl; vala_symbol_add_method ((ValaSymbol*) _tmp4_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod)); } else { if (VALA_IS_PROPERTY (sym)) { ValaClass* _tmp5_; _tmp5_ = cl; vala_symbol_add_property ((ValaSymbol*) _tmp5_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_PROPERTY, ValaProperty)); } else { if (VALA_IS_SIGNAL (sym)) { ValaClass* _tmp6_; _tmp6_ = cl; vala_symbol_add_signal ((ValaSymbol*) _tmp6_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_SIGNAL, ValaSignal)); } else { if (VALA_IS_STRUCT (sym)) { ValaClass* _tmp7_; _tmp7_ = cl; vala_symbol_add_struct ((ValaSymbol*) _tmp7_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_STRUCT, ValaStruct)); } } } } } } } } } else { if (VALA_IS_ENUM (container)) { ValaEnum* en = NULL; en = G_TYPE_CHECK_INSTANCE_CAST (container, VALA_TYPE_ENUM, ValaEnum); if (VALA_IS_ENUM_VALUE (sym)) { ValaEnum* _tmp8_; _tmp8_ = en; vala_enum_add_value (_tmp8_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM_VALUE, ValaEnumValue)); } else { if (VALA_IS_CONSTANT (sym)) { ValaEnum* _tmp9_; _tmp9_ = en; vala_symbol_add_constant ((ValaSymbol*) _tmp9_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant)); } else { if (VALA_IS_METHOD (sym)) { ValaEnum* _tmp10_; _tmp10_ = en; vala_symbol_add_method ((ValaSymbol*) _tmp10_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod)); } } } } else { if (VALA_IS_INTERFACE (container)) { ValaInterface* iface = NULL; iface = G_TYPE_CHECK_INSTANCE_CAST (container, VALA_TYPE_INTERFACE, ValaInterface); if (VALA_IS_CLASS (sym)) { ValaInterface* _tmp11_; _tmp11_ = iface; vala_symbol_add_class ((ValaSymbol*) _tmp11_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass)); } else { if (VALA_IS_CONSTANT (sym)) { ValaInterface* _tmp12_; _tmp12_ = iface; vala_symbol_add_constant ((ValaSymbol*) _tmp12_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant)); } else { if (VALA_IS_ENUM (sym)) { ValaInterface* _tmp13_; _tmp13_ = iface; vala_symbol_add_enum ((ValaSymbol*) _tmp13_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM, ValaEnum)); } else { if (VALA_IS_FIELD (sym)) { ValaInterface* _tmp14_; _tmp14_ = iface; vala_symbol_add_field ((ValaSymbol*) _tmp14_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField)); } else { if (VALA_IS_METHOD (sym)) { ValaInterface* _tmp15_; _tmp15_ = iface; vala_symbol_add_method ((ValaSymbol*) _tmp15_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod)); } else { if (VALA_IS_PROPERTY (sym)) { ValaInterface* _tmp16_; _tmp16_ = iface; vala_symbol_add_property ((ValaSymbol*) _tmp16_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_PROPERTY, ValaProperty)); } else { if (VALA_IS_SIGNAL (sym)) { ValaInterface* _tmp17_; _tmp17_ = iface; vala_symbol_add_signal ((ValaSymbol*) _tmp17_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_SIGNAL, ValaSignal)); } else { if (VALA_IS_STRUCT (sym)) { ValaInterface* _tmp18_; _tmp18_ = iface; vala_symbol_add_struct ((ValaSymbol*) _tmp18_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_STRUCT, ValaStruct)); } } } } } } } } } else { if (VALA_IS_NAMESPACE (container)) { ValaNamespace* ns = NULL; ns = G_TYPE_CHECK_INSTANCE_CAST (container, VALA_TYPE_NAMESPACE, ValaNamespace); if (VALA_IS_NAMESPACE (sym)) { ValaNamespace* _tmp19_; _tmp19_ = ns; vala_symbol_add_namespace ((ValaSymbol*) _tmp19_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_NAMESPACE, ValaNamespace)); } else { if (VALA_IS_CLASS (sym)) { ValaNamespace* _tmp20_; _tmp20_ = ns; vala_symbol_add_class ((ValaSymbol*) _tmp20_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass)); } else { if (VALA_IS_CONSTANT (sym)) { ValaNamespace* _tmp21_; _tmp21_ = ns; vala_symbol_add_constant ((ValaSymbol*) _tmp21_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant)); } else { if (VALA_IS_DELEGATE (sym)) { ValaNamespace* _tmp22_; _tmp22_ = ns; vala_symbol_add_delegate ((ValaSymbol*) _tmp22_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_DELEGATE, ValaDelegate)); } else { if (VALA_IS_ENUM (sym)) { ValaNamespace* _tmp23_; _tmp23_ = ns; vala_symbol_add_enum ((ValaSymbol*) _tmp23_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM, ValaEnum)); } else { if (VALA_IS_ERROR_DOMAIN (sym)) { ValaNamespace* _tmp24_; _tmp24_ = ns; vala_symbol_add_error_domain ((ValaSymbol*) _tmp24_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain)); } else { if (VALA_IS_FIELD (sym)) { ValaField* field = NULL; ValaField* _tmp25_; ValaMemberBinding _tmp26_; ValaMemberBinding _tmp27_; ValaNamespace* _tmp29_; ValaField* _tmp30_; field = G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField); _tmp25_ = field; _tmp26_ = vala_field_get_binding (_tmp25_); _tmp27_ = _tmp26_; if (_tmp27_ == VALA_MEMBER_BINDING_INSTANCE) { ValaField* _tmp28_; _tmp28_ = field; vala_field_set_binding (_tmp28_, VALA_MEMBER_BINDING_STATIC); } _tmp29_ = ns; _tmp30_ = field; vala_symbol_add_field ((ValaSymbol*) _tmp29_, _tmp30_); } else { if (VALA_IS_INTERFACE (sym)) { ValaNamespace* _tmp31_; _tmp31_ = ns; vala_symbol_add_interface ((ValaSymbol*) _tmp31_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_INTERFACE, ValaInterface)); } else { if (VALA_IS_METHOD (sym)) { ValaMethod* method = NULL; ValaMethod* _tmp32_; ValaMemberBinding _tmp33_; ValaMemberBinding _tmp34_; ValaNamespace* _tmp36_; ValaMethod* _tmp37_; method = G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod); _tmp32_ = method; _tmp33_ = vala_method_get_binding (_tmp32_); _tmp34_ = _tmp33_; if (_tmp34_ == VALA_MEMBER_BINDING_INSTANCE) { ValaMethod* _tmp35_; _tmp35_ = method; vala_method_set_binding (_tmp35_, VALA_MEMBER_BINDING_STATIC); } _tmp36_ = ns; _tmp37_ = method; vala_symbol_add_method ((ValaSymbol*) _tmp36_, _tmp37_); } else { if (VALA_IS_STRUCT (sym)) { ValaNamespace* _tmp38_; _tmp38_ = ns; vala_symbol_add_struct ((ValaSymbol*) _tmp38_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_STRUCT, ValaStruct)); } } } } } } } } } } } else { if (VALA_IS_STRUCT (container)) { ValaStruct* st = NULL; st = G_TYPE_CHECK_INSTANCE_CAST (container, VALA_TYPE_STRUCT, ValaStruct); if (VALA_IS_CONSTANT (sym)) { ValaStruct* _tmp39_; _tmp39_ = st; vala_symbol_add_constant ((ValaSymbol*) _tmp39_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant)); } else { if (VALA_IS_FIELD (sym)) { ValaStruct* _tmp40_; _tmp40_ = st; vala_symbol_add_field ((ValaSymbol*) _tmp40_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField)); } else { if (VALA_IS_METHOD (sym)) { ValaStruct* _tmp41_; _tmp41_ = st; vala_symbol_add_method ((ValaSymbol*) _tmp41_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod)); } else { if (VALA_IS_PROPERTY (sym)) { ValaStruct* _tmp42_; _tmp42_ = st; vala_symbol_add_property ((ValaSymbol*) _tmp42_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_PROPERTY, ValaProperty)); } } } } } else { if (VALA_IS_ERROR_DOMAIN (container)) { ValaErrorDomain* ed = NULL; ed = G_TYPE_CHECK_INSTANCE_CAST (container, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain); if (VALA_IS_ERROR_CODE (sym)) { ValaErrorDomain* _tmp43_; _tmp43_ = ed; vala_error_domain_add_code (_tmp43_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ERROR_CODE, ValaErrorCode)); } else { if (VALA_IS_METHOD (sym)) { ValaErrorDomain* _tmp44_; _tmp44_ = ed; vala_symbol_add_method ((ValaSymbol*) _tmp44_, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod)); } } } else { ValaSourceReference* _tmp45_; ValaSourceReference* _tmp46_; const gchar* _tmp47_; const gchar* _tmp48_; const gchar* _tmp49_; const gchar* _tmp50_; gchar* _tmp51_; gchar* _tmp52_; _tmp45_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym); _tmp46_ = _tmp45_; _tmp47_ = vala_symbol_get_name (sym); _tmp48_ = _tmp47_; _tmp49_ = vala_symbol_get_name (container); _tmp50_ = _tmp49_; _tmp51_ = g_strdup_printf ("impossible to add `%s' to container `%s'", _tmp48_, _tmp50_); _tmp52_ = _tmp51_; vala_report_error (_tmp46_, _tmp52_); _g_free0 (_tmp52_); } } } } } } } static gboolean vala_gir_parser_is_container (ValaSymbol* sym) { gboolean _tmp0_ = FALSE; gboolean _tmp1_ = FALSE; gboolean _tmp2_ = FALSE; gboolean _tmp3_ = FALSE; gboolean result = FALSE; g_return_val_if_fail (sym != NULL, FALSE); if (VALA_IS_OBJECT_TYPE_SYMBOL (sym)) { _tmp3_ = TRUE; } else { _tmp3_ = VALA_IS_STRUCT (sym); } if (_tmp3_) { _tmp2_ = TRUE; } else { _tmp2_ = VALA_IS_NAMESPACE (sym); } if (_tmp2_) { _tmp1_ = TRUE; } else { _tmp1_ = VALA_IS_ERROR_DOMAIN (sym); } if (_tmp1_) { _tmp0_ = TRUE; } else { _tmp0_ = VALA_IS_ENUM (sym); } result = _tmp0_; return result; } static ValaUnresolvedSymbol* vala_gir_parser_parse_symbol_from_string (ValaGirParser* self, const gchar* symbol_string, ValaSourceReference* source_reference) { ValaUnresolvedSymbol* sym = NULL; gchar** _tmp0_; gchar** _tmp1_; ValaUnresolvedSymbol* _tmp5_; ValaUnresolvedSymbol* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (symbol_string != NULL, NULL); sym = NULL; _tmp1_ = _tmp0_ = g_strsplit (symbol_string, ".", 0); { gchar** s_collection = NULL; gint s_collection_length1 = 0; gint _s_collection_size_ = 0; gint s_it = 0; s_collection = _tmp1_; s_collection_length1 = _vala_array_length (_tmp0_); for (s_it = 0; s_it < s_collection_length1; s_it = s_it + 1) { const gchar* s = NULL; s = s_collection[s_it]; { ValaUnresolvedSymbol* _tmp2_; const gchar* _tmp3_; ValaUnresolvedSymbol* _tmp4_; _tmp2_ = sym; _tmp3_ = s; _tmp4_ = vala_unresolved_symbol_new (_tmp2_, _tmp3_, source_reference); _vala_code_node_unref0 (sym); sym = _tmp4_; } } s_collection = (_vala_array_free (s_collection, s_collection_length1, (GDestroyNotify) g_free), NULL); } _tmp5_ = sym; if (_tmp5_ == NULL) { vala_report_error (source_reference, "a symbol must be specified"); } result = sym; return result; } static void vala_gir_parser_set_symbol_mapping (ValaGirParser* self, ValaUnresolvedSymbol* map_from, ValaSymbol* map_to) { g_return_if_fail (self != NULL); g_return_if_fail (map_from != NULL); g_return_if_fail (map_to != NULL); if (VALA_IS_UNRESOLVED_SYMBOL (map_from)) { ValaHashMap* _tmp0_; _tmp0_ = self->priv->unresolved_symbols_map; vala_map_set ((ValaMap*) _tmp0_, G_TYPE_CHECK_INSTANCE_CAST (map_from, VALA_TYPE_UNRESOLVED_SYMBOL, ValaUnresolvedSymbol), map_to); } } static void vala_gir_parser_assume_parameter_names (ValaGirParser* self, ValaSignal* sig, ValaSymbol* sym, gboolean skip_first) { ValaIterator* iter = NULL; ValaList* _tmp0_; ValaIterator* _tmp1_; gboolean first = FALSE; g_return_if_fail (self != NULL); g_return_if_fail (sig != NULL); g_return_if_fail (sym != NULL); _tmp0_ = vala_callable_get_parameters (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CALLABLE, ValaCallable)); _tmp1_ = vala_iterable_iterator ((ValaIterable*) _tmp0_); iter = _tmp1_; first = TRUE; { ValaList* _param_list = NULL; ValaList* _tmp2_; ValaList* _tmp3_; gint _param_size = 0; ValaList* _tmp4_; gint _tmp5_; gint _tmp6_; gint _param_index = 0; _tmp2_ = vala_callable_get_parameters ((ValaCallable*) sig); _tmp3_ = _vala_iterable_ref0 (_tmp2_); _param_list = _tmp3_; _tmp4_ = _param_list; _tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_); _tmp6_ = _tmp5_; _param_size = _tmp6_; _param_index = -1; while (TRUE) { gint _tmp7_; gint _tmp8_; ValaParameter* param = NULL; ValaList* _tmp9_; gpointer _tmp10_; ValaIterator* _tmp11_; gboolean _tmp12_ = FALSE; ValaParameter* _tmp14_; ValaIterator* _tmp15_; gpointer _tmp16_; ValaParameter* _tmp17_; const gchar* _tmp18_; const gchar* _tmp19_; _param_index = _param_index + 1; _tmp7_ = _param_index; _tmp8_ = _param_size; if (!(_tmp7_ < _tmp8_)) { break; } _tmp9_ = _param_list; _tmp10_ = vala_list_get (_tmp9_, _param_index); param = (ValaParameter*) _tmp10_; _tmp11_ = iter; if (!vala_iterator_next (_tmp11_)) { _vala_code_node_unref0 (param); break; } if (skip_first) { _tmp12_ = first; } else { _tmp12_ = FALSE; } if (_tmp12_) { ValaIterator* _tmp13_; _tmp13_ = iter; if (!vala_iterator_next (_tmp13_)) { _vala_code_node_unref0 (param); break; } first = FALSE; } _tmp14_ = param; _tmp15_ = iter; _tmp16_ = vala_iterator_get (_tmp15_); _tmp17_ = (ValaParameter*) _tmp16_; _tmp18_ = vala_symbol_get_name ((ValaSymbol*) _tmp17_); _tmp19_ = _tmp18_; vala_symbol_set_name ((ValaSymbol*) _tmp14_, _tmp19_); _vala_code_node_unref0 (_tmp17_); _vala_code_node_unref0 (param); } _vala_iterable_unref0 (_param_list); } _vala_iterator_unref0 (iter); } static ValaGirParserNode* vala_gir_parser_find_invoker (ValaGirParser* self, ValaGirParserNode* node) { ValaMethod* m = NULL; ValaSymbol* _tmp0_; ValaMethod* _tmp1_; gchar* prefix = NULL; ValaMethod* _tmp2_; const gchar* _tmp3_; const gchar* _tmp4_; gchar* _tmp5_; ValaGirParserNode* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (node != NULL, NULL); _tmp0_ = node->symbol; _tmp1_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, VALA_TYPE_METHOD, ValaMethod)); m = _tmp1_; _tmp2_ = m; _tmp3_ = vala_symbol_get_name ((ValaSymbol*) _tmp2_); _tmp4_ = _tmp3_; _tmp5_ = g_strdup_printf ("%s_", _tmp4_); prefix = _tmp5_; { ValaArrayList* _n_list = NULL; ValaGirParserNode* _tmp6_; ValaArrayList* _tmp7_; ValaArrayList* _tmp8_; gint _n_size = 0; ValaArrayList* _tmp9_; gint _tmp10_; gint _tmp11_; gint _n_index = 0; _tmp6_ = node->parent; _tmp7_ = _tmp6_->members; _tmp8_ = _vala_iterable_ref0 (_tmp7_); _n_list = _tmp8_; _tmp9_ = _n_list; _tmp10_ = vala_collection_get_size ((ValaCollection*) _tmp9_); _tmp11_ = _tmp10_; _n_size = _tmp11_; _n_index = -1; while (TRUE) { gint _tmp12_; gint _tmp13_; ValaGirParserNode* n = NULL; ValaArrayList* _tmp14_; gpointer _tmp15_; ValaGirParserNode* _tmp16_; const gchar* _tmp17_; const gchar* _tmp18_; ValaMethod* invoker = NULL; ValaGirParserNode* _tmp19_; ValaSymbol* _tmp20_; ValaMethod* _tmp21_; gboolean _tmp22_ = FALSE; ValaMethod* _tmp23_; ValaIterator* iter = NULL; ValaMethod* _tmp32_; ValaList* _tmp33_; ValaIterator* _tmp34_; ValaMethod* _tmp55_; _n_index = _n_index + 1; _tmp12_ = _n_index; _tmp13_ = _n_size; if (!(_tmp12_ < _tmp13_)) { break; } _tmp14_ = _n_list; _tmp15_ = vala_list_get ((ValaList*) _tmp14_, _n_index); n = (ValaGirParserNode*) _tmp15_; _tmp16_ = n; _tmp17_ = _tmp16_->name; _tmp18_ = prefix; if (!g_str_has_prefix (_tmp17_, _tmp18_)) { _vala_gir_parser_node_unref0 (n); continue; } _tmp19_ = n; _tmp20_ = _tmp19_->symbol; _tmp21_ = _vala_code_node_ref0 (VALA_IS_METHOD (_tmp20_) ? ((ValaMethod*) _tmp20_) : NULL); invoker = _tmp21_; _tmp23_ = invoker; if (_tmp23_ == NULL) { _tmp22_ = TRUE; } else { ValaMethod* _tmp24_; ValaList* _tmp25_; gint _tmp26_; gint _tmp27_; ValaMethod* _tmp28_; ValaList* _tmp29_; gint _tmp30_; gint _tmp31_; _tmp24_ = m; _tmp25_ = vala_callable_get_parameters ((ValaCallable*) _tmp24_); _tmp26_ = vala_collection_get_size ((ValaCollection*) _tmp25_); _tmp27_ = _tmp26_; _tmp28_ = invoker; _tmp29_ = vala_callable_get_parameters ((ValaCallable*) _tmp28_); _tmp30_ = vala_collection_get_size ((ValaCollection*) _tmp29_); _tmp31_ = _tmp30_; _tmp22_ = _tmp27_ != _tmp31_; } if (_tmp22_) { _vala_code_node_unref0 (invoker); _vala_gir_parser_node_unref0 (n); continue; } _tmp32_ = invoker; _tmp33_ = vala_callable_get_parameters ((ValaCallable*) _tmp32_); _tmp34_ = vala_iterable_iterator ((ValaIterable*) _tmp33_); iter = _tmp34_; { ValaList* _param_list = NULL; ValaMethod* _tmp35_; ValaList* _tmp36_; ValaList* _tmp37_; gint _param_size = 0; ValaList* _tmp38_; gint _tmp39_; gint _tmp40_; gint _param_index = 0; _tmp35_ = m; _tmp36_ = vala_callable_get_parameters ((ValaCallable*) _tmp35_); _tmp37_ = _vala_iterable_ref0 (_tmp36_); _param_list = _tmp37_; _tmp38_ = _param_list; _tmp39_ = vala_collection_get_size ((ValaCollection*) _tmp38_); _tmp40_ = _tmp39_; _param_size = _tmp40_; _param_index = -1; while (TRUE) { gint _tmp41_; gint _tmp42_; ValaParameter* param = NULL; ValaList* _tmp43_; gpointer _tmp44_; ValaIterator* _tmp45_; ValaParameter* _tmp46_; const gchar* _tmp47_; const gchar* _tmp48_; ValaIterator* _tmp49_; gpointer _tmp50_; ValaParameter* _tmp51_; const gchar* _tmp52_; const gchar* _tmp53_; gboolean _tmp54_; _param_index = _param_index + 1; _tmp41_ = _param_index; _tmp42_ = _param_size; if (!(_tmp41_ < _tmp42_)) { break; } _tmp43_ = _param_list; _tmp44_ = vala_list_get (_tmp43_, _param_index); param = (ValaParameter*) _tmp44_; _tmp45_ = iter; _vala_assert (vala_iterator_next (_tmp45_), "iter.next ()"); _tmp46_ = param; _tmp47_ = vala_symbol_get_name ((ValaSymbol*) _tmp46_); _tmp48_ = _tmp47_; _tmp49_ = iter; _tmp50_ = vala_iterator_get (_tmp49_); _tmp51_ = (ValaParameter*) _tmp50_; _tmp52_ = vala_symbol_get_name ((ValaSymbol*) _tmp51_); _tmp53_ = _tmp52_; _tmp54_ = g_strcmp0 (_tmp48_, _tmp53_) != 0; _vala_code_node_unref0 (_tmp51_); if (_tmp54_) { _vala_code_node_unref0 (invoker); invoker = NULL; _vala_code_node_unref0 (param); break; } _vala_code_node_unref0 (param); } _vala_iterable_unref0 (_param_list); } _tmp55_ = invoker; if (_tmp55_ != NULL) { result = n; _vala_iterator_unref0 (iter); _vala_code_node_unref0 (invoker); _vala_iterable_unref0 (_n_list); _g_free0 (prefix); _vala_code_node_unref0 (m); return result; } _vala_iterator_unref0 (iter); _vala_code_node_unref0 (invoker); _vala_gir_parser_node_unref0 (n); } _vala_iterable_unref0 (_n_list); } result = NULL; _g_free0 (prefix); _vala_code_node_unref0 (m); return result; } static glong string_strnlen (gchar* str, glong maxlen) { gchar* end = NULL; gchar* _tmp0_; gchar* _tmp1_; glong result = 0L; _tmp0_ = memchr (str, 0, (gsize) maxlen); end = _tmp0_; _tmp1_ = end; if (_tmp1_ == NULL) { result = maxlen; return result; } else { gchar* _tmp2_; _tmp2_ = end; result = (glong) (_tmp2_ - str); return result; } } static gchar* string_substring (const gchar* self, glong offset, glong len) { glong string_length = 0L; gboolean _tmp0_ = FALSE; gchar* _tmp3_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); if (offset >= ((glong) 0)) { _tmp0_ = len >= ((glong) 0); } else { _tmp0_ = FALSE; } if (_tmp0_) { string_length = string_strnlen ((gchar*) self, offset + len); } else { gint _tmp1_; gint _tmp2_; _tmp1_ = strlen (self); _tmp2_ = _tmp1_; string_length = (glong) _tmp2_; } if (offset < ((glong) 0)) { offset = string_length + offset; g_return_val_if_fail (offset >= ((glong) 0), NULL); } else { g_return_val_if_fail (offset <= string_length, NULL); } if (len < ((glong) 0)) { len = string_length - offset; } g_return_val_if_fail ((offset + len) <= string_length, NULL); _tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len); result = _tmp3_; return result; } static ValaGirParserMetadata* vala_gir_parser_get_current_metadata (ValaGirParser* self) { gchar* selector = NULL; ValaMarkupReader* _tmp0_; const gchar* _tmp1_; const gchar* _tmp2_; gchar* _tmp3_; gchar* child_name = NULL; ValaMarkupReader* _tmp4_; gchar* _tmp5_; const gchar* _tmp6_; gboolean _tmp9_ = FALSE; const gchar* _tmp10_; const gchar* _tmp13_; const gchar* _tmp17_; gchar* _tmp18_; const gchar* _tmp19_; gchar* _tmp20_; const gchar* _tmp21_; ValaGirParserMetadata* _tmp26_; const gchar* _tmp27_; const gchar* _tmp28_; ValaGirParserMetadata* _tmp29_; ValaGirParserMetadata* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_name (_tmp0_); _tmp2_ = _tmp1_; _tmp3_ = g_strdup (_tmp2_); selector = _tmp3_; _tmp4_ = self->priv->reader; _tmp5_ = vala_markup_reader_get_attribute (_tmp4_, "name"); child_name = _tmp5_; _tmp6_ = child_name; if (_tmp6_ == NULL) { ValaMarkupReader* _tmp7_; gchar* _tmp8_; _tmp7_ = self->priv->reader; _tmp8_ = vala_markup_reader_get_attribute (_tmp7_, "glib:name"); _g_free0 (child_name); child_name = _tmp8_; } _tmp10_ = selector; if (g_strcmp0 (_tmp10_, "union") == 0) { const gchar* _tmp11_; _tmp11_ = child_name; _tmp9_ = _tmp11_ == NULL; } else { _tmp9_ = FALSE; } if (_tmp9_) { gchar* _tmp12_; _tmp12_ = g_strdup ("union"); _g_free0 (child_name); child_name = _tmp12_; } _tmp13_ = child_name; if (_tmp13_ == NULL) { ValaGirParserMetadata* _tmp14_; ValaGirParserMetadata* _tmp15_; ValaGirParserMetadata* _tmp16_; _tmp14_ = vala_gir_parser_metadata_get_empty (); _tmp15_ = _tmp14_; _tmp16_ = _vala_gir_parser_metadata_ref0 (_tmp15_); result = _tmp16_; _g_free0 (child_name); _g_free0 (selector); return result; } _tmp17_ = selector; _tmp18_ = string_replace (_tmp17_, "-", "_"); _g_free0 (selector); selector = _tmp18_; _tmp19_ = child_name; _tmp20_ = string_replace (_tmp19_, "-", "_"); _g_free0 (child_name); child_name = _tmp20_; _tmp21_ = selector; if (g_str_has_prefix (_tmp21_, "glib:")) { const gchar* _tmp22_; gint _tmp23_; gint _tmp24_; gchar* _tmp25_; _tmp22_ = selector; _tmp23_ = strlen ("glib:"); _tmp24_ = _tmp23_; _tmp25_ = string_substring (_tmp22_, (glong) _tmp24_, (glong) -1); _g_free0 (selector); selector = _tmp25_; } _tmp26_ = self->priv->metadata; _tmp27_ = child_name; _tmp28_ = selector; _tmp29_ = vala_gir_parser_metadata_match_child (_tmp26_, _tmp27_, _tmp28_); result = _tmp29_; _g_free0 (child_name); _g_free0 (selector); return result; } static gboolean vala_gir_parser_push_metadata (ValaGirParser* self) { ValaGirParserMetadata* new_metadata = NULL; ValaGirParserMetadata* _tmp0_; ValaGirParserMetadata* _tmp1_; ValaArrayList* _tmp11_; ValaGirParserMetadata* _tmp12_; ValaGirParserMetadata* _tmp13_; ValaGirParserMetadata* _tmp14_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); _tmp0_ = vala_gir_parser_get_current_metadata (self); new_metadata = _tmp0_; _tmp1_ = new_metadata; if (vala_gir_parser_metadata_has_argument (_tmp1_, VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP)) { ValaGirParserMetadata* _tmp2_; _tmp2_ = new_metadata; if (vala_gir_parser_metadata_get_bool (_tmp2_, VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP, FALSE)) { result = FALSE; _vala_gir_parser_metadata_unref0 (new_metadata); return result; } } else { gboolean _tmp3_ = FALSE; ValaMarkupReader* _tmp4_; gchar* _tmp5_; gchar* _tmp6_; gboolean _tmp7_; _tmp4_ = self->priv->reader; _tmp5_ = vala_markup_reader_get_attribute (_tmp4_, "introspectable"); _tmp6_ = _tmp5_; _tmp7_ = g_strcmp0 (_tmp6_, "0") == 0; _g_free0 (_tmp6_); if (_tmp7_) { _tmp3_ = TRUE; } else { ValaMarkupReader* _tmp8_; gchar* _tmp9_; gchar* _tmp10_; _tmp8_ = self->priv->reader; _tmp9_ = vala_markup_reader_get_attribute (_tmp8_, "private"); _tmp10_ = _tmp9_; _tmp3_ = g_strcmp0 (_tmp10_, "1") == 0; _g_free0 (_tmp10_); } if (_tmp3_) { result = FALSE; _vala_gir_parser_metadata_unref0 (new_metadata); return result; } } _tmp11_ = self->priv->metadata_stack; _tmp12_ = self->priv->metadata; vala_collection_add ((ValaCollection*) _tmp11_, _tmp12_); _tmp13_ = new_metadata; _tmp14_ = _vala_gir_parser_metadata_ref0 (_tmp13_); _vala_gir_parser_metadata_unref0 (self->priv->metadata); self->priv->metadata = _tmp14_; result = TRUE; _vala_gir_parser_metadata_unref0 (new_metadata); return result; } static void vala_gir_parser_pop_metadata (ValaGirParser* self) { ValaArrayList* _tmp0_; ValaArrayList* _tmp1_; gint _tmp2_; gint _tmp3_; gpointer _tmp4_; g_return_if_fail (self != NULL); _tmp0_ = self->priv->metadata_stack; _tmp1_ = self->priv->metadata_stack; _tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_); _tmp3_ = _tmp2_; _tmp4_ = vala_list_remove_at ((ValaList*) _tmp0_, _tmp3_ - 1); _vala_gir_parser_metadata_unref0 (self->priv->metadata); self->priv->metadata = (ValaGirParserMetadata*) _tmp4_; } static gchar string_get (const gchar* self, glong index) { gchar _tmp0_; gchar result = '\0'; g_return_val_if_fail (self != NULL, '\0'); _tmp0_ = ((gchar*) self)[index]; result = _tmp0_; return result; } static gboolean vala_gir_parser_parse_type_arguments_from_string (ValaGirParser* self, ValaDataType* parent_type, const gchar* type_arguments, ValaSourceReference* source_reference) { gint type_arguments_length = 0; gint _tmp0_; gint _tmp1_; GString* current = NULL; GString* _tmp2_; gint depth = 0; ValaDataType* dt = NULL; GString* _tmp19_; const gchar* _tmp20_; ValaDataType* _tmp21_; ValaDataType* _tmp22_; ValaDataType* _tmp23_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (parent_type != NULL, FALSE); g_return_val_if_fail (type_arguments != NULL, FALSE); _tmp0_ = strlen (type_arguments); _tmp1_ = _tmp0_; type_arguments_length = (gint) _tmp1_; _tmp2_ = g_string_sized_new ((gsize) type_arguments_length); current = _tmp2_; depth = 0; { gint c = 0; c = 0; { gboolean _tmp3_ = FALSE; _tmp3_ = TRUE; while (TRUE) { gboolean _tmp5_ = FALSE; if (!_tmp3_) { gint _tmp4_; _tmp4_ = c; c = _tmp4_ + 1; } _tmp3_ = FALSE; if (!(c < type_arguments_length)) { break; } if (string_get (type_arguments, (glong) c) == '<') { _tmp5_ = TRUE; } else { _tmp5_ = string_get (type_arguments, (glong) c) == '['; } if (_tmp5_) { gint _tmp6_; GString* _tmp7_; _tmp6_ = depth; depth = _tmp6_ + 1; _tmp7_ = current; g_string_append_unichar (_tmp7_, (gunichar) string_get (type_arguments, (glong) c)); } else { gboolean _tmp8_ = FALSE; if (string_get (type_arguments, (glong) c) == '>') { _tmp8_ = TRUE; } else { _tmp8_ = string_get (type_arguments, (glong) c) == ']'; } if (_tmp8_) { gint _tmp9_; GString* _tmp10_; _tmp9_ = depth; depth = _tmp9_ - 1; _tmp10_ = current; g_string_append_unichar (_tmp10_, (gunichar) string_get (type_arguments, (glong) c)); } else { if (string_get (type_arguments, (glong) c) == ',') { if (depth == 0) { ValaDataType* dt = NULL; GString* _tmp11_; const gchar* _tmp12_; ValaDataType* _tmp13_; ValaDataType* _tmp14_; ValaDataType* _tmp15_; GString* _tmp16_; _tmp11_ = current; _tmp12_ = _tmp11_->str; _tmp13_ = vala_gir_parser_parse_type_from_string (self, _tmp12_, TRUE, source_reference); dt = _tmp13_; _tmp14_ = dt; if (_tmp14_ == NULL) { result = FALSE; _vala_code_node_unref0 (dt); _g_string_free0 (current); return result; } _tmp15_ = dt; vala_data_type_add_type_argument (parent_type, _tmp15_); _tmp16_ = current; g_string_truncate (_tmp16_, (gsize) 0); _vala_code_node_unref0 (dt); } else { GString* _tmp17_; _tmp17_ = current; g_string_append_unichar (_tmp17_, (gunichar) string_get (type_arguments, (glong) c)); } } else { GString* _tmp18_; _tmp18_ = current; g_string_append_unichar (_tmp18_, (gunichar) string_get (type_arguments, (glong) c)); } } } } } } _tmp19_ = current; _tmp20_ = _tmp19_->str; _tmp21_ = vala_gir_parser_parse_type_from_string (self, _tmp20_, TRUE, source_reference); dt = _tmp21_; _tmp22_ = dt; if (_tmp22_ == NULL) { result = FALSE; _vala_code_node_unref0 (dt); _g_string_free0 (current); return result; } _tmp23_ = dt; vala_data_type_add_type_argument (parent_type, _tmp23_); result = TRUE; _vala_code_node_unref0 (dt); _g_string_free0 (current); return result; } static ValaDataType* vala_gir_parser_parse_type_from_string (ValaGirParser* self, const gchar* type_string, gboolean owned_by_default, ValaSourceReference* source_reference) { GRegex* _tmp0_; GMatchInfo* match = NULL; GRegex* _tmp5_; GMatchInfo* _tmp6_ = NULL; gboolean _tmp7_; ValaDataType* type = NULL; gchar* ownership_data = NULL; GMatchInfo* _tmp8_; gchar* _tmp9_; gchar* type_name = NULL; GMatchInfo* _tmp10_; gchar* _tmp11_; gchar* type_arguments_data = NULL; GMatchInfo* _tmp12_; gchar* _tmp13_; gchar* pointers_data = NULL; GMatchInfo* _tmp14_; gchar* _tmp15_; gchar* array_data = NULL; GMatchInfo* _tmp16_; gchar* _tmp17_; gchar* nullable_data = NULL; GMatchInfo* _tmp18_; gchar* _tmp19_; gboolean _tmp20_ = FALSE; const gchar* _tmp21_; gboolean nullable = FALSE; gboolean _tmp25_ = FALSE; const gchar* _tmp26_; gboolean value_owned = FALSE; const gchar* _tmp39_; ValaUnresolvedSymbol* sym = NULL; const gchar* _tmp41_; ValaUnresolvedSymbol* _tmp42_; ValaUnresolvedSymbol* _tmp43_; ValaUnresolvedSymbol* _tmp44_; ValaUnresolvedType* _tmp45_; gboolean _tmp46_ = FALSE; const gchar* _tmp47_; const gchar* _tmp53_; gboolean _tmp61_ = FALSE; const gchar* _tmp62_; ValaDataType* _tmp72_; ValaDataType* _tmp73_; GError* _inner_error0_ = NULL; ValaDataType* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (type_string != NULL, NULL); _tmp0_ = vala_gir_parser_type_from_string_regex; if (_tmp0_ == NULL) { { GRegex* _tmp1_ = NULL; GRegex* _tmp2_; GRegex* _tmp3_; _tmp2_ = g_regex_new ("^(?:(owned|unowned|weak) +)?([0-9a-zA-Z_\\.]+)(?:<(.+)>)?(\\*+)?(\\[,*" \ "\\])?(\\?)?$", (G_REGEX_ANCHORED | G_REGEX_DOLLAR_ENDONLY) | G_REGEX_OPTIMIZE, 0, &_inner_error0_); _tmp1_ = _tmp2_; if (G_UNLIKELY (_inner_error0_ != NULL)) { if (_inner_error0_->domain == G_REGEX_ERROR) { goto __catch0_g_regex_error; } g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); g_clear_error (&_inner_error0_); return NULL; } _tmp3_ = _tmp1_; _tmp1_ = NULL; _g_regex_unref0 (vala_gir_parser_type_from_string_regex); vala_gir_parser_type_from_string_regex = _tmp3_; _g_regex_unref0 (_tmp1_); } goto __finally0; __catch0_g_regex_error: { GError* e = NULL; const gchar* _tmp4_; e = _inner_error0_; _inner_error0_ = NULL; _tmp4_ = e->message; g_error ("valagirparser.vala:1785: Unable to compile regex: %s", _tmp4_); _g_error_free0 (e); } __finally0: if (G_UNLIKELY (_inner_error0_ != NULL)) { g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); g_clear_error (&_inner_error0_); return NULL; } } _tmp5_ = vala_gir_parser_type_from_string_regex; _tmp7_ = g_regex_match (_tmp5_, type_string, 0, &_tmp6_); _g_match_info_unref0 (match); match = _tmp6_; if (!_tmp7_) { vala_report_error (source_reference, "unable to parse type"); result = NULL; _g_match_info_unref0 (match); return result; } type = NULL; _tmp8_ = match; _tmp9_ = g_match_info_fetch (_tmp8_, 1); ownership_data = _tmp9_; _tmp10_ = match; _tmp11_ = g_match_info_fetch (_tmp10_, 2); type_name = _tmp11_; _tmp12_ = match; _tmp13_ = g_match_info_fetch (_tmp12_, 3); type_arguments_data = _tmp13_; _tmp14_ = match; _tmp15_ = g_match_info_fetch (_tmp14_, 4); pointers_data = _tmp15_; _tmp16_ = match; _tmp17_ = g_match_info_fetch (_tmp16_, 5); array_data = _tmp17_; _tmp18_ = match; _tmp19_ = g_match_info_fetch (_tmp18_, 6); nullable_data = _tmp19_; _tmp21_ = nullable_data; if (_tmp21_ != NULL) { const gchar* _tmp22_; gint _tmp23_; gint _tmp24_; _tmp22_ = nullable_data; _tmp23_ = strlen (_tmp22_); _tmp24_ = _tmp23_; _tmp20_ = _tmp24_ > 0; } else { _tmp20_ = FALSE; } nullable = _tmp20_; _tmp26_ = ownership_data; if (_tmp26_ == NULL) { const gchar* _tmp27_; _tmp27_ = type_name; _tmp25_ = g_strcmp0 (_tmp27_, "void") == 0; } else { _tmp25_ = FALSE; } if (_tmp25_) { gboolean _tmp28_ = FALSE; const gchar* _tmp29_; _tmp29_ = array_data; if (_tmp29_ == NULL) { _tmp28_ = !nullable; } else { _tmp28_ = FALSE; } if (_tmp28_) { ValaVoidType* _tmp30_; const gchar* _tmp31_; _tmp30_ = vala_void_type_new (source_reference); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp30_; _tmp31_ = pointers_data; if (_tmp31_ != NULL) { { gint i = 0; i = 0; { gboolean _tmp32_ = FALSE; _tmp32_ = TRUE; while (TRUE) { const gchar* _tmp34_; gint _tmp35_; gint _tmp36_; ValaDataType* _tmp37_; ValaPointerType* _tmp38_; if (!_tmp32_) { gint _tmp33_; _tmp33_ = i; i = _tmp33_ + 1; } _tmp32_ = FALSE; _tmp34_ = pointers_data; _tmp35_ = strlen (_tmp34_); _tmp36_ = _tmp35_; if (!(i < _tmp36_)) { break; } _tmp37_ = type; _tmp38_ = vala_pointer_type_new (_tmp37_, NULL); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp38_; } } } } result = type; _g_free0 (nullable_data); _g_free0 (array_data); _g_free0 (pointers_data); _g_free0 (type_arguments_data); _g_free0 (type_name); _g_free0 (ownership_data); _g_match_info_unref0 (match); return result; } else { vala_report_error (source_reference, "invalid void type"); result = NULL; _g_free0 (nullable_data); _g_free0 (array_data); _g_free0 (pointers_data); _g_free0 (type_arguments_data); _g_free0 (type_name); _g_free0 (ownership_data); _vala_code_node_unref0 (type); _g_match_info_unref0 (match); return result; } } value_owned = owned_by_default; _tmp39_ = ownership_data; if (g_strcmp0 (_tmp39_, "owned") == 0) { if (owned_by_default) { vala_report_error (source_reference, "unexpected `owned' keyword"); } else { value_owned = TRUE; } } else { const gchar* _tmp40_; _tmp40_ = ownership_data; if (g_strcmp0 (_tmp40_, "unowned") == 0) { if (owned_by_default) { value_owned = FALSE; } else { vala_report_error (source_reference, "unexpected `unowned' keyword"); result = NULL; _g_free0 (nullable_data); _g_free0 (array_data); _g_free0 (pointers_data); _g_free0 (type_arguments_data); _g_free0 (type_name); _g_free0 (ownership_data); _vala_code_node_unref0 (type); _g_match_info_unref0 (match); return result; } } } _tmp41_ = type_name; _tmp42_ = vala_gir_parser_parse_symbol_from_string (self, _tmp41_, source_reference); sym = _tmp42_; _tmp43_ = sym; if (_tmp43_ == NULL) { result = NULL; _vala_code_node_unref0 (sym); _g_free0 (nullable_data); _g_free0 (array_data); _g_free0 (pointers_data); _g_free0 (type_arguments_data); _g_free0 (type_name); _g_free0 (ownership_data); _vala_code_node_unref0 (type); _g_match_info_unref0 (match); return result; } _tmp44_ = sym; _tmp45_ = vala_unresolved_type_new_from_symbol (_tmp44_, source_reference); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp45_; _tmp47_ = type_arguments_data; if (_tmp47_ != NULL) { const gchar* _tmp48_; gint _tmp49_; gint _tmp50_; _tmp48_ = type_arguments_data; _tmp49_ = strlen (_tmp48_); _tmp50_ = _tmp49_; _tmp46_ = _tmp50_ > 0; } else { _tmp46_ = FALSE; } if (_tmp46_) { ValaDataType* _tmp51_; const gchar* _tmp52_; _tmp51_ = type; _tmp52_ = type_arguments_data; if (!vala_gir_parser_parse_type_arguments_from_string (self, _tmp51_, _tmp52_, source_reference)) { result = NULL; _vala_code_node_unref0 (sym); _g_free0 (nullable_data); _g_free0 (array_data); _g_free0 (pointers_data); _g_free0 (type_arguments_data); _g_free0 (type_name); _g_free0 (ownership_data); _vala_code_node_unref0 (type); _g_match_info_unref0 (match); return result; } } _tmp53_ = pointers_data; if (_tmp53_ != NULL) { { gint i = 0; i = 0; { gboolean _tmp54_ = FALSE; _tmp54_ = TRUE; while (TRUE) { const gchar* _tmp56_; gint _tmp57_; gint _tmp58_; ValaDataType* _tmp59_; ValaPointerType* _tmp60_; if (!_tmp54_) { gint _tmp55_; _tmp55_ = i; i = _tmp55_ + 1; } _tmp54_ = FALSE; _tmp56_ = pointers_data; _tmp57_ = strlen (_tmp56_); _tmp58_ = _tmp57_; if (!(i < _tmp58_)) { break; } _tmp59_ = type; _tmp60_ = vala_pointer_type_new (_tmp59_, NULL); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp60_; } } } } _tmp62_ = array_data; if (_tmp62_ != NULL) { const gchar* _tmp63_; gint _tmp64_; gint _tmp65_; _tmp63_ = array_data; _tmp64_ = strlen (_tmp63_); _tmp65_ = _tmp64_; _tmp61_ = _tmp65_ != 0; } else { _tmp61_ = FALSE; } if (_tmp61_) { ValaDataType* _tmp66_; ValaDataType* _tmp67_; const gchar* _tmp68_; gint _tmp69_; gint _tmp70_; ValaArrayType* _tmp71_; _tmp66_ = type; vala_data_type_set_value_owned (_tmp66_, TRUE); _tmp67_ = type; _tmp68_ = array_data; _tmp69_ = strlen (_tmp68_); _tmp70_ = _tmp69_; _tmp71_ = vala_array_type_new (_tmp67_, ((gint) _tmp70_) - 1, source_reference); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp71_; } _tmp72_ = type; vala_data_type_set_nullable (_tmp72_, nullable); _tmp73_ = type; vala_data_type_set_value_owned (_tmp73_, value_owned); result = type; _vala_code_node_unref0 (sym); _g_free0 (nullable_data); _g_free0 (array_data); _g_free0 (pointers_data); _g_free0 (type_arguments_data); _g_free0 (type_name); _g_free0 (ownership_data); _g_match_info_unref0 (match); return result; } static gchar* vala_gir_parser_element_get_string (ValaGirParser* self, const gchar* attribute_name, ValaGirParserArgumentType arg_type) { ValaGirParserMetadata* _tmp0_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (attribute_name != NULL, NULL); _tmp0_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp0_, arg_type)) { ValaGirParserMetadata* _tmp1_; gchar* _tmp2_; _tmp1_ = self->priv->metadata; _tmp2_ = vala_gir_parser_metadata_get_string (_tmp1_, arg_type); result = _tmp2_; return result; } else { ValaMarkupReader* _tmp3_; gchar* _tmp4_; _tmp3_ = self->priv->reader; _tmp4_ = vala_markup_reader_get_attribute (_tmp3_, attribute_name); result = _tmp4_; return result; } } static ValaDataType* vala_gir_parser_element_get_type (ValaGirParser* self, ValaDataType* orig_type, gboolean owned_by_default, gboolean* no_array_length, gboolean* array_null_terminated, gboolean* changed) { gboolean _vala_changed = FALSE; ValaDataType* type = NULL; ValaDataType* _tmp0_; ValaGirParserMetadata* _tmp1_; ValaDataType* _tmp43_; ValaDataType* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (orig_type != NULL, NULL); _vala_changed = FALSE; _tmp0_ = _vala_code_node_ref0 (orig_type); type = _tmp0_; _tmp1_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp1_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE)) { ValaGirParserMetadata* _tmp2_; gchar* _tmp3_; gchar* _tmp4_; ValaGirParserMetadata* _tmp5_; ValaSourceReference* _tmp6_; ValaSourceReference* _tmp7_; ValaDataType* _tmp8_; _tmp2_ = self->priv->metadata; _tmp3_ = vala_gir_parser_metadata_get_string (_tmp2_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE); _tmp4_ = _tmp3_; _tmp5_ = self->priv->metadata; _tmp6_ = vala_gir_parser_metadata_get_source_reference (_tmp5_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE); _tmp7_ = _tmp6_; _tmp8_ = vala_gir_parser_parse_type_from_string (self, _tmp4_, owned_by_default, _tmp7_); _vala_code_node_unref0 (type); type = _tmp8_; _vala_source_reference_unref0 (_tmp7_); _g_free0 (_tmp4_); _vala_changed = TRUE; } else { ValaDataType* _tmp9_; _tmp9_ = type; if (!VALA_IS_VOID_TYPE (_tmp9_)) { ValaGirParserMetadata* _tmp10_; gboolean _tmp19_ = FALSE; ValaDataType* _tmp20_; ValaDataType* _tmp38_; ValaGirParserMetadata* _tmp39_; ValaDataType* _tmp40_; gboolean _tmp41_; gboolean _tmp42_; _tmp10_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp10_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS)) { ValaDataType* _tmp11_; ValaDataType* _tmp12_; ValaGirParserMetadata* _tmp13_; gchar* _tmp14_; gchar* _tmp15_; ValaGirParserMetadata* _tmp16_; ValaSourceReference* _tmp17_; ValaSourceReference* _tmp18_; _tmp11_ = type; vala_data_type_remove_all_type_arguments (_tmp11_); _tmp12_ = type; _tmp13_ = self->priv->metadata; _tmp14_ = vala_gir_parser_metadata_get_string (_tmp13_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS); _tmp15_ = _tmp14_; _tmp16_ = self->priv->metadata; _tmp17_ = vala_gir_parser_metadata_get_source_reference (_tmp16_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS); _tmp18_ = _tmp17_; vala_gir_parser_parse_type_arguments_from_string (self, _tmp12_, _tmp15_, _tmp18_); _vala_source_reference_unref0 (_tmp18_); _g_free0 (_tmp15_); } _tmp20_ = type; if (!VALA_IS_ARRAY_TYPE (_tmp20_)) { ValaGirParserMetadata* _tmp21_; _tmp21_ = self->priv->metadata; _tmp19_ = vala_gir_parser_metadata_get_bool (_tmp21_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY, FALSE); } else { _tmp19_ = FALSE; } if (_tmp19_) { ValaDataType* _tmp22_; ValaDataType* _tmp23_; ValaDataType* _tmp24_; ValaSourceReference* _tmp25_; ValaSourceReference* _tmp26_; ValaArrayType* _tmp27_; _tmp22_ = type; vala_data_type_set_value_owned (_tmp22_, TRUE); _tmp23_ = type; _tmp24_ = type; _tmp25_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp24_); _tmp26_ = _tmp25_; _tmp27_ = vala_array_type_new (_tmp23_, 1, _tmp26_); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp27_; _vala_changed = TRUE; } if (owned_by_default) { ValaDataType* _tmp28_; ValaGirParserMetadata* _tmp29_; ValaDataType* _tmp30_; gboolean _tmp31_; gboolean _tmp32_; _tmp28_ = type; _tmp29_ = self->priv->metadata; _tmp30_ = type; _tmp31_ = vala_data_type_get_value_owned (_tmp30_); _tmp32_ = _tmp31_; vala_data_type_set_value_owned (_tmp28_, !vala_gir_parser_metadata_get_bool (_tmp29_, VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED, !_tmp32_)); } else { ValaDataType* _tmp33_; ValaGirParserMetadata* _tmp34_; ValaDataType* _tmp35_; gboolean _tmp36_; gboolean _tmp37_; _tmp33_ = type; _tmp34_ = self->priv->metadata; _tmp35_ = type; _tmp36_ = vala_data_type_get_value_owned (_tmp35_); _tmp37_ = _tmp36_; vala_data_type_set_value_owned (_tmp33_, vala_gir_parser_metadata_get_bool (_tmp34_, VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED, _tmp37_)); } _tmp38_ = type; _tmp39_ = self->priv->metadata; _tmp40_ = type; _tmp41_ = vala_data_type_get_nullable (_tmp40_); _tmp42_ = _tmp41_; vala_data_type_set_nullable (_tmp38_, vala_gir_parser_metadata_get_bool (_tmp39_, VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE, _tmp42_)); } } _tmp43_ = type; if (VALA_IS_ARRAY_TYPE (_tmp43_)) { ValaGirParserMetadata* _tmp44_; if (!VALA_IS_ARRAY_TYPE (orig_type)) { *no_array_length = TRUE; } _tmp44_ = self->priv->metadata; *array_null_terminated = vala_gir_parser_metadata_get_bool (_tmp44_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_NULL_TERMINATED, *array_null_terminated); } result = type; if (changed) { *changed = _vala_changed; } return result; } static gint string_index_of_char (const gchar* self, gunichar c, gint start_index) { gchar* _result_ = NULL; gchar* _tmp0_; gchar* _tmp1_; gint result = 0; g_return_val_if_fail (self != NULL, 0); _tmp0_ = g_utf8_strchr (((gchar*) self) + start_index, (gssize) -1, c); _result_ = _tmp0_; _tmp1_ = _result_; if (_tmp1_ != NULL) { gchar* _tmp2_; _tmp2_ = _result_; result = (gint) (_tmp2_ - ((gchar*) self)); return result; } else { result = -1; return result; } } static gchar* vala_gir_parser_element_get_name (ValaGirParser* self, const gchar* gir_name) { gchar* name = NULL; gchar* _tmp0_; const gchar* _tmp1_; gchar* pattern = NULL; ValaGirParserMetadata* _tmp4_; gchar* _tmp5_; const gchar* _tmp6_; GError* _inner_error0_ = NULL; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = g_strdup (gir_name); name = _tmp0_; _tmp1_ = name; if (_tmp1_ == NULL) { ValaMarkupReader* _tmp2_; gchar* _tmp3_; _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_attribute (_tmp2_, "name"); _g_free0 (name); name = _tmp3_; } _tmp4_ = self->priv->metadata; _tmp5_ = vala_gir_parser_metadata_get_string (_tmp4_, VALA_GIR_PARSER_ARGUMENT_TYPE_NAME); pattern = _tmp5_; _tmp6_ = pattern; if (_tmp6_ != NULL) { const gchar* _tmp7_; _tmp7_ = pattern; if (string_index_of_char (_tmp7_, (gunichar) '(', 0) < 0) { const gchar* _tmp8_; gchar* _tmp9_; _tmp8_ = pattern; _tmp9_ = g_strdup (_tmp8_); _g_free0 (name); name = _tmp9_; } else { { gchar* replacement = NULL; gchar* _tmp10_; gchar** split = NULL; const gchar* _tmp11_; gchar** _tmp12_; gchar** _tmp13_; gint split_length1; gint _split_size_; gchar** _tmp14_; gint _tmp14__length1; GRegex* regex = NULL; const gchar* _tmp21_; GRegex* _tmp22_; gchar* _tmp23_ = NULL; GRegex* _tmp24_; const gchar* _tmp25_; const gchar* _tmp26_; gchar* _tmp27_; gchar* _tmp28_; _tmp10_ = g_strdup ("\\1"); replacement = _tmp10_; _tmp11_ = pattern; _tmp13_ = _tmp12_ = g_strsplit (_tmp11_, "/", 0); split = _tmp13_; split_length1 = _vala_array_length (_tmp12_); _split_size_ = split_length1; _tmp14_ = split; _tmp14__length1 = split_length1; if (_tmp14__length1 > 1) { gchar** _tmp15_; gint _tmp15__length1; const gchar* _tmp16_; gchar* _tmp17_; gchar** _tmp18_; gint _tmp18__length1; const gchar* _tmp19_; gchar* _tmp20_; _tmp15_ = split; _tmp15__length1 = split_length1; _tmp16_ = _tmp15_[0]; _tmp17_ = g_strdup (_tmp16_); _g_free0 (pattern); pattern = _tmp17_; _tmp18_ = split; _tmp18__length1 = split_length1; _tmp19_ = _tmp18_[1]; _tmp20_ = g_strdup (_tmp19_); _g_free0 (replacement); replacement = _tmp20_; } _tmp21_ = pattern; _tmp22_ = g_regex_new (_tmp21_, G_REGEX_ANCHORED, G_REGEX_MATCH_ANCHORED, &_inner_error0_); regex = _tmp22_; if (G_UNLIKELY (_inner_error0_ != NULL)) { split = (_vala_array_free (split, split_length1, (GDestroyNotify) g_free), NULL); _g_free0 (replacement); goto __catch0_g_error; } _tmp24_ = regex; _tmp25_ = name; _tmp26_ = replacement; _tmp27_ = g_regex_replace (_tmp24_, _tmp25_, (gssize) -1, 0, _tmp26_, 0, &_inner_error0_); _tmp23_ = _tmp27_; if (G_UNLIKELY (_inner_error0_ != NULL)) { _g_regex_unref0 (regex); split = (_vala_array_free (split, split_length1, (GDestroyNotify) g_free), NULL); _g_free0 (replacement); goto __catch0_g_error; } _tmp28_ = _tmp23_; _tmp23_ = NULL; _g_free0 (name); name = _tmp28_; _g_free0 (_tmp23_); _g_regex_unref0 (regex); split = (_vala_array_free (split, split_length1, (GDestroyNotify) g_free), NULL); _g_free0 (replacement); } goto __finally0; __catch0_g_error: { const gchar* _tmp29_; gchar* _tmp30_; g_clear_error (&_inner_error0_); _tmp29_ = pattern; _tmp30_ = g_strdup (_tmp29_); _g_free0 (name); name = _tmp30_; } __finally0: if (G_UNLIKELY (_inner_error0_ != NULL)) { _g_free0 (pattern); _g_free0 (name); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code); g_clear_error (&_inner_error0_); return NULL; } } } else { gboolean _tmp31_ = FALSE; const gchar* _tmp32_; _tmp32_ = name; if (_tmp32_ != NULL) { const gchar* _tmp33_; _tmp33_ = name; _tmp31_ = g_str_has_suffix (_tmp33_, "Enum"); } else { _tmp31_ = FALSE; } if (_tmp31_) { const gchar* _tmp34_; const gchar* _tmp35_; gint _tmp36_; gint _tmp37_; gint _tmp38_; gint _tmp39_; gchar* _tmp40_; _tmp34_ = name; _tmp35_ = name; _tmp36_ = strlen (_tmp35_); _tmp37_ = _tmp36_; _tmp38_ = strlen ("Enum"); _tmp39_ = _tmp38_; _tmp40_ = string_substring (_tmp34_, (glong) 0, (glong) (_tmp37_ - _tmp39_)); _g_free0 (name); name = _tmp40_; } } result = name; _g_free0 (pattern); return result; } static gchar* vala_gir_parser_element_get_type_id (ValaGirParser* self) { gchar* type_id = NULL; ValaGirParserMetadata* _tmp0_; gchar* _tmp1_; const gchar* _tmp2_; ValaMarkupReader* _tmp3_; gchar* _tmp4_; const gchar* _tmp5_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->metadata; _tmp1_ = vala_gir_parser_metadata_get_string (_tmp0_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ID); type_id = _tmp1_; _tmp2_ = type_id; if (_tmp2_ != NULL) { result = type_id; return result; } _tmp3_ = self->priv->reader; _tmp4_ = vala_markup_reader_get_attribute (_tmp3_, "glib:get-type"); _g_free0 (type_id); type_id = _tmp4_; _tmp5_ = type_id; if (_tmp5_ != NULL) { const gchar* _tmp6_; gchar* _tmp7_; _tmp6_ = type_id; _tmp7_ = g_strconcat (_tmp6_, " ()", NULL); _g_free0 (type_id); type_id = _tmp7_; } result = type_id; return result; } static void vala_gir_parser_set_array_ccode (ValaGirParser* self, ValaSymbol* sym, ValaGirParserParameterInfo* info) { gchar* type_name = NULL; ValaParameter* _tmp3_; ValaDataType* _tmp4_; ValaDataType* _tmp5_; gchar* _tmp6_; const gchar* _tmp7_; g_return_if_fail (self != NULL); g_return_if_fail (sym != NULL); g_return_if_fail (info != NULL); vala_code_node_set_attribute_double ((ValaCodeNode*) sym, "CCode", "array_length_pos", (gdouble) info->vala_idx, NULL); if (VALA_IS_PARAMETER (sym)) { ValaParameter* _tmp0_; const gchar* _tmp1_; const gchar* _tmp2_; _tmp0_ = info->param; _tmp1_ = vala_symbol_get_name ((ValaSymbol*) _tmp0_); _tmp2_ = _tmp1_; vala_code_node_set_attribute_string ((ValaCodeNode*) sym, "CCode", "array_length_cname", _tmp2_, NULL); } _tmp3_ = info->param; _tmp4_ = vala_variable_get_variable_type ((ValaVariable*) _tmp3_); _tmp5_ = _tmp4_; _tmp6_ = vala_data_type_to_qualified_string (_tmp5_, NULL); type_name = _tmp6_; _tmp7_ = type_name; if (g_strcmp0 (_tmp7_, "int") != 0) { ValaGirParserNode* st = NULL; ValaGirParserNode* _tmp8_; const gchar* _tmp9_; ValaGirParserNode* _tmp10_; ValaGirParserNode* _tmp11_; _tmp8_ = self->priv->root; _tmp9_ = type_name; _tmp10_ = vala_gir_parser_node_lookup (_tmp8_, _tmp9_, FALSE, NULL); st = _tmp10_; _tmp11_ = st; if (_tmp11_ != NULL) { gboolean _tmp12_ = FALSE; if (VALA_IS_CALLABLE (sym)) { _tmp12_ = TRUE; } else { _tmp12_ = VALA_IS_PARAMETER (sym); } if (_tmp12_) { ValaGirParserNode* _tmp13_; gchar* _tmp14_; gchar* _tmp15_; _tmp13_ = st; _tmp14_ = vala_gir_parser_node_get_cname (_tmp13_); _tmp15_ = _tmp14_; vala_code_node_set_attribute_string ((ValaCodeNode*) sym, "CCode", "array_length_type", _tmp15_, NULL); _g_free0 (_tmp15_); } } _vala_gir_parser_node_unref0 (st); } _g_free0 (type_name); } static void vala_gir_parser_set_type_id_ccode (ValaGirParser* self, ValaSymbol* sym) { gboolean _tmp0_ = FALSE; gchar* type_id = NULL; gchar* _tmp1_; const gchar* _tmp2_; g_return_if_fail (self != NULL); g_return_if_fail (sym != NULL); if (vala_code_node_has_attribute_argument ((ValaCodeNode*) sym, "CCode", "has_type_id")) { _tmp0_ = TRUE; } else { _tmp0_ = vala_code_node_has_attribute_argument ((ValaCodeNode*) sym, "CCode", "type_id"); } if (_tmp0_) { return; } _tmp1_ = vala_gir_parser_element_get_type_id (self); type_id = _tmp1_; _tmp2_ = type_id; if (_tmp2_ == NULL) { vala_code_node_set_attribute_bool ((ValaCodeNode*) sym, "CCode", "has_type_id", FALSE, NULL); } else { const gchar* _tmp3_; _tmp3_ = type_id; vala_code_node_set_attribute_string ((ValaCodeNode*) sym, "CCode", "type_id", _tmp3_, NULL); } _g_free0 (type_id); } static void vala_gir_parser_parse_repository (ValaGirParser* self) { ValaMarkupReader* _tmp0_; gchar* _tmp1_; gchar* _tmp2_; gboolean _tmp3_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "repository"); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "version"); _tmp2_ = _tmp1_; _tmp3_ = g_strcmp0 (_tmp2_, VALA_GIR_PARSER_GIR_VERSION) != 0; _g_free0 (_tmp2_); if (_tmp3_) { ValaSourceReference* _tmp4_; ValaSourceReference* _tmp5_; ValaMarkupReader* _tmp6_; gchar* _tmp7_; gchar* _tmp8_; gchar* _tmp9_; gchar* _tmp10_; _tmp4_ = vala_gir_parser_get_current_src (self); _tmp5_ = _tmp4_; _tmp6_ = self->priv->reader; _tmp7_ = vala_markup_reader_get_attribute (_tmp6_, "version"); _tmp8_ = _tmp7_; _tmp9_ = g_strdup_printf ("unsupported GIR version %s (supported: %s)", _tmp8_, VALA_GIR_PARSER_GIR_VERSION); _tmp10_ = _tmp9_; vala_report_error (_tmp5_, _tmp10_); _g_free0 (_tmp10_); _g_free0 (_tmp8_); _vala_source_reference_unref0 (_tmp5_); return; } vala_gir_parser_next (self); while (TRUE) { ValaMarkupTokenType _tmp11_; ValaMarkupReader* _tmp12_; const gchar* _tmp13_; const gchar* _tmp14_; _tmp11_ = self->priv->current_token; if (!(_tmp11_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } _tmp12_ = self->priv->reader; _tmp13_ = vala_markup_reader_get_name (_tmp12_); _tmp14_ = _tmp13_; if (g_strcmp0 (_tmp14_, "namespace") == 0) { vala_gir_parser_parse_namespace (self); } else { ValaMarkupReader* _tmp15_; const gchar* _tmp16_; const gchar* _tmp17_; _tmp15_ = self->priv->reader; _tmp16_ = vala_markup_reader_get_name (_tmp15_); _tmp17_ = _tmp16_; if (g_strcmp0 (_tmp17_, "include") == 0) { vala_gir_parser_parse_include (self); } else { ValaMarkupReader* _tmp18_; const gchar* _tmp19_; const gchar* _tmp20_; _tmp18_ = self->priv->reader; _tmp19_ = vala_markup_reader_get_name (_tmp18_); _tmp20_ = _tmp19_; if (g_strcmp0 (_tmp20_, "package") == 0) { gchar* pkg = NULL; gchar* _tmp21_; ValaSourceFile* _tmp22_; const gchar* _tmp23_; ValaCodeContext* _tmp24_; const gchar* _tmp25_; _tmp21_ = vala_gir_parser_parse_package (self); pkg = _tmp21_; _tmp22_ = self->priv->current_source_file; _tmp23_ = pkg; vala_source_file_set_package_name (_tmp22_, _tmp23_); _tmp24_ = self->priv->context; _tmp25_ = pkg; if (vala_code_context_has_package (_tmp24_, _tmp25_)) { ValaSourceFile* _tmp26_; gboolean _tmp27_; gboolean _tmp28_; _tmp26_ = self->priv->current_source_file; _tmp27_ = vala_source_file_get_from_commandline (_tmp26_); _tmp28_ = _tmp27_; if (!_tmp28_) { _g_free0 (pkg); return; } } else { ValaCodeContext* _tmp29_; const gchar* _tmp30_; _tmp29_ = self->priv->context; _tmp30_ = pkg; vala_code_context_add_package (_tmp29_, _tmp30_); } _g_free0 (pkg); } else { ValaMarkupReader* _tmp31_; const gchar* _tmp32_; const gchar* _tmp33_; _tmp31_ = self->priv->reader; _tmp32_ = vala_markup_reader_get_name (_tmp31_); _tmp33_ = _tmp32_; if (g_strcmp0 (_tmp33_, "c:include") == 0) { vala_gir_parser_parse_c_include (self); } else { ValaSourceReference* _tmp34_; ValaSourceReference* _tmp35_; ValaMarkupReader* _tmp36_; const gchar* _tmp37_; const gchar* _tmp38_; gchar* _tmp39_; gchar* _tmp40_; _tmp34_ = vala_gir_parser_get_current_src (self); _tmp35_ = _tmp34_; _tmp36_ = self->priv->reader; _tmp37_ = vala_markup_reader_get_name (_tmp36_); _tmp38_ = _tmp37_; _tmp39_ = g_strdup_printf ("unknown child element `%s' in `repository'", _tmp38_); _tmp40_ = _tmp39_; vala_report_error (_tmp35_, _tmp40_); _g_free0 (_tmp40_); _vala_source_reference_unref0 (_tmp35_); vala_gir_parser_skip_element (self); } } } } } vala_gir_parser_end_element (self, "repository"); } static void vala_gir_parser_parse_include (ValaGirParser* self) { gchar* pkg = NULL; ValaMarkupReader* _tmp0_; gchar* _tmp1_; gchar* version = NULL; ValaMarkupReader* _tmp2_; gchar* _tmp3_; const gchar* _tmp4_; ValaCodeContext* _tmp8_; const gchar* _tmp9_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "include"); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "name"); pkg = _tmp1_; _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_attribute (_tmp2_, "version"); version = _tmp3_; _tmp4_ = version; if (_tmp4_ != NULL) { const gchar* _tmp5_; const gchar* _tmp6_; gchar* _tmp7_; _tmp5_ = pkg; _tmp6_ = version; _tmp7_ = g_strdup_printf ("%s-%s", _tmp5_, _tmp6_); _g_free0 (pkg); pkg = _tmp7_; } _tmp8_ = self->priv->context; _tmp9_ = pkg; vala_code_context_add_external_package (_tmp8_, _tmp9_); vala_gir_parser_next (self); vala_gir_parser_end_element (self, "include"); _g_free0 (version); _g_free0 (pkg); } static gchar* vala_gir_parser_parse_package (ValaGirParser* self) { gchar* pkg = NULL; ValaMarkupReader* _tmp0_; gchar* _tmp1_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); vala_gir_parser_start_element (self, "package"); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "name"); pkg = _tmp1_; vala_gir_parser_next (self); vala_gir_parser_end_element (self, "package"); result = pkg; return result; } static void _vala_array_add1 (gchar** * array, gint* length, gint* size, gchar* value) { if ((*length) == (*size)) { *size = (*size) ? (2 * (*size)) : 4; *array = g_renew (gchar*, *array, (*size) + 1); } (*array)[(*length)++] = value; (*array)[*length] = NULL; } static void vala_gir_parser_parse_c_include (ValaGirParser* self) { ValaMarkupReader* _tmp0_; gchar* _tmp1_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "c:include"); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "name"); _vala_array_add1 (&self->priv->cheader_filenames, &self->priv->cheader_filenames_length1, &self->priv->_cheader_filenames_size_, _tmp1_); vala_gir_parser_next (self); vala_gir_parser_end_element (self, "c:include"); } static void vala_gir_parser_skip_element (ValaGirParser* self) { gint level = 0; g_return_if_fail (self != NULL); vala_gir_parser_next (self); level = 1; while (TRUE) { ValaMarkupTokenType _tmp0_; if (!(level > 0)) { break; } _tmp0_ = self->priv->current_token; if (_tmp0_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) { gint _tmp1_; _tmp1_ = level; level = _tmp1_ + 1; } else { ValaMarkupTokenType _tmp2_; _tmp2_ = self->priv->current_token; if (_tmp2_ == VALA_MARKUP_TOKEN_TYPE_END_ELEMENT) { gint _tmp3_; _tmp3_ = level; level = _tmp3_ - 1; } else { ValaMarkupTokenType _tmp4_; _tmp4_ = self->priv->current_token; if (_tmp4_ == VALA_MARKUP_TOKEN_TYPE_EOF) { ValaSourceReference* _tmp5_; ValaSourceReference* _tmp6_; _tmp5_ = vala_gir_parser_get_current_src (self); _tmp6_ = _tmp5_; vala_report_error (_tmp6_, "unexpected end of file"); _vala_source_reference_unref0 (_tmp6_); break; } } } vala_gir_parser_next (self); } } static ValaGirParserNode* vala_gir_parser_resolve_node (ValaGirParser* self, ValaGirParserNode* parent_scope, ValaUnresolvedSymbol* unresolved_sym, gboolean create_namespace) { ValaUnresolvedSymbol* _tmp0_; ValaUnresolvedSymbol* _tmp1_; ValaGirParserNode* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (parent_scope != NULL, NULL); g_return_val_if_fail (unresolved_sym != NULL, NULL); _tmp0_ = vala_unresolved_symbol_get_inner (unresolved_sym); _tmp1_ = _tmp0_; if (_tmp1_ == NULL) { ValaGirParserNode* scope = NULL; ValaGirParserNode* _tmp2_; _tmp2_ = _vala_gir_parser_node_ref0 (parent_scope); scope = _tmp2_; while (TRUE) { ValaGirParserNode* _tmp3_; ValaGirParserNode* node = NULL; ValaGirParserNode* _tmp4_; const gchar* _tmp5_; const gchar* _tmp6_; ValaSourceReference* _tmp7_; ValaSourceReference* _tmp8_; ValaGirParserNode* _tmp9_; ValaGirParserNode* _tmp10_; ValaGirParserNode* _tmp11_; ValaGirParserNode* _tmp12_; ValaGirParserNode* _tmp13_; _tmp3_ = scope; if (!(_tmp3_ != NULL)) { break; } _tmp4_ = scope; _tmp5_ = vala_symbol_get_name ((ValaSymbol*) unresolved_sym); _tmp6_ = _tmp5_; _tmp7_ = vala_code_node_get_source_reference ((ValaCodeNode*) unresolved_sym); _tmp8_ = _tmp7_; _tmp9_ = vala_gir_parser_node_lookup (_tmp4_, _tmp6_, create_namespace, _tmp8_); node = _tmp9_; _tmp10_ = node; if (_tmp10_ != NULL) { result = node; _vala_gir_parser_node_unref0 (scope); return result; } _tmp11_ = scope; _tmp12_ = _tmp11_->parent; _tmp13_ = _vala_gir_parser_node_ref0 (_tmp12_); _vala_gir_parser_node_unref0 (scope); scope = _tmp13_; _vala_gir_parser_node_unref0 (node); } _vala_gir_parser_node_unref0 (scope); } else { ValaGirParserNode* inner = NULL; ValaUnresolvedSymbol* _tmp14_; ValaUnresolvedSymbol* _tmp15_; ValaGirParserNode* _tmp16_; ValaGirParserNode* _tmp17_; _tmp14_ = vala_unresolved_symbol_get_inner (unresolved_sym); _tmp15_ = _tmp14_; _tmp16_ = vala_gir_parser_resolve_node (self, parent_scope, _tmp15_, create_namespace); inner = _tmp16_; _tmp17_ = inner; if (_tmp17_ != NULL) { ValaGirParserNode* _tmp18_; const gchar* _tmp19_; const gchar* _tmp20_; ValaSourceReference* _tmp21_; ValaSourceReference* _tmp22_; ValaGirParserNode* _tmp23_; _tmp18_ = inner; _tmp19_ = vala_symbol_get_name ((ValaSymbol*) unresolved_sym); _tmp20_ = _tmp19_; _tmp21_ = vala_code_node_get_source_reference ((ValaCodeNode*) unresolved_sym); _tmp22_ = _tmp21_; _tmp23_ = vala_gir_parser_node_lookup (_tmp18_, _tmp20_, create_namespace, _tmp22_); result = _tmp23_; _vala_gir_parser_node_unref0 (inner); return result; } _vala_gir_parser_node_unref0 (inner); } result = NULL; return result; } static ValaSymbol* vala_gir_parser_resolve_symbol (ValaGirParser* self, ValaGirParserNode* parent_scope, ValaUnresolvedSymbol* unresolved_sym) { ValaGirParserNode* node = NULL; ValaGirParserNode* _tmp0_; ValaGirParserNode* _tmp1_; ValaSymbol* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (parent_scope != NULL, NULL); g_return_val_if_fail (unresolved_sym != NULL, NULL); _tmp0_ = vala_gir_parser_resolve_node (self, parent_scope, unresolved_sym, FALSE); node = _tmp0_; _tmp1_ = node; if (_tmp1_ != NULL) { ValaGirParserNode* _tmp2_; ValaSymbol* _tmp3_; ValaSymbol* _tmp4_; _tmp2_ = node; _tmp3_ = _tmp2_->symbol; _tmp4_ = _vala_code_node_ref0 (_tmp3_); result = _tmp4_; _vala_gir_parser_node_unref0 (node); return result; } result = NULL; _vala_gir_parser_node_unref0 (node); return result; } static void vala_gir_parser_push_node (ValaGirParser* self, const gchar* name, gboolean merge) { ValaGirParserNode* parent = NULL; ValaGirParserNode* _tmp0_; ValaGirParserNode* _tmp1_; ValaGirParserMetadata* _tmp2_; ValaGirParserNode* node = NULL; ValaGirParserNode* _tmp14_; ValaGirParserNode* _tmp15_; gboolean _tmp16_ = FALSE; ValaGirParserNode* _tmp17_; ValaGirParserNode* _tmp27_; ValaMarkupReader* _tmp28_; const gchar* _tmp29_; const gchar* _tmp30_; gchar* _tmp31_; ValaGirParserNode* _tmp32_; ValaMarkupReader* _tmp33_; ValaMap* _tmp34_; ValaGirParserNode* _tmp35_; ValaGirParserMetadata* _tmp36_; ValaGirParserMetadata* _tmp37_; ValaGirParserNode* _tmp38_; ValaSourceReference* _tmp39_; gchar* gir_name = NULL; ValaGirParserNode* _tmp40_; gchar* _tmp41_; gboolean _tmp42_ = FALSE; ValaGirParserNode* _tmp43_; ValaGirParserNode* _tmp44_; ValaArrayList* _tmp52_; ValaGirParserNode* _tmp53_; ValaGirParserNode* _tmp54_; ValaGirParserNode* _tmp55_; g_return_if_fail (self != NULL); g_return_if_fail (name != NULL); _tmp0_ = self->priv->current; _tmp1_ = _vala_gir_parser_node_ref0 (_tmp0_); parent = _tmp1_; _tmp2_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp2_, VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT)) { ValaUnresolvedSymbol* target = NULL; ValaGirParserMetadata* _tmp3_; gchar* _tmp4_; gchar* _tmp5_; ValaGirParserMetadata* _tmp6_; ValaSourceReference* _tmp7_; ValaSourceReference* _tmp8_; ValaUnresolvedSymbol* _tmp9_; ValaUnresolvedSymbol* _tmp10_; ValaGirParserNode* _tmp11_; ValaUnresolvedSymbol* _tmp12_; ValaGirParserNode* _tmp13_; _tmp3_ = self->priv->metadata; _tmp4_ = vala_gir_parser_metadata_get_string (_tmp3_, VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT); _tmp5_ = _tmp4_; _tmp6_ = self->priv->metadata; _tmp7_ = vala_gir_parser_metadata_get_source_reference (_tmp6_, VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT); _tmp8_ = _tmp7_; _tmp9_ = vala_gir_parser_parse_symbol_from_string (self, _tmp5_, _tmp8_); _tmp10_ = _tmp9_; _vala_source_reference_unref0 (_tmp8_); _g_free0 (_tmp5_); target = _tmp10_; _tmp11_ = self->priv->root; _tmp12_ = target; _tmp13_ = vala_gir_parser_resolve_node (self, _tmp11_, _tmp12_, TRUE); _vala_gir_parser_node_unref0 (parent); parent = _tmp13_; _vala_code_node_unref0 (target); } _tmp14_ = parent; _tmp15_ = vala_gir_parser_node_lookup (_tmp14_, name, FALSE, NULL); node = _tmp15_; _tmp17_ = node; if (_tmp17_ == NULL) { _tmp16_ = TRUE; } else { gboolean _tmp18_ = FALSE; ValaGirParserNode* _tmp19_; ValaSymbol* _tmp20_; _tmp19_ = node; _tmp20_ = _tmp19_->symbol; if (_tmp20_ != NULL) { _tmp18_ = !merge; } else { _tmp18_ = FALSE; } _tmp16_ = _tmp18_; } if (_tmp16_) { ValaGirParserNode* _tmp21_; ValaGirParserNode* _tmp22_; ValaGirParserNode* _tmp23_; ValaGirParserNode* _tmp24_; _tmp21_ = vala_gir_parser_node_new (name); _vala_gir_parser_node_unref0 (node); node = _tmp21_; _tmp22_ = node; _tmp22_->new_symbol = TRUE; _tmp23_ = parent; _tmp24_ = node; vala_gir_parser_node_add_member (_tmp23_, _tmp24_); } else { ValaArrayList* _tmp25_; ValaGirParserNode* _tmp26_; _tmp25_ = vala_gir_parser_node_new_namespaces; _tmp26_ = node; vala_collection_remove ((ValaCollection*) _tmp25_, _tmp26_); } _tmp27_ = node; _tmp28_ = self->priv->reader; _tmp29_ = vala_markup_reader_get_name (_tmp28_); _tmp30_ = _tmp29_; _tmp31_ = g_strdup (_tmp30_); _g_free0 (_tmp27_->element_type); _tmp27_->element_type = _tmp31_; _tmp32_ = node; _tmp33_ = self->priv->reader; _tmp34_ = vala_markup_reader_get_attributes (_tmp33_); _vala_map_unref0 (_tmp32_->girdata); _tmp32_->girdata = _tmp34_; _tmp35_ = node; _tmp36_ = self->priv->metadata; _tmp37_ = _vala_gir_parser_metadata_ref0 (_tmp36_); _vala_gir_parser_metadata_unref0 (_tmp35_->metadata); _tmp35_->metadata = _tmp37_; _tmp38_ = node; _tmp39_ = vala_gir_parser_get_current_src (self); _vala_source_reference_unref0 (_tmp38_->source_reference); _tmp38_->source_reference = _tmp39_; _tmp40_ = node; _tmp41_ = vala_gir_parser_node_get_gir_name (_tmp40_); gir_name = _tmp41_; _tmp43_ = parent; _tmp44_ = self->priv->current; if (_tmp43_ != _tmp44_) { _tmp42_ = TRUE; } else { const gchar* _tmp45_; _tmp45_ = gir_name; _tmp42_ = g_strcmp0 (_tmp45_, name) != 0; } if (_tmp42_) { const gchar* _tmp46_; ValaUnresolvedSymbol* _tmp47_; ValaUnresolvedSymbol* _tmp48_; ValaGirParserNode* _tmp49_; ValaUnresolvedSymbol* _tmp50_; ValaUnresolvedSymbol* _tmp51_; _tmp46_ = gir_name; _tmp47_ = vala_unresolved_symbol_new (NULL, _tmp46_, NULL); _tmp48_ = _tmp47_; _tmp49_ = node; _tmp50_ = vala_gir_parser_node_get_unresolved_symbol (_tmp49_); _tmp51_ = _tmp50_; vala_gir_parser_set_symbol_mapping (self, _tmp48_, (ValaSymbol*) _tmp51_); _vala_code_node_unref0 (_tmp51_); _vala_code_node_unref0 (_tmp48_); } _tmp52_ = self->priv->tree_stack; _tmp53_ = self->priv->current; vala_collection_add ((ValaCollection*) _tmp52_, _tmp53_); _tmp54_ = node; _tmp55_ = _vala_gir_parser_node_ref0 (_tmp54_); _vala_gir_parser_node_unref0 (self->priv->current); self->priv->current = _tmp55_; _g_free0 (gir_name); _vala_gir_parser_node_unref0 (node); _vala_gir_parser_node_unref0 (parent); } static void vala_gir_parser_pop_node (ValaGirParser* self) { ValaGirParserNode* _tmp0_; ValaGirParserNode* _tmp1_; ValaArrayList* _tmp2_; ValaArrayList* _tmp3_; gint _tmp4_; gint _tmp5_; gpointer _tmp6_; g_return_if_fail (self != NULL); _tmp0_ = self->priv->current; _tmp1_ = _vala_gir_parser_node_ref0 (_tmp0_); _vala_gir_parser_node_unref0 (self->priv->old_current); self->priv->old_current = _tmp1_; _tmp2_ = self->priv->tree_stack; _tmp3_ = self->priv->tree_stack; _tmp4_ = vala_collection_get_size ((ValaCollection*) _tmp3_); _tmp5_ = _tmp4_; _tmp6_ = vala_list_remove_at ((ValaList*) _tmp2_, _tmp5_ - 1); _vala_gir_parser_node_unref0 (self->priv->current); self->priv->current = (ValaGirParserNode*) _tmp6_; } static gint string_index_of (const gchar* self, const gchar* needle, gint start_index) { gchar* _result_ = NULL; gchar* _tmp0_; gchar* _tmp1_; gint result = 0; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (needle != NULL, 0); _tmp0_ = strstr (((gchar*) self) + start_index, (gchar*) needle); _result_ = _tmp0_; _tmp1_ = _result_; if (_tmp1_ != NULL) { gchar* _tmp2_; _tmp2_ = _result_; result = (gint) (_tmp2_ - ((gchar*) self)); return result; } else { result = -1; return result; } } static void _vala_code_node_unref0_ (gpointer var) { (var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)); } static inline void _g_list_free__vala_code_node_unref0_ (GList* self) { g_list_free_full (self, (GDestroyNotify) _vala_code_node_unref0_); } static gchar* _vala_g_strjoinv (const gchar* separator, gchar** str_array, gint str_array_length1) { gboolean _tmp0_ = FALSE; gchar* result = NULL; if (separator == NULL) { separator = ""; } if (str_array != NULL) { gboolean _tmp1_ = FALSE; if (str_array_length1 > 0) { _tmp1_ = TRUE; } else { gboolean _tmp2_ = FALSE; if (str_array_length1 == -1) { const gchar* _tmp3_; _tmp3_ = str_array[0]; _tmp2_ = _tmp3_ != NULL; } else { _tmp2_ = FALSE; } _tmp1_ = _tmp2_; } _tmp0_ = _tmp1_; } else { _tmp0_ = FALSE; } if (_tmp0_) { gint i = 0; gsize len = 0UL; gint _tmp16_; gint _tmp17_; const gchar* res = NULL; void* _tmp18_; void* ptr = NULL; const gchar* _tmp19_; const gchar* _tmp20_; void* _tmp21_; const gchar* _tmp31_; len = (gsize) 1; { gboolean _tmp4_ = FALSE; i = 0; _tmp4_ = TRUE; while (TRUE) { gboolean _tmp6_ = FALSE; gboolean _tmp7_ = FALSE; gint _tmp10_ = 0; const gchar* _tmp11_; if (!_tmp4_) { gint _tmp5_; _tmp5_ = i; i = _tmp5_ + 1; } _tmp4_ = FALSE; if (str_array_length1 != -1) { _tmp7_ = i < str_array_length1; } else { _tmp7_ = FALSE; } if (_tmp7_) { _tmp6_ = TRUE; } else { gboolean _tmp8_ = FALSE; if (str_array_length1 == -1) { const gchar* _tmp9_; _tmp9_ = str_array[i]; _tmp8_ = _tmp9_ != NULL; } else { _tmp8_ = FALSE; } _tmp6_ = _tmp8_; } if (!_tmp6_) { break; } _tmp11_ = str_array[i]; if (_tmp11_ != NULL) { const gchar* _tmp12_; gint _tmp13_; gint _tmp14_; _tmp12_ = str_array[i]; _tmp13_ = strlen ((const gchar*) _tmp12_); _tmp14_ = _tmp13_; _tmp10_ = _tmp14_; } else { _tmp10_ = 0; } len += (gsize) _tmp10_; } } if (i == 0) { gchar* _tmp15_; _tmp15_ = g_strdup (""); result = _tmp15_; return result; } str_array_length1 = i; _tmp16_ = strlen ((const gchar*) separator); _tmp17_ = _tmp16_; len += (gsize) (_tmp17_ * (i - 1)); _tmp18_ = g_malloc (len); res = _tmp18_; _tmp19_ = res; _tmp20_ = str_array[0]; _tmp21_ = g_stpcpy ((void*) _tmp19_, (const gchar*) _tmp20_); ptr = _tmp21_; { gboolean _tmp22_ = FALSE; i = 1; _tmp22_ = TRUE; while (TRUE) { void* _tmp24_; void* _tmp25_; const gchar* _tmp26_ = NULL; const gchar* _tmp27_; void* _tmp29_; void* _tmp30_; if (!_tmp22_) { gint _tmp23_; _tmp23_ = i; i = _tmp23_ + 1; } _tmp22_ = FALSE; if (!(i < str_array_length1)) { break; } _tmp24_ = ptr; _tmp25_ = g_stpcpy (_tmp24_, (const gchar*) separator); ptr = _tmp25_; _tmp27_ = str_array[i]; if (_tmp27_ != NULL) { const gchar* _tmp28_; _tmp28_ = str_array[i]; _tmp26_ = (const gchar*) _tmp28_; } else { _tmp26_ = ""; } _tmp29_ = ptr; _tmp30_ = g_stpcpy (_tmp29_, _tmp26_); ptr = _tmp30_; } } _tmp31_ = res; res = NULL; result = (gchar*) _tmp31_; return result; } else { gchar* _tmp32_; _tmp32_ = g_strdup (""); result = _tmp32_; return result; } } static void vala_gir_parser_parse_namespace (ValaGirParser* self) { gchar* cprefix = NULL; ValaMarkupReader* _tmp0_; gchar* _tmp1_; const gchar* _tmp2_; gchar* lower_case_cprefix = NULL; ValaMarkupReader* _tmp6_; gchar* _tmp7_; gchar* vala_namespace = NULL; const gchar* _tmp8_; gchar* _tmp9_; gchar* gir_namespace = NULL; ValaMarkupReader* _tmp10_; gchar* _tmp11_; gchar* gir_version = NULL; ValaMarkupReader* _tmp12_; gchar* _tmp13_; const gchar* _tmp14_; ValaSet* _tmp18_; const gchar* _tmp19_; const gchar* _tmp20_; gchar* _tmp21_; gchar* _tmp22_; gboolean _tmp23_; gchar* metadata_filename = NULL; ValaCodeContext* _tmp24_; ValaSourceFile* _tmp25_; const gchar* _tmp26_; const gchar* _tmp27_; gchar* _tmp28_; gboolean _tmp29_ = FALSE; const gchar* _tmp30_; ValaGirParserMetadata* ns_metadata = NULL; ValaGirParserMetadata* _tmp46_; const gchar* _tmp47_; ValaGirParserMetadata* _tmp48_; ValaGirParserMetadata* _tmp49_; const gchar* _tmp52_; ValaSourceFile* _tmp55_; const gchar* _tmp56_; ValaSourceFile* _tmp57_; const gchar* _tmp58_; ValaNamespace* ns = NULL; const gchar* _tmp59_; ValaGirParserNode* _tmp60_; ValaGirParserNode* _tmp75_; ValaGirParserMetadata* _tmp76_; ValaGirParserMetadata* _tmp77_; ValaGirParserMetadata* _tmp78_; ValaGirParserMetadata* _tmp81_; ValaNamespace* _tmp87_; const gchar* _tmp88_; ValaNamespace* _tmp89_; const gchar* _tmp90_; const gchar* _tmp91_; const gchar* _tmp101_; gchar** _tmp104_; gint _tmp104__length1; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "namespace"); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "c:identifier-prefixes"); cprefix = _tmp1_; _tmp2_ = cprefix; if (_tmp2_ != NULL) { gint idx = 0; const gchar* _tmp3_; _tmp3_ = cprefix; idx = string_index_of (_tmp3_, ",", 0); if (idx != -1) { const gchar* _tmp4_; gchar* _tmp5_; _tmp4_ = cprefix; _tmp5_ = string_substring (_tmp4_, (glong) 0, (glong) idx); _g_free0 (cprefix); cprefix = _tmp5_; } } _tmp6_ = self->priv->reader; _tmp7_ = vala_markup_reader_get_attribute (_tmp6_, "c:symbol-prefixes"); lower_case_cprefix = _tmp7_; _tmp8_ = cprefix; _tmp9_ = g_strdup (_tmp8_); vala_namespace = _tmp9_; _tmp10_ = self->priv->reader; _tmp11_ = vala_markup_reader_get_attribute (_tmp10_, "name"); gir_namespace = _tmp11_; _tmp12_ = self->priv->reader; _tmp13_ = vala_markup_reader_get_attribute (_tmp12_, "version"); gir_version = _tmp13_; _tmp14_ = lower_case_cprefix; if (_tmp14_ != NULL) { gint idx = 0; const gchar* _tmp15_; _tmp15_ = lower_case_cprefix; idx = string_index_of (_tmp15_, ",", 0); if (idx != -1) { const gchar* _tmp16_; gchar* _tmp17_; _tmp16_ = lower_case_cprefix; _tmp17_ = string_substring (_tmp16_, (glong) 0, (glong) idx); _g_free0 (lower_case_cprefix); lower_case_cprefix = _tmp17_; } } _tmp18_ = self->priv->provided_namespaces; _tmp19_ = gir_namespace; _tmp20_ = gir_version; _tmp21_ = g_strdup_printf ("%s-%s", _tmp19_, _tmp20_); _tmp22_ = _tmp21_; _tmp23_ = vala_collection_contains ((ValaCollection*) _tmp18_, _tmp22_); _g_free0 (_tmp22_); if (_tmp23_) { vala_gir_parser_skip_element (self); _g_free0 (gir_version); _g_free0 (gir_namespace); _g_free0 (vala_namespace); _g_free0 (lower_case_cprefix); _g_free0 (cprefix); return; } _tmp24_ = self->priv->context; _tmp25_ = self->priv->current_source_file; _tmp26_ = vala_source_file_get_filename (_tmp25_); _tmp27_ = _tmp26_; _tmp28_ = vala_code_context_get_metadata_path (_tmp24_, _tmp27_); metadata_filename = _tmp28_; _tmp30_ = metadata_filename; if (_tmp30_ != NULL) { const gchar* _tmp31_; _tmp31_ = metadata_filename; _tmp29_ = g_file_test (_tmp31_, G_FILE_TEST_EXISTS); } else { _tmp29_ = FALSE; } if (_tmp29_) { ValaGirParserMetadataParser* metadata_parser = NULL; ValaGirParserMetadataParser* _tmp32_; ValaSourceFile* metadata_file = NULL; ValaCodeContext* _tmp33_; ValaSourceFile* _tmp34_; ValaSourceFileType _tmp35_; ValaSourceFileType _tmp36_; const gchar* _tmp37_; ValaSourceFile* _tmp38_; ValaCodeContext* _tmp39_; ValaSourceFile* _tmp40_; ValaGirParserMetadataParser* _tmp41_; ValaSourceFile* _tmp42_; ValaGirParserMetadata* _tmp43_; ValaArrayList* _tmp44_; ValaGirParserMetadata* _tmp45_; _tmp32_ = vala_gir_parser_metadata_parser_new (); metadata_parser = _tmp32_; _tmp33_ = self->priv->context; _tmp34_ = self->priv->current_source_file; _tmp35_ = vala_source_file_get_file_type (_tmp34_); _tmp36_ = _tmp35_; _tmp37_ = metadata_filename; _tmp38_ = vala_source_file_new (_tmp33_, _tmp36_, _tmp37_, NULL, FALSE); metadata_file = _tmp38_; _tmp39_ = self->priv->context; _tmp40_ = metadata_file; vala_code_context_add_source_file (_tmp39_, _tmp40_); _tmp41_ = metadata_parser; _tmp42_ = metadata_file; _tmp43_ = vala_gir_parser_metadata_parser_parse_metadata (_tmp41_, _tmp42_); _vala_gir_parser_metadata_unref0 (self->priv->metadata); self->priv->metadata = _tmp43_; _tmp44_ = self->priv->metadata_roots; _tmp45_ = self->priv->metadata; vala_collection_add ((ValaCollection*) _tmp44_, _tmp45_); _vala_source_file_unref0 (metadata_file); _vala_gir_parser_metadata_parser_unref0 (metadata_parser); } _tmp46_ = self->priv->metadata; _tmp47_ = gir_namespace; _tmp48_ = vala_gir_parser_metadata_match_child (_tmp46_, _tmp47_, NULL); ns_metadata = _tmp48_; _tmp49_ = ns_metadata; if (vala_gir_parser_metadata_has_argument (_tmp49_, VALA_GIR_PARSER_ARGUMENT_TYPE_NAME)) { ValaGirParserMetadata* _tmp50_; gchar* _tmp51_; _tmp50_ = ns_metadata; _tmp51_ = vala_gir_parser_metadata_get_string (_tmp50_, VALA_GIR_PARSER_ARGUMENT_TYPE_NAME); _g_free0 (vala_namespace); vala_namespace = _tmp51_; } _tmp52_ = vala_namespace; if (_tmp52_ == NULL) { const gchar* _tmp53_; gchar* _tmp54_; _tmp53_ = gir_namespace; _tmp54_ = g_strdup (_tmp53_); _g_free0 (vala_namespace); vala_namespace = _tmp54_; } _tmp55_ = self->priv->current_source_file; _tmp56_ = gir_namespace; vala_source_file_set_gir_namespace (_tmp55_, _tmp56_); _tmp57_ = self->priv->current_source_file; _tmp58_ = gir_version; vala_source_file_set_gir_version (_tmp57_, _tmp58_); _tmp59_ = vala_namespace; vala_gir_parser_push_node (self, _tmp59_, TRUE); _tmp60_ = self->priv->current; if (_tmp60_->new_symbol) { const gchar* _tmp61_; ValaGirParserNode* _tmp62_; ValaSourceReference* _tmp63_; ValaNamespace* _tmp64_; ValaGirParserNode* _tmp65_; ValaNamespace* _tmp66_; ValaSymbol* _tmp67_; _tmp61_ = vala_namespace; _tmp62_ = self->priv->current; _tmp63_ = _tmp62_->source_reference; _tmp64_ = vala_namespace_new (_tmp61_, _tmp63_); _vala_code_node_unref0 (ns); ns = _tmp64_; _tmp65_ = self->priv->current; _tmp66_ = ns; _tmp67_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp66_); _vala_code_node_unref0 (_tmp65_->symbol); _tmp65_->symbol = _tmp67_; } else { ValaGirParserNode* _tmp68_; ValaSymbol* _tmp69_; ValaNamespace* _tmp70_; ValaNamespace* _tmp71_; ValaNamespace* _tmp72_; ValaGirParserNode* _tmp73_; ValaSourceReference* _tmp74_; _tmp68_ = self->priv->current; _tmp69_ = _tmp68_->symbol; _tmp70_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_NAMESPACE, ValaNamespace)); _vala_code_node_unref0 (ns); ns = _tmp70_; _tmp71_ = ns; (((ValaCodeNode*) _tmp71_)->attributes == NULL) ? NULL : (((ValaCodeNode*) _tmp71_)->attributes = (_g_list_free__vala_code_node_unref0_ (((ValaCodeNode*) _tmp71_)->attributes), NULL)); ((ValaCodeNode*) _tmp71_)->attributes = NULL; _tmp72_ = ns; _tmp73_ = self->priv->current; _tmp74_ = _tmp73_->source_reference; vala_code_node_set_source_reference ((ValaCodeNode*) _tmp72_, _tmp74_); } _tmp75_ = self->priv->current; _tmp76_ = ns_metadata; _tmp77_ = _vala_gir_parser_metadata_ref0 (_tmp76_); _vala_gir_parser_metadata_unref0 (_tmp75_->metadata); _tmp75_->metadata = _tmp77_; _tmp78_ = ns_metadata; if (vala_gir_parser_metadata_has_argument (_tmp78_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX)) { ValaGirParserMetadata* _tmp79_; gchar* _tmp80_; _tmp79_ = ns_metadata; _tmp80_ = vala_gir_parser_metadata_get_string (_tmp79_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX); _g_free0 (cprefix); cprefix = _tmp80_; } _tmp81_ = ns_metadata; if (vala_gir_parser_metadata_has_argument (_tmp81_, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX)) { ValaGirParserMetadata* _tmp82_; gchar* _tmp83_; _tmp82_ = ns_metadata; _tmp83_ = vala_gir_parser_metadata_get_string (_tmp82_, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX); _g_free0 (lower_case_cprefix); lower_case_cprefix = _tmp83_; } else { const gchar* _tmp84_; _tmp84_ = lower_case_cprefix; if (_tmp84_ != NULL) { const gchar* _tmp85_; gchar* _tmp86_; _tmp85_ = lower_case_cprefix; _tmp86_ = g_strconcat (_tmp85_, "_", NULL); _g_free0 (lower_case_cprefix); lower_case_cprefix = _tmp86_; } } _tmp87_ = ns; _tmp88_ = gir_namespace; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp87_, "CCode", "gir_namespace", _tmp88_, NULL); _tmp89_ = ns; _tmp90_ = gir_version; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp89_, "CCode", "gir_version", _tmp90_, NULL); _tmp91_ = cprefix; if (_tmp91_ != NULL) { ValaNamespace* _tmp92_; const gchar* _tmp93_; const gchar* _tmp94_; _tmp92_ = ns; _tmp93_ = cprefix; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp92_, "CCode", "cprefix", _tmp93_, NULL); _tmp94_ = lower_case_cprefix; if (_tmp94_ == NULL) { ValaNamespace* _tmp95_; const gchar* _tmp96_; gchar* _tmp97_; gchar* _tmp98_; gchar* _tmp99_; gchar* _tmp100_; _tmp95_ = ns; _tmp96_ = cprefix; _tmp97_ = vala_symbol_camel_case_to_lower_case (_tmp96_); _tmp98_ = _tmp97_; _tmp99_ = g_strconcat (_tmp98_, "_", NULL); _tmp100_ = _tmp99_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp95_, "CCode", "lower_case_cprefix", _tmp100_, NULL); _g_free0 (_tmp100_); _g_free0 (_tmp98_); } } _tmp101_ = lower_case_cprefix; if (_tmp101_ != NULL) { ValaNamespace* _tmp102_; const gchar* _tmp103_; _tmp102_ = ns; _tmp103_ = lower_case_cprefix; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp102_, "CCode", "lower_case_cprefix", _tmp103_, NULL); } _tmp104_ = self->priv->cheader_filenames; _tmp104__length1 = self->priv->cheader_filenames_length1; if (_tmp104_ != NULL) { ValaNamespace* _tmp105_; gchar** _tmp106_; gint _tmp106__length1; gchar* _tmp107_; gchar* _tmp108_; _tmp105_ = ns; _tmp106_ = self->priv->cheader_filenames; _tmp106__length1 = self->priv->cheader_filenames_length1; _tmp107_ = _vala_g_strjoinv (",", _tmp106_, (gint) _tmp106__length1); _tmp108_ = _tmp107_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp105_, "CCode", "cheader_filename", _tmp108_, NULL); _g_free0 (_tmp108_); } vala_gir_parser_next (self); while (TRUE) { ValaMarkupTokenType _tmp109_; ValaMarkupReader* _tmp110_; const gchar* _tmp111_; const gchar* _tmp112_; _tmp109_ = self->priv->current_token; if (!(_tmp109_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { vala_gir_parser_skip_element (self); continue; } _tmp110_ = self->priv->reader; _tmp111_ = vala_markup_reader_get_name (_tmp110_); _tmp112_ = _tmp111_; if (g_strcmp0 (_tmp112_, "alias") == 0) { vala_gir_parser_parse_alias (self); } else { ValaMarkupReader* _tmp113_; const gchar* _tmp114_; const gchar* _tmp115_; _tmp113_ = self->priv->reader; _tmp114_ = vala_markup_reader_get_name (_tmp113_); _tmp115_ = _tmp114_; if (g_strcmp0 (_tmp115_, "enumeration") == 0) { ValaGirParserMetadata* _tmp116_; _tmp116_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp116_, VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN)) { ValaGirParserMetadata* _tmp117_; _tmp117_ = self->priv->metadata; if (vala_gir_parser_metadata_get_bool (_tmp117_, VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN, FALSE)) { vala_gir_parser_parse_error_domain (self); } else { vala_gir_parser_parse_enumeration (self, "enumeration", FALSE); } } else { gboolean _tmp118_ = FALSE; ValaMarkupReader* _tmp119_; gchar* _tmp120_; gchar* _tmp121_; gboolean _tmp122_; _tmp119_ = self->priv->reader; _tmp120_ = vala_markup_reader_get_attribute (_tmp119_, "glib:error-quark"); _tmp121_ = _tmp120_; _tmp122_ = _tmp121_ != NULL; _g_free0 (_tmp121_); if (_tmp122_) { _tmp118_ = TRUE; } else { ValaMarkupReader* _tmp123_; gchar* _tmp124_; gchar* _tmp125_; _tmp123_ = self->priv->reader; _tmp124_ = vala_markup_reader_get_attribute (_tmp123_, "glib:error-domain"); _tmp125_ = _tmp124_; _tmp118_ = _tmp125_ != NULL; _g_free0 (_tmp125_); } if (_tmp118_) { vala_gir_parser_parse_error_domain (self); } else { vala_gir_parser_parse_enumeration (self, "enumeration", FALSE); } } } else { ValaMarkupReader* _tmp126_; const gchar* _tmp127_; const gchar* _tmp128_; _tmp126_ = self->priv->reader; _tmp127_ = vala_markup_reader_get_name (_tmp126_); _tmp128_ = _tmp127_; if (g_strcmp0 (_tmp128_, "bitfield") == 0) { vala_gir_parser_parse_bitfield (self); } else { ValaMarkupReader* _tmp129_; const gchar* _tmp130_; const gchar* _tmp131_; _tmp129_ = self->priv->reader; _tmp130_ = vala_markup_reader_get_name (_tmp129_); _tmp131_ = _tmp130_; if (g_strcmp0 (_tmp131_, "function") == 0) { vala_gir_parser_parse_method (self, "function"); } else { ValaMarkupReader* _tmp132_; const gchar* _tmp133_; const gchar* _tmp134_; _tmp132_ = self->priv->reader; _tmp133_ = vala_markup_reader_get_name (_tmp132_); _tmp134_ = _tmp133_; if (g_strcmp0 (_tmp134_, "function-macro") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp135_; const gchar* _tmp136_; const gchar* _tmp137_; _tmp135_ = self->priv->reader; _tmp136_ = vala_markup_reader_get_name (_tmp135_); _tmp137_ = _tmp136_; if (g_strcmp0 (_tmp137_, "callback") == 0) { vala_gir_parser_parse_callback (self); } else { ValaMarkupReader* _tmp138_; const gchar* _tmp139_; const gchar* _tmp140_; _tmp138_ = self->priv->reader; _tmp139_ = vala_markup_reader_get_name (_tmp138_); _tmp140_ = _tmp139_; if (g_strcmp0 (_tmp140_, "record") == 0) { ValaGirParserMetadata* _tmp141_; _tmp141_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp141_, VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT)) { ValaGirParserMetadata* _tmp142_; _tmp142_ = self->priv->metadata; if (vala_gir_parser_metadata_get_bool (_tmp142_, VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT, FALSE)) { vala_gir_parser_parse_record (self); } else { vala_gir_parser_parse_boxed (self, "record"); } } else { gchar* _tmp143_; gchar* _tmp144_; gboolean _tmp145_; _tmp143_ = vala_gir_parser_element_get_type_id (self); _tmp144_ = _tmp143_; _tmp145_ = _tmp144_ != NULL; _g_free0 (_tmp144_); if (_tmp145_) { vala_gir_parser_parse_boxed (self, "record"); } else { ValaMarkupReader* _tmp146_; gchar* _tmp147_; gchar* _tmp148_; gboolean _tmp149_; _tmp146_ = self->priv->reader; _tmp147_ = vala_markup_reader_get_attribute (_tmp146_, "name"); _tmp148_ = _tmp147_; _tmp149_ = !g_str_has_suffix (_tmp148_, "Private"); _g_free0 (_tmp148_); if (_tmp149_) { gboolean _tmp150_ = FALSE; ValaMarkupReader* _tmp151_; gchar* _tmp152_; gchar* _tmp153_; gboolean _tmp154_; _tmp151_ = self->priv->reader; _tmp152_ = vala_markup_reader_get_attribute (_tmp151_, "glib:is-gtype-struct-for"); _tmp153_ = _tmp152_; _tmp154_ = _tmp153_ == NULL; _g_free0 (_tmp153_); if (_tmp154_) { ValaMarkupReader* _tmp155_; gchar* _tmp156_; gchar* _tmp157_; _tmp155_ = self->priv->reader; _tmp156_ = vala_markup_reader_get_attribute (_tmp155_, "disguised"); _tmp157_ = _tmp156_; _tmp150_ = g_strcmp0 (_tmp157_, "1") == 0; _g_free0 (_tmp157_); } else { _tmp150_ = FALSE; } if (_tmp150_) { vala_gir_parser_parse_boxed (self, "record"); } else { vala_gir_parser_parse_record (self); } } else { vala_gir_parser_skip_element (self); } } } } else { ValaMarkupReader* _tmp158_; const gchar* _tmp159_; const gchar* _tmp160_; _tmp158_ = self->priv->reader; _tmp159_ = vala_markup_reader_get_name (_tmp158_); _tmp160_ = _tmp159_; if (g_strcmp0 (_tmp160_, "class") == 0) { vala_gir_parser_parse_class (self); } else { ValaMarkupReader* _tmp161_; const gchar* _tmp162_; const gchar* _tmp163_; _tmp161_ = self->priv->reader; _tmp162_ = vala_markup_reader_get_name (_tmp161_); _tmp163_ = _tmp162_; if (g_strcmp0 (_tmp163_, "interface") == 0) { vala_gir_parser_parse_interface (self); } else { ValaMarkupReader* _tmp164_; const gchar* _tmp165_; const gchar* _tmp166_; _tmp164_ = self->priv->reader; _tmp165_ = vala_markup_reader_get_name (_tmp164_); _tmp166_ = _tmp165_; if (g_strcmp0 (_tmp166_, "glib:boxed") == 0) { vala_gir_parser_parse_boxed (self, "glib:boxed"); } else { ValaMarkupReader* _tmp167_; const gchar* _tmp168_; const gchar* _tmp169_; _tmp167_ = self->priv->reader; _tmp168_ = vala_markup_reader_get_name (_tmp167_); _tmp169_ = _tmp168_; if (g_strcmp0 (_tmp169_, "union") == 0) { gboolean _tmp170_ = FALSE; gchar* _tmp171_; gchar* _tmp172_; gboolean _tmp173_; _tmp171_ = vala_gir_parser_element_get_type_id (self); _tmp172_ = _tmp171_; _tmp173_ = _tmp172_ != NULL; _g_free0 (_tmp172_); if (_tmp173_) { ValaGirParserMetadata* _tmp174_; _tmp174_ = self->priv->metadata; _tmp170_ = !vala_gir_parser_metadata_get_bool (_tmp174_, VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT, FALSE); } else { _tmp170_ = FALSE; } if (_tmp170_) { vala_gir_parser_parse_boxed (self, "union"); } else { vala_gir_parser_parse_union (self); } } else { ValaMarkupReader* _tmp175_; const gchar* _tmp176_; const gchar* _tmp177_; _tmp175_ = self->priv->reader; _tmp176_ = vala_markup_reader_get_name (_tmp175_); _tmp177_ = _tmp176_; if (g_strcmp0 (_tmp177_, "constant") == 0) { vala_gir_parser_parse_constant (self); } else { ValaMarkupReader* _tmp178_; const gchar* _tmp179_; const gchar* _tmp180_; _tmp178_ = self->priv->reader; _tmp179_ = vala_markup_reader_get_name (_tmp178_); _tmp180_ = _tmp179_; if (g_strcmp0 (_tmp180_, "docsection") == 0) { vala_gir_parser_skip_element (self); } else { ValaSourceReference* _tmp181_; ValaSourceReference* _tmp182_; ValaMarkupReader* _tmp183_; const gchar* _tmp184_; const gchar* _tmp185_; gchar* _tmp186_; gchar* _tmp187_; _tmp181_ = vala_gir_parser_get_current_src (self); _tmp182_ = _tmp181_; _tmp183_ = self->priv->reader; _tmp184_ = vala_markup_reader_get_name (_tmp183_); _tmp185_ = _tmp184_; _tmp186_ = g_strdup_printf ("unknown child element `%s' in `namespace'", _tmp185_); _tmp187_ = _tmp186_; vala_report_error (_tmp182_, _tmp187_); _g_free0 (_tmp187_); _vala_source_reference_unref0 (_tmp182_); vala_gir_parser_skip_element (self); } } } } } } } } } } } } } vala_gir_parser_pop_metadata (self); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "namespace"); _vala_code_node_unref0 (ns); _vala_gir_parser_metadata_unref0 (ns_metadata); _g_free0 (metadata_filename); _g_free0 (gir_version); _g_free0 (gir_namespace); _g_free0 (vala_namespace); _g_free0 (lower_case_cprefix); _g_free0 (cprefix); } static void vala_gir_parser_parse_alias (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; ValaGirParserNode* _tmp2_; ValaGirComment* _tmp3_; gboolean no_array_length = FALSE; gboolean array_null_terminated = FALSE; ValaGirParserNode* _tmp8_; ValaDataType* _tmp9_; ValaDataType* _tmp10_; ValaDataType* _tmp11_; ValaGirParserMetadata* _tmp12_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "alias"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; vala_gir_parser_push_node (self, _tmp1_, TRUE); _g_free0 (_tmp1_); vala_gir_parser_next (self); _tmp2_ = self->priv->current; _tmp3_ = _tmp2_->comment; if (_tmp3_ == NULL) { ValaGirParserNode* _tmp4_; ValaGirComment* _tmp5_; _tmp4_ = self->priv->current; _tmp5_ = vala_gir_parser_parse_symbol_doc (self); _vala_comment_unref0 (_tmp4_->comment); _tmp4_->comment = _tmp5_; } else { ValaGirComment* _tmp6_; ValaGirComment* _tmp7_; _tmp6_ = vala_gir_parser_parse_symbol_doc (self); _tmp7_ = _tmp6_; _vala_comment_unref0 (_tmp7_); } no_array_length = FALSE; array_null_terminated = FALSE; _tmp8_ = self->priv->current; _tmp9_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL); _tmp10_ = _tmp9_; _tmp11_ = vala_gir_parser_element_get_type (self, _tmp10_, TRUE, &no_array_length, &array_null_terminated, NULL); _vala_code_node_unref0 (_tmp8_->base_type); _tmp8_->base_type = _tmp11_; _vala_code_node_unref0 (_tmp10_); _tmp12_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp12_, VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE)) { ValaGirParserNode* _tmp13_; ValaGirParserMetadata* _tmp14_; gchar* _tmp15_; gchar* _tmp16_; ValaGirParserMetadata* _tmp17_; ValaSourceReference* _tmp18_; ValaSourceReference* _tmp19_; ValaDataType* _tmp20_; _tmp13_ = self->priv->current; _tmp14_ = self->priv->metadata; _tmp15_ = vala_gir_parser_metadata_get_string (_tmp14_, VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE); _tmp16_ = _tmp15_; _tmp17_ = self->priv->metadata; _tmp18_ = vala_gir_parser_metadata_get_source_reference (_tmp17_, VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE); _tmp19_ = _tmp18_; _tmp20_ = vala_gir_parser_parse_type_from_string (self, _tmp16_, TRUE, _tmp19_); _vala_code_node_unref0 (_tmp13_->base_type); _tmp13_->base_type = _tmp20_; _vala_source_reference_unref0 (_tmp19_); _g_free0 (_tmp16_); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "alias"); } static gunichar string_get_char (const gchar* self, glong index) { gunichar result = 0U; g_return_val_if_fail (self != NULL, 0U); result = g_utf8_get_char (((gchar*) self) + index); return result; } static void vala_gir_parser_calculate_common_prefix (ValaGirParser* self, gchar* * common_prefix, const gchar* cname) { g_return_if_fail (self != NULL); g_return_if_fail (cname != NULL); if ((*common_prefix) == NULL) { gchar* _tmp0_; _tmp0_ = g_strdup (cname); _g_free0 (*common_prefix); *common_prefix = _tmp0_; while (TRUE) { gboolean _tmp1_ = FALSE; gint _tmp2_; gint _tmp3_; gint _tmp4_; gint _tmp5_; gchar* _tmp6_; _tmp2_ = strlen (*common_prefix); _tmp3_ = _tmp2_; if (_tmp3_ > 0) { _tmp1_ = !g_str_has_suffix (*common_prefix, "_"); } else { _tmp1_ = FALSE; } if (!_tmp1_) { break; } _tmp4_ = strlen (*common_prefix); _tmp5_ = _tmp4_; _tmp6_ = string_substring (*common_prefix, (glong) 0, (glong) (_tmp5_ - 1)); _g_free0 (*common_prefix); *common_prefix = _tmp6_; } } else { while (TRUE) { gint _tmp7_; gint _tmp8_; gchar* _tmp9_; if (!(!g_str_has_prefix (cname, *common_prefix))) { break; } _tmp7_ = strlen (*common_prefix); _tmp8_ = _tmp7_; _tmp9_ = string_substring (*common_prefix, (glong) 0, (glong) (_tmp8_ - 1)); _g_free0 (*common_prefix); *common_prefix = _tmp9_; } } while (TRUE) { gboolean _tmp10_ = FALSE; gint _tmp11_; gint _tmp12_; gint _tmp21_; gint _tmp22_; gchar* _tmp23_; _tmp11_ = strlen (*common_prefix); _tmp12_ = _tmp11_; if (_tmp12_ > 0) { gboolean _tmp13_ = FALSE; if (!g_str_has_suffix (*common_prefix, "_")) { _tmp13_ = TRUE; } else { gboolean _tmp14_ = FALSE; gint _tmp15_; gint _tmp16_; _tmp15_ = strlen (*common_prefix); _tmp16_ = _tmp15_; if (g_unichar_isdigit (string_get_char (cname, (glong) _tmp16_))) { gint _tmp17_; gint _tmp18_; gint _tmp19_; gint _tmp20_; _tmp17_ = strlen (cname); _tmp18_ = _tmp17_; _tmp19_ = strlen (*common_prefix); _tmp20_ = _tmp19_; _tmp14_ = (_tmp18_ - _tmp20_) <= 1; } else { _tmp14_ = FALSE; } _tmp13_ = _tmp14_; } _tmp10_ = _tmp13_; } else { _tmp10_ = FALSE; } if (!_tmp10_) { break; } _tmp21_ = strlen (*common_prefix); _tmp22_ = _tmp21_; _tmp23_ = string_substring (*common_prefix, (glong) 0, (glong) (_tmp22_ - 1)); _g_free0 (*common_prefix); *common_prefix = _tmp23_; } } static ValaGirComment* vala_gir_parser_parse_symbol_doc (ValaGirParser* self) { ValaGirComment* comment = NULL; ValaGirComment* result = NULL; g_return_val_if_fail (self != NULL, NULL); comment = NULL; while (TRUE) { ValaMarkupTokenType _tmp0_; const gchar* reader_name = NULL; ValaMarkupReader* _tmp1_; const gchar* _tmp2_; const gchar* _tmp3_; const gchar* _tmp4_; _tmp0_ = self->priv->current_token; if (!(_tmp0_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } _tmp1_ = self->priv->reader; _tmp2_ = vala_markup_reader_get_name (_tmp1_); _tmp3_ = _tmp2_; reader_name = _tmp3_; _tmp4_ = reader_name; if (g_strcmp0 (_tmp4_, "doc") == 0) { ValaMarkupTokenType _tmp5_; vala_gir_parser_start_element (self, "doc"); vala_gir_parser_next (self); _tmp5_ = self->priv->current_token; if (_tmp5_ == VALA_MARKUP_TOKEN_TYPE_TEXT) { ValaMarkupReader* _tmp6_; const gchar* _tmp7_; const gchar* _tmp8_; ValaGirParserNode* _tmp9_; ValaSourceReference* _tmp10_; ValaGirComment* _tmp11_; _tmp6_ = self->priv->reader; _tmp7_ = vala_markup_reader_get_content (_tmp6_); _tmp8_ = _tmp7_; _tmp9_ = self->priv->current; _tmp10_ = _tmp9_->source_reference; _tmp11_ = vala_gir_comment_new (_tmp8_, _tmp10_); _vala_comment_unref0 (comment); comment = _tmp11_; vala_gir_parser_next (self); } vala_gir_parser_end_element (self, "doc"); } else { gboolean _tmp12_ = FALSE; gboolean _tmp13_ = FALSE; const gchar* _tmp14_; _tmp14_ = reader_name; if (g_strcmp0 (_tmp14_, "doc-version") == 0) { _tmp13_ = TRUE; } else { const gchar* _tmp15_; _tmp15_ = reader_name; _tmp13_ = g_strcmp0 (_tmp15_, "doc-deprecated") == 0; } if (_tmp13_) { _tmp12_ = TRUE; } else { const gchar* _tmp16_; _tmp16_ = reader_name; _tmp12_ = g_strcmp0 (_tmp16_, "doc-stability") == 0; } if (_tmp12_) { vala_gir_parser_skip_element (self); } else { const gchar* _tmp17_; _tmp17_ = reader_name; if (g_strcmp0 (_tmp17_, "source-position") == 0) { vala_gir_parser_skip_element (self); } else { const gchar* _tmp18_; _tmp18_ = reader_name; if (g_strcmp0 (_tmp18_, "attribute") == 0) { vala_gir_parser_skip_element (self); } else { break; } } } } } result = comment; return result; } static ValaComment* vala_gir_parser_parse_doc (ValaGirParser* self) { ValaComment* comment = NULL; ValaComment* result = NULL; g_return_val_if_fail (self != NULL, NULL); comment = NULL; while (TRUE) { ValaMarkupTokenType _tmp0_; const gchar* reader_name = NULL; ValaMarkupReader* _tmp1_; const gchar* _tmp2_; const gchar* _tmp3_; const gchar* _tmp4_; _tmp0_ = self->priv->current_token; if (!(_tmp0_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } _tmp1_ = self->priv->reader; _tmp2_ = vala_markup_reader_get_name (_tmp1_); _tmp3_ = _tmp2_; reader_name = _tmp3_; _tmp4_ = reader_name; if (g_strcmp0 (_tmp4_, "doc") == 0) { ValaMarkupTokenType _tmp5_; vala_gir_parser_start_element (self, "doc"); vala_gir_parser_next (self); _tmp5_ = self->priv->current_token; if (_tmp5_ == VALA_MARKUP_TOKEN_TYPE_TEXT) { ValaMarkupReader* _tmp6_; const gchar* _tmp7_; const gchar* _tmp8_; ValaGirParserNode* _tmp9_; ValaSourceReference* _tmp10_; ValaComment* _tmp11_; _tmp6_ = self->priv->reader; _tmp7_ = vala_markup_reader_get_content (_tmp6_); _tmp8_ = _tmp7_; _tmp9_ = self->priv->current; _tmp10_ = _tmp9_->source_reference; _tmp11_ = vala_comment_new (_tmp8_, _tmp10_); _vala_comment_unref0 (comment); comment = _tmp11_; vala_gir_parser_next (self); } vala_gir_parser_end_element (self, "doc"); } else { gboolean _tmp12_ = FALSE; gboolean _tmp13_ = FALSE; const gchar* _tmp14_; _tmp14_ = reader_name; if (g_strcmp0 (_tmp14_, "doc-version") == 0) { _tmp13_ = TRUE; } else { const gchar* _tmp15_; _tmp15_ = reader_name; _tmp13_ = g_strcmp0 (_tmp15_, "doc-deprecated") == 0; } if (_tmp13_) { _tmp12_ = TRUE; } else { const gchar* _tmp16_; _tmp16_ = reader_name; _tmp12_ = g_strcmp0 (_tmp16_, "doc-stability") == 0; } if (_tmp12_) { vala_gir_parser_skip_element (self); } else { const gchar* _tmp17_; _tmp17_ = reader_name; if (g_strcmp0 (_tmp17_, "source-position") == 0) { vala_gir_parser_skip_element (self); } else { const gchar* _tmp18_; _tmp18_ = reader_name; if (g_strcmp0 (_tmp18_, "attribute") == 0) { vala_gir_parser_skip_element (self); } else { break; } } } } } result = comment; return result; } static void vala_gir_parser_parse_enumeration (ValaGirParser* self, const gchar* element_name, gboolean error_domain) { gchar* _tmp0_; gchar* _tmp1_; ValaSymbol* sym = NULL; ValaGirParserNode* _tmp2_; ValaSymbol* _tmp23_; gchar* common_prefix = NULL; gboolean explicit_prefix = FALSE; ValaGirParserMetadata* _tmp24_; gboolean has_member = FALSE; ValaSymbol* _tmp29_; ValaGirComment* _tmp30_; ValaGirComment* _tmp31_; const gchar* _tmp58_; g_return_if_fail (self != NULL); g_return_if_fail (element_name != NULL); vala_gir_parser_start_element (self, element_name); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; vala_gir_parser_push_node (self, _tmp1_, TRUE); _g_free0 (_tmp1_); _tmp2_ = self->priv->current; if (_tmp2_->new_symbol) { ValaGirParserNode* _tmp16_; ValaSymbol* _tmp17_; ValaSymbol* _tmp18_; if (error_domain) { ValaGirParserNode* _tmp3_; const gchar* _tmp4_; ValaGirParserNode* _tmp5_; ValaSourceReference* _tmp6_; ValaErrorDomain* _tmp7_; _tmp3_ = self->priv->current; _tmp4_ = _tmp3_->name; _tmp5_ = self->priv->current; _tmp6_ = _tmp5_->source_reference; _tmp7_ = vala_error_domain_new (_tmp4_, _tmp6_, NULL); _vala_code_node_unref0 (sym); sym = (ValaSymbol*) _tmp7_; } else { ValaEnum* en = NULL; ValaGirParserNode* _tmp8_; const gchar* _tmp9_; ValaGirParserNode* _tmp10_; ValaSourceReference* _tmp11_; ValaEnum* _tmp12_; ValaEnum* _tmp14_; ValaSymbol* _tmp15_; _tmp8_ = self->priv->current; _tmp9_ = _tmp8_->name; _tmp10_ = self->priv->current; _tmp11_ = _tmp10_->source_reference; _tmp12_ = vala_enum_new (_tmp9_, _tmp11_, NULL); en = _tmp12_; if (g_strcmp0 (element_name, "bitfield") == 0) { ValaEnum* _tmp13_; _tmp13_ = en; vala_code_node_set_attribute ((ValaCodeNode*) _tmp13_, "Flags", TRUE, NULL); } _tmp14_ = en; _tmp15_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp14_); _vala_code_node_unref0 (sym); sym = _tmp15_; _vala_code_node_unref0 (en); } _tmp16_ = self->priv->current; _tmp17_ = sym; _tmp18_ = _vala_code_node_ref0 (_tmp17_); _vala_code_node_unref0 (_tmp16_->symbol); _tmp16_->symbol = _tmp18_; } else { ValaGirParserNode* _tmp19_; ValaSymbol* _tmp20_; ValaSymbol* _tmp21_; _tmp19_ = self->priv->current; _tmp20_ = _tmp19_->symbol; _tmp21_ = _vala_code_node_ref0 (_tmp20_); _vala_code_node_unref0 (sym); sym = _tmp21_; } if (!error_domain) { ValaSymbol* _tmp22_; _tmp22_ = sym; vala_gir_parser_set_type_id_ccode (self, _tmp22_); } _tmp23_ = sym; vala_symbol_set_access (_tmp23_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); common_prefix = NULL; explicit_prefix = FALSE; _tmp24_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp24_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX)) { ValaSymbol* _tmp25_; ValaGirParserMetadata* _tmp26_; gchar* _tmp27_; gchar* _tmp28_; _tmp25_ = sym; _tmp26_ = self->priv->metadata; _tmp27_ = vala_gir_parser_metadata_get_string (_tmp26_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX); _tmp28_ = _tmp27_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp25_, "CCode", "cprefix", _tmp28_, NULL); _g_free0 (_tmp28_); explicit_prefix = TRUE; } has_member = FALSE; vala_gir_parser_next (self); _tmp29_ = sym; _tmp30_ = vala_gir_parser_parse_symbol_doc (self); _tmp31_ = _tmp30_; vala_symbol_set_comment (_tmp29_, (ValaComment*) _tmp31_); _vala_comment_unref0 (_tmp31_); while (TRUE) { ValaMarkupTokenType _tmp32_; ValaMarkupReader* _tmp33_; const gchar* _tmp34_; const gchar* _tmp35_; _tmp32_ = self->priv->current_token; if (!(_tmp32_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { vala_gir_parser_skip_element (self); continue; } _tmp33_ = self->priv->reader; _tmp34_ = vala_markup_reader_get_name (_tmp33_); _tmp35_ = _tmp34_; if (g_strcmp0 (_tmp35_, "member") == 0) { has_member = TRUE; if (error_domain) { vala_gir_parser_parse_error_member (self); } else { vala_gir_parser_parse_enumeration_member (self); } if (!explicit_prefix) { ValaGirParserNode* _tmp36_; gchar* _tmp37_; gchar* _tmp38_; _tmp36_ = self->priv->old_current; _tmp37_ = vala_gir_parser_node_get_cname (_tmp36_); _tmp38_ = _tmp37_; vala_gir_parser_calculate_common_prefix (self, &common_prefix, _tmp38_); _g_free0 (_tmp38_); } } else { ValaMarkupReader* _tmp39_; const gchar* _tmp40_; const gchar* _tmp41_; _tmp39_ = self->priv->reader; _tmp40_ = vala_markup_reader_get_name (_tmp39_); _tmp41_ = _tmp40_; if (g_strcmp0 (_tmp41_, "function") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp42_; const gchar* _tmp43_; const gchar* _tmp44_; _tmp42_ = self->priv->reader; _tmp43_ = vala_markup_reader_get_name (_tmp42_); _tmp44_ = _tmp43_; if (g_strcmp0 (_tmp44_, "function-macro") == 0) { vala_gir_parser_skip_element (self); } else { ValaSourceReference* _tmp45_; ValaSourceReference* _tmp46_; ValaMarkupReader* _tmp47_; const gchar* _tmp48_; const gchar* _tmp49_; gchar* _tmp50_; gchar* _tmp51_; _tmp45_ = vala_gir_parser_get_current_src (self); _tmp46_ = _tmp45_; _tmp47_ = self->priv->reader; _tmp48_ = vala_markup_reader_get_name (_tmp47_); _tmp49_ = _tmp48_; _tmp50_ = g_strdup_printf ("unknown child element `%s' in `%s'", _tmp49_, element_name); _tmp51_ = _tmp50_; vala_report_error (_tmp46_, _tmp51_); _g_free0 (_tmp51_); _vala_source_reference_unref0 (_tmp46_); vala_gir_parser_skip_element (self); } } } vala_gir_parser_pop_metadata (self); } if (!has_member) { ValaSourceReference* _tmp52_; ValaSourceReference* _tmp53_; ValaGirParserNode* _tmp54_; const gchar* _tmp55_; gchar* _tmp56_; gchar* _tmp57_; _tmp52_ = vala_gir_parser_get_current_src (self); _tmp53_ = _tmp52_; _tmp54_ = self->priv->current; _tmp55_ = _tmp54_->name; _tmp56_ = g_strdup_printf ("%s `%s' has no members", element_name, _tmp55_); _tmp57_ = _tmp56_; vala_report_error (_tmp53_, _tmp57_); _g_free0 (_tmp57_); _vala_source_reference_unref0 (_tmp53_); } _tmp58_ = common_prefix; if (_tmp58_ != NULL) { ValaSymbol* _tmp59_; const gchar* _tmp60_; _tmp59_ = sym; _tmp60_ = common_prefix; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp59_, "CCode", "cprefix", _tmp60_, NULL); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, element_name); _g_free0 (common_prefix); _vala_code_node_unref0 (sym); } static void vala_gir_parser_parse_error_domain (ValaGirParser* self) { g_return_if_fail (self != NULL); vala_gir_parser_parse_enumeration (self, "enumeration", TRUE); } static void vala_gir_parser_parse_bitfield (ValaGirParser* self) { g_return_if_fail (self != NULL); vala_gir_parser_parse_enumeration (self, "bitfield", FALSE); } static void vala_gir_parser_parse_enumeration_member (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; gchar* _tmp2_; gchar* _tmp3_; gchar* _tmp4_; gchar* _tmp5_; ValaEnumValue* ev = NULL; ValaGirParserNode* _tmp6_; const gchar* _tmp7_; ValaGirParserMetadata* _tmp8_; ValaExpression* _tmp9_; ValaExpression* _tmp10_; ValaGirParserNode* _tmp11_; ValaSourceReference* _tmp12_; ValaEnumValue* _tmp13_; ValaEnumValue* _tmp14_; ValaGirParserNode* _tmp15_; ValaSymbol* _tmp16_; ValaGirComment* _tmp17_; ValaGirComment* _tmp18_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "member"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; _tmp2_ = g_ascii_strup (_tmp1_, (gssize) -1); _tmp3_ = _tmp2_; _tmp4_ = string_replace (_tmp3_, "-", "_"); _tmp5_ = _tmp4_; vala_gir_parser_push_node (self, _tmp5_, FALSE); _g_free0 (_tmp5_); _g_free0 (_tmp3_); _g_free0 (_tmp1_); _tmp6_ = self->priv->current; _tmp7_ = _tmp6_->name; _tmp8_ = self->priv->metadata; _tmp9_ = vala_gir_parser_metadata_get_expression (_tmp8_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT); _tmp10_ = _tmp9_; _tmp11_ = self->priv->current; _tmp12_ = _tmp11_->source_reference; _tmp13_ = vala_enum_value_new (_tmp7_, _tmp10_, _tmp12_, NULL); _tmp14_ = _tmp13_; _vala_code_node_unref0 (_tmp10_); ev = _tmp14_; _tmp15_ = self->priv->current; _tmp16_ = _vala_code_node_ref0 ((ValaSymbol*) ev); _vala_code_node_unref0 (_tmp15_->symbol); _tmp15_->symbol = _tmp16_; vala_gir_parser_next (self); _tmp17_ = vala_gir_parser_parse_symbol_doc (self); _tmp18_ = _tmp17_; vala_symbol_set_comment ((ValaSymbol*) ev, (ValaComment*) _tmp18_); _vala_comment_unref0 (_tmp18_); vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "member"); _vala_code_node_unref0 (ev); } static void vala_gir_parser_parse_error_member (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; gchar* _tmp2_; gchar* _tmp3_; gchar* _tmp4_; gchar* _tmp5_; ValaErrorCode* ec = NULL; gchar* value = NULL; ValaMarkupReader* _tmp6_; gchar* _tmp7_; const gchar* _tmp8_; ValaGirParserNode* _tmp18_; ValaErrorCode* _tmp19_; ValaSymbol* _tmp20_; ValaErrorCode* _tmp21_; ValaGirComment* _tmp22_; ValaGirComment* _tmp23_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "member"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; _tmp2_ = g_ascii_strup (_tmp1_, (gssize) -1); _tmp3_ = _tmp2_; _tmp4_ = string_replace (_tmp3_, "-", "_"); _tmp5_ = _tmp4_; vala_gir_parser_push_node (self, _tmp5_, FALSE); _g_free0 (_tmp5_); _g_free0 (_tmp3_); _g_free0 (_tmp1_); _tmp6_ = self->priv->reader; _tmp7_ = vala_markup_reader_get_attribute (_tmp6_, "value"); value = _tmp7_; _tmp8_ = value; if (_tmp8_ != NULL) { ValaGirParserNode* _tmp9_; const gchar* _tmp10_; const gchar* _tmp11_; ValaIntegerLiteral* _tmp12_; ValaIntegerLiteral* _tmp13_; ValaErrorCode* _tmp14_; _tmp9_ = self->priv->current; _tmp10_ = _tmp9_->name; _tmp11_ = value; _tmp12_ = vala_integer_literal_new (_tmp11_, NULL); _tmp13_ = _tmp12_; _tmp14_ = vala_error_code_new_with_value (_tmp10_, (ValaExpression*) _tmp13_, NULL); _vala_code_node_unref0 (ec); ec = _tmp14_; _vala_code_node_unref0 (_tmp13_); } else { ValaGirParserNode* _tmp15_; const gchar* _tmp16_; ValaErrorCode* _tmp17_; _tmp15_ = self->priv->current; _tmp16_ = _tmp15_->name; _tmp17_ = vala_error_code_new (_tmp16_, NULL, NULL); _vala_code_node_unref0 (ec); ec = _tmp17_; } _tmp18_ = self->priv->current; _tmp19_ = ec; _tmp20_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp19_); _vala_code_node_unref0 (_tmp18_->symbol); _tmp18_->symbol = _tmp20_; vala_gir_parser_next (self); _tmp21_ = ec; _tmp22_ = vala_gir_parser_parse_symbol_doc (self); _tmp23_ = _tmp22_; vala_symbol_set_comment ((ValaSymbol*) _tmp21_, (ValaComment*) _tmp23_); _vala_comment_unref0 (_tmp23_); vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "member"); _g_free0 (value); _vala_code_node_unref0 (ec); } static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gchar* * ctype, gint* array_length_idx, gboolean* no_array_length, gboolean* array_null_terminated, ValaComment* * comment) { gchar* _vala_ctype = NULL; gint _vala_array_length_idx = 0; gboolean _vala_no_array_length = FALSE; gboolean _vala_array_null_terminated = FALSE; ValaComment* _vala_comment = NULL; gchar* transfer = NULL; ValaMarkupReader* _tmp0_; gchar* _tmp1_; gchar* nullable = NULL; ValaMarkupReader* _tmp2_; gchar* _tmp3_; gchar* allow_none = NULL; ValaMarkupReader* _tmp4_; gchar* _tmp5_; ValaComment* _tmp6_; gboolean transfer_elements = FALSE; const gchar* _tmp7_; ValaDataType* type = NULL; gchar* _tmp8_ = NULL; gint _tmp9_ = 0; gboolean _tmp10_ = FALSE; gboolean _tmp11_ = FALSE; ValaDataType* _tmp12_; gboolean _tmp13_ = FALSE; const gchar* _tmp14_; gboolean _tmp17_ = FALSE; const gchar* _tmp18_; ValaDataType* _tmp21_; ValaDataType* _tmp22_; ValaDataType* result = NULL; g_return_val_if_fail (self != NULL, NULL); vala_gir_parser_start_element (self, "return-value"); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "transfer-ownership"); transfer = _tmp1_; _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_attribute (_tmp2_, "nullable"); nullable = _tmp3_; _tmp4_ = self->priv->reader; _tmp5_ = vala_markup_reader_get_attribute (_tmp4_, "allow-none"); allow_none = _tmp5_; vala_gir_parser_next (self); _tmp6_ = vala_gir_parser_parse_doc (self); _vala_comment_unref0 (_vala_comment); _vala_comment = _tmp6_; _tmp7_ = transfer; transfer_elements = g_strcmp0 (_tmp7_, "container") != 0; _tmp12_ = vala_gir_parser_parse_type (self, &_tmp8_, &_tmp9_, transfer_elements, &_tmp10_, &_tmp11_); _g_free0 (_vala_ctype); _vala_ctype = _tmp8_; _vala_array_length_idx = _tmp9_; _vala_no_array_length = _tmp10_; _vala_array_null_terminated = _tmp11_; type = _tmp12_; _tmp14_ = transfer; if (g_strcmp0 (_tmp14_, "full") == 0) { _tmp13_ = TRUE; } else { const gchar* _tmp15_; _tmp15_ = transfer; _tmp13_ = g_strcmp0 (_tmp15_, "container") == 0; } if (_tmp13_) { ValaDataType* _tmp16_; _tmp16_ = type; vala_data_type_set_value_owned (_tmp16_, TRUE); } _tmp18_ = nullable; if (g_strcmp0 (_tmp18_, "1") == 0) { _tmp17_ = TRUE; } else { const gchar* _tmp19_; _tmp19_ = allow_none; _tmp17_ = g_strcmp0 (_tmp19_, "1") == 0; } if (_tmp17_) { ValaDataType* _tmp20_; _tmp20_ = type; vala_data_type_set_nullable (_tmp20_, TRUE); } _tmp21_ = type; _tmp22_ = vala_gir_parser_element_get_type (self, _tmp21_, TRUE, &_vala_no_array_length, &_vala_array_null_terminated, NULL); _vala_code_node_unref0 (type); type = _tmp22_; vala_gir_parser_end_element (self, "return-value"); result = type; _g_free0 (allow_none); _g_free0 (nullable); _g_free0 (transfer); if (ctype) { *ctype = _vala_ctype; } else { _g_free0 (_vala_ctype); } if (array_length_idx) { *array_length_idx = _vala_array_length_idx; } if (no_array_length) { *no_array_length = _vala_no_array_length; } if (array_null_terminated) { *array_null_terminated = _vala_array_null_terminated; } if (comment) { *comment = _vala_comment; } else { _vala_comment_unref0 (_vala_comment); } return result; } static gboolean string_contains (const gchar* self, const gchar* needle) { gchar* _tmp0_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (needle != NULL, FALSE); _tmp0_ = strstr ((gchar*) self, (gchar*) needle); result = _tmp0_ != NULL; return result; } static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint* array_length_idx, gint* closure_idx, gint* destroy_idx, gchar* * scope, ValaComment* * comment, const gchar* default_name) { gint _vala_array_length_idx = 0; gint _vala_closure_idx = 0; gint _vala_destroy_idx = 0; gchar* _vala_scope = NULL; ValaComment* _vala_comment = NULL; ValaSourceLocation begin = {0}; ValaSourceLocation _tmp0_; ValaParameter* param = NULL; gchar* element_type = NULL; ValaMarkupReader* _tmp1_; const gchar* _tmp2_; const gchar* _tmp3_; gchar* _tmp4_; gboolean _tmp5_ = FALSE; ValaMarkupTokenType _tmp6_; const gchar* _tmp12_; gchar* name = NULL; ValaGirParserMetadata* _tmp13_; gchar* _tmp14_; const gchar* _tmp15_; const gchar* _tmp18_; gchar* direction = NULL; ValaGirParserMetadata* _tmp25_; gchar* transfer = NULL; ValaMarkupReader* _tmp33_; gchar* _tmp34_; gchar* nullable = NULL; ValaMarkupReader* _tmp35_; gchar* _tmp36_; gchar* allow_none = NULL; ValaMarkupReader* _tmp37_; gchar* _tmp38_; gchar* _tmp39_; gchar* closure = NULL; ValaMarkupReader* _tmp40_; gchar* _tmp41_; gchar* destroy = NULL; ValaMarkupReader* _tmp42_; gchar* _tmp43_; gboolean _tmp44_ = FALSE; const gchar* _tmp45_; gboolean _tmp47_ = FALSE; const gchar* _tmp48_; ValaGirParserMetadata* _tmp50_; ValaGirParserMetadata* _tmp52_; ValaComment* _tmp54_; ValaMarkupReader* _tmp55_; const gchar* _tmp56_; const gchar* _tmp57_; const gchar* _tmp118_; ValaParameter* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->begin; begin = _tmp0_; _vala_array_length_idx = -1; _vala_closure_idx = -1; _vala_destroy_idx = -1; _tmp1_ = self->priv->reader; _tmp2_ = vala_markup_reader_get_name (_tmp1_); _tmp3_ = _tmp2_; _tmp4_ = g_strdup (_tmp3_); element_type = _tmp4_; _tmp6_ = self->priv->current_token; if (_tmp6_ != VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) { _tmp5_ = TRUE; } else { gboolean _tmp7_ = FALSE; const gchar* _tmp8_; _tmp8_ = element_type; if (g_strcmp0 (_tmp8_, "parameter") != 0) { const gchar* _tmp9_; _tmp9_ = element_type; _tmp7_ = g_strcmp0 (_tmp9_, "instance-parameter") != 0; } else { _tmp7_ = FALSE; } _tmp5_ = _tmp7_; } if (_tmp5_) { ValaSourceReference* _tmp10_; ValaSourceReference* _tmp11_; _tmp10_ = vala_gir_parser_get_current_src (self); _tmp11_ = _tmp10_; vala_report_error (_tmp11_, "expected start element of `parameter' or `instance-parameter'"); _vala_source_reference_unref0 (_tmp11_); } _tmp12_ = element_type; vala_gir_parser_start_element (self, _tmp12_); _tmp13_ = self->priv->metadata; _tmp14_ = vala_gir_parser_metadata_get_string (_tmp13_, VALA_GIR_PARSER_ARGUMENT_TYPE_NAME); name = _tmp14_; _tmp15_ = name; if (_tmp15_ == NULL) { ValaMarkupReader* _tmp16_; gchar* _tmp17_; _tmp16_ = self->priv->reader; _tmp17_ = vala_markup_reader_get_attribute (_tmp16_, "name"); _g_free0 (name); name = _tmp17_; } _tmp18_ = name; if (_tmp18_ == NULL) { gchar* _tmp19_; _tmp19_ = g_strdup (default_name); _g_free0 (name); name = _tmp19_; } else { const gchar* _tmp20_; _tmp20_ = name; if (string_contains (_tmp20_, "-")) { ValaSourceReference* _tmp21_; ValaSourceReference* _tmp22_; const gchar* _tmp23_; gchar* _tmp24_; _tmp21_ = vala_gir_parser_get_current_src (self); _tmp22_ = _tmp21_; vala_report_warning (_tmp22_, "parameter name contains hyphen"); _vala_source_reference_unref0 (_tmp22_); _tmp23_ = name; _tmp24_ = string_replace (_tmp23_, "-", "_"); _g_free0 (name); name = _tmp24_; } } direction = NULL; _tmp25_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp25_, VALA_GIR_PARSER_ARGUMENT_TYPE_OUT)) { ValaGirParserMetadata* _tmp26_; _tmp26_ = self->priv->metadata; if (vala_gir_parser_metadata_get_bool (_tmp26_, VALA_GIR_PARSER_ARGUMENT_TYPE_OUT, FALSE)) { gchar* _tmp27_; _tmp27_ = g_strdup ("out"); _g_free0 (direction); direction = _tmp27_; } } else { ValaGirParserMetadata* _tmp28_; _tmp28_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp28_, VALA_GIR_PARSER_ARGUMENT_TYPE_REF)) { ValaGirParserMetadata* _tmp29_; _tmp29_ = self->priv->metadata; if (vala_gir_parser_metadata_get_bool (_tmp29_, VALA_GIR_PARSER_ARGUMENT_TYPE_REF, FALSE)) { gchar* _tmp30_; _tmp30_ = g_strdup ("inout"); _g_free0 (direction); direction = _tmp30_; } } else { ValaMarkupReader* _tmp31_; gchar* _tmp32_; _tmp31_ = self->priv->reader; _tmp32_ = vala_markup_reader_get_attribute (_tmp31_, "direction"); _g_free0 (direction); direction = _tmp32_; } } _tmp33_ = self->priv->reader; _tmp34_ = vala_markup_reader_get_attribute (_tmp33_, "transfer-ownership"); transfer = _tmp34_; _tmp35_ = self->priv->reader; _tmp36_ = vala_markup_reader_get_attribute (_tmp35_, "nullable"); nullable = _tmp36_; _tmp37_ = self->priv->reader; _tmp38_ = vala_markup_reader_get_attribute (_tmp37_, "allow-none"); allow_none = _tmp38_; _tmp39_ = vala_gir_parser_element_get_string (self, "scope", VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE); _g_free0 (_vala_scope); _vala_scope = _tmp39_; _tmp40_ = self->priv->reader; _tmp41_ = vala_markup_reader_get_attribute (_tmp40_, "closure"); closure = _tmp41_; _tmp42_ = self->priv->reader; _tmp43_ = vala_markup_reader_get_attribute (_tmp42_, "destroy"); destroy = _tmp43_; _tmp45_ = closure; if (_tmp45_ != NULL) { _tmp44_ = (&_vala_closure_idx) != NULL; } else { _tmp44_ = FALSE; } if (_tmp44_) { const gchar* _tmp46_; _tmp46_ = closure; _vala_closure_idx = atoi (_tmp46_); } _tmp48_ = destroy; if (_tmp48_ != NULL) { _tmp47_ = (&_vala_destroy_idx) != NULL; } else { _tmp47_ = FALSE; } if (_tmp47_) { const gchar* _tmp49_; _tmp49_ = destroy; _vala_destroy_idx = atoi (_tmp49_); } _tmp50_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp50_, VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE)) { ValaGirParserMetadata* _tmp51_; _tmp51_ = self->priv->metadata; _vala_closure_idx = vala_gir_parser_metadata_get_integer (_tmp51_, VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE); } _tmp52_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp52_, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY)) { ValaGirParserMetadata* _tmp53_; _tmp53_ = self->priv->metadata; _vala_destroy_idx = vala_gir_parser_metadata_get_integer (_tmp53_, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY); } vala_gir_parser_next (self); _tmp54_ = vala_gir_parser_parse_doc (self); _vala_comment_unref0 (_vala_comment); _vala_comment = _tmp54_; _tmp55_ = self->priv->reader; _tmp56_ = vala_markup_reader_get_name (_tmp55_); _tmp57_ = _tmp56_; if (g_strcmp0 (_tmp57_, "varargs") == 0) { ValaSourceLocation _tmp58_; ValaSourceReference* _tmp59_; ValaSourceReference* _tmp60_; ValaParameter* _tmp61_; vala_gir_parser_start_element (self, "varargs"); vala_gir_parser_next (self); _tmp58_ = begin; _tmp59_ = vala_gir_parser_get_src (self, &_tmp58_, NULL); _tmp60_ = _tmp59_; _tmp61_ = vala_parameter_new_with_ellipsis (_tmp60_); _vala_code_node_unref0 (param); param = _tmp61_; _vala_source_reference_unref0 (_tmp60_); vala_gir_parser_end_element (self, "varargs"); } else { gchar* ctype = NULL; gboolean no_array_length = FALSE; gboolean array_null_terminated = FALSE; ValaDataType* type = NULL; const gchar* _tmp62_; gchar* _tmp63_ = NULL; gint _tmp64_ = 0; gboolean _tmp65_ = FALSE; gboolean _tmp66_ = FALSE; ValaDataType* _tmp67_; gboolean _tmp68_ = FALSE; gboolean _tmp69_ = FALSE; const gchar* _tmp70_; gboolean _tmp74_ = FALSE; const gchar* _tmp75_; gboolean changed = FALSE; gboolean _tmp80_ = FALSE; const gchar* _tmp81_; ValaDataType* _tmp83_; gboolean _tmp84_ = FALSE; ValaDataType* _tmp85_; const gchar* _tmp86_; ValaDataType* _tmp87_; ValaSourceLocation _tmp88_; ValaSourceReference* _tmp89_; ValaSourceReference* _tmp90_; ValaParameter* _tmp91_; const gchar* _tmp92_; const gchar* _tmp95_; gboolean _tmp99_ = FALSE; ValaDataType* _tmp100_; ValaDataType* _tmp104_; ValaParameter* _tmp110_; ValaGirParserMetadata* _tmp111_; ValaExpression* _tmp112_; ValaExpression* _tmp113_; ValaParameter* _tmp114_; ValaExpression* _tmp115_; ValaExpression* _tmp116_; _tmp62_ = transfer; _tmp67_ = vala_gir_parser_parse_type (self, &_tmp63_, &_tmp64_, g_strcmp0 (_tmp62_, "container") != 0, &_tmp65_, &_tmp66_); _g_free0 (ctype); ctype = _tmp63_; _vala_array_length_idx = _tmp64_; no_array_length = _tmp65_; array_null_terminated = _tmp66_; type = _tmp67_; _tmp70_ = transfer; if (g_strcmp0 (_tmp70_, "full") == 0) { _tmp69_ = TRUE; } else { const gchar* _tmp71_; _tmp71_ = transfer; _tmp69_ = g_strcmp0 (_tmp71_, "container") == 0; } if (_tmp69_) { _tmp68_ = TRUE; } else { const gchar* _tmp72_; _tmp72_ = destroy; _tmp68_ = _tmp72_ != NULL; } if (_tmp68_) { ValaDataType* _tmp73_; _tmp73_ = type; vala_data_type_set_value_owned (_tmp73_, TRUE); } _tmp75_ = nullable; if (g_strcmp0 (_tmp75_, "1") == 0) { _tmp74_ = TRUE; } else { gboolean _tmp76_ = FALSE; const gchar* _tmp77_; _tmp77_ = allow_none; if (g_strcmp0 (_tmp77_, "1") == 0) { const gchar* _tmp78_; _tmp78_ = direction; _tmp76_ = g_strcmp0 (_tmp78_, "out") != 0; } else { _tmp76_ = FALSE; } _tmp74_ = _tmp76_; } if (_tmp74_) { ValaDataType* _tmp79_; _tmp79_ = type; vala_data_type_set_nullable (_tmp79_, TRUE); } _tmp81_ = direction; if (g_strcmp0 (_tmp81_, "out") == 0) { _tmp80_ = TRUE; } else { const gchar* _tmp82_; _tmp82_ = direction; _tmp80_ = g_strcmp0 (_tmp82_, "inout") == 0; } _tmp83_ = type; _tmp85_ = vala_gir_parser_element_get_type (self, _tmp83_, _tmp80_, &no_array_length, &array_null_terminated, &_tmp84_); changed = _tmp84_; _vala_code_node_unref0 (type); type = _tmp85_; if (!changed) { _g_free0 (ctype); ctype = NULL; } _tmp86_ = name; _tmp87_ = type; _tmp88_ = begin; _tmp89_ = vala_gir_parser_get_src (self, &_tmp88_, NULL); _tmp90_ = _tmp89_; _tmp91_ = vala_parameter_new (_tmp86_, _tmp87_, _tmp90_); _vala_code_node_unref0 (param); param = _tmp91_; _vala_source_reference_unref0 (_tmp90_); _tmp92_ = ctype; if (_tmp92_ != NULL) { ValaParameter* _tmp93_; const gchar* _tmp94_; _tmp93_ = param; _tmp94_ = ctype; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp93_, "CCode", "type", _tmp94_, NULL); } _tmp95_ = direction; if (g_strcmp0 (_tmp95_, "out") == 0) { ValaParameter* _tmp96_; _tmp96_ = param; vala_parameter_set_direction (_tmp96_, VALA_PARAMETER_DIRECTION_OUT); } else { const gchar* _tmp97_; _tmp97_ = direction; if (g_strcmp0 (_tmp97_, "inout") == 0) { ValaParameter* _tmp98_; _tmp98_ = param; vala_parameter_set_direction (_tmp98_, VALA_PARAMETER_DIRECTION_REF); } } _tmp100_ = type; if (VALA_IS_DELEGATE_TYPE (_tmp100_)) { ValaGirParserMetadata* _tmp101_; _tmp101_ = self->priv->metadata; _tmp99_ = vala_gir_parser_metadata_has_argument (_tmp101_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET); } else { _tmp99_ = FALSE; } if (_tmp99_) { ValaParameter* _tmp102_; ValaGirParserMetadata* _tmp103_; _tmp102_ = param; _tmp103_ = self->priv->metadata; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp102_, "CCode", "delegate_target", vala_gir_parser_metadata_get_bool (_tmp103_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET, FALSE), NULL); } _tmp104_ = type; if (VALA_IS_ARRAY_TYPE (_tmp104_)) { ValaGirParserMetadata* _tmp105_; _tmp105_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp105_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX)) { ValaGirParserMetadata* _tmp106_; _tmp106_ = self->priv->metadata; _vala_array_length_idx = vala_gir_parser_metadata_get_integer (_tmp106_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX); } else { gboolean _tmp107_ = FALSE; if (no_array_length) { _tmp107_ = TRUE; } else { _tmp107_ = array_null_terminated; } if (_tmp107_) { ValaParameter* _tmp108_; _tmp108_ = param; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp108_, "CCode", "array_length", !no_array_length, NULL); } if (array_null_terminated) { ValaParameter* _tmp109_; _tmp109_ = param; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp109_, "CCode", "array_null_terminated", array_null_terminated, NULL); } } } _tmp110_ = param; _tmp111_ = self->priv->metadata; _tmp112_ = vala_gir_parser_metadata_get_expression (_tmp111_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT); _tmp113_ = _tmp112_; vala_variable_set_initializer ((ValaVariable*) _tmp110_, _tmp113_); _vala_code_node_unref0 (_tmp113_); _tmp114_ = param; _tmp115_ = vala_variable_get_initializer ((ValaVariable*) _tmp114_); _tmp116_ = _tmp115_; if (VALA_IS_TUPLE (_tmp116_)) { ValaParameter* _tmp117_; _tmp117_ = param; vala_variable_set_initializer ((ValaVariable*) _tmp117_, NULL); } _vala_code_node_unref0 (type); _g_free0 (ctype); } _tmp118_ = element_type; vala_gir_parser_end_element (self, _tmp118_); result = param; _g_free0 (destroy); _g_free0 (closure); _g_free0 (allow_none); _g_free0 (nullable); _g_free0 (transfer); _g_free0 (direction); _g_free0 (name); _g_free0 (element_type); if (array_length_idx) { *array_length_idx = _vala_array_length_idx; } if (closure_idx) { *closure_idx = _vala_closure_idx; } if (destroy_idx) { *destroy_idx = _vala_destroy_idx; } if (scope) { *scope = _vala_scope; } else { _g_free0 (_vala_scope); } if (comment) { *comment = _vala_comment; } else { _vala_comment_unref0 (_vala_comment); } return result; } static ValaDataType* vala_gir_parser_parse_type (ValaGirParser* self, gchar* * ctype, gint* array_length_idx, gboolean transfer_elements, gboolean* no_array_length, gboolean* array_null_terminated) { gchar* _vala_ctype = NULL; gint _vala_array_length_idx = 0; gboolean _vala_no_array_length = FALSE; gboolean _vala_array_null_terminated = FALSE; gboolean is_array = FALSE; gchar* type_name = NULL; ValaMarkupReader* _tmp0_; gchar* _tmp1_; gint fixed_length = 0; ValaMarkupReader* _tmp2_; const gchar* _tmp3_; const gchar* _tmp4_; ValaGirParserMetadata* _tmp49_; const gchar* _tmp54_; ValaDataType* type = NULL; const gchar* _tmp57_; const gchar* _tmp92_ = NULL; ValaDataType* result = NULL; g_return_val_if_fail (self != NULL, NULL); is_array = FALSE; _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "name"); type_name = _tmp1_; _g_free0 (_vala_ctype); _vala_ctype = NULL; fixed_length = -1; _vala_array_length_idx = -1; _vala_no_array_length = TRUE; _vala_array_null_terminated = TRUE; _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_name (_tmp2_); _tmp4_ = _tmp3_; if (g_strcmp0 (_tmp4_, "array") == 0) { ValaSourceReference* src = NULL; ValaSourceReference* _tmp5_; const gchar* _tmp6_; is_array = TRUE; vala_gir_parser_start_element (self, "array"); _tmp5_ = vala_gir_parser_get_current_src (self); src = _tmp5_; _tmp6_ = type_name; if (_tmp6_ == NULL) { ValaMarkupReader* _tmp7_; gchar* _tmp8_; gchar* _tmp9_; gboolean _tmp10_; ValaMarkupReader* _tmp14_; gchar* _tmp15_; gchar* _tmp16_; gboolean _tmp17_; ValaMarkupReader* _tmp21_; gchar* _tmp22_; gchar* _tmp23_; gboolean _tmp24_; ValaMarkupReader* _tmp25_; gchar* _tmp26_; gchar* _tmp27_; gboolean _tmp28_; ValaDataType* element_type = NULL; ValaDataType* _tmp32_; ValaDataType* _tmp33_; ValaArrayType* array_type = NULL; ValaDataType* _tmp34_; ValaSourceReference* _tmp35_; ValaArrayType* _tmp36_; _tmp7_ = self->priv->reader; _tmp8_ = vala_markup_reader_get_attribute (_tmp7_, "length"); _tmp9_ = _tmp8_; _tmp10_ = _tmp9_ != NULL; _g_free0 (_tmp9_); if (_tmp10_) { ValaMarkupReader* _tmp11_; gchar* _tmp12_; gchar* _tmp13_; _tmp11_ = self->priv->reader; _tmp12_ = vala_markup_reader_get_attribute (_tmp11_, "length"); _tmp13_ = _tmp12_; _vala_array_length_idx = atoi (_tmp13_); _g_free0 (_tmp13_); _vala_no_array_length = FALSE; _vala_array_null_terminated = FALSE; } _tmp14_ = self->priv->reader; _tmp15_ = vala_markup_reader_get_attribute (_tmp14_, "fixed-size"); _tmp16_ = _tmp15_; _tmp17_ = _tmp16_ != NULL; _g_free0 (_tmp16_); if (_tmp17_) { ValaMarkupReader* _tmp18_; gchar* _tmp19_; gchar* _tmp20_; _tmp18_ = self->priv->reader; _tmp19_ = vala_markup_reader_get_attribute (_tmp18_, "fixed-size"); _tmp20_ = _tmp19_; fixed_length = atoi (_tmp20_); _g_free0 (_tmp20_); _vala_array_null_terminated = FALSE; } _tmp21_ = self->priv->reader; _tmp22_ = vala_markup_reader_get_attribute (_tmp21_, "c:type"); _tmp23_ = _tmp22_; _tmp24_ = g_strcmp0 (_tmp23_, "GStrv") == 0; _g_free0 (_tmp23_); if (_tmp24_) { _vala_no_array_length = TRUE; _vala_array_null_terminated = TRUE; } _tmp25_ = self->priv->reader; _tmp26_ = vala_markup_reader_get_attribute (_tmp25_, "zero-terminated"); _tmp27_ = _tmp26_; _tmp28_ = _tmp27_ != NULL; _g_free0 (_tmp27_); if (_tmp28_) { ValaMarkupReader* _tmp29_; gchar* _tmp30_; gchar* _tmp31_; _tmp29_ = self->priv->reader; _tmp30_ = vala_markup_reader_get_attribute (_tmp29_, "zero-terminated"); _tmp31_ = _tmp30_; _vala_array_null_terminated = atoi (_tmp31_) != 0; _g_free0 (_tmp31_); } vala_gir_parser_next (self); _tmp32_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL); element_type = _tmp32_; _tmp33_ = element_type; vala_data_type_set_value_owned (_tmp33_, transfer_elements); vala_gir_parser_end_element (self, "array"); _tmp34_ = element_type; _tmp35_ = src; _tmp36_ = vala_array_type_new (_tmp34_, 1, _tmp35_); array_type = _tmp36_; if (fixed_length > 0) { ValaArrayType* _tmp37_; ValaArrayType* _tmp38_; gchar* _tmp39_; gchar* _tmp40_; ValaIntegerLiteral* _tmp41_; ValaIntegerLiteral* _tmp42_; _tmp37_ = array_type; vala_array_type_set_fixed_length (_tmp37_, TRUE); _tmp38_ = array_type; _tmp39_ = g_strdup_printf ("%i", fixed_length); _tmp40_ = _tmp39_; _tmp41_ = vala_integer_literal_new (_tmp40_, NULL); _tmp42_ = _tmp41_; vala_array_type_set_length (_tmp38_, (ValaExpression*) _tmp42_); _vala_code_node_unref0 (_tmp42_); _g_free0 (_tmp40_); } result = (ValaDataType*) array_type; _vala_code_node_unref0 (element_type); _vala_source_reference_unref0 (src); _g_free0 (type_name); if (ctype) { *ctype = _vala_ctype; } else { _g_free0 (_vala_ctype); } if (array_length_idx) { *array_length_idx = _vala_array_length_idx; } if (no_array_length) { *no_array_length = _vala_no_array_length; } if (array_null_terminated) { *array_null_terminated = _vala_array_null_terminated; } return result; } _vala_source_reference_unref0 (src); } else { ValaMarkupReader* _tmp43_; const gchar* _tmp44_; const gchar* _tmp45_; _tmp43_ = self->priv->reader; _tmp44_ = vala_markup_reader_get_name (_tmp43_); _tmp45_ = _tmp44_; if (g_strcmp0 (_tmp45_, "callback") == 0) { ValaGirParserNode* _tmp46_; ValaSymbol* _tmp47_; ValaDelegateType* _tmp48_; vala_gir_parser_parse_callback (self); _tmp46_ = self->priv->old_current; _tmp47_ = _tmp46_->symbol; _tmp48_ = vala_delegate_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp47_, VALA_TYPE_DELEGATE, ValaDelegate)); result = (ValaDataType*) _tmp48_; _g_free0 (type_name); if (ctype) { *ctype = _vala_ctype; } else { _g_free0 (_vala_ctype); } if (array_length_idx) { *array_length_idx = _vala_array_length_idx; } if (no_array_length) { *no_array_length = _vala_no_array_length; } if (array_null_terminated) { *array_null_terminated = _vala_array_null_terminated; } return result; } else { vala_gir_parser_start_element (self, "type"); } } _tmp49_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp49_, VALA_GIR_PARSER_ARGUMENT_TYPE_CTYPE)) { ValaGirParserMetadata* _tmp50_; gchar* _tmp51_; _tmp50_ = self->priv->metadata; _tmp51_ = vala_gir_parser_metadata_get_string (_tmp50_, VALA_GIR_PARSER_ARGUMENT_TYPE_CTYPE); _g_free0 (_vala_ctype); _vala_ctype = _tmp51_; } else { ValaMarkupReader* _tmp52_; gchar* _tmp53_; _tmp52_ = self->priv->reader; _tmp53_ = vala_markup_reader_get_attribute (_tmp52_, "c:type"); _g_free0 (_vala_ctype); _vala_ctype = _tmp53_; } vala_gir_parser_next (self); _tmp54_ = type_name; if (_tmp54_ == NULL) { const gchar* _tmp55_; gchar* _tmp56_; _tmp55_ = _vala_ctype; _tmp56_ = g_strdup (_tmp55_); _g_free0 (type_name); type_name = _tmp56_; } _tmp57_ = type_name; if (_tmp57_ != NULL) { const gchar* _tmp58_; const gchar* _tmp59_; gboolean _tmp60_ = FALSE; gboolean _tmp61_ = FALSE; ValaDataType* _tmp62_; _tmp58_ = type_name; _tmp59_ = _vala_ctype; _tmp62_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp58_, &_tmp60_, &_tmp61_, _tmp59_); _vala_no_array_length = _tmp60_; _vala_array_null_terminated = _tmp61_; _vala_code_node_unref0 (type); type = _tmp62_; } else { ValaInvalidType* _tmp63_; ValaSourceReference* _tmp64_; ValaSourceReference* _tmp65_; _vala_no_array_length = FALSE; _vala_array_null_terminated = FALSE; _tmp63_ = vala_invalid_type_new (); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp63_; _tmp64_ = vala_gir_parser_get_current_src (self); _tmp65_ = _tmp64_; vala_report_error (_tmp65_, "empty type element"); _vala_source_reference_unref0 (_tmp65_); } while (TRUE) { ValaMarkupTokenType _tmp66_; const gchar* _tmp67_; ValaDataType* element_type = NULL; ValaDataType* _tmp68_; ValaDataType* _tmp69_; ValaDataType* _tmp70_; ValaDataType* _tmp71_; ValaDataType* _tmp72_; _tmp66_ = self->priv->current_token; if (!(_tmp66_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } _tmp67_ = type_name; if (g_strcmp0 (_tmp67_, "GLib.ByteArray") == 0) { vala_gir_parser_skip_element (self); continue; } _tmp68_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL); element_type = _tmp68_; _tmp69_ = element_type; vala_data_type_set_value_owned (_tmp69_, transfer_elements); _tmp70_ = type; _tmp71_ = element_type; vala_data_type_add_type_argument (_tmp70_, _tmp71_); _tmp72_ = element_type; if (VALA_IS_UNRESOLVED_TYPE (_tmp72_)) { ValaGirParserNode* _tmp73_ = NULL; ValaGirParserNode* _tmp74_; ValaGirParserNode* parent = NULL; ValaGirParserNode* _tmp76_; ValaHashMap* _tmp89_; ValaDataType* _tmp90_; ValaGirParserNode* _tmp91_; _tmp74_ = self->priv->current; _tmp73_ = _tmp74_; if (_tmp73_ == NULL) { ValaGirParserNode* _tmp75_; _tmp75_ = self->priv->root; _tmp73_ = _tmp75_; } _tmp76_ = _vala_gir_parser_node_ref0 (_tmp73_); parent = _tmp76_; while (TRUE) { gboolean _tmp77_ = FALSE; gboolean _tmp78_ = FALSE; ValaGirParserNode* _tmp79_; ValaGirParserNode* _tmp80_; ValaGirParserNode* _tmp86_; ValaGirParserNode* _tmp87_; ValaGirParserNode* _tmp88_; _tmp79_ = parent; _tmp80_ = self->priv->root; if (_tmp79_ != _tmp80_) { ValaGirParserNode* _tmp81_; ValaGirParserNode* _tmp82_; _tmp81_ = parent; _tmp82_ = _tmp81_->parent; _tmp78_ = _tmp82_ != NULL; } else { _tmp78_ = FALSE; } if (_tmp78_) { ValaGirParserNode* _tmp83_; ValaGirParserNode* _tmp84_; ValaGirParserNode* _tmp85_; _tmp83_ = parent; _tmp84_ = _tmp83_->parent; _tmp85_ = self->priv->root; _tmp77_ = _tmp84_ != _tmp85_; } else { _tmp77_ = FALSE; } if (!_tmp77_) { break; } _tmp86_ = parent; _tmp87_ = _tmp86_->parent; _tmp88_ = _vala_gir_parser_node_ref0 (_tmp87_); _vala_gir_parser_node_unref0 (parent); parent = _tmp88_; } _tmp89_ = self->priv->unresolved_type_arguments; _tmp90_ = element_type; _tmp91_ = parent; vala_map_set ((ValaMap*) _tmp89_, G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType), _tmp91_); _vala_gir_parser_node_unref0 (parent); } _vala_code_node_unref0 (element_type); } if (is_array) { _tmp92_ = "array"; } else { _tmp92_ = "type"; } vala_gir_parser_end_element (self, _tmp92_); result = type; _g_free0 (type_name); if (ctype) { *ctype = _vala_ctype; } else { _g_free0 (_vala_ctype); } if (array_length_idx) { *array_length_idx = _vala_array_length_idx; } if (no_array_length) { *no_array_length = _vala_no_array_length; } if (array_null_terminated) { *array_null_terminated = _vala_array_null_terminated; } return result; } static ValaDataType* vala_gir_parser_parse_type_from_gir_name (ValaGirParser* self, const gchar* type_name, gboolean* no_array_length, gboolean* array_null_terminated, const gchar* ctype) { gboolean _vala_no_array_length = FALSE; gboolean _vala_array_null_terminated = FALSE; ValaDataType* type = NULL; ValaDataType* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (type_name != NULL, NULL); _vala_no_array_length = FALSE; _vala_array_null_terminated = FALSE; type = NULL; if (g_strcmp0 (type_name, "none") == 0) { ValaSourceReference* _tmp0_; ValaSourceReference* _tmp1_; ValaVoidType* _tmp2_; _tmp0_ = vala_gir_parser_get_current_src (self); _tmp1_ = _tmp0_; _tmp2_ = vala_void_type_new (_tmp1_); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp2_; _vala_source_reference_unref0 (_tmp1_); } else { if (g_strcmp0 (type_name, "gpointer") == 0) { ValaSourceReference* _tmp3_; ValaSourceReference* _tmp4_; ValaVoidType* _tmp5_; ValaVoidType* _tmp6_; ValaSourceReference* _tmp7_; ValaSourceReference* _tmp8_; ValaPointerType* _tmp9_; _tmp3_ = vala_gir_parser_get_current_src (self); _tmp4_ = _tmp3_; _tmp5_ = vala_void_type_new (_tmp4_); _tmp6_ = _tmp5_; _tmp7_ = vala_gir_parser_get_current_src (self); _tmp8_ = _tmp7_; _tmp9_ = vala_pointer_type_new ((ValaDataType*) _tmp6_, _tmp8_); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp9_; _vala_source_reference_unref0 (_tmp8_); _vala_code_node_unref0 (_tmp6_); _vala_source_reference_unref0 (_tmp4_); } else { if (g_strcmp0 (type_name, "GObject.Strv") == 0) { ValaUnresolvedType* element_type = NULL; ValaUnresolvedSymbol* _tmp10_; ValaUnresolvedSymbol* _tmp11_; ValaUnresolvedType* _tmp12_; ValaUnresolvedType* _tmp13_; ValaUnresolvedType* _tmp14_; ValaUnresolvedType* _tmp15_; ValaSourceReference* _tmp16_; ValaSourceReference* _tmp17_; ValaArrayType* _tmp18_; _tmp10_ = vala_unresolved_symbol_new (NULL, "string", NULL); _tmp11_ = _tmp10_; _tmp12_ = vala_unresolved_type_new_from_symbol (_tmp11_, NULL); _tmp13_ = _tmp12_; _vala_code_node_unref0 (_tmp11_); element_type = _tmp13_; _tmp14_ = element_type; vala_data_type_set_value_owned ((ValaDataType*) _tmp14_, TRUE); _tmp15_ = element_type; _tmp16_ = vala_gir_parser_get_current_src (self); _tmp17_ = _tmp16_; _tmp18_ = vala_array_type_new ((ValaDataType*) _tmp15_, 1, _tmp17_); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp18_; _vala_source_reference_unref0 (_tmp17_); _vala_no_array_length = TRUE; _vala_array_null_terminated = TRUE; _vala_code_node_unref0 (element_type); } else { gboolean known_type = FALSE; ValaDataType* _tmp31_; known_type = TRUE; if (g_strcmp0 (type_name, "utf8") == 0) { type_name = "string"; } else { if (g_strcmp0 (type_name, "gboolean") == 0) { ValaCodeContext* _tmp19_; ValaNamespace* _tmp20_; ValaNamespace* _tmp21_; ValaScope* _tmp22_; ValaScope* _tmp23_; ValaSymbol* _tmp24_; ValaStruct* _tmp25_; ValaBooleanType* _tmp26_; _tmp19_ = self->priv->context; _tmp20_ = vala_code_context_get_root (_tmp19_); _tmp21_ = _tmp20_; _tmp22_ = vala_symbol_get_scope ((ValaSymbol*) _tmp21_); _tmp23_ = _tmp22_; _tmp24_ = vala_scope_lookup (_tmp23_, "bool"); _tmp25_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_STRUCT, ValaStruct); _tmp26_ = vala_boolean_type_new (_tmp25_); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp26_; _vala_code_node_unref0 (_tmp25_); } else { if (g_strcmp0 (type_name, "gchar") == 0) { type_name = "char"; } else { if (g_strcmp0 (type_name, "gshort") == 0) { type_name = "short"; } else { if (g_strcmp0 (type_name, "gushort") == 0) { type_name = "ushort"; } else { if (g_strcmp0 (type_name, "gint") == 0) { type_name = "int"; } else { if (g_strcmp0 (type_name, "guint") == 0) { type_name = "uint"; } else { if (g_strcmp0 (type_name, "glong") == 0) { gboolean _tmp27_ = FALSE; if (ctype != NULL) { _tmp27_ = g_str_has_prefix (ctype, "gssize"); } else { _tmp27_ = FALSE; } if (_tmp27_) { type_name = "ssize_t"; } else { gboolean _tmp28_ = FALSE; if (ctype != NULL) { _tmp28_ = g_str_has_prefix (ctype, "gintptr"); } else { _tmp28_ = FALSE; } if (_tmp28_) { type_name = "intptr"; } else { type_name = "long"; } } } else { if (g_strcmp0 (type_name, "gulong") == 0) { gboolean _tmp29_ = FALSE; if (ctype != NULL) { _tmp29_ = g_str_has_prefix (ctype, "gsize"); } else { _tmp29_ = FALSE; } if (_tmp29_) { type_name = "size_t"; } else { gboolean _tmp30_ = FALSE; if (ctype != NULL) { _tmp30_ = g_str_has_prefix (ctype, "guintptr"); } else { _tmp30_ = FALSE; } if (_tmp30_) { type_name = "uintptr"; } else { type_name = "ulong"; } } } else { if (g_strcmp0 (type_name, "gint8") == 0) { type_name = "int8"; } else { if (g_strcmp0 (type_name, "guint8") == 0) { type_name = "uint8"; } else { if (g_strcmp0 (type_name, "gint16") == 0) { type_name = "int16"; } else { if (g_strcmp0 (type_name, "guint16") == 0) { type_name = "uint16"; } else { if (g_strcmp0 (type_name, "gint32") == 0) { type_name = "int32"; } else { if (g_strcmp0 (type_name, "guint32") == 0) { type_name = "uint32"; } else { if (g_strcmp0 (type_name, "gint64") == 0) { type_name = "int64"; } else { if (g_strcmp0 (type_name, "guint64") == 0) { type_name = "uint64"; } else { if (g_strcmp0 (type_name, "gfloat") == 0) { type_name = "float"; } else { if (g_strcmp0 (type_name, "gdouble") == 0) { type_name = "double"; } else { if (g_strcmp0 (type_name, "filename") == 0) { type_name = "string"; } else { if (g_strcmp0 (type_name, "GLib.offset") == 0) { type_name = "int64"; } else { if (g_strcmp0 (type_name, "gsize") == 0) { type_name = "size_t"; } else { if (g_strcmp0 (type_name, "gssize") == 0) { type_name = "ssize_t"; } else { if (g_strcmp0 (type_name, "guintptr") == 0) { type_name = "uintptr"; } else { if (g_strcmp0 (type_name, "gintptr") == 0) { type_name = "intptr"; } else { if (g_strcmp0 (type_name, "GType") == 0) { type_name = "GLib.Type"; } else { if (g_strcmp0 (type_name, "GObject.Class") == 0) { type_name = "GLib.ObjectClass"; } else { if (g_strcmp0 (type_name, "gunichar") == 0) { type_name = "unichar"; } else { if (g_strcmp0 (type_name, "Atk.ImplementorIface") == 0) { type_name = "Atk.Implementor"; } else { known_type = FALSE; } } } } } } } } } } } } } } } } } } } } } } } } } } } } } _tmp31_ = type; if (_tmp31_ == NULL) { ValaUnresolvedSymbol* sym = NULL; ValaSourceReference* _tmp32_; ValaSourceReference* _tmp33_; ValaUnresolvedSymbol* _tmp34_; ValaUnresolvedSymbol* _tmp35_; ValaUnresolvedSymbol* _tmp36_; ValaSourceReference* _tmp37_; ValaSourceReference* _tmp38_; ValaUnresolvedType* _tmp39_; _tmp32_ = vala_gir_parser_get_current_src (self); _tmp33_ = _tmp32_; _tmp34_ = vala_gir_parser_parse_symbol_from_string (self, type_name, _tmp33_); _tmp35_ = _tmp34_; _vala_source_reference_unref0 (_tmp33_); sym = _tmp35_; _tmp36_ = sym; _tmp37_ = vala_gir_parser_get_current_src (self); _tmp38_ = _tmp37_; _tmp39_ = vala_unresolved_type_new_from_symbol (_tmp36_, _tmp38_); _vala_code_node_unref0 (type); type = (ValaDataType*) _tmp39_; _vala_source_reference_unref0 (_tmp38_); if (!known_type) { ValaArrayList* _tmp40_; ValaUnresolvedSymbol* _tmp41_; _tmp40_ = self->priv->unresolved_gir_symbols; _tmp41_ = sym; vala_collection_add ((ValaCollection*) _tmp40_, _tmp41_); } _vala_code_node_unref0 (sym); } } } } result = type; if (no_array_length) { *no_array_length = _vala_no_array_length; } if (array_null_terminated) { *array_null_terminated = _vala_array_null_terminated; } return result; } static void vala_gir_parser_parse_record (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; ValaStruct* st = NULL; gboolean require_copy_free = FALSE; ValaGirParserNode* _tmp2_; ValaStruct* _tmp14_; ValaStruct* _tmp15_; ValaStruct* _tmp16_; gchar* gtype_struct_for = NULL; ValaMarkupReader* _tmp17_; gchar* _tmp18_; const gchar* _tmp19_; gboolean first_field = FALSE; ValaStruct* _tmp28_; ValaGirComment* _tmp29_; ValaGirComment* _tmp30_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "record"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; vala_gir_parser_push_node (self, _tmp1_, TRUE); _g_free0 (_tmp1_); require_copy_free = FALSE; _tmp2_ = self->priv->current; if (_tmp2_->new_symbol) { gchar* _tmp3_; gchar* _tmp4_; ValaGirParserNode* _tmp5_; ValaSourceReference* _tmp6_; ValaStruct* _tmp7_; ValaGirParserNode* _tmp8_; ValaStruct* _tmp9_; ValaSymbol* _tmp10_; _tmp3_ = vala_gir_parser_element_get_name (self, NULL); _tmp4_ = _tmp3_; _tmp5_ = self->priv->current; _tmp6_ = _tmp5_->source_reference; _tmp7_ = vala_struct_new (_tmp4_, _tmp6_, NULL); _vala_code_node_unref0 (st); st = _tmp7_; _g_free0 (_tmp4_); _tmp8_ = self->priv->current; _tmp9_ = st; _tmp10_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp9_); _vala_code_node_unref0 (_tmp8_->symbol); _tmp8_->symbol = _tmp10_; } else { ValaGirParserNode* _tmp11_; ValaSymbol* _tmp12_; ValaStruct* _tmp13_; _tmp11_ = self->priv->current; _tmp12_ = _tmp11_->symbol; _tmp13_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_STRUCT, ValaStruct)); _vala_code_node_unref0 (st); st = _tmp13_; } _tmp14_ = st; vala_gir_parser_set_type_id_ccode (self, (ValaSymbol*) _tmp14_); _tmp15_ = st; require_copy_free = vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp15_, "CCode", "type_id"); _tmp16_ = st; vala_symbol_set_access ((ValaSymbol*) _tmp16_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp17_ = self->priv->reader; _tmp18_ = vala_markup_reader_get_attribute (_tmp17_, "glib:is-gtype-struct-for"); gtype_struct_for = _tmp18_; _tmp19_ = gtype_struct_for; if (_tmp19_ != NULL) { ValaGirParserNode* _tmp20_; const gchar* _tmp21_; ValaGirParserNode* _tmp22_; ValaSourceReference* _tmp23_; ValaUnresolvedSymbol* _tmp24_; ValaArrayList* _tmp25_; ValaGirParserNode* _tmp26_; ValaUnresolvedSymbol* _tmp27_; _tmp20_ = self->priv->current; _tmp21_ = gtype_struct_for; _tmp22_ = self->priv->current; _tmp23_ = _tmp22_->source_reference; _tmp24_ = vala_gir_parser_parse_symbol_from_string (self, _tmp21_, _tmp23_); _vala_code_node_unref0 (_tmp20_->gtype_struct_for); _tmp20_->gtype_struct_for = _tmp24_; _tmp25_ = self->priv->unresolved_gir_symbols; _tmp26_ = self->priv->current; _tmp27_ = _tmp26_->gtype_struct_for; vala_collection_add ((ValaCollection*) _tmp25_, _tmp27_); } first_field = TRUE; vala_gir_parser_next (self); _tmp28_ = st; _tmp29_ = vala_gir_parser_parse_symbol_doc (self); _tmp30_ = _tmp29_; vala_symbol_set_comment ((ValaSymbol*) _tmp28_, (ValaComment*) _tmp30_); _vala_comment_unref0 (_tmp30_); while (TRUE) { ValaMarkupTokenType _tmp31_; ValaMarkupReader* _tmp36_; const gchar* _tmp37_; const gchar* _tmp38_; _tmp31_ = self->priv->current_token; if (!(_tmp31_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { gboolean _tmp32_ = FALSE; if (first_field) { ValaMarkupReader* _tmp33_; const gchar* _tmp34_; const gchar* _tmp35_; _tmp33_ = self->priv->reader; _tmp34_ = vala_markup_reader_get_name (_tmp33_); _tmp35_ = _tmp34_; _tmp32_ = g_strcmp0 (_tmp35_, "field") == 0; } else { _tmp32_ = FALSE; } if (_tmp32_) { first_field = FALSE; } vala_gir_parser_skip_element (self); continue; } _tmp36_ = self->priv->reader; _tmp37_ = vala_markup_reader_get_name (_tmp36_); _tmp38_ = _tmp37_; if (g_strcmp0 (_tmp38_, "field") == 0) { gboolean _tmp39_ = FALSE; ValaMarkupReader* _tmp40_; gchar* _tmp41_; gchar* _tmp42_; gboolean _tmp43_; _tmp40_ = self->priv->reader; _tmp41_ = vala_markup_reader_get_attribute (_tmp40_, "name"); _tmp42_ = _tmp41_; _tmp43_ = g_strcmp0 (_tmp42_, "priv") != 0; _g_free0 (_tmp42_); if (_tmp43_) { gboolean _tmp44_ = FALSE; if (first_field) { const gchar* _tmp45_; _tmp45_ = gtype_struct_for; _tmp44_ = _tmp45_ != NULL; } else { _tmp44_ = FALSE; } _tmp39_ = !_tmp44_; } else { _tmp39_ = FALSE; } if (_tmp39_) { vala_gir_parser_parse_field (self); } else { vala_gir_parser_skip_element (self); } first_field = FALSE; } else { ValaMarkupReader* _tmp46_; const gchar* _tmp47_; const gchar* _tmp48_; _tmp46_ = self->priv->reader; _tmp47_ = vala_markup_reader_get_name (_tmp46_); _tmp48_ = _tmp47_; if (g_strcmp0 (_tmp48_, "constructor") == 0) { vala_gir_parser_parse_constructor (self); } else { ValaMarkupReader* _tmp49_; const gchar* _tmp50_; const gchar* _tmp51_; _tmp49_ = self->priv->reader; _tmp50_ = vala_markup_reader_get_name (_tmp49_); _tmp51_ = _tmp50_; if (g_strcmp0 (_tmp51_, "method") == 0) { vala_gir_parser_parse_method (self, "method"); } else { ValaMarkupReader* _tmp52_; const gchar* _tmp53_; const gchar* _tmp54_; _tmp52_ = self->priv->reader; _tmp53_ = vala_markup_reader_get_name (_tmp52_); _tmp54_ = _tmp53_; if (g_strcmp0 (_tmp54_, "function") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp55_; const gchar* _tmp56_; const gchar* _tmp57_; _tmp55_ = self->priv->reader; _tmp56_ = vala_markup_reader_get_name (_tmp55_); _tmp57_ = _tmp56_; if (g_strcmp0 (_tmp57_, "function-macro") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp58_; const gchar* _tmp59_; const gchar* _tmp60_; _tmp58_ = self->priv->reader; _tmp59_ = vala_markup_reader_get_name (_tmp58_); _tmp60_ = _tmp59_; if (g_strcmp0 (_tmp60_, "union") == 0) { vala_gir_parser_parse_union (self); } else { ValaSourceReference* _tmp61_; ValaSourceReference* _tmp62_; ValaMarkupReader* _tmp63_; const gchar* _tmp64_; const gchar* _tmp65_; gchar* _tmp66_; gchar* _tmp67_; _tmp61_ = vala_gir_parser_get_current_src (self); _tmp62_ = _tmp61_; _tmp63_ = self->priv->reader; _tmp64_ = vala_markup_reader_get_name (_tmp63_); _tmp65_ = _tmp64_; _tmp66_ = g_strdup_printf ("unknown child element `%s' in `record'", _tmp65_); _tmp67_ = _tmp66_; vala_report_error (_tmp62_, _tmp67_); _g_free0 (_tmp67_); _vala_source_reference_unref0 (_tmp62_); vala_gir_parser_skip_element (self); } } } } } } vala_gir_parser_pop_metadata (self); } if (require_copy_free) { ValaStruct* _tmp68_; ValaStruct* _tmp69_; _tmp68_ = st; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp68_, "CCode", "copy_function", "g_boxed_copy", NULL); _tmp69_ = st; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp69_, "CCode", "free_function", "g_boxed_free", NULL); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "record"); _g_free0 (gtype_struct_for); _vala_code_node_unref0 (st); } static void vala_gir_parser_parse_class (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; ValaClass* cl = NULL; gchar* parent = NULL; ValaMarkupReader* _tmp2_; gchar* _tmp3_; ValaGirParserNode* _tmp4_; ValaClass* _tmp44_; ValaClass* _tmp45_; ValaClass* _tmp46_; ValaGirComment* _tmp47_; ValaGirComment* _tmp48_; gboolean first_field = FALSE; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "class"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; vala_gir_parser_push_node (self, _tmp1_, TRUE); _g_free0 (_tmp1_); _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_attribute (_tmp2_, "parent"); parent = _tmp3_; _tmp4_ = self->priv->current; if (_tmp4_->new_symbol) { ValaGirParserNode* _tmp5_; const gchar* _tmp6_; ValaGirParserNode* _tmp7_; ValaSourceReference* _tmp8_; ValaClass* _tmp9_; ValaClass* _tmp10_; ValaGirParserMetadata* _tmp11_; ValaMarkupReader* _tmp12_; gchar* _tmp13_; gchar* _tmp14_; ValaClass* _tmp15_; ValaGirParserMetadata* _tmp16_; ValaGirParserMetadata* _tmp17_; const gchar* _tmp22_; gchar* type_struct = NULL; ValaMarkupReader* _tmp27_; gchar* _tmp28_; const gchar* _tmp29_; ValaGirParserNode* _tmp38_; ValaClass* _tmp39_; ValaSymbol* _tmp40_; _tmp5_ = self->priv->current; _tmp6_ = _tmp5_->name; _tmp7_ = self->priv->current; _tmp8_ = _tmp7_->source_reference; _tmp9_ = vala_class_new (_tmp6_, _tmp8_, NULL); _vala_code_node_unref0 (cl); cl = _tmp9_; _tmp10_ = cl; _tmp11_ = self->priv->metadata; _tmp12_ = self->priv->reader; _tmp13_ = vala_markup_reader_get_attribute (_tmp12_, "abstract"); _tmp14_ = _tmp13_; vala_class_set_is_abstract (_tmp10_, vala_gir_parser_metadata_get_bool (_tmp11_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, g_strcmp0 (_tmp14_, "1") == 0)); _g_free0 (_tmp14_); _tmp15_ = cl; _tmp16_ = self->priv->metadata; vala_class_set_is_sealed (_tmp15_, vala_gir_parser_metadata_get_bool (_tmp16_, VALA_GIR_PARSER_ARGUMENT_TYPE_SEALED, FALSE)); _tmp17_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp17_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_GET_FUNCTION)) { ValaClass* _tmp18_; ValaGirParserMetadata* _tmp19_; gchar* _tmp20_; gchar* _tmp21_; _tmp18_ = cl; _tmp19_ = self->priv->metadata; _tmp20_ = vala_gir_parser_metadata_get_string (_tmp19_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_GET_FUNCTION); _tmp21_ = _tmp20_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp18_, "CCode", "type_get_function", _tmp21_, NULL); _g_free0 (_tmp21_); } _tmp22_ = parent; if (_tmp22_ != NULL) { ValaClass* _tmp23_; const gchar* _tmp24_; ValaDataType* _tmp25_; ValaDataType* _tmp26_; _tmp23_ = cl; _tmp24_ = parent; _tmp25_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp24_, NULL, NULL, NULL); _tmp26_ = _tmp25_; vala_class_add_base_type (_tmp23_, _tmp26_); _vala_code_node_unref0 (_tmp26_); } _tmp27_ = self->priv->reader; _tmp28_ = vala_markup_reader_get_attribute (_tmp27_, "glib:type-struct"); type_struct = _tmp28_; _tmp29_ = type_struct; if (_tmp29_ != NULL) { ValaGirParserNode* _tmp30_; const gchar* _tmp31_; ValaGirParserNode* _tmp32_; ValaSourceReference* _tmp33_; ValaUnresolvedSymbol* _tmp34_; ValaArrayList* _tmp35_; ValaGirParserNode* _tmp36_; ValaUnresolvedSymbol* _tmp37_; _tmp30_ = self->priv->current; _tmp31_ = type_struct; _tmp32_ = self->priv->current; _tmp33_ = _tmp32_->source_reference; _tmp34_ = vala_gir_parser_parse_symbol_from_string (self, _tmp31_, _tmp33_); _vala_code_node_unref0 (_tmp30_->type_struct); _tmp30_->type_struct = _tmp34_; _tmp35_ = self->priv->unresolved_gir_symbols; _tmp36_ = self->priv->current; _tmp37_ = _tmp36_->type_struct; vala_collection_add ((ValaCollection*) _tmp35_, _tmp37_); } _tmp38_ = self->priv->current; _tmp39_ = cl; _tmp40_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp39_); _vala_code_node_unref0 (_tmp38_->symbol); _tmp38_->symbol = _tmp40_; _g_free0 (type_struct); } else { ValaGirParserNode* _tmp41_; ValaSymbol* _tmp42_; ValaClass* _tmp43_; _tmp41_ = self->priv->current; _tmp42_ = _tmp41_->symbol; _tmp43_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_CLASS, ValaClass)); _vala_code_node_unref0 (cl); cl = _tmp43_; } _tmp44_ = cl; vala_gir_parser_set_type_id_ccode (self, (ValaSymbol*) _tmp44_); _tmp45_ = cl; vala_symbol_set_access ((ValaSymbol*) _tmp45_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); vala_gir_parser_next (self); _tmp46_ = cl; _tmp47_ = vala_gir_parser_parse_symbol_doc (self); _tmp48_ = _tmp47_; vala_symbol_set_comment ((ValaSymbol*) _tmp46_, (ValaComment*) _tmp48_); _vala_comment_unref0 (_tmp48_); first_field = TRUE; while (TRUE) { ValaMarkupTokenType _tmp49_; ValaMarkupReader* _tmp54_; const gchar* _tmp55_; const gchar* _tmp56_; _tmp49_ = self->priv->current_token; if (!(_tmp49_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { gboolean _tmp50_ = FALSE; if (first_field) { ValaMarkupReader* _tmp51_; const gchar* _tmp52_; const gchar* _tmp53_; _tmp51_ = self->priv->reader; _tmp52_ = vala_markup_reader_get_name (_tmp51_); _tmp53_ = _tmp52_; _tmp50_ = g_strcmp0 (_tmp53_, "field") == 0; } else { _tmp50_ = FALSE; } if (_tmp50_) { first_field = FALSE; } vala_gir_parser_skip_element (self); continue; } _tmp54_ = self->priv->reader; _tmp55_ = vala_markup_reader_get_name (_tmp54_); _tmp56_ = _tmp55_; if (g_strcmp0 (_tmp56_, "implements") == 0) { ValaClass* _tmp57_; ValaMarkupReader* _tmp58_; gchar* _tmp59_; gchar* _tmp60_; ValaDataType* _tmp61_; ValaDataType* _tmp62_; vala_gir_parser_start_element (self, "implements"); _tmp57_ = cl; _tmp58_ = self->priv->reader; _tmp59_ = vala_markup_reader_get_attribute (_tmp58_, "name"); _tmp60_ = _tmp59_; _tmp61_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp60_, NULL, NULL, NULL); _tmp62_ = _tmp61_; vala_class_add_base_type (_tmp57_, _tmp62_); _vala_code_node_unref0 (_tmp62_); _g_free0 (_tmp60_); vala_gir_parser_next (self); vala_gir_parser_end_element (self, "implements"); } else { ValaMarkupReader* _tmp63_; const gchar* _tmp64_; const gchar* _tmp65_; _tmp63_ = self->priv->reader; _tmp64_ = vala_markup_reader_get_name (_tmp63_); _tmp65_ = _tmp64_; if (g_strcmp0 (_tmp65_, "constant") == 0) { vala_gir_parser_parse_constant (self); } else { ValaMarkupReader* _tmp66_; const gchar* _tmp67_; const gchar* _tmp68_; _tmp66_ = self->priv->reader; _tmp67_ = vala_markup_reader_get_name (_tmp66_); _tmp68_ = _tmp67_; if (g_strcmp0 (_tmp68_, "field") == 0) { gboolean _tmp69_ = FALSE; if (first_field) { const gchar* _tmp70_; _tmp70_ = parent; _tmp69_ = _tmp70_ != NULL; } else { _tmp69_ = FALSE; } if (_tmp69_) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp71_; gchar* _tmp72_; gchar* _tmp73_; gboolean _tmp74_; _tmp71_ = self->priv->reader; _tmp72_ = vala_markup_reader_get_attribute (_tmp71_, "name"); _tmp73_ = _tmp72_; _tmp74_ = g_strcmp0 (_tmp73_, "priv") != 0; _g_free0 (_tmp73_); if (_tmp74_) { vala_gir_parser_parse_field (self); } else { vala_gir_parser_skip_element (self); } } first_field = FALSE; } else { ValaMarkupReader* _tmp75_; const gchar* _tmp76_; const gchar* _tmp77_; _tmp75_ = self->priv->reader; _tmp76_ = vala_markup_reader_get_name (_tmp75_); _tmp77_ = _tmp76_; if (g_strcmp0 (_tmp77_, "property") == 0) { ValaProperty* _tmp78_; ValaProperty* _tmp79_; _tmp78_ = vala_gir_parser_parse_property (self); _tmp79_ = _tmp78_; _vala_code_node_unref0 (_tmp79_); } else { ValaMarkupReader* _tmp80_; const gchar* _tmp81_; const gchar* _tmp82_; _tmp80_ = self->priv->reader; _tmp81_ = vala_markup_reader_get_name (_tmp80_); _tmp82_ = _tmp81_; if (g_strcmp0 (_tmp82_, "constructor") == 0) { vala_gir_parser_parse_constructor (self); } else { ValaMarkupReader* _tmp83_; const gchar* _tmp84_; const gchar* _tmp85_; _tmp83_ = self->priv->reader; _tmp84_ = vala_markup_reader_get_name (_tmp83_); _tmp85_ = _tmp84_; if (g_strcmp0 (_tmp85_, "function") == 0) { vala_gir_parser_parse_method (self, "function"); } else { ValaMarkupReader* _tmp86_; const gchar* _tmp87_; const gchar* _tmp88_; _tmp86_ = self->priv->reader; _tmp87_ = vala_markup_reader_get_name (_tmp86_); _tmp88_ = _tmp87_; if (g_strcmp0 (_tmp88_, "function-macro") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp89_; const gchar* _tmp90_; const gchar* _tmp91_; _tmp89_ = self->priv->reader; _tmp90_ = vala_markup_reader_get_name (_tmp89_); _tmp91_ = _tmp90_; if (g_strcmp0 (_tmp91_, "method") == 0) { vala_gir_parser_parse_method (self, "method"); } else { ValaMarkupReader* _tmp92_; const gchar* _tmp93_; const gchar* _tmp94_; _tmp92_ = self->priv->reader; _tmp93_ = vala_markup_reader_get_name (_tmp92_); _tmp94_ = _tmp93_; if (g_strcmp0 (_tmp94_, "virtual-method") == 0) { vala_gir_parser_parse_method (self, "virtual-method"); } else { ValaMarkupReader* _tmp95_; const gchar* _tmp96_; const gchar* _tmp97_; _tmp95_ = self->priv->reader; _tmp96_ = vala_markup_reader_get_name (_tmp95_); _tmp97_ = _tmp96_; if (g_strcmp0 (_tmp97_, "union") == 0) { vala_gir_parser_parse_union (self); } else { ValaMarkupReader* _tmp98_; const gchar* _tmp99_; const gchar* _tmp100_; _tmp98_ = self->priv->reader; _tmp99_ = vala_markup_reader_get_name (_tmp98_); _tmp100_ = _tmp99_; if (g_strcmp0 (_tmp100_, "glib:signal") == 0) { vala_gir_parser_parse_signal (self); } else { ValaSourceReference* _tmp101_; ValaSourceReference* _tmp102_; ValaMarkupReader* _tmp103_; const gchar* _tmp104_; const gchar* _tmp105_; gchar* _tmp106_; gchar* _tmp107_; _tmp101_ = vala_gir_parser_get_current_src (self); _tmp102_ = _tmp101_; _tmp103_ = self->priv->reader; _tmp104_ = vala_markup_reader_get_name (_tmp103_); _tmp105_ = _tmp104_; _tmp106_ = g_strdup_printf ("unknown child element `%s' in `class'", _tmp105_); _tmp107_ = _tmp106_; vala_report_error (_tmp102_, _tmp107_); _g_free0 (_tmp107_); _vala_source_reference_unref0 (_tmp102_); vala_gir_parser_skip_element (self); } } } } } } } } } } } vala_gir_parser_pop_metadata (self); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "class"); _g_free0 (parent); _vala_code_node_unref0 (cl); } static void vala_gir_parser_parse_interface (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; ValaInterface* iface = NULL; ValaGirParserNode* _tmp2_; ValaInterface* _tmp19_; ValaInterface* _tmp20_; ValaInterface* _tmp21_; ValaGirComment* _tmp22_; ValaGirComment* _tmp23_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "interface"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; vala_gir_parser_push_node (self, _tmp1_, TRUE); _g_free0 (_tmp1_); _tmp2_ = self->priv->current; if (_tmp2_->new_symbol) { ValaGirParserNode* _tmp3_; const gchar* _tmp4_; ValaGirParserNode* _tmp5_; ValaSourceReference* _tmp6_; ValaInterface* _tmp7_; ValaGirParserMetadata* _tmp8_; ValaGirParserNode* _tmp13_; ValaInterface* _tmp14_; ValaSymbol* _tmp15_; _tmp3_ = self->priv->current; _tmp4_ = _tmp3_->name; _tmp5_ = self->priv->current; _tmp6_ = _tmp5_->source_reference; _tmp7_ = vala_interface_new (_tmp4_, _tmp6_, NULL); _vala_code_node_unref0 (iface); iface = _tmp7_; _tmp8_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp8_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_GET_FUNCTION)) { ValaInterface* _tmp9_; ValaGirParserMetadata* _tmp10_; gchar* _tmp11_; gchar* _tmp12_; _tmp9_ = iface; _tmp10_ = self->priv->metadata; _tmp11_ = vala_gir_parser_metadata_get_string (_tmp10_, VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_GET_FUNCTION); _tmp12_ = _tmp11_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp9_, "CCode", "type_get_function", _tmp12_, NULL); _g_free0 (_tmp12_); } _tmp13_ = self->priv->current; _tmp14_ = iface; _tmp15_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp14_); _vala_code_node_unref0 (_tmp13_->symbol); _tmp13_->symbol = _tmp15_; } else { ValaGirParserNode* _tmp16_; ValaSymbol* _tmp17_; ValaInterface* _tmp18_; _tmp16_ = self->priv->current; _tmp17_ = _tmp16_->symbol; _tmp18_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_INTERFACE, ValaInterface)); _vala_code_node_unref0 (iface); iface = _tmp18_; } _tmp19_ = iface; vala_gir_parser_set_type_id_ccode (self, (ValaSymbol*) _tmp19_); _tmp20_ = iface; vala_symbol_set_access ((ValaSymbol*) _tmp20_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); vala_gir_parser_next (self); _tmp21_ = iface; _tmp22_ = vala_gir_parser_parse_symbol_doc (self); _tmp23_ = _tmp22_; vala_symbol_set_comment ((ValaSymbol*) _tmp21_, (ValaComment*) _tmp23_); _vala_comment_unref0 (_tmp23_); while (TRUE) { ValaMarkupTokenType _tmp24_; ValaMarkupReader* _tmp25_; const gchar* _tmp26_; const gchar* _tmp27_; _tmp24_ = self->priv->current_token; if (!(_tmp24_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { vala_gir_parser_skip_element (self); continue; } _tmp25_ = self->priv->reader; _tmp26_ = vala_markup_reader_get_name (_tmp25_); _tmp27_ = _tmp26_; if (g_strcmp0 (_tmp27_, "prerequisite") == 0) { ValaInterface* _tmp28_; ValaMarkupReader* _tmp29_; gchar* _tmp30_; gchar* _tmp31_; ValaDataType* _tmp32_; ValaDataType* _tmp33_; vala_gir_parser_start_element (self, "prerequisite"); _tmp28_ = iface; _tmp29_ = self->priv->reader; _tmp30_ = vala_markup_reader_get_attribute (_tmp29_, "name"); _tmp31_ = _tmp30_; _tmp32_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp31_, NULL, NULL, NULL); _tmp33_ = _tmp32_; vala_interface_add_prerequisite (_tmp28_, _tmp33_); _vala_code_node_unref0 (_tmp33_); _g_free0 (_tmp31_); vala_gir_parser_next (self); vala_gir_parser_end_element (self, "prerequisite"); } else { ValaMarkupReader* _tmp34_; const gchar* _tmp35_; const gchar* _tmp36_; _tmp34_ = self->priv->reader; _tmp35_ = vala_markup_reader_get_name (_tmp34_); _tmp36_ = _tmp35_; if (g_strcmp0 (_tmp36_, "field") == 0) { vala_gir_parser_parse_field (self); } else { ValaMarkupReader* _tmp37_; const gchar* _tmp38_; const gchar* _tmp39_; _tmp37_ = self->priv->reader; _tmp38_ = vala_markup_reader_get_name (_tmp37_); _tmp39_ = _tmp38_; if (g_strcmp0 (_tmp39_, "property") == 0) { ValaProperty* _tmp40_; ValaProperty* _tmp41_; _tmp40_ = vala_gir_parser_parse_property (self); _tmp41_ = _tmp40_; _vala_code_node_unref0 (_tmp41_); } else { ValaMarkupReader* _tmp42_; const gchar* _tmp43_; const gchar* _tmp44_; _tmp42_ = self->priv->reader; _tmp43_ = vala_markup_reader_get_name (_tmp42_); _tmp44_ = _tmp43_; if (g_strcmp0 (_tmp44_, "virtual-method") == 0) { vala_gir_parser_parse_method (self, "virtual-method"); } else { ValaMarkupReader* _tmp45_; const gchar* _tmp46_; const gchar* _tmp47_; _tmp45_ = self->priv->reader; _tmp46_ = vala_markup_reader_get_name (_tmp45_); _tmp47_ = _tmp46_; if (g_strcmp0 (_tmp47_, "function") == 0) { vala_gir_parser_parse_method (self, "function"); } else { ValaMarkupReader* _tmp48_; const gchar* _tmp49_; const gchar* _tmp50_; _tmp48_ = self->priv->reader; _tmp49_ = vala_markup_reader_get_name (_tmp48_); _tmp50_ = _tmp49_; if (g_strcmp0 (_tmp50_, "function-macro") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp51_; const gchar* _tmp52_; const gchar* _tmp53_; _tmp51_ = self->priv->reader; _tmp52_ = vala_markup_reader_get_name (_tmp51_); _tmp53_ = _tmp52_; if (g_strcmp0 (_tmp53_, "method") == 0) { vala_gir_parser_parse_method (self, "method"); } else { ValaMarkupReader* _tmp54_; const gchar* _tmp55_; const gchar* _tmp56_; _tmp54_ = self->priv->reader; _tmp55_ = vala_markup_reader_get_name (_tmp54_); _tmp56_ = _tmp55_; if (g_strcmp0 (_tmp56_, "glib:signal") == 0) { vala_gir_parser_parse_signal (self); } else { ValaSourceReference* _tmp57_; ValaSourceReference* _tmp58_; ValaMarkupReader* _tmp59_; const gchar* _tmp60_; const gchar* _tmp61_; gchar* _tmp62_; gchar* _tmp63_; _tmp57_ = vala_gir_parser_get_current_src (self); _tmp58_ = _tmp57_; _tmp59_ = self->priv->reader; _tmp60_ = vala_markup_reader_get_name (_tmp59_); _tmp61_ = _tmp60_; _tmp62_ = g_strdup_printf ("unknown child element `%s' in `interface'", _tmp61_); _tmp63_ = _tmp62_; vala_report_error (_tmp58_, _tmp63_); _g_free0 (_tmp63_); _vala_source_reference_unref0 (_tmp58_); vala_gir_parser_skip_element (self); } } } } } } } } vala_gir_parser_pop_metadata (self); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "interface"); _vala_code_node_unref0 (iface); } static void vala_gir_parser_parse_field (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; gchar* nullable = NULL; ValaMarkupReader* _tmp2_; gchar* _tmp3_; gchar* allow_none = NULL; ValaMarkupReader* _tmp4_; gchar* _tmp5_; ValaGirComment* comment = NULL; ValaGirComment* _tmp6_; gboolean no_array_length = FALSE; gboolean array_null_terminated = FALSE; gint array_length_idx = 0; ValaDataType* type = NULL; gint _tmp7_ = 0; gboolean _tmp8_ = FALSE; gboolean _tmp9_ = FALSE; ValaDataType* _tmp10_; ValaDataType* _tmp11_; ValaDataType* _tmp12_; gchar* name = NULL; ValaGirParserNode* _tmp13_; const gchar* _tmp14_; gchar* _tmp15_; gchar* cname = NULL; ValaGirParserNode* _tmp16_; ValaMap* _tmp17_; gpointer _tmp18_; ValaField* field = NULL; const gchar* _tmp19_; ValaDataType* _tmp20_; ValaGirParserNode* _tmp21_; ValaSourceReference* _tmp22_; ValaField* _tmp23_; ValaField* _tmp24_; ValaField* _tmp25_; ValaGirComment* _tmp26_; const gchar* _tmp27_; const gchar* _tmp28_; ValaDataType* _tmp31_; gboolean _tmp37_ = FALSE; const gchar* _tmp38_; ValaGirParserNode* _tmp41_; ValaField* _tmp42_; ValaSymbol* _tmp43_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "field"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; vala_gir_parser_push_node (self, _tmp1_, FALSE); _g_free0 (_tmp1_); _tmp2_ = self->priv->reader; _tmp3_ = vala_markup_reader_get_attribute (_tmp2_, "nullable"); nullable = _tmp3_; _tmp4_ = self->priv->reader; _tmp5_ = vala_markup_reader_get_attribute (_tmp4_, "allow-none"); allow_none = _tmp5_; vala_gir_parser_next (self); _tmp6_ = vala_gir_parser_parse_symbol_doc (self); comment = _tmp6_; _tmp10_ = vala_gir_parser_parse_type (self, NULL, &_tmp7_, TRUE, &_tmp8_, &_tmp9_); array_length_idx = _tmp7_; no_array_length = _tmp8_; array_null_terminated = _tmp9_; type = _tmp10_; _tmp11_ = type; _tmp12_ = vala_gir_parser_element_get_type (self, _tmp11_, TRUE, &no_array_length, &array_null_terminated, NULL); _vala_code_node_unref0 (type); type = _tmp12_; _tmp13_ = self->priv->current; _tmp14_ = _tmp13_->name; _tmp15_ = g_strdup (_tmp14_); name = _tmp15_; _tmp16_ = self->priv->current; _tmp17_ = _tmp16_->girdata; _tmp18_ = vala_map_get (_tmp17_, "name"); cname = (gchar*) _tmp18_; _tmp19_ = name; _tmp20_ = type; _tmp21_ = self->priv->current; _tmp22_ = _tmp21_->source_reference; _tmp23_ = vala_field_new (_tmp19_, _tmp20_, NULL, _tmp22_, NULL); field = _tmp23_; _tmp24_ = field; vala_symbol_set_access ((ValaSymbol*) _tmp24_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp25_ = field; _tmp26_ = comment; vala_symbol_set_comment ((ValaSymbol*) _tmp25_, (ValaComment*) _tmp26_); _tmp27_ = name; _tmp28_ = cname; if (g_strcmp0 (_tmp27_, _tmp28_) != 0) { ValaField* _tmp29_; const gchar* _tmp30_; _tmp29_ = field; _tmp30_ = cname; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp29_, "CCode", "cname", _tmp30_, NULL); } _tmp31_ = type; if (VALA_IS_ARRAY_TYPE (_tmp31_)) { gboolean _tmp32_ = FALSE; gboolean _tmp34_ = FALSE; if (!no_array_length) { _tmp32_ = array_length_idx > -1; } else { _tmp32_ = FALSE; } if (_tmp32_) { ValaGirParserNode* _tmp33_; _tmp33_ = self->priv->current; _tmp33_->array_length_idx = array_length_idx; } if (no_array_length) { _tmp34_ = TRUE; } else { _tmp34_ = array_null_terminated; } if (_tmp34_) { ValaField* _tmp35_; _tmp35_ = field; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp35_, "CCode", "array_length", !no_array_length, NULL); } if (array_null_terminated) { ValaField* _tmp36_; _tmp36_ = field; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp36_, "CCode", "array_null_terminated", TRUE, NULL); } } _tmp38_ = nullable; if (g_strcmp0 (_tmp38_, "1") == 0) { _tmp37_ = TRUE; } else { const gchar* _tmp39_; _tmp39_ = allow_none; _tmp37_ = g_strcmp0 (_tmp39_, "1") == 0; } if (_tmp37_) { ValaDataType* _tmp40_; _tmp40_ = type; vala_data_type_set_nullable (_tmp40_, TRUE); } _tmp41_ = self->priv->current; _tmp42_ = field; _tmp43_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp42_); _vala_code_node_unref0 (_tmp41_->symbol); _tmp41_->symbol = _tmp43_; vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "field"); _vala_code_node_unref0 (field); _g_free0 (cname); _g_free0 (name); _vala_code_node_unref0 (type); _vala_comment_unref0 (comment); _g_free0 (allow_none); _g_free0 (nullable); } static ValaProperty* vala_gir_parser_parse_property (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; gchar* _tmp2_; gchar* _tmp3_; gboolean is_abstract = FALSE; ValaGirParserMetadata* _tmp4_; ValaGirParserNode* _tmp5_; ValaGirParserNode* _tmp6_; ValaSymbol* _tmp7_; gchar* transfer = NULL; ValaMarkupReader* _tmp8_; gchar* _tmp9_; ValaGirComment* comment = NULL; ValaGirComment* _tmp10_; gboolean no_array_length = FALSE; gboolean array_null_terminated = FALSE; ValaDataType* type = NULL; const gchar* _tmp11_; gboolean _tmp12_ = FALSE; gboolean _tmp13_ = FALSE; ValaDataType* _tmp14_; ValaDataType* _tmp15_; ValaDataType* _tmp16_; ValaProperty* prop = NULL; ValaGirParserNode* _tmp17_; const gchar* _tmp18_; ValaDataType* _tmp19_; ValaGirParserNode* _tmp20_; ValaSourceReference* _tmp21_; ValaProperty* _tmp22_; ValaProperty* _tmp23_; ValaGirComment* _tmp24_; ValaProperty* _tmp25_; ValaProperty* _tmp26_; gboolean _tmp27_ = FALSE; ValaGirParserNode* _tmp30_; ValaProperty* _tmp31_; ValaSymbol* _tmp32_; ValaProperty* result = NULL; g_return_val_if_fail (self != NULL, NULL); vala_gir_parser_start_element (self, "property"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; _tmp2_ = string_replace (_tmp1_, "-", "_"); _tmp3_ = _tmp2_; vala_gir_parser_push_node (self, _tmp3_, FALSE); _g_free0 (_tmp3_); _g_free0 (_tmp1_); _tmp4_ = self->priv->metadata; _tmp5_ = self->priv->current; _tmp6_ = _tmp5_->parent; _tmp7_ = _tmp6_->symbol; is_abstract = vala_gir_parser_metadata_get_bool (_tmp4_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, VALA_IS_INTERFACE (_tmp7_)); _tmp8_ = self->priv->reader; _tmp9_ = vala_markup_reader_get_attribute (_tmp8_, "transfer-ownership"); transfer = _tmp9_; vala_gir_parser_next (self); _tmp10_ = vala_gir_parser_parse_symbol_doc (self); comment = _tmp10_; _tmp11_ = transfer; _tmp14_ = vala_gir_parser_parse_type (self, NULL, NULL, g_strcmp0 (_tmp11_, "container") != 0, &_tmp12_, &_tmp13_); no_array_length = _tmp12_; array_null_terminated = _tmp13_; type = _tmp14_; _tmp15_ = type; _tmp16_ = vala_gir_parser_element_get_type (self, _tmp15_, TRUE, &no_array_length, &array_null_terminated, NULL); _vala_code_node_unref0 (type); type = _tmp16_; _tmp17_ = self->priv->current; _tmp18_ = _tmp17_->name; _tmp19_ = type; _tmp20_ = self->priv->current; _tmp21_ = _tmp20_->source_reference; _tmp22_ = vala_property_new (_tmp18_, _tmp19_, NULL, NULL, _tmp21_, NULL); prop = _tmp22_; _tmp23_ = prop; _tmp24_ = comment; vala_symbol_set_comment ((ValaSymbol*) _tmp23_, (ValaComment*) _tmp24_); _tmp25_ = prop; vala_symbol_set_access ((ValaSymbol*) _tmp25_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp26_ = prop; vala_property_set_is_abstract (_tmp26_, is_abstract); if (no_array_length) { _tmp27_ = TRUE; } else { _tmp27_ = array_null_terminated; } if (_tmp27_) { ValaProperty* _tmp28_; _tmp28_ = prop; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp28_, "CCode", "array_length", !no_array_length, NULL); } if (array_null_terminated) { ValaProperty* _tmp29_; _tmp29_ = prop; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp29_, "CCode", "array_null_terminated", TRUE, NULL); } _tmp30_ = self->priv->current; _tmp31_ = prop; _tmp32_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp31_); _vala_code_node_unref0 (_tmp30_->symbol); _tmp30_->symbol = _tmp32_; vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "property"); result = prop; _vala_code_node_unref0 (type); _vala_comment_unref0 (comment); _g_free0 (transfer); return result; } static void vala_gir_parser_parse_callback (ValaGirParser* self) { g_return_if_fail (self != NULL); vala_gir_parser_parse_function (self, "callback"); } static void vala_gir_parser_parse_constructor (ValaGirParser* self) { g_return_if_fail (self != NULL); vala_gir_parser_parse_function (self, "constructor"); } static void vala_gir_parser_parse_function (ValaGirParser* self, const gchar* element_name) { ValaMarkupReader* _tmp0_; gchar* _tmp1_; gchar* _tmp2_; gchar* _tmp3_; gchar* _tmp4_; gchar* _tmp5_; gchar* _tmp6_; gchar* symbol_type = NULL; ValaGirParserMetadata* _tmp7_; gchar* ctype = NULL; ValaGirParserMetadata* _tmp11_; gchar* name = NULL; ValaGirParserNode* _tmp14_; const gchar* _tmp15_; gchar* _tmp16_; gchar* throws_string = NULL; ValaMarkupReader* _tmp17_; gchar* _tmp18_; gchar* invoker = NULL; ValaMarkupReader* _tmp19_; gchar* _tmp20_; ValaGirComment* comment = NULL; ValaGirComment* _tmp21_; ValaDataType* return_type = NULL; gchar* return_ctype = NULL; gint return_array_length_idx = 0; gboolean return_no_array_length = FALSE; gboolean return_array_null_terminated = FALSE; gboolean _tmp22_ = FALSE; ValaMarkupTokenType _tmp23_; ValaSymbol* s = NULL; const gchar* _tmp41_; ValaSymbol* _tmp98_; ValaSymbol* _tmp99_; ValaGirComment* _tmp100_; ValaArrayType* array_type = NULL; ValaDataType* _tmp101_; ValaArrayType* _tmp102_; gboolean _tmp103_ = FALSE; ValaArrayType* _tmp104_; ValaSymbol* _tmp116_; ValaSymbol* _tmp130_; gboolean _tmp176_ = FALSE; ValaSymbol* _tmp177_; ValaGirParserMetadata* _tmp201_; ValaExpression* _tmp202_; ValaExpression* _tmp203_; gboolean _tmp204_; ValaSymbol* _tmp233_; gboolean _tmp243_ = FALSE; ValaDataType* _tmp244_; ValaGirParserNode* _tmp250_; const gchar* _tmp251_; ValaGirParserNode* _tmp254_; ValaSymbol* _tmp255_; ValaSymbol* _tmp256_; ValaGirParserMetadata* _tmp257_; ValaGirParserMetadata* _tmp262_; gint instance_idx = 0; gboolean _tmp265_ = FALSE; ValaArrayList* parameters = NULL; GEqualFunc _tmp272_; ValaArrayList* _tmp273_; ValaGirParserNode* _tmp274_; GEqualFunc _tmp275_; ValaArrayList* _tmp276_; ValaGirParserNode* _tmp277_; GEqualFunc _tmp278_; ValaArrayList* _tmp279_; ValaGirParserNode* _tmp280_; GEqualFunc _tmp281_; ValaArrayList* _tmp282_; gboolean _tmp283_ = FALSE; ValaMarkupTokenType _tmp284_; ValaGirParserNode* _tmp359_; ValaArrayList* _tmp360_; ValaList* _tmp361_; g_return_if_fail (self != NULL); g_return_if_fail (element_name != NULL); vala_gir_parser_start_element (self, element_name); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "invoker"); _tmp2_ = _tmp1_; _tmp3_ = vala_gir_parser_element_get_name (self, _tmp2_); _tmp4_ = _tmp3_; _tmp5_ = string_replace (_tmp4_, "-", "_"); _tmp6_ = _tmp5_; vala_gir_parser_push_node (self, _tmp6_, FALSE); _g_free0 (_tmp6_); _g_free0 (_tmp4_); _g_free0 (_tmp2_); _tmp7_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp7_, VALA_GIR_PARSER_ARGUMENT_TYPE_SYMBOL_TYPE)) { ValaGirParserMetadata* _tmp8_; gchar* _tmp9_; _tmp8_ = self->priv->metadata; _tmp9_ = vala_gir_parser_metadata_get_string (_tmp8_, VALA_GIR_PARSER_ARGUMENT_TYPE_SYMBOL_TYPE); _g_free0 (symbol_type); symbol_type = _tmp9_; } else { gchar* _tmp10_; _tmp10_ = g_strdup (element_name); _g_free0 (symbol_type); symbol_type = _tmp10_; } ctype = NULL; _tmp11_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp11_, VALA_GIR_PARSER_ARGUMENT_TYPE_CTYPE)) { ValaGirParserMetadata* _tmp12_; gchar* _tmp13_; _tmp12_ = self->priv->metadata; _tmp13_ = vala_gir_parser_metadata_get_string (_tmp12_, VALA_GIR_PARSER_ARGUMENT_TYPE_CTYPE); _g_free0 (ctype); ctype = _tmp13_; } _tmp14_ = self->priv->current; _tmp15_ = _tmp14_->name; _tmp16_ = g_strdup (_tmp15_); name = _tmp16_; _tmp17_ = self->priv->reader; _tmp18_ = vala_markup_reader_get_attribute (_tmp17_, "throws"); throws_string = _tmp18_; _tmp19_ = self->priv->reader; _tmp20_ = vala_markup_reader_get_attribute (_tmp19_, "invoker"); invoker = _tmp20_; vala_gir_parser_next (self); _tmp21_ = vala_gir_parser_parse_symbol_doc (self); comment = _tmp21_; return_ctype = NULL; return_array_length_idx = -1; return_no_array_length = FALSE; return_array_null_terminated = FALSE; _tmp23_ = self->priv->current_token; if (_tmp23_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) { ValaMarkupReader* _tmp24_; const gchar* _tmp25_; const gchar* _tmp26_; _tmp24_ = self->priv->reader; _tmp25_ = vala_markup_reader_get_name (_tmp24_); _tmp26_ = _tmp25_; _tmp22_ = g_strcmp0 (_tmp26_, "return-value") == 0; } else { _tmp22_ = FALSE; } if (_tmp22_) { ValaComment* return_comment = NULL; gchar* _tmp27_ = NULL; gint _tmp28_ = 0; gboolean _tmp29_ = FALSE; gboolean _tmp30_ = FALSE; ValaComment* _tmp31_ = NULL; ValaDataType* _tmp32_; ValaComment* _tmp33_; _tmp32_ = vala_gir_parser_parse_return_value (self, &_tmp27_, &_tmp28_, &_tmp29_, &_tmp30_, &_tmp31_); _g_free0 (return_ctype); return_ctype = _tmp27_; return_array_length_idx = _tmp28_; return_no_array_length = _tmp29_; return_array_null_terminated = _tmp30_; _vala_comment_unref0 (return_comment); return_comment = _tmp31_; _vala_code_node_unref0 (return_type); return_type = _tmp32_; _tmp33_ = return_comment; if (_tmp33_ != NULL) { ValaGirComment* _tmp34_; ValaGirComment* _tmp38_; ValaComment* _tmp39_; _tmp34_ = comment; if (_tmp34_ == NULL) { ValaGirParserNode* _tmp35_; ValaSourceReference* _tmp36_; ValaGirComment* _tmp37_; _tmp35_ = self->priv->current; _tmp36_ = _tmp35_->source_reference; _tmp37_ = vala_gir_comment_new (NULL, _tmp36_); _vala_comment_unref0 (comment); comment = _tmp37_; } _tmp38_ = comment; _tmp39_ = return_comment; vala_gir_comment_set_return_content (_tmp38_, _tmp39_); } _vala_comment_unref0 (return_comment); } else { ValaVoidType* _tmp40_; _tmp40_ = vala_void_type_new (NULL); _vala_code_node_unref0 (return_type); return_type = (ValaDataType*) _tmp40_; } _tmp41_ = symbol_type; if (g_strcmp0 (_tmp41_, "callback") == 0) { const gchar* _tmp42_; ValaDataType* _tmp43_; ValaGirParserNode* _tmp44_; ValaSourceReference* _tmp45_; ValaDelegate* _tmp46_; ValaSymbol* _tmp47_; _tmp42_ = name; _tmp43_ = return_type; _tmp44_ = self->priv->current; _tmp45_ = _tmp44_->source_reference; _tmp46_ = vala_delegate_new (_tmp42_, _tmp43_, _tmp45_, NULL); _vala_code_node_unref0 (s); s = (ValaSymbol*) _tmp46_; _tmp47_ = s; vala_delegate_set_has_target (G_TYPE_CHECK_INSTANCE_CAST (_tmp47_, VALA_TYPE_DELEGATE, ValaDelegate), FALSE); } else { const gchar* _tmp48_; _tmp48_ = symbol_type; if (g_strcmp0 (_tmp48_, "constructor") == 0) { const gchar* _tmp49_; ValaCreationMethod* m = NULL; const gchar* _tmp55_; ValaGirParserNode* _tmp56_; ValaSourceReference* _tmp57_; ValaCreationMethod* _tmp58_; ValaCreationMethod* _tmp59_; gboolean _tmp60_ = FALSE; const gchar* _tmp61_; gchar* parent_ctype = NULL; ValaGirParserNode* _tmp69_; ValaGirParserNode* _tmp70_; ValaSymbol* _tmp71_; gboolean _tmp75_ = FALSE; const gchar* _tmp76_; ValaCreationMethod* _tmp85_; ValaSymbol* _tmp86_; _tmp49_ = name; if (g_strcmp0 (_tmp49_, "new") == 0) { _g_free0 (name); name = NULL; } else { const gchar* _tmp50_; _tmp50_ = name; if (g_str_has_prefix (_tmp50_, "new_")) { const gchar* _tmp51_; gint _tmp52_; gint _tmp53_; gchar* _tmp54_; _tmp51_ = name; _tmp52_ = strlen ("new_"); _tmp53_ = _tmp52_; _tmp54_ = string_substring (_tmp51_, (glong) _tmp53_, (glong) -1); _g_free0 (name); name = _tmp54_; } } _tmp55_ = name; _tmp56_ = self->priv->current; _tmp57_ = _tmp56_->source_reference; _tmp58_ = vala_creation_method_new (NULL, _tmp55_, _tmp57_, NULL); m = _tmp58_; _tmp59_ = m; vala_method_set_has_construct_function ((ValaMethod*) _tmp59_, FALSE); _tmp61_ = name; if (_tmp61_ != NULL) { ValaGirParserNode* _tmp62_; const gchar* _tmp63_; _tmp62_ = self->priv->current; _tmp63_ = _tmp62_->name; _tmp60_ = !g_str_has_prefix (_tmp63_, "new_"); } else { _tmp60_ = FALSE; } if (_tmp60_) { ValaCreationMethod* _tmp64_; ValaGirParserNode* _tmp65_; ValaMap* _tmp66_; gpointer _tmp67_; gchar* _tmp68_; _tmp64_ = m; _tmp65_ = self->priv->current; _tmp66_ = _tmp65_->girdata; _tmp67_ = vala_map_get (_tmp66_, "c:identifier"); _tmp68_ = (gchar*) _tmp67_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp64_, "CCode", "cname", _tmp68_, NULL); _g_free0 (_tmp68_); } parent_ctype = NULL; _tmp69_ = self->priv->current; _tmp70_ = _tmp69_->parent; _tmp71_ = _tmp70_->symbol; if (VALA_IS_CLASS (_tmp71_)) { ValaGirParserNode* _tmp72_; ValaGirParserNode* _tmp73_; gchar* _tmp74_; _tmp72_ = self->priv->current; _tmp73_ = _tmp72_->parent; _tmp74_ = vala_gir_parser_node_get_cname (_tmp73_); _g_free0 (parent_ctype); parent_ctype = _tmp74_; } _tmp76_ = return_ctype; if (_tmp76_ != NULL) { gboolean _tmp77_ = FALSE; const gchar* _tmp78_; _tmp78_ = parent_ctype; if (_tmp78_ == NULL) { _tmp77_ = TRUE; } else { const gchar* _tmp79_; const gchar* _tmp80_; gchar* _tmp81_; gchar* _tmp82_; _tmp79_ = return_ctype; _tmp80_ = parent_ctype; _tmp81_ = g_strconcat (_tmp80_, "*", NULL); _tmp82_ = _tmp81_; _tmp77_ = g_strcmp0 (_tmp79_, _tmp82_) != 0; _g_free0 (_tmp82_); } _tmp75_ = _tmp77_; } else { _tmp75_ = FALSE; } if (_tmp75_) { ValaCreationMethod* _tmp83_; const gchar* _tmp84_; _tmp83_ = m; _tmp84_ = return_ctype; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp83_, "CCode", "type", _tmp84_, NULL); } _tmp85_ = m; _tmp86_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp85_); _vala_code_node_unref0 (s); s = _tmp86_; _g_free0 (parent_ctype); _vala_code_node_unref0 (m); } else { const gchar* _tmp87_; _tmp87_ = symbol_type; if (g_strcmp0 (_tmp87_, "glib:signal") == 0) { const gchar* _tmp88_; ValaDataType* _tmp89_; ValaGirParserNode* _tmp90_; ValaSourceReference* _tmp91_; ValaSignal* _tmp92_; _tmp88_ = name; _tmp89_ = return_type; _tmp90_ = self->priv->current; _tmp91_ = _tmp90_->source_reference; _tmp92_ = vala_signal_new (_tmp88_, _tmp89_, _tmp91_, NULL); _vala_code_node_unref0 (s); s = (ValaSymbol*) _tmp92_; } else { const gchar* _tmp93_; ValaDataType* _tmp94_; ValaGirParserNode* _tmp95_; ValaSourceReference* _tmp96_; ValaMethod* _tmp97_; _tmp93_ = name; _tmp94_ = return_type; _tmp95_ = self->priv->current; _tmp96_ = _tmp95_->source_reference; _tmp97_ = vala_method_new (_tmp93_, _tmp94_, _tmp96_, NULL); _vala_code_node_unref0 (s); s = (ValaSymbol*) _tmp97_; } } } _tmp98_ = s; vala_symbol_set_access (_tmp98_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp99_ = s; _tmp100_ = comment; vala_symbol_set_comment (_tmp99_, (ValaComment*) _tmp100_); _tmp101_ = return_type; _tmp102_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp101_) ? ((ValaArrayType*) _tmp101_) : NULL); array_type = _tmp102_; _tmp104_ = array_type; if (_tmp104_ != NULL) { ValaArrayType* _tmp105_; gboolean _tmp106_; gboolean _tmp107_; _tmp105_ = array_type; _tmp106_ = vala_array_type_get_fixed_length (_tmp105_); _tmp107_ = _tmp106_; _tmp103_ = _tmp107_; } else { _tmp103_ = FALSE; } if (_tmp103_) { ValaSymbol* _tmp108_; ValaArrayType* _tmp109_; ValaExpression* _tmp110_; ValaExpression* _tmp111_; const gchar* _tmp112_; const gchar* _tmp113_; ValaArrayType* _tmp114_; ValaArrayType* _tmp115_; _tmp108_ = s; _tmp109_ = array_type; _tmp110_ = vala_array_type_get_length (_tmp109_); _tmp111_ = _tmp110_; _tmp112_ = vala_integer_literal_get_value (G_TYPE_CHECK_INSTANCE_CAST (_tmp111_, VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral)); _tmp113_ = _tmp112_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp108_, "CCode", "array_length_cexpr", _tmp113_, NULL); _tmp114_ = array_type; vala_array_type_set_fixed_length (_tmp114_, FALSE); _tmp115_ = array_type; vala_array_type_set_length (_tmp115_, NULL); } _tmp116_ = s; if (VALA_IS_SIGNAL (_tmp116_)) { ValaGirParserNode* _tmp117_; ValaMap* _tmp118_; gpointer _tmp119_; gchar* _tmp120_; const gchar* _tmp121_; gchar* _tmp122_; gchar* _tmp123_; gboolean _tmp124_; _tmp117_ = self->priv->current; _tmp118_ = _tmp117_->girdata; _tmp119_ = vala_map_get (_tmp118_, "name"); _tmp120_ = (gchar*) _tmp119_; _tmp121_ = name; _tmp122_ = string_replace (_tmp121_, "_", "-"); _tmp123_ = _tmp122_; _tmp124_ = g_strcmp0 (_tmp120_, _tmp123_) != 0; _g_free0 (_tmp123_); _g_free0 (_tmp120_); if (_tmp124_) { ValaSymbol* _tmp125_; ValaGirParserNode* _tmp126_; ValaMap* _tmp127_; gpointer _tmp128_; gchar* _tmp129_; _tmp125_ = s; _tmp126_ = self->priv->current; _tmp127_ = _tmp126_->girdata; _tmp128_ = vala_map_get (_tmp127_, "name"); _tmp129_ = (gchar*) _tmp128_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp125_, "CCode", "cname", _tmp129_, NULL); _g_free0 (_tmp129_); } } _tmp130_ = s; if (VALA_IS_METHOD (_tmp130_)) { ValaMethod* m = NULL; ValaSymbol* _tmp131_; ValaMethod* _tmp132_; gboolean _tmp133_ = FALSE; const gchar* _tmp134_; ValaGirParserMetadata* _tmp167_; ValaGirParserMetadata* _tmp173_; _tmp131_ = s; _tmp132_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp131_, VALA_TYPE_METHOD, ValaMethod)); m = _tmp132_; _tmp134_ = symbol_type; if (g_strcmp0 (_tmp134_, "virtual-method") == 0) { _tmp133_ = TRUE; } else { const gchar* _tmp135_; _tmp135_ = symbol_type; _tmp133_ = g_strcmp0 (_tmp135_, "callback") == 0; } if (_tmp133_) { ValaGirParserNode* _tmp136_; ValaGirParserNode* _tmp137_; ValaSymbol* _tmp138_; ValaGirParserMetadata* _tmp141_; ValaGirParserNode* _tmp154_; ValaMap* _tmp155_; gpointer _tmp156_; gchar* _tmp157_; const gchar* _tmp158_; gboolean _tmp159_; _tmp136_ = self->priv->current; _tmp137_ = _tmp136_->parent; _tmp138_ = _tmp137_->symbol; if (VALA_IS_INTERFACE (_tmp138_)) { ValaMethod* _tmp139_; _tmp139_ = m; vala_method_set_is_abstract (_tmp139_, TRUE); } else { ValaMethod* _tmp140_; _tmp140_ = m; vala_method_set_is_virtual (_tmp140_, TRUE); } _tmp141_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp141_, VALA_GIR_PARSER_ARGUMENT_TYPE_NO_WRAPPER)) { ValaSymbol* _tmp142_; ValaGirParserMetadata* _tmp143_; ValaSymbol* _tmp144_; ValaSourceReference* _tmp145_; ValaSourceReference* _tmp146_; _tmp142_ = s; _tmp143_ = self->priv->metadata; _tmp144_ = s; _tmp145_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp144_); _tmp146_ = _tmp145_; vala_code_node_set_attribute ((ValaCodeNode*) _tmp142_, "NoWrapper", vala_gir_parser_metadata_get_bool (_tmp143_, VALA_GIR_PARSER_ARGUMENT_TYPE_NO_WRAPPER, FALSE), _tmp146_); } else { gboolean _tmp147_ = FALSE; const gchar* _tmp148_; _tmp148_ = invoker; if (_tmp148_ == NULL) { ValaGirParserMetadata* _tmp149_; _tmp149_ = self->priv->metadata; _tmp147_ = !vala_gir_parser_metadata_has_argument (_tmp149_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME); } else { _tmp147_ = FALSE; } if (_tmp147_) { ValaSymbol* _tmp150_; ValaSymbol* _tmp151_; ValaSourceReference* _tmp152_; ValaSourceReference* _tmp153_; _tmp150_ = s; _tmp151_ = s; _tmp152_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp151_); _tmp153_ = _tmp152_; vala_code_node_set_attribute ((ValaCodeNode*) _tmp150_, "NoWrapper", TRUE, _tmp153_); } } _tmp154_ = self->priv->current; _tmp155_ = _tmp154_->girdata; _tmp156_ = vala_map_get (_tmp155_, "name"); _tmp157_ = (gchar*) _tmp156_; _tmp158_ = name; _tmp159_ = g_strcmp0 (_tmp157_, _tmp158_) != 0; _g_free0 (_tmp157_); if (_tmp159_) { ValaMethod* _tmp160_; ValaGirParserNode* _tmp161_; ValaMap* _tmp162_; gpointer _tmp163_; gchar* _tmp164_; _tmp160_ = m; _tmp161_ = self->priv->current; _tmp162_ = _tmp161_->girdata; _tmp163_ = vala_map_get (_tmp162_, "name"); _tmp164_ = (gchar*) _tmp163_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp160_, "CCode", "vfunc_name", _tmp164_, NULL); _g_free0 (_tmp164_); } } else { const gchar* _tmp165_; _tmp165_ = symbol_type; if (g_strcmp0 (_tmp165_, "function") == 0) { ValaMethod* _tmp166_; _tmp166_ = m; vala_method_set_binding (_tmp166_, VALA_MEMBER_BINDING_STATIC); } } _tmp167_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp167_, VALA_GIR_PARSER_ARGUMENT_TYPE_FLOATING)) { ValaMethod* _tmp168_; ValaGirParserMetadata* _tmp169_; ValaMethod* _tmp170_; ValaDataType* _tmp171_; ValaDataType* _tmp172_; _tmp168_ = m; _tmp169_ = self->priv->metadata; vala_method_set_returns_floating_reference (_tmp168_, vala_gir_parser_metadata_get_bool (_tmp169_, VALA_GIR_PARSER_ARGUMENT_TYPE_FLOATING, FALSE)); _tmp170_ = m; _tmp171_ = vala_callable_get_return_type ((ValaCallable*) _tmp170_); _tmp172_ = _tmp171_; vala_data_type_set_value_owned (_tmp172_, TRUE); } _tmp173_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp173_, VALA_GIR_PARSER_ARGUMENT_TYPE_NEW)) { ValaMethod* _tmp174_; ValaGirParserMetadata* _tmp175_; _tmp174_ = m; _tmp175_ = self->priv->metadata; vala_symbol_set_hides ((ValaSymbol*) _tmp174_, vala_gir_parser_metadata_get_bool (_tmp175_, VALA_GIR_PARSER_ARGUMENT_TYPE_NEW, FALSE)); } _vala_code_node_unref0 (m); } _tmp177_ = s; if (VALA_IS_METHOD (_tmp177_)) { ValaSymbol* _tmp178_; _tmp178_ = s; _tmp176_ = !VALA_IS_CREATION_METHOD (_tmp178_); } else { _tmp176_ = FALSE; } if (_tmp176_) { ValaMethod* method = NULL; ValaSymbol* _tmp179_; ValaMethod* _tmp180_; ValaGirParserMetadata* _tmp181_; ValaGirParserMetadata* _tmp189_; ValaGirParserMetadata* _tmp195_; _tmp179_ = s; _tmp180_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp179_, VALA_TYPE_METHOD, ValaMethod)); method = _tmp180_; _tmp181_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp181_, VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL)) { ValaMethod* _tmp182_; ValaGirParserMetadata* _tmp183_; ValaMethod* _tmp184_; _tmp182_ = method; _tmp183_ = self->priv->metadata; vala_method_set_is_virtual (_tmp182_, vala_gir_parser_metadata_get_bool (_tmp183_, VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL, FALSE)); _tmp184_ = method; vala_method_set_is_abstract (_tmp184_, FALSE); } else { ValaGirParserMetadata* _tmp185_; _tmp185_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp185_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT)) { ValaMethod* _tmp186_; ValaGirParserMetadata* _tmp187_; ValaMethod* _tmp188_; _tmp186_ = method; _tmp187_ = self->priv->metadata; vala_method_set_is_abstract (_tmp186_, vala_gir_parser_metadata_get_bool (_tmp187_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, FALSE)); _tmp188_ = method; vala_method_set_is_virtual (_tmp188_, FALSE); } } _tmp189_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp189_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME)) { ValaMethod* _tmp190_; ValaGirParserMetadata* _tmp191_; gchar* _tmp192_; gchar* _tmp193_; ValaMethod* _tmp194_; _tmp190_ = method; _tmp191_ = self->priv->metadata; _tmp192_ = vala_gir_parser_metadata_get_string (_tmp191_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME); _tmp193_ = _tmp192_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp190_, "CCode", "vfunc_name", _tmp193_, NULL); _g_free0 (_tmp193_); _tmp194_ = method; vala_method_set_is_virtual (_tmp194_, TRUE); } _tmp195_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp195_, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_VFUNC_NAME)) { ValaMethod* _tmp196_; ValaGirParserMetadata* _tmp197_; gchar* _tmp198_; gchar* _tmp199_; ValaMethod* _tmp200_; _tmp196_ = method; _tmp197_ = self->priv->metadata; _tmp198_ = vala_gir_parser_metadata_get_string (_tmp197_, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_VFUNC_NAME); _tmp199_ = _tmp198_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp196_, "CCode", "finish_vfunc_name", _tmp199_, NULL); _g_free0 (_tmp199_); _tmp200_ = method; vala_method_set_is_virtual (_tmp200_, TRUE); } _vala_code_node_unref0 (method); } _tmp201_ = self->priv->metadata; _tmp202_ = vala_gir_parser_metadata_get_expression (_tmp201_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS); _tmp203_ = _tmp202_; _tmp204_ = !VALA_IS_NULL_LITERAL (_tmp203_); _vala_code_node_unref0 (_tmp203_); if (_tmp204_) { ValaGirParserMetadata* _tmp205_; _tmp205_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp205_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS)) { gchar** error_types = NULL; ValaGirParserMetadata* _tmp206_; gchar* _tmp207_; gchar* _tmp208_; gchar** _tmp209_; gchar** _tmp210_; gchar** _tmp211_; gint _tmp211__length1; gint error_types_length1; gint _error_types_size_; gchar** _tmp212_; gint _tmp212__length1; _tmp206_ = self->priv->metadata; _tmp207_ = vala_gir_parser_metadata_get_string (_tmp206_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS); _tmp208_ = _tmp207_; _tmp210_ = _tmp209_ = g_strsplit (_tmp208_, ",", 0); _tmp211_ = _tmp210_; _tmp211__length1 = _vala_array_length (_tmp209_); _g_free0 (_tmp208_); error_types = _tmp211_; error_types_length1 = _tmp211__length1; _error_types_size_ = error_types_length1; _tmp212_ = error_types; _tmp212__length1 = error_types_length1; { gchar** error_type_name_collection = NULL; gint error_type_name_collection_length1 = 0; gint _error_type_name_collection_size_ = 0; gint error_type_name_it = 0; error_type_name_collection = _tmp212_; error_type_name_collection_length1 = _tmp212__length1; for (error_type_name_it = 0; error_type_name_it < error_type_name_collection_length1; error_type_name_it = error_type_name_it + 1) { gchar* _tmp213_; gchar* error_type_name = NULL; _tmp213_ = g_strdup (error_type_name_collection[error_type_name_it]); error_type_name = _tmp213_; { ValaDataType* error_type = NULL; const gchar* _tmp214_; ValaGirParserMetadata* _tmp215_; ValaSourceReference* _tmp216_; ValaSourceReference* _tmp217_; ValaDataType* _tmp218_; ValaDataType* _tmp219_; ValaSymbol* _tmp220_; _tmp214_ = error_type_name; _tmp215_ = self->priv->metadata; _tmp216_ = vala_gir_parser_metadata_get_source_reference (_tmp215_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS); _tmp217_ = _tmp216_; _tmp218_ = vala_gir_parser_parse_type_from_string (self, _tmp214_, TRUE, _tmp217_); _tmp219_ = _tmp218_; _vala_source_reference_unref0 (_tmp217_); error_type = _tmp219_; _tmp220_ = s; if (VALA_IS_METHOD (_tmp220_)) { ValaSymbol* _tmp221_; ValaDataType* _tmp222_; _tmp221_ = s; _tmp222_ = error_type; vala_method_add_error_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp221_, VALA_TYPE_METHOD, ValaMethod), _tmp222_); } else { ValaSymbol* _tmp223_; ValaDataType* _tmp224_; _tmp223_ = s; _tmp224_ = error_type; vala_delegate_add_error_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp223_, VALA_TYPE_DELEGATE, ValaDelegate), _tmp224_); } _vala_code_node_unref0 (error_type); _g_free0 (error_type_name); } } } error_types = (_vala_array_free (error_types, error_types_length1, (GDestroyNotify) g_free), NULL); } else { const gchar* _tmp225_; _tmp225_ = throws_string; if (g_strcmp0 (_tmp225_, "1") == 0) { ValaSymbol* _tmp226_; _tmp226_ = s; if (VALA_IS_METHOD (_tmp226_)) { ValaSymbol* _tmp227_; ValaErrorType* _tmp228_; ValaErrorType* _tmp229_; _tmp227_ = s; _tmp228_ = vala_error_type_new (NULL, NULL, NULL); _tmp229_ = _tmp228_; vala_method_add_error_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp227_, VALA_TYPE_METHOD, ValaMethod), (ValaDataType*) _tmp229_); _vala_code_node_unref0 (_tmp229_); } else { ValaSymbol* _tmp230_; ValaErrorType* _tmp231_; ValaErrorType* _tmp232_; _tmp230_ = s; _tmp231_ = vala_error_type_new (NULL, NULL, NULL); _tmp232_ = _tmp231_; vala_delegate_add_error_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp230_, VALA_TYPE_DELEGATE, ValaDelegate), (ValaDataType*) _tmp232_); _vala_code_node_unref0 (_tmp232_); } } } } _tmp233_ = s; if (VALA_IS_METHOD (_tmp233_)) { ValaMethod* m = NULL; ValaSymbol* _tmp234_; ValaMethod* _tmp235_; ValaMethod* _tmp236_; ValaGirParserMetadata* _tmp237_; ValaGirParserMetadata* _tmp238_; _tmp234_ = s; _tmp235_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp234_, VALA_TYPE_METHOD, ValaMethod)); m = _tmp235_; _tmp236_ = m; _tmp237_ = self->priv->metadata; vala_code_node_set_attribute ((ValaCodeNode*) _tmp236_, "PrintfFormat", vala_gir_parser_metadata_get_bool (_tmp237_, VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT, FALSE), NULL); _tmp238_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp238_, VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL)) { ValaMethod* _tmp239_; ValaGirParserMetadata* _tmp240_; gchar* _tmp241_; gchar* _tmp242_; _tmp239_ = m; _tmp240_ = self->priv->metadata; _tmp241_ = vala_gir_parser_metadata_get_string (_tmp240_, VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL); _tmp242_ = _tmp241_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp239_, "CCode", "sentinel", _tmp242_, NULL); _g_free0 (_tmp242_); } _vala_code_node_unref0 (m); } _tmp244_ = return_type; if (VALA_IS_ARRAY_TYPE (_tmp244_)) { ValaGirParserMetadata* _tmp245_; _tmp245_ = self->priv->metadata; _tmp243_ = vala_gir_parser_metadata_has_argument (_tmp245_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX); } else { _tmp243_ = FALSE; } if (_tmp243_) { ValaGirParserMetadata* _tmp246_; _tmp246_ = self->priv->metadata; return_array_length_idx = vala_gir_parser_metadata_get_integer (_tmp246_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX); } else { gboolean _tmp247_ = FALSE; if (return_no_array_length) { _tmp247_ = TRUE; } else { _tmp247_ = return_array_null_terminated; } if (_tmp247_) { ValaSymbol* _tmp248_; _tmp248_ = s; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp248_, "CCode", "array_length", !return_no_array_length, NULL); } if (return_array_null_terminated) { ValaSymbol* _tmp249_; _tmp249_ = s; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp249_, "CCode", "array_null_terminated", TRUE, NULL); } } _tmp250_ = self->priv->current; _tmp250_->return_array_length_idx = return_array_length_idx; _tmp251_ = ctype; if (_tmp251_ != NULL) { ValaSymbol* _tmp252_; const gchar* _tmp253_; _tmp252_ = s; _tmp253_ = ctype; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp252_, "CCode", "type", _tmp253_, NULL); } _tmp254_ = self->priv->current; _tmp255_ = s; _tmp256_ = _vala_code_node_ref0 (_tmp255_); _vala_code_node_unref0 (_tmp254_->symbol); _tmp254_->symbol = _tmp256_; _tmp257_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp257_, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_NAME)) { ValaSymbol* _tmp258_; ValaGirParserMetadata* _tmp259_; gchar* _tmp260_; gchar* _tmp261_; _tmp258_ = s; _tmp259_ = self->priv->metadata; _tmp260_ = vala_gir_parser_metadata_get_string (_tmp259_, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_NAME); _tmp261_ = _tmp260_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp258_, "CCode", "finish_name", _tmp261_, NULL); _g_free0 (_tmp261_); } _tmp262_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp262_, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_INSTANCE)) { ValaSymbol* _tmp263_; ValaGirParserMetadata* _tmp264_; _tmp263_ = s; _tmp264_ = self->priv->metadata; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp263_, "CCode", "finish_instance", vala_gir_parser_metadata_get_bool (_tmp264_, VALA_GIR_PARSER_ARGUMENT_TYPE_FINISH_INSTANCE, FALSE), NULL); } instance_idx = -2; if (g_strcmp0 (element_name, "function") == 0) { const gchar* _tmp266_; _tmp266_ = symbol_type; _tmp265_ = g_strcmp0 (_tmp266_, "method") == 0; } else { _tmp265_ = FALSE; } if (_tmp265_) { ValaGirParserMetadata* _tmp267_; _tmp267_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp267_, VALA_GIR_PARSER_ARGUMENT_TYPE_INSTANCE_IDX)) { ValaGirParserMetadata* _tmp268_; _tmp268_ = self->priv->metadata; instance_idx = vala_gir_parser_metadata_get_integer (_tmp268_, VALA_GIR_PARSER_ARGUMENT_TYPE_INSTANCE_IDX); if (instance_idx != 0) { ValaSymbol* _tmp269_; _tmp269_ = s; vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp269_, "CCode", "instance_pos", instance_idx + 0.5, NULL); } } else { ValaSourceReference* _tmp270_; ValaSourceReference* _tmp271_; _tmp270_ = vala_gir_parser_get_current_src (self); _tmp271_ = _tmp270_; vala_report_error (_tmp271_, "instance_idx required when converting function to method"); _vala_source_reference_unref0 (_tmp271_); } } _tmp272_ = g_direct_equal; _tmp273_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_PARAMETER_INFO, (GBoxedCopyFunc) vala_gir_parser_parameter_info_ref, (GDestroyNotify) vala_gir_parser_parameter_info_unref, _tmp272_); parameters = _tmp273_; _tmp274_ = self->priv->current; _tmp275_ = g_direct_equal; _tmp276_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp275_); _vala_iterable_unref0 (_tmp274_->array_length_parameters); _tmp274_->array_length_parameters = _tmp276_; _tmp277_ = self->priv->current; _tmp278_ = g_direct_equal; _tmp279_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp278_); _vala_iterable_unref0 (_tmp277_->closure_parameters); _tmp277_->closure_parameters = _tmp279_; _tmp280_ = self->priv->current; _tmp281_ = g_direct_equal; _tmp282_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp281_); _vala_iterable_unref0 (_tmp280_->destroy_parameters); _tmp280_->destroy_parameters = _tmp282_; _tmp284_ = self->priv->current_token; if (_tmp284_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) { ValaMarkupReader* _tmp285_; const gchar* _tmp286_; const gchar* _tmp287_; _tmp285_ = self->priv->reader; _tmp286_ = vala_markup_reader_get_name (_tmp285_); _tmp287_ = _tmp286_; _tmp283_ = g_strcmp0 (_tmp287_, "parameters") == 0; } else { _tmp283_ = FALSE; } if (_tmp283_) { gint current_parameter_idx = 0; vala_gir_parser_start_element (self, "parameters"); vala_gir_parser_next (self); current_parameter_idx = -1; while (TRUE) { ValaMarkupTokenType _tmp288_; gint _tmp289_; gboolean _tmp290_ = FALSE; ValaMarkupReader* _tmp291_; const gchar* _tmp292_; const gchar* _tmp293_; gboolean is_instance_parameter = FALSE; gboolean _tmp297_ = FALSE; gint array_length_idx = 0; gint closure_idx = 0; gint destroy_idx = 0; gchar* scope = NULL; gchar* default_param_name = NULL; ValaComment* param_comment = NULL; ValaArrayList* _tmp298_; gint _tmp299_; gint _tmp300_; gchar* _tmp301_; ValaParameter* param = NULL; const gchar* _tmp302_; gint _tmp303_ = 0; gint _tmp304_ = 0; gint _tmp305_ = 0; gchar* _tmp306_ = NULL; ValaComment* _tmp307_ = NULL; ValaParameter* _tmp308_; ValaComment* _tmp337_; ValaGirParserParameterInfo* info = NULL; ValaParameter* _tmp354_; const gchar* _tmp355_; ValaGirParserParameterInfo* _tmp356_; ValaArrayList* _tmp357_; ValaGirParserParameterInfo* _tmp358_; _tmp288_ = self->priv->current_token; if (!(_tmp288_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } _tmp289_ = current_parameter_idx; current_parameter_idx = _tmp289_ + 1; _tmp291_ = self->priv->reader; _tmp292_ = vala_markup_reader_get_name (_tmp291_); _tmp293_ = _tmp292_; if (g_strcmp0 (_tmp293_, "instance-parameter") == 0) { gboolean _tmp294_ = FALSE; const gchar* _tmp295_; _tmp295_ = symbol_type; if (g_strcmp0 (_tmp295_, "function") == 0) { _tmp294_ = TRUE; } else { const gchar* _tmp296_; _tmp296_ = symbol_type; _tmp294_ = g_strcmp0 (_tmp296_, "constructor") == 0; } _tmp290_ = !_tmp294_; } else { _tmp290_ = FALSE; } is_instance_parameter = _tmp290_; if (instance_idx > -2) { _tmp297_ = instance_idx == current_parameter_idx; } else { _tmp297_ = FALSE; } if (_tmp297_) { vala_gir_parser_skip_element (self); continue; } if (!vala_gir_parser_push_metadata (self)) { vala_gir_parser_skip_element (self); continue; } default_param_name = NULL; _tmp298_ = parameters; _tmp299_ = vala_collection_get_size ((ValaCollection*) _tmp298_); _tmp300_ = _tmp299_; _tmp301_ = g_strdup_printf ("arg%d", _tmp300_); _g_free0 (default_param_name); default_param_name = _tmp301_; _tmp302_ = default_param_name; _tmp308_ = vala_gir_parser_parse_parameter (self, &_tmp303_, &_tmp304_, &_tmp305_, &_tmp306_, &_tmp307_, _tmp302_); array_length_idx = _tmp303_; closure_idx = _tmp304_; destroy_idx = _tmp305_; _g_free0 (scope); scope = _tmp306_; _vala_comment_unref0 (param_comment); param_comment = _tmp307_; param = _tmp308_; if (is_instance_parameter) { ValaMethod* m = NULL; ValaSymbol* _tmp309_; ValaMethod* _tmp310_; _tmp309_ = s; m = VALA_IS_METHOD (_tmp309_) ? ((ValaMethod*) _tmp309_) : NULL; _tmp310_ = m; if (_tmp310_ != NULL) { ValaParameter* _tmp311_; ValaParameterDirection _tmp312_; ValaParameterDirection _tmp313_; _tmp311_ = param; _tmp312_ = vala_parameter_get_direction (_tmp311_); _tmp313_ = _tmp312_; if (_tmp313_ == VALA_PARAMETER_DIRECTION_IN) { ValaParameter* _tmp314_; ValaDataType* _tmp315_; ValaDataType* _tmp316_; gboolean _tmp317_; gboolean _tmp318_; _tmp314_ = param; _tmp315_ = vala_variable_get_variable_type ((ValaVariable*) _tmp314_); _tmp316_ = _tmp315_; _tmp317_ = vala_data_type_get_value_owned (_tmp316_); _tmp318_ = _tmp317_; if (_tmp318_) { ValaMethod* _tmp319_; _tmp319_ = m; vala_code_node_set_attribute ((ValaCodeNode*) _tmp319_, "DestroysInstance", TRUE, NULL); } vala_gir_parser_pop_metadata (self); _vala_code_node_unref0 (param); _vala_comment_unref0 (param_comment); _g_free0 (default_param_name); _g_free0 (scope); continue; } else { ValaMethod* _tmp320_; _tmp320_ = m; vala_method_set_binding (_tmp320_, VALA_MEMBER_BINDING_STATIC); } } } if (array_length_idx != -1) { gboolean _tmp321_ = FALSE; ValaGirParserNode* _tmp323_; ValaArrayList* _tmp324_; if (instance_idx > -2) { _tmp321_ = instance_idx < array_length_idx; } else { _tmp321_ = FALSE; } if (_tmp321_) { gint _tmp322_; _tmp322_ = array_length_idx; array_length_idx = _tmp322_ - 1; } _tmp323_ = self->priv->current; _tmp324_ = _tmp323_->array_length_parameters; vala_collection_add ((ValaCollection*) _tmp324_, (gpointer) ((gintptr) array_length_idx)); } if (closure_idx != -1) { gboolean _tmp325_ = FALSE; ValaGirParserNode* _tmp327_; ValaArrayList* _tmp328_; if (instance_idx > -2) { _tmp325_ = instance_idx < closure_idx; } else { _tmp325_ = FALSE; } if (_tmp325_) { gint _tmp326_; _tmp326_ = closure_idx; closure_idx = _tmp326_ - 1; } _tmp327_ = self->priv->current; _tmp328_ = _tmp327_->closure_parameters; if (vala_list_index_of ((ValaList*) _tmp328_, (gpointer) ((gintptr) current_parameter_idx)) < 0) { ValaGirParserNode* _tmp329_; ValaArrayList* _tmp330_; _tmp329_ = self->priv->current; _tmp330_ = _tmp329_->closure_parameters; vala_collection_add ((ValaCollection*) _tmp330_, (gpointer) ((gintptr) closure_idx)); } } if (destroy_idx != -1) { gboolean _tmp331_ = FALSE; ValaGirParserNode* _tmp333_; ValaArrayList* _tmp334_; if (instance_idx > -2) { _tmp331_ = instance_idx < destroy_idx; } else { _tmp331_ = FALSE; } if (_tmp331_) { gint _tmp332_; _tmp332_ = destroy_idx; destroy_idx = _tmp332_ - 1; } _tmp333_ = self->priv->current; _tmp334_ = _tmp333_->destroy_parameters; if (vala_list_index_of ((ValaList*) _tmp334_, (gpointer) ((gintptr) current_parameter_idx)) < 0) { ValaGirParserNode* _tmp335_; ValaArrayList* _tmp336_; _tmp335_ = self->priv->current; _tmp336_ = _tmp335_->destroy_parameters; vala_collection_add ((ValaCollection*) _tmp336_, (gpointer) ((gintptr) destroy_idx)); } } _tmp337_ = param_comment; if (_tmp337_ != NULL) { ValaGirComment* _tmp338_; const gchar* _tmp345_ = NULL; ValaParameter* _tmp346_; gboolean _tmp347_; gboolean _tmp348_; ValaGirComment* _tmp352_; ValaComment* _tmp353_; _tmp338_ = comment; if (_tmp338_ == NULL) { ValaSymbol* _tmp339_; ValaSourceReference* _tmp340_; ValaSourceReference* _tmp341_; ValaGirComment* _tmp342_; ValaSymbol* _tmp343_; ValaGirComment* _tmp344_; _tmp339_ = s; _tmp340_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp339_); _tmp341_ = _tmp340_; _tmp342_ = vala_gir_comment_new (NULL, _tmp341_); _vala_comment_unref0 (comment); comment = _tmp342_; _tmp343_ = s; _tmp344_ = comment; vala_symbol_set_comment (_tmp343_, (ValaComment*) _tmp344_); } _tmp346_ = param; _tmp347_ = vala_parameter_get_ellipsis (_tmp346_); _tmp348_ = _tmp347_; if (_tmp348_) { _tmp345_ = "..."; } else { ValaParameter* _tmp349_; const gchar* _tmp350_; const gchar* _tmp351_; _tmp349_ = param; _tmp350_ = vala_symbol_get_name ((ValaSymbol*) _tmp349_); _tmp351_ = _tmp350_; _tmp345_ = _tmp351_; } _tmp352_ = comment; _tmp353_ = param_comment; vala_gir_comment_add_content_for_parameter (_tmp352_, _tmp345_, _tmp353_); } _tmp354_ = param; _tmp355_ = scope; _tmp356_ = vala_gir_parser_parameter_info_new (_tmp354_, array_length_idx, closure_idx, destroy_idx, g_strcmp0 (_tmp355_, "async") == 0); info = _tmp356_; _tmp357_ = parameters; _tmp358_ = info; vala_collection_add ((ValaCollection*) _tmp357_, _tmp358_); vala_gir_parser_pop_metadata (self); _vala_gir_parser_parameter_info_unref0 (info); _vala_code_node_unref0 (param); _vala_comment_unref0 (param_comment); _g_free0 (default_param_name); _g_free0 (scope); } vala_gir_parser_end_element (self, "parameters"); } _tmp359_ = self->priv->current; _tmp360_ = parameters; _tmp361_ = _vala_iterable_ref0 ((ValaList*) _tmp360_); _vala_iterable_unref0 (_tmp359_->parameters); _tmp359_->parameters = _tmp361_; vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, element_name); _vala_iterable_unref0 (parameters); _vala_code_node_unref0 (array_type); _vala_code_node_unref0 (s); _g_free0 (return_ctype); _vala_code_node_unref0 (return_type); _vala_comment_unref0 (comment); _g_free0 (invoker); _g_free0 (throws_string); _g_free0 (name); _g_free0 (ctype); _g_free0 (symbol_type); } static void vala_gir_parser_parse_method (ValaGirParser* self, const gchar* element_name) { g_return_if_fail (self != NULL); g_return_if_fail (element_name != NULL); vala_gir_parser_parse_function (self, element_name); } static void vala_gir_parser_parse_signal (ValaGirParser* self) { g_return_if_fail (self != NULL); vala_gir_parser_parse_function (self, "glib:signal"); } static void vala_gir_parser_parse_boxed (ValaGirParser* self, const gchar* element_name) { gchar* name = NULL; ValaMarkupReader* _tmp0_; gchar* _tmp1_; const gchar* _tmp2_; const gchar* _tmp5_; gchar* _tmp6_; gchar* _tmp7_; ValaClass* cl = NULL; gboolean require_copy_free = FALSE; ValaGirParserNode* _tmp8_; ValaClass* _tmp24_; ValaClass* _tmp25_; ValaClass* _tmp26_; ValaGirParserMetadata* _tmp27_; ValaClass* _tmp37_; ValaGirComment* _tmp38_; ValaGirComment* _tmp39_; ValaGirParserNode* ref_method = NULL; ValaGirParserNode* unref_method = NULL; gboolean _tmp84_ = FALSE; gboolean _tmp85_ = FALSE; gboolean _tmp86_ = FALSE; ValaClass* _tmp87_; g_return_if_fail (self != NULL); g_return_if_fail (element_name != NULL); vala_gir_parser_start_element (self, element_name); _tmp0_ = self->priv->reader; _tmp1_ = vala_markup_reader_get_attribute (_tmp0_, "name"); name = _tmp1_; _tmp2_ = name; if (_tmp2_ == NULL) { ValaMarkupReader* _tmp3_; gchar* _tmp4_; _tmp3_ = self->priv->reader; _tmp4_ = vala_markup_reader_get_attribute (_tmp3_, "glib:name"); _g_free0 (name); name = _tmp4_; } _tmp5_ = name; _tmp6_ = vala_gir_parser_element_get_name (self, _tmp5_); _tmp7_ = _tmp6_; vala_gir_parser_push_node (self, _tmp7_, TRUE); _g_free0 (_tmp7_); require_copy_free = FALSE; _tmp8_ = self->priv->current; if (_tmp8_->new_symbol) { ValaGirParserNode* _tmp9_; const gchar* _tmp10_; ValaGirParserNode* _tmp11_; ValaSourceReference* _tmp12_; ValaClass* _tmp13_; ValaGirParserMetadata* _tmp14_; ValaGirParserNode* _tmp18_; ValaClass* _tmp19_; ValaSymbol* _tmp20_; _tmp9_ = self->priv->current; _tmp10_ = _tmp9_->name; _tmp11_ = self->priv->current; _tmp12_ = _tmp11_->source_reference; _tmp13_ = vala_class_new (_tmp10_, _tmp12_, NULL); _vala_code_node_unref0 (cl); cl = _tmp13_; _tmp14_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp14_, VALA_GIR_PARSER_ARGUMENT_TYPE_COMPACT)) { ValaClass* _tmp15_; ValaGirParserMetadata* _tmp16_; _tmp15_ = cl; _tmp16_ = self->priv->metadata; vala_class_set_is_compact (_tmp15_, vala_gir_parser_metadata_get_bool (_tmp16_, VALA_GIR_PARSER_ARGUMENT_TYPE_COMPACT, FALSE)); } else { ValaClass* _tmp17_; _tmp17_ = cl; vala_class_set_is_compact (_tmp17_, TRUE); } _tmp18_ = self->priv->current; _tmp19_ = cl; _tmp20_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp19_); _vala_code_node_unref0 (_tmp18_->symbol); _tmp18_->symbol = _tmp20_; } else { ValaGirParserNode* _tmp21_; ValaSymbol* _tmp22_; ValaClass* _tmp23_; _tmp21_ = self->priv->current; _tmp22_ = _tmp21_->symbol; _tmp23_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, VALA_TYPE_CLASS, ValaClass)); _vala_code_node_unref0 (cl); cl = _tmp23_; } _tmp24_ = cl; vala_gir_parser_set_type_id_ccode (self, (ValaSymbol*) _tmp24_); _tmp25_ = cl; require_copy_free = vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp25_, "CCode", "type_id"); _tmp26_ = cl; vala_symbol_set_access ((ValaSymbol*) _tmp26_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp27_ = self->priv->metadata; if (vala_gir_parser_metadata_has_argument (_tmp27_, VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE)) { ValaClass* _tmp28_; ValaGirParserMetadata* _tmp29_; gchar* _tmp30_; gchar* _tmp31_; ValaGirParserMetadata* _tmp32_; ValaSourceReference* _tmp33_; ValaSourceReference* _tmp34_; ValaDataType* _tmp35_; ValaDataType* _tmp36_; _tmp28_ = cl; _tmp29_ = self->priv->metadata; _tmp30_ = vala_gir_parser_metadata_get_string (_tmp29_, VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE); _tmp31_ = _tmp30_; _tmp32_ = self->priv->metadata; _tmp33_ = vala_gir_parser_metadata_get_source_reference (_tmp32_, VALA_GIR_PARSER_ARGUMENT_TYPE_BASE_TYPE); _tmp34_ = _tmp33_; _tmp35_ = vala_gir_parser_parse_type_from_string (self, _tmp31_, TRUE, _tmp34_); _tmp36_ = _tmp35_; vala_class_add_base_type (_tmp28_, _tmp36_); _vala_code_node_unref0 (_tmp36_); _vala_source_reference_unref0 (_tmp34_); _g_free0 (_tmp31_); } vala_gir_parser_next (self); _tmp37_ = cl; _tmp38_ = vala_gir_parser_parse_symbol_doc (self); _tmp39_ = _tmp38_; vala_symbol_set_comment ((ValaSymbol*) _tmp37_, (ValaComment*) _tmp39_); _vala_comment_unref0 (_tmp39_); ref_method = NULL; unref_method = NULL; while (TRUE) { ValaMarkupTokenType _tmp40_; ValaMarkupReader* _tmp41_; const gchar* _tmp42_; const gchar* _tmp43_; _tmp40_ = self->priv->current_token; if (!(_tmp40_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { vala_gir_parser_skip_element (self); continue; } _tmp41_ = self->priv->reader; _tmp42_ = vala_markup_reader_get_name (_tmp41_); _tmp43_ = _tmp42_; if (g_strcmp0 (_tmp43_, "field") == 0) { vala_gir_parser_parse_field (self); } else { ValaMarkupReader* _tmp44_; const gchar* _tmp45_; const gchar* _tmp46_; _tmp44_ = self->priv->reader; _tmp45_ = vala_markup_reader_get_name (_tmp44_); _tmp46_ = _tmp45_; if (g_strcmp0 (_tmp46_, "constructor") == 0) { vala_gir_parser_parse_constructor (self); } else { ValaMarkupReader* _tmp47_; const gchar* _tmp48_; const gchar* _tmp49_; _tmp47_ = self->priv->reader; _tmp48_ = vala_markup_reader_get_name (_tmp47_); _tmp49_ = _tmp48_; if (g_strcmp0 (_tmp49_, "method") == 0) { gchar* cname = NULL; ValaGirParserNode* _tmp50_; gchar* _tmp51_; gboolean _tmp52_ = FALSE; const gchar* _tmp53_; vala_gir_parser_parse_method (self, "method"); _tmp50_ = self->priv->old_current; _tmp51_ = vala_gir_parser_node_get_cname (_tmp50_); cname = _tmp51_; _tmp53_ = cname; if (g_str_has_suffix (_tmp53_, "_ref")) { gboolean _tmp54_ = FALSE; ValaGirParserNode* _tmp55_; _tmp55_ = ref_method; if (_tmp55_ == NULL) { _tmp54_ = TRUE; } else { ValaGirParserNode* _tmp56_; const gchar* _tmp57_; _tmp56_ = self->priv->old_current; _tmp57_ = _tmp56_->name; _tmp54_ = g_strcmp0 (_tmp57_, "ref") == 0; } _tmp52_ = _tmp54_; } else { _tmp52_ = FALSE; } if (_tmp52_) { ValaGirParserNode* _tmp58_; ValaGirParserNode* _tmp59_; _tmp58_ = self->priv->old_current; _tmp59_ = _vala_gir_parser_node_ref0 (_tmp58_); _vala_gir_parser_node_unref0 (ref_method); ref_method = _tmp59_; } else { gboolean _tmp60_ = FALSE; const gchar* _tmp61_; _tmp61_ = cname; if (g_str_has_suffix (_tmp61_, "_unref")) { gboolean _tmp62_ = FALSE; ValaGirParserNode* _tmp63_; _tmp63_ = unref_method; if (_tmp63_ == NULL) { _tmp62_ = TRUE; } else { ValaGirParserNode* _tmp64_; const gchar* _tmp65_; _tmp64_ = self->priv->old_current; _tmp65_ = _tmp64_->name; _tmp62_ = g_strcmp0 (_tmp65_, "unref") == 0; } _tmp60_ = _tmp62_; } else { _tmp60_ = FALSE; } if (_tmp60_) { ValaGirParserNode* _tmp66_; ValaGirParserNode* _tmp67_; _tmp66_ = self->priv->old_current; _tmp67_ = _vala_gir_parser_node_ref0 (_tmp66_); _vala_gir_parser_node_unref0 (unref_method); unref_method = _tmp67_; } } _g_free0 (cname); } else { ValaMarkupReader* _tmp68_; const gchar* _tmp69_; const gchar* _tmp70_; _tmp68_ = self->priv->reader; _tmp69_ = vala_markup_reader_get_name (_tmp68_); _tmp70_ = _tmp69_; if (g_strcmp0 (_tmp70_, "function") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp71_; const gchar* _tmp72_; const gchar* _tmp73_; _tmp71_ = self->priv->reader; _tmp72_ = vala_markup_reader_get_name (_tmp71_); _tmp73_ = _tmp72_; if (g_strcmp0 (_tmp73_, "function-macro") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp74_; const gchar* _tmp75_; const gchar* _tmp76_; _tmp74_ = self->priv->reader; _tmp75_ = vala_markup_reader_get_name (_tmp74_); _tmp76_ = _tmp75_; if (g_strcmp0 (_tmp76_, "union") == 0) { vala_gir_parser_parse_union (self); } else { ValaSourceReference* _tmp77_; ValaSourceReference* _tmp78_; ValaMarkupReader* _tmp79_; const gchar* _tmp80_; const gchar* _tmp81_; gchar* _tmp82_; gchar* _tmp83_; _tmp77_ = vala_gir_parser_get_current_src (self); _tmp78_ = _tmp77_; _tmp79_ = self->priv->reader; _tmp80_ = vala_markup_reader_get_name (_tmp79_); _tmp81_ = _tmp80_; _tmp82_ = g_strdup_printf ("unknown child element `%s' in `class'", _tmp81_); _tmp83_ = _tmp82_; vala_report_error (_tmp78_, _tmp83_); _g_free0 (_tmp83_); _vala_source_reference_unref0 (_tmp78_); vala_gir_parser_skip_element (self); } } } } } } vala_gir_parser_pop_metadata (self); } _tmp87_ = cl; if (vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp87_, "CCode", "ref_function")) { _tmp86_ = TRUE; } else { ValaClass* _tmp88_; _tmp88_ = cl; _tmp86_ = vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp88_, "CCode", "unref_function"); } if (_tmp86_) { _tmp85_ = TRUE; } else { ValaClass* _tmp89_; _tmp89_ = cl; _tmp85_ = vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp89_, "CCode", "copy_function"); } if (_tmp85_) { _tmp84_ = TRUE; } else { ValaClass* _tmp90_; _tmp90_ = cl; _tmp84_ = vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp90_, "CCode", "free_function"); } if (_tmp84_) { } else { gboolean _tmp91_ = FALSE; ValaGirParserNode* _tmp92_; _tmp92_ = ref_method; if (_tmp92_ != NULL) { ValaGirParserNode* _tmp93_; _tmp93_ = unref_method; _tmp91_ = _tmp93_ != NULL; } else { _tmp91_ = FALSE; } if (_tmp91_) { ValaClass* _tmp94_; ValaGirParserNode* _tmp95_; gchar* _tmp96_; gchar* _tmp97_; ValaClass* _tmp98_; ValaGirParserNode* _tmp99_; gchar* _tmp100_; gchar* _tmp101_; _tmp94_ = cl; _tmp95_ = ref_method; _tmp96_ = vala_gir_parser_node_get_cname (_tmp95_); _tmp97_ = _tmp96_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp94_, "CCode", "ref_function", _tmp97_, NULL); _g_free0 (_tmp97_); _tmp98_ = cl; _tmp99_ = unref_method; _tmp100_ = vala_gir_parser_node_get_cname (_tmp99_); _tmp101_ = _tmp100_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp98_, "CCode", "unref_function", _tmp101_, NULL); _g_free0 (_tmp101_); } else { if (require_copy_free) { ValaClass* _tmp102_; ValaClass* _tmp103_; _tmp102_ = cl; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp102_, "CCode", "copy_function", "g_boxed_copy", NULL); _tmp103_ = cl; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp103_, "CCode", "free_function", "g_boxed_free", NULL); } } } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, element_name); _vala_gir_parser_node_unref0 (unref_method); _vala_gir_parser_node_unref0 (ref_method); _vala_code_node_unref0 (cl); _g_free0 (name); } static void vala_gir_parser_parse_union (ValaGirParser* self) { gchar* element_name = NULL; gchar* _tmp0_; const gchar* _tmp1_; const gchar* _tmp15_; ValaStruct* st = NULL; ValaGirParserNode* _tmp16_; ValaStruct* _tmp29_; ValaStruct* _tmp30_; ValaGirComment* _tmp31_; ValaGirComment* _tmp32_; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "union"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); element_name = _tmp0_; _tmp1_ = element_name; if (_tmp1_ == NULL) { ValaGirComment* _tmp2_; ValaGirComment* _tmp3_; vala_gir_parser_next (self); _tmp2_ = vala_gir_parser_parse_symbol_doc (self); _tmp3_ = _tmp2_; _vala_comment_unref0 (_tmp3_); while (TRUE) { ValaMarkupTokenType _tmp4_; ValaMarkupReader* _tmp5_; const gchar* _tmp6_; const gchar* _tmp7_; _tmp4_ = self->priv->current_token; if (!(_tmp4_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { vala_gir_parser_skip_element (self); continue; } _tmp5_ = self->priv->reader; _tmp6_ = vala_markup_reader_get_name (_tmp5_); _tmp7_ = _tmp6_; if (g_strcmp0 (_tmp7_, "field") == 0) { vala_gir_parser_parse_field (self); } else { ValaSourceReference* _tmp8_; ValaSourceReference* _tmp9_; ValaMarkupReader* _tmp10_; const gchar* _tmp11_; const gchar* _tmp12_; gchar* _tmp13_; gchar* _tmp14_; _tmp8_ = vala_gir_parser_get_current_src (self); _tmp9_ = _tmp8_; _tmp10_ = self->priv->reader; _tmp11_ = vala_markup_reader_get_name (_tmp10_); _tmp12_ = _tmp11_; _tmp13_ = g_strdup_printf ("unknown child element `%s' in `transparent union'", _tmp12_); _tmp14_ = _tmp13_; vala_report_error (_tmp9_, _tmp14_); _g_free0 (_tmp14_); _vala_source_reference_unref0 (_tmp9_); vala_gir_parser_skip_element (self); } vala_gir_parser_pop_metadata (self); } vala_gir_parser_end_element (self, "union"); _g_free0 (element_name); return; } _tmp15_ = element_name; vala_gir_parser_push_node (self, _tmp15_, TRUE); _tmp16_ = self->priv->current; if (_tmp16_->new_symbol) { ValaMarkupReader* _tmp17_; gchar* _tmp18_; gchar* _tmp19_; ValaGirParserNode* _tmp20_; ValaSourceReference* _tmp21_; ValaStruct* _tmp22_; ValaGirParserNode* _tmp23_; ValaStruct* _tmp24_; ValaSymbol* _tmp25_; _tmp17_ = self->priv->reader; _tmp18_ = vala_markup_reader_get_attribute (_tmp17_, "name"); _tmp19_ = _tmp18_; _tmp20_ = self->priv->current; _tmp21_ = _tmp20_->source_reference; _tmp22_ = vala_struct_new (_tmp19_, _tmp21_, NULL); _vala_code_node_unref0 (st); st = _tmp22_; _g_free0 (_tmp19_); _tmp23_ = self->priv->current; _tmp24_ = st; _tmp25_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp24_); _vala_code_node_unref0 (_tmp23_->symbol); _tmp23_->symbol = _tmp25_; } else { ValaGirParserNode* _tmp26_; ValaSymbol* _tmp27_; ValaStruct* _tmp28_; _tmp26_ = self->priv->current; _tmp27_ = _tmp26_->symbol; _tmp28_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, VALA_TYPE_STRUCT, ValaStruct)); _vala_code_node_unref0 (st); st = _tmp28_; } _tmp29_ = st; vala_symbol_set_access ((ValaSymbol*) _tmp29_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); vala_gir_parser_next (self); _tmp30_ = st; _tmp31_ = vala_gir_parser_parse_symbol_doc (self); _tmp32_ = _tmp31_; vala_symbol_set_comment ((ValaSymbol*) _tmp30_, (ValaComment*) _tmp32_); _vala_comment_unref0 (_tmp32_); while (TRUE) { ValaMarkupTokenType _tmp33_; ValaMarkupReader* _tmp34_; const gchar* _tmp35_; const gchar* _tmp36_; _tmp33_ = self->priv->current_token; if (!(_tmp33_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) { break; } if (!vala_gir_parser_push_metadata (self)) { vala_gir_parser_skip_element (self); continue; } _tmp34_ = self->priv->reader; _tmp35_ = vala_markup_reader_get_name (_tmp34_); _tmp36_ = _tmp35_; if (g_strcmp0 (_tmp36_, "field") == 0) { vala_gir_parser_parse_field (self); } else { ValaMarkupReader* _tmp37_; const gchar* _tmp38_; const gchar* _tmp39_; _tmp37_ = self->priv->reader; _tmp38_ = vala_markup_reader_get_name (_tmp37_); _tmp39_ = _tmp38_; if (g_strcmp0 (_tmp39_, "constructor") == 0) { vala_gir_parser_parse_constructor (self); } else { ValaMarkupReader* _tmp40_; const gchar* _tmp41_; const gchar* _tmp42_; _tmp40_ = self->priv->reader; _tmp41_ = vala_markup_reader_get_name (_tmp40_); _tmp42_ = _tmp41_; if (g_strcmp0 (_tmp42_, "method") == 0) { vala_gir_parser_parse_method (self, "method"); } else { ValaMarkupReader* _tmp43_; const gchar* _tmp44_; const gchar* _tmp45_; _tmp43_ = self->priv->reader; _tmp44_ = vala_markup_reader_get_name (_tmp43_); _tmp45_ = _tmp44_; if (g_strcmp0 (_tmp45_, "function") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp46_; const gchar* _tmp47_; const gchar* _tmp48_; _tmp46_ = self->priv->reader; _tmp47_ = vala_markup_reader_get_name (_tmp46_); _tmp48_ = _tmp47_; if (g_strcmp0 (_tmp48_, "function-macro") == 0) { vala_gir_parser_skip_element (self); } else { ValaMarkupReader* _tmp49_; const gchar* _tmp50_; const gchar* _tmp51_; _tmp49_ = self->priv->reader; _tmp50_ = vala_markup_reader_get_name (_tmp49_); _tmp51_ = _tmp50_; if (g_strcmp0 (_tmp51_, "record") == 0) { vala_gir_parser_parse_record (self); } else { ValaSourceReference* _tmp52_; ValaSourceReference* _tmp53_; ValaMarkupReader* _tmp54_; const gchar* _tmp55_; const gchar* _tmp56_; gchar* _tmp57_; gchar* _tmp58_; _tmp52_ = vala_gir_parser_get_current_src (self); _tmp53_ = _tmp52_; _tmp54_ = self->priv->reader; _tmp55_ = vala_markup_reader_get_name (_tmp54_); _tmp56_ = _tmp55_; _tmp57_ = g_strdup_printf ("unknown child element `%s' in `union'", _tmp56_); _tmp58_ = _tmp57_; vala_report_error (_tmp53_, _tmp58_); _g_free0 (_tmp58_); _vala_source_reference_unref0 (_tmp53_); vala_gir_parser_skip_element (self); } } } } } } vala_gir_parser_pop_metadata (self); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "union"); _vala_code_node_unref0 (st); _g_free0 (element_name); } static void vala_gir_parser_parse_constant (ValaGirParser* self) { gchar* _tmp0_; gchar* _tmp1_; ValaGirComment* comment = NULL; ValaGirComment* _tmp2_; gboolean no_array_length = FALSE; gboolean array_null_terminated = FALSE; gint array_length_idx = 0; ValaDataType* type = NULL; gint _tmp3_ = 0; gboolean _tmp4_ = FALSE; gboolean _tmp5_ = FALSE; ValaDataType* _tmp6_; ValaDataType* _tmp7_; ValaDataType* _tmp8_; ValaConstant* c = NULL; ValaGirParserNode* _tmp9_; const gchar* _tmp10_; ValaDataType* _tmp11_; ValaGirParserNode* _tmp12_; ValaSourceReference* _tmp13_; ValaConstant* _tmp14_; ValaGirParserNode* _tmp15_; ValaConstant* _tmp16_; ValaSymbol* _tmp17_; ValaConstant* _tmp18_; ValaConstant* _tmp19_; ValaGirComment* _tmp20_; gboolean _tmp21_ = FALSE; g_return_if_fail (self != NULL); vala_gir_parser_start_element (self, "constant"); _tmp0_ = vala_gir_parser_element_get_name (self, NULL); _tmp1_ = _tmp0_; vala_gir_parser_push_node (self, _tmp1_, FALSE); _g_free0 (_tmp1_); vala_gir_parser_next (self); _tmp2_ = vala_gir_parser_parse_symbol_doc (self); comment = _tmp2_; _tmp6_ = vala_gir_parser_parse_type (self, NULL, &_tmp3_, TRUE, &_tmp4_, &_tmp5_); array_length_idx = _tmp3_; no_array_length = _tmp4_; array_null_terminated = _tmp5_; type = _tmp6_; _tmp7_ = type; _tmp8_ = vala_gir_parser_element_get_type (self, _tmp7_, TRUE, &no_array_length, &array_null_terminated, NULL); _vala_code_node_unref0 (type); type = _tmp8_; _tmp9_ = self->priv->current; _tmp10_ = _tmp9_->name; _tmp11_ = type; _tmp12_ = self->priv->current; _tmp13_ = _tmp12_->source_reference; _tmp14_ = vala_constant_new (_tmp10_, _tmp11_, NULL, _tmp13_, NULL); c = _tmp14_; _tmp15_ = self->priv->current; _tmp16_ = c; _tmp17_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp16_); _vala_code_node_unref0 (_tmp15_->symbol); _tmp15_->symbol = _tmp17_; _tmp18_ = c; vala_symbol_set_access ((ValaSymbol*) _tmp18_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp19_ = c; _tmp20_ = comment; vala_symbol_set_comment ((ValaSymbol*) _tmp19_, (ValaComment*) _tmp20_); if (no_array_length) { _tmp21_ = TRUE; } else { _tmp21_ = array_null_terminated; } if (_tmp21_) { ValaConstant* _tmp22_; _tmp22_ = c; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp22_, "CCode", "array_length", !no_array_length, NULL); } if (array_null_terminated) { ValaConstant* _tmp23_; _tmp23_ = c; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp23_, "CCode", "array_null_terminated", TRUE, NULL); } vala_gir_parser_pop_node (self); vala_gir_parser_end_element (self, "constant"); _vala_code_node_unref0 (c); _vala_code_node_unref0 (type); _vala_comment_unref0 (comment); } static void vala_gir_parser_report_unused_metadata (ValaGirParser* self, ValaGirParserMetadata* metadata) { ValaGirParserMetadata* _tmp0_; ValaGirParserMetadata* _tmp1_; gboolean _tmp2_ = FALSE; ValaMap* _tmp3_; gint _tmp4_; gint _tmp5_; g_return_if_fail (self != NULL); g_return_if_fail (metadata != NULL); _tmp0_ = vala_gir_parser_metadata_get_empty (); _tmp1_ = _tmp0_; if (metadata == _tmp1_) { return; } _tmp3_ = metadata->args; _tmp4_ = vala_map_get_size (_tmp3_); _tmp5_ = _tmp4_; if (_tmp5_ == 0) { ValaArrayList* _tmp6_; gint _tmp7_; gint _tmp8_; _tmp6_ = metadata->children; _tmp7_ = vala_collection_get_size ((ValaCollection*) _tmp6_); _tmp8_ = _tmp7_; _tmp2_ = _tmp8_ == 0; } else { _tmp2_ = FALSE; } if (_tmp2_) { ValaSourceReference* _tmp9_; _tmp9_ = metadata->source_reference; vala_report_warning (_tmp9_, "empty metadata"); return; } { ValaIterator* _arg_type_it = NULL; ValaMap* _tmp10_; ValaSet* _tmp11_; ValaSet* _tmp12_; ValaIterator* _tmp13_; ValaIterator* _tmp14_; _tmp10_ = metadata->args; _tmp11_ = vala_map_get_keys (_tmp10_); _tmp12_ = _tmp11_; _tmp13_ = vala_iterable_iterator ((ValaIterable*) _tmp12_); _tmp14_ = _tmp13_; _vala_iterable_unref0 (_tmp12_); _arg_type_it = _tmp14_; while (TRUE) { ValaIterator* _tmp15_; ValaGirParserArgumentType arg_type = 0; ValaIterator* _tmp16_; gpointer _tmp17_; ValaGirParserArgument* arg = NULL; ValaMap* _tmp18_; ValaGirParserArgumentType _tmp19_; gpointer _tmp20_; ValaGirParserArgument* _tmp21_; _tmp15_ = _arg_type_it; if (!vala_iterator_next (_tmp15_)) { break; } _tmp16_ = _arg_type_it; _tmp17_ = vala_iterator_get (_tmp16_); arg_type = (ValaGirParserArgumentType) ((gintptr) _tmp17_); _tmp18_ = metadata->args; _tmp19_ = arg_type; _tmp20_ = vala_map_get (_tmp18_, (gpointer) ((gintptr) _tmp19_)); arg = (ValaGirParserArgument*) _tmp20_; _tmp21_ = arg; if (!_tmp21_->used) { ValaGirParserArgument* _tmp22_; ValaSourceReference* _tmp23_; _tmp22_ = arg; _tmp23_ = _tmp22_->source_reference; vala_report_warning (_tmp23_, "argument never used"); } _vala_gir_parser_argument_unref0 (arg); } _vala_iterator_unref0 (_arg_type_it); } { ValaArrayList* _child_list = NULL; ValaArrayList* _tmp24_; ValaArrayList* _tmp25_; gint _child_size = 0; ValaArrayList* _tmp26_; gint _tmp27_; gint _tmp28_; gint _child_index = 0; _tmp24_ = metadata->children; _tmp25_ = _vala_iterable_ref0 (_tmp24_); _child_list = _tmp25_; _tmp26_ = _child_list; _tmp27_ = vala_collection_get_size ((ValaCollection*) _tmp26_); _tmp28_ = _tmp27_; _child_size = _tmp28_; _child_index = -1; while (TRUE) { gint _tmp29_; gint _tmp30_; ValaGirParserMetadata* child = NULL; ValaArrayList* _tmp31_; gpointer _tmp32_; ValaGirParserMetadata* _tmp33_; _child_index = _child_index + 1; _tmp29_ = _child_index; _tmp30_ = _child_size; if (!(_tmp29_ < _tmp30_)) { break; } _tmp31_ = _child_list; _tmp32_ = vala_list_get ((ValaList*) _tmp31_, _child_index); child = (ValaGirParserMetadata*) _tmp32_; _tmp33_ = child; if (!_tmp33_->used) { ValaGirParserMetadata* _tmp34_; ValaSourceReference* _tmp35_; _tmp34_ = child; _tmp35_ = _tmp34_->source_reference; vala_report_warning (_tmp35_, "metadata never used"); } else { ValaGirParserMetadata* _tmp36_; _tmp36_ = child; vala_gir_parser_report_unused_metadata (self, _tmp36_); } _vala_gir_parser_metadata_unref0 (child); } _vala_iterable_unref0 (_child_list); } } static void vala_gir_parser_resolve_gir_symbols (ValaGirParser* self) { g_return_if_fail (self != NULL); { ValaArrayList* _map_from_list = NULL; ValaArrayList* _tmp0_; ValaArrayList* _tmp1_; gint _map_from_size = 0; ValaArrayList* _tmp2_; gint _tmp3_; gint _tmp4_; gint _map_from_index = 0; _tmp0_ = self->priv->unresolved_gir_symbols; _tmp1_ = _vala_iterable_ref0 (_tmp0_); _map_from_list = _tmp1_; _tmp2_ = _map_from_list; _tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_); _tmp4_ = _tmp3_; _map_from_size = _tmp4_; _map_from_index = -1; while (TRUE) { gint _tmp5_; gint _tmp6_; ValaUnresolvedSymbol* map_from = NULL; ValaArrayList* _tmp7_; gpointer _tmp8_; _map_from_index = _map_from_index + 1; _tmp5_ = _map_from_index; _tmp6_ = _map_from_size; if (!(_tmp5_ < _tmp6_)) { break; } _tmp7_ = _map_from_list; _tmp8_ = vala_list_get ((ValaList*) _tmp7_, _map_from_index); map_from = (ValaUnresolvedSymbol*) _tmp8_; while (TRUE) { ValaUnresolvedSymbol* _tmp9_; ValaSymbol* map_to = NULL; ValaHashMap* _tmp10_; ValaUnresolvedSymbol* _tmp11_; gpointer _tmp12_; ValaSymbol* _tmp13_; ValaUnresolvedSymbol* _tmp63_; ValaUnresolvedSymbol* _tmp64_; ValaUnresolvedSymbol* _tmp65_; ValaUnresolvedSymbol* _tmp66_; _tmp9_ = map_from; if (!(_tmp9_ != NULL)) { break; } _tmp10_ = self->priv->unresolved_symbols_map; _tmp11_ = map_from; _tmp12_ = vala_map_get ((ValaMap*) _tmp10_, _tmp11_); map_to = (ValaSymbol*) _tmp12_; _tmp13_ = map_to; if (_tmp13_ != NULL) { ValaUnresolvedSymbol* _tmp14_; ValaUnresolvedSymbol* _tmp15_; ValaSymbol* _tmp16_; const gchar* _tmp17_; const gchar* _tmp18_; ValaSymbol* _tmp19_; _tmp14_ = map_from; vala_unresolved_symbol_set_inner (_tmp14_, NULL); _tmp15_ = map_from; _tmp16_ = map_to; _tmp17_ = vala_symbol_get_name (_tmp16_); _tmp18_ = _tmp17_; vala_symbol_set_name ((ValaSymbol*) _tmp15_, _tmp18_); _tmp19_ = map_to; if (VALA_IS_UNRESOLVED_SYMBOL (_tmp19_)) { ValaUnresolvedSymbol* umap_to = NULL; ValaSymbol* _tmp20_; ValaUnresolvedSymbol* _tmp21_; _tmp20_ = map_to; _tmp21_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_UNRESOLVED_SYMBOL, ValaUnresolvedSymbol)); umap_to = _tmp21_; while (TRUE) { ValaUnresolvedSymbol* _tmp22_; ValaUnresolvedSymbol* _tmp23_; ValaUnresolvedSymbol* _tmp24_; ValaUnresolvedSymbol* _tmp25_; ValaUnresolvedSymbol* _tmp26_; ValaUnresolvedSymbol* _tmp27_; ValaUnresolvedSymbol* _tmp28_; ValaUnresolvedSymbol* _tmp29_; ValaUnresolvedSymbol* _tmp30_; const gchar* _tmp31_; const gchar* _tmp32_; ValaUnresolvedSymbol* _tmp33_; ValaUnresolvedSymbol* _tmp34_; ValaUnresolvedSymbol* _tmp35_; ValaUnresolvedSymbol* _tmp36_; ValaUnresolvedSymbol* _tmp37_; ValaUnresolvedSymbol* _tmp38_; _tmp22_ = umap_to; _tmp23_ = vala_unresolved_symbol_get_inner (_tmp22_); _tmp24_ = _tmp23_; if (!(_tmp24_ != NULL)) { break; } _tmp25_ = umap_to; _tmp26_ = vala_unresolved_symbol_get_inner (_tmp25_); _tmp27_ = _tmp26_; _tmp28_ = _vala_code_node_ref0 (_tmp27_); _vala_code_node_unref0 (umap_to); umap_to = _tmp28_; _tmp29_ = map_from; _tmp30_ = umap_to; _tmp31_ = vala_symbol_get_name ((ValaSymbol*) _tmp30_); _tmp32_ = _tmp31_; _tmp33_ = vala_unresolved_symbol_new (NULL, _tmp32_, NULL); _tmp34_ = _tmp33_; vala_unresolved_symbol_set_inner (_tmp29_, _tmp34_); _vala_code_node_unref0 (_tmp34_); _tmp35_ = map_from; _tmp36_ = vala_unresolved_symbol_get_inner (_tmp35_); _tmp37_ = _tmp36_; _tmp38_ = _vala_code_node_ref0 (_tmp37_); _vala_code_node_unref0 (map_from); map_from = _tmp38_; } _vala_code_node_unref0 (umap_to); } else { while (TRUE) { gboolean _tmp39_ = FALSE; ValaSymbol* _tmp40_; ValaSymbol* _tmp41_; ValaSymbol* _tmp42_; ValaSymbol* _tmp49_; ValaSymbol* _tmp50_; ValaSymbol* _tmp51_; ValaSymbol* _tmp52_; ValaUnresolvedSymbol* _tmp53_; ValaSymbol* _tmp54_; const gchar* _tmp55_; const gchar* _tmp56_; ValaUnresolvedSymbol* _tmp57_; ValaUnresolvedSymbol* _tmp58_; ValaUnresolvedSymbol* _tmp59_; ValaUnresolvedSymbol* _tmp60_; ValaUnresolvedSymbol* _tmp61_; ValaUnresolvedSymbol* _tmp62_; _tmp40_ = map_to; _tmp41_ = vala_symbol_get_parent_symbol (_tmp40_); _tmp42_ = _tmp41_; if (_tmp42_ != NULL) { ValaSymbol* _tmp43_; ValaSymbol* _tmp44_; ValaSymbol* _tmp45_; ValaCodeContext* _tmp46_; ValaNamespace* _tmp47_; ValaNamespace* _tmp48_; _tmp43_ = map_to; _tmp44_ = vala_symbol_get_parent_symbol (_tmp43_); _tmp45_ = _tmp44_; _tmp46_ = self->priv->context; _tmp47_ = vala_code_context_get_root (_tmp46_); _tmp48_ = _tmp47_; _tmp39_ = _tmp45_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, VALA_TYPE_SYMBOL, ValaSymbol); } else { _tmp39_ = FALSE; } if (!_tmp39_) { break; } _tmp49_ = map_to; _tmp50_ = vala_symbol_get_parent_symbol (_tmp49_); _tmp51_ = _tmp50_; _tmp52_ = _vala_code_node_ref0 (_tmp51_); _vala_code_node_unref0 (map_to); map_to = _tmp52_; _tmp53_ = map_from; _tmp54_ = map_to; _tmp55_ = vala_symbol_get_name (_tmp54_); _tmp56_ = _tmp55_; _tmp57_ = vala_unresolved_symbol_new (NULL, _tmp56_, NULL); _tmp58_ = _tmp57_; vala_unresolved_symbol_set_inner (_tmp53_, _tmp58_); _vala_code_node_unref0 (_tmp58_); _tmp59_ = map_from; _tmp60_ = vala_unresolved_symbol_get_inner (_tmp59_); _tmp61_ = _tmp60_; _tmp62_ = _vala_code_node_ref0 (_tmp61_); _vala_code_node_unref0 (map_from); map_from = _tmp62_; } } _vala_code_node_unref0 (map_to); break; } _tmp63_ = map_from; _tmp64_ = vala_unresolved_symbol_get_inner (_tmp63_); _tmp65_ = _tmp64_; _tmp66_ = _vala_code_node_ref0 (_tmp65_); _vala_code_node_unref0 (map_from); map_from = _tmp66_; _vala_code_node_unref0 (map_to); } _vala_code_node_unref0 (map_from); } _vala_iterable_unref0 (_map_from_list); } } static void vala_gir_parser_create_new_namespaces (ValaGirParser* self) { g_return_if_fail (self != NULL); { ValaArrayList* _node_list = NULL; ValaArrayList* _tmp0_; ValaArrayList* _tmp1_; gint _node_size = 0; ValaArrayList* _tmp2_; gint _tmp3_; gint _tmp4_; gint _node_index = 0; _tmp0_ = vala_gir_parser_node_new_namespaces; _tmp1_ = _vala_iterable_ref0 (_tmp0_); _node_list = _tmp1_; _tmp2_ = _node_list; _tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_); _tmp4_ = _tmp3_; _node_size = _tmp4_; _node_index = -1; while (TRUE) { gint _tmp5_; gint _tmp6_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp7_; gpointer _tmp8_; ValaGirParserNode* _tmp9_; ValaSymbol* _tmp10_; _node_index = _node_index + 1; _tmp5_ = _node_index; _tmp6_ = _node_size; if (!(_tmp5_ < _tmp6_)) { break; } _tmp7_ = _node_list; _tmp8_ = vala_list_get ((ValaList*) _tmp7_, _node_index); node = (ValaGirParserNode*) _tmp8_; _tmp9_ = node; _tmp10_ = _tmp9_->symbol; if (_tmp10_ == NULL) { ValaGirParserNode* _tmp11_; ValaGirParserNode* _tmp12_; const gchar* _tmp13_; ValaGirParserNode* _tmp14_; ValaSourceReference* _tmp15_; ValaNamespace* _tmp16_; _tmp11_ = node; _tmp12_ = node; _tmp13_ = _tmp12_->name; _tmp14_ = node; _tmp15_ = _tmp14_->source_reference; _tmp16_ = vala_namespace_new (_tmp13_, _tmp15_); _vala_code_node_unref0 (_tmp11_->symbol); _tmp11_->symbol = (ValaSymbol*) _tmp16_; } _vala_gir_parser_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } } static void vala_gir_parser_resolve_type_arguments (ValaGirParser* self) { ValaMapIterator* it = NULL; ValaHashMap* _tmp0_; ValaMapIterator* _tmp1_; g_return_if_fail (self != NULL); _tmp0_ = self->priv->unresolved_type_arguments; _tmp1_ = vala_map_map_iterator ((ValaMap*) _tmp0_); it = _tmp1_; while (TRUE) { ValaMapIterator* _tmp2_; ValaUnresolvedType* element_type = NULL; ValaMapIterator* _tmp3_; gpointer _tmp4_; ValaGirParserNode* parent = NULL; ValaMapIterator* _tmp5_; gpointer _tmp6_; ValaTypeSymbol* sym = NULL; ValaGirParserNode* _tmp7_; ValaUnresolvedType* _tmp8_; ValaUnresolvedSymbol* _tmp9_; ValaUnresolvedSymbol* _tmp10_; ValaSymbol* _tmp11_; ValaStruct* st = NULL; ValaTypeSymbol* _tmp12_; ValaStruct* _tmp13_; gboolean _tmp14_ = FALSE; gboolean _tmp15_ = FALSE; ValaStruct* _tmp16_; _tmp2_ = it; if (!vala_map_iterator_next (_tmp2_)) { break; } _tmp3_ = it; _tmp4_ = vala_map_iterator_get_key (_tmp3_); element_type = (ValaUnresolvedType*) _tmp4_; _tmp5_ = it; _tmp6_ = vala_map_iterator_get_value (_tmp5_); parent = (ValaGirParserNode*) _tmp6_; _tmp7_ = parent; _tmp8_ = element_type; _tmp9_ = vala_unresolved_type_get_unresolved_symbol (_tmp8_); _tmp10_ = _tmp9_; _tmp11_ = vala_gir_parser_resolve_symbol (self, _tmp7_, _tmp10_); sym = G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol); _tmp12_ = sym; _tmp13_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp12_) ? ((ValaStruct*) _tmp12_) : NULL); st = _tmp13_; _tmp16_ = st; if (_tmp16_ != NULL) { ValaStruct* _tmp17_; _tmp17_ = st; _tmp15_ = !vala_struct_is_integer_type (_tmp17_); } else { _tmp15_ = FALSE; } if (_tmp15_) { ValaStruct* _tmp18_; _tmp18_ = st; _tmp14_ = !vala_struct_is_floating_type (_tmp18_); } else { _tmp14_ = FALSE; } if (_tmp14_) { ValaUnresolvedType* _tmp19_; _tmp19_ = element_type; vala_data_type_set_nullable ((ValaDataType*) _tmp19_, TRUE); } _vala_code_node_unref0 (st); _vala_code_node_unref0 (sym); _vala_gir_parser_node_unref0 (parent); _vala_code_node_unref0 (element_type); } _vala_map_iterator_unref0 (it); } static void vala_gir_parser_process_interface (ValaGirParser* self, ValaGirParserNode* iface_node) { ValaInterface* iface = NULL; ValaSymbol* _tmp0_; ValaInterface* _tmp1_; gboolean has_instantiable_prereq = FALSE; g_return_if_fail (self != NULL); g_return_if_fail (iface_node != NULL); _tmp0_ = iface_node->symbol; _tmp1_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, VALA_TYPE_INTERFACE, ValaInterface)); iface = _tmp1_; has_instantiable_prereq = FALSE; { ValaList* _prereq_list = NULL; ValaInterface* _tmp2_; ValaList* _tmp3_; ValaList* _tmp4_; gint _prereq_size = 0; ValaList* _tmp5_; gint _tmp6_; gint _tmp7_; gint _prereq_index = 0; _tmp2_ = iface; _tmp3_ = vala_interface_get_prerequisites (_tmp2_); _tmp4_ = _vala_iterable_ref0 (_tmp3_); _prereq_list = _tmp4_; _tmp5_ = _prereq_list; _tmp6_ = vala_collection_get_size ((ValaCollection*) _tmp5_); _tmp7_ = _tmp6_; _prereq_size = _tmp7_; _prereq_index = -1; while (TRUE) { gint _tmp8_; gint _tmp9_; ValaDataType* prereq = NULL; ValaList* _tmp10_; gpointer _tmp11_; ValaSymbol* sym = NULL; ValaDataType* _tmp12_; ValaSymbol* _tmp24_; _prereq_index = _prereq_index + 1; _tmp8_ = _prereq_index; _tmp9_ = _prereq_size; if (!(_tmp8_ < _tmp9_)) { break; } _tmp10_ = _prereq_list; _tmp11_ = vala_list_get (_tmp10_, _prereq_index); prereq = (ValaDataType*) _tmp11_; sym = NULL; _tmp12_ = prereq; if (VALA_IS_UNRESOLVED_TYPE (_tmp12_)) { ValaUnresolvedSymbol* unresolved_symbol = NULL; ValaDataType* _tmp13_; ValaUnresolvedSymbol* _tmp14_; ValaUnresolvedSymbol* _tmp15_; ValaUnresolvedSymbol* _tmp16_; ValaGirParserNode* _tmp17_; ValaUnresolvedSymbol* _tmp18_; ValaSymbol* _tmp19_; _tmp13_ = prereq; _tmp14_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp15_ = _tmp14_; _tmp16_ = _vala_code_node_ref0 (_tmp15_); unresolved_symbol = _tmp16_; _tmp17_ = iface_node->parent; _tmp18_ = unresolved_symbol; _tmp19_ = vala_gir_parser_resolve_symbol (self, _tmp17_, _tmp18_); _vala_code_node_unref0 (sym); sym = _tmp19_; _vala_code_node_unref0 (unresolved_symbol); } else { ValaDataType* _tmp20_; ValaTypeSymbol* _tmp21_; ValaTypeSymbol* _tmp22_; ValaSymbol* _tmp23_; _tmp20_ = prereq; _tmp21_ = vala_data_type_get_type_symbol (_tmp20_); _tmp22_ = _tmp21_; _tmp23_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp22_); _vala_code_node_unref0 (sym); sym = _tmp23_; } _tmp24_ = sym; if (VALA_IS_CLASS (_tmp24_)) { has_instantiable_prereq = TRUE; _vala_code_node_unref0 (sym); _vala_code_node_unref0 (prereq); break; } _vala_code_node_unref0 (sym); _vala_code_node_unref0 (prereq); } _vala_iterable_unref0 (_prereq_list); } if (!has_instantiable_prereq) { ValaArrayList* _tmp25_; ValaInterface* _tmp26_; _tmp25_ = self->priv->ifaces_needing_object_prereq; _tmp26_ = iface; vala_collection_add ((ValaCollection*) _tmp25_, _tmp26_); } _vala_code_node_unref0 (iface); } static void vala_gir_parser_process_alias (ValaGirParser* self, ValaGirParserNode* alias) { ValaDataType* base_type = NULL; ValaSymbol* type_sym = NULL; ValaGirParserNode* base_node = NULL; gboolean simple_type = FALSE; ValaDataType* _tmp0_; gboolean _tmp32_ = FALSE; ValaSymbol* _tmp33_; gboolean _tmp35_ = FALSE; gboolean _tmp36_ = FALSE; ValaDataType* _tmp37_; gboolean _tmp152_ = FALSE; ValaSymbol* _tmp153_; g_return_if_fail (self != NULL); g_return_if_fail (alias != NULL); base_type = NULL; type_sym = NULL; base_node = NULL; simple_type = FALSE; _tmp0_ = alias->base_type; if (VALA_IS_UNRESOLVED_TYPE (_tmp0_)) { ValaDataType* _tmp1_; ValaDataType* _tmp2_; ValaGirParserNode* _tmp3_; ValaDataType* _tmp4_; ValaUnresolvedSymbol* _tmp5_; ValaUnresolvedSymbol* _tmp6_; ValaGirParserNode* _tmp7_; ValaGirParserNode* _tmp8_; _tmp1_ = alias->base_type; _tmp2_ = _vala_code_node_ref0 (_tmp1_); _vala_code_node_unref0 (base_type); base_type = _tmp2_; _tmp3_ = alias->parent; _tmp4_ = base_type; _tmp5_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp6_ = _tmp5_; _tmp7_ = vala_gir_parser_resolve_node (self, _tmp3_, _tmp6_, FALSE); _vala_gir_parser_node_unref0 (base_node); base_node = _tmp7_; _tmp8_ = base_node; if (_tmp8_ != NULL) { ValaGirParserNode* _tmp9_; ValaSymbol* _tmp10_; ValaSymbol* _tmp11_; _tmp9_ = base_node; _tmp10_ = _tmp9_->symbol; _tmp11_ = _vala_code_node_ref0 (_tmp10_); _vala_code_node_unref0 (type_sym); type_sym = _tmp11_; } } else { gboolean _tmp12_ = FALSE; ValaDataType* _tmp13_; _tmp13_ = alias->base_type; if (VALA_IS_POINTER_TYPE (_tmp13_)) { ValaDataType* _tmp14_; ValaDataType* _tmp15_; ValaDataType* _tmp16_; _tmp14_ = alias->base_type; _tmp15_ = vala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_POINTER_TYPE, ValaPointerType)); _tmp16_ = _tmp15_; _tmp12_ = VALA_IS_VOID_TYPE (_tmp16_); } else { _tmp12_ = FALSE; } if (_tmp12_) { simple_type = TRUE; } else { ValaDataType* _tmp17_; ValaDataType* _tmp18_; ValaDataType* _tmp19_; ValaTypeSymbol* _tmp20_; ValaTypeSymbol* _tmp21_; ValaSymbol* _tmp22_; ValaSymbol* _tmp23_; _tmp17_ = alias->base_type; _tmp18_ = _vala_code_node_ref0 (_tmp17_); _vala_code_node_unref0 (base_type); base_type = _tmp18_; _tmp19_ = base_type; _tmp20_ = vala_data_type_get_type_symbol (_tmp19_); _tmp21_ = _tmp20_; _tmp22_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp21_); _vala_code_node_unref0 (type_sym); type_sym = _tmp22_; _tmp23_ = type_sym; if (_tmp23_ != NULL) { ValaGirParserNode* _tmp24_; ValaSymbol* _tmp25_; gchar* _tmp26_; gchar* _tmp27_; ValaSourceReference* _tmp28_; ValaUnresolvedSymbol* _tmp29_; ValaUnresolvedSymbol* _tmp30_; ValaGirParserNode* _tmp31_; _tmp24_ = alias->parent; _tmp25_ = type_sym; _tmp26_ = vala_symbol_get_full_name (_tmp25_); _tmp27_ = _tmp26_; _tmp28_ = alias->source_reference; _tmp29_ = vala_gir_parser_parse_symbol_from_string (self, _tmp27_, _tmp28_); _tmp30_ = _tmp29_; _tmp31_ = vala_gir_parser_resolve_node (self, _tmp24_, _tmp30_, FALSE); _vala_gir_parser_node_unref0 (base_node); base_node = _tmp31_; _vala_code_node_unref0 (_tmp30_); _g_free0 (_tmp27_); } } } _tmp33_ = type_sym; if (VALA_IS_STRUCT (_tmp33_)) { ValaSymbol* _tmp34_; _tmp34_ = type_sym; _tmp32_ = vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, VALA_TYPE_STRUCT, ValaStruct)); } else { _tmp32_ = FALSE; } if (_tmp32_) { simple_type = TRUE; } _tmp37_ = base_type; if (_tmp37_ == NULL) { _tmp36_ = TRUE; } else { ValaSymbol* _tmp38_; _tmp38_ = type_sym; _tmp36_ = _tmp38_ == NULL; } if (_tmp36_) { _tmp35_ = TRUE; } else { ValaSymbol* _tmp39_; _tmp39_ = type_sym; _tmp35_ = VALA_IS_STRUCT (_tmp39_); } if (_tmp35_) { ValaStruct* st = NULL; const gchar* _tmp40_; ValaSourceReference* _tmp41_; ValaStruct* _tmp42_; ValaStruct* _tmp43_; ValaDataType* _tmp44_; ValaStruct* _tmp47_; ValaGirComment* _tmp48_; ValaStruct* _tmp49_; ValaStruct* _tmp50_; ValaSymbol* _tmp51_; _tmp40_ = alias->name; _tmp41_ = alias->source_reference; _tmp42_ = vala_struct_new (_tmp40_, _tmp41_, NULL); st = _tmp42_; _tmp43_ = st; vala_symbol_set_access ((ValaSymbol*) _tmp43_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp44_ = base_type; if (_tmp44_ != NULL) { ValaStruct* _tmp45_; ValaDataType* _tmp46_; _tmp45_ = st; _tmp46_ = base_type; vala_struct_set_base_type (_tmp45_, _tmp46_); } _tmp47_ = st; _tmp48_ = alias->comment; vala_symbol_set_comment ((ValaSymbol*) _tmp47_, (ValaComment*) _tmp48_); _tmp49_ = st; vala_struct_set_simple_type (_tmp49_, simple_type); _tmp50_ = st; _tmp51_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp50_); _vala_code_node_unref0 (alias->symbol); alias->symbol = _tmp51_; _vala_code_node_unref0 (st); } else { ValaSymbol* _tmp52_; _tmp52_ = type_sym; if (VALA_IS_CLASS (_tmp52_)) { ValaClass* cl = NULL; const gchar* _tmp53_; ValaSourceReference* _tmp54_; ValaClass* _tmp55_; ValaClass* _tmp56_; ValaDataType* _tmp57_; ValaClass* _tmp60_; ValaGirComment* _tmp61_; ValaClass* _tmp62_; ValaSymbol* _tmp63_; gboolean _tmp64_; gboolean _tmp65_; ValaClass* _tmp66_; ValaSymbol* _tmp67_; _tmp53_ = alias->name; _tmp54_ = alias->source_reference; _tmp55_ = vala_class_new (_tmp53_, _tmp54_, NULL); cl = _tmp55_; _tmp56_ = cl; vala_symbol_set_access ((ValaSymbol*) _tmp56_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp57_ = base_type; if (_tmp57_ != NULL) { ValaClass* _tmp58_; ValaDataType* _tmp59_; _tmp58_ = cl; _tmp59_ = base_type; vala_class_add_base_type (_tmp58_, _tmp59_); } _tmp60_ = cl; _tmp61_ = alias->comment; vala_symbol_set_comment ((ValaSymbol*) _tmp60_, (ValaComment*) _tmp61_); _tmp62_ = cl; _tmp63_ = type_sym; _tmp64_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_CLASS, ValaClass)); _tmp65_ = _tmp64_; vala_class_set_is_compact (_tmp62_, _tmp65_); _tmp66_ = cl; _tmp67_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp66_); _vala_code_node_unref0 (alias->symbol); alias->symbol = _tmp67_; _vala_code_node_unref0 (cl); } else { ValaSymbol* _tmp68_; _tmp68_ = type_sym; if (VALA_IS_INTERFACE (_tmp68_)) { ValaInterface* iface = NULL; const gchar* _tmp69_; ValaSourceReference* _tmp70_; ValaInterface* _tmp71_; ValaInterface* _tmp72_; ValaDataType* _tmp73_; ValaInterface* _tmp76_; ValaGirComment* _tmp77_; ValaInterface* _tmp78_; ValaSymbol* _tmp79_; _tmp69_ = alias->name; _tmp70_ = alias->source_reference; _tmp71_ = vala_interface_new (_tmp69_, _tmp70_, NULL); iface = _tmp71_; _tmp72_ = iface; vala_symbol_set_access ((ValaSymbol*) _tmp72_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC); _tmp73_ = base_type; if (_tmp73_ != NULL) { ValaInterface* _tmp74_; ValaDataType* _tmp75_; _tmp74_ = iface; _tmp75_ = base_type; vala_interface_add_prerequisite (_tmp74_, _tmp75_); } _tmp76_ = iface; _tmp77_ = alias->comment; vala_symbol_set_comment ((ValaSymbol*) _tmp76_, (ValaComment*) _tmp77_); _tmp78_ = iface; _tmp79_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp78_); _vala_code_node_unref0 (alias->symbol); alias->symbol = _tmp79_; _vala_code_node_unref0 (iface); } else { ValaSymbol* _tmp80_; _tmp80_ = type_sym; if (VALA_IS_DELEGATE (_tmp80_)) { ValaDelegate* orig = NULL; ValaSymbol* _tmp81_; ValaDelegate* _tmp82_; ValaGirParserNode* _tmp83_; ValaDelegate* deleg = NULL; const gchar* _tmp88_; ValaDelegate* _tmp89_; ValaDataType* _tmp90_; ValaDataType* _tmp91_; ValaDataType* _tmp92_; ValaDataType* _tmp93_; ValaSourceReference* _tmp94_; ValaDelegate* _tmp95_; ValaDelegate* _tmp96_; ValaDelegate* _tmp97_; ValaDelegate* _tmp98_; ValaSymbolAccessibility _tmp99_; ValaSymbolAccessibility _tmp100_; ValaArrayList* error_types = NULL; GEqualFunc _tmp115_; ValaArrayList* _tmp116_; ValaDelegate* _tmp117_; ValaArrayList* _tmp118_; ValaSourceReference* _tmp119_; ValaDelegate* _tmp133_; GList* _tmp134_; ValaDelegate* _tmp139_; ValaSymbol* _tmp140_; _tmp81_ = type_sym; _tmp82_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp81_, VALA_TYPE_DELEGATE, ValaDelegate)); orig = _tmp82_; _tmp83_ = base_node; if (_tmp83_ != NULL) { ValaGirParserNode* _tmp84_; ValaGirParserNode* _tmp85_; ValaSymbol* _tmp86_; ValaDelegate* _tmp87_; _tmp84_ = base_node; vala_gir_parser_node_process (_tmp84_, self); _tmp85_ = base_node; _tmp86_ = _tmp85_->symbol; _tmp87_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, VALA_TYPE_DELEGATE, ValaDelegate)); _vala_code_node_unref0 (orig); orig = _tmp87_; } _tmp88_ = alias->name; _tmp89_ = orig; _tmp90_ = vala_callable_get_return_type ((ValaCallable*) _tmp89_); _tmp91_ = _tmp90_; _tmp92_ = vala_data_type_copy (_tmp91_); _tmp93_ = _tmp92_; _tmp94_ = alias->source_reference; _tmp95_ = vala_delegate_new (_tmp88_, _tmp93_, _tmp94_, NULL); _tmp96_ = _tmp95_; _vala_code_node_unref0 (_tmp93_); deleg = _tmp96_; _tmp97_ = deleg; _tmp98_ = orig; _tmp99_ = vala_symbol_get_access ((ValaSymbol*) _tmp98_); _tmp100_ = _tmp99_; vala_symbol_set_access ((ValaSymbol*) _tmp97_, _tmp100_); { ValaList* _param_list = NULL; ValaDelegate* _tmp101_; ValaList* _tmp102_; ValaList* _tmp103_; gint _param_size = 0; ValaList* _tmp104_; gint _tmp105_; gint _tmp106_; gint _param_index = 0; _tmp101_ = orig; _tmp102_ = vala_callable_get_parameters ((ValaCallable*) _tmp101_); _tmp103_ = _vala_iterable_ref0 (_tmp102_); _param_list = _tmp103_; _tmp104_ = _param_list; _tmp105_ = vala_collection_get_size ((ValaCollection*) _tmp104_); _tmp106_ = _tmp105_; _param_size = _tmp106_; _param_index = -1; while (TRUE) { gint _tmp107_; gint _tmp108_; ValaParameter* param = NULL; ValaList* _tmp109_; gpointer _tmp110_; ValaDelegate* _tmp111_; ValaParameter* _tmp112_; ValaParameter* _tmp113_; ValaParameter* _tmp114_; _param_index = _param_index + 1; _tmp107_ = _param_index; _tmp108_ = _param_size; if (!(_tmp107_ < _tmp108_)) { break; } _tmp109_ = _param_list; _tmp110_ = vala_list_get (_tmp109_, _param_index); param = (ValaParameter*) _tmp110_; _tmp111_ = deleg; _tmp112_ = param; _tmp113_ = vala_parameter_copy (_tmp112_); _tmp114_ = _tmp113_; vala_callable_add_parameter ((ValaCallable*) _tmp111_, _tmp114_); _vala_code_node_unref0 (_tmp114_); _vala_code_node_unref0 (param); } _vala_iterable_unref0 (_param_list); } _tmp115_ = g_direct_equal; _tmp116_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp115_); error_types = _tmp116_; _tmp117_ = orig; _tmp118_ = error_types; _tmp119_ = alias->source_reference; vala_code_node_get_error_types ((ValaCodeNode*) _tmp117_, (ValaCollection*) _tmp118_, _tmp119_); { ValaArrayList* _error_type_list = NULL; ValaArrayList* _tmp120_; ValaArrayList* _tmp121_; gint _error_type_size = 0; ValaArrayList* _tmp122_; gint _tmp123_; gint _tmp124_; gint _error_type_index = 0; _tmp120_ = error_types; _tmp121_ = _vala_iterable_ref0 (_tmp120_); _error_type_list = _tmp121_; _tmp122_ = _error_type_list; _tmp123_ = vala_collection_get_size ((ValaCollection*) _tmp122_); _tmp124_ = _tmp123_; _error_type_size = _tmp124_; _error_type_index = -1; while (TRUE) { gint _tmp125_; gint _tmp126_; ValaDataType* error_type = NULL; ValaArrayList* _tmp127_; gpointer _tmp128_; ValaDelegate* _tmp129_; ValaDataType* _tmp130_; ValaDataType* _tmp131_; ValaDataType* _tmp132_; _error_type_index = _error_type_index + 1; _tmp125_ = _error_type_index; _tmp126_ = _error_type_size; if (!(_tmp125_ < _tmp126_)) { break; } _tmp127_ = _error_type_list; _tmp128_ = vala_list_get ((ValaList*) _tmp127_, _error_type_index); error_type = (ValaDataType*) _tmp128_; _tmp129_ = deleg; _tmp130_ = error_type; _tmp131_ = vala_data_type_copy (_tmp130_); _tmp132_ = _tmp131_; vala_delegate_add_error_type (_tmp129_, _tmp132_); _vala_code_node_unref0 (_tmp132_); _vala_code_node_unref0 (error_type); } _vala_iterable_unref0 (_error_type_list); } _tmp133_ = orig; _tmp134_ = ((ValaCodeNode*) _tmp133_)->attributes; { GList* attribute_collection = NULL; GList* attribute_it = NULL; attribute_collection = _tmp134_; for (attribute_it = attribute_collection; attribute_it != NULL; attribute_it = attribute_it->next) { ValaAttribute* _tmp135_; ValaAttribute* attribute = NULL; _tmp135_ = _vala_code_node_ref0 ((ValaAttribute*) attribute_it->data); attribute = _tmp135_; { ValaDelegate* _tmp136_; ValaAttribute* _tmp137_; ValaAttribute* _tmp138_; _tmp136_ = deleg; _tmp137_ = attribute; _tmp138_ = _vala_code_node_ref0 (_tmp137_); ((ValaCodeNode*) _tmp136_)->attributes = g_list_append (((ValaCodeNode*) _tmp136_)->attributes, _tmp138_); _vala_code_node_unref0 (attribute); } } } _tmp139_ = deleg; _tmp140_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp139_); _vala_code_node_unref0 (alias->symbol); alias->symbol = _tmp140_; _vala_iterable_unref0 (error_types); _vala_code_node_unref0 (deleg); _vala_code_node_unref0 (orig); } else { ValaSymbol* _tmp141_; _tmp141_ = type_sym; if (_tmp141_ != NULL) { ValaSourceReference* _tmp142_; gchar* _tmp143_; gchar* _tmp144_; ValaSymbol* _tmp145_; gchar* _tmp146_; gchar* _tmp147_; gchar* _tmp148_; gchar* _tmp149_; ValaSymbol* _tmp150_; ValaSymbol* _tmp151_; _tmp142_ = alias->source_reference; _tmp143_ = vala_gir_parser_node_get_full_name (alias); _tmp144_ = _tmp143_; _tmp145_ = type_sym; _tmp146_ = vala_symbol_get_full_name (_tmp145_); _tmp147_ = _tmp146_; _tmp148_ = g_strdup_printf ("alias `%s' for `%s' is not supported", _tmp144_, _tmp147_); _tmp149_ = _tmp148_; vala_report_warning (_tmp142_, _tmp149_); _g_free0 (_tmp149_); _g_free0 (_tmp147_); _g_free0 (_tmp144_); _tmp150_ = type_sym; _tmp151_ = _vala_code_node_ref0 (_tmp150_); _vala_code_node_unref0 (alias->symbol); alias->symbol = _tmp151_; alias->merged = TRUE; } } } } } _tmp153_ = type_sym; if (VALA_IS_CLASS (_tmp153_)) { _tmp152_ = TRUE; } else { gboolean _tmp154_ = FALSE; ValaSymbol* _tmp155_; _tmp155_ = type_sym; if (VALA_IS_STRUCT (_tmp155_)) { _tmp154_ = !simple_type; } else { _tmp154_ = FALSE; } _tmp152_ = _tmp154_; } if (_tmp152_) { ValaSymbol* _tmp156_; _tmp156_ = type_sym; if (vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp156_, "CCode", "has_type_id")) { ValaSymbol* _tmp157_; ValaSymbol* _tmp158_; _tmp157_ = alias->symbol; _tmp158_ = type_sym; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp157_, "CCode", "has_type_id", vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp158_, "CCode", "has_type_id", FALSE), NULL); } else { ValaSymbol* _tmp159_; _tmp159_ = type_sym; if (vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp159_, "CCode", "type_id")) { ValaSymbol* _tmp160_; ValaSymbol* _tmp161_; gchar* _tmp162_; gchar* _tmp163_; _tmp160_ = alias->symbol; _tmp161_ = type_sym; _tmp162_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp161_, "CCode", "type_id", NULL); _tmp163_ = _tmp162_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp160_, "CCode", "type_id", _tmp163_, NULL); _g_free0 (_tmp163_); } } } _vala_gir_parser_node_unref0 (base_node); _vala_code_node_unref0 (type_sym); _vala_code_node_unref0 (base_type); } static void vala_gir_parser_process_callable (ValaGirParser* self, ValaGirParserNode* node) { gboolean _tmp0_ = FALSE; const gchar* _tmp1_; ValaSymbol* s = NULL; ValaSymbol* _tmp3_; ValaSymbol* _tmp4_; ValaList* parameters = NULL; ValaList* _tmp5_; ValaList* _tmp6_; ValaDataType* return_type = NULL; ValaSymbol* _tmp7_; gboolean _tmp12_ = FALSE; ValaDataType* _tmp13_; ValaList* _tmp240_; gint _tmp241_; gint _tmp242_; gint i = 0; gint j = 0; gint first_out = 0; gint last = 0; gboolean _tmp449_ = FALSE; ValaDataType* _tmp450_; ValaSymbol* _tmp455_; g_return_if_fail (self != NULL); g_return_if_fail (node != NULL); _tmp1_ = node->element_type; if (g_strcmp0 (_tmp1_, "alias") == 0) { ValaSymbol* _tmp2_; _tmp2_ = node->symbol; _tmp0_ = VALA_IS_DELEGATE (_tmp2_); } else { _tmp0_ = FALSE; } if (_tmp0_) { return; } _tmp3_ = node->symbol; _tmp4_ = _vala_code_node_ref0 (_tmp3_); s = _tmp4_; _tmp5_ = node->parameters; _tmp6_ = _vala_iterable_ref0 (_tmp5_); parameters = _tmp6_; return_type = NULL; _tmp7_ = s; if (VALA_IS_CALLABLE (_tmp7_)) { ValaSymbol* _tmp8_; ValaDataType* _tmp9_; ValaDataType* _tmp10_; ValaDataType* _tmp11_; _tmp8_ = s; _tmp9_ = vala_callable_get_return_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_CALLABLE, ValaCallable)); _tmp10_ = _tmp9_; _tmp11_ = _vala_code_node_ref0 (_tmp10_); _vala_code_node_unref0 (return_type); return_type = _tmp11_; } _tmp13_ = return_type; if (VALA_IS_ARRAY_TYPE (_tmp13_)) { _tmp12_ = node->return_array_length_idx >= 0; } else { _tmp12_ = FALSE; } if (_tmp12_) { ValaList* _tmp14_; gint _tmp15_; gint _tmp16_; _tmp14_ = parameters; _tmp15_ = vala_collection_get_size ((ValaCollection*) _tmp14_); _tmp16_ = _tmp15_; if (node->return_array_length_idx >= _tmp16_) { ValaDataType* _tmp17_; ValaSourceReference* _tmp18_; ValaSourceReference* _tmp19_; _tmp17_ = return_type; _tmp18_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp17_); _tmp19_ = _tmp18_; vala_report_error (_tmp19_, "invalid array length index"); } else { ValaList* _tmp20_; gpointer _tmp21_; ValaGirParserParameterInfo* _tmp22_; ValaArrayList* _tmp23_; _tmp20_ = parameters; _tmp21_ = vala_list_get (_tmp20_, node->return_array_length_idx); _tmp22_ = (ValaGirParserParameterInfo*) _tmp21_; _tmp22_->keep = FALSE; _vala_gir_parser_parameter_info_unref0 (_tmp22_); _tmp23_ = node->array_length_parameters; vala_collection_add ((ValaCollection*) _tmp23_, (gpointer) ((gintptr) node->return_array_length_idx)); } } else { gboolean _tmp24_ = FALSE; ValaDataType* _tmp25_; _tmp25_ = return_type; if (VALA_IS_VOID_TYPE (_tmp25_)) { ValaList* _tmp26_; gint _tmp27_; gint _tmp28_; _tmp26_ = parameters; _tmp27_ = vala_collection_get_size ((ValaCollection*) _tmp26_); _tmp28_ = _tmp27_; _tmp24_ = _tmp28_ > 0; } else { _tmp24_ = FALSE; } if (_tmp24_) { gint n_out_parameters = 0; n_out_parameters = 0; { ValaList* _info_list = NULL; ValaList* _tmp29_; ValaList* _tmp30_; gint _info_size = 0; ValaList* _tmp31_; gint _tmp32_; gint _tmp33_; gint _info_index = 0; _tmp29_ = parameters; _tmp30_ = _vala_iterable_ref0 (_tmp29_); _info_list = _tmp30_; _tmp31_ = _info_list; _tmp32_ = vala_collection_get_size ((ValaCollection*) _tmp31_); _tmp33_ = _tmp32_; _info_size = _tmp33_; _info_index = -1; while (TRUE) { gint _tmp34_; gint _tmp35_; ValaGirParserParameterInfo* info = NULL; ValaList* _tmp36_; gpointer _tmp37_; ValaGirParserParameterInfo* _tmp38_; ValaParameter* _tmp39_; ValaParameterDirection _tmp40_; ValaParameterDirection _tmp41_; _info_index = _info_index + 1; _tmp34_ = _info_index; _tmp35_ = _info_size; if (!(_tmp34_ < _tmp35_)) { break; } _tmp36_ = _info_list; _tmp37_ = vala_list_get (_tmp36_, _info_index); info = (ValaGirParserParameterInfo*) _tmp37_; _tmp38_ = info; _tmp39_ = _tmp38_->param; _tmp40_ = vala_parameter_get_direction (_tmp39_); _tmp41_ = _tmp40_; if (_tmp41_ == VALA_PARAMETER_DIRECTION_OUT) { gint _tmp42_; _tmp42_ = n_out_parameters; n_out_parameters = _tmp42_ + 1; } _vala_gir_parser_parameter_info_unref0 (info); } _vala_iterable_unref0 (_info_list); } if (n_out_parameters == 1) { ValaGirParserParameterInfo* last_param = NULL; ValaList* _tmp43_; ValaList* _tmp44_; gint _tmp45_; gint _tmp46_; gpointer _tmp47_; ValaGirParserParameterInfo* _tmp48_; ValaParameter* _tmp49_; ValaParameterDirection _tmp50_; ValaParameterDirection _tmp51_; _tmp43_ = parameters; _tmp44_ = parameters; _tmp45_ = vala_collection_get_size ((ValaCollection*) _tmp44_); _tmp46_ = _tmp45_; _tmp47_ = vala_list_get (_tmp43_, _tmp46_ - 1); last_param = (ValaGirParserParameterInfo*) _tmp47_; _tmp48_ = last_param; _tmp49_ = _tmp48_->param; _tmp50_ = vala_parameter_get_direction (_tmp49_); _tmp51_ = _tmp50_; if (_tmp51_ == VALA_PARAMETER_DIRECTION_OUT) { ValaGirParserParameterInfo* _tmp52_; ValaParameter* _tmp53_; ValaDataType* _tmp54_; ValaDataType* _tmp55_; _tmp52_ = last_param; _tmp53_ = _tmp52_->param; _tmp54_ = vala_variable_get_variable_type ((ValaVariable*) _tmp53_); _tmp55_ = _tmp54_; if (VALA_IS_UNRESOLVED_TYPE (_tmp55_)) { ValaStruct* st = NULL; ValaGirParserNode* _tmp56_; ValaGirParserParameterInfo* _tmp57_; ValaParameter* _tmp58_; ValaDataType* _tmp59_; ValaDataType* _tmp60_; ValaUnresolvedSymbol* _tmp61_; ValaUnresolvedSymbol* _tmp62_; ValaSymbol* _tmp63_; ValaStruct* _tmp64_; gboolean _tmp65_ = FALSE; gboolean _tmp66_ = FALSE; ValaStruct* _tmp67_; _tmp56_ = node->parent; _tmp57_ = last_param; _tmp58_ = _tmp57_->param; _tmp59_ = vala_variable_get_variable_type ((ValaVariable*) _tmp58_); _tmp60_ = _tmp59_; _tmp61_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp60_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp62_ = _tmp61_; _tmp63_ = vala_gir_parser_resolve_symbol (self, _tmp56_, _tmp62_); _tmp64_ = VALA_IS_STRUCT (_tmp63_) ? ((ValaStruct*) _tmp63_) : NULL; if (_tmp64_ == NULL) { _vala_code_node_unref0 (_tmp63_); } st = _tmp64_; _tmp67_ = st; if (_tmp67_ != NULL) { ValaStruct* _tmp68_; _tmp68_ = st; _tmp66_ = !vala_struct_is_simple_type (_tmp68_); } else { _tmp66_ = FALSE; } if (_tmp66_) { ValaGirParserParameterInfo* _tmp69_; ValaParameter* _tmp70_; ValaDataType* _tmp71_; ValaDataType* _tmp72_; gboolean _tmp73_; gboolean _tmp74_; _tmp69_ = last_param; _tmp70_ = _tmp69_->param; _tmp71_ = vala_variable_get_variable_type ((ValaVariable*) _tmp70_); _tmp72_ = _tmp71_; _tmp73_ = vala_data_type_get_nullable (_tmp72_); _tmp74_ = _tmp73_; _tmp65_ = !_tmp74_; } else { _tmp65_ = FALSE; } if (_tmp65_) { ValaGirParserMetadata* _tmp75_; _tmp75_ = node->metadata; if (!vala_gir_parser_metadata_get_bool (_tmp75_, VALA_GIR_PARSER_ARGUMENT_TYPE_RETURN_VOID, FALSE)) { ValaGirParserParameterInfo* _tmp76_; ValaGirParserParameterInfo* _tmp77_; ValaParameter* _tmp78_; ValaDataType* _tmp79_; ValaDataType* _tmp80_; ValaDataType* _tmp81_; _tmp76_ = last_param; _tmp76_->keep = FALSE; _tmp77_ = last_param; _tmp78_ = _tmp77_->param; _tmp79_ = vala_variable_get_variable_type ((ValaVariable*) _tmp78_); _tmp80_ = _tmp79_; _tmp81_ = vala_data_type_copy (_tmp80_); _vala_code_node_unref0 (return_type); return_type = _tmp81_; } } _vala_code_node_unref0 (st); } } _vala_gir_parser_parameter_info_unref0 (last_param); } } else { gboolean _tmp82_ = FALSE; ValaDataType* _tmp83_; _tmp83_ = return_type; if (VALA_IS_UNRESOLVED_TYPE (_tmp83_)) { ValaDataType* _tmp84_; gboolean _tmp85_; gboolean _tmp86_; _tmp84_ = return_type; _tmp85_ = vala_data_type_get_nullable (_tmp84_); _tmp86_ = _tmp85_; _tmp82_ = !_tmp86_; } else { _tmp82_ = FALSE; } if (_tmp82_) { ValaStruct* st = NULL; ValaGirParserNode* _tmp87_; ValaDataType* _tmp88_; ValaUnresolvedSymbol* _tmp89_; ValaUnresolvedSymbol* _tmp90_; ValaSymbol* _tmp91_; ValaStruct* _tmp92_; ValaStruct* _tmp93_; _tmp87_ = node->parent; _tmp88_ = return_type; _tmp89_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp88_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp90_ = _tmp89_; _tmp91_ = vala_gir_parser_resolve_symbol (self, _tmp87_, _tmp90_); _tmp92_ = VALA_IS_STRUCT (_tmp91_) ? ((ValaStruct*) _tmp91_) : NULL; if (_tmp92_ == NULL) { _vala_code_node_unref0 (_tmp91_); } st = _tmp92_; _tmp93_ = st; if (_tmp93_ != NULL) { gboolean is_simple_type = FALSE; ValaStruct* base_st = NULL; ValaStruct* _tmp94_; ValaStruct* _tmp95_; is_simple_type = FALSE; _tmp94_ = st; _tmp95_ = _vala_code_node_ref0 (_tmp94_); base_st = _tmp95_; while (TRUE) { ValaStruct* _tmp96_; ValaStruct* _tmp97_; ValaStruct* _tmp98_; ValaDataType* _tmp99_; ValaDataType* _tmp100_; _tmp96_ = base_st; if (!(_tmp96_ != NULL)) { break; } _tmp97_ = base_st; if (vala_struct_is_simple_type (_tmp97_)) { is_simple_type = TRUE; break; } _tmp98_ = base_st; _tmp99_ = vala_struct_get_base_type (_tmp98_); _tmp100_ = _tmp99_; if (VALA_IS_UNRESOLVED_TYPE (_tmp100_)) { ValaGirParserNode* _tmp101_; ValaStruct* _tmp102_; ValaDataType* _tmp103_; ValaDataType* _tmp104_; ValaUnresolvedSymbol* _tmp105_; ValaUnresolvedSymbol* _tmp106_; ValaSymbol* _tmp107_; ValaStruct* _tmp108_; _tmp101_ = node->parent; _tmp102_ = base_st; _tmp103_ = vala_struct_get_base_type (_tmp102_); _tmp104_ = _tmp103_; _tmp105_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp104_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp106_ = _tmp105_; _tmp107_ = vala_gir_parser_resolve_symbol (self, _tmp101_, _tmp106_); _tmp108_ = VALA_IS_STRUCT (_tmp107_) ? ((ValaStruct*) _tmp107_) : NULL; if (_tmp108_ == NULL) { _vala_code_node_unref0 (_tmp107_); } _vala_code_node_unref0 (base_st); base_st = _tmp108_; } else { ValaStruct* _tmp109_; ValaStruct* _tmp110_; ValaStruct* _tmp111_; ValaStruct* _tmp112_; _tmp109_ = base_st; _tmp110_ = vala_struct_get_base_struct (_tmp109_); _tmp111_ = _tmp110_; _tmp112_ = _vala_code_node_ref0 (_tmp111_); _vala_code_node_unref0 (base_st); base_st = _tmp112_; } } if (!is_simple_type) { ValaDataType* _tmp113_; _tmp113_ = return_type; vala_data_type_set_nullable (_tmp113_, TRUE); } _vala_code_node_unref0 (base_st); } _vala_code_node_unref0 (st); } } } { ValaList* _info_list = NULL; ValaList* _tmp114_; ValaList* _tmp115_; gint _info_size = 0; ValaList* _tmp116_; gint _tmp117_; gint _tmp118_; gint _info_index = 0; _tmp114_ = parameters; _tmp115_ = _vala_iterable_ref0 (_tmp114_); _info_list = _tmp115_; _tmp116_ = _info_list; _tmp117_ = vala_collection_get_size ((ValaCollection*) _tmp116_); _tmp118_ = _tmp117_; _info_size = _tmp118_; _info_index = -1; while (TRUE) { gint _tmp119_; gint _tmp120_; ValaGirParserParameterInfo* info = NULL; ValaList* _tmp121_; gpointer _tmp122_; ValaDataType* type = NULL; ValaGirParserParameterInfo* _tmp123_; ValaParameter* _tmp124_; ValaDataType* _tmp125_; ValaDataType* _tmp126_; gboolean _tmp127_ = FALSE; ValaGirParserParameterInfo* _tmp128_; ValaParameter* _tmp129_; ValaParameterDirection _tmp130_; ValaParameterDirection _tmp131_; ValaSymbol* _tmp151_; gboolean _tmp189_ = FALSE; gboolean _tmp190_ = FALSE; ValaGirParserParameterInfo* _tmp191_; ValaParameter* _tmp192_; ValaParameterDirection _tmp193_; ValaParameterDirection _tmp194_; _info_index = _info_index + 1; _tmp119_ = _info_index; _tmp120_ = _info_size; if (!(_tmp119_ < _tmp120_)) { break; } _tmp121_ = _info_list; _tmp122_ = vala_list_get (_tmp121_, _info_index); info = (ValaGirParserParameterInfo*) _tmp122_; _tmp123_ = info; _tmp124_ = _tmp123_->param; _tmp125_ = vala_variable_get_variable_type ((ValaVariable*) _tmp124_); _tmp126_ = _tmp125_; type = _tmp126_; _tmp128_ = info; _tmp129_ = _tmp128_->param; _tmp130_ = vala_parameter_get_direction (_tmp129_); _tmp131_ = _tmp130_; if (_tmp131_ == VALA_PARAMETER_DIRECTION_OUT) { ValaDataType* _tmp132_; gboolean _tmp133_; gboolean _tmp134_; _tmp132_ = type; _tmp133_ = vala_data_type_get_nullable (_tmp132_); _tmp134_ = _tmp133_; _tmp127_ = _tmp134_; } else { _tmp127_ = FALSE; } if (_tmp127_) { ValaStruct* st = NULL; ValaDataType* _tmp135_; gboolean _tmp147_ = FALSE; ValaStruct* _tmp148_; st = NULL; _tmp135_ = type; if (VALA_IS_UNRESOLVED_TYPE (_tmp135_)) { ValaGirParserNode* _tmp136_; ValaDataType* _tmp137_; ValaUnresolvedSymbol* _tmp138_; ValaUnresolvedSymbol* _tmp139_; ValaSymbol* _tmp140_; ValaStruct* _tmp141_; _tmp136_ = node->parent; _tmp137_ = type; _tmp138_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp137_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp139_ = _tmp138_; _tmp140_ = vala_gir_parser_resolve_symbol (self, _tmp136_, _tmp139_); _tmp141_ = VALA_IS_STRUCT (_tmp140_) ? ((ValaStruct*) _tmp140_) : NULL; if (_tmp141_ == NULL) { _vala_code_node_unref0 (_tmp140_); } _vala_code_node_unref0 (st); st = _tmp141_; } else { ValaDataType* _tmp142_; _tmp142_ = type; if (VALA_IS_VALUE_TYPE (_tmp142_)) { ValaDataType* _tmp143_; ValaTypeSymbol* _tmp144_; ValaTypeSymbol* _tmp145_; ValaStruct* _tmp146_; _tmp143_ = type; _tmp144_ = vala_data_type_get_type_symbol (_tmp143_); _tmp145_ = _tmp144_; _tmp146_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp145_) ? ((ValaStruct*) _tmp145_) : NULL); _vala_code_node_unref0 (st); st = _tmp146_; } } _tmp148_ = st; if (_tmp148_ != NULL) { ValaStruct* _tmp149_; _tmp149_ = st; _tmp147_ = vala_struct_is_simple_type (_tmp149_); } else { _tmp147_ = FALSE; } if (_tmp147_) { ValaDataType* _tmp150_; _tmp150_ = type; vala_data_type_set_nullable (_tmp150_, FALSE); } _vala_code_node_unref0 (st); } _tmp151_ = s; if (VALA_IS_METHOD (_tmp151_)) { gchar* type_name = NULL; ValaUnresolvedType* unresolved_type = NULL; ValaDataType* _tmp152_; ValaUnresolvedType* _tmp153_; ValaGirParserParameterInfo* _tmp163_; gboolean _tmp177_ = FALSE; gboolean _tmp178_ = FALSE; gboolean _tmp179_ = FALSE; gboolean _tmp180_ = FALSE; gboolean _tmp181_ = FALSE; ValaUnresolvedType* _tmp182_; type_name = NULL; _tmp152_ = type; unresolved_type = VALA_IS_UNRESOLVED_TYPE (_tmp152_) ? ((ValaUnresolvedType*) _tmp152_) : NULL; _tmp153_ = unresolved_type; if (_tmp153_ != NULL) { ValaUnresolvedType* _tmp154_; ValaUnresolvedSymbol* _tmp155_; ValaUnresolvedSymbol* _tmp156_; const gchar* _tmp157_; const gchar* _tmp158_; gchar* _tmp159_; _tmp154_ = unresolved_type; _tmp155_ = vala_unresolved_type_get_unresolved_symbol (_tmp154_); _tmp156_ = _tmp155_; _tmp157_ = vala_symbol_get_name ((ValaSymbol*) _tmp156_); _tmp158_ = _tmp157_; _tmp159_ = g_strdup (_tmp158_); _g_free0 (type_name); type_name = _tmp159_; } else { ValaDataType* _tmp160_; _tmp160_ = type; if (_tmp160_ != NULL) { ValaDataType* _tmp161_; gchar* _tmp162_; _tmp161_ = type; _tmp162_ = vala_code_node_to_string ((ValaCodeNode*) _tmp161_); _g_free0 (type_name); type_name = _tmp162_; } } _tmp163_ = info; if (_tmp163_->is_async) { gboolean _tmp164_ = FALSE; gboolean _tmp165_ = FALSE; gboolean _tmp166_ = FALSE; gboolean _tmp167_ = FALSE; gboolean _tmp168_ = FALSE; ValaUnresolvedType* _tmp169_; _tmp169_ = unresolved_type; if (_tmp169_ != NULL) { const gchar* _tmp170_; _tmp170_ = type_name; _tmp168_ = g_strcmp0 (_tmp170_, "AsyncReadyCallback") == 0; } else { _tmp168_ = FALSE; } if (_tmp168_) { _tmp167_ = TRUE; } else { const gchar* _tmp171_; _tmp171_ = type_name; _tmp167_ = g_strcmp0 (_tmp171_, "GLib.AsyncReadyCallback") == 0; } if (_tmp167_) { _tmp166_ = TRUE; } else { const gchar* _tmp172_; _tmp172_ = type_name; _tmp166_ = g_strcmp0 (_tmp172_, "Gio.AsyncReadyCallback") == 0; } if (_tmp166_) { _tmp165_ = TRUE; } else { const gchar* _tmp173_; _tmp173_ = type_name; _tmp165_ = g_strcmp0 (_tmp173_, "GLib.AsyncReadyCallback?") == 0; } if (_tmp165_) { _tmp164_ = TRUE; } else { const gchar* _tmp174_; _tmp174_ = type_name; _tmp164_ = g_strcmp0 (_tmp174_, "Gio.AsyncReadyCallback?") == 0; } if (_tmp164_) { ValaSymbol* _tmp175_; ValaGirParserParameterInfo* _tmp176_; _tmp175_ = s; vala_method_set_coroutine (G_TYPE_CHECK_INSTANCE_CAST (_tmp175_, VALA_TYPE_METHOD, ValaMethod), TRUE); _tmp176_ = info; _tmp176_->keep = FALSE; } } _tmp182_ = unresolved_type; if (_tmp182_ != NULL) { const gchar* _tmp183_; _tmp183_ = type_name; _tmp181_ = g_strcmp0 (_tmp183_, "AsyncResult") == 0; } else { _tmp181_ = FALSE; } if (_tmp181_) { _tmp180_ = TRUE; } else { const gchar* _tmp184_; _tmp184_ = type_name; _tmp180_ = g_strcmp0 (_tmp184_, "GLib.AsyncResult") == 0; } if (_tmp180_) { _tmp179_ = TRUE; } else { const gchar* _tmp185_; _tmp185_ = type_name; _tmp179_ = g_strcmp0 (_tmp185_, "Gio.AsyncResult") == 0; } if (_tmp179_) { _tmp178_ = TRUE; } else { const gchar* _tmp186_; _tmp186_ = type_name; _tmp178_ = g_strcmp0 (_tmp186_, "GLib.AsyncResult?") == 0; } if (_tmp178_) { _tmp177_ = TRUE; } else { const gchar* _tmp187_; _tmp187_ = type_name; _tmp177_ = g_strcmp0 (_tmp187_, "Gio.AsyncResult?") == 0; } if (_tmp177_) { ValaGirParserParameterInfo* _tmp188_; _tmp188_ = info; _tmp188_->is_async_result = TRUE; } _g_free0 (type_name); } _tmp191_ = info; _tmp192_ = _tmp191_->param; _tmp193_ = vala_parameter_get_direction (_tmp192_); _tmp194_ = _tmp193_; if (_tmp194_ == VALA_PARAMETER_DIRECTION_OUT) { ValaSymbol* _tmp195_; _tmp195_ = s; _tmp190_ = VALA_IS_DELEGATE (_tmp195_); } else { _tmp190_ = FALSE; } if (_tmp190_) { ValaSymbol* _tmp196_; gboolean _tmp197_; gboolean _tmp198_; _tmp196_ = s; _tmp197_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp196_); _tmp198_ = _tmp197_; _tmp189_ = !_tmp198_; } else { _tmp189_ = FALSE; } if (_tmp189_) { ValaUnresolvedType* unresolved_type = NULL; ValaDataType* _tmp199_; gboolean _tmp200_ = FALSE; ValaUnresolvedType* _tmp201_; _tmp199_ = type; unresolved_type = VALA_IS_UNRESOLVED_TYPE (_tmp199_) ? ((ValaUnresolvedType*) _tmp199_) : NULL; _tmp201_ = unresolved_type; if (_tmp201_ != NULL) { ValaUnresolvedType* _tmp202_; ValaUnresolvedSymbol* _tmp203_; ValaUnresolvedSymbol* _tmp204_; gchar* _tmp205_; gchar* _tmp206_; _tmp202_ = unresolved_type; _tmp203_ = vala_unresolved_type_get_unresolved_symbol (_tmp202_); _tmp204_ = _tmp203_; _tmp205_ = vala_code_node_to_string ((ValaCodeNode*) _tmp204_); _tmp206_ = _tmp205_; _tmp200_ = g_strcmp0 (_tmp206_, "GLib.Error") == 0; _g_free0 (_tmp206_); } else { _tmp200_ = FALSE; } if (_tmp200_) { ValaSymbol* _tmp207_; ValaErrorType* _tmp208_; ValaErrorType* _tmp209_; ValaGirParserParameterInfo* _tmp210_; ValaGirParserParameterInfo* _tmp211_; _tmp207_ = s; _tmp208_ = vala_error_type_new (NULL, NULL, NULL); _tmp209_ = _tmp208_; vala_delegate_add_error_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp207_, VALA_TYPE_DELEGATE, ValaDelegate), (ValaDataType*) _tmp209_); _vala_code_node_unref0 (_tmp209_); _tmp210_ = info; _tmp210_->is_error = TRUE; _tmp211_ = info; _tmp211_->keep = FALSE; } } _vala_gir_parser_parameter_info_unref0 (info); } _vala_iterable_unref0 (_info_list); } { gint param_n = 0; ValaList* _tmp212_; gint _tmp213_; gint _tmp214_; _tmp212_ = parameters; _tmp213_ = vala_collection_get_size ((ValaCollection*) _tmp212_); _tmp214_ = _tmp213_; param_n = _tmp214_ - 1; { gboolean _tmp215_ = FALSE; _tmp215_ = TRUE; while (TRUE) { ValaGirParserParameterInfo* info = NULL; ValaList* _tmp217_; gpointer _tmp218_; gboolean _tmp219_ = FALSE; ValaGirParserParameterInfo* _tmp220_; ValaParameter* _tmp221_; gboolean _tmp222_; gboolean _tmp223_; if (!_tmp215_) { gint _tmp216_; _tmp216_ = param_n; param_n = _tmp216_ - 1; } _tmp215_ = FALSE; if (!(param_n >= 0)) { break; } _tmp217_ = parameters; _tmp218_ = vala_list_get (_tmp217_, param_n); info = (ValaGirParserParameterInfo*) _tmp218_; _tmp220_ = info; _tmp221_ = _tmp220_->param; _tmp222_ = vala_parameter_get_ellipsis (_tmp221_); _tmp223_ = _tmp222_; if (!_tmp223_) { ValaGirParserParameterInfo* _tmp224_; ValaParameter* _tmp225_; ValaExpression* _tmp226_; ValaExpression* _tmp227_; _tmp224_ = info; _tmp225_ = _tmp224_->param; _tmp226_ = vala_variable_get_initializer ((ValaVariable*) _tmp225_); _tmp227_ = _tmp226_; _tmp219_ = _tmp227_ == NULL; } else { _tmp219_ = FALSE; } if (_tmp219_) { gchar* type_string = NULL; ValaGirParserParameterInfo* _tmp228_; ValaParameter* _tmp229_; ValaDataType* _tmp230_; ValaDataType* _tmp231_; gchar* _tmp232_; gboolean _tmp233_ = FALSE; const gchar* _tmp234_; _tmp228_ = info; _tmp229_ = _tmp228_->param; _tmp230_ = vala_variable_get_variable_type ((ValaVariable*) _tmp229_); _tmp231_ = _tmp230_; _tmp232_ = vala_code_node_to_string ((ValaCodeNode*) _tmp231_); type_string = _tmp232_; _tmp234_ = type_string; if (g_strcmp0 (_tmp234_, "GLib.Cancellable?") == 0) { _tmp233_ = TRUE; } else { const gchar* _tmp235_; _tmp235_ = type_string; _tmp233_ = g_strcmp0 (_tmp235_, "Gio.Cancellable?") == 0; } if (_tmp233_) { ValaGirParserParameterInfo* _tmp236_; ValaParameter* _tmp237_; ValaNullLiteral* _tmp238_; ValaNullLiteral* _tmp239_; _tmp236_ = info; _tmp237_ = _tmp236_->param; _tmp238_ = vala_null_literal_new (NULL); _tmp239_ = _tmp238_; vala_variable_set_initializer ((ValaVariable*) _tmp237_, (ValaExpression*) _tmp239_); _vala_code_node_unref0 (_tmp239_); } else { _g_free0 (type_string); _vala_gir_parser_parameter_info_unref0 (info); break; } _g_free0 (type_string); } _vala_gir_parser_parameter_info_unref0 (info); } } } _tmp240_ = parameters; _tmp241_ = vala_collection_get_size ((ValaCollection*) _tmp240_); _tmp242_ = _tmp241_; if (_tmp242_ > 1) { ValaGirParserParameterInfo* last_param = NULL; ValaList* _tmp243_; ValaList* _tmp244_; gint _tmp245_; gint _tmp246_; gpointer _tmp247_; ValaGirParserParameterInfo* _tmp248_; ValaParameter* _tmp249_; gboolean _tmp250_; gboolean _tmp251_; _tmp243_ = parameters; _tmp244_ = parameters; _tmp245_ = vala_collection_get_size ((ValaCollection*) _tmp244_); _tmp246_ = _tmp245_; _tmp247_ = vala_list_get (_tmp243_, _tmp246_ - 1); last_param = (ValaGirParserParameterInfo*) _tmp247_; _tmp248_ = last_param; _tmp249_ = _tmp248_->param; _tmp250_ = vala_parameter_get_ellipsis (_tmp249_); _tmp251_ = _tmp250_; if (_tmp251_) { ValaGirParserParameterInfo* first_vararg_param = NULL; ValaList* _tmp252_; ValaList* _tmp253_; gint _tmp254_; gint _tmp255_; gpointer _tmp256_; ValaGirParserParameterInfo* _tmp257_; ValaParameter* _tmp258_; const gchar* _tmp259_; const gchar* _tmp260_; _tmp252_ = parameters; _tmp253_ = parameters; _tmp254_ = vala_collection_get_size ((ValaCollection*) _tmp253_); _tmp255_ = _tmp254_; _tmp256_ = vala_list_get (_tmp252_, _tmp255_ - 2); first_vararg_param = (ValaGirParserParameterInfo*) _tmp256_; _tmp257_ = first_vararg_param; _tmp258_ = _tmp257_->param; _tmp259_ = vala_symbol_get_name ((ValaSymbol*) _tmp258_); _tmp260_ = _tmp259_; if (g_str_has_prefix (_tmp260_, "first_")) { ValaGirParserParameterInfo* _tmp261_; _tmp261_ = first_vararg_param; _tmp261_->keep = FALSE; } _vala_gir_parser_parameter_info_unref0 (first_vararg_param); } _vala_gir_parser_parameter_info_unref0 (last_param); } i = 0; j = 1; first_out = -1; last = -1; { ValaList* _info_list = NULL; ValaList* _tmp262_; ValaList* _tmp263_; gint _info_size = 0; ValaList* _tmp264_; gint _tmp265_; gint _tmp266_; gint _info_index = 0; _tmp262_ = parameters; _tmp263_ = _vala_iterable_ref0 (_tmp262_); _info_list = _tmp263_; _tmp264_ = _info_list; _tmp265_ = vala_collection_get_size ((ValaCollection*) _tmp264_); _tmp266_ = _tmp265_; _info_size = _tmp266_; _info_index = -1; while (TRUE) { gint _tmp267_; gint _tmp268_; ValaGirParserParameterInfo* info = NULL; ValaList* _tmp269_; gpointer _tmp270_; gboolean _tmp271_ = FALSE; ValaSymbol* _tmp272_; gboolean _tmp299_ = FALSE; gboolean _tmp304_ = FALSE; gboolean _tmp305_ = FALSE; gboolean _tmp313_ = FALSE; ValaSymbol* _tmp314_; gint _tmp318_; _info_index = _info_index + 1; _tmp267_ = _info_index; _tmp268_ = _info_size; if (!(_tmp267_ < _tmp268_)) { break; } _tmp269_ = _info_list; _tmp270_ = vala_list_get (_tmp269_, _info_index); info = (ValaGirParserParameterInfo*) _tmp270_; _tmp272_ = s; if (VALA_IS_DELEGATE (_tmp272_)) { ValaGirParserParameterInfo* _tmp273_; _tmp273_ = info; _tmp271_ = _tmp273_->closure_idx == i; } else { _tmp271_ = FALSE; } if (_tmp271_) { ValaDelegate* d = NULL; ValaSymbol* _tmp274_; ValaDelegate* _tmp275_; ValaDelegate* _tmp276_; ValaDelegate* _tmp277_; ValaGirParserParameterInfo* _tmp278_; _tmp274_ = s; _tmp275_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp274_, VALA_TYPE_DELEGATE, ValaDelegate)); d = _tmp275_; _tmp276_ = d; vala_delegate_set_has_target (_tmp276_, TRUE); _tmp277_ = d; vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp277_, "CCode", "instance_pos", j - 0.1, NULL); _tmp278_ = info; _tmp278_->keep = FALSE; _vala_code_node_unref0 (d); } else { gboolean _tmp279_ = FALSE; gboolean _tmp280_ = FALSE; gboolean _tmp281_ = FALSE; ValaGirParserParameterInfo* _tmp282_; _tmp282_ = info; if (_tmp282_->keep) { ValaArrayList* _tmp283_; _tmp283_ = node->array_length_parameters; _tmp281_ = !vala_collection_contains ((ValaCollection*) _tmp283_, (gpointer) ((gintptr) i)); } else { _tmp281_ = FALSE; } if (_tmp281_) { ValaArrayList* _tmp284_; _tmp284_ = node->closure_parameters; _tmp280_ = !vala_collection_contains ((ValaCollection*) _tmp284_, (gpointer) ((gintptr) i)); } else { _tmp280_ = FALSE; } if (_tmp280_) { ValaArrayList* _tmp285_; _tmp285_ = node->destroy_parameters; _tmp279_ = !vala_collection_contains ((ValaCollection*) _tmp285_, (gpointer) ((gintptr) i)); } else { _tmp279_ = FALSE; } if (_tmp279_) { ValaGirParserParameterInfo* _tmp286_; ValaGirParserParameterInfo* _tmp287_; gfloat last_idx = 0.0F; gint _tmp296_; _tmp286_ = info; _tmp286_->vala_idx = (gfloat) j; _tmp287_ = info; _tmp287_->keep = TRUE; last_idx = 0.0F; if (last != -1) { ValaList* _tmp288_; gpointer _tmp289_; ValaGirParserParameterInfo* _tmp290_; _tmp288_ = parameters; _tmp289_ = vala_list_get (_tmp288_, last); _tmp290_ = (ValaGirParserParameterInfo*) _tmp289_; last_idx = _tmp290_->vala_idx; _vala_gir_parser_parameter_info_unref0 (_tmp290_); } { gint k = 0; k = last + 1; { gboolean _tmp291_ = FALSE; _tmp291_ = TRUE; while (TRUE) { ValaList* _tmp293_; gpointer _tmp294_; ValaGirParserParameterInfo* _tmp295_; if (!_tmp291_) { gint _tmp292_; _tmp292_ = k; k = _tmp292_ + 1; } _tmp291_ = FALSE; if (!(k < i)) { break; } _tmp293_ = parameters; _tmp294_ = vala_list_get (_tmp293_, k); _tmp295_ = (ValaGirParserParameterInfo*) _tmp294_; _tmp295_->vala_idx = last_idx + (((j - last_idx) / (i - last)) * (k - last)); _vala_gir_parser_parameter_info_unref0 (_tmp295_); } } } last = i; _tmp296_ = j; j = _tmp296_ + 1; } else { ValaGirParserParameterInfo* _tmp297_; ValaGirParserParameterInfo* _tmp298_; _tmp297_ = info; _tmp297_->keep = FALSE; _tmp298_ = info; _tmp298_->vala_idx = (j - 1) + ((i - last) * 0.1F); } } if (first_out < 0) { ValaGirParserParameterInfo* _tmp300_; ValaParameter* _tmp301_; ValaParameterDirection _tmp302_; ValaParameterDirection _tmp303_; _tmp300_ = info; _tmp301_ = _tmp300_->param; _tmp302_ = vala_parameter_get_direction (_tmp301_); _tmp303_ = _tmp302_; _tmp299_ = _tmp303_ == VALA_PARAMETER_DIRECTION_OUT; } else { _tmp299_ = FALSE; } if (_tmp299_) { first_out = i; } if (first_out >= 0) { ValaGirParserParameterInfo* _tmp306_; _tmp306_ = info; _tmp305_ = _tmp306_->is_async_result; } else { _tmp305_ = FALSE; } if (_tmp305_) { ValaSymbol* _tmp307_; _tmp307_ = s; _tmp304_ = VALA_IS_METHOD (_tmp307_); } else { _tmp304_ = FALSE; } if (_tmp304_) { gdouble _tmp308_ = 0.0; ValaSymbol* _tmp309_; ValaMemberBinding _tmp310_; ValaMemberBinding _tmp311_; gdouble shift = 0.0; ValaSymbol* _tmp312_; _tmp309_ = s; _tmp310_ = vala_method_get_binding (G_TYPE_CHECK_INSTANCE_CAST (_tmp309_, VALA_TYPE_METHOD, ValaMethod)); _tmp311_ = _tmp310_; if (_tmp311_ == VALA_MEMBER_BINDING_INSTANCE) { _tmp308_ = 1.1; } else { _tmp308_ = 0.1; } shift = _tmp308_; _tmp312_ = s; vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp312_, "CCode", "async_result_pos", i + shift, NULL); } _tmp314_ = s; if (VALA_IS_DELEGATE (_tmp314_)) { ValaGirParserParameterInfo* _tmp315_; _tmp315_ = info; _tmp313_ = _tmp315_->is_error; } else { _tmp313_ = FALSE; } if (_tmp313_) { ValaSymbol* _tmp316_; _tmp316_ = s; if (!vala_code_node_has_attribute_argument ((ValaCodeNode*) _tmp316_, "CCode", "instance_pos")) { ValaSymbol* _tmp317_; _tmp317_ = s; vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp317_, "CCode", "error_pos", j - 0.2, NULL); } } _tmp318_ = i; i = _tmp318_ + 1; _vala_gir_parser_parameter_info_unref0 (info); } _vala_iterable_unref0 (_info_list); } { ValaList* _info_list = NULL; ValaList* _tmp319_; ValaList* _tmp320_; gint _info_size = 0; ValaList* _tmp321_; gint _tmp322_; gint _tmp323_; gint _info_index = 0; _tmp319_ = parameters; _tmp320_ = _vala_iterable_ref0 (_tmp319_); _info_list = _tmp320_; _tmp321_ = _info_list; _tmp322_ = vala_collection_get_size ((ValaCollection*) _tmp321_); _tmp323_ = _tmp322_; _info_size = _tmp323_; _info_index = -1; while (TRUE) { gint _tmp324_; gint _tmp325_; ValaGirParserParameterInfo* info = NULL; ValaList* _tmp326_; gpointer _tmp327_; ValaGirParserParameterInfo* _tmp328_; ValaSymbol* _tmp329_; ValaGirParserParameterInfo* _tmp333_; ValaGirParserParameterInfo* _tmp348_; ValaGirParserParameterInfo* _tmp373_; ValaGirParserParameterInfo* _tmp398_; _info_index = _info_index + 1; _tmp324_ = _info_index; _tmp325_ = _info_size; if (!(_tmp324_ < _tmp325_)) { break; } _tmp326_ = _info_list; _tmp327_ = vala_list_get (_tmp326_, _info_index); info = (ValaGirParserParameterInfo*) _tmp327_; _tmp328_ = info; if (!_tmp328_->keep) { _vala_gir_parser_parameter_info_unref0 (info); continue; } _tmp329_ = s; if (VALA_IS_CALLABLE (_tmp329_)) { ValaSymbol* _tmp330_; ValaGirParserParameterInfo* _tmp331_; ValaParameter* _tmp332_; _tmp330_ = s; _tmp331_ = info; _tmp332_ = _tmp331_->param; vala_callable_add_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp330_, VALA_TYPE_CALLABLE, ValaCallable), _tmp332_); } _tmp333_ = info; if (_tmp333_->array_length_idx != -1) { ValaGirParserParameterInfo* _tmp334_; ValaList* _tmp335_; gint _tmp336_; gint _tmp337_; ValaGirParserParameterInfo* _tmp342_; ValaParameter* _tmp343_; ValaList* _tmp344_; ValaGirParserParameterInfo* _tmp345_; gpointer _tmp346_; ValaGirParserParameterInfo* _tmp347_; _tmp334_ = info; _tmp335_ = parameters; _tmp336_ = vala_collection_get_size ((ValaCollection*) _tmp335_); _tmp337_ = _tmp336_; if (_tmp334_->array_length_idx >= _tmp337_) { ValaGirParserParameterInfo* _tmp338_; ValaParameter* _tmp339_; ValaSourceReference* _tmp340_; ValaSourceReference* _tmp341_; _tmp338_ = info; _tmp339_ = _tmp338_->param; _tmp340_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp339_); _tmp341_ = _tmp340_; vala_report_error (_tmp341_, "invalid array_length index"); _vala_gir_parser_parameter_info_unref0 (info); continue; } _tmp342_ = info; _tmp343_ = _tmp342_->param; _tmp344_ = parameters; _tmp345_ = info; _tmp346_ = vala_list_get (_tmp344_, _tmp345_->array_length_idx); _tmp347_ = (ValaGirParserParameterInfo*) _tmp346_; vala_gir_parser_set_array_ccode (self, (ValaSymbol*) _tmp343_, _tmp347_); _vala_gir_parser_parameter_info_unref0 (_tmp347_); } _tmp348_ = info; if (_tmp348_->closure_idx != -1) { ValaGirParserParameterInfo* _tmp349_; ValaList* _tmp350_; gint _tmp351_; gint _tmp352_; ValaList* _tmp357_; ValaGirParserParameterInfo* _tmp358_; gpointer _tmp359_; ValaGirParserParameterInfo* _tmp360_; gchar* _tmp361_; gchar* _tmp362_; ValaGirParserParameterInfo* _tmp363_; gchar* _tmp364_; gchar* _tmp365_; gboolean _tmp366_; _tmp349_ = info; _tmp350_ = parameters; _tmp351_ = vala_collection_get_size ((ValaCollection*) _tmp350_); _tmp352_ = _tmp351_; if (_tmp349_->closure_idx >= _tmp352_) { ValaGirParserParameterInfo* _tmp353_; ValaParameter* _tmp354_; ValaSourceReference* _tmp355_; ValaSourceReference* _tmp356_; _tmp353_ = info; _tmp354_ = _tmp353_->param; _tmp355_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp354_); _tmp356_ = _tmp355_; vala_report_error (_tmp356_, "invalid closure index"); _vala_gir_parser_parameter_info_unref0 (info); continue; } _tmp357_ = parameters; _tmp358_ = info; _tmp359_ = vala_list_get (_tmp357_, _tmp358_->closure_idx); _tmp360_ = (ValaGirParserParameterInfo*) _tmp359_; _tmp361_ = g_strdup_printf ("%g", (gdouble) _tmp360_->vala_idx); _tmp362_ = _tmp361_; _tmp363_ = info; _tmp364_ = g_strdup_printf ("%g", _tmp363_->vala_idx + 0.1); _tmp365_ = _tmp364_; _tmp366_ = g_strcmp0 (_tmp362_, _tmp365_) != 0; _g_free0 (_tmp365_); _g_free0 (_tmp362_); _vala_gir_parser_parameter_info_unref0 (_tmp360_); if (_tmp366_) { ValaGirParserParameterInfo* _tmp367_; ValaParameter* _tmp368_; ValaList* _tmp369_; ValaGirParserParameterInfo* _tmp370_; gpointer _tmp371_; ValaGirParserParameterInfo* _tmp372_; _tmp367_ = info; _tmp368_ = _tmp367_->param; _tmp369_ = parameters; _tmp370_ = info; _tmp371_ = vala_list_get (_tmp369_, _tmp370_->closure_idx); _tmp372_ = (ValaGirParserParameterInfo*) _tmp371_; vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp368_, "CCode", "delegate_target_pos", (gdouble) _tmp372_->vala_idx, NULL); _vala_gir_parser_parameter_info_unref0 (_tmp372_); } } _tmp373_ = info; if (_tmp373_->destroy_idx != -1) { ValaGirParserParameterInfo* _tmp374_; ValaList* _tmp375_; gint _tmp376_; gint _tmp377_; ValaList* _tmp382_; ValaGirParserParameterInfo* _tmp383_; gpointer _tmp384_; ValaGirParserParameterInfo* _tmp385_; gchar* _tmp386_; gchar* _tmp387_; ValaGirParserParameterInfo* _tmp388_; gchar* _tmp389_; gchar* _tmp390_; gboolean _tmp391_; _tmp374_ = info; _tmp375_ = parameters; _tmp376_ = vala_collection_get_size ((ValaCollection*) _tmp375_); _tmp377_ = _tmp376_; if (_tmp374_->destroy_idx >= _tmp377_) { ValaGirParserParameterInfo* _tmp378_; ValaParameter* _tmp379_; ValaSourceReference* _tmp380_; ValaSourceReference* _tmp381_; _tmp378_ = info; _tmp379_ = _tmp378_->param; _tmp380_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp379_); _tmp381_ = _tmp380_; vala_report_error (_tmp381_, "invalid destroy index"); _vala_gir_parser_parameter_info_unref0 (info); continue; } _tmp382_ = parameters; _tmp383_ = info; _tmp384_ = vala_list_get (_tmp382_, _tmp383_->destroy_idx); _tmp385_ = (ValaGirParserParameterInfo*) _tmp384_; _tmp386_ = g_strdup_printf ("%g", (gdouble) _tmp385_->vala_idx); _tmp387_ = _tmp386_; _tmp388_ = info; _tmp389_ = g_strdup_printf ("%g", _tmp388_->vala_idx + 0.2); _tmp390_ = _tmp389_; _tmp391_ = g_strcmp0 (_tmp387_, _tmp390_) != 0; _g_free0 (_tmp390_); _g_free0 (_tmp387_); _vala_gir_parser_parameter_info_unref0 (_tmp385_); if (_tmp391_) { ValaGirParserParameterInfo* _tmp392_; ValaParameter* _tmp393_; ValaList* _tmp394_; ValaGirParserParameterInfo* _tmp395_; gpointer _tmp396_; ValaGirParserParameterInfo* _tmp397_; _tmp392_ = info; _tmp393_ = _tmp392_->param; _tmp394_ = parameters; _tmp395_ = info; _tmp396_ = vala_list_get (_tmp394_, _tmp395_->destroy_idx); _tmp397_ = (ValaGirParserParameterInfo*) _tmp396_; vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp393_, "CCode", "destroy_notify_pos", (gdouble) _tmp397_->vala_idx, NULL); _vala_gir_parser_parameter_info_unref0 (_tmp397_); } } _tmp398_ = info; if (_tmp398_->is_async) { ValaDataType* resolved_type = NULL; ValaGirParserParameterInfo* _tmp399_; ValaParameter* _tmp400_; ValaDataType* _tmp401_; ValaDataType* _tmp402_; ValaDataType* _tmp403_; ValaDataType* _tmp404_; ValaDataType* _tmp413_; _tmp399_ = info; _tmp400_ = _tmp399_->param; _tmp401_ = vala_variable_get_variable_type ((ValaVariable*) _tmp400_); _tmp402_ = _tmp401_; _tmp403_ = _vala_code_node_ref0 (_tmp402_); resolved_type = _tmp403_; _tmp404_ = resolved_type; if (VALA_IS_UNRESOLVED_TYPE (_tmp404_)) { ValaSymbol* resolved_symbol = NULL; ValaGirParserNode* _tmp405_; ValaDataType* _tmp406_; ValaUnresolvedSymbol* _tmp407_; ValaUnresolvedSymbol* _tmp408_; ValaSymbol* _tmp409_; ValaSymbol* _tmp410_; _tmp405_ = node->parent; _tmp406_ = resolved_type; _tmp407_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp406_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp408_ = _tmp407_; _tmp409_ = vala_gir_parser_resolve_symbol (self, _tmp405_, _tmp408_); resolved_symbol = _tmp409_; _tmp410_ = resolved_symbol; if (VALA_IS_DELEGATE (_tmp410_)) { ValaSymbol* _tmp411_; ValaDelegateType* _tmp412_; _tmp411_ = resolved_symbol; _tmp412_ = vala_delegate_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp411_, VALA_TYPE_DELEGATE, ValaDelegate)); _vala_code_node_unref0 (resolved_type); resolved_type = (ValaDataType*) _tmp412_; } _vala_code_node_unref0 (resolved_symbol); } _tmp413_ = resolved_type; if (VALA_IS_DELEGATE_TYPE (_tmp413_)) { ValaDelegate* d = NULL; ValaDataType* _tmp414_; ValaDelegate* _tmp415_; ValaDelegate* _tmp416_; ValaDelegate* _tmp417_; gboolean _tmp418_ = FALSE; ValaDelegate* _tmp419_; const gchar* _tmp420_; const gchar* _tmp421_; _tmp414_ = resolved_type; _tmp415_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp414_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType)); _tmp416_ = _tmp415_; _tmp417_ = _vala_code_node_ref0 (_tmp416_); d = _tmp417_; _tmp419_ = d; _tmp420_ = vala_symbol_get_name ((ValaSymbol*) _tmp419_); _tmp421_ = _tmp420_; if (g_strcmp0 (_tmp421_, "DestroyNotify") == 0) { ValaDelegate* _tmp422_; ValaSymbol* _tmp423_; ValaSymbol* _tmp424_; const gchar* _tmp425_; const gchar* _tmp426_; _tmp422_ = d; _tmp423_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp422_); _tmp424_ = _tmp423_; _tmp425_ = vala_symbol_get_name (_tmp424_); _tmp426_ = _tmp425_; _tmp418_ = g_strcmp0 (_tmp426_, "GLib") == 0; } else { _tmp418_ = FALSE; } if (!_tmp418_) { ValaGirParserParameterInfo* _tmp427_; ValaParameter* _tmp428_; gboolean _tmp429_ = FALSE; ValaGirParserParameterInfo* _tmp430_; ValaGirParserParameterInfo* _tmp432_; ValaParameter* _tmp433_; ValaDataType* _tmp434_; ValaDataType* _tmp435_; _tmp427_ = info; _tmp428_ = _tmp427_->param; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp428_, "CCode", "scope", "async", NULL); _tmp430_ = info; if (_tmp430_->closure_idx != -1) { ValaGirParserParameterInfo* _tmp431_; _tmp431_ = info; _tmp429_ = _tmp431_->destroy_idx != -1; } else { _tmp429_ = FALSE; } _tmp432_ = info; _tmp433_ = _tmp432_->param; _tmp434_ = vala_variable_get_variable_type ((ValaVariable*) _tmp433_); _tmp435_ = _tmp434_; vala_data_type_set_value_owned (_tmp435_, _tmp429_); } _vala_code_node_unref0 (d); } _vala_code_node_unref0 (resolved_type); } else { ValaDataType* resolved_type = NULL; ValaGirParserParameterInfo* _tmp436_; ValaParameter* _tmp437_; ValaDataType* _tmp438_; ValaDataType* _tmp439_; ValaDataType* _tmp440_; ValaDataType* _tmp441_; _tmp436_ = info; _tmp437_ = _tmp436_->param; _tmp438_ = vala_variable_get_variable_type ((ValaVariable*) _tmp437_); _tmp439_ = _tmp438_; _tmp440_ = _vala_code_node_ref0 (_tmp439_); resolved_type = _tmp440_; _tmp441_ = resolved_type; if (VALA_IS_DELEGATE_TYPE (_tmp441_)) { gboolean _tmp442_ = FALSE; ValaGirParserParameterInfo* _tmp443_; ValaGirParserParameterInfo* _tmp445_; ValaParameter* _tmp446_; ValaDataType* _tmp447_; ValaDataType* _tmp448_; _tmp443_ = info; if (_tmp443_->closure_idx != -1) { ValaGirParserParameterInfo* _tmp444_; _tmp444_ = info; _tmp442_ = _tmp444_->destroy_idx != -1; } else { _tmp442_ = FALSE; } _tmp445_ = info; _tmp446_ = _tmp445_->param; _tmp447_ = vala_variable_get_variable_type ((ValaVariable*) _tmp446_); _tmp448_ = _tmp447_; vala_data_type_set_value_owned (_tmp448_, _tmp442_); } _vala_code_node_unref0 (resolved_type); } _vala_gir_parser_parameter_info_unref0 (info); } _vala_iterable_unref0 (_info_list); } _tmp450_ = return_type; if (VALA_IS_ARRAY_TYPE (_tmp450_)) { _tmp449_ = node->return_array_length_idx >= 0; } else { _tmp449_ = FALSE; } if (_tmp449_) { ValaSymbol* _tmp451_; ValaList* _tmp452_; gpointer _tmp453_; ValaGirParserParameterInfo* _tmp454_; _tmp451_ = s; _tmp452_ = parameters; _tmp453_ = vala_list_get (_tmp452_, node->return_array_length_idx); _tmp454_ = (ValaGirParserParameterInfo*) _tmp453_; vala_gir_parser_set_array_ccode (self, _tmp451_, _tmp454_); _vala_gir_parser_parameter_info_unref0 (_tmp454_); } _tmp455_ = s; if (VALA_IS_CALLABLE (_tmp455_)) { ValaSymbol* _tmp456_; ValaDataType* _tmp457_; _tmp456_ = s; _tmp457_ = return_type; vala_callable_set_return_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp456_, VALA_TYPE_CALLABLE, ValaCallable), _tmp457_); } _vala_code_node_unref0 (return_type); _vala_iterable_unref0 (parameters); _vala_code_node_unref0 (s); } static void vala_gir_parser_find_parent (ValaGirParser* self, const gchar* cname, ValaGirParserNode* current, ValaGirParserNode* * best, gint* match) { ValaGirParserNode* old_best = NULL; ValaGirParserNode* _tmp0_; ValaSymbol* _tmp1_; ValaGirParserNode* _tmp21_; gint current_match = 0; gchar* _tmp22_; gchar* _tmp23_; gint _tmp24_; gint _tmp25_; gint _tmp26_; g_return_if_fail (self != NULL); g_return_if_fail (cname != NULL); g_return_if_fail (current != NULL); g_return_if_fail (*best != NULL); _tmp0_ = _vala_gir_parser_node_ref0 (*best); old_best = _tmp0_; _tmp1_ = current->symbol; if (VALA_IS_NAMESPACE (_tmp1_)) { { ValaArrayList* _child_list = NULL; ValaArrayList* _tmp2_; ValaArrayList* _tmp3_; gint _child_size = 0; ValaArrayList* _tmp4_; gint _tmp5_; gint _tmp6_; gint _child_index = 0; _tmp2_ = current->members; _tmp3_ = _vala_iterable_ref0 (_tmp2_); _child_list = _tmp3_; _tmp4_ = _child_list; _tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_); _tmp6_ = _tmp5_; _child_size = _tmp6_; _child_index = -1; while (TRUE) { gint _tmp7_; gint _tmp8_; ValaGirParserNode* child = NULL; ValaArrayList* _tmp9_; gpointer _tmp10_; gboolean _tmp11_ = FALSE; gboolean _tmp12_ = FALSE; ValaGirParserNode* _tmp13_; ValaSymbol* _tmp14_; _child_index = _child_index + 1; _tmp7_ = _child_index; _tmp8_ = _child_size; if (!(_tmp7_ < _tmp8_)) { break; } _tmp9_ = _child_list; _tmp10_ = vala_list_get ((ValaList*) _tmp9_, _child_index); child = (ValaGirParserNode*) _tmp10_; _tmp13_ = child; _tmp14_ = _tmp13_->symbol; if (_tmp14_ == NULL) { _tmp12_ = TRUE; } else { ValaGirParserNode* _tmp15_; ValaSymbol* _tmp16_; _tmp15_ = child; _tmp16_ = _tmp15_->symbol; _tmp12_ = vala_gir_parser_is_container (_tmp16_); } if (_tmp12_) { ValaGirParserNode* _tmp17_; gchar* _tmp18_; gchar* _tmp19_; _tmp17_ = child; _tmp18_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp17_); _tmp19_ = _tmp18_; _tmp11_ = g_str_has_prefix (cname, _tmp19_); _g_free0 (_tmp19_); } else { _tmp11_ = FALSE; } if (_tmp11_) { ValaGirParserNode* _tmp20_; _tmp20_ = child; vala_gir_parser_find_parent (self, cname, _tmp20_, best, match); } _vala_gir_parser_node_unref0 (child); } _vala_iterable_unref0 (_child_list); } } _tmp21_ = old_best; if ((*best) != _tmp21_) { _vala_gir_parser_node_unref0 (old_best); return; } _tmp22_ = vala_gir_parser_node_get_lower_case_cprefix (current); _tmp23_ = _tmp22_; _tmp24_ = strlen (_tmp23_); _tmp25_ = _tmp24_; _tmp26_ = _tmp25_; _g_free0 (_tmp23_); current_match = _tmp26_; if (current_match > (*match)) { ValaGirParserNode* _tmp27_; *match = current_match; _tmp27_ = _vala_gir_parser_node_ref0 (current); _vala_gir_parser_node_unref0 (*best); *best = _tmp27_; } _vala_gir_parser_node_unref0 (old_best); } static gboolean vala_gir_parser_same_gir (ValaGirParser* self, ValaSymbol* gir_component, ValaSymbol* sym) { gchar* gir_name = NULL; ValaSourceReference* _tmp0_; ValaSourceReference* _tmp1_; ValaSourceFile* _tmp2_; ValaSourceFile* _tmp3_; const gchar* _tmp4_; const gchar* _tmp5_; gchar* _tmp6_; gchar* gir_version = NULL; ValaSourceReference* _tmp7_; ValaSourceReference* _tmp8_; ValaSourceFile* _tmp9_; ValaSourceFile* _tmp10_; const gchar* _tmp11_; const gchar* _tmp12_; gchar* _tmp13_; ValaSourceReference* _tmp14_; ValaSourceReference* _tmp15_; ValaSourceFile* _tmp16_; ValaSourceFile* _tmp17_; const gchar* _tmp18_; const gchar* _tmp19_; gchar* _tmp20_; gchar* _tmp21_; gboolean _tmp22_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (gir_component != NULL, FALSE); g_return_val_if_fail (sym != NULL, FALSE); _tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) gir_component); _tmp1_ = _tmp0_; _tmp2_ = vala_source_reference_get_file (_tmp1_); _tmp3_ = _tmp2_; _tmp4_ = vala_source_file_get_gir_namespace (_tmp3_); _tmp5_ = _tmp4_; _tmp6_ = g_strdup (_tmp5_); gir_name = _tmp6_; _tmp7_ = vala_code_node_get_source_reference ((ValaCodeNode*) gir_component); _tmp8_ = _tmp7_; _tmp9_ = vala_source_reference_get_file (_tmp8_); _tmp10_ = _tmp9_; _tmp11_ = vala_source_file_get_gir_version (_tmp10_); _tmp12_ = _tmp11_; _tmp13_ = g_strdup (_tmp12_); gir_version = _tmp13_; _tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym); _tmp15_ = _tmp14_; _tmp16_ = vala_source_reference_get_file (_tmp15_); _tmp17_ = _tmp16_; _tmp18_ = vala_source_file_get_filename (_tmp17_); _tmp19_ = _tmp18_; _tmp20_ = g_strdup_printf ("%s-%s", gir_name, gir_version); _tmp21_ = _tmp20_; _tmp22_ = string_contains (_tmp19_, _tmp21_); _g_free0 (_tmp21_); result = _tmp22_; _g_free0 (gir_version); _g_free0 (gir_name); return result; } static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaGirParserNode* ns, ValaGirParserNode* node) { gchar* ns_cprefix = NULL; gchar* _tmp0_; ValaMethod* method = NULL; ValaSymbol* _tmp1_; ValaMethod* _tmp2_; gchar* cname = NULL; gchar* _tmp3_; ValaParameter* first_param = NULL; ValaList* _tmp4_; gint _tmp5_; gint _tmp6_; gboolean _tmp12_ = FALSE; gboolean _tmp13_ = FALSE; ValaParameter* _tmp14_; gint match = 0; ValaGirParserNode* parent = NULL; ValaGirParserNode* _tmp73_; const gchar* _tmp74_; gchar* new_name = NULL; ValaMethod* _tmp75_; const gchar* _tmp76_; const gchar* _tmp77_; ValaGirParserNode* _tmp78_; gchar* _tmp79_; gchar* _tmp80_; gint _tmp81_; gint _tmp82_; const gchar* _tmp83_; gint _tmp84_; gint _tmp85_; gchar* _tmp86_; gchar* _tmp87_; gboolean _tmp88_ = FALSE; ValaMethod* _tmp89_; ValaGirParserNode* _tmp90_; ValaSymbol* _tmp91_; g_return_if_fail (self != NULL); g_return_if_fail (ns != NULL); g_return_if_fail (node != NULL); _tmp0_ = vala_gir_parser_node_get_lower_case_cprefix (ns); ns_cprefix = _tmp0_; _tmp1_ = node->symbol; _tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_METHOD, ValaMethod)); method = _tmp2_; _tmp3_ = vala_gir_parser_node_get_cname (node); cname = _tmp3_; first_param = NULL; _tmp4_ = node->parameters; _tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_); _tmp6_ = _tmp5_; if (_tmp6_ > 0) { ValaList* _tmp7_; gpointer _tmp8_; ValaGirParserParameterInfo* _tmp9_; ValaParameter* _tmp10_; ValaParameter* _tmp11_; _tmp7_ = node->parameters; _tmp8_ = vala_list_get (_tmp7_, 0); _tmp9_ = (ValaGirParserParameterInfo*) _tmp8_; _tmp10_ = _tmp9_->param; _tmp11_ = _vala_code_node_ref0 (_tmp10_); _vala_code_node_unref0 (first_param); first_param = _tmp11_; _vala_gir_parser_parameter_info_unref0 (_tmp9_); } _tmp14_ = first_param; if (_tmp14_ != NULL) { ValaParameter* _tmp15_; ValaParameterDirection _tmp16_; ValaParameterDirection _tmp17_; _tmp15_ = first_param; _tmp16_ = vala_parameter_get_direction (_tmp15_); _tmp17_ = _tmp16_; _tmp13_ = _tmp17_ == VALA_PARAMETER_DIRECTION_IN; } else { _tmp13_ = FALSE; } if (_tmp13_) { ValaParameter* _tmp18_; ValaDataType* _tmp19_; ValaDataType* _tmp20_; _tmp18_ = first_param; _tmp19_ = vala_variable_get_variable_type ((ValaVariable*) _tmp18_); _tmp20_ = _tmp19_; _tmp12_ = VALA_IS_UNRESOLVED_TYPE (_tmp20_); } else { _tmp12_ = FALSE; } if (_tmp12_) { ValaUnresolvedSymbol* sym = NULL; ValaParameter* _tmp21_; ValaDataType* _tmp22_; ValaDataType* _tmp23_; ValaUnresolvedSymbol* _tmp24_; ValaUnresolvedSymbol* _tmp25_; ValaUnresolvedSymbol* _tmp26_; ValaGirParserNode* parent = NULL; ValaUnresolvedSymbol* _tmp27_; ValaGirParserNode* _tmp28_; gboolean _tmp29_ = FALSE; gboolean _tmp30_ = FALSE; gboolean _tmp31_ = FALSE; gboolean _tmp32_ = FALSE; ValaGirParserNode* _tmp33_; _tmp21_ = first_param; _tmp22_ = vala_variable_get_variable_type ((ValaVariable*) _tmp21_); _tmp23_ = _tmp22_; _tmp24_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp25_ = _tmp24_; _tmp26_ = _vala_code_node_ref0 (_tmp25_); sym = _tmp26_; _tmp27_ = sym; _tmp28_ = vala_gir_parser_resolve_node (self, ns, _tmp27_, FALSE); parent = _tmp28_; _tmp33_ = parent; if (_tmp33_ != NULL) { ValaMethod* _tmp34_; ValaGirParserNode* _tmp35_; ValaSymbol* _tmp36_; _tmp34_ = method; _tmp35_ = parent; _tmp36_ = _tmp35_->symbol; _tmp32_ = vala_gir_parser_same_gir (self, (ValaSymbol*) _tmp34_, _tmp36_); } else { _tmp32_ = FALSE; } if (_tmp32_) { ValaGirParserNode* _tmp37_; ValaGirParserNode* _tmp38_; _tmp37_ = parent; _tmp38_ = _tmp37_->parent; _tmp31_ = _tmp38_ == ns; } else { _tmp31_ = FALSE; } if (_tmp31_) { ValaGirParserNode* _tmp39_; ValaSymbol* _tmp40_; _tmp39_ = parent; _tmp40_ = _tmp39_->symbol; _tmp30_ = vala_gir_parser_is_container (_tmp40_); } else { _tmp30_ = FALSE; } if (_tmp30_) { const gchar* _tmp41_; ValaGirParserNode* _tmp42_; gchar* _tmp43_; gchar* _tmp44_; _tmp41_ = cname; _tmp42_ = parent; _tmp43_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp42_); _tmp44_ = _tmp43_; _tmp29_ = g_str_has_prefix (_tmp41_, _tmp44_); _g_free0 (_tmp44_); } else { _tmp29_ = FALSE; } if (_tmp29_) { gchar* new_name = NULL; ValaMethod* _tmp45_; const gchar* _tmp46_; const gchar* _tmp47_; ValaGirParserNode* _tmp48_; gchar* _tmp49_; gchar* _tmp50_; gint _tmp51_; gint _tmp52_; const gchar* _tmp53_; gint _tmp54_; gint _tmp55_; gchar* _tmp56_; gchar* _tmp57_; ValaGirParserNode* _tmp58_; const gchar* _tmp59_; ValaGirParserNode* _tmp60_; ValaGirParserNode* _tmp61_; gboolean _tmp62_; _tmp45_ = method; _tmp46_ = vala_symbol_get_name ((ValaSymbol*) _tmp45_); _tmp47_ = _tmp46_; _tmp48_ = parent; _tmp49_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp48_); _tmp50_ = _tmp49_; _tmp51_ = strlen (_tmp50_); _tmp52_ = _tmp51_; _tmp53_ = ns_cprefix; _tmp54_ = strlen (_tmp53_); _tmp55_ = _tmp54_; _tmp56_ = string_substring (_tmp47_, (glong) (_tmp52_ - _tmp55_), (glong) -1); _tmp57_ = _tmp56_; _g_free0 (_tmp50_); new_name = _tmp57_; _tmp58_ = parent; _tmp59_ = new_name; _tmp60_ = vala_gir_parser_node_lookup (_tmp58_, _tmp59_, FALSE, NULL); _tmp61_ = _tmp60_; _tmp62_ = _tmp61_ == NULL; _vala_gir_parser_node_unref0 (_tmp61_); if (_tmp62_) { const gchar* _tmp63_; gchar* _tmp64_; ValaList* _tmp65_; gpointer _tmp66_; ValaGirParserParameterInfo* _tmp67_; gint _tmp68_; ValaMethod* _tmp69_; const gchar* _tmp70_; ValaMethod* _tmp71_; ValaGirParserNode* _tmp72_; vala_gir_parser_node_remove_member (ns, node); _tmp63_ = new_name; _tmp64_ = g_strdup (_tmp63_); _g_free0 (node->name); node->name = _tmp64_; _tmp65_ = node->parameters; _tmp66_ = vala_list_remove_at (_tmp65_, 0); _tmp67_ = (ValaGirParserParameterInfo*) _tmp66_; _vala_gir_parser_parameter_info_unref0 (_tmp67_); _tmp68_ = node->return_array_length_idx; node->return_array_length_idx = _tmp68_ - 1; _tmp69_ = method; _tmp70_ = new_name; vala_symbol_set_name ((ValaSymbol*) _tmp69_, _tmp70_); _tmp71_ = method; vala_method_set_binding (_tmp71_, VALA_MEMBER_BINDING_INSTANCE); _tmp72_ = parent; vala_gir_parser_node_add_member (_tmp72_, node); } _g_free0 (new_name); _vala_gir_parser_node_unref0 (parent); _vala_code_node_unref0 (sym); _vala_code_node_unref0 (first_param); _g_free0 (cname); _vala_code_node_unref0 (method); _g_free0 (ns_cprefix); return; } _vala_gir_parser_node_unref0 (parent); _vala_code_node_unref0 (sym); } match = 0; _tmp73_ = _vala_gir_parser_node_ref0 (ns); parent = _tmp73_; _tmp74_ = cname; vala_gir_parser_find_parent (self, _tmp74_, ns, &parent, &match); _tmp75_ = method; _tmp76_ = vala_symbol_get_name ((ValaSymbol*) _tmp75_); _tmp77_ = _tmp76_; _tmp78_ = parent; _tmp79_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp78_); _tmp80_ = _tmp79_; _tmp81_ = strlen (_tmp80_); _tmp82_ = _tmp81_; _tmp83_ = ns_cprefix; _tmp84_ = strlen (_tmp83_); _tmp85_ = _tmp84_; _tmp86_ = string_substring (_tmp77_, (glong) (_tmp82_ - _tmp85_), (glong) -1); _tmp87_ = _tmp86_; _g_free0 (_tmp80_); new_name = _tmp87_; _tmp89_ = method; _tmp90_ = parent; _tmp91_ = _tmp90_->symbol; if (vala_gir_parser_same_gir (self, (ValaSymbol*) _tmp89_, _tmp91_)) { ValaGirParserNode* _tmp92_; const gchar* _tmp93_; ValaGirParserNode* _tmp94_; ValaGirParserNode* _tmp95_; _tmp92_ = parent; _tmp93_ = new_name; _tmp94_ = vala_gir_parser_node_lookup (_tmp92_, _tmp93_, FALSE, NULL); _tmp95_ = _tmp94_; _tmp88_ = _tmp95_ == NULL; _vala_gir_parser_node_unref0 (_tmp95_); } else { _tmp88_ = FALSE; } if (_tmp88_) { const gchar* _tmp96_; gchar* _tmp97_; ValaMethod* _tmp98_; const gchar* _tmp99_; ValaGirParserNode* _tmp100_; vala_gir_parser_node_remove_member (ns, node); _tmp96_ = new_name; _tmp97_ = g_strdup (_tmp96_); _g_free0 (node->name); node->name = _tmp97_; _tmp98_ = method; _tmp99_ = new_name; vala_symbol_set_name ((ValaSymbol*) _tmp98_, _tmp99_); _tmp100_ = parent; vala_gir_parser_node_add_member (_tmp100_, node); } _g_free0 (new_name); _vala_gir_parser_node_unref0 (parent); _vala_code_node_unref0 (first_param); _g_free0 (cname); _vala_code_node_unref0 (method); _g_free0 (ns_cprefix); } static void vala_gir_parser_process_virtual_method_field (ValaGirParser* self, ValaGirParserNode* node, ValaDelegate* d, ValaUnresolvedSymbol* gtype_struct_for) { ValaGirParserNode* gtype_node = NULL; ValaGirParserNode* _tmp0_; ValaGirParserNode* _tmp1_; gboolean _tmp2_ = FALSE; ValaGirParserNode* _tmp3_; ValaArrayList* nodes = NULL; ValaGirParserNode* _tmp14_; const gchar* _tmp15_; const gchar* _tmp16_; ValaArrayList* _tmp17_; ValaArrayList* _tmp18_; g_return_if_fail (self != NULL); g_return_if_fail (node != NULL); g_return_if_fail (d != NULL); g_return_if_fail (gtype_struct_for != NULL); _tmp0_ = node->parent; _tmp1_ = vala_gir_parser_resolve_node (self, _tmp0_, gtype_struct_for, FALSE); gtype_node = _tmp1_; _tmp3_ = gtype_node; if (_tmp3_ == NULL) { _tmp2_ = TRUE; } else { ValaGirParserNode* _tmp4_; ValaSymbol* _tmp5_; _tmp4_ = gtype_node; _tmp5_ = _tmp4_->symbol; _tmp2_ = !VALA_IS_OBJECT_TYPE_SYMBOL (_tmp5_); } if (_tmp2_) { ValaSourceReference* _tmp6_; ValaSourceReference* _tmp7_; gchar* _tmp8_; gchar* _tmp9_; gchar* _tmp10_; gchar* _tmp11_; gchar* _tmp12_; gchar* _tmp13_; _tmp6_ = vala_code_node_get_source_reference ((ValaCodeNode*) gtype_struct_for); _tmp7_ = _tmp6_; _tmp8_ = vala_code_node_to_string ((ValaCodeNode*) gtype_struct_for); _tmp9_ = _tmp8_; _tmp10_ = vala_gir_parser_node_to_string (node); _tmp11_ = _tmp10_; _tmp12_ = g_strdup_printf ("Unknown symbol `%s' for virtual method field `%s'", _tmp9_, _tmp11_); _tmp13_ = _tmp12_; vala_report_error (_tmp7_, _tmp13_); _g_free0 (_tmp13_); _g_free0 (_tmp11_); _g_free0 (_tmp9_); } _tmp14_ = gtype_node; _tmp15_ = vala_symbol_get_name ((ValaSymbol*) d); _tmp16_ = _tmp15_; _tmp17_ = vala_gir_parser_node_lookup_all (_tmp14_, _tmp16_); nodes = _tmp17_; _tmp18_ = nodes; if (_tmp18_ == NULL) { _vala_iterable_unref0 (nodes); _vala_gir_parser_node_unref0 (gtype_node); return; } { ValaArrayList* _n_list = NULL; ValaArrayList* _tmp19_; ValaArrayList* _tmp20_; gint _n_size = 0; ValaArrayList* _tmp21_; gint _tmp22_; gint _tmp23_; gint _n_index = 0; _tmp19_ = nodes; _tmp20_ = _vala_iterable_ref0 (_tmp19_); _n_list = _tmp20_; _tmp21_ = _n_list; _tmp22_ = vala_collection_get_size ((ValaCollection*) _tmp21_); _tmp23_ = _tmp22_; _n_size = _tmp23_; _n_index = -1; while (TRUE) { gint _tmp24_; gint _tmp25_; ValaGirParserNode* n = NULL; ValaArrayList* _tmp26_; gpointer _tmp27_; ValaGirParserNode* _tmp28_; _n_index = _n_index + 1; _tmp24_ = _n_index; _tmp25_ = _n_size; if (!(_tmp24_ < _tmp25_)) { break; } _tmp26_ = _n_list; _tmp27_ = vala_list_get ((ValaList*) _tmp26_, _n_index); n = (ValaGirParserNode*) _tmp27_; _tmp28_ = n; if (node != _tmp28_) { ValaGirParserNode* _tmp29_; _tmp29_ = n; vala_gir_parser_node_process (_tmp29_, self); } _vala_gir_parser_node_unref0 (n); } _vala_iterable_unref0 (_n_list); } { ValaArrayList* _n_list = NULL; ValaArrayList* _tmp30_; ValaArrayList* _tmp31_; gint _n_size = 0; ValaArrayList* _tmp32_; gint _tmp33_; gint _tmp34_; gint _n_index = 0; _tmp30_ = nodes; _tmp31_ = _vala_iterable_ref0 (_tmp30_); _n_list = _tmp31_; _tmp32_ = _n_list; _tmp33_ = vala_collection_get_size ((ValaCollection*) _tmp32_); _tmp34_ = _tmp33_; _n_size = _tmp34_; _n_index = -1; while (TRUE) { gint _tmp35_; gint _tmp36_; ValaGirParserNode* n = NULL; ValaArrayList* _tmp37_; gpointer _tmp38_; ValaGirParserNode* _tmp39_; ValaSymbol* sym = NULL; ValaGirParserNode* _tmp40_; ValaSymbol* _tmp41_; ValaSymbol* _tmp42_; ValaSymbol* _tmp43_; _n_index = _n_index + 1; _tmp35_ = _n_index; _tmp36_ = _n_size; if (!(_tmp35_ < _tmp36_)) { break; } _tmp37_ = _n_list; _tmp38_ = vala_list_get ((ValaList*) _tmp37_, _n_index); n = (ValaGirParserNode*) _tmp38_; _tmp39_ = n; if (_tmp39_->merged) { _vala_gir_parser_node_unref0 (n); continue; } _tmp40_ = n; _tmp41_ = _tmp40_->symbol; _tmp42_ = _vala_code_node_ref0 (_tmp41_); sym = _tmp42_; _tmp43_ = sym; if (VALA_IS_SIGNAL (_tmp43_)) { ValaSignal* sig = NULL; ValaSymbol* _tmp44_; ValaSignal* _tmp45_; ValaSignal* _tmp46_; ValaSignal* _tmp47_; _tmp44_ = sym; _tmp45_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, VALA_TYPE_SIGNAL, ValaSignal)); sig = _tmp45_; _tmp46_ = sig; vala_signal_set_is_virtual (_tmp46_, TRUE); _tmp47_ = sig; vala_gir_parser_assume_parameter_names (self, _tmp47_, (ValaSymbol*) d, TRUE); _vala_code_node_unref0 (sig); } else { ValaSymbol* _tmp48_; _tmp48_ = sym; if (VALA_IS_PROPERTY (_tmp48_)) { ValaProperty* prop = NULL; ValaSymbol* _tmp49_; ValaProperty* _tmp50_; ValaProperty* _tmp51_; _tmp49_ = sym; _tmp50_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, VALA_TYPE_PROPERTY, ValaProperty)); prop = _tmp50_; _tmp51_ = prop; vala_property_set_is_virtual (_tmp51_, TRUE); _vala_code_node_unref0 (prop); } } _vala_code_node_unref0 (sym); _vala_gir_parser_node_unref0 (n); } _vala_iterable_unref0 (_n_list); } _vala_iterable_unref0 (nodes); _vala_gir_parser_node_unref0 (gtype_node); } static void vala_gir_parser_process_async_method (ValaGirParser* self, ValaGirParserNode* node) { ValaMethod* m = NULL; ValaSymbol* _tmp0_; ValaMethod* _tmp1_; gboolean requires_pointer = FALSE; gchar* finish_method_base = NULL; ValaMethod* _tmp28_; const gchar* _tmp29_; const gchar* _tmp30_; ValaGirParserNode* finish_method_node = NULL; ValaGirParserNode* _tmp51_; const gchar* _tmp52_; gchar* _tmp53_; gchar* _tmp54_; ValaGirParserNode* _tmp55_; ValaGirParserNode* _tmp56_; ValaGirParserNode* _tmp57_; ValaMethod* method = NULL; ValaMethod* _tmp78_; ValaMethod* _tmp79_; gboolean _tmp80_ = FALSE; ValaGirParserNode* _tmp81_; g_return_if_fail (self != NULL); g_return_if_fail (node != NULL); _tmp0_ = node->symbol; _tmp1_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, VALA_TYPE_METHOD, ValaMethod)); m = _tmp1_; requires_pointer = FALSE; { ValaList* _param_list = NULL; ValaMethod* _tmp2_; ValaList* _tmp3_; ValaList* _tmp4_; gint _param_size = 0; ValaList* _tmp5_; gint _tmp6_; gint _tmp7_; gint _param_index = 0; _tmp2_ = m; _tmp3_ = vala_callable_get_parameters ((ValaCallable*) _tmp2_); _tmp4_ = _vala_iterable_ref0 (_tmp3_); _param_list = _tmp4_; _tmp5_ = _param_list; _tmp6_ = vala_collection_get_size ((ValaCollection*) _tmp5_); _tmp7_ = _tmp6_; _param_size = _tmp7_; _param_index = -1; while (TRUE) { gint _tmp8_; gint _tmp9_; ValaParameter* param = NULL; ValaList* _tmp10_; gpointer _tmp11_; ValaParameter* _tmp12_; ValaParameterDirection _tmp13_; ValaParameterDirection _tmp14_; _param_index = _param_index + 1; _tmp8_ = _param_index; _tmp9_ = _param_size; if (!(_tmp8_ < _tmp9_)) { break; } _tmp10_ = _param_list; _tmp11_ = vala_list_get (_tmp10_, _param_index); param = (ValaParameter*) _tmp11_; _tmp12_ = param; _tmp13_ = vala_parameter_get_direction (_tmp12_); _tmp14_ = _tmp13_; if (_tmp14_ == VALA_PARAMETER_DIRECTION_IN) { requires_pointer = TRUE; } else { if (requires_pointer) { ValaParameter* _tmp15_; ValaParameter* _tmp16_; ValaDataType* _tmp17_; ValaDataType* _tmp18_; ValaParameter* _tmp19_; ValaParameter* _tmp20_; ValaDataType* _tmp21_; ValaDataType* _tmp22_; ValaPointerType* _tmp23_; ValaPointerType* _tmp24_; ValaParameter* _tmp25_; ValaSourceReference* _tmp26_; ValaSourceReference* _tmp27_; _tmp15_ = param; vala_parameter_set_direction (_tmp15_, VALA_PARAMETER_DIRECTION_IN); _tmp16_ = param; _tmp17_ = vala_variable_get_variable_type ((ValaVariable*) _tmp16_); _tmp18_ = _tmp17_; vala_data_type_set_nullable (_tmp18_, FALSE); _tmp19_ = param; _tmp20_ = param; _tmp21_ = vala_variable_get_variable_type ((ValaVariable*) _tmp20_); _tmp22_ = _tmp21_; _tmp23_ = vala_pointer_type_new (_tmp22_, NULL); _tmp24_ = _tmp23_; vala_variable_set_variable_type ((ValaVariable*) _tmp19_, (ValaDataType*) _tmp24_); _vala_code_node_unref0 (_tmp24_); _tmp25_ = param; _tmp26_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp25_); _tmp27_ = _tmp26_; vala_report_warning (_tmp27_, "Synchronous out-parameters are not supported in async methods"); } } _vala_code_node_unref0 (param); } _vala_iterable_unref0 (_param_list); } _tmp28_ = m; _tmp29_ = vala_symbol_get_name ((ValaSymbol*) _tmp28_); _tmp30_ = _tmp29_; if (_tmp30_ == NULL) { ValaMethod* _tmp31_; gchar* _tmp32_; _tmp31_ = m; _vala_assert (VALA_IS_CREATION_METHOD (_tmp31_), "m is CreationMethod"); _tmp32_ = g_strdup ("new"); _g_free0 (finish_method_base); finish_method_base = _tmp32_; } else { ValaMethod* _tmp33_; const gchar* _tmp34_; const gchar* _tmp35_; _tmp33_ = m; _tmp34_ = vala_symbol_get_name ((ValaSymbol*) _tmp33_); _tmp35_ = _tmp34_; if (g_str_has_suffix (_tmp35_, "_async")) { ValaMethod* _tmp36_; const gchar* _tmp37_; const gchar* _tmp38_; ValaMethod* _tmp39_; const gchar* _tmp40_; const gchar* _tmp41_; gint _tmp42_; gint _tmp43_; gint _tmp44_; gint _tmp45_; gchar* _tmp46_; _tmp36_ = m; _tmp37_ = vala_symbol_get_name ((ValaSymbol*) _tmp36_); _tmp38_ = _tmp37_; _tmp39_ = m; _tmp40_ = vala_symbol_get_name ((ValaSymbol*) _tmp39_); _tmp41_ = _tmp40_; _tmp42_ = strlen (_tmp41_); _tmp43_ = _tmp42_; _tmp44_ = strlen ("_async"); _tmp45_ = _tmp44_; _tmp46_ = string_substring (_tmp38_, (glong) 0, (glong) (_tmp43_ - _tmp45_)); _g_free0 (finish_method_base); finish_method_base = _tmp46_; } else { ValaMethod* _tmp47_; const gchar* _tmp48_; const gchar* _tmp49_; gchar* _tmp50_; _tmp47_ = m; _tmp48_ = vala_symbol_get_name ((ValaSymbol*) _tmp47_); _tmp49_ = _tmp48_; _tmp50_ = g_strdup (_tmp49_); _g_free0 (finish_method_base); finish_method_base = _tmp50_; } } _tmp51_ = node->parent; _tmp52_ = finish_method_base; _tmp53_ = g_strconcat (_tmp52_, "_finish", NULL); _tmp54_ = _tmp53_; _tmp55_ = vala_gir_parser_node_lookup (_tmp51_, _tmp54_, FALSE, NULL); _tmp56_ = _tmp55_; _g_free0 (_tmp54_); finish_method_node = _tmp56_; _tmp57_ = finish_method_node; if (_tmp57_ == NULL) { gchar* method_cname = NULL; gchar* _tmp58_; _tmp58_ = vala_gir_parser_node_get_finish_cname (node); method_cname = _tmp58_; { ValaArrayList* _n_list = NULL; ValaGirParserNode* _tmp59_; ValaArrayList* _tmp60_; ValaArrayList* _tmp61_; gint _n_size = 0; ValaArrayList* _tmp62_; gint _tmp63_; gint _tmp64_; gint _n_index = 0; _tmp59_ = node->parent; _tmp60_ = _tmp59_->members; _tmp61_ = _vala_iterable_ref0 (_tmp60_); _n_list = _tmp61_; _tmp62_ = _n_list; _tmp63_ = vala_collection_get_size ((ValaCollection*) _tmp62_); _tmp64_ = _tmp63_; _n_size = _tmp64_; _n_index = -1; while (TRUE) { gint _tmp65_; gint _tmp66_; ValaGirParserNode* n = NULL; ValaArrayList* _tmp67_; gpointer _tmp68_; gboolean _tmp69_ = FALSE; ValaGirParserNode* _tmp70_; ValaSymbol* _tmp71_; _n_index = _n_index + 1; _tmp65_ = _n_index; _tmp66_ = _n_size; if (!(_tmp65_ < _tmp66_)) { break; } _tmp67_ = _n_list; _tmp68_ = vala_list_get ((ValaList*) _tmp67_, _n_index); n = (ValaGirParserNode*) _tmp68_; _tmp70_ = n; _tmp71_ = _tmp70_->symbol; if (VALA_IS_METHOD (_tmp71_)) { ValaGirParserNode* _tmp72_; gchar* _tmp73_; gchar* _tmp74_; const gchar* _tmp75_; _tmp72_ = n; _tmp73_ = vala_gir_parser_node_get_cname (_tmp72_); _tmp74_ = _tmp73_; _tmp75_ = method_cname; _tmp69_ = g_strcmp0 (_tmp74_, _tmp75_) == 0; _g_free0 (_tmp74_); } else { _tmp69_ = FALSE; } if (_tmp69_) { ValaGirParserNode* _tmp76_; ValaGirParserNode* _tmp77_; _tmp76_ = n; _tmp77_ = _vala_gir_parser_node_ref0 (_tmp76_); _vala_gir_parser_node_unref0 (finish_method_node); finish_method_node = _tmp77_; _vala_gir_parser_node_unref0 (n); break; } _vala_gir_parser_node_unref0 (n); } _vala_iterable_unref0 (_n_list); } _g_free0 (method_cname); } _tmp78_ = m; _tmp79_ = _vala_code_node_ref0 (_tmp78_); method = _tmp79_; _tmp81_ = finish_method_node; if (_tmp81_ != NULL) { ValaGirParserNode* _tmp82_; ValaSymbol* _tmp83_; _tmp82_ = finish_method_node; _tmp83_ = _tmp82_->symbol; _tmp80_ = VALA_IS_METHOD (_tmp83_); } else { _tmp80_ = FALSE; } if (_tmp80_) { ValaGirParserNode* _tmp84_; ValaMethod* finish_method = NULL; ValaGirParserNode* _tmp85_; ValaSymbol* _tmp86_; ValaMethod* _tmp87_; ValaMethod* _tmp88_; ValaMethod* _tmp158_; ValaMethod* _tmp159_; ValaArrayList* error_types = NULL; GEqualFunc _tmp192_; ValaArrayList* _tmp193_; ValaMethod* _tmp194_; ValaArrayList* _tmp195_; ValaMethod* _tmp196_; ValaSourceReference* _tmp197_; ValaSourceReference* _tmp198_; ValaGirParserNode* _tmp210_; ValaGirParserNode* _tmp211_; _tmp84_ = finish_method_node; vala_gir_parser_node_process (_tmp84_, self); _tmp85_ = finish_method_node; _tmp86_ = _tmp85_->symbol; _tmp87_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, VALA_TYPE_METHOD, ValaMethod)); finish_method = _tmp87_; _tmp88_ = finish_method; if (VALA_IS_CREATION_METHOD (_tmp88_)) { ValaMethod* _tmp89_; const gchar* _tmp90_; const gchar* _tmp91_; ValaMethod* _tmp92_; ValaSourceReference* _tmp93_; ValaSourceReference* _tmp94_; ValaCreationMethod* _tmp95_; ValaMethod* _tmp96_; ValaMethod* _tmp97_; ValaSymbolAccessibility _tmp98_; ValaSymbolAccessibility _tmp99_; ValaMethod* _tmp100_; ValaMethod* _tmp101_; ValaMethod* _tmp102_; gboolean _tmp103_; gboolean _tmp104_; ValaMethod* _tmp105_; GList* _tmp106_; ValaMethod* _tmp111_; gchar* _tmp112_; gchar* _tmp113_; const gchar* _tmp114_; ValaMethod* _tmp137_; ValaSymbol* _tmp138_; _tmp89_ = finish_method; _tmp90_ = vala_creation_method_get_class_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp89_, VALA_TYPE_CREATION_METHOD, ValaCreationMethod)); _tmp91_ = _tmp90_; _tmp92_ = m; _tmp93_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp92_); _tmp94_ = _tmp93_; _tmp95_ = vala_creation_method_new (_tmp91_, NULL, _tmp94_, NULL); _vala_code_node_unref0 (method); method = (ValaMethod*) _tmp95_; _tmp96_ = method; _tmp97_ = m; _tmp98_ = vala_symbol_get_access ((ValaSymbol*) _tmp97_); _tmp99_ = _tmp98_; vala_symbol_set_access ((ValaSymbol*) _tmp96_, _tmp99_); _tmp100_ = method; vala_method_set_coroutine (_tmp100_, TRUE); _tmp101_ = method; _tmp102_ = finish_method; _tmp103_ = vala_method_get_has_construct_function (_tmp102_); _tmp104_ = _tmp103_; vala_method_set_has_construct_function (_tmp101_, _tmp104_); _tmp105_ = m; _tmp106_ = ((ValaCodeNode*) _tmp105_)->attributes; { GList* a_collection = NULL; GList* a_it = NULL; a_collection = _tmp106_; for (a_it = a_collection; a_it != NULL; a_it = a_it->next) { ValaAttribute* _tmp107_; ValaAttribute* a = NULL; _tmp107_ = _vala_code_node_ref0 ((ValaAttribute*) a_it->data); a = _tmp107_; { ValaMethod* _tmp108_; ValaAttribute* _tmp109_; ValaAttribute* _tmp110_; _tmp108_ = method; _tmp109_ = a; _tmp110_ = _vala_code_node_ref0 (_tmp109_); ((ValaCodeNode*) _tmp108_)->attributes = g_list_append (((ValaCodeNode*) _tmp108_)->attributes, _tmp110_); _vala_code_node_unref0 (a); } } } _tmp111_ = method; _tmp112_ = vala_gir_parser_node_get_cname (node); _tmp113_ = _tmp112_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp111_, "CCode", "cname", _tmp113_, NULL); _g_free0 (_tmp113_); _tmp114_ = finish_method_base; if (g_strcmp0 (_tmp114_, "new") == 0) { ValaMethod* _tmp115_; _tmp115_ = method; vala_symbol_set_name ((ValaSymbol*) _tmp115_, NULL); } else { const gchar* _tmp116_; _tmp116_ = finish_method_base; if (g_str_has_prefix (_tmp116_, "new_")) { ValaMethod* _tmp117_; ValaMethod* _tmp118_; const gchar* _tmp119_; const gchar* _tmp120_; gint _tmp121_; gint _tmp122_; gchar* _tmp123_; gchar* _tmp124_; _tmp117_ = method; _tmp118_ = m; _tmp119_ = vala_symbol_get_name ((ValaSymbol*) _tmp118_); _tmp120_ = _tmp119_; _tmp121_ = strlen ("new_"); _tmp122_ = _tmp121_; _tmp123_ = string_substring (_tmp120_, (glong) _tmp122_, (glong) -1); _tmp124_ = _tmp123_; vala_symbol_set_name ((ValaSymbol*) _tmp117_, _tmp124_); _g_free0 (_tmp124_); } } { ValaList* _param_list = NULL; ValaMethod* _tmp125_; ValaList* _tmp126_; ValaList* _tmp127_; gint _param_size = 0; ValaList* _tmp128_; gint _tmp129_; gint _tmp130_; gint _param_index = 0; _tmp125_ = m; _tmp126_ = vala_callable_get_parameters ((ValaCallable*) _tmp125_); _tmp127_ = _vala_iterable_ref0 (_tmp126_); _param_list = _tmp127_; _tmp128_ = _param_list; _tmp129_ = vala_collection_get_size ((ValaCollection*) _tmp128_); _tmp130_ = _tmp129_; _param_size = _tmp130_; _param_index = -1; while (TRUE) { gint _tmp131_; gint _tmp132_; ValaParameter* param = NULL; ValaList* _tmp133_; gpointer _tmp134_; ValaMethod* _tmp135_; ValaParameter* _tmp136_; _param_index = _param_index + 1; _tmp131_ = _param_index; _tmp132_ = _param_size; if (!(_tmp131_ < _tmp132_)) { break; } _tmp133_ = _param_list; _tmp134_ = vala_list_get (_tmp133_, _param_index); param = (ValaParameter*) _tmp134_; _tmp135_ = method; _tmp136_ = param; vala_callable_add_parameter ((ValaCallable*) _tmp135_, _tmp136_); _vala_code_node_unref0 (param); } _vala_iterable_unref0 (_param_list); } _tmp137_ = method; _tmp138_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp137_); _vala_code_node_unref0 (node->symbol); node->symbol = _tmp138_; } else { ValaMethod* _tmp139_; ValaMethod* _tmp140_; ValaDataType* _tmp141_; ValaDataType* _tmp142_; ValaDataType* _tmp143_; ValaDataType* _tmp144_; ValaAttribute* a = NULL; ValaMethod* _tmp145_; ValaAttribute* _tmp146_; ValaAttribute* _tmp147_; gboolean _tmp148_ = FALSE; ValaAttribute* _tmp149_; gboolean _tmp153_ = FALSE; ValaAttribute* _tmp154_; _tmp139_ = method; _tmp140_ = finish_method; _tmp141_ = vala_callable_get_return_type ((ValaCallable*) _tmp140_); _tmp142_ = _tmp141_; _tmp143_ = vala_data_type_copy (_tmp142_); _tmp144_ = _tmp143_; vala_callable_set_return_type ((ValaCallable*) _tmp139_, _tmp144_); _vala_code_node_unref0 (_tmp144_); _tmp145_ = finish_method; _tmp146_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp145_, "CCode"); _tmp147_ = _vala_code_node_ref0 (_tmp146_); a = _tmp147_; _tmp149_ = a; if (_tmp149_ != NULL) { ValaAttribute* _tmp150_; _tmp150_ = a; _tmp148_ = vala_attribute_has_argument (_tmp150_, "array_length"); } else { _tmp148_ = FALSE; } if (_tmp148_) { ValaMethod* _tmp151_; ValaAttribute* _tmp152_; _tmp151_ = method; _tmp152_ = a; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp151_, "CCode", "array_length", vala_attribute_get_bool (_tmp152_, "array_length", FALSE), NULL); } _tmp154_ = a; if (_tmp154_ != NULL) { ValaAttribute* _tmp155_; _tmp155_ = a; _tmp153_ = vala_attribute_has_argument (_tmp155_, "array_null_terminated"); } else { _tmp153_ = FALSE; } if (_tmp153_) { ValaMethod* _tmp156_; ValaAttribute* _tmp157_; _tmp156_ = method; _tmp157_ = a; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp156_, "CCode", "array_null_terminated", vala_attribute_get_bool (_tmp157_, "array_null_terminated", FALSE), NULL); } _vala_code_node_unref0 (a); } _tmp158_ = method; _tmp159_ = finish_method; vala_code_node_copy_attribute_double ((ValaCodeNode*) _tmp158_, (ValaCodeNode*) _tmp159_, "CCode", "async_result_pos"); { ValaList* _param_list = NULL; ValaMethod* _tmp160_; ValaList* _tmp161_; ValaList* _tmp162_; gint _param_size = 0; ValaList* _tmp163_; gint _tmp164_; gint _tmp165_; gint _param_index = 0; _tmp160_ = finish_method; _tmp161_ = vala_callable_get_parameters ((ValaCallable*) _tmp160_); _tmp162_ = _vala_iterable_ref0 (_tmp161_); _param_list = _tmp162_; _tmp163_ = _param_list; _tmp164_ = vala_collection_get_size ((ValaCollection*) _tmp163_); _tmp165_ = _tmp164_; _param_size = _tmp165_; _param_index = -1; while (TRUE) { gint _tmp166_; gint _tmp167_; ValaParameter* param = NULL; ValaList* _tmp168_; gpointer _tmp169_; ValaParameter* _tmp170_; ValaParameterDirection _tmp171_; ValaParameterDirection _tmp172_; _param_index = _param_index + 1; _tmp166_ = _param_index; _tmp167_ = _param_size; if (!(_tmp166_ < _tmp167_)) { break; } _tmp168_ = _param_list; _tmp169_ = vala_list_get (_tmp168_, _param_index); param = (ValaParameter*) _tmp169_; _tmp170_ = param; _tmp171_ = vala_parameter_get_direction (_tmp170_); _tmp172_ = _tmp171_; if (_tmp172_ == VALA_PARAMETER_DIRECTION_OUT) { ValaParameter* async_param = NULL; ValaParameter* _tmp173_; ValaParameter* _tmp174_; ValaMethod* _tmp175_; ValaScope* _tmp176_; ValaScope* _tmp177_; ValaParameter* _tmp178_; const gchar* _tmp179_; const gchar* _tmp180_; ValaSymbol* _tmp181_; ValaSymbol* _tmp182_; gboolean _tmp183_; ValaMethod* _tmp190_; ValaParameter* _tmp191_; _tmp173_ = param; _tmp174_ = vala_parameter_copy (_tmp173_); async_param = _tmp174_; _tmp175_ = method; _tmp176_ = vala_symbol_get_scope ((ValaSymbol*) _tmp175_); _tmp177_ = _tmp176_; _tmp178_ = param; _tmp179_ = vala_symbol_get_name ((ValaSymbol*) _tmp178_); _tmp180_ = _tmp179_; _tmp181_ = vala_scope_lookup (_tmp177_, _tmp180_); _tmp182_ = _tmp181_; _tmp183_ = _tmp182_ != NULL; _vala_code_node_unref0 (_tmp182_); if (_tmp183_) { ValaParameter* _tmp184_; ValaParameter* _tmp185_; const gchar* _tmp186_; const gchar* _tmp187_; gchar* _tmp188_; gchar* _tmp189_; _tmp184_ = async_param; _tmp185_ = async_param; _tmp186_ = vala_symbol_get_name ((ValaSymbol*) _tmp185_); _tmp187_ = _tmp186_; _tmp188_ = g_strconcat (_tmp187_, "_out", NULL); _tmp189_ = _tmp188_; vala_symbol_set_name ((ValaSymbol*) _tmp185_, _tmp189_); _g_free0 (_tmp189_); } _tmp190_ = method; _tmp191_ = async_param; vala_callable_add_parameter ((ValaCallable*) _tmp190_, _tmp191_); _vala_code_node_unref0 (async_param); } _vala_code_node_unref0 (param); } _vala_iterable_unref0 (_param_list); } _tmp192_ = g_direct_equal; _tmp193_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp192_); error_types = _tmp193_; _tmp194_ = finish_method; _tmp195_ = error_types; _tmp196_ = method; _tmp197_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp196_); _tmp198_ = _tmp197_; vala_code_node_get_error_types ((ValaCodeNode*) _tmp194_, (ValaCollection*) _tmp195_, _tmp198_); { ValaArrayList* _error_type_list = NULL; ValaArrayList* _tmp199_; ValaArrayList* _tmp200_; gint _error_type_size = 0; ValaArrayList* _tmp201_; gint _tmp202_; gint _tmp203_; gint _error_type_index = 0; _tmp199_ = error_types; _tmp200_ = _vala_iterable_ref0 (_tmp199_); _error_type_list = _tmp200_; _tmp201_ = _error_type_list; _tmp202_ = vala_collection_get_size ((ValaCollection*) _tmp201_); _tmp203_ = _tmp202_; _error_type_size = _tmp203_; _error_type_index = -1; while (TRUE) { gint _tmp204_; gint _tmp205_; ValaDataType* error_type = NULL; ValaArrayList* _tmp206_; gpointer _tmp207_; ValaMethod* _tmp208_; ValaDataType* _tmp209_; _error_type_index = _error_type_index + 1; _tmp204_ = _error_type_index; _tmp205_ = _error_type_size; if (!(_tmp204_ < _tmp205_)) { break; } _tmp206_ = _error_type_list; _tmp207_ = vala_list_get ((ValaList*) _tmp206_, _error_type_index); error_type = (ValaDataType*) _tmp207_; _tmp208_ = method; _tmp209_ = error_type; vala_method_add_error_type (_tmp208_, _tmp209_); _vala_code_node_unref0 (error_type); } _vala_iterable_unref0 (_error_type_list); } _tmp210_ = finish_method_node; _tmp210_->processed = TRUE; _tmp211_ = finish_method_node; _tmp211_->merged = TRUE; _vala_iterable_unref0 (error_types); _vala_code_node_unref0 (finish_method); } _vala_code_node_unref0 (method); _vala_gir_parser_node_unref0 (finish_method_node); _g_free0 (finish_method_base); _vala_code_node_unref0 (m); } static guint vala_gir_parser_unresolved_symbol_hash (ValaUnresolvedSymbol* sym) { GString* builder = NULL; GString* _tmp0_; GString* _tmp6_; const gchar* _tmp7_; guint result = 0U; _tmp0_ = g_string_new (""); builder = _tmp0_; while (TRUE) { GString* _tmp1_; const gchar* _tmp2_; const gchar* _tmp3_; ValaUnresolvedSymbol* _tmp4_; ValaUnresolvedSymbol* _tmp5_; if (!(sym != NULL)) { break; } _tmp1_ = builder; _tmp2_ = vala_symbol_get_name ((ValaSymbol*) sym); _tmp3_ = _tmp2_; g_string_append (_tmp1_, _tmp3_); _tmp4_ = vala_unresolved_symbol_get_inner (sym); _tmp5_ = _tmp4_; sym = _tmp5_; } _tmp6_ = builder; _tmp7_ = _tmp6_->str; result = g_str_hash (_tmp7_); _g_string_free0 (builder); return result; } static gboolean vala_gir_parser_unresolved_symbol_equal (ValaUnresolvedSymbol* sym1, ValaUnresolvedSymbol* sym2) { gboolean result = FALSE; while (TRUE) { gboolean _tmp0_ = FALSE; const gchar* _tmp1_; const gchar* _tmp2_; const gchar* _tmp3_; const gchar* _tmp4_; ValaUnresolvedSymbol* _tmp5_; ValaUnresolvedSymbol* _tmp6_; ValaUnresolvedSymbol* _tmp7_; ValaUnresolvedSymbol* _tmp8_; if (!(sym1 != sym2)) { break; } if (sym1 == NULL) { _tmp0_ = TRUE; } else { _tmp0_ = sym2 == NULL; } if (_tmp0_) { result = FALSE; return result; } _tmp1_ = vala_symbol_get_name ((ValaSymbol*) sym1); _tmp2_ = _tmp1_; _tmp3_ = vala_symbol_get_name ((ValaSymbol*) sym2); _tmp4_ = _tmp3_; if (g_strcmp0 (_tmp2_, _tmp4_) != 0) { result = FALSE; return result; } _tmp5_ = vala_unresolved_symbol_get_inner (sym1); _tmp6_ = _tmp5_; sym1 = _tmp6_; _tmp7_ = vala_unresolved_symbol_get_inner (sym2); _tmp8_ = _tmp7_; sym2 = _tmp8_; } result = TRUE; return result; } static ValaGirParserNode* vala_gir_parser_base_interface_property (ValaGirParser* self, ValaGirParserNode* prop_node) { ValaClass* cl = NULL; ValaGirParserNode* _tmp0_; ValaSymbol* _tmp1_; ValaClass* _tmp2_; ValaClass* _tmp3_; ValaGirParserNode* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (prop_node != NULL, NULL); _tmp0_ = prop_node->parent; _tmp1_ = _tmp0_->symbol; _tmp2_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp1_) ? ((ValaClass*) _tmp1_) : NULL); cl = _tmp2_; _tmp3_ = cl; if (_tmp3_ == NULL) { result = NULL; _vala_code_node_unref0 (cl); return result; } { ValaList* _type_list = NULL; ValaClass* _tmp4_; ValaList* _tmp5_; ValaList* _tmp6_; gint _type_size = 0; ValaList* _tmp7_; gint _tmp8_; gint _tmp9_; gint _type_index = 0; _tmp4_ = cl; _tmp5_ = vala_class_get_base_types (_tmp4_); _tmp6_ = _vala_iterable_ref0 (_tmp5_); _type_list = _tmp6_; _tmp7_ = _type_list; _tmp8_ = vala_collection_get_size ((ValaCollection*) _tmp7_); _tmp9_ = _tmp8_; _type_size = _tmp9_; _type_index = -1; while (TRUE) { gint _tmp10_; gint _tmp11_; ValaDataType* type = NULL; ValaList* _tmp12_; gpointer _tmp13_; ValaDataType* _tmp14_; ValaGirParserNode* base_node = NULL; ValaGirParserNode* _tmp15_; ValaDataType* _tmp16_; ValaUnresolvedSymbol* _tmp17_; ValaUnresolvedSymbol* _tmp18_; ValaGirParserNode* _tmp19_; gboolean _tmp20_ = FALSE; ValaGirParserNode* _tmp21_; _type_index = _type_index + 1; _tmp10_ = _type_index; _tmp11_ = _type_size; if (!(_tmp10_ < _tmp11_)) { break; } _tmp12_ = _type_list; _tmp13_ = vala_list_get (_tmp12_, _type_index); type = (ValaDataType*) _tmp13_; _tmp14_ = type; if (!VALA_IS_UNRESOLVED_TYPE (_tmp14_)) { _vala_code_node_unref0 (type); continue; } _tmp15_ = prop_node->parent; _tmp16_ = type; _tmp17_ = vala_unresolved_type_get_unresolved_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType)); _tmp18_ = _tmp17_; _tmp19_ = vala_gir_parser_resolve_node (self, _tmp15_, _tmp18_, FALSE); base_node = _tmp19_; _tmp21_ = base_node; if (_tmp21_ != NULL) { ValaGirParserNode* _tmp22_; ValaSymbol* _tmp23_; _tmp22_ = base_node; _tmp23_ = _tmp22_->symbol; _tmp20_ = VALA_IS_INTERFACE (_tmp23_); } else { _tmp20_ = FALSE; } if (_tmp20_) { ValaGirParserNode* base_prop_node = NULL; ValaGirParserNode* _tmp24_; const gchar* _tmp25_; ValaGirParserNode* _tmp26_; gboolean _tmp27_ = FALSE; ValaGirParserNode* _tmp28_; _tmp24_ = base_node; _tmp25_ = prop_node->name; _tmp26_ = vala_gir_parser_node_lookup (_tmp24_, _tmp25_, FALSE, NULL); base_prop_node = _tmp26_; _tmp28_ = base_prop_node; if (_tmp28_ != NULL) { ValaGirParserNode* _tmp29_; ValaSymbol* _tmp30_; _tmp29_ = base_prop_node; _tmp30_ = _tmp29_->symbol; _tmp27_ = VALA_IS_PROPERTY (_tmp30_); } else { _tmp27_ = FALSE; } if (_tmp27_) { ValaProperty* base_property = NULL; ValaGirParserNode* _tmp31_; ValaSymbol* _tmp32_; ValaProperty* _tmp33_; gboolean _tmp34_ = FALSE; ValaProperty* _tmp35_; gboolean _tmp36_; gboolean _tmp37_; _tmp31_ = base_prop_node; _tmp32_ = _tmp31_->symbol; _tmp33_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, VALA_TYPE_PROPERTY, ValaProperty)); base_property = _tmp33_; _tmp35_ = base_property; _tmp36_ = vala_property_get_is_abstract (_tmp35_); _tmp37_ = _tmp36_; if (_tmp37_) { _tmp34_ = TRUE; } else { ValaProperty* _tmp38_; gboolean _tmp39_; gboolean _tmp40_; _tmp38_ = base_property; _tmp39_ = vala_property_get_is_virtual (_tmp38_); _tmp40_ = _tmp39_; _tmp34_ = _tmp40_; } if (_tmp34_) { result = base_prop_node; _vala_code_node_unref0 (base_property); _vala_gir_parser_node_unref0 (base_node); _vala_code_node_unref0 (type); _vala_iterable_unref0 (_type_list); _vala_code_node_unref0 (cl); return result; } _vala_code_node_unref0 (base_property); } _vala_gir_parser_node_unref0 (base_prop_node); } _vala_gir_parser_node_unref0 (base_node); _vala_code_node_unref0 (type); } _vala_iterable_unref0 (_type_list); } result = NULL; _vala_code_node_unref0 (cl); return result; } ValaGirParser* vala_gir_parser_construct (GType object_type) { ValaGirParser* self = NULL; self = (ValaGirParser*) vala_code_visitor_construct (object_type); return self; } ValaGirParser* vala_gir_parser_new (void) { return vala_gir_parser_construct (VALA_TYPE_GIR_PARSER); } static gpointer _vala_source_reference_ref0 (gpointer self) { return self ? vala_source_reference_ref (self) : NULL; } static ValaGirParserArgument* vala_gir_parser_argument_construct (GType object_type, ValaExpression* expression, ValaSourceReference* source_reference) { ValaGirParserArgument* self = NULL; ValaExpression* _tmp0_; ValaSourceReference* _tmp1_; g_return_val_if_fail (expression != NULL, NULL); self = (ValaGirParserArgument*) g_type_create_instance (object_type); _tmp0_ = _vala_code_node_ref0 (expression); _vala_code_node_unref0 (self->expression); self->expression = _tmp0_; _tmp1_ = _vala_source_reference_ref0 (source_reference); _vala_source_reference_unref0 (self->source_reference); self->source_reference = _tmp1_; return self; } static ValaGirParserArgument* vala_gir_parser_argument_new (ValaExpression* expression, ValaSourceReference* source_reference) { return vala_gir_parser_argument_construct (VALA_GIR_PARSER_TYPE_ARGUMENT, expression, source_reference); } static void vala_gir_parser_value_argument_init (GValue* value) { value->data[0].v_pointer = NULL; } static void vala_gir_parser_value_argument_free_value (GValue* value) { if (value->data[0].v_pointer) { vala_gir_parser_argument_unref (value->data[0].v_pointer); } } static void vala_gir_parser_value_argument_copy_value (const GValue* src_value, GValue* dest_value) { if (src_value->data[0].v_pointer) { dest_value->data[0].v_pointer = vala_gir_parser_argument_ref (src_value->data[0].v_pointer); } else { dest_value->data[0].v_pointer = NULL; } } static gpointer vala_gir_parser_value_argument_peek_pointer (const GValue* value) { return value->data[0].v_pointer; } static gchar* vala_gir_parser_value_argument_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { if (collect_values[0].v_pointer) { ValaGirParserArgument * object; object = collect_values[0].v_pointer; if (object->parent_instance.g_class == NULL) { return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) { return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } value->data[0].v_pointer = vala_gir_parser_argument_ref (object); } else { value->data[0].v_pointer = NULL; } return NULL; } static gchar* vala_gir_parser_value_argument_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { ValaGirParserArgument ** object_p; object_p = collect_values[0].v_pointer; if (!object_p) { return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); } if (!value->data[0].v_pointer) { *object_p = NULL; } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) { *object_p = value->data[0].v_pointer; } else { *object_p = vala_gir_parser_argument_ref (value->data[0].v_pointer); } return NULL; } static GParamSpec* vala_gir_parser_param_spec_argument (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) { ValaGirParserParamSpecArgument* spec; g_return_val_if_fail (g_type_is_a (object_type, VALA_GIR_PARSER_TYPE_ARGUMENT), 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 vala_gir_parser_value_get_argument (const GValue* value) { g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_ARGUMENT), NULL); return value->data[0].v_pointer; } static void vala_gir_parser_value_set_argument (GValue* value, gpointer v_object) { ValaGirParserArgument * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_ARGUMENT)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_ARGUMENT)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; vala_gir_parser_argument_ref (value->data[0].v_pointer); } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_argument_unref (old); } } static void vala_gir_parser_value_take_argument (GValue* value, gpointer v_object) { ValaGirParserArgument * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_ARGUMENT)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_ARGUMENT)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_argument_unref (old); } } static void vala_gir_parser_argument_class_init (ValaGirParserArgumentClass * klass, gpointer klass_data) { vala_gir_parser_argument_parent_class = g_type_class_peek_parent (klass); ((ValaGirParserArgumentClass *) klass)->finalize = vala_gir_parser_argument_finalize; } static void vala_gir_parser_argument_instance_init (ValaGirParserArgument * self, gpointer klass) { self->used = FALSE; self->ref_count = 1; } static void vala_gir_parser_argument_finalize (ValaGirParserArgument * obj) { ValaGirParserArgument * self; self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_GIR_PARSER_TYPE_ARGUMENT, ValaGirParserArgument); g_signal_handlers_destroy (self); _vala_code_node_unref0 (self->expression); _vala_source_reference_unref0 (self->source_reference); } static GType vala_gir_parser_argument_get_type_once (void) { static const GTypeValueTable g_define_type_value_table = { vala_gir_parser_value_argument_init, vala_gir_parser_value_argument_free_value, vala_gir_parser_value_argument_copy_value, vala_gir_parser_value_argument_peek_pointer, "p", vala_gir_parser_value_argument_collect_value, "p", vala_gir_parser_value_argument_lcopy_value }; static const GTypeInfo g_define_type_info = { sizeof (ValaGirParserArgumentClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_parser_argument_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirParserArgument), 0, (GInstanceInitFunc) vala_gir_parser_argument_instance_init, &g_define_type_value_table }; static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) }; GType vala_gir_parser_argument_type_id; vala_gir_parser_argument_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaGirParserArgument", &g_define_type_info, &g_define_type_fundamental_info, 0); return vala_gir_parser_argument_type_id; } static GType vala_gir_parser_argument_get_type (void) { static volatile gsize vala_gir_parser_argument_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_argument_type_id__volatile)) { GType vala_gir_parser_argument_type_id; vala_gir_parser_argument_type_id = vala_gir_parser_argument_get_type_once (); g_once_init_leave (&vala_gir_parser_argument_type_id__volatile, vala_gir_parser_argument_type_id); } return vala_gir_parser_argument_type_id__volatile; } static gpointer vala_gir_parser_argument_ref (gpointer instance) { ValaGirParserArgument * self; self = instance; g_atomic_int_inc (&self->ref_count); return instance; } static void vala_gir_parser_argument_unref (gpointer instance) { ValaGirParserArgument * self; self = instance; if (g_atomic_int_dec_and_test (&self->ref_count)) { VALA_GIR_PARSER_ARGUMENT_GET_CLASS (self)->finalize (self); g_type_free_instance ((GTypeInstance *) self); } } static ValaGirParserMetadataSet* vala_gir_parser_metadata_set_construct (GType object_type, const gchar* selector) { ValaGirParserMetadataSet* self = NULL; self = (ValaGirParserMetadataSet*) vala_gir_parser_metadata_construct (object_type, "", selector, NULL); return self; } static ValaGirParserMetadataSet* vala_gir_parser_metadata_set_new (const gchar* selector) { return vala_gir_parser_metadata_set_construct (VALA_GIR_PARSER_TYPE_METADATA_SET, selector); } static void vala_gir_parser_metadata_set_add_sibling (ValaGirParserMetadataSet* self, ValaGirParserMetadata* metadata) { g_return_if_fail (self != NULL); g_return_if_fail (metadata != NULL); { ValaArrayList* _child_list = NULL; ValaArrayList* _tmp0_; ValaArrayList* _tmp1_; gint _child_size = 0; ValaArrayList* _tmp2_; gint _tmp3_; gint _tmp4_; gint _child_index = 0; _tmp0_ = metadata->children; _tmp1_ = _vala_iterable_ref0 (_tmp0_); _child_list = _tmp1_; _tmp2_ = _child_list; _tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_); _tmp4_ = _tmp3_; _child_size = _tmp4_; _child_index = -1; while (TRUE) { gint _tmp5_; gint _tmp6_; ValaGirParserMetadata* child = NULL; ValaArrayList* _tmp7_; gpointer _tmp8_; ValaGirParserMetadata* _tmp9_; _child_index = _child_index + 1; _tmp5_ = _child_index; _tmp6_ = _child_size; if (!(_tmp5_ < _tmp6_)) { break; } _tmp7_ = _child_list; _tmp8_ = vala_list_get ((ValaList*) _tmp7_, _child_index); child = (ValaGirParserMetadata*) _tmp8_; _tmp9_ = child; vala_gir_parser_metadata_add_child ((ValaGirParserMetadata*) self, _tmp9_); _vala_gir_parser_metadata_unref0 (child); } _vala_iterable_unref0 (_child_list); } { ValaIterator* _key_it = NULL; ValaMap* _tmp10_; ValaSet* _tmp11_; ValaSet* _tmp12_; ValaIterator* _tmp13_; ValaIterator* _tmp14_; _tmp10_ = metadata->args; _tmp11_ = vala_map_get_keys (_tmp10_); _tmp12_ = _tmp11_; _tmp13_ = vala_iterable_iterator ((ValaIterable*) _tmp12_); _tmp14_ = _tmp13_; _vala_iterable_unref0 (_tmp12_); _key_it = _tmp14_; while (TRUE) { ValaIterator* _tmp15_; ValaGirParserArgumentType key = 0; ValaIterator* _tmp16_; gpointer _tmp17_; ValaMap* _tmp18_; ValaGirParserArgumentType _tmp19_; ValaMap* _tmp20_; ValaGirParserArgumentType _tmp21_; gpointer _tmp22_; ValaGirParserArgument* _tmp23_; _tmp15_ = _key_it; if (!vala_iterator_next (_tmp15_)) { break; } _tmp16_ = _key_it; _tmp17_ = vala_iterator_get (_tmp16_); key = (ValaGirParserArgumentType) ((gintptr) _tmp17_); _tmp18_ = ((ValaGirParserMetadata*) self)->args; _tmp19_ = key; _tmp20_ = metadata->args; _tmp21_ = key; _tmp22_ = vala_map_get (_tmp20_, (gpointer) ((gintptr) _tmp21_)); _tmp23_ = (ValaGirParserArgument*) _tmp22_; vala_map_set (_tmp18_, (gpointer) ((gintptr) _tmp19_), _tmp23_); _vala_gir_parser_argument_unref0 (_tmp23_); } _vala_iterator_unref0 (_key_it); } } static void vala_gir_parser_metadata_set_class_init (ValaGirParserMetadataSetClass * klass, gpointer klass_data) { vala_gir_parser_metadata_set_parent_class = g_type_class_peek_parent (klass); } static void vala_gir_parser_metadata_set_instance_init (ValaGirParserMetadataSet * self, gpointer klass) { } static GType vala_gir_parser_metadata_set_get_type_once (void) { static const GTypeInfo g_define_type_info = { sizeof (ValaGirParserMetadataSetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_parser_metadata_set_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirParserMetadataSet), 0, (GInstanceInitFunc) vala_gir_parser_metadata_set_instance_init, NULL }; GType vala_gir_parser_metadata_set_type_id; vala_gir_parser_metadata_set_type_id = g_type_register_static (VALA_GIR_PARSER_TYPE_METADATA, "ValaGirParserMetadataSet", &g_define_type_info, 0); return vala_gir_parser_metadata_set_type_id; } static GType vala_gir_parser_metadata_set_get_type (void) { static volatile gsize vala_gir_parser_metadata_set_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_metadata_set_type_id__volatile)) { GType vala_gir_parser_metadata_set_type_id; vala_gir_parser_metadata_set_type_id = vala_gir_parser_metadata_set_get_type_once (); g_once_init_leave (&vala_gir_parser_metadata_set_type_id__volatile, vala_gir_parser_metadata_set_type_id); } return vala_gir_parser_metadata_set_type_id__volatile; } static ValaGirParserMetadata* vala_gir_parser_metadata_get_empty (void) { ValaGirParserMetadata* result; ValaGirParserMetadata* _tmp0_; ValaGirParserMetadata* _tmp2_; _tmp0_ = vala_gir_parser_metadata__empty; if (_tmp0_ == NULL) { ValaGirParserMetadata* _tmp1_; _tmp1_ = vala_gir_parser_metadata_new ("", NULL, NULL); _vala_gir_parser_metadata_unref0 (vala_gir_parser_metadata__empty); vala_gir_parser_metadata__empty = _tmp1_; } _tmp2_ = vala_gir_parser_metadata__empty; result = _tmp2_; return result; } static ValaGirParserMetadata* vala_gir_parser_metadata_construct (GType object_type, const gchar* pattern, const gchar* selector, ValaSourceReference* source_reference) { ValaGirParserMetadata* self = NULL; GPatternSpec* _tmp0_; gchar* _tmp1_; ValaSourceReference* _tmp2_; g_return_val_if_fail (pattern != NULL, NULL); self = (ValaGirParserMetadata*) g_type_create_instance (object_type); _tmp0_ = g_pattern_spec_new (pattern); _g_pattern_spec_free0 (self->pattern_spec); self->pattern_spec = _tmp0_; _tmp1_ = g_strdup (selector); _g_free0 (self->selector); self->selector = _tmp1_; _tmp2_ = _vala_source_reference_ref0 (source_reference); _vala_source_reference_unref0 (self->source_reference); self->source_reference = _tmp2_; return self; } static ValaGirParserMetadata* vala_gir_parser_metadata_new (const gchar* pattern, const gchar* selector, ValaSourceReference* source_reference) { return vala_gir_parser_metadata_construct (VALA_GIR_PARSER_TYPE_METADATA, pattern, selector, source_reference); } static void vala_gir_parser_metadata_add_child (ValaGirParserMetadata* self, ValaGirParserMetadata* metadata) { ValaArrayList* _tmp0_; g_return_if_fail (self != NULL); g_return_if_fail (metadata != NULL); _tmp0_ = self->children; vala_collection_add ((ValaCollection*) _tmp0_, metadata); } static ValaGirParserMetadata* vala_gir_parser_metadata_match_child (ValaGirParserMetadata* self, const gchar* name, const gchar* selector) { ValaGirParserMetadata* _result_ = NULL; ValaGirParserMetadata* _tmp0_; ValaGirParserMetadata* _tmp1_; ValaGirParserMetadata* _tmp2_; ValaGirParserMetadata* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); _tmp0_ = vala_gir_parser_metadata_get_empty (); _tmp1_ = _tmp0_; _tmp2_ = _vala_gir_parser_metadata_ref0 (_tmp1_); _result_ = _tmp2_; { ValaArrayList* _metadata_list = NULL; ValaArrayList* _tmp3_; ValaArrayList* _tmp4_; gint _metadata_size = 0; ValaArrayList* _tmp5_; gint _tmp6_; gint _tmp7_; gint _metadata_index = 0; _tmp3_ = self->children; _tmp4_ = _vala_iterable_ref0 (_tmp3_); _metadata_list = _tmp4_; _tmp5_ = _metadata_list; _tmp6_ = vala_collection_get_size ((ValaCollection*) _tmp5_); _tmp7_ = _tmp6_; _metadata_size = _tmp7_; _metadata_index = -1; while (TRUE) { gint _tmp8_; gint _tmp9_; ValaGirParserMetadata* metadata = NULL; ValaArrayList* _tmp10_; gpointer _tmp11_; gboolean _tmp12_ = FALSE; gboolean _tmp13_ = FALSE; gboolean _tmp14_ = FALSE; _metadata_index = _metadata_index + 1; _tmp8_ = _metadata_index; _tmp9_ = _metadata_size; if (!(_tmp8_ < _tmp9_)) { break; } _tmp10_ = _metadata_list; _tmp11_ = vala_list_get ((ValaList*) _tmp10_, _metadata_index); metadata = (ValaGirParserMetadata*) _tmp11_; if (selector == NULL) { _tmp14_ = TRUE; } else { ValaGirParserMetadata* _tmp15_; const gchar* _tmp16_; _tmp15_ = metadata; _tmp16_ = _tmp15_->selector; _tmp14_ = _tmp16_ == NULL; } if (_tmp14_) { _tmp13_ = TRUE; } else { ValaGirParserMetadata* _tmp17_; const gchar* _tmp18_; _tmp17_ = metadata; _tmp18_ = _tmp17_->selector; _tmp13_ = g_strcmp0 (_tmp18_, selector) == 0; } if (_tmp13_) { ValaGirParserMetadata* _tmp19_; GPatternSpec* _tmp20_; _tmp19_ = metadata; _tmp20_ = _tmp19_->pattern_spec; _tmp12_ = g_pattern_match_string (_tmp20_, name); } else { _tmp12_ = FALSE; } if (_tmp12_) { ValaGirParserMetadata* _tmp21_; ValaGirParserMetadata* _tmp22_; ValaGirParserMetadata* _tmp23_; ValaGirParserMetadata* _tmp24_; _tmp21_ = metadata; _tmp21_->used = TRUE; _tmp22_ = _result_; _tmp23_ = vala_gir_parser_metadata_get_empty (); _tmp24_ = _tmp23_; if (_tmp22_ == _tmp24_) { ValaGirParserMetadata* _tmp25_; ValaGirParserMetadata* _tmp26_; _tmp25_ = metadata; _tmp26_ = _vala_gir_parser_metadata_ref0 (_tmp25_); _vala_gir_parser_metadata_unref0 (_result_); _result_ = _tmp26_; } else { ValaGirParserMetadataSet* ms = NULL; ValaGirParserMetadata* _tmp27_; ValaGirParserMetadataSet* _tmp28_; ValaGirParserMetadataSet* _tmp29_; ValaGirParserMetadataSet* _tmp33_; ValaGirParserMetadata* _tmp34_; ValaGirParserMetadataSet* _tmp35_; ValaGirParserMetadata* _tmp36_; _tmp27_ = _result_; _tmp28_ = _vala_gir_parser_metadata_ref0 (VALA_GIR_PARSER_IS_METADATA_SET (_tmp27_) ? ((ValaGirParserMetadataSet*) _tmp27_) : NULL); ms = _tmp28_; _tmp29_ = ms; if (_tmp29_ == NULL) { ValaGirParserMetadataSet* _tmp30_; ValaGirParserMetadataSet* _tmp31_; ValaGirParserMetadata* _tmp32_; _tmp30_ = vala_gir_parser_metadata_set_new (selector); _vala_gir_parser_metadata_unref0 (ms); ms = _tmp30_; _tmp31_ = ms; _tmp32_ = _result_; vala_gir_parser_metadata_set_add_sibling (_tmp31_, _tmp32_); } _tmp33_ = ms; _tmp34_ = metadata; vala_gir_parser_metadata_set_add_sibling (_tmp33_, _tmp34_); _tmp35_ = ms; _tmp36_ = _vala_gir_parser_metadata_ref0 ((ValaGirParserMetadata*) _tmp35_); _vala_gir_parser_metadata_unref0 (_result_); _result_ = _tmp36_; _vala_gir_parser_metadata_unref0 (ms); } } _vala_gir_parser_metadata_unref0 (metadata); } _vala_iterable_unref0 (_metadata_list); } result = _result_; return result; } static void vala_gir_parser_metadata_add_argument (ValaGirParserMetadata* self, ValaGirParserArgumentType key, ValaGirParserArgument* value) { ValaMap* _tmp0_; g_return_if_fail (self != NULL); g_return_if_fail (value != NULL); _tmp0_ = self->args; vala_map_set (_tmp0_, (gpointer) ((gintptr) key), value); } static gboolean vala_gir_parser_metadata_has_argument (ValaGirParserMetadata* self, ValaGirParserArgumentType key) { ValaMap* _tmp0_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); _tmp0_ = self->args; result = vala_map_contains (_tmp0_, (gpointer) ((gintptr) key)); return result; } static ValaExpression* vala_gir_parser_metadata_get_expression (ValaGirParserMetadata* self, ValaGirParserArgumentType arg) { ValaGirParserArgument* val = NULL; ValaMap* _tmp0_; gpointer _tmp1_; ValaGirParserArgument* _tmp2_; ValaExpression* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->args; _tmp1_ = vala_map_get (_tmp0_, (gpointer) ((gintptr) arg)); val = (ValaGirParserArgument*) _tmp1_; _tmp2_ = val; if (_tmp2_ != NULL) { ValaGirParserArgument* _tmp3_; ValaGirParserArgument* _tmp4_; ValaExpression* _tmp5_; ValaExpression* _tmp6_; _tmp3_ = val; _tmp3_->used = TRUE; _tmp4_ = val; _tmp5_ = _tmp4_->expression; _tmp6_ = _vala_code_node_ref0 (_tmp5_); result = _tmp6_; _vala_gir_parser_argument_unref0 (val); return result; } result = NULL; _vala_gir_parser_argument_unref0 (val); return result; } static gchar* vala_gir_parser_metadata_get_string (ValaGirParserMetadata* self, ValaGirParserArgumentType arg) { ValaStringLiteral* lit = NULL; ValaExpression* _tmp0_; ValaStringLiteral* _tmp1_; ValaStringLiteral* _tmp2_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = vala_gir_parser_metadata_get_expression (self, arg); _tmp1_ = VALA_IS_STRING_LITERAL (_tmp0_) ? ((ValaStringLiteral*) _tmp0_) : NULL; if (_tmp1_ == NULL) { _vala_code_node_unref0 (_tmp0_); } lit = _tmp1_; _tmp2_ = lit; if (_tmp2_ != NULL) { ValaStringLiteral* _tmp3_; gchar* _tmp4_; _tmp3_ = lit; _tmp4_ = vala_string_literal_eval (_tmp3_); result = _tmp4_; _vala_code_node_unref0 (lit); return result; } result = NULL; _vala_code_node_unref0 (lit); return result; } static gint vala_gir_parser_metadata_get_integer (ValaGirParserMetadata* self, ValaGirParserArgumentType arg) { ValaUnaryExpression* unary = NULL; ValaExpression* _tmp0_; ValaUnaryExpression* _tmp1_; gboolean _tmp2_ = FALSE; ValaUnaryExpression* _tmp3_; gint result = 0; g_return_val_if_fail (self != NULL, 0); _tmp0_ = vala_gir_parser_metadata_get_expression (self, arg); _tmp1_ = VALA_IS_UNARY_EXPRESSION (_tmp0_) ? ((ValaUnaryExpression*) _tmp0_) : NULL; if (_tmp1_ == NULL) { _vala_code_node_unref0 (_tmp0_); } unary = _tmp1_; _tmp3_ = unary; if (_tmp3_ != NULL) { ValaUnaryExpression* _tmp4_; ValaUnaryOperator _tmp5_; ValaUnaryOperator _tmp6_; _tmp4_ = unary; _tmp5_ = vala_unary_expression_get_operator (_tmp4_); _tmp6_ = _tmp5_; _tmp2_ = _tmp6_ == VALA_UNARY_OPERATOR_MINUS; } else { _tmp2_ = FALSE; } if (_tmp2_) { ValaIntegerLiteral* lit = NULL; ValaUnaryExpression* _tmp7_; ValaExpression* _tmp8_; ValaExpression* _tmp9_; ValaIntegerLiteral* _tmp10_; ValaIntegerLiteral* _tmp11_; _tmp7_ = unary; _tmp8_ = vala_unary_expression_get_inner (_tmp7_); _tmp9_ = _tmp8_; _tmp10_ = _vala_code_node_ref0 (VALA_IS_INTEGER_LITERAL (_tmp9_) ? ((ValaIntegerLiteral*) _tmp9_) : NULL); lit = _tmp10_; _tmp11_ = lit; if (_tmp11_ != NULL) { ValaIntegerLiteral* _tmp12_; const gchar* _tmp13_; const gchar* _tmp14_; _tmp12_ = lit; _tmp13_ = vala_integer_literal_get_value (_tmp12_); _tmp14_ = _tmp13_; result = -atoi (_tmp14_); _vala_code_node_unref0 (lit); _vala_code_node_unref0 (unary); return result; } _vala_code_node_unref0 (lit); } else { ValaIntegerLiteral* lit = NULL; ValaExpression* _tmp15_; ValaIntegerLiteral* _tmp16_; ValaIntegerLiteral* _tmp17_; _tmp15_ = vala_gir_parser_metadata_get_expression (self, arg); _tmp16_ = VALA_IS_INTEGER_LITERAL (_tmp15_) ? ((ValaIntegerLiteral*) _tmp15_) : NULL; if (_tmp16_ == NULL) { _vala_code_node_unref0 (_tmp15_); } lit = _tmp16_; _tmp17_ = lit; if (_tmp17_ != NULL) { ValaIntegerLiteral* _tmp18_; const gchar* _tmp19_; const gchar* _tmp20_; _tmp18_ = lit; _tmp19_ = vala_integer_literal_get_value (_tmp18_); _tmp20_ = _tmp19_; result = atoi (_tmp20_); _vala_code_node_unref0 (lit); _vala_code_node_unref0 (unary); return result; } _vala_code_node_unref0 (lit); } result = 0; _vala_code_node_unref0 (unary); return result; } static gboolean vala_gir_parser_metadata_get_bool (ValaGirParserMetadata* self, ValaGirParserArgumentType arg, gboolean default_value) { ValaBooleanLiteral* lit = NULL; ValaExpression* _tmp0_; ValaBooleanLiteral* _tmp1_; ValaBooleanLiteral* _tmp2_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); _tmp0_ = vala_gir_parser_metadata_get_expression (self, arg); _tmp1_ = VALA_IS_BOOLEAN_LITERAL (_tmp0_) ? ((ValaBooleanLiteral*) _tmp0_) : NULL; if (_tmp1_ == NULL) { _vala_code_node_unref0 (_tmp0_); } lit = _tmp1_; _tmp2_ = lit; if (_tmp2_ != NULL) { ValaBooleanLiteral* _tmp3_; gboolean _tmp4_; gboolean _tmp5_; _tmp3_ = lit; _tmp4_ = vala_boolean_literal_get_value (_tmp3_); _tmp5_ = _tmp4_; result = _tmp5_; _vala_code_node_unref0 (lit); return result; } result = default_value; _vala_code_node_unref0 (lit); return result; } static ValaSourceReference* vala_gir_parser_metadata_get_source_reference (ValaGirParserMetadata* self, ValaGirParserArgumentType arg) { ValaGirParserArgument* val = NULL; ValaMap* _tmp0_; gpointer _tmp1_; ValaGirParserArgument* _tmp2_; ValaSourceReference* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->args; _tmp1_ = vala_map_get (_tmp0_, (gpointer) ((gintptr) arg)); val = (ValaGirParserArgument*) _tmp1_; _tmp2_ = val; if (_tmp2_ != NULL) { ValaGirParserArgument* _tmp3_; ValaSourceReference* _tmp4_; ValaSourceReference* _tmp5_; _tmp3_ = val; _tmp4_ = _tmp3_->source_reference; _tmp5_ = _vala_source_reference_ref0 (_tmp4_); result = _tmp5_; _vala_gir_parser_argument_unref0 (val); return result; } result = NULL; _vala_gir_parser_argument_unref0 (val); return result; } static void vala_gir_parser_value_metadata_init (GValue* value) { value->data[0].v_pointer = NULL; } static void vala_gir_parser_value_metadata_free_value (GValue* value) { if (value->data[0].v_pointer) { vala_gir_parser_metadata_unref (value->data[0].v_pointer); } } static void vala_gir_parser_value_metadata_copy_value (const GValue* src_value, GValue* dest_value) { if (src_value->data[0].v_pointer) { dest_value->data[0].v_pointer = vala_gir_parser_metadata_ref (src_value->data[0].v_pointer); } else { dest_value->data[0].v_pointer = NULL; } } static gpointer vala_gir_parser_value_metadata_peek_pointer (const GValue* value) { return value->data[0].v_pointer; } static gchar* vala_gir_parser_value_metadata_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { if (collect_values[0].v_pointer) { ValaGirParserMetadata * object; object = collect_values[0].v_pointer; if (object->parent_instance.g_class == NULL) { return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) { return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } value->data[0].v_pointer = vala_gir_parser_metadata_ref (object); } else { value->data[0].v_pointer = NULL; } return NULL; } static gchar* vala_gir_parser_value_metadata_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { ValaGirParserMetadata ** object_p; object_p = collect_values[0].v_pointer; if (!object_p) { return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); } if (!value->data[0].v_pointer) { *object_p = NULL; } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) { *object_p = value->data[0].v_pointer; } else { *object_p = vala_gir_parser_metadata_ref (value->data[0].v_pointer); } return NULL; } static GParamSpec* vala_gir_parser_param_spec_metadata (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) { ValaGirParserParamSpecMetadata* spec; g_return_val_if_fail (g_type_is_a (object_type, VALA_GIR_PARSER_TYPE_METADATA), 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 vala_gir_parser_value_get_metadata (const GValue* value) { g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_METADATA), NULL); return value->data[0].v_pointer; } static void vala_gir_parser_value_set_metadata (GValue* value, gpointer v_object) { ValaGirParserMetadata * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_METADATA)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_METADATA)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; vala_gir_parser_metadata_ref (value->data[0].v_pointer); } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_metadata_unref (old); } } static void vala_gir_parser_value_take_metadata (GValue* value, gpointer v_object) { ValaGirParserMetadata * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_METADATA)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_METADATA)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_metadata_unref (old); } } static void vala_gir_parser_metadata_class_init (ValaGirParserMetadataClass * klass, gpointer klass_data) { vala_gir_parser_metadata_parent_class = g_type_class_peek_parent (klass); ((ValaGirParserMetadataClass *) klass)->finalize = vala_gir_parser_metadata_finalize; } static void vala_gir_parser_metadata_instance_init (ValaGirParserMetadata * self, gpointer klass) { GHashFunc _tmp0_; GEqualFunc _tmp1_; GEqualFunc _tmp2_; ValaHashMap* _tmp3_; GEqualFunc _tmp4_; ValaArrayList* _tmp5_; self->used = FALSE; _tmp0_ = g_direct_hash; _tmp1_ = g_direct_equal; _tmp2_ = g_direct_equal; _tmp3_ = vala_hash_map_new (VALA_GIR_PARSER_TYPE_ARGUMENT_TYPE, NULL, NULL, VALA_GIR_PARSER_TYPE_ARGUMENT, (GBoxedCopyFunc) vala_gir_parser_argument_ref, (GDestroyNotify) vala_gir_parser_argument_unref, _tmp0_, _tmp1_, _tmp2_); self->args = (ValaMap*) _tmp3_; _tmp4_ = g_direct_equal; _tmp5_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_METADATA, (GBoxedCopyFunc) vala_gir_parser_metadata_ref, (GDestroyNotify) vala_gir_parser_metadata_unref, _tmp4_); self->children = _tmp5_; self->ref_count = 1; } static void vala_gir_parser_metadata_finalize (ValaGirParserMetadata * obj) { ValaGirParserMetadata * self; self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_GIR_PARSER_TYPE_METADATA, ValaGirParserMetadata); g_signal_handlers_destroy (self); _g_pattern_spec_free0 (self->pattern_spec); _g_free0 (self->selector); _vala_source_reference_unref0 (self->source_reference); _vala_map_unref0 (self->args); _vala_iterable_unref0 (self->children); } static GType vala_gir_parser_metadata_get_type_once (void) { static const GTypeValueTable g_define_type_value_table = { vala_gir_parser_value_metadata_init, vala_gir_parser_value_metadata_free_value, vala_gir_parser_value_metadata_copy_value, vala_gir_parser_value_metadata_peek_pointer, "p", vala_gir_parser_value_metadata_collect_value, "p", vala_gir_parser_value_metadata_lcopy_value }; static const GTypeInfo g_define_type_info = { sizeof (ValaGirParserMetadataClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_parser_metadata_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirParserMetadata), 0, (GInstanceInitFunc) vala_gir_parser_metadata_instance_init, &g_define_type_value_table }; static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) }; GType vala_gir_parser_metadata_type_id; vala_gir_parser_metadata_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaGirParserMetadata", &g_define_type_info, &g_define_type_fundamental_info, 0); return vala_gir_parser_metadata_type_id; } static GType vala_gir_parser_metadata_get_type (void) { static volatile gsize vala_gir_parser_metadata_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_metadata_type_id__volatile)) { GType vala_gir_parser_metadata_type_id; vala_gir_parser_metadata_type_id = vala_gir_parser_metadata_get_type_once (); g_once_init_leave (&vala_gir_parser_metadata_type_id__volatile, vala_gir_parser_metadata_type_id); } return vala_gir_parser_metadata_type_id__volatile; } static gpointer vala_gir_parser_metadata_ref (gpointer instance) { ValaGirParserMetadata * self; self = instance; g_atomic_int_inc (&self->ref_count); return instance; } static void vala_gir_parser_metadata_unref (gpointer instance) { ValaGirParserMetadata * self; self = instance; if (g_atomic_int_dec_and_test (&self->ref_count)) { VALA_GIR_PARSER_METADATA_GET_CLASS (self)->finalize (self); g_type_free_instance ((GTypeInstance *) self); } } static inline gpointer vala_gir_parser_metadata_parser_get_instance_private (ValaGirParserMetadataParser* self) { return G_STRUCT_MEMBER_P (self, ValaGirParserMetadataParser_private_offset); } static ValaGirParserMetadataParser* vala_gir_parser_metadata_parser_construct (GType object_type) { ValaGirParserMetadataParser* self = NULL; ValaGirParserMetadata* _tmp0_; self = (ValaGirParserMetadataParser*) g_type_create_instance (object_type); _tmp0_ = self->priv->tree; _tmp0_->used = TRUE; return self; } static ValaGirParserMetadataParser* vala_gir_parser_metadata_parser_new (void) { return vala_gir_parser_metadata_parser_construct (VALA_GIR_PARSER_TYPE_METADATA_PARSER); } static ValaSourceReference* vala_gir_parser_metadata_parser_get_current_src (ValaGirParserMetadataParser* self) { ValaScanner* _tmp0_; ValaSourceFile* _tmp1_; ValaSourceFile* _tmp2_; ValaSourceLocation _tmp3_; ValaSourceLocation _tmp4_; ValaSourceReference* _tmp5_; ValaSourceReference* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->scanner; _tmp1_ = vala_scanner_get_source_file (_tmp0_); _tmp2_ = _tmp1_; _tmp3_ = self->priv->begin; _tmp4_ = self->priv->end; _tmp5_ = vala_source_reference_new (_tmp2_, &_tmp3_, &_tmp4_); result = _tmp5_; return result; } static ValaSourceReference* vala_gir_parser_metadata_parser_get_src (ValaGirParserMetadataParser* self, ValaSourceLocation* begin, ValaSourceLocation* end) { ValaSourceLocation e = {0}; ValaSourceLocation _tmp0_; ValaScanner* _tmp1_; ValaSourceFile* _tmp2_; ValaSourceFile* _tmp3_; ValaSourceLocation _tmp4_; ValaSourceLocation _tmp5_; ValaSourceReference* _tmp6_; ValaSourceReference* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (begin != NULL, NULL); _tmp0_ = self->priv->end; e = _tmp0_; if (end != NULL) { e = *end; } _tmp1_ = self->priv->scanner; _tmp2_ = vala_scanner_get_source_file (_tmp1_); _tmp3_ = _tmp2_; _tmp4_ = *begin; _tmp5_ = e; _tmp6_ = vala_source_reference_new (_tmp3_, &_tmp4_, &_tmp5_); result = _tmp6_; return result; } static ValaGirParserMetadata* vala_gir_parser_metadata_parser_parse_metadata (ValaGirParserMetadataParser* self, ValaSourceFile* metadata_file) { ValaScanner* _tmp0_; ValaGirParserMetadata* _tmp5_; ValaGirParserMetadata* _tmp6_; ValaGirParserMetadata* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (metadata_file != NULL, NULL); _tmp0_ = vala_scanner_new (metadata_file); _vala_scanner_unref0 (self->priv->scanner); self->priv->scanner = _tmp0_; vala_gir_parser_metadata_parser_next (self); while (TRUE) { ValaTokenType _tmp1_; _tmp1_ = self->priv->current; if (!(_tmp1_ != VALA_TOKEN_TYPE_EOF)) { break; } if (!vala_gir_parser_metadata_parser_parse_rule (self)) { ValaGirParserMetadata* _tmp2_; ValaGirParserMetadata* _tmp3_; ValaGirParserMetadata* _tmp4_; _tmp2_ = vala_gir_parser_metadata_get_empty (); _tmp3_ = _tmp2_; _tmp4_ = _vala_gir_parser_metadata_ref0 (_tmp3_); result = _tmp4_; return result; } } _tmp5_ = self->priv->tree; _tmp6_ = _vala_gir_parser_metadata_ref0 (_tmp5_); result = _tmp6_; return result; } static ValaTokenType vala_gir_parser_metadata_parser_next (ValaGirParserMetadataParser* self) { ValaSourceLocation _tmp0_; ValaScanner* _tmp1_; ValaSourceLocation _tmp2_ = {0}; ValaSourceLocation _tmp3_ = {0}; ValaTokenType _tmp4_; ValaTokenType _tmp5_; ValaTokenType result = 0; g_return_val_if_fail (self != NULL, 0); _tmp0_ = self->priv->end; self->priv->old_end = _tmp0_; _tmp1_ = self->priv->scanner; _tmp4_ = vala_scanner_read_token (_tmp1_, &_tmp2_, &_tmp3_); self->priv->begin = _tmp2_; self->priv->end = _tmp3_; self->priv->current = _tmp4_; _tmp5_ = self->priv->current; result = _tmp5_; return result; } static gboolean vala_gir_parser_metadata_parser_has_space (ValaGirParserMetadataParser* self) { ValaSourceLocation _tmp0_; gchar* _tmp1_; ValaSourceLocation _tmp2_; gchar* _tmp3_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); _tmp0_ = self->priv->old_end; _tmp1_ = _tmp0_.pos; _tmp2_ = self->priv->begin; _tmp3_ = _tmp2_.pos; result = _tmp1_ != _tmp3_; return result; } static gboolean vala_gir_parser_metadata_parser_has_newline (ValaGirParserMetadataParser* self) { ValaSourceLocation _tmp0_; ValaSourceLocation _tmp1_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); _tmp0_ = self->priv->old_end; _tmp1_ = self->priv->begin; result = _tmp0_.line != _tmp1_.line; return result; } static gchar* vala_gir_parser_metadata_parser_get_string (ValaGirParserMetadataParser* self, ValaSourceLocation* begin, ValaSourceLocation* end) { ValaSourceLocation b = {0}; ValaSourceLocation _tmp0_; ValaSourceLocation e = {0}; ValaSourceLocation _tmp1_; ValaSourceLocation _tmp2_; gchar* _tmp3_; ValaSourceLocation _tmp4_; gchar* _tmp5_; ValaSourceLocation _tmp6_; gchar* _tmp7_; gchar* _tmp8_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->begin; b = _tmp0_; _tmp1_ = self->priv->end; e = _tmp1_; if (begin != NULL) { b = *begin; } if (end != NULL) { e = *end; } _tmp2_ = b; _tmp3_ = _tmp2_.pos; _tmp4_ = e; _tmp5_ = _tmp4_.pos; _tmp6_ = b; _tmp7_ = _tmp6_.pos; _tmp8_ = string_substring ((const gchar*) _tmp3_, (glong) 0, (glong) ((gint) (_tmp5_ - _tmp7_))); result = _tmp8_; return result; } static gchar* vala_gir_parser_metadata_parser_parse_identifier (ValaGirParserMetadataParser* self, gboolean is_glob) { ValaSourceLocation begin = {0}; ValaSourceLocation _tmp0_; gboolean _tmp1_ = FALSE; ValaTokenType _tmp2_; ValaSourceLocation _tmp15_; ValaSourceLocation _tmp16_; gchar* _tmp17_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->begin; begin = _tmp0_; _tmp2_ = self->priv->current; if (_tmp2_ == VALA_TOKEN_TYPE_DOT) { _tmp1_ = TRUE; } else { ValaTokenType _tmp3_; _tmp3_ = self->priv->current; _tmp1_ = _tmp3_ == VALA_TOKEN_TYPE_HASH; } if (_tmp1_) { if (is_glob) { ValaSourceLocation _tmp4_; ValaSourceReference* _tmp5_; ValaSourceReference* _tmp6_; _tmp4_ = begin; _tmp5_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp4_, NULL); _tmp6_ = _tmp5_; vala_report_error (_tmp6_, "expected glob-style pattern"); _vala_source_reference_unref0 (_tmp6_); } else { ValaSourceLocation _tmp7_; ValaSourceReference* _tmp8_; ValaSourceReference* _tmp9_; _tmp7_ = begin; _tmp8_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp7_, NULL); _tmp9_ = _tmp8_; vala_report_error (_tmp9_, "expected identifier"); _vala_source_reference_unref0 (_tmp9_); } result = NULL; return result; } if (is_glob) { while (TRUE) { gboolean _tmp10_ = FALSE; gboolean _tmp11_ = FALSE; ValaTokenType _tmp12_; _tmp12_ = self->priv->current; if (_tmp12_ != VALA_TOKEN_TYPE_EOF) { ValaTokenType _tmp13_; _tmp13_ = self->priv->current; _tmp11_ = _tmp13_ != VALA_TOKEN_TYPE_DOT; } else { _tmp11_ = FALSE; } if (_tmp11_) { ValaTokenType _tmp14_; _tmp14_ = self->priv->current; _tmp10_ = _tmp14_ != VALA_TOKEN_TYPE_HASH; } else { _tmp10_ = FALSE; } if (!_tmp10_) { break; } vala_gir_parser_metadata_parser_next (self); if (vala_gir_parser_metadata_parser_has_space (self)) { break; } } } else { vala_gir_parser_metadata_parser_next (self); } _tmp15_ = begin; _tmp16_ = self->priv->old_end; _tmp17_ = vala_gir_parser_metadata_parser_get_string (self, &_tmp15_, &_tmp16_); result = _tmp17_; return result; } static gchar* vala_gir_parser_metadata_parser_parse_selector (ValaGirParserMetadataParser* self) { gboolean _tmp0_ = FALSE; ValaTokenType _tmp1_; gchar* _tmp2_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp1_ = self->priv->current; if (_tmp1_ != VALA_TOKEN_TYPE_HASH) { _tmp0_ = TRUE; } else { _tmp0_ = vala_gir_parser_metadata_parser_has_space (self); } if (_tmp0_) { result = NULL; return result; } vala_gir_parser_metadata_parser_next (self); _tmp2_ = vala_gir_parser_metadata_parser_parse_identifier (self, FALSE); result = _tmp2_; return result; } static ValaGirParserMetadata* vala_gir_parser_metadata_parser_parse_pattern (ValaGirParserMetadataParser* self) { ValaGirParserMetadata* metadata = NULL; gboolean is_relative = FALSE; gboolean _tmp0_ = FALSE; ValaTokenType _tmp1_; ValaGirParserMetadata* _tmp12_; ValaSourceLocation begin = {0}; ValaSourceLocation _tmp15_; gchar* pattern = NULL; gchar* _tmp16_; const gchar* _tmp17_; const gchar* _tmp18_; gchar* _tmp19_; gchar* _tmp20_; ValaSourceLocation _tmp21_; ValaSourceReference* _tmp22_; ValaSourceReference* _tmp23_; ValaGirParserMetadata* _tmp24_; ValaGirParserMetadata* _tmp25_; ValaGirParserMetadata* _tmp26_; ValaGirParserMetadata* result = NULL; g_return_val_if_fail (self != NULL, NULL); is_relative = FALSE; _tmp1_ = self->priv->current; if (_tmp1_ == VALA_TOKEN_TYPE_IDENTIFIER) { _tmp0_ = TRUE; } else { ValaTokenType _tmp2_; _tmp2_ = self->priv->current; _tmp0_ = _tmp2_ == VALA_TOKEN_TYPE_STAR; } if (_tmp0_) { ValaGirParserMetadata* _tmp3_; ValaGirParserMetadata* _tmp4_; _tmp3_ = self->priv->tree; _tmp4_ = _vala_gir_parser_metadata_ref0 (_tmp3_); _vala_gir_parser_metadata_unref0 (self->priv->parent_metadata); self->priv->parent_metadata = _tmp4_; } else { ValaTokenType _tmp5_; _tmp5_ = self->priv->current; if (_tmp5_ != VALA_TOKEN_TYPE_DOT) { ValaSourceReference* _tmp6_; ValaSourceReference* _tmp7_; ValaTokenType _tmp8_; const gchar* _tmp9_; gchar* _tmp10_; gchar* _tmp11_; _tmp6_ = vala_gir_parser_metadata_parser_get_current_src (self); _tmp7_ = _tmp6_; _tmp8_ = self->priv->current; _tmp9_ = vala_token_type_to_string (_tmp8_); _tmp10_ = g_strdup_printf ("expected pattern or `.', got %s", _tmp9_); _tmp11_ = _tmp10_; vala_report_error (_tmp7_, _tmp11_); _g_free0 (_tmp11_); _vala_source_reference_unref0 (_tmp7_); result = NULL; _vala_gir_parser_metadata_unref0 (metadata); return result; } vala_gir_parser_metadata_parser_next (self); is_relative = TRUE; } _tmp12_ = self->priv->parent_metadata; if (_tmp12_ == NULL) { ValaSourceReference* _tmp13_; ValaSourceReference* _tmp14_; _tmp13_ = vala_gir_parser_metadata_parser_get_current_src (self); _tmp14_ = _tmp13_; vala_report_error (_tmp14_, "cannot determinate parent metadata"); _vala_source_reference_unref0 (_tmp14_); result = NULL; _vala_gir_parser_metadata_unref0 (metadata); return result; } _tmp15_ = self->priv->begin; begin = _tmp15_; _tmp16_ = vala_gir_parser_metadata_parser_parse_identifier (self, TRUE); pattern = _tmp16_; _tmp17_ = pattern; if (_tmp17_ == NULL) { result = NULL; _g_free0 (pattern); _vala_gir_parser_metadata_unref0 (metadata); return result; } _tmp18_ = pattern; _tmp19_ = vala_gir_parser_metadata_parser_parse_selector (self); _tmp20_ = _tmp19_; _tmp21_ = begin; _tmp22_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp21_, NULL); _tmp23_ = _tmp22_; _tmp24_ = vala_gir_parser_metadata_new (_tmp18_, _tmp20_, _tmp23_); _vala_gir_parser_metadata_unref0 (metadata); metadata = _tmp24_; _vala_source_reference_unref0 (_tmp23_); _g_free0 (_tmp20_); _tmp25_ = self->priv->parent_metadata; _tmp26_ = metadata; vala_gir_parser_metadata_add_child (_tmp25_, _tmp26_); while (TRUE) { gboolean _tmp27_ = FALSE; ValaTokenType _tmp28_; ValaTokenType _tmp29_; ValaSourceLocation _tmp36_; gchar* _tmp37_; const gchar* _tmp38_; ValaGirParserMetadata* child = NULL; const gchar* _tmp39_; gchar* _tmp40_; gchar* _tmp41_; ValaSourceLocation _tmp42_; ValaSourceLocation _tmp43_; ValaSourceReference* _tmp44_; ValaSourceReference* _tmp45_; ValaGirParserMetadata* _tmp46_; ValaGirParserMetadata* _tmp47_; ValaGirParserMetadata* _tmp48_; ValaGirParserMetadata* _tmp49_; ValaGirParserMetadata* _tmp50_; ValaGirParserMetadata* _tmp51_; _tmp28_ = self->priv->current; if (_tmp28_ != VALA_TOKEN_TYPE_EOF) { _tmp27_ = !vala_gir_parser_metadata_parser_has_space (self); } else { _tmp27_ = FALSE; } if (!_tmp27_) { break; } _tmp29_ = self->priv->current; if (_tmp29_ != VALA_TOKEN_TYPE_DOT) { ValaSourceReference* _tmp30_; ValaSourceReference* _tmp31_; ValaTokenType _tmp32_; const gchar* _tmp33_; gchar* _tmp34_; gchar* _tmp35_; _tmp30_ = vala_gir_parser_metadata_parser_get_current_src (self); _tmp31_ = _tmp30_; _tmp32_ = self->priv->current; _tmp33_ = vala_token_type_to_string (_tmp32_); _tmp34_ = g_strdup_printf ("expected `.' got %s", _tmp33_); _tmp35_ = _tmp34_; vala_report_error (_tmp31_, _tmp35_); _g_free0 (_tmp35_); _vala_source_reference_unref0 (_tmp31_); break; } vala_gir_parser_metadata_parser_next (self); _tmp36_ = self->priv->begin; begin = _tmp36_; _tmp37_ = vala_gir_parser_metadata_parser_parse_identifier (self, TRUE); _g_free0 (pattern); pattern = _tmp37_; _tmp38_ = pattern; if (_tmp38_ == NULL) { result = NULL; _g_free0 (pattern); _vala_gir_parser_metadata_unref0 (metadata); return result; } _tmp39_ = pattern; _tmp40_ = vala_gir_parser_metadata_parser_parse_selector (self); _tmp41_ = _tmp40_; _tmp42_ = begin; _tmp43_ = self->priv->old_end; _tmp44_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp42_, &_tmp43_); _tmp45_ = _tmp44_; _tmp46_ = vala_gir_parser_metadata_new (_tmp39_, _tmp41_, _tmp45_); _tmp47_ = _tmp46_; _vala_source_reference_unref0 (_tmp45_); _g_free0 (_tmp41_); child = _tmp47_; _tmp48_ = metadata; _tmp49_ = child; vala_gir_parser_metadata_add_child (_tmp48_, _tmp49_); _tmp50_ = child; _tmp51_ = _vala_gir_parser_metadata_ref0 (_tmp50_); _vala_gir_parser_metadata_unref0 (metadata); metadata = _tmp51_; _vala_gir_parser_metadata_unref0 (child); } if (!is_relative) { ValaGirParserMetadata* _tmp52_; ValaGirParserMetadata* _tmp53_; _tmp52_ = metadata; _tmp53_ = _vala_gir_parser_metadata_ref0 (_tmp52_); _vala_gir_parser_metadata_unref0 (self->priv->parent_metadata); self->priv->parent_metadata = _tmp53_; } result = metadata; _g_free0 (pattern); return result; } static ValaExpression* vala_gir_parser_metadata_parser_parse_expression (ValaGirParserMetadataParser* self) { ValaSourceLocation begin = {0}; ValaSourceLocation _tmp0_; ValaSourceReference* src = NULL; ValaSourceReference* _tmp1_; ValaExpression* expr = NULL; ValaTokenType _tmp2_; ValaExpression* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->priv->begin; begin = _tmp0_; _tmp1_ = vala_gir_parser_metadata_parser_get_current_src (self); src = _tmp1_; expr = NULL; _tmp2_ = self->priv->current; switch (_tmp2_) { case VALA_TOKEN_TYPE_NULL: { ValaSourceReference* _tmp3_; ValaNullLiteral* _tmp4_; _tmp3_ = src; _tmp4_ = vala_null_literal_new (_tmp3_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp4_; break; } case VALA_TOKEN_TYPE_TRUE: { ValaSourceReference* _tmp5_; ValaBooleanLiteral* _tmp6_; _tmp5_ = src; _tmp6_ = vala_boolean_literal_new (TRUE, _tmp5_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp6_; break; } case VALA_TOKEN_TYPE_FALSE: { ValaSourceReference* _tmp7_; ValaBooleanLiteral* _tmp8_; _tmp7_ = src; _tmp8_ = vala_boolean_literal_new (FALSE, _tmp7_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp8_; break; } case VALA_TOKEN_TYPE_MINUS: { ValaExpression* inner = NULL; ValaExpression* _tmp9_; ValaExpression* _tmp10_; vala_gir_parser_metadata_parser_next (self); _tmp9_ = vala_gir_parser_metadata_parser_parse_expression (self); inner = _tmp9_; _tmp10_ = inner; if (_tmp10_ == NULL) { ValaSourceReference* _tmp11_; ValaTokenType _tmp12_; const gchar* _tmp13_; gchar* _tmp14_; gchar* _tmp15_; _tmp11_ = src; _tmp12_ = self->priv->current; _tmp13_ = vala_token_type_to_string (_tmp12_); _tmp14_ = g_strdup_printf ("expected expression after `-', got %s", _tmp13_); _tmp15_ = _tmp14_; vala_report_error (_tmp11_, _tmp15_); _g_free0 (_tmp15_); } else { ValaExpression* _tmp16_; ValaSourceLocation _tmp17_; ValaSourceReference* _tmp18_; ValaSourceReference* _tmp19_; ValaUnaryExpression* _tmp20_; _tmp16_ = inner; _tmp17_ = begin; _tmp18_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp17_, NULL); _tmp19_ = _tmp18_; _tmp20_ = vala_unary_expression_new (VALA_UNARY_OPERATOR_MINUS, _tmp16_, _tmp19_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp20_; _vala_source_reference_unref0 (_tmp19_); } result = expr; _vala_code_node_unref0 (inner); _vala_source_reference_unref0 (src); return result; } case VALA_TOKEN_TYPE_INTEGER_LITERAL: { gchar* _tmp21_; gchar* _tmp22_; ValaSourceReference* _tmp23_; ValaIntegerLiteral* _tmp24_; _tmp21_ = vala_gir_parser_metadata_parser_get_string (self, NULL, NULL); _tmp22_ = _tmp21_; _tmp23_ = src; _tmp24_ = vala_integer_literal_new (_tmp22_, _tmp23_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp24_; _g_free0 (_tmp22_); break; } case VALA_TOKEN_TYPE_REAL_LITERAL: { gchar* _tmp25_; gchar* _tmp26_; ValaSourceReference* _tmp27_; ValaRealLiteral* _tmp28_; _tmp25_ = vala_gir_parser_metadata_parser_get_string (self, NULL, NULL); _tmp26_ = _tmp25_; _tmp27_ = src; _tmp28_ = vala_real_literal_new (_tmp26_, _tmp27_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp28_; _g_free0 (_tmp26_); break; } case VALA_TOKEN_TYPE_STRING_LITERAL: { gchar* _tmp29_; gchar* _tmp30_; ValaSourceReference* _tmp31_; ValaStringLiteral* _tmp32_; _tmp29_ = vala_gir_parser_metadata_parser_get_string (self, NULL, NULL); _tmp30_ = _tmp29_; _tmp31_ = src; _tmp32_ = vala_string_literal_new (_tmp30_, _tmp31_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp32_; _g_free0 (_tmp30_); break; } case VALA_TOKEN_TYPE_IDENTIFIER: { gchar* _tmp33_; gchar* _tmp34_; ValaSourceReference* _tmp35_; ValaMemberAccess* _tmp36_; _tmp33_ = vala_gir_parser_metadata_parser_get_string (self, NULL, NULL); _tmp34_ = _tmp33_; _tmp35_ = src; _tmp36_ = vala_member_access_new (NULL, _tmp34_, _tmp35_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp36_; _g_free0 (_tmp34_); while (TRUE) { ValaExpression* _tmp43_; gchar* _tmp44_; gchar* _tmp45_; ValaSourceReference* _tmp46_; ValaSourceReference* _tmp47_; ValaMemberAccess* _tmp48_; if (!(vala_gir_parser_metadata_parser_next (self) == VALA_TOKEN_TYPE_DOT)) { break; } if (vala_gir_parser_metadata_parser_next (self) != VALA_TOKEN_TYPE_IDENTIFIER) { ValaSourceReference* _tmp37_; ValaSourceReference* _tmp38_; ValaTokenType _tmp39_; const gchar* _tmp40_; gchar* _tmp41_; gchar* _tmp42_; _tmp37_ = vala_gir_parser_metadata_parser_get_current_src (self); _tmp38_ = _tmp37_; _tmp39_ = self->priv->current; _tmp40_ = vala_token_type_to_string (_tmp39_); _tmp41_ = g_strdup_printf ("expected identifier got %s", _tmp40_); _tmp42_ = _tmp41_; vala_report_error (_tmp38_, _tmp42_); _g_free0 (_tmp42_); _vala_source_reference_unref0 (_tmp38_); break; } _tmp43_ = expr; _tmp44_ = vala_gir_parser_metadata_parser_get_string (self, NULL, NULL); _tmp45_ = _tmp44_; _tmp46_ = vala_gir_parser_metadata_parser_get_current_src (self); _tmp47_ = _tmp46_; _tmp48_ = vala_member_access_new (_tmp43_, _tmp45_, _tmp47_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp48_; _vala_source_reference_unref0 (_tmp47_); _g_free0 (_tmp45_); } result = expr; _vala_source_reference_unref0 (src); return result; } case VALA_TOKEN_TYPE_OPEN_PARENS: { ValaSourceReference* _tmp55_; ValaTuple* _tmp56_; if (vala_gir_parser_metadata_parser_next (self) != VALA_TOKEN_TYPE_CLOSE_PARENS) { ValaSourceReference* _tmp49_; ValaSourceReference* _tmp50_; ValaTokenType _tmp51_; const gchar* _tmp52_; gchar* _tmp53_; gchar* _tmp54_; _tmp49_ = vala_gir_parser_metadata_parser_get_current_src (self); _tmp50_ = _tmp49_; _tmp51_ = self->priv->current; _tmp52_ = vala_token_type_to_string (_tmp51_); _tmp53_ = g_strdup_printf ("expected `)', got %s", _tmp52_); _tmp54_ = _tmp53_; vala_report_error (_tmp50_, _tmp54_); _g_free0 (_tmp54_); _vala_source_reference_unref0 (_tmp50_); break; } _tmp55_ = src; _tmp56_ = vala_tuple_new (_tmp55_); _vala_code_node_unref0 (expr); expr = (ValaExpression*) _tmp56_; break; } default: { ValaSourceReference* _tmp57_; ValaTokenType _tmp58_; const gchar* _tmp59_; gchar* _tmp60_; gchar* _tmp61_; _tmp57_ = src; _tmp58_ = self->priv->current; _tmp59_ = vala_token_type_to_string (_tmp58_); _tmp60_ = g_strdup_printf ("expected literal or symbol got %s", _tmp59_); _tmp61_ = _tmp60_; vala_report_error (_tmp57_, _tmp61_); _g_free0 (_tmp61_); break; } } vala_gir_parser_metadata_parser_next (self); result = expr; _vala_source_reference_unref0 (src); return result; } static gboolean vala_gir_parser_metadata_parser_parse_args (ValaGirParserMetadataParser* self, ValaGirParserMetadata* metadata) { gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (metadata != NULL, FALSE); while (TRUE) { gboolean _tmp0_ = FALSE; gboolean _tmp1_ = FALSE; ValaTokenType _tmp2_; ValaSourceLocation begin = {0}; ValaSourceLocation _tmp3_; gchar* id = NULL; gchar* _tmp4_; const gchar* _tmp5_; ValaGirParserArgumentType* arg_type = NULL; const gchar* _tmp6_; ValaGirParserArgumentType* _tmp7_; ValaGirParserArgumentType* _tmp8_; ValaTokenType _tmp16_; ValaExpression* expr = NULL; ValaExpression* _tmp28_; ValaExpression* _tmp29_; ValaGirParserArgumentType* _tmp30_; ValaExpression* _tmp31_; ValaSourceLocation _tmp32_; ValaSourceReference* _tmp33_; ValaSourceReference* _tmp34_; ValaGirParserArgument* _tmp35_; ValaGirParserArgument* _tmp36_; _tmp2_ = self->priv->current; if (_tmp2_ != VALA_TOKEN_TYPE_EOF) { _tmp1_ = vala_gir_parser_metadata_parser_has_space (self); } else { _tmp1_ = FALSE; } if (_tmp1_) { _tmp0_ = !vala_gir_parser_metadata_parser_has_newline (self); } else { _tmp0_ = FALSE; } if (!_tmp0_) { break; } _tmp3_ = self->priv->begin; begin = _tmp3_; _tmp4_ = vala_gir_parser_metadata_parser_parse_identifier (self, FALSE); id = _tmp4_; _tmp5_ = id; if (_tmp5_ == NULL) { result = FALSE; _g_free0 (id); return result; } _tmp6_ = id; _tmp7_ = vala_gir_parser_argument_type_from_string (_tmp6_); arg_type = _tmp7_; _tmp8_ = arg_type; if (_tmp8_ == NULL) { ValaSourceLocation _tmp9_; ValaSourceLocation _tmp10_; ValaSourceReference* _tmp11_; ValaSourceReference* _tmp12_; const gchar* _tmp13_; gchar* _tmp14_; gchar* _tmp15_; _tmp9_ = begin; _tmp10_ = self->priv->old_end; _tmp11_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp9_, &_tmp10_); _tmp12_ = _tmp11_; _tmp13_ = id; _tmp14_ = g_strdup_printf ("unknown argument `%s'", _tmp13_); _tmp15_ = _tmp14_; vala_report_warning (_tmp12_, _tmp15_); _g_free0 (_tmp15_); _vala_source_reference_unref0 (_tmp12_); _g_free0 (arg_type); _g_free0 (id); continue; } _tmp16_ = self->priv->current; if (_tmp16_ != VALA_TOKEN_TYPE_ASSIGN) { ValaGirParserArgumentType* _tmp17_; ValaSourceLocation _tmp18_; ValaSourceReference* _tmp19_; ValaSourceReference* _tmp20_; ValaBooleanLiteral* _tmp21_; ValaBooleanLiteral* _tmp22_; ValaSourceLocation _tmp23_; ValaSourceReference* _tmp24_; ValaSourceReference* _tmp25_; ValaGirParserArgument* _tmp26_; ValaGirParserArgument* _tmp27_; _tmp17_ = arg_type; _tmp18_ = begin; _tmp19_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp18_, NULL); _tmp20_ = _tmp19_; _tmp21_ = vala_boolean_literal_new (TRUE, _tmp20_); _tmp22_ = _tmp21_; _tmp23_ = begin; _tmp24_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp23_, NULL); _tmp25_ = _tmp24_; _tmp26_ = vala_gir_parser_argument_new ((ValaExpression*) _tmp22_, _tmp25_); _tmp27_ = _tmp26_; vala_gir_parser_metadata_add_argument (metadata, *_tmp17_, _tmp27_); _vala_gir_parser_argument_unref0 (_tmp27_); _vala_source_reference_unref0 (_tmp25_); _vala_code_node_unref0 (_tmp22_); _vala_source_reference_unref0 (_tmp20_); _g_free0 (arg_type); _g_free0 (id); continue; } vala_gir_parser_metadata_parser_next (self); _tmp28_ = vala_gir_parser_metadata_parser_parse_expression (self); expr = _tmp28_; _tmp29_ = expr; if (_tmp29_ == NULL) { result = FALSE; _vala_code_node_unref0 (expr); _g_free0 (arg_type); _g_free0 (id); return result; } _tmp30_ = arg_type; _tmp31_ = expr; _tmp32_ = begin; _tmp33_ = vala_gir_parser_metadata_parser_get_src (self, &_tmp32_, NULL); _tmp34_ = _tmp33_; _tmp35_ = vala_gir_parser_argument_new (_tmp31_, _tmp34_); _tmp36_ = _tmp35_; vala_gir_parser_metadata_add_argument (metadata, *_tmp30_, _tmp36_); _vala_gir_parser_argument_unref0 (_tmp36_); _vala_source_reference_unref0 (_tmp34_); _vala_code_node_unref0 (expr); _g_free0 (arg_type); _g_free0 (id); } result = TRUE; return result; } static gboolean vala_gir_parser_metadata_parser_parse_rule (ValaGirParserMetadataParser* self) { ValaSourceLocation old_end = {0}; ValaSourceLocation _tmp0_; ValaGirParserMetadata* metadata = NULL; ValaGirParserMetadata* _tmp1_; ValaGirParserMetadata* _tmp2_; gboolean _tmp3_ = FALSE; ValaTokenType _tmp4_; ValaGirParserMetadata* _tmp7_; gboolean result = FALSE; g_return_val_if_fail (self != NULL, FALSE); _tmp0_ = self->priv->end; old_end = _tmp0_; _tmp1_ = vala_gir_parser_metadata_parser_parse_pattern (self); metadata = _tmp1_; _tmp2_ = metadata; if (_tmp2_ == NULL) { result = FALSE; _vala_gir_parser_metadata_unref0 (metadata); return result; } _tmp4_ = self->priv->current; if (_tmp4_ == VALA_TOKEN_TYPE_EOF) { _tmp3_ = TRUE; } else { ValaSourceLocation _tmp5_; ValaSourceLocation _tmp6_; _tmp5_ = old_end; _tmp6_ = self->priv->end; _tmp3_ = _tmp5_.line != _tmp6_.line; } if (_tmp3_) { result = TRUE; _vala_gir_parser_metadata_unref0 (metadata); return result; } _tmp7_ = metadata; result = vala_gir_parser_metadata_parser_parse_args (self, _tmp7_); _vala_gir_parser_metadata_unref0 (metadata); return result; } static void vala_gir_parser_value_metadata_parser_init (GValue* value) { value->data[0].v_pointer = NULL; } static void vala_gir_parser_value_metadata_parser_free_value (GValue* value) { if (value->data[0].v_pointer) { vala_gir_parser_metadata_parser_unref (value->data[0].v_pointer); } } static void vala_gir_parser_value_metadata_parser_copy_value (const GValue* src_value, GValue* dest_value) { if (src_value->data[0].v_pointer) { dest_value->data[0].v_pointer = vala_gir_parser_metadata_parser_ref (src_value->data[0].v_pointer); } else { dest_value->data[0].v_pointer = NULL; } } static gpointer vala_gir_parser_value_metadata_parser_peek_pointer (const GValue* value) { return value->data[0].v_pointer; } static gchar* vala_gir_parser_value_metadata_parser_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { if (collect_values[0].v_pointer) { ValaGirParserMetadataParser * object; object = collect_values[0].v_pointer; if (object->parent_instance.g_class == NULL) { return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) { return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } value->data[0].v_pointer = vala_gir_parser_metadata_parser_ref (object); } else { value->data[0].v_pointer = NULL; } return NULL; } static gchar* vala_gir_parser_value_metadata_parser_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { ValaGirParserMetadataParser ** object_p; object_p = collect_values[0].v_pointer; if (!object_p) { return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); } if (!value->data[0].v_pointer) { *object_p = NULL; } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) { *object_p = value->data[0].v_pointer; } else { *object_p = vala_gir_parser_metadata_parser_ref (value->data[0].v_pointer); } return NULL; } static GParamSpec* vala_gir_parser_param_spec_metadata_parser (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) { ValaGirParserParamSpecMetadataParser* spec; g_return_val_if_fail (g_type_is_a (object_type, VALA_GIR_PARSER_TYPE_METADATA_PARSER), 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 vala_gir_parser_value_get_metadata_parser (const GValue* value) { g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_METADATA_PARSER), NULL); return value->data[0].v_pointer; } static void vala_gir_parser_value_set_metadata_parser (GValue* value, gpointer v_object) { ValaGirParserMetadataParser * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_METADATA_PARSER)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_METADATA_PARSER)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; vala_gir_parser_metadata_parser_ref (value->data[0].v_pointer); } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_metadata_parser_unref (old); } } static void vala_gir_parser_value_take_metadata_parser (GValue* value, gpointer v_object) { ValaGirParserMetadataParser * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_METADATA_PARSER)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_METADATA_PARSER)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_metadata_parser_unref (old); } } static void vala_gir_parser_metadata_parser_class_init (ValaGirParserMetadataParserClass * klass, gpointer klass_data) { vala_gir_parser_metadata_parser_parent_class = g_type_class_peek_parent (klass); ((ValaGirParserMetadataParserClass *) klass)->finalize = vala_gir_parser_metadata_parser_finalize; g_type_class_adjust_private_offset (klass, &ValaGirParserMetadataParser_private_offset); } static void vala_gir_parser_metadata_parser_instance_init (ValaGirParserMetadataParser * self, gpointer klass) { ValaGirParserMetadata* _tmp0_; self->priv = vala_gir_parser_metadata_parser_get_instance_private (self); _tmp0_ = vala_gir_parser_metadata_new ("", NULL, NULL); self->priv->tree = _tmp0_; self->ref_count = 1; } static void vala_gir_parser_metadata_parser_finalize (ValaGirParserMetadataParser * obj) { ValaGirParserMetadataParser * self; self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_GIR_PARSER_TYPE_METADATA_PARSER, ValaGirParserMetadataParser); g_signal_handlers_destroy (self); _vala_gir_parser_metadata_unref0 (self->priv->tree); _vala_scanner_unref0 (self->priv->scanner); _vala_gir_parser_metadata_unref0 (self->priv->parent_metadata); } static GType vala_gir_parser_metadata_parser_get_type_once (void) { static const GTypeValueTable g_define_type_value_table = { vala_gir_parser_value_metadata_parser_init, vala_gir_parser_value_metadata_parser_free_value, vala_gir_parser_value_metadata_parser_copy_value, vala_gir_parser_value_metadata_parser_peek_pointer, "p", vala_gir_parser_value_metadata_parser_collect_value, "p", vala_gir_parser_value_metadata_parser_lcopy_value }; static const GTypeInfo g_define_type_info = { sizeof (ValaGirParserMetadataParserClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_parser_metadata_parser_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirParserMetadataParser), 0, (GInstanceInitFunc) vala_gir_parser_metadata_parser_instance_init, &g_define_type_value_table }; static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) }; GType vala_gir_parser_metadata_parser_type_id; vala_gir_parser_metadata_parser_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaGirParserMetadataParser", &g_define_type_info, &g_define_type_fundamental_info, 0); ValaGirParserMetadataParser_private_offset = g_type_add_instance_private (vala_gir_parser_metadata_parser_type_id, sizeof (ValaGirParserMetadataParserPrivate)); return vala_gir_parser_metadata_parser_type_id; } static GType vala_gir_parser_metadata_parser_get_type (void) { static volatile gsize vala_gir_parser_metadata_parser_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_metadata_parser_type_id__volatile)) { GType vala_gir_parser_metadata_parser_type_id; vala_gir_parser_metadata_parser_type_id = vala_gir_parser_metadata_parser_get_type_once (); g_once_init_leave (&vala_gir_parser_metadata_parser_type_id__volatile, vala_gir_parser_metadata_parser_type_id); } return vala_gir_parser_metadata_parser_type_id__volatile; } static gpointer vala_gir_parser_metadata_parser_ref (gpointer instance) { ValaGirParserMetadataParser * self; self = instance; g_atomic_int_inc (&self->ref_count); return instance; } static void vala_gir_parser_metadata_parser_unref (gpointer instance) { ValaGirParserMetadataParser * self; self = instance; if (g_atomic_int_dec_and_test (&self->ref_count)) { VALA_GIR_PARSER_METADATA_PARSER_GET_CLASS (self)->finalize (self); g_type_free_instance ((GTypeInstance *) self); } } static ValaGirParserNode* vala_gir_parser_node_construct (GType object_type, const gchar* name) { ValaGirParserNode* self = NULL; gchar* _tmp0_; self = (ValaGirParserNode*) g_type_create_instance (object_type); _tmp0_ = g_strdup (name); _g_free0 (self->name); self->name = _tmp0_; return self; } static ValaGirParserNode* vala_gir_parser_node_new (const gchar* name) { return vala_gir_parser_node_construct (VALA_GIR_PARSER_TYPE_NODE, name); } static void vala_gir_parser_node_add_member (ValaGirParserNode* self, ValaGirParserNode* node) { ValaArrayList* nodes = NULL; ValaHashMap* _tmp0_; const gchar* _tmp1_; gpointer _tmp2_; ValaArrayList* _tmp3_; ValaArrayList* _tmp9_; ValaArrayList* _tmp10_; g_return_if_fail (self != NULL); g_return_if_fail (node != NULL); _tmp0_ = self->scope; _tmp1_ = node->name; _tmp2_ = vala_map_get ((ValaMap*) _tmp0_, _tmp1_); nodes = (ValaArrayList*) _tmp2_; _tmp3_ = nodes; if (_tmp3_ == NULL) { GEqualFunc _tmp4_; ValaArrayList* _tmp5_; ValaHashMap* _tmp6_; const gchar* _tmp7_; ValaArrayList* _tmp8_; _tmp4_ = g_direct_equal; _tmp5_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_NODE, (GBoxedCopyFunc) vala_gir_parser_node_ref, (GDestroyNotify) vala_gir_parser_node_unref, _tmp4_); _vala_iterable_unref0 (nodes); nodes = _tmp5_; _tmp6_ = self->scope; _tmp7_ = node->name; _tmp8_ = nodes; vala_map_set ((ValaMap*) _tmp6_, _tmp7_, _tmp8_); } _tmp9_ = nodes; vala_collection_add ((ValaCollection*) _tmp9_, node); _tmp10_ = self->members; vala_collection_add ((ValaCollection*) _tmp10_, node); node->parent = self; _vala_iterable_unref0 (nodes); } static void vala_gir_parser_node_remove_member (ValaGirParserNode* self, ValaGirParserNode* node) { ValaArrayList* nodes = NULL; ValaHashMap* _tmp0_; const gchar* _tmp1_; gpointer _tmp2_; ValaArrayList* _tmp3_; ValaArrayList* _tmp4_; gint _tmp5_; gint _tmp6_; ValaArrayList* _tmp9_; g_return_if_fail (self != NULL); g_return_if_fail (node != NULL); _tmp0_ = self->scope; _tmp1_ = node->name; _tmp2_ = vala_map_get ((ValaMap*) _tmp0_, _tmp1_); nodes = (ValaArrayList*) _tmp2_; _tmp3_ = nodes; vala_collection_remove ((ValaCollection*) _tmp3_, node); _tmp4_ = nodes; _tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_); _tmp6_ = _tmp5_; if (_tmp6_ == 0) { ValaHashMap* _tmp7_; const gchar* _tmp8_; _tmp7_ = self->scope; _tmp8_ = node->name; vala_map_remove ((ValaMap*) _tmp7_, _tmp8_); } _tmp9_ = self->members; vala_collection_remove ((ValaCollection*) _tmp9_, node); node->parent = NULL; _vala_iterable_unref0 (nodes); } static ValaGirParserNode* vala_gir_parser_node_lookup (ValaGirParserNode* self, const gchar* name, gboolean create_namespace, ValaSourceReference* source_reference) { ValaArrayList* nodes = NULL; ValaHashMap* _tmp0_; gpointer _tmp1_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp2_; ValaGirParserNode* _tmp5_; ValaGirParserNode* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); _tmp0_ = self->scope; _tmp1_ = vala_map_get ((ValaMap*) _tmp0_, name); nodes = (ValaArrayList*) _tmp1_; node = NULL; _tmp2_ = nodes; if (_tmp2_ != NULL) { ValaArrayList* _tmp3_; gpointer _tmp4_; _tmp3_ = nodes; _tmp4_ = vala_list_get ((ValaList*) _tmp3_, 0); _vala_gir_parser_node_unref0 (node); node = (ValaGirParserNode*) _tmp4_; } _tmp5_ = node; if (_tmp5_ == NULL) { ValaSymbol* sym = NULL; ValaSymbol* _tmp6_; gboolean _tmp11_ = FALSE; ValaSymbol* _tmp12_; sym = NULL; _tmp6_ = self->symbol; if (_tmp6_ != NULL) { ValaSymbol* _tmp7_; ValaScope* _tmp8_; ValaScope* _tmp9_; ValaSymbol* _tmp10_; _tmp7_ = self->symbol; _tmp8_ = vala_symbol_get_scope (_tmp7_); _tmp9_ = _tmp8_; _tmp10_ = vala_scope_lookup (_tmp9_, name); _vala_code_node_unref0 (sym); sym = _tmp10_; } _tmp12_ = sym; if (_tmp12_ != NULL) { _tmp11_ = TRUE; } else { _tmp11_ = create_namespace; } if (_tmp11_) { ValaGirParserNode* _tmp13_; ValaGirParserNode* _tmp14_; ValaSymbol* _tmp15_; ValaSymbol* _tmp16_; ValaGirParserNode* _tmp17_; ValaGirParserNode* _tmp18_; ValaSymbol* _tmp19_; ValaGirParserNode* _tmp20_; ValaSourceReference* _tmp21_; ValaGirParserNode* _tmp22_; ValaSymbol* _tmp23_; _tmp13_ = vala_gir_parser_node_new (name); _vala_gir_parser_node_unref0 (node); node = _tmp13_; _tmp14_ = node; _tmp15_ = sym; _tmp16_ = _vala_code_node_ref0 (_tmp15_); _vala_code_node_unref0 (_tmp14_->symbol); _tmp14_->symbol = _tmp16_; _tmp17_ = node; _tmp18_ = node; _tmp19_ = _tmp18_->symbol; _tmp17_->new_symbol = _tmp19_ == NULL; _tmp20_ = node; _tmp21_ = _vala_source_reference_ref0 (source_reference); _vala_source_reference_unref0 (_tmp20_->source_reference); _tmp20_->source_reference = _tmp21_; _tmp22_ = node; vala_gir_parser_node_add_member (self, _tmp22_); _tmp23_ = sym; if (_tmp23_ == NULL) { ValaArrayList* _tmp24_; ValaGirParserNode* _tmp25_; _tmp24_ = vala_gir_parser_node_new_namespaces; _tmp25_ = node; vala_collection_add ((ValaCollection*) _tmp24_, _tmp25_); } } _vala_code_node_unref0 (sym); } result = node; _vala_iterable_unref0 (nodes); return result; } static ValaArrayList* vala_gir_parser_node_lookup_all (ValaGirParserNode* self, const gchar* name) { ValaHashMap* _tmp0_; gpointer _tmp1_; ValaArrayList* result = NULL; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); _tmp0_ = self->scope; _tmp1_ = vala_map_get ((ValaMap*) _tmp0_, name); result = (ValaArrayList*) _tmp1_; return result; } static ValaUnresolvedSymbol* vala_gir_parser_node_get_unresolved_symbol (ValaGirParserNode* self) { ValaGirParserNode* _tmp0_; const gchar* _tmp1_; ValaUnresolvedSymbol* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->parent; _tmp1_ = _tmp0_->name; if (_tmp1_ == NULL) { const gchar* _tmp2_; ValaUnresolvedSymbol* _tmp3_; _tmp2_ = self->name; _tmp3_ = vala_unresolved_symbol_new (NULL, _tmp2_, NULL); result = _tmp3_; return result; } else { ValaGirParserNode* _tmp4_; ValaUnresolvedSymbol* _tmp5_; ValaUnresolvedSymbol* _tmp6_; const gchar* _tmp7_; ValaUnresolvedSymbol* _tmp8_; ValaUnresolvedSymbol* _tmp9_; _tmp4_ = self->parent; _tmp5_ = vala_gir_parser_node_get_unresolved_symbol (_tmp4_); _tmp6_ = _tmp5_; _tmp7_ = self->name; _tmp8_ = vala_unresolved_symbol_new (_tmp6_, _tmp7_, NULL); _tmp9_ = _tmp8_; _vala_code_node_unref0 (_tmp6_); result = _tmp9_; return result; } } static gchar* vala_gir_parser_node_get_full_name (ValaGirParserNode* self) { ValaGirParserNode* _tmp0_; const gchar* _tmp3_; ValaGirParserNode* _tmp6_; gchar* _tmp7_; gchar* _tmp8_; gboolean _tmp9_; ValaGirParserNode* _tmp12_; gchar* _tmp13_; gchar* _tmp14_; const gchar* _tmp15_; gchar* _tmp16_; gchar* _tmp17_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->parent; if (_tmp0_ == NULL) { const gchar* _tmp1_; gchar* _tmp2_; _tmp1_ = self->name; _tmp2_ = g_strdup (_tmp1_); result = _tmp2_; return result; } _tmp3_ = self->name; if (_tmp3_ == NULL) { ValaGirParserNode* _tmp4_; gchar* _tmp5_; _tmp4_ = self->parent; _tmp5_ = vala_gir_parser_node_get_full_name (_tmp4_); result = _tmp5_; return result; } _tmp6_ = self->parent; _tmp7_ = vala_gir_parser_node_get_full_name (_tmp6_); _tmp8_ = _tmp7_; _tmp9_ = _tmp8_ == NULL; _g_free0 (_tmp8_); if (_tmp9_) { const gchar* _tmp10_; gchar* _tmp11_; _tmp10_ = self->name; _tmp11_ = g_strdup (_tmp10_); result = _tmp11_; return result; } _tmp12_ = self->parent; _tmp13_ = vala_gir_parser_node_get_full_name (_tmp12_); _tmp14_ = _tmp13_; _tmp15_ = self->name; _tmp16_ = g_strdup_printf ("%s.%s", _tmp14_, _tmp15_); _tmp17_ = _tmp16_; _g_free0 (_tmp14_); result = _tmp17_; return result; } static gchar* vala_gir_parser_node_get_default_gir_name (ValaGirParserNode* self) { GString* default_name = NULL; GString* _tmp0_; GString* _tmp15_; const gchar* _tmp16_; gchar* _tmp17_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = g_string_new (""); default_name = _tmp0_; { ValaGirParserNode* node = NULL; node = self; { gboolean _tmp1_ = FALSE; _tmp1_ = TRUE; while (TRUE) { ValaGirParserNode* _tmp4_; ValaGirParserNode* _tmp5_; ValaSymbol* _tmp6_; GString* _tmp12_; ValaGirParserNode* _tmp13_; const gchar* _tmp14_; if (!_tmp1_) { ValaGirParserNode* _tmp2_; ValaGirParserNode* _tmp3_; _tmp2_ = node; _tmp3_ = _tmp2_->parent; node = _tmp3_; } _tmp1_ = FALSE; _tmp4_ = node; if (!(_tmp4_ != NULL)) { break; } _tmp5_ = node; _tmp6_ = _tmp5_->symbol; if (VALA_IS_NAMESPACE (_tmp6_)) { ValaGirParserNode* _tmp7_; ValaSymbol* _tmp8_; gchar* _tmp9_; gchar* _tmp10_; gboolean _tmp11_; _tmp7_ = node; _tmp8_ = _tmp7_->symbol; _tmp9_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp8_, "CCode", "gir_namespace", NULL); _tmp10_ = _tmp9_; _tmp11_ = _tmp10_ != NULL; _g_free0 (_tmp10_); if (_tmp11_) { break; } } _tmp12_ = default_name; _tmp13_ = node; _tmp14_ = _tmp13_->name; g_string_prepend (_tmp12_, _tmp14_); } } } _tmp15_ = default_name; _tmp16_ = _tmp15_->str; _tmp17_ = g_strdup (_tmp16_); result = _tmp17_; _g_string_free0 (default_name); return result; } static gchar* vala_gir_parser_node_get_gir_name (ValaGirParserNode* self) { gchar* gir_name = NULL; ValaMap* _tmp0_; gpointer _tmp1_; const gchar* _tmp2_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->girdata; _tmp1_ = vala_map_get (_tmp0_, "name"); gir_name = (gchar*) _tmp1_; _tmp2_ = gir_name; if (_tmp2_ == NULL) { ValaMap* _tmp3_; gpointer _tmp4_; _tmp3_ = self->girdata; _tmp4_ = vala_map_get (_tmp3_, "glib:name"); _g_free0 (gir_name); gir_name = (gchar*) _tmp4_; } result = gir_name; return result; } static gchar* vala_gir_parser_node_get_lower_case_cprefix (ValaGirParserNode* self) { const gchar* _tmp0_; gchar* prefix = NULL; ValaSymbol* _tmp2_; gchar* _tmp3_; gboolean _tmp4_ = FALSE; const gchar* _tmp5_; gboolean _tmp17_ = FALSE; gboolean _tmp18_ = FALSE; const gchar* _tmp19_; const gchar* _tmp46_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->name; if (_tmp0_ == NULL) { gchar* _tmp1_; _tmp1_ = g_strdup (""); result = _tmp1_; return result; } _tmp2_ = self->symbol; _tmp3_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp2_, "CCode", "lower_case_cprefix", NULL); prefix = _tmp3_; _tmp5_ = prefix; if (_tmp5_ == NULL) { gboolean _tmp6_ = FALSE; ValaSymbol* _tmp7_; _tmp7_ = self->symbol; if (VALA_IS_OBJECT_TYPE_SYMBOL (_tmp7_)) { _tmp6_ = TRUE; } else { ValaSymbol* _tmp8_; _tmp8_ = self->symbol; _tmp6_ = VALA_IS_STRUCT (_tmp8_); } _tmp4_ = _tmp6_; } else { _tmp4_ = FALSE; } if (_tmp4_) { ValaGirParserMetadata* _tmp9_; _tmp9_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp9_, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX)) { ValaGirParserMetadata* _tmp10_; gchar* _tmp11_; _tmp10_ = self->metadata; _tmp11_ = vala_gir_parser_metadata_get_string (_tmp10_, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX); _g_free0 (prefix); prefix = _tmp11_; } else { ValaGirParserMetadata* _tmp12_; _tmp12_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp12_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX)) { ValaGirParserMetadata* _tmp13_; gchar* _tmp14_; _tmp13_ = self->metadata; _tmp14_ = vala_gir_parser_metadata_get_string (_tmp13_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX); _g_free0 (prefix); prefix = _tmp14_; } else { ValaSymbol* _tmp15_; gchar* _tmp16_; _tmp15_ = self->symbol; _tmp16_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp15_, "CCode", "cprefix", NULL); _g_free0 (prefix); prefix = _tmp16_; } } } _tmp19_ = prefix; if (_tmp19_ == NULL) { ValaMap* _tmp20_; _tmp20_ = self->girdata; _tmp18_ = _tmp20_ != NULL; } else { _tmp18_ = FALSE; } if (_tmp18_) { gboolean _tmp21_ = FALSE; ValaMap* _tmp22_; _tmp22_ = self->girdata; if (vala_map_contains (_tmp22_, "c:symbol-prefix")) { _tmp21_ = TRUE; } else { ValaMap* _tmp23_; _tmp23_ = self->girdata; _tmp21_ = vala_map_contains (_tmp23_, "c:symbol-prefixes"); } _tmp17_ = _tmp21_; } else { _tmp17_ = FALSE; } if (_tmp17_) { ValaGirParserNode* cur = NULL; cur = self; { gboolean _tmp24_ = FALSE; _tmp24_ = TRUE; while (TRUE) { ValaGirParserNode* _tmp26_; ValaMap* _tmp27_; ValaGirParserNode* _tmp44_; ValaGirParserNode* _tmp45_; if (!_tmp24_) { ValaGirParserNode* _tmp25_; _tmp25_ = cur; if (!(_tmp25_ != NULL)) { break; } } _tmp24_ = FALSE; _tmp26_ = cur; _tmp27_ = _tmp26_->girdata; if (_tmp27_ != NULL) { gchar* p = NULL; ValaGirParserNode* _tmp28_; ValaMap* _tmp29_; gpointer _tmp30_; const gchar* _tmp31_; const gchar* _tmp39_; _tmp28_ = cur; _tmp29_ = _tmp28_->girdata; _tmp30_ = vala_map_get (_tmp29_, "c:symbol-prefix"); p = (gchar*) _tmp30_; _tmp31_ = p; if (_tmp31_ == NULL) { ValaGirParserNode* _tmp32_; ValaMap* _tmp33_; gpointer _tmp34_; const gchar* _tmp35_; _tmp32_ = cur; _tmp33_ = _tmp32_->girdata; _tmp34_ = vala_map_get (_tmp33_, "c:symbol-prefixes"); _g_free0 (p); p = (gchar*) _tmp34_; _tmp35_ = p; if (_tmp35_ != NULL) { gint idx = 0; const gchar* _tmp36_; _tmp36_ = p; idx = string_index_of (_tmp36_, ",", 0); if (idx >= 0) { const gchar* _tmp37_; gchar* _tmp38_; _tmp37_ = p; _tmp38_ = string_substring (_tmp37_, (glong) 0, (glong) idx); _g_free0 (p); p = _tmp38_; } } } _tmp39_ = p; if (_tmp39_ != NULL) { const gchar* _tmp40_ = NULL; const gchar* _tmp41_; const gchar* _tmp42_; gchar* _tmp43_; _tmp41_ = prefix; _tmp40_ = _tmp41_; if (_tmp40_ == NULL) { _tmp40_ = ""; } _tmp42_ = p; _tmp43_ = g_strdup_printf ("%s_%s", _tmp42_, _tmp40_); _g_free0 (prefix); prefix = _tmp43_; } _g_free0 (p); } _tmp44_ = cur; _tmp45_ = _tmp44_->parent; cur = _tmp45_; } } } _tmp46_ = prefix; if (_tmp46_ == NULL) { gchar* _tmp47_; _tmp47_ = vala_gir_parser_node_get_default_lower_case_cprefix (self); _g_free0 (prefix); prefix = _tmp47_; } result = prefix; return result; } static gchar* vala_gir_parser_node_get_default_lower_case_cprefix (ValaGirParserNode* self) { ValaGirParserNode* _tmp0_; gchar* _tmp1_; gchar* _tmp2_; gchar* _tmp3_; gchar* _tmp4_; gchar* _tmp5_; gchar* _tmp6_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->parent; _tmp1_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp0_); _tmp2_ = _tmp1_; _tmp3_ = vala_gir_parser_node_get_lower_case_csuffix (self); _tmp4_ = _tmp3_; _tmp5_ = g_strdup_printf ("%s%s_", _tmp2_, _tmp4_); _tmp6_ = _tmp5_; _g_free0 (_tmp4_); _g_free0 (_tmp2_); result = _tmp6_; return result; } static gchar* vala_gir_parser_node_get_lower_case_csuffix (ValaGirParserNode* self) { gchar* suffix = NULL; ValaSymbol* _tmp0_; gchar* _tmp1_; ValaGirParserMetadata* _tmp2_; gboolean _tmp5_ = FALSE; gboolean _tmp6_ = FALSE; gboolean _tmp7_ = FALSE; const gchar* _tmp8_; const gchar* _tmp16_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->symbol; _tmp1_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp0_, "CCode", "lower_case_csuffix", NULL); suffix = _tmp1_; _tmp2_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp2_, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CSUFFIX)) { ValaGirParserMetadata* _tmp3_; gchar* _tmp4_; _tmp3_ = self->metadata; _tmp4_ = vala_gir_parser_metadata_get_string (_tmp3_, VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CSUFFIX); _g_free0 (suffix); suffix = _tmp4_; } _tmp8_ = suffix; if (_tmp8_ == NULL) { ValaMap* _tmp9_; _tmp9_ = self->girdata; _tmp7_ = _tmp9_ != NULL; } else { _tmp7_ = FALSE; } if (_tmp7_) { ValaMap* _tmp10_; gpointer _tmp11_; gchar* _tmp12_; _tmp10_ = self->girdata; _tmp11_ = vala_map_get (_tmp10_, "c:symbol-prefix"); _tmp12_ = (gchar*) _tmp11_; _tmp6_ = _tmp12_ != NULL; _g_free0 (_tmp12_); } else { _tmp6_ = FALSE; } if (_tmp6_) { ValaGirParserMetadata* _tmp13_; _tmp13_ = self->metadata; _tmp5_ = !vala_gir_parser_metadata_has_argument (_tmp13_, VALA_GIR_PARSER_ARGUMENT_TYPE_NAME); } else { _tmp5_ = FALSE; } if (_tmp5_) { ValaMap* _tmp14_; gpointer _tmp15_; _tmp14_ = self->girdata; _tmp15_ = vala_map_get (_tmp14_, "c:symbol-prefix"); _g_free0 (suffix); suffix = (gchar*) _tmp15_; } _tmp16_ = suffix; if (_tmp16_ == NULL) { gchar* _tmp17_; _tmp17_ = vala_gir_parser_node_get_default_lower_case_csuffix (self); _g_free0 (suffix); suffix = _tmp17_; } result = suffix; return result; } static gchar* vala_gir_parser_node_get_default_lower_case_csuffix (ValaGirParserNode* self) { gchar* csuffix = NULL; const gchar* _tmp0_; gchar* _tmp1_; const gchar* _tmp2_; const gchar* _tmp16_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->name; _tmp1_ = vala_symbol_camel_case_to_lower_case (_tmp0_); csuffix = _tmp1_; _tmp2_ = csuffix; if (g_str_has_prefix (_tmp2_, "type_")) { const gchar* _tmp3_; gint _tmp4_; gint _tmp5_; gchar* _tmp6_; gchar* _tmp7_; gchar* _tmp8_; _tmp3_ = csuffix; _tmp4_ = strlen ("type_"); _tmp5_ = _tmp4_; _tmp6_ = string_substring (_tmp3_, (glong) _tmp5_, (glong) -1); _tmp7_ = _tmp6_; _tmp8_ = g_strconcat ("type", _tmp7_, NULL); _g_free0 (csuffix); csuffix = _tmp8_; _g_free0 (_tmp7_); } else { const gchar* _tmp9_; _tmp9_ = csuffix; if (g_str_has_prefix (_tmp9_, "is_")) { const gchar* _tmp10_; gint _tmp11_; gint _tmp12_; gchar* _tmp13_; gchar* _tmp14_; gchar* _tmp15_; _tmp10_ = csuffix; _tmp11_ = strlen ("is_"); _tmp12_ = _tmp11_; _tmp13_ = string_substring (_tmp10_, (glong) _tmp12_, (glong) -1); _tmp14_ = _tmp13_; _tmp15_ = g_strconcat ("is", _tmp14_, NULL); _g_free0 (csuffix); csuffix = _tmp15_; _g_free0 (_tmp14_); } } _tmp16_ = csuffix; if (g_str_has_suffix (_tmp16_, "_class")) { const gchar* _tmp17_; const gchar* _tmp18_; gint _tmp19_; gint _tmp20_; gint _tmp21_; gint _tmp22_; gchar* _tmp23_; gchar* _tmp24_; gchar* _tmp25_; _tmp17_ = csuffix; _tmp18_ = csuffix; _tmp19_ = strlen (_tmp18_); _tmp20_ = _tmp19_; _tmp21_ = strlen ("_class"); _tmp22_ = _tmp21_; _tmp23_ = string_substring (_tmp17_, (glong) 0, (glong) (_tmp20_ - _tmp22_)); _tmp24_ = _tmp23_; _tmp25_ = g_strconcat (_tmp24_, "class", NULL); _g_free0 (csuffix); csuffix = _tmp25_; _g_free0 (_tmp24_); } result = csuffix; return result; } static gchar* vala_gir_parser_node_get_cprefix (ValaGirParserNode* self) { const gchar* _tmp0_; gchar* prefix = NULL; ValaGirParserMetadata* _tmp2_; gboolean _tmp7_ = FALSE; gboolean _tmp8_ = FALSE; const gchar* _tmp9_; const gchar* _tmp19_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->name; if (_tmp0_ == NULL) { gchar* _tmp1_; _tmp1_ = g_strdup (""); result = _tmp1_; return result; } _tmp2_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp2_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX)) { ValaGirParserMetadata* _tmp3_; gchar* _tmp4_; _tmp3_ = self->metadata; _tmp4_ = vala_gir_parser_metadata_get_string (_tmp3_, VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX); _g_free0 (prefix); prefix = _tmp4_; } else { ValaSymbol* _tmp5_; gchar* _tmp6_; _tmp5_ = self->symbol; _tmp6_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp5_, "CCode", "cprefix", NULL); _g_free0 (prefix); prefix = _tmp6_; } _tmp9_ = prefix; if (_tmp9_ == NULL) { ValaMap* _tmp10_; _tmp10_ = self->girdata; _tmp8_ = _tmp10_ != NULL; } else { _tmp8_ = FALSE; } if (_tmp8_) { ValaMap* _tmp11_; gpointer _tmp12_; gchar* _tmp13_; _tmp11_ = self->girdata; _tmp12_ = vala_map_get (_tmp11_, "c:identifier-prefixes"); _tmp13_ = (gchar*) _tmp12_; _tmp7_ = _tmp13_ != NULL; _g_free0 (_tmp13_); } else { _tmp7_ = FALSE; } if (_tmp7_) { ValaMap* _tmp14_; gpointer _tmp15_; gint idx = 0; const gchar* _tmp16_; _tmp14_ = self->girdata; _tmp15_ = vala_map_get (_tmp14_, "c:identifier-prefixes"); _g_free0 (prefix); prefix = (gchar*) _tmp15_; _tmp16_ = prefix; idx = string_index_of (_tmp16_, ",", 0); if (idx != -1) { const gchar* _tmp17_; gchar* _tmp18_; _tmp17_ = prefix; _tmp18_ = string_substring (_tmp17_, (glong) 0, (glong) idx); _g_free0 (prefix); prefix = _tmp18_; } } _tmp19_ = prefix; if (_tmp19_ == NULL) { gboolean _tmp20_ = FALSE; ValaSymbol* _tmp21_; _tmp21_ = self->symbol; if (VALA_IS_ENUM (_tmp21_)) { _tmp20_ = TRUE; } else { ValaSymbol* _tmp22_; _tmp22_ = self->symbol; _tmp20_ = VALA_IS_ERROR_DOMAIN (_tmp22_); } if (_tmp20_) { ValaGirParserNode* _tmp23_; gchar* _tmp24_; gchar* _tmp25_; gchar* _tmp26_; gchar* _tmp27_; const gchar* _tmp28_; gchar* _tmp29_; _tmp23_ = self->parent; _tmp24_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp23_); _tmp25_ = _tmp24_; _tmp26_ = g_ascii_strup (_tmp25_, (gssize) -1); _tmp27_ = _tmp26_; _tmp28_ = self->name; _tmp29_ = g_strdup_printf ("%s%s", _tmp27_, _tmp28_); _g_free0 (prefix); prefix = _tmp29_; _g_free0 (_tmp27_); _g_free0 (_tmp25_); } else { gchar* _tmp30_; _tmp30_ = vala_gir_parser_node_get_cname (self); _g_free0 (prefix); prefix = _tmp30_; } } result = prefix; return result; } static gchar* vala_gir_parser_node_get_cname (ValaGirParserNode* self) { const gchar* _tmp0_; gchar* cname = NULL; ValaGirParserMetadata* _tmp2_; ValaMap* _tmp7_; const gchar* _tmp17_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->name; if (_tmp0_ == NULL) { gchar* _tmp1_; _tmp1_ = g_strdup (""); result = _tmp1_; return result; } _tmp2_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp2_, VALA_GIR_PARSER_ARGUMENT_TYPE_CNAME)) { ValaGirParserMetadata* _tmp3_; gchar* _tmp4_; _tmp3_ = self->metadata; _tmp4_ = vala_gir_parser_metadata_get_string (_tmp3_, VALA_GIR_PARSER_ARGUMENT_TYPE_CNAME); _g_free0 (cname); cname = _tmp4_; } else { ValaSymbol* _tmp5_; gchar* _tmp6_; _tmp5_ = self->symbol; _tmp6_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp5_, "CCode", "cname", NULL); _g_free0 (cname); cname = _tmp6_; } _tmp7_ = self->girdata; if (_tmp7_ != NULL) { const gchar* _tmp8_; const gchar* _tmp11_; const gchar* _tmp14_; _tmp8_ = cname; if (_tmp8_ == NULL) { ValaMap* _tmp9_; gpointer _tmp10_; _tmp9_ = self->girdata; _tmp10_ = vala_map_get (_tmp9_, "c:identifier"); _g_free0 (cname); cname = (gchar*) _tmp10_; } _tmp11_ = cname; if (_tmp11_ == NULL) { ValaMap* _tmp12_; gpointer _tmp13_; _tmp12_ = self->girdata; _tmp13_ = vala_map_get (_tmp12_, "c:type"); _g_free0 (cname); cname = (gchar*) _tmp13_; } _tmp14_ = cname; if (_tmp14_ == NULL) { ValaMap* _tmp15_; gpointer _tmp16_; _tmp15_ = self->girdata; _tmp16_ = vala_map_get (_tmp15_, "glib:type-name"); _g_free0 (cname); cname = (gchar*) _tmp16_; } } _tmp17_ = cname; if (_tmp17_ == NULL) { gchar* _tmp18_; _tmp18_ = vala_gir_parser_node_get_default_cname (self); _g_free0 (cname); cname = _tmp18_; } result = cname; return result; } static gchar* vala_gir_parser_node_get_default_cname (ValaGirParserNode* self) { const gchar* _tmp0_; ValaSymbol* _tmp2_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->name; if (_tmp0_ == NULL) { gchar* _tmp1_; _tmp1_ = g_strdup (""); result = _tmp1_; return result; } _tmp2_ = self->symbol; if (VALA_IS_FIELD (_tmp2_)) { ValaSymbol* _tmp3_; ValaMemberBinding _tmp4_; ValaMemberBinding _tmp5_; _tmp3_ = self->symbol; _tmp4_ = vala_field_get_binding (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_FIELD, ValaField)); _tmp5_ = _tmp4_; if (_tmp5_ == VALA_MEMBER_BINDING_STATIC) { ValaGirParserNode* _tmp6_; gchar* _tmp7_; gchar* _tmp8_; const gchar* _tmp9_; gchar* _tmp10_; gchar* _tmp11_; _tmp6_ = self->parent; _tmp7_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp6_); _tmp8_ = _tmp7_; _tmp9_ = self->name; _tmp10_ = g_strconcat (_tmp8_, _tmp9_, NULL); _tmp11_ = _tmp10_; _g_free0 (_tmp8_); result = _tmp11_; return result; } else { const gchar* _tmp12_; gchar* _tmp13_; _tmp12_ = self->name; _tmp13_ = g_strdup (_tmp12_); result = _tmp13_; return result; } } else { ValaSymbol* _tmp14_; _tmp14_ = self->symbol; if (VALA_IS_METHOD (_tmp14_)) { ValaGirParserNode* _tmp15_; gchar* _tmp16_; gchar* _tmp17_; const gchar* _tmp18_; gchar* _tmp19_; gchar* _tmp20_; _tmp15_ = self->parent; _tmp16_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp15_); _tmp17_ = _tmp16_; _tmp18_ = self->name; _tmp19_ = g_strdup_printf ("%s%s", _tmp17_, _tmp18_); _tmp20_ = _tmp19_; _g_free0 (_tmp17_); result = _tmp20_; return result; } else { ValaGirParserNode* _tmp21_; gchar* _tmp22_; gchar* _tmp23_; const gchar* _tmp24_; gchar* _tmp25_; gchar* _tmp26_; _tmp21_ = self->parent; _tmp22_ = vala_gir_parser_node_get_cprefix (_tmp21_); _tmp23_ = _tmp22_; _tmp24_ = self->name; _tmp25_ = g_strdup_printf ("%s%s", _tmp23_, _tmp24_); _tmp26_ = _tmp25_; _g_free0 (_tmp23_); result = _tmp26_; return result; } } } static gchar* vala_gir_parser_node_get_finish_cname (ValaGirParserNode* self) { gchar* finish_cname = NULL; ValaSymbol* _tmp0_; gchar* _tmp1_; const gchar* _tmp2_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->symbol; _tmp1_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp0_, "CCode", "finish_name", NULL); finish_cname = _tmp1_; _tmp2_ = finish_cname; if (_tmp2_ == NULL) { gchar* _tmp3_; const gchar* _tmp4_; const gchar* _tmp12_; gchar* _tmp13_; _tmp3_ = vala_gir_parser_node_get_cname (self); _g_free0 (finish_cname); finish_cname = _tmp3_; _tmp4_ = finish_cname; if (g_str_has_suffix (_tmp4_, "_async")) { const gchar* _tmp5_; const gchar* _tmp6_; gint _tmp7_; gint _tmp8_; gint _tmp9_; gint _tmp10_; gchar* _tmp11_; _tmp5_ = finish_cname; _tmp6_ = finish_cname; _tmp7_ = strlen (_tmp6_); _tmp8_ = _tmp7_; _tmp9_ = strlen ("_async"); _tmp10_ = _tmp9_; _tmp11_ = string_substring (_tmp5_, (glong) 0, (glong) (_tmp8_ - _tmp10_)); _g_free0 (finish_cname); finish_cname = _tmp11_; } _tmp12_ = finish_cname; _tmp13_ = g_strdup_printf ("%s_finish", _tmp12_); _g_free0 (finish_cname); finish_cname = _tmp13_; } result = finish_cname; return result; } static gchar* vala_gir_parser_node_get_cheader_filename (ValaGirParserNode* self) { ValaGirParserMetadata* _tmp0_; gchar* cheader_filename = NULL; ValaSymbol* _tmp3_; gchar* _tmp4_; const gchar* _tmp5_; ValaGirParserNode* _tmp6_; const gchar* _tmp7_; gchar* _tmp19_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp0_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME)) { ValaGirParserMetadata* _tmp1_; gchar* _tmp2_; _tmp1_ = self->metadata; _tmp2_ = vala_gir_parser_metadata_get_string (_tmp1_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME); result = _tmp2_; return result; } _tmp3_ = self->symbol; _tmp4_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp3_, "CCode", "cheader_filename", NULL); cheader_filename = _tmp4_; _tmp5_ = cheader_filename; if (_tmp5_ != NULL) { result = cheader_filename; return result; } _tmp6_ = self->parent; _tmp7_ = _tmp6_->name; if (_tmp7_ != NULL) { ValaGirParserNode* _tmp8_; gchar* _tmp9_; _tmp8_ = self->parent; _tmp9_ = vala_gir_parser_node_get_cheader_filename (_tmp8_); result = _tmp9_; _g_free0 (cheader_filename); return result; } else { ValaSymbol* _tmp10_; ValaSourceReference* _tmp11_; ValaSourceReference* _tmp12_; _tmp10_ = self->symbol; _tmp11_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp10_); _tmp12_ = _tmp11_; if (_tmp12_ != NULL) { ValaSymbol* _tmp13_; ValaSourceReference* _tmp14_; ValaSourceReference* _tmp15_; ValaSourceFile* _tmp16_; ValaSourceFile* _tmp17_; gchar* _tmp18_; _tmp13_ = self->symbol; _tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp13_); _tmp15_ = _tmp14_; _tmp16_ = vala_source_reference_get_file (_tmp15_); _tmp17_ = _tmp16_; _tmp18_ = vala_source_file_get_cinclude_filename (_tmp17_); result = _tmp18_; _g_free0 (cheader_filename); return result; } } _tmp19_ = g_strdup (""); result = _tmp19_; _g_free0 (cheader_filename); return result; } static gboolean int64_try_parse (const gchar* str, gint64* _result_, const gchar* * unparsed, guint _base) { gint64 _vala__result_ = 0LL; const gchar* _vala_unparsed = NULL; gchar* endptr = NULL; gchar* _tmp0_ = NULL; gint64 _tmp1_; gchar* _tmp2_; gint _tmp3_; gint _tmp4_; gboolean result = FALSE; g_return_val_if_fail (str != NULL, FALSE); errno = 0; _tmp1_ = g_ascii_strtoll (str, &_tmp0_, _base); endptr = _tmp0_; _vala__result_ = _tmp1_; _tmp2_ = endptr; _tmp3_ = strlen (str); _tmp4_ = _tmp3_; if (_tmp2_ == (((gchar*) str) + _tmp4_)) { gboolean _tmp5_ = FALSE; _vala_unparsed = ""; if (errno != ERANGE) { _tmp5_ = errno != EINVAL; } else { _tmp5_ = FALSE; } result = _tmp5_; if (_result_) { *_result_ = _vala__result_; } if (unparsed) { *unparsed = _vala_unparsed; } return result; } else { gchar* _tmp6_; _tmp6_ = endptr; _vala_unparsed = (const gchar*) _tmp6_; result = FALSE; if (_result_) { *_result_ = _vala__result_; } if (unparsed) { *unparsed = _vala_unparsed; } return result; } if (_result_) { *_result_ = _vala__result_; } if (unparsed) { *unparsed = _vala_unparsed; } } static guint64 vala_gir_parser_node_parse_version_string (const gchar* version) { gint64 res = 0LL; gint shift = 0; gchar** tokens = NULL; gchar** _tmp0_; gchar** _tmp1_; gint tokens_length1; gint _tokens_size_; gchar** _tmp2_; gint _tmp2__length1; guint64 result = 0ULL; g_return_val_if_fail (version != NULL, 0ULL); res = (gint64) 0; shift = 16; _tmp1_ = _tmp0_ = g_strsplit (version, ".", 3); tokens = _tmp1_; tokens_length1 = _vala_array_length (_tmp0_); _tokens_size_ = tokens_length1; _tmp2_ = tokens; _tmp2__length1 = tokens_length1; { gchar** token_collection = NULL; gint token_collection_length1 = 0; gint _token_collection_size_ = 0; gint token_it = 0; token_collection = _tmp2_; token_collection_length1 = _tmp2__length1; for (token_it = 0; token_it < token_collection_length1; token_it = token_it + 1) { const gchar* token = NULL; token = token_collection[token_it]; { gint64 t = 0LL; const gchar* _tmp3_; gint64 _tmp4_ = 0LL; gboolean _tmp5_; _tmp3_ = token; _tmp5_ = int64_try_parse (_tmp3_, &_tmp4_, NULL, (guint) 0); t = _tmp4_; if (!_tmp5_) { result = (guint64) 0; tokens = (_vala_array_free (tokens, tokens_length1, (GDestroyNotify) g_free), NULL); return result; } if (t > ((gint64) 0xffff)) { result = (guint64) 0; tokens = (_vala_array_free (tokens, tokens_length1, (GDestroyNotify) g_free), NULL); return result; } res |= t << shift; shift -= 8; } } } result = (guint64) res; tokens = (_vala_array_free (tokens, tokens_length1, (GDestroyNotify) g_free), NULL); return result; } static void vala_gir_parser_node_move_class_methods (ValaGirParserNode* target, ValaGirParserNode* source) { gint i = 0; g_return_if_fail (target != NULL); if (source == NULL) { return; } i = 0; while (TRUE) { ValaArrayList* _tmp0_; gint _tmp1_; gint _tmp2_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp3_; gpointer _tmp4_; ValaGirParserNode* _tmp5_; ValaSymbol* _tmp6_; _tmp0_ = source->members; _tmp1_ = vala_collection_get_size ((ValaCollection*) _tmp0_); _tmp2_ = _tmp1_; if (!(i < _tmp2_)) { break; } _tmp3_ = source->members; _tmp4_ = vala_list_get ((ValaList*) _tmp3_, i); node = (ValaGirParserNode*) _tmp4_; _tmp5_ = node; _tmp6_ = _tmp5_->symbol; if (VALA_IS_METHOD (_tmp6_)) { ValaGirParserNode* _tmp7_; ValaGirParserNode* _tmp8_; ValaGirParserNode* _tmp9_; ValaSymbol* _tmp10_; _tmp7_ = node; vala_gir_parser_node_remove_member (source, _tmp7_); _tmp8_ = node; vala_gir_parser_node_add_member (target, _tmp8_); _tmp9_ = node; _tmp10_ = _tmp9_->symbol; vala_method_set_binding (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_METHOD, ValaMethod), VALA_MEMBER_BINDING_CLASS); } else { gint _tmp11_; _tmp11_ = i; i = _tmp11_ + 1; } _vala_gir_parser_node_unref0 (node); } } static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser* parser) { gboolean _tmp0_ = FALSE; ValaSymbol* _tmp1_; gboolean _tmp37_ = FALSE; ValaSymbol* _tmp38_; ValaMap* _tmp65_; gboolean _tmp823_ = FALSE; gboolean _tmp824_ = FALSE; g_return_if_fail (self != NULL); g_return_if_fail (parser != NULL); if (self->processed) { return; } _tmp1_ = self->symbol; if (VALA_IS_NAMESPACE (_tmp1_)) { ValaGirParserNode* _tmp2_; ValaGirParserNode* _tmp3_; _tmp2_ = self->parent; _tmp3_ = parser->priv->root; _tmp0_ = _tmp2_ == _tmp3_; } else { _tmp0_ = FALSE; } if (_tmp0_) { { ValaArrayList* _node_list = NULL; ValaArrayList* _tmp4_; ValaArrayList* _tmp5_; gint _node_size = 0; ValaArrayList* _tmp6_; gint _tmp7_; gint _tmp8_; gint _node_index = 0; _tmp4_ = self->members; _tmp5_ = _vala_iterable_ref0 (_tmp4_); _node_list = _tmp5_; _tmp6_ = _node_list; _tmp7_ = vala_collection_get_size ((ValaCollection*) _tmp6_); _tmp8_ = _tmp7_; _node_size = _tmp8_; _node_index = -1; while (TRUE) { gint _tmp9_; gint _tmp10_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp11_; gpointer _tmp12_; ValaGirParserNode* _tmp13_; const gchar* _tmp14_; _node_index = _node_index + 1; _tmp9_ = _node_index; _tmp10_ = _node_size; if (!(_tmp9_ < _tmp10_)) { break; } _tmp11_ = _node_list; _tmp12_ = vala_list_get ((ValaList*) _tmp11_, _node_index); node = (ValaGirParserNode*) _tmp12_; _tmp13_ = node; _tmp14_ = _tmp13_->element_type; if (g_strcmp0 (_tmp14_, "alias") == 0) { ValaGirParserNode* _tmp15_; _tmp15_ = node; vala_gir_parser_process_alias (parser, _tmp15_); } _vala_gir_parser_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } { gint i = 0; i = 0; { gboolean _tmp16_ = FALSE; _tmp16_ = TRUE; while (TRUE) { ValaArrayList* _tmp18_; gint _tmp19_; gint _tmp20_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp21_; gpointer _tmp22_; gboolean _tmp23_ = FALSE; ValaGirParserNode* _tmp24_; ValaSymbol* _tmp25_; if (!_tmp16_) { gint _tmp17_; _tmp17_ = i; i = _tmp17_ + 1; } _tmp16_ = FALSE; _tmp18_ = self->members; _tmp19_ = vala_collection_get_size ((ValaCollection*) _tmp18_); _tmp20_ = _tmp19_; if (!(i < _tmp20_)) { break; } _tmp21_ = self->members; _tmp22_ = vala_list_get ((ValaList*) _tmp21_, i); node = (ValaGirParserNode*) _tmp22_; _tmp24_ = node; _tmp25_ = _tmp24_->symbol; if (VALA_IS_METHOD (_tmp25_)) { ValaGirParserNode* _tmp26_; _tmp26_ = node; _tmp23_ = _tmp26_->new_symbol; } else { _tmp23_ = FALSE; } if (_tmp23_) { ValaGirParserNode* _tmp27_; gboolean _tmp28_ = FALSE; ValaArrayList* _tmp29_; gint _tmp30_; gint _tmp31_; _tmp27_ = node; vala_gir_parser_process_namespace_method (parser, self, _tmp27_); _tmp29_ = self->members; _tmp30_ = vala_collection_get_size ((ValaCollection*) _tmp29_); _tmp31_ = _tmp30_; if (i < _tmp31_) { ValaArrayList* _tmp32_; gpointer _tmp33_; ValaGirParserNode* _tmp34_; ValaGirParserNode* _tmp35_; _tmp32_ = self->members; _tmp33_ = vala_list_get ((ValaList*) _tmp32_, i); _tmp34_ = (ValaGirParserNode*) _tmp33_; _tmp35_ = node; _tmp28_ = _tmp34_ != _tmp35_; _vala_gir_parser_node_unref0 (_tmp34_); } else { _tmp28_ = FALSE; } if (_tmp28_) { gint _tmp36_; _tmp36_ = i; i = _tmp36_ - 1; } } _vala_gir_parser_node_unref0 (node); } } } } _tmp38_ = self->symbol; if (VALA_IS_CLASS (_tmp38_)) { ValaMap* _tmp39_; _tmp39_ = self->girdata; _tmp37_ = _tmp39_ != NULL; } else { _tmp37_ = FALSE; } if (_tmp37_) { ValaUnresolvedSymbol* _tmp40_; gchar* class_struct = NULL; ValaMap* _tmp45_; gpointer _tmp46_; const gchar* _tmp47_; _tmp40_ = self->type_struct; if (_tmp40_ != NULL) { ValaGirParserNode* _tmp41_; ValaUnresolvedSymbol* _tmp42_; ValaGirParserNode* _tmp43_; ValaGirParserNode* _tmp44_; _tmp41_ = self->parent; _tmp42_ = self->type_struct; _tmp43_ = vala_gir_parser_resolve_node (parser, _tmp41_, _tmp42_, FALSE); _tmp44_ = _tmp43_; vala_gir_parser_node_move_class_methods (self, _tmp44_); _vala_gir_parser_node_unref0 (_tmp44_); } _tmp45_ = self->girdata; _tmp46_ = vala_map_get (_tmp45_, "glib:type-struct"); class_struct = (gchar*) _tmp46_; _tmp47_ = class_struct; if (_tmp47_ != NULL) { ValaGirParserNode* _tmp48_; const gchar* _tmp49_; ValaSourceReference* _tmp50_; ValaUnresolvedSymbol* _tmp51_; ValaUnresolvedSymbol* _tmp52_; ValaGirParserNode* _tmp53_; ValaGirParserNode* _tmp54_; _tmp48_ = self->parent; _tmp49_ = class_struct; _tmp50_ = self->source_reference; _tmp51_ = vala_gir_parser_parse_symbol_from_string (parser, _tmp49_, _tmp50_); _tmp52_ = _tmp51_; _tmp53_ = vala_gir_parser_resolve_node (parser, _tmp48_, _tmp52_, FALSE); _tmp54_ = _tmp53_; vala_gir_parser_node_move_class_methods (self, _tmp54_); _vala_gir_parser_node_unref0 (_tmp54_); _vala_code_node_unref0 (_tmp52_); } _g_free0 (class_struct); } { ValaArrayList* _node_list = NULL; ValaArrayList* _tmp55_; ValaArrayList* _tmp56_; gint _node_size = 0; ValaArrayList* _tmp57_; gint _tmp58_; gint _tmp59_; gint _node_index = 0; _tmp55_ = self->members; _tmp56_ = _vala_iterable_ref0 (_tmp55_); _node_list = _tmp56_; _tmp57_ = _node_list; _tmp58_ = vala_collection_get_size ((ValaCollection*) _tmp57_); _tmp59_ = _tmp58_; _node_size = _tmp59_; _node_index = -1; while (TRUE) { gint _tmp60_; gint _tmp61_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp62_; gpointer _tmp63_; ValaGirParserNode* _tmp64_; _node_index = _node_index + 1; _tmp60_ = _node_index; _tmp61_ = _node_size; if (!(_tmp60_ < _tmp61_)) { break; } _tmp62_ = _node_list; _tmp63_ = vala_list_get ((ValaList*) _tmp62_, _node_index); node = (ValaGirParserNode*) _tmp63_; _tmp64_ = node; vala_gir_parser_node_process (_tmp64_, parser); _vala_gir_parser_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } _tmp65_ = self->girdata; if (_tmp65_ != NULL) { ValaSymbol* _tmp66_; ValaGirParserMetadata* _tmp730_; ValaGirParserMetadata* _tmp733_; ValaGirParserMetadata* _tmp742_; const gchar* _tmp748_; ValaGirParserMetadata* _tmp750_; ValaGirParserMetadata* _tmp753_; ValaGirParserNode* _tmp771_; ValaSymbol* _tmp772_; gchar* _tmp781_; gchar* _tmp782_; gchar* _tmp783_; gchar* _tmp784_; gboolean _tmp785_; ValaGirParserMetadata* _tmp789_; gchar* _tmp794_; gchar* _tmp795_; gchar* _tmp796_; gchar* _tmp797_; gboolean _tmp798_; gchar* _tmp802_; gchar* _tmp803_; gchar* _tmp804_; gchar* _tmp805_; gboolean _tmp806_; gchar* gir_name = NULL; gchar* _tmp810_; gchar* default_gir_name = NULL; gchar* _tmp811_; gboolean _tmp812_ = FALSE; gboolean _tmp813_ = FALSE; ValaSymbol* _tmp814_; _tmp66_ = self->symbol; if (VALA_IS_METHOD (_tmp66_)) { ValaMethod* m = NULL; ValaSymbol* _tmp67_; ValaMethod* _tmp68_; ValaArrayList* colliding = NULL; ValaGirParserNode* _tmp69_; const gchar* _tmp70_; ValaArrayList* _tmp71_; ValaMethod* _tmp180_; ValaGirParserMetadata* _tmp199_; ValaMethod* _tmp202_; gboolean _tmp203_; gboolean _tmp204_; _tmp67_ = self->symbol; _tmp68_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, VALA_TYPE_METHOD, ValaMethod)); m = _tmp68_; vala_gir_parser_process_callable (parser, self); _tmp69_ = self->parent; _tmp70_ = self->name; _tmp71_ = vala_gir_parser_node_lookup_all (_tmp69_, _tmp70_); colliding = _tmp71_; { ValaArrayList* _node_list = NULL; ValaArrayList* _tmp72_; ValaArrayList* _tmp73_; gint _node_size = 0; ValaArrayList* _tmp74_; gint _tmp75_; gint _tmp76_; gint _node_index = 0; _tmp72_ = colliding; _tmp73_ = _vala_iterable_ref0 (_tmp72_); _node_list = _tmp73_; _tmp74_ = _node_list; _tmp75_ = vala_collection_get_size ((ValaCollection*) _tmp74_); _tmp76_ = _tmp75_; _node_size = _tmp76_; _node_index = -1; while (TRUE) { gint _tmp77_; gint _tmp78_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp79_; gpointer _tmp80_; ValaSymbol* sym = NULL; ValaGirParserNode* _tmp81_; ValaSymbol* _tmp82_; ValaSymbol* _tmp83_; ValaSymbol* _tmp84_; _node_index = _node_index + 1; _tmp77_ = _node_index; _tmp78_ = _node_size; if (!(_tmp77_ < _tmp78_)) { break; } _tmp79_ = _node_list; _tmp80_ = vala_list_get ((ValaList*) _tmp79_, _node_index); node = (ValaGirParserNode*) _tmp80_; _tmp81_ = node; _tmp82_ = _tmp81_->symbol; _tmp83_ = _vala_code_node_ref0 (_tmp82_); sym = _tmp83_; _tmp84_ = sym; if (VALA_IS_FIELD (_tmp84_)) { gboolean _tmp85_ = FALSE; ValaMethod* _tmp86_; ValaDataType* _tmp87_; ValaDataType* _tmp88_; ValaSymbol* _tmp89_; ValaDataType* _tmp90_; ValaDataType* _tmp91_; _tmp86_ = m; _tmp87_ = vala_callable_get_return_type ((ValaCallable*) _tmp86_); _tmp88_ = _tmp87_; _tmp89_ = sym; _tmp90_ = vala_variable_get_variable_type ((ValaVariable*) G_TYPE_CHECK_INSTANCE_CAST (_tmp89_, VALA_TYPE_FIELD, ValaField)); _tmp91_ = _tmp90_; if (vala_data_type_compatible (_tmp88_, _tmp91_)) { ValaMethod* _tmp92_; ValaList* _tmp93_; gint _tmp94_; gint _tmp95_; _tmp92_ = m; _tmp93_ = vala_callable_get_parameters ((ValaCallable*) _tmp92_); _tmp94_ = vala_collection_get_size ((ValaCollection*) _tmp93_); _tmp95_ = _tmp94_; _tmp85_ = _tmp95_ == 0; } else { _tmp85_ = FALSE; } if (_tmp85_) { self->merged = TRUE; } else { ValaSymbol* _tmp96_; ValaSourceReference* _tmp97_; ValaSourceReference* _tmp98_; gchar* _tmp99_; gchar* _tmp100_; gchar* _tmp101_; gchar* _tmp102_; _tmp96_ = self->symbol; _tmp97_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp96_); _tmp98_ = _tmp97_; _tmp99_ = vala_gir_parser_node_get_full_name (self); _tmp100_ = _tmp99_; _tmp101_ = g_strdup_printf ("Field `%s' conflicts with method of the same name", _tmp100_); _tmp102_ = _tmp101_; vala_report_warning (_tmp98_, _tmp102_); _g_free0 (_tmp102_); _g_free0 (_tmp100_); } } else { ValaSymbol* _tmp103_; _tmp103_ = sym; if (VALA_IS_SIGNAL (_tmp103_)) { ValaGirParserNode* _tmp104_; ValaSignal* sig = NULL; ValaSymbol* _tmp105_; ValaSignal* _tmp106_; gboolean _tmp107_ = FALSE; ValaMethod* _tmp108_; gboolean _tmp109_; gboolean _tmp110_; ValaSignal* _tmp116_; ValaMethod* _tmp117_; ValaMethod* _tmp118_; ValaList* _tmp119_; gint _tmp120_; gint _tmp121_; ValaSignal* _tmp122_; ValaList* _tmp123_; gint _tmp124_; gint _tmp125_; _tmp104_ = node; vala_gir_parser_node_process (_tmp104_, parser); _tmp105_ = sym; _tmp106_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp105_, VALA_TYPE_SIGNAL, ValaSignal)); sig = _tmp106_; _tmp108_ = m; _tmp109_ = vala_method_get_is_virtual (_tmp108_); _tmp110_ = _tmp109_; if (_tmp110_) { _tmp107_ = TRUE; } else { ValaMethod* _tmp111_; gboolean _tmp112_; gboolean _tmp113_; _tmp111_ = m; _tmp112_ = vala_method_get_is_abstract (_tmp111_); _tmp113_ = _tmp112_; _tmp107_ = _tmp113_; } if (_tmp107_) { ValaSignal* _tmp114_; _tmp114_ = sig; vala_signal_set_is_virtual (_tmp114_, TRUE); } else { ValaSignal* _tmp115_; _tmp115_ = sig; vala_code_node_set_attribute ((ValaCodeNode*) _tmp115_, "HasEmitter", TRUE, NULL); } _tmp116_ = sig; _tmp117_ = m; vala_gir_parser_assume_parameter_names (parser, _tmp116_, (ValaSymbol*) _tmp117_, FALSE); _tmp118_ = m; _tmp119_ = vala_callable_get_parameters ((ValaCallable*) _tmp118_); _tmp120_ = vala_collection_get_size ((ValaCollection*) _tmp119_); _tmp121_ = _tmp120_; _tmp122_ = sig; _tmp123_ = vala_callable_get_parameters ((ValaCallable*) _tmp122_); _tmp124_ = vala_collection_get_size ((ValaCollection*) _tmp123_); _tmp125_ = _tmp124_; if (_tmp121_ != _tmp125_) { ValaSymbol* _tmp126_; ValaSourceReference* _tmp127_; ValaSourceReference* _tmp128_; gchar* _tmp129_; gchar* _tmp130_; gchar* _tmp131_; gchar* _tmp132_; _tmp126_ = self->symbol; _tmp127_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp126_); _tmp128_ = _tmp127_; _tmp129_ = vala_gir_parser_node_get_full_name (self); _tmp130_ = _tmp129_; _tmp131_ = g_strdup_printf ("Signal `%s' conflicts with method of the same name", _tmp130_); _tmp132_ = _tmp131_; vala_report_warning (_tmp128_, _tmp132_); _g_free0 (_tmp132_); _g_free0 (_tmp130_); } self->merged = TRUE; _vala_code_node_unref0 (sig); } else { gboolean _tmp133_ = FALSE; gboolean _tmp134_ = FALSE; ValaSymbol* _tmp135_; _tmp135_ = sym; if (VALA_IS_METHOD (_tmp135_)) { ValaSymbol* _tmp136_; _tmp136_ = sym; _tmp134_ = !VALA_IS_CREATION_METHOD (_tmp136_); } else { _tmp134_ = FALSE; } if (_tmp134_) { ValaGirParserNode* _tmp137_; _tmp137_ = node; _tmp133_ = _tmp137_ != self; } else { _tmp133_ = FALSE; } if (_tmp133_) { gboolean _tmp138_ = FALSE; ValaMethod* _tmp139_; gboolean _tmp140_; gboolean _tmp141_; _tmp139_ = m; _tmp140_ = vala_method_get_is_virtual (_tmp139_); _tmp141_ = _tmp140_; if (_tmp141_) { _tmp138_ = TRUE; } else { ValaMethod* _tmp142_; gboolean _tmp143_; gboolean _tmp144_; _tmp142_ = m; _tmp143_ = vala_method_get_is_abstract (_tmp142_); _tmp144_ = _tmp143_; _tmp138_ = _tmp144_; } if (_tmp138_) { gboolean different_invoker = FALSE; ValaAttribute* attr = NULL; ValaMethod* _tmp145_; ValaAttribute* _tmp146_; ValaAttribute* _tmp147_; ValaAttribute* _tmp148_; different_invoker = FALSE; _tmp145_ = m; _tmp146_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp145_, "NoWrapper"); _tmp147_ = _vala_code_node_ref0 (_tmp146_); attr = _tmp147_; _tmp148_ = attr; if (_tmp148_ != NULL) { ValaGirParserNode* invoker = NULL; ValaGirParserNode* _tmp149_; ValaGirParserNode* _tmp150_; _tmp149_ = vala_gir_parser_find_invoker (parser, self); invoker = _tmp149_; _tmp150_ = invoker; if (_tmp150_ != NULL) { ValaMethod* _tmp151_; ValaMethod* _tmp152_; const gchar* _tmp153_; const gchar* _tmp154_; ValaMethod* _tmp155_; ValaGirParserNode* _tmp156_; ValaSymbol* _tmp157_; const gchar* _tmp158_; const gchar* _tmp159_; ValaMethod* _tmp160_; ValaGirParserNode* _tmp161_; _tmp151_ = m; _tmp152_ = m; _tmp153_ = vala_symbol_get_name ((ValaSymbol*) _tmp152_); _tmp154_ = _tmp153_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp151_, "CCode", "vfunc_name", _tmp154_, NULL); _tmp155_ = m; _tmp156_ = invoker; _tmp157_ = _tmp156_->symbol; _tmp158_ = vala_symbol_get_name (_tmp157_); _tmp159_ = _tmp158_; vala_symbol_set_name ((ValaSymbol*) _tmp155_, _tmp159_); _tmp160_ = m; vala_code_node_set_attribute ((ValaCodeNode*) _tmp160_, "NoWrapper", FALSE, NULL); _tmp161_ = invoker; _tmp161_->merged = TRUE; different_invoker = TRUE; } _vala_gir_parser_node_unref0 (invoker); } if (!different_invoker) { ValaAttribute* _tmp162_; ValaGirParserNode* _tmp170_; _tmp162_ = attr; if (_tmp162_ != NULL) { ValaSymbol* _tmp163_; ValaSourceReference* _tmp164_; ValaSourceReference* _tmp165_; gchar* _tmp166_; gchar* _tmp167_; gchar* _tmp168_; gchar* _tmp169_; _tmp163_ = self->symbol; _tmp164_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp163_); _tmp165_ = _tmp164_; _tmp166_ = vala_gir_parser_node_get_full_name (self); _tmp167_ = _tmp166_; _tmp168_ = g_strdup_printf ("Virtual method `%s' conflicts with method of the same name", _tmp167_); _tmp169_ = _tmp168_; vala_report_warning (_tmp165_, _tmp169_); _g_free0 (_tmp169_); _g_free0 (_tmp167_); } _tmp170_ = node; _tmp170_->merged = TRUE; } _vala_code_node_unref0 (attr); } else { ValaMethod* _tmp171_; _tmp171_ = m; if (vala_symbol_is_class_member ((ValaSymbol*) _tmp171_)) { ValaSymbol* _tmp172_; ValaSourceReference* _tmp173_; ValaSourceReference* _tmp174_; gchar* _tmp175_; gchar* _tmp176_; gchar* _tmp177_; gchar* _tmp178_; ValaGirParserNode* _tmp179_; _tmp172_ = self->symbol; _tmp173_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp172_); _tmp174_ = _tmp173_; _tmp175_ = vala_gir_parser_node_get_full_name (self); _tmp176_ = _tmp175_; _tmp177_ = g_strdup_printf ("Class method `%s' conflicts with method of the same name", _tmp176_); _tmp178_ = _tmp177_; vala_report_warning (_tmp174_, _tmp178_); _g_free0 (_tmp178_); _g_free0 (_tmp176_); _tmp179_ = node; _tmp179_->merged = TRUE; } } } } } _vala_code_node_unref0 (sym); _vala_gir_parser_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } _tmp180_ = m; if (!VALA_IS_CREATION_METHOD (_tmp180_)) { ValaGirParserMetadata* _tmp181_; ValaGirParserMetadata* _tmp184_; ValaGirParserMetadata* _tmp187_; _tmp181_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp181_, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE)) { ValaMethod* _tmp182_; ValaGirParserMetadata* _tmp183_; _tmp182_ = m; _tmp183_ = self->metadata; vala_code_node_set_attribute ((ValaCodeNode*) _tmp182_, "DestroysInstance", vala_gir_parser_metadata_get_bool (_tmp183_, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE, FALSE), NULL); } _tmp184_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp184_, VALA_GIR_PARSER_ARGUMENT_TYPE_RETURNS_MODIFIED_POINTER)) { ValaMethod* _tmp185_; ValaGirParserMetadata* _tmp186_; _tmp185_ = m; _tmp186_ = self->metadata; vala_code_node_set_attribute ((ValaCodeNode*) _tmp185_, "ReturnsModifiedPointer", vala_gir_parser_metadata_get_bool (_tmp186_, VALA_GIR_PARSER_ARGUMENT_TYPE_RETURNS_MODIFIED_POINTER, FALSE), NULL); } _tmp187_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp187_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME)) { ValaGirParserNode* vfunc = NULL; ValaGirParserNode* _tmp188_; ValaGirParserMetadata* _tmp189_; gchar* _tmp190_; gchar* _tmp191_; ValaGirParserNode* _tmp192_; ValaGirParserNode* _tmp193_; gboolean _tmp194_ = FALSE; ValaGirParserNode* _tmp195_; _tmp188_ = self->parent; _tmp189_ = self->metadata; _tmp190_ = vala_gir_parser_metadata_get_string (_tmp189_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME); _tmp191_ = _tmp190_; _tmp192_ = vala_gir_parser_node_lookup (_tmp188_, _tmp191_, FALSE, NULL); _tmp193_ = _tmp192_; _g_free0 (_tmp191_); vfunc = _tmp193_; _tmp195_ = vfunc; if (_tmp195_ != NULL) { ValaGirParserNode* _tmp196_; _tmp196_ = vfunc; _tmp194_ = _tmp196_ != self; } else { _tmp194_ = FALSE; } if (_tmp194_) { ValaGirParserNode* _tmp197_; ValaGirParserNode* _tmp198_; _tmp197_ = vfunc; _tmp197_->processed = TRUE; _tmp198_ = vfunc; _tmp198_->merged = TRUE; } _vala_gir_parser_node_unref0 (vfunc); } } _tmp199_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp199_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET)) { ValaMethod* _tmp200_; ValaGirParserMetadata* _tmp201_; _tmp200_ = m; _tmp201_ = self->metadata; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp200_, "CCode", "delegate_target", vala_gir_parser_metadata_get_bool (_tmp201_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET, FALSE), NULL); } _tmp202_ = m; _tmp203_ = vala_method_get_coroutine (_tmp202_); _tmp204_ = _tmp203_; if (_tmp204_) { vala_gir_parser_process_async_method (parser, self); } _vala_iterable_unref0 (colliding); _vala_code_node_unref0 (m); } else { ValaSymbol* _tmp205_; _tmp205_ = self->symbol; if (VALA_IS_PROPERTY (_tmp205_)) { ValaArrayList* colliding = NULL; ValaGirParserNode* _tmp206_; const gchar* _tmp207_; ValaArrayList* _tmp208_; ValaProperty* prop = NULL; ValaSymbol* _tmp232_; ValaProperty* _tmp233_; gchar* readable = NULL; ValaMap* _tmp234_; gpointer _tmp235_; gchar* writable = NULL; ValaMap* _tmp236_; gpointer _tmp237_; gchar* construct_ = NULL; ValaMap* _tmp238_; gpointer _tmp239_; gchar* construct_only = NULL; ValaMap* _tmp240_; gpointer _tmp241_; const gchar* _tmp242_; gboolean _tmp251_ = FALSE; const gchar* _tmp252_; ValaProperty* _tmp268_; ValaDataType* _tmp269_; ValaDataType* _tmp270_; ValaGirParserNode* getter = NULL; ValaArrayList* getters = NULL; ValaGirParserNode* _tmp271_; const gchar* _tmp272_; gchar* _tmp273_; gchar* _tmp274_; ValaArrayList* _tmp275_; ValaArrayList* _tmp276_; ValaArrayList* _tmp277_; ValaGirParserNode* setter = NULL; ValaArrayList* setters = NULL; ValaGirParserNode* _tmp302_; const gchar* _tmp303_; gchar* _tmp304_; gchar* _tmp305_; ValaArrayList* _tmp306_; ValaArrayList* _tmp307_; ValaArrayList* _tmp308_; gboolean _tmp333_ = FALSE; const gchar* _tmp334_; ValaProperty* _tmp336_; ValaProperty* _tmp337_; ValaPropertyAccessor* _tmp338_; ValaPropertyAccessor* _tmp339_; gboolean _tmp398_ = FALSE; gboolean _tmp399_ = FALSE; ValaProperty* _tmp400_; ValaAttribute* _tmp401_; ValaProperty* _tmp466_; ValaAttribute* _tmp467_; ValaGirParserMetadata* _tmp513_; ValaProperty* _tmp516_; ValaAttribute* _tmp517_; _tmp206_ = self->parent; _tmp207_ = self->name; _tmp208_ = vala_gir_parser_node_lookup_all (_tmp206_, _tmp207_); colliding = _tmp208_; { ValaArrayList* _node_list = NULL; ValaArrayList* _tmp209_; ValaArrayList* _tmp210_; gint _node_size = 0; ValaArrayList* _tmp211_; gint _tmp212_; gint _tmp213_; gint _node_index = 0; _tmp209_ = colliding; _tmp210_ = _vala_iterable_ref0 (_tmp209_); _node_list = _tmp210_; _tmp211_ = _node_list; _tmp212_ = vala_collection_get_size ((ValaCollection*) _tmp211_); _tmp213_ = _tmp212_; _node_size = _tmp213_; _node_index = -1; while (TRUE) { gint _tmp214_; gint _tmp215_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp216_; gpointer _tmp217_; ValaGirParserNode* _tmp218_; ValaSymbol* _tmp219_; _node_index = _node_index + 1; _tmp214_ = _node_index; _tmp215_ = _node_size; if (!(_tmp214_ < _tmp215_)) { break; } _tmp216_ = _node_list; _tmp217_ = vala_list_get ((ValaList*) _tmp216_, _node_index); node = (ValaGirParserNode*) _tmp217_; _tmp218_ = node; _tmp219_ = _tmp218_->symbol; if (VALA_IS_SIGNAL (_tmp219_)) { ValaGirParserNode* _tmp220_; ValaGirParserNode* _tmp221_; ValaSymbol* _tmp222_; ValaSourceReference* _tmp223_; ValaSourceReference* _tmp224_; gchar* _tmp225_; gchar* _tmp226_; gchar* _tmp227_; gchar* _tmp228_; _tmp220_ = node; _tmp220_->processed = TRUE; _tmp221_ = node; _tmp221_->merged = TRUE; _tmp222_ = self->symbol; _tmp223_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp222_); _tmp224_ = _tmp223_; _tmp225_ = vala_gir_parser_node_get_full_name (self); _tmp226_ = _tmp225_; _tmp227_ = g_strdup_printf ("Signal `%s' conflicts with property of the same name", _tmp226_); _tmp228_ = _tmp227_; vala_report_warning (_tmp224_, _tmp228_); _g_free0 (_tmp228_); _g_free0 (_tmp226_); } else { ValaGirParserNode* _tmp229_; ValaSymbol* _tmp230_; _tmp229_ = node; _tmp230_ = _tmp229_->symbol; if (VALA_IS_METHOD (_tmp230_)) { ValaGirParserNode* _tmp231_; _tmp231_ = node; _tmp231_->merged = TRUE; } } _vala_gir_parser_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } _tmp232_ = self->symbol; _tmp233_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp232_, VALA_TYPE_PROPERTY, ValaProperty)); prop = _tmp233_; _tmp234_ = self->girdata; _tmp235_ = vala_map_get (_tmp234_, "readable"); readable = (gchar*) _tmp235_; _tmp236_ = self->girdata; _tmp237_ = vala_map_get (_tmp236_, "writable"); writable = (gchar*) _tmp237_; _tmp238_ = self->girdata; _tmp239_ = vala_map_get (_tmp238_, "construct"); construct_ = (gchar*) _tmp239_; _tmp240_ = self->girdata; _tmp241_ = vala_map_get (_tmp240_, "construct-only"); construct_only = (gchar*) _tmp241_; _tmp242_ = readable; if (g_strcmp0 (_tmp242_, "0") != 0) { ValaProperty* _tmp243_; ValaProperty* _tmp244_; ValaDataType* _tmp245_; ValaDataType* _tmp246_; ValaDataType* _tmp247_; ValaDataType* _tmp248_; ValaPropertyAccessor* _tmp249_; ValaPropertyAccessor* _tmp250_; _tmp243_ = prop; _tmp244_ = prop; _tmp245_ = vala_property_get_property_type (_tmp244_); _tmp246_ = _tmp245_; _tmp247_ = vala_data_type_copy (_tmp246_); _tmp248_ = _tmp247_; _tmp249_ = vala_property_accessor_new (TRUE, FALSE, FALSE, _tmp248_, NULL, NULL, NULL); _tmp250_ = _tmp249_; vala_property_set_get_accessor (_tmp243_, _tmp250_); _vala_code_node_unref0 (_tmp250_); _vala_code_node_unref0 (_tmp248_); } _tmp252_ = writable; if (g_strcmp0 (_tmp252_, "1") == 0) { _tmp251_ = TRUE; } else { const gchar* _tmp253_; _tmp253_ = construct_only; _tmp251_ = g_strcmp0 (_tmp253_, "1") == 0; } if (_tmp251_) { gboolean _tmp254_ = FALSE; const gchar* _tmp255_; gboolean _tmp257_ = FALSE; const gchar* _tmp258_; ValaProperty* _tmp260_; ValaProperty* _tmp261_; ValaDataType* _tmp262_; ValaDataType* _tmp263_; ValaDataType* _tmp264_; ValaDataType* _tmp265_; ValaPropertyAccessor* _tmp266_; ValaPropertyAccessor* _tmp267_; _tmp255_ = construct_only; if (g_strcmp0 (_tmp255_, "1") != 0) { const gchar* _tmp256_; _tmp256_ = writable; _tmp254_ = g_strcmp0 (_tmp256_, "1") == 0; } else { _tmp254_ = FALSE; } _tmp258_ = construct_only; if (g_strcmp0 (_tmp258_, "1") == 0) { _tmp257_ = TRUE; } else { const gchar* _tmp259_; _tmp259_ = construct_; _tmp257_ = g_strcmp0 (_tmp259_, "1") == 0; } _tmp260_ = prop; _tmp261_ = prop; _tmp262_ = vala_property_get_property_type (_tmp261_); _tmp263_ = _tmp262_; _tmp264_ = vala_data_type_copy (_tmp263_); _tmp265_ = _tmp264_; _tmp266_ = vala_property_accessor_new (FALSE, _tmp254_, _tmp257_, _tmp265_, NULL, NULL, NULL); _tmp267_ = _tmp266_; vala_property_set_set_accessor (_tmp260_, _tmp267_); _vala_code_node_unref0 (_tmp267_); _vala_code_node_unref0 (_tmp265_); } _tmp268_ = prop; _tmp269_ = vala_property_get_property_type (_tmp268_); _tmp270_ = _tmp269_; vala_data_type_set_value_owned (_tmp270_, TRUE); getter = NULL; _tmp271_ = self->parent; _tmp272_ = self->name; _tmp273_ = g_strdup_printf ("get_%s", _tmp272_); _tmp274_ = _tmp273_; _tmp275_ = vala_gir_parser_node_lookup_all (_tmp271_, _tmp274_); _tmp276_ = _tmp275_; _g_free0 (_tmp274_); getters = _tmp276_; _tmp277_ = getters; if (_tmp277_ != NULL) { { ValaArrayList* _g_list = NULL; ValaArrayList* _tmp278_; ValaArrayList* _tmp279_; gint _g_size = 0; ValaArrayList* _tmp280_; gint _tmp281_; gint _tmp282_; gint _g_index = 0; _tmp278_ = getters; _tmp279_ = _vala_iterable_ref0 (_tmp278_); _g_list = _tmp279_; _tmp280_ = _g_list; _tmp281_ = vala_collection_get_size ((ValaCollection*) _tmp280_); _tmp282_ = _tmp281_; _g_size = _tmp282_; _g_index = -1; while (TRUE) { gint _tmp283_; gint _tmp284_; ValaGirParserNode* g = NULL; ValaArrayList* _tmp285_; gpointer _tmp286_; gboolean _tmp287_ = FALSE; gboolean _tmp288_ = FALSE; ValaGirParserNode* _tmp289_; _g_index = _g_index + 1; _tmp283_ = _g_index; _tmp284_ = _g_size; if (!(_tmp283_ < _tmp284_)) { break; } _tmp285_ = _g_list; _tmp286_ = vala_list_get ((ValaList*) _tmp285_, _g_index); g = (ValaGirParserNode*) _tmp286_; _tmp289_ = getter; if (_tmp289_ == NULL) { _tmp288_ = TRUE; } else { ValaGirParserNode* _tmp290_; _tmp290_ = g; _tmp288_ = !_tmp290_->merged; } if (_tmp288_) { ValaGirParserNode* _tmp291_; gchar* _tmp292_; gchar* _tmp293_; ValaGirParserNode* _tmp294_; gchar* _tmp295_; gchar* _tmp296_; const gchar* _tmp297_; gchar* _tmp298_; gchar* _tmp299_; _tmp291_ = g; _tmp292_ = vala_gir_parser_node_get_cname (_tmp291_); _tmp293_ = _tmp292_; _tmp294_ = self->parent; _tmp295_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp294_); _tmp296_ = _tmp295_; _tmp297_ = self->name; _tmp298_ = g_strdup_printf ("%sget_%s", _tmp296_, _tmp297_); _tmp299_ = _tmp298_; _tmp287_ = g_strcmp0 (_tmp293_, _tmp299_) == 0; _g_free0 (_tmp299_); _g_free0 (_tmp296_); _g_free0 (_tmp293_); } else { _tmp287_ = FALSE; } if (_tmp287_) { ValaGirParserNode* _tmp300_; ValaGirParserNode* _tmp301_; _tmp300_ = g; _tmp301_ = _vala_gir_parser_node_ref0 (_tmp300_); _vala_gir_parser_node_unref0 (getter); getter = _tmp301_; } _vala_gir_parser_node_unref0 (g); } _vala_iterable_unref0 (_g_list); } } setter = NULL; _tmp302_ = self->parent; _tmp303_ = self->name; _tmp304_ = g_strdup_printf ("set_%s", _tmp303_); _tmp305_ = _tmp304_; _tmp306_ = vala_gir_parser_node_lookup_all (_tmp302_, _tmp305_); _tmp307_ = _tmp306_; _g_free0 (_tmp305_); setters = _tmp307_; _tmp308_ = setters; if (_tmp308_ != NULL) { { ValaArrayList* _s_list = NULL; ValaArrayList* _tmp309_; ValaArrayList* _tmp310_; gint _s_size = 0; ValaArrayList* _tmp311_; gint _tmp312_; gint _tmp313_; gint _s_index = 0; _tmp309_ = setters; _tmp310_ = _vala_iterable_ref0 (_tmp309_); _s_list = _tmp310_; _tmp311_ = _s_list; _tmp312_ = vala_collection_get_size ((ValaCollection*) _tmp311_); _tmp313_ = _tmp312_; _s_size = _tmp313_; _s_index = -1; while (TRUE) { gint _tmp314_; gint _tmp315_; ValaGirParserNode* s = NULL; ValaArrayList* _tmp316_; gpointer _tmp317_; gboolean _tmp318_ = FALSE; gboolean _tmp319_ = FALSE; ValaGirParserNode* _tmp320_; _s_index = _s_index + 1; _tmp314_ = _s_index; _tmp315_ = _s_size; if (!(_tmp314_ < _tmp315_)) { break; } _tmp316_ = _s_list; _tmp317_ = vala_list_get ((ValaList*) _tmp316_, _s_index); s = (ValaGirParserNode*) _tmp317_; _tmp320_ = setter; if (_tmp320_ == NULL) { _tmp319_ = TRUE; } else { ValaGirParserNode* _tmp321_; _tmp321_ = s; _tmp319_ = !_tmp321_->merged; } if (_tmp319_) { ValaGirParserNode* _tmp322_; gchar* _tmp323_; gchar* _tmp324_; ValaGirParserNode* _tmp325_; gchar* _tmp326_; gchar* _tmp327_; const gchar* _tmp328_; gchar* _tmp329_; gchar* _tmp330_; _tmp322_ = s; _tmp323_ = vala_gir_parser_node_get_cname (_tmp322_); _tmp324_ = _tmp323_; _tmp325_ = self->parent; _tmp326_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp325_); _tmp327_ = _tmp326_; _tmp328_ = self->name; _tmp329_ = g_strdup_printf ("%sset_%s", _tmp327_, _tmp328_); _tmp330_ = _tmp329_; _tmp318_ = g_strcmp0 (_tmp324_, _tmp330_) == 0; _g_free0 (_tmp330_); _g_free0 (_tmp327_); _g_free0 (_tmp324_); } else { _tmp318_ = FALSE; } if (_tmp318_) { ValaGirParserNode* _tmp331_; ValaGirParserNode* _tmp332_; _tmp331_ = s; _tmp332_ = _vala_gir_parser_node_ref0 (_tmp331_); _vala_gir_parser_node_unref0 (setter); setter = _tmp332_; } _vala_gir_parser_node_unref0 (s); } _vala_iterable_unref0 (_s_list); } } _tmp334_ = readable; if (g_strcmp0 (_tmp334_, "0") == 0) { const gchar* _tmp335_; _tmp335_ = construct_only; _tmp333_ = g_strcmp0 (_tmp335_, "1") == 0; } else { _tmp333_ = FALSE; } _tmp336_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp336_, "NoAccessorMethod", _tmp333_, NULL); _tmp337_ = prop; _tmp338_ = vala_property_get_get_accessor (_tmp337_); _tmp339_ = _tmp338_; if (_tmp339_ != NULL) { ValaMethod* _tmp340_ = NULL; ValaGirParserNode* _tmp341_; ValaMethod* m = NULL; ValaMethod* _tmp344_; ValaMethod* _tmp345_; _tmp341_ = getter; if (_tmp341_ != NULL) { ValaGirParserNode* _tmp342_; ValaSymbol* _tmp343_; _tmp342_ = getter; _tmp343_ = _tmp342_->symbol; _tmp340_ = VALA_IS_METHOD (_tmp343_) ? ((ValaMethod*) _tmp343_) : NULL; } else { _tmp340_ = NULL; } _tmp344_ = _vala_code_node_ref0 (_tmp340_); m = _tmp344_; _tmp345_ = m; if (_tmp345_ != NULL) { ValaGirParserNode* _tmp346_; gboolean _tmp347_ = FALSE; gboolean _tmp348_ = FALSE; ValaMethod* _tmp349_; ValaDataType* _tmp350_; ValaDataType* _tmp351_; _tmp346_ = getter; vala_gir_parser_node_process (_tmp346_, parser); _tmp349_ = m; _tmp350_ = vala_callable_get_return_type ((ValaCallable*) _tmp349_); _tmp351_ = _tmp350_; if (VALA_IS_VOID_TYPE (_tmp351_)) { _tmp348_ = TRUE; } else { ValaMethod* _tmp352_; ValaList* _tmp353_; gint _tmp354_; gint _tmp355_; _tmp352_ = m; _tmp353_ = vala_callable_get_parameters ((ValaCallable*) _tmp352_); _tmp354_ = vala_collection_get_size ((ValaCollection*) _tmp353_); _tmp355_ = _tmp354_; _tmp348_ = _tmp355_ != 0; } if (_tmp348_) { _tmp347_ = TRUE; } else { ValaMethod* _tmp356_; gboolean _tmp357_; gboolean _tmp358_; _tmp356_ = m; _tmp357_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp356_); _tmp358_ = _tmp357_; _tmp347_ = _tmp358_; } if (_tmp347_) { ValaProperty* _tmp359_; _tmp359_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp359_, "NoAccessorMethod", TRUE, NULL); } else { ValaGirParserNode* _tmp360_; const gchar* _tmp361_; const gchar* _tmp362_; ValaProperty* _tmp375_; ValaPropertyAccessor* _tmp376_; ValaPropertyAccessor* _tmp377_; ValaDataType* _tmp378_; ValaDataType* _tmp379_; ValaMethod* _tmp380_; ValaDataType* _tmp381_; ValaDataType* _tmp382_; gboolean _tmp383_; gboolean _tmp384_; gboolean _tmp385_ = FALSE; gboolean _tmp386_ = FALSE; ValaMethod* _tmp387_; gboolean _tmp388_; gboolean _tmp389_; _tmp360_ = getter; _tmp361_ = _tmp360_->name; _tmp362_ = self->name; if (g_strcmp0 (_tmp361_, _tmp362_) == 0) { { ValaArrayList* _node_list = NULL; ValaArrayList* _tmp363_; ValaArrayList* _tmp364_; gint _node_size = 0; ValaArrayList* _tmp365_; gint _tmp366_; gint _tmp367_; gint _node_index = 0; _tmp363_ = colliding; _tmp364_ = _vala_iterable_ref0 (_tmp363_); _node_list = _tmp364_; _tmp365_ = _node_list; _tmp366_ = vala_collection_get_size ((ValaCollection*) _tmp365_); _tmp367_ = _tmp366_; _node_size = _tmp367_; _node_index = -1; while (TRUE) { gint _tmp368_; gint _tmp369_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp370_; gpointer _tmp371_; ValaGirParserNode* _tmp372_; ValaSymbol* _tmp373_; _node_index = _node_index + 1; _tmp368_ = _node_index; _tmp369_ = _node_size; if (!(_tmp368_ < _tmp369_)) { break; } _tmp370_ = _node_list; _tmp371_ = vala_list_get ((ValaList*) _tmp370_, _node_index); node = (ValaGirParserNode*) _tmp371_; _tmp372_ = node; _tmp373_ = _tmp372_->symbol; if (VALA_IS_METHOD (_tmp373_)) { ValaGirParserNode* _tmp374_; _tmp374_ = node; _tmp374_->merged = TRUE; } _vala_gir_parser_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } } _tmp375_ = prop; _tmp376_ = vala_property_get_get_accessor (_tmp375_); _tmp377_ = _tmp376_; _tmp378_ = vala_property_accessor_get_value_type (_tmp377_); _tmp379_ = _tmp378_; _tmp380_ = m; _tmp381_ = vala_callable_get_return_type ((ValaCallable*) _tmp380_); _tmp382_ = _tmp381_; _tmp383_ = vala_data_type_get_value_owned (_tmp382_); _tmp384_ = _tmp383_; vala_data_type_set_value_owned (_tmp379_, _tmp384_); _tmp387_ = m; _tmp388_ = vala_method_get_is_abstract (_tmp387_); _tmp389_ = _tmp388_; if (!_tmp389_) { ValaMethod* _tmp390_; gboolean _tmp391_; gboolean _tmp392_; _tmp390_ = m; _tmp391_ = vala_method_get_is_virtual (_tmp390_); _tmp392_ = _tmp391_; _tmp386_ = !_tmp392_; } else { _tmp386_ = FALSE; } if (_tmp386_) { ValaProperty* _tmp393_; gboolean _tmp394_; gboolean _tmp395_; _tmp393_ = prop; _tmp394_ = vala_property_get_is_abstract (_tmp393_); _tmp395_ = _tmp394_; _tmp385_ = _tmp395_; } else { _tmp385_ = FALSE; } if (_tmp385_) { ValaProperty* _tmp396_; _tmp396_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp396_, "ConcreteAccessor", TRUE, NULL); } } } else { ValaProperty* _tmp397_; _tmp397_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp397_, "NoAccessorMethod", TRUE, NULL); } _vala_code_node_unref0 (m); } _tmp400_ = prop; _tmp401_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp400_, "NoAccessorMethod"); if (_tmp401_ == NULL) { ValaProperty* _tmp402_; ValaPropertyAccessor* _tmp403_; ValaPropertyAccessor* _tmp404_; _tmp402_ = prop; _tmp403_ = vala_property_get_set_accessor (_tmp402_); _tmp404_ = _tmp403_; _tmp399_ = _tmp404_ != NULL; } else { _tmp399_ = FALSE; } if (_tmp399_) { ValaProperty* _tmp405_; ValaPropertyAccessor* _tmp406_; ValaPropertyAccessor* _tmp407_; gboolean _tmp408_; gboolean _tmp409_; _tmp405_ = prop; _tmp406_ = vala_property_get_set_accessor (_tmp405_); _tmp407_ = _tmp406_; _tmp408_ = vala_property_accessor_get_writable (_tmp407_); _tmp409_ = _tmp408_; _tmp398_ = _tmp409_; } else { _tmp398_ = FALSE; } if (_tmp398_) { ValaMethod* _tmp410_ = NULL; ValaGirParserNode* _tmp411_; ValaMethod* m = NULL; ValaMethod* _tmp414_; ValaMethod* _tmp415_; _tmp411_ = setter; if (_tmp411_ != NULL) { ValaGirParserNode* _tmp412_; ValaSymbol* _tmp413_; _tmp412_ = setter; _tmp413_ = _tmp412_->symbol; _tmp410_ = VALA_IS_METHOD (_tmp413_) ? ((ValaMethod*) _tmp413_) : NULL; } else { _tmp410_ = NULL; } _tmp414_ = _vala_code_node_ref0 (_tmp410_); m = _tmp414_; _tmp415_ = m; if (_tmp415_ != NULL) { ValaGirParserNode* _tmp416_; gboolean _tmp417_ = FALSE; gboolean _tmp418_ = FALSE; gboolean _tmp419_ = FALSE; ValaMethod* _tmp420_; ValaDataType* _tmp421_; ValaDataType* _tmp422_; _tmp416_ = setter; vala_gir_parser_node_process (_tmp416_, parser); _tmp420_ = m; _tmp421_ = vala_callable_get_return_type ((ValaCallable*) _tmp420_); _tmp422_ = _tmp421_; if (VALA_IS_VOID_TYPE (_tmp422_)) { _tmp419_ = TRUE; } else { ValaMethod* _tmp423_; ValaDataType* _tmp424_; ValaDataType* _tmp425_; _tmp423_ = m; _tmp424_ = vala_callable_get_return_type ((ValaCallable*) _tmp423_); _tmp425_ = _tmp424_; _tmp419_ = VALA_IS_BOOLEAN_TYPE (_tmp425_); } if (!_tmp419_) { _tmp418_ = TRUE; } else { ValaMethod* _tmp426_; ValaList* _tmp427_; gint _tmp428_; gint _tmp429_; _tmp426_ = m; _tmp427_ = vala_callable_get_parameters ((ValaCallable*) _tmp426_); _tmp428_ = vala_collection_get_size ((ValaCollection*) _tmp427_); _tmp429_ = _tmp428_; _tmp418_ = _tmp429_ != 1; } if (_tmp418_) { _tmp417_ = TRUE; } else { ValaMethod* _tmp430_; gboolean _tmp431_; gboolean _tmp432_; _tmp430_ = m; _tmp431_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp430_); _tmp432_ = _tmp431_; _tmp417_ = _tmp432_; } if (_tmp417_) { ValaProperty* _tmp433_; ValaProperty* _tmp434_; _tmp433_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp433_, "NoAccessorMethod", TRUE, NULL); _tmp434_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp434_, "ConcreteAccessor", FALSE, NULL); } else { ValaProperty* _tmp435_; ValaPropertyAccessor* _tmp436_; ValaPropertyAccessor* _tmp437_; ValaDataType* _tmp438_; ValaDataType* _tmp439_; ValaMethod* _tmp440_; ValaList* _tmp441_; gpointer _tmp442_; ValaParameter* _tmp443_; ValaDataType* _tmp444_; ValaDataType* _tmp445_; gboolean _tmp446_; gboolean _tmp447_; gboolean _tmp448_ = FALSE; gboolean _tmp449_ = FALSE; gboolean _tmp450_ = FALSE; ValaProperty* _tmp451_; ValaAttribute* _tmp452_; _tmp435_ = prop; _tmp436_ = vala_property_get_set_accessor (_tmp435_); _tmp437_ = _tmp436_; _tmp438_ = vala_property_accessor_get_value_type (_tmp437_); _tmp439_ = _tmp438_; _tmp440_ = m; _tmp441_ = vala_callable_get_parameters ((ValaCallable*) _tmp440_); _tmp442_ = vala_list_get (_tmp441_, 0); _tmp443_ = (ValaParameter*) _tmp442_; _tmp444_ = vala_variable_get_variable_type ((ValaVariable*) _tmp443_); _tmp445_ = _tmp444_; _tmp446_ = vala_data_type_get_value_owned (_tmp445_); _tmp447_ = _tmp446_; vala_data_type_set_value_owned (_tmp439_, _tmp447_); _vala_code_node_unref0 (_tmp443_); _tmp451_ = prop; _tmp452_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp451_, "ConcreteAccessor"); if (_tmp452_ != NULL) { ValaMethod* _tmp453_; gboolean _tmp454_; gboolean _tmp455_; _tmp453_ = m; _tmp454_ = vala_method_get_is_abstract (_tmp453_); _tmp455_ = _tmp454_; _tmp450_ = !_tmp455_; } else { _tmp450_ = FALSE; } if (_tmp450_) { ValaMethod* _tmp456_; gboolean _tmp457_; gboolean _tmp458_; _tmp456_ = m; _tmp457_ = vala_method_get_is_virtual (_tmp456_); _tmp458_ = _tmp457_; _tmp449_ = !_tmp458_; } else { _tmp449_ = FALSE; } if (_tmp449_) { ValaProperty* _tmp459_; gboolean _tmp460_; gboolean _tmp461_; _tmp459_ = prop; _tmp460_ = vala_property_get_is_abstract (_tmp459_); _tmp461_ = _tmp460_; _tmp448_ = _tmp461_; } else { _tmp448_ = FALSE; } if (_tmp448_) { ValaProperty* _tmp462_; ValaProperty* _tmp463_; _tmp462_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp462_, "ConcreteAccessor", TRUE, NULL); _tmp463_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp463_, "NoAccessorMethod", FALSE, NULL); } } } else { ValaProperty* _tmp464_; ValaProperty* _tmp465_; _tmp464_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp464_, "NoAccessorMethod", TRUE, NULL); _tmp465_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp465_, "ConcreteAccessor", FALSE, NULL); } _vala_code_node_unref0 (m); } _tmp466_ = prop; _tmp467_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp466_, "NoAccessorMethod"); if (_tmp467_ != NULL) { gboolean _tmp468_ = FALSE; ValaProperty* _tmp469_; gboolean _tmp470_; gboolean _tmp471_; _tmp469_ = prop; _tmp470_ = vala_property_get_overrides (_tmp469_); _tmp471_ = _tmp470_; if (!_tmp471_) { ValaGirParserNode* _tmp472_; ValaSymbol* _tmp473_; _tmp472_ = self->parent; _tmp473_ = _tmp472_->symbol; _tmp468_ = VALA_IS_CLASS (_tmp473_); } else { _tmp468_ = FALSE; } if (_tmp468_) { ValaGirParserNode* base_prop_node = NULL; ValaGirParserNode* _tmp474_; ValaGirParserNode* _tmp475_; _tmp474_ = vala_gir_parser_base_interface_property (parser, self); base_prop_node = _tmp474_; _tmp475_ = base_prop_node; if (_tmp475_ != NULL) { ValaGirParserNode* _tmp476_; ValaProperty* base_property = NULL; ValaGirParserNode* _tmp477_; ValaSymbol* _tmp478_; ValaProperty* _tmp479_; ValaProperty* _tmp480_; ValaAttribute* _tmp481_; _tmp476_ = base_prop_node; vala_gir_parser_node_process (_tmp476_, parser); _tmp477_ = base_prop_node; _tmp478_ = _tmp477_->symbol; _tmp479_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp478_, VALA_TYPE_PROPERTY, ValaProperty)); base_property = _tmp479_; _tmp480_ = base_property; _tmp481_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp480_, "ConcreteAccessor"); if (_tmp481_ != NULL) { ValaProperty* _tmp482_; ValaProperty* _tmp483_; ValaPropertyAccessor* _tmp484_; ValaPropertyAccessor* _tmp485_; ValaProperty* _tmp498_; ValaPropertyAccessor* _tmp499_; ValaPropertyAccessor* _tmp500_; _tmp482_ = prop; vala_code_node_set_attribute ((ValaCodeNode*) _tmp482_, "NoAccessorMethod", FALSE, NULL); _tmp483_ = prop; _tmp484_ = vala_property_get_get_accessor (_tmp483_); _tmp485_ = _tmp484_; if (_tmp485_ != NULL) { ValaProperty* _tmp486_; ValaPropertyAccessor* _tmp487_; ValaPropertyAccessor* _tmp488_; ValaDataType* _tmp489_; ValaDataType* _tmp490_; ValaProperty* _tmp491_; ValaPropertyAccessor* _tmp492_; ValaPropertyAccessor* _tmp493_; ValaDataType* _tmp494_; ValaDataType* _tmp495_; gboolean _tmp496_; gboolean _tmp497_; _tmp486_ = prop; _tmp487_ = vala_property_get_get_accessor (_tmp486_); _tmp488_ = _tmp487_; _tmp489_ = vala_property_accessor_get_value_type (_tmp488_); _tmp490_ = _tmp489_; _tmp491_ = base_property; _tmp492_ = vala_property_get_get_accessor (_tmp491_); _tmp493_ = _tmp492_; _tmp494_ = vala_property_accessor_get_value_type (_tmp493_); _tmp495_ = _tmp494_; _tmp496_ = vala_data_type_get_value_owned (_tmp495_); _tmp497_ = _tmp496_; vala_data_type_set_value_owned (_tmp490_, _tmp497_); } _tmp498_ = prop; _tmp499_ = vala_property_get_set_accessor (_tmp498_); _tmp500_ = _tmp499_; if (_tmp500_ != NULL) { ValaProperty* _tmp501_; ValaPropertyAccessor* _tmp502_; ValaPropertyAccessor* _tmp503_; ValaDataType* _tmp504_; ValaDataType* _tmp505_; ValaProperty* _tmp506_; ValaPropertyAccessor* _tmp507_; ValaPropertyAccessor* _tmp508_; ValaDataType* _tmp509_; ValaDataType* _tmp510_; gboolean _tmp511_; gboolean _tmp512_; _tmp501_ = prop; _tmp502_ = vala_property_get_set_accessor (_tmp501_); _tmp503_ = _tmp502_; _tmp504_ = vala_property_accessor_get_value_type (_tmp503_); _tmp505_ = _tmp504_; _tmp506_ = base_property; _tmp507_ = vala_property_get_set_accessor (_tmp506_); _tmp508_ = _tmp507_; _tmp509_ = vala_property_accessor_get_value_type (_tmp508_); _tmp510_ = _tmp509_; _tmp511_ = vala_data_type_get_value_owned (_tmp510_); _tmp512_ = _tmp511_; vala_data_type_set_value_owned (_tmp505_, _tmp512_); } } _vala_code_node_unref0 (base_property); } _vala_gir_parser_node_unref0 (base_prop_node); } } _tmp513_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp513_, VALA_GIR_PARSER_ARGUMENT_TYPE_NO_ACCESSOR_METHOD)) { ValaProperty* _tmp514_; ValaGirParserMetadata* _tmp515_; _tmp514_ = prop; _tmp515_ = self->metadata; vala_code_node_set_attribute ((ValaCodeNode*) _tmp514_, "NoAccessorMethod", vala_gir_parser_metadata_get_bool (_tmp515_, VALA_GIR_PARSER_ARGUMENT_TYPE_NO_ACCESSOR_METHOD, FALSE), NULL); } _tmp516_ = prop; _tmp517_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp516_, "NoAccessorMethod"); if (_tmp517_ != NULL) { ValaProperty* _tmp518_; ValaPropertyAccessor* _tmp519_; ValaPropertyAccessor* _tmp520_; ValaProperty* _tmp526_; ValaPropertyAccessor* _tmp527_; ValaPropertyAccessor* _tmp528_; _tmp518_ = prop; _tmp519_ = vala_property_get_get_accessor (_tmp518_); _tmp520_ = _tmp519_; if (_tmp520_ != NULL) { ValaProperty* _tmp521_; ValaPropertyAccessor* _tmp522_; ValaPropertyAccessor* _tmp523_; ValaDataType* _tmp524_; ValaDataType* _tmp525_; _tmp521_ = prop; _tmp522_ = vala_property_get_get_accessor (_tmp521_); _tmp523_ = _tmp522_; _tmp524_ = vala_property_accessor_get_value_type (_tmp523_); _tmp525_ = _tmp524_; vala_data_type_set_value_owned (_tmp525_, TRUE); } _tmp526_ = prop; _tmp527_ = vala_property_get_set_accessor (_tmp526_); _tmp528_ = _tmp527_; if (_tmp528_ != NULL) { ValaProperty* _tmp529_; ValaPropertyAccessor* _tmp530_; ValaPropertyAccessor* _tmp531_; ValaDataType* _tmp532_; ValaDataType* _tmp533_; _tmp529_ = prop; _tmp530_ = vala_property_get_set_accessor (_tmp529_); _tmp531_ = _tmp530_; _tmp532_ = vala_property_accessor_get_value_type (_tmp531_); _tmp533_ = _tmp532_; vala_data_type_set_value_owned (_tmp533_, FALSE); } } _vala_iterable_unref0 (setters); _vala_gir_parser_node_unref0 (setter); _vala_iterable_unref0 (getters); _vala_gir_parser_node_unref0 (getter); _g_free0 (construct_only); _g_free0 (construct_); _g_free0 (writable); _g_free0 (readable); _vala_code_node_unref0 (prop); _vala_iterable_unref0 (colliding); } else { ValaSymbol* _tmp534_; _tmp534_ = self->symbol; if (VALA_IS_FIELD (_tmp534_)) { ValaField* field = NULL; ValaSymbol* _tmp535_; ValaField* _tmp536_; ValaArrayList* colliding = NULL; ValaGirParserNode* _tmp537_; const gchar* _tmp538_; ValaArrayList* _tmp539_; ValaArrayList* _tmp540_; gint _tmp541_; gint _tmp542_; ValaGirParserMetadata* _tmp543_; ValaGirParserMetadata* _tmp546_; ValaGirParserMetadata* _tmp551_; gboolean _tmp556_ = FALSE; ValaField* _tmp557_; ValaDataType* _tmp558_; ValaDataType* _tmp559_; _tmp535_ = self->symbol; _tmp536_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp535_, VALA_TYPE_FIELD, ValaField)); field = _tmp536_; _tmp537_ = self->parent; _tmp538_ = self->name; _tmp539_ = vala_gir_parser_node_lookup_all (_tmp537_, _tmp538_); colliding = _tmp539_; _tmp540_ = colliding; _tmp541_ = vala_collection_get_size ((ValaCollection*) _tmp540_); _tmp542_ = _tmp541_; if (_tmp542_ > 1) { self->merged = TRUE; } _tmp543_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp543_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET)) { ValaField* _tmp544_; ValaGirParserMetadata* _tmp545_; _tmp544_ = field; _tmp545_ = self->metadata; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp544_, "CCode", "delegate_target", vala_gir_parser_metadata_get_bool (_tmp545_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET, FALSE), NULL); } _tmp546_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp546_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET_CNAME)) { ValaField* _tmp547_; ValaGirParserMetadata* _tmp548_; gchar* _tmp549_; gchar* _tmp550_; _tmp547_ = field; _tmp548_ = self->metadata; _tmp549_ = vala_gir_parser_metadata_get_string (_tmp548_, VALA_GIR_PARSER_ARGUMENT_TYPE_DELEGATE_TARGET_CNAME); _tmp550_ = _tmp549_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp547_, "CCode", "delegate_target_cname", _tmp550_, NULL); _g_free0 (_tmp550_); } _tmp551_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp551_, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY_NOTIFY_CNAME)) { ValaField* _tmp552_; ValaGirParserMetadata* _tmp553_; gchar* _tmp554_; gchar* _tmp555_; _tmp552_ = field; _tmp553_ = self->metadata; _tmp554_ = vala_gir_parser_metadata_get_string (_tmp553_, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROY_NOTIFY_CNAME); _tmp555_ = _tmp554_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp552_, "CCode", "destroy_notify_cname", _tmp555_, NULL); _g_free0 (_tmp555_); } _tmp557_ = field; _tmp558_ = vala_variable_get_variable_type ((ValaVariable*) _tmp557_); _tmp559_ = _tmp558_; if (VALA_IS_DELEGATE_TYPE (_tmp559_)) { ValaGirParserNode* _tmp560_; ValaUnresolvedSymbol* _tmp561_; _tmp560_ = self->parent; _tmp561_ = _tmp560_->gtype_struct_for; _tmp556_ = _tmp561_ != NULL; } else { _tmp556_ = FALSE; } if (_tmp556_) { ValaDelegate* d = NULL; ValaField* _tmp562_; ValaDataType* _tmp563_; ValaDataType* _tmp564_; ValaDelegate* _tmp565_; ValaDelegate* _tmp566_; ValaDelegate* _tmp567_; ValaDelegate* _tmp568_; ValaGirParserNode* _tmp569_; ValaUnresolvedSymbol* _tmp570_; _tmp562_ = field; _tmp563_ = vala_variable_get_variable_type ((ValaVariable*) _tmp562_); _tmp564_ = _tmp563_; _tmp565_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp564_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType)); _tmp566_ = _tmp565_; _tmp567_ = _vala_code_node_ref0 (_tmp566_); d = _tmp567_; _tmp568_ = d; _tmp569_ = self->parent; _tmp570_ = _tmp569_->gtype_struct_for; vala_gir_parser_process_virtual_method_field (parser, self, _tmp568_, _tmp570_); self->merged = TRUE; _vala_code_node_unref0 (d); } else { ValaField* _tmp571_; ValaDataType* _tmp572_; ValaDataType* _tmp573_; _tmp571_ = field; _tmp572_ = vala_variable_get_variable_type ((ValaVariable*) _tmp571_); _tmp573_ = _tmp572_; if (VALA_IS_ARRAY_TYPE (_tmp573_)) { ValaGirParserNode* array_length = NULL; ValaGirParserMetadata* _tmp574_; gboolean _tmp619_ = FALSE; ValaGirParserNode* _tmp620_; _tmp574_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp574_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD)) { ValaGirParserNode* _tmp575_; ValaGirParserMetadata* _tmp576_; gchar* _tmp577_; gchar* _tmp578_; ValaGirParserNode* _tmp579_; _tmp575_ = self->parent; _tmp576_ = self->metadata; _tmp577_ = vala_gir_parser_metadata_get_string (_tmp576_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD); _tmp578_ = _tmp577_; _tmp579_ = vala_gir_parser_node_lookup (_tmp575_, _tmp578_, FALSE, NULL); _vala_gir_parser_node_unref0 (array_length); array_length = _tmp579_; _g_free0 (_tmp578_); } else { gboolean _tmp580_ = FALSE; if (self->array_length_idx > -1) { ValaGirParserNode* _tmp581_; ValaArrayList* _tmp582_; gint _tmp583_; gint _tmp584_; _tmp581_ = self->parent; _tmp582_ = _tmp581_->members; _tmp583_ = vala_collection_get_size ((ValaCollection*) _tmp582_); _tmp584_ = _tmp583_; _tmp580_ = _tmp584_ > self->array_length_idx; } else { _tmp580_ = FALSE; } if (_tmp580_) { ValaGirParserNode* _tmp585_; ValaArrayList* _tmp586_; gpointer _tmp587_; _tmp585_ = self->parent; _tmp586_ = _tmp585_->members; _tmp587_ = vala_list_get ((ValaList*) _tmp586_, self->array_length_idx); _vala_gir_parser_node_unref0 (array_length); array_length = (ValaGirParserNode*) _tmp587_; } else { ValaGirParserNode* _tmp588_; ValaField* _tmp589_; const gchar* _tmp590_; const gchar* _tmp591_; gchar* _tmp592_; gchar* _tmp593_; ValaGirParserNode* _tmp594_; ValaGirParserNode* _tmp595_; _tmp588_ = self->parent; _tmp589_ = field; _tmp590_ = vala_symbol_get_name ((ValaSymbol*) _tmp589_); _tmp591_ = _tmp590_; _tmp592_ = g_strdup_printf ("n_%s", _tmp591_); _tmp593_ = _tmp592_; _tmp594_ = vala_gir_parser_node_lookup (_tmp588_, _tmp593_, FALSE, NULL); _vala_gir_parser_node_unref0 (array_length); array_length = _tmp594_; _g_free0 (_tmp593_); _tmp595_ = array_length; if (_tmp595_ == NULL) { ValaGirParserNode* _tmp596_; ValaField* _tmp597_; const gchar* _tmp598_; const gchar* _tmp599_; gchar* _tmp600_; gchar* _tmp601_; ValaGirParserNode* _tmp602_; ValaGirParserNode* _tmp603_; _tmp596_ = self->parent; _tmp597_ = field; _tmp598_ = vala_symbol_get_name ((ValaSymbol*) _tmp597_); _tmp599_ = _tmp598_; _tmp600_ = g_strdup_printf ("num_%s", _tmp599_); _tmp601_ = _tmp600_; _tmp602_ = vala_gir_parser_node_lookup (_tmp596_, _tmp601_, FALSE, NULL); _vala_gir_parser_node_unref0 (array_length); array_length = _tmp602_; _g_free0 (_tmp601_); _tmp603_ = array_length; if (_tmp603_ == NULL) { ValaGirParserNode* _tmp604_; ValaField* _tmp605_; const gchar* _tmp606_; const gchar* _tmp607_; gchar* _tmp608_; gchar* _tmp609_; ValaGirParserNode* _tmp610_; ValaGirParserNode* _tmp611_; _tmp604_ = self->parent; _tmp605_ = field; _tmp606_ = vala_symbol_get_name ((ValaSymbol*) _tmp605_); _tmp607_ = _tmp606_; _tmp608_ = g_strdup_printf ("%s_length", _tmp607_); _tmp609_ = _tmp608_; _tmp610_ = vala_gir_parser_node_lookup (_tmp604_, _tmp609_, FALSE, NULL); _vala_gir_parser_node_unref0 (array_length); array_length = _tmp610_; _g_free0 (_tmp609_); _tmp611_ = array_length; if (_tmp611_ == NULL) { ValaGirParserNode* _tmp612_; ValaField* _tmp613_; const gchar* _tmp614_; const gchar* _tmp615_; gchar* _tmp616_; gchar* _tmp617_; ValaGirParserNode* _tmp618_; _tmp612_ = self->parent; _tmp613_ = field; _tmp614_ = vala_symbol_get_name ((ValaSymbol*) _tmp613_); _tmp615_ = _tmp614_; _tmp616_ = g_strdup_printf ("%s_length1", _tmp615_); _tmp617_ = _tmp616_; _tmp618_ = vala_gir_parser_node_lookup (_tmp612_, _tmp617_, FALSE, NULL); _vala_gir_parser_node_unref0 (array_length); array_length = _tmp618_; _g_free0 (_tmp617_); } } } } } _tmp620_ = array_length; if (_tmp620_ != NULL) { ValaGirParserNode* _tmp621_; ValaSymbol* _tmp622_; _tmp621_ = array_length; _tmp622_ = _tmp621_->symbol; _tmp619_ = VALA_IS_FIELD (_tmp622_); } else { _tmp619_ = FALSE; } if (_tmp619_) { ValaField* length_field = NULL; ValaGirParserNode* _tmp623_; ValaSymbol* _tmp624_; ValaField* _tmp625_; ValaField* _tmp626_; ValaField* _tmp627_; const gchar* _tmp628_; const gchar* _tmp629_; gchar* length_type = NULL; ValaField* _tmp630_; ValaDataType* _tmp631_; ValaDataType* _tmp632_; gchar* _tmp633_; const gchar* _tmp634_; ValaField* _tmp643_; ValaField* _tmp644_; _tmp623_ = array_length; _tmp624_ = _tmp623_->symbol; _tmp625_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp624_, VALA_TYPE_FIELD, ValaField)); length_field = _tmp625_; _tmp626_ = field; _tmp627_ = length_field; _tmp628_ = vala_symbol_get_name ((ValaSymbol*) _tmp627_); _tmp629_ = _tmp628_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp626_, "CCode", "array_length_cname", _tmp629_, NULL); _tmp630_ = length_field; _tmp631_ = vala_variable_get_variable_type ((ValaVariable*) _tmp630_); _tmp632_ = _tmp631_; _tmp633_ = vala_data_type_to_qualified_string (_tmp632_, NULL); length_type = _tmp633_; _tmp634_ = length_type; if (g_strcmp0 (_tmp634_, "int") != 0) { ValaGirParserNode* st = NULL; ValaGirParserNode* _tmp635_; const gchar* _tmp636_; ValaGirParserNode* _tmp637_; ValaGirParserNode* _tmp638_; _tmp635_ = parser->priv->root; _tmp636_ = length_type; _tmp637_ = vala_gir_parser_node_lookup (_tmp635_, _tmp636_, FALSE, NULL); st = _tmp637_; _tmp638_ = st; if (_tmp638_ != NULL) { ValaField* _tmp639_; ValaGirParserNode* _tmp640_; gchar* _tmp641_; gchar* _tmp642_; _tmp639_ = field; _tmp640_ = st; _tmp641_ = vala_gir_parser_node_get_cname (_tmp640_); _tmp642_ = _tmp641_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp639_, "CCode", "array_length_type", _tmp642_, NULL); _g_free0 (_tmp642_); } _vala_gir_parser_node_unref0 (st); } _tmp643_ = field; vala_code_node_remove_attribute_argument ((ValaCodeNode*) _tmp643_, "CCode", "array_length"); _tmp644_ = field; vala_code_node_remove_attribute_argument ((ValaCodeNode*) _tmp644_, "CCode", "array_null_terminated"); _g_free0 (length_type); _vala_code_node_unref0 (length_field); } _vala_gir_parser_node_unref0 (array_length); } } _vala_iterable_unref0 (colliding); _vala_code_node_unref0 (field); } else { gboolean _tmp645_ = FALSE; ValaSymbol* _tmp646_; _tmp646_ = self->symbol; if (VALA_IS_SIGNAL (_tmp646_)) { _tmp645_ = TRUE; } else { ValaSymbol* _tmp647_; _tmp647_ = self->symbol; _tmp645_ = VALA_IS_DELEGATE (_tmp647_); } if (_tmp645_) { vala_gir_parser_process_callable (parser, self); } else { ValaSymbol* _tmp648_; _tmp648_ = self->symbol; if (VALA_IS_INTERFACE (_tmp648_)) { vala_gir_parser_process_interface (parser, self); } else { ValaSymbol* _tmp649_; _tmp649_ = self->symbol; if (VALA_IS_STRUCT (_tmp649_)) { gboolean _tmp650_ = FALSE; ValaGirParserNode* _tmp651_; ValaSymbol* _tmp652_; _tmp651_ = self->parent; _tmp652_ = _tmp651_->symbol; if (VALA_IS_OBJECT_TYPE_SYMBOL (_tmp652_)) { _tmp650_ = TRUE; } else { ValaGirParserNode* _tmp653_; ValaSymbol* _tmp654_; _tmp653_ = self->parent; _tmp654_ = _tmp653_->symbol; _tmp650_ = VALA_IS_STRUCT (_tmp654_); } if (_tmp650_) { { ValaArrayList* _fn_list = NULL; ValaArrayList* _tmp655_; ValaArrayList* _tmp656_; gint _fn_size = 0; ValaArrayList* _tmp657_; gint _tmp658_; gint _tmp659_; gint _fn_index = 0; _tmp655_ = self->members; _tmp656_ = _vala_iterable_ref0 (_tmp655_); _fn_list = _tmp656_; _tmp657_ = _fn_list; _tmp658_ = vala_collection_get_size ((ValaCollection*) _tmp657_); _tmp659_ = _tmp658_; _fn_size = _tmp659_; _fn_index = -1; while (TRUE) { gint _tmp660_; gint _tmp661_; ValaGirParserNode* fn = NULL; ValaArrayList* _tmp662_; gpointer _tmp663_; ValaField* f = NULL; ValaGirParserNode* _tmp664_; ValaSymbol* _tmp665_; ValaField* _tmp666_; ValaField* _tmp667_; _fn_index = _fn_index + 1; _tmp660_ = _fn_index; _tmp661_ = _fn_size; if (!(_tmp660_ < _tmp661_)) { break; } _tmp662_ = _fn_list; _tmp663_ = vala_list_get ((ValaList*) _tmp662_, _fn_index); fn = (ValaGirParserNode*) _tmp663_; _tmp664_ = fn; _tmp665_ = _tmp664_->symbol; _tmp666_ = _vala_code_node_ref0 (VALA_IS_FIELD (_tmp665_) ? ((ValaField*) _tmp665_) : NULL); f = _tmp666_; _tmp667_ = f; if (_tmp667_ != NULL) { ValaField* _tmp668_; ValaMemberBinding _tmp669_; ValaMemberBinding _tmp670_; ValaField* _tmp678_; ValaSymbol* _tmp679_; const gchar* _tmp680_; const gchar* _tmp681_; ValaField* _tmp682_; const gchar* _tmp683_; const gchar* _tmp684_; gchar* _tmp685_; gchar* _tmp686_; ValaGirParserNode* _tmp687_; ValaField* _tmp688_; const gchar* _tmp689_; const gchar* _tmp690_; gchar* _tmp691_; ValaGirParserNode* _tmp692_; ValaGirParserNode* _tmp693_; _tmp668_ = f; _tmp669_ = vala_field_get_binding (_tmp668_); _tmp670_ = _tmp669_; if (_tmp670_ == VALA_MEMBER_BINDING_INSTANCE) { ValaField* _tmp671_; const gchar* _tmp672_; ValaGirParserNode* _tmp673_; gchar* _tmp674_; gchar* _tmp675_; gchar* _tmp676_; gchar* _tmp677_; _tmp671_ = f; _tmp672_ = self->name; _tmp673_ = fn; _tmp674_ = vala_gir_parser_node_get_cname (_tmp673_); _tmp675_ = _tmp674_; _tmp676_ = g_strdup_printf ("%s.%s", _tmp672_, _tmp675_); _tmp677_ = _tmp676_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp671_, "CCode", "cname", _tmp677_, NULL); _g_free0 (_tmp677_); _g_free0 (_tmp675_); } _tmp678_ = f; _tmp679_ = self->symbol; _tmp680_ = vala_symbol_get_name (_tmp679_); _tmp681_ = _tmp680_; _tmp682_ = f; _tmp683_ = vala_symbol_get_name ((ValaSymbol*) _tmp682_); _tmp684_ = _tmp683_; _tmp685_ = g_strdup_printf ("%s_%s", _tmp681_, _tmp684_); _tmp686_ = _tmp685_; vala_symbol_set_name ((ValaSymbol*) _tmp678_, _tmp686_); _g_free0 (_tmp686_); _tmp687_ = fn; _tmp688_ = f; _tmp689_ = vala_symbol_get_name ((ValaSymbol*) _tmp688_); _tmp690_ = _tmp689_; _tmp691_ = g_strdup (_tmp690_); _g_free0 (_tmp687_->name); _tmp687_->name = _tmp691_; _tmp692_ = self->parent; _tmp693_ = fn; vala_gir_parser_node_add_member (_tmp692_, _tmp693_); } _vala_code_node_unref0 (f); _vala_gir_parser_node_unref0 (fn); } _vala_iterable_unref0 (_fn_list); } self->merged = TRUE; } else { ValaUnresolvedSymbol* _tmp694_; _tmp694_ = self->gtype_struct_for; if (_tmp694_ != NULL) { ValaGirParserNode* obj = NULL; ValaGirParserNode* _tmp695_; ValaUnresolvedSymbol* _tmp696_; ValaGirParserNode* _tmp697_; gboolean _tmp698_ = FALSE; gboolean _tmp699_ = FALSE; ValaGirParserNode* _tmp700_; _tmp695_ = self->parent; _tmp696_ = self->gtype_struct_for; _tmp697_ = vala_gir_parser_resolve_node (parser, _tmp695_, _tmp696_, FALSE); obj = _tmp697_; _tmp700_ = obj; if (_tmp700_ != NULL) { ValaGirParserNode* _tmp701_; ValaSymbol* _tmp702_; _tmp701_ = obj; _tmp702_ = _tmp701_->symbol; _tmp699_ = VALA_IS_INTERFACE (_tmp702_); } else { _tmp699_ = FALSE; } if (_tmp699_) { ValaGirParserNode* _tmp703_; gchar* _tmp704_; gchar* _tmp705_; gchar* _tmp706_; gchar* _tmp707_; gchar* _tmp708_; gchar* _tmp709_; _tmp703_ = obj; _tmp704_ = vala_gir_parser_node_get_cname (_tmp703_); _tmp705_ = _tmp704_; _tmp706_ = g_strdup_printf ("%sIface", _tmp705_); _tmp707_ = _tmp706_; _tmp708_ = vala_gir_parser_node_get_cname (self); _tmp709_ = _tmp708_; _tmp698_ = g_strcmp0 (_tmp707_, _tmp709_) != 0; _g_free0 (_tmp709_); _g_free0 (_tmp707_); _g_free0 (_tmp705_); } else { _tmp698_ = FALSE; } if (_tmp698_) { ValaGirParserNode* _tmp710_; ValaSymbol* _tmp711_; gchar* _tmp712_; gchar* _tmp713_; _tmp710_ = obj; _tmp711_ = _tmp710_->symbol; _tmp712_ = vala_gir_parser_node_get_cname (self); _tmp713_ = _tmp712_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp711_, "CCode", "type_cname", _tmp713_, NULL); _g_free0 (_tmp713_); } else { gboolean _tmp714_ = FALSE; gboolean _tmp715_ = FALSE; ValaGirParserNode* _tmp716_; _tmp716_ = obj; if (_tmp716_ != NULL) { ValaGirParserNode* _tmp717_; ValaSymbol* _tmp718_; _tmp717_ = obj; _tmp718_ = _tmp717_->symbol; _tmp715_ = VALA_IS_CLASS (_tmp718_); } else { _tmp715_ = FALSE; } if (_tmp715_) { ValaGirParserNode* _tmp719_; gchar* _tmp720_; gchar* _tmp721_; gchar* _tmp722_; gchar* _tmp723_; gchar* _tmp724_; gchar* _tmp725_; _tmp719_ = obj; _tmp720_ = vala_gir_parser_node_get_cname (_tmp719_); _tmp721_ = _tmp720_; _tmp722_ = g_strdup_printf ("%sClass", _tmp721_); _tmp723_ = _tmp722_; _tmp724_ = vala_gir_parser_node_get_cname (self); _tmp725_ = _tmp724_; _tmp714_ = g_strcmp0 (_tmp723_, _tmp725_) != 0; _g_free0 (_tmp725_); _g_free0 (_tmp723_); _g_free0 (_tmp721_); } else { _tmp714_ = FALSE; } if (_tmp714_) { ValaGirParserNode* _tmp726_; ValaSymbol* _tmp727_; gchar* _tmp728_; gchar* _tmp729_; _tmp726_ = obj; _tmp727_ = _tmp726_->symbol; _tmp728_ = vala_gir_parser_node_get_cname (self); _tmp729_ = _tmp728_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp727_, "CCode", "type_cname", _tmp729_, NULL); _g_free0 (_tmp729_); } } self->merged = TRUE; _vala_gir_parser_node_unref0 (obj); } } } } } } } } _tmp730_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp730_, VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT)) { ValaGirParserMetadata* _tmp731_; gchar* _tmp732_; self->deprecated = TRUE; _tmp731_ = self->metadata; _tmp732_ = vala_gir_parser_metadata_get_string (_tmp731_, VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT); _g_free0 (self->deprecated_replacement); self->deprecated_replacement = _tmp732_; } _tmp733_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp733_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE)) { ValaGirParserMetadata* _tmp734_; gchar* _tmp735_; self->deprecated = TRUE; _tmp734_ = self->metadata; _tmp735_ = vala_gir_parser_metadata_get_string (_tmp734_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE); _g_free0 (self->deprecated_since); self->deprecated_since = _tmp735_; } else { ValaMap* _tmp736_; gpointer _tmp737_; gchar* _tmp738_; gboolean _tmp739_; _tmp736_ = self->girdata; _tmp737_ = vala_map_get (_tmp736_, "deprecated-version"); _tmp738_ = (gchar*) _tmp737_; _tmp739_ = _tmp738_ != NULL; _g_free0 (_tmp738_); if (_tmp739_) { ValaMap* _tmp740_; gpointer _tmp741_; self->deprecated = TRUE; _tmp740_ = self->girdata; _tmp741_ = vala_map_get (_tmp740_, "deprecated-version"); _g_free0 (self->deprecated_since); self->deprecated_since = (gchar*) _tmp741_; } } _tmp742_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp742_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED)) { ValaGirParserMetadata* _tmp743_; _tmp743_ = self->metadata; self->deprecated = vala_gir_parser_metadata_get_bool (_tmp743_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED, TRUE); if (!self->deprecated) { _g_free0 (self->deprecated_since); self->deprecated_since = NULL; _g_free0 (self->deprecated_replacement); self->deprecated_replacement = NULL; } } else { ValaMap* _tmp744_; gpointer _tmp745_; gchar* _tmp746_; gboolean _tmp747_; _tmp744_ = self->girdata; _tmp745_ = vala_map_get (_tmp744_, "deprecated"); _tmp746_ = (gchar*) _tmp745_; _tmp747_ = _tmp746_ != NULL; _g_free0 (_tmp746_); if (_tmp747_) { self->deprecated = TRUE; } } _tmp748_ = self->deprecated_since; if (_tmp748_ != NULL) { const gchar* _tmp749_; _tmp749_ = self->deprecated_since; self->deprecated_version = vala_gir_parser_node_parse_version_string (_tmp749_); } _tmp750_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp750_, VALA_GIR_PARSER_ARGUMENT_TYPE_EXPERIMENTAL)) { ValaSymbol* _tmp751_; ValaGirParserMetadata* _tmp752_; _tmp751_ = self->symbol; _tmp752_ = self->metadata; vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp751_, "Version", "experimental", vala_gir_parser_metadata_get_bool (_tmp752_, VALA_GIR_PARSER_ARGUMENT_TYPE_EXPERIMENTAL, FALSE), NULL); } _tmp753_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp753_, VALA_GIR_PARSER_ARGUMENT_TYPE_SINCE)) { ValaSymbol* _tmp754_; ValaVersionAttribute* _tmp755_; ValaVersionAttribute* _tmp756_; ValaGirParserMetadata* _tmp757_; gchar* _tmp758_; gchar* _tmp759_; _tmp754_ = self->symbol; _tmp755_ = vala_symbol_get_version (_tmp754_); _tmp756_ = _tmp755_; _tmp757_ = self->metadata; _tmp758_ = vala_gir_parser_metadata_get_string (_tmp757_, VALA_GIR_PARSER_ARGUMENT_TYPE_SINCE); _tmp759_ = _tmp758_; vala_version_attribute_set_since (_tmp756_, _tmp759_); _g_free0 (_tmp759_); } else { gboolean _tmp760_ = FALSE; ValaSymbol* _tmp761_; _tmp761_ = self->symbol; if (VALA_IS_NAMESPACE (_tmp761_) == FALSE) { ValaMap* _tmp762_; gpointer _tmp763_; gchar* _tmp764_; _tmp762_ = self->girdata; _tmp763_ = vala_map_get (_tmp762_, "version"); _tmp764_ = (gchar*) _tmp763_; _tmp760_ = _tmp764_ != NULL; _g_free0 (_tmp764_); } else { _tmp760_ = FALSE; } if (_tmp760_) { ValaSymbol* _tmp765_; ValaVersionAttribute* _tmp766_; ValaVersionAttribute* _tmp767_; ValaMap* _tmp768_; gpointer _tmp769_; gchar* _tmp770_; _tmp765_ = self->symbol; _tmp766_ = vala_symbol_get_version (_tmp765_); _tmp767_ = _tmp766_; _tmp768_ = self->girdata; _tmp769_ = vala_map_get (_tmp768_, "version"); _tmp770_ = (gchar*) _tmp769_; vala_version_attribute_set_since (_tmp767_, _tmp770_); _g_free0 (_tmp770_); } } _tmp771_ = self->parent; _tmp772_ = _tmp771_->symbol; if (VALA_IS_NAMESPACE (_tmp772_)) { ValaSymbol* _tmp773_; gchar* _tmp774_; gchar* _tmp775_; _tmp773_ = self->symbol; _tmp774_ = vala_gir_parser_node_get_cheader_filename (self); _tmp775_ = _tmp774_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp773_, "CCode", "cheader_filename", _tmp775_, NULL); _g_free0 (_tmp775_); } else { ValaGirParserMetadata* _tmp776_; _tmp776_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp776_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME)) { ValaSymbol* _tmp777_; ValaGirParserMetadata* _tmp778_; gchar* _tmp779_; gchar* _tmp780_; _tmp777_ = self->symbol; _tmp778_ = self->metadata; _tmp779_ = vala_gir_parser_metadata_get_string (_tmp778_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME); _tmp780_ = _tmp779_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp777_, "CCode", "cheader_filename", _tmp780_, NULL); _g_free0 (_tmp780_); } } _tmp781_ = vala_gir_parser_node_get_cname (self); _tmp782_ = _tmp781_; _tmp783_ = vala_gir_parser_node_get_default_cname (self); _tmp784_ = _tmp783_; _tmp785_ = g_strcmp0 (_tmp782_, _tmp784_) != 0; _g_free0 (_tmp784_); _g_free0 (_tmp782_); if (_tmp785_) { ValaSymbol* _tmp786_; gchar* _tmp787_; gchar* _tmp788_; _tmp786_ = self->symbol; _tmp787_ = vala_gir_parser_node_get_cname (self); _tmp788_ = _tmp787_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp786_, "CCode", "cname", _tmp788_, NULL); _g_free0 (_tmp788_); } _tmp789_ = self->metadata; if (vala_gir_parser_metadata_has_argument (_tmp789_, VALA_GIR_PARSER_ARGUMENT_TYPE_FEATURE_TEST_MACRO)) { ValaSymbol* _tmp790_; ValaGirParserMetadata* _tmp791_; gchar* _tmp792_; gchar* _tmp793_; _tmp790_ = self->symbol; _tmp791_ = self->metadata; _tmp792_ = vala_gir_parser_metadata_get_string (_tmp791_, VALA_GIR_PARSER_ARGUMENT_TYPE_FEATURE_TEST_MACRO); _tmp793_ = _tmp792_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp790_, "CCode", "feature_test_macro", _tmp793_, NULL); _g_free0 (_tmp793_); } _tmp794_ = vala_gir_parser_node_get_lower_case_cprefix (self); _tmp795_ = _tmp794_; _tmp796_ = vala_gir_parser_node_get_default_lower_case_cprefix (self); _tmp797_ = _tmp796_; _tmp798_ = g_strcmp0 (_tmp795_, _tmp797_) != 0; _g_free0 (_tmp797_); _g_free0 (_tmp795_); if (_tmp798_) { ValaSymbol* _tmp799_; gchar* _tmp800_; gchar* _tmp801_; _tmp799_ = self->symbol; _tmp800_ = vala_gir_parser_node_get_lower_case_cprefix (self); _tmp801_ = _tmp800_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp799_, "CCode", "lower_case_cprefix", _tmp801_, NULL); _g_free0 (_tmp801_); } _tmp802_ = vala_gir_parser_node_get_lower_case_csuffix (self); _tmp803_ = _tmp802_; _tmp804_ = vala_gir_parser_node_get_default_lower_case_csuffix (self); _tmp805_ = _tmp804_; _tmp806_ = g_strcmp0 (_tmp803_, _tmp805_) != 0; _g_free0 (_tmp805_); _g_free0 (_tmp803_); if (_tmp806_) { ValaSymbol* _tmp807_; gchar* _tmp808_; gchar* _tmp809_; _tmp807_ = self->symbol; _tmp808_ = vala_gir_parser_node_get_lower_case_csuffix (self); _tmp809_ = _tmp808_; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp807_, "CCode", "lower_case_csuffix", _tmp809_, NULL); _g_free0 (_tmp809_); } _tmp810_ = vala_gir_parser_node_get_gir_name (self); gir_name = _tmp810_; _tmp811_ = vala_gir_parser_node_get_default_gir_name (self); default_gir_name = _tmp811_; _tmp814_ = self->symbol; if (vala_gir_parser_is_container (_tmp814_)) { ValaSymbol* _tmp815_; _tmp815_ = self->symbol; _tmp813_ = !VALA_IS_NAMESPACE (_tmp815_); } else { _tmp813_ = FALSE; } if (_tmp813_) { gboolean _tmp816_ = FALSE; const gchar* _tmp817_; const gchar* _tmp818_; _tmp817_ = self->name; _tmp818_ = gir_name; if (g_strcmp0 (_tmp817_, _tmp818_) != 0) { _tmp816_ = TRUE; } else { const gchar* _tmp819_; const gchar* _tmp820_; _tmp819_ = gir_name; _tmp820_ = default_gir_name; _tmp816_ = g_strcmp0 (_tmp819_, _tmp820_) != 0; } _tmp812_ = _tmp816_; } else { _tmp812_ = FALSE; } if (_tmp812_) { ValaSymbol* _tmp821_; const gchar* _tmp822_; _tmp821_ = self->symbol; _tmp822_ = gir_name; vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp821_, "GIR", "name", _tmp822_, NULL); } _g_free0 (default_gir_name); _g_free0 (gir_name); } if (self->new_symbol) { _tmp824_ = self->merged; } else { _tmp824_ = FALSE; } if (!_tmp824_) { ValaSymbol* _tmp825_; _tmp825_ = self->symbol; _tmp823_ = vala_gir_parser_is_container (_tmp825_); } else { _tmp823_ = FALSE; } if (_tmp823_) { ValaClass* cl = NULL; ValaSymbol* _tmp870_; ValaClass* _tmp871_; gboolean _tmp872_ = FALSE; gboolean _tmp873_ = FALSE; ValaClass* _tmp874_; { ValaArrayList* _node_list = NULL; ValaArrayList* _tmp826_; ValaArrayList* _tmp827_; gint _node_size = 0; ValaArrayList* _tmp828_; gint _tmp829_; gint _tmp830_; gint _node_index = 0; _tmp826_ = self->members; _tmp827_ = _vala_iterable_ref0 (_tmp826_); _node_list = _tmp827_; _tmp828_ = _node_list; _tmp829_ = vala_collection_get_size ((ValaCollection*) _tmp828_); _tmp830_ = _tmp829_; _node_size = _tmp830_; _node_index = -1; while (TRUE) { gint _tmp831_; gint _tmp832_; ValaGirParserNode* node = NULL; ValaArrayList* _tmp833_; gpointer _tmp834_; gboolean _tmp835_ = FALSE; ValaGirParserNode* _tmp841_; ValaGirParserNode* _tmp846_; const gchar* _tmp847_; ValaGirParserNode* _tmp854_; const gchar* _tmp855_; gboolean _tmp862_ = FALSE; gboolean _tmp863_ = FALSE; ValaGirParserNode* _tmp864_; _node_index = _node_index + 1; _tmp831_ = _node_index; _tmp832_ = _node_size; if (!(_tmp831_ < _tmp832_)) { break; } _tmp833_ = _node_list; _tmp834_ = vala_list_get ((ValaList*) _tmp833_, _node_index); node = (ValaGirParserNode*) _tmp834_; if (self->deprecated_version > ((guint64) 0)) { ValaGirParserNode* _tmp836_; _tmp836_ = node; _tmp835_ = _tmp836_->deprecated_version > ((guint64) 0); } else { _tmp835_ = FALSE; } if (_tmp835_) { ValaGirParserNode* _tmp837_; _tmp837_ = node; if (self->deprecated_version <= _tmp837_->deprecated_version) { ValaGirParserNode* _tmp838_; ValaGirParserNode* _tmp839_; ValaGirParserNode* _tmp840_; _tmp838_ = node; _tmp838_->deprecated = FALSE; _tmp839_ = node; _g_free0 (_tmp839_->deprecated_since); _tmp839_->deprecated_since = NULL; _tmp840_ = node; _g_free0 (_tmp840_->deprecated_replacement); _tmp840_->deprecated_replacement = NULL; } } _tmp841_ = node; if (_tmp841_->deprecated) { ValaGirParserNode* _tmp842_; ValaSymbol* _tmp843_; ValaVersionAttribute* _tmp844_; ValaVersionAttribute* _tmp845_; _tmp842_ = node; _tmp843_ = _tmp842_->symbol; _tmp844_ = vala_symbol_get_version (_tmp843_); _tmp845_ = _tmp844_; vala_version_attribute_set_deprecated (_tmp845_, TRUE); } _tmp846_ = node; _tmp847_ = _tmp846_->deprecated_since; if (_tmp847_ != NULL) { ValaGirParserNode* _tmp848_; ValaSymbol* _tmp849_; ValaVersionAttribute* _tmp850_; ValaVersionAttribute* _tmp851_; ValaGirParserNode* _tmp852_; const gchar* _tmp853_; _tmp848_ = node; _tmp849_ = _tmp848_->symbol; _tmp850_ = vala_symbol_get_version (_tmp849_); _tmp851_ = _tmp850_; _tmp852_ = node; _tmp853_ = _tmp852_->deprecated_since; vala_version_attribute_set_deprecated_since (_tmp851_, _tmp853_); } _tmp854_ = node; _tmp855_ = _tmp854_->deprecated_replacement; if (_tmp855_ != NULL) { ValaGirParserNode* _tmp856_; ValaSymbol* _tmp857_; ValaVersionAttribute* _tmp858_; ValaVersionAttribute* _tmp859_; ValaGirParserNode* _tmp860_; const gchar* _tmp861_; _tmp856_ = node; _tmp857_ = _tmp856_->symbol; _tmp858_ = vala_symbol_get_version (_tmp857_); _tmp859_ = _tmp858_; _tmp860_ = node; _tmp861_ = _tmp860_->deprecated_replacement; vala_version_attribute_set_replacement (_tmp859_, _tmp861_); } _tmp864_ = node; if (_tmp864_->new_symbol) { ValaGirParserNode* _tmp865_; _tmp865_ = node; _tmp863_ = !_tmp865_->merged; } else { _tmp863_ = FALSE; } if (_tmp863_) { ValaGirParserMetadata* _tmp866_; _tmp866_ = self->metadata; _tmp862_ = !vala_gir_parser_metadata_get_bool (_tmp866_, VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN, FALSE); } else { _tmp862_ = FALSE; } if (_tmp862_) { ValaSymbol* _tmp867_; ValaGirParserNode* _tmp868_; ValaSymbol* _tmp869_; _tmp867_ = self->symbol; _tmp868_ = node; _tmp869_ = _tmp868_->symbol; vala_gir_parser_add_symbol_to_container (_tmp867_, _tmp869_); } _vala_gir_parser_node_unref0 (node); } _vala_iterable_unref0 (_node_list); } _tmp870_ = self->symbol; _tmp871_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp870_) ? ((ValaClass*) _tmp870_) : NULL); cl = _tmp871_; _tmp874_ = cl; if (_tmp874_ != NULL) { ValaClass* _tmp875_; gboolean _tmp876_; gboolean _tmp877_; _tmp875_ = cl; _tmp876_ = vala_class_get_is_compact (_tmp875_); _tmp877_ = _tmp876_; _tmp873_ = !_tmp877_; } else { _tmp873_ = FALSE; } if (_tmp873_) { ValaClass* _tmp878_; ValaCreationMethod* _tmp879_; ValaCreationMethod* _tmp880_; _tmp878_ = cl; _tmp879_ = vala_class_get_default_construction_method (_tmp878_); _tmp880_ = _tmp879_; _tmp872_ = _tmp880_ == NULL; } else { _tmp872_ = FALSE; } if (_tmp872_) { ValaCreationMethod* cm = NULL; ValaClass* _tmp881_; ValaSourceReference* _tmp882_; ValaSourceReference* _tmp883_; ValaCreationMethod* _tmp884_; ValaCreationMethod* _tmp885_; ValaCreationMethod* _tmp886_; ValaClass* _tmp887_; ValaCreationMethod* _tmp888_; _tmp881_ = cl; _tmp882_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp881_); _tmp883_ = _tmp882_; _tmp884_ = vala_creation_method_new (NULL, NULL, _tmp883_, NULL); cm = _tmp884_; _tmp885_ = cm; vala_method_set_has_construct_function ((ValaMethod*) _tmp885_, FALSE); _tmp886_ = cm; vala_symbol_set_access ((ValaSymbol*) _tmp886_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED); _tmp887_ = cl; _tmp888_ = cm; vala_symbol_add_method ((ValaSymbol*) _tmp887_, (ValaMethod*) _tmp888_); _vala_code_node_unref0 (cm); } _vala_code_node_unref0 (cl); } self->processed = TRUE; } static gchar* vala_gir_parser_node_to_string (ValaGirParserNode* self) { ValaGirParserNode* _tmp0_; const gchar* _tmp1_; gchar* result = NULL; g_return_val_if_fail (self != NULL, NULL); _tmp0_ = self->parent; _tmp1_ = _tmp0_->name; if (_tmp1_ == NULL) { const gchar* _tmp2_; gchar* _tmp3_; _tmp2_ = self->name; _tmp3_ = g_strdup (_tmp2_); result = _tmp3_; return result; } else { ValaGirParserNode* _tmp4_; gchar* _tmp5_; gchar* _tmp6_; const gchar* _tmp7_; gchar* _tmp8_; gchar* _tmp9_; _tmp4_ = self->parent; _tmp5_ = vala_gir_parser_node_to_string (_tmp4_); _tmp6_ = _tmp5_; _tmp7_ = self->name; _tmp8_ = g_strdup_printf ("%s.%s", _tmp6_, _tmp7_); _tmp9_ = _tmp8_; _g_free0 (_tmp6_); result = _tmp9_; return result; } } static void vala_gir_parser_value_node_init (GValue* value) { value->data[0].v_pointer = NULL; } static void vala_gir_parser_value_node_free_value (GValue* value) { if (value->data[0].v_pointer) { vala_gir_parser_node_unref (value->data[0].v_pointer); } } static void vala_gir_parser_value_node_copy_value (const GValue* src_value, GValue* dest_value) { if (src_value->data[0].v_pointer) { dest_value->data[0].v_pointer = vala_gir_parser_node_ref (src_value->data[0].v_pointer); } else { dest_value->data[0].v_pointer = NULL; } } static gpointer vala_gir_parser_value_node_peek_pointer (const GValue* value) { return value->data[0].v_pointer; } static gchar* vala_gir_parser_value_node_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { if (collect_values[0].v_pointer) { ValaGirParserNode * object; object = collect_values[0].v_pointer; if (object->parent_instance.g_class == NULL) { return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) { return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } value->data[0].v_pointer = vala_gir_parser_node_ref (object); } else { value->data[0].v_pointer = NULL; } return NULL; } static gchar* vala_gir_parser_value_node_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { ValaGirParserNode ** object_p; object_p = collect_values[0].v_pointer; if (!object_p) { return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); } if (!value->data[0].v_pointer) { *object_p = NULL; } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) { *object_p = value->data[0].v_pointer; } else { *object_p = vala_gir_parser_node_ref (value->data[0].v_pointer); } return NULL; } static GParamSpec* vala_gir_parser_param_spec_node (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) { ValaGirParserParamSpecNode* spec; g_return_val_if_fail (g_type_is_a (object_type, VALA_GIR_PARSER_TYPE_NODE), 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 vala_gir_parser_value_get_node (const GValue* value) { g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_NODE), NULL); return value->data[0].v_pointer; } static void vala_gir_parser_value_set_node (GValue* value, gpointer v_object) { ValaGirParserNode * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_NODE)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_NODE)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; vala_gir_parser_node_ref (value->data[0].v_pointer); } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_node_unref (old); } } static void vala_gir_parser_value_take_node (GValue* value, gpointer v_object) { ValaGirParserNode * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_NODE)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_NODE)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_node_unref (old); } } static void vala_gir_parser_node_class_init (ValaGirParserNodeClass * klass, gpointer klass_data) { GEqualFunc _tmp0_; ValaArrayList* _tmp1_; vala_gir_parser_node_parent_class = g_type_class_peek_parent (klass); ((ValaGirParserNodeClass *) klass)->finalize = vala_gir_parser_node_finalize; _tmp0_ = g_direct_equal; _tmp1_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_NODE, (GBoxedCopyFunc) vala_gir_parser_node_ref, (GDestroyNotify) vala_gir_parser_node_unref, _tmp0_); vala_gir_parser_node_new_namespaces = _tmp1_; } static void vala_gir_parser_node_instance_init (ValaGirParserNode * self, gpointer klass) { ValaGirParserMetadata* _tmp0_; ValaGirParserMetadata* _tmp1_; ValaGirParserMetadata* _tmp2_; GEqualFunc _tmp3_; ValaArrayList* _tmp4_; GHashFunc _tmp5_; GEqualFunc _tmp6_; GEqualFunc _tmp7_; ValaHashMap* _tmp8_; self->girdata = NULL; _tmp0_ = vala_gir_parser_metadata_get_empty (); _tmp1_ = _tmp0_; _tmp2_ = _vala_gir_parser_metadata_ref0 (_tmp1_); self->metadata = _tmp2_; self->source_reference = NULL; _tmp3_ = g_direct_equal; _tmp4_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_NODE, (GBoxedCopyFunc) vala_gir_parser_node_ref, (GDestroyNotify) vala_gir_parser_node_unref, _tmp3_); self->members = _tmp4_; _tmp5_ = g_str_hash; _tmp6_ = g_str_equal; _tmp7_ = g_direct_equal; _tmp8_ = vala_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, VALA_TYPE_ARRAY_LIST, (GBoxedCopyFunc) vala_iterable_ref, (GDestroyNotify) vala_iterable_unref, _tmp5_, _tmp6_, _tmp7_); self->scope = _tmp8_; self->return_array_length_idx = -1; self->array_length_idx = -1; self->deprecated = FALSE; self->deprecated_version = (guint64) 0; self->deprecated_since = NULL; self->deprecated_replacement = NULL; self->ref_count = 1; } static void vala_gir_parser_node_finalize (ValaGirParserNode * obj) { ValaGirParserNode * self; self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_GIR_PARSER_TYPE_NODE, ValaGirParserNode); g_signal_handlers_destroy (self); _g_free0 (self->element_type); _g_free0 (self->name); _vala_map_unref0 (self->girdata); _vala_gir_parser_metadata_unref0 (self->metadata); _vala_source_reference_unref0 (self->source_reference); _vala_iterable_unref0 (self->members); _vala_map_unref0 (self->scope); _vala_comment_unref0 (self->comment); _vala_code_node_unref0 (self->symbol); _vala_iterable_unref0 (self->parameters); _vala_iterable_unref0 (self->array_length_parameters); _vala_iterable_unref0 (self->closure_parameters); _vala_iterable_unref0 (self->destroy_parameters); _vala_code_node_unref0 (self->gtype_struct_for); _vala_code_node_unref0 (self->type_struct); _vala_code_node_unref0 (self->base_type); _g_free0 (self->deprecated_since); _g_free0 (self->deprecated_replacement); } static GType vala_gir_parser_node_get_type_once (void) { static const GTypeValueTable g_define_type_value_table = { vala_gir_parser_value_node_init, vala_gir_parser_value_node_free_value, vala_gir_parser_value_node_copy_value, vala_gir_parser_value_node_peek_pointer, "p", vala_gir_parser_value_node_collect_value, "p", vala_gir_parser_value_node_lcopy_value }; static const GTypeInfo g_define_type_info = { sizeof (ValaGirParserNodeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_parser_node_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirParserNode), 0, (GInstanceInitFunc) vala_gir_parser_node_instance_init, &g_define_type_value_table }; static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) }; GType vala_gir_parser_node_type_id; vala_gir_parser_node_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaGirParserNode", &g_define_type_info, &g_define_type_fundamental_info, 0); return vala_gir_parser_node_type_id; } static GType vala_gir_parser_node_get_type (void) { static volatile gsize vala_gir_parser_node_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_node_type_id__volatile)) { GType vala_gir_parser_node_type_id; vala_gir_parser_node_type_id = vala_gir_parser_node_get_type_once (); g_once_init_leave (&vala_gir_parser_node_type_id__volatile, vala_gir_parser_node_type_id); } return vala_gir_parser_node_type_id__volatile; } static gpointer vala_gir_parser_node_ref (gpointer instance) { ValaGirParserNode * self; self = instance; g_atomic_int_inc (&self->ref_count); return instance; } static void vala_gir_parser_node_unref (gpointer instance) { ValaGirParserNode * self; self = instance; if (g_atomic_int_dec_and_test (&self->ref_count)) { VALA_GIR_PARSER_NODE_GET_CLASS (self)->finalize (self); g_type_free_instance ((GTypeInstance *) self); } } static ValaGirParserParameterInfo* vala_gir_parser_parameter_info_construct (GType object_type, ValaParameter* param, gint array_length_idx, gint closure_idx, gint destroy_idx, gboolean is_async) { ValaGirParserParameterInfo* self = NULL; ValaParameter* _tmp0_; g_return_val_if_fail (param != NULL, NULL); self = (ValaGirParserParameterInfo*) g_type_create_instance (object_type); _tmp0_ = _vala_code_node_ref0 (param); _vala_code_node_unref0 (self->param); self->param = _tmp0_; self->array_length_idx = array_length_idx; self->closure_idx = closure_idx; self->destroy_idx = destroy_idx; self->vala_idx = 0.0F; self->keep = TRUE; self->is_async = is_async; return self; } static ValaGirParserParameterInfo* vala_gir_parser_parameter_info_new (ValaParameter* param, gint array_length_idx, gint closure_idx, gint destroy_idx, gboolean is_async) { return vala_gir_parser_parameter_info_construct (VALA_GIR_PARSER_TYPE_PARAMETER_INFO, param, array_length_idx, closure_idx, destroy_idx, is_async); } static void vala_gir_parser_value_parameter_info_init (GValue* value) { value->data[0].v_pointer = NULL; } static void vala_gir_parser_value_parameter_info_free_value (GValue* value) { if (value->data[0].v_pointer) { vala_gir_parser_parameter_info_unref (value->data[0].v_pointer); } } static void vala_gir_parser_value_parameter_info_copy_value (const GValue* src_value, GValue* dest_value) { if (src_value->data[0].v_pointer) { dest_value->data[0].v_pointer = vala_gir_parser_parameter_info_ref (src_value->data[0].v_pointer); } else { dest_value->data[0].v_pointer = NULL; } } static gpointer vala_gir_parser_value_parameter_info_peek_pointer (const GValue* value) { return value->data[0].v_pointer; } static gchar* vala_gir_parser_value_parameter_info_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { if (collect_values[0].v_pointer) { ValaGirParserParameterInfo * object; object = collect_values[0].v_pointer; if (object->parent_instance.g_class == NULL) { return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) { return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } value->data[0].v_pointer = vala_gir_parser_parameter_info_ref (object); } else { value->data[0].v_pointer = NULL; } return NULL; } static gchar* vala_gir_parser_value_parameter_info_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { ValaGirParserParameterInfo ** object_p; object_p = collect_values[0].v_pointer; if (!object_p) { return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); } if (!value->data[0].v_pointer) { *object_p = NULL; } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) { *object_p = value->data[0].v_pointer; } else { *object_p = vala_gir_parser_parameter_info_ref (value->data[0].v_pointer); } return NULL; } static GParamSpec* vala_gir_parser_param_spec_parameter_info (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) { ValaGirParserParamSpecParameterInfo* spec; g_return_val_if_fail (g_type_is_a (object_type, VALA_GIR_PARSER_TYPE_PARAMETER_INFO), 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 vala_gir_parser_value_get_parameter_info (const GValue* value) { g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_PARAMETER_INFO), NULL); return value->data[0].v_pointer; } static void vala_gir_parser_value_set_parameter_info (GValue* value, gpointer v_object) { ValaGirParserParameterInfo * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_PARAMETER_INFO)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_PARAMETER_INFO)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; vala_gir_parser_parameter_info_ref (value->data[0].v_pointer); } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_parameter_info_unref (old); } } static void vala_gir_parser_value_take_parameter_info (GValue* value, gpointer v_object) { ValaGirParserParameterInfo * old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_GIR_PARSER_TYPE_PARAMETER_INFO)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_GIR_PARSER_TYPE_PARAMETER_INFO)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; } else { value->data[0].v_pointer = NULL; } if (old) { vala_gir_parser_parameter_info_unref (old); } } static void vala_gir_parser_parameter_info_class_init (ValaGirParserParameterInfoClass * klass, gpointer klass_data) { vala_gir_parser_parameter_info_parent_class = g_type_class_peek_parent (klass); ((ValaGirParserParameterInfoClass *) klass)->finalize = vala_gir_parser_parameter_info_finalize; } static void vala_gir_parser_parameter_info_instance_init (ValaGirParserParameterInfo * self, gpointer klass) { self->ref_count = 1; } static void vala_gir_parser_parameter_info_finalize (ValaGirParserParameterInfo * obj) { ValaGirParserParameterInfo * self; self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_GIR_PARSER_TYPE_PARAMETER_INFO, ValaGirParserParameterInfo); g_signal_handlers_destroy (self); _vala_code_node_unref0 (self->param); } static GType vala_gir_parser_parameter_info_get_type_once (void) { static const GTypeValueTable g_define_type_value_table = { vala_gir_parser_value_parameter_info_init, vala_gir_parser_value_parameter_info_free_value, vala_gir_parser_value_parameter_info_copy_value, vala_gir_parser_value_parameter_info_peek_pointer, "p", vala_gir_parser_value_parameter_info_collect_value, "p", vala_gir_parser_value_parameter_info_lcopy_value }; static const GTypeInfo g_define_type_info = { sizeof (ValaGirParserParameterInfoClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_parser_parameter_info_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirParserParameterInfo), 0, (GInstanceInitFunc) vala_gir_parser_parameter_info_instance_init, &g_define_type_value_table }; static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) }; GType vala_gir_parser_parameter_info_type_id; vala_gir_parser_parameter_info_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaGirParserParameterInfo", &g_define_type_info, &g_define_type_fundamental_info, 0); return vala_gir_parser_parameter_info_type_id; } static GType vala_gir_parser_parameter_info_get_type (void) { static volatile gsize vala_gir_parser_parameter_info_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_parameter_info_type_id__volatile)) { GType vala_gir_parser_parameter_info_type_id; vala_gir_parser_parameter_info_type_id = vala_gir_parser_parameter_info_get_type_once (); g_once_init_leave (&vala_gir_parser_parameter_info_type_id__volatile, vala_gir_parser_parameter_info_type_id); } return vala_gir_parser_parameter_info_type_id__volatile; } static gpointer vala_gir_parser_parameter_info_ref (gpointer instance) { ValaGirParserParameterInfo * self; self = instance; g_atomic_int_inc (&self->ref_count); return instance; } static void vala_gir_parser_parameter_info_unref (gpointer instance) { ValaGirParserParameterInfo * self; self = instance; if (g_atomic_int_dec_and_test (&self->ref_count)) { VALA_GIR_PARSER_PARAMETER_INFO_GET_CLASS (self)->finalize (self); g_type_free_instance ((GTypeInstance *) self); } } static void vala_gir_parser_class_init (ValaGirParserClass * klass, gpointer klass_data) { vala_gir_parser_parent_class = g_type_class_peek_parent (klass); ((ValaCodeVisitorClass *) klass)->finalize = vala_gir_parser_finalize; g_type_class_adjust_private_offset (klass, &ValaGirParser_private_offset); ((ValaCodeVisitorClass *) klass)->visit_source_file = (void (*) (ValaCodeVisitor*, ValaSourceFile*)) vala_gir_parser_real_visit_source_file; } static void vala_gir_parser_instance_init (ValaGirParser * self, gpointer klass) { GEqualFunc _tmp0_; ValaArrayList* _tmp1_; GHashFunc _tmp2_; GEqualFunc _tmp3_; ValaHashSet* _tmp4_; GEqualFunc _tmp5_; ValaHashMap* _tmp6_; GEqualFunc _tmp7_; ValaArrayList* _tmp8_; GHashFunc _tmp9_; GEqualFunc _tmp10_; GEqualFunc _tmp11_; ValaHashMap* _tmp12_; GEqualFunc _tmp13_; ValaArrayList* _tmp14_; self->priv = vala_gir_parser_get_instance_private (self); _tmp0_ = g_direct_equal; _tmp1_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_METADATA, (GBoxedCopyFunc) vala_gir_parser_metadata_ref, (GDestroyNotify) vala_gir_parser_metadata_unref, _tmp0_); self->priv->metadata_roots = _tmp1_; _tmp2_ = g_str_hash; _tmp3_ = g_str_equal; _tmp4_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp2_, _tmp3_); self->priv->provided_namespaces = (ValaSet*) _tmp4_; _tmp5_ = g_direct_equal; _tmp6_ = vala_hash_map_new (VALA_TYPE_UNRESOLVED_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _vala_gir_parser_unresolved_symbol_hash_ghash_func, _vala_gir_parser_unresolved_symbol_equal_gequal_func, _tmp5_); self->priv->unresolved_symbols_map = _tmp6_; _tmp7_ = g_direct_equal; _tmp8_ = vala_array_list_new (VALA_TYPE_UNRESOLVED_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp7_); self->priv->unresolved_gir_symbols = _tmp8_; _tmp9_ = g_direct_hash; _tmp10_ = g_direct_equal; _tmp11_ = g_direct_equal; _tmp12_ = vala_hash_map_new (VALA_TYPE_UNRESOLVED_TYPE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, VALA_GIR_PARSER_TYPE_NODE, (GBoxedCopyFunc) vala_gir_parser_node_ref, (GDestroyNotify) vala_gir_parser_node_unref, _tmp9_, _tmp10_, _tmp11_); self->priv->unresolved_type_arguments = _tmp12_; _tmp13_ = g_direct_equal; _tmp14_ = vala_array_list_new (VALA_TYPE_INTERFACE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp13_); self->priv->ifaces_needing_object_prereq = _tmp14_; } static void vala_gir_parser_finalize (ValaCodeVisitor * obj) { ValaGirParser * self; self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_GIR_PARSER, ValaGirParser); _vala_markup_reader_unref0 (self->priv->reader); _vala_code_context_unref0 (self->priv->context); _vala_source_file_unref0 (self->priv->current_source_file); _vala_gir_parser_node_unref0 (self->priv->root); _vala_iterable_unref0 (self->priv->metadata_roots); self->priv->cheader_filenames = (_vala_array_free (self->priv->cheader_filenames, self->priv->cheader_filenames_length1, (GDestroyNotify) g_free), NULL); _vala_iterable_unref0 (self->priv->metadata_stack); _vala_gir_parser_metadata_unref0 (self->priv->metadata); _vala_iterable_unref0 (self->priv->tree_stack); _vala_gir_parser_node_unref0 (self->priv->current); _vala_gir_parser_node_unref0 (self->priv->old_current); _vala_iterable_unref0 (self->priv->provided_namespaces); _vala_map_unref0 (self->priv->unresolved_symbols_map); _vala_iterable_unref0 (self->priv->unresolved_gir_symbols); _vala_map_unref0 (self->priv->unresolved_type_arguments); _vala_iterable_unref0 (self->priv->ifaces_needing_object_prereq); VALA_CODE_VISITOR_CLASS (vala_gir_parser_parent_class)->finalize (obj); } /** * Code visitor parsing all GIR source files. * * Pipeline: * 1) Parse metadata * 2) Parse GIR with metadata, track unresolved GIR symbols, create Vala symbols * 3) Reconciliate the tree by mapping tracked symbols * 4) Process the tree */ static GType vala_gir_parser_get_type_once (void) { static const GTypeInfo g_define_type_info = { sizeof (ValaGirParserClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_parser_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirParser), 0, (GInstanceInitFunc) vala_gir_parser_instance_init, NULL }; GType vala_gir_parser_type_id; vala_gir_parser_type_id = g_type_register_static (VALA_TYPE_CODE_VISITOR, "ValaGirParser", &g_define_type_info, 0); ValaGirParser_private_offset = g_type_add_instance_private (vala_gir_parser_type_id, sizeof (ValaGirParserPrivate)); return vala_gir_parser_type_id; } GType vala_gir_parser_get_type (void) { static volatile gsize vala_gir_parser_type_id__volatile = 0; if (g_once_init_enter (&vala_gir_parser_type_id__volatile)) { GType vala_gir_parser_type_id; vala_gir_parser_type_id = vala_gir_parser_get_type_once (); g_once_init_leave (&vala_gir_parser_type_id__volatile, vala_gir_parser_type_id); } return vala_gir_parser_type_id__volatile; } static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) { if ((array != NULL) && (destroy_func != NULL)) { gint 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) { gint length; length = 0; if (array) { while (((gpointer*) array)[length]) { length++; } } return length; }