1 /* valagenieparser.c generated by valac, the Vala compiler
2  * generated from valagenieparser.vala, do not modify */
3 
4 /* valagenieparser.vala
5  *
6  * Copyright (C) 2008-2012  Jamie McCracken, Jürg Billeter
7  * Based on code by Jürg Billeter
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13 
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18 
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
22  *
23  * Author:
24  * 	Jamie McCracken jamiemcc gnome org
25  */
26 
27 #include "vala.h"
28 #include <glib-object.h>
29 #include <glib.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <valagee.h>
33 
34 #define VALA_GENIE_PARSER_TYPE_TOKEN_INFO (vala_genie_parser_token_info_get_type ())
35 typedef struct _ValaGenieParserTokenInfo ValaGenieParserTokenInfo;
36 typedef enum  {
37 	VALA_GENIE_PARSER_MODIFIER_FLAGS_NONE,
38 	VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT = 1 << 0,
39 	VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS = 1 << 1,
40 	VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN = 1 << 2,
41 	VALA_GENIE_PARSER_MODIFIER_FLAGS_INLINE = 1 << 3,
42 	VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW = 1 << 4,
43 	VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE = 1 << 5,
44 	VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC = 1 << 6,
45 	VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL = 1 << 7,
46 	VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE = 1 << 8,
47 	VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC = 1 << 9,
48 	VALA_GENIE_PARSER_MODIFIER_FLAGS_SEALED = 1 << 10,
49 	VALA_GENIE_PARSER_MODIFIER_FLAGS_PUBLIC = 1 << 11,
50 	VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED = 1 << 12
51 } ValaGenieParserModifierFlags;
52 
53 #define VALA_GENIE_PARSER_TYPE_MODIFIER_FLAGS (vala_genie_parser_modifier_flags_get_type ())
54 typedef enum  {
55 	VALA_GENIE_PARSER_RECOVERY_STATE_EOF,
56 	VALA_GENIE_PARSER_RECOVERY_STATE_DECLARATION_BEGIN,
57 	VALA_GENIE_PARSER_RECOVERY_STATE_STATEMENT_BEGIN
58 } ValaGenieParserRecoveryState;
59 
60 #define VALA_GENIE_PARSER_TYPE_RECOVERY_STATE (vala_genie_parser_recovery_state_get_type ())
61 #define _vala_genie_scanner_unref0(var) ((var == NULL) ? NULL : (var = (vala_genie_scanner_unref (var), NULL)))
62 #define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
63 #define _vala_comment_unref0(var) ((var == NULL) ? NULL : (var = (vala_comment_unref (var), NULL)))
64 #define _g_free0(var) (var = (g_free (var), NULL))
65 #define _vala_source_reference_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_reference_unref (var), NULL)))
66 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
67 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
68 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
69 #define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))
70 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
71 #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
72 #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; }
73 #define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
74 
75 struct _ValaGenieParserTokenInfo {
76 	ValaGenieTokenType type;
77 	ValaSourceLocation begin;
78 	ValaSourceLocation end;
79 };
80 
81 struct _ValaGenieParserPrivate {
82 	ValaGenieScanner* scanner;
83 	ValaCodeContext* context;
84 	ValaGenieParserTokenInfo* tokens;
85 	gint tokens_length1;
86 	gint _tokens_size_;
87 	gint index;
88 	gint size;
89 	ValaComment* comment;
90 	gchar* class_name;
91 	gboolean current_expr_is_lambda;
92 };
93 
94 static gint ValaGenieParser_private_offset;
95 static gpointer vala_genie_parser_parent_class = NULL;
96 static ValaList* vala_genie_parser__empty_type_parameter_list;
97 static ValaList* vala_genie_parser__empty_type_parameter_list = NULL;
98 
99 static GType vala_genie_parser_token_info_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
100 static ValaGenieParserTokenInfo* vala_genie_parser_token_info_dup (const ValaGenieParserTokenInfo* self);
101 static void vala_genie_parser_token_info_free (ValaGenieParserTokenInfo* self);
102 static GType vala_genie_parser_modifier_flags_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
103 static GType vala_genie_parser_recovery_state_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
104 #define VALA_GENIE_PARSER_BUFFER_SIZE 32
105 static void vala_genie_parser_real_visit_source_file (ValaCodeVisitor* base,
106                                                ValaSourceFile* source_file);
107 static inline gboolean vala_genie_parser_next (ValaGenieParser* self);
108 static inline void vala_genie_parser_prev (ValaGenieParser* self);
109 static inline ValaGenieTokenType vala_genie_parser_current (ValaGenieParser* self);
110 static inline gboolean vala_genie_parser_accept (ValaGenieParser* self,
111                                    ValaGenieTokenType type);
112 static inline gboolean vala_genie_parser_accept_separator (ValaGenieParser* self);
113 static inline gboolean vala_genie_parser_accept_terminator (ValaGenieParser* self);
114 static inline gboolean vala_genie_parser_accept_block (ValaGenieParser* self);
115 static void vala_genie_parser_report_parse_error (ValaGenieParser* self,
116                                            GError* e);
117 static inline void vala_genie_parser_get_location (ValaGenieParser* self,
118                                      ValaSourceLocation* result);
119 static ValaSourceReference* vala_genie_parser_get_src (ValaGenieParser* self,
120                                                 ValaSourceLocation* begin);
121 static inline gboolean vala_genie_parser_expect (ValaGenieParser* self,
122                                    ValaGenieTokenType type,
123                                    GError** error);
124 static inline gboolean vala_genie_parser_expect_separator (ValaGenieParser* self,
125                                              GError** error);
126 static inline gboolean vala_genie_parser_expect_terminator (ValaGenieParser* self,
127                                               GError** error);
128 static gchar* vala_genie_parser_get_current_string (ValaGenieParser* self);
129 static gchar* vala_genie_parser_get_last_string (ValaGenieParser* self);
130 static ValaSourceReference* vala_genie_parser_get_current_src (ValaGenieParser* self);
131 static void vala_genie_parser_rollback (ValaGenieParser* self,
132                                  ValaSourceLocation* location);
133 static inline ValaSymbolAccessibility vala_genie_parser_get_default_accessibility (ValaGenieParser* self,
134                                                                      const gchar* s);
135 static void vala_genie_parser_skip_identifier (ValaGenieParser* self,
136                                         GError** error);
137 static gchar* vala_genie_parser_parse_identifier (ValaGenieParser* self,
138                                            GError** error);
139 static ValaExpression* vala_genie_parser_parse_literal (ValaGenieParser* self,
140                                                  GError** error);
141 static void vala_genie_parser_parse_using_directives (ValaGenieParser* self,
142                                                ValaNamespace* ns,
143                                                GError** error);
144 static void vala_genie_parser_parse_declarations (ValaGenieParser* self,
145                                            ValaSymbol* parent,
146                                            gboolean root,
147                                            GError** error);
148 static void vala_genie_parser_skip_symbol_name (ValaGenieParser* self,
149                                          GError** error);
150 static ValaUnresolvedSymbol* vala_genie_parser_parse_symbol_name (ValaGenieParser* self,
151                                                            GError** error);
152 static void vala_genie_parser_skip_type (ValaGenieParser* self,
153                                   GError** error);
154 static void vala_genie_parser_skip_type_argument_list (ValaGenieParser* self,
155                                                 GError** error);
156 static ValaExpression* vala_genie_parser_parse_expression (ValaGenieParser* self,
157                                                     GError** error);
158 static ValaExpression* vala_genie_parser_parse_regex_literal (ValaGenieParser* self,
159                                                        GError** error);
160 static ValaDataType* vala_genie_parser_parse_type (ValaGenieParser* self,
161                                             gboolean owned_by_default,
162                                             gboolean can_weak_ref,
163                                             GError** error);
164 static ValaList* vala_genie_parser_parse_type_argument_list (ValaGenieParser* self,
165                                                       gboolean maybe_expression,
166                                                       GError** error);
167 static ValaDataType* vala_genie_parser_parse_inline_array_type (ValaGenieParser* self,
168                                                          ValaDataType* type,
169                                                          GError** error);
170 static ValaList* vala_genie_parser_parse_argument_list (ValaGenieParser* self,
171                                                  GError** error);
172 static ValaExpression* vala_genie_parser_parse_argument (ValaGenieParser* self,
173                                                   GError** error);
174 static ValaExpression* vala_genie_parser_parse_primary_expression (ValaGenieParser* self,
175                                                             GError** error);
176 static ValaExpression* vala_genie_parser_parse_assert_expression (ValaGenieParser* self,
177                                                            GError** error);
178 static ValaInitializerList* vala_genie_parser_parse_initializer (ValaGenieParser* self,
179                                                           GError** error);
180 static ValaExpression* vala_genie_parser_parse_tuple (ValaGenieParser* self,
181                                                GError** error);
182 static ValaExpression* vala_genie_parser_parse_template (ValaGenieParser* self,
183                                                   GError** error);
184 static ValaExpression* vala_genie_parser_parse_this_access (ValaGenieParser* self,
185                                                      GError** error);
186 static ValaExpression* vala_genie_parser_parse_base_access (ValaGenieParser* self,
187                                                      GError** error);
188 static ValaExpression* vala_genie_parser_parse_object_or_array_creation_expression (ValaGenieParser* self,
189                                                                              GError** error);
190 static ValaExpression* vala_genie_parser_parse_print_expression (ValaGenieParser* self,
191                                                           GError** error);
192 static ValaExpression* vala_genie_parser_parse_sizeof_expression (ValaGenieParser* self,
193                                                            GError** error);
194 static ValaExpression* vala_genie_parser_parse_typeof_expression (ValaGenieParser* self,
195                                                            GError** error);
196 static ValaExpression* vala_genie_parser_parse_yield_expression (ValaGenieParser* self,
197                                                           GError** error);
198 static ValaExpression* vala_genie_parser_parse_simple_name (ValaGenieParser* self,
199                                                      GError** error);
200 static ValaExpression* vala_genie_parser_parse_member_access (ValaGenieParser* self,
201                                                        ValaSourceLocation* begin,
202                                                        ValaExpression* inner,
203                                                        GError** error);
204 static ValaExpression* vala_genie_parser_parse_pointer_member_access (ValaGenieParser* self,
205                                                                ValaSourceLocation* begin,
206                                                                ValaExpression* inner,
207                                                                GError** error);
208 static ValaExpression* vala_genie_parser_parse_method_call (ValaGenieParser* self,
209                                                      ValaSourceLocation* begin,
210                                                      ValaExpression* inner,
211                                                      GError** error);
212 static ValaExpression* vala_genie_parser_parse_element_access (ValaGenieParser* self,
213                                                         ValaSourceLocation* begin,
214                                                         ValaExpression* inner,
215                                                         GError** error);
216 static ValaExpression* vala_genie_parser_parse_post_increment_expression (ValaGenieParser* self,
217                                                                    ValaSourceLocation* begin,
218                                                                    ValaExpression* inner,
219                                                                    GError** error);
220 static ValaExpression* vala_genie_parser_parse_post_decrement_expression (ValaGenieParser* self,
221                                                                    ValaSourceLocation* begin,
222                                                                    ValaExpression* inner,
223                                                                    GError** error);
224 static ValaList* vala_genie_parser_parse_print_argument_list (ValaGenieParser* self,
225                                                        GError** error);
226 static ValaList* vala_genie_parser_parse_object_initializer (ValaGenieParser* self,
227                                                       GError** error);
228 static ValaList* vala_genie_parser_parse_expression_list (ValaGenieParser* self,
229                                                    GError** error);
230 static ValaExpression* vala_genie_parser_parse_array_creation_expression (ValaGenieParser* self,
231                                                                    ValaSourceLocation* begin,
232                                                                    ValaDataType* element_type,
233                                                                    GError** error);
234 static ValaExpression* vala_genie_parser_parse_list_creation_expression (ValaGenieParser* self,
235                                                                   ValaSourceLocation* begin,
236                                                                   ValaDataType* element_type,
237                                                                   GError** error);
238 static ValaExpression* vala_genie_parser_parse_dict_creation_expression (ValaGenieParser* self,
239                                                                   ValaSourceLocation* begin,
240                                                                   ValaDataType* key_type,
241                                                                   ValaDataType* value_type,
242                                                                   GError** error);
243 static ValaMemberAccess* vala_genie_parser_parse_member_name (ValaGenieParser* self,
244                                                        ValaExpression* base_expr,
245                                                        GError** error);
246 static ValaExpression* vala_genie_parser_parse_object_creation_expression (ValaGenieParser* self,
247                                                                     ValaSourceLocation* begin,
248                                                                     ValaMemberAccess* member,
249                                                                     GError** error);
250 static ValaMemberInitializer* vala_genie_parser_parse_member_initializer (ValaGenieParser* self,
251                                                                    GError** error);
252 static ValaUnaryOperator vala_genie_parser_get_unary_operator (ValaGenieParser* self,
253                                                         ValaGenieTokenType token_type);
254 static ValaExpression* vala_genie_parser_parse_unary_expression (ValaGenieParser* self,
255                                                           GError** error);
256 static ValaBinaryOperator vala_genie_parser_get_binary_operator (ValaGenieParser* self,
257                                                           ValaGenieTokenType token_type);
258 static ValaExpression* vala_genie_parser_parse_multiplicative_expression (ValaGenieParser* self,
259                                                                    GError** error);
260 static ValaExpression* vala_genie_parser_parse_additive_expression (ValaGenieParser* self,
261                                                              GError** error);
262 static ValaExpression* vala_genie_parser_parse_shift_expression (ValaGenieParser* self,
263                                                           GError** error);
264 static ValaExpression* vala_genie_parser_parse_relational_expression (ValaGenieParser* self,
265                                                                GError** error);
266 static ValaExpression* vala_genie_parser_parse_equality_expression (ValaGenieParser* self,
267                                                              GError** error);
268 static ValaExpression* vala_genie_parser_parse_and_expression (ValaGenieParser* self,
269                                                         GError** error);
270 static ValaExpression* vala_genie_parser_parse_exclusive_or_expression (ValaGenieParser* self,
271                                                                  GError** error);
272 static ValaExpression* vala_genie_parser_parse_inclusive_or_expression (ValaGenieParser* self,
273                                                                  GError** error);
274 static ValaExpression* vala_genie_parser_parse_in_expression (ValaGenieParser* self,
275                                                        GError** error);
276 static ValaExpression* vala_genie_parser_parse_conditional_and_expression (ValaGenieParser* self,
277                                                                     GError** error);
278 static ValaExpression* vala_genie_parser_parse_conditional_or_expression (ValaGenieParser* self,
279                                                                    GError** error);
280 static ValaExpression* vala_genie_parser_parse_conditional_expression (ValaGenieParser* self,
281                                                                 GError** error);
282 static ValaParameter* vala_genie_parser_parse_lambda_parameter (ValaGenieParser* self,
283                                                          GError** error);
284 static ValaExpression* vala_genie_parser_parse_lambda_expression (ValaGenieParser* self,
285                                                            GError** error);
286 static ValaBlock* vala_genie_parser_parse_block (ValaGenieParser* self,
287                                           GError** error);
288 static ValaAssignmentOperator vala_genie_parser_get_assignment_operator (ValaGenieParser* self,
289                                                                   ValaGenieTokenType token_type);
290 static ValaExpression* vala_genie_parser_parse_expression_with_terminator (ValaGenieParser* self,
291                                                                     GError** error);
292 static ValaStatement* vala_genie_parser_get_for_statement_type (ValaGenieParser* self,
293                                                          GError** error);
294 static ValaStatement* vala_genie_parser_parse_foreach_statement (ValaGenieParser* self,
295                                                           GError** error);
296 static ValaStatement* vala_genie_parser_parse_for_statement (ValaGenieParser* self,
297                                                       GError** error);
298 static void vala_genie_parser_parse_statements (ValaGenieParser* self,
299                                          ValaBlock* block,
300                                          GError** error);
301 static ValaStatement* vala_genie_parser_parse_empty_statement (ValaGenieParser* self,
302                                                         GError** error);
303 static ValaStatement* vala_genie_parser_parse_expression_statement (ValaGenieParser* self,
304                                                              GError** error);
305 static ValaStatement* vala_genie_parser_parse_if_statement (ValaGenieParser* self,
306                                                      GError** error);
307 static ValaStatement* vala_genie_parser_parse_switch_statement (ValaGenieParser* self,
308                                                          GError** error);
309 static ValaStatement* vala_genie_parser_parse_while_statement (ValaGenieParser* self,
310                                                         GError** error);
311 static ValaStatement* vala_genie_parser_parse_do_statement (ValaGenieParser* self,
312                                                      GError** error);
313 static ValaStatement* vala_genie_parser_parse_break_statement (ValaGenieParser* self,
314                                                         GError** error);
315 static ValaStatement* vala_genie_parser_parse_continue_statement (ValaGenieParser* self,
316                                                            GError** error);
317 static ValaStatement* vala_genie_parser_parse_return_statement (ValaGenieParser* self,
318                                                          GError** error);
319 static ValaStatement* vala_genie_parser_parse_throw_statement (ValaGenieParser* self,
320                                                         GError** error);
321 static ValaStatement* vala_genie_parser_parse_try_statement (ValaGenieParser* self,
322                                                       GError** error);
323 static ValaStatement* vala_genie_parser_parse_lock_statement (ValaGenieParser* self,
324                                                        GError** error);
325 static ValaStatement* vala_genie_parser_parse_delete_statement (ValaGenieParser* self,
326                                                          GError** error);
327 static void vala_genie_parser_parse_type_inference_declaration (ValaGenieParser* self,
328                                                          ValaBlock* block,
329                                                          GError** error);
330 static ValaStatement* vala_genie_parser_parse_yield_statement (ValaGenieParser* self,
331                                                         GError** error);
332 static gboolean vala_genie_parser_is_expression (ValaGenieParser* self,
333                                           GError** error);
334 static void vala_genie_parser_parse_local_variable_declarations (ValaGenieParser* self,
335                                                           ValaBlock* block,
336                                                           GError** error);
337 static ValaGenieParserRecoveryState vala_genie_parser_recover (ValaGenieParser* self);
338 static ValaBlock* vala_genie_parser_parse_embedded_statement (ValaGenieParser* self,
339                                                        GError** error);
340 static ValaStatement* vala_genie_parser_parse_embedded_statement_without_block (ValaGenieParser* self,
341                                                                          GError** error);
342 static ValaLocalVariable* vala_genie_parser_parse_local_variable (ValaGenieParser* self,
343                                                            ValaDataType* variable_type,
344                                                            const gchar* id,
345                                                            gboolean expect_terminator,
346                                                            GError** error);
347 static ValaExpression* vala_genie_parser_parse_statement_expression (ValaGenieParser* self,
348                                                               GError** error);
349 static void vala_genie_parser_parse_catch_clauses (ValaGenieParser* self,
350                                             ValaList* catch_clauses,
351                                             GError** error);
352 static ValaBlock* vala_genie_parser_parse_finally_clause (ValaGenieParser* self,
353                                                    GError** error);
354 static gchar* vala_genie_parser_parse_attribute_value (ValaGenieParser* self,
355                                                 GError** error);
356 static ValaList* vala_genie_parser_parse_attributes (ValaGenieParser* self,
357                                               gboolean parameter,
358                                               GError** error);
359 static void vala_genie_parser_set_attributes (ValaGenieParser* self,
360                                        ValaCodeNode* node,
361                                        ValaList* attributes);
362 static ValaSymbol* vala_genie_parser_parse_declaration (ValaGenieParser* self,
363                                                  gboolean is_root,
364                                                  GError** error);
365 static ValaConstant* vala_genie_parser_parse_constant_declaration (ValaGenieParser* self,
366                                                             ValaList* attrs,
367                                                             GError** error);
368 static ValaCreationMethod* vala_genie_parser_parse_creation_method_declaration (ValaGenieParser* self,
369                                                                          ValaList* attrs,
370                                                                          GError** error);
371 static ValaSymbol* vala_genie_parser_parse_class_declaration (ValaGenieParser* self,
372                                                        ValaList* attrs,
373                                                        GError** error);
374 static ValaMethod* vala_genie_parser_parse_main_method_declaration (ValaGenieParser* self,
375                                                              ValaList* attrs,
376                                                              GError** error);
377 static ValaConstructor* vala_genie_parser_parse_constructor_declaration (ValaGenieParser* self,
378                                                                   ValaList* attrs,
379                                                                   GError** error);
380 static ValaSymbol* vala_genie_parser_parse_delegate_declaration (ValaGenieParser* self,
381                                                           ValaList* attrs,
382                                                           GError** error);
383 static ValaMethod* vala_genie_parser_parse_method_declaration (ValaGenieParser* self,
384                                                         ValaList* attrs,
385                                                         GError** error);
386 static ValaSymbol* vala_genie_parser_parse_enum_declaration (ValaGenieParser* self,
387                                                       ValaList* attrs,
388                                                       GError** error);
389 static ValaSymbol* vala_genie_parser_parse_errordomain_declaration (ValaGenieParser* self,
390                                                              ValaList* attrs,
391                                                              GError** error);
392 static ValaDestructor* vala_genie_parser_parse_destructor_declaration (ValaGenieParser* self,
393                                                                 ValaList* attrs,
394                                                                 GError** error);
395 static ValaSymbol* vala_genie_parser_parse_interface_declaration (ValaGenieParser* self,
396                                                            ValaList* attrs,
397                                                            GError** error);
398 static ValaNamespace* vala_genie_parser_parse_namespace_declaration (ValaGenieParser* self,
399                                                               ValaList* attrs,
400                                                               GError** error);
401 static ValaProperty* vala_genie_parser_parse_property_declaration (ValaGenieParser* self,
402                                                             ValaList* attrs,
403                                                             GError** error);
404 static ValaSignal* vala_genie_parser_parse_signal_declaration (ValaGenieParser* self,
405                                                         ValaList* attrs,
406                                                         GError** error);
407 static ValaSymbol* vala_genie_parser_parse_struct_declaration (ValaGenieParser* self,
408                                                         ValaList* attrs,
409                                                         GError** error);
410 static ValaField* vala_genie_parser_parse_field_declaration (ValaGenieParser* self,
411                                                       ValaList* attrs,
412                                                       GError** error);
413 static void vala_genie_parser_parse_namespace_member (ValaGenieParser* self,
414                                                ValaNamespace* ns,
415                                                GError** error);
416 static void vala_genie_parser_parse_class_member (ValaGenieParser* self,
417                                            ValaClass* cl,
418                                            GError** error);
419 static void vala_genie_parser_parse_struct_member (ValaGenieParser* self,
420                                             ValaStruct* st,
421                                             GError** error);
422 static void vala_genie_parser_parse_interface_member (ValaGenieParser* self,
423                                                ValaInterface* iface,
424                                                GError** error);
425 static void vala_genie_parser_add_uses_clause (ValaGenieParser* self,
426                                         ValaNamespace* ns,
427                                         GError** error);
428 static ValaGenieParserModifierFlags vala_genie_parser_parse_type_declaration_modifiers (ValaGenieParser* self);
429 static ValaList* vala_genie_parser_parse_type_parameter_list (ValaGenieParser* self,
430                                                        GError** error);
431 static ValaGenieParserModifierFlags vala_genie_parser_parse_member_declaration_modifiers (ValaGenieParser* self);
432 static ValaParameter* vala_genie_parser_parse_parameter (ValaGenieParser* self,
433                                                   GError** error);
434 static void vala_genie_parser_finalize (ValaCodeVisitor * obj);
435 static GType vala_genie_parser_get_type_once (void);
436 
437 static inline gpointer
vala_genie_parser_get_instance_private(ValaGenieParser * self)438 vala_genie_parser_get_instance_private (ValaGenieParser* self)
439 {
440 	return G_STRUCT_MEMBER_P (self, ValaGenieParser_private_offset);
441 }
442 
443 static GType
vala_genie_parser_modifier_flags_get_type_once(void)444 vala_genie_parser_modifier_flags_get_type_once (void)
445 {
446 	static const GEnumValue values[] = {{VALA_GENIE_PARSER_MODIFIER_FLAGS_NONE, "VALA_GENIE_PARSER_MODIFIER_FLAGS_NONE", "none"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT, "VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT", "abstract"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS, "VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS", "class"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN, "VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN", "extern"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_INLINE, "VALA_GENIE_PARSER_MODIFIER_FLAGS_INLINE", "inline"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW, "VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW", "new"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE, "VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE", "override"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC, "VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC", "static"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL, "VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL", "virtual"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE, "VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE", "private"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC, "VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC", "async"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_SEALED, "VALA_GENIE_PARSER_MODIFIER_FLAGS_SEALED", "sealed"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_PUBLIC, "VALA_GENIE_PARSER_MODIFIER_FLAGS_PUBLIC", "public"}, {VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED, "VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED", "protected"}, {0, NULL, NULL}};
447 	GType vala_genie_parser_modifier_flags_type_id;
448 	vala_genie_parser_modifier_flags_type_id = g_enum_register_static ("ValaGenieParserModifierFlags", values);
449 	return vala_genie_parser_modifier_flags_type_id;
450 }
451 
452 static GType
vala_genie_parser_modifier_flags_get_type(void)453 vala_genie_parser_modifier_flags_get_type (void)
454 {
455 	static volatile gsize vala_genie_parser_modifier_flags_type_id__volatile = 0;
456 	if (g_once_init_enter (&vala_genie_parser_modifier_flags_type_id__volatile)) {
457 		GType vala_genie_parser_modifier_flags_type_id;
458 		vala_genie_parser_modifier_flags_type_id = vala_genie_parser_modifier_flags_get_type_once ();
459 		g_once_init_leave (&vala_genie_parser_modifier_flags_type_id__volatile, vala_genie_parser_modifier_flags_type_id);
460 	}
461 	return vala_genie_parser_modifier_flags_type_id__volatile;
462 }
463 
464 static GType
vala_genie_parser_recovery_state_get_type_once(void)465 vala_genie_parser_recovery_state_get_type_once (void)
466 {
467 	static const GEnumValue values[] = {{VALA_GENIE_PARSER_RECOVERY_STATE_EOF, "VALA_GENIE_PARSER_RECOVERY_STATE_EOF", "eof"}, {VALA_GENIE_PARSER_RECOVERY_STATE_DECLARATION_BEGIN, "VALA_GENIE_PARSER_RECOVERY_STATE_DECLARATION_BEGIN", "declaration-begin"}, {VALA_GENIE_PARSER_RECOVERY_STATE_STATEMENT_BEGIN, "VALA_GENIE_PARSER_RECOVERY_STATE_STATEMENT_BEGIN", "statement-begin"}, {0, NULL, NULL}};
468 	GType vala_genie_parser_recovery_state_type_id;
469 	vala_genie_parser_recovery_state_type_id = g_enum_register_static ("ValaGenieParserRecoveryState", values);
470 	return vala_genie_parser_recovery_state_type_id;
471 }
472 
473 static GType
vala_genie_parser_recovery_state_get_type(void)474 vala_genie_parser_recovery_state_get_type (void)
475 {
476 	static volatile gsize vala_genie_parser_recovery_state_type_id__volatile = 0;
477 	if (g_once_init_enter (&vala_genie_parser_recovery_state_type_id__volatile)) {
478 		GType vala_genie_parser_recovery_state_type_id;
479 		vala_genie_parser_recovery_state_type_id = vala_genie_parser_recovery_state_get_type_once ();
480 		g_once_init_leave (&vala_genie_parser_recovery_state_type_id__volatile, vala_genie_parser_recovery_state_type_id);
481 	}
482 	return vala_genie_parser_recovery_state_type_id__volatile;
483 }
484 
485 ValaGenieParser*
vala_genie_parser_construct(GType object_type)486 vala_genie_parser_construct (GType object_type)
487 {
488 	ValaGenieParser* self = NULL;
489 	ValaGenieParserTokenInfo* _tmp0_;
490 	self = (ValaGenieParser*) vala_code_visitor_construct (object_type);
491 	_tmp0_ = g_new0 (ValaGenieParserTokenInfo, VALA_GENIE_PARSER_BUFFER_SIZE);
492 	self->priv->tokens = (g_free (self->priv->tokens), NULL);
493 	self->priv->tokens = _tmp0_;
494 	self->priv->tokens_length1 = VALA_GENIE_PARSER_BUFFER_SIZE;
495 	self->priv->_tokens_size_ = self->priv->tokens_length1;
496 	_g_free0 (self->priv->class_name);
497 	self->priv->class_name = NULL;
498 	self->priv->current_expr_is_lambda = FALSE;
499 	return self;
500 }
501 
502 ValaGenieParser*
vala_genie_parser_new(void)503 vala_genie_parser_new (void)
504 {
505 	return vala_genie_parser_construct (VALA_GENIE_TYPE_PARSER);
506 }
507 
508 /**
509  * Parses all .gs source files in the specified code context and
510  * builds a code tree.
511  *
512  * @param context a code context
513  */
514 static gpointer
_vala_code_context_ref0(gpointer self)515 _vala_code_context_ref0 (gpointer self)
516 {
517 	return self ? vala_code_context_ref (self) : NULL;
518 }
519 
520 void
vala_genie_parser_parse(ValaGenieParser * self,ValaCodeContext * context)521 vala_genie_parser_parse (ValaGenieParser* self,
522                          ValaCodeContext* context)
523 {
524 	ValaCodeContext* _tmp0_;
525 	g_return_if_fail (self != NULL);
526 	g_return_if_fail (context != NULL);
527 	_tmp0_ = _vala_code_context_ref0 (context);
528 	_vala_code_context_unref0 (self->priv->context);
529 	self->priv->context = _tmp0_;
530 	vala_code_context_accept (context, (ValaCodeVisitor*) self);
531 	_vala_code_context_unref0 (self->priv->context);
532 	self->priv->context = NULL;
533 }
534 
535 static void
vala_genie_parser_real_visit_source_file(ValaCodeVisitor * base,ValaSourceFile * source_file)536 vala_genie_parser_real_visit_source_file (ValaCodeVisitor* base,
537                                           ValaSourceFile* source_file)
538 {
539 	ValaGenieParser * self;
540 	const gchar* _tmp0_;
541 	const gchar* _tmp1_;
542 	self = (ValaGenieParser*) base;
543 	g_return_if_fail (source_file != NULL);
544 	_tmp0_ = vala_source_file_get_filename (source_file);
545 	_tmp1_ = _tmp0_;
546 	if (g_str_has_suffix (_tmp1_, ".gs")) {
547 		vala_genie_parser_parse_file (self, source_file);
548 	}
549 }
550 
551 static inline gboolean
vala_genie_parser_next(ValaGenieParser * self)552 vala_genie_parser_next (ValaGenieParser* self)
553 {
554 	gint _tmp0_;
555 	ValaGenieParserTokenInfo* _tmp10_;
556 	gint _tmp10__length1;
557 	ValaGenieParserTokenInfo _tmp11_;
558 	ValaGenieTokenType _tmp12_;
559 	gboolean result = FALSE;
560 	g_return_val_if_fail (self != NULL, FALSE);
561 	self->priv->index = (self->priv->index + 1) % VALA_GENIE_PARSER_BUFFER_SIZE;
562 	_tmp0_ = self->priv->size;
563 	self->priv->size = _tmp0_ - 1;
564 	if (self->priv->size <= 0) {
565 		ValaSourceLocation begin = {0};
566 		ValaSourceLocation end = {0};
567 		ValaGenieTokenType type = 0;
568 		ValaGenieScanner* _tmp1_;
569 		ValaSourceLocation _tmp2_ = {0};
570 		ValaSourceLocation _tmp3_ = {0};
571 		ValaGenieTokenType _tmp4_;
572 		ValaGenieParserTokenInfo* _tmp5_;
573 		gint _tmp5__length1;
574 		ValaGenieTokenType _tmp6_;
575 		ValaSourceLocation _tmp7_;
576 		ValaSourceLocation _tmp8_;
577 		ValaGenieParserTokenInfo _tmp9_ = {0};
578 		_tmp1_ = self->priv->scanner;
579 		_tmp4_ = vala_genie_scanner_read_token (_tmp1_, &_tmp2_, &_tmp3_);
580 		begin = _tmp2_;
581 		end = _tmp3_;
582 		type = _tmp4_;
583 		_tmp5_ = self->priv->tokens;
584 		_tmp5__length1 = self->priv->tokens_length1;
585 		_tmp6_ = type;
586 		_tmp7_ = begin;
587 		_tmp8_ = end;
588 		_tmp9_.type = _tmp6_;
589 		_tmp9_.begin = _tmp7_;
590 		_tmp9_.end = _tmp8_;
591 		_tmp5_[self->priv->index] = _tmp9_;
592 		self->priv->size = 1;
593 	}
594 	_tmp10_ = self->priv->tokens;
595 	_tmp10__length1 = self->priv->tokens_length1;
596 	_tmp11_ = _tmp10_[self->priv->index];
597 	_tmp12_ = _tmp11_.type;
598 	result = _tmp12_ != VALA_GENIE_TOKEN_TYPE_EOF;
599 	return result;
600 }
601 
602 static inline void
vala_genie_parser_prev(ValaGenieParser * self)603 vala_genie_parser_prev (ValaGenieParser* self)
604 {
605 	gint _tmp0_;
606 	g_return_if_fail (self != NULL);
607 	self->priv->index = ((self->priv->index - 1) + VALA_GENIE_PARSER_BUFFER_SIZE) % VALA_GENIE_PARSER_BUFFER_SIZE;
608 	_tmp0_ = self->priv->size;
609 	self->priv->size = _tmp0_ + 1;
610 	_vala_assert (self->priv->size <= VALA_GENIE_PARSER_BUFFER_SIZE, "size <= BUFFER_SIZE");
611 }
612 
613 static inline ValaGenieTokenType
vala_genie_parser_current(ValaGenieParser * self)614 vala_genie_parser_current (ValaGenieParser* self)
615 {
616 	ValaGenieParserTokenInfo* _tmp0_;
617 	gint _tmp0__length1;
618 	ValaGenieParserTokenInfo _tmp1_;
619 	ValaGenieTokenType _tmp2_;
620 	ValaGenieTokenType result = 0;
621 	g_return_val_if_fail (self != NULL, 0);
622 	_tmp0_ = self->priv->tokens;
623 	_tmp0__length1 = self->priv->tokens_length1;
624 	_tmp1_ = _tmp0_[self->priv->index];
625 	_tmp2_ = _tmp1_.type;
626 	result = _tmp2_;
627 	return result;
628 }
629 
630 static inline gboolean
vala_genie_parser_accept(ValaGenieParser * self,ValaGenieTokenType type)631 vala_genie_parser_accept (ValaGenieParser* self,
632                           ValaGenieTokenType type)
633 {
634 	gboolean result = FALSE;
635 	g_return_val_if_fail (self != NULL, FALSE);
636 	if (vala_genie_parser_current (self) == type) {
637 		vala_genie_parser_next (self);
638 		result = TRUE;
639 		return result;
640 	}
641 	result = FALSE;
642 	return result;
643 }
644 
645 static inline gboolean
vala_genie_parser_accept_separator(ValaGenieParser * self)646 vala_genie_parser_accept_separator (ValaGenieParser* self)
647 {
648 	gboolean _tmp0_ = FALSE;
649 	gboolean result = FALSE;
650 	g_return_val_if_fail (self != NULL, FALSE);
651 	if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_COMMA) {
652 		_tmp0_ = TRUE;
653 	} else {
654 		_tmp0_ = vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_EOL;
655 	}
656 	if (_tmp0_) {
657 		vala_genie_parser_next (self);
658 		result = TRUE;
659 		return result;
660 	}
661 	result = FALSE;
662 	return result;
663 }
664 
665 static inline gboolean
vala_genie_parser_accept_terminator(ValaGenieParser * self)666 vala_genie_parser_accept_terminator (ValaGenieParser* self)
667 {
668 	gboolean _tmp0_ = FALSE;
669 	gboolean result = FALSE;
670 	g_return_val_if_fail (self != NULL, FALSE);
671 	if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_SEMICOLON) {
672 		_tmp0_ = TRUE;
673 	} else {
674 		_tmp0_ = vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_EOL;
675 	}
676 	if (_tmp0_) {
677 		vala_genie_parser_next (self);
678 		result = TRUE;
679 		return result;
680 	}
681 	result = FALSE;
682 	return result;
683 }
684 
685 static inline gboolean
vala_genie_parser_accept_block(ValaGenieParser * self)686 vala_genie_parser_accept_block (ValaGenieParser* self)
687 {
688 	gboolean has_term = FALSE;
689 	gboolean result = FALSE;
690 	g_return_val_if_fail (self != NULL, FALSE);
691 	has_term = vala_genie_parser_accept_terminator (self);
692 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INDENT)) {
693 		vala_genie_parser_prev (self);
694 		result = TRUE;
695 		return result;
696 	}
697 	if (has_term) {
698 		vala_genie_parser_prev (self);
699 	}
700 	result = FALSE;
701 	return result;
702 }
703 
704 static void
vala_genie_parser_report_parse_error(ValaGenieParser * self,GError * e)705 vala_genie_parser_report_parse_error (ValaGenieParser* self,
706                                       GError* e)
707 {
708 	ValaSourceLocation begin = {0};
709 	ValaSourceLocation _tmp0_ = {0};
710 	ValaSourceLocation _tmp1_;
711 	ValaSourceReference* _tmp2_;
712 	ValaSourceReference* _tmp3_;
713 	const gchar* _tmp4_;
714 	gchar* _tmp5_;
715 	gchar* _tmp6_;
716 	g_return_if_fail (self != NULL);
717 	vala_genie_parser_get_location (self, &_tmp0_);
718 	begin = _tmp0_;
719 	vala_genie_parser_next (self);
720 	_tmp1_ = begin;
721 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
722 	_tmp3_ = _tmp2_;
723 	_tmp4_ = e->message;
724 	_tmp5_ = g_strconcat ("syntax error, ", _tmp4_, NULL);
725 	_tmp6_ = _tmp5_;
726 	vala_report_error (_tmp3_, _tmp6_);
727 	_g_free0 (_tmp6_);
728 	_vala_source_reference_unref0 (_tmp3_);
729 }
730 
731 static inline gboolean
vala_genie_parser_expect(ValaGenieParser * self,ValaGenieTokenType type,GError ** error)732 vala_genie_parser_expect (ValaGenieParser* self,
733                           ValaGenieTokenType type,
734                           GError** error)
735 {
736 	ValaGenieTokenType cur = 0;
737 	ValaGenieTokenType pre = 0;
738 	ValaGenieParserTokenInfo* _tmp0_;
739 	gint _tmp0__length1;
740 	ValaGenieParserTokenInfo _tmp1_;
741 	ValaGenieTokenType _tmp2_;
742 	const gchar* _tmp3_;
743 	ValaGenieTokenType _tmp4_;
744 	const gchar* _tmp5_;
745 	ValaGenieTokenType _tmp6_;
746 	const gchar* _tmp7_;
747 	GError* _tmp8_;
748 	GError* _inner_error0_ = NULL;
749 	gboolean result = FALSE;
750 	g_return_val_if_fail (self != NULL, FALSE);
751 	if (vala_genie_parser_accept (self, type)) {
752 		result = TRUE;
753 		return result;
754 	}
755 	cur = vala_genie_parser_current (self);
756 	_tmp0_ = self->priv->tokens;
757 	_tmp0__length1 = self->priv->tokens_length1;
758 	_tmp1_ = _tmp0_[self->priv->index - 1];
759 	_tmp2_ = _tmp1_.type;
760 	pre = _tmp2_;
761 	_tmp3_ = vala_genie_token_type_to_string (type);
762 	_tmp4_ = cur;
763 	_tmp5_ = vala_genie_token_type_to_string (_tmp4_);
764 	_tmp6_ = pre;
765 	_tmp7_ = vala_genie_token_type_to_string (_tmp6_);
766 	_tmp8_ = g_error_new (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected %s but got %s with previous %s", _tmp3_, _tmp5_, _tmp7_);
767 	_inner_error0_ = _tmp8_;
768 	if (_inner_error0_->domain == VALA_PARSE_ERROR) {
769 		gboolean _tmp9_ = FALSE;
770 		g_propagate_error (error, _inner_error0_);
771 		return _tmp9_;
772 	} else {
773 		gboolean _tmp10_ = FALSE;
774 		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);
775 		g_clear_error (&_inner_error0_);
776 		return _tmp10_;
777 	}
778 }
779 
780 static inline gboolean
vala_genie_parser_expect_separator(ValaGenieParser * self,GError ** error)781 vala_genie_parser_expect_separator (ValaGenieParser* self,
782                                     GError** error)
783 {
784 	ValaGenieTokenType cur = 0;
785 	ValaGenieTokenType _tmp0_;
786 	const gchar* _tmp1_;
787 	GError* _tmp2_;
788 	GError* _inner_error0_ = NULL;
789 	gboolean result = FALSE;
790 	g_return_val_if_fail (self != NULL, FALSE);
791 	if (vala_genie_parser_accept_separator (self)) {
792 		result = TRUE;
793 		return result;
794 	}
795 	cur = vala_genie_parser_current (self);
796 	_tmp0_ = cur;
797 	_tmp1_ = vala_genie_token_type_to_string (_tmp0_);
798 	_tmp2_ = g_error_new (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected line end or comma but got %s", _tmp1_);
799 	_inner_error0_ = _tmp2_;
800 	if (_inner_error0_->domain == VALA_PARSE_ERROR) {
801 		gboolean _tmp3_ = FALSE;
802 		g_propagate_error (error, _inner_error0_);
803 		return _tmp3_;
804 	} else {
805 		gboolean _tmp4_ = FALSE;
806 		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);
807 		g_clear_error (&_inner_error0_);
808 		return _tmp4_;
809 	}
810 }
811 
812 static inline gboolean
vala_genie_parser_expect_terminator(ValaGenieParser * self,GError ** error)813 vala_genie_parser_expect_terminator (ValaGenieParser* self,
814                                      GError** error)
815 {
816 	ValaGenieTokenType cur = 0;
817 	ValaGenieTokenType _tmp0_;
818 	const gchar* _tmp1_;
819 	GError* _tmp2_;
820 	GError* _inner_error0_ = NULL;
821 	gboolean result = FALSE;
822 	g_return_val_if_fail (self != NULL, FALSE);
823 	if (vala_genie_parser_accept_terminator (self)) {
824 		result = TRUE;
825 		return result;
826 	}
827 	cur = vala_genie_parser_current (self);
828 	_tmp0_ = cur;
829 	_tmp1_ = vala_genie_token_type_to_string (_tmp0_);
830 	_tmp2_ = g_error_new (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected line end or semicolon but got %s", _tmp1_);
831 	_inner_error0_ = _tmp2_;
832 	if (_inner_error0_->domain == VALA_PARSE_ERROR) {
833 		gboolean _tmp3_ = FALSE;
834 		g_propagate_error (error, _inner_error0_);
835 		return _tmp3_;
836 	} else {
837 		gboolean _tmp4_ = FALSE;
838 		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);
839 		g_clear_error (&_inner_error0_);
840 		return _tmp4_;
841 	}
842 }
843 
844 static inline void
vala_genie_parser_get_location(ValaGenieParser * self,ValaSourceLocation * result)845 vala_genie_parser_get_location (ValaGenieParser* self,
846                                 ValaSourceLocation* result)
847 {
848 	ValaGenieParserTokenInfo* _tmp0_;
849 	gint _tmp0__length1;
850 	ValaGenieParserTokenInfo _tmp1_;
851 	ValaSourceLocation _tmp2_;
852 	g_return_if_fail (self != NULL);
853 	_tmp0_ = self->priv->tokens;
854 	_tmp0__length1 = self->priv->tokens_length1;
855 	_tmp1_ = _tmp0_[self->priv->index];
856 	_tmp2_ = _tmp1_.begin;
857 	*result = _tmp2_;
858 	return;
859 }
860 
861 static glong
string_strnlen(gchar * str,glong maxlen)862 string_strnlen (gchar* str,
863                 glong maxlen)
864 {
865 	gchar* end = NULL;
866 	gchar* _tmp0_;
867 	gchar* _tmp1_;
868 	glong result = 0L;
869 	_tmp0_ = memchr (str, 0, (gsize) maxlen);
870 	end = _tmp0_;
871 	_tmp1_ = end;
872 	if (_tmp1_ == NULL) {
873 		result = maxlen;
874 		return result;
875 	} else {
876 		gchar* _tmp2_;
877 		_tmp2_ = end;
878 		result = (glong) (_tmp2_ - str);
879 		return result;
880 	}
881 }
882 
883 static gchar*
string_substring(const gchar * self,glong offset,glong len)884 string_substring (const gchar* self,
885                   glong offset,
886                   glong len)
887 {
888 	glong string_length = 0L;
889 	gboolean _tmp0_ = FALSE;
890 	gchar* _tmp3_;
891 	gchar* result = NULL;
892 	g_return_val_if_fail (self != NULL, NULL);
893 	if (offset >= ((glong) 0)) {
894 		_tmp0_ = len >= ((glong) 0);
895 	} else {
896 		_tmp0_ = FALSE;
897 	}
898 	if (_tmp0_) {
899 		string_length = string_strnlen ((gchar*) self, offset + len);
900 	} else {
901 		gint _tmp1_;
902 		gint _tmp2_;
903 		_tmp1_ = strlen (self);
904 		_tmp2_ = _tmp1_;
905 		string_length = (glong) _tmp2_;
906 	}
907 	if (offset < ((glong) 0)) {
908 		offset = string_length + offset;
909 		g_return_val_if_fail (offset >= ((glong) 0), NULL);
910 	} else {
911 		g_return_val_if_fail (offset <= string_length, NULL);
912 	}
913 	if (len < ((glong) 0)) {
914 		len = string_length - offset;
915 	}
916 	g_return_val_if_fail ((offset + len) <= string_length, NULL);
917 	_tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len);
918 	result = _tmp3_;
919 	return result;
920 }
921 
922 static gchar*
vala_genie_parser_get_current_string(ValaGenieParser * self)923 vala_genie_parser_get_current_string (ValaGenieParser* self)
924 {
925 	ValaGenieParserTokenInfo token = {0};
926 	ValaGenieParserTokenInfo* _tmp0_;
927 	gint _tmp0__length1;
928 	ValaGenieParserTokenInfo _tmp1_;
929 	ValaGenieParserTokenInfo _tmp2_;
930 	ValaSourceLocation _tmp3_;
931 	gchar* _tmp4_;
932 	ValaGenieParserTokenInfo _tmp5_;
933 	ValaSourceLocation _tmp6_;
934 	gchar* _tmp7_;
935 	ValaGenieParserTokenInfo _tmp8_;
936 	ValaSourceLocation _tmp9_;
937 	gchar* _tmp10_;
938 	gchar* _tmp11_;
939 	gchar* result = NULL;
940 	g_return_val_if_fail (self != NULL, NULL);
941 	_tmp0_ = self->priv->tokens;
942 	_tmp0__length1 = self->priv->tokens_length1;
943 	_tmp1_ = _tmp0_[self->priv->index];
944 	token = _tmp1_;
945 	_tmp2_ = token;
946 	_tmp3_ = _tmp2_.begin;
947 	_tmp4_ = _tmp3_.pos;
948 	_tmp5_ = token;
949 	_tmp6_ = _tmp5_.end;
950 	_tmp7_ = _tmp6_.pos;
951 	_tmp8_ = token;
952 	_tmp9_ = _tmp8_.begin;
953 	_tmp10_ = _tmp9_.pos;
954 	_tmp11_ = string_substring ((const gchar*) _tmp4_, (glong) 0, (glong) ((gint) (_tmp7_ - _tmp10_)));
955 	result = _tmp11_;
956 	return result;
957 }
958 
959 static gchar*
vala_genie_parser_get_last_string(ValaGenieParser * self)960 vala_genie_parser_get_last_string (ValaGenieParser* self)
961 {
962 	gint last_index = 0;
963 	ValaGenieParserTokenInfo token = {0};
964 	ValaGenieParserTokenInfo* _tmp0_;
965 	gint _tmp0__length1;
966 	ValaGenieParserTokenInfo _tmp1_;
967 	ValaGenieParserTokenInfo _tmp2_;
968 	ValaSourceLocation _tmp3_;
969 	gchar* _tmp4_;
970 	ValaGenieParserTokenInfo _tmp5_;
971 	ValaSourceLocation _tmp6_;
972 	gchar* _tmp7_;
973 	ValaGenieParserTokenInfo _tmp8_;
974 	ValaSourceLocation _tmp9_;
975 	gchar* _tmp10_;
976 	gchar* _tmp11_;
977 	gchar* result = NULL;
978 	g_return_val_if_fail (self != NULL, NULL);
979 	last_index = ((self->priv->index + VALA_GENIE_PARSER_BUFFER_SIZE) - 1) % VALA_GENIE_PARSER_BUFFER_SIZE;
980 	_tmp0_ = self->priv->tokens;
981 	_tmp0__length1 = self->priv->tokens_length1;
982 	_tmp1_ = _tmp0_[last_index];
983 	token = _tmp1_;
984 	_tmp2_ = token;
985 	_tmp3_ = _tmp2_.begin;
986 	_tmp4_ = _tmp3_.pos;
987 	_tmp5_ = token;
988 	_tmp6_ = _tmp5_.end;
989 	_tmp7_ = _tmp6_.pos;
990 	_tmp8_ = token;
991 	_tmp9_ = _tmp8_.begin;
992 	_tmp10_ = _tmp9_.pos;
993 	_tmp11_ = string_substring ((const gchar*) _tmp4_, (glong) 0, (glong) ((gint) (_tmp7_ - _tmp10_)));
994 	result = _tmp11_;
995 	return result;
996 }
997 
998 static ValaSourceReference*
vala_genie_parser_get_src(ValaGenieParser * self,ValaSourceLocation * begin)999 vala_genie_parser_get_src (ValaGenieParser* self,
1000                            ValaSourceLocation* begin)
1001 {
1002 	gint last_index = 0;
1003 	ValaGenieScanner* _tmp0_;
1004 	ValaSourceFile* _tmp1_;
1005 	ValaSourceFile* _tmp2_;
1006 	ValaSourceLocation _tmp3_;
1007 	ValaGenieParserTokenInfo* _tmp4_;
1008 	gint _tmp4__length1;
1009 	ValaGenieParserTokenInfo _tmp5_;
1010 	ValaSourceLocation _tmp6_;
1011 	ValaSourceReference* _tmp7_;
1012 	ValaSourceReference* result = NULL;
1013 	g_return_val_if_fail (self != NULL, NULL);
1014 	g_return_val_if_fail (begin != NULL, NULL);
1015 	last_index = ((self->priv->index + VALA_GENIE_PARSER_BUFFER_SIZE) - 1) % VALA_GENIE_PARSER_BUFFER_SIZE;
1016 	_tmp0_ = self->priv->scanner;
1017 	_tmp1_ = vala_genie_scanner_get_source_file (_tmp0_);
1018 	_tmp2_ = _tmp1_;
1019 	_tmp3_ = *begin;
1020 	_tmp4_ = self->priv->tokens;
1021 	_tmp4__length1 = self->priv->tokens_length1;
1022 	_tmp5_ = _tmp4_[last_index];
1023 	_tmp6_ = _tmp5_.end;
1024 	_tmp7_ = vala_source_reference_new (_tmp2_, &_tmp3_, &_tmp6_);
1025 	result = _tmp7_;
1026 	return result;
1027 }
1028 
1029 static ValaSourceReference*
vala_genie_parser_get_current_src(ValaGenieParser * self)1030 vala_genie_parser_get_current_src (ValaGenieParser* self)
1031 {
1032 	ValaGenieParserTokenInfo token = {0};
1033 	ValaGenieParserTokenInfo* _tmp0_;
1034 	gint _tmp0__length1;
1035 	ValaGenieParserTokenInfo _tmp1_;
1036 	ValaGenieScanner* _tmp2_;
1037 	ValaSourceFile* _tmp3_;
1038 	ValaSourceFile* _tmp4_;
1039 	ValaGenieParserTokenInfo _tmp5_;
1040 	ValaSourceLocation _tmp6_;
1041 	ValaGenieParserTokenInfo _tmp7_;
1042 	ValaSourceLocation _tmp8_;
1043 	ValaSourceReference* _tmp9_;
1044 	ValaSourceReference* result = NULL;
1045 	g_return_val_if_fail (self != NULL, NULL);
1046 	_tmp0_ = self->priv->tokens;
1047 	_tmp0__length1 = self->priv->tokens_length1;
1048 	_tmp1_ = _tmp0_[self->priv->index];
1049 	token = _tmp1_;
1050 	_tmp2_ = self->priv->scanner;
1051 	_tmp3_ = vala_genie_scanner_get_source_file (_tmp2_);
1052 	_tmp4_ = _tmp3_;
1053 	_tmp5_ = token;
1054 	_tmp6_ = _tmp5_.begin;
1055 	_tmp7_ = token;
1056 	_tmp8_ = _tmp7_.end;
1057 	_tmp9_ = vala_source_reference_new (_tmp4_, &_tmp6_, &_tmp8_);
1058 	result = _tmp9_;
1059 	return result;
1060 }
1061 
1062 static void
vala_genie_parser_rollback(ValaGenieParser * self,ValaSourceLocation * location)1063 vala_genie_parser_rollback (ValaGenieParser* self,
1064                             ValaSourceLocation* location)
1065 {
1066 	g_return_if_fail (self != NULL);
1067 	g_return_if_fail (location != NULL);
1068 	while (TRUE) {
1069 		ValaGenieParserTokenInfo* _tmp0_;
1070 		gint _tmp0__length1;
1071 		ValaGenieParserTokenInfo _tmp1_;
1072 		ValaSourceLocation _tmp2_;
1073 		gchar* _tmp3_;
1074 		ValaSourceLocation _tmp4_;
1075 		gchar* _tmp5_;
1076 		gint _tmp6_;
1077 		_tmp0_ = self->priv->tokens;
1078 		_tmp0__length1 = self->priv->tokens_length1;
1079 		_tmp1_ = _tmp0_[self->priv->index];
1080 		_tmp2_ = _tmp1_.begin;
1081 		_tmp3_ = _tmp2_.pos;
1082 		_tmp4_ = *location;
1083 		_tmp5_ = _tmp4_.pos;
1084 		if (!(_tmp3_ != _tmp5_)) {
1085 			break;
1086 		}
1087 		self->priv->index = ((self->priv->index - 1) + VALA_GENIE_PARSER_BUFFER_SIZE) % VALA_GENIE_PARSER_BUFFER_SIZE;
1088 		_tmp6_ = self->priv->size;
1089 		self->priv->size = _tmp6_ + 1;
1090 		if (self->priv->size > VALA_GENIE_PARSER_BUFFER_SIZE) {
1091 			ValaGenieScanner* _tmp7_;
1092 			ValaSourceLocation _tmp8_;
1093 			_tmp7_ = self->priv->scanner;
1094 			_tmp8_ = *location;
1095 			vala_genie_scanner_seek (_tmp7_, &_tmp8_);
1096 			self->priv->size = 0;
1097 			self->priv->index = 0;
1098 			vala_genie_parser_next (self);
1099 		}
1100 	}
1101 }
1102 
1103 static inline ValaSymbolAccessibility
vala_genie_parser_get_default_accessibility(ValaGenieParser * self,const gchar * s)1104 vala_genie_parser_get_default_accessibility (ValaGenieParser* self,
1105                                              const gchar* s)
1106 {
1107 	ValaSymbolAccessibility result = 0;
1108 	g_return_val_if_fail (self != NULL, 0);
1109 	g_return_val_if_fail (s != NULL, 0);
1110 	if (g_str_has_prefix (s, "_")) {
1111 		result = VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
1112 		return result;
1113 	}
1114 	result = VALA_SYMBOL_ACCESSIBILITY_PUBLIC;
1115 	return result;
1116 }
1117 
1118 static gchar
string_get(const gchar * self,glong index)1119 string_get (const gchar* self,
1120             glong index)
1121 {
1122 	gchar _tmp0_;
1123 	gchar result = '\0';
1124 	g_return_val_if_fail (self != NULL, '\0');
1125 	_tmp0_ = ((gchar*) self)[index];
1126 	result = _tmp0_;
1127 	return result;
1128 }
1129 
1130 static gboolean
string_contains(const gchar * self,const gchar * needle)1131 string_contains (const gchar* self,
1132                  const gchar* needle)
1133 {
1134 	gchar* _tmp0_;
1135 	gboolean result = FALSE;
1136 	g_return_val_if_fail (self != NULL, FALSE);
1137 	g_return_val_if_fail (needle != NULL, FALSE);
1138 	_tmp0_ = strstr ((gchar*) self, (gchar*) needle);
1139 	result = _tmp0_ != NULL;
1140 	return result;
1141 }
1142 
1143 static void
vala_genie_parser_skip_identifier(ValaGenieParser * self,GError ** error)1144 vala_genie_parser_skip_identifier (ValaGenieParser* self,
1145                                    GError** error)
1146 {
1147 	GError* _tmp7_;
1148 	GError* _inner_error0_ = NULL;
1149 	g_return_if_fail (self != NULL);
1150 	switch (vala_genie_parser_current (self)) {
1151 		case VALA_GENIE_TOKEN_TYPE_ABSTRACT:
1152 		case VALA_GENIE_TOKEN_TYPE_AS:
1153 		case VALA_GENIE_TOKEN_TYPE_ASSERT:
1154 		case VALA_GENIE_TOKEN_TYPE_ASYNC:
1155 		case VALA_GENIE_TOKEN_TYPE_BREAK:
1156 		case VALA_GENIE_TOKEN_TYPE_CLASS:
1157 		case VALA_GENIE_TOKEN_TYPE_CONST:
1158 		case VALA_GENIE_TOKEN_TYPE_CONTINUE:
1159 		case VALA_GENIE_TOKEN_TYPE_DEDENT:
1160 		case VALA_GENIE_TOKEN_TYPE_DEF:
1161 		case VALA_GENIE_TOKEN_TYPE_DEFAULT:
1162 		case VALA_GENIE_TOKEN_TYPE_DELEGATE:
1163 		case VALA_GENIE_TOKEN_TYPE_DELETE:
1164 		case VALA_GENIE_TOKEN_TYPE_DO:
1165 		case VALA_GENIE_TOKEN_TYPE_DOWNTO:
1166 		case VALA_GENIE_TOKEN_TYPE_DYNAMIC:
1167 		case VALA_GENIE_TOKEN_TYPE_ELSE:
1168 		case VALA_GENIE_TOKEN_TYPE_EOL:
1169 		case VALA_GENIE_TOKEN_TYPE_ENUM:
1170 		case VALA_GENIE_TOKEN_TYPE_ENSURES:
1171 		case VALA_GENIE_TOKEN_TYPE_ERRORDOMAIN:
1172 		case VALA_GENIE_TOKEN_TYPE_EVENT:
1173 		case VALA_GENIE_TOKEN_TYPE_EXCEPT:
1174 		case VALA_GENIE_TOKEN_TYPE_EXTERN:
1175 		case VALA_GENIE_TOKEN_TYPE_FALSE:
1176 		case VALA_GENIE_TOKEN_TYPE_FINAL:
1177 		case VALA_GENIE_TOKEN_TYPE_FINALLY:
1178 		case VALA_GENIE_TOKEN_TYPE_FOR:
1179 		case VALA_GENIE_TOKEN_TYPE_GET:
1180 		case VALA_GENIE_TOKEN_TYPE_IDENTIFIER:
1181 		case VALA_GENIE_TOKEN_TYPE_IF:
1182 		case VALA_GENIE_TOKEN_TYPE_IN:
1183 		case VALA_GENIE_TOKEN_TYPE_INDENT:
1184 		case VALA_GENIE_TOKEN_TYPE_INIT:
1185 		case VALA_GENIE_TOKEN_TYPE_INLINE:
1186 		case VALA_GENIE_TOKEN_TYPE_INTERFACE:
1187 		case VALA_GENIE_TOKEN_TYPE_INTERNAL:
1188 		case VALA_GENIE_TOKEN_TYPE_IS:
1189 		case VALA_GENIE_TOKEN_TYPE_ISA:
1190 		case VALA_GENIE_TOKEN_TYPE_LOCK:
1191 		case VALA_GENIE_TOKEN_TYPE_NAMESPACE:
1192 		case VALA_GENIE_TOKEN_TYPE_NEW:
1193 		case VALA_GENIE_TOKEN_TYPE_NULL:
1194 		case VALA_GENIE_TOKEN_TYPE_OF:
1195 		case VALA_GENIE_TOKEN_TYPE_OUT:
1196 		case VALA_GENIE_TOKEN_TYPE_OVERRIDE:
1197 		case VALA_GENIE_TOKEN_TYPE_OWNED:
1198 		case VALA_GENIE_TOKEN_TYPE_PASS:
1199 		case VALA_GENIE_TOKEN_TYPE_PRINT:
1200 		case VALA_GENIE_TOKEN_TYPE_PRIVATE:
1201 		case VALA_GENIE_TOKEN_TYPE_PROTECTED:
1202 		case VALA_GENIE_TOKEN_TYPE_PROP:
1203 		case VALA_GENIE_TOKEN_TYPE_RAISE:
1204 		case VALA_GENIE_TOKEN_TYPE_RAISES:
1205 		case VALA_GENIE_TOKEN_TYPE_REF:
1206 		case VALA_GENIE_TOKEN_TYPE_REQUIRES:
1207 		case VALA_GENIE_TOKEN_TYPE_RETURN:
1208 		case VALA_GENIE_TOKEN_TYPE_SEALED:
1209 		case VALA_GENIE_TOKEN_TYPE_SELF:
1210 		case VALA_GENIE_TOKEN_TYPE_SET:
1211 		case VALA_GENIE_TOKEN_TYPE_SIZEOF:
1212 		case VALA_GENIE_TOKEN_TYPE_STATIC:
1213 		case VALA_GENIE_TOKEN_TYPE_STRUCT:
1214 		case VALA_GENIE_TOKEN_TYPE_SUPER:
1215 		case VALA_GENIE_TOKEN_TYPE_TO:
1216 		case VALA_GENIE_TOKEN_TYPE_TRUE:
1217 		case VALA_GENIE_TOKEN_TYPE_TRY:
1218 		case VALA_GENIE_TOKEN_TYPE_TYPEOF:
1219 		case VALA_GENIE_TOKEN_TYPE_UNOWNED:
1220 		case VALA_GENIE_TOKEN_TYPE_USES:
1221 		case VALA_GENIE_TOKEN_TYPE_VAR:
1222 		case VALA_GENIE_TOKEN_TYPE_VIRTUAL:
1223 		case VALA_GENIE_TOKEN_TYPE_VOID:
1224 		case VALA_GENIE_TOKEN_TYPE_VOLATILE:
1225 		case VALA_GENIE_TOKEN_TYPE_WEAK:
1226 		case VALA_GENIE_TOKEN_TYPE_WHEN:
1227 		case VALA_GENIE_TOKEN_TYPE_WHILE:
1228 		case VALA_GENIE_TOKEN_TYPE_YIELD:
1229 		{
1230 			vala_genie_parser_next (self);
1231 			return;
1232 		}
1233 		case VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL:
1234 		case VALA_GENIE_TOKEN_TYPE_REAL_LITERAL:
1235 		{
1236 			gchar* id = NULL;
1237 			gchar* _tmp0_;
1238 			gboolean _tmp1_ = FALSE;
1239 			const gchar* _tmp2_;
1240 			const gchar* _tmp3_;
1241 			gint _tmp4_;
1242 			gint _tmp5_;
1243 			_tmp0_ = vala_genie_parser_get_current_string (self);
1244 			id = _tmp0_;
1245 			_tmp2_ = id;
1246 			_tmp3_ = id;
1247 			_tmp4_ = strlen (_tmp3_);
1248 			_tmp5_ = _tmp4_;
1249 			if (g_ascii_isalpha (string_get (_tmp2_, (glong) (_tmp5_ - 1)))) {
1250 				const gchar* _tmp6_;
1251 				_tmp6_ = id;
1252 				_tmp1_ = !string_contains (_tmp6_, ".");
1253 			} else {
1254 				_tmp1_ = FALSE;
1255 			}
1256 			if (_tmp1_) {
1257 				vala_genie_parser_next (self);
1258 				_g_free0 (id);
1259 				return;
1260 			}
1261 			_g_free0 (id);
1262 			break;
1263 		}
1264 		default:
1265 		{
1266 			break;
1267 		}
1268 	}
1269 	_tmp7_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected identifier");
1270 	_inner_error0_ = _tmp7_;
1271 	if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1272 		g_propagate_error (error, _inner_error0_);
1273 		return;
1274 	} else {
1275 		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);
1276 		g_clear_error (&_inner_error0_);
1277 		return;
1278 	}
1279 }
1280 
1281 static gchar*
vala_genie_parser_parse_identifier(ValaGenieParser * self,GError ** error)1282 vala_genie_parser_parse_identifier (ValaGenieParser* self,
1283                                     GError** error)
1284 {
1285 	gchar* _tmp0_;
1286 	GError* _inner_error0_ = NULL;
1287 	gchar* result = NULL;
1288 	g_return_val_if_fail (self != NULL, NULL);
1289 	vala_genie_parser_skip_identifier (self, &_inner_error0_);
1290 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
1291 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1292 			g_propagate_error (error, _inner_error0_);
1293 			return NULL;
1294 		} else {
1295 			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);
1296 			g_clear_error (&_inner_error0_);
1297 			return NULL;
1298 		}
1299 	}
1300 	_tmp0_ = vala_genie_parser_get_last_string (self);
1301 	result = _tmp0_;
1302 	return result;
1303 }
1304 
1305 static ValaExpression*
vala_genie_parser_parse_literal(ValaGenieParser * self,GError ** error)1306 vala_genie_parser_parse_literal (ValaGenieParser* self,
1307                                  GError** error)
1308 {
1309 	ValaSourceLocation begin = {0};
1310 	ValaSourceLocation _tmp0_ = {0};
1311 	GError* _inner_error0_ = NULL;
1312 	ValaExpression* result = NULL;
1313 	g_return_val_if_fail (self != NULL, NULL);
1314 	vala_genie_parser_get_location (self, &_tmp0_);
1315 	begin = _tmp0_;
1316 	switch (vala_genie_parser_current (self)) {
1317 		case VALA_GENIE_TOKEN_TYPE_TRUE:
1318 		{
1319 			ValaSourceLocation _tmp1_;
1320 			ValaSourceReference* _tmp2_;
1321 			ValaSourceReference* _tmp3_;
1322 			ValaBooleanLiteral* _tmp4_;
1323 			ValaExpression* _tmp5_;
1324 			vala_genie_parser_next (self);
1325 			_tmp1_ = begin;
1326 			_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
1327 			_tmp3_ = _tmp2_;
1328 			_tmp4_ = vala_boolean_literal_new (TRUE, _tmp3_);
1329 			_tmp5_ = (ValaExpression*) _tmp4_;
1330 			_vala_source_reference_unref0 (_tmp3_);
1331 			result = _tmp5_;
1332 			return result;
1333 		}
1334 		case VALA_GENIE_TOKEN_TYPE_FALSE:
1335 		{
1336 			ValaSourceLocation _tmp6_;
1337 			ValaSourceReference* _tmp7_;
1338 			ValaSourceReference* _tmp8_;
1339 			ValaBooleanLiteral* _tmp9_;
1340 			ValaExpression* _tmp10_;
1341 			vala_genie_parser_next (self);
1342 			_tmp6_ = begin;
1343 			_tmp7_ = vala_genie_parser_get_src (self, &_tmp6_);
1344 			_tmp8_ = _tmp7_;
1345 			_tmp9_ = vala_boolean_literal_new (FALSE, _tmp8_);
1346 			_tmp10_ = (ValaExpression*) _tmp9_;
1347 			_vala_source_reference_unref0 (_tmp8_);
1348 			result = _tmp10_;
1349 			return result;
1350 		}
1351 		case VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL:
1352 		{
1353 			gchar* _tmp11_;
1354 			gchar* _tmp12_;
1355 			ValaSourceLocation _tmp13_;
1356 			ValaSourceReference* _tmp14_;
1357 			ValaSourceReference* _tmp15_;
1358 			ValaIntegerLiteral* _tmp16_;
1359 			ValaExpression* _tmp17_;
1360 			vala_genie_parser_next (self);
1361 			_tmp11_ = vala_genie_parser_get_last_string (self);
1362 			_tmp12_ = _tmp11_;
1363 			_tmp13_ = begin;
1364 			_tmp14_ = vala_genie_parser_get_src (self, &_tmp13_);
1365 			_tmp15_ = _tmp14_;
1366 			_tmp16_ = vala_integer_literal_new (_tmp12_, _tmp15_);
1367 			_tmp17_ = (ValaExpression*) _tmp16_;
1368 			_vala_source_reference_unref0 (_tmp15_);
1369 			_g_free0 (_tmp12_);
1370 			result = _tmp17_;
1371 			return result;
1372 		}
1373 		case VALA_GENIE_TOKEN_TYPE_REAL_LITERAL:
1374 		{
1375 			gchar* _tmp18_;
1376 			gchar* _tmp19_;
1377 			ValaSourceLocation _tmp20_;
1378 			ValaSourceReference* _tmp21_;
1379 			ValaSourceReference* _tmp22_;
1380 			ValaRealLiteral* _tmp23_;
1381 			ValaExpression* _tmp24_;
1382 			vala_genie_parser_next (self);
1383 			_tmp18_ = vala_genie_parser_get_last_string (self);
1384 			_tmp19_ = _tmp18_;
1385 			_tmp20_ = begin;
1386 			_tmp21_ = vala_genie_parser_get_src (self, &_tmp20_);
1387 			_tmp22_ = _tmp21_;
1388 			_tmp23_ = vala_real_literal_new (_tmp19_, _tmp22_);
1389 			_tmp24_ = (ValaExpression*) _tmp23_;
1390 			_vala_source_reference_unref0 (_tmp22_);
1391 			_g_free0 (_tmp19_);
1392 			result = _tmp24_;
1393 			return result;
1394 		}
1395 		case VALA_GENIE_TOKEN_TYPE_CHARACTER_LITERAL:
1396 		{
1397 			ValaCharacterLiteral* lit = NULL;
1398 			gchar* _tmp25_;
1399 			gchar* _tmp26_;
1400 			ValaSourceLocation _tmp27_;
1401 			ValaSourceReference* _tmp28_;
1402 			ValaSourceReference* _tmp29_;
1403 			ValaCharacterLiteral* _tmp30_;
1404 			ValaCharacterLiteral* _tmp31_;
1405 			ValaCharacterLiteral* _tmp32_;
1406 			gboolean _tmp33_;
1407 			gboolean _tmp34_;
1408 			vala_genie_parser_next (self);
1409 			_tmp25_ = vala_genie_parser_get_last_string (self);
1410 			_tmp26_ = _tmp25_;
1411 			_tmp27_ = begin;
1412 			_tmp28_ = vala_genie_parser_get_src (self, &_tmp27_);
1413 			_tmp29_ = _tmp28_;
1414 			_tmp30_ = vala_character_literal_new (_tmp26_, _tmp29_);
1415 			_tmp31_ = _tmp30_;
1416 			_vala_source_reference_unref0 (_tmp29_);
1417 			_g_free0 (_tmp26_);
1418 			lit = _tmp31_;
1419 			_tmp32_ = lit;
1420 			_tmp33_ = vala_code_node_get_error ((ValaCodeNode*) _tmp32_);
1421 			_tmp34_ = _tmp33_;
1422 			if (_tmp34_) {
1423 				ValaCharacterLiteral* _tmp35_;
1424 				ValaSourceReference* _tmp36_;
1425 				ValaSourceReference* _tmp37_;
1426 				_tmp35_ = lit;
1427 				_tmp36_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp35_);
1428 				_tmp37_ = _tmp36_;
1429 				vala_report_error (_tmp37_, "invalid character literal");
1430 			}
1431 			result = (ValaExpression*) lit;
1432 			return result;
1433 		}
1434 		case VALA_GENIE_TOKEN_TYPE_REGEX_LITERAL:
1435 		{
1436 			gchar* match_part = NULL;
1437 			gchar* _tmp38_;
1438 			ValaSourceReference* src_begin = NULL;
1439 			ValaSourceLocation _tmp39_;
1440 			ValaSourceReference* _tmp40_;
1441 			gchar* close_token = NULL;
1442 			gchar* _tmp41_;
1443 			const gchar* _tmp42_;
1444 			const gchar* _tmp43_;
1445 			gchar* _tmp44_;
1446 			gchar* _tmp45_;
1447 			ValaSourceReference* _tmp46_;
1448 			ValaRegexLiteral* _tmp47_;
1449 			ValaExpression* _tmp48_;
1450 			vala_genie_parser_next (self);
1451 			_tmp38_ = vala_genie_parser_get_last_string (self);
1452 			match_part = _tmp38_;
1453 			_tmp39_ = begin;
1454 			_tmp40_ = vala_genie_parser_get_src (self, &_tmp39_);
1455 			src_begin = _tmp40_;
1456 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_REGEX_LITERAL, &_inner_error0_);
1457 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
1458 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1459 					g_propagate_error (error, _inner_error0_);
1460 					_vala_source_reference_unref0 (src_begin);
1461 					_g_free0 (match_part);
1462 					return NULL;
1463 				} else {
1464 					_vala_source_reference_unref0 (src_begin);
1465 					_g_free0 (match_part);
1466 					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);
1467 					g_clear_error (&_inner_error0_);
1468 					return NULL;
1469 				}
1470 			}
1471 			_tmp41_ = vala_genie_parser_get_last_string (self);
1472 			close_token = _tmp41_;
1473 			_tmp42_ = close_token;
1474 			_tmp43_ = match_part;
1475 			_tmp44_ = g_strdup_printf ("%s/%s", _tmp42_, _tmp43_);
1476 			_tmp45_ = _tmp44_;
1477 			_tmp46_ = src_begin;
1478 			_tmp47_ = vala_regex_literal_new (_tmp45_, _tmp46_);
1479 			_tmp48_ = (ValaExpression*) _tmp47_;
1480 			_g_free0 (_tmp45_);
1481 			result = _tmp48_;
1482 			_g_free0 (close_token);
1483 			_vala_source_reference_unref0 (src_begin);
1484 			_g_free0 (match_part);
1485 			return result;
1486 		}
1487 		case VALA_GENIE_TOKEN_TYPE_STRING_LITERAL:
1488 		{
1489 			gchar* _tmp49_;
1490 			gchar* _tmp50_;
1491 			ValaSourceLocation _tmp51_;
1492 			ValaSourceReference* _tmp52_;
1493 			ValaSourceReference* _tmp53_;
1494 			ValaStringLiteral* _tmp54_;
1495 			ValaExpression* _tmp55_;
1496 			vala_genie_parser_next (self);
1497 			_tmp49_ = vala_genie_parser_get_last_string (self);
1498 			_tmp50_ = _tmp49_;
1499 			_tmp51_ = begin;
1500 			_tmp52_ = vala_genie_parser_get_src (self, &_tmp51_);
1501 			_tmp53_ = _tmp52_;
1502 			_tmp54_ = vala_string_literal_new (_tmp50_, _tmp53_);
1503 			_tmp55_ = (ValaExpression*) _tmp54_;
1504 			_vala_source_reference_unref0 (_tmp53_);
1505 			_g_free0 (_tmp50_);
1506 			result = _tmp55_;
1507 			return result;
1508 		}
1509 		case VALA_GENIE_TOKEN_TYPE_TEMPLATE_STRING_LITERAL:
1510 		{
1511 			gchar* _tmp56_;
1512 			gchar* _tmp57_;
1513 			gchar* _tmp58_;
1514 			gchar* _tmp59_;
1515 			ValaSourceLocation _tmp60_;
1516 			ValaSourceReference* _tmp61_;
1517 			ValaSourceReference* _tmp62_;
1518 			ValaStringLiteral* _tmp63_;
1519 			ValaExpression* _tmp64_;
1520 			vala_genie_parser_next (self);
1521 			_tmp56_ = vala_genie_parser_get_last_string (self);
1522 			_tmp57_ = _tmp56_;
1523 			_tmp58_ = g_strdup_printf ("\"%s\"", _tmp57_);
1524 			_tmp59_ = _tmp58_;
1525 			_tmp60_ = begin;
1526 			_tmp61_ = vala_genie_parser_get_src (self, &_tmp60_);
1527 			_tmp62_ = _tmp61_;
1528 			_tmp63_ = vala_string_literal_new (_tmp59_, _tmp62_);
1529 			_tmp64_ = (ValaExpression*) _tmp63_;
1530 			_vala_source_reference_unref0 (_tmp62_);
1531 			_g_free0 (_tmp59_);
1532 			_g_free0 (_tmp57_);
1533 			result = _tmp64_;
1534 			return result;
1535 		}
1536 		case VALA_GENIE_TOKEN_TYPE_VERBATIM_STRING_LITERAL:
1537 		{
1538 			gchar* raw_string = NULL;
1539 			gchar* _tmp65_;
1540 			gchar* escaped_string = NULL;
1541 			const gchar* _tmp66_;
1542 			const gchar* _tmp67_;
1543 			gint _tmp68_;
1544 			gint _tmp69_;
1545 			gchar* _tmp70_;
1546 			gchar* _tmp71_;
1547 			gchar* _tmp72_;
1548 			gchar* _tmp73_;
1549 			const gchar* _tmp74_;
1550 			gchar* _tmp75_;
1551 			gchar* _tmp76_;
1552 			ValaSourceLocation _tmp77_;
1553 			ValaSourceReference* _tmp78_;
1554 			ValaSourceReference* _tmp79_;
1555 			ValaStringLiteral* _tmp80_;
1556 			ValaExpression* _tmp81_;
1557 			vala_genie_parser_next (self);
1558 			_tmp65_ = vala_genie_parser_get_last_string (self);
1559 			raw_string = _tmp65_;
1560 			_tmp66_ = raw_string;
1561 			_tmp67_ = raw_string;
1562 			_tmp68_ = strlen (_tmp67_);
1563 			_tmp69_ = _tmp68_;
1564 			_tmp70_ = string_substring (_tmp66_, (glong) 3, (glong) (_tmp69_ - 6));
1565 			_tmp71_ = _tmp70_;
1566 			_tmp72_ = g_strescape (_tmp71_, "");
1567 			_tmp73_ = _tmp72_;
1568 			_g_free0 (_tmp71_);
1569 			escaped_string = _tmp73_;
1570 			_tmp74_ = escaped_string;
1571 			_tmp75_ = g_strdup_printf ("\"%s\"", _tmp74_);
1572 			_tmp76_ = _tmp75_;
1573 			_tmp77_ = begin;
1574 			_tmp78_ = vala_genie_parser_get_src (self, &_tmp77_);
1575 			_tmp79_ = _tmp78_;
1576 			_tmp80_ = vala_string_literal_new (_tmp76_, _tmp79_);
1577 			_tmp81_ = (ValaExpression*) _tmp80_;
1578 			_vala_source_reference_unref0 (_tmp79_);
1579 			_g_free0 (_tmp76_);
1580 			result = _tmp81_;
1581 			_g_free0 (escaped_string);
1582 			_g_free0 (raw_string);
1583 			return result;
1584 		}
1585 		case VALA_GENIE_TOKEN_TYPE_NULL:
1586 		{
1587 			ValaSourceLocation _tmp82_;
1588 			ValaSourceReference* _tmp83_;
1589 			ValaSourceReference* _tmp84_;
1590 			ValaNullLiteral* _tmp85_;
1591 			ValaExpression* _tmp86_;
1592 			vala_genie_parser_next (self);
1593 			_tmp82_ = begin;
1594 			_tmp83_ = vala_genie_parser_get_src (self, &_tmp82_);
1595 			_tmp84_ = _tmp83_;
1596 			_tmp85_ = vala_null_literal_new (_tmp84_);
1597 			_tmp86_ = (ValaExpression*) _tmp85_;
1598 			_vala_source_reference_unref0 (_tmp84_);
1599 			result = _tmp86_;
1600 			return result;
1601 		}
1602 		default:
1603 		{
1604 			GError* _tmp87_;
1605 			_tmp87_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected literal");
1606 			_inner_error0_ = _tmp87_;
1607 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1608 				g_propagate_error (error, _inner_error0_);
1609 				return NULL;
1610 			} else {
1611 				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);
1612 				g_clear_error (&_inner_error0_);
1613 				return NULL;
1614 			}
1615 		}
1616 	}
1617 }
1618 
1619 void
vala_genie_parser_parse_file(ValaGenieParser * self,ValaSourceFile * source_file)1620 vala_genie_parser_parse_file (ValaGenieParser* self,
1621                               ValaSourceFile* source_file)
1622 {
1623 	gboolean has_global_context = FALSE;
1624 	ValaCodeContext* _tmp0_;
1625 	ValaGenieScanner* _tmp4_;
1626 	ValaGenieScanner* _tmp5_;
1627 	ValaGenieScanner* _tmp6_;
1628 	GError* _inner_error0_ = NULL;
1629 	g_return_if_fail (self != NULL);
1630 	g_return_if_fail (source_file != NULL);
1631 	_tmp0_ = self->priv->context;
1632 	has_global_context = _tmp0_ != NULL;
1633 	if (!has_global_context) {
1634 		ValaCodeContext* _tmp1_;
1635 		ValaCodeContext* _tmp2_;
1636 		ValaCodeContext* _tmp3_;
1637 		_tmp1_ = vala_source_file_get_context (source_file);
1638 		_tmp2_ = _tmp1_;
1639 		_tmp3_ = _vala_code_context_ref0 (_tmp2_);
1640 		_vala_code_context_unref0 (self->priv->context);
1641 		self->priv->context = _tmp3_;
1642 	}
1643 	_tmp4_ = vala_genie_scanner_new (source_file);
1644 	_vala_genie_scanner_unref0 (self->priv->scanner);
1645 	self->priv->scanner = _tmp4_;
1646 	_tmp5_ = self->priv->scanner;
1647 	vala_genie_scanner_parse_file_comments (_tmp5_);
1648 	_tmp6_ = self->priv->scanner;
1649 	vala_genie_scanner_set_indent_spaces (_tmp6_, 0);
1650 	self->priv->index = -1;
1651 	self->priv->size = 0;
1652 	vala_genie_parser_next (self);
1653 	{
1654 		ValaSourceLocation begin = {0};
1655 		ValaSourceLocation _tmp7_ = {0};
1656 		ValaCodeContext* _tmp14_;
1657 		ValaNamespace* _tmp15_;
1658 		ValaNamespace* _tmp16_;
1659 		ValaCodeContext* _tmp17_;
1660 		ValaNamespace* _tmp18_;
1661 		ValaNamespace* _tmp19_;
1662 		vala_genie_parser_get_location (self, &_tmp7_);
1663 		begin = _tmp7_;
1664 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET)) {
1665 			gchar* id = NULL;
1666 			gchar* _tmp8_;
1667 			const gchar* _tmp9_;
1668 			_tmp8_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
1669 			id = _tmp8_;
1670 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
1671 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1672 					goto __catch0_vala_parse_error;
1673 				}
1674 				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);
1675 				g_clear_error (&_inner_error0_);
1676 				return;
1677 			}
1678 			_tmp9_ = id;
1679 			if (g_strcmp0 (_tmp9_, "indent") == 0) {
1680 				ValaGenieScanner* _tmp10_;
1681 				gchar* _tmp11_;
1682 				gchar* _tmp12_;
1683 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_ASSIGN, &_inner_error0_);
1684 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
1685 					_g_free0 (id);
1686 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1687 						goto __catch0_vala_parse_error;
1688 					}
1689 					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);
1690 					g_clear_error (&_inner_error0_);
1691 					return;
1692 				}
1693 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL, &_inner_error0_);
1694 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
1695 					_g_free0 (id);
1696 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1697 						goto __catch0_vala_parse_error;
1698 					}
1699 					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);
1700 					g_clear_error (&_inner_error0_);
1701 					return;
1702 				}
1703 				_tmp10_ = self->priv->scanner;
1704 				_tmp11_ = vala_genie_parser_get_last_string (self);
1705 				_tmp12_ = _tmp11_;
1706 				vala_genie_scanner_set_indent_spaces (_tmp10_, atoi (_tmp12_));
1707 				_g_free0 (_tmp12_);
1708 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET, &_inner_error0_);
1709 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
1710 					_g_free0 (id);
1711 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1712 						goto __catch0_vala_parse_error;
1713 					}
1714 					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);
1715 					g_clear_error (&_inner_error0_);
1716 					return;
1717 				}
1718 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
1719 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
1720 					_g_free0 (id);
1721 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1722 						goto __catch0_vala_parse_error;
1723 					}
1724 					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);
1725 					g_clear_error (&_inner_error0_);
1726 					return;
1727 				}
1728 			} else {
1729 				ValaSourceLocation _tmp13_;
1730 				_tmp13_ = begin;
1731 				vala_genie_parser_rollback (self, &_tmp13_);
1732 			}
1733 			_g_free0 (id);
1734 		}
1735 		_tmp14_ = self->priv->context;
1736 		_tmp15_ = vala_code_context_get_root (_tmp14_);
1737 		_tmp16_ = _tmp15_;
1738 		vala_genie_parser_parse_using_directives (self, _tmp16_, &_inner_error0_);
1739 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1740 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1741 				goto __catch0_vala_parse_error;
1742 			}
1743 			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);
1744 			g_clear_error (&_inner_error0_);
1745 			return;
1746 		}
1747 		_tmp17_ = self->priv->context;
1748 		_tmp18_ = vala_code_context_get_root (_tmp17_);
1749 		_tmp19_ = _tmp18_;
1750 		vala_genie_parser_parse_declarations (self, (ValaSymbol*) _tmp19_, TRUE, &_inner_error0_);
1751 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1752 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1753 				goto __catch0_vala_parse_error;
1754 			}
1755 			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);
1756 			g_clear_error (&_inner_error0_);
1757 			return;
1758 		}
1759 	}
1760 	goto __finally0;
1761 	__catch0_vala_parse_error:
1762 	{
1763 		GError* e = NULL;
1764 		GError* _tmp20_;
1765 		e = _inner_error0_;
1766 		_inner_error0_ = NULL;
1767 		_tmp20_ = e;
1768 		vala_genie_parser_report_parse_error (self, _tmp20_);
1769 		_g_error_free0 (e);
1770 	}
1771 	__finally0:
1772 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
1773 		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);
1774 		g_clear_error (&_inner_error0_);
1775 		return;
1776 	}
1777 	_vala_genie_scanner_unref0 (self->priv->scanner);
1778 	self->priv->scanner = NULL;
1779 	if (!has_global_context) {
1780 		_vala_code_context_unref0 (self->priv->context);
1781 		self->priv->context = NULL;
1782 	}
1783 }
1784 
1785 static void
vala_genie_parser_skip_symbol_name(ValaGenieParser * self,GError ** error)1786 vala_genie_parser_skip_symbol_name (ValaGenieParser* self,
1787                                     GError** error)
1788 {
1789 	GError* _inner_error0_ = NULL;
1790 	g_return_if_fail (self != NULL);
1791 	{
1792 		gboolean _tmp0_ = FALSE;
1793 		_tmp0_ = TRUE;
1794 		while (TRUE) {
1795 			if (!_tmp0_) {
1796 				if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DOT)) {
1797 					break;
1798 				}
1799 			}
1800 			_tmp0_ = FALSE;
1801 			vala_genie_parser_skip_identifier (self, &_inner_error0_);
1802 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
1803 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1804 					g_propagate_error (error, _inner_error0_);
1805 					return;
1806 				} else {
1807 					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);
1808 					g_clear_error (&_inner_error0_);
1809 					return;
1810 				}
1811 			}
1812 		}
1813 	}
1814 }
1815 
1816 static ValaUnresolvedSymbol*
vala_genie_parser_parse_symbol_name(ValaGenieParser * self,GError ** error)1817 vala_genie_parser_parse_symbol_name (ValaGenieParser* self,
1818                                      GError** error)
1819 {
1820 	ValaSourceLocation begin = {0};
1821 	ValaSourceLocation _tmp0_ = {0};
1822 	ValaUnresolvedSymbol* sym = NULL;
1823 	GError* _inner_error0_ = NULL;
1824 	ValaUnresolvedSymbol* result = NULL;
1825 	g_return_val_if_fail (self != NULL, NULL);
1826 	vala_genie_parser_get_location (self, &_tmp0_);
1827 	begin = _tmp0_;
1828 	sym = NULL;
1829 	{
1830 		gboolean _tmp1_ = FALSE;
1831 		_tmp1_ = TRUE;
1832 		while (TRUE) {
1833 			gchar* name = NULL;
1834 			gchar* _tmp2_;
1835 			ValaUnresolvedSymbol* _tmp3_;
1836 			const gchar* _tmp4_;
1837 			ValaSourceLocation _tmp5_;
1838 			ValaSourceReference* _tmp6_;
1839 			ValaSourceReference* _tmp7_;
1840 			ValaUnresolvedSymbol* _tmp8_;
1841 			if (!_tmp1_) {
1842 				if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DOT)) {
1843 					break;
1844 				}
1845 			}
1846 			_tmp1_ = FALSE;
1847 			_tmp2_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
1848 			name = _tmp2_;
1849 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
1850 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1851 					g_propagate_error (error, _inner_error0_);
1852 					_vala_code_node_unref0 (sym);
1853 					return NULL;
1854 				} else {
1855 					_vala_code_node_unref0 (sym);
1856 					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);
1857 					g_clear_error (&_inner_error0_);
1858 					return NULL;
1859 				}
1860 			}
1861 			_tmp3_ = sym;
1862 			_tmp4_ = name;
1863 			_tmp5_ = begin;
1864 			_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
1865 			_tmp7_ = _tmp6_;
1866 			_tmp8_ = vala_unresolved_symbol_new (_tmp3_, _tmp4_, _tmp7_);
1867 			_vala_code_node_unref0 (sym);
1868 			sym = _tmp8_;
1869 			_vala_source_reference_unref0 (_tmp7_);
1870 			_g_free0 (name);
1871 		}
1872 	}
1873 	result = sym;
1874 	return result;
1875 }
1876 
1877 static void
vala_genie_parser_skip_type(ValaGenieParser * self,GError ** error)1878 vala_genie_parser_skip_type (ValaGenieParser* self,
1879                              GError** error)
1880 {
1881 	gboolean _tmp0_ = FALSE;
1882 	gboolean _tmp1_ = FALSE;
1883 	GError* _inner_error0_ = NULL;
1884 	g_return_if_fail (self != NULL);
1885 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DYNAMIC);
1886 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OWNED);
1887 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_UNOWNED);
1888 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_WEAK);
1889 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ARRAY)) {
1890 		_tmp1_ = TRUE;
1891 	} else {
1892 		_tmp1_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_LIST);
1893 	}
1894 	if (_tmp1_) {
1895 		_tmp0_ = TRUE;
1896 	} else {
1897 		_tmp0_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DICT);
1898 	}
1899 	if (_tmp0_) {
1900 		vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OF);
1901 	}
1902 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_VOID)) {
1903 	} else {
1904 		vala_genie_parser_skip_symbol_name (self, &_inner_error0_);
1905 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1906 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1907 				g_propagate_error (error, _inner_error0_);
1908 				return;
1909 			} else {
1910 				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);
1911 				g_clear_error (&_inner_error0_);
1912 				return;
1913 			}
1914 		}
1915 		vala_genie_parser_skip_type_argument_list (self, &_inner_error0_);
1916 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1917 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1918 				g_propagate_error (error, _inner_error0_);
1919 				return;
1920 			} else {
1921 				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);
1922 				g_clear_error (&_inner_error0_);
1923 				return;
1924 			}
1925 		}
1926 	}
1927 	while (TRUE) {
1928 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET)) {
1929 			break;
1930 		}
1931 		{
1932 			gboolean _tmp2_ = FALSE;
1933 			_tmp2_ = TRUE;
1934 			while (TRUE) {
1935 				gboolean _tmp3_ = FALSE;
1936 				if (!_tmp2_) {
1937 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
1938 						break;
1939 					}
1940 				}
1941 				_tmp2_ = FALSE;
1942 				if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_COMMA) {
1943 					_tmp3_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET;
1944 				} else {
1945 					_tmp3_ = FALSE;
1946 				}
1947 				if (_tmp3_) {
1948 					ValaExpression* _tmp4_;
1949 					ValaExpression* _tmp5_;
1950 					_tmp4_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
1951 					_tmp5_ = _tmp4_;
1952 					_vala_code_node_unref0 (_tmp5_);
1953 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
1954 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1955 							g_propagate_error (error, _inner_error0_);
1956 							return;
1957 						} else {
1958 							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);
1959 							g_clear_error (&_inner_error0_);
1960 							return;
1961 						}
1962 					}
1963 				}
1964 			}
1965 		}
1966 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET, &_inner_error0_);
1967 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
1968 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1969 				g_propagate_error (error, _inner_error0_);
1970 				return;
1971 			} else {
1972 				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);
1973 				g_clear_error (&_inner_error0_);
1974 				return;
1975 			}
1976 		}
1977 	}
1978 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OP_NEG);
1979 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INTERR);
1980 }
1981 
1982 static ValaExpression*
vala_genie_parser_parse_regex_literal(ValaGenieParser * self,GError ** error)1983 vala_genie_parser_parse_regex_literal (ValaGenieParser* self,
1984                                        GError** error)
1985 {
1986 	ValaExpression* expr = NULL;
1987 	ValaExpression* _tmp0_;
1988 	GError* _inner_error0_ = NULL;
1989 	ValaExpression* result = NULL;
1990 	g_return_val_if_fail (self != NULL, NULL);
1991 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_REGEX_LITERAL, &_inner_error0_);
1992 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
1993 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
1994 			g_propagate_error (error, _inner_error0_);
1995 			return NULL;
1996 		} else {
1997 			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);
1998 			g_clear_error (&_inner_error0_);
1999 			return NULL;
2000 		}
2001 	}
2002 	_tmp0_ = vala_genie_parser_parse_literal (self, &_inner_error0_);
2003 	expr = _tmp0_;
2004 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
2005 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2006 			g_propagate_error (error, _inner_error0_);
2007 			return NULL;
2008 		} else {
2009 			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);
2010 			g_clear_error (&_inner_error0_);
2011 			return NULL;
2012 		}
2013 	}
2014 	result = expr;
2015 	return result;
2016 }
2017 
2018 static gpointer
_vala_iterable_ref0(gpointer self)2019 _vala_iterable_ref0 (gpointer self)
2020 {
2021 	return self ? vala_iterable_ref (self) : NULL;
2022 }
2023 
2024 static gpointer
_vala_code_node_ref0(gpointer self)2025 _vala_code_node_ref0 (gpointer self)
2026 {
2027 	return self ? vala_code_node_ref (self) : NULL;
2028 }
2029 
2030 static ValaDataType*
vala_genie_parser_parse_type(ValaGenieParser * self,gboolean owned_by_default,gboolean can_weak_ref,GError ** error)2031 vala_genie_parser_parse_type (ValaGenieParser* self,
2032                               gboolean owned_by_default,
2033                               gboolean can_weak_ref,
2034                               GError** error)
2035 {
2036 	ValaSourceLocation begin = {0};
2037 	ValaSourceLocation _tmp0_ = {0};
2038 	ValaList* type_arg_list = NULL;
2039 	ValaUnresolvedSymbol* sym = NULL;
2040 	gboolean is_dynamic = FALSE;
2041 	gboolean value_owned = FALSE;
2042 	gboolean is_array = FALSE;
2043 	gboolean is_list = FALSE;
2044 	gboolean is_dict = FALSE;
2045 	ValaDataType* type = NULL;
2046 	gboolean _tmp8_ = FALSE;
2047 	gboolean _tmp9_ = FALSE;
2048 	ValaDataType* _tmp62_;
2049 	ValaDataType* _tmp87_;
2050 	ValaDataType* _tmp88_;
2051 	ValaDataType* _tmp89_;
2052 	GError* _inner_error0_ = NULL;
2053 	ValaDataType* result = NULL;
2054 	g_return_val_if_fail (self != NULL, NULL);
2055 	vala_genie_parser_get_location (self, &_tmp0_);
2056 	begin = _tmp0_;
2057 	type_arg_list = NULL;
2058 	sym = NULL;
2059 	is_dynamic = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DYNAMIC);
2060 	value_owned = owned_by_default;
2061 	if (owned_by_default) {
2062 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_UNOWNED)) {
2063 			value_owned = FALSE;
2064 		} else {
2065 			if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_WEAK)) {
2066 				gboolean _tmp1_ = FALSE;
2067 				if (!can_weak_ref) {
2068 					ValaCodeContext* _tmp2_;
2069 					gboolean _tmp3_;
2070 					gboolean _tmp4_;
2071 					_tmp2_ = self->priv->context;
2072 					_tmp3_ = vala_code_context_get_deprecated (_tmp2_);
2073 					_tmp4_ = _tmp3_;
2074 					_tmp1_ = !_tmp4_;
2075 				} else {
2076 					_tmp1_ = FALSE;
2077 				}
2078 				if (_tmp1_) {
2079 					ValaSourceLocation _tmp5_;
2080 					ValaSourceReference* _tmp6_;
2081 					ValaSourceReference* _tmp7_;
2082 					_tmp5_ = begin;
2083 					_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
2084 					_tmp7_ = _tmp6_;
2085 					vala_report_warning (_tmp7_, "deprecated syntax, use `unowned` modifier");
2086 					_vala_source_reference_unref0 (_tmp7_);
2087 				}
2088 				value_owned = FALSE;
2089 			}
2090 		}
2091 	} else {
2092 		value_owned = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OWNED);
2093 	}
2094 	is_array = FALSE;
2095 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ARRAY)) {
2096 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OF, &_inner_error0_);
2097 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2098 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2099 				g_propagate_error (error, _inner_error0_);
2100 				_vala_code_node_unref0 (sym);
2101 				_vala_iterable_unref0 (type_arg_list);
2102 				return NULL;
2103 			} else {
2104 				_vala_code_node_unref0 (sym);
2105 				_vala_iterable_unref0 (type_arg_list);
2106 				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);
2107 				g_clear_error (&_inner_error0_);
2108 				return NULL;
2109 			}
2110 		}
2111 		is_array = TRUE;
2112 	}
2113 	is_list = FALSE;
2114 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_LIST)) {
2115 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OF, &_inner_error0_);
2116 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2117 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2118 				g_propagate_error (error, _inner_error0_);
2119 				_vala_code_node_unref0 (sym);
2120 				_vala_iterable_unref0 (type_arg_list);
2121 				return NULL;
2122 			} else {
2123 				_vala_code_node_unref0 (sym);
2124 				_vala_iterable_unref0 (type_arg_list);
2125 				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);
2126 				g_clear_error (&_inner_error0_);
2127 				return NULL;
2128 			}
2129 		}
2130 		vala_genie_parser_prev (self);
2131 		is_list = TRUE;
2132 	}
2133 	is_dict = FALSE;
2134 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DICT)) {
2135 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OF, &_inner_error0_);
2136 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2137 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2138 				g_propagate_error (error, _inner_error0_);
2139 				_vala_code_node_unref0 (sym);
2140 				_vala_iterable_unref0 (type_arg_list);
2141 				return NULL;
2142 			} else {
2143 				_vala_code_node_unref0 (sym);
2144 				_vala_iterable_unref0 (type_arg_list);
2145 				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);
2146 				g_clear_error (&_inner_error0_);
2147 				return NULL;
2148 			}
2149 		}
2150 		vala_genie_parser_prev (self);
2151 		is_dict = TRUE;
2152 	}
2153 	if (!is_dynamic) {
2154 		_tmp9_ = value_owned == owned_by_default;
2155 	} else {
2156 		_tmp9_ = FALSE;
2157 	}
2158 	if (_tmp9_) {
2159 		_tmp8_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_VOID);
2160 	} else {
2161 		_tmp8_ = FALSE;
2162 	}
2163 	if (_tmp8_) {
2164 		ValaSourceLocation _tmp10_;
2165 		ValaSourceReference* _tmp11_;
2166 		ValaSourceReference* _tmp12_;
2167 		ValaVoidType* _tmp13_;
2168 		_tmp10_ = begin;
2169 		_tmp11_ = vala_genie_parser_get_src (self, &_tmp10_);
2170 		_tmp12_ = _tmp11_;
2171 		_tmp13_ = vala_void_type_new (_tmp12_);
2172 		_vala_code_node_unref0 (type);
2173 		type = (ValaDataType*) _tmp13_;
2174 		_vala_source_reference_unref0 (_tmp12_);
2175 	} else {
2176 		ValaList* _tmp37_ = NULL;
2177 		ValaList* _tmp38_;
2178 		ValaList* _tmp39_;
2179 		ValaUnresolvedSymbol* _tmp40_;
2180 		ValaSourceLocation _tmp41_;
2181 		ValaSourceReference* _tmp42_;
2182 		ValaSourceReference* _tmp43_;
2183 		ValaUnresolvedType* _tmp44_;
2184 		ValaList* _tmp45_;
2185 		if (is_list) {
2186 			ValaUnresolvedSymbol* sym_parent = NULL;
2187 			ValaSourceLocation _tmp14_;
2188 			ValaSourceReference* _tmp15_;
2189 			ValaSourceReference* _tmp16_;
2190 			ValaUnresolvedSymbol* _tmp17_;
2191 			ValaUnresolvedSymbol* _tmp18_;
2192 			ValaUnresolvedSymbol* _tmp19_;
2193 			ValaSourceLocation _tmp20_;
2194 			ValaSourceReference* _tmp21_;
2195 			ValaSourceReference* _tmp22_;
2196 			ValaUnresolvedSymbol* _tmp23_;
2197 			_tmp14_ = begin;
2198 			_tmp15_ = vala_genie_parser_get_src (self, &_tmp14_);
2199 			_tmp16_ = _tmp15_;
2200 			_tmp17_ = vala_unresolved_symbol_new (NULL, "Gee", _tmp16_);
2201 			_tmp18_ = _tmp17_;
2202 			_vala_source_reference_unref0 (_tmp16_);
2203 			sym_parent = _tmp18_;
2204 			_tmp19_ = sym_parent;
2205 			_tmp20_ = begin;
2206 			_tmp21_ = vala_genie_parser_get_src (self, &_tmp20_);
2207 			_tmp22_ = _tmp21_;
2208 			_tmp23_ = vala_unresolved_symbol_new (_tmp19_, "ArrayList", _tmp22_);
2209 			_vala_code_node_unref0 (sym);
2210 			sym = _tmp23_;
2211 			_vala_source_reference_unref0 (_tmp22_);
2212 			_vala_code_node_unref0 (sym_parent);
2213 		} else {
2214 			if (is_dict) {
2215 				ValaUnresolvedSymbol* sym_parent = NULL;
2216 				ValaSourceLocation _tmp24_;
2217 				ValaSourceReference* _tmp25_;
2218 				ValaSourceReference* _tmp26_;
2219 				ValaUnresolvedSymbol* _tmp27_;
2220 				ValaUnresolvedSymbol* _tmp28_;
2221 				ValaUnresolvedSymbol* _tmp29_;
2222 				ValaSourceLocation _tmp30_;
2223 				ValaSourceReference* _tmp31_;
2224 				ValaSourceReference* _tmp32_;
2225 				ValaUnresolvedSymbol* _tmp33_;
2226 				_tmp24_ = begin;
2227 				_tmp25_ = vala_genie_parser_get_src (self, &_tmp24_);
2228 				_tmp26_ = _tmp25_;
2229 				_tmp27_ = vala_unresolved_symbol_new (NULL, "Gee", _tmp26_);
2230 				_tmp28_ = _tmp27_;
2231 				_vala_source_reference_unref0 (_tmp26_);
2232 				sym_parent = _tmp28_;
2233 				_tmp29_ = sym_parent;
2234 				_tmp30_ = begin;
2235 				_tmp31_ = vala_genie_parser_get_src (self, &_tmp30_);
2236 				_tmp32_ = _tmp31_;
2237 				_tmp33_ = vala_unresolved_symbol_new (_tmp29_, "HashMap", _tmp32_);
2238 				_vala_code_node_unref0 (sym);
2239 				sym = _tmp33_;
2240 				_vala_source_reference_unref0 (_tmp32_);
2241 				_vala_code_node_unref0 (sym_parent);
2242 			} else {
2243 				ValaUnresolvedSymbol* _tmp34_ = NULL;
2244 				ValaUnresolvedSymbol* _tmp35_;
2245 				ValaUnresolvedSymbol* _tmp36_;
2246 				_tmp35_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
2247 				_tmp34_ = _tmp35_;
2248 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
2249 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2250 						g_propagate_error (error, _inner_error0_);
2251 						_vala_code_node_unref0 (type);
2252 						_vala_code_node_unref0 (sym);
2253 						_vala_iterable_unref0 (type_arg_list);
2254 						return NULL;
2255 					} else {
2256 						_vala_code_node_unref0 (type);
2257 						_vala_code_node_unref0 (sym);
2258 						_vala_iterable_unref0 (type_arg_list);
2259 						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);
2260 						g_clear_error (&_inner_error0_);
2261 						return NULL;
2262 					}
2263 				}
2264 				_tmp36_ = _tmp34_;
2265 				_tmp34_ = NULL;
2266 				_vala_code_node_unref0 (sym);
2267 				sym = _tmp36_;
2268 				_vala_code_node_unref0 (_tmp34_);
2269 			}
2270 		}
2271 		_tmp38_ = vala_genie_parser_parse_type_argument_list (self, FALSE, &_inner_error0_);
2272 		_tmp37_ = _tmp38_;
2273 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2274 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2275 				g_propagate_error (error, _inner_error0_);
2276 				_vala_code_node_unref0 (type);
2277 				_vala_code_node_unref0 (sym);
2278 				_vala_iterable_unref0 (type_arg_list);
2279 				return NULL;
2280 			} else {
2281 				_vala_code_node_unref0 (type);
2282 				_vala_code_node_unref0 (sym);
2283 				_vala_iterable_unref0 (type_arg_list);
2284 				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);
2285 				g_clear_error (&_inner_error0_);
2286 				return NULL;
2287 			}
2288 		}
2289 		_tmp39_ = _tmp37_;
2290 		_tmp37_ = NULL;
2291 		_vala_iterable_unref0 (type_arg_list);
2292 		type_arg_list = _tmp39_;
2293 		_tmp40_ = sym;
2294 		_tmp41_ = begin;
2295 		_tmp42_ = vala_genie_parser_get_src (self, &_tmp41_);
2296 		_tmp43_ = _tmp42_;
2297 		_tmp44_ = vala_unresolved_type_new_from_symbol (_tmp40_, _tmp43_);
2298 		_vala_code_node_unref0 (type);
2299 		type = (ValaDataType*) _tmp44_;
2300 		_vala_source_reference_unref0 (_tmp43_);
2301 		_tmp45_ = type_arg_list;
2302 		if (_tmp45_ != NULL) {
2303 			{
2304 				ValaList* _type_arg_list = NULL;
2305 				ValaList* _tmp46_;
2306 				ValaList* _tmp47_;
2307 				gint _type_arg_size = 0;
2308 				ValaList* _tmp48_;
2309 				gint _tmp49_;
2310 				gint _tmp50_;
2311 				gint _type_arg_index = 0;
2312 				_tmp46_ = type_arg_list;
2313 				_tmp47_ = _vala_iterable_ref0 (_tmp46_);
2314 				_type_arg_list = _tmp47_;
2315 				_tmp48_ = _type_arg_list;
2316 				_tmp49_ = vala_collection_get_size ((ValaCollection*) _tmp48_);
2317 				_tmp50_ = _tmp49_;
2318 				_type_arg_size = _tmp50_;
2319 				_type_arg_index = -1;
2320 				while (TRUE) {
2321 					gint _tmp51_;
2322 					gint _tmp52_;
2323 					ValaDataType* type_arg = NULL;
2324 					ValaList* _tmp53_;
2325 					gpointer _tmp54_;
2326 					ValaDataType* _tmp55_;
2327 					ValaDataType* _tmp56_;
2328 					_type_arg_index = _type_arg_index + 1;
2329 					_tmp51_ = _type_arg_index;
2330 					_tmp52_ = _type_arg_size;
2331 					if (!(_tmp51_ < _tmp52_)) {
2332 						break;
2333 					}
2334 					_tmp53_ = _type_arg_list;
2335 					_tmp54_ = vala_list_get (_tmp53_, _type_arg_index);
2336 					type_arg = (ValaDataType*) _tmp54_;
2337 					_tmp55_ = type;
2338 					_tmp56_ = type_arg;
2339 					vala_data_type_add_type_argument (_tmp55_, _tmp56_);
2340 					_vala_code_node_unref0 (type_arg);
2341 				}
2342 				_vala_iterable_unref0 (_type_arg_list);
2343 			}
2344 		}
2345 		_vala_iterable_unref0 (_tmp37_);
2346 	}
2347 	while (TRUE) {
2348 		ValaDataType* _tmp57_;
2349 		ValaSourceLocation _tmp58_;
2350 		ValaSourceReference* _tmp59_;
2351 		ValaSourceReference* _tmp60_;
2352 		ValaPointerType* _tmp61_;
2353 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_STAR)) {
2354 			break;
2355 		}
2356 		_tmp57_ = type;
2357 		_tmp58_ = begin;
2358 		_tmp59_ = vala_genie_parser_get_src (self, &_tmp58_);
2359 		_tmp60_ = _tmp59_;
2360 		_tmp61_ = vala_pointer_type_new (_tmp57_, _tmp60_);
2361 		_vala_code_node_unref0 (type);
2362 		type = (ValaDataType*) _tmp61_;
2363 		_vala_source_reference_unref0 (_tmp60_);
2364 	}
2365 	_tmp62_ = type;
2366 	if (!VALA_IS_POINTER_TYPE (_tmp62_)) {
2367 		ValaDataType* _tmp63_;
2368 		_tmp63_ = type;
2369 		vala_data_type_set_nullable (_tmp63_, vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INTERR));
2370 	}
2371 	if (is_array) {
2372 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET)) {
2373 			ValaDataType* _tmp64_;
2374 			ValaDataType* _tmp65_;
2375 			ValaSourceLocation _tmp66_;
2376 			ValaSourceReference* _tmp67_;
2377 			ValaSourceReference* _tmp68_;
2378 			ValaArrayType* _tmp69_;
2379 			ValaDataType* _tmp70_;
2380 			_tmp64_ = type;
2381 			vala_data_type_set_value_owned (_tmp64_, TRUE);
2382 			_tmp65_ = type;
2383 			_tmp66_ = begin;
2384 			_tmp67_ = vala_genie_parser_get_src (self, &_tmp66_);
2385 			_tmp68_ = _tmp67_;
2386 			_tmp69_ = vala_array_type_new (_tmp65_, 1, _tmp68_);
2387 			_vala_code_node_unref0 (type);
2388 			type = (ValaDataType*) _tmp69_;
2389 			_vala_source_reference_unref0 (_tmp68_);
2390 			_tmp70_ = type;
2391 			vala_data_type_set_nullable (_tmp70_, vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INTERR));
2392 		} else {
2393 			vala_genie_parser_prev (self);
2394 			while (TRUE) {
2395 				gboolean invalid_array = FALSE;
2396 				gint array_rank = 0;
2397 				ValaDataType* _tmp76_;
2398 				ValaArrayType* array_type = NULL;
2399 				ValaDataType* _tmp77_;
2400 				ValaSourceLocation _tmp78_;
2401 				ValaSourceReference* _tmp79_;
2402 				ValaSourceReference* _tmp80_;
2403 				ValaArrayType* _tmp81_;
2404 				ValaArrayType* _tmp82_;
2405 				ValaArrayType* _tmp83_;
2406 				ValaArrayType* _tmp84_;
2407 				ValaArrayType* _tmp85_;
2408 				ValaDataType* _tmp86_;
2409 				if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET)) {
2410 					break;
2411 				}
2412 				invalid_array = FALSE;
2413 				array_rank = 0;
2414 				{
2415 					gboolean _tmp71_ = FALSE;
2416 					_tmp71_ = TRUE;
2417 					while (TRUE) {
2418 						gint _tmp72_;
2419 						gboolean _tmp73_ = FALSE;
2420 						if (!_tmp71_) {
2421 							if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
2422 								break;
2423 							}
2424 						}
2425 						_tmp71_ = FALSE;
2426 						_tmp72_ = array_rank;
2427 						array_rank = _tmp72_ + 1;
2428 						if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_COMMA) {
2429 							_tmp73_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET;
2430 						} else {
2431 							_tmp73_ = FALSE;
2432 						}
2433 						if (_tmp73_) {
2434 							ValaExpression* _tmp74_;
2435 							ValaExpression* _tmp75_;
2436 							_tmp74_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
2437 							_tmp75_ = _tmp74_;
2438 							_vala_code_node_unref0 (_tmp75_);
2439 							if (G_UNLIKELY (_inner_error0_ != NULL)) {
2440 								if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2441 									g_propagate_error (error, _inner_error0_);
2442 									_vala_code_node_unref0 (type);
2443 									_vala_code_node_unref0 (sym);
2444 									_vala_iterable_unref0 (type_arg_list);
2445 									return NULL;
2446 								} else {
2447 									_vala_code_node_unref0 (type);
2448 									_vala_code_node_unref0 (sym);
2449 									_vala_iterable_unref0 (type_arg_list);
2450 									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);
2451 									g_clear_error (&_inner_error0_);
2452 									return NULL;
2453 								}
2454 							}
2455 							invalid_array = TRUE;
2456 						}
2457 					}
2458 				}
2459 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET, &_inner_error0_);
2460 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
2461 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2462 						g_propagate_error (error, _inner_error0_);
2463 						_vala_code_node_unref0 (type);
2464 						_vala_code_node_unref0 (sym);
2465 						_vala_iterable_unref0 (type_arg_list);
2466 						return NULL;
2467 					} else {
2468 						_vala_code_node_unref0 (type);
2469 						_vala_code_node_unref0 (sym);
2470 						_vala_iterable_unref0 (type_arg_list);
2471 						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);
2472 						g_clear_error (&_inner_error0_);
2473 						return NULL;
2474 					}
2475 				}
2476 				_tmp76_ = type;
2477 				vala_data_type_set_value_owned (_tmp76_, TRUE);
2478 				_tmp77_ = type;
2479 				_tmp78_ = begin;
2480 				_tmp79_ = vala_genie_parser_get_src (self, &_tmp78_);
2481 				_tmp80_ = _tmp79_;
2482 				_tmp81_ = vala_array_type_new (_tmp77_, array_rank, _tmp80_);
2483 				_tmp82_ = _tmp81_;
2484 				_vala_source_reference_unref0 (_tmp80_);
2485 				array_type = _tmp82_;
2486 				_tmp83_ = array_type;
2487 				vala_data_type_set_nullable ((ValaDataType*) _tmp83_, vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INTERR));
2488 				_tmp84_ = array_type;
2489 				vala_array_type_set_invalid_syntax (_tmp84_, invalid_array);
2490 				_tmp85_ = array_type;
2491 				_tmp86_ = _vala_code_node_ref0 ((ValaDataType*) _tmp85_);
2492 				_vala_code_node_unref0 (type);
2493 				type = _tmp86_;
2494 				_vala_code_node_unref0 (array_type);
2495 			}
2496 		}
2497 	}
2498 	_tmp87_ = type;
2499 	if (VALA_IS_POINTER_TYPE (_tmp87_)) {
2500 		value_owned = FALSE;
2501 	}
2502 	_tmp88_ = type;
2503 	vala_data_type_set_is_dynamic (_tmp88_, is_dynamic);
2504 	_tmp89_ = type;
2505 	vala_data_type_set_value_owned (_tmp89_, value_owned);
2506 	result = type;
2507 	_vala_code_node_unref0 (sym);
2508 	_vala_iterable_unref0 (type_arg_list);
2509 	return result;
2510 }
2511 
2512 static ValaDataType*
vala_genie_parser_parse_inline_array_type(ValaGenieParser * self,ValaDataType * type,GError ** error)2513 vala_genie_parser_parse_inline_array_type (ValaGenieParser* self,
2514                                            ValaDataType* type,
2515                                            GError** error)
2516 {
2517 	ValaSourceLocation begin = {0};
2518 	ValaSourceLocation _tmp0_ = {0};
2519 	gboolean _tmp1_ = FALSE;
2520 	ValaDataType* _tmp18_;
2521 	GError* _inner_error0_ = NULL;
2522 	ValaDataType* result = NULL;
2523 	g_return_val_if_fail (self != NULL, NULL);
2524 	vala_genie_parser_get_location (self, &_tmp0_);
2525 	begin = _tmp0_;
2526 	if (type != NULL) {
2527 		_tmp1_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET);
2528 	} else {
2529 		_tmp1_ = FALSE;
2530 	}
2531 	if (_tmp1_) {
2532 		ValaExpression* array_length = NULL;
2533 		ValaArrayType* array_type = NULL;
2534 		ValaSourceLocation _tmp5_;
2535 		ValaSourceReference* _tmp6_;
2536 		ValaSourceReference* _tmp7_;
2537 		ValaArrayType* _tmp8_;
2538 		ValaArrayType* _tmp9_;
2539 		ValaArrayType* _tmp10_;
2540 		ValaExpression* _tmp11_;
2541 		ValaArrayType* _tmp15_;
2542 		gboolean _tmp16_;
2543 		gboolean _tmp17_;
2544 		array_length = NULL;
2545 		if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET) {
2546 			ValaExpression* _tmp2_ = NULL;
2547 			ValaExpression* _tmp3_;
2548 			ValaExpression* _tmp4_;
2549 			_tmp3_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
2550 			_tmp2_ = _tmp3_;
2551 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2552 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2553 					g_propagate_error (error, _inner_error0_);
2554 					_vala_code_node_unref0 (array_length);
2555 					return NULL;
2556 				} else {
2557 					_vala_code_node_unref0 (array_length);
2558 					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);
2559 					g_clear_error (&_inner_error0_);
2560 					return NULL;
2561 				}
2562 			}
2563 			_tmp4_ = _tmp2_;
2564 			_tmp2_ = NULL;
2565 			_vala_code_node_unref0 (array_length);
2566 			array_length = _tmp4_;
2567 			_vala_code_node_unref0 (_tmp2_);
2568 		}
2569 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET, &_inner_error0_);
2570 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2571 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2572 				g_propagate_error (error, _inner_error0_);
2573 				_vala_code_node_unref0 (array_length);
2574 				return NULL;
2575 			} else {
2576 				_vala_code_node_unref0 (array_length);
2577 				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);
2578 				g_clear_error (&_inner_error0_);
2579 				return NULL;
2580 			}
2581 		}
2582 		_tmp5_ = begin;
2583 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
2584 		_tmp7_ = _tmp6_;
2585 		_tmp8_ = vala_array_type_new (type, 1, _tmp7_);
2586 		_tmp9_ = _tmp8_;
2587 		_vala_source_reference_unref0 (_tmp7_);
2588 		array_type = _tmp9_;
2589 		_tmp10_ = array_type;
2590 		vala_array_type_set_inline_allocated (_tmp10_, TRUE);
2591 		_tmp11_ = array_length;
2592 		if (_tmp11_ != NULL) {
2593 			ValaArrayType* _tmp12_;
2594 			ValaArrayType* _tmp13_;
2595 			ValaExpression* _tmp14_;
2596 			_tmp12_ = array_type;
2597 			vala_array_type_set_fixed_length (_tmp12_, TRUE);
2598 			_tmp13_ = array_type;
2599 			_tmp14_ = array_length;
2600 			vala_array_type_set_length (_tmp13_, _tmp14_);
2601 		}
2602 		_tmp15_ = array_type;
2603 		_tmp16_ = vala_data_type_get_value_owned (type);
2604 		_tmp17_ = _tmp16_;
2605 		vala_data_type_set_value_owned ((ValaDataType*) _tmp15_, _tmp17_);
2606 		result = (ValaDataType*) array_type;
2607 		_vala_code_node_unref0 (array_length);
2608 		return result;
2609 	}
2610 	_tmp18_ = _vala_code_node_ref0 (type);
2611 	result = _tmp18_;
2612 	return result;
2613 }
2614 
2615 static ValaList*
vala_genie_parser_parse_argument_list(ValaGenieParser * self,GError ** error)2616 vala_genie_parser_parse_argument_list (ValaGenieParser* self,
2617                                        GError** error)
2618 {
2619 	ValaArrayList* list = NULL;
2620 	GEqualFunc _tmp0_;
2621 	ValaArrayList* _tmp1_;
2622 	GError* _inner_error0_ = NULL;
2623 	ValaList* result = NULL;
2624 	g_return_val_if_fail (self != NULL, NULL);
2625 	_tmp0_ = g_direct_equal;
2626 	_tmp1_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
2627 	list = _tmp1_;
2628 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
2629 		{
2630 			gboolean _tmp2_ = FALSE;
2631 			_tmp2_ = TRUE;
2632 			while (TRUE) {
2633 				ValaExpression* _tmp3_ = NULL;
2634 				ValaExpression* _tmp4_;
2635 				ValaArrayList* _tmp5_;
2636 				if (!_tmp2_) {
2637 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
2638 						break;
2639 					}
2640 				}
2641 				_tmp2_ = FALSE;
2642 				_tmp4_ = vala_genie_parser_parse_argument (self, &_inner_error0_);
2643 				_tmp3_ = _tmp4_;
2644 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
2645 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2646 						g_propagate_error (error, _inner_error0_);
2647 						_vala_iterable_unref0 (list);
2648 						return NULL;
2649 					} else {
2650 						_vala_iterable_unref0 (list);
2651 						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);
2652 						g_clear_error (&_inner_error0_);
2653 						return NULL;
2654 					}
2655 				}
2656 				_tmp5_ = list;
2657 				vala_collection_add ((ValaCollection*) _tmp5_, _tmp3_);
2658 				_vala_code_node_unref0 (_tmp3_);
2659 			}
2660 		}
2661 	}
2662 	result = (ValaList*) list;
2663 	return result;
2664 }
2665 
2666 static ValaExpression*
vala_genie_parser_parse_argument(ValaGenieParser * self,GError ** error)2667 vala_genie_parser_parse_argument (ValaGenieParser* self,
2668                                   GError** error)
2669 {
2670 	ValaSourceLocation begin = {0};
2671 	ValaSourceLocation _tmp0_ = {0};
2672 	GError* _inner_error0_ = NULL;
2673 	ValaExpression* result = NULL;
2674 	g_return_val_if_fail (self != NULL, NULL);
2675 	vala_genie_parser_get_location (self, &_tmp0_);
2676 	begin = _tmp0_;
2677 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_REF)) {
2678 		ValaExpression* inner = NULL;
2679 		ValaExpression* _tmp1_;
2680 		ValaExpression* _tmp2_;
2681 		ValaSourceLocation _tmp3_;
2682 		ValaSourceReference* _tmp4_;
2683 		ValaSourceReference* _tmp5_;
2684 		ValaUnaryExpression* _tmp6_;
2685 		ValaExpression* _tmp7_;
2686 		_tmp1_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
2687 		inner = _tmp1_;
2688 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
2689 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2690 				g_propagate_error (error, _inner_error0_);
2691 				return NULL;
2692 			} else {
2693 				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);
2694 				g_clear_error (&_inner_error0_);
2695 				return NULL;
2696 			}
2697 		}
2698 		_tmp2_ = inner;
2699 		_tmp3_ = begin;
2700 		_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
2701 		_tmp5_ = _tmp4_;
2702 		_tmp6_ = vala_unary_expression_new (VALA_UNARY_OPERATOR_REF, _tmp2_, _tmp5_);
2703 		_tmp7_ = (ValaExpression*) _tmp6_;
2704 		_vala_source_reference_unref0 (_tmp5_);
2705 		result = _tmp7_;
2706 		_vala_code_node_unref0 (inner);
2707 		return result;
2708 	} else {
2709 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OUT)) {
2710 			ValaExpression* inner = NULL;
2711 			ValaExpression* _tmp8_;
2712 			ValaExpression* _tmp9_;
2713 			ValaSourceLocation _tmp10_;
2714 			ValaSourceReference* _tmp11_;
2715 			ValaSourceReference* _tmp12_;
2716 			ValaUnaryExpression* _tmp13_;
2717 			ValaExpression* _tmp14_;
2718 			_tmp8_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
2719 			inner = _tmp8_;
2720 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2721 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2722 					g_propagate_error (error, _inner_error0_);
2723 					return NULL;
2724 				} else {
2725 					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);
2726 					g_clear_error (&_inner_error0_);
2727 					return NULL;
2728 				}
2729 			}
2730 			_tmp9_ = inner;
2731 			_tmp10_ = begin;
2732 			_tmp11_ = vala_genie_parser_get_src (self, &_tmp10_);
2733 			_tmp12_ = _tmp11_;
2734 			_tmp13_ = vala_unary_expression_new (VALA_UNARY_OPERATOR_OUT, _tmp9_, _tmp12_);
2735 			_tmp14_ = (ValaExpression*) _tmp13_;
2736 			_vala_source_reference_unref0 (_tmp12_);
2737 			result = _tmp14_;
2738 			_vala_code_node_unref0 (inner);
2739 			return result;
2740 		} else {
2741 			ValaExpression* expr = NULL;
2742 			ValaExpression* _tmp15_;
2743 			ValaMemberAccess* ma = NULL;
2744 			ValaExpression* _tmp16_;
2745 			ValaMemberAccess* _tmp17_;
2746 			gboolean _tmp18_ = FALSE;
2747 			gboolean _tmp19_ = FALSE;
2748 			ValaMemberAccess* _tmp20_;
2749 			_tmp15_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
2750 			expr = _tmp15_;
2751 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2752 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2753 					g_propagate_error (error, _inner_error0_);
2754 					return NULL;
2755 				} else {
2756 					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);
2757 					g_clear_error (&_inner_error0_);
2758 					return NULL;
2759 				}
2760 			}
2761 			_tmp16_ = expr;
2762 			_tmp17_ = _vala_code_node_ref0 (VALA_IS_MEMBER_ACCESS (_tmp16_) ? ((ValaMemberAccess*) _tmp16_) : NULL);
2763 			ma = _tmp17_;
2764 			_tmp20_ = ma;
2765 			if (_tmp20_ != NULL) {
2766 				ValaMemberAccess* _tmp21_;
2767 				ValaExpression* _tmp22_;
2768 				ValaExpression* _tmp23_;
2769 				_tmp21_ = ma;
2770 				_tmp22_ = vala_member_access_get_inner (_tmp21_);
2771 				_tmp23_ = _tmp22_;
2772 				_tmp19_ = _tmp23_ == NULL;
2773 			} else {
2774 				_tmp19_ = FALSE;
2775 			}
2776 			if (_tmp19_) {
2777 				_tmp18_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON);
2778 			} else {
2779 				_tmp18_ = FALSE;
2780 			}
2781 			if (_tmp18_) {
2782 				ValaExpression* _tmp24_ = NULL;
2783 				ValaExpression* _tmp25_;
2784 				ValaExpression* _tmp26_;
2785 				ValaMemberAccess* _tmp27_;
2786 				const gchar* _tmp28_;
2787 				const gchar* _tmp29_;
2788 				ValaExpression* _tmp30_;
2789 				ValaSourceLocation _tmp31_;
2790 				ValaSourceReference* _tmp32_;
2791 				ValaSourceReference* _tmp33_;
2792 				ValaNamedArgument* _tmp34_;
2793 				ValaExpression* _tmp35_;
2794 				_tmp25_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
2795 				_tmp24_ = _tmp25_;
2796 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
2797 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2798 						g_propagate_error (error, _inner_error0_);
2799 						_vala_code_node_unref0 (ma);
2800 						_vala_code_node_unref0 (expr);
2801 						return NULL;
2802 					} else {
2803 						_vala_code_node_unref0 (ma);
2804 						_vala_code_node_unref0 (expr);
2805 						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);
2806 						g_clear_error (&_inner_error0_);
2807 						return NULL;
2808 					}
2809 				}
2810 				_tmp26_ = _tmp24_;
2811 				_tmp24_ = NULL;
2812 				_vala_code_node_unref0 (expr);
2813 				expr = _tmp26_;
2814 				_tmp27_ = ma;
2815 				_tmp28_ = vala_member_access_get_member_name (_tmp27_);
2816 				_tmp29_ = _tmp28_;
2817 				_tmp30_ = expr;
2818 				_tmp31_ = begin;
2819 				_tmp32_ = vala_genie_parser_get_src (self, &_tmp31_);
2820 				_tmp33_ = _tmp32_;
2821 				_tmp34_ = vala_named_argument_new (_tmp29_, _tmp30_, _tmp33_);
2822 				_tmp35_ = (ValaExpression*) _tmp34_;
2823 				_vala_source_reference_unref0 (_tmp33_);
2824 				result = _tmp35_;
2825 				_vala_code_node_unref0 (_tmp24_);
2826 				_vala_code_node_unref0 (ma);
2827 				_vala_code_node_unref0 (expr);
2828 				return result;
2829 			} else {
2830 				result = expr;
2831 				_vala_code_node_unref0 (ma);
2832 				return result;
2833 			}
2834 			_vala_code_node_unref0 (ma);
2835 			_vala_code_node_unref0 (expr);
2836 		}
2837 	}
2838 }
2839 
2840 static ValaExpression*
vala_genie_parser_parse_primary_expression(ValaGenieParser * self,GError ** error)2841 vala_genie_parser_parse_primary_expression (ValaGenieParser* self,
2842                                             GError** error)
2843 {
2844 	ValaSourceLocation begin = {0};
2845 	ValaSourceLocation _tmp0_ = {0};
2846 	ValaExpression* expr = NULL;
2847 	gboolean found = FALSE;
2848 	GError* _inner_error0_ = NULL;
2849 	ValaExpression* result = NULL;
2850 	g_return_val_if_fail (self != NULL, NULL);
2851 	vala_genie_parser_get_location (self, &_tmp0_);
2852 	begin = _tmp0_;
2853 	switch (vala_genie_parser_current (self)) {
2854 		case VALA_GENIE_TOKEN_TYPE_TRUE:
2855 		case VALA_GENIE_TOKEN_TYPE_FALSE:
2856 		case VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL:
2857 		case VALA_GENIE_TOKEN_TYPE_REAL_LITERAL:
2858 		case VALA_GENIE_TOKEN_TYPE_CHARACTER_LITERAL:
2859 		case VALA_GENIE_TOKEN_TYPE_REGEX_LITERAL:
2860 		case VALA_GENIE_TOKEN_TYPE_STRING_LITERAL:
2861 		case VALA_GENIE_TOKEN_TYPE_TEMPLATE_STRING_LITERAL:
2862 		case VALA_GENIE_TOKEN_TYPE_VERBATIM_STRING_LITERAL:
2863 		case VALA_GENIE_TOKEN_TYPE_NULL:
2864 		{
2865 			ValaExpression* _tmp1_ = NULL;
2866 			ValaExpression* _tmp2_;
2867 			ValaExpression* _tmp3_;
2868 			_tmp2_ = vala_genie_parser_parse_literal (self, &_inner_error0_);
2869 			_tmp1_ = _tmp2_;
2870 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2871 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2872 					g_propagate_error (error, _inner_error0_);
2873 					_vala_code_node_unref0 (expr);
2874 					return NULL;
2875 				} else {
2876 					_vala_code_node_unref0 (expr);
2877 					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);
2878 					g_clear_error (&_inner_error0_);
2879 					return NULL;
2880 				}
2881 			}
2882 			_tmp3_ = _tmp1_;
2883 			_tmp1_ = NULL;
2884 			_vala_code_node_unref0 (expr);
2885 			expr = _tmp3_;
2886 			_vala_code_node_unref0 (_tmp1_);
2887 			break;
2888 		}
2889 		case VALA_GENIE_TOKEN_TYPE_ASSERT:
2890 		{
2891 			ValaExpression* _tmp4_ = NULL;
2892 			ValaExpression* _tmp5_;
2893 			ValaExpression* _tmp6_;
2894 			_tmp5_ = vala_genie_parser_parse_assert_expression (self, &_inner_error0_);
2895 			_tmp4_ = _tmp5_;
2896 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2897 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2898 					g_propagate_error (error, _inner_error0_);
2899 					_vala_code_node_unref0 (expr);
2900 					return NULL;
2901 				} else {
2902 					_vala_code_node_unref0 (expr);
2903 					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);
2904 					g_clear_error (&_inner_error0_);
2905 					return NULL;
2906 				}
2907 			}
2908 			_tmp6_ = _tmp4_;
2909 			_tmp4_ = NULL;
2910 			result = _tmp6_;
2911 			_vala_code_node_unref0 (_tmp4_);
2912 			_vala_code_node_unref0 (expr);
2913 			return result;
2914 		}
2915 		case VALA_GENIE_TOKEN_TYPE_OPEN_BRACE:
2916 		{
2917 			ValaInitializerList* _tmp7_ = NULL;
2918 			ValaInitializerList* _tmp8_;
2919 			ValaInitializerList* _tmp9_;
2920 			_tmp8_ = vala_genie_parser_parse_initializer (self, &_inner_error0_);
2921 			_tmp7_ = _tmp8_;
2922 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2923 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2924 					g_propagate_error (error, _inner_error0_);
2925 					_vala_code_node_unref0 (expr);
2926 					return NULL;
2927 				} else {
2928 					_vala_code_node_unref0 (expr);
2929 					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);
2930 					g_clear_error (&_inner_error0_);
2931 					return NULL;
2932 				}
2933 			}
2934 			_tmp9_ = _tmp7_;
2935 			_tmp7_ = NULL;
2936 			_vala_code_node_unref0 (expr);
2937 			expr = (ValaExpression*) _tmp9_;
2938 			_vala_code_node_unref0 (_tmp7_);
2939 			break;
2940 		}
2941 		case VALA_GENIE_TOKEN_TYPE_OPEN_PARENS:
2942 		{
2943 			ValaExpression* _tmp10_ = NULL;
2944 			ValaExpression* _tmp11_;
2945 			ValaExpression* _tmp12_;
2946 			_tmp11_ = vala_genie_parser_parse_tuple (self, &_inner_error0_);
2947 			_tmp10_ = _tmp11_;
2948 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2949 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2950 					g_propagate_error (error, _inner_error0_);
2951 					_vala_code_node_unref0 (expr);
2952 					return NULL;
2953 				} else {
2954 					_vala_code_node_unref0 (expr);
2955 					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);
2956 					g_clear_error (&_inner_error0_);
2957 					return NULL;
2958 				}
2959 			}
2960 			_tmp12_ = _tmp10_;
2961 			_tmp10_ = NULL;
2962 			_vala_code_node_unref0 (expr);
2963 			expr = _tmp12_;
2964 			_vala_code_node_unref0 (_tmp10_);
2965 			break;
2966 		}
2967 		case VALA_GENIE_TOKEN_TYPE_OPEN_REGEX_LITERAL:
2968 		{
2969 			ValaExpression* _tmp13_ = NULL;
2970 			ValaExpression* _tmp14_;
2971 			ValaExpression* _tmp15_;
2972 			_tmp14_ = vala_genie_parser_parse_regex_literal (self, &_inner_error0_);
2973 			_tmp13_ = _tmp14_;
2974 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
2975 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
2976 					g_propagate_error (error, _inner_error0_);
2977 					_vala_code_node_unref0 (expr);
2978 					return NULL;
2979 				} else {
2980 					_vala_code_node_unref0 (expr);
2981 					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);
2982 					g_clear_error (&_inner_error0_);
2983 					return NULL;
2984 				}
2985 			}
2986 			_tmp15_ = _tmp13_;
2987 			_tmp13_ = NULL;
2988 			_vala_code_node_unref0 (expr);
2989 			expr = _tmp15_;
2990 			_vala_code_node_unref0 (_tmp13_);
2991 			break;
2992 		}
2993 		case VALA_GENIE_TOKEN_TYPE_OPEN_TEMPLATE:
2994 		{
2995 			ValaExpression* _tmp16_ = NULL;
2996 			ValaExpression* _tmp17_;
2997 			ValaExpression* _tmp18_;
2998 			_tmp17_ = vala_genie_parser_parse_template (self, &_inner_error0_);
2999 			_tmp16_ = _tmp17_;
3000 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3001 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3002 					g_propagate_error (error, _inner_error0_);
3003 					_vala_code_node_unref0 (expr);
3004 					return NULL;
3005 				} else {
3006 					_vala_code_node_unref0 (expr);
3007 					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);
3008 					g_clear_error (&_inner_error0_);
3009 					return NULL;
3010 				}
3011 			}
3012 			_tmp18_ = _tmp16_;
3013 			_tmp16_ = NULL;
3014 			_vala_code_node_unref0 (expr);
3015 			expr = _tmp18_;
3016 			_vala_code_node_unref0 (_tmp16_);
3017 			break;
3018 		}
3019 		case VALA_GENIE_TOKEN_TYPE_SELF:
3020 		{
3021 			ValaExpression* _tmp19_ = NULL;
3022 			ValaExpression* _tmp20_;
3023 			ValaExpression* _tmp21_;
3024 			_tmp20_ = vala_genie_parser_parse_this_access (self, &_inner_error0_);
3025 			_tmp19_ = _tmp20_;
3026 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3027 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3028 					g_propagate_error (error, _inner_error0_);
3029 					_vala_code_node_unref0 (expr);
3030 					return NULL;
3031 				} else {
3032 					_vala_code_node_unref0 (expr);
3033 					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);
3034 					g_clear_error (&_inner_error0_);
3035 					return NULL;
3036 				}
3037 			}
3038 			_tmp21_ = _tmp19_;
3039 			_tmp19_ = NULL;
3040 			_vala_code_node_unref0 (expr);
3041 			expr = _tmp21_;
3042 			_vala_code_node_unref0 (_tmp19_);
3043 			break;
3044 		}
3045 		case VALA_GENIE_TOKEN_TYPE_SUPER:
3046 		{
3047 			ValaExpression* _tmp22_ = NULL;
3048 			ValaExpression* _tmp23_;
3049 			ValaExpression* _tmp24_;
3050 			_tmp23_ = vala_genie_parser_parse_base_access (self, &_inner_error0_);
3051 			_tmp22_ = _tmp23_;
3052 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3053 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3054 					g_propagate_error (error, _inner_error0_);
3055 					_vala_code_node_unref0 (expr);
3056 					return NULL;
3057 				} else {
3058 					_vala_code_node_unref0 (expr);
3059 					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);
3060 					g_clear_error (&_inner_error0_);
3061 					return NULL;
3062 				}
3063 			}
3064 			_tmp24_ = _tmp22_;
3065 			_tmp22_ = NULL;
3066 			_vala_code_node_unref0 (expr);
3067 			expr = _tmp24_;
3068 			_vala_code_node_unref0 (_tmp22_);
3069 			break;
3070 		}
3071 		case VALA_GENIE_TOKEN_TYPE_NEW:
3072 		{
3073 			ValaExpression* _tmp25_ = NULL;
3074 			ValaExpression* _tmp26_;
3075 			ValaExpression* _tmp27_;
3076 			_tmp26_ = vala_genie_parser_parse_object_or_array_creation_expression (self, &_inner_error0_);
3077 			_tmp25_ = _tmp26_;
3078 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3079 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3080 					g_propagate_error (error, _inner_error0_);
3081 					_vala_code_node_unref0 (expr);
3082 					return NULL;
3083 				} else {
3084 					_vala_code_node_unref0 (expr);
3085 					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);
3086 					g_clear_error (&_inner_error0_);
3087 					return NULL;
3088 				}
3089 			}
3090 			_tmp27_ = _tmp25_;
3091 			_tmp25_ = NULL;
3092 			_vala_code_node_unref0 (expr);
3093 			expr = _tmp27_;
3094 			_vala_code_node_unref0 (_tmp25_);
3095 			break;
3096 		}
3097 		case VALA_GENIE_TOKEN_TYPE_PRINT:
3098 		{
3099 			ValaExpression* _tmp28_ = NULL;
3100 			ValaExpression* _tmp29_;
3101 			ValaExpression* _tmp30_;
3102 			_tmp29_ = vala_genie_parser_parse_print_expression (self, &_inner_error0_);
3103 			_tmp28_ = _tmp29_;
3104 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3105 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3106 					g_propagate_error (error, _inner_error0_);
3107 					_vala_code_node_unref0 (expr);
3108 					return NULL;
3109 				} else {
3110 					_vala_code_node_unref0 (expr);
3111 					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);
3112 					g_clear_error (&_inner_error0_);
3113 					return NULL;
3114 				}
3115 			}
3116 			_tmp30_ = _tmp28_;
3117 			_tmp28_ = NULL;
3118 			result = _tmp30_;
3119 			_vala_code_node_unref0 (_tmp28_);
3120 			_vala_code_node_unref0 (expr);
3121 			return result;
3122 		}
3123 		case VALA_GENIE_TOKEN_TYPE_SIZEOF:
3124 		{
3125 			ValaExpression* _tmp31_ = NULL;
3126 			ValaExpression* _tmp32_;
3127 			ValaExpression* _tmp33_;
3128 			_tmp32_ = vala_genie_parser_parse_sizeof_expression (self, &_inner_error0_);
3129 			_tmp31_ = _tmp32_;
3130 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3131 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3132 					g_propagate_error (error, _inner_error0_);
3133 					_vala_code_node_unref0 (expr);
3134 					return NULL;
3135 				} else {
3136 					_vala_code_node_unref0 (expr);
3137 					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);
3138 					g_clear_error (&_inner_error0_);
3139 					return NULL;
3140 				}
3141 			}
3142 			_tmp33_ = _tmp31_;
3143 			_tmp31_ = NULL;
3144 			_vala_code_node_unref0 (expr);
3145 			expr = _tmp33_;
3146 			_vala_code_node_unref0 (_tmp31_);
3147 			break;
3148 		}
3149 		case VALA_GENIE_TOKEN_TYPE_TYPEOF:
3150 		{
3151 			ValaExpression* _tmp34_ = NULL;
3152 			ValaExpression* _tmp35_;
3153 			ValaExpression* _tmp36_;
3154 			_tmp35_ = vala_genie_parser_parse_typeof_expression (self, &_inner_error0_);
3155 			_tmp34_ = _tmp35_;
3156 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3157 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3158 					g_propagate_error (error, _inner_error0_);
3159 					_vala_code_node_unref0 (expr);
3160 					return NULL;
3161 				} else {
3162 					_vala_code_node_unref0 (expr);
3163 					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);
3164 					g_clear_error (&_inner_error0_);
3165 					return NULL;
3166 				}
3167 			}
3168 			_tmp36_ = _tmp34_;
3169 			_tmp34_ = NULL;
3170 			_vala_code_node_unref0 (expr);
3171 			expr = _tmp36_;
3172 			_vala_code_node_unref0 (_tmp34_);
3173 			break;
3174 		}
3175 		case VALA_GENIE_TOKEN_TYPE_YIELD:
3176 		{
3177 			ValaExpression* _tmp37_ = NULL;
3178 			ValaExpression* _tmp38_;
3179 			ValaExpression* _tmp39_;
3180 			_tmp38_ = vala_genie_parser_parse_yield_expression (self, &_inner_error0_);
3181 			_tmp37_ = _tmp38_;
3182 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3183 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3184 					g_propagate_error (error, _inner_error0_);
3185 					_vala_code_node_unref0 (expr);
3186 					return NULL;
3187 				} else {
3188 					_vala_code_node_unref0 (expr);
3189 					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);
3190 					g_clear_error (&_inner_error0_);
3191 					return NULL;
3192 				}
3193 			}
3194 			_tmp39_ = _tmp37_;
3195 			_tmp37_ = NULL;
3196 			_vala_code_node_unref0 (expr);
3197 			expr = _tmp39_;
3198 			_vala_code_node_unref0 (_tmp37_);
3199 			break;
3200 		}
3201 		default:
3202 		{
3203 			ValaExpression* _tmp40_ = NULL;
3204 			ValaExpression* _tmp41_;
3205 			ValaExpression* _tmp42_;
3206 			_tmp41_ = vala_genie_parser_parse_simple_name (self, &_inner_error0_);
3207 			_tmp40_ = _tmp41_;
3208 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
3209 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3210 					g_propagate_error (error, _inner_error0_);
3211 					_vala_code_node_unref0 (expr);
3212 					return NULL;
3213 				} else {
3214 					_vala_code_node_unref0 (expr);
3215 					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);
3216 					g_clear_error (&_inner_error0_);
3217 					return NULL;
3218 				}
3219 			}
3220 			_tmp42_ = _tmp40_;
3221 			_tmp40_ = NULL;
3222 			_vala_code_node_unref0 (expr);
3223 			expr = _tmp42_;
3224 			_vala_code_node_unref0 (_tmp40_);
3225 			break;
3226 		}
3227 	}
3228 	found = TRUE;
3229 	while (TRUE) {
3230 		if (!found) {
3231 			break;
3232 		}
3233 		switch (vala_genie_parser_current (self)) {
3234 			case VALA_GENIE_TOKEN_TYPE_DOT:
3235 			{
3236 				ValaExpression* _tmp43_ = NULL;
3237 				ValaSourceLocation _tmp44_;
3238 				ValaExpression* _tmp45_;
3239 				ValaExpression* _tmp46_;
3240 				ValaExpression* _tmp47_;
3241 				_tmp44_ = begin;
3242 				_tmp45_ = expr;
3243 				_tmp46_ = vala_genie_parser_parse_member_access (self, &_tmp44_, _tmp45_, &_inner_error0_);
3244 				_tmp43_ = _tmp46_;
3245 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
3246 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3247 						g_propagate_error (error, _inner_error0_);
3248 						_vala_code_node_unref0 (expr);
3249 						return NULL;
3250 					} else {
3251 						_vala_code_node_unref0 (expr);
3252 						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);
3253 						g_clear_error (&_inner_error0_);
3254 						return NULL;
3255 					}
3256 				}
3257 				_tmp47_ = _tmp43_;
3258 				_tmp43_ = NULL;
3259 				_vala_code_node_unref0 (expr);
3260 				expr = _tmp47_;
3261 				_vala_code_node_unref0 (_tmp43_);
3262 				break;
3263 			}
3264 			case VALA_GENIE_TOKEN_TYPE_OP_PTR:
3265 			{
3266 				ValaExpression* _tmp48_ = NULL;
3267 				ValaSourceLocation _tmp49_;
3268 				ValaExpression* _tmp50_;
3269 				ValaExpression* _tmp51_;
3270 				ValaExpression* _tmp52_;
3271 				_tmp49_ = begin;
3272 				_tmp50_ = expr;
3273 				_tmp51_ = vala_genie_parser_parse_pointer_member_access (self, &_tmp49_, _tmp50_, &_inner_error0_);
3274 				_tmp48_ = _tmp51_;
3275 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
3276 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3277 						g_propagate_error (error, _inner_error0_);
3278 						_vala_code_node_unref0 (expr);
3279 						return NULL;
3280 					} else {
3281 						_vala_code_node_unref0 (expr);
3282 						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);
3283 						g_clear_error (&_inner_error0_);
3284 						return NULL;
3285 					}
3286 				}
3287 				_tmp52_ = _tmp48_;
3288 				_tmp48_ = NULL;
3289 				_vala_code_node_unref0 (expr);
3290 				expr = _tmp52_;
3291 				_vala_code_node_unref0 (_tmp48_);
3292 				break;
3293 			}
3294 			case VALA_GENIE_TOKEN_TYPE_OPEN_PARENS:
3295 			{
3296 				ValaExpression* _tmp53_ = NULL;
3297 				ValaSourceLocation _tmp54_;
3298 				ValaExpression* _tmp55_;
3299 				ValaExpression* _tmp56_;
3300 				ValaExpression* _tmp57_;
3301 				_tmp54_ = begin;
3302 				_tmp55_ = expr;
3303 				_tmp56_ = vala_genie_parser_parse_method_call (self, &_tmp54_, _tmp55_, &_inner_error0_);
3304 				_tmp53_ = _tmp56_;
3305 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
3306 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3307 						g_propagate_error (error, _inner_error0_);
3308 						_vala_code_node_unref0 (expr);
3309 						return NULL;
3310 					} else {
3311 						_vala_code_node_unref0 (expr);
3312 						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);
3313 						g_clear_error (&_inner_error0_);
3314 						return NULL;
3315 					}
3316 				}
3317 				_tmp57_ = _tmp53_;
3318 				_tmp53_ = NULL;
3319 				_vala_code_node_unref0 (expr);
3320 				expr = _tmp57_;
3321 				_vala_code_node_unref0 (_tmp53_);
3322 				break;
3323 			}
3324 			case VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET:
3325 			{
3326 				ValaExpression* _tmp58_ = NULL;
3327 				ValaSourceLocation _tmp59_;
3328 				ValaExpression* _tmp60_;
3329 				ValaExpression* _tmp61_;
3330 				ValaExpression* _tmp62_;
3331 				_tmp59_ = begin;
3332 				_tmp60_ = expr;
3333 				_tmp61_ = vala_genie_parser_parse_element_access (self, &_tmp59_, _tmp60_, &_inner_error0_);
3334 				_tmp58_ = _tmp61_;
3335 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
3336 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3337 						g_propagate_error (error, _inner_error0_);
3338 						_vala_code_node_unref0 (expr);
3339 						return NULL;
3340 					} else {
3341 						_vala_code_node_unref0 (expr);
3342 						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);
3343 						g_clear_error (&_inner_error0_);
3344 						return NULL;
3345 					}
3346 				}
3347 				_tmp62_ = _tmp58_;
3348 				_tmp58_ = NULL;
3349 				_vala_code_node_unref0 (expr);
3350 				expr = _tmp62_;
3351 				_vala_code_node_unref0 (_tmp58_);
3352 				break;
3353 			}
3354 			case VALA_GENIE_TOKEN_TYPE_OP_INC:
3355 			{
3356 				ValaExpression* _tmp63_ = NULL;
3357 				ValaSourceLocation _tmp64_;
3358 				ValaExpression* _tmp65_;
3359 				ValaExpression* _tmp66_;
3360 				ValaExpression* _tmp67_;
3361 				_tmp64_ = begin;
3362 				_tmp65_ = expr;
3363 				_tmp66_ = vala_genie_parser_parse_post_increment_expression (self, &_tmp64_, _tmp65_, &_inner_error0_);
3364 				_tmp63_ = _tmp66_;
3365 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
3366 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3367 						g_propagate_error (error, _inner_error0_);
3368 						_vala_code_node_unref0 (expr);
3369 						return NULL;
3370 					} else {
3371 						_vala_code_node_unref0 (expr);
3372 						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);
3373 						g_clear_error (&_inner_error0_);
3374 						return NULL;
3375 					}
3376 				}
3377 				_tmp67_ = _tmp63_;
3378 				_tmp63_ = NULL;
3379 				_vala_code_node_unref0 (expr);
3380 				expr = _tmp67_;
3381 				_vala_code_node_unref0 (_tmp63_);
3382 				break;
3383 			}
3384 			case VALA_GENIE_TOKEN_TYPE_OP_DEC:
3385 			{
3386 				ValaExpression* _tmp68_ = NULL;
3387 				ValaSourceLocation _tmp69_;
3388 				ValaExpression* _tmp70_;
3389 				ValaExpression* _tmp71_;
3390 				ValaExpression* _tmp72_;
3391 				_tmp69_ = begin;
3392 				_tmp70_ = expr;
3393 				_tmp71_ = vala_genie_parser_parse_post_decrement_expression (self, &_tmp69_, _tmp70_, &_inner_error0_);
3394 				_tmp68_ = _tmp71_;
3395 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
3396 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3397 						g_propagate_error (error, _inner_error0_);
3398 						_vala_code_node_unref0 (expr);
3399 						return NULL;
3400 					} else {
3401 						_vala_code_node_unref0 (expr);
3402 						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);
3403 						g_clear_error (&_inner_error0_);
3404 						return NULL;
3405 					}
3406 				}
3407 				_tmp72_ = _tmp68_;
3408 				_tmp68_ = NULL;
3409 				_vala_code_node_unref0 (expr);
3410 				expr = _tmp72_;
3411 				_vala_code_node_unref0 (_tmp68_);
3412 				break;
3413 			}
3414 			default:
3415 			{
3416 				found = FALSE;
3417 				break;
3418 			}
3419 		}
3420 	}
3421 	result = expr;
3422 	return result;
3423 }
3424 
3425 static ValaExpression*
vala_genie_parser_parse_simple_name(ValaGenieParser * self,GError ** error)3426 vala_genie_parser_parse_simple_name (ValaGenieParser* self,
3427                                      GError** error)
3428 {
3429 	ValaSourceLocation begin = {0};
3430 	ValaSourceLocation _tmp0_ = {0};
3431 	gchar* id = NULL;
3432 	gchar* _tmp1_;
3433 	ValaList* type_arg_list = NULL;
3434 	ValaList* _tmp2_;
3435 	ValaMemberAccess* expr = NULL;
3436 	const gchar* _tmp3_;
3437 	ValaSourceLocation _tmp4_;
3438 	ValaSourceReference* _tmp5_;
3439 	ValaSourceReference* _tmp6_;
3440 	ValaMemberAccess* _tmp7_;
3441 	ValaMemberAccess* _tmp8_;
3442 	ValaList* _tmp9_;
3443 	GError* _inner_error0_ = NULL;
3444 	ValaExpression* result = NULL;
3445 	g_return_val_if_fail (self != NULL, NULL);
3446 	vala_genie_parser_get_location (self, &_tmp0_);
3447 	begin = _tmp0_;
3448 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
3449 	id = _tmp1_;
3450 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3451 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3452 			g_propagate_error (error, _inner_error0_);
3453 			return NULL;
3454 		} else {
3455 			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);
3456 			g_clear_error (&_inner_error0_);
3457 			return NULL;
3458 		}
3459 	}
3460 	_tmp2_ = vala_genie_parser_parse_type_argument_list (self, TRUE, &_inner_error0_);
3461 	type_arg_list = _tmp2_;
3462 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3463 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3464 			g_propagate_error (error, _inner_error0_);
3465 			_g_free0 (id);
3466 			return NULL;
3467 		} else {
3468 			_g_free0 (id);
3469 			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);
3470 			g_clear_error (&_inner_error0_);
3471 			return NULL;
3472 		}
3473 	}
3474 	_tmp3_ = id;
3475 	_tmp4_ = begin;
3476 	_tmp5_ = vala_genie_parser_get_src (self, &_tmp4_);
3477 	_tmp6_ = _tmp5_;
3478 	_tmp7_ = vala_member_access_new (NULL, _tmp3_, _tmp6_);
3479 	_tmp8_ = _tmp7_;
3480 	_vala_source_reference_unref0 (_tmp6_);
3481 	expr = _tmp8_;
3482 	_tmp9_ = type_arg_list;
3483 	if (_tmp9_ != NULL) {
3484 		{
3485 			ValaList* _type_arg_list = NULL;
3486 			ValaList* _tmp10_;
3487 			ValaList* _tmp11_;
3488 			gint _type_arg_size = 0;
3489 			ValaList* _tmp12_;
3490 			gint _tmp13_;
3491 			gint _tmp14_;
3492 			gint _type_arg_index = 0;
3493 			_tmp10_ = type_arg_list;
3494 			_tmp11_ = _vala_iterable_ref0 (_tmp10_);
3495 			_type_arg_list = _tmp11_;
3496 			_tmp12_ = _type_arg_list;
3497 			_tmp13_ = vala_collection_get_size ((ValaCollection*) _tmp12_);
3498 			_tmp14_ = _tmp13_;
3499 			_type_arg_size = _tmp14_;
3500 			_type_arg_index = -1;
3501 			while (TRUE) {
3502 				gint _tmp15_;
3503 				gint _tmp16_;
3504 				ValaDataType* type_arg = NULL;
3505 				ValaList* _tmp17_;
3506 				gpointer _tmp18_;
3507 				ValaMemberAccess* _tmp19_;
3508 				ValaDataType* _tmp20_;
3509 				_type_arg_index = _type_arg_index + 1;
3510 				_tmp15_ = _type_arg_index;
3511 				_tmp16_ = _type_arg_size;
3512 				if (!(_tmp15_ < _tmp16_)) {
3513 					break;
3514 				}
3515 				_tmp17_ = _type_arg_list;
3516 				_tmp18_ = vala_list_get (_tmp17_, _type_arg_index);
3517 				type_arg = (ValaDataType*) _tmp18_;
3518 				_tmp19_ = expr;
3519 				_tmp20_ = type_arg;
3520 				vala_member_access_add_type_argument (_tmp19_, _tmp20_);
3521 				_vala_code_node_unref0 (type_arg);
3522 			}
3523 			_vala_iterable_unref0 (_type_arg_list);
3524 		}
3525 	}
3526 	result = (ValaExpression*) expr;
3527 	_vala_iterable_unref0 (type_arg_list);
3528 	_g_free0 (id);
3529 	return result;
3530 }
3531 
3532 static ValaExpression*
vala_genie_parser_parse_template(ValaGenieParser * self,GError ** error)3533 vala_genie_parser_parse_template (ValaGenieParser* self,
3534                                   GError** error)
3535 {
3536 	ValaSourceLocation begin = {0};
3537 	ValaSourceLocation _tmp0_ = {0};
3538 	ValaTemplate* template = NULL;
3539 	ValaTemplate* _tmp1_;
3540 	ValaTemplate* _tmp5_;
3541 	ValaSourceLocation _tmp6_;
3542 	ValaSourceReference* _tmp7_;
3543 	ValaSourceReference* _tmp8_;
3544 	GError* _inner_error0_ = NULL;
3545 	ValaExpression* result = NULL;
3546 	g_return_val_if_fail (self != NULL, NULL);
3547 	vala_genie_parser_get_location (self, &_tmp0_);
3548 	begin = _tmp0_;
3549 	_tmp1_ = vala_template_new (NULL);
3550 	template = _tmp1_;
3551 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_TEMPLATE, &_inner_error0_);
3552 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3553 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3554 			g_propagate_error (error, _inner_error0_);
3555 			_vala_code_node_unref0 (template);
3556 			return NULL;
3557 		} else {
3558 			_vala_code_node_unref0 (template);
3559 			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);
3560 			g_clear_error (&_inner_error0_);
3561 			return NULL;
3562 		}
3563 	}
3564 	while (TRUE) {
3565 		ValaExpression* _tmp2_ = NULL;
3566 		ValaExpression* _tmp3_;
3567 		ValaTemplate* _tmp4_;
3568 		if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_TEMPLATE)) {
3569 			break;
3570 		}
3571 		_tmp3_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
3572 		_tmp2_ = _tmp3_;
3573 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
3574 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3575 				g_propagate_error (error, _inner_error0_);
3576 				_vala_code_node_unref0 (template);
3577 				return NULL;
3578 			} else {
3579 				_vala_code_node_unref0 (template);
3580 				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);
3581 				g_clear_error (&_inner_error0_);
3582 				return NULL;
3583 			}
3584 		}
3585 		_tmp4_ = template;
3586 		vala_template_add_expression (_tmp4_, _tmp2_);
3587 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COMMA, &_inner_error0_);
3588 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
3589 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3590 				g_propagate_error (error, _inner_error0_);
3591 				_vala_code_node_unref0 (_tmp2_);
3592 				_vala_code_node_unref0 (template);
3593 				return NULL;
3594 			} else {
3595 				_vala_code_node_unref0 (_tmp2_);
3596 				_vala_code_node_unref0 (template);
3597 				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);
3598 				g_clear_error (&_inner_error0_);
3599 				return NULL;
3600 			}
3601 		}
3602 		_vala_code_node_unref0 (_tmp2_);
3603 	}
3604 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_TEMPLATE, &_inner_error0_);
3605 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3606 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3607 			g_propagate_error (error, _inner_error0_);
3608 			_vala_code_node_unref0 (template);
3609 			return NULL;
3610 		} else {
3611 			_vala_code_node_unref0 (template);
3612 			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);
3613 			g_clear_error (&_inner_error0_);
3614 			return NULL;
3615 		}
3616 	}
3617 	_tmp5_ = template;
3618 	_tmp6_ = begin;
3619 	_tmp7_ = vala_genie_parser_get_src (self, &_tmp6_);
3620 	_tmp8_ = _tmp7_;
3621 	vala_code_node_set_source_reference ((ValaCodeNode*) _tmp5_, _tmp8_);
3622 	_vala_source_reference_unref0 (_tmp8_);
3623 	result = (ValaExpression*) template;
3624 	return result;
3625 }
3626 
3627 static ValaExpression*
vala_genie_parser_parse_tuple(ValaGenieParser * self,GError ** error)3628 vala_genie_parser_parse_tuple (ValaGenieParser* self,
3629                                GError** error)
3630 {
3631 	ValaArrayList* expr_list = NULL;
3632 	GEqualFunc _tmp0_;
3633 	ValaArrayList* _tmp1_;
3634 	ValaArrayList* _tmp6_;
3635 	gint _tmp7_;
3636 	gint _tmp8_;
3637 	ValaArrayList* _tmp21_;
3638 	gpointer _tmp22_;
3639 	GError* _inner_error0_ = NULL;
3640 	ValaExpression* result = NULL;
3641 	g_return_val_if_fail (self != NULL, NULL);
3642 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
3643 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3644 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3645 			g_propagate_error (error, _inner_error0_);
3646 			return NULL;
3647 		} else {
3648 			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);
3649 			g_clear_error (&_inner_error0_);
3650 			return NULL;
3651 		}
3652 	}
3653 	_tmp0_ = g_direct_equal;
3654 	_tmp1_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
3655 	expr_list = _tmp1_;
3656 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
3657 		{
3658 			gboolean _tmp2_ = FALSE;
3659 			_tmp2_ = TRUE;
3660 			while (TRUE) {
3661 				ValaExpression* _tmp3_ = NULL;
3662 				ValaExpression* _tmp4_;
3663 				ValaArrayList* _tmp5_;
3664 				if (!_tmp2_) {
3665 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
3666 						break;
3667 					}
3668 				}
3669 				_tmp2_ = FALSE;
3670 				_tmp4_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
3671 				_tmp3_ = _tmp4_;
3672 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
3673 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3674 						g_propagate_error (error, _inner_error0_);
3675 						_vala_iterable_unref0 (expr_list);
3676 						return NULL;
3677 					} else {
3678 						_vala_iterable_unref0 (expr_list);
3679 						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);
3680 						g_clear_error (&_inner_error0_);
3681 						return NULL;
3682 					}
3683 				}
3684 				_tmp5_ = expr_list;
3685 				vala_collection_add ((ValaCollection*) _tmp5_, _tmp3_);
3686 				_vala_code_node_unref0 (_tmp3_);
3687 			}
3688 		}
3689 	}
3690 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
3691 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3692 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3693 			g_propagate_error (error, _inner_error0_);
3694 			_vala_iterable_unref0 (expr_list);
3695 			return NULL;
3696 		} else {
3697 			_vala_iterable_unref0 (expr_list);
3698 			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);
3699 			g_clear_error (&_inner_error0_);
3700 			return NULL;
3701 		}
3702 	}
3703 	_tmp6_ = expr_list;
3704 	_tmp7_ = vala_collection_get_size ((ValaCollection*) _tmp6_);
3705 	_tmp8_ = _tmp7_;
3706 	if (_tmp8_ != 1) {
3707 		ValaTuple* tuple = NULL;
3708 		ValaTuple* _tmp9_;
3709 		_tmp9_ = vala_tuple_new (NULL);
3710 		tuple = _tmp9_;
3711 		{
3712 			ValaArrayList* _expr_list = NULL;
3713 			ValaArrayList* _tmp10_;
3714 			ValaArrayList* _tmp11_;
3715 			gint _expr_size = 0;
3716 			ValaArrayList* _tmp12_;
3717 			gint _tmp13_;
3718 			gint _tmp14_;
3719 			gint _expr_index = 0;
3720 			_tmp10_ = expr_list;
3721 			_tmp11_ = _vala_iterable_ref0 (_tmp10_);
3722 			_expr_list = _tmp11_;
3723 			_tmp12_ = _expr_list;
3724 			_tmp13_ = vala_collection_get_size ((ValaCollection*) _tmp12_);
3725 			_tmp14_ = _tmp13_;
3726 			_expr_size = _tmp14_;
3727 			_expr_index = -1;
3728 			while (TRUE) {
3729 				gint _tmp15_;
3730 				gint _tmp16_;
3731 				ValaExpression* expr = NULL;
3732 				ValaArrayList* _tmp17_;
3733 				gpointer _tmp18_;
3734 				ValaTuple* _tmp19_;
3735 				ValaExpression* _tmp20_;
3736 				_expr_index = _expr_index + 1;
3737 				_tmp15_ = _expr_index;
3738 				_tmp16_ = _expr_size;
3739 				if (!(_tmp15_ < _tmp16_)) {
3740 					break;
3741 				}
3742 				_tmp17_ = _expr_list;
3743 				_tmp18_ = vala_list_get ((ValaList*) _tmp17_, _expr_index);
3744 				expr = (ValaExpression*) _tmp18_;
3745 				_tmp19_ = tuple;
3746 				_tmp20_ = expr;
3747 				vala_tuple_add_expression (_tmp19_, _tmp20_);
3748 				_vala_code_node_unref0 (expr);
3749 			}
3750 			_vala_iterable_unref0 (_expr_list);
3751 		}
3752 		result = (ValaExpression*) tuple;
3753 		_vala_iterable_unref0 (expr_list);
3754 		return result;
3755 	}
3756 	_tmp21_ = expr_list;
3757 	_tmp22_ = vala_list_get ((ValaList*) _tmp21_, 0);
3758 	result = (ValaExpression*) _tmp22_;
3759 	_vala_iterable_unref0 (expr_list);
3760 	return result;
3761 }
3762 
3763 static ValaExpression*
vala_genie_parser_parse_member_access(ValaGenieParser * self,ValaSourceLocation * begin,ValaExpression * inner,GError ** error)3764 vala_genie_parser_parse_member_access (ValaGenieParser* self,
3765                                        ValaSourceLocation* begin,
3766                                        ValaExpression* inner,
3767                                        GError** error)
3768 {
3769 	gchar* id = NULL;
3770 	gchar* _tmp0_;
3771 	ValaList* type_arg_list = NULL;
3772 	ValaList* _tmp1_;
3773 	ValaMemberAccess* expr = NULL;
3774 	const gchar* _tmp2_;
3775 	ValaSourceLocation _tmp3_;
3776 	ValaSourceReference* _tmp4_;
3777 	ValaSourceReference* _tmp5_;
3778 	ValaMemberAccess* _tmp6_;
3779 	ValaMemberAccess* _tmp7_;
3780 	ValaList* _tmp8_;
3781 	GError* _inner_error0_ = NULL;
3782 	ValaExpression* result = NULL;
3783 	g_return_val_if_fail (self != NULL, NULL);
3784 	g_return_val_if_fail (begin != NULL, NULL);
3785 	g_return_val_if_fail (inner != NULL, NULL);
3786 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DOT, &_inner_error0_);
3787 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3788 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3789 			g_propagate_error (error, _inner_error0_);
3790 			return NULL;
3791 		} else {
3792 			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);
3793 			g_clear_error (&_inner_error0_);
3794 			return NULL;
3795 		}
3796 	}
3797 	_tmp0_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
3798 	id = _tmp0_;
3799 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3800 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3801 			g_propagate_error (error, _inner_error0_);
3802 			return NULL;
3803 		} else {
3804 			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);
3805 			g_clear_error (&_inner_error0_);
3806 			return NULL;
3807 		}
3808 	}
3809 	_tmp1_ = vala_genie_parser_parse_type_argument_list (self, TRUE, &_inner_error0_);
3810 	type_arg_list = _tmp1_;
3811 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3812 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3813 			g_propagate_error (error, _inner_error0_);
3814 			_g_free0 (id);
3815 			return NULL;
3816 		} else {
3817 			_g_free0 (id);
3818 			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);
3819 			g_clear_error (&_inner_error0_);
3820 			return NULL;
3821 		}
3822 	}
3823 	_tmp2_ = id;
3824 	_tmp3_ = *begin;
3825 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
3826 	_tmp5_ = _tmp4_;
3827 	_tmp6_ = vala_member_access_new (inner, _tmp2_, _tmp5_);
3828 	_tmp7_ = _tmp6_;
3829 	_vala_source_reference_unref0 (_tmp5_);
3830 	expr = _tmp7_;
3831 	_tmp8_ = type_arg_list;
3832 	if (_tmp8_ != NULL) {
3833 		{
3834 			ValaList* _type_arg_list = NULL;
3835 			ValaList* _tmp9_;
3836 			ValaList* _tmp10_;
3837 			gint _type_arg_size = 0;
3838 			ValaList* _tmp11_;
3839 			gint _tmp12_;
3840 			gint _tmp13_;
3841 			gint _type_arg_index = 0;
3842 			_tmp9_ = type_arg_list;
3843 			_tmp10_ = _vala_iterable_ref0 (_tmp9_);
3844 			_type_arg_list = _tmp10_;
3845 			_tmp11_ = _type_arg_list;
3846 			_tmp12_ = vala_collection_get_size ((ValaCollection*) _tmp11_);
3847 			_tmp13_ = _tmp12_;
3848 			_type_arg_size = _tmp13_;
3849 			_type_arg_index = -1;
3850 			while (TRUE) {
3851 				gint _tmp14_;
3852 				gint _tmp15_;
3853 				ValaDataType* type_arg = NULL;
3854 				ValaList* _tmp16_;
3855 				gpointer _tmp17_;
3856 				ValaMemberAccess* _tmp18_;
3857 				ValaDataType* _tmp19_;
3858 				_type_arg_index = _type_arg_index + 1;
3859 				_tmp14_ = _type_arg_index;
3860 				_tmp15_ = _type_arg_size;
3861 				if (!(_tmp14_ < _tmp15_)) {
3862 					break;
3863 				}
3864 				_tmp16_ = _type_arg_list;
3865 				_tmp17_ = vala_list_get (_tmp16_, _type_arg_index);
3866 				type_arg = (ValaDataType*) _tmp17_;
3867 				_tmp18_ = expr;
3868 				_tmp19_ = type_arg;
3869 				vala_member_access_add_type_argument (_tmp18_, _tmp19_);
3870 				_vala_code_node_unref0 (type_arg);
3871 			}
3872 			_vala_iterable_unref0 (_type_arg_list);
3873 		}
3874 	}
3875 	result = (ValaExpression*) expr;
3876 	_vala_iterable_unref0 (type_arg_list);
3877 	_g_free0 (id);
3878 	return result;
3879 }
3880 
3881 static ValaExpression*
vala_genie_parser_parse_pointer_member_access(ValaGenieParser * self,ValaSourceLocation * begin,ValaExpression * inner,GError ** error)3882 vala_genie_parser_parse_pointer_member_access (ValaGenieParser* self,
3883                                                ValaSourceLocation* begin,
3884                                                ValaExpression* inner,
3885                                                GError** error)
3886 {
3887 	gchar* id = NULL;
3888 	gchar* _tmp0_;
3889 	ValaList* type_arg_list = NULL;
3890 	ValaList* _tmp1_;
3891 	ValaMemberAccess* expr = NULL;
3892 	const gchar* _tmp2_;
3893 	ValaSourceLocation _tmp3_;
3894 	ValaSourceReference* _tmp4_;
3895 	ValaSourceReference* _tmp5_;
3896 	ValaMemberAccess* _tmp6_;
3897 	ValaMemberAccess* _tmp7_;
3898 	ValaList* _tmp8_;
3899 	GError* _inner_error0_ = NULL;
3900 	ValaExpression* result = NULL;
3901 	g_return_val_if_fail (self != NULL, NULL);
3902 	g_return_val_if_fail (begin != NULL, NULL);
3903 	g_return_val_if_fail (inner != NULL, NULL);
3904 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OP_PTR, &_inner_error0_);
3905 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3906 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3907 			g_propagate_error (error, _inner_error0_);
3908 			return NULL;
3909 		} else {
3910 			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);
3911 			g_clear_error (&_inner_error0_);
3912 			return NULL;
3913 		}
3914 	}
3915 	_tmp0_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
3916 	id = _tmp0_;
3917 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3918 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3919 			g_propagate_error (error, _inner_error0_);
3920 			return NULL;
3921 		} else {
3922 			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);
3923 			g_clear_error (&_inner_error0_);
3924 			return NULL;
3925 		}
3926 	}
3927 	_tmp1_ = vala_genie_parser_parse_type_argument_list (self, TRUE, &_inner_error0_);
3928 	type_arg_list = _tmp1_;
3929 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
3930 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
3931 			g_propagate_error (error, _inner_error0_);
3932 			_g_free0 (id);
3933 			return NULL;
3934 		} else {
3935 			_g_free0 (id);
3936 			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);
3937 			g_clear_error (&_inner_error0_);
3938 			return NULL;
3939 		}
3940 	}
3941 	_tmp2_ = id;
3942 	_tmp3_ = *begin;
3943 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
3944 	_tmp5_ = _tmp4_;
3945 	_tmp6_ = vala_member_access_new_pointer (inner, _tmp2_, _tmp5_);
3946 	_tmp7_ = _tmp6_;
3947 	_vala_source_reference_unref0 (_tmp5_);
3948 	expr = _tmp7_;
3949 	_tmp8_ = type_arg_list;
3950 	if (_tmp8_ != NULL) {
3951 		{
3952 			ValaList* _type_arg_list = NULL;
3953 			ValaList* _tmp9_;
3954 			ValaList* _tmp10_;
3955 			gint _type_arg_size = 0;
3956 			ValaList* _tmp11_;
3957 			gint _tmp12_;
3958 			gint _tmp13_;
3959 			gint _type_arg_index = 0;
3960 			_tmp9_ = type_arg_list;
3961 			_tmp10_ = _vala_iterable_ref0 (_tmp9_);
3962 			_type_arg_list = _tmp10_;
3963 			_tmp11_ = _type_arg_list;
3964 			_tmp12_ = vala_collection_get_size ((ValaCollection*) _tmp11_);
3965 			_tmp13_ = _tmp12_;
3966 			_type_arg_size = _tmp13_;
3967 			_type_arg_index = -1;
3968 			while (TRUE) {
3969 				gint _tmp14_;
3970 				gint _tmp15_;
3971 				ValaDataType* type_arg = NULL;
3972 				ValaList* _tmp16_;
3973 				gpointer _tmp17_;
3974 				ValaMemberAccess* _tmp18_;
3975 				ValaDataType* _tmp19_;
3976 				_type_arg_index = _type_arg_index + 1;
3977 				_tmp14_ = _type_arg_index;
3978 				_tmp15_ = _type_arg_size;
3979 				if (!(_tmp14_ < _tmp15_)) {
3980 					break;
3981 				}
3982 				_tmp16_ = _type_arg_list;
3983 				_tmp17_ = vala_list_get (_tmp16_, _type_arg_index);
3984 				type_arg = (ValaDataType*) _tmp17_;
3985 				_tmp18_ = expr;
3986 				_tmp19_ = type_arg;
3987 				vala_member_access_add_type_argument (_tmp18_, _tmp19_);
3988 				_vala_code_node_unref0 (type_arg);
3989 			}
3990 			_vala_iterable_unref0 (_type_arg_list);
3991 		}
3992 	}
3993 	result = (ValaExpression*) expr;
3994 	_vala_iterable_unref0 (type_arg_list);
3995 	_g_free0 (id);
3996 	return result;
3997 }
3998 
3999 static ValaList*
vala_genie_parser_parse_print_argument_list(ValaGenieParser * self,GError ** error)4000 vala_genie_parser_parse_print_argument_list (ValaGenieParser* self,
4001                                              GError** error)
4002 {
4003 	ValaArrayList* list = NULL;
4004 	GEqualFunc _tmp0_;
4005 	ValaArrayList* _tmp1_;
4006 	gint i = 0;
4007 	ValaSourceLocation begin = {0};
4008 	ValaSourceLocation _tmp2_ = {0};
4009 	GError* _inner_error0_ = NULL;
4010 	ValaList* result = NULL;
4011 	g_return_val_if_fail (self != NULL, NULL);
4012 	_tmp0_ = g_direct_equal;
4013 	_tmp1_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
4014 	list = _tmp1_;
4015 	i = 0;
4016 	vala_genie_parser_get_location (self, &_tmp2_);
4017 	begin = _tmp2_;
4018 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
4019 		{
4020 			gboolean _tmp3_ = FALSE;
4021 			_tmp3_ = TRUE;
4022 			while (TRUE) {
4023 				ValaExpression* p_expr = NULL;
4024 				ValaExpression* _tmp4_;
4025 				ValaArrayList* _tmp40_;
4026 				ValaExpression* _tmp41_;
4027 				if (!_tmp3_) {
4028 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
4029 						break;
4030 					}
4031 				}
4032 				_tmp3_ = FALSE;
4033 				_tmp4_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
4034 				p_expr = _tmp4_;
4035 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
4036 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4037 						g_propagate_error (error, _inner_error0_);
4038 						_vala_iterable_unref0 (list);
4039 						return NULL;
4040 					} else {
4041 						_vala_iterable_unref0 (list);
4042 						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);
4043 						g_clear_error (&_inner_error0_);
4044 						return NULL;
4045 					}
4046 				}
4047 				if (i == 0) {
4048 					gint _tmp5_;
4049 					ValaExpression* _tmp6_;
4050 					_tmp5_ = i;
4051 					i = _tmp5_ + 1;
4052 					_tmp6_ = p_expr;
4053 					if (_tmp6_ != NULL) {
4054 						ValaExpression* _tmp7_;
4055 						_tmp7_ = p_expr;
4056 						if (VALA_IS_STRING_LITERAL (_tmp7_)) {
4057 							ValaStringLiteral* s_exp = NULL;
4058 							ValaExpression* _tmp8_;
4059 							ValaStringLiteral* _tmp9_;
4060 							gint len = 0;
4061 							ValaStringLiteral* _tmp10_;
4062 							const gchar* _tmp11_;
4063 							const gchar* _tmp12_;
4064 							gint _tmp13_;
4065 							gint _tmp14_;
4066 							_tmp8_ = p_expr;
4067 							_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_STRING_LITERAL, ValaStringLiteral));
4068 							s_exp = _tmp9_;
4069 							_tmp10_ = s_exp;
4070 							_tmp11_ = vala_string_literal_get_value (_tmp10_);
4071 							_tmp12_ = _tmp11_;
4072 							_tmp13_ = strlen (_tmp12_);
4073 							_tmp14_ = _tmp13_;
4074 							len = _tmp14_;
4075 							if (len > 2) {
4076 								gchar* s = NULL;
4077 								gchar* _tmp15_;
4078 								gchar* st = NULL;
4079 								ValaStringLiteral* _tmp16_;
4080 								const gchar* _tmp17_;
4081 								const gchar* _tmp18_;
4082 								gchar* _tmp19_;
4083 								const gchar* _tmp20_;
4084 								const gchar* _tmp21_;
4085 								gchar* _tmp22_;
4086 								ValaStringLiteral* _tmp23_;
4087 								const gchar* _tmp24_;
4088 								_tmp15_ = g_strdup ("\\n\"");
4089 								s = _tmp15_;
4090 								_tmp16_ = s_exp;
4091 								_tmp17_ = vala_string_literal_get_value (_tmp16_);
4092 								_tmp18_ = _tmp17_;
4093 								_tmp19_ = string_substring (_tmp18_, (glong) 0, (glong) (len - 1));
4094 								st = _tmp19_;
4095 								_tmp20_ = st;
4096 								_tmp21_ = s;
4097 								_tmp22_ = g_strconcat (_tmp20_, _tmp21_, NULL);
4098 								_g_free0 (st);
4099 								st = _tmp22_;
4100 								_tmp23_ = s_exp;
4101 								_tmp24_ = st;
4102 								vala_string_literal_set_value (_tmp23_, _tmp24_);
4103 								_g_free0 (st);
4104 								_g_free0 (s);
4105 							} else {
4106 								gchar* s = NULL;
4107 								gchar* _tmp25_;
4108 								const gchar* _tmp26_;
4109 								ValaSourceLocation _tmp27_;
4110 								ValaSourceReference* _tmp28_;
4111 								ValaSourceReference* _tmp29_;
4112 								ValaStringLiteral* _tmp30_;
4113 								_tmp25_ = g_strdup ("\"\\n\"");
4114 								s = _tmp25_;
4115 								_tmp26_ = s;
4116 								_tmp27_ = begin;
4117 								_tmp28_ = vala_genie_parser_get_src (self, &_tmp27_);
4118 								_tmp29_ = _tmp28_;
4119 								_tmp30_ = vala_string_literal_new (_tmp26_, _tmp29_);
4120 								_vala_code_node_unref0 (p_expr);
4121 								p_expr = (ValaExpression*) _tmp30_;
4122 								_vala_source_reference_unref0 (_tmp29_);
4123 								_g_free0 (s);
4124 							}
4125 							_vala_code_node_unref0 (s_exp);
4126 						} else {
4127 							gchar* s = NULL;
4128 							gchar* _tmp31_;
4129 							ValaStringLiteral* s_exp = NULL;
4130 							const gchar* _tmp32_;
4131 							ValaSourceLocation _tmp33_;
4132 							ValaSourceReference* _tmp34_;
4133 							ValaSourceReference* _tmp35_;
4134 							ValaStringLiteral* _tmp36_;
4135 							ValaStringLiteral* _tmp37_;
4136 							ValaArrayList* _tmp38_;
4137 							ValaStringLiteral* _tmp39_;
4138 							_tmp31_ = g_strdup ("\"%s\\n\"");
4139 							s = _tmp31_;
4140 							_tmp32_ = s;
4141 							_tmp33_ = begin;
4142 							_tmp34_ = vala_genie_parser_get_src (self, &_tmp33_);
4143 							_tmp35_ = _tmp34_;
4144 							_tmp36_ = vala_string_literal_new (_tmp32_, _tmp35_);
4145 							_tmp37_ = _tmp36_;
4146 							_vala_source_reference_unref0 (_tmp35_);
4147 							s_exp = _tmp37_;
4148 							_tmp38_ = list;
4149 							_tmp39_ = s_exp;
4150 							vala_collection_add ((ValaCollection*) _tmp38_, (ValaExpression*) _tmp39_);
4151 							_vala_code_node_unref0 (s_exp);
4152 							_g_free0 (s);
4153 						}
4154 					}
4155 				}
4156 				_tmp40_ = list;
4157 				_tmp41_ = p_expr;
4158 				vala_collection_add ((ValaCollection*) _tmp40_, _tmp41_);
4159 				_vala_code_node_unref0 (p_expr);
4160 			}
4161 		}
4162 	}
4163 	result = (ValaList*) list;
4164 	return result;
4165 }
4166 
4167 static ValaExpression*
vala_genie_parser_parse_print_expression(ValaGenieParser * self,GError ** error)4168 vala_genie_parser_parse_print_expression (ValaGenieParser* self,
4169                                           GError** error)
4170 {
4171 	ValaSourceLocation begin = {0};
4172 	ValaSourceLocation _tmp0_ = {0};
4173 	gboolean parens = FALSE;
4174 	ValaMemberAccess* expr = NULL;
4175 	ValaSourceLocation _tmp1_;
4176 	ValaSourceReference* _tmp2_;
4177 	ValaSourceReference* _tmp3_;
4178 	ValaMemberAccess* _tmp4_;
4179 	ValaMemberAccess* _tmp5_;
4180 	ValaList* arg_list = NULL;
4181 	ValaList* _tmp6_;
4182 	ValaMethodCall* print_expr = NULL;
4183 	ValaMemberAccess* _tmp7_;
4184 	ValaSourceLocation _tmp8_;
4185 	ValaSourceReference* _tmp9_;
4186 	ValaSourceReference* _tmp10_;
4187 	ValaMethodCall* _tmp11_;
4188 	ValaMethodCall* _tmp12_;
4189 	GError* _inner_error0_ = NULL;
4190 	ValaExpression* result = NULL;
4191 	g_return_val_if_fail (self != NULL, NULL);
4192 	vala_genie_parser_get_location (self, &_tmp0_);
4193 	begin = _tmp0_;
4194 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_PRINT, &_inner_error0_);
4195 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4196 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4197 			g_propagate_error (error, _inner_error0_);
4198 			return NULL;
4199 		} else {
4200 			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);
4201 			g_clear_error (&_inner_error0_);
4202 			return NULL;
4203 		}
4204 	}
4205 	parens = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS);
4206 	_tmp1_ = begin;
4207 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
4208 	_tmp3_ = _tmp2_;
4209 	_tmp4_ = vala_member_access_new (NULL, "print", _tmp3_);
4210 	_tmp5_ = _tmp4_;
4211 	_vala_source_reference_unref0 (_tmp3_);
4212 	expr = _tmp5_;
4213 	_tmp6_ = vala_genie_parser_parse_print_argument_list (self, &_inner_error0_);
4214 	arg_list = _tmp6_;
4215 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4216 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4217 			g_propagate_error (error, _inner_error0_);
4218 			_vala_code_node_unref0 (expr);
4219 			return NULL;
4220 		} else {
4221 			_vala_code_node_unref0 (expr);
4222 			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);
4223 			g_clear_error (&_inner_error0_);
4224 			return NULL;
4225 		}
4226 	}
4227 	if (parens) {
4228 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
4229 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
4230 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4231 				g_propagate_error (error, _inner_error0_);
4232 				_vala_iterable_unref0 (arg_list);
4233 				_vala_code_node_unref0 (expr);
4234 				return NULL;
4235 			} else {
4236 				_vala_iterable_unref0 (arg_list);
4237 				_vala_code_node_unref0 (expr);
4238 				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);
4239 				g_clear_error (&_inner_error0_);
4240 				return NULL;
4241 			}
4242 		}
4243 	}
4244 	_tmp7_ = expr;
4245 	_tmp8_ = begin;
4246 	_tmp9_ = vala_genie_parser_get_src (self, &_tmp8_);
4247 	_tmp10_ = _tmp9_;
4248 	_tmp11_ = vala_method_call_new ((ValaExpression*) _tmp7_, _tmp10_);
4249 	_tmp12_ = _tmp11_;
4250 	_vala_source_reference_unref0 (_tmp10_);
4251 	print_expr = _tmp12_;
4252 	{
4253 		ValaList* _arg_list = NULL;
4254 		ValaList* _tmp13_;
4255 		ValaList* _tmp14_;
4256 		gint _arg_size = 0;
4257 		ValaList* _tmp15_;
4258 		gint _tmp16_;
4259 		gint _tmp17_;
4260 		gint _arg_index = 0;
4261 		_tmp13_ = arg_list;
4262 		_tmp14_ = _vala_iterable_ref0 (_tmp13_);
4263 		_arg_list = _tmp14_;
4264 		_tmp15_ = _arg_list;
4265 		_tmp16_ = vala_collection_get_size ((ValaCollection*) _tmp15_);
4266 		_tmp17_ = _tmp16_;
4267 		_arg_size = _tmp17_;
4268 		_arg_index = -1;
4269 		while (TRUE) {
4270 			gint _tmp18_;
4271 			gint _tmp19_;
4272 			ValaExpression* arg = NULL;
4273 			ValaList* _tmp20_;
4274 			gpointer _tmp21_;
4275 			ValaMethodCall* _tmp22_;
4276 			ValaExpression* _tmp23_;
4277 			_arg_index = _arg_index + 1;
4278 			_tmp18_ = _arg_index;
4279 			_tmp19_ = _arg_size;
4280 			if (!(_tmp18_ < _tmp19_)) {
4281 				break;
4282 			}
4283 			_tmp20_ = _arg_list;
4284 			_tmp21_ = vala_list_get (_tmp20_, _arg_index);
4285 			arg = (ValaExpression*) _tmp21_;
4286 			_tmp22_ = print_expr;
4287 			_tmp23_ = arg;
4288 			vala_method_call_add_argument (_tmp22_, _tmp23_);
4289 			_vala_code_node_unref0 (arg);
4290 		}
4291 		_vala_iterable_unref0 (_arg_list);
4292 	}
4293 	result = (ValaExpression*) print_expr;
4294 	_vala_iterable_unref0 (arg_list);
4295 	_vala_code_node_unref0 (expr);
4296 	return result;
4297 }
4298 
4299 static ValaExpression*
vala_genie_parser_parse_assert_expression(ValaGenieParser * self,GError ** error)4300 vala_genie_parser_parse_assert_expression (ValaGenieParser* self,
4301                                            GError** error)
4302 {
4303 	ValaSourceLocation begin = {0};
4304 	ValaSourceLocation _tmp0_ = {0};
4305 	gboolean parens = FALSE;
4306 	ValaMemberAccess* expr = NULL;
4307 	ValaSourceLocation _tmp1_;
4308 	ValaSourceReference* _tmp2_;
4309 	ValaSourceReference* _tmp3_;
4310 	ValaMemberAccess* _tmp4_;
4311 	ValaMemberAccess* _tmp5_;
4312 	ValaList* arg_list = NULL;
4313 	ValaList* _tmp6_;
4314 	ValaMethodCall* assert_expr = NULL;
4315 	ValaMemberAccess* _tmp7_;
4316 	ValaSourceLocation _tmp8_;
4317 	ValaSourceReference* _tmp9_;
4318 	ValaSourceReference* _tmp10_;
4319 	ValaMethodCall* _tmp11_;
4320 	ValaMethodCall* _tmp12_;
4321 	GError* _inner_error0_ = NULL;
4322 	ValaExpression* result = NULL;
4323 	g_return_val_if_fail (self != NULL, NULL);
4324 	vala_genie_parser_get_location (self, &_tmp0_);
4325 	begin = _tmp0_;
4326 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_ASSERT, &_inner_error0_);
4327 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4328 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4329 			g_propagate_error (error, _inner_error0_);
4330 			return NULL;
4331 		} else {
4332 			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);
4333 			g_clear_error (&_inner_error0_);
4334 			return NULL;
4335 		}
4336 	}
4337 	parens = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS);
4338 	_tmp1_ = begin;
4339 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
4340 	_tmp3_ = _tmp2_;
4341 	_tmp4_ = vala_member_access_new (NULL, "assert", _tmp3_);
4342 	_tmp5_ = _tmp4_;
4343 	_vala_source_reference_unref0 (_tmp3_);
4344 	expr = _tmp5_;
4345 	_tmp6_ = vala_genie_parser_parse_argument_list (self, &_inner_error0_);
4346 	arg_list = _tmp6_;
4347 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4348 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4349 			g_propagate_error (error, _inner_error0_);
4350 			_vala_code_node_unref0 (expr);
4351 			return NULL;
4352 		} else {
4353 			_vala_code_node_unref0 (expr);
4354 			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);
4355 			g_clear_error (&_inner_error0_);
4356 			return NULL;
4357 		}
4358 	}
4359 	if (parens) {
4360 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
4361 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
4362 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4363 				g_propagate_error (error, _inner_error0_);
4364 				_vala_iterable_unref0 (arg_list);
4365 				_vala_code_node_unref0 (expr);
4366 				return NULL;
4367 			} else {
4368 				_vala_iterable_unref0 (arg_list);
4369 				_vala_code_node_unref0 (expr);
4370 				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);
4371 				g_clear_error (&_inner_error0_);
4372 				return NULL;
4373 			}
4374 		}
4375 	}
4376 	_tmp7_ = expr;
4377 	_tmp8_ = begin;
4378 	_tmp9_ = vala_genie_parser_get_src (self, &_tmp8_);
4379 	_tmp10_ = _tmp9_;
4380 	_tmp11_ = vala_method_call_new ((ValaExpression*) _tmp7_, _tmp10_);
4381 	_tmp12_ = _tmp11_;
4382 	_vala_source_reference_unref0 (_tmp10_);
4383 	assert_expr = _tmp12_;
4384 	{
4385 		ValaList* _arg_list = NULL;
4386 		ValaList* _tmp13_;
4387 		ValaList* _tmp14_;
4388 		gint _arg_size = 0;
4389 		ValaList* _tmp15_;
4390 		gint _tmp16_;
4391 		gint _tmp17_;
4392 		gint _arg_index = 0;
4393 		_tmp13_ = arg_list;
4394 		_tmp14_ = _vala_iterable_ref0 (_tmp13_);
4395 		_arg_list = _tmp14_;
4396 		_tmp15_ = _arg_list;
4397 		_tmp16_ = vala_collection_get_size ((ValaCollection*) _tmp15_);
4398 		_tmp17_ = _tmp16_;
4399 		_arg_size = _tmp17_;
4400 		_arg_index = -1;
4401 		while (TRUE) {
4402 			gint _tmp18_;
4403 			gint _tmp19_;
4404 			ValaExpression* arg = NULL;
4405 			ValaList* _tmp20_;
4406 			gpointer _tmp21_;
4407 			ValaMethodCall* _tmp22_;
4408 			ValaExpression* _tmp23_;
4409 			_arg_index = _arg_index + 1;
4410 			_tmp18_ = _arg_index;
4411 			_tmp19_ = _arg_size;
4412 			if (!(_tmp18_ < _tmp19_)) {
4413 				break;
4414 			}
4415 			_tmp20_ = _arg_list;
4416 			_tmp21_ = vala_list_get (_tmp20_, _arg_index);
4417 			arg = (ValaExpression*) _tmp21_;
4418 			_tmp22_ = assert_expr;
4419 			_tmp23_ = arg;
4420 			vala_method_call_add_argument (_tmp22_, _tmp23_);
4421 			_vala_code_node_unref0 (arg);
4422 		}
4423 		_vala_iterable_unref0 (_arg_list);
4424 	}
4425 	result = (ValaExpression*) assert_expr;
4426 	_vala_iterable_unref0 (arg_list);
4427 	_vala_code_node_unref0 (expr);
4428 	return result;
4429 }
4430 
4431 static ValaExpression*
vala_genie_parser_parse_method_call(ValaGenieParser * self,ValaSourceLocation * begin,ValaExpression * inner,GError ** error)4432 vala_genie_parser_parse_method_call (ValaGenieParser* self,
4433                                      ValaSourceLocation* begin,
4434                                      ValaExpression* inner,
4435                                      GError** error)
4436 {
4437 	ValaList* arg_list = NULL;
4438 	ValaList* _tmp0_;
4439 	ValaList* init_list = NULL;
4440 	ValaList* _tmp1_;
4441 	gboolean _tmp2_ = FALSE;
4442 	ValaList* _tmp3_;
4443 	gint _tmp4_;
4444 	gint _tmp5_;
4445 	GError* _inner_error0_ = NULL;
4446 	ValaExpression* result = NULL;
4447 	g_return_val_if_fail (self != NULL, NULL);
4448 	g_return_val_if_fail (begin != NULL, NULL);
4449 	g_return_val_if_fail (inner != NULL, NULL);
4450 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
4451 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4452 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4453 			g_propagate_error (error, _inner_error0_);
4454 			return NULL;
4455 		} else {
4456 			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);
4457 			g_clear_error (&_inner_error0_);
4458 			return NULL;
4459 		}
4460 	}
4461 	_tmp0_ = vala_genie_parser_parse_argument_list (self, &_inner_error0_);
4462 	arg_list = _tmp0_;
4463 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4464 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4465 			g_propagate_error (error, _inner_error0_);
4466 			return NULL;
4467 		} else {
4468 			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);
4469 			g_clear_error (&_inner_error0_);
4470 			return NULL;
4471 		}
4472 	}
4473 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
4474 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4475 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4476 			g_propagate_error (error, _inner_error0_);
4477 			_vala_iterable_unref0 (arg_list);
4478 			return NULL;
4479 		} else {
4480 			_vala_iterable_unref0 (arg_list);
4481 			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);
4482 			g_clear_error (&_inner_error0_);
4483 			return NULL;
4484 		}
4485 	}
4486 	_tmp1_ = vala_genie_parser_parse_object_initializer (self, &_inner_error0_);
4487 	init_list = _tmp1_;
4488 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4489 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4490 			g_propagate_error (error, _inner_error0_);
4491 			_vala_iterable_unref0 (arg_list);
4492 			return NULL;
4493 		} else {
4494 			_vala_iterable_unref0 (arg_list);
4495 			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);
4496 			g_clear_error (&_inner_error0_);
4497 			return NULL;
4498 		}
4499 	}
4500 	_tmp3_ = init_list;
4501 	_tmp4_ = vala_collection_get_size ((ValaCollection*) _tmp3_);
4502 	_tmp5_ = _tmp4_;
4503 	if (_tmp5_ > 0) {
4504 		_tmp2_ = VALA_IS_MEMBER_ACCESS (inner);
4505 	} else {
4506 		_tmp2_ = FALSE;
4507 	}
4508 	if (_tmp2_) {
4509 		ValaMemberAccess* member = NULL;
4510 		ValaMemberAccess* _tmp6_;
4511 		ValaMemberAccess* _tmp7_;
4512 		ValaObjectCreationExpression* expr = NULL;
4513 		ValaMemberAccess* _tmp8_;
4514 		ValaSourceLocation _tmp9_;
4515 		ValaSourceReference* _tmp10_;
4516 		ValaSourceReference* _tmp11_;
4517 		ValaObjectCreationExpression* _tmp12_;
4518 		ValaObjectCreationExpression* _tmp13_;
4519 		ValaObjectCreationExpression* _tmp14_;
4520 		_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (inner, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
4521 		member = _tmp6_;
4522 		_tmp7_ = member;
4523 		vala_member_access_set_creation_member (_tmp7_, TRUE);
4524 		_tmp8_ = member;
4525 		_tmp9_ = *begin;
4526 		_tmp10_ = vala_genie_parser_get_src (self, &_tmp9_);
4527 		_tmp11_ = _tmp10_;
4528 		_tmp12_ = vala_object_creation_expression_new (_tmp8_, _tmp11_);
4529 		_tmp13_ = _tmp12_;
4530 		_vala_source_reference_unref0 (_tmp11_);
4531 		expr = _tmp13_;
4532 		_tmp14_ = expr;
4533 		vala_object_creation_expression_set_struct_creation (_tmp14_, TRUE);
4534 		{
4535 			ValaList* _arg_list = NULL;
4536 			ValaList* _tmp15_;
4537 			ValaList* _tmp16_;
4538 			gint _arg_size = 0;
4539 			ValaList* _tmp17_;
4540 			gint _tmp18_;
4541 			gint _tmp19_;
4542 			gint _arg_index = 0;
4543 			_tmp15_ = arg_list;
4544 			_tmp16_ = _vala_iterable_ref0 (_tmp15_);
4545 			_arg_list = _tmp16_;
4546 			_tmp17_ = _arg_list;
4547 			_tmp18_ = vala_collection_get_size ((ValaCollection*) _tmp17_);
4548 			_tmp19_ = _tmp18_;
4549 			_arg_size = _tmp19_;
4550 			_arg_index = -1;
4551 			while (TRUE) {
4552 				gint _tmp20_;
4553 				gint _tmp21_;
4554 				ValaExpression* arg = NULL;
4555 				ValaList* _tmp22_;
4556 				gpointer _tmp23_;
4557 				ValaObjectCreationExpression* _tmp24_;
4558 				ValaExpression* _tmp25_;
4559 				_arg_index = _arg_index + 1;
4560 				_tmp20_ = _arg_index;
4561 				_tmp21_ = _arg_size;
4562 				if (!(_tmp20_ < _tmp21_)) {
4563 					break;
4564 				}
4565 				_tmp22_ = _arg_list;
4566 				_tmp23_ = vala_list_get (_tmp22_, _arg_index);
4567 				arg = (ValaExpression*) _tmp23_;
4568 				_tmp24_ = expr;
4569 				_tmp25_ = arg;
4570 				vala_object_creation_expression_add_argument (_tmp24_, _tmp25_);
4571 				_vala_code_node_unref0 (arg);
4572 			}
4573 			_vala_iterable_unref0 (_arg_list);
4574 		}
4575 		{
4576 			ValaList* _initializer_list = NULL;
4577 			ValaList* _tmp26_;
4578 			ValaList* _tmp27_;
4579 			gint _initializer_size = 0;
4580 			ValaList* _tmp28_;
4581 			gint _tmp29_;
4582 			gint _tmp30_;
4583 			gint _initializer_index = 0;
4584 			_tmp26_ = init_list;
4585 			_tmp27_ = _vala_iterable_ref0 (_tmp26_);
4586 			_initializer_list = _tmp27_;
4587 			_tmp28_ = _initializer_list;
4588 			_tmp29_ = vala_collection_get_size ((ValaCollection*) _tmp28_);
4589 			_tmp30_ = _tmp29_;
4590 			_initializer_size = _tmp30_;
4591 			_initializer_index = -1;
4592 			while (TRUE) {
4593 				gint _tmp31_;
4594 				gint _tmp32_;
4595 				ValaMemberInitializer* initializer = NULL;
4596 				ValaList* _tmp33_;
4597 				gpointer _tmp34_;
4598 				ValaObjectCreationExpression* _tmp35_;
4599 				ValaMemberInitializer* _tmp36_;
4600 				_initializer_index = _initializer_index + 1;
4601 				_tmp31_ = _initializer_index;
4602 				_tmp32_ = _initializer_size;
4603 				if (!(_tmp31_ < _tmp32_)) {
4604 					break;
4605 				}
4606 				_tmp33_ = _initializer_list;
4607 				_tmp34_ = vala_list_get (_tmp33_, _initializer_index);
4608 				initializer = (ValaMemberInitializer*) _tmp34_;
4609 				_tmp35_ = expr;
4610 				_tmp36_ = initializer;
4611 				vala_object_creation_expression_add_member_initializer (_tmp35_, _tmp36_);
4612 				_vala_code_node_unref0 (initializer);
4613 			}
4614 			_vala_iterable_unref0 (_initializer_list);
4615 		}
4616 		result = (ValaExpression*) expr;
4617 		_vala_code_node_unref0 (member);
4618 		_vala_iterable_unref0 (init_list);
4619 		_vala_iterable_unref0 (arg_list);
4620 		return result;
4621 	} else {
4622 		ValaMethodCall* expr = NULL;
4623 		ValaSourceLocation _tmp37_;
4624 		ValaSourceReference* _tmp38_;
4625 		ValaSourceReference* _tmp39_;
4626 		ValaMethodCall* _tmp40_;
4627 		ValaMethodCall* _tmp41_;
4628 		_tmp37_ = *begin;
4629 		_tmp38_ = vala_genie_parser_get_src (self, &_tmp37_);
4630 		_tmp39_ = _tmp38_;
4631 		_tmp40_ = vala_method_call_new (inner, _tmp39_);
4632 		_tmp41_ = _tmp40_;
4633 		_vala_source_reference_unref0 (_tmp39_);
4634 		expr = _tmp41_;
4635 		{
4636 			ValaList* _arg_list = NULL;
4637 			ValaList* _tmp42_;
4638 			ValaList* _tmp43_;
4639 			gint _arg_size = 0;
4640 			ValaList* _tmp44_;
4641 			gint _tmp45_;
4642 			gint _tmp46_;
4643 			gint _arg_index = 0;
4644 			_tmp42_ = arg_list;
4645 			_tmp43_ = _vala_iterable_ref0 (_tmp42_);
4646 			_arg_list = _tmp43_;
4647 			_tmp44_ = _arg_list;
4648 			_tmp45_ = vala_collection_get_size ((ValaCollection*) _tmp44_);
4649 			_tmp46_ = _tmp45_;
4650 			_arg_size = _tmp46_;
4651 			_arg_index = -1;
4652 			while (TRUE) {
4653 				gint _tmp47_;
4654 				gint _tmp48_;
4655 				ValaExpression* arg = NULL;
4656 				ValaList* _tmp49_;
4657 				gpointer _tmp50_;
4658 				ValaMethodCall* _tmp51_;
4659 				ValaExpression* _tmp52_;
4660 				_arg_index = _arg_index + 1;
4661 				_tmp47_ = _arg_index;
4662 				_tmp48_ = _arg_size;
4663 				if (!(_tmp47_ < _tmp48_)) {
4664 					break;
4665 				}
4666 				_tmp49_ = _arg_list;
4667 				_tmp50_ = vala_list_get (_tmp49_, _arg_index);
4668 				arg = (ValaExpression*) _tmp50_;
4669 				_tmp51_ = expr;
4670 				_tmp52_ = arg;
4671 				vala_method_call_add_argument (_tmp51_, _tmp52_);
4672 				_vala_code_node_unref0 (arg);
4673 			}
4674 			_vala_iterable_unref0 (_arg_list);
4675 		}
4676 		result = (ValaExpression*) expr;
4677 		_vala_iterable_unref0 (init_list);
4678 		_vala_iterable_unref0 (arg_list);
4679 		return result;
4680 	}
4681 	_vala_iterable_unref0 (init_list);
4682 	_vala_iterable_unref0 (arg_list);
4683 }
4684 
4685 static ValaExpression*
vala_genie_parser_parse_element_access(ValaGenieParser * self,ValaSourceLocation * begin,ValaExpression * inner,GError ** error)4686 vala_genie_parser_parse_element_access (ValaGenieParser* self,
4687                                         ValaSourceLocation* begin,
4688                                         ValaExpression* inner,
4689                                         GError** error)
4690 {
4691 	ValaList* index_list = NULL;
4692 	ValaList* _tmp0_;
4693 	ValaExpression* stop = NULL;
4694 	gboolean _tmp1_ = FALSE;
4695 	ValaList* _tmp2_;
4696 	gint _tmp3_;
4697 	gint _tmp4_;
4698 	ValaExpression* _tmp8_;
4699 	GError* _inner_error0_ = NULL;
4700 	ValaExpression* result = NULL;
4701 	g_return_val_if_fail (self != NULL, NULL);
4702 	g_return_val_if_fail (begin != NULL, NULL);
4703 	g_return_val_if_fail (inner != NULL, NULL);
4704 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET, &_inner_error0_);
4705 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4706 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4707 			g_propagate_error (error, _inner_error0_);
4708 			return NULL;
4709 		} else {
4710 			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);
4711 			g_clear_error (&_inner_error0_);
4712 			return NULL;
4713 		}
4714 	}
4715 	_tmp0_ = vala_genie_parser_parse_expression_list (self, &_inner_error0_);
4716 	index_list = _tmp0_;
4717 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4718 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4719 			g_propagate_error (error, _inner_error0_);
4720 			return NULL;
4721 		} else {
4722 			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);
4723 			g_clear_error (&_inner_error0_);
4724 			return NULL;
4725 		}
4726 	}
4727 	stop = NULL;
4728 	_tmp2_ = index_list;
4729 	_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
4730 	_tmp4_ = _tmp3_;
4731 	if (_tmp4_ == 1) {
4732 		_tmp1_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON);
4733 	} else {
4734 		_tmp1_ = FALSE;
4735 	}
4736 	if (_tmp1_) {
4737 		ValaExpression* _tmp5_ = NULL;
4738 		ValaExpression* _tmp6_;
4739 		ValaExpression* _tmp7_;
4740 		_tmp6_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
4741 		_tmp5_ = _tmp6_;
4742 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
4743 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4744 				g_propagate_error (error, _inner_error0_);
4745 				_vala_code_node_unref0 (stop);
4746 				_vala_iterable_unref0 (index_list);
4747 				return NULL;
4748 			} else {
4749 				_vala_code_node_unref0 (stop);
4750 				_vala_iterable_unref0 (index_list);
4751 				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);
4752 				g_clear_error (&_inner_error0_);
4753 				return NULL;
4754 			}
4755 		}
4756 		_tmp7_ = _tmp5_;
4757 		_tmp5_ = NULL;
4758 		_vala_code_node_unref0 (stop);
4759 		stop = _tmp7_;
4760 		_vala_code_node_unref0 (_tmp5_);
4761 	}
4762 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET, &_inner_error0_);
4763 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4764 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4765 			g_propagate_error (error, _inner_error0_);
4766 			_vala_code_node_unref0 (stop);
4767 			_vala_iterable_unref0 (index_list);
4768 			return NULL;
4769 		} else {
4770 			_vala_code_node_unref0 (stop);
4771 			_vala_iterable_unref0 (index_list);
4772 			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);
4773 			g_clear_error (&_inner_error0_);
4774 			return NULL;
4775 		}
4776 	}
4777 	_tmp8_ = stop;
4778 	if (_tmp8_ == NULL) {
4779 		ValaElementAccess* expr = NULL;
4780 		ValaSourceLocation _tmp9_;
4781 		ValaSourceReference* _tmp10_;
4782 		ValaSourceReference* _tmp11_;
4783 		ValaElementAccess* _tmp12_;
4784 		ValaElementAccess* _tmp13_;
4785 		_tmp9_ = *begin;
4786 		_tmp10_ = vala_genie_parser_get_src (self, &_tmp9_);
4787 		_tmp11_ = _tmp10_;
4788 		_tmp12_ = vala_element_access_new (inner, _tmp11_);
4789 		_tmp13_ = _tmp12_;
4790 		_vala_source_reference_unref0 (_tmp11_);
4791 		expr = _tmp13_;
4792 		{
4793 			ValaList* _index_list = NULL;
4794 			ValaList* _tmp14_;
4795 			ValaList* _tmp15_;
4796 			gint _index_size = 0;
4797 			ValaList* _tmp16_;
4798 			gint _tmp17_;
4799 			gint _tmp18_;
4800 			gint _index_index = 0;
4801 			_tmp14_ = index_list;
4802 			_tmp15_ = _vala_iterable_ref0 (_tmp14_);
4803 			_index_list = _tmp15_;
4804 			_tmp16_ = _index_list;
4805 			_tmp17_ = vala_collection_get_size ((ValaCollection*) _tmp16_);
4806 			_tmp18_ = _tmp17_;
4807 			_index_size = _tmp18_;
4808 			_index_index = -1;
4809 			while (TRUE) {
4810 				gint _tmp19_;
4811 				gint _tmp20_;
4812 				ValaExpression* index = NULL;
4813 				ValaList* _tmp21_;
4814 				gpointer _tmp22_;
4815 				ValaElementAccess* _tmp23_;
4816 				ValaExpression* _tmp24_;
4817 				_index_index = _index_index + 1;
4818 				_tmp19_ = _index_index;
4819 				_tmp20_ = _index_size;
4820 				if (!(_tmp19_ < _tmp20_)) {
4821 					break;
4822 				}
4823 				_tmp21_ = _index_list;
4824 				_tmp22_ = vala_list_get (_tmp21_, _index_index);
4825 				index = (ValaExpression*) _tmp22_;
4826 				_tmp23_ = expr;
4827 				_tmp24_ = index;
4828 				vala_element_access_append_index (_tmp23_, _tmp24_);
4829 				_vala_code_node_unref0 (index);
4830 			}
4831 			_vala_iterable_unref0 (_index_list);
4832 		}
4833 		result = (ValaExpression*) expr;
4834 		_vala_code_node_unref0 (stop);
4835 		_vala_iterable_unref0 (index_list);
4836 		return result;
4837 	} else {
4838 		ValaList* _tmp25_;
4839 		gpointer _tmp26_;
4840 		ValaExpression* _tmp27_;
4841 		ValaExpression* _tmp28_;
4842 		ValaSourceLocation _tmp29_;
4843 		ValaSourceReference* _tmp30_;
4844 		ValaSourceReference* _tmp31_;
4845 		ValaSliceExpression* _tmp32_;
4846 		ValaExpression* _tmp33_;
4847 		_tmp25_ = index_list;
4848 		_tmp26_ = vala_list_get (_tmp25_, 0);
4849 		_tmp27_ = (ValaExpression*) _tmp26_;
4850 		_tmp28_ = stop;
4851 		_tmp29_ = *begin;
4852 		_tmp30_ = vala_genie_parser_get_src (self, &_tmp29_);
4853 		_tmp31_ = _tmp30_;
4854 		_tmp32_ = vala_slice_expression_new (inner, _tmp27_, _tmp28_, _tmp31_);
4855 		_tmp33_ = (ValaExpression*) _tmp32_;
4856 		_vala_source_reference_unref0 (_tmp31_);
4857 		_vala_code_node_unref0 (_tmp27_);
4858 		result = _tmp33_;
4859 		_vala_code_node_unref0 (stop);
4860 		_vala_iterable_unref0 (index_list);
4861 		return result;
4862 	}
4863 	_vala_code_node_unref0 (stop);
4864 	_vala_iterable_unref0 (index_list);
4865 }
4866 
4867 static ValaList*
vala_genie_parser_parse_expression_list(ValaGenieParser * self,GError ** error)4868 vala_genie_parser_parse_expression_list (ValaGenieParser* self,
4869                                          GError** error)
4870 {
4871 	ValaArrayList* list = NULL;
4872 	GEqualFunc _tmp0_;
4873 	ValaArrayList* _tmp1_;
4874 	GError* _inner_error0_ = NULL;
4875 	ValaList* result = NULL;
4876 	g_return_val_if_fail (self != NULL, NULL);
4877 	_tmp0_ = g_direct_equal;
4878 	_tmp1_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
4879 	list = _tmp1_;
4880 	{
4881 		gboolean _tmp2_ = FALSE;
4882 		_tmp2_ = TRUE;
4883 		while (TRUE) {
4884 			ValaExpression* _tmp3_ = NULL;
4885 			ValaExpression* _tmp4_;
4886 			ValaArrayList* _tmp5_;
4887 			if (!_tmp2_) {
4888 				if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
4889 					break;
4890 				}
4891 			}
4892 			_tmp2_ = FALSE;
4893 			_tmp4_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
4894 			_tmp3_ = _tmp4_;
4895 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
4896 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4897 					g_propagate_error (error, _inner_error0_);
4898 					_vala_iterable_unref0 (list);
4899 					return NULL;
4900 				} else {
4901 					_vala_iterable_unref0 (list);
4902 					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);
4903 					g_clear_error (&_inner_error0_);
4904 					return NULL;
4905 				}
4906 			}
4907 			_tmp5_ = list;
4908 			vala_collection_add ((ValaCollection*) _tmp5_, _tmp3_);
4909 			_vala_code_node_unref0 (_tmp3_);
4910 		}
4911 	}
4912 	result = (ValaList*) list;
4913 	return result;
4914 }
4915 
4916 static ValaExpression*
vala_genie_parser_parse_this_access(ValaGenieParser * self,GError ** error)4917 vala_genie_parser_parse_this_access (ValaGenieParser* self,
4918                                      GError** error)
4919 {
4920 	ValaSourceLocation begin = {0};
4921 	ValaSourceLocation _tmp0_ = {0};
4922 	ValaSourceLocation _tmp1_;
4923 	ValaSourceReference* _tmp2_;
4924 	ValaSourceReference* _tmp3_;
4925 	ValaMemberAccess* _tmp4_;
4926 	ValaExpression* _tmp5_;
4927 	GError* _inner_error0_ = NULL;
4928 	ValaExpression* result = NULL;
4929 	g_return_val_if_fail (self != NULL, NULL);
4930 	vala_genie_parser_get_location (self, &_tmp0_);
4931 	begin = _tmp0_;
4932 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_SELF, &_inner_error0_);
4933 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4934 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4935 			g_propagate_error (error, _inner_error0_);
4936 			return NULL;
4937 		} else {
4938 			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);
4939 			g_clear_error (&_inner_error0_);
4940 			return NULL;
4941 		}
4942 	}
4943 	_tmp1_ = begin;
4944 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
4945 	_tmp3_ = _tmp2_;
4946 	_tmp4_ = vala_member_access_new (NULL, "this", _tmp3_);
4947 	_tmp5_ = (ValaExpression*) _tmp4_;
4948 	_vala_source_reference_unref0 (_tmp3_);
4949 	result = _tmp5_;
4950 	return result;
4951 }
4952 
4953 static ValaExpression*
vala_genie_parser_parse_base_access(ValaGenieParser * self,GError ** error)4954 vala_genie_parser_parse_base_access (ValaGenieParser* self,
4955                                      GError** error)
4956 {
4957 	ValaSourceLocation begin = {0};
4958 	ValaSourceLocation _tmp0_ = {0};
4959 	ValaSourceLocation _tmp1_;
4960 	ValaSourceReference* _tmp2_;
4961 	ValaSourceReference* _tmp3_;
4962 	ValaBaseAccess* _tmp4_;
4963 	ValaExpression* _tmp5_;
4964 	GError* _inner_error0_ = NULL;
4965 	ValaExpression* result = NULL;
4966 	g_return_val_if_fail (self != NULL, NULL);
4967 	vala_genie_parser_get_location (self, &_tmp0_);
4968 	begin = _tmp0_;
4969 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_SUPER, &_inner_error0_);
4970 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
4971 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
4972 			g_propagate_error (error, _inner_error0_);
4973 			return NULL;
4974 		} else {
4975 			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);
4976 			g_clear_error (&_inner_error0_);
4977 			return NULL;
4978 		}
4979 	}
4980 	_tmp1_ = begin;
4981 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
4982 	_tmp3_ = _tmp2_;
4983 	_tmp4_ = vala_base_access_new (_tmp3_);
4984 	_tmp5_ = (ValaExpression*) _tmp4_;
4985 	_vala_source_reference_unref0 (_tmp3_);
4986 	result = _tmp5_;
4987 	return result;
4988 }
4989 
4990 static ValaExpression*
vala_genie_parser_parse_post_increment_expression(ValaGenieParser * self,ValaSourceLocation * begin,ValaExpression * inner,GError ** error)4991 vala_genie_parser_parse_post_increment_expression (ValaGenieParser* self,
4992                                                    ValaSourceLocation* begin,
4993                                                    ValaExpression* inner,
4994                                                    GError** error)
4995 {
4996 	ValaSourceLocation _tmp0_;
4997 	ValaSourceReference* _tmp1_;
4998 	ValaSourceReference* _tmp2_;
4999 	ValaPostfixExpression* _tmp3_;
5000 	ValaExpression* _tmp4_;
5001 	GError* _inner_error0_ = NULL;
5002 	ValaExpression* result = NULL;
5003 	g_return_val_if_fail (self != NULL, NULL);
5004 	g_return_val_if_fail (begin != NULL, NULL);
5005 	g_return_val_if_fail (inner != NULL, NULL);
5006 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OP_INC, &_inner_error0_);
5007 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5008 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5009 			g_propagate_error (error, _inner_error0_);
5010 			return NULL;
5011 		} else {
5012 			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);
5013 			g_clear_error (&_inner_error0_);
5014 			return NULL;
5015 		}
5016 	}
5017 	_tmp0_ = *begin;
5018 	_tmp1_ = vala_genie_parser_get_src (self, &_tmp0_);
5019 	_tmp2_ = _tmp1_;
5020 	_tmp3_ = vala_postfix_expression_new (inner, TRUE, _tmp2_);
5021 	_tmp4_ = (ValaExpression*) _tmp3_;
5022 	_vala_source_reference_unref0 (_tmp2_);
5023 	result = _tmp4_;
5024 	return result;
5025 }
5026 
5027 static ValaExpression*
vala_genie_parser_parse_post_decrement_expression(ValaGenieParser * self,ValaSourceLocation * begin,ValaExpression * inner,GError ** error)5028 vala_genie_parser_parse_post_decrement_expression (ValaGenieParser* self,
5029                                                    ValaSourceLocation* begin,
5030                                                    ValaExpression* inner,
5031                                                    GError** error)
5032 {
5033 	ValaSourceLocation _tmp0_;
5034 	ValaSourceReference* _tmp1_;
5035 	ValaSourceReference* _tmp2_;
5036 	ValaPostfixExpression* _tmp3_;
5037 	ValaExpression* _tmp4_;
5038 	GError* _inner_error0_ = NULL;
5039 	ValaExpression* result = NULL;
5040 	g_return_val_if_fail (self != NULL, NULL);
5041 	g_return_val_if_fail (begin != NULL, NULL);
5042 	g_return_val_if_fail (inner != NULL, NULL);
5043 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OP_DEC, &_inner_error0_);
5044 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5045 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5046 			g_propagate_error (error, _inner_error0_);
5047 			return NULL;
5048 		} else {
5049 			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);
5050 			g_clear_error (&_inner_error0_);
5051 			return NULL;
5052 		}
5053 	}
5054 	_tmp0_ = *begin;
5055 	_tmp1_ = vala_genie_parser_get_src (self, &_tmp0_);
5056 	_tmp2_ = _tmp1_;
5057 	_tmp3_ = vala_postfix_expression_new (inner, FALSE, _tmp2_);
5058 	_tmp4_ = (ValaExpression*) _tmp3_;
5059 	_vala_source_reference_unref0 (_tmp2_);
5060 	result = _tmp4_;
5061 	return result;
5062 }
5063 
5064 static ValaExpression*
vala_genie_parser_parse_object_or_array_creation_expression(ValaGenieParser * self,GError ** error)5065 vala_genie_parser_parse_object_or_array_creation_expression (ValaGenieParser* self,
5066                                                              GError** error)
5067 {
5068 	ValaSourceLocation begin = {0};
5069 	ValaSourceLocation _tmp0_ = {0};
5070 	ValaMemberAccess* member = NULL;
5071 	ValaMemberAccess* _tmp15_;
5072 	ValaExpression* expr = NULL;
5073 	ValaSourceLocation _tmp16_;
5074 	ValaMemberAccess* _tmp17_;
5075 	ValaExpression* _tmp18_;
5076 	GError* _inner_error0_ = NULL;
5077 	ValaExpression* result = NULL;
5078 	g_return_val_if_fail (self != NULL, NULL);
5079 	vala_genie_parser_get_location (self, &_tmp0_);
5080 	begin = _tmp0_;
5081 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_NEW, &_inner_error0_);
5082 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5083 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5084 			g_propagate_error (error, _inner_error0_);
5085 			return NULL;
5086 		} else {
5087 			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);
5088 			g_clear_error (&_inner_error0_);
5089 			return NULL;
5090 		}
5091 	}
5092 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ARRAY)) {
5093 		ValaDataType* mtype = NULL;
5094 		ValaDataType* _tmp1_;
5095 		ValaExpression* expr = NULL;
5096 		ValaSourceLocation _tmp2_;
5097 		ValaDataType* _tmp3_;
5098 		ValaExpression* _tmp4_;
5099 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OF, &_inner_error0_);
5100 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5101 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5102 				g_propagate_error (error, _inner_error0_);
5103 				return NULL;
5104 			} else {
5105 				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);
5106 				g_clear_error (&_inner_error0_);
5107 				return NULL;
5108 			}
5109 		}
5110 		_tmp1_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
5111 		mtype = _tmp1_;
5112 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5113 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5114 				g_propagate_error (error, _inner_error0_);
5115 				return NULL;
5116 			} else {
5117 				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);
5118 				g_clear_error (&_inner_error0_);
5119 				return NULL;
5120 			}
5121 		}
5122 		_tmp2_ = begin;
5123 		_tmp3_ = mtype;
5124 		_tmp4_ = vala_genie_parser_parse_array_creation_expression (self, &_tmp2_, _tmp3_, &_inner_error0_);
5125 		expr = _tmp4_;
5126 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5127 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5128 				g_propagate_error (error, _inner_error0_);
5129 				_vala_code_node_unref0 (mtype);
5130 				return NULL;
5131 			} else {
5132 				_vala_code_node_unref0 (mtype);
5133 				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);
5134 				g_clear_error (&_inner_error0_);
5135 				return NULL;
5136 			}
5137 		}
5138 		result = expr;
5139 		_vala_code_node_unref0 (mtype);
5140 		return result;
5141 	}
5142 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_LIST)) {
5143 		ValaDataType* mtype = NULL;
5144 		ValaDataType* _tmp5_;
5145 		ValaExpression* expr = NULL;
5146 		ValaSourceLocation _tmp6_;
5147 		ValaDataType* _tmp7_;
5148 		ValaExpression* _tmp8_;
5149 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OF, &_inner_error0_);
5150 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5151 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5152 				g_propagate_error (error, _inner_error0_);
5153 				return NULL;
5154 			} else {
5155 				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);
5156 				g_clear_error (&_inner_error0_);
5157 				return NULL;
5158 			}
5159 		}
5160 		_tmp5_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
5161 		mtype = _tmp5_;
5162 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5163 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5164 				g_propagate_error (error, _inner_error0_);
5165 				return NULL;
5166 			} else {
5167 				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);
5168 				g_clear_error (&_inner_error0_);
5169 				return NULL;
5170 			}
5171 		}
5172 		_tmp6_ = begin;
5173 		_tmp7_ = mtype;
5174 		_tmp8_ = vala_genie_parser_parse_list_creation_expression (self, &_tmp6_, _tmp7_, &_inner_error0_);
5175 		expr = _tmp8_;
5176 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5177 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5178 				g_propagate_error (error, _inner_error0_);
5179 				_vala_code_node_unref0 (mtype);
5180 				return NULL;
5181 			} else {
5182 				_vala_code_node_unref0 (mtype);
5183 				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);
5184 				g_clear_error (&_inner_error0_);
5185 				return NULL;
5186 			}
5187 		}
5188 		result = expr;
5189 		_vala_code_node_unref0 (mtype);
5190 		return result;
5191 	}
5192 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DICT)) {
5193 		ValaDataType* mtype1 = NULL;
5194 		ValaDataType* _tmp9_;
5195 		ValaDataType* mtype2 = NULL;
5196 		ValaDataType* _tmp10_;
5197 		ValaExpression* expr = NULL;
5198 		ValaSourceLocation _tmp11_;
5199 		ValaDataType* _tmp12_;
5200 		ValaDataType* _tmp13_;
5201 		ValaExpression* _tmp14_;
5202 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OF, &_inner_error0_);
5203 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5204 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5205 				g_propagate_error (error, _inner_error0_);
5206 				return NULL;
5207 			} else {
5208 				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);
5209 				g_clear_error (&_inner_error0_);
5210 				return NULL;
5211 			}
5212 		}
5213 		_tmp9_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
5214 		mtype1 = _tmp9_;
5215 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5216 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5217 				g_propagate_error (error, _inner_error0_);
5218 				return NULL;
5219 			} else {
5220 				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);
5221 				g_clear_error (&_inner_error0_);
5222 				return NULL;
5223 			}
5224 		}
5225 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COMMA, &_inner_error0_);
5226 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5227 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5228 				g_propagate_error (error, _inner_error0_);
5229 				_vala_code_node_unref0 (mtype1);
5230 				return NULL;
5231 			} else {
5232 				_vala_code_node_unref0 (mtype1);
5233 				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);
5234 				g_clear_error (&_inner_error0_);
5235 				return NULL;
5236 			}
5237 		}
5238 		_tmp10_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
5239 		mtype2 = _tmp10_;
5240 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5241 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5242 				g_propagate_error (error, _inner_error0_);
5243 				_vala_code_node_unref0 (mtype1);
5244 				return NULL;
5245 			} else {
5246 				_vala_code_node_unref0 (mtype1);
5247 				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);
5248 				g_clear_error (&_inner_error0_);
5249 				return NULL;
5250 			}
5251 		}
5252 		_tmp11_ = begin;
5253 		_tmp12_ = mtype1;
5254 		_tmp13_ = mtype2;
5255 		_tmp14_ = vala_genie_parser_parse_dict_creation_expression (self, &_tmp11_, _tmp12_, _tmp13_, &_inner_error0_);
5256 		expr = _tmp14_;
5257 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5258 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5259 				g_propagate_error (error, _inner_error0_);
5260 				_vala_code_node_unref0 (mtype2);
5261 				_vala_code_node_unref0 (mtype1);
5262 				return NULL;
5263 			} else {
5264 				_vala_code_node_unref0 (mtype2);
5265 				_vala_code_node_unref0 (mtype1);
5266 				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);
5267 				g_clear_error (&_inner_error0_);
5268 				return NULL;
5269 			}
5270 		}
5271 		result = expr;
5272 		_vala_code_node_unref0 (mtype2);
5273 		_vala_code_node_unref0 (mtype1);
5274 		return result;
5275 	}
5276 	_tmp15_ = vala_genie_parser_parse_member_name (self, NULL, &_inner_error0_);
5277 	member = _tmp15_;
5278 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5279 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5280 			g_propagate_error (error, _inner_error0_);
5281 			return NULL;
5282 		} else {
5283 			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);
5284 			g_clear_error (&_inner_error0_);
5285 			return NULL;
5286 		}
5287 	}
5288 	_tmp16_ = begin;
5289 	_tmp17_ = member;
5290 	_tmp18_ = vala_genie_parser_parse_object_creation_expression (self, &_tmp16_, _tmp17_, &_inner_error0_);
5291 	expr = _tmp18_;
5292 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5293 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5294 			g_propagate_error (error, _inner_error0_);
5295 			_vala_code_node_unref0 (member);
5296 			return NULL;
5297 		} else {
5298 			_vala_code_node_unref0 (member);
5299 			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);
5300 			g_clear_error (&_inner_error0_);
5301 			return NULL;
5302 		}
5303 	}
5304 	result = expr;
5305 	_vala_code_node_unref0 (member);
5306 	return result;
5307 }
5308 
5309 static ValaExpression*
vala_genie_parser_parse_object_creation_expression(ValaGenieParser * self,ValaSourceLocation * begin,ValaMemberAccess * member,GError ** error)5310 vala_genie_parser_parse_object_creation_expression (ValaGenieParser* self,
5311                                                     ValaSourceLocation* begin,
5312                                                     ValaMemberAccess* member,
5313                                                     GError** error)
5314 {
5315 	ValaList* arg_list = NULL;
5316 	ValaList* init_list = NULL;
5317 	ValaList* _tmp5_;
5318 	ValaObjectCreationExpression* expr = NULL;
5319 	ValaSourceLocation _tmp6_;
5320 	ValaSourceReference* _tmp7_;
5321 	ValaSourceReference* _tmp8_;
5322 	ValaObjectCreationExpression* _tmp9_;
5323 	ValaObjectCreationExpression* _tmp10_;
5324 	GError* _inner_error0_ = NULL;
5325 	ValaExpression* result = NULL;
5326 	g_return_val_if_fail (self != NULL, NULL);
5327 	g_return_val_if_fail (begin != NULL, NULL);
5328 	g_return_val_if_fail (member != NULL, NULL);
5329 	vala_member_access_set_creation_member (member, TRUE);
5330 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS)) {
5331 		ValaList* _tmp0_ = NULL;
5332 		ValaList* _tmp1_;
5333 		ValaList* _tmp2_;
5334 		_tmp1_ = vala_genie_parser_parse_argument_list (self, &_inner_error0_);
5335 		_tmp0_ = _tmp1_;
5336 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5337 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5338 				g_propagate_error (error, _inner_error0_);
5339 				_vala_iterable_unref0 (arg_list);
5340 				return NULL;
5341 			} else {
5342 				_vala_iterable_unref0 (arg_list);
5343 				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);
5344 				g_clear_error (&_inner_error0_);
5345 				return NULL;
5346 			}
5347 		}
5348 		_tmp2_ = _tmp0_;
5349 		_tmp0_ = NULL;
5350 		_vala_iterable_unref0 (arg_list);
5351 		arg_list = _tmp2_;
5352 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
5353 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5354 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5355 				g_propagate_error (error, _inner_error0_);
5356 				_vala_iterable_unref0 (_tmp0_);
5357 				_vala_iterable_unref0 (arg_list);
5358 				return NULL;
5359 			} else {
5360 				_vala_iterable_unref0 (_tmp0_);
5361 				_vala_iterable_unref0 (arg_list);
5362 				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);
5363 				g_clear_error (&_inner_error0_);
5364 				return NULL;
5365 			}
5366 		}
5367 		_vala_iterable_unref0 (_tmp0_);
5368 	} else {
5369 		GEqualFunc _tmp3_;
5370 		ValaArrayList* _tmp4_;
5371 		_tmp3_ = g_direct_equal;
5372 		_tmp4_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp3_);
5373 		_vala_iterable_unref0 (arg_list);
5374 		arg_list = (ValaList*) _tmp4_;
5375 	}
5376 	_tmp5_ = vala_genie_parser_parse_object_initializer (self, &_inner_error0_);
5377 	init_list = _tmp5_;
5378 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5379 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5380 			g_propagate_error (error, _inner_error0_);
5381 			_vala_iterable_unref0 (arg_list);
5382 			return NULL;
5383 		} else {
5384 			_vala_iterable_unref0 (arg_list);
5385 			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);
5386 			g_clear_error (&_inner_error0_);
5387 			return NULL;
5388 		}
5389 	}
5390 	_tmp6_ = *begin;
5391 	_tmp7_ = vala_genie_parser_get_src (self, &_tmp6_);
5392 	_tmp8_ = _tmp7_;
5393 	_tmp9_ = vala_object_creation_expression_new (member, _tmp8_);
5394 	_tmp10_ = _tmp9_;
5395 	_vala_source_reference_unref0 (_tmp8_);
5396 	expr = _tmp10_;
5397 	{
5398 		ValaList* _arg_list = NULL;
5399 		ValaList* _tmp11_;
5400 		ValaList* _tmp12_;
5401 		gint _arg_size = 0;
5402 		ValaList* _tmp13_;
5403 		gint _tmp14_;
5404 		gint _tmp15_;
5405 		gint _arg_index = 0;
5406 		_tmp11_ = arg_list;
5407 		_tmp12_ = _vala_iterable_ref0 (_tmp11_);
5408 		_arg_list = _tmp12_;
5409 		_tmp13_ = _arg_list;
5410 		_tmp14_ = vala_collection_get_size ((ValaCollection*) _tmp13_);
5411 		_tmp15_ = _tmp14_;
5412 		_arg_size = _tmp15_;
5413 		_arg_index = -1;
5414 		while (TRUE) {
5415 			gint _tmp16_;
5416 			gint _tmp17_;
5417 			ValaExpression* arg = NULL;
5418 			ValaList* _tmp18_;
5419 			gpointer _tmp19_;
5420 			ValaObjectCreationExpression* _tmp20_;
5421 			ValaExpression* _tmp21_;
5422 			_arg_index = _arg_index + 1;
5423 			_tmp16_ = _arg_index;
5424 			_tmp17_ = _arg_size;
5425 			if (!(_tmp16_ < _tmp17_)) {
5426 				break;
5427 			}
5428 			_tmp18_ = _arg_list;
5429 			_tmp19_ = vala_list_get (_tmp18_, _arg_index);
5430 			arg = (ValaExpression*) _tmp19_;
5431 			_tmp20_ = expr;
5432 			_tmp21_ = arg;
5433 			vala_object_creation_expression_add_argument (_tmp20_, _tmp21_);
5434 			_vala_code_node_unref0 (arg);
5435 		}
5436 		_vala_iterable_unref0 (_arg_list);
5437 	}
5438 	{
5439 		ValaList* _initializer_list = NULL;
5440 		ValaList* _tmp22_;
5441 		ValaList* _tmp23_;
5442 		gint _initializer_size = 0;
5443 		ValaList* _tmp24_;
5444 		gint _tmp25_;
5445 		gint _tmp26_;
5446 		gint _initializer_index = 0;
5447 		_tmp22_ = init_list;
5448 		_tmp23_ = _vala_iterable_ref0 (_tmp22_);
5449 		_initializer_list = _tmp23_;
5450 		_tmp24_ = _initializer_list;
5451 		_tmp25_ = vala_collection_get_size ((ValaCollection*) _tmp24_);
5452 		_tmp26_ = _tmp25_;
5453 		_initializer_size = _tmp26_;
5454 		_initializer_index = -1;
5455 		while (TRUE) {
5456 			gint _tmp27_;
5457 			gint _tmp28_;
5458 			ValaMemberInitializer* initializer = NULL;
5459 			ValaList* _tmp29_;
5460 			gpointer _tmp30_;
5461 			ValaObjectCreationExpression* _tmp31_;
5462 			ValaMemberInitializer* _tmp32_;
5463 			_initializer_index = _initializer_index + 1;
5464 			_tmp27_ = _initializer_index;
5465 			_tmp28_ = _initializer_size;
5466 			if (!(_tmp27_ < _tmp28_)) {
5467 				break;
5468 			}
5469 			_tmp29_ = _initializer_list;
5470 			_tmp30_ = vala_list_get (_tmp29_, _initializer_index);
5471 			initializer = (ValaMemberInitializer*) _tmp30_;
5472 			_tmp31_ = expr;
5473 			_tmp32_ = initializer;
5474 			vala_object_creation_expression_add_member_initializer (_tmp31_, _tmp32_);
5475 			_vala_code_node_unref0 (initializer);
5476 		}
5477 		_vala_iterable_unref0 (_initializer_list);
5478 	}
5479 	result = (ValaExpression*) expr;
5480 	_vala_iterable_unref0 (init_list);
5481 	_vala_iterable_unref0 (arg_list);
5482 	return result;
5483 }
5484 
5485 static ValaExpression*
vala_genie_parser_parse_array_creation_expression(ValaGenieParser * self,ValaSourceLocation * begin,ValaDataType * element_type,GError ** error)5486 vala_genie_parser_parse_array_creation_expression (ValaGenieParser* self,
5487                                                    ValaSourceLocation* begin,
5488                                                    ValaDataType* element_type,
5489                                                    GError** error)
5490 {
5491 	gboolean size_specified = FALSE;
5492 	ValaList* size_specifier_list = NULL;
5493 	gboolean first = FALSE;
5494 	ValaDataType* etype = NULL;
5495 	ValaDataType* _tmp0_;
5496 	gboolean has_bracket = FALSE;
5497 	ValaInitializerList* initializer = NULL;
5498 	ValaArrayCreationExpression* expr = NULL;
5499 	ValaDataType* _tmp24_;
5500 	ValaList* _tmp25_;
5501 	gint _tmp26_;
5502 	gint _tmp27_;
5503 	ValaInitializerList* _tmp28_;
5504 	ValaSourceLocation _tmp29_;
5505 	ValaSourceReference* _tmp30_;
5506 	ValaSourceReference* _tmp31_;
5507 	ValaArrayCreationExpression* _tmp32_;
5508 	ValaArrayCreationExpression* _tmp33_;
5509 	GError* _inner_error0_ = NULL;
5510 	ValaExpression* result = NULL;
5511 	g_return_val_if_fail (self != NULL, NULL);
5512 	g_return_val_if_fail (begin != NULL, NULL);
5513 	g_return_val_if_fail (element_type != NULL, NULL);
5514 	size_specified = FALSE;
5515 	size_specifier_list = NULL;
5516 	first = TRUE;
5517 	_tmp0_ = vala_data_type_copy (element_type);
5518 	etype = _tmp0_;
5519 	has_bracket = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET);
5520 	{
5521 		gboolean _tmp1_ = FALSE;
5522 		_tmp1_ = TRUE;
5523 		while (TRUE) {
5524 			GEqualFunc _tmp11_;
5525 			ValaArrayList* _tmp12_;
5526 			if (!_tmp1_) {
5527 				if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET)) {
5528 					break;
5529 				}
5530 			}
5531 			_tmp1_ = FALSE;
5532 			if (!first) {
5533 				ValaDataType* _tmp3_;
5534 				ValaList* _tmp4_;
5535 				gint _tmp5_;
5536 				gint _tmp6_;
5537 				ValaDataType* _tmp7_;
5538 				ValaSourceReference* _tmp8_;
5539 				ValaSourceReference* _tmp9_;
5540 				ValaArrayType* _tmp10_;
5541 				if (size_specified) {
5542 					GError* _tmp2_;
5543 					_tmp2_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "size of inner arrays must not be specified in array creation expressio" \
5544 "n");
5545 					_inner_error0_ = _tmp2_;
5546 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5547 						g_propagate_error (error, _inner_error0_);
5548 						_vala_code_node_unref0 (etype);
5549 						_vala_iterable_unref0 (size_specifier_list);
5550 						return NULL;
5551 					} else {
5552 						_vala_code_node_unref0 (etype);
5553 						_vala_iterable_unref0 (size_specifier_list);
5554 						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);
5555 						g_clear_error (&_inner_error0_);
5556 						return NULL;
5557 					}
5558 				}
5559 				_tmp3_ = etype;
5560 				_tmp4_ = size_specifier_list;
5561 				_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
5562 				_tmp6_ = _tmp5_;
5563 				_tmp7_ = etype;
5564 				_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp7_);
5565 				_tmp9_ = _tmp8_;
5566 				_tmp10_ = vala_array_type_new (_tmp3_, _tmp6_, _tmp9_);
5567 				_vala_code_node_unref0 (etype);
5568 				etype = (ValaDataType*) _tmp10_;
5569 			} else {
5570 				first = FALSE;
5571 			}
5572 			_tmp11_ = g_direct_equal;
5573 			_tmp12_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp11_);
5574 			_vala_iterable_unref0 (size_specifier_list);
5575 			size_specifier_list = (ValaList*) _tmp12_;
5576 			{
5577 				gboolean _tmp13_ = FALSE;
5578 				_tmp13_ = TRUE;
5579 				while (TRUE) {
5580 					ValaExpression* size = NULL;
5581 					gboolean _tmp14_ = FALSE;
5582 					gboolean _tmp15_ = FALSE;
5583 					ValaList* _tmp19_;
5584 					ValaExpression* _tmp20_;
5585 					if (!_tmp13_) {
5586 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
5587 							break;
5588 						}
5589 					}
5590 					_tmp13_ = FALSE;
5591 					size = NULL;
5592 					if (has_bracket) {
5593 						_tmp15_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET;
5594 					} else {
5595 						_tmp15_ = FALSE;
5596 					}
5597 					if (_tmp15_) {
5598 						_tmp14_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_COMMA;
5599 					} else {
5600 						_tmp14_ = FALSE;
5601 					}
5602 					if (_tmp14_) {
5603 						ValaExpression* _tmp16_ = NULL;
5604 						ValaExpression* _tmp17_;
5605 						ValaExpression* _tmp18_;
5606 						_tmp17_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
5607 						_tmp16_ = _tmp17_;
5608 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
5609 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5610 								g_propagate_error (error, _inner_error0_);
5611 								_vala_code_node_unref0 (size);
5612 								_vala_code_node_unref0 (etype);
5613 								_vala_iterable_unref0 (size_specifier_list);
5614 								return NULL;
5615 							} else {
5616 								_vala_code_node_unref0 (size);
5617 								_vala_code_node_unref0 (etype);
5618 								_vala_iterable_unref0 (size_specifier_list);
5619 								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);
5620 								g_clear_error (&_inner_error0_);
5621 								return NULL;
5622 							}
5623 						}
5624 						_tmp18_ = _tmp16_;
5625 						_tmp16_ = NULL;
5626 						_vala_code_node_unref0 (size);
5627 						size = _tmp18_;
5628 						size_specified = TRUE;
5629 						_vala_code_node_unref0 (_tmp16_);
5630 					}
5631 					_tmp19_ = size_specifier_list;
5632 					_tmp20_ = size;
5633 					vala_collection_add ((ValaCollection*) _tmp19_, _tmp20_);
5634 					_vala_code_node_unref0 (size);
5635 				}
5636 			}
5637 			if (has_bracket) {
5638 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET, &_inner_error0_);
5639 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
5640 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5641 						g_propagate_error (error, _inner_error0_);
5642 						_vala_code_node_unref0 (etype);
5643 						_vala_iterable_unref0 (size_specifier_list);
5644 						return NULL;
5645 					} else {
5646 						_vala_code_node_unref0 (etype);
5647 						_vala_iterable_unref0 (size_specifier_list);
5648 						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);
5649 						g_clear_error (&_inner_error0_);
5650 						return NULL;
5651 					}
5652 				}
5653 			}
5654 		}
5655 	}
5656 	initializer = NULL;
5657 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
5658 		ValaInitializerList* _tmp21_ = NULL;
5659 		ValaInitializerList* _tmp22_;
5660 		ValaInitializerList* _tmp23_;
5661 		_tmp22_ = vala_genie_parser_parse_initializer (self, &_inner_error0_);
5662 		_tmp21_ = _tmp22_;
5663 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5664 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5665 				g_propagate_error (error, _inner_error0_);
5666 				_vala_code_node_unref0 (initializer);
5667 				_vala_code_node_unref0 (etype);
5668 				_vala_iterable_unref0 (size_specifier_list);
5669 				return NULL;
5670 			} else {
5671 				_vala_code_node_unref0 (initializer);
5672 				_vala_code_node_unref0 (etype);
5673 				_vala_iterable_unref0 (size_specifier_list);
5674 				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);
5675 				g_clear_error (&_inner_error0_);
5676 				return NULL;
5677 			}
5678 		}
5679 		_tmp23_ = _tmp21_;
5680 		_tmp21_ = NULL;
5681 		_vala_code_node_unref0 (initializer);
5682 		initializer = _tmp23_;
5683 		_vala_code_node_unref0 (_tmp21_);
5684 	}
5685 	_tmp24_ = etype;
5686 	_tmp25_ = size_specifier_list;
5687 	_tmp26_ = vala_collection_get_size ((ValaCollection*) _tmp25_);
5688 	_tmp27_ = _tmp26_;
5689 	_tmp28_ = initializer;
5690 	_tmp29_ = *begin;
5691 	_tmp30_ = vala_genie_parser_get_src (self, &_tmp29_);
5692 	_tmp31_ = _tmp30_;
5693 	_tmp32_ = vala_array_creation_expression_new (_tmp24_, _tmp27_, _tmp28_, _tmp31_);
5694 	_tmp33_ = _tmp32_;
5695 	_vala_source_reference_unref0 (_tmp31_);
5696 	expr = _tmp33_;
5697 	if (size_specified) {
5698 		{
5699 			ValaList* _size_list = NULL;
5700 			ValaList* _tmp34_;
5701 			ValaList* _tmp35_;
5702 			gint _size_size = 0;
5703 			ValaList* _tmp36_;
5704 			gint _tmp37_;
5705 			gint _tmp38_;
5706 			gint _size_index = 0;
5707 			_tmp34_ = size_specifier_list;
5708 			_tmp35_ = _vala_iterable_ref0 (_tmp34_);
5709 			_size_list = _tmp35_;
5710 			_tmp36_ = _size_list;
5711 			_tmp37_ = vala_collection_get_size ((ValaCollection*) _tmp36_);
5712 			_tmp38_ = _tmp37_;
5713 			_size_size = _tmp38_;
5714 			_size_index = -1;
5715 			while (TRUE) {
5716 				gint _tmp39_;
5717 				gint _tmp40_;
5718 				ValaExpression* size = NULL;
5719 				ValaList* _tmp41_;
5720 				gpointer _tmp42_;
5721 				ValaArrayCreationExpression* _tmp43_;
5722 				ValaExpression* _tmp44_;
5723 				_size_index = _size_index + 1;
5724 				_tmp39_ = _size_index;
5725 				_tmp40_ = _size_size;
5726 				if (!(_tmp39_ < _tmp40_)) {
5727 					break;
5728 				}
5729 				_tmp41_ = _size_list;
5730 				_tmp42_ = vala_list_get (_tmp41_, _size_index);
5731 				size = (ValaExpression*) _tmp42_;
5732 				_tmp43_ = expr;
5733 				_tmp44_ = size;
5734 				vala_array_creation_expression_append_size (_tmp43_, _tmp44_);
5735 				_vala_code_node_unref0 (size);
5736 			}
5737 			_vala_iterable_unref0 (_size_list);
5738 		}
5739 	}
5740 	result = (ValaExpression*) expr;
5741 	_vala_code_node_unref0 (initializer);
5742 	_vala_code_node_unref0 (etype);
5743 	_vala_iterable_unref0 (size_specifier_list);
5744 	return result;
5745 }
5746 
5747 static ValaExpression*
vala_genie_parser_parse_list_creation_expression(ValaGenieParser * self,ValaSourceLocation * begin,ValaDataType * element_type,GError ** error)5748 vala_genie_parser_parse_list_creation_expression (ValaGenieParser* self,
5749                                                   ValaSourceLocation* begin,
5750                                                   ValaDataType* element_type,
5751                                                   GError** error)
5752 {
5753 	ValaMemberAccess* list_member = NULL;
5754 	ValaMemberAccess* parent_member = NULL;
5755 	ValaSourceLocation _tmp0_;
5756 	ValaSourceReference* _tmp1_;
5757 	ValaSourceReference* _tmp2_;
5758 	ValaMemberAccess* _tmp3_;
5759 	ValaMemberAccess* _tmp4_;
5760 	ValaSourceLocation _tmp5_;
5761 	ValaSourceReference* _tmp6_;
5762 	ValaSourceReference* _tmp7_;
5763 	ValaMemberAccess* _tmp8_;
5764 	ValaMemberAccess* _tmp9_;
5765 	ValaMemberAccess* _tmp10_;
5766 	ValaObjectCreationExpression* expr = NULL;
5767 	ValaMemberAccess* _tmp11_;
5768 	ValaSourceLocation _tmp12_;
5769 	ValaSourceReference* _tmp13_;
5770 	ValaSourceReference* _tmp14_;
5771 	ValaObjectCreationExpression* _tmp15_;
5772 	ValaObjectCreationExpression* _tmp16_;
5773 	ValaExpression* result = NULL;
5774 	g_return_val_if_fail (self != NULL, NULL);
5775 	g_return_val_if_fail (begin != NULL, NULL);
5776 	g_return_val_if_fail (element_type != NULL, NULL);
5777 	list_member = NULL;
5778 	parent_member = NULL;
5779 	_tmp0_ = *begin;
5780 	_tmp1_ = vala_genie_parser_get_src (self, &_tmp0_);
5781 	_tmp2_ = _tmp1_;
5782 	_tmp3_ = vala_member_access_new (NULL, "Gee", _tmp2_);
5783 	_vala_code_node_unref0 (parent_member);
5784 	parent_member = _tmp3_;
5785 	_vala_source_reference_unref0 (_tmp2_);
5786 	_tmp4_ = parent_member;
5787 	_tmp5_ = *begin;
5788 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
5789 	_tmp7_ = _tmp6_;
5790 	_tmp8_ = vala_member_access_new ((ValaExpression*) _tmp4_, "ArrayList", _tmp7_);
5791 	_vala_code_node_unref0 (list_member);
5792 	list_member = _tmp8_;
5793 	_vala_source_reference_unref0 (_tmp7_);
5794 	_tmp9_ = list_member;
5795 	vala_member_access_add_type_argument (_tmp9_, element_type);
5796 	_tmp10_ = list_member;
5797 	vala_member_access_set_creation_member (_tmp10_, TRUE);
5798 	_tmp11_ = list_member;
5799 	_tmp12_ = *begin;
5800 	_tmp13_ = vala_genie_parser_get_src (self, &_tmp12_);
5801 	_tmp14_ = _tmp13_;
5802 	_tmp15_ = vala_object_creation_expression_new (_tmp11_, _tmp14_);
5803 	_tmp16_ = _tmp15_;
5804 	_vala_source_reference_unref0 (_tmp14_);
5805 	expr = _tmp16_;
5806 	result = (ValaExpression*) expr;
5807 	_vala_code_node_unref0 (parent_member);
5808 	_vala_code_node_unref0 (list_member);
5809 	return result;
5810 }
5811 
5812 static ValaExpression*
vala_genie_parser_parse_dict_creation_expression(ValaGenieParser * self,ValaSourceLocation * begin,ValaDataType * key_type,ValaDataType * value_type,GError ** error)5813 vala_genie_parser_parse_dict_creation_expression (ValaGenieParser* self,
5814                                                   ValaSourceLocation* begin,
5815                                                   ValaDataType* key_type,
5816                                                   ValaDataType* value_type,
5817                                                   GError** error)
5818 {
5819 	ValaMemberAccess* dict_member = NULL;
5820 	ValaMemberAccess* parent_member = NULL;
5821 	ValaSourceLocation _tmp0_;
5822 	ValaSourceReference* _tmp1_;
5823 	ValaSourceReference* _tmp2_;
5824 	ValaMemberAccess* _tmp3_;
5825 	ValaMemberAccess* _tmp4_;
5826 	ValaSourceLocation _tmp5_;
5827 	ValaSourceReference* _tmp6_;
5828 	ValaSourceReference* _tmp7_;
5829 	ValaMemberAccess* _tmp8_;
5830 	ValaMemberAccess* _tmp9_;
5831 	ValaMemberAccess* _tmp10_;
5832 	ValaMemberAccess* _tmp11_;
5833 	ValaObjectCreationExpression* expr = NULL;
5834 	ValaMemberAccess* _tmp12_;
5835 	ValaSourceLocation _tmp13_;
5836 	ValaSourceReference* _tmp14_;
5837 	ValaSourceReference* _tmp15_;
5838 	ValaObjectCreationExpression* _tmp16_;
5839 	ValaObjectCreationExpression* _tmp17_;
5840 	ValaExpression* result = NULL;
5841 	g_return_val_if_fail (self != NULL, NULL);
5842 	g_return_val_if_fail (begin != NULL, NULL);
5843 	g_return_val_if_fail (key_type != NULL, NULL);
5844 	g_return_val_if_fail (value_type != NULL, NULL);
5845 	dict_member = NULL;
5846 	parent_member = NULL;
5847 	_tmp0_ = *begin;
5848 	_tmp1_ = vala_genie_parser_get_src (self, &_tmp0_);
5849 	_tmp2_ = _tmp1_;
5850 	_tmp3_ = vala_member_access_new (NULL, "Gee", _tmp2_);
5851 	_vala_code_node_unref0 (parent_member);
5852 	parent_member = _tmp3_;
5853 	_vala_source_reference_unref0 (_tmp2_);
5854 	_tmp4_ = parent_member;
5855 	_tmp5_ = *begin;
5856 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
5857 	_tmp7_ = _tmp6_;
5858 	_tmp8_ = vala_member_access_new ((ValaExpression*) _tmp4_, "HashMap", _tmp7_);
5859 	_vala_code_node_unref0 (dict_member);
5860 	dict_member = _tmp8_;
5861 	_vala_source_reference_unref0 (_tmp7_);
5862 	_tmp9_ = dict_member;
5863 	vala_member_access_add_type_argument (_tmp9_, key_type);
5864 	_tmp10_ = dict_member;
5865 	vala_member_access_add_type_argument (_tmp10_, value_type);
5866 	_tmp11_ = dict_member;
5867 	vala_member_access_set_creation_member (_tmp11_, TRUE);
5868 	_tmp12_ = dict_member;
5869 	_tmp13_ = *begin;
5870 	_tmp14_ = vala_genie_parser_get_src (self, &_tmp13_);
5871 	_tmp15_ = _tmp14_;
5872 	_tmp16_ = vala_object_creation_expression_new (_tmp12_, _tmp15_);
5873 	_tmp17_ = _tmp16_;
5874 	_vala_source_reference_unref0 (_tmp15_);
5875 	expr = _tmp17_;
5876 	result = (ValaExpression*) expr;
5877 	_vala_code_node_unref0 (parent_member);
5878 	_vala_code_node_unref0 (dict_member);
5879 	return result;
5880 }
5881 
5882 static ValaList*
vala_genie_parser_parse_object_initializer(ValaGenieParser * self,GError ** error)5883 vala_genie_parser_parse_object_initializer (ValaGenieParser* self,
5884                                             GError** error)
5885 {
5886 	ValaArrayList* list = NULL;
5887 	GEqualFunc _tmp0_;
5888 	ValaArrayList* _tmp1_;
5889 	GError* _inner_error0_ = NULL;
5890 	ValaList* result = NULL;
5891 	g_return_val_if_fail (self != NULL, NULL);
5892 	_tmp0_ = g_direct_equal;
5893 	_tmp1_ = vala_array_list_new (VALA_TYPE_MEMBER_INITIALIZER, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
5894 	list = _tmp1_;
5895 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACE)) {
5896 		{
5897 			gboolean _tmp2_ = FALSE;
5898 			_tmp2_ = TRUE;
5899 			while (TRUE) {
5900 				ValaMemberInitializer* _tmp3_ = NULL;
5901 				ValaMemberInitializer* _tmp4_;
5902 				ValaArrayList* _tmp5_;
5903 				if (!_tmp2_) {
5904 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
5905 						break;
5906 					}
5907 				}
5908 				_tmp2_ = FALSE;
5909 				_tmp4_ = vala_genie_parser_parse_member_initializer (self, &_inner_error0_);
5910 				_tmp3_ = _tmp4_;
5911 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
5912 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5913 						g_propagate_error (error, _inner_error0_);
5914 						_vala_iterable_unref0 (list);
5915 						return NULL;
5916 					} else {
5917 						_vala_iterable_unref0 (list);
5918 						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);
5919 						g_clear_error (&_inner_error0_);
5920 						return NULL;
5921 					}
5922 				}
5923 				_tmp5_ = list;
5924 				vala_collection_add ((ValaCollection*) _tmp5_, _tmp3_);
5925 				_vala_code_node_unref0 (_tmp3_);
5926 			}
5927 		}
5928 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACE, &_inner_error0_);
5929 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
5930 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5931 				g_propagate_error (error, _inner_error0_);
5932 				_vala_iterable_unref0 (list);
5933 				return NULL;
5934 			} else {
5935 				_vala_iterable_unref0 (list);
5936 				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);
5937 				g_clear_error (&_inner_error0_);
5938 				return NULL;
5939 			}
5940 		}
5941 	}
5942 	result = (ValaList*) list;
5943 	return result;
5944 }
5945 
5946 static ValaMemberInitializer*
vala_genie_parser_parse_member_initializer(ValaGenieParser * self,GError ** error)5947 vala_genie_parser_parse_member_initializer (ValaGenieParser* self,
5948                                             GError** error)
5949 {
5950 	ValaSourceLocation begin = {0};
5951 	ValaSourceLocation _tmp0_ = {0};
5952 	gchar* id = NULL;
5953 	gchar* _tmp1_;
5954 	ValaExpression* expr = NULL;
5955 	ValaExpression* _tmp2_;
5956 	const gchar* _tmp3_;
5957 	ValaExpression* _tmp4_;
5958 	ValaSourceLocation _tmp5_;
5959 	ValaSourceReference* _tmp6_;
5960 	ValaSourceReference* _tmp7_;
5961 	ValaMemberInitializer* _tmp8_;
5962 	ValaMemberInitializer* _tmp9_;
5963 	GError* _inner_error0_ = NULL;
5964 	ValaMemberInitializer* result = NULL;
5965 	g_return_val_if_fail (self != NULL, NULL);
5966 	vala_genie_parser_get_location (self, &_tmp0_);
5967 	begin = _tmp0_;
5968 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
5969 	id = _tmp1_;
5970 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5971 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5972 			g_propagate_error (error, _inner_error0_);
5973 			return NULL;
5974 		} else {
5975 			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);
5976 			g_clear_error (&_inner_error0_);
5977 			return NULL;
5978 		}
5979 	}
5980 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_ASSIGN, &_inner_error0_);
5981 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5982 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5983 			g_propagate_error (error, _inner_error0_);
5984 			_g_free0 (id);
5985 			return NULL;
5986 		} else {
5987 			_g_free0 (id);
5988 			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);
5989 			g_clear_error (&_inner_error0_);
5990 			return NULL;
5991 		}
5992 	}
5993 	_tmp2_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
5994 	expr = _tmp2_;
5995 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
5996 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
5997 			g_propagate_error (error, _inner_error0_);
5998 			_g_free0 (id);
5999 			return NULL;
6000 		} else {
6001 			_g_free0 (id);
6002 			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);
6003 			g_clear_error (&_inner_error0_);
6004 			return NULL;
6005 		}
6006 	}
6007 	_tmp3_ = id;
6008 	_tmp4_ = expr;
6009 	_tmp5_ = begin;
6010 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
6011 	_tmp7_ = _tmp6_;
6012 	_tmp8_ = vala_member_initializer_new (_tmp3_, _tmp4_, _tmp7_);
6013 	_tmp9_ = _tmp8_;
6014 	_vala_source_reference_unref0 (_tmp7_);
6015 	result = _tmp9_;
6016 	_vala_code_node_unref0 (expr);
6017 	_g_free0 (id);
6018 	return result;
6019 }
6020 
6021 static ValaExpression*
vala_genie_parser_parse_yield_expression(ValaGenieParser * self,GError ** error)6022 vala_genie_parser_parse_yield_expression (ValaGenieParser* self,
6023                                           GError** error)
6024 {
6025 	ValaExpression* expr = NULL;
6026 	ValaExpression* _tmp0_;
6027 	ValaMethodCall* call = NULL;
6028 	ValaExpression* _tmp1_;
6029 	ValaObjectCreationExpression* object_creation = NULL;
6030 	ValaExpression* _tmp2_;
6031 	gboolean _tmp3_ = FALSE;
6032 	ValaMethodCall* _tmp4_;
6033 	ValaMethodCall* _tmp10_;
6034 	GError* _inner_error0_ = NULL;
6035 	ValaExpression* result = NULL;
6036 	g_return_val_if_fail (self != NULL, NULL);
6037 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_YIELD, &_inner_error0_);
6038 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6039 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6040 			g_propagate_error (error, _inner_error0_);
6041 			return NULL;
6042 		} else {
6043 			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);
6044 			g_clear_error (&_inner_error0_);
6045 			return NULL;
6046 		}
6047 	}
6048 	_tmp0_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
6049 	expr = _tmp0_;
6050 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6051 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6052 			g_propagate_error (error, _inner_error0_);
6053 			return NULL;
6054 		} else {
6055 			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);
6056 			g_clear_error (&_inner_error0_);
6057 			return NULL;
6058 		}
6059 	}
6060 	_tmp1_ = expr;
6061 	call = VALA_IS_METHOD_CALL (_tmp1_) ? ((ValaMethodCall*) _tmp1_) : NULL;
6062 	_tmp2_ = expr;
6063 	object_creation = VALA_IS_OBJECT_CREATION_EXPRESSION (_tmp2_) ? ((ValaObjectCreationExpression*) _tmp2_) : NULL;
6064 	_tmp4_ = call;
6065 	if (_tmp4_ == NULL) {
6066 		ValaObjectCreationExpression* _tmp5_;
6067 		_tmp5_ = object_creation;
6068 		_tmp3_ = _tmp5_ == NULL;
6069 	} else {
6070 		_tmp3_ = FALSE;
6071 	}
6072 	if (_tmp3_) {
6073 		ValaExpression* _tmp6_;
6074 		ValaSourceReference* _tmp7_;
6075 		ValaSourceReference* _tmp8_;
6076 		GError* _tmp9_;
6077 		_tmp6_ = expr;
6078 		_tmp7_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp6_);
6079 		_tmp8_ = _tmp7_;
6080 		vala_report_error (_tmp8_, "syntax error, expected method call");
6081 		_tmp9_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected method call");
6082 		_inner_error0_ = _tmp9_;
6083 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6084 			g_propagate_error (error, _inner_error0_);
6085 			_vala_code_node_unref0 (expr);
6086 			return NULL;
6087 		} else {
6088 			_vala_code_node_unref0 (expr);
6089 			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);
6090 			g_clear_error (&_inner_error0_);
6091 			return NULL;
6092 		}
6093 	}
6094 	_tmp10_ = call;
6095 	if (_tmp10_ != NULL) {
6096 		ValaMethodCall* _tmp11_;
6097 		_tmp11_ = call;
6098 		vala_method_call_set_is_yield_expression (_tmp11_, TRUE);
6099 	} else {
6100 		ValaObjectCreationExpression* _tmp12_;
6101 		_tmp12_ = object_creation;
6102 		if (_tmp12_ != NULL) {
6103 			ValaObjectCreationExpression* _tmp13_;
6104 			_tmp13_ = object_creation;
6105 			vala_object_creation_expression_set_is_yield_expression (_tmp13_, TRUE);
6106 		}
6107 	}
6108 	result = expr;
6109 	return result;
6110 }
6111 
6112 static ValaExpression*
vala_genie_parser_parse_sizeof_expression(ValaGenieParser * self,GError ** error)6113 vala_genie_parser_parse_sizeof_expression (ValaGenieParser* self,
6114                                            GError** error)
6115 {
6116 	ValaSourceLocation begin = {0};
6117 	ValaSourceLocation _tmp0_ = {0};
6118 	ValaDataType* type = NULL;
6119 	ValaDataType* _tmp1_;
6120 	ValaDataType* _tmp2_;
6121 	ValaSourceLocation _tmp3_;
6122 	ValaSourceReference* _tmp4_;
6123 	ValaSourceReference* _tmp5_;
6124 	ValaSizeofExpression* _tmp6_;
6125 	ValaExpression* _tmp7_;
6126 	GError* _inner_error0_ = NULL;
6127 	ValaExpression* result = NULL;
6128 	g_return_val_if_fail (self != NULL, NULL);
6129 	vala_genie_parser_get_location (self, &_tmp0_);
6130 	begin = _tmp0_;
6131 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_SIZEOF, &_inner_error0_);
6132 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6133 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6134 			g_propagate_error (error, _inner_error0_);
6135 			return NULL;
6136 		} else {
6137 			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);
6138 			g_clear_error (&_inner_error0_);
6139 			return NULL;
6140 		}
6141 	}
6142 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
6143 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6144 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6145 			g_propagate_error (error, _inner_error0_);
6146 			return NULL;
6147 		} else {
6148 			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);
6149 			g_clear_error (&_inner_error0_);
6150 			return NULL;
6151 		}
6152 	}
6153 	_tmp1_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
6154 	type = _tmp1_;
6155 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6156 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6157 			g_propagate_error (error, _inner_error0_);
6158 			return NULL;
6159 		} else {
6160 			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);
6161 			g_clear_error (&_inner_error0_);
6162 			return NULL;
6163 		}
6164 	}
6165 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
6166 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6167 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6168 			g_propagate_error (error, _inner_error0_);
6169 			_vala_code_node_unref0 (type);
6170 			return NULL;
6171 		} else {
6172 			_vala_code_node_unref0 (type);
6173 			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);
6174 			g_clear_error (&_inner_error0_);
6175 			return NULL;
6176 		}
6177 	}
6178 	_tmp2_ = type;
6179 	_tmp3_ = begin;
6180 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
6181 	_tmp5_ = _tmp4_;
6182 	_tmp6_ = vala_sizeof_expression_new (_tmp2_, _tmp5_);
6183 	_tmp7_ = (ValaExpression*) _tmp6_;
6184 	_vala_source_reference_unref0 (_tmp5_);
6185 	result = _tmp7_;
6186 	_vala_code_node_unref0 (type);
6187 	return result;
6188 }
6189 
6190 static ValaExpression*
vala_genie_parser_parse_typeof_expression(ValaGenieParser * self,GError ** error)6191 vala_genie_parser_parse_typeof_expression (ValaGenieParser* self,
6192                                            GError** error)
6193 {
6194 	ValaSourceLocation begin = {0};
6195 	ValaSourceLocation _tmp0_ = {0};
6196 	ValaDataType* type = NULL;
6197 	ValaDataType* _tmp1_;
6198 	ValaDataType* _tmp2_;
6199 	ValaSourceLocation _tmp3_;
6200 	ValaSourceReference* _tmp4_;
6201 	ValaSourceReference* _tmp5_;
6202 	ValaTypeofExpression* _tmp6_;
6203 	ValaExpression* _tmp7_;
6204 	GError* _inner_error0_ = NULL;
6205 	ValaExpression* result = NULL;
6206 	g_return_val_if_fail (self != NULL, NULL);
6207 	vala_genie_parser_get_location (self, &_tmp0_);
6208 	begin = _tmp0_;
6209 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_TYPEOF, &_inner_error0_);
6210 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6211 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6212 			g_propagate_error (error, _inner_error0_);
6213 			return NULL;
6214 		} else {
6215 			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);
6216 			g_clear_error (&_inner_error0_);
6217 			return NULL;
6218 		}
6219 	}
6220 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
6221 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6222 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6223 			g_propagate_error (error, _inner_error0_);
6224 			return NULL;
6225 		} else {
6226 			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);
6227 			g_clear_error (&_inner_error0_);
6228 			return NULL;
6229 		}
6230 	}
6231 	_tmp1_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
6232 	type = _tmp1_;
6233 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6234 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6235 			g_propagate_error (error, _inner_error0_);
6236 			return NULL;
6237 		} else {
6238 			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);
6239 			g_clear_error (&_inner_error0_);
6240 			return NULL;
6241 		}
6242 	}
6243 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
6244 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6245 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6246 			g_propagate_error (error, _inner_error0_);
6247 			_vala_code_node_unref0 (type);
6248 			return NULL;
6249 		} else {
6250 			_vala_code_node_unref0 (type);
6251 			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);
6252 			g_clear_error (&_inner_error0_);
6253 			return NULL;
6254 		}
6255 	}
6256 	_tmp2_ = type;
6257 	_tmp3_ = begin;
6258 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
6259 	_tmp5_ = _tmp4_;
6260 	_tmp6_ = vala_typeof_expression_new (_tmp2_, _tmp5_);
6261 	_tmp7_ = (ValaExpression*) _tmp6_;
6262 	_vala_source_reference_unref0 (_tmp5_);
6263 	result = _tmp7_;
6264 	_vala_code_node_unref0 (type);
6265 	return result;
6266 }
6267 
6268 static ValaUnaryOperator
vala_genie_parser_get_unary_operator(ValaGenieParser * self,ValaGenieTokenType token_type)6269 vala_genie_parser_get_unary_operator (ValaGenieParser* self,
6270                                       ValaGenieTokenType token_type)
6271 {
6272 	ValaUnaryOperator result = 0;
6273 	g_return_val_if_fail (self != NULL, 0);
6274 	switch (token_type) {
6275 		case VALA_GENIE_TOKEN_TYPE_PLUS:
6276 		{
6277 			result = VALA_UNARY_OPERATOR_PLUS;
6278 			return result;
6279 		}
6280 		case VALA_GENIE_TOKEN_TYPE_MINUS:
6281 		{
6282 			result = VALA_UNARY_OPERATOR_MINUS;
6283 			return result;
6284 		}
6285 		case VALA_GENIE_TOKEN_TYPE_OP_NEG:
6286 		{
6287 			result = VALA_UNARY_OPERATOR_LOGICAL_NEGATION;
6288 			return result;
6289 		}
6290 		case VALA_GENIE_TOKEN_TYPE_TILDE:
6291 		{
6292 			result = VALA_UNARY_OPERATOR_BITWISE_COMPLEMENT;
6293 			return result;
6294 		}
6295 		case VALA_GENIE_TOKEN_TYPE_OP_INC:
6296 		{
6297 			result = VALA_UNARY_OPERATOR_INCREMENT;
6298 			return result;
6299 		}
6300 		case VALA_GENIE_TOKEN_TYPE_OP_DEC:
6301 		{
6302 			result = VALA_UNARY_OPERATOR_DECREMENT;
6303 			return result;
6304 		}
6305 		default:
6306 		{
6307 			result = VALA_UNARY_OPERATOR_NONE;
6308 			return result;
6309 		}
6310 	}
6311 }
6312 
6313 static ValaExpression*
vala_genie_parser_parse_unary_expression(ValaGenieParser * self,GError ** error)6314 vala_genie_parser_parse_unary_expression (ValaGenieParser* self,
6315                                           GError** error)
6316 {
6317 	ValaSourceLocation begin = {0};
6318 	ValaSourceLocation _tmp0_ = {0};
6319 	ValaUnaryOperator operator = 0;
6320 	ValaUnaryOperator _tmp1_;
6321 	ValaExpression* expr = NULL;
6322 	ValaExpression* _tmp48_;
6323 	GError* _inner_error0_ = NULL;
6324 	ValaExpression* result = NULL;
6325 	g_return_val_if_fail (self != NULL, NULL);
6326 	vala_genie_parser_get_location (self, &_tmp0_);
6327 	begin = _tmp0_;
6328 	operator = vala_genie_parser_get_unary_operator (self, vala_genie_parser_current (self));
6329 	_tmp1_ = operator;
6330 	if (_tmp1_ != VALA_UNARY_OPERATOR_NONE) {
6331 		ValaExpression* op = NULL;
6332 		ValaExpression* _tmp2_;
6333 		ValaUnaryOperator _tmp3_;
6334 		ValaExpression* _tmp4_;
6335 		ValaSourceLocation _tmp5_;
6336 		ValaSourceReference* _tmp6_;
6337 		ValaSourceReference* _tmp7_;
6338 		ValaUnaryExpression* _tmp8_;
6339 		ValaExpression* _tmp9_;
6340 		vala_genie_parser_next (self);
6341 		_tmp2_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6342 		op = _tmp2_;
6343 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
6344 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6345 				g_propagate_error (error, _inner_error0_);
6346 				return NULL;
6347 			} else {
6348 				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);
6349 				g_clear_error (&_inner_error0_);
6350 				return NULL;
6351 			}
6352 		}
6353 		_tmp3_ = operator;
6354 		_tmp4_ = op;
6355 		_tmp5_ = begin;
6356 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
6357 		_tmp7_ = _tmp6_;
6358 		_tmp8_ = vala_unary_expression_new (_tmp3_, _tmp4_, _tmp7_);
6359 		_tmp9_ = (ValaExpression*) _tmp8_;
6360 		_vala_source_reference_unref0 (_tmp7_);
6361 		result = _tmp9_;
6362 		_vala_code_node_unref0 (op);
6363 		return result;
6364 	}
6365 	switch (vala_genie_parser_current (self)) {
6366 		case VALA_GENIE_TOKEN_TYPE_OPEN_PARENS:
6367 		{
6368 			ValaSourceLocation _tmp33_;
6369 			vala_genie_parser_next (self);
6370 			switch (vala_genie_parser_current (self)) {
6371 				case VALA_GENIE_TOKEN_TYPE_OWNED:
6372 				{
6373 					vala_genie_parser_next (self);
6374 					if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS)) {
6375 						ValaExpression* op = NULL;
6376 						ValaExpression* _tmp10_;
6377 						ValaExpression* _tmp11_;
6378 						ValaSourceLocation _tmp12_;
6379 						ValaSourceReference* _tmp13_;
6380 						ValaSourceReference* _tmp14_;
6381 						ValaReferenceTransferExpression* _tmp15_;
6382 						ValaExpression* _tmp16_;
6383 						_tmp10_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6384 						op = _tmp10_;
6385 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
6386 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6387 								g_propagate_error (error, _inner_error0_);
6388 								return NULL;
6389 							} else {
6390 								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);
6391 								g_clear_error (&_inner_error0_);
6392 								return NULL;
6393 							}
6394 						}
6395 						_tmp11_ = op;
6396 						_tmp12_ = begin;
6397 						_tmp13_ = vala_genie_parser_get_src (self, &_tmp12_);
6398 						_tmp14_ = _tmp13_;
6399 						_tmp15_ = vala_reference_transfer_expression_new (_tmp11_, _tmp14_);
6400 						_tmp16_ = (ValaExpression*) _tmp15_;
6401 						_vala_source_reference_unref0 (_tmp14_);
6402 						result = _tmp16_;
6403 						_vala_code_node_unref0 (op);
6404 						return result;
6405 					}
6406 					break;
6407 				}
6408 				case VALA_GENIE_TOKEN_TYPE_VOID:
6409 				case VALA_GENIE_TOKEN_TYPE_DYNAMIC:
6410 				case VALA_GENIE_TOKEN_TYPE_IDENTIFIER:
6411 				case VALA_GENIE_TOKEN_TYPE_ARRAY:
6412 				case VALA_GENIE_TOKEN_TYPE_LIST:
6413 				case VALA_GENIE_TOKEN_TYPE_DICT:
6414 				{
6415 					ValaDataType* type = NULL;
6416 					ValaDataType* _tmp17_;
6417 					_tmp17_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
6418 					type = _tmp17_;
6419 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
6420 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6421 							g_propagate_error (error, _inner_error0_);
6422 							return NULL;
6423 						} else {
6424 							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);
6425 							g_clear_error (&_inner_error0_);
6426 							return NULL;
6427 						}
6428 					}
6429 					if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS)) {
6430 						switch (vala_genie_parser_current (self)) {
6431 							case VALA_GENIE_TOKEN_TYPE_OP_NEG:
6432 							case VALA_GENIE_TOKEN_TYPE_TILDE:
6433 							case VALA_GENIE_TOKEN_TYPE_OPEN_PARENS:
6434 							case VALA_GENIE_TOKEN_TYPE_TRUE:
6435 							case VALA_GENIE_TOKEN_TYPE_FALSE:
6436 							case VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL:
6437 							case VALA_GENIE_TOKEN_TYPE_REAL_LITERAL:
6438 							case VALA_GENIE_TOKEN_TYPE_CHARACTER_LITERAL:
6439 							case VALA_GENIE_TOKEN_TYPE_REGEX_LITERAL:
6440 							case VALA_GENIE_TOKEN_TYPE_STRING_LITERAL:
6441 							case VALA_GENIE_TOKEN_TYPE_TEMPLATE_STRING_LITERAL:
6442 							case VALA_GENIE_TOKEN_TYPE_VERBATIM_STRING_LITERAL:
6443 							case VALA_GENIE_TOKEN_TYPE_NULL:
6444 							case VALA_GENIE_TOKEN_TYPE_SELF:
6445 							case VALA_GENIE_TOKEN_TYPE_SUPER:
6446 							case VALA_GENIE_TOKEN_TYPE_NEW:
6447 							case VALA_GENIE_TOKEN_TYPE_SIZEOF:
6448 							case VALA_GENIE_TOKEN_TYPE_TYPEOF:
6449 							case VALA_GENIE_TOKEN_TYPE_IDENTIFIER:
6450 							case VALA_GENIE_TOKEN_TYPE_PARAMS:
6451 							case VALA_GENIE_TOKEN_TYPE_YIELD:
6452 							{
6453 								ValaExpression* inner = NULL;
6454 								ValaExpression* _tmp18_;
6455 								ValaExpression* _tmp19_;
6456 								ValaDataType* _tmp20_;
6457 								ValaSourceLocation _tmp21_;
6458 								ValaSourceReference* _tmp22_;
6459 								ValaSourceReference* _tmp23_;
6460 								ValaCastExpression* _tmp24_;
6461 								ValaExpression* _tmp25_;
6462 								_tmp18_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6463 								inner = _tmp18_;
6464 								if (G_UNLIKELY (_inner_error0_ != NULL)) {
6465 									if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6466 										g_propagate_error (error, _inner_error0_);
6467 										_vala_code_node_unref0 (type);
6468 										return NULL;
6469 									} else {
6470 										_vala_code_node_unref0 (type);
6471 										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);
6472 										g_clear_error (&_inner_error0_);
6473 										return NULL;
6474 									}
6475 								}
6476 								_tmp19_ = inner;
6477 								_tmp20_ = type;
6478 								_tmp21_ = begin;
6479 								_tmp22_ = vala_genie_parser_get_src (self, &_tmp21_);
6480 								_tmp23_ = _tmp22_;
6481 								_tmp24_ = vala_cast_expression_new (_tmp19_, _tmp20_, _tmp23_);
6482 								_tmp25_ = (ValaExpression*) _tmp24_;
6483 								_vala_source_reference_unref0 (_tmp23_);
6484 								result = _tmp25_;
6485 								_vala_code_node_unref0 (inner);
6486 								_vala_code_node_unref0 (type);
6487 								return result;
6488 							}
6489 							default:
6490 							{
6491 								break;
6492 							}
6493 						}
6494 					}
6495 					_vala_code_node_unref0 (type);
6496 					break;
6497 				}
6498 				case VALA_GENIE_TOKEN_TYPE_OP_NEG:
6499 				{
6500 					vala_genie_parser_next (self);
6501 					if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS)) {
6502 						ValaExpression* inner = NULL;
6503 						ValaExpression* _tmp26_;
6504 						ValaExpression* _tmp27_;
6505 						ValaSourceLocation _tmp28_;
6506 						ValaSourceReference* _tmp29_;
6507 						ValaSourceReference* _tmp30_;
6508 						ValaCastExpression* _tmp31_;
6509 						ValaExpression* _tmp32_;
6510 						_tmp26_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6511 						inner = _tmp26_;
6512 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
6513 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6514 								g_propagate_error (error, _inner_error0_);
6515 								return NULL;
6516 							} else {
6517 								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);
6518 								g_clear_error (&_inner_error0_);
6519 								return NULL;
6520 							}
6521 						}
6522 						_tmp27_ = inner;
6523 						_tmp28_ = begin;
6524 						_tmp29_ = vala_genie_parser_get_src (self, &_tmp28_);
6525 						_tmp30_ = _tmp29_;
6526 						_tmp31_ = vala_cast_expression_new_non_null (_tmp27_, _tmp30_);
6527 						_tmp32_ = (ValaExpression*) _tmp31_;
6528 						_vala_source_reference_unref0 (_tmp30_);
6529 						result = _tmp32_;
6530 						_vala_code_node_unref0 (inner);
6531 						return result;
6532 					}
6533 					break;
6534 				}
6535 				default:
6536 				{
6537 					break;
6538 				}
6539 			}
6540 			_tmp33_ = begin;
6541 			vala_genie_parser_rollback (self, &_tmp33_);
6542 			break;
6543 		}
6544 		case VALA_GENIE_TOKEN_TYPE_STAR:
6545 		{
6546 			ValaExpression* op = NULL;
6547 			ValaExpression* _tmp34_;
6548 			ValaExpression* _tmp35_;
6549 			ValaSourceLocation _tmp36_;
6550 			ValaSourceReference* _tmp37_;
6551 			ValaSourceReference* _tmp38_;
6552 			ValaPointerIndirection* _tmp39_;
6553 			ValaExpression* _tmp40_;
6554 			vala_genie_parser_next (self);
6555 			_tmp34_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6556 			op = _tmp34_;
6557 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
6558 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6559 					g_propagate_error (error, _inner_error0_);
6560 					return NULL;
6561 				} else {
6562 					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);
6563 					g_clear_error (&_inner_error0_);
6564 					return NULL;
6565 				}
6566 			}
6567 			_tmp35_ = op;
6568 			_tmp36_ = begin;
6569 			_tmp37_ = vala_genie_parser_get_src (self, &_tmp36_);
6570 			_tmp38_ = _tmp37_;
6571 			_tmp39_ = vala_pointer_indirection_new (_tmp35_, _tmp38_);
6572 			_tmp40_ = (ValaExpression*) _tmp39_;
6573 			_vala_source_reference_unref0 (_tmp38_);
6574 			result = _tmp40_;
6575 			_vala_code_node_unref0 (op);
6576 			return result;
6577 		}
6578 		case VALA_GENIE_TOKEN_TYPE_BITWISE_AND:
6579 		{
6580 			ValaExpression* op = NULL;
6581 			ValaExpression* _tmp41_;
6582 			ValaExpression* _tmp42_;
6583 			ValaSourceLocation _tmp43_;
6584 			ValaSourceReference* _tmp44_;
6585 			ValaSourceReference* _tmp45_;
6586 			ValaAddressofExpression* _tmp46_;
6587 			ValaExpression* _tmp47_;
6588 			vala_genie_parser_next (self);
6589 			_tmp41_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6590 			op = _tmp41_;
6591 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
6592 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6593 					g_propagate_error (error, _inner_error0_);
6594 					return NULL;
6595 				} else {
6596 					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);
6597 					g_clear_error (&_inner_error0_);
6598 					return NULL;
6599 				}
6600 			}
6601 			_tmp42_ = op;
6602 			_tmp43_ = begin;
6603 			_tmp44_ = vala_genie_parser_get_src (self, &_tmp43_);
6604 			_tmp45_ = _tmp44_;
6605 			_tmp46_ = vala_addressof_expression_new (_tmp42_, _tmp45_);
6606 			_tmp47_ = (ValaExpression*) _tmp46_;
6607 			_vala_source_reference_unref0 (_tmp45_);
6608 			result = _tmp47_;
6609 			_vala_code_node_unref0 (op);
6610 			return result;
6611 		}
6612 		default:
6613 		{
6614 			break;
6615 		}
6616 	}
6617 	_tmp48_ = vala_genie_parser_parse_primary_expression (self, &_inner_error0_);
6618 	expr = _tmp48_;
6619 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6620 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6621 			g_propagate_error (error, _inner_error0_);
6622 			return NULL;
6623 		} else {
6624 			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);
6625 			g_clear_error (&_inner_error0_);
6626 			return NULL;
6627 		}
6628 	}
6629 	result = expr;
6630 	return result;
6631 }
6632 
6633 static ValaBinaryOperator
vala_genie_parser_get_binary_operator(ValaGenieParser * self,ValaGenieTokenType token_type)6634 vala_genie_parser_get_binary_operator (ValaGenieParser* self,
6635                                        ValaGenieTokenType token_type)
6636 {
6637 	ValaBinaryOperator result = 0;
6638 	g_return_val_if_fail (self != NULL, 0);
6639 	switch (token_type) {
6640 		case VALA_GENIE_TOKEN_TYPE_STAR:
6641 		{
6642 			result = VALA_BINARY_OPERATOR_MUL;
6643 			return result;
6644 		}
6645 		case VALA_GENIE_TOKEN_TYPE_DIV:
6646 		{
6647 			result = VALA_BINARY_OPERATOR_DIV;
6648 			return result;
6649 		}
6650 		case VALA_GENIE_TOKEN_TYPE_PERCENT:
6651 		{
6652 			result = VALA_BINARY_OPERATOR_MOD;
6653 			return result;
6654 		}
6655 		case VALA_GENIE_TOKEN_TYPE_PLUS:
6656 		{
6657 			result = VALA_BINARY_OPERATOR_PLUS;
6658 			return result;
6659 		}
6660 		case VALA_GENIE_TOKEN_TYPE_MINUS:
6661 		{
6662 			result = VALA_BINARY_OPERATOR_MINUS;
6663 			return result;
6664 		}
6665 		case VALA_GENIE_TOKEN_TYPE_OP_LT:
6666 		{
6667 			result = VALA_BINARY_OPERATOR_LESS_THAN;
6668 			return result;
6669 		}
6670 		case VALA_GENIE_TOKEN_TYPE_OP_GT:
6671 		{
6672 			result = VALA_BINARY_OPERATOR_GREATER_THAN;
6673 			return result;
6674 		}
6675 		case VALA_GENIE_TOKEN_TYPE_OP_LE:
6676 		{
6677 			result = VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL;
6678 			return result;
6679 		}
6680 		case VALA_GENIE_TOKEN_TYPE_OP_GE:
6681 		{
6682 			result = VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL;
6683 			return result;
6684 		}
6685 		case VALA_GENIE_TOKEN_TYPE_OP_EQ:
6686 		{
6687 			result = VALA_BINARY_OPERATOR_EQUALITY;
6688 			return result;
6689 		}
6690 		case VALA_GENIE_TOKEN_TYPE_IS:
6691 		{
6692 			vala_genie_parser_next (self);
6693 			if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_OP_NEG) {
6694 				vala_genie_parser_prev (self);
6695 				result = VALA_BINARY_OPERATOR_INEQUALITY;
6696 				return result;
6697 			}
6698 			vala_genie_parser_prev (self);
6699 			result = VALA_BINARY_OPERATOR_EQUALITY;
6700 			return result;
6701 		}
6702 		case VALA_GENIE_TOKEN_TYPE_OP_NE:
6703 		{
6704 			result = VALA_BINARY_OPERATOR_INEQUALITY;
6705 			return result;
6706 		}
6707 		default:
6708 		{
6709 			result = VALA_BINARY_OPERATOR_NONE;
6710 			return result;
6711 		}
6712 	}
6713 }
6714 
6715 static ValaExpression*
vala_genie_parser_parse_multiplicative_expression(ValaGenieParser * self,GError ** error)6716 vala_genie_parser_parse_multiplicative_expression (ValaGenieParser* self,
6717                                                    GError** error)
6718 {
6719 	ValaSourceLocation begin = {0};
6720 	ValaSourceLocation _tmp0_ = {0};
6721 	ValaExpression* left = NULL;
6722 	ValaExpression* _tmp1_;
6723 	gboolean found = FALSE;
6724 	GError* _inner_error0_ = NULL;
6725 	ValaExpression* result = NULL;
6726 	g_return_val_if_fail (self != NULL, NULL);
6727 	vala_genie_parser_get_location (self, &_tmp0_);
6728 	begin = _tmp0_;
6729 	_tmp1_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6730 	left = _tmp1_;
6731 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6732 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6733 			g_propagate_error (error, _inner_error0_);
6734 			return NULL;
6735 		} else {
6736 			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);
6737 			g_clear_error (&_inner_error0_);
6738 			return NULL;
6739 		}
6740 	}
6741 	found = TRUE;
6742 	while (TRUE) {
6743 		ValaBinaryOperator operator = 0;
6744 		ValaBinaryOperator _tmp2_;
6745 		if (!found) {
6746 			break;
6747 		}
6748 		operator = vala_genie_parser_get_binary_operator (self, vala_genie_parser_current (self));
6749 		_tmp2_ = operator;
6750 		switch (_tmp2_) {
6751 			case VALA_BINARY_OPERATOR_MUL:
6752 			case VALA_BINARY_OPERATOR_DIV:
6753 			case VALA_BINARY_OPERATOR_MOD:
6754 			{
6755 				ValaExpression* right = NULL;
6756 				ValaExpression* _tmp3_;
6757 				ValaBinaryOperator _tmp4_;
6758 				ValaExpression* _tmp5_;
6759 				ValaExpression* _tmp6_;
6760 				ValaSourceLocation _tmp7_;
6761 				ValaSourceReference* _tmp8_;
6762 				ValaSourceReference* _tmp9_;
6763 				ValaBinaryExpression* _tmp10_;
6764 				vala_genie_parser_next (self);
6765 				_tmp3_ = vala_genie_parser_parse_unary_expression (self, &_inner_error0_);
6766 				right = _tmp3_;
6767 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
6768 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6769 						g_propagate_error (error, _inner_error0_);
6770 						_vala_code_node_unref0 (left);
6771 						return NULL;
6772 					} else {
6773 						_vala_code_node_unref0 (left);
6774 						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);
6775 						g_clear_error (&_inner_error0_);
6776 						return NULL;
6777 					}
6778 				}
6779 				_tmp4_ = operator;
6780 				_tmp5_ = left;
6781 				_tmp6_ = right;
6782 				_tmp7_ = begin;
6783 				_tmp8_ = vala_genie_parser_get_src (self, &_tmp7_);
6784 				_tmp9_ = _tmp8_;
6785 				_tmp10_ = vala_binary_expression_new (_tmp4_, _tmp5_, _tmp6_, _tmp9_);
6786 				_vala_code_node_unref0 (left);
6787 				left = (ValaExpression*) _tmp10_;
6788 				_vala_source_reference_unref0 (_tmp9_);
6789 				_vala_code_node_unref0 (right);
6790 				break;
6791 			}
6792 			default:
6793 			{
6794 				found = FALSE;
6795 				break;
6796 			}
6797 		}
6798 	}
6799 	result = left;
6800 	return result;
6801 }
6802 
6803 static ValaExpression*
vala_genie_parser_parse_additive_expression(ValaGenieParser * self,GError ** error)6804 vala_genie_parser_parse_additive_expression (ValaGenieParser* self,
6805                                              GError** error)
6806 {
6807 	ValaSourceLocation begin = {0};
6808 	ValaSourceLocation _tmp0_ = {0};
6809 	ValaExpression* left = NULL;
6810 	ValaExpression* _tmp1_;
6811 	gboolean found = FALSE;
6812 	GError* _inner_error0_ = NULL;
6813 	ValaExpression* result = NULL;
6814 	g_return_val_if_fail (self != NULL, NULL);
6815 	vala_genie_parser_get_location (self, &_tmp0_);
6816 	begin = _tmp0_;
6817 	_tmp1_ = vala_genie_parser_parse_multiplicative_expression (self, &_inner_error0_);
6818 	left = _tmp1_;
6819 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6820 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6821 			g_propagate_error (error, _inner_error0_);
6822 			return NULL;
6823 		} else {
6824 			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);
6825 			g_clear_error (&_inner_error0_);
6826 			return NULL;
6827 		}
6828 	}
6829 	found = TRUE;
6830 	while (TRUE) {
6831 		ValaBinaryOperator operator = 0;
6832 		ValaBinaryOperator _tmp2_;
6833 		if (!found) {
6834 			break;
6835 		}
6836 		operator = vala_genie_parser_get_binary_operator (self, vala_genie_parser_current (self));
6837 		_tmp2_ = operator;
6838 		switch (_tmp2_) {
6839 			case VALA_BINARY_OPERATOR_PLUS:
6840 			case VALA_BINARY_OPERATOR_MINUS:
6841 			{
6842 				ValaExpression* right = NULL;
6843 				ValaExpression* _tmp3_;
6844 				ValaBinaryOperator _tmp4_;
6845 				ValaExpression* _tmp5_;
6846 				ValaExpression* _tmp6_;
6847 				ValaSourceLocation _tmp7_;
6848 				ValaSourceReference* _tmp8_;
6849 				ValaSourceReference* _tmp9_;
6850 				ValaBinaryExpression* _tmp10_;
6851 				vala_genie_parser_next (self);
6852 				_tmp3_ = vala_genie_parser_parse_multiplicative_expression (self, &_inner_error0_);
6853 				right = _tmp3_;
6854 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
6855 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6856 						g_propagate_error (error, _inner_error0_);
6857 						_vala_code_node_unref0 (left);
6858 						return NULL;
6859 					} else {
6860 						_vala_code_node_unref0 (left);
6861 						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);
6862 						g_clear_error (&_inner_error0_);
6863 						return NULL;
6864 					}
6865 				}
6866 				_tmp4_ = operator;
6867 				_tmp5_ = left;
6868 				_tmp6_ = right;
6869 				_tmp7_ = begin;
6870 				_tmp8_ = vala_genie_parser_get_src (self, &_tmp7_);
6871 				_tmp9_ = _tmp8_;
6872 				_tmp10_ = vala_binary_expression_new (_tmp4_, _tmp5_, _tmp6_, _tmp9_);
6873 				_vala_code_node_unref0 (left);
6874 				left = (ValaExpression*) _tmp10_;
6875 				_vala_source_reference_unref0 (_tmp9_);
6876 				_vala_code_node_unref0 (right);
6877 				break;
6878 			}
6879 			default:
6880 			{
6881 				found = FALSE;
6882 				break;
6883 			}
6884 		}
6885 	}
6886 	result = left;
6887 	return result;
6888 }
6889 
6890 static ValaExpression*
vala_genie_parser_parse_shift_expression(ValaGenieParser * self,GError ** error)6891 vala_genie_parser_parse_shift_expression (ValaGenieParser* self,
6892                                           GError** error)
6893 {
6894 	ValaSourceLocation begin = {0};
6895 	ValaSourceLocation _tmp0_ = {0};
6896 	ValaExpression* left = NULL;
6897 	ValaExpression* _tmp1_;
6898 	gboolean found = FALSE;
6899 	GError* _inner_error0_ = NULL;
6900 	ValaExpression* result = NULL;
6901 	g_return_val_if_fail (self != NULL, NULL);
6902 	vala_genie_parser_get_location (self, &_tmp0_);
6903 	begin = _tmp0_;
6904 	_tmp1_ = vala_genie_parser_parse_additive_expression (self, &_inner_error0_);
6905 	left = _tmp1_;
6906 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
6907 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6908 			g_propagate_error (error, _inner_error0_);
6909 			return NULL;
6910 		} else {
6911 			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);
6912 			g_clear_error (&_inner_error0_);
6913 			return NULL;
6914 		}
6915 	}
6916 	found = TRUE;
6917 	while (TRUE) {
6918 		if (!found) {
6919 			break;
6920 		}
6921 		switch (vala_genie_parser_current (self)) {
6922 			case VALA_GENIE_TOKEN_TYPE_OP_SHIFT_LEFT:
6923 			{
6924 				ValaExpression* right = NULL;
6925 				ValaExpression* _tmp2_;
6926 				ValaExpression* _tmp3_;
6927 				ValaExpression* _tmp4_;
6928 				ValaSourceLocation _tmp5_;
6929 				ValaSourceReference* _tmp6_;
6930 				ValaSourceReference* _tmp7_;
6931 				ValaBinaryExpression* _tmp8_;
6932 				vala_genie_parser_next (self);
6933 				_tmp2_ = vala_genie_parser_parse_additive_expression (self, &_inner_error0_);
6934 				right = _tmp2_;
6935 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
6936 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
6937 						g_propagate_error (error, _inner_error0_);
6938 						_vala_code_node_unref0 (left);
6939 						return NULL;
6940 					} else {
6941 						_vala_code_node_unref0 (left);
6942 						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);
6943 						g_clear_error (&_inner_error0_);
6944 						return NULL;
6945 					}
6946 				}
6947 				_tmp3_ = left;
6948 				_tmp4_ = right;
6949 				_tmp5_ = begin;
6950 				_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
6951 				_tmp7_ = _tmp6_;
6952 				_tmp8_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_SHIFT_LEFT, _tmp3_, _tmp4_, _tmp7_);
6953 				_vala_code_node_unref0 (left);
6954 				left = (ValaExpression*) _tmp8_;
6955 				_vala_source_reference_unref0 (_tmp7_);
6956 				_vala_code_node_unref0 (right);
6957 				break;
6958 			}
6959 			case VALA_GENIE_TOKEN_TYPE_OP_GT:
6960 			{
6961 				gchar* first_gt_pos = NULL;
6962 				ValaGenieParserTokenInfo* _tmp9_;
6963 				gint _tmp9__length1;
6964 				ValaGenieParserTokenInfo _tmp10_;
6965 				ValaSourceLocation _tmp11_;
6966 				gchar* _tmp12_;
6967 				gboolean _tmp13_ = FALSE;
6968 				_tmp9_ = self->priv->tokens;
6969 				_tmp9__length1 = self->priv->tokens_length1;
6970 				_tmp10_ = _tmp9_[self->priv->index];
6971 				_tmp11_ = _tmp10_.begin;
6972 				_tmp12_ = _tmp11_.pos;
6973 				first_gt_pos = _tmp12_;
6974 				vala_genie_parser_next (self);
6975 				if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_OP_GT) {
6976 					ValaGenieParserTokenInfo* _tmp14_;
6977 					gint _tmp14__length1;
6978 					ValaGenieParserTokenInfo _tmp15_;
6979 					ValaSourceLocation _tmp16_;
6980 					gchar* _tmp17_;
6981 					gchar* _tmp18_;
6982 					_tmp14_ = self->priv->tokens;
6983 					_tmp14__length1 = self->priv->tokens_length1;
6984 					_tmp15_ = _tmp14_[self->priv->index];
6985 					_tmp16_ = _tmp15_.begin;
6986 					_tmp17_ = _tmp16_.pos;
6987 					_tmp18_ = first_gt_pos;
6988 					_tmp13_ = _tmp17_ == (_tmp18_ + 1);
6989 				} else {
6990 					_tmp13_ = FALSE;
6991 				}
6992 				if (_tmp13_) {
6993 					ValaExpression* right = NULL;
6994 					ValaExpression* _tmp19_;
6995 					ValaExpression* _tmp20_;
6996 					ValaExpression* _tmp21_;
6997 					ValaSourceLocation _tmp22_;
6998 					ValaSourceReference* _tmp23_;
6999 					ValaSourceReference* _tmp24_;
7000 					ValaBinaryExpression* _tmp25_;
7001 					vala_genie_parser_next (self);
7002 					_tmp19_ = vala_genie_parser_parse_additive_expression (self, &_inner_error0_);
7003 					right = _tmp19_;
7004 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
7005 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7006 							g_propagate_error (error, _inner_error0_);
7007 							_vala_code_node_unref0 (left);
7008 							return NULL;
7009 						} else {
7010 							_vala_code_node_unref0 (left);
7011 							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);
7012 							g_clear_error (&_inner_error0_);
7013 							return NULL;
7014 						}
7015 					}
7016 					_tmp20_ = left;
7017 					_tmp21_ = right;
7018 					_tmp22_ = begin;
7019 					_tmp23_ = vala_genie_parser_get_src (self, &_tmp22_);
7020 					_tmp24_ = _tmp23_;
7021 					_tmp25_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_SHIFT_RIGHT, _tmp20_, _tmp21_, _tmp24_);
7022 					_vala_code_node_unref0 (left);
7023 					left = (ValaExpression*) _tmp25_;
7024 					_vala_source_reference_unref0 (_tmp24_);
7025 					_vala_code_node_unref0 (right);
7026 				} else {
7027 					vala_genie_parser_prev (self);
7028 					found = FALSE;
7029 				}
7030 				break;
7031 			}
7032 			default:
7033 			{
7034 				found = FALSE;
7035 				break;
7036 			}
7037 		}
7038 	}
7039 	result = left;
7040 	return result;
7041 }
7042 
7043 static ValaExpression*
vala_genie_parser_parse_relational_expression(ValaGenieParser * self,GError ** error)7044 vala_genie_parser_parse_relational_expression (ValaGenieParser* self,
7045                                                GError** error)
7046 {
7047 	ValaSourceLocation begin = {0};
7048 	ValaSourceLocation _tmp0_ = {0};
7049 	ValaExpression* left = NULL;
7050 	ValaExpression* _tmp1_;
7051 	gboolean found = FALSE;
7052 	GError* _inner_error0_ = NULL;
7053 	ValaExpression* result = NULL;
7054 	g_return_val_if_fail (self != NULL, NULL);
7055 	vala_genie_parser_get_location (self, &_tmp0_);
7056 	begin = _tmp0_;
7057 	_tmp1_ = vala_genie_parser_parse_shift_expression (self, &_inner_error0_);
7058 	left = _tmp1_;
7059 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7060 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7061 			g_propagate_error (error, _inner_error0_);
7062 			return NULL;
7063 		} else {
7064 			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);
7065 			g_clear_error (&_inner_error0_);
7066 			return NULL;
7067 		}
7068 	}
7069 	found = TRUE;
7070 	while (TRUE) {
7071 		ValaBinaryOperator operator = 0;
7072 		ValaBinaryOperator _tmp2_;
7073 		if (!found) {
7074 			break;
7075 		}
7076 		operator = vala_genie_parser_get_binary_operator (self, vala_genie_parser_current (self));
7077 		_tmp2_ = operator;
7078 		switch (_tmp2_) {
7079 			case VALA_BINARY_OPERATOR_LESS_THAN:
7080 			case VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
7081 			case VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
7082 			{
7083 				ValaExpression* right = NULL;
7084 				ValaExpression* _tmp3_;
7085 				ValaBinaryOperator _tmp4_;
7086 				ValaExpression* _tmp5_;
7087 				ValaExpression* _tmp6_;
7088 				ValaSourceLocation _tmp7_;
7089 				ValaSourceReference* _tmp8_;
7090 				ValaSourceReference* _tmp9_;
7091 				ValaBinaryExpression* _tmp10_;
7092 				vala_genie_parser_next (self);
7093 				_tmp3_ = vala_genie_parser_parse_shift_expression (self, &_inner_error0_);
7094 				right = _tmp3_;
7095 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
7096 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7097 						g_propagate_error (error, _inner_error0_);
7098 						_vala_code_node_unref0 (left);
7099 						return NULL;
7100 					} else {
7101 						_vala_code_node_unref0 (left);
7102 						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);
7103 						g_clear_error (&_inner_error0_);
7104 						return NULL;
7105 					}
7106 				}
7107 				_tmp4_ = operator;
7108 				_tmp5_ = left;
7109 				_tmp6_ = right;
7110 				_tmp7_ = begin;
7111 				_tmp8_ = vala_genie_parser_get_src (self, &_tmp7_);
7112 				_tmp9_ = _tmp8_;
7113 				_tmp10_ = vala_binary_expression_new (_tmp4_, _tmp5_, _tmp6_, _tmp9_);
7114 				_vala_code_node_unref0 (left);
7115 				left = (ValaExpression*) _tmp10_;
7116 				_vala_source_reference_unref0 (_tmp9_);
7117 				_vala_code_node_unref0 (right);
7118 				break;
7119 			}
7120 			case VALA_BINARY_OPERATOR_GREATER_THAN:
7121 			{
7122 				gboolean _tmp11_ = FALSE;
7123 				vala_genie_parser_next (self);
7124 				if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_OP_GT) {
7125 					_tmp11_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_OP_GE;
7126 				} else {
7127 					_tmp11_ = FALSE;
7128 				}
7129 				if (_tmp11_) {
7130 					ValaExpression* right = NULL;
7131 					ValaExpression* _tmp12_;
7132 					ValaBinaryOperator _tmp13_;
7133 					ValaExpression* _tmp14_;
7134 					ValaExpression* _tmp15_;
7135 					ValaSourceLocation _tmp16_;
7136 					ValaSourceReference* _tmp17_;
7137 					ValaSourceReference* _tmp18_;
7138 					ValaBinaryExpression* _tmp19_;
7139 					_tmp12_ = vala_genie_parser_parse_shift_expression (self, &_inner_error0_);
7140 					right = _tmp12_;
7141 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
7142 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7143 							g_propagate_error (error, _inner_error0_);
7144 							_vala_code_node_unref0 (left);
7145 							return NULL;
7146 						} else {
7147 							_vala_code_node_unref0 (left);
7148 							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);
7149 							g_clear_error (&_inner_error0_);
7150 							return NULL;
7151 						}
7152 					}
7153 					_tmp13_ = operator;
7154 					_tmp14_ = left;
7155 					_tmp15_ = right;
7156 					_tmp16_ = begin;
7157 					_tmp17_ = vala_genie_parser_get_src (self, &_tmp16_);
7158 					_tmp18_ = _tmp17_;
7159 					_tmp19_ = vala_binary_expression_new (_tmp13_, _tmp14_, _tmp15_, _tmp18_);
7160 					_vala_code_node_unref0 (left);
7161 					left = (ValaExpression*) _tmp19_;
7162 					_vala_source_reference_unref0 (_tmp18_);
7163 					_vala_code_node_unref0 (right);
7164 				} else {
7165 					vala_genie_parser_prev (self);
7166 					found = FALSE;
7167 				}
7168 				break;
7169 			}
7170 			default:
7171 			{
7172 				switch (vala_genie_parser_current (self)) {
7173 					case VALA_GENIE_TOKEN_TYPE_ISA:
7174 					{
7175 						ValaDataType* type = NULL;
7176 						ValaDataType* _tmp20_;
7177 						ValaExpression* _tmp21_;
7178 						ValaDataType* _tmp22_;
7179 						ValaSourceLocation _tmp23_;
7180 						ValaSourceReference* _tmp24_;
7181 						ValaSourceReference* _tmp25_;
7182 						ValaTypeCheck* _tmp26_;
7183 						vala_genie_parser_next (self);
7184 						_tmp20_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
7185 						type = _tmp20_;
7186 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
7187 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7188 								g_propagate_error (error, _inner_error0_);
7189 								_vala_code_node_unref0 (left);
7190 								return NULL;
7191 							} else {
7192 								_vala_code_node_unref0 (left);
7193 								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);
7194 								g_clear_error (&_inner_error0_);
7195 								return NULL;
7196 							}
7197 						}
7198 						_tmp21_ = left;
7199 						_tmp22_ = type;
7200 						_tmp23_ = begin;
7201 						_tmp24_ = vala_genie_parser_get_src (self, &_tmp23_);
7202 						_tmp25_ = _tmp24_;
7203 						_tmp26_ = vala_typecheck_new (_tmp21_, _tmp22_, _tmp25_);
7204 						_vala_code_node_unref0 (left);
7205 						left = (ValaExpression*) _tmp26_;
7206 						_vala_source_reference_unref0 (_tmp25_);
7207 						_vala_code_node_unref0 (type);
7208 						break;
7209 					}
7210 					case VALA_GENIE_TOKEN_TYPE_AS:
7211 					{
7212 						ValaDataType* type = NULL;
7213 						ValaDataType* _tmp27_;
7214 						ValaExpression* _tmp28_;
7215 						ValaDataType* _tmp29_;
7216 						ValaSourceLocation _tmp30_;
7217 						ValaSourceReference* _tmp31_;
7218 						ValaSourceReference* _tmp32_;
7219 						ValaCastExpression* _tmp33_;
7220 						vala_genie_parser_next (self);
7221 						_tmp27_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
7222 						type = _tmp27_;
7223 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
7224 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7225 								g_propagate_error (error, _inner_error0_);
7226 								_vala_code_node_unref0 (left);
7227 								return NULL;
7228 							} else {
7229 								_vala_code_node_unref0 (left);
7230 								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);
7231 								g_clear_error (&_inner_error0_);
7232 								return NULL;
7233 							}
7234 						}
7235 						_tmp28_ = left;
7236 						_tmp29_ = type;
7237 						_tmp30_ = begin;
7238 						_tmp31_ = vala_genie_parser_get_src (self, &_tmp30_);
7239 						_tmp32_ = _tmp31_;
7240 						_tmp33_ = vala_cast_expression_new_silent (_tmp28_, _tmp29_, _tmp32_);
7241 						_vala_code_node_unref0 (left);
7242 						left = (ValaExpression*) _tmp33_;
7243 						_vala_source_reference_unref0 (_tmp32_);
7244 						_vala_code_node_unref0 (type);
7245 						break;
7246 					}
7247 					default:
7248 					{
7249 						found = FALSE;
7250 						break;
7251 					}
7252 				}
7253 				break;
7254 			}
7255 		}
7256 	}
7257 	result = left;
7258 	return result;
7259 }
7260 
7261 static ValaExpression*
vala_genie_parser_parse_equality_expression(ValaGenieParser * self,GError ** error)7262 vala_genie_parser_parse_equality_expression (ValaGenieParser* self,
7263                                              GError** error)
7264 {
7265 	ValaSourceLocation begin = {0};
7266 	ValaSourceLocation _tmp0_ = {0};
7267 	ValaExpression* left = NULL;
7268 	ValaExpression* _tmp1_;
7269 	gboolean found = FALSE;
7270 	GError* _inner_error0_ = NULL;
7271 	ValaExpression* result = NULL;
7272 	g_return_val_if_fail (self != NULL, NULL);
7273 	vala_genie_parser_get_location (self, &_tmp0_);
7274 	begin = _tmp0_;
7275 	_tmp1_ = vala_genie_parser_parse_relational_expression (self, &_inner_error0_);
7276 	left = _tmp1_;
7277 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7278 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7279 			g_propagate_error (error, _inner_error0_);
7280 			return NULL;
7281 		} else {
7282 			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);
7283 			g_clear_error (&_inner_error0_);
7284 			return NULL;
7285 		}
7286 	}
7287 	found = TRUE;
7288 	while (TRUE) {
7289 		ValaBinaryOperator operator = 0;
7290 		ValaBinaryOperator _tmp2_;
7291 		if (!found) {
7292 			break;
7293 		}
7294 		operator = vala_genie_parser_get_binary_operator (self, vala_genie_parser_current (self));
7295 		_tmp2_ = operator;
7296 		switch (_tmp2_) {
7297 			case VALA_BINARY_OPERATOR_INEQUALITY:
7298 			case VALA_BINARY_OPERATOR_EQUALITY:
7299 			{
7300 				gboolean _tmp3_ = FALSE;
7301 				ValaBinaryOperator _tmp4_;
7302 				ValaExpression* right = NULL;
7303 				ValaExpression* _tmp5_;
7304 				ValaBinaryOperator _tmp6_;
7305 				ValaExpression* _tmp7_;
7306 				ValaExpression* _tmp8_;
7307 				ValaSourceLocation _tmp9_;
7308 				ValaSourceReference* _tmp10_;
7309 				ValaSourceReference* _tmp11_;
7310 				ValaBinaryExpression* _tmp12_;
7311 				_tmp4_ = operator;
7312 				if (_tmp4_ == VALA_BINARY_OPERATOR_INEQUALITY) {
7313 					_tmp3_ = vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_IS;
7314 				} else {
7315 					_tmp3_ = FALSE;
7316 				}
7317 				if (_tmp3_) {
7318 					vala_genie_parser_next (self);
7319 				}
7320 				vala_genie_parser_next (self);
7321 				_tmp5_ = vala_genie_parser_parse_relational_expression (self, &_inner_error0_);
7322 				right = _tmp5_;
7323 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
7324 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7325 						g_propagate_error (error, _inner_error0_);
7326 						_vala_code_node_unref0 (left);
7327 						return NULL;
7328 					} else {
7329 						_vala_code_node_unref0 (left);
7330 						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);
7331 						g_clear_error (&_inner_error0_);
7332 						return NULL;
7333 					}
7334 				}
7335 				_tmp6_ = operator;
7336 				_tmp7_ = left;
7337 				_tmp8_ = right;
7338 				_tmp9_ = begin;
7339 				_tmp10_ = vala_genie_parser_get_src (self, &_tmp9_);
7340 				_tmp11_ = _tmp10_;
7341 				_tmp12_ = vala_binary_expression_new (_tmp6_, _tmp7_, _tmp8_, _tmp11_);
7342 				_vala_code_node_unref0 (left);
7343 				left = (ValaExpression*) _tmp12_;
7344 				_vala_source_reference_unref0 (_tmp11_);
7345 				_vala_code_node_unref0 (right);
7346 				break;
7347 			}
7348 			default:
7349 			{
7350 				found = FALSE;
7351 				break;
7352 			}
7353 		}
7354 	}
7355 	result = left;
7356 	return result;
7357 }
7358 
7359 static ValaExpression*
vala_genie_parser_parse_and_expression(ValaGenieParser * self,GError ** error)7360 vala_genie_parser_parse_and_expression (ValaGenieParser* self,
7361                                         GError** error)
7362 {
7363 	ValaSourceLocation begin = {0};
7364 	ValaSourceLocation _tmp0_ = {0};
7365 	ValaExpression* left = NULL;
7366 	ValaExpression* _tmp1_;
7367 	GError* _inner_error0_ = NULL;
7368 	ValaExpression* result = NULL;
7369 	g_return_val_if_fail (self != NULL, NULL);
7370 	vala_genie_parser_get_location (self, &_tmp0_);
7371 	begin = _tmp0_;
7372 	_tmp1_ = vala_genie_parser_parse_equality_expression (self, &_inner_error0_);
7373 	left = _tmp1_;
7374 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7375 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7376 			g_propagate_error (error, _inner_error0_);
7377 			return NULL;
7378 		} else {
7379 			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);
7380 			g_clear_error (&_inner_error0_);
7381 			return NULL;
7382 		}
7383 	}
7384 	while (TRUE) {
7385 		ValaExpression* right = NULL;
7386 		ValaExpression* _tmp2_;
7387 		ValaExpression* _tmp3_;
7388 		ValaExpression* _tmp4_;
7389 		ValaSourceLocation _tmp5_;
7390 		ValaSourceReference* _tmp6_;
7391 		ValaSourceReference* _tmp7_;
7392 		ValaBinaryExpression* _tmp8_;
7393 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_BITWISE_AND)) {
7394 			break;
7395 		}
7396 		_tmp2_ = vala_genie_parser_parse_equality_expression (self, &_inner_error0_);
7397 		right = _tmp2_;
7398 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7399 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7400 				g_propagate_error (error, _inner_error0_);
7401 				_vala_code_node_unref0 (left);
7402 				return NULL;
7403 			} else {
7404 				_vala_code_node_unref0 (left);
7405 				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);
7406 				g_clear_error (&_inner_error0_);
7407 				return NULL;
7408 			}
7409 		}
7410 		_tmp3_ = left;
7411 		_tmp4_ = right;
7412 		_tmp5_ = begin;
7413 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
7414 		_tmp7_ = _tmp6_;
7415 		_tmp8_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_BITWISE_AND, _tmp3_, _tmp4_, _tmp7_);
7416 		_vala_code_node_unref0 (left);
7417 		left = (ValaExpression*) _tmp8_;
7418 		_vala_source_reference_unref0 (_tmp7_);
7419 		_vala_code_node_unref0 (right);
7420 	}
7421 	result = left;
7422 	return result;
7423 }
7424 
7425 static ValaExpression*
vala_genie_parser_parse_exclusive_or_expression(ValaGenieParser * self,GError ** error)7426 vala_genie_parser_parse_exclusive_or_expression (ValaGenieParser* self,
7427                                                  GError** error)
7428 {
7429 	ValaSourceLocation begin = {0};
7430 	ValaSourceLocation _tmp0_ = {0};
7431 	ValaExpression* left = NULL;
7432 	ValaExpression* _tmp1_;
7433 	GError* _inner_error0_ = NULL;
7434 	ValaExpression* result = NULL;
7435 	g_return_val_if_fail (self != NULL, NULL);
7436 	vala_genie_parser_get_location (self, &_tmp0_);
7437 	begin = _tmp0_;
7438 	_tmp1_ = vala_genie_parser_parse_and_expression (self, &_inner_error0_);
7439 	left = _tmp1_;
7440 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7441 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7442 			g_propagate_error (error, _inner_error0_);
7443 			return NULL;
7444 		} else {
7445 			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);
7446 			g_clear_error (&_inner_error0_);
7447 			return NULL;
7448 		}
7449 	}
7450 	while (TRUE) {
7451 		ValaExpression* right = NULL;
7452 		ValaExpression* _tmp2_;
7453 		ValaExpression* _tmp3_;
7454 		ValaExpression* _tmp4_;
7455 		ValaSourceLocation _tmp5_;
7456 		ValaSourceReference* _tmp6_;
7457 		ValaSourceReference* _tmp7_;
7458 		ValaBinaryExpression* _tmp8_;
7459 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_CARRET)) {
7460 			break;
7461 		}
7462 		_tmp2_ = vala_genie_parser_parse_and_expression (self, &_inner_error0_);
7463 		right = _tmp2_;
7464 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7465 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7466 				g_propagate_error (error, _inner_error0_);
7467 				_vala_code_node_unref0 (left);
7468 				return NULL;
7469 			} else {
7470 				_vala_code_node_unref0 (left);
7471 				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);
7472 				g_clear_error (&_inner_error0_);
7473 				return NULL;
7474 			}
7475 		}
7476 		_tmp3_ = left;
7477 		_tmp4_ = right;
7478 		_tmp5_ = begin;
7479 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
7480 		_tmp7_ = _tmp6_;
7481 		_tmp8_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_BITWISE_XOR, _tmp3_, _tmp4_, _tmp7_);
7482 		_vala_code_node_unref0 (left);
7483 		left = (ValaExpression*) _tmp8_;
7484 		_vala_source_reference_unref0 (_tmp7_);
7485 		_vala_code_node_unref0 (right);
7486 	}
7487 	result = left;
7488 	return result;
7489 }
7490 
7491 static ValaExpression*
vala_genie_parser_parse_inclusive_or_expression(ValaGenieParser * self,GError ** error)7492 vala_genie_parser_parse_inclusive_or_expression (ValaGenieParser* self,
7493                                                  GError** error)
7494 {
7495 	ValaSourceLocation begin = {0};
7496 	ValaSourceLocation _tmp0_ = {0};
7497 	ValaExpression* left = NULL;
7498 	ValaExpression* _tmp1_;
7499 	GError* _inner_error0_ = NULL;
7500 	ValaExpression* result = NULL;
7501 	g_return_val_if_fail (self != NULL, NULL);
7502 	vala_genie_parser_get_location (self, &_tmp0_);
7503 	begin = _tmp0_;
7504 	_tmp1_ = vala_genie_parser_parse_exclusive_or_expression (self, &_inner_error0_);
7505 	left = _tmp1_;
7506 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7507 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7508 			g_propagate_error (error, _inner_error0_);
7509 			return NULL;
7510 		} else {
7511 			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);
7512 			g_clear_error (&_inner_error0_);
7513 			return NULL;
7514 		}
7515 	}
7516 	while (TRUE) {
7517 		ValaExpression* right = NULL;
7518 		ValaExpression* _tmp2_;
7519 		ValaExpression* _tmp3_;
7520 		ValaExpression* _tmp4_;
7521 		ValaSourceLocation _tmp5_;
7522 		ValaSourceReference* _tmp6_;
7523 		ValaSourceReference* _tmp7_;
7524 		ValaBinaryExpression* _tmp8_;
7525 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_BITWISE_OR)) {
7526 			break;
7527 		}
7528 		_tmp2_ = vala_genie_parser_parse_exclusive_or_expression (self, &_inner_error0_);
7529 		right = _tmp2_;
7530 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7531 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7532 				g_propagate_error (error, _inner_error0_);
7533 				_vala_code_node_unref0 (left);
7534 				return NULL;
7535 			} else {
7536 				_vala_code_node_unref0 (left);
7537 				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);
7538 				g_clear_error (&_inner_error0_);
7539 				return NULL;
7540 			}
7541 		}
7542 		_tmp3_ = left;
7543 		_tmp4_ = right;
7544 		_tmp5_ = begin;
7545 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
7546 		_tmp7_ = _tmp6_;
7547 		_tmp8_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_BITWISE_OR, _tmp3_, _tmp4_, _tmp7_);
7548 		_vala_code_node_unref0 (left);
7549 		left = (ValaExpression*) _tmp8_;
7550 		_vala_source_reference_unref0 (_tmp7_);
7551 		_vala_code_node_unref0 (right);
7552 	}
7553 	result = left;
7554 	return result;
7555 }
7556 
7557 static ValaExpression*
vala_genie_parser_parse_in_expression(ValaGenieParser * self,GError ** error)7558 vala_genie_parser_parse_in_expression (ValaGenieParser* self,
7559                                        GError** error)
7560 {
7561 	ValaSourceLocation begin = {0};
7562 	ValaSourceLocation _tmp0_ = {0};
7563 	ValaExpression* left = NULL;
7564 	ValaExpression* _tmp1_;
7565 	GError* _inner_error0_ = NULL;
7566 	ValaExpression* result = NULL;
7567 	g_return_val_if_fail (self != NULL, NULL);
7568 	vala_genie_parser_get_location (self, &_tmp0_);
7569 	begin = _tmp0_;
7570 	_tmp1_ = vala_genie_parser_parse_inclusive_or_expression (self, &_inner_error0_);
7571 	left = _tmp1_;
7572 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7573 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7574 			g_propagate_error (error, _inner_error0_);
7575 			return NULL;
7576 		} else {
7577 			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);
7578 			g_clear_error (&_inner_error0_);
7579 			return NULL;
7580 		}
7581 	}
7582 	while (TRUE) {
7583 		ValaExpression* right = NULL;
7584 		ValaExpression* _tmp2_;
7585 		ValaExpression* _tmp3_;
7586 		ValaExpression* _tmp4_;
7587 		ValaSourceLocation _tmp5_;
7588 		ValaSourceReference* _tmp6_;
7589 		ValaSourceReference* _tmp7_;
7590 		ValaBinaryExpression* _tmp8_;
7591 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_IN)) {
7592 			break;
7593 		}
7594 		_tmp2_ = vala_genie_parser_parse_inclusive_or_expression (self, &_inner_error0_);
7595 		right = _tmp2_;
7596 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7597 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7598 				g_propagate_error (error, _inner_error0_);
7599 				_vala_code_node_unref0 (left);
7600 				return NULL;
7601 			} else {
7602 				_vala_code_node_unref0 (left);
7603 				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);
7604 				g_clear_error (&_inner_error0_);
7605 				return NULL;
7606 			}
7607 		}
7608 		_tmp3_ = left;
7609 		_tmp4_ = right;
7610 		_tmp5_ = begin;
7611 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
7612 		_tmp7_ = _tmp6_;
7613 		_tmp8_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_IN, _tmp3_, _tmp4_, _tmp7_);
7614 		_vala_code_node_unref0 (left);
7615 		left = (ValaExpression*) _tmp8_;
7616 		_vala_source_reference_unref0 (_tmp7_);
7617 		_vala_code_node_unref0 (right);
7618 	}
7619 	result = left;
7620 	return result;
7621 }
7622 
7623 static ValaExpression*
vala_genie_parser_parse_conditional_and_expression(ValaGenieParser * self,GError ** error)7624 vala_genie_parser_parse_conditional_and_expression (ValaGenieParser* self,
7625                                                     GError** error)
7626 {
7627 	ValaSourceLocation begin = {0};
7628 	ValaSourceLocation _tmp0_ = {0};
7629 	ValaExpression* left = NULL;
7630 	ValaExpression* _tmp1_;
7631 	GError* _inner_error0_ = NULL;
7632 	ValaExpression* result = NULL;
7633 	g_return_val_if_fail (self != NULL, NULL);
7634 	vala_genie_parser_get_location (self, &_tmp0_);
7635 	begin = _tmp0_;
7636 	_tmp1_ = vala_genie_parser_parse_in_expression (self, &_inner_error0_);
7637 	left = _tmp1_;
7638 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7639 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7640 			g_propagate_error (error, _inner_error0_);
7641 			return NULL;
7642 		} else {
7643 			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);
7644 			g_clear_error (&_inner_error0_);
7645 			return NULL;
7646 		}
7647 	}
7648 	while (TRUE) {
7649 		ValaExpression* right = NULL;
7650 		ValaExpression* _tmp2_;
7651 		ValaExpression* _tmp3_;
7652 		ValaExpression* _tmp4_;
7653 		ValaSourceLocation _tmp5_;
7654 		ValaSourceReference* _tmp6_;
7655 		ValaSourceReference* _tmp7_;
7656 		ValaBinaryExpression* _tmp8_;
7657 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OP_AND)) {
7658 			break;
7659 		}
7660 		_tmp2_ = vala_genie_parser_parse_in_expression (self, &_inner_error0_);
7661 		right = _tmp2_;
7662 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7663 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7664 				g_propagate_error (error, _inner_error0_);
7665 				_vala_code_node_unref0 (left);
7666 				return NULL;
7667 			} else {
7668 				_vala_code_node_unref0 (left);
7669 				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);
7670 				g_clear_error (&_inner_error0_);
7671 				return NULL;
7672 			}
7673 		}
7674 		_tmp3_ = left;
7675 		_tmp4_ = right;
7676 		_tmp5_ = begin;
7677 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
7678 		_tmp7_ = _tmp6_;
7679 		_tmp8_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_AND, _tmp3_, _tmp4_, _tmp7_);
7680 		_vala_code_node_unref0 (left);
7681 		left = (ValaExpression*) _tmp8_;
7682 		_vala_source_reference_unref0 (_tmp7_);
7683 		_vala_code_node_unref0 (right);
7684 	}
7685 	result = left;
7686 	return result;
7687 }
7688 
7689 static ValaExpression*
vala_genie_parser_parse_conditional_or_expression(ValaGenieParser * self,GError ** error)7690 vala_genie_parser_parse_conditional_or_expression (ValaGenieParser* self,
7691                                                    GError** error)
7692 {
7693 	ValaSourceLocation begin = {0};
7694 	ValaSourceLocation _tmp0_ = {0};
7695 	ValaExpression* left = NULL;
7696 	ValaExpression* _tmp1_;
7697 	GError* _inner_error0_ = NULL;
7698 	ValaExpression* result = NULL;
7699 	g_return_val_if_fail (self != NULL, NULL);
7700 	vala_genie_parser_get_location (self, &_tmp0_);
7701 	begin = _tmp0_;
7702 	_tmp1_ = vala_genie_parser_parse_conditional_and_expression (self, &_inner_error0_);
7703 	left = _tmp1_;
7704 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7705 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7706 			g_propagate_error (error, _inner_error0_);
7707 			return NULL;
7708 		} else {
7709 			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);
7710 			g_clear_error (&_inner_error0_);
7711 			return NULL;
7712 		}
7713 	}
7714 	while (TRUE) {
7715 		ValaExpression* right = NULL;
7716 		ValaExpression* _tmp2_;
7717 		ValaExpression* _tmp3_;
7718 		ValaExpression* _tmp4_;
7719 		ValaSourceLocation _tmp5_;
7720 		ValaSourceReference* _tmp6_;
7721 		ValaSourceReference* _tmp7_;
7722 		ValaBinaryExpression* _tmp8_;
7723 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OP_OR)) {
7724 			break;
7725 		}
7726 		_tmp2_ = vala_genie_parser_parse_conditional_and_expression (self, &_inner_error0_);
7727 		right = _tmp2_;
7728 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7729 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7730 				g_propagate_error (error, _inner_error0_);
7731 				_vala_code_node_unref0 (left);
7732 				return NULL;
7733 			} else {
7734 				_vala_code_node_unref0 (left);
7735 				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);
7736 				g_clear_error (&_inner_error0_);
7737 				return NULL;
7738 			}
7739 		}
7740 		_tmp3_ = left;
7741 		_tmp4_ = right;
7742 		_tmp5_ = begin;
7743 		_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
7744 		_tmp7_ = _tmp6_;
7745 		_tmp8_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_OR, _tmp3_, _tmp4_, _tmp7_);
7746 		_vala_code_node_unref0 (left);
7747 		left = (ValaExpression*) _tmp8_;
7748 		_vala_source_reference_unref0 (_tmp7_);
7749 		_vala_code_node_unref0 (right);
7750 	}
7751 	result = left;
7752 	return result;
7753 }
7754 
7755 static ValaExpression*
vala_genie_parser_parse_conditional_expression(ValaGenieParser * self,GError ** error)7756 vala_genie_parser_parse_conditional_expression (ValaGenieParser* self,
7757                                                 GError** error)
7758 {
7759 	ValaSourceLocation begin = {0};
7760 	ValaSourceLocation _tmp0_ = {0};
7761 	ValaExpression* condition = NULL;
7762 	ValaExpression* _tmp1_;
7763 	GError* _inner_error0_ = NULL;
7764 	ValaExpression* result = NULL;
7765 	g_return_val_if_fail (self != NULL, NULL);
7766 	vala_genie_parser_get_location (self, &_tmp0_);
7767 	begin = _tmp0_;
7768 	_tmp1_ = vala_genie_parser_parse_conditional_or_expression (self, &_inner_error0_);
7769 	condition = _tmp1_;
7770 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7771 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7772 			g_propagate_error (error, _inner_error0_);
7773 			return NULL;
7774 		} else {
7775 			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);
7776 			g_clear_error (&_inner_error0_);
7777 			return NULL;
7778 		}
7779 	}
7780 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INTERR)) {
7781 		ValaExpression* true_expr = NULL;
7782 		ValaExpression* _tmp2_;
7783 		ValaExpression* false_expr = NULL;
7784 		ValaExpression* _tmp3_;
7785 		ValaExpression* _tmp4_;
7786 		ValaExpression* _tmp5_;
7787 		ValaExpression* _tmp6_;
7788 		ValaSourceLocation _tmp7_;
7789 		ValaSourceReference* _tmp8_;
7790 		ValaSourceReference* _tmp9_;
7791 		ValaConditionalExpression* _tmp10_;
7792 		ValaExpression* _tmp11_;
7793 		_tmp2_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
7794 		true_expr = _tmp2_;
7795 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7796 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7797 				g_propagate_error (error, _inner_error0_);
7798 				_vala_code_node_unref0 (condition);
7799 				return NULL;
7800 			} else {
7801 				_vala_code_node_unref0 (condition);
7802 				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);
7803 				g_clear_error (&_inner_error0_);
7804 				return NULL;
7805 			}
7806 		}
7807 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
7808 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7809 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7810 				g_propagate_error (error, _inner_error0_);
7811 				_vala_code_node_unref0 (true_expr);
7812 				_vala_code_node_unref0 (condition);
7813 				return NULL;
7814 			} else {
7815 				_vala_code_node_unref0 (true_expr);
7816 				_vala_code_node_unref0 (condition);
7817 				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);
7818 				g_clear_error (&_inner_error0_);
7819 				return NULL;
7820 			}
7821 		}
7822 		_tmp3_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
7823 		false_expr = _tmp3_;
7824 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7825 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7826 				g_propagate_error (error, _inner_error0_);
7827 				_vala_code_node_unref0 (true_expr);
7828 				_vala_code_node_unref0 (condition);
7829 				return NULL;
7830 			} else {
7831 				_vala_code_node_unref0 (true_expr);
7832 				_vala_code_node_unref0 (condition);
7833 				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);
7834 				g_clear_error (&_inner_error0_);
7835 				return NULL;
7836 			}
7837 		}
7838 		_tmp4_ = condition;
7839 		_tmp5_ = true_expr;
7840 		_tmp6_ = false_expr;
7841 		_tmp7_ = begin;
7842 		_tmp8_ = vala_genie_parser_get_src (self, &_tmp7_);
7843 		_tmp9_ = _tmp8_;
7844 		_tmp10_ = vala_conditional_expression_new (_tmp4_, _tmp5_, _tmp6_, _tmp9_);
7845 		_tmp11_ = (ValaExpression*) _tmp10_;
7846 		_vala_source_reference_unref0 (_tmp9_);
7847 		result = _tmp11_;
7848 		_vala_code_node_unref0 (false_expr);
7849 		_vala_code_node_unref0 (true_expr);
7850 		_vala_code_node_unref0 (condition);
7851 		return result;
7852 	} else {
7853 		result = condition;
7854 		return result;
7855 	}
7856 	_vala_code_node_unref0 (condition);
7857 }
7858 
7859 static ValaParameter*
vala_genie_parser_parse_lambda_parameter(ValaGenieParser * self,GError ** error)7860 vala_genie_parser_parse_lambda_parameter (ValaGenieParser* self,
7861                                           GError** error)
7862 {
7863 	ValaSourceLocation begin = {0};
7864 	ValaSourceLocation _tmp0_ = {0};
7865 	ValaParameterDirection direction = 0;
7866 	gchar* id = NULL;
7867 	gchar* _tmp1_;
7868 	ValaParameter* param = NULL;
7869 	ValaSourceLocation _tmp2_;
7870 	ValaSourceReference* _tmp3_;
7871 	ValaSourceReference* _tmp4_;
7872 	ValaParameter* _tmp5_;
7873 	ValaParameter* _tmp6_;
7874 	ValaParameter* _tmp7_;
7875 	ValaParameterDirection _tmp8_;
7876 	GError* _inner_error0_ = NULL;
7877 	ValaParameter* result = NULL;
7878 	g_return_val_if_fail (self != NULL, NULL);
7879 	vala_genie_parser_get_location (self, &_tmp0_);
7880 	begin = _tmp0_;
7881 	direction = VALA_PARAMETER_DIRECTION_IN;
7882 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OUT)) {
7883 		direction = VALA_PARAMETER_DIRECTION_OUT;
7884 	} else {
7885 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_REF)) {
7886 			direction = VALA_PARAMETER_DIRECTION_REF;
7887 		}
7888 	}
7889 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
7890 	id = _tmp1_;
7891 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7892 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7893 			g_propagate_error (error, _inner_error0_);
7894 			return NULL;
7895 		} else {
7896 			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);
7897 			g_clear_error (&_inner_error0_);
7898 			return NULL;
7899 		}
7900 	}
7901 	_tmp2_ = begin;
7902 	_tmp3_ = vala_genie_parser_get_src (self, &_tmp2_);
7903 	_tmp4_ = _tmp3_;
7904 	_tmp5_ = vala_parameter_new (id, NULL, _tmp4_);
7905 	_tmp6_ = _tmp5_;
7906 	_vala_source_reference_unref0 (_tmp4_);
7907 	param = _tmp6_;
7908 	_tmp7_ = param;
7909 	_tmp8_ = direction;
7910 	vala_parameter_set_direction (_tmp7_, _tmp8_);
7911 	result = param;
7912 	_g_free0 (id);
7913 	return result;
7914 }
7915 
7916 static ValaExpression*
vala_genie_parser_parse_lambda_expression(ValaGenieParser * self,GError ** error)7917 vala_genie_parser_parse_lambda_expression (ValaGenieParser* self,
7918                                            GError** error)
7919 {
7920 	ValaSourceLocation begin = {0};
7921 	ValaSourceLocation _tmp0_ = {0};
7922 	ValaList* params = NULL;
7923 	GEqualFunc _tmp1_;
7924 	ValaArrayList* _tmp2_;
7925 	ValaLambdaExpression* lambda = NULL;
7926 	GError* _inner_error0_ = NULL;
7927 	ValaExpression* result = NULL;
7928 	g_return_val_if_fail (self != NULL, NULL);
7929 	vala_genie_parser_get_location (self, &_tmp0_);
7930 	begin = _tmp0_;
7931 	_tmp1_ = g_direct_equal;
7932 	_tmp2_ = vala_array_list_new (VALA_TYPE_PARAMETER, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp1_);
7933 	params = (ValaList*) _tmp2_;
7934 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEF, &_inner_error0_);
7935 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
7936 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7937 			g_propagate_error (error, _inner_error0_);
7938 			_vala_iterable_unref0 (params);
7939 			return NULL;
7940 		} else {
7941 			_vala_iterable_unref0 (params);
7942 			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);
7943 			g_clear_error (&_inner_error0_);
7944 			return NULL;
7945 		}
7946 	}
7947 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS)) {
7948 		if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
7949 			{
7950 				gboolean _tmp3_ = FALSE;
7951 				_tmp3_ = TRUE;
7952 				while (TRUE) {
7953 					ValaParameter* _tmp4_ = NULL;
7954 					ValaParameter* _tmp5_;
7955 					ValaList* _tmp6_;
7956 					if (!_tmp3_) {
7957 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
7958 							break;
7959 						}
7960 					}
7961 					_tmp3_ = FALSE;
7962 					_tmp5_ = vala_genie_parser_parse_lambda_parameter (self, &_inner_error0_);
7963 					_tmp4_ = _tmp5_;
7964 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
7965 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7966 							g_propagate_error (error, _inner_error0_);
7967 							_vala_iterable_unref0 (params);
7968 							return NULL;
7969 						} else {
7970 							_vala_iterable_unref0 (params);
7971 							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);
7972 							g_clear_error (&_inner_error0_);
7973 							return NULL;
7974 						}
7975 					}
7976 					_tmp6_ = params;
7977 					vala_collection_add ((ValaCollection*) _tmp6_, _tmp4_);
7978 					_vala_code_node_unref0 (_tmp4_);
7979 				}
7980 			}
7981 		}
7982 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
7983 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
7984 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
7985 				g_propagate_error (error, _inner_error0_);
7986 				_vala_iterable_unref0 (params);
7987 				return NULL;
7988 			} else {
7989 				_vala_iterable_unref0 (params);
7990 				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);
7991 				g_clear_error (&_inner_error0_);
7992 				return NULL;
7993 			}
7994 		}
7995 	} else {
7996 		ValaParameter* _tmp7_ = NULL;
7997 		ValaParameter* _tmp8_;
7998 		ValaList* _tmp9_;
7999 		_tmp8_ = vala_genie_parser_parse_lambda_parameter (self, &_inner_error0_);
8000 		_tmp7_ = _tmp8_;
8001 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8002 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8003 				g_propagate_error (error, _inner_error0_);
8004 				_vala_iterable_unref0 (params);
8005 				return NULL;
8006 			} else {
8007 				_vala_iterable_unref0 (params);
8008 				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);
8009 				g_clear_error (&_inner_error0_);
8010 				return NULL;
8011 			}
8012 		}
8013 		_tmp9_ = params;
8014 		vala_collection_add ((ValaCollection*) _tmp9_, _tmp7_);
8015 		_vala_code_node_unref0 (_tmp7_);
8016 	}
8017 	if (vala_genie_parser_accept_block (self)) {
8018 		ValaBlock* block = NULL;
8019 		ValaBlock* _tmp10_;
8020 		ValaBlock* _tmp11_;
8021 		ValaSourceLocation _tmp12_;
8022 		ValaSourceReference* _tmp13_;
8023 		ValaSourceReference* _tmp14_;
8024 		ValaLambdaExpression* _tmp15_;
8025 		_tmp10_ = vala_genie_parser_parse_block (self, &_inner_error0_);
8026 		block = _tmp10_;
8027 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8028 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8029 				g_propagate_error (error, _inner_error0_);
8030 				_vala_code_node_unref0 (lambda);
8031 				_vala_iterable_unref0 (params);
8032 				return NULL;
8033 			} else {
8034 				_vala_code_node_unref0 (lambda);
8035 				_vala_iterable_unref0 (params);
8036 				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);
8037 				g_clear_error (&_inner_error0_);
8038 				return NULL;
8039 			}
8040 		}
8041 		_tmp11_ = block;
8042 		_tmp12_ = begin;
8043 		_tmp13_ = vala_genie_parser_get_src (self, &_tmp12_);
8044 		_tmp14_ = _tmp13_;
8045 		_tmp15_ = vala_lambda_expression_new_with_statement_body (_tmp11_, _tmp14_);
8046 		_vala_code_node_unref0 (lambda);
8047 		lambda = _tmp15_;
8048 		_vala_source_reference_unref0 (_tmp14_);
8049 		_vala_code_node_unref0 (block);
8050 	} else {
8051 		ValaExpression* expr = NULL;
8052 		ValaExpression* _tmp16_;
8053 		ValaExpression* _tmp17_;
8054 		ValaSourceLocation _tmp18_;
8055 		ValaSourceReference* _tmp19_;
8056 		ValaSourceReference* _tmp20_;
8057 		ValaLambdaExpression* _tmp21_;
8058 		_tmp16_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
8059 		expr = _tmp16_;
8060 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8061 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8062 				g_propagate_error (error, _inner_error0_);
8063 				_vala_code_node_unref0 (lambda);
8064 				_vala_iterable_unref0 (params);
8065 				return NULL;
8066 			} else {
8067 				_vala_code_node_unref0 (lambda);
8068 				_vala_iterable_unref0 (params);
8069 				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);
8070 				g_clear_error (&_inner_error0_);
8071 				return NULL;
8072 			}
8073 		}
8074 		_tmp17_ = expr;
8075 		_tmp18_ = begin;
8076 		_tmp19_ = vala_genie_parser_get_src (self, &_tmp18_);
8077 		_tmp20_ = _tmp19_;
8078 		_tmp21_ = vala_lambda_expression_new (_tmp17_, _tmp20_);
8079 		_vala_code_node_unref0 (lambda);
8080 		lambda = _tmp21_;
8081 		_vala_source_reference_unref0 (_tmp20_);
8082 		vala_genie_parser_expect_terminator (self, &_inner_error0_);
8083 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8084 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8085 				g_propagate_error (error, _inner_error0_);
8086 				_vala_code_node_unref0 (expr);
8087 				_vala_code_node_unref0 (lambda);
8088 				_vala_iterable_unref0 (params);
8089 				return NULL;
8090 			} else {
8091 				_vala_code_node_unref0 (expr);
8092 				_vala_code_node_unref0 (lambda);
8093 				_vala_iterable_unref0 (params);
8094 				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);
8095 				g_clear_error (&_inner_error0_);
8096 				return NULL;
8097 			}
8098 		}
8099 		_vala_code_node_unref0 (expr);
8100 	}
8101 	{
8102 		ValaList* _param_list = NULL;
8103 		ValaList* _tmp22_;
8104 		ValaList* _tmp23_;
8105 		gint _param_size = 0;
8106 		ValaList* _tmp24_;
8107 		gint _tmp25_;
8108 		gint _tmp26_;
8109 		gint _param_index = 0;
8110 		_tmp22_ = params;
8111 		_tmp23_ = _vala_iterable_ref0 (_tmp22_);
8112 		_param_list = _tmp23_;
8113 		_tmp24_ = _param_list;
8114 		_tmp25_ = vala_collection_get_size ((ValaCollection*) _tmp24_);
8115 		_tmp26_ = _tmp25_;
8116 		_param_size = _tmp26_;
8117 		_param_index = -1;
8118 		while (TRUE) {
8119 			gint _tmp27_;
8120 			gint _tmp28_;
8121 			ValaParameter* param = NULL;
8122 			ValaList* _tmp29_;
8123 			gpointer _tmp30_;
8124 			ValaLambdaExpression* _tmp31_;
8125 			ValaParameter* _tmp32_;
8126 			_param_index = _param_index + 1;
8127 			_tmp27_ = _param_index;
8128 			_tmp28_ = _param_size;
8129 			if (!(_tmp27_ < _tmp28_)) {
8130 				break;
8131 			}
8132 			_tmp29_ = _param_list;
8133 			_tmp30_ = vala_list_get (_tmp29_, _param_index);
8134 			param = (ValaParameter*) _tmp30_;
8135 			_tmp31_ = lambda;
8136 			_tmp32_ = param;
8137 			vala_lambda_expression_add_parameter (_tmp31_, _tmp32_);
8138 			_vala_code_node_unref0 (param);
8139 		}
8140 		_vala_iterable_unref0 (_param_list);
8141 	}
8142 	result = (ValaExpression*) lambda;
8143 	_vala_iterable_unref0 (params);
8144 	return result;
8145 }
8146 
8147 static ValaAssignmentOperator
vala_genie_parser_get_assignment_operator(ValaGenieParser * self,ValaGenieTokenType token_type)8148 vala_genie_parser_get_assignment_operator (ValaGenieParser* self,
8149                                            ValaGenieTokenType token_type)
8150 {
8151 	ValaAssignmentOperator result = 0;
8152 	g_return_val_if_fail (self != NULL, 0);
8153 	switch (token_type) {
8154 		case VALA_GENIE_TOKEN_TYPE_ASSIGN:
8155 		{
8156 			result = VALA_ASSIGNMENT_OPERATOR_SIMPLE;
8157 			return result;
8158 		}
8159 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_ADD:
8160 		{
8161 			result = VALA_ASSIGNMENT_OPERATOR_ADD;
8162 			return result;
8163 		}
8164 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_SUB:
8165 		{
8166 			result = VALA_ASSIGNMENT_OPERATOR_SUB;
8167 			return result;
8168 		}
8169 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_OR:
8170 		{
8171 			result = VALA_ASSIGNMENT_OPERATOR_BITWISE_OR;
8172 			return result;
8173 		}
8174 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_AND:
8175 		{
8176 			result = VALA_ASSIGNMENT_OPERATOR_BITWISE_AND;
8177 			return result;
8178 		}
8179 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_XOR:
8180 		{
8181 			result = VALA_ASSIGNMENT_OPERATOR_BITWISE_XOR;
8182 			return result;
8183 		}
8184 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_DIV:
8185 		{
8186 			result = VALA_ASSIGNMENT_OPERATOR_DIV;
8187 			return result;
8188 		}
8189 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_MUL:
8190 		{
8191 			result = VALA_ASSIGNMENT_OPERATOR_MUL;
8192 			return result;
8193 		}
8194 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_PERCENT:
8195 		{
8196 			result = VALA_ASSIGNMENT_OPERATOR_PERCENT;
8197 			return result;
8198 		}
8199 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_SHIFT_LEFT:
8200 		{
8201 			result = VALA_ASSIGNMENT_OPERATOR_SHIFT_LEFT;
8202 			return result;
8203 		}
8204 		default:
8205 		{
8206 			result = VALA_ASSIGNMENT_OPERATOR_NONE;
8207 			return result;
8208 		}
8209 	}
8210 }
8211 
8212 static ValaExpression*
vala_genie_parser_parse_expression_with_terminator(ValaGenieParser * self,GError ** error)8213 vala_genie_parser_parse_expression_with_terminator (ValaGenieParser* self,
8214                                                     GError** error)
8215 {
8216 	ValaExpression* expr = NULL;
8217 	ValaExpression* _tmp0_;
8218 	GError* _inner_error0_ = NULL;
8219 	ValaExpression* result = NULL;
8220 	g_return_val_if_fail (self != NULL, NULL);
8221 	_tmp0_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
8222 	expr = _tmp0_;
8223 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
8224 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8225 			g_propagate_error (error, _inner_error0_);
8226 			return NULL;
8227 		} else {
8228 			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);
8229 			g_clear_error (&_inner_error0_);
8230 			return NULL;
8231 		}
8232 	}
8233 	if (self->priv->current_expr_is_lambda) {
8234 		self->priv->current_expr_is_lambda = FALSE;
8235 	} else {
8236 		vala_genie_parser_expect_terminator (self, &_inner_error0_);
8237 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8238 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8239 				g_propagate_error (error, _inner_error0_);
8240 				_vala_code_node_unref0 (expr);
8241 				return NULL;
8242 			} else {
8243 				_vala_code_node_unref0 (expr);
8244 				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);
8245 				g_clear_error (&_inner_error0_);
8246 				return NULL;
8247 			}
8248 		}
8249 	}
8250 	result = expr;
8251 	return result;
8252 }
8253 
8254 static ValaExpression*
vala_genie_parser_parse_expression(ValaGenieParser * self,GError ** error)8255 vala_genie_parser_parse_expression (ValaGenieParser* self,
8256                                     GError** error)
8257 {
8258 	ValaSourceLocation begin = {0};
8259 	ValaSourceLocation _tmp1_ = {0};
8260 	ValaExpression* expr = NULL;
8261 	ValaExpression* _tmp2_;
8262 	GError* _inner_error0_ = NULL;
8263 	ValaExpression* result = NULL;
8264 	g_return_val_if_fail (self != NULL, NULL);
8265 	if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_DEF) {
8266 		ValaExpression* lambda = NULL;
8267 		ValaExpression* _tmp0_;
8268 		_tmp0_ = vala_genie_parser_parse_lambda_expression (self, &_inner_error0_);
8269 		lambda = _tmp0_;
8270 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8271 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8272 				g_propagate_error (error, _inner_error0_);
8273 				return NULL;
8274 			} else {
8275 				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);
8276 				g_clear_error (&_inner_error0_);
8277 				return NULL;
8278 			}
8279 		}
8280 		self->priv->current_expr_is_lambda = TRUE;
8281 		result = lambda;
8282 		return result;
8283 	} else {
8284 		self->priv->current_expr_is_lambda = FALSE;
8285 	}
8286 	vala_genie_parser_get_location (self, &_tmp1_);
8287 	begin = _tmp1_;
8288 	_tmp2_ = vala_genie_parser_parse_conditional_expression (self, &_inner_error0_);
8289 	expr = _tmp2_;
8290 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
8291 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8292 			g_propagate_error (error, _inner_error0_);
8293 			return NULL;
8294 		} else {
8295 			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);
8296 			g_clear_error (&_inner_error0_);
8297 			return NULL;
8298 		}
8299 	}
8300 	while (TRUE) {
8301 		ValaAssignmentOperator operator = 0;
8302 		ValaAssignmentOperator _tmp3_;
8303 		operator = vala_genie_parser_get_assignment_operator (self, vala_genie_parser_current (self));
8304 		_tmp3_ = operator;
8305 		if (_tmp3_ != VALA_ASSIGNMENT_OPERATOR_NONE) {
8306 			ValaExpression* rhs = NULL;
8307 			ValaExpression* _tmp4_;
8308 			ValaExpression* _tmp5_;
8309 			ValaExpression* _tmp6_;
8310 			ValaAssignmentOperator _tmp7_;
8311 			ValaSourceLocation _tmp8_;
8312 			ValaSourceReference* _tmp9_;
8313 			ValaSourceReference* _tmp10_;
8314 			ValaAssignment* _tmp11_;
8315 			vala_genie_parser_next (self);
8316 			_tmp4_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
8317 			rhs = _tmp4_;
8318 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
8319 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8320 					g_propagate_error (error, _inner_error0_);
8321 					_vala_code_node_unref0 (expr);
8322 					return NULL;
8323 				} else {
8324 					_vala_code_node_unref0 (expr);
8325 					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);
8326 					g_clear_error (&_inner_error0_);
8327 					return NULL;
8328 				}
8329 			}
8330 			_tmp5_ = expr;
8331 			_tmp6_ = rhs;
8332 			_tmp7_ = operator;
8333 			_tmp8_ = begin;
8334 			_tmp9_ = vala_genie_parser_get_src (self, &_tmp8_);
8335 			_tmp10_ = _tmp9_;
8336 			_tmp11_ = vala_assignment_new (_tmp5_, _tmp6_, _tmp7_, _tmp10_);
8337 			_vala_code_node_unref0 (expr);
8338 			expr = (ValaExpression*) _tmp11_;
8339 			_vala_source_reference_unref0 (_tmp10_);
8340 			_vala_code_node_unref0 (rhs);
8341 		} else {
8342 			if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_OP_GT) {
8343 				gchar* first_gt_pos = NULL;
8344 				ValaGenieParserTokenInfo* _tmp12_;
8345 				gint _tmp12__length1;
8346 				ValaGenieParserTokenInfo _tmp13_;
8347 				ValaSourceLocation _tmp14_;
8348 				gchar* _tmp15_;
8349 				gboolean _tmp16_ = FALSE;
8350 				_tmp12_ = self->priv->tokens;
8351 				_tmp12__length1 = self->priv->tokens_length1;
8352 				_tmp13_ = _tmp12_[self->priv->index];
8353 				_tmp14_ = _tmp13_.begin;
8354 				_tmp15_ = _tmp14_.pos;
8355 				first_gt_pos = _tmp15_;
8356 				vala_genie_parser_next (self);
8357 				if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_OP_GE) {
8358 					ValaGenieParserTokenInfo* _tmp17_;
8359 					gint _tmp17__length1;
8360 					ValaGenieParserTokenInfo _tmp18_;
8361 					ValaSourceLocation _tmp19_;
8362 					gchar* _tmp20_;
8363 					gchar* _tmp21_;
8364 					_tmp17_ = self->priv->tokens;
8365 					_tmp17__length1 = self->priv->tokens_length1;
8366 					_tmp18_ = _tmp17_[self->priv->index];
8367 					_tmp19_ = _tmp18_.begin;
8368 					_tmp20_ = _tmp19_.pos;
8369 					_tmp21_ = first_gt_pos;
8370 					_tmp16_ = _tmp20_ == (_tmp21_ + 1);
8371 				} else {
8372 					_tmp16_ = FALSE;
8373 				}
8374 				if (_tmp16_) {
8375 					ValaExpression* rhs = NULL;
8376 					ValaExpression* _tmp22_;
8377 					ValaExpression* _tmp23_;
8378 					ValaExpression* _tmp24_;
8379 					ValaSourceLocation _tmp25_;
8380 					ValaSourceReference* _tmp26_;
8381 					ValaSourceReference* _tmp27_;
8382 					ValaAssignment* _tmp28_;
8383 					vala_genie_parser_next (self);
8384 					_tmp22_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
8385 					rhs = _tmp22_;
8386 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8387 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8388 							g_propagate_error (error, _inner_error0_);
8389 							_vala_code_node_unref0 (expr);
8390 							return NULL;
8391 						} else {
8392 							_vala_code_node_unref0 (expr);
8393 							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);
8394 							g_clear_error (&_inner_error0_);
8395 							return NULL;
8396 						}
8397 					}
8398 					_tmp23_ = expr;
8399 					_tmp24_ = rhs;
8400 					_tmp25_ = begin;
8401 					_tmp26_ = vala_genie_parser_get_src (self, &_tmp25_);
8402 					_tmp27_ = _tmp26_;
8403 					_tmp28_ = vala_assignment_new (_tmp23_, _tmp24_, VALA_ASSIGNMENT_OPERATOR_SHIFT_RIGHT, _tmp27_);
8404 					_vala_code_node_unref0 (expr);
8405 					expr = (ValaExpression*) _tmp28_;
8406 					_vala_source_reference_unref0 (_tmp27_);
8407 					_vala_code_node_unref0 (rhs);
8408 				} else {
8409 					vala_genie_parser_prev (self);
8410 					break;
8411 				}
8412 			} else {
8413 				break;
8414 			}
8415 		}
8416 	}
8417 	result = expr;
8418 	return result;
8419 }
8420 
8421 static ValaStatement*
vala_genie_parser_get_for_statement_type(ValaGenieParser * self,GError ** error)8422 vala_genie_parser_get_for_statement_type (ValaGenieParser* self,
8423                                           GError** error)
8424 {
8425 	ValaSourceLocation begin = {0};
8426 	ValaSourceLocation _tmp0_ = {0};
8427 	gboolean is_foreach = FALSE;
8428 	ValaSourceLocation _tmp2_;
8429 	GError* _inner_error0_ = NULL;
8430 	ValaStatement* result = NULL;
8431 	g_return_val_if_fail (self != NULL, NULL);
8432 	vala_genie_parser_get_location (self, &_tmp0_);
8433 	begin = _tmp0_;
8434 	is_foreach = FALSE;
8435 	while (TRUE) {
8436 		gboolean _tmp1_ = FALSE;
8437 		if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOL) {
8438 			_tmp1_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DO;
8439 		} else {
8440 			_tmp1_ = FALSE;
8441 		}
8442 		if (!_tmp1_) {
8443 			break;
8444 		}
8445 		vala_genie_parser_next (self);
8446 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_IN)) {
8447 			is_foreach = TRUE;
8448 			break;
8449 		}
8450 	}
8451 	_tmp2_ = begin;
8452 	vala_genie_parser_rollback (self, &_tmp2_);
8453 	if (is_foreach) {
8454 		ValaStatement* _tmp3_ = NULL;
8455 		ValaStatement* _tmp4_;
8456 		ValaStatement* _tmp5_;
8457 		_tmp4_ = vala_genie_parser_parse_foreach_statement (self, &_inner_error0_);
8458 		_tmp3_ = _tmp4_;
8459 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8460 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8461 				g_propagate_error (error, _inner_error0_);
8462 				return NULL;
8463 			} else {
8464 				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);
8465 				g_clear_error (&_inner_error0_);
8466 				return NULL;
8467 			}
8468 		}
8469 		_tmp5_ = _tmp3_;
8470 		_tmp3_ = NULL;
8471 		result = _tmp5_;
8472 		_vala_code_node_unref0 (_tmp3_);
8473 		return result;
8474 	} else {
8475 		ValaStatement* _tmp6_ = NULL;
8476 		ValaStatement* _tmp7_;
8477 		ValaStatement* _tmp8_;
8478 		_tmp7_ = vala_genie_parser_parse_for_statement (self, &_inner_error0_);
8479 		_tmp6_ = _tmp7_;
8480 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
8481 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8482 				g_propagate_error (error, _inner_error0_);
8483 				return NULL;
8484 			} else {
8485 				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);
8486 				g_clear_error (&_inner_error0_);
8487 				return NULL;
8488 			}
8489 		}
8490 		_tmp8_ = _tmp6_;
8491 		_tmp6_ = NULL;
8492 		result = _tmp8_;
8493 		_vala_code_node_unref0 (_tmp6_);
8494 		return result;
8495 	}
8496 }
8497 
8498 static void
vala_genie_parser_parse_statements(ValaGenieParser * self,ValaBlock * block,GError ** error)8499 vala_genie_parser_parse_statements (ValaGenieParser* self,
8500                                     ValaBlock* block,
8501                                     GError** error)
8502 {
8503 	GError* _inner_error0_ = NULL;
8504 	g_return_if_fail (self != NULL);
8505 	g_return_if_fail (block != NULL);
8506 	while (TRUE) {
8507 		gboolean _tmp0_ = FALSE;
8508 		gboolean _tmp1_ = FALSE;
8509 		if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT) {
8510 			_tmp1_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_WHEN;
8511 		} else {
8512 			_tmp1_ = FALSE;
8513 		}
8514 		if (_tmp1_) {
8515 			_tmp0_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEFAULT;
8516 		} else {
8517 			_tmp0_ = FALSE;
8518 		}
8519 		if (!_tmp0_) {
8520 			break;
8521 		}
8522 		{
8523 			ValaStatement* stmt = NULL;
8524 			gboolean is_decl = FALSE;
8525 			ValaGenieScanner* _tmp2_;
8526 			ValaComment* _tmp3_;
8527 			stmt = NULL;
8528 			is_decl = FALSE;
8529 			_tmp2_ = self->priv->scanner;
8530 			_tmp3_ = vala_genie_scanner_pop_comment (_tmp2_);
8531 			_vala_comment_unref0 (self->priv->comment);
8532 			self->priv->comment = _tmp3_;
8533 			switch (vala_genie_parser_current (self)) {
8534 				case VALA_GENIE_TOKEN_TYPE_REQUIRES:
8535 				case VALA_GENIE_TOKEN_TYPE_ENSURES:
8536 				{
8537 					ValaSourceLocation begin = {0};
8538 					ValaSourceLocation _tmp4_ = {0};
8539 					gboolean _tmp5_ = FALSE;
8540 					ValaSourceLocation _tmp6_;
8541 					ValaSourceReference* _tmp7_;
8542 					ValaSourceReference* _tmp8_;
8543 					ValaEmptyStatement* _tmp9_;
8544 					vala_genie_parser_get_location (self, &_tmp4_);
8545 					begin = _tmp4_;
8546 					vala_genie_parser_next (self);
8547 					if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
8548 						_tmp5_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INDENT);
8549 					} else {
8550 						_tmp5_ = FALSE;
8551 					}
8552 					if (_tmp5_) {
8553 						while (TRUE) {
8554 							if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT)) {
8555 								break;
8556 							}
8557 							vala_genie_parser_next (self);
8558 						}
8559 						vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
8560 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
8561 							_vala_code_node_unref0 (stmt);
8562 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8563 								goto __catch0_vala_parse_error;
8564 							}
8565 							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);
8566 							g_clear_error (&_inner_error0_);
8567 							return;
8568 						}
8569 					} else {
8570 						while (TRUE) {
8571 							if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOL)) {
8572 								break;
8573 							}
8574 							vala_genie_parser_next (self);
8575 						}
8576 						vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
8577 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
8578 							_vala_code_node_unref0 (stmt);
8579 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8580 								goto __catch0_vala_parse_error;
8581 							}
8582 							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);
8583 							g_clear_error (&_inner_error0_);
8584 							return;
8585 						}
8586 					}
8587 					_tmp6_ = begin;
8588 					_tmp7_ = vala_genie_parser_get_src (self, &_tmp6_);
8589 					_tmp8_ = _tmp7_;
8590 					_tmp9_ = vala_empty_statement_new (_tmp8_);
8591 					_vala_code_node_unref0 (stmt);
8592 					stmt = (ValaStatement*) _tmp9_;
8593 					_vala_source_reference_unref0 (_tmp8_);
8594 					break;
8595 				}
8596 				case VALA_GENIE_TOKEN_TYPE_INDENT:
8597 				{
8598 					ValaBlock* _tmp10_ = NULL;
8599 					ValaBlock* _tmp11_;
8600 					ValaBlock* _tmp12_;
8601 					_tmp11_ = vala_genie_parser_parse_block (self, &_inner_error0_);
8602 					_tmp10_ = _tmp11_;
8603 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8604 						_vala_code_node_unref0 (stmt);
8605 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8606 							goto __catch0_vala_parse_error;
8607 						}
8608 						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);
8609 						g_clear_error (&_inner_error0_);
8610 						return;
8611 					}
8612 					_tmp12_ = _tmp10_;
8613 					_tmp10_ = NULL;
8614 					_vala_code_node_unref0 (stmt);
8615 					stmt = (ValaStatement*) _tmp12_;
8616 					_vala_code_node_unref0 (_tmp10_);
8617 					break;
8618 				}
8619 				case VALA_GENIE_TOKEN_TYPE_SEMICOLON:
8620 				case VALA_GENIE_TOKEN_TYPE_PASS:
8621 				{
8622 					ValaStatement* _tmp13_ = NULL;
8623 					ValaStatement* _tmp14_;
8624 					ValaStatement* _tmp15_;
8625 					_tmp14_ = vala_genie_parser_parse_empty_statement (self, &_inner_error0_);
8626 					_tmp13_ = _tmp14_;
8627 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8628 						_vala_code_node_unref0 (stmt);
8629 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8630 							goto __catch0_vala_parse_error;
8631 						}
8632 						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);
8633 						g_clear_error (&_inner_error0_);
8634 						return;
8635 					}
8636 					_tmp15_ = _tmp13_;
8637 					_tmp13_ = NULL;
8638 					_vala_code_node_unref0 (stmt);
8639 					stmt = _tmp15_;
8640 					_vala_code_node_unref0 (_tmp13_);
8641 					break;
8642 				}
8643 				case VALA_GENIE_TOKEN_TYPE_PRINT:
8644 				case VALA_GENIE_TOKEN_TYPE_ASSERT:
8645 				{
8646 					ValaStatement* _tmp16_ = NULL;
8647 					ValaStatement* _tmp17_;
8648 					ValaStatement* _tmp18_;
8649 					_tmp17_ = vala_genie_parser_parse_expression_statement (self, &_inner_error0_);
8650 					_tmp16_ = _tmp17_;
8651 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8652 						_vala_code_node_unref0 (stmt);
8653 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8654 							goto __catch0_vala_parse_error;
8655 						}
8656 						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);
8657 						g_clear_error (&_inner_error0_);
8658 						return;
8659 					}
8660 					_tmp18_ = _tmp16_;
8661 					_tmp16_ = NULL;
8662 					_vala_code_node_unref0 (stmt);
8663 					stmt = _tmp18_;
8664 					_vala_code_node_unref0 (_tmp16_);
8665 					break;
8666 				}
8667 				case VALA_GENIE_TOKEN_TYPE_IF:
8668 				{
8669 					ValaStatement* _tmp19_ = NULL;
8670 					ValaStatement* _tmp20_;
8671 					ValaStatement* _tmp21_;
8672 					_tmp20_ = vala_genie_parser_parse_if_statement (self, &_inner_error0_);
8673 					_tmp19_ = _tmp20_;
8674 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8675 						_vala_code_node_unref0 (stmt);
8676 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8677 							goto __catch0_vala_parse_error;
8678 						}
8679 						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);
8680 						g_clear_error (&_inner_error0_);
8681 						return;
8682 					}
8683 					_tmp21_ = _tmp19_;
8684 					_tmp19_ = NULL;
8685 					_vala_code_node_unref0 (stmt);
8686 					stmt = _tmp21_;
8687 					_vala_code_node_unref0 (_tmp19_);
8688 					break;
8689 				}
8690 				case VALA_GENIE_TOKEN_TYPE_CASE:
8691 				{
8692 					ValaStatement* _tmp22_ = NULL;
8693 					ValaStatement* _tmp23_;
8694 					ValaStatement* _tmp24_;
8695 					_tmp23_ = vala_genie_parser_parse_switch_statement (self, &_inner_error0_);
8696 					_tmp22_ = _tmp23_;
8697 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8698 						_vala_code_node_unref0 (stmt);
8699 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8700 							goto __catch0_vala_parse_error;
8701 						}
8702 						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);
8703 						g_clear_error (&_inner_error0_);
8704 						return;
8705 					}
8706 					_tmp24_ = _tmp22_;
8707 					_tmp22_ = NULL;
8708 					_vala_code_node_unref0 (stmt);
8709 					stmt = _tmp24_;
8710 					_vala_code_node_unref0 (_tmp22_);
8711 					break;
8712 				}
8713 				case VALA_GENIE_TOKEN_TYPE_WHILE:
8714 				{
8715 					ValaStatement* _tmp25_ = NULL;
8716 					ValaStatement* _tmp26_;
8717 					ValaStatement* _tmp27_;
8718 					_tmp26_ = vala_genie_parser_parse_while_statement (self, &_inner_error0_);
8719 					_tmp25_ = _tmp26_;
8720 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8721 						_vala_code_node_unref0 (stmt);
8722 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8723 							goto __catch0_vala_parse_error;
8724 						}
8725 						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);
8726 						g_clear_error (&_inner_error0_);
8727 						return;
8728 					}
8729 					_tmp27_ = _tmp25_;
8730 					_tmp25_ = NULL;
8731 					_vala_code_node_unref0 (stmt);
8732 					stmt = _tmp27_;
8733 					_vala_code_node_unref0 (_tmp25_);
8734 					break;
8735 				}
8736 				case VALA_GENIE_TOKEN_TYPE_DO:
8737 				{
8738 					ValaStatement* _tmp28_ = NULL;
8739 					ValaStatement* _tmp29_;
8740 					ValaStatement* _tmp30_;
8741 					_tmp29_ = vala_genie_parser_parse_do_statement (self, &_inner_error0_);
8742 					_tmp28_ = _tmp29_;
8743 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8744 						_vala_code_node_unref0 (stmt);
8745 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8746 							goto __catch0_vala_parse_error;
8747 						}
8748 						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);
8749 						g_clear_error (&_inner_error0_);
8750 						return;
8751 					}
8752 					_tmp30_ = _tmp28_;
8753 					_tmp28_ = NULL;
8754 					_vala_code_node_unref0 (stmt);
8755 					stmt = _tmp30_;
8756 					_vala_code_node_unref0 (_tmp28_);
8757 					break;
8758 				}
8759 				case VALA_GENIE_TOKEN_TYPE_FOR:
8760 				{
8761 					ValaStatement* _tmp31_ = NULL;
8762 					ValaStatement* _tmp32_;
8763 					ValaStatement* _tmp33_;
8764 					_tmp32_ = vala_genie_parser_get_for_statement_type (self, &_inner_error0_);
8765 					_tmp31_ = _tmp32_;
8766 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8767 						_vala_code_node_unref0 (stmt);
8768 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8769 							goto __catch0_vala_parse_error;
8770 						}
8771 						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);
8772 						g_clear_error (&_inner_error0_);
8773 						return;
8774 					}
8775 					_tmp33_ = _tmp31_;
8776 					_tmp31_ = NULL;
8777 					_vala_code_node_unref0 (stmt);
8778 					stmt = _tmp33_;
8779 					_vala_code_node_unref0 (_tmp31_);
8780 					break;
8781 				}
8782 				case VALA_GENIE_TOKEN_TYPE_BREAK:
8783 				{
8784 					ValaStatement* _tmp34_ = NULL;
8785 					ValaStatement* _tmp35_;
8786 					ValaStatement* _tmp36_;
8787 					_tmp35_ = vala_genie_parser_parse_break_statement (self, &_inner_error0_);
8788 					_tmp34_ = _tmp35_;
8789 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8790 						_vala_code_node_unref0 (stmt);
8791 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8792 							goto __catch0_vala_parse_error;
8793 						}
8794 						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);
8795 						g_clear_error (&_inner_error0_);
8796 						return;
8797 					}
8798 					_tmp36_ = _tmp34_;
8799 					_tmp34_ = NULL;
8800 					_vala_code_node_unref0 (stmt);
8801 					stmt = _tmp36_;
8802 					_vala_code_node_unref0 (_tmp34_);
8803 					break;
8804 				}
8805 				case VALA_GENIE_TOKEN_TYPE_CONTINUE:
8806 				{
8807 					ValaStatement* _tmp37_ = NULL;
8808 					ValaStatement* _tmp38_;
8809 					ValaStatement* _tmp39_;
8810 					_tmp38_ = vala_genie_parser_parse_continue_statement (self, &_inner_error0_);
8811 					_tmp37_ = _tmp38_;
8812 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8813 						_vala_code_node_unref0 (stmt);
8814 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8815 							goto __catch0_vala_parse_error;
8816 						}
8817 						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);
8818 						g_clear_error (&_inner_error0_);
8819 						return;
8820 					}
8821 					_tmp39_ = _tmp37_;
8822 					_tmp37_ = NULL;
8823 					_vala_code_node_unref0 (stmt);
8824 					stmt = _tmp39_;
8825 					_vala_code_node_unref0 (_tmp37_);
8826 					break;
8827 				}
8828 				case VALA_GENIE_TOKEN_TYPE_RETURN:
8829 				{
8830 					ValaStatement* _tmp40_ = NULL;
8831 					ValaStatement* _tmp41_;
8832 					ValaStatement* _tmp42_;
8833 					_tmp41_ = vala_genie_parser_parse_return_statement (self, &_inner_error0_);
8834 					_tmp40_ = _tmp41_;
8835 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8836 						_vala_code_node_unref0 (stmt);
8837 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8838 							goto __catch0_vala_parse_error;
8839 						}
8840 						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);
8841 						g_clear_error (&_inner_error0_);
8842 						return;
8843 					}
8844 					_tmp42_ = _tmp40_;
8845 					_tmp40_ = NULL;
8846 					_vala_code_node_unref0 (stmt);
8847 					stmt = _tmp42_;
8848 					_vala_code_node_unref0 (_tmp40_);
8849 					break;
8850 				}
8851 				case VALA_GENIE_TOKEN_TYPE_RAISE:
8852 				{
8853 					ValaStatement* _tmp43_ = NULL;
8854 					ValaStatement* _tmp44_;
8855 					ValaStatement* _tmp45_;
8856 					_tmp44_ = vala_genie_parser_parse_throw_statement (self, &_inner_error0_);
8857 					_tmp43_ = _tmp44_;
8858 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8859 						_vala_code_node_unref0 (stmt);
8860 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8861 							goto __catch0_vala_parse_error;
8862 						}
8863 						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);
8864 						g_clear_error (&_inner_error0_);
8865 						return;
8866 					}
8867 					_tmp45_ = _tmp43_;
8868 					_tmp43_ = NULL;
8869 					_vala_code_node_unref0 (stmt);
8870 					stmt = _tmp45_;
8871 					_vala_code_node_unref0 (_tmp43_);
8872 					break;
8873 				}
8874 				case VALA_GENIE_TOKEN_TYPE_TRY:
8875 				{
8876 					ValaStatement* _tmp46_ = NULL;
8877 					ValaStatement* _tmp47_;
8878 					ValaStatement* _tmp48_;
8879 					_tmp47_ = vala_genie_parser_parse_try_statement (self, &_inner_error0_);
8880 					_tmp46_ = _tmp47_;
8881 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8882 						_vala_code_node_unref0 (stmt);
8883 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8884 							goto __catch0_vala_parse_error;
8885 						}
8886 						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);
8887 						g_clear_error (&_inner_error0_);
8888 						return;
8889 					}
8890 					_tmp48_ = _tmp46_;
8891 					_tmp46_ = NULL;
8892 					_vala_code_node_unref0 (stmt);
8893 					stmt = _tmp48_;
8894 					_vala_code_node_unref0 (_tmp46_);
8895 					break;
8896 				}
8897 				case VALA_GENIE_TOKEN_TYPE_LOCK:
8898 				{
8899 					ValaStatement* _tmp49_ = NULL;
8900 					ValaStatement* _tmp50_;
8901 					ValaStatement* _tmp51_;
8902 					_tmp50_ = vala_genie_parser_parse_lock_statement (self, &_inner_error0_);
8903 					_tmp49_ = _tmp50_;
8904 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8905 						_vala_code_node_unref0 (stmt);
8906 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8907 							goto __catch0_vala_parse_error;
8908 						}
8909 						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);
8910 						g_clear_error (&_inner_error0_);
8911 						return;
8912 					}
8913 					_tmp51_ = _tmp49_;
8914 					_tmp49_ = NULL;
8915 					_vala_code_node_unref0 (stmt);
8916 					stmt = _tmp51_;
8917 					_vala_code_node_unref0 (_tmp49_);
8918 					break;
8919 				}
8920 				case VALA_GENIE_TOKEN_TYPE_DELETE:
8921 				{
8922 					ValaStatement* _tmp52_ = NULL;
8923 					ValaStatement* _tmp53_;
8924 					ValaStatement* _tmp54_;
8925 					_tmp53_ = vala_genie_parser_parse_delete_statement (self, &_inner_error0_);
8926 					_tmp52_ = _tmp53_;
8927 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8928 						_vala_code_node_unref0 (stmt);
8929 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8930 							goto __catch0_vala_parse_error;
8931 						}
8932 						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);
8933 						g_clear_error (&_inner_error0_);
8934 						return;
8935 					}
8936 					_tmp54_ = _tmp52_;
8937 					_tmp52_ = NULL;
8938 					_vala_code_node_unref0 (stmt);
8939 					stmt = _tmp54_;
8940 					_vala_code_node_unref0 (_tmp52_);
8941 					break;
8942 				}
8943 				case VALA_GENIE_TOKEN_TYPE_VAR:
8944 				{
8945 					is_decl = TRUE;
8946 					vala_genie_parser_parse_type_inference_declaration (self, block, &_inner_error0_);
8947 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8948 						_vala_code_node_unref0 (stmt);
8949 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8950 							goto __catch0_vala_parse_error;
8951 						}
8952 						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);
8953 						g_clear_error (&_inner_error0_);
8954 						return;
8955 					}
8956 					break;
8957 				}
8958 				case VALA_GENIE_TOKEN_TYPE_YIELD:
8959 				{
8960 					ValaStatement* _tmp55_ = NULL;
8961 					ValaStatement* _tmp56_;
8962 					ValaStatement* _tmp57_;
8963 					_tmp56_ = vala_genie_parser_parse_yield_statement (self, &_inner_error0_);
8964 					_tmp55_ = _tmp56_;
8965 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8966 						_vala_code_node_unref0 (stmt);
8967 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8968 							goto __catch0_vala_parse_error;
8969 						}
8970 						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);
8971 						g_clear_error (&_inner_error0_);
8972 						return;
8973 					}
8974 					_tmp57_ = _tmp55_;
8975 					_tmp55_ = NULL;
8976 					_vala_code_node_unref0 (stmt);
8977 					stmt = _tmp57_;
8978 					_vala_code_node_unref0 (_tmp55_);
8979 					break;
8980 				}
8981 				case VALA_GENIE_TOKEN_TYPE_OP_INC:
8982 				case VALA_GENIE_TOKEN_TYPE_OP_DEC:
8983 				case VALA_GENIE_TOKEN_TYPE_SUPER:
8984 				case VALA_GENIE_TOKEN_TYPE_SELF:
8985 				case VALA_GENIE_TOKEN_TYPE_OPEN_PARENS:
8986 				case VALA_GENIE_TOKEN_TYPE_STAR:
8987 				case VALA_GENIE_TOKEN_TYPE_NEW:
8988 				{
8989 					ValaStatement* _tmp58_ = NULL;
8990 					ValaStatement* _tmp59_;
8991 					ValaStatement* _tmp60_;
8992 					_tmp59_ = vala_genie_parser_parse_expression_statement (self, &_inner_error0_);
8993 					_tmp58_ = _tmp59_;
8994 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
8995 						_vala_code_node_unref0 (stmt);
8996 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
8997 							goto __catch0_vala_parse_error;
8998 						}
8999 						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);
9000 						g_clear_error (&_inner_error0_);
9001 						return;
9002 					}
9003 					_tmp60_ = _tmp58_;
9004 					_tmp58_ = NULL;
9005 					_vala_code_node_unref0 (stmt);
9006 					stmt = _tmp60_;
9007 					_vala_code_node_unref0 (_tmp58_);
9008 					break;
9009 				}
9010 				default:
9011 				{
9012 					gboolean is_expr = FALSE;
9013 					is_expr = vala_genie_parser_is_expression (self, &_inner_error0_);
9014 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
9015 						_vala_code_node_unref0 (stmt);
9016 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9017 							goto __catch0_vala_parse_error;
9018 						}
9019 						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);
9020 						g_clear_error (&_inner_error0_);
9021 						return;
9022 					}
9023 					if (is_expr) {
9024 						ValaStatement* _tmp61_ = NULL;
9025 						ValaStatement* _tmp62_;
9026 						ValaStatement* _tmp63_;
9027 						_tmp62_ = vala_genie_parser_parse_expression_statement (self, &_inner_error0_);
9028 						_tmp61_ = _tmp62_;
9029 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
9030 							_vala_code_node_unref0 (stmt);
9031 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9032 								goto __catch0_vala_parse_error;
9033 							}
9034 							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);
9035 							g_clear_error (&_inner_error0_);
9036 							return;
9037 						}
9038 						_tmp63_ = _tmp61_;
9039 						_tmp61_ = NULL;
9040 						_vala_code_node_unref0 (stmt);
9041 						stmt = _tmp63_;
9042 						_vala_code_node_unref0 (_tmp61_);
9043 					} else {
9044 						is_decl = TRUE;
9045 						vala_genie_parser_parse_local_variable_declarations (self, block, &_inner_error0_);
9046 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
9047 							_vala_code_node_unref0 (stmt);
9048 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9049 								goto __catch0_vala_parse_error;
9050 							}
9051 							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);
9052 							g_clear_error (&_inner_error0_);
9053 							return;
9054 						}
9055 					}
9056 					break;
9057 				}
9058 			}
9059 			if (!is_decl) {
9060 				ValaStatement* _tmp64_;
9061 				_tmp64_ = stmt;
9062 				vala_block_add_statement (block, _tmp64_);
9063 			}
9064 			_vala_code_node_unref0 (stmt);
9065 		}
9066 		goto __finally0;
9067 		__catch0_vala_parse_error:
9068 		{
9069 			GError* e = NULL;
9070 			GError* _tmp65_;
9071 			e = _inner_error0_;
9072 			_inner_error0_ = NULL;
9073 			_tmp65_ = e;
9074 			vala_genie_parser_report_parse_error (self, _tmp65_);
9075 			if (vala_genie_parser_recover (self) != VALA_GENIE_PARSER_RECOVERY_STATE_STATEMENT_BEGIN) {
9076 				_g_error_free0 (e);
9077 				break;
9078 			}
9079 			_g_error_free0 (e);
9080 		}
9081 		__finally0:
9082 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
9083 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9084 				g_propagate_error (error, _inner_error0_);
9085 				return;
9086 			} else {
9087 				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);
9088 				g_clear_error (&_inner_error0_);
9089 				return;
9090 			}
9091 		}
9092 	}
9093 }
9094 
9095 static gboolean
vala_genie_parser_is_expression(ValaGenieParser * self,GError ** error)9096 vala_genie_parser_is_expression (ValaGenieParser* self,
9097                                  GError** error)
9098 {
9099 	ValaSourceLocation begin = {0};
9100 	ValaSourceLocation _tmp0_ = {0};
9101 	GError* _inner_error0_ = NULL;
9102 	gboolean result = FALSE;
9103 	g_return_val_if_fail (self != NULL, FALSE);
9104 	vala_genie_parser_get_location (self, &_tmp0_);
9105 	begin = _tmp0_;
9106 	vala_genie_parser_skip_type (self, &_inner_error0_);
9107 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9108 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9109 			gboolean _tmp1_ = FALSE;
9110 			g_propagate_error (error, _inner_error0_);
9111 			return _tmp1_;
9112 		} else {
9113 			gboolean _tmp2_ = FALSE;
9114 			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);
9115 			g_clear_error (&_inner_error0_);
9116 			return _tmp2_;
9117 		}
9118 	}
9119 	switch (vala_genie_parser_current (self)) {
9120 		case VALA_GENIE_TOKEN_TYPE_OPEN_PARENS:
9121 		case VALA_GENIE_TOKEN_TYPE_OP_INC:
9122 		case VALA_GENIE_TOKEN_TYPE_OP_DEC:
9123 		case VALA_GENIE_TOKEN_TYPE_ASSIGN:
9124 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_ADD:
9125 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_AND:
9126 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_OR:
9127 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_XOR:
9128 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_DIV:
9129 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_MUL:
9130 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_PERCENT:
9131 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_SHIFT_LEFT:
9132 		case VALA_GENIE_TOKEN_TYPE_ASSIGN_SUB:
9133 		case VALA_GENIE_TOKEN_TYPE_OP_GT:
9134 		case VALA_GENIE_TOKEN_TYPE_DOT:
9135 		case VALA_GENIE_TOKEN_TYPE_OP_PTR:
9136 		{
9137 			ValaSourceLocation _tmp3_;
9138 			_tmp3_ = begin;
9139 			vala_genie_parser_rollback (self, &_tmp3_);
9140 			result = TRUE;
9141 			return result;
9142 		}
9143 		default:
9144 		{
9145 			ValaSourceLocation _tmp4_;
9146 			_tmp4_ = begin;
9147 			vala_genie_parser_rollback (self, &_tmp4_);
9148 			result = FALSE;
9149 			return result;
9150 		}
9151 	}
9152 }
9153 
9154 static ValaBlock*
vala_genie_parser_parse_embedded_statement(ValaGenieParser * self,GError ** error)9155 vala_genie_parser_parse_embedded_statement (ValaGenieParser* self,
9156                                             GError** error)
9157 {
9158 	ValaGenieScanner* _tmp1_;
9159 	ValaComment* _tmp2_;
9160 	ValaBlock* block = NULL;
9161 	ValaSourceLocation _tmp3_ = {0};
9162 	ValaSourceReference* _tmp4_;
9163 	ValaSourceReference* _tmp5_;
9164 	ValaBlock* _tmp6_;
9165 	ValaBlock* _tmp7_;
9166 	ValaStatement* _tmp8_ = NULL;
9167 	ValaStatement* _tmp9_;
9168 	ValaBlock* _tmp10_;
9169 	GError* _inner_error0_ = NULL;
9170 	ValaBlock* result = NULL;
9171 	g_return_val_if_fail (self != NULL, NULL);
9172 	if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_INDENT) {
9173 		ValaBlock* block = NULL;
9174 		ValaBlock* _tmp0_;
9175 		_tmp0_ = vala_genie_parser_parse_block (self, &_inner_error0_);
9176 		block = _tmp0_;
9177 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
9178 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9179 				g_propagate_error (error, _inner_error0_);
9180 				return NULL;
9181 			} else {
9182 				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);
9183 				g_clear_error (&_inner_error0_);
9184 				return NULL;
9185 			}
9186 		}
9187 		result = block;
9188 		return result;
9189 	}
9190 	_tmp1_ = self->priv->scanner;
9191 	_tmp2_ = vala_genie_scanner_pop_comment (_tmp1_);
9192 	_vala_comment_unref0 (self->priv->comment);
9193 	self->priv->comment = _tmp2_;
9194 	vala_genie_parser_get_location (self, &_tmp3_);
9195 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
9196 	_tmp5_ = _tmp4_;
9197 	_tmp6_ = vala_block_new (_tmp5_);
9198 	_tmp7_ = _tmp6_;
9199 	_vala_source_reference_unref0 (_tmp5_);
9200 	block = _tmp7_;
9201 	_tmp9_ = vala_genie_parser_parse_embedded_statement_without_block (self, &_inner_error0_);
9202 	_tmp8_ = _tmp9_;
9203 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9204 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9205 			g_propagate_error (error, _inner_error0_);
9206 			_vala_code_node_unref0 (block);
9207 			return NULL;
9208 		} else {
9209 			_vala_code_node_unref0 (block);
9210 			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);
9211 			g_clear_error (&_inner_error0_);
9212 			return NULL;
9213 		}
9214 	}
9215 	_tmp10_ = block;
9216 	vala_block_add_statement (_tmp10_, _tmp8_);
9217 	result = block;
9218 	_vala_code_node_unref0 (_tmp8_);
9219 	return result;
9220 }
9221 
9222 static ValaStatement*
vala_genie_parser_parse_embedded_statement_without_block(ValaGenieParser * self,GError ** error)9223 vala_genie_parser_parse_embedded_statement_without_block (ValaGenieParser* self,
9224                                                           GError** error)
9225 {
9226 	GError* _inner_error0_ = NULL;
9227 	ValaStatement* result = NULL;
9228 	g_return_val_if_fail (self != NULL, NULL);
9229 	switch (vala_genie_parser_current (self)) {
9230 		case VALA_GENIE_TOKEN_TYPE_PASS:
9231 		case VALA_GENIE_TOKEN_TYPE_SEMICOLON:
9232 		{
9233 			ValaStatement* _tmp0_ = NULL;
9234 			ValaStatement* _tmp1_;
9235 			ValaStatement* _tmp2_;
9236 			_tmp1_ = vala_genie_parser_parse_empty_statement (self, &_inner_error0_);
9237 			_tmp0_ = _tmp1_;
9238 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9239 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9240 					g_propagate_error (error, _inner_error0_);
9241 					return NULL;
9242 				} else {
9243 					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);
9244 					g_clear_error (&_inner_error0_);
9245 					return NULL;
9246 				}
9247 			}
9248 			_tmp2_ = _tmp0_;
9249 			_tmp0_ = NULL;
9250 			result = _tmp2_;
9251 			_vala_code_node_unref0 (_tmp0_);
9252 			return result;
9253 		}
9254 		case VALA_GENIE_TOKEN_TYPE_IF:
9255 		{
9256 			ValaStatement* _tmp3_ = NULL;
9257 			ValaStatement* _tmp4_;
9258 			ValaStatement* _tmp5_;
9259 			_tmp4_ = vala_genie_parser_parse_if_statement (self, &_inner_error0_);
9260 			_tmp3_ = _tmp4_;
9261 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9262 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9263 					g_propagate_error (error, _inner_error0_);
9264 					return NULL;
9265 				} else {
9266 					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);
9267 					g_clear_error (&_inner_error0_);
9268 					return NULL;
9269 				}
9270 			}
9271 			_tmp5_ = _tmp3_;
9272 			_tmp3_ = NULL;
9273 			result = _tmp5_;
9274 			_vala_code_node_unref0 (_tmp3_);
9275 			return result;
9276 		}
9277 		case VALA_GENIE_TOKEN_TYPE_CASE:
9278 		{
9279 			ValaStatement* _tmp6_ = NULL;
9280 			ValaStatement* _tmp7_;
9281 			ValaStatement* _tmp8_;
9282 			_tmp7_ = vala_genie_parser_parse_switch_statement (self, &_inner_error0_);
9283 			_tmp6_ = _tmp7_;
9284 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9285 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9286 					g_propagate_error (error, _inner_error0_);
9287 					return NULL;
9288 				} else {
9289 					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);
9290 					g_clear_error (&_inner_error0_);
9291 					return NULL;
9292 				}
9293 			}
9294 			_tmp8_ = _tmp6_;
9295 			_tmp6_ = NULL;
9296 			result = _tmp8_;
9297 			_vala_code_node_unref0 (_tmp6_);
9298 			return result;
9299 		}
9300 		case VALA_GENIE_TOKEN_TYPE_WHILE:
9301 		{
9302 			ValaStatement* _tmp9_ = NULL;
9303 			ValaStatement* _tmp10_;
9304 			ValaStatement* _tmp11_;
9305 			_tmp10_ = vala_genie_parser_parse_while_statement (self, &_inner_error0_);
9306 			_tmp9_ = _tmp10_;
9307 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9308 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9309 					g_propagate_error (error, _inner_error0_);
9310 					return NULL;
9311 				} else {
9312 					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);
9313 					g_clear_error (&_inner_error0_);
9314 					return NULL;
9315 				}
9316 			}
9317 			_tmp11_ = _tmp9_;
9318 			_tmp9_ = NULL;
9319 			result = _tmp11_;
9320 			_vala_code_node_unref0 (_tmp9_);
9321 			return result;
9322 		}
9323 		case VALA_GENIE_TOKEN_TYPE_DO:
9324 		{
9325 			ValaStatement* _tmp12_ = NULL;
9326 			ValaStatement* _tmp13_;
9327 			ValaStatement* _tmp14_;
9328 			_tmp13_ = vala_genie_parser_parse_do_statement (self, &_inner_error0_);
9329 			_tmp12_ = _tmp13_;
9330 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9331 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9332 					g_propagate_error (error, _inner_error0_);
9333 					return NULL;
9334 				} else {
9335 					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);
9336 					g_clear_error (&_inner_error0_);
9337 					return NULL;
9338 				}
9339 			}
9340 			_tmp14_ = _tmp12_;
9341 			_tmp12_ = NULL;
9342 			result = _tmp14_;
9343 			_vala_code_node_unref0 (_tmp12_);
9344 			return result;
9345 		}
9346 		case VALA_GENIE_TOKEN_TYPE_FOR:
9347 		{
9348 			ValaStatement* _tmp15_ = NULL;
9349 			ValaStatement* _tmp16_;
9350 			ValaStatement* _tmp17_;
9351 			_tmp16_ = vala_genie_parser_get_for_statement_type (self, &_inner_error0_);
9352 			_tmp15_ = _tmp16_;
9353 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9354 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9355 					g_propagate_error (error, _inner_error0_);
9356 					return NULL;
9357 				} else {
9358 					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);
9359 					g_clear_error (&_inner_error0_);
9360 					return NULL;
9361 				}
9362 			}
9363 			_tmp17_ = _tmp15_;
9364 			_tmp15_ = NULL;
9365 			result = _tmp17_;
9366 			_vala_code_node_unref0 (_tmp15_);
9367 			return result;
9368 		}
9369 		case VALA_GENIE_TOKEN_TYPE_BREAK:
9370 		{
9371 			ValaStatement* _tmp18_ = NULL;
9372 			ValaStatement* _tmp19_;
9373 			ValaStatement* _tmp20_;
9374 			_tmp19_ = vala_genie_parser_parse_break_statement (self, &_inner_error0_);
9375 			_tmp18_ = _tmp19_;
9376 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9377 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9378 					g_propagate_error (error, _inner_error0_);
9379 					return NULL;
9380 				} else {
9381 					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);
9382 					g_clear_error (&_inner_error0_);
9383 					return NULL;
9384 				}
9385 			}
9386 			_tmp20_ = _tmp18_;
9387 			_tmp18_ = NULL;
9388 			result = _tmp20_;
9389 			_vala_code_node_unref0 (_tmp18_);
9390 			return result;
9391 		}
9392 		case VALA_GENIE_TOKEN_TYPE_CONTINUE:
9393 		{
9394 			ValaStatement* _tmp21_ = NULL;
9395 			ValaStatement* _tmp22_;
9396 			ValaStatement* _tmp23_;
9397 			_tmp22_ = vala_genie_parser_parse_continue_statement (self, &_inner_error0_);
9398 			_tmp21_ = _tmp22_;
9399 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9400 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9401 					g_propagate_error (error, _inner_error0_);
9402 					return NULL;
9403 				} else {
9404 					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);
9405 					g_clear_error (&_inner_error0_);
9406 					return NULL;
9407 				}
9408 			}
9409 			_tmp23_ = _tmp21_;
9410 			_tmp21_ = NULL;
9411 			result = _tmp23_;
9412 			_vala_code_node_unref0 (_tmp21_);
9413 			return result;
9414 		}
9415 		case VALA_GENIE_TOKEN_TYPE_RETURN:
9416 		{
9417 			ValaStatement* _tmp24_ = NULL;
9418 			ValaStatement* _tmp25_;
9419 			ValaStatement* _tmp26_;
9420 			_tmp25_ = vala_genie_parser_parse_return_statement (self, &_inner_error0_);
9421 			_tmp24_ = _tmp25_;
9422 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9423 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9424 					g_propagate_error (error, _inner_error0_);
9425 					return NULL;
9426 				} else {
9427 					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);
9428 					g_clear_error (&_inner_error0_);
9429 					return NULL;
9430 				}
9431 			}
9432 			_tmp26_ = _tmp24_;
9433 			_tmp24_ = NULL;
9434 			result = _tmp26_;
9435 			_vala_code_node_unref0 (_tmp24_);
9436 			return result;
9437 		}
9438 		case VALA_GENIE_TOKEN_TYPE_YIELD:
9439 		{
9440 			ValaStatement* _tmp27_ = NULL;
9441 			ValaStatement* _tmp28_;
9442 			ValaStatement* _tmp29_;
9443 			_tmp28_ = vala_genie_parser_parse_yield_statement (self, &_inner_error0_);
9444 			_tmp27_ = _tmp28_;
9445 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9446 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9447 					g_propagate_error (error, _inner_error0_);
9448 					return NULL;
9449 				} else {
9450 					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);
9451 					g_clear_error (&_inner_error0_);
9452 					return NULL;
9453 				}
9454 			}
9455 			_tmp29_ = _tmp27_;
9456 			_tmp27_ = NULL;
9457 			result = _tmp29_;
9458 			_vala_code_node_unref0 (_tmp27_);
9459 			return result;
9460 		}
9461 		case VALA_GENIE_TOKEN_TYPE_RAISE:
9462 		{
9463 			ValaStatement* _tmp30_ = NULL;
9464 			ValaStatement* _tmp31_;
9465 			ValaStatement* _tmp32_;
9466 			_tmp31_ = vala_genie_parser_parse_throw_statement (self, &_inner_error0_);
9467 			_tmp30_ = _tmp31_;
9468 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9469 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9470 					g_propagate_error (error, _inner_error0_);
9471 					return NULL;
9472 				} else {
9473 					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);
9474 					g_clear_error (&_inner_error0_);
9475 					return NULL;
9476 				}
9477 			}
9478 			_tmp32_ = _tmp30_;
9479 			_tmp30_ = NULL;
9480 			result = _tmp32_;
9481 			_vala_code_node_unref0 (_tmp30_);
9482 			return result;
9483 		}
9484 		case VALA_GENIE_TOKEN_TYPE_TRY:
9485 		{
9486 			ValaStatement* _tmp33_ = NULL;
9487 			ValaStatement* _tmp34_;
9488 			ValaStatement* _tmp35_;
9489 			_tmp34_ = vala_genie_parser_parse_try_statement (self, &_inner_error0_);
9490 			_tmp33_ = _tmp34_;
9491 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9492 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9493 					g_propagate_error (error, _inner_error0_);
9494 					return NULL;
9495 				} else {
9496 					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);
9497 					g_clear_error (&_inner_error0_);
9498 					return NULL;
9499 				}
9500 			}
9501 			_tmp35_ = _tmp33_;
9502 			_tmp33_ = NULL;
9503 			result = _tmp35_;
9504 			_vala_code_node_unref0 (_tmp33_);
9505 			return result;
9506 		}
9507 		case VALA_GENIE_TOKEN_TYPE_LOCK:
9508 		{
9509 			ValaStatement* _tmp36_ = NULL;
9510 			ValaStatement* _tmp37_;
9511 			ValaStatement* _tmp38_;
9512 			_tmp37_ = vala_genie_parser_parse_lock_statement (self, &_inner_error0_);
9513 			_tmp36_ = _tmp37_;
9514 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9515 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9516 					g_propagate_error (error, _inner_error0_);
9517 					return NULL;
9518 				} else {
9519 					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);
9520 					g_clear_error (&_inner_error0_);
9521 					return NULL;
9522 				}
9523 			}
9524 			_tmp38_ = _tmp36_;
9525 			_tmp36_ = NULL;
9526 			result = _tmp38_;
9527 			_vala_code_node_unref0 (_tmp36_);
9528 			return result;
9529 		}
9530 		case VALA_GENIE_TOKEN_TYPE_DELETE:
9531 		{
9532 			ValaStatement* _tmp39_ = NULL;
9533 			ValaStatement* _tmp40_;
9534 			ValaStatement* _tmp41_;
9535 			_tmp40_ = vala_genie_parser_parse_delete_statement (self, &_inner_error0_);
9536 			_tmp39_ = _tmp40_;
9537 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9538 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9539 					g_propagate_error (error, _inner_error0_);
9540 					return NULL;
9541 				} else {
9542 					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);
9543 					g_clear_error (&_inner_error0_);
9544 					return NULL;
9545 				}
9546 			}
9547 			_tmp41_ = _tmp39_;
9548 			_tmp39_ = NULL;
9549 			result = _tmp41_;
9550 			_vala_code_node_unref0 (_tmp39_);
9551 			return result;
9552 		}
9553 		case VALA_GENIE_TOKEN_TYPE_VAR:
9554 		case VALA_GENIE_TOKEN_TYPE_CONST:
9555 		{
9556 			GError* _tmp42_;
9557 			_tmp42_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "embedded statement cannot be declaration ");
9558 			_inner_error0_ = _tmp42_;
9559 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9560 				g_propagate_error (error, _inner_error0_);
9561 				return NULL;
9562 			} else {
9563 				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);
9564 				g_clear_error (&_inner_error0_);
9565 				return NULL;
9566 			}
9567 		}
9568 		case VALA_GENIE_TOKEN_TYPE_OP_INC:
9569 		case VALA_GENIE_TOKEN_TYPE_OP_DEC:
9570 		case VALA_GENIE_TOKEN_TYPE_SUPER:
9571 		case VALA_GENIE_TOKEN_TYPE_SELF:
9572 		case VALA_GENIE_TOKEN_TYPE_OPEN_PARENS:
9573 		case VALA_GENIE_TOKEN_TYPE_STAR:
9574 		case VALA_GENIE_TOKEN_TYPE_NEW:
9575 		{
9576 			ValaStatement* _tmp43_ = NULL;
9577 			ValaStatement* _tmp44_;
9578 			ValaStatement* _tmp45_;
9579 			_tmp44_ = vala_genie_parser_parse_expression_statement (self, &_inner_error0_);
9580 			_tmp43_ = _tmp44_;
9581 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9582 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9583 					g_propagate_error (error, _inner_error0_);
9584 					return NULL;
9585 				} else {
9586 					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);
9587 					g_clear_error (&_inner_error0_);
9588 					return NULL;
9589 				}
9590 			}
9591 			_tmp45_ = _tmp43_;
9592 			_tmp43_ = NULL;
9593 			result = _tmp45_;
9594 			_vala_code_node_unref0 (_tmp43_);
9595 			return result;
9596 		}
9597 		default:
9598 		{
9599 			gboolean _tmp46_ = FALSE;
9600 			_tmp46_ = vala_genie_parser_is_expression (self, &_inner_error0_);
9601 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9602 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9603 					g_propagate_error (error, _inner_error0_);
9604 					return NULL;
9605 				} else {
9606 					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);
9607 					g_clear_error (&_inner_error0_);
9608 					return NULL;
9609 				}
9610 			}
9611 			if (_tmp46_) {
9612 				ValaStatement* _tmp47_ = NULL;
9613 				ValaStatement* _tmp48_;
9614 				ValaStatement* _tmp49_;
9615 				_tmp48_ = vala_genie_parser_parse_expression_statement (self, &_inner_error0_);
9616 				_tmp47_ = _tmp48_;
9617 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
9618 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9619 						g_propagate_error (error, _inner_error0_);
9620 						return NULL;
9621 					} else {
9622 						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);
9623 						g_clear_error (&_inner_error0_);
9624 						return NULL;
9625 					}
9626 				}
9627 				_tmp49_ = _tmp47_;
9628 				_tmp47_ = NULL;
9629 				result = _tmp49_;
9630 				_vala_code_node_unref0 (_tmp47_);
9631 				return result;
9632 			} else {
9633 				GError* _tmp50_;
9634 				_tmp50_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "embedded statement cannot be declaration");
9635 				_inner_error0_ = _tmp50_;
9636 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9637 					g_propagate_error (error, _inner_error0_);
9638 					return NULL;
9639 				} else {
9640 					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);
9641 					g_clear_error (&_inner_error0_);
9642 					return NULL;
9643 				}
9644 			}
9645 		}
9646 	}
9647 }
9648 
9649 static ValaBlock*
vala_genie_parser_parse_block(ValaGenieParser * self,GError ** error)9650 vala_genie_parser_parse_block (ValaGenieParser* self,
9651                                GError** error)
9652 {
9653 	ValaSourceLocation begin = {0};
9654 	ValaSourceLocation _tmp0_ = {0};
9655 	ValaBlock* block = NULL;
9656 	ValaSourceLocation _tmp1_;
9657 	ValaSourceReference* _tmp2_;
9658 	ValaSourceReference* _tmp3_;
9659 	ValaBlock* _tmp4_;
9660 	ValaBlock* _tmp5_;
9661 	ValaBlock* _tmp6_;
9662 	ValaBlock* _tmp12_;
9663 	ValaSourceReference* _tmp13_;
9664 	ValaSourceReference* _tmp14_;
9665 	ValaSourceReference* _tmp15_;
9666 	ValaSourceReference* _tmp16_;
9667 	ValaSourceLocation _tmp17_ = {0};
9668 	ValaSourceLocation _tmp18_;
9669 	GError* _inner_error0_ = NULL;
9670 	ValaBlock* result = NULL;
9671 	g_return_val_if_fail (self != NULL, NULL);
9672 	vala_genie_parser_get_location (self, &_tmp0_);
9673 	begin = _tmp0_;
9674 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INDENT, &_inner_error0_);
9675 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9676 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9677 			g_propagate_error (error, _inner_error0_);
9678 			return NULL;
9679 		} else {
9680 			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);
9681 			g_clear_error (&_inner_error0_);
9682 			return NULL;
9683 		}
9684 	}
9685 	_tmp1_ = begin;
9686 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
9687 	_tmp3_ = _tmp2_;
9688 	_tmp4_ = vala_block_new (_tmp3_);
9689 	_tmp5_ = _tmp4_;
9690 	_vala_source_reference_unref0 (_tmp3_);
9691 	block = _tmp5_;
9692 	_tmp6_ = block;
9693 	vala_genie_parser_parse_statements (self, _tmp6_, &_inner_error0_);
9694 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9695 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9696 			g_propagate_error (error, _inner_error0_);
9697 			_vala_code_node_unref0 (block);
9698 			return NULL;
9699 		} else {
9700 			_vala_code_node_unref0 (block);
9701 			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);
9702 			g_clear_error (&_inner_error0_);
9703 			return NULL;
9704 		}
9705 	}
9706 	if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DEDENT)) {
9707 		ValaCodeContext* _tmp7_;
9708 		ValaReport* _tmp8_;
9709 		ValaReport* _tmp9_;
9710 		_tmp7_ = self->priv->context;
9711 		_tmp8_ = vala_code_context_get_report (_tmp7_);
9712 		_tmp9_ = _tmp8_;
9713 		if (vala_report_get_errors (_tmp9_) == 0) {
9714 			ValaSourceReference* _tmp10_;
9715 			ValaSourceReference* _tmp11_;
9716 			_tmp10_ = vala_genie_parser_get_current_src (self);
9717 			_tmp11_ = _tmp10_;
9718 			vala_report_error (_tmp11_, "tab indentation is incorrect");
9719 			_vala_source_reference_unref0 (_tmp11_);
9720 		}
9721 	}
9722 	_tmp12_ = block;
9723 	_tmp13_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp12_);
9724 	_tmp14_ = _tmp13_;
9725 	_tmp15_ = vala_genie_parser_get_current_src (self);
9726 	_tmp16_ = _tmp15_;
9727 	vala_source_reference_get_end (_tmp16_, &_tmp17_);
9728 	_tmp18_ = _tmp17_;
9729 	vala_source_reference_set_end (_tmp14_, &_tmp18_);
9730 	_vala_source_reference_unref0 (_tmp16_);
9731 	result = block;
9732 	return result;
9733 }
9734 
9735 static ValaStatement*
vala_genie_parser_parse_empty_statement(ValaGenieParser * self,GError ** error)9736 vala_genie_parser_parse_empty_statement (ValaGenieParser* self,
9737                                          GError** error)
9738 {
9739 	ValaSourceLocation begin = {0};
9740 	ValaSourceLocation _tmp0_ = {0};
9741 	ValaSourceLocation _tmp1_;
9742 	ValaSourceReference* _tmp2_;
9743 	ValaSourceReference* _tmp3_;
9744 	ValaEmptyStatement* _tmp4_;
9745 	ValaStatement* _tmp5_;
9746 	GError* _inner_error0_ = NULL;
9747 	ValaStatement* result = NULL;
9748 	g_return_val_if_fail (self != NULL, NULL);
9749 	vala_genie_parser_get_location (self, &_tmp0_);
9750 	begin = _tmp0_;
9751 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_PASS);
9752 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_SEMICOLON);
9753 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
9754 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9755 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9756 			g_propagate_error (error, _inner_error0_);
9757 			return NULL;
9758 		} else {
9759 			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);
9760 			g_clear_error (&_inner_error0_);
9761 			return NULL;
9762 		}
9763 	}
9764 	_tmp1_ = begin;
9765 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
9766 	_tmp3_ = _tmp2_;
9767 	_tmp4_ = vala_empty_statement_new (_tmp3_);
9768 	_tmp5_ = (ValaStatement*) _tmp4_;
9769 	_vala_source_reference_unref0 (_tmp3_);
9770 	result = _tmp5_;
9771 	return result;
9772 }
9773 
9774 static void
vala_genie_parser_parse_type_inference_declaration(ValaGenieParser * self,ValaBlock * block,GError ** error)9775 vala_genie_parser_parse_type_inference_declaration (ValaGenieParser* self,
9776                                                     ValaBlock* block,
9777                                                     GError** error)
9778 {
9779 	gboolean block_var = FALSE;
9780 	gboolean _tmp0_ = FALSE;
9781 	GError* _inner_error0_ = NULL;
9782 	g_return_if_fail (self != NULL);
9783 	g_return_if_fail (block != NULL);
9784 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_VAR, &_inner_error0_);
9785 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9786 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9787 			g_propagate_error (error, _inner_error0_);
9788 			return;
9789 		} else {
9790 			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);
9791 			g_clear_error (&_inner_error0_);
9792 			return;
9793 		}
9794 	}
9795 	block_var = FALSE;
9796 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
9797 		_tmp0_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INDENT);
9798 	} else {
9799 		_tmp0_ = FALSE;
9800 	}
9801 	if (_tmp0_) {
9802 		block_var = TRUE;
9803 	}
9804 	{
9805 		gboolean _tmp1_ = FALSE;
9806 		_tmp1_ = TRUE;
9807 		while (TRUE) {
9808 			gchar* s = NULL;
9809 			gchar* _tmp3_;
9810 			ValaLocalVariable* local = NULL;
9811 			const gchar* _tmp4_;
9812 			ValaLocalVariable* _tmp5_;
9813 			ValaLocalVariable* _tmp6_;
9814 			ValaLocalVariable* _tmp7_;
9815 			ValaSourceReference* _tmp8_;
9816 			ValaSourceReference* _tmp9_;
9817 			ValaDeclarationStatement* _tmp10_;
9818 			ValaDeclarationStatement* _tmp11_;
9819 			if (!_tmp1_) {
9820 				gboolean _tmp2_ = FALSE;
9821 				if (block_var) {
9822 					_tmp2_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT;
9823 				} else {
9824 					_tmp2_ = FALSE;
9825 				}
9826 				if (!_tmp2_) {
9827 					break;
9828 				}
9829 			}
9830 			_tmp1_ = FALSE;
9831 			_tmp3_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
9832 			s = _tmp3_;
9833 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9834 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9835 					g_propagate_error (error, _inner_error0_);
9836 					return;
9837 				} else {
9838 					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);
9839 					g_clear_error (&_inner_error0_);
9840 					return;
9841 				}
9842 			}
9843 			_tmp4_ = s;
9844 			_tmp5_ = vala_genie_parser_parse_local_variable (self, NULL, _tmp4_, TRUE, &_inner_error0_);
9845 			local = _tmp5_;
9846 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
9847 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9848 					g_propagate_error (error, _inner_error0_);
9849 					_g_free0 (s);
9850 					return;
9851 				} else {
9852 					_g_free0 (s);
9853 					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);
9854 					g_clear_error (&_inner_error0_);
9855 					return;
9856 				}
9857 			}
9858 			_tmp6_ = local;
9859 			_tmp7_ = local;
9860 			_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp7_);
9861 			_tmp9_ = _tmp8_;
9862 			_tmp10_ = vala_declaration_statement_new ((ValaSymbol*) _tmp6_, _tmp9_);
9863 			_tmp11_ = _tmp10_;
9864 			vala_block_add_statement (block, (ValaStatement*) _tmp11_);
9865 			_vala_code_node_unref0 (_tmp11_);
9866 			_vala_code_node_unref0 (local);
9867 			_g_free0 (s);
9868 		}
9869 	}
9870 	if (block_var) {
9871 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
9872 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
9873 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9874 				g_propagate_error (error, _inner_error0_);
9875 				return;
9876 			} else {
9877 				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);
9878 				g_clear_error (&_inner_error0_);
9879 				return;
9880 			}
9881 		}
9882 	}
9883 }
9884 
9885 static void
vala_genie_parser_parse_local_variable_declarations(ValaGenieParser * self,ValaBlock * block,GError ** error)9886 vala_genie_parser_parse_local_variable_declarations (ValaGenieParser* self,
9887                                                      ValaBlock* block,
9888                                                      GError** error)
9889 {
9890 	ValaArrayList* id_list = NULL;
9891 	GEqualFunc _tmp0_;
9892 	ValaArrayList* _tmp1_;
9893 	gchar* _tmp2_ = NULL;
9894 	gchar* _tmp3_;
9895 	ValaArrayList* _tmp4_;
9896 	ValaDataType* variable_type = NULL;
9897 	ValaDataType* _tmp8_;
9898 	ValaDataType* type = NULL;
9899 	ValaDataType* _tmp9_;
9900 	ValaDataType* _tmp10_;
9901 	ValaIterator* iterator = NULL;
9902 	ValaArrayList* _tmp11_;
9903 	ValaIterator* _tmp12_;
9904 	ValaIterator* _tmp13_;
9905 	gboolean expect_terminator = FALSE;
9906 	GError* _inner_error0_ = NULL;
9907 	g_return_if_fail (self != NULL);
9908 	g_return_if_fail (block != NULL);
9909 	_tmp0_ = g_str_equal;
9910 	_tmp1_ = vala_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp0_);
9911 	id_list = _tmp1_;
9912 	_tmp3_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
9913 	_tmp2_ = _tmp3_;
9914 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9915 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9916 			g_propagate_error (error, _inner_error0_);
9917 			_vala_iterable_unref0 (id_list);
9918 			return;
9919 		} else {
9920 			_vala_iterable_unref0 (id_list);
9921 			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);
9922 			g_clear_error (&_inner_error0_);
9923 			return;
9924 		}
9925 	}
9926 	_tmp4_ = id_list;
9927 	vala_collection_add ((ValaCollection*) _tmp4_, _tmp2_);
9928 	while (TRUE) {
9929 		gchar* _tmp5_ = NULL;
9930 		gchar* _tmp6_;
9931 		ValaArrayList* _tmp7_;
9932 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
9933 			break;
9934 		}
9935 		_tmp6_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
9936 		_tmp5_ = _tmp6_;
9937 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
9938 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9939 				g_propagate_error (error, _inner_error0_);
9940 				_g_free0 (_tmp2_);
9941 				_vala_iterable_unref0 (id_list);
9942 				return;
9943 			} else {
9944 				_g_free0 (_tmp2_);
9945 				_vala_iterable_unref0 (id_list);
9946 				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);
9947 				g_clear_error (&_inner_error0_);
9948 				return;
9949 			}
9950 		}
9951 		_tmp7_ = id_list;
9952 		vala_collection_add ((ValaCollection*) _tmp7_, _tmp5_);
9953 		_g_free0 (_tmp5_);
9954 	}
9955 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
9956 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9957 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9958 			g_propagate_error (error, _inner_error0_);
9959 			_g_free0 (_tmp2_);
9960 			_vala_iterable_unref0 (id_list);
9961 			return;
9962 		} else {
9963 			_g_free0 (_tmp2_);
9964 			_vala_iterable_unref0 (id_list);
9965 			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);
9966 			g_clear_error (&_inner_error0_);
9967 			return;
9968 		}
9969 	}
9970 	_tmp8_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
9971 	variable_type = _tmp8_;
9972 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9973 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9974 			g_propagate_error (error, _inner_error0_);
9975 			_g_free0 (_tmp2_);
9976 			_vala_iterable_unref0 (id_list);
9977 			return;
9978 		} else {
9979 			_g_free0 (_tmp2_);
9980 			_vala_iterable_unref0 (id_list);
9981 			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);
9982 			g_clear_error (&_inner_error0_);
9983 			return;
9984 		}
9985 	}
9986 	_tmp9_ = variable_type;
9987 	_tmp10_ = vala_genie_parser_parse_inline_array_type (self, _tmp9_, &_inner_error0_);
9988 	type = _tmp10_;
9989 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
9990 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
9991 			g_propagate_error (error, _inner_error0_);
9992 			_vala_code_node_unref0 (variable_type);
9993 			_g_free0 (_tmp2_);
9994 			_vala_iterable_unref0 (id_list);
9995 			return;
9996 		} else {
9997 			_vala_code_node_unref0 (variable_type);
9998 			_g_free0 (_tmp2_);
9999 			_vala_iterable_unref0 (id_list);
10000 			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);
10001 			g_clear_error (&_inner_error0_);
10002 			return;
10003 		}
10004 	}
10005 	_tmp11_ = id_list;
10006 	_tmp12_ = vala_iterable_iterator ((ValaIterable*) _tmp11_);
10007 	iterator = _tmp12_;
10008 	_tmp13_ = iterator;
10009 	vala_iterator_next (_tmp13_);
10010 	expect_terminator = FALSE;
10011 	while (TRUE) {
10012 		gchar* id = NULL;
10013 		ValaIterator* _tmp14_;
10014 		gpointer _tmp15_;
10015 		ValaDataType* type_copy = NULL;
10016 		ValaDataType* _tmp16_;
10017 		ValaIterator* _tmp19_;
10018 		ValaLocalVariable* local = NULL;
10019 		ValaDataType* _tmp20_;
10020 		const gchar* _tmp21_;
10021 		ValaLocalVariable* _tmp22_;
10022 		ValaLocalVariable* _tmp23_;
10023 		ValaLocalVariable* _tmp24_;
10024 		ValaSourceReference* _tmp25_;
10025 		ValaSourceReference* _tmp26_;
10026 		ValaDeclarationStatement* _tmp27_;
10027 		ValaDeclarationStatement* _tmp28_;
10028 		if (!(!expect_terminator)) {
10029 			break;
10030 		}
10031 		_tmp14_ = iterator;
10032 		_tmp15_ = vala_iterator_get (_tmp14_);
10033 		id = (gchar*) _tmp15_;
10034 		type_copy = NULL;
10035 		_tmp16_ = type;
10036 		if (_tmp16_ != NULL) {
10037 			ValaDataType* _tmp17_;
10038 			ValaDataType* _tmp18_;
10039 			_tmp17_ = type;
10040 			_tmp18_ = vala_data_type_copy (_tmp17_);
10041 			_vala_code_node_unref0 (type_copy);
10042 			type_copy = _tmp18_;
10043 		}
10044 		_tmp19_ = iterator;
10045 		if (!vala_iterator_next (_tmp19_)) {
10046 			expect_terminator = TRUE;
10047 		}
10048 		_tmp20_ = type_copy;
10049 		_tmp21_ = id;
10050 		_tmp22_ = vala_genie_parser_parse_local_variable (self, _tmp20_, _tmp21_, expect_terminator, &_inner_error0_);
10051 		local = _tmp22_;
10052 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
10053 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10054 				g_propagate_error (error, _inner_error0_);
10055 				_vala_code_node_unref0 (type_copy);
10056 				_g_free0 (id);
10057 				_vala_iterator_unref0 (iterator);
10058 				_vala_code_node_unref0 (type);
10059 				_vala_code_node_unref0 (variable_type);
10060 				_g_free0 (_tmp2_);
10061 				_vala_iterable_unref0 (id_list);
10062 				return;
10063 			} else {
10064 				_vala_code_node_unref0 (type_copy);
10065 				_g_free0 (id);
10066 				_vala_iterator_unref0 (iterator);
10067 				_vala_code_node_unref0 (type);
10068 				_vala_code_node_unref0 (variable_type);
10069 				_g_free0 (_tmp2_);
10070 				_vala_iterable_unref0 (id_list);
10071 				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);
10072 				g_clear_error (&_inner_error0_);
10073 				return;
10074 			}
10075 		}
10076 		_tmp23_ = local;
10077 		_tmp24_ = local;
10078 		_tmp25_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp24_);
10079 		_tmp26_ = _tmp25_;
10080 		_tmp27_ = vala_declaration_statement_new ((ValaSymbol*) _tmp23_, _tmp26_);
10081 		_tmp28_ = _tmp27_;
10082 		vala_block_add_statement (block, (ValaStatement*) _tmp28_);
10083 		_vala_code_node_unref0 (_tmp28_);
10084 		_vala_code_node_unref0 (local);
10085 		_vala_code_node_unref0 (type_copy);
10086 		_g_free0 (id);
10087 	}
10088 	_vala_iterator_unref0 (iterator);
10089 	_vala_code_node_unref0 (type);
10090 	_vala_code_node_unref0 (variable_type);
10091 	_g_free0 (_tmp2_);
10092 	_vala_iterable_unref0 (id_list);
10093 }
10094 
10095 static ValaLocalVariable*
vala_genie_parser_parse_local_variable(ValaGenieParser * self,ValaDataType * variable_type,const gchar * id,gboolean expect_terminator,GError ** error)10096 vala_genie_parser_parse_local_variable (ValaGenieParser* self,
10097                                         ValaDataType* variable_type,
10098                                         const gchar* id,
10099                                         gboolean expect_terminator,
10100                                         GError** error)
10101 {
10102 	ValaSourceLocation begin = {0};
10103 	ValaSourceLocation _tmp0_ = {0};
10104 	ValaExpression* initializer = NULL;
10105 	ValaExpression* _tmp7_;
10106 	ValaSourceLocation _tmp8_;
10107 	ValaSourceReference* _tmp9_;
10108 	ValaSourceReference* _tmp10_;
10109 	ValaLocalVariable* _tmp11_;
10110 	ValaLocalVariable* _tmp12_;
10111 	GError* _inner_error0_ = NULL;
10112 	ValaLocalVariable* result = NULL;
10113 	g_return_val_if_fail (self != NULL, NULL);
10114 	g_return_val_if_fail (id != NULL, NULL);
10115 	vala_genie_parser_get_location (self, &_tmp0_);
10116 	begin = _tmp0_;
10117 	initializer = NULL;
10118 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
10119 		if (expect_terminator) {
10120 			ValaExpression* _tmp1_ = NULL;
10121 			ValaExpression* _tmp2_;
10122 			ValaExpression* _tmp3_;
10123 			_tmp2_ = vala_genie_parser_parse_expression_with_terminator (self, &_inner_error0_);
10124 			_tmp1_ = _tmp2_;
10125 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
10126 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10127 					g_propagate_error (error, _inner_error0_);
10128 					_vala_code_node_unref0 (initializer);
10129 					return NULL;
10130 				} else {
10131 					_vala_code_node_unref0 (initializer);
10132 					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);
10133 					g_clear_error (&_inner_error0_);
10134 					return NULL;
10135 				}
10136 			}
10137 			_tmp3_ = _tmp1_;
10138 			_tmp1_ = NULL;
10139 			_vala_code_node_unref0 (initializer);
10140 			initializer = _tmp3_;
10141 			_vala_code_node_unref0 (_tmp1_);
10142 		} else {
10143 			ValaExpression* _tmp4_ = NULL;
10144 			ValaExpression* _tmp5_;
10145 			ValaExpression* _tmp6_;
10146 			_tmp5_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
10147 			_tmp4_ = _tmp5_;
10148 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
10149 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10150 					g_propagate_error (error, _inner_error0_);
10151 					_vala_code_node_unref0 (initializer);
10152 					return NULL;
10153 				} else {
10154 					_vala_code_node_unref0 (initializer);
10155 					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);
10156 					g_clear_error (&_inner_error0_);
10157 					return NULL;
10158 				}
10159 			}
10160 			_tmp6_ = _tmp4_;
10161 			_tmp4_ = NULL;
10162 			_vala_code_node_unref0 (initializer);
10163 			initializer = _tmp6_;
10164 			_vala_code_node_unref0 (_tmp4_);
10165 		}
10166 	} else {
10167 		if (expect_terminator) {
10168 			vala_genie_parser_expect_terminator (self, &_inner_error0_);
10169 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
10170 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10171 					g_propagate_error (error, _inner_error0_);
10172 					_vala_code_node_unref0 (initializer);
10173 					return NULL;
10174 				} else {
10175 					_vala_code_node_unref0 (initializer);
10176 					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);
10177 					g_clear_error (&_inner_error0_);
10178 					return NULL;
10179 				}
10180 			}
10181 		}
10182 	}
10183 	_tmp7_ = initializer;
10184 	_tmp8_ = begin;
10185 	_tmp9_ = vala_genie_parser_get_src (self, &_tmp8_);
10186 	_tmp10_ = _tmp9_;
10187 	_tmp11_ = vala_local_variable_new (variable_type, id, _tmp7_, _tmp10_);
10188 	_tmp12_ = _tmp11_;
10189 	_vala_source_reference_unref0 (_tmp10_);
10190 	result = _tmp12_;
10191 	_vala_code_node_unref0 (initializer);
10192 	return result;
10193 }
10194 
10195 static ValaStatement*
vala_genie_parser_parse_expression_statement(ValaGenieParser * self,GError ** error)10196 vala_genie_parser_parse_expression_statement (ValaGenieParser* self,
10197                                               GError** error)
10198 {
10199 	ValaSourceLocation begin = {0};
10200 	ValaSourceLocation _tmp0_ = {0};
10201 	ValaExpression* expr = NULL;
10202 	ValaExpression* _tmp1_;
10203 	ValaSourceLocation _tmp2_;
10204 	ValaSourceReference* _tmp3_;
10205 	ValaSourceReference* _tmp4_;
10206 	ValaExpressionStatement* _tmp5_;
10207 	ValaStatement* _tmp6_;
10208 	GError* _inner_error0_ = NULL;
10209 	ValaStatement* result = NULL;
10210 	g_return_val_if_fail (self != NULL, NULL);
10211 	vala_genie_parser_get_location (self, &_tmp0_);
10212 	begin = _tmp0_;
10213 	_tmp1_ = vala_genie_parser_parse_expression_with_terminator (self, &_inner_error0_);
10214 	expr = _tmp1_;
10215 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10216 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10217 			g_propagate_error (error, _inner_error0_);
10218 			return NULL;
10219 		} else {
10220 			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);
10221 			g_clear_error (&_inner_error0_);
10222 			return NULL;
10223 		}
10224 	}
10225 	_tmp2_ = begin;
10226 	_tmp3_ = vala_genie_parser_get_src (self, &_tmp2_);
10227 	_tmp4_ = _tmp3_;
10228 	_tmp5_ = vala_expression_statement_new (expr, _tmp4_);
10229 	_tmp6_ = (ValaStatement*) _tmp5_;
10230 	_vala_source_reference_unref0 (_tmp4_);
10231 	result = _tmp6_;
10232 	_vala_code_node_unref0 (expr);
10233 	return result;
10234 }
10235 
10236 static ValaExpression*
vala_genie_parser_parse_statement_expression(ValaGenieParser * self,GError ** error)10237 vala_genie_parser_parse_statement_expression (ValaGenieParser* self,
10238                                               GError** error)
10239 {
10240 	ValaExpression* expr = NULL;
10241 	ValaExpression* _tmp0_;
10242 	GError* _inner_error0_ = NULL;
10243 	ValaExpression* result = NULL;
10244 	g_return_val_if_fail (self != NULL, NULL);
10245 	_tmp0_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
10246 	expr = _tmp0_;
10247 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10248 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10249 			g_propagate_error (error, _inner_error0_);
10250 			return NULL;
10251 		} else {
10252 			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);
10253 			g_clear_error (&_inner_error0_);
10254 			return NULL;
10255 		}
10256 	}
10257 	result = expr;
10258 	return result;
10259 }
10260 
10261 static ValaStatement*
vala_genie_parser_parse_if_statement(ValaGenieParser * self,GError ** error)10262 vala_genie_parser_parse_if_statement (ValaGenieParser* self,
10263                                       GError** error)
10264 {
10265 	ValaSourceLocation begin = {0};
10266 	ValaSourceLocation _tmp0_ = {0};
10267 	ValaExpression* condition = NULL;
10268 	ValaExpression* _tmp1_;
10269 	ValaSourceReference* src = NULL;
10270 	ValaSourceLocation _tmp2_;
10271 	ValaSourceReference* _tmp3_;
10272 	ValaBlock* true_stmt = NULL;
10273 	ValaBlock* _tmp4_;
10274 	ValaBlock* false_stmt = NULL;
10275 	ValaExpression* _tmp9_;
10276 	ValaBlock* _tmp10_;
10277 	ValaBlock* _tmp11_;
10278 	ValaSourceReference* _tmp12_;
10279 	ValaIfStatement* _tmp13_;
10280 	GError* _inner_error0_ = NULL;
10281 	ValaStatement* result = NULL;
10282 	g_return_val_if_fail (self != NULL, NULL);
10283 	vala_genie_parser_get_location (self, &_tmp0_);
10284 	begin = _tmp0_;
10285 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_IF, &_inner_error0_);
10286 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10287 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10288 			g_propagate_error (error, _inner_error0_);
10289 			return NULL;
10290 		} else {
10291 			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);
10292 			g_clear_error (&_inner_error0_);
10293 			return NULL;
10294 		}
10295 	}
10296 	_tmp1_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
10297 	condition = _tmp1_;
10298 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10299 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10300 			g_propagate_error (error, _inner_error0_);
10301 			return NULL;
10302 		} else {
10303 			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);
10304 			g_clear_error (&_inner_error0_);
10305 			return NULL;
10306 		}
10307 	}
10308 	if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DO)) {
10309 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
10310 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
10311 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10312 				g_propagate_error (error, _inner_error0_);
10313 				_vala_code_node_unref0 (condition);
10314 				return NULL;
10315 			} else {
10316 				_vala_code_node_unref0 (condition);
10317 				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);
10318 				g_clear_error (&_inner_error0_);
10319 				return NULL;
10320 			}
10321 		}
10322 	} else {
10323 		vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL);
10324 	}
10325 	_tmp2_ = begin;
10326 	_tmp3_ = vala_genie_parser_get_src (self, &_tmp2_);
10327 	src = _tmp3_;
10328 	_tmp4_ = vala_genie_parser_parse_embedded_statement (self, &_inner_error0_);
10329 	true_stmt = _tmp4_;
10330 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10331 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10332 			g_propagate_error (error, _inner_error0_);
10333 			_vala_source_reference_unref0 (src);
10334 			_vala_code_node_unref0 (condition);
10335 			return NULL;
10336 		} else {
10337 			_vala_source_reference_unref0 (src);
10338 			_vala_code_node_unref0 (condition);
10339 			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);
10340 			g_clear_error (&_inner_error0_);
10341 			return NULL;
10342 		}
10343 	}
10344 	false_stmt = NULL;
10345 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ELSE)) {
10346 		gboolean _tmp5_ = FALSE;
10347 		ValaBlock* _tmp6_ = NULL;
10348 		ValaBlock* _tmp7_;
10349 		ValaBlock* _tmp8_;
10350 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DO)) {
10351 			_tmp5_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_IF;
10352 		} else {
10353 			_tmp5_ = FALSE;
10354 		}
10355 		if (_tmp5_) {
10356 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
10357 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
10358 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10359 					g_propagate_error (error, _inner_error0_);
10360 					_vala_code_node_unref0 (false_stmt);
10361 					_vala_code_node_unref0 (true_stmt);
10362 					_vala_source_reference_unref0 (src);
10363 					_vala_code_node_unref0 (condition);
10364 					return NULL;
10365 				} else {
10366 					_vala_code_node_unref0 (false_stmt);
10367 					_vala_code_node_unref0 (true_stmt);
10368 					_vala_source_reference_unref0 (src);
10369 					_vala_code_node_unref0 (condition);
10370 					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);
10371 					g_clear_error (&_inner_error0_);
10372 					return NULL;
10373 				}
10374 			}
10375 		} else {
10376 			vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL);
10377 		}
10378 		_tmp7_ = vala_genie_parser_parse_embedded_statement (self, &_inner_error0_);
10379 		_tmp6_ = _tmp7_;
10380 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
10381 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10382 				g_propagate_error (error, _inner_error0_);
10383 				_vala_code_node_unref0 (false_stmt);
10384 				_vala_code_node_unref0 (true_stmt);
10385 				_vala_source_reference_unref0 (src);
10386 				_vala_code_node_unref0 (condition);
10387 				return NULL;
10388 			} else {
10389 				_vala_code_node_unref0 (false_stmt);
10390 				_vala_code_node_unref0 (true_stmt);
10391 				_vala_source_reference_unref0 (src);
10392 				_vala_code_node_unref0 (condition);
10393 				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);
10394 				g_clear_error (&_inner_error0_);
10395 				return NULL;
10396 			}
10397 		}
10398 		_tmp8_ = _tmp6_;
10399 		_tmp6_ = NULL;
10400 		_vala_code_node_unref0 (false_stmt);
10401 		false_stmt = _tmp8_;
10402 		_vala_code_node_unref0 (_tmp6_);
10403 	}
10404 	_tmp9_ = condition;
10405 	_tmp10_ = true_stmt;
10406 	_tmp11_ = false_stmt;
10407 	_tmp12_ = src;
10408 	_tmp13_ = vala_if_statement_new (_tmp9_, _tmp10_, _tmp11_, _tmp12_);
10409 	result = (ValaStatement*) _tmp13_;
10410 	_vala_code_node_unref0 (false_stmt);
10411 	_vala_code_node_unref0 (true_stmt);
10412 	_vala_source_reference_unref0 (src);
10413 	_vala_code_node_unref0 (condition);
10414 	return result;
10415 }
10416 
10417 static ValaStatement*
vala_genie_parser_parse_switch_statement(ValaGenieParser * self,GError ** error)10418 vala_genie_parser_parse_switch_statement (ValaGenieParser* self,
10419                                           GError** error)
10420 {
10421 	ValaSourceLocation begin = {0};
10422 	ValaSourceLocation _tmp0_ = {0};
10423 	ValaExpression* condition = NULL;
10424 	ValaExpression* _tmp1_;
10425 	ValaSwitchStatement* stmt = NULL;
10426 	ValaExpression* _tmp2_;
10427 	ValaSourceLocation _tmp3_;
10428 	ValaSourceReference* _tmp4_;
10429 	ValaSourceReference* _tmp5_;
10430 	ValaSwitchStatement* _tmp6_;
10431 	ValaSwitchStatement* _tmp7_;
10432 	GError* _inner_error0_ = NULL;
10433 	ValaStatement* result = NULL;
10434 	g_return_val_if_fail (self != NULL, NULL);
10435 	vala_genie_parser_get_location (self, &_tmp0_);
10436 	begin = _tmp0_;
10437 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CASE, &_inner_error0_);
10438 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10439 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10440 			g_propagate_error (error, _inner_error0_);
10441 			return NULL;
10442 		} else {
10443 			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);
10444 			g_clear_error (&_inner_error0_);
10445 			return NULL;
10446 		}
10447 	}
10448 	_tmp1_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
10449 	condition = _tmp1_;
10450 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10451 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10452 			g_propagate_error (error, _inner_error0_);
10453 			return NULL;
10454 		} else {
10455 			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);
10456 			g_clear_error (&_inner_error0_);
10457 			return NULL;
10458 		}
10459 	}
10460 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
10461 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10462 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10463 			g_propagate_error (error, _inner_error0_);
10464 			_vala_code_node_unref0 (condition);
10465 			return NULL;
10466 		} else {
10467 			_vala_code_node_unref0 (condition);
10468 			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);
10469 			g_clear_error (&_inner_error0_);
10470 			return NULL;
10471 		}
10472 	}
10473 	_tmp2_ = condition;
10474 	_tmp3_ = begin;
10475 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
10476 	_tmp5_ = _tmp4_;
10477 	_tmp6_ = vala_switch_statement_new (_tmp2_, _tmp5_);
10478 	_tmp7_ = _tmp6_;
10479 	_vala_source_reference_unref0 (_tmp5_);
10480 	stmt = _tmp7_;
10481 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INDENT, &_inner_error0_);
10482 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10483 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10484 			g_propagate_error (error, _inner_error0_);
10485 			_vala_code_node_unref0 (stmt);
10486 			_vala_code_node_unref0 (condition);
10487 			return NULL;
10488 		} else {
10489 			_vala_code_node_unref0 (stmt);
10490 			_vala_code_node_unref0 (condition);
10491 			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);
10492 			g_clear_error (&_inner_error0_);
10493 			return NULL;
10494 		}
10495 	}
10496 	while (TRUE) {
10497 		ValaSwitchSection* section = NULL;
10498 		ValaSourceLocation _tmp8_;
10499 		ValaSourceReference* _tmp9_;
10500 		ValaSourceReference* _tmp10_;
10501 		ValaSwitchSection* _tmp11_;
10502 		ValaSwitchSection* _tmp12_;
10503 		ValaSwitchSection* _tmp28_;
10504 		ValaBreakStatement* break_stmt = NULL;
10505 		ValaSourceLocation _tmp29_;
10506 		ValaSourceReference* _tmp30_;
10507 		ValaSourceReference* _tmp31_;
10508 		ValaBreakStatement* _tmp32_;
10509 		ValaBreakStatement* _tmp33_;
10510 		ValaSwitchSection* _tmp34_;
10511 		ValaBreakStatement* _tmp35_;
10512 		ValaSwitchStatement* _tmp36_;
10513 		ValaSwitchSection* _tmp37_;
10514 		if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT)) {
10515 			break;
10516 		}
10517 		_tmp8_ = begin;
10518 		_tmp9_ = vala_genie_parser_get_src (self, &_tmp8_);
10519 		_tmp10_ = _tmp9_;
10520 		_tmp11_ = vala_switch_section_new (_tmp10_);
10521 		_tmp12_ = _tmp11_;
10522 		_vala_source_reference_unref0 (_tmp10_);
10523 		section = _tmp12_;
10524 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_WHEN)) {
10525 			{
10526 				gboolean _tmp13_ = FALSE;
10527 				_tmp13_ = TRUE;
10528 				while (TRUE) {
10529 					ValaExpression* _tmp14_ = NULL;
10530 					ValaExpression* _tmp15_;
10531 					ValaSwitchSection* _tmp16_;
10532 					ValaSourceLocation _tmp17_;
10533 					ValaSourceReference* _tmp18_;
10534 					ValaSourceReference* _tmp19_;
10535 					ValaSwitchLabel* _tmp20_;
10536 					ValaSwitchLabel* _tmp21_;
10537 					if (!_tmp13_) {
10538 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
10539 							break;
10540 						}
10541 					}
10542 					_tmp13_ = FALSE;
10543 					_tmp15_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
10544 					_tmp14_ = _tmp15_;
10545 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
10546 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10547 							g_propagate_error (error, _inner_error0_);
10548 							_vala_code_node_unref0 (section);
10549 							_vala_code_node_unref0 (stmt);
10550 							_vala_code_node_unref0 (condition);
10551 							return NULL;
10552 						} else {
10553 							_vala_code_node_unref0 (section);
10554 							_vala_code_node_unref0 (stmt);
10555 							_vala_code_node_unref0 (condition);
10556 							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);
10557 							g_clear_error (&_inner_error0_);
10558 							return NULL;
10559 						}
10560 					}
10561 					_tmp16_ = section;
10562 					_tmp17_ = begin;
10563 					_tmp18_ = vala_genie_parser_get_src (self, &_tmp17_);
10564 					_tmp19_ = _tmp18_;
10565 					_tmp20_ = vala_switch_label_new (_tmp14_, _tmp19_);
10566 					_tmp21_ = _tmp20_;
10567 					vala_switch_section_add_label (_tmp16_, _tmp21_);
10568 					_vala_code_node_unref0 (_tmp21_);
10569 					_vala_source_reference_unref0 (_tmp19_);
10570 					_vala_code_node_unref0 (_tmp14_);
10571 				}
10572 			}
10573 		} else {
10574 			ValaSwitchSection* _tmp22_;
10575 			ValaSourceLocation _tmp23_;
10576 			ValaSourceReference* _tmp24_;
10577 			ValaSourceReference* _tmp25_;
10578 			ValaSwitchLabel* _tmp26_;
10579 			ValaSwitchLabel* _tmp27_;
10580 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEFAULT, &_inner_error0_);
10581 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
10582 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10583 					g_propagate_error (error, _inner_error0_);
10584 					_vala_code_node_unref0 (section);
10585 					_vala_code_node_unref0 (stmt);
10586 					_vala_code_node_unref0 (condition);
10587 					return NULL;
10588 				} else {
10589 					_vala_code_node_unref0 (section);
10590 					_vala_code_node_unref0 (stmt);
10591 					_vala_code_node_unref0 (condition);
10592 					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);
10593 					g_clear_error (&_inner_error0_);
10594 					return NULL;
10595 				}
10596 			}
10597 			_tmp22_ = section;
10598 			_tmp23_ = begin;
10599 			_tmp24_ = vala_genie_parser_get_src (self, &_tmp23_);
10600 			_tmp25_ = _tmp24_;
10601 			_tmp26_ = vala_switch_label_new_with_default (_tmp25_);
10602 			_tmp27_ = _tmp26_;
10603 			vala_switch_section_add_label (_tmp22_, _tmp27_);
10604 			_vala_code_node_unref0 (_tmp27_);
10605 			_vala_source_reference_unref0 (_tmp25_);
10606 		}
10607 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
10608 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DO, &_inner_error0_);
10609 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
10610 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10611 					g_propagate_error (error, _inner_error0_);
10612 					_vala_code_node_unref0 (section);
10613 					_vala_code_node_unref0 (stmt);
10614 					_vala_code_node_unref0 (condition);
10615 					return NULL;
10616 				} else {
10617 					_vala_code_node_unref0 (section);
10618 					_vala_code_node_unref0 (stmt);
10619 					_vala_code_node_unref0 (condition);
10620 					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);
10621 					g_clear_error (&_inner_error0_);
10622 					return NULL;
10623 				}
10624 			}
10625 		}
10626 		_tmp28_ = section;
10627 		vala_genie_parser_parse_statements (self, (ValaBlock*) _tmp28_, &_inner_error0_);
10628 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
10629 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10630 				g_propagate_error (error, _inner_error0_);
10631 				_vala_code_node_unref0 (section);
10632 				_vala_code_node_unref0 (stmt);
10633 				_vala_code_node_unref0 (condition);
10634 				return NULL;
10635 			} else {
10636 				_vala_code_node_unref0 (section);
10637 				_vala_code_node_unref0 (stmt);
10638 				_vala_code_node_unref0 (condition);
10639 				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);
10640 				g_clear_error (&_inner_error0_);
10641 				return NULL;
10642 			}
10643 		}
10644 		_tmp29_ = begin;
10645 		_tmp30_ = vala_genie_parser_get_src (self, &_tmp29_);
10646 		_tmp31_ = _tmp30_;
10647 		_tmp32_ = vala_break_statement_new (_tmp31_);
10648 		_tmp33_ = _tmp32_;
10649 		_vala_source_reference_unref0 (_tmp31_);
10650 		break_stmt = _tmp33_;
10651 		_tmp34_ = section;
10652 		_tmp35_ = break_stmt;
10653 		vala_block_add_statement ((ValaBlock*) _tmp34_, (ValaStatement*) _tmp35_);
10654 		_tmp36_ = stmt;
10655 		_tmp37_ = section;
10656 		vala_switch_statement_add_section (_tmp36_, _tmp37_);
10657 		_vala_code_node_unref0 (break_stmt);
10658 		_vala_code_node_unref0 (section);
10659 	}
10660 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
10661 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10662 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10663 			g_propagate_error (error, _inner_error0_);
10664 			_vala_code_node_unref0 (stmt);
10665 			_vala_code_node_unref0 (condition);
10666 			return NULL;
10667 		} else {
10668 			_vala_code_node_unref0 (stmt);
10669 			_vala_code_node_unref0 (condition);
10670 			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);
10671 			g_clear_error (&_inner_error0_);
10672 			return NULL;
10673 		}
10674 	}
10675 	result = (ValaStatement*) stmt;
10676 	_vala_code_node_unref0 (condition);
10677 	return result;
10678 }
10679 
10680 static ValaStatement*
vala_genie_parser_parse_while_statement(ValaGenieParser * self,GError ** error)10681 vala_genie_parser_parse_while_statement (ValaGenieParser* self,
10682                                          GError** error)
10683 {
10684 	ValaSourceLocation begin = {0};
10685 	ValaSourceLocation _tmp0_ = {0};
10686 	ValaExpression* condition = NULL;
10687 	ValaExpression* _tmp1_;
10688 	ValaBlock* body = NULL;
10689 	ValaBlock* _tmp2_;
10690 	ValaExpression* _tmp3_;
10691 	ValaBlock* _tmp4_;
10692 	ValaSourceLocation _tmp5_;
10693 	ValaSourceReference* _tmp6_;
10694 	ValaSourceReference* _tmp7_;
10695 	ValaWhileStatement* _tmp8_;
10696 	ValaStatement* _tmp9_;
10697 	GError* _inner_error0_ = NULL;
10698 	ValaStatement* result = NULL;
10699 	g_return_val_if_fail (self != NULL, NULL);
10700 	vala_genie_parser_get_location (self, &_tmp0_);
10701 	begin = _tmp0_;
10702 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_WHILE, &_inner_error0_);
10703 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10704 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10705 			g_propagate_error (error, _inner_error0_);
10706 			return NULL;
10707 		} else {
10708 			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);
10709 			g_clear_error (&_inner_error0_);
10710 			return NULL;
10711 		}
10712 	}
10713 	_tmp1_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
10714 	condition = _tmp1_;
10715 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10716 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10717 			g_propagate_error (error, _inner_error0_);
10718 			return NULL;
10719 		} else {
10720 			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);
10721 			g_clear_error (&_inner_error0_);
10722 			return NULL;
10723 		}
10724 	}
10725 	if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DO)) {
10726 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
10727 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
10728 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10729 				g_propagate_error (error, _inner_error0_);
10730 				_vala_code_node_unref0 (condition);
10731 				return NULL;
10732 			} else {
10733 				_vala_code_node_unref0 (condition);
10734 				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);
10735 				g_clear_error (&_inner_error0_);
10736 				return NULL;
10737 			}
10738 		}
10739 	} else {
10740 		vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL);
10741 	}
10742 	_tmp2_ = vala_genie_parser_parse_embedded_statement (self, &_inner_error0_);
10743 	body = _tmp2_;
10744 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10745 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10746 			g_propagate_error (error, _inner_error0_);
10747 			_vala_code_node_unref0 (condition);
10748 			return NULL;
10749 		} else {
10750 			_vala_code_node_unref0 (condition);
10751 			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);
10752 			g_clear_error (&_inner_error0_);
10753 			return NULL;
10754 		}
10755 	}
10756 	_tmp3_ = condition;
10757 	_tmp4_ = body;
10758 	_tmp5_ = begin;
10759 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
10760 	_tmp7_ = _tmp6_;
10761 	_tmp8_ = vala_while_statement_new (_tmp3_, _tmp4_, _tmp7_);
10762 	_tmp9_ = (ValaStatement*) _tmp8_;
10763 	_vala_source_reference_unref0 (_tmp7_);
10764 	result = _tmp9_;
10765 	_vala_code_node_unref0 (body);
10766 	_vala_code_node_unref0 (condition);
10767 	return result;
10768 }
10769 
10770 static ValaStatement*
vala_genie_parser_parse_do_statement(ValaGenieParser * self,GError ** error)10771 vala_genie_parser_parse_do_statement (ValaGenieParser* self,
10772                                       GError** error)
10773 {
10774 	ValaSourceLocation begin = {0};
10775 	ValaSourceLocation _tmp0_ = {0};
10776 	ValaBlock* body = NULL;
10777 	ValaBlock* _tmp1_;
10778 	ValaExpression* condition = NULL;
10779 	ValaExpression* _tmp2_;
10780 	ValaBlock* _tmp3_;
10781 	ValaExpression* _tmp4_;
10782 	ValaSourceLocation _tmp5_;
10783 	ValaSourceReference* _tmp6_;
10784 	ValaSourceReference* _tmp7_;
10785 	ValaDoStatement* _tmp8_;
10786 	ValaStatement* _tmp9_;
10787 	GError* _inner_error0_ = NULL;
10788 	ValaStatement* result = NULL;
10789 	g_return_val_if_fail (self != NULL, NULL);
10790 	vala_genie_parser_get_location (self, &_tmp0_);
10791 	begin = _tmp0_;
10792 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DO, &_inner_error0_);
10793 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10794 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10795 			g_propagate_error (error, _inner_error0_);
10796 			return NULL;
10797 		} else {
10798 			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);
10799 			g_clear_error (&_inner_error0_);
10800 			return NULL;
10801 		}
10802 	}
10803 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
10804 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10805 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10806 			g_propagate_error (error, _inner_error0_);
10807 			return NULL;
10808 		} else {
10809 			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);
10810 			g_clear_error (&_inner_error0_);
10811 			return NULL;
10812 		}
10813 	}
10814 	_tmp1_ = vala_genie_parser_parse_embedded_statement (self, &_inner_error0_);
10815 	body = _tmp1_;
10816 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10817 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10818 			g_propagate_error (error, _inner_error0_);
10819 			return NULL;
10820 		} else {
10821 			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);
10822 			g_clear_error (&_inner_error0_);
10823 			return NULL;
10824 		}
10825 	}
10826 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_WHILE, &_inner_error0_);
10827 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10828 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10829 			g_propagate_error (error, _inner_error0_);
10830 			_vala_code_node_unref0 (body);
10831 			return NULL;
10832 		} else {
10833 			_vala_code_node_unref0 (body);
10834 			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);
10835 			g_clear_error (&_inner_error0_);
10836 			return NULL;
10837 		}
10838 	}
10839 	_tmp2_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
10840 	condition = _tmp2_;
10841 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10842 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10843 			g_propagate_error (error, _inner_error0_);
10844 			_vala_code_node_unref0 (body);
10845 			return NULL;
10846 		} else {
10847 			_vala_code_node_unref0 (body);
10848 			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);
10849 			g_clear_error (&_inner_error0_);
10850 			return NULL;
10851 		}
10852 	}
10853 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
10854 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10855 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10856 			g_propagate_error (error, _inner_error0_);
10857 			_vala_code_node_unref0 (condition);
10858 			_vala_code_node_unref0 (body);
10859 			return NULL;
10860 		} else {
10861 			_vala_code_node_unref0 (condition);
10862 			_vala_code_node_unref0 (body);
10863 			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);
10864 			g_clear_error (&_inner_error0_);
10865 			return NULL;
10866 		}
10867 	}
10868 	_tmp3_ = body;
10869 	_tmp4_ = condition;
10870 	_tmp5_ = begin;
10871 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
10872 	_tmp7_ = _tmp6_;
10873 	_tmp8_ = vala_do_statement_new (_tmp3_, _tmp4_, _tmp7_);
10874 	_tmp9_ = (ValaStatement*) _tmp8_;
10875 	_vala_source_reference_unref0 (_tmp7_);
10876 	result = _tmp9_;
10877 	_vala_code_node_unref0 (condition);
10878 	_vala_code_node_unref0 (body);
10879 	return result;
10880 }
10881 
10882 static ValaStatement*
vala_genie_parser_parse_for_statement(ValaGenieParser * self,GError ** error)10883 vala_genie_parser_parse_for_statement (ValaGenieParser* self,
10884                                        GError** error)
10885 {
10886 	ValaSourceLocation begin = {0};
10887 	ValaSourceLocation _tmp0_ = {0};
10888 	ValaBlock* block = NULL;
10889 	ValaExpression* initializer = NULL;
10890 	ValaExpression* condition = NULL;
10891 	ValaExpression* iterator = NULL;
10892 	gboolean is_expr = FALSE;
10893 	gchar* id = NULL;
10894 	ValaSourceReference* src = NULL;
10895 	ValaSourceLocation _tmp63_;
10896 	ValaSourceReference* _tmp64_;
10897 	ValaBlock* body = NULL;
10898 	ValaBlock* _tmp65_;
10899 	ValaForStatement* stmt = NULL;
10900 	ValaExpression* _tmp66_;
10901 	ValaBlock* _tmp67_;
10902 	ValaSourceReference* _tmp68_;
10903 	ValaForStatement* _tmp69_;
10904 	ValaExpression* _tmp70_;
10905 	ValaForStatement* _tmp73_;
10906 	ValaExpression* _tmp74_;
10907 	ValaBlock* _tmp75_;
10908 	GError* _inner_error0_ = NULL;
10909 	ValaStatement* result = NULL;
10910 	g_return_val_if_fail (self != NULL, NULL);
10911 	vala_genie_parser_get_location (self, &_tmp0_);
10912 	begin = _tmp0_;
10913 	block = NULL;
10914 	initializer = NULL;
10915 	condition = NULL;
10916 	iterator = NULL;
10917 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_FOR, &_inner_error0_);
10918 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
10919 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10920 			g_propagate_error (error, _inner_error0_);
10921 			_g_free0 (id);
10922 			_vala_code_node_unref0 (iterator);
10923 			_vala_code_node_unref0 (condition);
10924 			_vala_code_node_unref0 (initializer);
10925 			_vala_code_node_unref0 (block);
10926 			return NULL;
10927 		} else {
10928 			_g_free0 (id);
10929 			_vala_code_node_unref0 (iterator);
10930 			_vala_code_node_unref0 (condition);
10931 			_vala_code_node_unref0 (initializer);
10932 			_vala_code_node_unref0 (block);
10933 			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);
10934 			g_clear_error (&_inner_error0_);
10935 			return NULL;
10936 		}
10937 	}
10938 	switch (vala_genie_parser_current (self)) {
10939 		case VALA_GENIE_TOKEN_TYPE_VAR:
10940 		{
10941 			is_expr = FALSE;
10942 			break;
10943 		}
10944 		default:
10945 		{
10946 			gboolean local_is_expr = FALSE;
10947 			local_is_expr = vala_genie_parser_is_expression (self, &_inner_error0_);
10948 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
10949 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10950 					g_propagate_error (error, _inner_error0_);
10951 					_g_free0 (id);
10952 					_vala_code_node_unref0 (iterator);
10953 					_vala_code_node_unref0 (condition);
10954 					_vala_code_node_unref0 (initializer);
10955 					_vala_code_node_unref0 (block);
10956 					return NULL;
10957 				} else {
10958 					_g_free0 (id);
10959 					_vala_code_node_unref0 (iterator);
10960 					_vala_code_node_unref0 (condition);
10961 					_vala_code_node_unref0 (initializer);
10962 					_vala_code_node_unref0 (block);
10963 					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);
10964 					g_clear_error (&_inner_error0_);
10965 					return NULL;
10966 				}
10967 			}
10968 			is_expr = local_is_expr;
10969 			break;
10970 		}
10971 	}
10972 	if (is_expr) {
10973 		ValaSourceLocation expr_begin = {0};
10974 		ValaSourceLocation _tmp1_ = {0};
10975 		gchar* _tmp2_ = NULL;
10976 		gchar* _tmp3_;
10977 		gchar* _tmp4_;
10978 		ValaSourceLocation _tmp5_;
10979 		ValaExpression* _tmp6_ = NULL;
10980 		ValaExpression* _tmp7_;
10981 		ValaExpression* _tmp8_;
10982 		vala_genie_parser_get_location (self, &_tmp1_);
10983 		expr_begin = _tmp1_;
10984 		_tmp3_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
10985 		_tmp2_ = _tmp3_;
10986 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
10987 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
10988 				g_propagate_error (error, _inner_error0_);
10989 				_g_free0 (id);
10990 				_vala_code_node_unref0 (iterator);
10991 				_vala_code_node_unref0 (condition);
10992 				_vala_code_node_unref0 (initializer);
10993 				_vala_code_node_unref0 (block);
10994 				return NULL;
10995 			} else {
10996 				_g_free0 (id);
10997 				_vala_code_node_unref0 (iterator);
10998 				_vala_code_node_unref0 (condition);
10999 				_vala_code_node_unref0 (initializer);
11000 				_vala_code_node_unref0 (block);
11001 				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);
11002 				g_clear_error (&_inner_error0_);
11003 				return NULL;
11004 			}
11005 		}
11006 		_tmp4_ = _tmp2_;
11007 		_tmp2_ = NULL;
11008 		_g_free0 (id);
11009 		id = _tmp4_;
11010 		_tmp5_ = expr_begin;
11011 		vala_genie_parser_rollback (self, &_tmp5_);
11012 		_tmp7_ = vala_genie_parser_parse_statement_expression (self, &_inner_error0_);
11013 		_tmp6_ = _tmp7_;
11014 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11015 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11016 				g_propagate_error (error, _inner_error0_);
11017 				_g_free0 (_tmp2_);
11018 				_g_free0 (id);
11019 				_vala_code_node_unref0 (iterator);
11020 				_vala_code_node_unref0 (condition);
11021 				_vala_code_node_unref0 (initializer);
11022 				_vala_code_node_unref0 (block);
11023 				return NULL;
11024 			} else {
11025 				_g_free0 (_tmp2_);
11026 				_g_free0 (id);
11027 				_vala_code_node_unref0 (iterator);
11028 				_vala_code_node_unref0 (condition);
11029 				_vala_code_node_unref0 (initializer);
11030 				_vala_code_node_unref0 (block);
11031 				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);
11032 				g_clear_error (&_inner_error0_);
11033 				return NULL;
11034 			}
11035 		}
11036 		_tmp8_ = _tmp6_;
11037 		_tmp6_ = NULL;
11038 		_vala_code_node_unref0 (initializer);
11039 		initializer = _tmp8_;
11040 		_vala_code_node_unref0 (_tmp6_);
11041 		_g_free0 (_tmp2_);
11042 	} else {
11043 		ValaSourceLocation _tmp9_;
11044 		ValaSourceReference* _tmp10_;
11045 		ValaSourceReference* _tmp11_;
11046 		ValaBlock* _tmp12_;
11047 		ValaDataType* variable_type = NULL;
11048 		ValaDataType* type_copy = NULL;
11049 		ValaDataType* _tmp22_;
11050 		ValaLocalVariable* local = NULL;
11051 		ValaDataType* _tmp25_;
11052 		const gchar* _tmp26_;
11053 		ValaLocalVariable* _tmp27_;
11054 		ValaBlock* _tmp28_;
11055 		ValaLocalVariable* _tmp29_;
11056 		ValaLocalVariable* _tmp30_;
11057 		ValaSourceReference* _tmp31_;
11058 		ValaSourceReference* _tmp32_;
11059 		ValaDeclarationStatement* _tmp33_;
11060 		ValaDeclarationStatement* _tmp34_;
11061 		_tmp9_ = begin;
11062 		_tmp10_ = vala_genie_parser_get_src (self, &_tmp9_);
11063 		_tmp11_ = _tmp10_;
11064 		_tmp12_ = vala_block_new (_tmp11_);
11065 		_vala_code_node_unref0 (block);
11066 		block = _tmp12_;
11067 		_vala_source_reference_unref0 (_tmp11_);
11068 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_VAR)) {
11069 			gchar* _tmp13_ = NULL;
11070 			gchar* _tmp14_;
11071 			gchar* _tmp15_;
11072 			_vala_code_node_unref0 (variable_type);
11073 			variable_type = NULL;
11074 			_tmp14_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
11075 			_tmp13_ = _tmp14_;
11076 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
11077 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11078 					g_propagate_error (error, _inner_error0_);
11079 					_vala_code_node_unref0 (variable_type);
11080 					_g_free0 (id);
11081 					_vala_code_node_unref0 (iterator);
11082 					_vala_code_node_unref0 (condition);
11083 					_vala_code_node_unref0 (initializer);
11084 					_vala_code_node_unref0 (block);
11085 					return NULL;
11086 				} else {
11087 					_vala_code_node_unref0 (variable_type);
11088 					_g_free0 (id);
11089 					_vala_code_node_unref0 (iterator);
11090 					_vala_code_node_unref0 (condition);
11091 					_vala_code_node_unref0 (initializer);
11092 					_vala_code_node_unref0 (block);
11093 					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);
11094 					g_clear_error (&_inner_error0_);
11095 					return NULL;
11096 				}
11097 			}
11098 			_tmp15_ = _tmp13_;
11099 			_tmp13_ = NULL;
11100 			_g_free0 (id);
11101 			id = _tmp15_;
11102 			_g_free0 (_tmp13_);
11103 		} else {
11104 			gchar* _tmp16_ = NULL;
11105 			gchar* _tmp17_;
11106 			gchar* _tmp18_;
11107 			ValaDataType* _tmp19_ = NULL;
11108 			ValaDataType* _tmp20_;
11109 			ValaDataType* _tmp21_;
11110 			_tmp17_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
11111 			_tmp16_ = _tmp17_;
11112 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
11113 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11114 					g_propagate_error (error, _inner_error0_);
11115 					_vala_code_node_unref0 (variable_type);
11116 					_g_free0 (id);
11117 					_vala_code_node_unref0 (iterator);
11118 					_vala_code_node_unref0 (condition);
11119 					_vala_code_node_unref0 (initializer);
11120 					_vala_code_node_unref0 (block);
11121 					return NULL;
11122 				} else {
11123 					_vala_code_node_unref0 (variable_type);
11124 					_g_free0 (id);
11125 					_vala_code_node_unref0 (iterator);
11126 					_vala_code_node_unref0 (condition);
11127 					_vala_code_node_unref0 (initializer);
11128 					_vala_code_node_unref0 (block);
11129 					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);
11130 					g_clear_error (&_inner_error0_);
11131 					return NULL;
11132 				}
11133 			}
11134 			_tmp18_ = _tmp16_;
11135 			_tmp16_ = NULL;
11136 			_g_free0 (id);
11137 			id = _tmp18_;
11138 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
11139 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
11140 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11141 					g_propagate_error (error, _inner_error0_);
11142 					_g_free0 (_tmp16_);
11143 					_vala_code_node_unref0 (variable_type);
11144 					_g_free0 (id);
11145 					_vala_code_node_unref0 (iterator);
11146 					_vala_code_node_unref0 (condition);
11147 					_vala_code_node_unref0 (initializer);
11148 					_vala_code_node_unref0 (block);
11149 					return NULL;
11150 				} else {
11151 					_g_free0 (_tmp16_);
11152 					_vala_code_node_unref0 (variable_type);
11153 					_g_free0 (id);
11154 					_vala_code_node_unref0 (iterator);
11155 					_vala_code_node_unref0 (condition);
11156 					_vala_code_node_unref0 (initializer);
11157 					_vala_code_node_unref0 (block);
11158 					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);
11159 					g_clear_error (&_inner_error0_);
11160 					return NULL;
11161 				}
11162 			}
11163 			_tmp20_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
11164 			_tmp19_ = _tmp20_;
11165 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
11166 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11167 					g_propagate_error (error, _inner_error0_);
11168 					_g_free0 (_tmp16_);
11169 					_vala_code_node_unref0 (variable_type);
11170 					_g_free0 (id);
11171 					_vala_code_node_unref0 (iterator);
11172 					_vala_code_node_unref0 (condition);
11173 					_vala_code_node_unref0 (initializer);
11174 					_vala_code_node_unref0 (block);
11175 					return NULL;
11176 				} else {
11177 					_g_free0 (_tmp16_);
11178 					_vala_code_node_unref0 (variable_type);
11179 					_g_free0 (id);
11180 					_vala_code_node_unref0 (iterator);
11181 					_vala_code_node_unref0 (condition);
11182 					_vala_code_node_unref0 (initializer);
11183 					_vala_code_node_unref0 (block);
11184 					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);
11185 					g_clear_error (&_inner_error0_);
11186 					return NULL;
11187 				}
11188 			}
11189 			_tmp21_ = _tmp19_;
11190 			_tmp19_ = NULL;
11191 			_vala_code_node_unref0 (variable_type);
11192 			variable_type = _tmp21_;
11193 			_vala_code_node_unref0 (_tmp19_);
11194 			_g_free0 (_tmp16_);
11195 		}
11196 		type_copy = NULL;
11197 		_tmp22_ = variable_type;
11198 		if (_tmp22_ != NULL) {
11199 			ValaDataType* _tmp23_;
11200 			ValaDataType* _tmp24_;
11201 			_tmp23_ = variable_type;
11202 			_tmp24_ = vala_data_type_copy (_tmp23_);
11203 			_vala_code_node_unref0 (type_copy);
11204 			type_copy = _tmp24_;
11205 		}
11206 		_tmp25_ = type_copy;
11207 		_tmp26_ = id;
11208 		_tmp27_ = vala_genie_parser_parse_local_variable (self, _tmp25_, _tmp26_, FALSE, &_inner_error0_);
11209 		local = _tmp27_;
11210 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11211 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11212 				g_propagate_error (error, _inner_error0_);
11213 				_vala_code_node_unref0 (type_copy);
11214 				_vala_code_node_unref0 (variable_type);
11215 				_g_free0 (id);
11216 				_vala_code_node_unref0 (iterator);
11217 				_vala_code_node_unref0 (condition);
11218 				_vala_code_node_unref0 (initializer);
11219 				_vala_code_node_unref0 (block);
11220 				return NULL;
11221 			} else {
11222 				_vala_code_node_unref0 (type_copy);
11223 				_vala_code_node_unref0 (variable_type);
11224 				_g_free0 (id);
11225 				_vala_code_node_unref0 (iterator);
11226 				_vala_code_node_unref0 (condition);
11227 				_vala_code_node_unref0 (initializer);
11228 				_vala_code_node_unref0 (block);
11229 				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);
11230 				g_clear_error (&_inner_error0_);
11231 				return NULL;
11232 			}
11233 		}
11234 		_tmp28_ = block;
11235 		_tmp29_ = local;
11236 		_tmp30_ = local;
11237 		_tmp31_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp30_);
11238 		_tmp32_ = _tmp31_;
11239 		_tmp33_ = vala_declaration_statement_new ((ValaSymbol*) _tmp29_, _tmp32_);
11240 		_tmp34_ = _tmp33_;
11241 		vala_block_add_statement (_tmp28_, (ValaStatement*) _tmp34_);
11242 		_vala_code_node_unref0 (_tmp34_);
11243 		_vala_code_node_unref0 (local);
11244 		_vala_code_node_unref0 (type_copy);
11245 		_vala_code_node_unref0 (variable_type);
11246 	}
11247 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_TO)) {
11248 		ValaSourceLocation to_begin = {0};
11249 		ValaSourceLocation _tmp35_ = {0};
11250 		ValaSourceReference* to_src = NULL;
11251 		ValaSourceLocation _tmp36_;
11252 		ValaSourceReference* _tmp37_;
11253 		ValaMemberAccess* left = NULL;
11254 		const gchar* _tmp38_;
11255 		ValaSourceReference* _tmp39_;
11256 		ValaMemberAccess* _tmp40_;
11257 		ValaExpression* right = NULL;
11258 		ValaExpression* _tmp41_;
11259 		ValaMemberAccess* _tmp42_;
11260 		ValaExpression* _tmp43_;
11261 		ValaSourceReference* _tmp44_;
11262 		ValaBinaryExpression* _tmp45_;
11263 		ValaMemberAccess* _tmp46_;
11264 		ValaSourceReference* _tmp47_;
11265 		ValaPostfixExpression* _tmp48_;
11266 		vala_genie_parser_get_location (self, &_tmp35_);
11267 		to_begin = _tmp35_;
11268 		_tmp36_ = to_begin;
11269 		_tmp37_ = vala_genie_parser_get_src (self, &_tmp36_);
11270 		to_src = _tmp37_;
11271 		_tmp38_ = id;
11272 		_tmp39_ = to_src;
11273 		_tmp40_ = vala_member_access_new (NULL, _tmp38_, _tmp39_);
11274 		left = _tmp40_;
11275 		_tmp41_ = vala_genie_parser_parse_primary_expression (self, &_inner_error0_);
11276 		right = _tmp41_;
11277 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11278 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11279 				g_propagate_error (error, _inner_error0_);
11280 				_vala_code_node_unref0 (left);
11281 				_vala_source_reference_unref0 (to_src);
11282 				_g_free0 (id);
11283 				_vala_code_node_unref0 (iterator);
11284 				_vala_code_node_unref0 (condition);
11285 				_vala_code_node_unref0 (initializer);
11286 				_vala_code_node_unref0 (block);
11287 				return NULL;
11288 			} else {
11289 				_vala_code_node_unref0 (left);
11290 				_vala_source_reference_unref0 (to_src);
11291 				_g_free0 (id);
11292 				_vala_code_node_unref0 (iterator);
11293 				_vala_code_node_unref0 (condition);
11294 				_vala_code_node_unref0 (initializer);
11295 				_vala_code_node_unref0 (block);
11296 				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);
11297 				g_clear_error (&_inner_error0_);
11298 				return NULL;
11299 			}
11300 		}
11301 		_tmp42_ = left;
11302 		_tmp43_ = right;
11303 		_tmp44_ = to_src;
11304 		_tmp45_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL, (ValaExpression*) _tmp42_, _tmp43_, _tmp44_);
11305 		_vala_code_node_unref0 (condition);
11306 		condition = (ValaExpression*) _tmp45_;
11307 		_tmp46_ = left;
11308 		_tmp47_ = to_src;
11309 		_tmp48_ = vala_postfix_expression_new ((ValaExpression*) _tmp46_, TRUE, _tmp47_);
11310 		_vala_code_node_unref0 (iterator);
11311 		iterator = (ValaExpression*) _tmp48_;
11312 		_vala_code_node_unref0 (right);
11313 		_vala_code_node_unref0 (left);
11314 		_vala_source_reference_unref0 (to_src);
11315 	} else {
11316 		ValaSourceLocation downto_begin = {0};
11317 		ValaSourceLocation _tmp49_ = {0};
11318 		ValaSourceReference* downto_src = NULL;
11319 		ValaSourceLocation _tmp50_;
11320 		ValaSourceReference* _tmp51_;
11321 		ValaMemberAccess* left = NULL;
11322 		const gchar* _tmp52_;
11323 		ValaSourceReference* _tmp53_;
11324 		ValaMemberAccess* _tmp54_;
11325 		ValaExpression* right = NULL;
11326 		ValaExpression* _tmp55_;
11327 		ValaMemberAccess* _tmp56_;
11328 		ValaExpression* _tmp57_;
11329 		ValaSourceReference* _tmp58_;
11330 		ValaBinaryExpression* _tmp59_;
11331 		ValaMemberAccess* _tmp60_;
11332 		ValaSourceReference* _tmp61_;
11333 		ValaPostfixExpression* _tmp62_;
11334 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DOWNTO, &_inner_error0_);
11335 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11336 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11337 				g_propagate_error (error, _inner_error0_);
11338 				_g_free0 (id);
11339 				_vala_code_node_unref0 (iterator);
11340 				_vala_code_node_unref0 (condition);
11341 				_vala_code_node_unref0 (initializer);
11342 				_vala_code_node_unref0 (block);
11343 				return NULL;
11344 			} else {
11345 				_g_free0 (id);
11346 				_vala_code_node_unref0 (iterator);
11347 				_vala_code_node_unref0 (condition);
11348 				_vala_code_node_unref0 (initializer);
11349 				_vala_code_node_unref0 (block);
11350 				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);
11351 				g_clear_error (&_inner_error0_);
11352 				return NULL;
11353 			}
11354 		}
11355 		vala_genie_parser_get_location (self, &_tmp49_);
11356 		downto_begin = _tmp49_;
11357 		_tmp50_ = downto_begin;
11358 		_tmp51_ = vala_genie_parser_get_src (self, &_tmp50_);
11359 		downto_src = _tmp51_;
11360 		_tmp52_ = id;
11361 		_tmp53_ = downto_src;
11362 		_tmp54_ = vala_member_access_new (NULL, _tmp52_, _tmp53_);
11363 		left = _tmp54_;
11364 		_tmp55_ = vala_genie_parser_parse_primary_expression (self, &_inner_error0_);
11365 		right = _tmp55_;
11366 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11367 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11368 				g_propagate_error (error, _inner_error0_);
11369 				_vala_code_node_unref0 (left);
11370 				_vala_source_reference_unref0 (downto_src);
11371 				_g_free0 (id);
11372 				_vala_code_node_unref0 (iterator);
11373 				_vala_code_node_unref0 (condition);
11374 				_vala_code_node_unref0 (initializer);
11375 				_vala_code_node_unref0 (block);
11376 				return NULL;
11377 			} else {
11378 				_vala_code_node_unref0 (left);
11379 				_vala_source_reference_unref0 (downto_src);
11380 				_g_free0 (id);
11381 				_vala_code_node_unref0 (iterator);
11382 				_vala_code_node_unref0 (condition);
11383 				_vala_code_node_unref0 (initializer);
11384 				_vala_code_node_unref0 (block);
11385 				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);
11386 				g_clear_error (&_inner_error0_);
11387 				return NULL;
11388 			}
11389 		}
11390 		_tmp56_ = left;
11391 		_tmp57_ = right;
11392 		_tmp58_ = downto_src;
11393 		_tmp59_ = vala_binary_expression_new (VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL, (ValaExpression*) _tmp56_, _tmp57_, _tmp58_);
11394 		_vala_code_node_unref0 (condition);
11395 		condition = (ValaExpression*) _tmp59_;
11396 		_tmp60_ = left;
11397 		_tmp61_ = downto_src;
11398 		_tmp62_ = vala_postfix_expression_new ((ValaExpression*) _tmp60_, FALSE, _tmp61_);
11399 		_vala_code_node_unref0 (iterator);
11400 		iterator = (ValaExpression*) _tmp62_;
11401 		_vala_code_node_unref0 (right);
11402 		_vala_code_node_unref0 (left);
11403 		_vala_source_reference_unref0 (downto_src);
11404 	}
11405 	if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
11406 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DO, &_inner_error0_);
11407 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11408 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11409 				g_propagate_error (error, _inner_error0_);
11410 				_g_free0 (id);
11411 				_vala_code_node_unref0 (iterator);
11412 				_vala_code_node_unref0 (condition);
11413 				_vala_code_node_unref0 (initializer);
11414 				_vala_code_node_unref0 (block);
11415 				return NULL;
11416 			} else {
11417 				_g_free0 (id);
11418 				_vala_code_node_unref0 (iterator);
11419 				_vala_code_node_unref0 (condition);
11420 				_vala_code_node_unref0 (initializer);
11421 				_vala_code_node_unref0 (block);
11422 				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);
11423 				g_clear_error (&_inner_error0_);
11424 				return NULL;
11425 			}
11426 		}
11427 	}
11428 	_tmp63_ = begin;
11429 	_tmp64_ = vala_genie_parser_get_src (self, &_tmp63_);
11430 	src = _tmp64_;
11431 	_tmp65_ = vala_genie_parser_parse_embedded_statement (self, &_inner_error0_);
11432 	body = _tmp65_;
11433 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11434 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11435 			g_propagate_error (error, _inner_error0_);
11436 			_vala_source_reference_unref0 (src);
11437 			_g_free0 (id);
11438 			_vala_code_node_unref0 (iterator);
11439 			_vala_code_node_unref0 (condition);
11440 			_vala_code_node_unref0 (initializer);
11441 			_vala_code_node_unref0 (block);
11442 			return NULL;
11443 		} else {
11444 			_vala_source_reference_unref0 (src);
11445 			_g_free0 (id);
11446 			_vala_code_node_unref0 (iterator);
11447 			_vala_code_node_unref0 (condition);
11448 			_vala_code_node_unref0 (initializer);
11449 			_vala_code_node_unref0 (block);
11450 			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);
11451 			g_clear_error (&_inner_error0_);
11452 			return NULL;
11453 		}
11454 	}
11455 	_tmp66_ = condition;
11456 	_tmp67_ = body;
11457 	_tmp68_ = src;
11458 	_tmp69_ = vala_for_statement_new (_tmp66_, _tmp67_, _tmp68_);
11459 	stmt = _tmp69_;
11460 	_tmp70_ = initializer;
11461 	if (_tmp70_ != NULL) {
11462 		ValaForStatement* _tmp71_;
11463 		ValaExpression* _tmp72_;
11464 		_tmp71_ = stmt;
11465 		_tmp72_ = initializer;
11466 		vala_for_statement_add_initializer (_tmp71_, _tmp72_);
11467 	}
11468 	_tmp73_ = stmt;
11469 	_tmp74_ = iterator;
11470 	vala_for_statement_add_iterator (_tmp73_, _tmp74_);
11471 	_tmp75_ = block;
11472 	if (_tmp75_ != NULL) {
11473 		ValaBlock* _tmp76_;
11474 		ValaForStatement* _tmp77_;
11475 		_tmp76_ = block;
11476 		_tmp77_ = stmt;
11477 		vala_block_add_statement (_tmp76_, (ValaStatement*) _tmp77_);
11478 		result = (ValaStatement*) block;
11479 		_vala_code_node_unref0 (stmt);
11480 		_vala_code_node_unref0 (body);
11481 		_vala_source_reference_unref0 (src);
11482 		_g_free0 (id);
11483 		_vala_code_node_unref0 (iterator);
11484 		_vala_code_node_unref0 (condition);
11485 		_vala_code_node_unref0 (initializer);
11486 		return result;
11487 	} else {
11488 		result = (ValaStatement*) stmt;
11489 		_vala_code_node_unref0 (body);
11490 		_vala_source_reference_unref0 (src);
11491 		_g_free0 (id);
11492 		_vala_code_node_unref0 (iterator);
11493 		_vala_code_node_unref0 (condition);
11494 		_vala_code_node_unref0 (initializer);
11495 		_vala_code_node_unref0 (block);
11496 		return result;
11497 	}
11498 	_vala_code_node_unref0 (stmt);
11499 	_vala_code_node_unref0 (body);
11500 	_vala_source_reference_unref0 (src);
11501 	_g_free0 (id);
11502 	_vala_code_node_unref0 (iterator);
11503 	_vala_code_node_unref0 (condition);
11504 	_vala_code_node_unref0 (initializer);
11505 	_vala_code_node_unref0 (block);
11506 }
11507 
11508 static ValaStatement*
vala_genie_parser_parse_foreach_statement(ValaGenieParser * self,GError ** error)11509 vala_genie_parser_parse_foreach_statement (ValaGenieParser* self,
11510                                            GError** error)
11511 {
11512 	ValaSourceLocation begin = {0};
11513 	ValaSourceLocation _tmp0_ = {0};
11514 	ValaDataType* type = NULL;
11515 	gchar* id = NULL;
11516 	ValaExpression* collection = NULL;
11517 	ValaExpression* _tmp10_;
11518 	ValaSourceReference* src = NULL;
11519 	ValaSourceLocation _tmp11_;
11520 	ValaSourceReference* _tmp12_;
11521 	ValaBlock* body = NULL;
11522 	ValaBlock* _tmp13_;
11523 	ValaDataType* _tmp14_;
11524 	const gchar* _tmp15_;
11525 	ValaExpression* _tmp16_;
11526 	ValaBlock* _tmp17_;
11527 	ValaSourceReference* _tmp18_;
11528 	ValaForeachStatement* _tmp19_;
11529 	GError* _inner_error0_ = NULL;
11530 	ValaStatement* result = NULL;
11531 	g_return_val_if_fail (self != NULL, NULL);
11532 	vala_genie_parser_get_location (self, &_tmp0_);
11533 	begin = _tmp0_;
11534 	type = NULL;
11535 	id = NULL;
11536 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_FOR, &_inner_error0_);
11537 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11538 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11539 			g_propagate_error (error, _inner_error0_);
11540 			_g_free0 (id);
11541 			_vala_code_node_unref0 (type);
11542 			return NULL;
11543 		} else {
11544 			_g_free0 (id);
11545 			_vala_code_node_unref0 (type);
11546 			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);
11547 			g_clear_error (&_inner_error0_);
11548 			return NULL;
11549 		}
11550 	}
11551 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_VAR)) {
11552 		gchar* _tmp1_ = NULL;
11553 		gchar* _tmp2_;
11554 		gchar* _tmp3_;
11555 		_tmp2_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
11556 		_tmp1_ = _tmp2_;
11557 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11558 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11559 				g_propagate_error (error, _inner_error0_);
11560 				_g_free0 (id);
11561 				_vala_code_node_unref0 (type);
11562 				return NULL;
11563 			} else {
11564 				_g_free0 (id);
11565 				_vala_code_node_unref0 (type);
11566 				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);
11567 				g_clear_error (&_inner_error0_);
11568 				return NULL;
11569 			}
11570 		}
11571 		_tmp3_ = _tmp1_;
11572 		_tmp1_ = NULL;
11573 		_g_free0 (id);
11574 		id = _tmp3_;
11575 		_g_free0 (_tmp1_);
11576 	} else {
11577 		gchar* _tmp4_ = NULL;
11578 		gchar* _tmp5_;
11579 		gchar* _tmp6_;
11580 		_tmp5_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
11581 		_tmp4_ = _tmp5_;
11582 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11583 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11584 				g_propagate_error (error, _inner_error0_);
11585 				_g_free0 (id);
11586 				_vala_code_node_unref0 (type);
11587 				return NULL;
11588 			} else {
11589 				_g_free0 (id);
11590 				_vala_code_node_unref0 (type);
11591 				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);
11592 				g_clear_error (&_inner_error0_);
11593 				return NULL;
11594 			}
11595 		}
11596 		_tmp6_ = _tmp4_;
11597 		_tmp4_ = NULL;
11598 		_g_free0 (id);
11599 		id = _tmp6_;
11600 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
11601 			ValaDataType* _tmp7_ = NULL;
11602 			ValaDataType* _tmp8_;
11603 			ValaDataType* _tmp9_;
11604 			_tmp8_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
11605 			_tmp7_ = _tmp8_;
11606 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
11607 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11608 					g_propagate_error (error, _inner_error0_);
11609 					_g_free0 (_tmp4_);
11610 					_g_free0 (id);
11611 					_vala_code_node_unref0 (type);
11612 					return NULL;
11613 				} else {
11614 					_g_free0 (_tmp4_);
11615 					_g_free0 (id);
11616 					_vala_code_node_unref0 (type);
11617 					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);
11618 					g_clear_error (&_inner_error0_);
11619 					return NULL;
11620 				}
11621 			}
11622 			_tmp9_ = _tmp7_;
11623 			_tmp7_ = NULL;
11624 			_vala_code_node_unref0 (type);
11625 			type = _tmp9_;
11626 			_vala_code_node_unref0 (_tmp7_);
11627 		}
11628 		_g_free0 (_tmp4_);
11629 	}
11630 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_IN, &_inner_error0_);
11631 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11632 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11633 			g_propagate_error (error, _inner_error0_);
11634 			_g_free0 (id);
11635 			_vala_code_node_unref0 (type);
11636 			return NULL;
11637 		} else {
11638 			_g_free0 (id);
11639 			_vala_code_node_unref0 (type);
11640 			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);
11641 			g_clear_error (&_inner_error0_);
11642 			return NULL;
11643 		}
11644 	}
11645 	_tmp10_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
11646 	collection = _tmp10_;
11647 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11648 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11649 			g_propagate_error (error, _inner_error0_);
11650 			_g_free0 (id);
11651 			_vala_code_node_unref0 (type);
11652 			return NULL;
11653 		} else {
11654 			_g_free0 (id);
11655 			_vala_code_node_unref0 (type);
11656 			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);
11657 			g_clear_error (&_inner_error0_);
11658 			return NULL;
11659 		}
11660 	}
11661 	if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
11662 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DO, &_inner_error0_);
11663 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11664 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11665 				g_propagate_error (error, _inner_error0_);
11666 				_vala_code_node_unref0 (collection);
11667 				_g_free0 (id);
11668 				_vala_code_node_unref0 (type);
11669 				return NULL;
11670 			} else {
11671 				_vala_code_node_unref0 (collection);
11672 				_g_free0 (id);
11673 				_vala_code_node_unref0 (type);
11674 				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);
11675 				g_clear_error (&_inner_error0_);
11676 				return NULL;
11677 			}
11678 		}
11679 	}
11680 	_tmp11_ = begin;
11681 	_tmp12_ = vala_genie_parser_get_src (self, &_tmp11_);
11682 	src = _tmp12_;
11683 	_tmp13_ = vala_genie_parser_parse_embedded_statement (self, &_inner_error0_);
11684 	body = _tmp13_;
11685 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11686 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11687 			g_propagate_error (error, _inner_error0_);
11688 			_vala_source_reference_unref0 (src);
11689 			_vala_code_node_unref0 (collection);
11690 			_g_free0 (id);
11691 			_vala_code_node_unref0 (type);
11692 			return NULL;
11693 		} else {
11694 			_vala_source_reference_unref0 (src);
11695 			_vala_code_node_unref0 (collection);
11696 			_g_free0 (id);
11697 			_vala_code_node_unref0 (type);
11698 			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);
11699 			g_clear_error (&_inner_error0_);
11700 			return NULL;
11701 		}
11702 	}
11703 	_tmp14_ = type;
11704 	_tmp15_ = id;
11705 	_tmp16_ = collection;
11706 	_tmp17_ = body;
11707 	_tmp18_ = src;
11708 	_tmp19_ = vala_foreach_statement_new (_tmp14_, _tmp15_, _tmp16_, _tmp17_, _tmp18_);
11709 	result = (ValaStatement*) _tmp19_;
11710 	_vala_code_node_unref0 (body);
11711 	_vala_source_reference_unref0 (src);
11712 	_vala_code_node_unref0 (collection);
11713 	_g_free0 (id);
11714 	_vala_code_node_unref0 (type);
11715 	return result;
11716 }
11717 
11718 static ValaStatement*
vala_genie_parser_parse_break_statement(ValaGenieParser * self,GError ** error)11719 vala_genie_parser_parse_break_statement (ValaGenieParser* self,
11720                                          GError** error)
11721 {
11722 	ValaSourceLocation begin = {0};
11723 	ValaSourceLocation _tmp0_ = {0};
11724 	ValaSourceLocation _tmp1_;
11725 	ValaSourceReference* _tmp2_;
11726 	ValaSourceReference* _tmp3_;
11727 	ValaBreakStatement* _tmp4_;
11728 	ValaStatement* _tmp5_;
11729 	GError* _inner_error0_ = NULL;
11730 	ValaStatement* result = NULL;
11731 	g_return_val_if_fail (self != NULL, NULL);
11732 	vala_genie_parser_get_location (self, &_tmp0_);
11733 	begin = _tmp0_;
11734 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_BREAK, &_inner_error0_);
11735 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11736 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11737 			g_propagate_error (error, _inner_error0_);
11738 			return NULL;
11739 		} else {
11740 			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);
11741 			g_clear_error (&_inner_error0_);
11742 			return NULL;
11743 		}
11744 	}
11745 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
11746 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11747 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11748 			g_propagate_error (error, _inner_error0_);
11749 			return NULL;
11750 		} else {
11751 			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);
11752 			g_clear_error (&_inner_error0_);
11753 			return NULL;
11754 		}
11755 	}
11756 	_tmp1_ = begin;
11757 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
11758 	_tmp3_ = _tmp2_;
11759 	_tmp4_ = vala_break_statement_new (_tmp3_);
11760 	_tmp5_ = (ValaStatement*) _tmp4_;
11761 	_vala_source_reference_unref0 (_tmp3_);
11762 	result = _tmp5_;
11763 	return result;
11764 }
11765 
11766 static ValaStatement*
vala_genie_parser_parse_continue_statement(ValaGenieParser * self,GError ** error)11767 vala_genie_parser_parse_continue_statement (ValaGenieParser* self,
11768                                             GError** error)
11769 {
11770 	ValaSourceLocation begin = {0};
11771 	ValaSourceLocation _tmp0_ = {0};
11772 	ValaSourceLocation _tmp1_;
11773 	ValaSourceReference* _tmp2_;
11774 	ValaSourceReference* _tmp3_;
11775 	ValaContinueStatement* _tmp4_;
11776 	ValaStatement* _tmp5_;
11777 	GError* _inner_error0_ = NULL;
11778 	ValaStatement* result = NULL;
11779 	g_return_val_if_fail (self != NULL, NULL);
11780 	vala_genie_parser_get_location (self, &_tmp0_);
11781 	begin = _tmp0_;
11782 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CONTINUE, &_inner_error0_);
11783 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11784 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11785 			g_propagate_error (error, _inner_error0_);
11786 			return NULL;
11787 		} else {
11788 			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);
11789 			g_clear_error (&_inner_error0_);
11790 			return NULL;
11791 		}
11792 	}
11793 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
11794 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11795 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11796 			g_propagate_error (error, _inner_error0_);
11797 			return NULL;
11798 		} else {
11799 			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);
11800 			g_clear_error (&_inner_error0_);
11801 			return NULL;
11802 		}
11803 	}
11804 	_tmp1_ = begin;
11805 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
11806 	_tmp3_ = _tmp2_;
11807 	_tmp4_ = vala_continue_statement_new (_tmp3_);
11808 	_tmp5_ = (ValaStatement*) _tmp4_;
11809 	_vala_source_reference_unref0 (_tmp3_);
11810 	result = _tmp5_;
11811 	return result;
11812 }
11813 
11814 static ValaStatement*
vala_genie_parser_parse_return_statement(ValaGenieParser * self,GError ** error)11815 vala_genie_parser_parse_return_statement (ValaGenieParser* self,
11816                                           GError** error)
11817 {
11818 	ValaSourceLocation begin = {0};
11819 	ValaSourceLocation _tmp0_ = {0};
11820 	ValaExpression* expr = NULL;
11821 	gboolean _tmp1_ = FALSE;
11822 	ValaExpression* _tmp5_;
11823 	ValaSourceLocation _tmp6_;
11824 	ValaSourceReference* _tmp7_;
11825 	ValaSourceReference* _tmp8_;
11826 	ValaReturnStatement* _tmp9_;
11827 	ValaStatement* _tmp10_;
11828 	GError* _inner_error0_ = NULL;
11829 	ValaStatement* result = NULL;
11830 	g_return_val_if_fail (self != NULL, NULL);
11831 	vala_genie_parser_get_location (self, &_tmp0_);
11832 	begin = _tmp0_;
11833 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_RETURN, &_inner_error0_);
11834 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11835 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11836 			g_propagate_error (error, _inner_error0_);
11837 			return NULL;
11838 		} else {
11839 			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);
11840 			g_clear_error (&_inner_error0_);
11841 			return NULL;
11842 		}
11843 	}
11844 	expr = NULL;
11845 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_SEMICOLON) {
11846 		_tmp1_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOL;
11847 	} else {
11848 		_tmp1_ = FALSE;
11849 	}
11850 	if (_tmp1_) {
11851 		ValaExpression* _tmp2_ = NULL;
11852 		ValaExpression* _tmp3_;
11853 		ValaExpression* _tmp4_;
11854 		_tmp3_ = vala_genie_parser_parse_expression_with_terminator (self, &_inner_error0_);
11855 		_tmp2_ = _tmp3_;
11856 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11857 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11858 				g_propagate_error (error, _inner_error0_);
11859 				_vala_code_node_unref0 (expr);
11860 				return NULL;
11861 			} else {
11862 				_vala_code_node_unref0 (expr);
11863 				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);
11864 				g_clear_error (&_inner_error0_);
11865 				return NULL;
11866 			}
11867 		}
11868 		_tmp4_ = _tmp2_;
11869 		_tmp2_ = NULL;
11870 		_vala_code_node_unref0 (expr);
11871 		expr = _tmp4_;
11872 		_vala_code_node_unref0 (_tmp2_);
11873 	} else {
11874 		vala_genie_parser_expect_terminator (self, &_inner_error0_);
11875 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11876 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11877 				g_propagate_error (error, _inner_error0_);
11878 				_vala_code_node_unref0 (expr);
11879 				return NULL;
11880 			} else {
11881 				_vala_code_node_unref0 (expr);
11882 				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);
11883 				g_clear_error (&_inner_error0_);
11884 				return NULL;
11885 			}
11886 		}
11887 	}
11888 	_tmp5_ = expr;
11889 	_tmp6_ = begin;
11890 	_tmp7_ = vala_genie_parser_get_src (self, &_tmp6_);
11891 	_tmp8_ = _tmp7_;
11892 	_tmp9_ = vala_return_statement_new (_tmp5_, _tmp8_);
11893 	_tmp10_ = (ValaStatement*) _tmp9_;
11894 	_vala_source_reference_unref0 (_tmp8_);
11895 	result = _tmp10_;
11896 	_vala_code_node_unref0 (expr);
11897 	return result;
11898 }
11899 
11900 static ValaStatement*
vala_genie_parser_parse_yield_statement(ValaGenieParser * self,GError ** error)11901 vala_genie_parser_parse_yield_statement (ValaGenieParser* self,
11902                                          GError** error)
11903 {
11904 	ValaSourceLocation begin = {0};
11905 	ValaSourceLocation _tmp0_ = {0};
11906 	gboolean _tmp1_ = FALSE;
11907 	ValaSourceLocation _tmp5_;
11908 	ValaSourceReference* _tmp6_;
11909 	ValaSourceReference* _tmp7_;
11910 	ValaYieldStatement* _tmp8_;
11911 	ValaStatement* _tmp9_;
11912 	GError* _inner_error0_ = NULL;
11913 	ValaStatement* result = NULL;
11914 	g_return_val_if_fail (self != NULL, NULL);
11915 	vala_genie_parser_get_location (self, &_tmp0_);
11916 	begin = _tmp0_;
11917 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_YIELD, &_inner_error0_);
11918 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11919 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11920 			g_propagate_error (error, _inner_error0_);
11921 			return NULL;
11922 		} else {
11923 			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);
11924 			g_clear_error (&_inner_error0_);
11925 			return NULL;
11926 		}
11927 	}
11928 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_SEMICOLON) {
11929 		_tmp1_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOL;
11930 	} else {
11931 		_tmp1_ = FALSE;
11932 	}
11933 	if (_tmp1_) {
11934 		ValaStatement* _tmp2_ = NULL;
11935 		ValaStatement* _tmp3_;
11936 		ValaStatement* _tmp4_;
11937 		vala_genie_parser_prev (self);
11938 		_tmp3_ = vala_genie_parser_parse_expression_statement (self, &_inner_error0_);
11939 		_tmp2_ = _tmp3_;
11940 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
11941 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11942 				g_propagate_error (error, _inner_error0_);
11943 				return NULL;
11944 			} else {
11945 				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);
11946 				g_clear_error (&_inner_error0_);
11947 				return NULL;
11948 			}
11949 		}
11950 		_tmp4_ = _tmp2_;
11951 		_tmp2_ = NULL;
11952 		result = _tmp4_;
11953 		_vala_code_node_unref0 (_tmp2_);
11954 		return result;
11955 	}
11956 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
11957 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11958 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11959 			g_propagate_error (error, _inner_error0_);
11960 			return NULL;
11961 		} else {
11962 			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);
11963 			g_clear_error (&_inner_error0_);
11964 			return NULL;
11965 		}
11966 	}
11967 	_tmp5_ = begin;
11968 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
11969 	_tmp7_ = _tmp6_;
11970 	_tmp8_ = vala_yield_statement_new (_tmp7_);
11971 	_tmp9_ = (ValaStatement*) _tmp8_;
11972 	_vala_source_reference_unref0 (_tmp7_);
11973 	result = _tmp9_;
11974 	return result;
11975 }
11976 
11977 static ValaStatement*
vala_genie_parser_parse_throw_statement(ValaGenieParser * self,GError ** error)11978 vala_genie_parser_parse_throw_statement (ValaGenieParser* self,
11979                                          GError** error)
11980 {
11981 	ValaSourceLocation begin = {0};
11982 	ValaSourceLocation _tmp0_ = {0};
11983 	ValaExpression* expr = NULL;
11984 	ValaExpression* _tmp1_;
11985 	ValaExpression* _tmp2_;
11986 	ValaSourceLocation _tmp3_;
11987 	ValaSourceReference* _tmp4_;
11988 	ValaSourceReference* _tmp5_;
11989 	ValaThrowStatement* _tmp6_;
11990 	ValaStatement* _tmp7_;
11991 	GError* _inner_error0_ = NULL;
11992 	ValaStatement* result = NULL;
11993 	g_return_val_if_fail (self != NULL, NULL);
11994 	vala_genie_parser_get_location (self, &_tmp0_);
11995 	begin = _tmp0_;
11996 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_RAISE, &_inner_error0_);
11997 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
11998 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
11999 			g_propagate_error (error, _inner_error0_);
12000 			return NULL;
12001 		} else {
12002 			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);
12003 			g_clear_error (&_inner_error0_);
12004 			return NULL;
12005 		}
12006 	}
12007 	_tmp1_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
12008 	expr = _tmp1_;
12009 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12010 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12011 			g_propagate_error (error, _inner_error0_);
12012 			return NULL;
12013 		} else {
12014 			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);
12015 			g_clear_error (&_inner_error0_);
12016 			return NULL;
12017 		}
12018 	}
12019 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
12020 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12021 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12022 			g_propagate_error (error, _inner_error0_);
12023 			_vala_code_node_unref0 (expr);
12024 			return NULL;
12025 		} else {
12026 			_vala_code_node_unref0 (expr);
12027 			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);
12028 			g_clear_error (&_inner_error0_);
12029 			return NULL;
12030 		}
12031 	}
12032 	_tmp2_ = expr;
12033 	_tmp3_ = begin;
12034 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
12035 	_tmp5_ = _tmp4_;
12036 	_tmp6_ = vala_throw_statement_new (_tmp2_, _tmp5_);
12037 	_tmp7_ = (ValaStatement*) _tmp6_;
12038 	_vala_source_reference_unref0 (_tmp5_);
12039 	result = _tmp7_;
12040 	_vala_code_node_unref0 (expr);
12041 	return result;
12042 }
12043 
12044 static ValaStatement*
vala_genie_parser_parse_try_statement(ValaGenieParser * self,GError ** error)12045 vala_genie_parser_parse_try_statement (ValaGenieParser* self,
12046                                        GError** error)
12047 {
12048 	ValaSourceLocation begin = {0};
12049 	ValaSourceLocation _tmp0_ = {0};
12050 	ValaBlock* try_block = NULL;
12051 	ValaBlock* _tmp1_;
12052 	ValaBlock* finally_clause = NULL;
12053 	ValaArrayList* catch_clauses = NULL;
12054 	GEqualFunc _tmp2_;
12055 	ValaArrayList* _tmp3_;
12056 	ValaTryStatement* stmt = NULL;
12057 	ValaBlock* _tmp11_;
12058 	ValaBlock* _tmp12_;
12059 	ValaSourceLocation _tmp13_;
12060 	ValaSourceReference* _tmp14_;
12061 	ValaSourceReference* _tmp15_;
12062 	ValaTryStatement* _tmp16_;
12063 	ValaTryStatement* _tmp17_;
12064 	GError* _inner_error0_ = NULL;
12065 	ValaStatement* result = NULL;
12066 	g_return_val_if_fail (self != NULL, NULL);
12067 	vala_genie_parser_get_location (self, &_tmp0_);
12068 	begin = _tmp0_;
12069 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_TRY, &_inner_error0_);
12070 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12071 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12072 			g_propagate_error (error, _inner_error0_);
12073 			return NULL;
12074 		} else {
12075 			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);
12076 			g_clear_error (&_inner_error0_);
12077 			return NULL;
12078 		}
12079 	}
12080 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
12081 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12082 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12083 			g_propagate_error (error, _inner_error0_);
12084 			return NULL;
12085 		} else {
12086 			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);
12087 			g_clear_error (&_inner_error0_);
12088 			return NULL;
12089 		}
12090 	}
12091 	_tmp1_ = vala_genie_parser_parse_block (self, &_inner_error0_);
12092 	try_block = _tmp1_;
12093 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12094 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12095 			g_propagate_error (error, _inner_error0_);
12096 			return NULL;
12097 		} else {
12098 			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);
12099 			g_clear_error (&_inner_error0_);
12100 			return NULL;
12101 		}
12102 	}
12103 	finally_clause = NULL;
12104 	_tmp2_ = g_direct_equal;
12105 	_tmp3_ = vala_array_list_new (VALA_TYPE_CATCH_CLAUSE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp2_);
12106 	catch_clauses = _tmp3_;
12107 	if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_EXCEPT) {
12108 		ValaArrayList* _tmp4_;
12109 		_tmp4_ = catch_clauses;
12110 		vala_genie_parser_parse_catch_clauses (self, (ValaList*) _tmp4_, &_inner_error0_);
12111 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
12112 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12113 				g_propagate_error (error, _inner_error0_);
12114 				_vala_iterable_unref0 (catch_clauses);
12115 				_vala_code_node_unref0 (finally_clause);
12116 				_vala_code_node_unref0 (try_block);
12117 				return NULL;
12118 			} else {
12119 				_vala_iterable_unref0 (catch_clauses);
12120 				_vala_code_node_unref0 (finally_clause);
12121 				_vala_code_node_unref0 (try_block);
12122 				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);
12123 				g_clear_error (&_inner_error0_);
12124 				return NULL;
12125 			}
12126 		}
12127 		if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_FINALLY) {
12128 			ValaBlock* _tmp5_ = NULL;
12129 			ValaBlock* _tmp6_;
12130 			ValaBlock* _tmp7_;
12131 			_tmp6_ = vala_genie_parser_parse_finally_clause (self, &_inner_error0_);
12132 			_tmp5_ = _tmp6_;
12133 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
12134 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12135 					g_propagate_error (error, _inner_error0_);
12136 					_vala_iterable_unref0 (catch_clauses);
12137 					_vala_code_node_unref0 (finally_clause);
12138 					_vala_code_node_unref0 (try_block);
12139 					return NULL;
12140 				} else {
12141 					_vala_iterable_unref0 (catch_clauses);
12142 					_vala_code_node_unref0 (finally_clause);
12143 					_vala_code_node_unref0 (try_block);
12144 					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);
12145 					g_clear_error (&_inner_error0_);
12146 					return NULL;
12147 				}
12148 			}
12149 			_tmp7_ = _tmp5_;
12150 			_tmp5_ = NULL;
12151 			_vala_code_node_unref0 (finally_clause);
12152 			finally_clause = _tmp7_;
12153 			_vala_code_node_unref0 (_tmp5_);
12154 		}
12155 	} else {
12156 		ValaBlock* _tmp8_ = NULL;
12157 		ValaBlock* _tmp9_;
12158 		ValaBlock* _tmp10_;
12159 		_tmp9_ = vala_genie_parser_parse_finally_clause (self, &_inner_error0_);
12160 		_tmp8_ = _tmp9_;
12161 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
12162 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12163 				g_propagate_error (error, _inner_error0_);
12164 				_vala_iterable_unref0 (catch_clauses);
12165 				_vala_code_node_unref0 (finally_clause);
12166 				_vala_code_node_unref0 (try_block);
12167 				return NULL;
12168 			} else {
12169 				_vala_iterable_unref0 (catch_clauses);
12170 				_vala_code_node_unref0 (finally_clause);
12171 				_vala_code_node_unref0 (try_block);
12172 				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);
12173 				g_clear_error (&_inner_error0_);
12174 				return NULL;
12175 			}
12176 		}
12177 		_tmp10_ = _tmp8_;
12178 		_tmp8_ = NULL;
12179 		_vala_code_node_unref0 (finally_clause);
12180 		finally_clause = _tmp10_;
12181 		_vala_code_node_unref0 (_tmp8_);
12182 	}
12183 	_tmp11_ = try_block;
12184 	_tmp12_ = finally_clause;
12185 	_tmp13_ = begin;
12186 	_tmp14_ = vala_genie_parser_get_src (self, &_tmp13_);
12187 	_tmp15_ = _tmp14_;
12188 	_tmp16_ = vala_try_statement_new (_tmp11_, _tmp12_, _tmp15_);
12189 	_tmp17_ = _tmp16_;
12190 	_vala_source_reference_unref0 (_tmp15_);
12191 	stmt = _tmp17_;
12192 	{
12193 		ValaArrayList* _clause_list = NULL;
12194 		ValaArrayList* _tmp18_;
12195 		ValaArrayList* _tmp19_;
12196 		gint _clause_size = 0;
12197 		ValaArrayList* _tmp20_;
12198 		gint _tmp21_;
12199 		gint _tmp22_;
12200 		gint _clause_index = 0;
12201 		_tmp18_ = catch_clauses;
12202 		_tmp19_ = _vala_iterable_ref0 (_tmp18_);
12203 		_clause_list = _tmp19_;
12204 		_tmp20_ = _clause_list;
12205 		_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
12206 		_tmp22_ = _tmp21_;
12207 		_clause_size = _tmp22_;
12208 		_clause_index = -1;
12209 		while (TRUE) {
12210 			gint _tmp23_;
12211 			gint _tmp24_;
12212 			ValaCatchClause* clause = NULL;
12213 			ValaArrayList* _tmp25_;
12214 			gpointer _tmp26_;
12215 			ValaTryStatement* _tmp27_;
12216 			ValaCatchClause* _tmp28_;
12217 			_clause_index = _clause_index + 1;
12218 			_tmp23_ = _clause_index;
12219 			_tmp24_ = _clause_size;
12220 			if (!(_tmp23_ < _tmp24_)) {
12221 				break;
12222 			}
12223 			_tmp25_ = _clause_list;
12224 			_tmp26_ = vala_list_get ((ValaList*) _tmp25_, _clause_index);
12225 			clause = (ValaCatchClause*) _tmp26_;
12226 			_tmp27_ = stmt;
12227 			_tmp28_ = clause;
12228 			vala_try_statement_add_catch_clause (_tmp27_, _tmp28_);
12229 			_vala_code_node_unref0 (clause);
12230 		}
12231 		_vala_iterable_unref0 (_clause_list);
12232 	}
12233 	result = (ValaStatement*) stmt;
12234 	_vala_iterable_unref0 (catch_clauses);
12235 	_vala_code_node_unref0 (finally_clause);
12236 	_vala_code_node_unref0 (try_block);
12237 	return result;
12238 }
12239 
12240 static void
vala_genie_parser_parse_catch_clauses(ValaGenieParser * self,ValaList * catch_clauses,GError ** error)12241 vala_genie_parser_parse_catch_clauses (ValaGenieParser* self,
12242                                        ValaList* catch_clauses,
12243                                        GError** error)
12244 {
12245 	GError* _inner_error0_ = NULL;
12246 	g_return_if_fail (self != NULL);
12247 	g_return_if_fail (catch_clauses != NULL);
12248 	while (TRUE) {
12249 		ValaSourceLocation begin = {0};
12250 		ValaSourceLocation _tmp0_ = {0};
12251 		ValaDataType* type = NULL;
12252 		gchar* id = NULL;
12253 		ValaBlock* block = NULL;
12254 		ValaBlock* _tmp7_;
12255 		ValaDataType* _tmp8_;
12256 		const gchar* _tmp9_;
12257 		ValaBlock* _tmp10_;
12258 		ValaSourceLocation _tmp11_;
12259 		ValaSourceReference* _tmp12_;
12260 		ValaSourceReference* _tmp13_;
12261 		ValaCatchClause* _tmp14_;
12262 		ValaCatchClause* _tmp15_;
12263 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EXCEPT)) {
12264 			break;
12265 		}
12266 		vala_genie_parser_get_location (self, &_tmp0_);
12267 		begin = _tmp0_;
12268 		type = NULL;
12269 		id = NULL;
12270 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
12271 			gchar* _tmp1_ = NULL;
12272 			gchar* _tmp2_;
12273 			gchar* _tmp3_;
12274 			ValaDataType* _tmp4_ = NULL;
12275 			ValaDataType* _tmp5_;
12276 			ValaDataType* _tmp6_;
12277 			_tmp2_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
12278 			_tmp1_ = _tmp2_;
12279 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
12280 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12281 					g_propagate_error (error, _inner_error0_);
12282 					_g_free0 (id);
12283 					_vala_code_node_unref0 (type);
12284 					return;
12285 				} else {
12286 					_g_free0 (id);
12287 					_vala_code_node_unref0 (type);
12288 					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);
12289 					g_clear_error (&_inner_error0_);
12290 					return;
12291 				}
12292 			}
12293 			_tmp3_ = _tmp1_;
12294 			_tmp1_ = NULL;
12295 			_g_free0 (id);
12296 			id = _tmp3_;
12297 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
12298 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
12299 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12300 					g_propagate_error (error, _inner_error0_);
12301 					_g_free0 (_tmp1_);
12302 					_g_free0 (id);
12303 					_vala_code_node_unref0 (type);
12304 					return;
12305 				} else {
12306 					_g_free0 (_tmp1_);
12307 					_g_free0 (id);
12308 					_vala_code_node_unref0 (type);
12309 					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);
12310 					g_clear_error (&_inner_error0_);
12311 					return;
12312 				}
12313 			}
12314 			_tmp5_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
12315 			_tmp4_ = _tmp5_;
12316 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
12317 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12318 					g_propagate_error (error, _inner_error0_);
12319 					_g_free0 (_tmp1_);
12320 					_g_free0 (id);
12321 					_vala_code_node_unref0 (type);
12322 					return;
12323 				} else {
12324 					_g_free0 (_tmp1_);
12325 					_g_free0 (id);
12326 					_vala_code_node_unref0 (type);
12327 					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);
12328 					g_clear_error (&_inner_error0_);
12329 					return;
12330 				}
12331 			}
12332 			_tmp6_ = _tmp4_;
12333 			_tmp4_ = NULL;
12334 			_vala_code_node_unref0 (type);
12335 			type = _tmp6_;
12336 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
12337 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
12338 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12339 					g_propagate_error (error, _inner_error0_);
12340 					_vala_code_node_unref0 (_tmp4_);
12341 					_g_free0 (_tmp1_);
12342 					_g_free0 (id);
12343 					_vala_code_node_unref0 (type);
12344 					return;
12345 				} else {
12346 					_vala_code_node_unref0 (_tmp4_);
12347 					_g_free0 (_tmp1_);
12348 					_g_free0 (id);
12349 					_vala_code_node_unref0 (type);
12350 					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);
12351 					g_clear_error (&_inner_error0_);
12352 					return;
12353 				}
12354 			}
12355 			_vala_code_node_unref0 (_tmp4_);
12356 			_g_free0 (_tmp1_);
12357 		}
12358 		_tmp7_ = vala_genie_parser_parse_block (self, &_inner_error0_);
12359 		block = _tmp7_;
12360 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
12361 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12362 				g_propagate_error (error, _inner_error0_);
12363 				_g_free0 (id);
12364 				_vala_code_node_unref0 (type);
12365 				return;
12366 			} else {
12367 				_g_free0 (id);
12368 				_vala_code_node_unref0 (type);
12369 				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);
12370 				g_clear_error (&_inner_error0_);
12371 				return;
12372 			}
12373 		}
12374 		_tmp8_ = type;
12375 		_tmp9_ = id;
12376 		_tmp10_ = block;
12377 		_tmp11_ = begin;
12378 		_tmp12_ = vala_genie_parser_get_src (self, &_tmp11_);
12379 		_tmp13_ = _tmp12_;
12380 		_tmp14_ = vala_catch_clause_new (_tmp8_, _tmp9_, _tmp10_, _tmp13_);
12381 		_tmp15_ = _tmp14_;
12382 		vala_collection_add ((ValaCollection*) catch_clauses, _tmp15_);
12383 		_vala_code_node_unref0 (_tmp15_);
12384 		_vala_source_reference_unref0 (_tmp13_);
12385 		_vala_code_node_unref0 (block);
12386 		_g_free0 (id);
12387 		_vala_code_node_unref0 (type);
12388 	}
12389 }
12390 
12391 static ValaBlock*
vala_genie_parser_parse_finally_clause(ValaGenieParser * self,GError ** error)12392 vala_genie_parser_parse_finally_clause (ValaGenieParser* self,
12393                                         GError** error)
12394 {
12395 	ValaBlock* block = NULL;
12396 	ValaBlock* _tmp0_;
12397 	GError* _inner_error0_ = NULL;
12398 	ValaBlock* result = NULL;
12399 	g_return_val_if_fail (self != NULL, NULL);
12400 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_FINALLY, &_inner_error0_);
12401 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12402 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12403 			g_propagate_error (error, _inner_error0_);
12404 			return NULL;
12405 		} else {
12406 			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);
12407 			g_clear_error (&_inner_error0_);
12408 			return NULL;
12409 		}
12410 	}
12411 	vala_genie_parser_accept_block (self);
12412 	_tmp0_ = vala_genie_parser_parse_block (self, &_inner_error0_);
12413 	block = _tmp0_;
12414 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12415 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12416 			g_propagate_error (error, _inner_error0_);
12417 			return NULL;
12418 		} else {
12419 			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);
12420 			g_clear_error (&_inner_error0_);
12421 			return NULL;
12422 		}
12423 	}
12424 	result = block;
12425 	return result;
12426 }
12427 
12428 static ValaStatement*
vala_genie_parser_parse_lock_statement(ValaGenieParser * self,GError ** error)12429 vala_genie_parser_parse_lock_statement (ValaGenieParser* self,
12430                                         GError** error)
12431 {
12432 	ValaSourceLocation begin = {0};
12433 	ValaSourceLocation _tmp0_ = {0};
12434 	ValaExpression* expr = NULL;
12435 	ValaExpression* _tmp1_;
12436 	ValaBlock* stmt = NULL;
12437 	ValaBlock* _tmp2_;
12438 	ValaExpression* _tmp3_;
12439 	ValaBlock* _tmp4_;
12440 	ValaSourceLocation _tmp5_;
12441 	ValaSourceReference* _tmp6_;
12442 	ValaSourceReference* _tmp7_;
12443 	ValaLockStatement* _tmp8_;
12444 	ValaStatement* _tmp9_;
12445 	GError* _inner_error0_ = NULL;
12446 	ValaStatement* result = NULL;
12447 	g_return_val_if_fail (self != NULL, NULL);
12448 	vala_genie_parser_get_location (self, &_tmp0_);
12449 	begin = _tmp0_;
12450 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_LOCK, &_inner_error0_);
12451 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12452 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12453 			g_propagate_error (error, _inner_error0_);
12454 			return NULL;
12455 		} else {
12456 			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);
12457 			g_clear_error (&_inner_error0_);
12458 			return NULL;
12459 		}
12460 	}
12461 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
12462 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12463 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12464 			g_propagate_error (error, _inner_error0_);
12465 			return NULL;
12466 		} else {
12467 			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);
12468 			g_clear_error (&_inner_error0_);
12469 			return NULL;
12470 		}
12471 	}
12472 	_tmp1_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
12473 	expr = _tmp1_;
12474 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12475 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12476 			g_propagate_error (error, _inner_error0_);
12477 			return NULL;
12478 		} else {
12479 			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);
12480 			g_clear_error (&_inner_error0_);
12481 			return NULL;
12482 		}
12483 	}
12484 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
12485 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12486 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12487 			g_propagate_error (error, _inner_error0_);
12488 			_vala_code_node_unref0 (expr);
12489 			return NULL;
12490 		} else {
12491 			_vala_code_node_unref0 (expr);
12492 			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);
12493 			g_clear_error (&_inner_error0_);
12494 			return NULL;
12495 		}
12496 	}
12497 	_tmp2_ = vala_genie_parser_parse_embedded_statement (self, &_inner_error0_);
12498 	stmt = _tmp2_;
12499 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12500 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12501 			g_propagate_error (error, _inner_error0_);
12502 			_vala_code_node_unref0 (expr);
12503 			return NULL;
12504 		} else {
12505 			_vala_code_node_unref0 (expr);
12506 			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);
12507 			g_clear_error (&_inner_error0_);
12508 			return NULL;
12509 		}
12510 	}
12511 	_tmp3_ = expr;
12512 	_tmp4_ = stmt;
12513 	_tmp5_ = begin;
12514 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
12515 	_tmp7_ = _tmp6_;
12516 	_tmp8_ = vala_lock_statement_new (_tmp3_, _tmp4_, _tmp7_);
12517 	_tmp9_ = (ValaStatement*) _tmp8_;
12518 	_vala_source_reference_unref0 (_tmp7_);
12519 	result = _tmp9_;
12520 	_vala_code_node_unref0 (stmt);
12521 	_vala_code_node_unref0 (expr);
12522 	return result;
12523 }
12524 
12525 static ValaStatement*
vala_genie_parser_parse_delete_statement(ValaGenieParser * self,GError ** error)12526 vala_genie_parser_parse_delete_statement (ValaGenieParser* self,
12527                                           GError** error)
12528 {
12529 	ValaSourceLocation begin = {0};
12530 	ValaSourceLocation _tmp0_ = {0};
12531 	ValaExpression* expr = NULL;
12532 	ValaExpression* _tmp1_;
12533 	ValaExpression* _tmp2_;
12534 	ValaSourceLocation _tmp3_;
12535 	ValaSourceReference* _tmp4_;
12536 	ValaSourceReference* _tmp5_;
12537 	ValaDeleteStatement* _tmp6_;
12538 	ValaStatement* _tmp7_;
12539 	GError* _inner_error0_ = NULL;
12540 	ValaStatement* result = NULL;
12541 	g_return_val_if_fail (self != NULL, NULL);
12542 	vala_genie_parser_get_location (self, &_tmp0_);
12543 	begin = _tmp0_;
12544 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DELETE, &_inner_error0_);
12545 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12546 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12547 			g_propagate_error (error, _inner_error0_);
12548 			return NULL;
12549 		} else {
12550 			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);
12551 			g_clear_error (&_inner_error0_);
12552 			return NULL;
12553 		}
12554 	}
12555 	_tmp1_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
12556 	expr = _tmp1_;
12557 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12558 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12559 			g_propagate_error (error, _inner_error0_);
12560 			return NULL;
12561 		} else {
12562 			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);
12563 			g_clear_error (&_inner_error0_);
12564 			return NULL;
12565 		}
12566 	}
12567 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
12568 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12569 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12570 			g_propagate_error (error, _inner_error0_);
12571 			_vala_code_node_unref0 (expr);
12572 			return NULL;
12573 		} else {
12574 			_vala_code_node_unref0 (expr);
12575 			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);
12576 			g_clear_error (&_inner_error0_);
12577 			return NULL;
12578 		}
12579 	}
12580 	_tmp2_ = expr;
12581 	_tmp3_ = begin;
12582 	_tmp4_ = vala_genie_parser_get_src (self, &_tmp3_);
12583 	_tmp5_ = _tmp4_;
12584 	_tmp6_ = vala_delete_statement_new (_tmp2_, _tmp5_);
12585 	_tmp7_ = (ValaStatement*) _tmp6_;
12586 	_vala_source_reference_unref0 (_tmp5_);
12587 	result = _tmp7_;
12588 	_vala_code_node_unref0 (expr);
12589 	return result;
12590 }
12591 
12592 static gchar*
vala_genie_parser_parse_attribute_value(ValaGenieParser * self,GError ** error)12593 vala_genie_parser_parse_attribute_value (ValaGenieParser* self,
12594                                          GError** error)
12595 {
12596 	GError* _inner_error0_ = NULL;
12597 	gchar* result = NULL;
12598 	g_return_val_if_fail (self != NULL, NULL);
12599 	switch (vala_genie_parser_current (self)) {
12600 		case VALA_GENIE_TOKEN_TYPE_NULL:
12601 		case VALA_GENIE_TOKEN_TYPE_TRUE:
12602 		case VALA_GENIE_TOKEN_TYPE_FALSE:
12603 		case VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL:
12604 		case VALA_GENIE_TOKEN_TYPE_REAL_LITERAL:
12605 		case VALA_GENIE_TOKEN_TYPE_STRING_LITERAL:
12606 		{
12607 			gchar* _tmp0_;
12608 			vala_genie_parser_next (self);
12609 			_tmp0_ = vala_genie_parser_get_last_string (self);
12610 			result = _tmp0_;
12611 			return result;
12612 		}
12613 		case VALA_GENIE_TOKEN_TYPE_MINUS:
12614 		{
12615 			vala_genie_parser_next (self);
12616 			switch (vala_genie_parser_current (self)) {
12617 				case VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL:
12618 				case VALA_GENIE_TOKEN_TYPE_REAL_LITERAL:
12619 				{
12620 					gchar* _tmp1_;
12621 					gchar* _tmp2_;
12622 					gchar* _tmp3_;
12623 					gchar* _tmp4_;
12624 					vala_genie_parser_next (self);
12625 					_tmp1_ = vala_genie_parser_get_last_string (self);
12626 					_tmp2_ = _tmp1_;
12627 					_tmp3_ = g_strconcat ("-", _tmp2_, NULL);
12628 					_tmp4_ = _tmp3_;
12629 					_g_free0 (_tmp2_);
12630 					result = _tmp4_;
12631 					return result;
12632 				}
12633 				default:
12634 				{
12635 					GError* _tmp5_;
12636 					_tmp5_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected number");
12637 					_inner_error0_ = _tmp5_;
12638 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12639 						g_propagate_error (error, _inner_error0_);
12640 						return NULL;
12641 					} else {
12642 						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);
12643 						g_clear_error (&_inner_error0_);
12644 						return NULL;
12645 					}
12646 				}
12647 			}
12648 		}
12649 		default:
12650 		{
12651 			GError* _tmp6_;
12652 			_tmp6_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected literal");
12653 			_inner_error0_ = _tmp6_;
12654 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12655 				g_propagate_error (error, _inner_error0_);
12656 				return NULL;
12657 			} else {
12658 				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);
12659 				g_clear_error (&_inner_error0_);
12660 				return NULL;
12661 			}
12662 		}
12663 	}
12664 }
12665 
12666 static ValaList*
vala_genie_parser_parse_attributes(ValaGenieParser * self,gboolean parameter,GError ** error)12667 vala_genie_parser_parse_attributes (ValaGenieParser* self,
12668                                     gboolean parameter,
12669                                     GError** error)
12670 {
12671 	ValaArrayList* attrs = NULL;
12672 	GEqualFunc _tmp0_;
12673 	ValaArrayList* _tmp1_;
12674 	GError* _inner_error0_ = NULL;
12675 	ValaList* result = NULL;
12676 	g_return_val_if_fail (self != NULL, NULL);
12677 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET) {
12678 		result = NULL;
12679 		return result;
12680 	}
12681 	_tmp0_ = g_direct_equal;
12682 	_tmp1_ = vala_array_list_new (VALA_TYPE_ATTRIBUTE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
12683 	attrs = _tmp1_;
12684 	while (TRUE) {
12685 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET)) {
12686 			break;
12687 		}
12688 		{
12689 			gboolean _tmp2_ = FALSE;
12690 			_tmp2_ = TRUE;
12691 			while (TRUE) {
12692 				ValaSourceLocation begin = {0};
12693 				ValaSourceLocation _tmp3_ = {0};
12694 				gchar* id = NULL;
12695 				gchar* _tmp4_;
12696 				ValaAttribute* attr = NULL;
12697 				const gchar* _tmp5_;
12698 				ValaSourceLocation _tmp6_;
12699 				ValaSourceReference* _tmp7_;
12700 				ValaSourceReference* _tmp8_;
12701 				ValaAttribute* _tmp9_;
12702 				ValaAttribute* _tmp10_;
12703 				ValaArrayList* _tmp19_;
12704 				ValaAttribute* _tmp20_;
12705 				if (!_tmp2_) {
12706 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
12707 						break;
12708 					}
12709 				}
12710 				_tmp2_ = FALSE;
12711 				vala_genie_parser_get_location (self, &_tmp3_);
12712 				begin = _tmp3_;
12713 				_tmp4_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
12714 				id = _tmp4_;
12715 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
12716 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12717 						g_propagate_error (error, _inner_error0_);
12718 						_vala_iterable_unref0 (attrs);
12719 						return NULL;
12720 					} else {
12721 						_vala_iterable_unref0 (attrs);
12722 						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);
12723 						g_clear_error (&_inner_error0_);
12724 						return NULL;
12725 					}
12726 				}
12727 				_tmp5_ = id;
12728 				_tmp6_ = begin;
12729 				_tmp7_ = vala_genie_parser_get_src (self, &_tmp6_);
12730 				_tmp8_ = _tmp7_;
12731 				_tmp9_ = vala_attribute_new (_tmp5_, _tmp8_);
12732 				_tmp10_ = _tmp9_;
12733 				_vala_source_reference_unref0 (_tmp8_);
12734 				attr = _tmp10_;
12735 				if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS)) {
12736 					if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
12737 						{
12738 							gboolean _tmp11_ = FALSE;
12739 							_tmp11_ = TRUE;
12740 							while (TRUE) {
12741 								gchar* _tmp12_ = NULL;
12742 								gchar* _tmp13_;
12743 								gchar* _tmp14_;
12744 								gchar* _tmp15_ = NULL;
12745 								gchar* _tmp16_;
12746 								ValaAttribute* _tmp17_;
12747 								const gchar* _tmp18_;
12748 								if (!_tmp11_) {
12749 									if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
12750 										break;
12751 									}
12752 								}
12753 								_tmp11_ = FALSE;
12754 								_tmp13_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
12755 								_tmp12_ = _tmp13_;
12756 								if (G_UNLIKELY (_inner_error0_ != NULL)) {
12757 									if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12758 										g_propagate_error (error, _inner_error0_);
12759 										_vala_code_node_unref0 (attr);
12760 										_g_free0 (id);
12761 										_vala_iterable_unref0 (attrs);
12762 										return NULL;
12763 									} else {
12764 										_vala_code_node_unref0 (attr);
12765 										_g_free0 (id);
12766 										_vala_iterable_unref0 (attrs);
12767 										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);
12768 										g_clear_error (&_inner_error0_);
12769 										return NULL;
12770 									}
12771 								}
12772 								_tmp14_ = _tmp12_;
12773 								_tmp12_ = NULL;
12774 								_g_free0 (id);
12775 								id = _tmp14_;
12776 								vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_ASSIGN, &_inner_error0_);
12777 								if (G_UNLIKELY (_inner_error0_ != NULL)) {
12778 									if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12779 										g_propagate_error (error, _inner_error0_);
12780 										_g_free0 (_tmp12_);
12781 										_vala_code_node_unref0 (attr);
12782 										_g_free0 (id);
12783 										_vala_iterable_unref0 (attrs);
12784 										return NULL;
12785 									} else {
12786 										_g_free0 (_tmp12_);
12787 										_vala_code_node_unref0 (attr);
12788 										_g_free0 (id);
12789 										_vala_iterable_unref0 (attrs);
12790 										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);
12791 										g_clear_error (&_inner_error0_);
12792 										return NULL;
12793 									}
12794 								}
12795 								_tmp16_ = vala_genie_parser_parse_attribute_value (self, &_inner_error0_);
12796 								_tmp15_ = _tmp16_;
12797 								if (G_UNLIKELY (_inner_error0_ != NULL)) {
12798 									if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12799 										g_propagate_error (error, _inner_error0_);
12800 										_g_free0 (_tmp12_);
12801 										_vala_code_node_unref0 (attr);
12802 										_g_free0 (id);
12803 										_vala_iterable_unref0 (attrs);
12804 										return NULL;
12805 									} else {
12806 										_g_free0 (_tmp12_);
12807 										_vala_code_node_unref0 (attr);
12808 										_g_free0 (id);
12809 										_vala_iterable_unref0 (attrs);
12810 										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);
12811 										g_clear_error (&_inner_error0_);
12812 										return NULL;
12813 									}
12814 								}
12815 								_tmp17_ = attr;
12816 								_tmp18_ = id;
12817 								vala_attribute_add_argument (_tmp17_, _tmp18_, _tmp15_);
12818 								_g_free0 (_tmp15_);
12819 								_g_free0 (_tmp12_);
12820 							}
12821 						}
12822 					}
12823 					vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
12824 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
12825 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12826 							g_propagate_error (error, _inner_error0_);
12827 							_vala_code_node_unref0 (attr);
12828 							_g_free0 (id);
12829 							_vala_iterable_unref0 (attrs);
12830 							return NULL;
12831 						} else {
12832 							_vala_code_node_unref0 (attr);
12833 							_g_free0 (id);
12834 							_vala_iterable_unref0 (attrs);
12835 							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);
12836 							g_clear_error (&_inner_error0_);
12837 							return NULL;
12838 						}
12839 					}
12840 				}
12841 				_tmp19_ = attrs;
12842 				_tmp20_ = attr;
12843 				vala_collection_add ((ValaCollection*) _tmp19_, _tmp20_);
12844 				_vala_code_node_unref0 (attr);
12845 				_g_free0 (id);
12846 			}
12847 		}
12848 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET, &_inner_error0_);
12849 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
12850 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12851 				g_propagate_error (error, _inner_error0_);
12852 				_vala_iterable_unref0 (attrs);
12853 				return NULL;
12854 			} else {
12855 				_vala_iterable_unref0 (attrs);
12856 				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);
12857 				g_clear_error (&_inner_error0_);
12858 				return NULL;
12859 			}
12860 		}
12861 	}
12862 	if (!parameter) {
12863 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
12864 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
12865 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12866 				g_propagate_error (error, _inner_error0_);
12867 				_vala_iterable_unref0 (attrs);
12868 				return NULL;
12869 			} else {
12870 				_vala_iterable_unref0 (attrs);
12871 				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);
12872 				g_clear_error (&_inner_error0_);
12873 				return NULL;
12874 			}
12875 		}
12876 	}
12877 	result = (ValaList*) attrs;
12878 	return result;
12879 }
12880 
12881 static void
vala_genie_parser_set_attributes(ValaGenieParser * self,ValaCodeNode * node,ValaList * attributes)12882 vala_genie_parser_set_attributes (ValaGenieParser* self,
12883                                   ValaCodeNode* node,
12884                                   ValaList* attributes)
12885 {
12886 	g_return_if_fail (self != NULL);
12887 	g_return_if_fail (node != NULL);
12888 	if (attributes != NULL) {
12889 		{
12890 			ValaList* _attr_list = NULL;
12891 			ValaList* _tmp0_;
12892 			gint _attr_size = 0;
12893 			ValaList* _tmp1_;
12894 			gint _tmp2_;
12895 			gint _tmp3_;
12896 			gint _attr_index = 0;
12897 			_tmp0_ = _vala_iterable_ref0 (G_TYPE_CHECK_INSTANCE_CAST (attributes, VALA_TYPE_LIST, ValaList));
12898 			_attr_list = _tmp0_;
12899 			_tmp1_ = _attr_list;
12900 			_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
12901 			_tmp3_ = _tmp2_;
12902 			_attr_size = _tmp3_;
12903 			_attr_index = -1;
12904 			while (TRUE) {
12905 				gint _tmp4_;
12906 				gint _tmp5_;
12907 				ValaAttribute* attr = NULL;
12908 				ValaList* _tmp6_;
12909 				gpointer _tmp7_;
12910 				ValaAttribute* _tmp8_;
12911 				const gchar* _tmp9_;
12912 				const gchar* _tmp10_;
12913 				ValaAttribute* _tmp11_;
12914 				ValaAttribute* _tmp20_;
12915 				ValaAttribute* _tmp21_;
12916 				_attr_index = _attr_index + 1;
12917 				_tmp4_ = _attr_index;
12918 				_tmp5_ = _attr_size;
12919 				if (!(_tmp4_ < _tmp5_)) {
12920 					break;
12921 				}
12922 				_tmp6_ = _attr_list;
12923 				_tmp7_ = vala_list_get (_tmp6_, _attr_index);
12924 				attr = (ValaAttribute*) _tmp7_;
12925 				_tmp8_ = attr;
12926 				_tmp9_ = vala_attribute_get_name (_tmp8_);
12927 				_tmp10_ = _tmp9_;
12928 				_tmp11_ = vala_code_node_get_attribute (node, _tmp10_);
12929 				if (_tmp11_ != NULL) {
12930 					ValaAttribute* _tmp12_;
12931 					ValaSourceReference* _tmp13_;
12932 					ValaSourceReference* _tmp14_;
12933 					ValaAttribute* _tmp15_;
12934 					const gchar* _tmp16_;
12935 					const gchar* _tmp17_;
12936 					gchar* _tmp18_;
12937 					gchar* _tmp19_;
12938 					_tmp12_ = attr;
12939 					_tmp13_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp12_);
12940 					_tmp14_ = _tmp13_;
12941 					_tmp15_ = attr;
12942 					_tmp16_ = vala_attribute_get_name (_tmp15_);
12943 					_tmp17_ = _tmp16_;
12944 					_tmp18_ = g_strdup_printf ("duplicate attribute `%s'", _tmp17_);
12945 					_tmp19_ = _tmp18_;
12946 					vala_report_error (_tmp14_, _tmp19_);
12947 					_g_free0 (_tmp19_);
12948 				}
12949 				_tmp20_ = attr;
12950 				_tmp21_ = _vala_code_node_ref0 (_tmp20_);
12951 				node->attributes = g_list_append (node->attributes, _tmp21_);
12952 				_vala_code_node_unref0 (attr);
12953 			}
12954 			_vala_iterable_unref0 (_attr_list);
12955 		}
12956 	}
12957 }
12958 
12959 static ValaSymbol*
vala_genie_parser_parse_declaration(ValaGenieParser * self,gboolean is_root,GError ** error)12960 vala_genie_parser_parse_declaration (ValaGenieParser* self,
12961                                      gboolean is_root,
12962                                      GError** error)
12963 {
12964 	ValaGenieScanner* _tmp0_;
12965 	ValaComment* _tmp1_;
12966 	ValaList* attrs = NULL;
12967 	ValaList* _tmp2_;
12968 	ValaSourceLocation begin = {0};
12969 	ValaSourceLocation _tmp3_ = {0};
12970 	ValaGenieTokenType cur = 0;
12971 	ValaGenieTokenType pre = 0;
12972 	ValaGenieParserTokenInfo* _tmp76_;
12973 	gint _tmp76__length1;
12974 	ValaGenieParserTokenInfo _tmp77_;
12975 	ValaGenieTokenType _tmp78_;
12976 	ValaGenieTokenType _tmp79_;
12977 	const gchar* _tmp80_;
12978 	ValaGenieTokenType _tmp81_;
12979 	const gchar* _tmp82_;
12980 	GError* _tmp83_;
12981 	GError* _inner_error0_ = NULL;
12982 	ValaSymbol* result = NULL;
12983 	g_return_val_if_fail (self != NULL, NULL);
12984 	_tmp0_ = self->priv->scanner;
12985 	_tmp1_ = vala_genie_scanner_pop_comment (_tmp0_);
12986 	_vala_comment_unref0 (self->priv->comment);
12987 	self->priv->comment = _tmp1_;
12988 	_tmp2_ = vala_genie_parser_parse_attributes (self, FALSE, &_inner_error0_);
12989 	attrs = _tmp2_;
12990 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
12991 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
12992 			g_propagate_error (error, _inner_error0_);
12993 			return NULL;
12994 		} else {
12995 			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);
12996 			g_clear_error (&_inner_error0_);
12997 			return NULL;
12998 		}
12999 	}
13000 	vala_genie_parser_get_location (self, &_tmp3_);
13001 	begin = _tmp3_;
13002 	switch (vala_genie_parser_current (self)) {
13003 		case VALA_GENIE_TOKEN_TYPE_CONST:
13004 		{
13005 			ValaConstant* _tmp4_ = NULL;
13006 			ValaList* _tmp5_;
13007 			ValaConstant* _tmp6_;
13008 			ValaConstant* _tmp7_;
13009 			_tmp5_ = attrs;
13010 			_tmp6_ = vala_genie_parser_parse_constant_declaration (self, _tmp5_, &_inner_error0_);
13011 			_tmp4_ = _tmp6_;
13012 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13013 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13014 					g_propagate_error (error, _inner_error0_);
13015 					_vala_iterable_unref0 (attrs);
13016 					return NULL;
13017 				} else {
13018 					_vala_iterable_unref0 (attrs);
13019 					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);
13020 					g_clear_error (&_inner_error0_);
13021 					return NULL;
13022 				}
13023 			}
13024 			_tmp7_ = _tmp4_;
13025 			_tmp4_ = NULL;
13026 			result = (ValaSymbol*) _tmp7_;
13027 			_vala_code_node_unref0 (_tmp4_);
13028 			_vala_iterable_unref0 (attrs);
13029 			return result;
13030 		}
13031 		case VALA_GENIE_TOKEN_TYPE_CONSTRUCT:
13032 		{
13033 			ValaCreationMethod* _tmp8_ = NULL;
13034 			ValaList* _tmp9_;
13035 			ValaCreationMethod* _tmp10_;
13036 			ValaCreationMethod* _tmp11_;
13037 			_tmp9_ = attrs;
13038 			_tmp10_ = vala_genie_parser_parse_creation_method_declaration (self, _tmp9_, &_inner_error0_);
13039 			_tmp8_ = _tmp10_;
13040 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13041 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13042 					g_propagate_error (error, _inner_error0_);
13043 					_vala_iterable_unref0 (attrs);
13044 					return NULL;
13045 				} else {
13046 					_vala_iterable_unref0 (attrs);
13047 					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);
13048 					g_clear_error (&_inner_error0_);
13049 					return NULL;
13050 				}
13051 			}
13052 			_tmp11_ = _tmp8_;
13053 			_tmp8_ = NULL;
13054 			result = (ValaSymbol*) _tmp11_;
13055 			_vala_code_node_unref0 (_tmp8_);
13056 			_vala_iterable_unref0 (attrs);
13057 			return result;
13058 		}
13059 		case VALA_GENIE_TOKEN_TYPE_CLASS:
13060 		{
13061 			ValaSymbol* _tmp12_ = NULL;
13062 			ValaList* _tmp13_;
13063 			ValaSymbol* _tmp14_;
13064 			ValaSymbol* _tmp15_;
13065 			_tmp13_ = attrs;
13066 			_tmp14_ = vala_genie_parser_parse_class_declaration (self, _tmp13_, &_inner_error0_);
13067 			_tmp12_ = _tmp14_;
13068 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13069 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13070 					g_propagate_error (error, _inner_error0_);
13071 					_vala_iterable_unref0 (attrs);
13072 					return NULL;
13073 				} else {
13074 					_vala_iterable_unref0 (attrs);
13075 					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);
13076 					g_clear_error (&_inner_error0_);
13077 					return NULL;
13078 				}
13079 			}
13080 			_tmp15_ = _tmp12_;
13081 			_tmp12_ = NULL;
13082 			result = _tmp15_;
13083 			_vala_code_node_unref0 (_tmp12_);
13084 			_vala_iterable_unref0 (attrs);
13085 			return result;
13086 		}
13087 		case VALA_GENIE_TOKEN_TYPE_INIT:
13088 		{
13089 			ValaCodeContext* _tmp20_;
13090 			ValaProfile _tmp21_;
13091 			ValaProfile _tmp22_;
13092 			if (is_root) {
13093 				ValaMethod* _tmp16_ = NULL;
13094 				ValaList* _tmp17_;
13095 				ValaMethod* _tmp18_;
13096 				ValaMethod* _tmp19_;
13097 				_tmp17_ = attrs;
13098 				_tmp18_ = vala_genie_parser_parse_main_method_declaration (self, _tmp17_, &_inner_error0_);
13099 				_tmp16_ = _tmp18_;
13100 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
13101 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13102 						g_propagate_error (error, _inner_error0_);
13103 						_vala_iterable_unref0 (attrs);
13104 						return NULL;
13105 					} else {
13106 						_vala_iterable_unref0 (attrs);
13107 						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);
13108 						g_clear_error (&_inner_error0_);
13109 						return NULL;
13110 					}
13111 				}
13112 				_tmp19_ = _tmp16_;
13113 				_tmp16_ = NULL;
13114 				result = (ValaSymbol*) _tmp19_;
13115 				_vala_code_node_unref0 (_tmp16_);
13116 				_vala_iterable_unref0 (attrs);
13117 				return result;
13118 			}
13119 			_tmp20_ = self->priv->context;
13120 			_tmp21_ = vala_code_context_get_profile (_tmp20_);
13121 			_tmp22_ = _tmp21_;
13122 			if (_tmp22_ == VALA_PROFILE_GOBJECT) {
13123 				ValaSourceLocation _tmp23_;
13124 				ValaConstructor* _tmp24_ = NULL;
13125 				ValaList* _tmp25_;
13126 				ValaConstructor* _tmp26_;
13127 				ValaConstructor* _tmp27_;
13128 				_tmp23_ = begin;
13129 				vala_genie_parser_rollback (self, &_tmp23_);
13130 				_tmp25_ = attrs;
13131 				_tmp26_ = vala_genie_parser_parse_constructor_declaration (self, _tmp25_, &_inner_error0_);
13132 				_tmp24_ = _tmp26_;
13133 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
13134 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13135 						g_propagate_error (error, _inner_error0_);
13136 						_vala_iterable_unref0 (attrs);
13137 						return NULL;
13138 					} else {
13139 						_vala_iterable_unref0 (attrs);
13140 						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);
13141 						g_clear_error (&_inner_error0_);
13142 						return NULL;
13143 					}
13144 				}
13145 				_tmp27_ = _tmp24_;
13146 				_tmp24_ = NULL;
13147 				result = (ValaSymbol*) _tmp27_;
13148 				_vala_code_node_unref0 (_tmp24_);
13149 				_vala_iterable_unref0 (attrs);
13150 				return result;
13151 			}
13152 			break;
13153 		}
13154 		case VALA_GENIE_TOKEN_TYPE_DELEGATE:
13155 		{
13156 			ValaSymbol* _tmp28_ = NULL;
13157 			ValaList* _tmp29_;
13158 			ValaSymbol* _tmp30_;
13159 			ValaSymbol* _tmp31_;
13160 			_tmp29_ = attrs;
13161 			_tmp30_ = vala_genie_parser_parse_delegate_declaration (self, _tmp29_, &_inner_error0_);
13162 			_tmp28_ = _tmp30_;
13163 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13164 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13165 					g_propagate_error (error, _inner_error0_);
13166 					_vala_iterable_unref0 (attrs);
13167 					return NULL;
13168 				} else {
13169 					_vala_iterable_unref0 (attrs);
13170 					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);
13171 					g_clear_error (&_inner_error0_);
13172 					return NULL;
13173 				}
13174 			}
13175 			_tmp31_ = _tmp28_;
13176 			_tmp28_ = NULL;
13177 			result = _tmp31_;
13178 			_vala_code_node_unref0 (_tmp28_);
13179 			_vala_iterable_unref0 (attrs);
13180 			return result;
13181 		}
13182 		case VALA_GENIE_TOKEN_TYPE_DEF:
13183 		{
13184 			ValaMethod* _tmp32_ = NULL;
13185 			ValaList* _tmp33_;
13186 			ValaMethod* _tmp34_;
13187 			ValaMethod* _tmp35_;
13188 			_tmp33_ = attrs;
13189 			_tmp34_ = vala_genie_parser_parse_method_declaration (self, _tmp33_, &_inner_error0_);
13190 			_tmp32_ = _tmp34_;
13191 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13192 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13193 					g_propagate_error (error, _inner_error0_);
13194 					_vala_iterable_unref0 (attrs);
13195 					return NULL;
13196 				} else {
13197 					_vala_iterable_unref0 (attrs);
13198 					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);
13199 					g_clear_error (&_inner_error0_);
13200 					return NULL;
13201 				}
13202 			}
13203 			_tmp35_ = _tmp32_;
13204 			_tmp32_ = NULL;
13205 			result = (ValaSymbol*) _tmp35_;
13206 			_vala_code_node_unref0 (_tmp32_);
13207 			_vala_iterable_unref0 (attrs);
13208 			return result;
13209 		}
13210 		case VALA_GENIE_TOKEN_TYPE_ENUM:
13211 		{
13212 			ValaSymbol* _tmp36_ = NULL;
13213 			ValaList* _tmp37_;
13214 			ValaSymbol* _tmp38_;
13215 			ValaSymbol* _tmp39_;
13216 			_tmp37_ = attrs;
13217 			_tmp38_ = vala_genie_parser_parse_enum_declaration (self, _tmp37_, &_inner_error0_);
13218 			_tmp36_ = _tmp38_;
13219 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13220 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13221 					g_propagate_error (error, _inner_error0_);
13222 					_vala_iterable_unref0 (attrs);
13223 					return NULL;
13224 				} else {
13225 					_vala_iterable_unref0 (attrs);
13226 					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);
13227 					g_clear_error (&_inner_error0_);
13228 					return NULL;
13229 				}
13230 			}
13231 			_tmp39_ = _tmp36_;
13232 			_tmp36_ = NULL;
13233 			result = _tmp39_;
13234 			_vala_code_node_unref0 (_tmp36_);
13235 			_vala_iterable_unref0 (attrs);
13236 			return result;
13237 		}
13238 		case VALA_GENIE_TOKEN_TYPE_ERRORDOMAIN:
13239 		{
13240 			ValaSymbol* _tmp40_ = NULL;
13241 			ValaList* _tmp41_;
13242 			ValaSymbol* _tmp42_;
13243 			ValaSymbol* _tmp43_;
13244 			_tmp41_ = attrs;
13245 			_tmp42_ = vala_genie_parser_parse_errordomain_declaration (self, _tmp41_, &_inner_error0_);
13246 			_tmp40_ = _tmp42_;
13247 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13248 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13249 					g_propagate_error (error, _inner_error0_);
13250 					_vala_iterable_unref0 (attrs);
13251 					return NULL;
13252 				} else {
13253 					_vala_iterable_unref0 (attrs);
13254 					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);
13255 					g_clear_error (&_inner_error0_);
13256 					return NULL;
13257 				}
13258 			}
13259 			_tmp43_ = _tmp40_;
13260 			_tmp40_ = NULL;
13261 			result = _tmp43_;
13262 			_vala_code_node_unref0 (_tmp40_);
13263 			_vala_iterable_unref0 (attrs);
13264 			return result;
13265 		}
13266 		case VALA_GENIE_TOKEN_TYPE_FINAL:
13267 		{
13268 			ValaDestructor* _tmp44_ = NULL;
13269 			ValaList* _tmp45_;
13270 			ValaDestructor* _tmp46_;
13271 			ValaDestructor* _tmp47_;
13272 			_tmp45_ = attrs;
13273 			_tmp46_ = vala_genie_parser_parse_destructor_declaration (self, _tmp45_, &_inner_error0_);
13274 			_tmp44_ = _tmp46_;
13275 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13276 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13277 					g_propagate_error (error, _inner_error0_);
13278 					_vala_iterable_unref0 (attrs);
13279 					return NULL;
13280 				} else {
13281 					_vala_iterable_unref0 (attrs);
13282 					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);
13283 					g_clear_error (&_inner_error0_);
13284 					return NULL;
13285 				}
13286 			}
13287 			_tmp47_ = _tmp44_;
13288 			_tmp44_ = NULL;
13289 			result = (ValaSymbol*) _tmp47_;
13290 			_vala_code_node_unref0 (_tmp44_);
13291 			_vala_iterable_unref0 (attrs);
13292 			return result;
13293 		}
13294 		case VALA_GENIE_TOKEN_TYPE_INTERFACE:
13295 		{
13296 			ValaSymbol* _tmp48_ = NULL;
13297 			ValaList* _tmp49_;
13298 			ValaSymbol* _tmp50_;
13299 			ValaSymbol* _tmp51_;
13300 			_tmp49_ = attrs;
13301 			_tmp50_ = vala_genie_parser_parse_interface_declaration (self, _tmp49_, &_inner_error0_);
13302 			_tmp48_ = _tmp50_;
13303 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13304 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13305 					g_propagate_error (error, _inner_error0_);
13306 					_vala_iterable_unref0 (attrs);
13307 					return NULL;
13308 				} else {
13309 					_vala_iterable_unref0 (attrs);
13310 					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);
13311 					g_clear_error (&_inner_error0_);
13312 					return NULL;
13313 				}
13314 			}
13315 			_tmp51_ = _tmp48_;
13316 			_tmp48_ = NULL;
13317 			result = _tmp51_;
13318 			_vala_code_node_unref0 (_tmp48_);
13319 			_vala_iterable_unref0 (attrs);
13320 			return result;
13321 		}
13322 		case VALA_GENIE_TOKEN_TYPE_NAMESPACE:
13323 		{
13324 			ValaNamespace* _tmp52_ = NULL;
13325 			ValaList* _tmp53_;
13326 			ValaNamespace* _tmp54_;
13327 			ValaNamespace* _tmp55_;
13328 			_tmp53_ = attrs;
13329 			_tmp54_ = vala_genie_parser_parse_namespace_declaration (self, _tmp53_, &_inner_error0_);
13330 			_tmp52_ = _tmp54_;
13331 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13332 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13333 					g_propagate_error (error, _inner_error0_);
13334 					_vala_iterable_unref0 (attrs);
13335 					return NULL;
13336 				} else {
13337 					_vala_iterable_unref0 (attrs);
13338 					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);
13339 					g_clear_error (&_inner_error0_);
13340 					return NULL;
13341 				}
13342 			}
13343 			_tmp55_ = _tmp52_;
13344 			_tmp52_ = NULL;
13345 			result = (ValaSymbol*) _tmp55_;
13346 			_vala_code_node_unref0 (_tmp52_);
13347 			_vala_iterable_unref0 (attrs);
13348 			return result;
13349 		}
13350 		case VALA_GENIE_TOKEN_TYPE_PROP:
13351 		{
13352 			ValaProperty* _tmp56_ = NULL;
13353 			ValaList* _tmp57_;
13354 			ValaProperty* _tmp58_;
13355 			ValaProperty* _tmp59_;
13356 			_tmp57_ = attrs;
13357 			_tmp58_ = vala_genie_parser_parse_property_declaration (self, _tmp57_, &_inner_error0_);
13358 			_tmp56_ = _tmp58_;
13359 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13360 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13361 					g_propagate_error (error, _inner_error0_);
13362 					_vala_iterable_unref0 (attrs);
13363 					return NULL;
13364 				} else {
13365 					_vala_iterable_unref0 (attrs);
13366 					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);
13367 					g_clear_error (&_inner_error0_);
13368 					return NULL;
13369 				}
13370 			}
13371 			_tmp59_ = _tmp56_;
13372 			_tmp56_ = NULL;
13373 			result = (ValaSymbol*) _tmp59_;
13374 			_vala_code_node_unref0 (_tmp56_);
13375 			_vala_iterable_unref0 (attrs);
13376 			return result;
13377 		}
13378 		case VALA_GENIE_TOKEN_TYPE_EVENT:
13379 		{
13380 			ValaSignal* _tmp60_ = NULL;
13381 			ValaList* _tmp61_;
13382 			ValaSignal* _tmp62_;
13383 			ValaSignal* _tmp63_;
13384 			_tmp61_ = attrs;
13385 			_tmp62_ = vala_genie_parser_parse_signal_declaration (self, _tmp61_, &_inner_error0_);
13386 			_tmp60_ = _tmp62_;
13387 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13388 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13389 					g_propagate_error (error, _inner_error0_);
13390 					_vala_iterable_unref0 (attrs);
13391 					return NULL;
13392 				} else {
13393 					_vala_iterable_unref0 (attrs);
13394 					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);
13395 					g_clear_error (&_inner_error0_);
13396 					return NULL;
13397 				}
13398 			}
13399 			_tmp63_ = _tmp60_;
13400 			_tmp60_ = NULL;
13401 			result = (ValaSymbol*) _tmp63_;
13402 			_vala_code_node_unref0 (_tmp60_);
13403 			_vala_iterable_unref0 (attrs);
13404 			return result;
13405 		}
13406 		case VALA_GENIE_TOKEN_TYPE_STRUCT:
13407 		{
13408 			ValaSymbol* _tmp64_ = NULL;
13409 			ValaList* _tmp65_;
13410 			ValaSymbol* _tmp66_;
13411 			ValaSymbol* _tmp67_;
13412 			_tmp65_ = attrs;
13413 			_tmp66_ = vala_genie_parser_parse_struct_declaration (self, _tmp65_, &_inner_error0_);
13414 			_tmp64_ = _tmp66_;
13415 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
13416 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13417 					g_propagate_error (error, _inner_error0_);
13418 					_vala_iterable_unref0 (attrs);
13419 					return NULL;
13420 				} else {
13421 					_vala_iterable_unref0 (attrs);
13422 					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);
13423 					g_clear_error (&_inner_error0_);
13424 					return NULL;
13425 				}
13426 			}
13427 			_tmp67_ = _tmp64_;
13428 			_tmp64_ = NULL;
13429 			result = _tmp67_;
13430 			_vala_code_node_unref0 (_tmp64_);
13431 			_vala_iterable_unref0 (attrs);
13432 			return result;
13433 		}
13434 		default:
13435 		{
13436 			ValaSourceLocation _tmp75_;
13437 			while (TRUE) {
13438 				gboolean _tmp68_ = FALSE;
13439 				gboolean _tmp69_ = FALSE;
13440 				if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOL) {
13441 					_tmp69_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_SEMICOLON;
13442 				} else {
13443 					_tmp69_ = FALSE;
13444 				}
13445 				if (_tmp69_) {
13446 					_tmp68_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOF;
13447 				} else {
13448 					_tmp68_ = FALSE;
13449 				}
13450 				if (!_tmp68_) {
13451 					break;
13452 				}
13453 				if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_COLON) {
13454 					ValaSourceLocation _tmp70_;
13455 					ValaField* _tmp71_ = NULL;
13456 					ValaList* _tmp72_;
13457 					ValaField* _tmp73_;
13458 					ValaField* _tmp74_;
13459 					_tmp70_ = begin;
13460 					vala_genie_parser_rollback (self, &_tmp70_);
13461 					_tmp72_ = attrs;
13462 					_tmp73_ = vala_genie_parser_parse_field_declaration (self, _tmp72_, &_inner_error0_);
13463 					_tmp71_ = _tmp73_;
13464 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
13465 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13466 							g_propagate_error (error, _inner_error0_);
13467 							_vala_iterable_unref0 (attrs);
13468 							return NULL;
13469 						} else {
13470 							_vala_iterable_unref0 (attrs);
13471 							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);
13472 							g_clear_error (&_inner_error0_);
13473 							return NULL;
13474 						}
13475 					}
13476 					_tmp74_ = _tmp71_;
13477 					_tmp71_ = NULL;
13478 					result = (ValaSymbol*) _tmp74_;
13479 					_vala_code_node_unref0 (_tmp71_);
13480 					_vala_iterable_unref0 (attrs);
13481 					return result;
13482 				} else {
13483 					vala_genie_parser_next (self);
13484 				}
13485 			}
13486 			_tmp75_ = begin;
13487 			vala_genie_parser_rollback (self, &_tmp75_);
13488 			break;
13489 		}
13490 	}
13491 	cur = vala_genie_parser_current (self);
13492 	_tmp76_ = self->priv->tokens;
13493 	_tmp76__length1 = self->priv->tokens_length1;
13494 	_tmp77_ = _tmp76_[self->priv->index - 1];
13495 	_tmp78_ = _tmp77_.type;
13496 	pre = _tmp78_;
13497 	_tmp79_ = cur;
13498 	_tmp80_ = vala_genie_token_type_to_string (_tmp79_);
13499 	_tmp81_ = pre;
13500 	_tmp82_ = vala_genie_token_type_to_string (_tmp81_);
13501 	_tmp83_ = g_error_new (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected declaration  but got %s with previous %s", _tmp80_, _tmp82_);
13502 	_inner_error0_ = _tmp83_;
13503 	if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13504 		g_propagate_error (error, _inner_error0_);
13505 		_vala_iterable_unref0 (attrs);
13506 		return NULL;
13507 	} else {
13508 		_vala_iterable_unref0 (attrs);
13509 		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);
13510 		g_clear_error (&_inner_error0_);
13511 		return NULL;
13512 	}
13513 	_vala_iterable_unref0 (attrs);
13514 }
13515 
13516 static void
vala_genie_parser_parse_declarations(ValaGenieParser * self,ValaSymbol * parent,gboolean root,GError ** error)13517 vala_genie_parser_parse_declarations (ValaGenieParser* self,
13518                                       ValaSymbol* parent,
13519                                       gboolean root,
13520                                       GError** error)
13521 {
13522 	GError* _inner_error0_ = NULL;
13523 	g_return_if_fail (self != NULL);
13524 	g_return_if_fail (parent != NULL);
13525 	if (!root) {
13526 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INDENT, &_inner_error0_);
13527 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
13528 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13529 				g_propagate_error (error, _inner_error0_);
13530 				return;
13531 			} else {
13532 				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);
13533 				g_clear_error (&_inner_error0_);
13534 				return;
13535 			}
13536 		}
13537 	}
13538 	while (TRUE) {
13539 		gboolean _tmp0_ = FALSE;
13540 		if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT) {
13541 			_tmp0_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOF;
13542 		} else {
13543 			_tmp0_ = FALSE;
13544 		}
13545 		if (!_tmp0_) {
13546 			break;
13547 		}
13548 		{
13549 			if (VALA_IS_NAMESPACE (parent)) {
13550 				vala_genie_parser_parse_namespace_member (self, G_TYPE_CHECK_INSTANCE_CAST (parent, VALA_TYPE_NAMESPACE, ValaNamespace), &_inner_error0_);
13551 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
13552 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13553 						goto __catch0_vala_parse_error;
13554 					}
13555 					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);
13556 					g_clear_error (&_inner_error0_);
13557 					return;
13558 				}
13559 			} else {
13560 				if (VALA_IS_CLASS (parent)) {
13561 					vala_genie_parser_parse_class_member (self, G_TYPE_CHECK_INSTANCE_CAST (parent, VALA_TYPE_CLASS, ValaClass), &_inner_error0_);
13562 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
13563 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13564 							goto __catch0_vala_parse_error;
13565 						}
13566 						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);
13567 						g_clear_error (&_inner_error0_);
13568 						return;
13569 					}
13570 				} else {
13571 					if (VALA_IS_STRUCT (parent)) {
13572 						vala_genie_parser_parse_struct_member (self, G_TYPE_CHECK_INSTANCE_CAST (parent, VALA_TYPE_STRUCT, ValaStruct), &_inner_error0_);
13573 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
13574 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13575 								goto __catch0_vala_parse_error;
13576 							}
13577 							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);
13578 							g_clear_error (&_inner_error0_);
13579 							return;
13580 						}
13581 					} else {
13582 						if (VALA_IS_INTERFACE (parent)) {
13583 							vala_genie_parser_parse_interface_member (self, G_TYPE_CHECK_INSTANCE_CAST (parent, VALA_TYPE_INTERFACE, ValaInterface), &_inner_error0_);
13584 							if (G_UNLIKELY (_inner_error0_ != NULL)) {
13585 								if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13586 									goto __catch0_vala_parse_error;
13587 								}
13588 								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);
13589 								g_clear_error (&_inner_error0_);
13590 								return;
13591 							}
13592 						}
13593 					}
13594 				}
13595 			}
13596 		}
13597 		goto __finally0;
13598 		__catch0_vala_parse_error:
13599 		{
13600 			GError* e = NULL;
13601 			GError* _tmp1_;
13602 			gint r = 0;
13603 			e = _inner_error0_;
13604 			_inner_error0_ = NULL;
13605 			_tmp1_ = e;
13606 			vala_genie_parser_report_parse_error (self, _tmp1_);
13607 			while (TRUE) {
13608 				r = (gint) vala_genie_parser_recover (self);
13609 				if (r == ((gint) VALA_GENIE_PARSER_RECOVERY_STATE_STATEMENT_BEGIN)) {
13610 					vala_genie_parser_next (self);
13611 				} else {
13612 					break;
13613 				}
13614 			}
13615 			if (r == ((gint) VALA_GENIE_PARSER_RECOVERY_STATE_EOF)) {
13616 				_g_error_free0 (e);
13617 				return;
13618 			}
13619 			_g_error_free0 (e);
13620 		}
13621 		__finally0:
13622 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
13623 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13624 				g_propagate_error (error, _inner_error0_);
13625 				return;
13626 			} else {
13627 				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);
13628 				g_clear_error (&_inner_error0_);
13629 				return;
13630 			}
13631 		}
13632 	}
13633 	if (!root) {
13634 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DEDENT)) {
13635 			ValaCodeContext* _tmp2_;
13636 			ValaReport* _tmp3_;
13637 			ValaReport* _tmp4_;
13638 			_tmp2_ = self->priv->context;
13639 			_tmp3_ = vala_code_context_get_report (_tmp2_);
13640 			_tmp4_ = _tmp3_;
13641 			if (vala_report_get_errors (_tmp4_) == 0) {
13642 				ValaSourceReference* _tmp5_;
13643 				ValaSourceReference* _tmp6_;
13644 				_tmp5_ = vala_genie_parser_get_current_src (self);
13645 				_tmp6_ = _tmp5_;
13646 				vala_report_error (_tmp6_, "expected dedent");
13647 				_vala_source_reference_unref0 (_tmp6_);
13648 			}
13649 		}
13650 	}
13651 }
13652 
13653 static ValaGenieParserRecoveryState
vala_genie_parser_recover(ValaGenieParser * self)13654 vala_genie_parser_recover (ValaGenieParser* self)
13655 {
13656 	ValaGenieParserRecoveryState result = 0;
13657 	g_return_val_if_fail (self != NULL, 0);
13658 	while (TRUE) {
13659 		if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOF)) {
13660 			break;
13661 		}
13662 		switch (vala_genie_parser_current (self)) {
13663 			case VALA_GENIE_TOKEN_TYPE_CLASS:
13664 			case VALA_GENIE_TOKEN_TYPE_CONST:
13665 			case VALA_GENIE_TOKEN_TYPE_CONSTRUCT:
13666 			case VALA_GENIE_TOKEN_TYPE_INIT:
13667 			case VALA_GENIE_TOKEN_TYPE_DEF:
13668 			case VALA_GENIE_TOKEN_TYPE_DELEGATE:
13669 			case VALA_GENIE_TOKEN_TYPE_ENUM:
13670 			case VALA_GENIE_TOKEN_TYPE_ERRORDOMAIN:
13671 			case VALA_GENIE_TOKEN_TYPE_FINAL:
13672 			case VALA_GENIE_TOKEN_TYPE_INTERFACE:
13673 			case VALA_GENIE_TOKEN_TYPE_NAMESPACE:
13674 			case VALA_GENIE_TOKEN_TYPE_PROP:
13675 			case VALA_GENIE_TOKEN_TYPE_EVENT:
13676 			case VALA_GENIE_TOKEN_TYPE_STRUCT:
13677 			{
13678 				result = VALA_GENIE_PARSER_RECOVERY_STATE_DECLARATION_BEGIN;
13679 				return result;
13680 			}
13681 			case VALA_GENIE_TOKEN_TYPE_BREAK:
13682 			case VALA_GENIE_TOKEN_TYPE_CASE:
13683 			case VALA_GENIE_TOKEN_TYPE_CONTINUE:
13684 			case VALA_GENIE_TOKEN_TYPE_DELETE:
13685 			case VALA_GENIE_TOKEN_TYPE_DO:
13686 			case VALA_GENIE_TOKEN_TYPE_FOR:
13687 			case VALA_GENIE_TOKEN_TYPE_IF:
13688 			case VALA_GENIE_TOKEN_TYPE_LOCK:
13689 			case VALA_GENIE_TOKEN_TYPE_RETURN:
13690 			case VALA_GENIE_TOKEN_TYPE_RAISE:
13691 			case VALA_GENIE_TOKEN_TYPE_TRY:
13692 			case VALA_GENIE_TOKEN_TYPE_VAR:
13693 			case VALA_GENIE_TOKEN_TYPE_WHILE:
13694 			case VALA_GENIE_TOKEN_TYPE_YIELD:
13695 			{
13696 				result = VALA_GENIE_PARSER_RECOVERY_STATE_STATEMENT_BEGIN;
13697 				return result;
13698 			}
13699 			default:
13700 			{
13701 				vala_genie_parser_next (self);
13702 				break;
13703 			}
13704 		}
13705 	}
13706 	result = VALA_GENIE_PARSER_RECOVERY_STATE_EOF;
13707 	return result;
13708 }
13709 
13710 static ValaNamespace*
vala_genie_parser_parse_namespace_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)13711 vala_genie_parser_parse_namespace_declaration (ValaGenieParser* self,
13712                                                ValaList* attrs,
13713                                                GError** error)
13714 {
13715 	ValaSourceLocation begin = {0};
13716 	ValaSourceLocation _tmp0_ = {0};
13717 	ValaUnresolvedSymbol* sym = NULL;
13718 	ValaUnresolvedSymbol* _tmp1_;
13719 	ValaNamespace* ns = NULL;
13720 	ValaUnresolvedSymbol* _tmp2_;
13721 	const gchar* _tmp3_;
13722 	const gchar* _tmp4_;
13723 	ValaSourceLocation _tmp5_;
13724 	ValaSourceReference* _tmp6_;
13725 	ValaSourceReference* _tmp7_;
13726 	ValaNamespace* _tmp8_;
13727 	ValaNamespace* _tmp9_;
13728 	ValaComment* _tmp10_;
13729 	ValaNamespace* _tmp13_;
13730 	ValaNamespace* _tmp14_;
13731 	ValaNamespace* _result_ = NULL;
13732 	ValaNamespace* _tmp15_;
13733 	ValaNamespace* _tmp16_;
13734 	GError* _inner_error0_ = NULL;
13735 	ValaNamespace* result = NULL;
13736 	g_return_val_if_fail (self != NULL, NULL);
13737 	vala_genie_parser_get_location (self, &_tmp0_);
13738 	begin = _tmp0_;
13739 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_NAMESPACE, &_inner_error0_);
13740 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
13741 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13742 			g_propagate_error (error, _inner_error0_);
13743 			return NULL;
13744 		} else {
13745 			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);
13746 			g_clear_error (&_inner_error0_);
13747 			return NULL;
13748 		}
13749 	}
13750 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
13751 	sym = _tmp1_;
13752 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
13753 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13754 			g_propagate_error (error, _inner_error0_);
13755 			return NULL;
13756 		} else {
13757 			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);
13758 			g_clear_error (&_inner_error0_);
13759 			return NULL;
13760 		}
13761 	}
13762 	_tmp2_ = sym;
13763 	_tmp3_ = vala_symbol_get_name ((ValaSymbol*) _tmp2_);
13764 	_tmp4_ = _tmp3_;
13765 	_tmp5_ = begin;
13766 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
13767 	_tmp7_ = _tmp6_;
13768 	_tmp8_ = vala_namespace_new (_tmp4_, _tmp7_);
13769 	_tmp9_ = _tmp8_;
13770 	_vala_source_reference_unref0 (_tmp7_);
13771 	ns = _tmp9_;
13772 	_tmp10_ = self->priv->comment;
13773 	if (_tmp10_ != NULL) {
13774 		ValaNamespace* _tmp11_;
13775 		ValaComment* _tmp12_;
13776 		_tmp11_ = ns;
13777 		_tmp12_ = self->priv->comment;
13778 		vala_namespace_add_comment (_tmp11_, _tmp12_);
13779 		_vala_comment_unref0 (self->priv->comment);
13780 		self->priv->comment = NULL;
13781 	}
13782 	_tmp13_ = ns;
13783 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp13_, attrs);
13784 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
13785 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
13786 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13787 			g_propagate_error (error, _inner_error0_);
13788 			_vala_code_node_unref0 (ns);
13789 			_vala_code_node_unref0 (sym);
13790 			return NULL;
13791 		} else {
13792 			_vala_code_node_unref0 (ns);
13793 			_vala_code_node_unref0 (sym);
13794 			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);
13795 			g_clear_error (&_inner_error0_);
13796 			return NULL;
13797 		}
13798 	}
13799 	_tmp14_ = ns;
13800 	vala_genie_parser_parse_declarations (self, (ValaSymbol*) _tmp14_, FALSE, &_inner_error0_);
13801 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
13802 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13803 			g_propagate_error (error, _inner_error0_);
13804 			_vala_code_node_unref0 (ns);
13805 			_vala_code_node_unref0 (sym);
13806 			return NULL;
13807 		} else {
13808 			_vala_code_node_unref0 (ns);
13809 			_vala_code_node_unref0 (sym);
13810 			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);
13811 			g_clear_error (&_inner_error0_);
13812 			return NULL;
13813 		}
13814 	}
13815 	_tmp15_ = ns;
13816 	_tmp16_ = _vala_code_node_ref0 (_tmp15_);
13817 	_result_ = _tmp16_;
13818 	while (TRUE) {
13819 		ValaUnresolvedSymbol* _tmp17_;
13820 		ValaUnresolvedSymbol* _tmp18_;
13821 		ValaUnresolvedSymbol* _tmp19_;
13822 		ValaUnresolvedSymbol* _tmp20_;
13823 		ValaUnresolvedSymbol* _tmp21_;
13824 		ValaUnresolvedSymbol* _tmp22_;
13825 		ValaUnresolvedSymbol* _tmp23_;
13826 		ValaUnresolvedSymbol* _tmp24_;
13827 		const gchar* _tmp25_;
13828 		const gchar* _tmp26_;
13829 		ValaNamespace* _tmp27_;
13830 		ValaSourceReference* _tmp28_;
13831 		ValaSourceReference* _tmp29_;
13832 		ValaNamespace* _tmp30_;
13833 		ValaNamespace* _tmp31_;
13834 		ValaNamespace* _tmp32_;
13835 		ValaNamespace* _tmp33_;
13836 		ValaNamespace* _tmp34_;
13837 		_tmp17_ = sym;
13838 		_tmp18_ = vala_unresolved_symbol_get_inner (_tmp17_);
13839 		_tmp19_ = _tmp18_;
13840 		if (!(_tmp19_ != NULL)) {
13841 			break;
13842 		}
13843 		_tmp20_ = sym;
13844 		_tmp21_ = vala_unresolved_symbol_get_inner (_tmp20_);
13845 		_tmp22_ = _tmp21_;
13846 		_tmp23_ = _vala_code_node_ref0 (_tmp22_);
13847 		_vala_code_node_unref0 (sym);
13848 		sym = _tmp23_;
13849 		_tmp24_ = sym;
13850 		_tmp25_ = vala_symbol_get_name ((ValaSymbol*) _tmp24_);
13851 		_tmp26_ = _tmp25_;
13852 		_tmp27_ = _result_;
13853 		_tmp28_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp27_);
13854 		_tmp29_ = _tmp28_;
13855 		_tmp30_ = vala_namespace_new (_tmp26_, _tmp29_);
13856 		_vala_code_node_unref0 (ns);
13857 		ns = _tmp30_;
13858 		_tmp31_ = ns;
13859 		_tmp32_ = _result_;
13860 		vala_symbol_add_namespace ((ValaSymbol*) _tmp31_, G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, VALA_TYPE_NAMESPACE, ValaNamespace));
13861 		_tmp33_ = ns;
13862 		_tmp34_ = _vala_code_node_ref0 (_tmp33_);
13863 		_vala_code_node_unref0 (_result_);
13864 		_result_ = _tmp34_;
13865 	}
13866 	result = _result_;
13867 	_vala_code_node_unref0 (ns);
13868 	_vala_code_node_unref0 (sym);
13869 	return result;
13870 }
13871 
13872 static void
vala_genie_parser_parse_namespace_member(ValaGenieParser * self,ValaNamespace * ns,GError ** error)13873 vala_genie_parser_parse_namespace_member (ValaGenieParser* self,
13874                                           ValaNamespace* ns,
13875                                           GError** error)
13876 {
13877 	ValaSymbol* sym = NULL;
13878 	ValaCodeContext* _tmp0_;
13879 	ValaNamespace* _tmp1_;
13880 	ValaNamespace* _tmp2_;
13881 	ValaSymbol* _tmp3_;
13882 	GError* _inner_error0_ = NULL;
13883 	g_return_if_fail (self != NULL);
13884 	g_return_if_fail (ns != NULL);
13885 	_tmp0_ = self->priv->context;
13886 	_tmp1_ = vala_code_context_get_root (_tmp0_);
13887 	_tmp2_ = _tmp1_;
13888 	_tmp3_ = vala_genie_parser_parse_declaration (self, ns == _tmp2_, &_inner_error0_);
13889 	sym = _tmp3_;
13890 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
13891 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
13892 			g_propagate_error (error, _inner_error0_);
13893 			return;
13894 		} else {
13895 			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);
13896 			g_clear_error (&_inner_error0_);
13897 			return;
13898 		}
13899 	}
13900 	if (VALA_IS_NAMESPACE (sym)) {
13901 		vala_symbol_add_namespace ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_NAMESPACE, ValaNamespace));
13902 	} else {
13903 		if (VALA_IS_CLASS (sym)) {
13904 			vala_symbol_add_class ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass));
13905 		} else {
13906 			if (VALA_IS_INTERFACE (sym)) {
13907 				vala_symbol_add_interface ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_INTERFACE, ValaInterface));
13908 			} else {
13909 				if (VALA_IS_STRUCT (sym)) {
13910 					vala_symbol_add_struct ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_STRUCT, ValaStruct));
13911 				} else {
13912 					if (VALA_IS_ENUM (sym)) {
13913 						vala_symbol_add_enum ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM, ValaEnum));
13914 					} else {
13915 						if (VALA_IS_ERROR_DOMAIN (sym)) {
13916 							vala_symbol_add_error_domain ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain));
13917 						} else {
13918 							if (VALA_IS_DELEGATE (sym)) {
13919 								vala_symbol_add_delegate ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_DELEGATE, ValaDelegate));
13920 							} else {
13921 								if (VALA_IS_METHOD (sym)) {
13922 									ValaMethod* method = NULL;
13923 									ValaMethod* _tmp4_;
13924 									ValaMemberBinding _tmp5_;
13925 									ValaMemberBinding _tmp6_;
13926 									ValaMethod* _tmp8_;
13927 									method = G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod);
13928 									_tmp4_ = method;
13929 									_tmp5_ = vala_method_get_binding (_tmp4_);
13930 									_tmp6_ = _tmp5_;
13931 									if (_tmp6_ == VALA_MEMBER_BINDING_INSTANCE) {
13932 										ValaMethod* _tmp7_;
13933 										_tmp7_ = method;
13934 										vala_method_set_binding (_tmp7_, VALA_MEMBER_BINDING_STATIC);
13935 									}
13936 									_tmp8_ = method;
13937 									vala_symbol_add_method ((ValaSymbol*) ns, _tmp8_);
13938 								} else {
13939 									if (VALA_IS_FIELD (sym)) {
13940 										ValaField* field = NULL;
13941 										ValaField* _tmp9_;
13942 										ValaMemberBinding _tmp10_;
13943 										ValaMemberBinding _tmp11_;
13944 										ValaField* _tmp13_;
13945 										field = G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField);
13946 										_tmp9_ = field;
13947 										_tmp10_ = vala_field_get_binding (_tmp9_);
13948 										_tmp11_ = _tmp10_;
13949 										if (_tmp11_ == VALA_MEMBER_BINDING_INSTANCE) {
13950 											ValaField* _tmp12_;
13951 											_tmp12_ = field;
13952 											vala_field_set_binding (_tmp12_, VALA_MEMBER_BINDING_STATIC);
13953 										}
13954 										_tmp13_ = field;
13955 										vala_symbol_add_field ((ValaSymbol*) ns, _tmp13_);
13956 									} else {
13957 										if (VALA_IS_CONSTANT (sym)) {
13958 											vala_symbol_add_constant ((ValaSymbol*) ns, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant));
13959 										} else {
13960 											ValaSourceReference* _tmp14_;
13961 											ValaSourceReference* _tmp15_;
13962 											_tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
13963 											_tmp15_ = _tmp14_;
13964 											vala_report_error (_tmp15_, "unexpected declaration in namespace");
13965 										}
13966 									}
13967 								}
13968 							}
13969 						}
13970 					}
13971 				}
13972 			}
13973 		}
13974 	}
13975 	_vala_code_node_unref0 (sym);
13976 }
13977 
13978 static void
vala_genie_parser_add_uses_clause(ValaGenieParser * self,ValaNamespace * ns,GError ** error)13979 vala_genie_parser_add_uses_clause (ValaGenieParser* self,
13980                                    ValaNamespace* ns,
13981                                    GError** error)
13982 {
13983 	ValaSourceLocation begin = {0};
13984 	ValaSourceLocation _tmp0_ = {0};
13985 	ValaUnresolvedSymbol* sym = NULL;
13986 	ValaUnresolvedSymbol* _tmp1_;
13987 	ValaUsingDirective* ns_ref = NULL;
13988 	ValaSourceLocation _tmp2_;
13989 	ValaSourceReference* _tmp3_;
13990 	ValaSourceReference* _tmp4_;
13991 	ValaUsingDirective* _tmp5_;
13992 	ValaUsingDirective* _tmp6_;
13993 	ValaGenieScanner* _tmp7_;
13994 	ValaSourceFile* _tmp8_;
13995 	ValaSourceFile* _tmp9_;
13996 	ValaUsingDirective* _tmp10_;
13997 	ValaUsingDirective* _tmp11_;
13998 	GError* _inner_error0_ = NULL;
13999 	g_return_if_fail (self != NULL);
14000 	g_return_if_fail (ns != NULL);
14001 	vala_genie_parser_get_location (self, &_tmp0_);
14002 	begin = _tmp0_;
14003 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
14004 	sym = _tmp1_;
14005 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14006 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14007 			g_propagate_error (error, _inner_error0_);
14008 			return;
14009 		} else {
14010 			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);
14011 			g_clear_error (&_inner_error0_);
14012 			return;
14013 		}
14014 	}
14015 	_tmp2_ = begin;
14016 	_tmp3_ = vala_genie_parser_get_src (self, &_tmp2_);
14017 	_tmp4_ = _tmp3_;
14018 	_tmp5_ = vala_using_directive_new ((ValaSymbol*) sym, _tmp4_);
14019 	_tmp6_ = _tmp5_;
14020 	_vala_source_reference_unref0 (_tmp4_);
14021 	ns_ref = _tmp6_;
14022 	_tmp7_ = self->priv->scanner;
14023 	_tmp8_ = vala_genie_scanner_get_source_file (_tmp7_);
14024 	_tmp9_ = _tmp8_;
14025 	_tmp10_ = ns_ref;
14026 	vala_source_file_add_using_directive (_tmp9_, _tmp10_);
14027 	_tmp11_ = ns_ref;
14028 	vala_namespace_add_using_directive (ns, _tmp11_);
14029 	_vala_code_node_unref0 (ns_ref);
14030 	_vala_code_node_unref0 (sym);
14031 }
14032 
14033 static void
vala_genie_parser_parse_using_directives(ValaGenieParser * self,ValaNamespace * ns,GError ** error)14034 vala_genie_parser_parse_using_directives (ValaGenieParser* self,
14035                                           ValaNamespace* ns,
14036                                           GError** error)
14037 {
14038 	GError* _inner_error0_ = NULL;
14039 	g_return_if_fail (self != NULL);
14040 	g_return_if_fail (ns != NULL);
14041 	while (TRUE) {
14042 		if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_USES)) {
14043 			break;
14044 		}
14045 		if (vala_genie_parser_accept_block (self)) {
14046 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INDENT, &_inner_error0_);
14047 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
14048 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14049 					g_propagate_error (error, _inner_error0_);
14050 					return;
14051 				} else {
14052 					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);
14053 					g_clear_error (&_inner_error0_);
14054 					return;
14055 				}
14056 			}
14057 			while (TRUE) {
14058 				gboolean _tmp0_ = FALSE;
14059 				if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT) {
14060 					_tmp0_ = vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_EOF;
14061 				} else {
14062 					_tmp0_ = FALSE;
14063 				}
14064 				if (!_tmp0_) {
14065 					break;
14066 				}
14067 				vala_genie_parser_add_uses_clause (self, ns, &_inner_error0_);
14068 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
14069 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14070 						g_propagate_error (error, _inner_error0_);
14071 						return;
14072 					} else {
14073 						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);
14074 						g_clear_error (&_inner_error0_);
14075 						return;
14076 					}
14077 				}
14078 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
14079 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
14080 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14081 						g_propagate_error (error, _inner_error0_);
14082 						return;
14083 					} else {
14084 						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);
14085 						g_clear_error (&_inner_error0_);
14086 						return;
14087 					}
14088 				}
14089 			}
14090 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
14091 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
14092 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14093 					g_propagate_error (error, _inner_error0_);
14094 					return;
14095 				} else {
14096 					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);
14097 					g_clear_error (&_inner_error0_);
14098 					return;
14099 				}
14100 			}
14101 		} else {
14102 			{
14103 				gboolean _tmp1_ = FALSE;
14104 				_tmp1_ = TRUE;
14105 				while (TRUE) {
14106 					if (!_tmp1_) {
14107 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
14108 							break;
14109 						}
14110 					}
14111 					_tmp1_ = FALSE;
14112 					vala_genie_parser_add_uses_clause (self, ns, &_inner_error0_);
14113 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
14114 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14115 							g_propagate_error (error, _inner_error0_);
14116 							return;
14117 						} else {
14118 							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);
14119 							g_clear_error (&_inner_error0_);
14120 							return;
14121 						}
14122 					}
14123 				}
14124 			}
14125 			vala_genie_parser_expect_terminator (self, &_inner_error0_);
14126 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
14127 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14128 					g_propagate_error (error, _inner_error0_);
14129 					return;
14130 				} else {
14131 					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);
14132 					g_clear_error (&_inner_error0_);
14133 					return;
14134 				}
14135 			}
14136 		}
14137 	}
14138 }
14139 
14140 static ValaSymbol*
vala_genie_parser_parse_class_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)14141 vala_genie_parser_parse_class_declaration (ValaGenieParser* self,
14142                                            ValaList* attrs,
14143                                            GError** error)
14144 {
14145 	ValaSourceLocation begin = {0};
14146 	ValaSourceLocation _tmp0_ = {0};
14147 	ValaGenieParserModifierFlags flags = 0;
14148 	ValaUnresolvedSymbol* sym = NULL;
14149 	ValaUnresolvedSymbol* _tmp1_;
14150 	ValaList* type_param_list = NULL;
14151 	ValaList* _tmp2_;
14152 	ValaArrayList* base_types = NULL;
14153 	GEqualFunc _tmp3_;
14154 	ValaArrayList* _tmp4_;
14155 	ValaClass* cl = NULL;
14156 	ValaUnresolvedSymbol* _tmp12_;
14157 	const gchar* _tmp13_;
14158 	const gchar* _tmp14_;
14159 	ValaSourceLocation _tmp15_;
14160 	ValaSourceReference* _tmp16_;
14161 	ValaSourceReference* _tmp17_;
14162 	ValaComment* _tmp18_;
14163 	ValaClass* _tmp19_;
14164 	ValaClass* _tmp20_;
14165 	ValaGenieParserModifierFlags _tmp21_;
14166 	ValaGenieParserModifierFlags _tmp29_;
14167 	ValaClass* _tmp31_;
14168 	ValaClass* _tmp54_;
14169 	const gchar* _tmp55_;
14170 	const gchar* _tmp56_;
14171 	gchar* _tmp57_;
14172 	ValaClass* _tmp58_;
14173 	gboolean _tmp59_ = FALSE;
14174 	ValaGenieScanner* _tmp60_;
14175 	ValaSourceFile* _tmp61_;
14176 	ValaSourceFile* _tmp62_;
14177 	ValaSourceFileType _tmp63_;
14178 	ValaSourceFileType _tmp64_;
14179 	ValaSymbol* _result_ = NULL;
14180 	ValaClass* _tmp88_;
14181 	ValaSymbol* _tmp89_;
14182 	GError* _inner_error0_ = NULL;
14183 	ValaSymbol* result = NULL;
14184 	g_return_val_if_fail (self != NULL, NULL);
14185 	vala_genie_parser_get_location (self, &_tmp0_);
14186 	begin = _tmp0_;
14187 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLASS, &_inner_error0_);
14188 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14189 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14190 			g_propagate_error (error, _inner_error0_);
14191 			return NULL;
14192 		} else {
14193 			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);
14194 			g_clear_error (&_inner_error0_);
14195 			return NULL;
14196 		}
14197 	}
14198 	flags = vala_genie_parser_parse_type_declaration_modifiers (self);
14199 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
14200 	sym = _tmp1_;
14201 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14202 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14203 			g_propagate_error (error, _inner_error0_);
14204 			return NULL;
14205 		} else {
14206 			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);
14207 			g_clear_error (&_inner_error0_);
14208 			return NULL;
14209 		}
14210 	}
14211 	_tmp2_ = vala_genie_parser_parse_type_parameter_list (self, &_inner_error0_);
14212 	type_param_list = _tmp2_;
14213 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14214 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14215 			g_propagate_error (error, _inner_error0_);
14216 			_vala_code_node_unref0 (sym);
14217 			return NULL;
14218 		} else {
14219 			_vala_code_node_unref0 (sym);
14220 			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);
14221 			g_clear_error (&_inner_error0_);
14222 			return NULL;
14223 		}
14224 	}
14225 	_tmp3_ = g_direct_equal;
14226 	_tmp4_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp3_);
14227 	base_types = _tmp4_;
14228 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
14229 		ValaDataType* type1 = NULL;
14230 		ValaDataType* _tmp5_;
14231 		ValaArrayList* _tmp6_;
14232 		ValaDataType* _tmp7_;
14233 		_tmp5_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
14234 		type1 = _tmp5_;
14235 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
14236 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14237 				g_propagate_error (error, _inner_error0_);
14238 				_vala_iterable_unref0 (base_types);
14239 				_vala_iterable_unref0 (type_param_list);
14240 				_vala_code_node_unref0 (sym);
14241 				return NULL;
14242 			} else {
14243 				_vala_iterable_unref0 (base_types);
14244 				_vala_iterable_unref0 (type_param_list);
14245 				_vala_code_node_unref0 (sym);
14246 				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);
14247 				g_clear_error (&_inner_error0_);
14248 				return NULL;
14249 			}
14250 		}
14251 		_tmp6_ = base_types;
14252 		_tmp7_ = type1;
14253 		vala_collection_add ((ValaCollection*) _tmp6_, _tmp7_);
14254 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_IMPLEMENTS)) {
14255 			{
14256 				gboolean _tmp8_ = FALSE;
14257 				_tmp8_ = TRUE;
14258 				while (TRUE) {
14259 					ValaDataType* type2 = NULL;
14260 					ValaDataType* _tmp9_;
14261 					ValaArrayList* _tmp10_;
14262 					ValaDataType* _tmp11_;
14263 					if (!_tmp8_) {
14264 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
14265 							break;
14266 						}
14267 					}
14268 					_tmp8_ = FALSE;
14269 					_tmp9_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
14270 					type2 = _tmp9_;
14271 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
14272 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14273 							g_propagate_error (error, _inner_error0_);
14274 							_vala_code_node_unref0 (type1);
14275 							_vala_iterable_unref0 (base_types);
14276 							_vala_iterable_unref0 (type_param_list);
14277 							_vala_code_node_unref0 (sym);
14278 							return NULL;
14279 						} else {
14280 							_vala_code_node_unref0 (type1);
14281 							_vala_iterable_unref0 (base_types);
14282 							_vala_iterable_unref0 (type_param_list);
14283 							_vala_code_node_unref0 (sym);
14284 							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);
14285 							g_clear_error (&_inner_error0_);
14286 							return NULL;
14287 						}
14288 					}
14289 					_tmp10_ = base_types;
14290 					_tmp11_ = type2;
14291 					vala_collection_add ((ValaCollection*) _tmp10_, _tmp11_);
14292 					_vala_code_node_unref0 (type2);
14293 				}
14294 			}
14295 		}
14296 		_vala_code_node_unref0 (type1);
14297 	}
14298 	vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL);
14299 	_tmp12_ = sym;
14300 	_tmp13_ = vala_symbol_get_name ((ValaSymbol*) _tmp12_);
14301 	_tmp14_ = _tmp13_;
14302 	_tmp15_ = begin;
14303 	_tmp16_ = vala_genie_parser_get_src (self, &_tmp15_);
14304 	_tmp17_ = _tmp16_;
14305 	_tmp18_ = self->priv->comment;
14306 	_tmp19_ = vala_class_new (_tmp14_, _tmp17_, _tmp18_);
14307 	_tmp20_ = _tmp19_;
14308 	_vala_source_reference_unref0 (_tmp17_);
14309 	cl = _tmp20_;
14310 	_tmp21_ = flags;
14311 	if ((_tmp21_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
14312 		ValaClass* _tmp22_;
14313 		_tmp22_ = cl;
14314 		vala_symbol_set_access ((ValaSymbol*) _tmp22_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
14315 	} else {
14316 		ValaGenieParserModifierFlags _tmp23_;
14317 		_tmp23_ = flags;
14318 		if ((_tmp23_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
14319 			ValaClass* _tmp24_;
14320 			_tmp24_ = cl;
14321 			vala_symbol_set_access ((ValaSymbol*) _tmp24_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
14322 		} else {
14323 			ValaClass* _tmp25_;
14324 			ValaUnresolvedSymbol* _tmp26_;
14325 			const gchar* _tmp27_;
14326 			const gchar* _tmp28_;
14327 			_tmp25_ = cl;
14328 			_tmp26_ = sym;
14329 			_tmp27_ = vala_symbol_get_name ((ValaSymbol*) _tmp26_);
14330 			_tmp28_ = _tmp27_;
14331 			vala_symbol_set_access ((ValaSymbol*) _tmp25_, vala_genie_parser_get_default_accessibility (self, _tmp28_));
14332 		}
14333 	}
14334 	_tmp29_ = flags;
14335 	if ((_tmp29_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) == VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) {
14336 		ValaClass* _tmp30_;
14337 		_tmp30_ = cl;
14338 		vala_class_set_is_abstract (_tmp30_, TRUE);
14339 	}
14340 	_tmp31_ = cl;
14341 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp31_, attrs);
14342 	{
14343 		ValaList* _type_param_list = NULL;
14344 		ValaList* _tmp32_;
14345 		ValaList* _tmp33_;
14346 		gint _type_param_size = 0;
14347 		ValaList* _tmp34_;
14348 		gint _tmp35_;
14349 		gint _tmp36_;
14350 		gint _type_param_index = 0;
14351 		_tmp32_ = type_param_list;
14352 		_tmp33_ = _vala_iterable_ref0 (_tmp32_);
14353 		_type_param_list = _tmp33_;
14354 		_tmp34_ = _type_param_list;
14355 		_tmp35_ = vala_collection_get_size ((ValaCollection*) _tmp34_);
14356 		_tmp36_ = _tmp35_;
14357 		_type_param_size = _tmp36_;
14358 		_type_param_index = -1;
14359 		while (TRUE) {
14360 			gint _tmp37_;
14361 			gint _tmp38_;
14362 			ValaTypeParameter* type_param = NULL;
14363 			ValaList* _tmp39_;
14364 			gpointer _tmp40_;
14365 			ValaClass* _tmp41_;
14366 			ValaTypeParameter* _tmp42_;
14367 			_type_param_index = _type_param_index + 1;
14368 			_tmp37_ = _type_param_index;
14369 			_tmp38_ = _type_param_size;
14370 			if (!(_tmp37_ < _tmp38_)) {
14371 				break;
14372 			}
14373 			_tmp39_ = _type_param_list;
14374 			_tmp40_ = vala_list_get (_tmp39_, _type_param_index);
14375 			type_param = (ValaTypeParameter*) _tmp40_;
14376 			_tmp41_ = cl;
14377 			_tmp42_ = type_param;
14378 			vala_object_type_symbol_add_type_parameter ((ValaObjectTypeSymbol*) _tmp41_, _tmp42_);
14379 			_vala_code_node_unref0 (type_param);
14380 		}
14381 		_vala_iterable_unref0 (_type_param_list);
14382 	}
14383 	{
14384 		ValaArrayList* _base_type_list = NULL;
14385 		ValaArrayList* _tmp43_;
14386 		ValaArrayList* _tmp44_;
14387 		gint _base_type_size = 0;
14388 		ValaArrayList* _tmp45_;
14389 		gint _tmp46_;
14390 		gint _tmp47_;
14391 		gint _base_type_index = 0;
14392 		_tmp43_ = base_types;
14393 		_tmp44_ = _vala_iterable_ref0 (_tmp43_);
14394 		_base_type_list = _tmp44_;
14395 		_tmp45_ = _base_type_list;
14396 		_tmp46_ = vala_collection_get_size ((ValaCollection*) _tmp45_);
14397 		_tmp47_ = _tmp46_;
14398 		_base_type_size = _tmp47_;
14399 		_base_type_index = -1;
14400 		while (TRUE) {
14401 			gint _tmp48_;
14402 			gint _tmp49_;
14403 			ValaDataType* base_type = NULL;
14404 			ValaArrayList* _tmp50_;
14405 			gpointer _tmp51_;
14406 			ValaClass* _tmp52_;
14407 			ValaDataType* _tmp53_;
14408 			_base_type_index = _base_type_index + 1;
14409 			_tmp48_ = _base_type_index;
14410 			_tmp49_ = _base_type_size;
14411 			if (!(_tmp48_ < _tmp49_)) {
14412 				break;
14413 			}
14414 			_tmp50_ = _base_type_list;
14415 			_tmp51_ = vala_list_get ((ValaList*) _tmp50_, _base_type_index);
14416 			base_type = (ValaDataType*) _tmp51_;
14417 			_tmp52_ = cl;
14418 			_tmp53_ = base_type;
14419 			vala_class_add_base_type (_tmp52_, _tmp53_);
14420 			_vala_code_node_unref0 (base_type);
14421 		}
14422 		_vala_iterable_unref0 (_base_type_list);
14423 	}
14424 	_tmp54_ = cl;
14425 	_tmp55_ = vala_symbol_get_name ((ValaSymbol*) _tmp54_);
14426 	_tmp56_ = _tmp55_;
14427 	_tmp57_ = g_strdup (_tmp56_);
14428 	_g_free0 (self->priv->class_name);
14429 	self->priv->class_name = _tmp57_;
14430 	_tmp58_ = cl;
14431 	vala_genie_parser_parse_declarations (self, (ValaSymbol*) _tmp58_, FALSE, &_inner_error0_);
14432 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14433 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14434 			g_propagate_error (error, _inner_error0_);
14435 			_vala_code_node_unref0 (cl);
14436 			_vala_iterable_unref0 (base_types);
14437 			_vala_iterable_unref0 (type_param_list);
14438 			_vala_code_node_unref0 (sym);
14439 			return NULL;
14440 		} else {
14441 			_vala_code_node_unref0 (cl);
14442 			_vala_iterable_unref0 (base_types);
14443 			_vala_iterable_unref0 (type_param_list);
14444 			_vala_code_node_unref0 (sym);
14445 			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);
14446 			g_clear_error (&_inner_error0_);
14447 			return NULL;
14448 		}
14449 	}
14450 	_tmp60_ = self->priv->scanner;
14451 	_tmp61_ = vala_genie_scanner_get_source_file (_tmp60_);
14452 	_tmp62_ = _tmp61_;
14453 	_tmp63_ = vala_source_file_get_file_type (_tmp62_);
14454 	_tmp64_ = _tmp63_;
14455 	if (_tmp64_ == VALA_SOURCE_FILE_TYPE_SOURCE) {
14456 		ValaClass* _tmp65_;
14457 		ValaCreationMethod* _tmp66_;
14458 		ValaCreationMethod* _tmp67_;
14459 		_tmp65_ = cl;
14460 		_tmp66_ = vala_class_get_default_construction_method (_tmp65_);
14461 		_tmp67_ = _tmp66_;
14462 		_tmp59_ = _tmp67_ == NULL;
14463 	} else {
14464 		_tmp59_ = FALSE;
14465 	}
14466 	if (_tmp59_) {
14467 		ValaCreationMethod* m = NULL;
14468 		ValaClass* _tmp68_;
14469 		const gchar* _tmp69_;
14470 		const gchar* _tmp70_;
14471 		ValaClass* _tmp71_;
14472 		ValaSourceReference* _tmp72_;
14473 		ValaSourceReference* _tmp73_;
14474 		ValaCreationMethod* _tmp74_;
14475 		ValaSymbolAccessibility _tmp75_ = 0;
14476 		ValaClass* _tmp76_;
14477 		gboolean _tmp77_;
14478 		gboolean _tmp78_;
14479 		ValaCreationMethod* _tmp79_;
14480 		ValaCreationMethod* _tmp80_;
14481 		ValaClass* _tmp81_;
14482 		ValaSourceReference* _tmp82_;
14483 		ValaSourceReference* _tmp83_;
14484 		ValaBlock* _tmp84_;
14485 		ValaBlock* _tmp85_;
14486 		ValaClass* _tmp86_;
14487 		ValaCreationMethod* _tmp87_;
14488 		_tmp68_ = cl;
14489 		_tmp69_ = vala_symbol_get_name ((ValaSymbol*) _tmp68_);
14490 		_tmp70_ = _tmp69_;
14491 		_tmp71_ = cl;
14492 		_tmp72_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp71_);
14493 		_tmp73_ = _tmp72_;
14494 		_tmp74_ = vala_creation_method_new (_tmp70_, NULL, _tmp73_, NULL);
14495 		m = _tmp74_;
14496 		_tmp76_ = cl;
14497 		_tmp77_ = vala_class_get_is_abstract (_tmp76_);
14498 		_tmp78_ = _tmp77_;
14499 		if (_tmp78_) {
14500 			_tmp75_ = VALA_SYMBOL_ACCESSIBILITY_PROTECTED;
14501 		} else {
14502 			_tmp75_ = VALA_SYMBOL_ACCESSIBILITY_PUBLIC;
14503 		}
14504 		_tmp79_ = m;
14505 		vala_symbol_set_access ((ValaSymbol*) _tmp79_, _tmp75_);
14506 		_tmp80_ = m;
14507 		_tmp81_ = cl;
14508 		_tmp82_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp81_);
14509 		_tmp83_ = _tmp82_;
14510 		_tmp84_ = vala_block_new (_tmp83_);
14511 		_tmp85_ = _tmp84_;
14512 		vala_subroutine_set_body ((ValaSubroutine*) _tmp80_, _tmp85_);
14513 		_vala_code_node_unref0 (_tmp85_);
14514 		_tmp86_ = cl;
14515 		_tmp87_ = m;
14516 		vala_symbol_add_method ((ValaSymbol*) _tmp86_, (ValaMethod*) _tmp87_);
14517 		_vala_code_node_unref0 (m);
14518 	}
14519 	_tmp88_ = cl;
14520 	_tmp89_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp88_);
14521 	_result_ = _tmp89_;
14522 	while (TRUE) {
14523 		ValaUnresolvedSymbol* _tmp90_;
14524 		ValaUnresolvedSymbol* _tmp91_;
14525 		ValaUnresolvedSymbol* _tmp92_;
14526 		ValaUnresolvedSymbol* _tmp93_;
14527 		ValaUnresolvedSymbol* _tmp94_;
14528 		ValaUnresolvedSymbol* _tmp95_;
14529 		ValaUnresolvedSymbol* _tmp96_;
14530 		ValaNamespace* ns = NULL;
14531 		ValaUnresolvedSymbol* _tmp97_;
14532 		const gchar* _tmp98_;
14533 		const gchar* _tmp99_;
14534 		ValaClass* _tmp100_;
14535 		ValaSourceReference* _tmp101_;
14536 		ValaSourceReference* _tmp102_;
14537 		ValaNamespace* _tmp103_;
14538 		ValaSymbol* _tmp104_;
14539 		ValaNamespace* _tmp109_;
14540 		ValaSymbol* _tmp110_;
14541 		_tmp90_ = sym;
14542 		_tmp91_ = vala_unresolved_symbol_get_inner (_tmp90_);
14543 		_tmp92_ = _tmp91_;
14544 		if (!(_tmp92_ != NULL)) {
14545 			break;
14546 		}
14547 		_tmp93_ = sym;
14548 		_tmp94_ = vala_unresolved_symbol_get_inner (_tmp93_);
14549 		_tmp95_ = _tmp94_;
14550 		_tmp96_ = _vala_code_node_ref0 (_tmp95_);
14551 		_vala_code_node_unref0 (sym);
14552 		sym = _tmp96_;
14553 		_tmp97_ = sym;
14554 		_tmp98_ = vala_symbol_get_name ((ValaSymbol*) _tmp97_);
14555 		_tmp99_ = _tmp98_;
14556 		_tmp100_ = cl;
14557 		_tmp101_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp100_);
14558 		_tmp102_ = _tmp101_;
14559 		_tmp103_ = vala_namespace_new (_tmp99_, _tmp102_);
14560 		ns = _tmp103_;
14561 		_tmp104_ = _result_;
14562 		if (VALA_IS_NAMESPACE (_tmp104_)) {
14563 			ValaNamespace* _tmp105_;
14564 			ValaSymbol* _tmp106_;
14565 			_tmp105_ = ns;
14566 			_tmp106_ = _result_;
14567 			vala_symbol_add_namespace ((ValaSymbol*) _tmp105_, G_TYPE_CHECK_INSTANCE_CAST (_tmp106_, VALA_TYPE_NAMESPACE, ValaNamespace));
14568 		} else {
14569 			ValaNamespace* _tmp107_;
14570 			ValaSymbol* _tmp108_;
14571 			_tmp107_ = ns;
14572 			_tmp108_ = _result_;
14573 			vala_symbol_add_class ((ValaSymbol*) _tmp107_, G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_CLASS, ValaClass));
14574 		}
14575 		_tmp109_ = ns;
14576 		_tmp110_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp109_);
14577 		_vala_code_node_unref0 (_result_);
14578 		_result_ = _tmp110_;
14579 		_vala_code_node_unref0 (ns);
14580 	}
14581 	result = _result_;
14582 	_vala_code_node_unref0 (cl);
14583 	_vala_iterable_unref0 (base_types);
14584 	_vala_iterable_unref0 (type_param_list);
14585 	_vala_code_node_unref0 (sym);
14586 	return result;
14587 }
14588 
14589 static void
vala_genie_parser_parse_class_member(ValaGenieParser * self,ValaClass * cl,GError ** error)14590 vala_genie_parser_parse_class_member (ValaGenieParser* self,
14591                                       ValaClass* cl,
14592                                       GError** error)
14593 {
14594 	ValaSymbol* sym = NULL;
14595 	ValaSymbol* _tmp0_;
14596 	GError* _inner_error0_ = NULL;
14597 	g_return_if_fail (self != NULL);
14598 	g_return_if_fail (cl != NULL);
14599 	_tmp0_ = vala_genie_parser_parse_declaration (self, FALSE, &_inner_error0_);
14600 	sym = _tmp0_;
14601 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14602 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14603 			g_propagate_error (error, _inner_error0_);
14604 			return;
14605 		} else {
14606 			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);
14607 			g_clear_error (&_inner_error0_);
14608 			return;
14609 		}
14610 	}
14611 	if (VALA_IS_CLASS (sym)) {
14612 		vala_symbol_add_class ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass));
14613 	} else {
14614 		if (VALA_IS_STRUCT (sym)) {
14615 			vala_symbol_add_struct ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_STRUCT, ValaStruct));
14616 		} else {
14617 			if (VALA_IS_ENUM (sym)) {
14618 				vala_symbol_add_enum ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM, ValaEnum));
14619 			} else {
14620 				if (VALA_IS_DELEGATE (sym)) {
14621 					vala_symbol_add_delegate ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_DELEGATE, ValaDelegate));
14622 				} else {
14623 					if (VALA_IS_METHOD (sym)) {
14624 						vala_symbol_add_method ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod));
14625 					} else {
14626 						if (VALA_IS_SIGNAL (sym)) {
14627 							vala_symbol_add_signal ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_SIGNAL, ValaSignal));
14628 						} else {
14629 							if (VALA_IS_FIELD (sym)) {
14630 								vala_symbol_add_field ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField));
14631 							} else {
14632 								if (VALA_IS_CONSTANT (sym)) {
14633 									vala_symbol_add_constant ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant));
14634 								} else {
14635 									if (VALA_IS_PROPERTY (sym)) {
14636 										vala_symbol_add_property ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_PROPERTY, ValaProperty));
14637 									} else {
14638 										if (VALA_IS_CONSTRUCTOR (sym)) {
14639 											vala_symbol_add_constructor ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTRUCTOR, ValaConstructor));
14640 										} else {
14641 											if (VALA_IS_DESTRUCTOR (sym)) {
14642 												vala_symbol_add_destructor ((ValaSymbol*) cl, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_DESTRUCTOR, ValaDestructor));
14643 											} else {
14644 												ValaSourceReference* _tmp1_;
14645 												ValaSourceReference* _tmp2_;
14646 												_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
14647 												_tmp2_ = _tmp1_;
14648 												vala_report_error (_tmp2_, "unexpected declaration in class");
14649 											}
14650 										}
14651 									}
14652 								}
14653 							}
14654 						}
14655 					}
14656 				}
14657 			}
14658 		}
14659 	}
14660 	_vala_code_node_unref0 (sym);
14661 }
14662 
14663 static ValaConstant*
vala_genie_parser_parse_constant_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)14664 vala_genie_parser_parse_constant_declaration (ValaGenieParser* self,
14665                                               ValaList* attrs,
14666                                               GError** error)
14667 {
14668 	ValaSourceLocation begin = {0};
14669 	ValaSourceLocation _tmp0_ = {0};
14670 	ValaGenieParserModifierFlags flags = 0;
14671 	gchar* id = NULL;
14672 	gchar* _tmp1_;
14673 	ValaDataType* type = NULL;
14674 	ValaDataType* _tmp2_;
14675 	ValaDataType* _tmp3_ = NULL;
14676 	ValaDataType* _tmp4_;
14677 	ValaDataType* _tmp5_;
14678 	ValaDataType* _tmp6_;
14679 	ValaExpression* initializer = NULL;
14680 	ValaArrayType* array_type = NULL;
14681 	ValaDataType* _tmp10_;
14682 	ValaArrayType* _tmp11_;
14683 	ValaConstant* c = NULL;
14684 	const gchar* _tmp15_;
14685 	ValaDataType* _tmp16_;
14686 	ValaExpression* _tmp17_;
14687 	ValaSourceLocation _tmp18_;
14688 	ValaSourceReference* _tmp19_;
14689 	ValaSourceReference* _tmp20_;
14690 	ValaComment* _tmp21_;
14691 	ValaConstant* _tmp22_;
14692 	ValaConstant* _tmp23_;
14693 	ValaConstant* _tmp24_;
14694 	const gchar* _tmp25_;
14695 	ValaGenieParserModifierFlags _tmp26_;
14696 	ValaGenieParserModifierFlags _tmp28_;
14697 	ValaConstant* _tmp30_;
14698 	ValaGenieParserModifierFlags _tmp31_;
14699 	GError* _inner_error0_ = NULL;
14700 	ValaConstant* result = NULL;
14701 	g_return_val_if_fail (self != NULL, NULL);
14702 	vala_genie_parser_get_location (self, &_tmp0_);
14703 	begin = _tmp0_;
14704 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CONST, &_inner_error0_);
14705 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14706 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14707 			g_propagate_error (error, _inner_error0_);
14708 			return NULL;
14709 		} else {
14710 			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);
14711 			g_clear_error (&_inner_error0_);
14712 			return NULL;
14713 		}
14714 	}
14715 	flags = vala_genie_parser_parse_member_declaration_modifiers (self);
14716 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
14717 	id = _tmp1_;
14718 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14719 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14720 			g_propagate_error (error, _inner_error0_);
14721 			return NULL;
14722 		} else {
14723 			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);
14724 			g_clear_error (&_inner_error0_);
14725 			return NULL;
14726 		}
14727 	}
14728 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
14729 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14730 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14731 			g_propagate_error (error, _inner_error0_);
14732 			_g_free0 (id);
14733 			return NULL;
14734 		} else {
14735 			_g_free0 (id);
14736 			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);
14737 			g_clear_error (&_inner_error0_);
14738 			return NULL;
14739 		}
14740 	}
14741 	_tmp2_ = vala_genie_parser_parse_type (self, FALSE, FALSE, &_inner_error0_);
14742 	type = _tmp2_;
14743 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14744 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14745 			g_propagate_error (error, _inner_error0_);
14746 			_g_free0 (id);
14747 			return NULL;
14748 		} else {
14749 			_g_free0 (id);
14750 			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);
14751 			g_clear_error (&_inner_error0_);
14752 			return NULL;
14753 		}
14754 	}
14755 	_tmp4_ = type;
14756 	_tmp5_ = vala_genie_parser_parse_inline_array_type (self, _tmp4_, &_inner_error0_);
14757 	_tmp3_ = _tmp5_;
14758 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14759 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14760 			g_propagate_error (error, _inner_error0_);
14761 			_vala_code_node_unref0 (type);
14762 			_g_free0 (id);
14763 			return NULL;
14764 		} else {
14765 			_vala_code_node_unref0 (type);
14766 			_g_free0 (id);
14767 			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);
14768 			g_clear_error (&_inner_error0_);
14769 			return NULL;
14770 		}
14771 	}
14772 	_tmp6_ = _tmp3_;
14773 	_tmp3_ = NULL;
14774 	_vala_code_node_unref0 (type);
14775 	type = _tmp6_;
14776 	initializer = NULL;
14777 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
14778 		ValaExpression* _tmp7_ = NULL;
14779 		ValaExpression* _tmp8_;
14780 		ValaExpression* _tmp9_;
14781 		_tmp8_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
14782 		_tmp7_ = _tmp8_;
14783 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
14784 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14785 				g_propagate_error (error, _inner_error0_);
14786 				_vala_code_node_unref0 (initializer);
14787 				_vala_code_node_unref0 (_tmp3_);
14788 				_vala_code_node_unref0 (type);
14789 				_g_free0 (id);
14790 				return NULL;
14791 			} else {
14792 				_vala_code_node_unref0 (initializer);
14793 				_vala_code_node_unref0 (_tmp3_);
14794 				_vala_code_node_unref0 (type);
14795 				_g_free0 (id);
14796 				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);
14797 				g_clear_error (&_inner_error0_);
14798 				return NULL;
14799 			}
14800 		}
14801 		_tmp9_ = _tmp7_;
14802 		_tmp7_ = NULL;
14803 		_vala_code_node_unref0 (initializer);
14804 		initializer = _tmp9_;
14805 		_vala_code_node_unref0 (_tmp7_);
14806 	}
14807 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
14808 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14809 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14810 			g_propagate_error (error, _inner_error0_);
14811 			_vala_code_node_unref0 (initializer);
14812 			_vala_code_node_unref0 (_tmp3_);
14813 			_vala_code_node_unref0 (type);
14814 			_g_free0 (id);
14815 			return NULL;
14816 		} else {
14817 			_vala_code_node_unref0 (initializer);
14818 			_vala_code_node_unref0 (_tmp3_);
14819 			_vala_code_node_unref0 (type);
14820 			_g_free0 (id);
14821 			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);
14822 			g_clear_error (&_inner_error0_);
14823 			return NULL;
14824 		}
14825 	}
14826 	_tmp10_ = type;
14827 	array_type = VALA_IS_ARRAY_TYPE (_tmp10_) ? ((ValaArrayType*) _tmp10_) : NULL;
14828 	_tmp11_ = array_type;
14829 	if (_tmp11_ != NULL) {
14830 		ValaArrayType* _tmp12_;
14831 		ValaDataType* _tmp13_;
14832 		ValaDataType* _tmp14_;
14833 		_tmp12_ = array_type;
14834 		_tmp13_ = vala_array_type_get_element_type (_tmp12_);
14835 		_tmp14_ = _tmp13_;
14836 		vala_data_type_set_value_owned (_tmp14_, FALSE);
14837 	}
14838 	_tmp15_ = id;
14839 	_tmp16_ = type;
14840 	_tmp17_ = initializer;
14841 	_tmp18_ = begin;
14842 	_tmp19_ = vala_genie_parser_get_src (self, &_tmp18_);
14843 	_tmp20_ = _tmp19_;
14844 	_tmp21_ = self->priv->comment;
14845 	_tmp22_ = vala_constant_new (_tmp15_, _tmp16_, _tmp17_, _tmp20_, _tmp21_);
14846 	_tmp23_ = _tmp22_;
14847 	_vala_source_reference_unref0 (_tmp20_);
14848 	c = _tmp23_;
14849 	_tmp24_ = c;
14850 	_tmp25_ = id;
14851 	vala_symbol_set_access ((ValaSymbol*) _tmp24_, vala_genie_parser_get_default_accessibility (self, _tmp25_));
14852 	_tmp26_ = flags;
14853 	if ((_tmp26_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) == VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) {
14854 		ValaConstant* _tmp27_;
14855 		_tmp27_ = c;
14856 		vala_symbol_set_is_extern ((ValaSymbol*) _tmp27_, TRUE);
14857 	}
14858 	_tmp28_ = flags;
14859 	if ((_tmp28_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) == VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) {
14860 		ValaConstant* _tmp29_;
14861 		_tmp29_ = c;
14862 		vala_symbol_set_hides ((ValaSymbol*) _tmp29_, TRUE);
14863 	}
14864 	_tmp30_ = c;
14865 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp30_, attrs);
14866 	_tmp31_ = flags;
14867 	if ((_tmp31_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) {
14868 		ValaConstant* _tmp32_;
14869 		ValaSourceReference* _tmp33_;
14870 		ValaSourceReference* _tmp34_;
14871 		_tmp32_ = c;
14872 		_tmp33_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp32_);
14873 		_tmp34_ = _tmp33_;
14874 		vala_report_warning (_tmp34_, "the modifier `static' is not applicable to constants");
14875 	}
14876 	result = c;
14877 	_vala_code_node_unref0 (initializer);
14878 	_vala_code_node_unref0 (_tmp3_);
14879 	_vala_code_node_unref0 (type);
14880 	_g_free0 (id);
14881 	return result;
14882 }
14883 
14884 static ValaField*
vala_genie_parser_parse_field_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)14885 vala_genie_parser_parse_field_declaration (ValaGenieParser* self,
14886                                            ValaList* attrs,
14887                                            GError** error)
14888 {
14889 	ValaSourceLocation begin = {0};
14890 	ValaSourceLocation _tmp0_ = {0};
14891 	gchar* id = NULL;
14892 	gchar* _tmp1_;
14893 	ValaGenieParserModifierFlags flags = 0;
14894 	ValaDataType* type = NULL;
14895 	ValaDataType* _tmp2_;
14896 	ValaDataType* _tmp3_ = NULL;
14897 	ValaDataType* _tmp4_;
14898 	ValaDataType* _tmp5_;
14899 	ValaDataType* _tmp6_;
14900 	ValaField* f = NULL;
14901 	const gchar* _tmp7_;
14902 	ValaDataType* _tmp8_;
14903 	ValaSourceLocation _tmp9_;
14904 	ValaSourceReference* _tmp10_;
14905 	ValaSourceReference* _tmp11_;
14906 	ValaComment* _tmp12_;
14907 	ValaField* _tmp13_;
14908 	ValaField* _tmp14_;
14909 	gboolean _tmp15_ = FALSE;
14910 	gboolean _tmp16_ = FALSE;
14911 	ValaGenieParserModifierFlags _tmp17_;
14912 	ValaGenieParserModifierFlags _tmp23_;
14913 	ValaField* _tmp29_;
14914 	ValaGenieParserModifierFlags _tmp30_;
14915 	ValaGenieParserModifierFlags _tmp32_;
14916 	ValaGenieParserModifierFlags _tmp37_;
14917 	GError* _inner_error0_ = NULL;
14918 	ValaField* result = NULL;
14919 	g_return_val_if_fail (self != NULL, NULL);
14920 	vala_genie_parser_get_location (self, &_tmp0_);
14921 	begin = _tmp0_;
14922 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
14923 	id = _tmp1_;
14924 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14925 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14926 			g_propagate_error (error, _inner_error0_);
14927 			return NULL;
14928 		} else {
14929 			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);
14930 			g_clear_error (&_inner_error0_);
14931 			return NULL;
14932 		}
14933 	}
14934 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
14935 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14936 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14937 			g_propagate_error (error, _inner_error0_);
14938 			_g_free0 (id);
14939 			return NULL;
14940 		} else {
14941 			_g_free0 (id);
14942 			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);
14943 			g_clear_error (&_inner_error0_);
14944 			return NULL;
14945 		}
14946 	}
14947 	flags = vala_genie_parser_parse_member_declaration_modifiers (self);
14948 	_tmp2_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
14949 	type = _tmp2_;
14950 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14951 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14952 			g_propagate_error (error, _inner_error0_);
14953 			_g_free0 (id);
14954 			return NULL;
14955 		} else {
14956 			_g_free0 (id);
14957 			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);
14958 			g_clear_error (&_inner_error0_);
14959 			return NULL;
14960 		}
14961 	}
14962 	_tmp4_ = type;
14963 	_tmp5_ = vala_genie_parser_parse_inline_array_type (self, _tmp4_, &_inner_error0_);
14964 	_tmp3_ = _tmp5_;
14965 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
14966 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
14967 			g_propagate_error (error, _inner_error0_);
14968 			_vala_code_node_unref0 (type);
14969 			_g_free0 (id);
14970 			return NULL;
14971 		} else {
14972 			_vala_code_node_unref0 (type);
14973 			_g_free0 (id);
14974 			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);
14975 			g_clear_error (&_inner_error0_);
14976 			return NULL;
14977 		}
14978 	}
14979 	_tmp6_ = _tmp3_;
14980 	_tmp3_ = NULL;
14981 	_vala_code_node_unref0 (type);
14982 	type = _tmp6_;
14983 	_tmp7_ = id;
14984 	_tmp8_ = type;
14985 	_tmp9_ = begin;
14986 	_tmp10_ = vala_genie_parser_get_src (self, &_tmp9_);
14987 	_tmp11_ = _tmp10_;
14988 	_tmp12_ = self->priv->comment;
14989 	_tmp13_ = vala_field_new (_tmp7_, _tmp8_, NULL, _tmp11_, _tmp12_);
14990 	_tmp14_ = _tmp13_;
14991 	_vala_source_reference_unref0 (_tmp11_);
14992 	f = _tmp14_;
14993 	_tmp17_ = flags;
14994 	if ((_tmp17_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) == VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) {
14995 		_tmp16_ = TRUE;
14996 	} else {
14997 		ValaGenieParserModifierFlags _tmp18_;
14998 		_tmp18_ = flags;
14999 		_tmp16_ = (_tmp18_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) == VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL;
15000 	}
15001 	if (_tmp16_) {
15002 		_tmp15_ = TRUE;
15003 	} else {
15004 		ValaGenieParserModifierFlags _tmp19_;
15005 		_tmp19_ = flags;
15006 		_tmp15_ = (_tmp19_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE;
15007 	}
15008 	if (_tmp15_) {
15009 		ValaField* _tmp20_;
15010 		ValaSourceReference* _tmp21_;
15011 		ValaSourceReference* _tmp22_;
15012 		_tmp20_ = f;
15013 		_tmp21_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp20_);
15014 		_tmp22_ = _tmp21_;
15015 		vala_report_error (_tmp22_, "abstract, virtual, and override modifiers are not applicable to fields");
15016 	}
15017 	_tmp23_ = flags;
15018 	if ((_tmp23_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
15019 		ValaField* _tmp24_;
15020 		_tmp24_ = f;
15021 		vala_symbol_set_access ((ValaSymbol*) _tmp24_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
15022 	} else {
15023 		ValaGenieParserModifierFlags _tmp25_;
15024 		_tmp25_ = flags;
15025 		if ((_tmp25_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
15026 			ValaField* _tmp26_;
15027 			_tmp26_ = f;
15028 			vala_symbol_set_access ((ValaSymbol*) _tmp26_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
15029 		} else {
15030 			ValaField* _tmp27_;
15031 			const gchar* _tmp28_;
15032 			_tmp27_ = f;
15033 			_tmp28_ = id;
15034 			vala_symbol_set_access ((ValaSymbol*) _tmp27_, vala_genie_parser_get_default_accessibility (self, _tmp28_));
15035 		}
15036 	}
15037 	_tmp29_ = f;
15038 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp29_, attrs);
15039 	_tmp30_ = flags;
15040 	if ((_tmp30_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) == VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) {
15041 		ValaField* _tmp31_;
15042 		_tmp31_ = f;
15043 		vala_symbol_set_is_extern ((ValaSymbol*) _tmp31_, TRUE);
15044 	}
15045 	_tmp32_ = flags;
15046 	if ((_tmp32_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) == VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) {
15047 		ValaField* _tmp33_;
15048 		_tmp33_ = f;
15049 		vala_symbol_set_hides ((ValaSymbol*) _tmp33_, TRUE);
15050 	}
15051 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
15052 		ValaExpression* _tmp34_ = NULL;
15053 		ValaExpression* _tmp35_;
15054 		ValaField* _tmp36_;
15055 		_tmp35_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
15056 		_tmp34_ = _tmp35_;
15057 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
15058 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15059 				g_propagate_error (error, _inner_error0_);
15060 				_vala_code_node_unref0 (f);
15061 				_vala_code_node_unref0 (_tmp3_);
15062 				_vala_code_node_unref0 (type);
15063 				_g_free0 (id);
15064 				return NULL;
15065 			} else {
15066 				_vala_code_node_unref0 (f);
15067 				_vala_code_node_unref0 (_tmp3_);
15068 				_vala_code_node_unref0 (type);
15069 				_g_free0 (id);
15070 				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);
15071 				g_clear_error (&_inner_error0_);
15072 				return NULL;
15073 			}
15074 		}
15075 		_tmp36_ = f;
15076 		vala_variable_set_initializer ((ValaVariable*) _tmp36_, _tmp34_);
15077 		_vala_code_node_unref0 (_tmp34_);
15078 	}
15079 	_tmp37_ = flags;
15080 	if ((_tmp37_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) {
15081 		ValaField* _tmp38_;
15082 		_tmp38_ = f;
15083 		vala_field_set_binding (_tmp38_, VALA_MEMBER_BINDING_STATIC);
15084 	} else {
15085 		ValaGenieParserModifierFlags _tmp39_;
15086 		_tmp39_ = flags;
15087 		if ((_tmp39_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) == VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) {
15088 			ValaField* _tmp40_;
15089 			_tmp40_ = f;
15090 			vala_field_set_binding (_tmp40_, VALA_MEMBER_BINDING_CLASS);
15091 		}
15092 	}
15093 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
15094 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15095 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15096 			g_propagate_error (error, _inner_error0_);
15097 			_vala_code_node_unref0 (f);
15098 			_vala_code_node_unref0 (_tmp3_);
15099 			_vala_code_node_unref0 (type);
15100 			_g_free0 (id);
15101 			return NULL;
15102 		} else {
15103 			_vala_code_node_unref0 (f);
15104 			_vala_code_node_unref0 (_tmp3_);
15105 			_vala_code_node_unref0 (type);
15106 			_g_free0 (id);
15107 			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);
15108 			g_clear_error (&_inner_error0_);
15109 			return NULL;
15110 		}
15111 	}
15112 	result = f;
15113 	_vala_code_node_unref0 (_tmp3_);
15114 	_vala_code_node_unref0 (type);
15115 	_g_free0 (id);
15116 	return result;
15117 }
15118 
15119 static ValaInitializerList*
vala_genie_parser_parse_initializer(ValaGenieParser * self,GError ** error)15120 vala_genie_parser_parse_initializer (ValaGenieParser* self,
15121                                      GError** error)
15122 {
15123 	ValaSourceLocation begin = {0};
15124 	ValaSourceLocation _tmp0_ = {0};
15125 	ValaInitializerList* initializer = NULL;
15126 	ValaSourceLocation _tmp1_;
15127 	ValaSourceReference* _tmp2_;
15128 	ValaSourceReference* _tmp3_;
15129 	ValaInitializerList* _tmp4_;
15130 	ValaInitializerList* _tmp5_;
15131 	GError* _inner_error0_ = NULL;
15132 	ValaInitializerList* result = NULL;
15133 	g_return_val_if_fail (self != NULL, NULL);
15134 	vala_genie_parser_get_location (self, &_tmp0_);
15135 	begin = _tmp0_;
15136 	if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS)) {
15137 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_BRACE, &_inner_error0_);
15138 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
15139 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15140 				g_propagate_error (error, _inner_error0_);
15141 				return NULL;
15142 			} else {
15143 				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);
15144 				g_clear_error (&_inner_error0_);
15145 				return NULL;
15146 			}
15147 		}
15148 	}
15149 	_tmp1_ = begin;
15150 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
15151 	_tmp3_ = _tmp2_;
15152 	_tmp4_ = vala_initializer_list_new (_tmp3_);
15153 	_tmp5_ = _tmp4_;
15154 	_vala_source_reference_unref0 (_tmp3_);
15155 	initializer = _tmp5_;
15156 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT) {
15157 		{
15158 			gboolean _tmp6_ = FALSE;
15159 			_tmp6_ = TRUE;
15160 			while (TRUE) {
15161 				ValaExpression* init = NULL;
15162 				ValaExpression* _tmp7_;
15163 				ValaInitializerList* _tmp8_;
15164 				ValaExpression* _tmp9_;
15165 				if (!_tmp6_) {
15166 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
15167 						break;
15168 					}
15169 				}
15170 				_tmp6_ = FALSE;
15171 				_tmp7_ = vala_genie_parser_parse_argument (self, &_inner_error0_);
15172 				init = _tmp7_;
15173 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
15174 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15175 						g_propagate_error (error, _inner_error0_);
15176 						_vala_code_node_unref0 (initializer);
15177 						return NULL;
15178 					} else {
15179 						_vala_code_node_unref0 (initializer);
15180 						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);
15181 						g_clear_error (&_inner_error0_);
15182 						return NULL;
15183 					}
15184 				}
15185 				_tmp8_ = initializer;
15186 				_tmp9_ = init;
15187 				vala_initializer_list_append (_tmp8_, _tmp9_);
15188 				_vala_code_node_unref0 (init);
15189 			}
15190 		}
15191 	}
15192 	if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS)) {
15193 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_BRACE, &_inner_error0_);
15194 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
15195 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15196 				g_propagate_error (error, _inner_error0_);
15197 				_vala_code_node_unref0 (initializer);
15198 				return NULL;
15199 			} else {
15200 				_vala_code_node_unref0 (initializer);
15201 				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);
15202 				g_clear_error (&_inner_error0_);
15203 				return NULL;
15204 			}
15205 		}
15206 	}
15207 	result = initializer;
15208 	return result;
15209 }
15210 
15211 static ValaMethod*
vala_genie_parser_parse_main_method_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)15212 vala_genie_parser_parse_main_method_declaration (ValaGenieParser* self,
15213                                                  ValaList* attrs,
15214                                                  GError** error)
15215 {
15216 	ValaSourceLocation begin = {0};
15217 	ValaSourceLocation _tmp0_ = {0};
15218 	ValaDataType* type = NULL;
15219 	ValaMethod* method = NULL;
15220 	ValaDataType* _tmp16_;
15221 	ValaSourceLocation _tmp17_;
15222 	ValaSourceReference* _tmp18_;
15223 	ValaSourceReference* _tmp19_;
15224 	ValaComment* _tmp20_;
15225 	ValaMethod* _tmp21_;
15226 	ValaMethod* _tmp22_;
15227 	ValaMethod* _tmp23_;
15228 	ValaMethod* _tmp24_;
15229 	ValaMethod* _tmp25_;
15230 	ValaUnresolvedSymbol* sym = NULL;
15231 	ValaSourceLocation _tmp26_;
15232 	ValaSourceReference* _tmp27_;
15233 	ValaSourceReference* _tmp28_;
15234 	ValaUnresolvedSymbol* _tmp29_;
15235 	ValaUnresolvedSymbol* _tmp30_;
15236 	ValaUnresolvedSymbol* _tmp31_;
15237 	ValaSourceLocation _tmp32_;
15238 	ValaSourceReference* _tmp33_;
15239 	ValaSourceReference* _tmp34_;
15240 	ValaUnresolvedType* _tmp35_;
15241 	ValaDataType* _tmp36_;
15242 	ValaDataType* _tmp37_;
15243 	ValaSourceLocation _tmp38_;
15244 	ValaSourceReference* _tmp39_;
15245 	ValaSourceReference* _tmp40_;
15246 	ValaArrayType* _tmp41_;
15247 	ValaDataType* _tmp42_;
15248 	ValaParameter* param = NULL;
15249 	ValaDataType* _tmp43_;
15250 	ValaSourceLocation _tmp44_;
15251 	ValaSourceReference* _tmp45_;
15252 	ValaSourceReference* _tmp46_;
15253 	ValaParameter* _tmp47_;
15254 	ValaParameter* _tmp48_;
15255 	ValaMethod* _tmp49_;
15256 	ValaParameter* _tmp50_;
15257 	GError* _inner_error0_ = NULL;
15258 	ValaMethod* result = NULL;
15259 	g_return_val_if_fail (self != NULL, NULL);
15260 	vala_genie_parser_get_location (self, &_tmp0_);
15261 	begin = _tmp0_;
15262 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INIT, &_inner_error0_);
15263 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15264 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15265 			g_propagate_error (error, _inner_error0_);
15266 			_vala_code_node_unref0 (type);
15267 			return NULL;
15268 		} else {
15269 			_vala_code_node_unref0 (type);
15270 			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);
15271 			g_clear_error (&_inner_error0_);
15272 			return NULL;
15273 		}
15274 	}
15275 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
15276 		ValaDataType* _tmp1_ = NULL;
15277 		ValaDataType* _tmp2_;
15278 		ValaDataType* _tmp3_;
15279 		ValaDataType* _tmp4_;
15280 		gchar* _tmp5_;
15281 		gchar* _tmp6_;
15282 		gboolean _tmp7_;
15283 		_tmp2_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
15284 		_tmp1_ = _tmp2_;
15285 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
15286 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15287 				g_propagate_error (error, _inner_error0_);
15288 				_vala_code_node_unref0 (type);
15289 				return NULL;
15290 			} else {
15291 				_vala_code_node_unref0 (type);
15292 				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);
15293 				g_clear_error (&_inner_error0_);
15294 				return NULL;
15295 			}
15296 		}
15297 		_tmp3_ = _tmp1_;
15298 		_tmp1_ = NULL;
15299 		_vala_code_node_unref0 (type);
15300 		type = _tmp3_;
15301 		_tmp4_ = type;
15302 		_tmp5_ = vala_code_node_to_string ((ValaCodeNode*) _tmp4_);
15303 		_tmp6_ = _tmp5_;
15304 		_tmp7_ = g_strcmp0 (_tmp6_, "int") != 0;
15305 		_g_free0 (_tmp6_);
15306 		if (_tmp7_) {
15307 			ValaDataType* _tmp8_;
15308 			gchar* _tmp9_;
15309 			gchar* _tmp10_;
15310 			gchar* _tmp11_;
15311 			gchar* _tmp12_;
15312 			GError* _tmp13_;
15313 			GError* _tmp14_;
15314 			_tmp8_ = type;
15315 			_tmp9_ = vala_code_node_to_string ((ValaCodeNode*) _tmp8_);
15316 			_tmp10_ = _tmp9_;
15317 			_tmp11_ = g_strdup_printf ("main `init' must return void or `int', but got `%s'", _tmp10_);
15318 			_tmp12_ = _tmp11_;
15319 			_tmp13_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, _tmp12_);
15320 			_tmp14_ = _tmp13_;
15321 			_g_free0 (_tmp12_);
15322 			_g_free0 (_tmp10_);
15323 			_inner_error0_ = _tmp14_;
15324 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15325 				g_propagate_error (error, _inner_error0_);
15326 				_vala_code_node_unref0 (_tmp1_);
15327 				_vala_code_node_unref0 (type);
15328 				return NULL;
15329 			} else {
15330 				_vala_code_node_unref0 (_tmp1_);
15331 				_vala_code_node_unref0 (type);
15332 				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);
15333 				g_clear_error (&_inner_error0_);
15334 				return NULL;
15335 			}
15336 		}
15337 		_vala_code_node_unref0 (_tmp1_);
15338 	} else {
15339 		ValaVoidType* _tmp15_;
15340 		_tmp15_ = vala_void_type_new (NULL);
15341 		_vala_code_node_unref0 (type);
15342 		type = (ValaDataType*) _tmp15_;
15343 	}
15344 	_tmp16_ = type;
15345 	_tmp17_ = begin;
15346 	_tmp18_ = vala_genie_parser_get_src (self, &_tmp17_);
15347 	_tmp19_ = _tmp18_;
15348 	_tmp20_ = self->priv->comment;
15349 	_tmp21_ = vala_method_new ("main", _tmp16_, _tmp19_, _tmp20_);
15350 	_tmp22_ = _tmp21_;
15351 	_vala_source_reference_unref0 (_tmp19_);
15352 	method = _tmp22_;
15353 	_tmp23_ = method;
15354 	vala_symbol_set_access ((ValaSymbol*) _tmp23_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
15355 	_tmp24_ = method;
15356 	vala_method_set_binding (_tmp24_, VALA_MEMBER_BINDING_STATIC);
15357 	_tmp25_ = method;
15358 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp25_, attrs);
15359 	_tmp26_ = begin;
15360 	_tmp27_ = vala_genie_parser_get_src (self, &_tmp26_);
15361 	_tmp28_ = _tmp27_;
15362 	_tmp29_ = vala_unresolved_symbol_new (NULL, "string", _tmp28_);
15363 	_tmp30_ = _tmp29_;
15364 	_vala_source_reference_unref0 (_tmp28_);
15365 	sym = _tmp30_;
15366 	_tmp31_ = sym;
15367 	_tmp32_ = begin;
15368 	_tmp33_ = vala_genie_parser_get_src (self, &_tmp32_);
15369 	_tmp34_ = _tmp33_;
15370 	_tmp35_ = vala_unresolved_type_new_from_symbol (_tmp31_, _tmp34_);
15371 	_vala_code_node_unref0 (type);
15372 	type = (ValaDataType*) _tmp35_;
15373 	_vala_source_reference_unref0 (_tmp34_);
15374 	_tmp36_ = type;
15375 	vala_data_type_set_value_owned (_tmp36_, TRUE);
15376 	_tmp37_ = type;
15377 	_tmp38_ = begin;
15378 	_tmp39_ = vala_genie_parser_get_src (self, &_tmp38_);
15379 	_tmp40_ = _tmp39_;
15380 	_tmp41_ = vala_array_type_new (_tmp37_, 1, _tmp40_);
15381 	_vala_code_node_unref0 (type);
15382 	type = (ValaDataType*) _tmp41_;
15383 	_vala_source_reference_unref0 (_tmp40_);
15384 	_tmp42_ = type;
15385 	vala_data_type_set_nullable (_tmp42_, FALSE);
15386 	_tmp43_ = type;
15387 	_tmp44_ = begin;
15388 	_tmp45_ = vala_genie_parser_get_src (self, &_tmp44_);
15389 	_tmp46_ = _tmp45_;
15390 	_tmp47_ = vala_parameter_new ("args", _tmp43_, _tmp46_);
15391 	_tmp48_ = _tmp47_;
15392 	_vala_source_reference_unref0 (_tmp46_);
15393 	param = _tmp48_;
15394 	_tmp49_ = method;
15395 	_tmp50_ = param;
15396 	vala_callable_add_parameter ((ValaCallable*) _tmp49_, _tmp50_);
15397 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
15398 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15399 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15400 			g_propagate_error (error, _inner_error0_);
15401 			_vala_code_node_unref0 (param);
15402 			_vala_code_node_unref0 (sym);
15403 			_vala_code_node_unref0 (method);
15404 			_vala_code_node_unref0 (type);
15405 			return NULL;
15406 		} else {
15407 			_vala_code_node_unref0 (param);
15408 			_vala_code_node_unref0 (sym);
15409 			_vala_code_node_unref0 (method);
15410 			_vala_code_node_unref0 (type);
15411 			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);
15412 			g_clear_error (&_inner_error0_);
15413 			return NULL;
15414 		}
15415 	}
15416 	if (vala_genie_parser_accept_block (self)) {
15417 		ValaBlock* _tmp51_ = NULL;
15418 		ValaBlock* _tmp52_;
15419 		ValaMethod* _tmp53_;
15420 		_tmp52_ = vala_genie_parser_parse_block (self, &_inner_error0_);
15421 		_tmp51_ = _tmp52_;
15422 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
15423 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15424 				g_propagate_error (error, _inner_error0_);
15425 				_vala_code_node_unref0 (param);
15426 				_vala_code_node_unref0 (sym);
15427 				_vala_code_node_unref0 (method);
15428 				_vala_code_node_unref0 (type);
15429 				return NULL;
15430 			} else {
15431 				_vala_code_node_unref0 (param);
15432 				_vala_code_node_unref0 (sym);
15433 				_vala_code_node_unref0 (method);
15434 				_vala_code_node_unref0 (type);
15435 				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);
15436 				g_clear_error (&_inner_error0_);
15437 				return NULL;
15438 			}
15439 		}
15440 		_tmp53_ = method;
15441 		vala_subroutine_set_body ((ValaSubroutine*) _tmp53_, _tmp51_);
15442 		_vala_code_node_unref0 (_tmp51_);
15443 	}
15444 	result = method;
15445 	_vala_code_node_unref0 (param);
15446 	_vala_code_node_unref0 (sym);
15447 	_vala_code_node_unref0 (type);
15448 	return result;
15449 }
15450 
15451 static ValaMethod*
vala_genie_parser_parse_method_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)15452 vala_genie_parser_parse_method_declaration (ValaGenieParser* self,
15453                                             ValaList* attrs,
15454                                             GError** error)
15455 {
15456 	ValaSourceLocation begin = {0};
15457 	ValaSourceLocation _tmp0_ = {0};
15458 	ValaDataType* type = NULL;
15459 	ValaGenieParserModifierFlags flags = 0;
15460 	gchar* id = NULL;
15461 	gchar* _tmp1_;
15462 	ValaArrayList* params = NULL;
15463 	GEqualFunc _tmp2_;
15464 	ValaArrayList* _tmp3_;
15465 	ValaList* type_param_list = NULL;
15466 	ValaList* _tmp12_;
15467 	ValaMethod* method = NULL;
15468 	const gchar* _tmp13_;
15469 	ValaDataType* _tmp14_;
15470 	ValaSourceLocation _tmp15_;
15471 	ValaSourceReference* _tmp16_;
15472 	ValaSourceReference* _tmp17_;
15473 	ValaComment* _tmp18_;
15474 	ValaMethod* _tmp19_;
15475 	ValaMethod* _tmp20_;
15476 	ValaGenieParserModifierFlags _tmp21_;
15477 	ValaMethod* _tmp27_;
15478 	gboolean _tmp54_ = FALSE;
15479 	ValaGenieParserModifierFlags _tmp55_;
15480 	ValaGenieParserModifierFlags _tmp60_;
15481 	ValaGenieParserModifierFlags _tmp62_;
15482 	ValaMethod* _tmp64_;
15483 	ValaMemberBinding _tmp65_;
15484 	ValaMemberBinding _tmp66_;
15485 	ValaGenieParserModifierFlags _tmp103_;
15486 	ValaGenieParserModifierFlags _tmp105_;
15487 	ValaSourceLocation body_location = {0};
15488 	ValaSourceLocation _tmp107_ = {0};
15489 	ValaSourceLocation _tmp122_;
15490 	GError* _inner_error0_ = NULL;
15491 	ValaMethod* result = NULL;
15492 	g_return_val_if_fail (self != NULL, NULL);
15493 	vala_genie_parser_get_location (self, &_tmp0_);
15494 	begin = _tmp0_;
15495 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEF, &_inner_error0_);
15496 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15497 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15498 			g_propagate_error (error, _inner_error0_);
15499 			_vala_code_node_unref0 (type);
15500 			return NULL;
15501 		} else {
15502 			_vala_code_node_unref0 (type);
15503 			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);
15504 			g_clear_error (&_inner_error0_);
15505 			return NULL;
15506 		}
15507 	}
15508 	flags = vala_genie_parser_parse_member_declaration_modifiers (self);
15509 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
15510 	id = _tmp1_;
15511 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15512 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15513 			g_propagate_error (error, _inner_error0_);
15514 			_vala_code_node_unref0 (type);
15515 			return NULL;
15516 		} else {
15517 			_vala_code_node_unref0 (type);
15518 			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);
15519 			g_clear_error (&_inner_error0_);
15520 			return NULL;
15521 		}
15522 	}
15523 	_tmp2_ = g_direct_equal;
15524 	_tmp3_ = vala_array_list_new (VALA_TYPE_PARAMETER, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp2_);
15525 	params = _tmp3_;
15526 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
15527 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15528 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15529 			g_propagate_error (error, _inner_error0_);
15530 			_vala_iterable_unref0 (params);
15531 			_g_free0 (id);
15532 			_vala_code_node_unref0 (type);
15533 			return NULL;
15534 		} else {
15535 			_vala_iterable_unref0 (params);
15536 			_g_free0 (id);
15537 			_vala_code_node_unref0 (type);
15538 			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);
15539 			g_clear_error (&_inner_error0_);
15540 			return NULL;
15541 		}
15542 	}
15543 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
15544 		{
15545 			gboolean _tmp4_ = FALSE;
15546 			_tmp4_ = TRUE;
15547 			while (TRUE) {
15548 				ValaParameter* param = NULL;
15549 				ValaParameter* _tmp5_;
15550 				ValaArrayList* _tmp6_;
15551 				ValaParameter* _tmp7_;
15552 				if (!_tmp4_) {
15553 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
15554 						break;
15555 					}
15556 				}
15557 				_tmp4_ = FALSE;
15558 				_tmp5_ = vala_genie_parser_parse_parameter (self, &_inner_error0_);
15559 				param = _tmp5_;
15560 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
15561 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15562 						g_propagate_error (error, _inner_error0_);
15563 						_vala_iterable_unref0 (params);
15564 						_g_free0 (id);
15565 						_vala_code_node_unref0 (type);
15566 						return NULL;
15567 					} else {
15568 						_vala_iterable_unref0 (params);
15569 						_g_free0 (id);
15570 						_vala_code_node_unref0 (type);
15571 						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);
15572 						g_clear_error (&_inner_error0_);
15573 						return NULL;
15574 					}
15575 				}
15576 				_tmp6_ = params;
15577 				_tmp7_ = param;
15578 				vala_collection_add ((ValaCollection*) _tmp6_, _tmp7_);
15579 				_vala_code_node_unref0 (param);
15580 			}
15581 		}
15582 	}
15583 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
15584 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15585 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15586 			g_propagate_error (error, _inner_error0_);
15587 			_vala_iterable_unref0 (params);
15588 			_g_free0 (id);
15589 			_vala_code_node_unref0 (type);
15590 			return NULL;
15591 		} else {
15592 			_vala_iterable_unref0 (params);
15593 			_g_free0 (id);
15594 			_vala_code_node_unref0 (type);
15595 			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);
15596 			g_clear_error (&_inner_error0_);
15597 			return NULL;
15598 		}
15599 	}
15600 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
15601 		ValaDataType* _tmp8_ = NULL;
15602 		ValaDataType* _tmp9_;
15603 		ValaDataType* _tmp10_;
15604 		_tmp9_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
15605 		_tmp8_ = _tmp9_;
15606 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
15607 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15608 				g_propagate_error (error, _inner_error0_);
15609 				_vala_iterable_unref0 (params);
15610 				_g_free0 (id);
15611 				_vala_code_node_unref0 (type);
15612 				return NULL;
15613 			} else {
15614 				_vala_iterable_unref0 (params);
15615 				_g_free0 (id);
15616 				_vala_code_node_unref0 (type);
15617 				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);
15618 				g_clear_error (&_inner_error0_);
15619 				return NULL;
15620 			}
15621 		}
15622 		_tmp10_ = _tmp8_;
15623 		_tmp8_ = NULL;
15624 		_vala_code_node_unref0 (type);
15625 		type = _tmp10_;
15626 		_vala_code_node_unref0 (_tmp8_);
15627 	} else {
15628 		ValaVoidType* _tmp11_;
15629 		_tmp11_ = vala_void_type_new (NULL);
15630 		_vala_code_node_unref0 (type);
15631 		type = (ValaDataType*) _tmp11_;
15632 	}
15633 	_tmp12_ = vala_genie_parser_parse_type_parameter_list (self, &_inner_error0_);
15634 	type_param_list = _tmp12_;
15635 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
15636 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15637 			g_propagate_error (error, _inner_error0_);
15638 			_vala_iterable_unref0 (params);
15639 			_g_free0 (id);
15640 			_vala_code_node_unref0 (type);
15641 			return NULL;
15642 		} else {
15643 			_vala_iterable_unref0 (params);
15644 			_g_free0 (id);
15645 			_vala_code_node_unref0 (type);
15646 			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);
15647 			g_clear_error (&_inner_error0_);
15648 			return NULL;
15649 		}
15650 	}
15651 	_tmp13_ = id;
15652 	_tmp14_ = type;
15653 	_tmp15_ = begin;
15654 	_tmp16_ = vala_genie_parser_get_src (self, &_tmp15_);
15655 	_tmp17_ = _tmp16_;
15656 	_tmp18_ = self->priv->comment;
15657 	_tmp19_ = vala_method_new (_tmp13_, _tmp14_, _tmp17_, _tmp18_);
15658 	_tmp20_ = _tmp19_;
15659 	_vala_source_reference_unref0 (_tmp17_);
15660 	method = _tmp20_;
15661 	_tmp21_ = flags;
15662 	if ((_tmp21_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
15663 		ValaMethod* _tmp22_;
15664 		_tmp22_ = method;
15665 		vala_symbol_set_access ((ValaSymbol*) _tmp22_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
15666 	} else {
15667 		ValaGenieParserModifierFlags _tmp23_;
15668 		_tmp23_ = flags;
15669 		if ((_tmp23_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
15670 			ValaMethod* _tmp24_;
15671 			_tmp24_ = method;
15672 			vala_symbol_set_access ((ValaSymbol*) _tmp24_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
15673 		} else {
15674 			ValaMethod* _tmp25_;
15675 			const gchar* _tmp26_;
15676 			_tmp25_ = method;
15677 			_tmp26_ = id;
15678 			vala_symbol_set_access ((ValaSymbol*) _tmp25_, vala_genie_parser_get_default_accessibility (self, _tmp26_));
15679 		}
15680 	}
15681 	_tmp27_ = method;
15682 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp27_, attrs);
15683 	{
15684 		ValaList* _type_param_list = NULL;
15685 		ValaList* _tmp28_;
15686 		ValaList* _tmp29_;
15687 		gint _type_param_size = 0;
15688 		ValaList* _tmp30_;
15689 		gint _tmp31_;
15690 		gint _tmp32_;
15691 		gint _type_param_index = 0;
15692 		_tmp28_ = type_param_list;
15693 		_tmp29_ = _vala_iterable_ref0 (_tmp28_);
15694 		_type_param_list = _tmp29_;
15695 		_tmp30_ = _type_param_list;
15696 		_tmp31_ = vala_collection_get_size ((ValaCollection*) _tmp30_);
15697 		_tmp32_ = _tmp31_;
15698 		_type_param_size = _tmp32_;
15699 		_type_param_index = -1;
15700 		while (TRUE) {
15701 			gint _tmp33_;
15702 			gint _tmp34_;
15703 			ValaTypeParameter* type_param = NULL;
15704 			ValaList* _tmp35_;
15705 			gpointer _tmp36_;
15706 			ValaMethod* _tmp37_;
15707 			ValaTypeParameter* _tmp38_;
15708 			_type_param_index = _type_param_index + 1;
15709 			_tmp33_ = _type_param_index;
15710 			_tmp34_ = _type_param_size;
15711 			if (!(_tmp33_ < _tmp34_)) {
15712 				break;
15713 			}
15714 			_tmp35_ = _type_param_list;
15715 			_tmp36_ = vala_list_get (_tmp35_, _type_param_index);
15716 			type_param = (ValaTypeParameter*) _tmp36_;
15717 			_tmp37_ = method;
15718 			_tmp38_ = type_param;
15719 			vala_method_add_type_parameter (_tmp37_, _tmp38_);
15720 			_vala_code_node_unref0 (type_param);
15721 		}
15722 		_vala_iterable_unref0 (_type_param_list);
15723 	}
15724 	{
15725 		ValaArrayList* _param_list = NULL;
15726 		ValaArrayList* _tmp39_;
15727 		ValaArrayList* _tmp40_;
15728 		gint _param_size = 0;
15729 		ValaArrayList* _tmp41_;
15730 		gint _tmp42_;
15731 		gint _tmp43_;
15732 		gint _param_index = 0;
15733 		_tmp39_ = params;
15734 		_tmp40_ = _vala_iterable_ref0 (_tmp39_);
15735 		_param_list = _tmp40_;
15736 		_tmp41_ = _param_list;
15737 		_tmp42_ = vala_collection_get_size ((ValaCollection*) _tmp41_);
15738 		_tmp43_ = _tmp42_;
15739 		_param_size = _tmp43_;
15740 		_param_index = -1;
15741 		while (TRUE) {
15742 			gint _tmp44_;
15743 			gint _tmp45_;
15744 			ValaParameter* param = NULL;
15745 			ValaArrayList* _tmp46_;
15746 			gpointer _tmp47_;
15747 			ValaMethod* _tmp48_;
15748 			ValaParameter* _tmp49_;
15749 			_param_index = _param_index + 1;
15750 			_tmp44_ = _param_index;
15751 			_tmp45_ = _param_size;
15752 			if (!(_tmp44_ < _tmp45_)) {
15753 				break;
15754 			}
15755 			_tmp46_ = _param_list;
15756 			_tmp47_ = vala_list_get ((ValaList*) _tmp46_, _param_index);
15757 			param = (ValaParameter*) _tmp47_;
15758 			_tmp48_ = method;
15759 			_tmp49_ = param;
15760 			vala_callable_add_parameter ((ValaCallable*) _tmp48_, _tmp49_);
15761 			_vala_code_node_unref0 (param);
15762 		}
15763 		_vala_iterable_unref0 (_param_list);
15764 	}
15765 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_RAISES)) {
15766 		{
15767 			gboolean _tmp50_ = FALSE;
15768 			_tmp50_ = TRUE;
15769 			while (TRUE) {
15770 				ValaDataType* _tmp51_ = NULL;
15771 				ValaDataType* _tmp52_;
15772 				ValaMethod* _tmp53_;
15773 				if (!_tmp50_) {
15774 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
15775 						break;
15776 					}
15777 				}
15778 				_tmp50_ = FALSE;
15779 				_tmp52_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
15780 				_tmp51_ = _tmp52_;
15781 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
15782 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15783 						g_propagate_error (error, _inner_error0_);
15784 						_vala_code_node_unref0 (method);
15785 						_vala_iterable_unref0 (type_param_list);
15786 						_vala_iterable_unref0 (params);
15787 						_g_free0 (id);
15788 						_vala_code_node_unref0 (type);
15789 						return NULL;
15790 					} else {
15791 						_vala_code_node_unref0 (method);
15792 						_vala_iterable_unref0 (type_param_list);
15793 						_vala_iterable_unref0 (params);
15794 						_g_free0 (id);
15795 						_vala_code_node_unref0 (type);
15796 						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);
15797 						g_clear_error (&_inner_error0_);
15798 						return NULL;
15799 					}
15800 				}
15801 				_tmp53_ = method;
15802 				vala_method_add_error_type (_tmp53_, _tmp51_);
15803 				_vala_code_node_unref0 (_tmp51_);
15804 			}
15805 		}
15806 	}
15807 	_tmp55_ = flags;
15808 	if ((_tmp55_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) {
15809 		_tmp54_ = TRUE;
15810 	} else {
15811 		const gchar* _tmp56_;
15812 		_tmp56_ = id;
15813 		_tmp54_ = g_strcmp0 (_tmp56_, "main") == 0;
15814 	}
15815 	if (_tmp54_) {
15816 		ValaMethod* _tmp57_;
15817 		_tmp57_ = method;
15818 		vala_method_set_binding (_tmp57_, VALA_MEMBER_BINDING_STATIC);
15819 	} else {
15820 		ValaGenieParserModifierFlags _tmp58_;
15821 		_tmp58_ = flags;
15822 		if ((_tmp58_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) == VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) {
15823 			ValaMethod* _tmp59_;
15824 			_tmp59_ = method;
15825 			vala_method_set_binding (_tmp59_, VALA_MEMBER_BINDING_CLASS);
15826 		}
15827 	}
15828 	_tmp60_ = flags;
15829 	if ((_tmp60_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC) {
15830 		ValaMethod* _tmp61_;
15831 		_tmp61_ = method;
15832 		vala_method_set_coroutine (_tmp61_, TRUE);
15833 	}
15834 	_tmp62_ = flags;
15835 	if ((_tmp62_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) == VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) {
15836 		ValaMethod* _tmp63_;
15837 		_tmp63_ = method;
15838 		vala_symbol_set_hides ((ValaSymbol*) _tmp63_, TRUE);
15839 	}
15840 	_tmp64_ = method;
15841 	_tmp65_ = vala_method_get_binding (_tmp64_);
15842 	_tmp66_ = _tmp65_;
15843 	if (_tmp66_ == VALA_MEMBER_BINDING_INSTANCE) {
15844 		ValaGenieParserModifierFlags _tmp67_;
15845 		ValaGenieParserModifierFlags _tmp69_;
15846 		ValaGenieParserModifierFlags _tmp71_;
15847 		gboolean _tmp73_ = FALSE;
15848 		gboolean _tmp74_ = FALSE;
15849 		gboolean _tmp75_ = FALSE;
15850 		ValaMethod* _tmp76_;
15851 		gboolean _tmp77_;
15852 		gboolean _tmp78_;
15853 		_tmp67_ = flags;
15854 		if ((_tmp67_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) == VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) {
15855 			ValaMethod* _tmp68_;
15856 			_tmp68_ = method;
15857 			vala_method_set_is_abstract (_tmp68_, TRUE);
15858 		}
15859 		_tmp69_ = flags;
15860 		if ((_tmp69_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) == VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) {
15861 			ValaMethod* _tmp70_;
15862 			_tmp70_ = method;
15863 			vala_method_set_is_virtual (_tmp70_, TRUE);
15864 		}
15865 		_tmp71_ = flags;
15866 		if ((_tmp71_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE) {
15867 			ValaMethod* _tmp72_;
15868 			_tmp72_ = method;
15869 			vala_method_set_overrides (_tmp72_, TRUE);
15870 		}
15871 		_tmp76_ = method;
15872 		_tmp77_ = vala_method_get_is_abstract (_tmp76_);
15873 		_tmp78_ = _tmp77_;
15874 		if (_tmp78_) {
15875 			ValaMethod* _tmp79_;
15876 			gboolean _tmp80_;
15877 			gboolean _tmp81_;
15878 			_tmp79_ = method;
15879 			_tmp80_ = vala_method_get_is_virtual (_tmp79_);
15880 			_tmp81_ = _tmp80_;
15881 			_tmp75_ = _tmp81_;
15882 		} else {
15883 			_tmp75_ = FALSE;
15884 		}
15885 		if (_tmp75_) {
15886 			_tmp74_ = TRUE;
15887 		} else {
15888 			gboolean _tmp82_ = FALSE;
15889 			ValaMethod* _tmp83_;
15890 			gboolean _tmp84_;
15891 			gboolean _tmp85_;
15892 			_tmp83_ = method;
15893 			_tmp84_ = vala_method_get_is_abstract (_tmp83_);
15894 			_tmp85_ = _tmp84_;
15895 			if (_tmp85_) {
15896 				ValaMethod* _tmp86_;
15897 				gboolean _tmp87_;
15898 				gboolean _tmp88_;
15899 				_tmp86_ = method;
15900 				_tmp87_ = vala_method_get_overrides (_tmp86_);
15901 				_tmp88_ = _tmp87_;
15902 				_tmp82_ = _tmp88_;
15903 			} else {
15904 				_tmp82_ = FALSE;
15905 			}
15906 			_tmp74_ = _tmp82_;
15907 		}
15908 		if (_tmp74_) {
15909 			_tmp73_ = TRUE;
15910 		} else {
15911 			gboolean _tmp89_ = FALSE;
15912 			ValaMethod* _tmp90_;
15913 			gboolean _tmp91_;
15914 			gboolean _tmp92_;
15915 			_tmp90_ = method;
15916 			_tmp91_ = vala_method_get_is_virtual (_tmp90_);
15917 			_tmp92_ = _tmp91_;
15918 			if (_tmp92_) {
15919 				ValaMethod* _tmp93_;
15920 				gboolean _tmp94_;
15921 				gboolean _tmp95_;
15922 				_tmp93_ = method;
15923 				_tmp94_ = vala_method_get_overrides (_tmp93_);
15924 				_tmp95_ = _tmp94_;
15925 				_tmp89_ = _tmp95_;
15926 			} else {
15927 				_tmp89_ = FALSE;
15928 			}
15929 			_tmp73_ = _tmp89_;
15930 		}
15931 		if (_tmp73_) {
15932 			GError* _tmp96_;
15933 			_tmp96_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "only one of `abstract', `virtual', or `override' may be specified");
15934 			_inner_error0_ = _tmp96_;
15935 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15936 				g_propagate_error (error, _inner_error0_);
15937 				_vala_code_node_unref0 (method);
15938 				_vala_iterable_unref0 (type_param_list);
15939 				_vala_iterable_unref0 (params);
15940 				_g_free0 (id);
15941 				_vala_code_node_unref0 (type);
15942 				return NULL;
15943 			} else {
15944 				_vala_code_node_unref0 (method);
15945 				_vala_iterable_unref0 (type_param_list);
15946 				_vala_iterable_unref0 (params);
15947 				_g_free0 (id);
15948 				_vala_code_node_unref0 (type);
15949 				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);
15950 				g_clear_error (&_inner_error0_);
15951 				return NULL;
15952 			}
15953 		}
15954 	} else {
15955 		gboolean _tmp97_ = FALSE;
15956 		gboolean _tmp98_ = FALSE;
15957 		ValaGenieParserModifierFlags _tmp99_;
15958 		_tmp99_ = flags;
15959 		if ((_tmp99_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) == VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) {
15960 			_tmp98_ = TRUE;
15961 		} else {
15962 			ValaGenieParserModifierFlags _tmp100_;
15963 			_tmp100_ = flags;
15964 			_tmp98_ = (_tmp100_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) == VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL;
15965 		}
15966 		if (_tmp98_) {
15967 			_tmp97_ = TRUE;
15968 		} else {
15969 			ValaGenieParserModifierFlags _tmp101_;
15970 			_tmp101_ = flags;
15971 			_tmp97_ = (_tmp101_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE;
15972 		}
15973 		if (_tmp97_) {
15974 			GError* _tmp102_;
15975 			_tmp102_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "the modifiers `abstract', `virtual', and `override' are not valid for " \
15976 "static methods");
15977 			_inner_error0_ = _tmp102_;
15978 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
15979 				g_propagate_error (error, _inner_error0_);
15980 				_vala_code_node_unref0 (method);
15981 				_vala_iterable_unref0 (type_param_list);
15982 				_vala_iterable_unref0 (params);
15983 				_g_free0 (id);
15984 				_vala_code_node_unref0 (type);
15985 				return NULL;
15986 			} else {
15987 				_vala_code_node_unref0 (method);
15988 				_vala_iterable_unref0 (type_param_list);
15989 				_vala_iterable_unref0 (params);
15990 				_g_free0 (id);
15991 				_vala_code_node_unref0 (type);
15992 				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);
15993 				g_clear_error (&_inner_error0_);
15994 				return NULL;
15995 			}
15996 		}
15997 	}
15998 	_tmp103_ = flags;
15999 	if ((_tmp103_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_INLINE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_INLINE) {
16000 		ValaMethod* _tmp104_;
16001 		_tmp104_ = method;
16002 		vala_method_set_is_inline (_tmp104_, TRUE);
16003 	}
16004 	_tmp105_ = flags;
16005 	if ((_tmp105_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) == VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) {
16006 		ValaMethod* _tmp106_;
16007 		_tmp106_ = method;
16008 		vala_symbol_set_is_extern ((ValaSymbol*) _tmp106_, TRUE);
16009 	}
16010 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
16011 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
16012 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16013 			g_propagate_error (error, _inner_error0_);
16014 			_vala_code_node_unref0 (method);
16015 			_vala_iterable_unref0 (type_param_list);
16016 			_vala_iterable_unref0 (params);
16017 			_g_free0 (id);
16018 			_vala_code_node_unref0 (type);
16019 			return NULL;
16020 		} else {
16021 			_vala_code_node_unref0 (method);
16022 			_vala_iterable_unref0 (type_param_list);
16023 			_vala_iterable_unref0 (params);
16024 			_g_free0 (id);
16025 			_vala_code_node_unref0 (type);
16026 			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);
16027 			g_clear_error (&_inner_error0_);
16028 			return NULL;
16029 		}
16030 	}
16031 	vala_genie_parser_get_location (self, &_tmp107_);
16032 	body_location = _tmp107_;
16033 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INDENT)) {
16034 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_REQUIRES)) {
16035 			gboolean _tmp108_ = FALSE;
16036 			if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
16037 				_tmp108_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INDENT);
16038 			} else {
16039 				_tmp108_ = FALSE;
16040 			}
16041 			if (_tmp108_) {
16042 				while (TRUE) {
16043 					ValaExpression* _tmp109_ = NULL;
16044 					ValaExpression* _tmp110_;
16045 					ValaMethod* _tmp111_;
16046 					if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT)) {
16047 						break;
16048 					}
16049 					_tmp110_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
16050 					_tmp109_ = _tmp110_;
16051 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
16052 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16053 							g_propagate_error (error, _inner_error0_);
16054 							_vala_code_node_unref0 (method);
16055 							_vala_iterable_unref0 (type_param_list);
16056 							_vala_iterable_unref0 (params);
16057 							_g_free0 (id);
16058 							_vala_code_node_unref0 (type);
16059 							return NULL;
16060 						} else {
16061 							_vala_code_node_unref0 (method);
16062 							_vala_iterable_unref0 (type_param_list);
16063 							_vala_iterable_unref0 (params);
16064 							_g_free0 (id);
16065 							_vala_code_node_unref0 (type);
16066 							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);
16067 							g_clear_error (&_inner_error0_);
16068 							return NULL;
16069 						}
16070 					}
16071 					_tmp111_ = method;
16072 					vala_method_add_precondition (_tmp111_, _tmp109_);
16073 					vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
16074 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
16075 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16076 							g_propagate_error (error, _inner_error0_);
16077 							_vala_code_node_unref0 (_tmp109_);
16078 							_vala_code_node_unref0 (method);
16079 							_vala_iterable_unref0 (type_param_list);
16080 							_vala_iterable_unref0 (params);
16081 							_g_free0 (id);
16082 							_vala_code_node_unref0 (type);
16083 							return NULL;
16084 						} else {
16085 							_vala_code_node_unref0 (_tmp109_);
16086 							_vala_code_node_unref0 (method);
16087 							_vala_iterable_unref0 (type_param_list);
16088 							_vala_iterable_unref0 (params);
16089 							_g_free0 (id);
16090 							_vala_code_node_unref0 (type);
16091 							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);
16092 							g_clear_error (&_inner_error0_);
16093 							return NULL;
16094 						}
16095 					}
16096 					_vala_code_node_unref0 (_tmp109_);
16097 				}
16098 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
16099 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
16100 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16101 						g_propagate_error (error, _inner_error0_);
16102 						_vala_code_node_unref0 (method);
16103 						_vala_iterable_unref0 (type_param_list);
16104 						_vala_iterable_unref0 (params);
16105 						_g_free0 (id);
16106 						_vala_code_node_unref0 (type);
16107 						return NULL;
16108 					} else {
16109 						_vala_code_node_unref0 (method);
16110 						_vala_iterable_unref0 (type_param_list);
16111 						_vala_iterable_unref0 (params);
16112 						_g_free0 (id);
16113 						_vala_code_node_unref0 (type);
16114 						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);
16115 						g_clear_error (&_inner_error0_);
16116 						return NULL;
16117 					}
16118 				}
16119 				vala_genie_parser_accept_terminator (self);
16120 			} else {
16121 				ValaExpression* _tmp112_ = NULL;
16122 				ValaExpression* _tmp113_;
16123 				ValaMethod* _tmp114_;
16124 				_tmp113_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
16125 				_tmp112_ = _tmp113_;
16126 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
16127 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16128 						g_propagate_error (error, _inner_error0_);
16129 						_vala_code_node_unref0 (method);
16130 						_vala_iterable_unref0 (type_param_list);
16131 						_vala_iterable_unref0 (params);
16132 						_g_free0 (id);
16133 						_vala_code_node_unref0 (type);
16134 						return NULL;
16135 					} else {
16136 						_vala_code_node_unref0 (method);
16137 						_vala_iterable_unref0 (type_param_list);
16138 						_vala_iterable_unref0 (params);
16139 						_g_free0 (id);
16140 						_vala_code_node_unref0 (type);
16141 						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);
16142 						g_clear_error (&_inner_error0_);
16143 						return NULL;
16144 					}
16145 				}
16146 				_tmp114_ = method;
16147 				vala_method_add_precondition (_tmp114_, _tmp112_);
16148 				vala_genie_parser_expect_terminator (self, &_inner_error0_);
16149 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
16150 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16151 						g_propagate_error (error, _inner_error0_);
16152 						_vala_code_node_unref0 (_tmp112_);
16153 						_vala_code_node_unref0 (method);
16154 						_vala_iterable_unref0 (type_param_list);
16155 						_vala_iterable_unref0 (params);
16156 						_g_free0 (id);
16157 						_vala_code_node_unref0 (type);
16158 						return NULL;
16159 					} else {
16160 						_vala_code_node_unref0 (_tmp112_);
16161 						_vala_code_node_unref0 (method);
16162 						_vala_iterable_unref0 (type_param_list);
16163 						_vala_iterable_unref0 (params);
16164 						_g_free0 (id);
16165 						_vala_code_node_unref0 (type);
16166 						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);
16167 						g_clear_error (&_inner_error0_);
16168 						return NULL;
16169 					}
16170 				}
16171 				_vala_code_node_unref0 (_tmp112_);
16172 			}
16173 		}
16174 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ENSURES)) {
16175 			gboolean _tmp115_ = FALSE;
16176 			if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
16177 				_tmp115_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_INDENT);
16178 			} else {
16179 				_tmp115_ = FALSE;
16180 			}
16181 			if (_tmp115_) {
16182 				while (TRUE) {
16183 					ValaExpression* _tmp116_ = NULL;
16184 					ValaExpression* _tmp117_;
16185 					ValaMethod* _tmp118_;
16186 					if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT)) {
16187 						break;
16188 					}
16189 					_tmp117_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
16190 					_tmp116_ = _tmp117_;
16191 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
16192 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16193 							g_propagate_error (error, _inner_error0_);
16194 							_vala_code_node_unref0 (method);
16195 							_vala_iterable_unref0 (type_param_list);
16196 							_vala_iterable_unref0 (params);
16197 							_g_free0 (id);
16198 							_vala_code_node_unref0 (type);
16199 							return NULL;
16200 						} else {
16201 							_vala_code_node_unref0 (method);
16202 							_vala_iterable_unref0 (type_param_list);
16203 							_vala_iterable_unref0 (params);
16204 							_g_free0 (id);
16205 							_vala_code_node_unref0 (type);
16206 							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);
16207 							g_clear_error (&_inner_error0_);
16208 							return NULL;
16209 						}
16210 					}
16211 					_tmp118_ = method;
16212 					vala_method_add_postcondition (_tmp118_, _tmp116_);
16213 					vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
16214 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
16215 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16216 							g_propagate_error (error, _inner_error0_);
16217 							_vala_code_node_unref0 (_tmp116_);
16218 							_vala_code_node_unref0 (method);
16219 							_vala_iterable_unref0 (type_param_list);
16220 							_vala_iterable_unref0 (params);
16221 							_g_free0 (id);
16222 							_vala_code_node_unref0 (type);
16223 							return NULL;
16224 						} else {
16225 							_vala_code_node_unref0 (_tmp116_);
16226 							_vala_code_node_unref0 (method);
16227 							_vala_iterable_unref0 (type_param_list);
16228 							_vala_iterable_unref0 (params);
16229 							_g_free0 (id);
16230 							_vala_code_node_unref0 (type);
16231 							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);
16232 							g_clear_error (&_inner_error0_);
16233 							return NULL;
16234 						}
16235 					}
16236 					_vala_code_node_unref0 (_tmp116_);
16237 				}
16238 				vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
16239 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
16240 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16241 						g_propagate_error (error, _inner_error0_);
16242 						_vala_code_node_unref0 (method);
16243 						_vala_iterable_unref0 (type_param_list);
16244 						_vala_iterable_unref0 (params);
16245 						_g_free0 (id);
16246 						_vala_code_node_unref0 (type);
16247 						return NULL;
16248 					} else {
16249 						_vala_code_node_unref0 (method);
16250 						_vala_iterable_unref0 (type_param_list);
16251 						_vala_iterable_unref0 (params);
16252 						_g_free0 (id);
16253 						_vala_code_node_unref0 (type);
16254 						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);
16255 						g_clear_error (&_inner_error0_);
16256 						return NULL;
16257 					}
16258 				}
16259 				vala_genie_parser_accept_terminator (self);
16260 			} else {
16261 				ValaExpression* _tmp119_ = NULL;
16262 				ValaExpression* _tmp120_;
16263 				ValaMethod* _tmp121_;
16264 				_tmp120_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
16265 				_tmp119_ = _tmp120_;
16266 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
16267 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16268 						g_propagate_error (error, _inner_error0_);
16269 						_vala_code_node_unref0 (method);
16270 						_vala_iterable_unref0 (type_param_list);
16271 						_vala_iterable_unref0 (params);
16272 						_g_free0 (id);
16273 						_vala_code_node_unref0 (type);
16274 						return NULL;
16275 					} else {
16276 						_vala_code_node_unref0 (method);
16277 						_vala_iterable_unref0 (type_param_list);
16278 						_vala_iterable_unref0 (params);
16279 						_g_free0 (id);
16280 						_vala_code_node_unref0 (type);
16281 						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);
16282 						g_clear_error (&_inner_error0_);
16283 						return NULL;
16284 					}
16285 				}
16286 				_tmp121_ = method;
16287 				vala_method_add_postcondition (_tmp121_, _tmp119_);
16288 				vala_genie_parser_expect_terminator (self, &_inner_error0_);
16289 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
16290 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16291 						g_propagate_error (error, _inner_error0_);
16292 						_vala_code_node_unref0 (_tmp119_);
16293 						_vala_code_node_unref0 (method);
16294 						_vala_iterable_unref0 (type_param_list);
16295 						_vala_iterable_unref0 (params);
16296 						_g_free0 (id);
16297 						_vala_code_node_unref0 (type);
16298 						return NULL;
16299 					} else {
16300 						_vala_code_node_unref0 (_tmp119_);
16301 						_vala_code_node_unref0 (method);
16302 						_vala_iterable_unref0 (type_param_list);
16303 						_vala_iterable_unref0 (params);
16304 						_g_free0 (id);
16305 						_vala_code_node_unref0 (type);
16306 						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);
16307 						g_clear_error (&_inner_error0_);
16308 						return NULL;
16309 					}
16310 				}
16311 				_vala_code_node_unref0 (_tmp119_);
16312 			}
16313 		}
16314 	}
16315 	_tmp122_ = body_location;
16316 	vala_genie_parser_rollback (self, &_tmp122_);
16317 	if (vala_genie_parser_accept_block (self)) {
16318 		ValaBlock* _tmp123_ = NULL;
16319 		ValaBlock* _tmp124_;
16320 		ValaMethod* _tmp125_;
16321 		ValaMethod* _tmp126_;
16322 		_tmp124_ = vala_genie_parser_parse_block (self, &_inner_error0_);
16323 		_tmp123_ = _tmp124_;
16324 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
16325 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16326 				g_propagate_error (error, _inner_error0_);
16327 				_vala_code_node_unref0 (method);
16328 				_vala_iterable_unref0 (type_param_list);
16329 				_vala_iterable_unref0 (params);
16330 				_g_free0 (id);
16331 				_vala_code_node_unref0 (type);
16332 				return NULL;
16333 			} else {
16334 				_vala_code_node_unref0 (method);
16335 				_vala_iterable_unref0 (type_param_list);
16336 				_vala_iterable_unref0 (params);
16337 				_g_free0 (id);
16338 				_vala_code_node_unref0 (type);
16339 				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);
16340 				g_clear_error (&_inner_error0_);
16341 				return NULL;
16342 			}
16343 		}
16344 		_tmp125_ = method;
16345 		vala_subroutine_set_body ((ValaSubroutine*) _tmp125_, _tmp123_);
16346 		_tmp126_ = method;
16347 		vala_symbol_set_external ((ValaSymbol*) _tmp126_, FALSE);
16348 		_vala_code_node_unref0 (_tmp123_);
16349 	}
16350 	result = method;
16351 	_vala_iterable_unref0 (type_param_list);
16352 	_vala_iterable_unref0 (params);
16353 	_g_free0 (id);
16354 	_vala_code_node_unref0 (type);
16355 	return result;
16356 }
16357 
16358 static ValaProperty*
vala_genie_parser_parse_property_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)16359 vala_genie_parser_parse_property_declaration (ValaGenieParser* self,
16360                                               ValaList* attrs,
16361                                               GError** error)
16362 {
16363 	ValaSourceLocation begin = {0};
16364 	ValaSourceLocation _tmp0_ = {0};
16365 	gboolean readonly = FALSE;
16366 	ValaGenieParserModifierFlags flags = 0;
16367 	gchar* id = NULL;
16368 	gchar* _tmp1_;
16369 	ValaDataType* type = NULL;
16370 	ValaDataType* _tmp2_;
16371 	ValaProperty* prop = NULL;
16372 	const gchar* _tmp3_;
16373 	ValaDataType* _tmp4_;
16374 	ValaSourceLocation _tmp5_;
16375 	ValaSourceReference* _tmp6_;
16376 	ValaSourceReference* _tmp7_;
16377 	ValaComment* _tmp8_;
16378 	ValaProperty* _tmp9_;
16379 	ValaProperty* _tmp10_;
16380 	ValaGenieParserModifierFlags _tmp11_;
16381 	ValaProperty* _tmp17_;
16382 	ValaGenieParserModifierFlags _tmp18_;
16383 	ValaGenieParserModifierFlags _tmp22_;
16384 	ValaGenieParserModifierFlags _tmp24_;
16385 	ValaGenieParserModifierFlags _tmp26_;
16386 	ValaGenieParserModifierFlags _tmp28_;
16387 	ValaGenieParserModifierFlags _tmp30_;
16388 	ValaGenieParserModifierFlags _tmp32_;
16389 	GError* _inner_error0_ = NULL;
16390 	ValaProperty* result = NULL;
16391 	g_return_val_if_fail (self != NULL, NULL);
16392 	vala_genie_parser_get_location (self, &_tmp0_);
16393 	begin = _tmp0_;
16394 	readonly = FALSE;
16395 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_PROP, &_inner_error0_);
16396 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
16397 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16398 			g_propagate_error (error, _inner_error0_);
16399 			return NULL;
16400 		} else {
16401 			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);
16402 			g_clear_error (&_inner_error0_);
16403 			return NULL;
16404 		}
16405 	}
16406 	flags = vala_genie_parser_parse_member_declaration_modifiers (self);
16407 	readonly = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_READONLY);
16408 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
16409 	id = _tmp1_;
16410 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
16411 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16412 			g_propagate_error (error, _inner_error0_);
16413 			return NULL;
16414 		} else {
16415 			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);
16416 			g_clear_error (&_inner_error0_);
16417 			return NULL;
16418 		}
16419 	}
16420 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
16421 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
16422 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16423 			g_propagate_error (error, _inner_error0_);
16424 			_g_free0 (id);
16425 			return NULL;
16426 		} else {
16427 			_g_free0 (id);
16428 			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);
16429 			g_clear_error (&_inner_error0_);
16430 			return NULL;
16431 		}
16432 	}
16433 	_tmp2_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
16434 	type = _tmp2_;
16435 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
16436 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16437 			g_propagate_error (error, _inner_error0_);
16438 			_g_free0 (id);
16439 			return NULL;
16440 		} else {
16441 			_g_free0 (id);
16442 			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);
16443 			g_clear_error (&_inner_error0_);
16444 			return NULL;
16445 		}
16446 	}
16447 	_tmp3_ = id;
16448 	_tmp4_ = type;
16449 	_tmp5_ = begin;
16450 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
16451 	_tmp7_ = _tmp6_;
16452 	_tmp8_ = self->priv->comment;
16453 	_tmp9_ = vala_property_new (_tmp3_, _tmp4_, NULL, NULL, _tmp7_, _tmp8_);
16454 	_tmp10_ = _tmp9_;
16455 	_vala_source_reference_unref0 (_tmp7_);
16456 	prop = _tmp10_;
16457 	_tmp11_ = flags;
16458 	if ((_tmp11_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
16459 		ValaProperty* _tmp12_;
16460 		_tmp12_ = prop;
16461 		vala_symbol_set_access ((ValaSymbol*) _tmp12_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
16462 	} else {
16463 		ValaGenieParserModifierFlags _tmp13_;
16464 		_tmp13_ = flags;
16465 		if ((_tmp13_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
16466 			ValaProperty* _tmp14_;
16467 			_tmp14_ = prop;
16468 			vala_symbol_set_access ((ValaSymbol*) _tmp14_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
16469 		} else {
16470 			ValaProperty* _tmp15_;
16471 			const gchar* _tmp16_;
16472 			_tmp15_ = prop;
16473 			_tmp16_ = id;
16474 			vala_symbol_set_access ((ValaSymbol*) _tmp15_, vala_genie_parser_get_default_accessibility (self, _tmp16_));
16475 		}
16476 	}
16477 	_tmp17_ = prop;
16478 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp17_, attrs);
16479 	_tmp18_ = flags;
16480 	if ((_tmp18_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) {
16481 		ValaProperty* _tmp19_;
16482 		_tmp19_ = prop;
16483 		vala_property_set_binding (_tmp19_, VALA_MEMBER_BINDING_STATIC);
16484 	} else {
16485 		ValaGenieParserModifierFlags _tmp20_;
16486 		_tmp20_ = flags;
16487 		if ((_tmp20_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) == VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) {
16488 			ValaProperty* _tmp21_;
16489 			_tmp21_ = prop;
16490 			vala_property_set_binding (_tmp21_, VALA_MEMBER_BINDING_CLASS);
16491 		}
16492 	}
16493 	_tmp22_ = flags;
16494 	if ((_tmp22_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) == VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT) {
16495 		ValaProperty* _tmp23_;
16496 		_tmp23_ = prop;
16497 		vala_property_set_is_abstract (_tmp23_, TRUE);
16498 	}
16499 	_tmp24_ = flags;
16500 	if ((_tmp24_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) == VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) {
16501 		ValaProperty* _tmp25_;
16502 		_tmp25_ = prop;
16503 		vala_property_set_is_virtual (_tmp25_, TRUE);
16504 	}
16505 	_tmp26_ = flags;
16506 	if ((_tmp26_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE) {
16507 		ValaProperty* _tmp27_;
16508 		_tmp27_ = prop;
16509 		vala_property_set_overrides (_tmp27_, TRUE);
16510 	}
16511 	_tmp28_ = flags;
16512 	if ((_tmp28_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) == VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) {
16513 		ValaProperty* _tmp29_;
16514 		_tmp29_ = prop;
16515 		vala_symbol_set_hides ((ValaSymbol*) _tmp29_, TRUE);
16516 	}
16517 	_tmp30_ = flags;
16518 	if ((_tmp30_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) == VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) {
16519 		ValaProperty* _tmp31_;
16520 		_tmp31_ = prop;
16521 		vala_symbol_set_is_extern ((ValaSymbol*) _tmp31_, TRUE);
16522 	}
16523 	_tmp32_ = flags;
16524 	if ((_tmp32_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC) {
16525 		ValaProperty* _tmp33_;
16526 		ValaSourceReference* _tmp34_;
16527 		ValaSourceReference* _tmp35_;
16528 		_tmp33_ = prop;
16529 		_tmp34_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp33_);
16530 		_tmp35_ = _tmp34_;
16531 		vala_report_error (_tmp35_, "async properties are not supported yet");
16532 	}
16533 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
16534 		ValaExpression* _tmp36_ = NULL;
16535 		ValaExpression* _tmp37_;
16536 		ValaProperty* _tmp38_;
16537 		_tmp37_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
16538 		_tmp36_ = _tmp37_;
16539 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
16540 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16541 				g_propagate_error (error, _inner_error0_);
16542 				_vala_code_node_unref0 (prop);
16543 				_vala_code_node_unref0 (type);
16544 				_g_free0 (id);
16545 				return NULL;
16546 			} else {
16547 				_vala_code_node_unref0 (prop);
16548 				_vala_code_node_unref0 (type);
16549 				_g_free0 (id);
16550 				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);
16551 				g_clear_error (&_inner_error0_);
16552 				return NULL;
16553 			}
16554 		}
16555 		_tmp38_ = prop;
16556 		vala_property_set_initializer (_tmp38_, _tmp36_);
16557 		_vala_code_node_unref0 (_tmp36_);
16558 	}
16559 	if (vala_genie_parser_accept_block (self)) {
16560 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INDENT, &_inner_error0_);
16561 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
16562 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16563 				g_propagate_error (error, _inner_error0_);
16564 				_vala_code_node_unref0 (prop);
16565 				_vala_code_node_unref0 (type);
16566 				_g_free0 (id);
16567 				return NULL;
16568 			} else {
16569 				_vala_code_node_unref0 (prop);
16570 				_vala_code_node_unref0 (type);
16571 				_g_free0 (id);
16572 				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);
16573 				g_clear_error (&_inner_error0_);
16574 				return NULL;
16575 			}
16576 		}
16577 		while (TRUE) {
16578 			ValaSourceLocation accessor_begin = {0};
16579 			ValaSourceLocation _tmp39_ = {0};
16580 			ValaList* attribs = NULL;
16581 			ValaList* _tmp40_;
16582 			ValaDataType* value_type = NULL;
16583 			ValaDataType* _tmp41_;
16584 			ValaDataType* _tmp42_;
16585 			ValaDataType* _tmp43_;
16586 			if (!(vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_DEDENT)) {
16587 				break;
16588 			}
16589 			vala_genie_parser_get_location (self, &_tmp39_);
16590 			accessor_begin = _tmp39_;
16591 			_tmp40_ = vala_genie_parser_parse_attributes (self, FALSE, &_inner_error0_);
16592 			attribs = _tmp40_;
16593 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
16594 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16595 					g_propagate_error (error, _inner_error0_);
16596 					_vala_code_node_unref0 (prop);
16597 					_vala_code_node_unref0 (type);
16598 					_g_free0 (id);
16599 					return NULL;
16600 				} else {
16601 					_vala_code_node_unref0 (prop);
16602 					_vala_code_node_unref0 (type);
16603 					_g_free0 (id);
16604 					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);
16605 					g_clear_error (&_inner_error0_);
16606 					return NULL;
16607 				}
16608 			}
16609 			_tmp41_ = type;
16610 			_tmp42_ = vala_data_type_copy (_tmp41_);
16611 			value_type = _tmp42_;
16612 			_tmp43_ = value_type;
16613 			vala_data_type_set_value_owned (_tmp43_, vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OWNED));
16614 			if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_GET)) {
16615 				ValaProperty* _tmp44_;
16616 				ValaPropertyAccessor* _tmp45_;
16617 				ValaPropertyAccessor* _tmp46_;
16618 				ValaBlock* block = NULL;
16619 				ValaProperty* _tmp52_;
16620 				ValaDataType* _tmp53_;
16621 				ValaBlock* _tmp54_;
16622 				ValaSourceLocation _tmp55_;
16623 				ValaSourceReference* _tmp56_;
16624 				ValaSourceReference* _tmp57_;
16625 				ValaPropertyAccessor* _tmp58_;
16626 				ValaPropertyAccessor* _tmp59_;
16627 				ValaProperty* _tmp60_;
16628 				ValaPropertyAccessor* _tmp61_;
16629 				ValaPropertyAccessor* _tmp62_;
16630 				ValaList* _tmp63_;
16631 				ValaProperty* _tmp64_;
16632 				ValaPropertyAccessor* _tmp65_;
16633 				ValaPropertyAccessor* _tmp66_;
16634 				_tmp44_ = prop;
16635 				_tmp45_ = vala_property_get_get_accessor (_tmp44_);
16636 				_tmp46_ = _tmp45_;
16637 				if (_tmp46_ != NULL) {
16638 					GError* _tmp47_;
16639 					_tmp47_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "property get accessor already defined");
16640 					_inner_error0_ = _tmp47_;
16641 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16642 						g_propagate_error (error, _inner_error0_);
16643 						_vala_code_node_unref0 (value_type);
16644 						_vala_iterable_unref0 (attribs);
16645 						_vala_code_node_unref0 (prop);
16646 						_vala_code_node_unref0 (type);
16647 						_g_free0 (id);
16648 						return NULL;
16649 					} else {
16650 						_vala_code_node_unref0 (value_type);
16651 						_vala_iterable_unref0 (attribs);
16652 						_vala_code_node_unref0 (prop);
16653 						_vala_code_node_unref0 (type);
16654 						_g_free0 (id);
16655 						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);
16656 						g_clear_error (&_inner_error0_);
16657 						return NULL;
16658 					}
16659 				}
16660 				block = NULL;
16661 				if (vala_genie_parser_accept_block (self)) {
16662 					ValaBlock* _tmp48_ = NULL;
16663 					ValaBlock* _tmp49_;
16664 					ValaBlock* _tmp50_;
16665 					ValaProperty* _tmp51_;
16666 					_tmp49_ = vala_genie_parser_parse_block (self, &_inner_error0_);
16667 					_tmp48_ = _tmp49_;
16668 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
16669 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16670 							g_propagate_error (error, _inner_error0_);
16671 							_vala_code_node_unref0 (block);
16672 							_vala_code_node_unref0 (value_type);
16673 							_vala_iterable_unref0 (attribs);
16674 							_vala_code_node_unref0 (prop);
16675 							_vala_code_node_unref0 (type);
16676 							_g_free0 (id);
16677 							return NULL;
16678 						} else {
16679 							_vala_code_node_unref0 (block);
16680 							_vala_code_node_unref0 (value_type);
16681 							_vala_iterable_unref0 (attribs);
16682 							_vala_code_node_unref0 (prop);
16683 							_vala_code_node_unref0 (type);
16684 							_g_free0 (id);
16685 							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);
16686 							g_clear_error (&_inner_error0_);
16687 							return NULL;
16688 						}
16689 					}
16690 					_tmp50_ = _tmp48_;
16691 					_tmp48_ = NULL;
16692 					_vala_code_node_unref0 (block);
16693 					block = _tmp50_;
16694 					_tmp51_ = prop;
16695 					vala_symbol_set_external ((ValaSymbol*) _tmp51_, FALSE);
16696 					_vala_code_node_unref0 (_tmp48_);
16697 				}
16698 				_tmp52_ = prop;
16699 				_tmp53_ = value_type;
16700 				_tmp54_ = block;
16701 				_tmp55_ = accessor_begin;
16702 				_tmp56_ = vala_genie_parser_get_src (self, &_tmp55_);
16703 				_tmp57_ = _tmp56_;
16704 				_tmp58_ = vala_property_accessor_new (TRUE, FALSE, FALSE, _tmp53_, _tmp54_, _tmp57_, NULL);
16705 				_tmp59_ = _tmp58_;
16706 				vala_property_set_get_accessor (_tmp52_, _tmp59_);
16707 				_vala_code_node_unref0 (_tmp59_);
16708 				_vala_source_reference_unref0 (_tmp57_);
16709 				_tmp60_ = prop;
16710 				_tmp61_ = vala_property_get_get_accessor (_tmp60_);
16711 				_tmp62_ = _tmp61_;
16712 				_tmp63_ = attribs;
16713 				vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp62_, _tmp63_);
16714 				_tmp64_ = prop;
16715 				_tmp65_ = vala_property_get_get_accessor (_tmp64_);
16716 				_tmp66_ = _tmp65_;
16717 				vala_symbol_set_access ((ValaSymbol*) _tmp66_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
16718 				_vala_code_node_unref0 (block);
16719 			} else {
16720 				gboolean _construct = FALSE;
16721 				ValaProperty* _tmp77_;
16722 				ValaPropertyAccessor* _tmp78_;
16723 				ValaPropertyAccessor* _tmp79_;
16724 				ValaBlock* block = NULL;
16725 				ValaProperty* _tmp85_;
16726 				ValaDataType* _tmp86_;
16727 				ValaBlock* _tmp87_;
16728 				ValaSourceLocation _tmp88_;
16729 				ValaSourceReference* _tmp89_;
16730 				ValaSourceReference* _tmp90_;
16731 				ValaPropertyAccessor* _tmp91_;
16732 				ValaPropertyAccessor* _tmp92_;
16733 				ValaProperty* _tmp93_;
16734 				ValaPropertyAccessor* _tmp94_;
16735 				ValaPropertyAccessor* _tmp95_;
16736 				ValaList* _tmp96_;
16737 				ValaProperty* _tmp97_;
16738 				ValaPropertyAccessor* _tmp98_;
16739 				ValaPropertyAccessor* _tmp99_;
16740 				_construct = FALSE;
16741 				if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_SET)) {
16742 					gboolean _tmp68_ = FALSE;
16743 					ValaCodeContext* _tmp69_;
16744 					ValaProfile _tmp70_;
16745 					ValaProfile _tmp71_;
16746 					if (readonly) {
16747 						GError* _tmp67_;
16748 						_tmp67_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "set block not allowed for a read only property");
16749 						_inner_error0_ = _tmp67_;
16750 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16751 							g_propagate_error (error, _inner_error0_);
16752 							_vala_code_node_unref0 (value_type);
16753 							_vala_iterable_unref0 (attribs);
16754 							_vala_code_node_unref0 (prop);
16755 							_vala_code_node_unref0 (type);
16756 							_g_free0 (id);
16757 							return NULL;
16758 						} else {
16759 							_vala_code_node_unref0 (value_type);
16760 							_vala_iterable_unref0 (attribs);
16761 							_vala_code_node_unref0 (prop);
16762 							_vala_code_node_unref0 (type);
16763 							_g_free0 (id);
16764 							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);
16765 							g_clear_error (&_inner_error0_);
16766 							return NULL;
16767 						}
16768 					}
16769 					_tmp69_ = self->priv->context;
16770 					_tmp70_ = vala_code_context_get_profile (_tmp69_);
16771 					_tmp71_ = _tmp70_;
16772 					if (_tmp71_ == VALA_PROFILE_GOBJECT) {
16773 						_tmp68_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_CONSTRUCT);
16774 					} else {
16775 						_tmp68_ = FALSE;
16776 					}
16777 					_construct = _tmp68_;
16778 				} else {
16779 					gboolean _tmp72_ = FALSE;
16780 					ValaCodeContext* _tmp73_;
16781 					ValaProfile _tmp74_;
16782 					ValaProfile _tmp75_;
16783 					_tmp73_ = self->priv->context;
16784 					_tmp74_ = vala_code_context_get_profile (_tmp73_);
16785 					_tmp75_ = _tmp74_;
16786 					if (_tmp75_ == VALA_PROFILE_GOBJECT) {
16787 						_tmp72_ = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_CONSTRUCT);
16788 					} else {
16789 						_tmp72_ = FALSE;
16790 					}
16791 					if (_tmp72_) {
16792 						_construct = TRUE;
16793 					} else {
16794 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL)) {
16795 							GError* _tmp76_;
16796 							_tmp76_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "expected get, set, or construct");
16797 							_inner_error0_ = _tmp76_;
16798 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16799 								g_propagate_error (error, _inner_error0_);
16800 								_vala_code_node_unref0 (value_type);
16801 								_vala_iterable_unref0 (attribs);
16802 								_vala_code_node_unref0 (prop);
16803 								_vala_code_node_unref0 (type);
16804 								_g_free0 (id);
16805 								return NULL;
16806 							} else {
16807 								_vala_code_node_unref0 (value_type);
16808 								_vala_iterable_unref0 (attribs);
16809 								_vala_code_node_unref0 (prop);
16810 								_vala_code_node_unref0 (type);
16811 								_g_free0 (id);
16812 								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);
16813 								g_clear_error (&_inner_error0_);
16814 								return NULL;
16815 							}
16816 						}
16817 					}
16818 				}
16819 				_tmp77_ = prop;
16820 				_tmp78_ = vala_property_get_set_accessor (_tmp77_);
16821 				_tmp79_ = _tmp78_;
16822 				if (_tmp79_ != NULL) {
16823 					GError* _tmp80_;
16824 					_tmp80_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "property set accessor already defined");
16825 					_inner_error0_ = _tmp80_;
16826 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16827 						g_propagate_error (error, _inner_error0_);
16828 						_vala_code_node_unref0 (value_type);
16829 						_vala_iterable_unref0 (attribs);
16830 						_vala_code_node_unref0 (prop);
16831 						_vala_code_node_unref0 (type);
16832 						_g_free0 (id);
16833 						return NULL;
16834 					} else {
16835 						_vala_code_node_unref0 (value_type);
16836 						_vala_iterable_unref0 (attribs);
16837 						_vala_code_node_unref0 (prop);
16838 						_vala_code_node_unref0 (type);
16839 						_g_free0 (id);
16840 						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);
16841 						g_clear_error (&_inner_error0_);
16842 						return NULL;
16843 					}
16844 				}
16845 				block = NULL;
16846 				if (vala_genie_parser_accept_block (self)) {
16847 					ValaBlock* _tmp81_ = NULL;
16848 					ValaBlock* _tmp82_;
16849 					ValaBlock* _tmp83_;
16850 					ValaProperty* _tmp84_;
16851 					_tmp82_ = vala_genie_parser_parse_block (self, &_inner_error0_);
16852 					_tmp81_ = _tmp82_;
16853 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
16854 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16855 							g_propagate_error (error, _inner_error0_);
16856 							_vala_code_node_unref0 (block);
16857 							_vala_code_node_unref0 (value_type);
16858 							_vala_iterable_unref0 (attribs);
16859 							_vala_code_node_unref0 (prop);
16860 							_vala_code_node_unref0 (type);
16861 							_g_free0 (id);
16862 							return NULL;
16863 						} else {
16864 							_vala_code_node_unref0 (block);
16865 							_vala_code_node_unref0 (value_type);
16866 							_vala_iterable_unref0 (attribs);
16867 							_vala_code_node_unref0 (prop);
16868 							_vala_code_node_unref0 (type);
16869 							_g_free0 (id);
16870 							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);
16871 							g_clear_error (&_inner_error0_);
16872 							return NULL;
16873 						}
16874 					}
16875 					_tmp83_ = _tmp81_;
16876 					_tmp81_ = NULL;
16877 					_vala_code_node_unref0 (block);
16878 					block = _tmp83_;
16879 					_tmp84_ = prop;
16880 					vala_symbol_set_external ((ValaSymbol*) _tmp84_, FALSE);
16881 					_vala_code_node_unref0 (_tmp81_);
16882 				}
16883 				_tmp85_ = prop;
16884 				_tmp86_ = value_type;
16885 				_tmp87_ = block;
16886 				_tmp88_ = accessor_begin;
16887 				_tmp89_ = vala_genie_parser_get_src (self, &_tmp88_);
16888 				_tmp90_ = _tmp89_;
16889 				_tmp91_ = vala_property_accessor_new (FALSE, !readonly, _construct, _tmp86_, _tmp87_, _tmp90_, NULL);
16890 				_tmp92_ = _tmp91_;
16891 				vala_property_set_set_accessor (_tmp85_, _tmp92_);
16892 				_vala_code_node_unref0 (_tmp92_);
16893 				_vala_source_reference_unref0 (_tmp90_);
16894 				_tmp93_ = prop;
16895 				_tmp94_ = vala_property_get_set_accessor (_tmp93_);
16896 				_tmp95_ = _tmp94_;
16897 				_tmp96_ = attribs;
16898 				vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp95_, _tmp96_);
16899 				_tmp97_ = prop;
16900 				_tmp98_ = vala_property_get_set_accessor (_tmp97_);
16901 				_tmp99_ = _tmp98_;
16902 				vala_symbol_set_access ((ValaSymbol*) _tmp99_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
16903 				_vala_code_node_unref0 (block);
16904 			}
16905 			_vala_code_node_unref0 (value_type);
16906 			_vala_iterable_unref0 (attribs);
16907 		}
16908 		vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL);
16909 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
16910 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
16911 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16912 				g_propagate_error (error, _inner_error0_);
16913 				_vala_code_node_unref0 (prop);
16914 				_vala_code_node_unref0 (type);
16915 				_g_free0 (id);
16916 				return NULL;
16917 			} else {
16918 				_vala_code_node_unref0 (prop);
16919 				_vala_code_node_unref0 (type);
16920 				_g_free0 (id);
16921 				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);
16922 				g_clear_error (&_inner_error0_);
16923 				return NULL;
16924 			}
16925 		}
16926 	} else {
16927 		ValaDataType* value_type = NULL;
16928 		ValaDataType* _tmp100_;
16929 		ValaDataType* _tmp101_;
16930 		ValaDataType* _tmp102_;
16931 		ValaProperty* _tmp103_;
16932 		ValaDataType* _tmp104_;
16933 		ValaSourceLocation _tmp105_;
16934 		ValaSourceReference* _tmp106_;
16935 		ValaSourceReference* _tmp107_;
16936 		ValaPropertyAccessor* _tmp108_;
16937 		ValaPropertyAccessor* _tmp109_;
16938 		ValaProperty* _tmp110_;
16939 		ValaPropertyAccessor* _tmp111_;
16940 		ValaPropertyAccessor* _tmp112_;
16941 		_tmp100_ = type;
16942 		_tmp101_ = vala_data_type_copy (_tmp100_);
16943 		value_type = _tmp101_;
16944 		_tmp102_ = value_type;
16945 		vala_data_type_set_value_owned (_tmp102_, FALSE);
16946 		_tmp103_ = prop;
16947 		_tmp104_ = value_type;
16948 		_tmp105_ = begin;
16949 		_tmp106_ = vala_genie_parser_get_src (self, &_tmp105_);
16950 		_tmp107_ = _tmp106_;
16951 		_tmp108_ = vala_property_accessor_new (TRUE, FALSE, FALSE, _tmp104_, NULL, _tmp107_, NULL);
16952 		_tmp109_ = _tmp108_;
16953 		vala_property_set_get_accessor (_tmp103_, _tmp109_);
16954 		_vala_code_node_unref0 (_tmp109_);
16955 		_vala_source_reference_unref0 (_tmp107_);
16956 		_tmp110_ = prop;
16957 		_tmp111_ = vala_property_get_get_accessor (_tmp110_);
16958 		_tmp112_ = _tmp111_;
16959 		vala_symbol_set_access ((ValaSymbol*) _tmp112_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
16960 		if (!readonly) {
16961 			ValaDataType* _tmp113_;
16962 			ValaDataType* _tmp114_;
16963 			ValaDataType* _tmp115_;
16964 			ValaProperty* _tmp116_;
16965 			ValaDataType* _tmp117_;
16966 			ValaSourceLocation _tmp118_;
16967 			ValaSourceReference* _tmp119_;
16968 			ValaSourceReference* _tmp120_;
16969 			ValaPropertyAccessor* _tmp121_;
16970 			ValaPropertyAccessor* _tmp122_;
16971 			ValaProperty* _tmp123_;
16972 			ValaPropertyAccessor* _tmp124_;
16973 			ValaPropertyAccessor* _tmp125_;
16974 			_tmp113_ = type;
16975 			_tmp114_ = vala_data_type_copy (_tmp113_);
16976 			_vala_code_node_unref0 (value_type);
16977 			value_type = _tmp114_;
16978 			_tmp115_ = value_type;
16979 			vala_data_type_set_value_owned (_tmp115_, FALSE);
16980 			_tmp116_ = prop;
16981 			_tmp117_ = value_type;
16982 			_tmp118_ = begin;
16983 			_tmp119_ = vala_genie_parser_get_src (self, &_tmp118_);
16984 			_tmp120_ = _tmp119_;
16985 			_tmp121_ = vala_property_accessor_new (FALSE, TRUE, FALSE, _tmp117_, NULL, _tmp120_, NULL);
16986 			_tmp122_ = _tmp121_;
16987 			vala_property_set_set_accessor (_tmp116_, _tmp122_);
16988 			_vala_code_node_unref0 (_tmp122_);
16989 			_vala_source_reference_unref0 (_tmp120_);
16990 			_tmp123_ = prop;
16991 			_tmp124_ = vala_property_get_set_accessor (_tmp123_);
16992 			_tmp125_ = _tmp124_;
16993 			vala_symbol_set_access ((ValaSymbol*) _tmp125_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
16994 		}
16995 		vala_genie_parser_expect_terminator (self, &_inner_error0_);
16996 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
16997 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
16998 				g_propagate_error (error, _inner_error0_);
16999 				_vala_code_node_unref0 (value_type);
17000 				_vala_code_node_unref0 (prop);
17001 				_vala_code_node_unref0 (type);
17002 				_g_free0 (id);
17003 				return NULL;
17004 			} else {
17005 				_vala_code_node_unref0 (value_type);
17006 				_vala_code_node_unref0 (prop);
17007 				_vala_code_node_unref0 (type);
17008 				_g_free0 (id);
17009 				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);
17010 				g_clear_error (&_inner_error0_);
17011 				return NULL;
17012 			}
17013 		}
17014 		_vala_code_node_unref0 (value_type);
17015 	}
17016 	result = prop;
17017 	_vala_code_node_unref0 (type);
17018 	_g_free0 (id);
17019 	return result;
17020 }
17021 
17022 static ValaSignal*
vala_genie_parser_parse_signal_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)17023 vala_genie_parser_parse_signal_declaration (ValaGenieParser* self,
17024                                             ValaList* attrs,
17025                                             GError** error)
17026 {
17027 	ValaSourceLocation begin = {0};
17028 	ValaSourceLocation _tmp0_ = {0};
17029 	ValaDataType* type = NULL;
17030 	ValaGenieParserModifierFlags flags = 0;
17031 	gchar* id = NULL;
17032 	gchar* _tmp1_;
17033 	ValaArrayList* params = NULL;
17034 	GEqualFunc _tmp2_;
17035 	ValaArrayList* _tmp3_;
17036 	ValaSignal* sig = NULL;
17037 	const gchar* _tmp12_;
17038 	ValaDataType* _tmp13_;
17039 	ValaSourceLocation _tmp14_;
17040 	ValaSourceReference* _tmp15_;
17041 	ValaSourceReference* _tmp16_;
17042 	ValaComment* _tmp17_;
17043 	ValaSignal* _tmp18_;
17044 	ValaSignal* _tmp19_;
17045 	ValaGenieParserModifierFlags _tmp20_;
17046 	ValaGenieParserModifierFlags _tmp26_;
17047 	ValaGenieParserModifierFlags _tmp28_;
17048 	ValaGenieParserModifierFlags _tmp30_;
17049 	ValaSignal* _tmp34_;
17050 	GError* _inner_error0_ = NULL;
17051 	ValaSignal* result = NULL;
17052 	g_return_val_if_fail (self != NULL, NULL);
17053 	vala_genie_parser_get_location (self, &_tmp0_);
17054 	begin = _tmp0_;
17055 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EVENT, &_inner_error0_);
17056 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17057 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17058 			g_propagate_error (error, _inner_error0_);
17059 			_vala_code_node_unref0 (type);
17060 			return NULL;
17061 		} else {
17062 			_vala_code_node_unref0 (type);
17063 			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);
17064 			g_clear_error (&_inner_error0_);
17065 			return NULL;
17066 		}
17067 	}
17068 	flags = vala_genie_parser_parse_member_declaration_modifiers (self);
17069 	_tmp1_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
17070 	id = _tmp1_;
17071 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17072 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17073 			g_propagate_error (error, _inner_error0_);
17074 			_vala_code_node_unref0 (type);
17075 			return NULL;
17076 		} else {
17077 			_vala_code_node_unref0 (type);
17078 			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);
17079 			g_clear_error (&_inner_error0_);
17080 			return NULL;
17081 		}
17082 	}
17083 	_tmp2_ = g_direct_equal;
17084 	_tmp3_ = vala_array_list_new (VALA_TYPE_PARAMETER, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp2_);
17085 	params = _tmp3_;
17086 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
17087 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17088 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17089 			g_propagate_error (error, _inner_error0_);
17090 			_vala_iterable_unref0 (params);
17091 			_g_free0 (id);
17092 			_vala_code_node_unref0 (type);
17093 			return NULL;
17094 		} else {
17095 			_vala_iterable_unref0 (params);
17096 			_g_free0 (id);
17097 			_vala_code_node_unref0 (type);
17098 			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);
17099 			g_clear_error (&_inner_error0_);
17100 			return NULL;
17101 		}
17102 	}
17103 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
17104 		{
17105 			gboolean _tmp4_ = FALSE;
17106 			_tmp4_ = TRUE;
17107 			while (TRUE) {
17108 				ValaParameter* param = NULL;
17109 				ValaParameter* _tmp5_;
17110 				ValaArrayList* _tmp6_;
17111 				ValaParameter* _tmp7_;
17112 				if (!_tmp4_) {
17113 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
17114 						break;
17115 					}
17116 				}
17117 				_tmp4_ = FALSE;
17118 				_tmp5_ = vala_genie_parser_parse_parameter (self, &_inner_error0_);
17119 				param = _tmp5_;
17120 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
17121 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17122 						g_propagate_error (error, _inner_error0_);
17123 						_vala_iterable_unref0 (params);
17124 						_g_free0 (id);
17125 						_vala_code_node_unref0 (type);
17126 						return NULL;
17127 					} else {
17128 						_vala_iterable_unref0 (params);
17129 						_g_free0 (id);
17130 						_vala_code_node_unref0 (type);
17131 						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);
17132 						g_clear_error (&_inner_error0_);
17133 						return NULL;
17134 					}
17135 				}
17136 				_tmp6_ = params;
17137 				_tmp7_ = param;
17138 				vala_collection_add ((ValaCollection*) _tmp6_, _tmp7_);
17139 				_vala_code_node_unref0 (param);
17140 			}
17141 		}
17142 	}
17143 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
17144 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17145 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17146 			g_propagate_error (error, _inner_error0_);
17147 			_vala_iterable_unref0 (params);
17148 			_g_free0 (id);
17149 			_vala_code_node_unref0 (type);
17150 			return NULL;
17151 		} else {
17152 			_vala_iterable_unref0 (params);
17153 			_g_free0 (id);
17154 			_vala_code_node_unref0 (type);
17155 			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);
17156 			g_clear_error (&_inner_error0_);
17157 			return NULL;
17158 		}
17159 	}
17160 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
17161 		ValaDataType* _tmp8_ = NULL;
17162 		ValaDataType* _tmp9_;
17163 		ValaDataType* _tmp10_;
17164 		_tmp9_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
17165 		_tmp8_ = _tmp9_;
17166 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
17167 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17168 				g_propagate_error (error, _inner_error0_);
17169 				_vala_iterable_unref0 (params);
17170 				_g_free0 (id);
17171 				_vala_code_node_unref0 (type);
17172 				return NULL;
17173 			} else {
17174 				_vala_iterable_unref0 (params);
17175 				_g_free0 (id);
17176 				_vala_code_node_unref0 (type);
17177 				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);
17178 				g_clear_error (&_inner_error0_);
17179 				return NULL;
17180 			}
17181 		}
17182 		_tmp10_ = _tmp8_;
17183 		_tmp8_ = NULL;
17184 		_vala_code_node_unref0 (type);
17185 		type = _tmp10_;
17186 		_vala_code_node_unref0 (_tmp8_);
17187 	} else {
17188 		ValaVoidType* _tmp11_;
17189 		_tmp11_ = vala_void_type_new (NULL);
17190 		_vala_code_node_unref0 (type);
17191 		type = (ValaDataType*) _tmp11_;
17192 	}
17193 	_tmp12_ = id;
17194 	_tmp13_ = type;
17195 	_tmp14_ = begin;
17196 	_tmp15_ = vala_genie_parser_get_src (self, &_tmp14_);
17197 	_tmp16_ = _tmp15_;
17198 	_tmp17_ = self->priv->comment;
17199 	_tmp18_ = vala_signal_new (_tmp12_, _tmp13_, _tmp16_, _tmp17_);
17200 	_tmp19_ = _tmp18_;
17201 	_vala_source_reference_unref0 (_tmp16_);
17202 	sig = _tmp19_;
17203 	_tmp20_ = flags;
17204 	if ((_tmp20_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
17205 		ValaSignal* _tmp21_;
17206 		_tmp21_ = sig;
17207 		vala_symbol_set_access ((ValaSymbol*) _tmp21_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
17208 	} else {
17209 		ValaGenieParserModifierFlags _tmp22_;
17210 		_tmp22_ = flags;
17211 		if ((_tmp22_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
17212 			ValaSignal* _tmp23_;
17213 			_tmp23_ = sig;
17214 			vala_symbol_set_access ((ValaSymbol*) _tmp23_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
17215 		} else {
17216 			ValaSignal* _tmp24_;
17217 			const gchar* _tmp25_;
17218 			_tmp24_ = sig;
17219 			_tmp25_ = id;
17220 			vala_symbol_set_access ((ValaSymbol*) _tmp24_, vala_genie_parser_get_default_accessibility (self, _tmp25_));
17221 		}
17222 	}
17223 	_tmp26_ = flags;
17224 	if ((_tmp26_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) == VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL) {
17225 		ValaSignal* _tmp27_;
17226 		_tmp27_ = sig;
17227 		vala_signal_set_is_virtual (_tmp27_, TRUE);
17228 	}
17229 	_tmp28_ = flags;
17230 	if ((_tmp28_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) == VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) {
17231 		ValaSignal* _tmp29_;
17232 		_tmp29_ = sig;
17233 		vala_symbol_set_hides ((ValaSymbol*) _tmp29_, TRUE);
17234 	}
17235 	_tmp30_ = flags;
17236 	if ((_tmp30_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) {
17237 		GError* _tmp31_;
17238 		_tmp31_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "`static' modifier not allowed on signals");
17239 		_inner_error0_ = _tmp31_;
17240 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17241 			g_propagate_error (error, _inner_error0_);
17242 			_vala_code_node_unref0 (sig);
17243 			_vala_iterable_unref0 (params);
17244 			_g_free0 (id);
17245 			_vala_code_node_unref0 (type);
17246 			return NULL;
17247 		} else {
17248 			_vala_code_node_unref0 (sig);
17249 			_vala_iterable_unref0 (params);
17250 			_g_free0 (id);
17251 			_vala_code_node_unref0 (type);
17252 			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);
17253 			g_clear_error (&_inner_error0_);
17254 			return NULL;
17255 		}
17256 	} else {
17257 		ValaGenieParserModifierFlags _tmp32_;
17258 		_tmp32_ = flags;
17259 		if ((_tmp32_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) == VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) {
17260 			GError* _tmp33_;
17261 			_tmp33_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "`class' modifier not allowed on signals");
17262 			_inner_error0_ = _tmp33_;
17263 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17264 				g_propagate_error (error, _inner_error0_);
17265 				_vala_code_node_unref0 (sig);
17266 				_vala_iterable_unref0 (params);
17267 				_g_free0 (id);
17268 				_vala_code_node_unref0 (type);
17269 				return NULL;
17270 			} else {
17271 				_vala_code_node_unref0 (sig);
17272 				_vala_iterable_unref0 (params);
17273 				_g_free0 (id);
17274 				_vala_code_node_unref0 (type);
17275 				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);
17276 				g_clear_error (&_inner_error0_);
17277 				return NULL;
17278 			}
17279 		}
17280 	}
17281 	_tmp34_ = sig;
17282 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp34_, attrs);
17283 	{
17284 		ValaArrayList* _formal_param_list = NULL;
17285 		ValaArrayList* _tmp35_;
17286 		ValaArrayList* _tmp36_;
17287 		gint _formal_param_size = 0;
17288 		ValaArrayList* _tmp37_;
17289 		gint _tmp38_;
17290 		gint _tmp39_;
17291 		gint _formal_param_index = 0;
17292 		_tmp35_ = params;
17293 		_tmp36_ = _vala_iterable_ref0 (_tmp35_);
17294 		_formal_param_list = _tmp36_;
17295 		_tmp37_ = _formal_param_list;
17296 		_tmp38_ = vala_collection_get_size ((ValaCollection*) _tmp37_);
17297 		_tmp39_ = _tmp38_;
17298 		_formal_param_size = _tmp39_;
17299 		_formal_param_index = -1;
17300 		while (TRUE) {
17301 			gint _tmp40_;
17302 			gint _tmp41_;
17303 			ValaParameter* formal_param = NULL;
17304 			ValaArrayList* _tmp42_;
17305 			gpointer _tmp43_;
17306 			ValaSignal* _tmp44_;
17307 			ValaParameter* _tmp45_;
17308 			_formal_param_index = _formal_param_index + 1;
17309 			_tmp40_ = _formal_param_index;
17310 			_tmp41_ = _formal_param_size;
17311 			if (!(_tmp40_ < _tmp41_)) {
17312 				break;
17313 			}
17314 			_tmp42_ = _formal_param_list;
17315 			_tmp43_ = vala_list_get ((ValaList*) _tmp42_, _formal_param_index);
17316 			formal_param = (ValaParameter*) _tmp43_;
17317 			_tmp44_ = sig;
17318 			_tmp45_ = formal_param;
17319 			vala_callable_add_parameter ((ValaCallable*) _tmp44_, _tmp45_);
17320 			_vala_code_node_unref0 (formal_param);
17321 		}
17322 		_vala_iterable_unref0 (_formal_param_list);
17323 	}
17324 	if (!vala_genie_parser_accept_terminator (self)) {
17325 		ValaBlock* _tmp46_ = NULL;
17326 		ValaBlock* _tmp47_;
17327 		ValaSignal* _tmp48_;
17328 		_tmp47_ = vala_genie_parser_parse_block (self, &_inner_error0_);
17329 		_tmp46_ = _tmp47_;
17330 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
17331 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17332 				g_propagate_error (error, _inner_error0_);
17333 				_vala_code_node_unref0 (sig);
17334 				_vala_iterable_unref0 (params);
17335 				_g_free0 (id);
17336 				_vala_code_node_unref0 (type);
17337 				return NULL;
17338 			} else {
17339 				_vala_code_node_unref0 (sig);
17340 				_vala_iterable_unref0 (params);
17341 				_g_free0 (id);
17342 				_vala_code_node_unref0 (type);
17343 				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);
17344 				g_clear_error (&_inner_error0_);
17345 				return NULL;
17346 			}
17347 		}
17348 		_tmp48_ = sig;
17349 		vala_signal_set_body (_tmp48_, _tmp46_);
17350 		_vala_code_node_unref0 (_tmp46_);
17351 	}
17352 	result = sig;
17353 	_vala_iterable_unref0 (params);
17354 	_g_free0 (id);
17355 	_vala_code_node_unref0 (type);
17356 	return result;
17357 }
17358 
17359 static ValaConstructor*
vala_genie_parser_parse_constructor_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)17360 vala_genie_parser_parse_constructor_declaration (ValaGenieParser* self,
17361                                                  ValaList* attrs,
17362                                                  GError** error)
17363 {
17364 	ValaSourceLocation begin = {0};
17365 	ValaSourceLocation _tmp0_ = {0};
17366 	ValaGenieParserModifierFlags flags = 0;
17367 	ValaConstructor* c = NULL;
17368 	ValaSourceLocation _tmp1_;
17369 	ValaSourceReference* _tmp2_;
17370 	ValaSourceReference* _tmp3_;
17371 	ValaConstructor* _tmp4_;
17372 	ValaConstructor* _tmp5_;
17373 	ValaGenieParserModifierFlags _tmp6_;
17374 	ValaBlock* _tmp10_ = NULL;
17375 	ValaBlock* _tmp11_;
17376 	ValaConstructor* _tmp12_;
17377 	GError* _inner_error0_ = NULL;
17378 	ValaConstructor* result = NULL;
17379 	g_return_val_if_fail (self != NULL, NULL);
17380 	vala_genie_parser_get_location (self, &_tmp0_);
17381 	begin = _tmp0_;
17382 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INIT, &_inner_error0_);
17383 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17384 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17385 			g_propagate_error (error, _inner_error0_);
17386 			return NULL;
17387 		} else {
17388 			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);
17389 			g_clear_error (&_inner_error0_);
17390 			return NULL;
17391 		}
17392 	}
17393 	flags = vala_genie_parser_parse_member_declaration_modifiers (self);
17394 	_tmp1_ = begin;
17395 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
17396 	_tmp3_ = _tmp2_;
17397 	_tmp4_ = vala_constructor_new (_tmp3_);
17398 	_tmp5_ = _tmp4_;
17399 	_vala_source_reference_unref0 (_tmp3_);
17400 	c = _tmp5_;
17401 	_tmp6_ = flags;
17402 	if ((_tmp6_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) {
17403 		ValaConstructor* _tmp7_;
17404 		_tmp7_ = c;
17405 		vala_constructor_set_binding (_tmp7_, VALA_MEMBER_BINDING_STATIC);
17406 	} else {
17407 		ValaGenieParserModifierFlags _tmp8_;
17408 		_tmp8_ = flags;
17409 		if ((_tmp8_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) == VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS) {
17410 			ValaConstructor* _tmp9_;
17411 			_tmp9_ = c;
17412 			vala_constructor_set_binding (_tmp9_, VALA_MEMBER_BINDING_CLASS);
17413 		}
17414 	}
17415 	vala_genie_parser_accept_block (self);
17416 	_tmp11_ = vala_genie_parser_parse_block (self, &_inner_error0_);
17417 	_tmp10_ = _tmp11_;
17418 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17419 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17420 			g_propagate_error (error, _inner_error0_);
17421 			_vala_code_node_unref0 (c);
17422 			return NULL;
17423 		} else {
17424 			_vala_code_node_unref0 (c);
17425 			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);
17426 			g_clear_error (&_inner_error0_);
17427 			return NULL;
17428 		}
17429 	}
17430 	_tmp12_ = c;
17431 	vala_subroutine_set_body ((ValaSubroutine*) _tmp12_, _tmp10_);
17432 	result = c;
17433 	_vala_code_node_unref0 (_tmp10_);
17434 	return result;
17435 }
17436 
17437 static ValaDestructor*
vala_genie_parser_parse_destructor_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)17438 vala_genie_parser_parse_destructor_declaration (ValaGenieParser* self,
17439                                                 ValaList* attrs,
17440                                                 GError** error)
17441 {
17442 	ValaSourceLocation begin = {0};
17443 	ValaSourceLocation _tmp0_ = {0};
17444 	ValaDestructor* d = NULL;
17445 	ValaSourceLocation _tmp1_;
17446 	ValaSourceReference* _tmp2_;
17447 	ValaSourceReference* _tmp3_;
17448 	ValaDestructor* _tmp4_;
17449 	ValaDestructor* _tmp5_;
17450 	ValaBlock* _tmp6_ = NULL;
17451 	ValaBlock* _tmp7_;
17452 	ValaDestructor* _tmp8_;
17453 	GError* _inner_error0_ = NULL;
17454 	ValaDestructor* result = NULL;
17455 	g_return_val_if_fail (self != NULL, NULL);
17456 	vala_genie_parser_get_location (self, &_tmp0_);
17457 	begin = _tmp0_;
17458 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_FINAL, &_inner_error0_);
17459 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17460 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17461 			g_propagate_error (error, _inner_error0_);
17462 			return NULL;
17463 		} else {
17464 			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);
17465 			g_clear_error (&_inner_error0_);
17466 			return NULL;
17467 		}
17468 	}
17469 	_tmp1_ = begin;
17470 	_tmp2_ = vala_genie_parser_get_src (self, &_tmp1_);
17471 	_tmp3_ = _tmp2_;
17472 	_tmp4_ = vala_destructor_new (_tmp3_);
17473 	_tmp5_ = _tmp4_;
17474 	_vala_source_reference_unref0 (_tmp3_);
17475 	d = _tmp5_;
17476 	vala_genie_parser_accept_block (self);
17477 	_tmp7_ = vala_genie_parser_parse_block (self, &_inner_error0_);
17478 	_tmp6_ = _tmp7_;
17479 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17480 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17481 			g_propagate_error (error, _inner_error0_);
17482 			_vala_code_node_unref0 (d);
17483 			return NULL;
17484 		} else {
17485 			_vala_code_node_unref0 (d);
17486 			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);
17487 			g_clear_error (&_inner_error0_);
17488 			return NULL;
17489 		}
17490 	}
17491 	_tmp8_ = d;
17492 	vala_subroutine_set_body ((ValaSubroutine*) _tmp8_, _tmp6_);
17493 	result = d;
17494 	_vala_code_node_unref0 (_tmp6_);
17495 	return result;
17496 }
17497 
17498 static ValaSymbol*
vala_genie_parser_parse_struct_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)17499 vala_genie_parser_parse_struct_declaration (ValaGenieParser* self,
17500                                             ValaList* attrs,
17501                                             GError** error)
17502 {
17503 	ValaSourceLocation begin = {0};
17504 	ValaSourceLocation _tmp0_ = {0};
17505 	ValaGenieParserModifierFlags flags = 0;
17506 	ValaUnresolvedSymbol* sym = NULL;
17507 	ValaUnresolvedSymbol* _tmp1_;
17508 	ValaList* type_param_list = NULL;
17509 	ValaList* _tmp2_;
17510 	ValaDataType* base_type = NULL;
17511 	ValaStruct* st = NULL;
17512 	ValaUnresolvedSymbol* _tmp6_;
17513 	const gchar* _tmp7_;
17514 	const gchar* _tmp8_;
17515 	ValaSourceLocation _tmp9_;
17516 	ValaSourceReference* _tmp10_;
17517 	ValaSourceReference* _tmp11_;
17518 	ValaComment* _tmp12_;
17519 	ValaStruct* _tmp13_;
17520 	ValaStruct* _tmp14_;
17521 	ValaGenieParserModifierFlags _tmp15_;
17522 	ValaStruct* _tmp23_;
17523 	ValaDataType* _tmp35_;
17524 	ValaStruct* _tmp38_;
17525 	const gchar* _tmp39_;
17526 	const gchar* _tmp40_;
17527 	gchar* _tmp41_;
17528 	ValaStruct* _tmp42_;
17529 	ValaSymbol* _result_ = NULL;
17530 	ValaStruct* _tmp43_;
17531 	ValaSymbol* _tmp44_;
17532 	GError* _inner_error0_ = NULL;
17533 	ValaSymbol* result = NULL;
17534 	g_return_val_if_fail (self != NULL, NULL);
17535 	vala_genie_parser_get_location (self, &_tmp0_);
17536 	begin = _tmp0_;
17537 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_STRUCT, &_inner_error0_);
17538 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17539 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17540 			g_propagate_error (error, _inner_error0_);
17541 			return NULL;
17542 		} else {
17543 			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);
17544 			g_clear_error (&_inner_error0_);
17545 			return NULL;
17546 		}
17547 	}
17548 	flags = vala_genie_parser_parse_type_declaration_modifiers (self);
17549 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
17550 	sym = _tmp1_;
17551 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17552 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17553 			g_propagate_error (error, _inner_error0_);
17554 			return NULL;
17555 		} else {
17556 			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);
17557 			g_clear_error (&_inner_error0_);
17558 			return NULL;
17559 		}
17560 	}
17561 	_tmp2_ = vala_genie_parser_parse_type_parameter_list (self, &_inner_error0_);
17562 	type_param_list = _tmp2_;
17563 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17564 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17565 			g_propagate_error (error, _inner_error0_);
17566 			_vala_code_node_unref0 (sym);
17567 			return NULL;
17568 		} else {
17569 			_vala_code_node_unref0 (sym);
17570 			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);
17571 			g_clear_error (&_inner_error0_);
17572 			return NULL;
17573 		}
17574 	}
17575 	base_type = NULL;
17576 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
17577 		ValaDataType* _tmp3_ = NULL;
17578 		ValaDataType* _tmp4_;
17579 		ValaDataType* _tmp5_;
17580 		_tmp4_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
17581 		_tmp3_ = _tmp4_;
17582 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
17583 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17584 				g_propagate_error (error, _inner_error0_);
17585 				_vala_code_node_unref0 (base_type);
17586 				_vala_iterable_unref0 (type_param_list);
17587 				_vala_code_node_unref0 (sym);
17588 				return NULL;
17589 			} else {
17590 				_vala_code_node_unref0 (base_type);
17591 				_vala_iterable_unref0 (type_param_list);
17592 				_vala_code_node_unref0 (sym);
17593 				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);
17594 				g_clear_error (&_inner_error0_);
17595 				return NULL;
17596 			}
17597 		}
17598 		_tmp5_ = _tmp3_;
17599 		_tmp3_ = NULL;
17600 		_vala_code_node_unref0 (base_type);
17601 		base_type = _tmp5_;
17602 		_vala_code_node_unref0 (_tmp3_);
17603 	}
17604 	_tmp6_ = sym;
17605 	_tmp7_ = vala_symbol_get_name ((ValaSymbol*) _tmp6_);
17606 	_tmp8_ = _tmp7_;
17607 	_tmp9_ = begin;
17608 	_tmp10_ = vala_genie_parser_get_src (self, &_tmp9_);
17609 	_tmp11_ = _tmp10_;
17610 	_tmp12_ = self->priv->comment;
17611 	_tmp13_ = vala_struct_new (_tmp8_, _tmp11_, _tmp12_);
17612 	_tmp14_ = _tmp13_;
17613 	_vala_source_reference_unref0 (_tmp11_);
17614 	st = _tmp14_;
17615 	_tmp15_ = flags;
17616 	if ((_tmp15_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
17617 		ValaStruct* _tmp16_;
17618 		_tmp16_ = st;
17619 		vala_symbol_set_access ((ValaSymbol*) _tmp16_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
17620 	} else {
17621 		ValaGenieParserModifierFlags _tmp17_;
17622 		_tmp17_ = flags;
17623 		if ((_tmp17_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
17624 			ValaStruct* _tmp18_;
17625 			_tmp18_ = st;
17626 			vala_symbol_set_access ((ValaSymbol*) _tmp18_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
17627 		} else {
17628 			ValaStruct* _tmp19_;
17629 			ValaUnresolvedSymbol* _tmp20_;
17630 			const gchar* _tmp21_;
17631 			const gchar* _tmp22_;
17632 			_tmp19_ = st;
17633 			_tmp20_ = sym;
17634 			_tmp21_ = vala_symbol_get_name ((ValaSymbol*) _tmp20_);
17635 			_tmp22_ = _tmp21_;
17636 			vala_symbol_set_access ((ValaSymbol*) _tmp19_, vala_genie_parser_get_default_accessibility (self, _tmp22_));
17637 		}
17638 	}
17639 	_tmp23_ = st;
17640 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp23_, attrs);
17641 	{
17642 		ValaList* _type_param_list = NULL;
17643 		ValaList* _tmp24_;
17644 		ValaList* _tmp25_;
17645 		gint _type_param_size = 0;
17646 		ValaList* _tmp26_;
17647 		gint _tmp27_;
17648 		gint _tmp28_;
17649 		gint _type_param_index = 0;
17650 		_tmp24_ = type_param_list;
17651 		_tmp25_ = _vala_iterable_ref0 (_tmp24_);
17652 		_type_param_list = _tmp25_;
17653 		_tmp26_ = _type_param_list;
17654 		_tmp27_ = vala_collection_get_size ((ValaCollection*) _tmp26_);
17655 		_tmp28_ = _tmp27_;
17656 		_type_param_size = _tmp28_;
17657 		_type_param_index = -1;
17658 		while (TRUE) {
17659 			gint _tmp29_;
17660 			gint _tmp30_;
17661 			ValaTypeParameter* type_param = NULL;
17662 			ValaList* _tmp31_;
17663 			gpointer _tmp32_;
17664 			ValaStruct* _tmp33_;
17665 			ValaTypeParameter* _tmp34_;
17666 			_type_param_index = _type_param_index + 1;
17667 			_tmp29_ = _type_param_index;
17668 			_tmp30_ = _type_param_size;
17669 			if (!(_tmp29_ < _tmp30_)) {
17670 				break;
17671 			}
17672 			_tmp31_ = _type_param_list;
17673 			_tmp32_ = vala_list_get (_tmp31_, _type_param_index);
17674 			type_param = (ValaTypeParameter*) _tmp32_;
17675 			_tmp33_ = st;
17676 			_tmp34_ = type_param;
17677 			vala_struct_add_type_parameter (_tmp33_, _tmp34_);
17678 			_vala_code_node_unref0 (type_param);
17679 		}
17680 		_vala_iterable_unref0 (_type_param_list);
17681 	}
17682 	_tmp35_ = base_type;
17683 	if (_tmp35_ != NULL) {
17684 		ValaStruct* _tmp36_;
17685 		ValaDataType* _tmp37_;
17686 		_tmp36_ = st;
17687 		_tmp37_ = base_type;
17688 		vala_struct_set_base_type (_tmp36_, _tmp37_);
17689 	}
17690 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
17691 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17692 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17693 			g_propagate_error (error, _inner_error0_);
17694 			_vala_code_node_unref0 (st);
17695 			_vala_code_node_unref0 (base_type);
17696 			_vala_iterable_unref0 (type_param_list);
17697 			_vala_code_node_unref0 (sym);
17698 			return NULL;
17699 		} else {
17700 			_vala_code_node_unref0 (st);
17701 			_vala_code_node_unref0 (base_type);
17702 			_vala_iterable_unref0 (type_param_list);
17703 			_vala_code_node_unref0 (sym);
17704 			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);
17705 			g_clear_error (&_inner_error0_);
17706 			return NULL;
17707 		}
17708 	}
17709 	_tmp38_ = st;
17710 	_tmp39_ = vala_symbol_get_name ((ValaSymbol*) _tmp38_);
17711 	_tmp40_ = _tmp39_;
17712 	_tmp41_ = g_strdup (_tmp40_);
17713 	_g_free0 (self->priv->class_name);
17714 	self->priv->class_name = _tmp41_;
17715 	_tmp42_ = st;
17716 	vala_genie_parser_parse_declarations (self, (ValaSymbol*) _tmp42_, FALSE, &_inner_error0_);
17717 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17718 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17719 			g_propagate_error (error, _inner_error0_);
17720 			_vala_code_node_unref0 (st);
17721 			_vala_code_node_unref0 (base_type);
17722 			_vala_iterable_unref0 (type_param_list);
17723 			_vala_code_node_unref0 (sym);
17724 			return NULL;
17725 		} else {
17726 			_vala_code_node_unref0 (st);
17727 			_vala_code_node_unref0 (base_type);
17728 			_vala_iterable_unref0 (type_param_list);
17729 			_vala_code_node_unref0 (sym);
17730 			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);
17731 			g_clear_error (&_inner_error0_);
17732 			return NULL;
17733 		}
17734 	}
17735 	_tmp43_ = st;
17736 	_tmp44_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp43_);
17737 	_result_ = _tmp44_;
17738 	while (TRUE) {
17739 		ValaUnresolvedSymbol* _tmp45_;
17740 		ValaUnresolvedSymbol* _tmp46_;
17741 		ValaUnresolvedSymbol* _tmp47_;
17742 		ValaUnresolvedSymbol* _tmp48_;
17743 		ValaUnresolvedSymbol* _tmp49_;
17744 		ValaUnresolvedSymbol* _tmp50_;
17745 		ValaUnresolvedSymbol* _tmp51_;
17746 		ValaNamespace* ns = NULL;
17747 		ValaUnresolvedSymbol* _tmp52_;
17748 		const gchar* _tmp53_;
17749 		const gchar* _tmp54_;
17750 		ValaStruct* _tmp55_;
17751 		ValaSourceReference* _tmp56_;
17752 		ValaSourceReference* _tmp57_;
17753 		ValaNamespace* _tmp58_;
17754 		ValaSymbol* _tmp59_;
17755 		ValaNamespace* _tmp64_;
17756 		ValaSymbol* _tmp65_;
17757 		_tmp45_ = sym;
17758 		_tmp46_ = vala_unresolved_symbol_get_inner (_tmp45_);
17759 		_tmp47_ = _tmp46_;
17760 		if (!(_tmp47_ != NULL)) {
17761 			break;
17762 		}
17763 		_tmp48_ = sym;
17764 		_tmp49_ = vala_unresolved_symbol_get_inner (_tmp48_);
17765 		_tmp50_ = _tmp49_;
17766 		_tmp51_ = _vala_code_node_ref0 (_tmp50_);
17767 		_vala_code_node_unref0 (sym);
17768 		sym = _tmp51_;
17769 		_tmp52_ = sym;
17770 		_tmp53_ = vala_symbol_get_name ((ValaSymbol*) _tmp52_);
17771 		_tmp54_ = _tmp53_;
17772 		_tmp55_ = st;
17773 		_tmp56_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp55_);
17774 		_tmp57_ = _tmp56_;
17775 		_tmp58_ = vala_namespace_new (_tmp54_, _tmp57_);
17776 		ns = _tmp58_;
17777 		_tmp59_ = _result_;
17778 		if (VALA_IS_NAMESPACE (_tmp59_)) {
17779 			ValaNamespace* _tmp60_;
17780 			ValaSymbol* _tmp61_;
17781 			_tmp60_ = ns;
17782 			_tmp61_ = _result_;
17783 			vala_symbol_add_namespace ((ValaSymbol*) _tmp60_, G_TYPE_CHECK_INSTANCE_CAST (_tmp61_, VALA_TYPE_NAMESPACE, ValaNamespace));
17784 		} else {
17785 			ValaNamespace* _tmp62_;
17786 			ValaSymbol* _tmp63_;
17787 			_tmp62_ = ns;
17788 			_tmp63_ = _result_;
17789 			vala_symbol_add_struct ((ValaSymbol*) _tmp62_, G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_STRUCT, ValaStruct));
17790 		}
17791 		_tmp64_ = ns;
17792 		_tmp65_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp64_);
17793 		_vala_code_node_unref0 (_result_);
17794 		_result_ = _tmp65_;
17795 		_vala_code_node_unref0 (ns);
17796 	}
17797 	result = _result_;
17798 	_vala_code_node_unref0 (st);
17799 	_vala_code_node_unref0 (base_type);
17800 	_vala_iterable_unref0 (type_param_list);
17801 	_vala_code_node_unref0 (sym);
17802 	return result;
17803 }
17804 
17805 static void
vala_genie_parser_parse_struct_member(ValaGenieParser * self,ValaStruct * st,GError ** error)17806 vala_genie_parser_parse_struct_member (ValaGenieParser* self,
17807                                        ValaStruct* st,
17808                                        GError** error)
17809 {
17810 	ValaSymbol* sym = NULL;
17811 	ValaSymbol* _tmp0_;
17812 	GError* _inner_error0_ = NULL;
17813 	g_return_if_fail (self != NULL);
17814 	g_return_if_fail (st != NULL);
17815 	_tmp0_ = vala_genie_parser_parse_declaration (self, FALSE, &_inner_error0_);
17816 	sym = _tmp0_;
17817 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17818 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17819 			g_propagate_error (error, _inner_error0_);
17820 			return;
17821 		} else {
17822 			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);
17823 			g_clear_error (&_inner_error0_);
17824 			return;
17825 		}
17826 	}
17827 	if (VALA_IS_METHOD (sym)) {
17828 		vala_symbol_add_method ((ValaSymbol*) st, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod));
17829 	} else {
17830 		if (VALA_IS_FIELD (sym)) {
17831 			vala_symbol_add_field ((ValaSymbol*) st, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField));
17832 		} else {
17833 			if (VALA_IS_CONSTANT (sym)) {
17834 				vala_symbol_add_constant ((ValaSymbol*) st, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant));
17835 			} else {
17836 				if (VALA_IS_PROPERTY (sym)) {
17837 					vala_symbol_add_property ((ValaSymbol*) st, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_PROPERTY, ValaProperty));
17838 				} else {
17839 					ValaSourceReference* _tmp1_;
17840 					ValaSourceReference* _tmp2_;
17841 					_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
17842 					_tmp2_ = _tmp1_;
17843 					vala_report_error (_tmp2_, "unexpected declaration in struct");
17844 				}
17845 			}
17846 		}
17847 	}
17848 	_vala_code_node_unref0 (sym);
17849 }
17850 
17851 static ValaSymbol*
vala_genie_parser_parse_interface_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)17852 vala_genie_parser_parse_interface_declaration (ValaGenieParser* self,
17853                                                ValaList* attrs,
17854                                                GError** error)
17855 {
17856 	ValaSourceLocation begin = {0};
17857 	ValaSourceLocation _tmp0_ = {0};
17858 	ValaGenieParserModifierFlags flags = 0;
17859 	ValaUnresolvedSymbol* sym = NULL;
17860 	ValaUnresolvedSymbol* _tmp1_;
17861 	ValaList* type_param_list = NULL;
17862 	ValaList* _tmp2_;
17863 	ValaArrayList* base_types = NULL;
17864 	GEqualFunc _tmp3_;
17865 	ValaArrayList* _tmp4_;
17866 	ValaInterface* iface = NULL;
17867 	ValaUnresolvedSymbol* _tmp9_;
17868 	const gchar* _tmp10_;
17869 	const gchar* _tmp11_;
17870 	ValaSourceLocation _tmp12_;
17871 	ValaSourceReference* _tmp13_;
17872 	ValaSourceReference* _tmp14_;
17873 	ValaComment* _tmp15_;
17874 	ValaInterface* _tmp16_;
17875 	ValaInterface* _tmp17_;
17876 	ValaGenieParserModifierFlags _tmp18_;
17877 	ValaGenieParserModifierFlags _tmp26_;
17878 	ValaInterface* _tmp28_;
17879 	ValaInterface* _tmp51_;
17880 	ValaSymbol* _result_ = NULL;
17881 	ValaInterface* _tmp52_;
17882 	ValaSymbol* _tmp53_;
17883 	GError* _inner_error0_ = NULL;
17884 	ValaSymbol* result = NULL;
17885 	g_return_val_if_fail (self != NULL, NULL);
17886 	vala_genie_parser_get_location (self, &_tmp0_);
17887 	begin = _tmp0_;
17888 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INTERFACE, &_inner_error0_);
17889 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17890 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17891 			g_propagate_error (error, _inner_error0_);
17892 			return NULL;
17893 		} else {
17894 			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);
17895 			g_clear_error (&_inner_error0_);
17896 			return NULL;
17897 		}
17898 	}
17899 	flags = vala_genie_parser_parse_type_declaration_modifiers (self);
17900 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
17901 	sym = _tmp1_;
17902 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17903 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17904 			g_propagate_error (error, _inner_error0_);
17905 			return NULL;
17906 		} else {
17907 			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);
17908 			g_clear_error (&_inner_error0_);
17909 			return NULL;
17910 		}
17911 	}
17912 	_tmp2_ = vala_genie_parser_parse_type_parameter_list (self, &_inner_error0_);
17913 	type_param_list = _tmp2_;
17914 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
17915 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17916 			g_propagate_error (error, _inner_error0_);
17917 			_vala_code_node_unref0 (sym);
17918 			return NULL;
17919 		} else {
17920 			_vala_code_node_unref0 (sym);
17921 			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);
17922 			g_clear_error (&_inner_error0_);
17923 			return NULL;
17924 		}
17925 	}
17926 	_tmp3_ = g_direct_equal;
17927 	_tmp4_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp3_);
17928 	base_types = _tmp4_;
17929 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
17930 		{
17931 			gboolean _tmp5_ = FALSE;
17932 			_tmp5_ = TRUE;
17933 			while (TRUE) {
17934 				ValaDataType* type = NULL;
17935 				ValaDataType* _tmp6_;
17936 				ValaArrayList* _tmp7_;
17937 				ValaDataType* _tmp8_;
17938 				if (!_tmp5_) {
17939 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
17940 						break;
17941 					}
17942 				}
17943 				_tmp5_ = FALSE;
17944 				_tmp6_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
17945 				type = _tmp6_;
17946 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
17947 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
17948 						g_propagate_error (error, _inner_error0_);
17949 						_vala_iterable_unref0 (base_types);
17950 						_vala_iterable_unref0 (type_param_list);
17951 						_vala_code_node_unref0 (sym);
17952 						return NULL;
17953 					} else {
17954 						_vala_iterable_unref0 (base_types);
17955 						_vala_iterable_unref0 (type_param_list);
17956 						_vala_code_node_unref0 (sym);
17957 						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);
17958 						g_clear_error (&_inner_error0_);
17959 						return NULL;
17960 					}
17961 				}
17962 				_tmp7_ = base_types;
17963 				_tmp8_ = type;
17964 				vala_collection_add ((ValaCollection*) _tmp7_, _tmp8_);
17965 				_vala_code_node_unref0 (type);
17966 			}
17967 		}
17968 	}
17969 	_tmp9_ = sym;
17970 	_tmp10_ = vala_symbol_get_name ((ValaSymbol*) _tmp9_);
17971 	_tmp11_ = _tmp10_;
17972 	_tmp12_ = begin;
17973 	_tmp13_ = vala_genie_parser_get_src (self, &_tmp12_);
17974 	_tmp14_ = _tmp13_;
17975 	_tmp15_ = self->priv->comment;
17976 	_tmp16_ = vala_interface_new (_tmp11_, _tmp14_, _tmp15_);
17977 	_tmp17_ = _tmp16_;
17978 	_vala_source_reference_unref0 (_tmp14_);
17979 	iface = _tmp17_;
17980 	_tmp18_ = flags;
17981 	if ((_tmp18_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
17982 		ValaInterface* _tmp19_;
17983 		_tmp19_ = iface;
17984 		vala_symbol_set_access ((ValaSymbol*) _tmp19_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
17985 	} else {
17986 		ValaGenieParserModifierFlags _tmp20_;
17987 		_tmp20_ = flags;
17988 		if ((_tmp20_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
17989 			ValaInterface* _tmp21_;
17990 			_tmp21_ = iface;
17991 			vala_symbol_set_access ((ValaSymbol*) _tmp21_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
17992 		} else {
17993 			ValaInterface* _tmp22_;
17994 			ValaUnresolvedSymbol* _tmp23_;
17995 			const gchar* _tmp24_;
17996 			const gchar* _tmp25_;
17997 			_tmp22_ = iface;
17998 			_tmp23_ = sym;
17999 			_tmp24_ = vala_symbol_get_name ((ValaSymbol*) _tmp23_);
18000 			_tmp25_ = _tmp24_;
18001 			vala_symbol_set_access ((ValaSymbol*) _tmp22_, vala_genie_parser_get_default_accessibility (self, _tmp25_));
18002 		}
18003 	}
18004 	_tmp26_ = flags;
18005 	if ((_tmp26_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) == VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) {
18006 		ValaInterface* _tmp27_;
18007 		_tmp27_ = iface;
18008 		vala_symbol_set_is_extern ((ValaSymbol*) _tmp27_, TRUE);
18009 	}
18010 	_tmp28_ = iface;
18011 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp28_, attrs);
18012 	{
18013 		ValaList* _type_param_list = NULL;
18014 		ValaList* _tmp29_;
18015 		ValaList* _tmp30_;
18016 		gint _type_param_size = 0;
18017 		ValaList* _tmp31_;
18018 		gint _tmp32_;
18019 		gint _tmp33_;
18020 		gint _type_param_index = 0;
18021 		_tmp29_ = type_param_list;
18022 		_tmp30_ = _vala_iterable_ref0 (_tmp29_);
18023 		_type_param_list = _tmp30_;
18024 		_tmp31_ = _type_param_list;
18025 		_tmp32_ = vala_collection_get_size ((ValaCollection*) _tmp31_);
18026 		_tmp33_ = _tmp32_;
18027 		_type_param_size = _tmp33_;
18028 		_type_param_index = -1;
18029 		while (TRUE) {
18030 			gint _tmp34_;
18031 			gint _tmp35_;
18032 			ValaTypeParameter* type_param = NULL;
18033 			ValaList* _tmp36_;
18034 			gpointer _tmp37_;
18035 			ValaInterface* _tmp38_;
18036 			ValaTypeParameter* _tmp39_;
18037 			_type_param_index = _type_param_index + 1;
18038 			_tmp34_ = _type_param_index;
18039 			_tmp35_ = _type_param_size;
18040 			if (!(_tmp34_ < _tmp35_)) {
18041 				break;
18042 			}
18043 			_tmp36_ = _type_param_list;
18044 			_tmp37_ = vala_list_get (_tmp36_, _type_param_index);
18045 			type_param = (ValaTypeParameter*) _tmp37_;
18046 			_tmp38_ = iface;
18047 			_tmp39_ = type_param;
18048 			vala_object_type_symbol_add_type_parameter ((ValaObjectTypeSymbol*) _tmp38_, _tmp39_);
18049 			_vala_code_node_unref0 (type_param);
18050 		}
18051 		_vala_iterable_unref0 (_type_param_list);
18052 	}
18053 	{
18054 		ValaArrayList* _base_type_list = NULL;
18055 		ValaArrayList* _tmp40_;
18056 		ValaArrayList* _tmp41_;
18057 		gint _base_type_size = 0;
18058 		ValaArrayList* _tmp42_;
18059 		gint _tmp43_;
18060 		gint _tmp44_;
18061 		gint _base_type_index = 0;
18062 		_tmp40_ = base_types;
18063 		_tmp41_ = _vala_iterable_ref0 (_tmp40_);
18064 		_base_type_list = _tmp41_;
18065 		_tmp42_ = _base_type_list;
18066 		_tmp43_ = vala_collection_get_size ((ValaCollection*) _tmp42_);
18067 		_tmp44_ = _tmp43_;
18068 		_base_type_size = _tmp44_;
18069 		_base_type_index = -1;
18070 		while (TRUE) {
18071 			gint _tmp45_;
18072 			gint _tmp46_;
18073 			ValaDataType* base_type = NULL;
18074 			ValaArrayList* _tmp47_;
18075 			gpointer _tmp48_;
18076 			ValaInterface* _tmp49_;
18077 			ValaDataType* _tmp50_;
18078 			_base_type_index = _base_type_index + 1;
18079 			_tmp45_ = _base_type_index;
18080 			_tmp46_ = _base_type_size;
18081 			if (!(_tmp45_ < _tmp46_)) {
18082 				break;
18083 			}
18084 			_tmp47_ = _base_type_list;
18085 			_tmp48_ = vala_list_get ((ValaList*) _tmp47_, _base_type_index);
18086 			base_type = (ValaDataType*) _tmp48_;
18087 			_tmp49_ = iface;
18088 			_tmp50_ = base_type;
18089 			vala_interface_add_prerequisite (_tmp49_, _tmp50_);
18090 			_vala_code_node_unref0 (base_type);
18091 		}
18092 		_vala_iterable_unref0 (_base_type_list);
18093 	}
18094 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
18095 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18096 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18097 			g_propagate_error (error, _inner_error0_);
18098 			_vala_code_node_unref0 (iface);
18099 			_vala_iterable_unref0 (base_types);
18100 			_vala_iterable_unref0 (type_param_list);
18101 			_vala_code_node_unref0 (sym);
18102 			return NULL;
18103 		} else {
18104 			_vala_code_node_unref0 (iface);
18105 			_vala_iterable_unref0 (base_types);
18106 			_vala_iterable_unref0 (type_param_list);
18107 			_vala_code_node_unref0 (sym);
18108 			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);
18109 			g_clear_error (&_inner_error0_);
18110 			return NULL;
18111 		}
18112 	}
18113 	_tmp51_ = iface;
18114 	vala_genie_parser_parse_declarations (self, (ValaSymbol*) _tmp51_, FALSE, &_inner_error0_);
18115 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18116 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18117 			g_propagate_error (error, _inner_error0_);
18118 			_vala_code_node_unref0 (iface);
18119 			_vala_iterable_unref0 (base_types);
18120 			_vala_iterable_unref0 (type_param_list);
18121 			_vala_code_node_unref0 (sym);
18122 			return NULL;
18123 		} else {
18124 			_vala_code_node_unref0 (iface);
18125 			_vala_iterable_unref0 (base_types);
18126 			_vala_iterable_unref0 (type_param_list);
18127 			_vala_code_node_unref0 (sym);
18128 			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);
18129 			g_clear_error (&_inner_error0_);
18130 			return NULL;
18131 		}
18132 	}
18133 	_tmp52_ = iface;
18134 	_tmp53_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp52_);
18135 	_result_ = _tmp53_;
18136 	while (TRUE) {
18137 		ValaUnresolvedSymbol* _tmp54_;
18138 		ValaUnresolvedSymbol* _tmp55_;
18139 		ValaUnresolvedSymbol* _tmp56_;
18140 		ValaUnresolvedSymbol* _tmp57_;
18141 		ValaUnresolvedSymbol* _tmp58_;
18142 		ValaUnresolvedSymbol* _tmp59_;
18143 		ValaUnresolvedSymbol* _tmp60_;
18144 		ValaNamespace* ns = NULL;
18145 		ValaUnresolvedSymbol* _tmp61_;
18146 		const gchar* _tmp62_;
18147 		const gchar* _tmp63_;
18148 		ValaInterface* _tmp64_;
18149 		ValaSourceReference* _tmp65_;
18150 		ValaSourceReference* _tmp66_;
18151 		ValaNamespace* _tmp67_;
18152 		ValaSymbol* _tmp68_;
18153 		ValaNamespace* _tmp73_;
18154 		ValaSymbol* _tmp74_;
18155 		_tmp54_ = sym;
18156 		_tmp55_ = vala_unresolved_symbol_get_inner (_tmp54_);
18157 		_tmp56_ = _tmp55_;
18158 		if (!(_tmp56_ != NULL)) {
18159 			break;
18160 		}
18161 		_tmp57_ = sym;
18162 		_tmp58_ = vala_unresolved_symbol_get_inner (_tmp57_);
18163 		_tmp59_ = _tmp58_;
18164 		_tmp60_ = _vala_code_node_ref0 (_tmp59_);
18165 		_vala_code_node_unref0 (sym);
18166 		sym = _tmp60_;
18167 		_tmp61_ = sym;
18168 		_tmp62_ = vala_symbol_get_name ((ValaSymbol*) _tmp61_);
18169 		_tmp63_ = _tmp62_;
18170 		_tmp64_ = iface;
18171 		_tmp65_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp64_);
18172 		_tmp66_ = _tmp65_;
18173 		_tmp67_ = vala_namespace_new (_tmp63_, _tmp66_);
18174 		ns = _tmp67_;
18175 		_tmp68_ = _result_;
18176 		if (VALA_IS_NAMESPACE (_tmp68_)) {
18177 			ValaNamespace* _tmp69_;
18178 			ValaSymbol* _tmp70_;
18179 			_tmp69_ = ns;
18180 			_tmp70_ = _result_;
18181 			vala_symbol_add_namespace ((ValaSymbol*) _tmp69_, G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, VALA_TYPE_NAMESPACE, ValaNamespace));
18182 		} else {
18183 			ValaNamespace* _tmp71_;
18184 			ValaSymbol* _tmp72_;
18185 			_tmp71_ = ns;
18186 			_tmp72_ = _result_;
18187 			vala_symbol_add_interface ((ValaSymbol*) _tmp71_, G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, VALA_TYPE_INTERFACE, ValaInterface));
18188 		}
18189 		_tmp73_ = ns;
18190 		_tmp74_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp73_);
18191 		_vala_code_node_unref0 (_result_);
18192 		_result_ = _tmp74_;
18193 		_vala_code_node_unref0 (ns);
18194 	}
18195 	result = _result_;
18196 	_vala_code_node_unref0 (iface);
18197 	_vala_iterable_unref0 (base_types);
18198 	_vala_iterable_unref0 (type_param_list);
18199 	_vala_code_node_unref0 (sym);
18200 	return result;
18201 }
18202 
18203 static void
vala_genie_parser_parse_interface_member(ValaGenieParser * self,ValaInterface * iface,GError ** error)18204 vala_genie_parser_parse_interface_member (ValaGenieParser* self,
18205                                           ValaInterface* iface,
18206                                           GError** error)
18207 {
18208 	ValaSymbol* sym = NULL;
18209 	ValaSymbol* _tmp0_;
18210 	GError* _inner_error0_ = NULL;
18211 	g_return_if_fail (self != NULL);
18212 	g_return_if_fail (iface != NULL);
18213 	_tmp0_ = vala_genie_parser_parse_declaration (self, FALSE, &_inner_error0_);
18214 	sym = _tmp0_;
18215 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18216 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18217 			g_propagate_error (error, _inner_error0_);
18218 			return;
18219 		} else {
18220 			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);
18221 			g_clear_error (&_inner_error0_);
18222 			return;
18223 		}
18224 	}
18225 	if (VALA_IS_CLASS (sym)) {
18226 		vala_symbol_add_class ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CLASS, ValaClass));
18227 	} else {
18228 		if (VALA_IS_STRUCT (sym)) {
18229 			vala_symbol_add_struct ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_STRUCT, ValaStruct));
18230 		} else {
18231 			if (VALA_IS_ENUM (sym)) {
18232 				vala_symbol_add_enum ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_ENUM, ValaEnum));
18233 			} else {
18234 				if (VALA_IS_DELEGATE (sym)) {
18235 					vala_symbol_add_delegate ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_DELEGATE, ValaDelegate));
18236 				} else {
18237 					if (VALA_IS_METHOD (sym)) {
18238 						vala_symbol_add_method ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod));
18239 					} else {
18240 						if (VALA_IS_SIGNAL (sym)) {
18241 							vala_symbol_add_signal ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_SIGNAL, ValaSignal));
18242 						} else {
18243 							if (VALA_IS_FIELD (sym)) {
18244 								vala_symbol_add_field ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_FIELD, ValaField));
18245 							} else {
18246 								if (VALA_IS_CONSTANT (sym)) {
18247 									vala_symbol_add_constant ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant));
18248 								} else {
18249 									if (VALA_IS_PROPERTY (sym)) {
18250 										vala_symbol_add_property ((ValaSymbol*) iface, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_PROPERTY, ValaProperty));
18251 									} else {
18252 										ValaSourceReference* _tmp1_;
18253 										ValaSourceReference* _tmp2_;
18254 										_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
18255 										_tmp2_ = _tmp1_;
18256 										vala_report_error (_tmp2_, "unexpected declaration in interface");
18257 									}
18258 								}
18259 							}
18260 						}
18261 					}
18262 				}
18263 			}
18264 		}
18265 	}
18266 	_vala_code_node_unref0 (sym);
18267 }
18268 
18269 static ValaSymbol*
vala_genie_parser_parse_enum_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)18270 vala_genie_parser_parse_enum_declaration (ValaGenieParser* self,
18271                                           ValaList* attrs,
18272                                           GError** error)
18273 {
18274 	ValaSourceLocation begin = {0};
18275 	ValaSourceLocation _tmp0_ = {0};
18276 	ValaGenieParserModifierFlags flags = 0;
18277 	ValaUnresolvedSymbol* sym = NULL;
18278 	ValaUnresolvedSymbol* _tmp1_;
18279 	ValaEnum* en = NULL;
18280 	ValaUnresolvedSymbol* _tmp2_;
18281 	const gchar* _tmp3_;
18282 	const gchar* _tmp4_;
18283 	ValaSourceLocation _tmp5_;
18284 	ValaSourceReference* _tmp6_;
18285 	ValaSourceReference* _tmp7_;
18286 	ValaComment* _tmp8_;
18287 	ValaEnum* _tmp9_;
18288 	ValaEnum* _tmp10_;
18289 	ValaGenieParserModifierFlags _tmp11_;
18290 	ValaGenieParserModifierFlags _tmp19_;
18291 	ValaEnum* _tmp21_;
18292 	ValaSymbol* _result_ = NULL;
18293 	ValaEnum* _tmp49_;
18294 	ValaSymbol* _tmp50_;
18295 	GError* _inner_error0_ = NULL;
18296 	ValaSymbol* result = NULL;
18297 	g_return_val_if_fail (self != NULL, NULL);
18298 	vala_genie_parser_get_location (self, &_tmp0_);
18299 	begin = _tmp0_;
18300 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_ENUM, &_inner_error0_);
18301 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18302 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18303 			g_propagate_error (error, _inner_error0_);
18304 			return NULL;
18305 		} else {
18306 			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);
18307 			g_clear_error (&_inner_error0_);
18308 			return NULL;
18309 		}
18310 	}
18311 	flags = vala_genie_parser_parse_type_declaration_modifiers (self);
18312 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
18313 	sym = _tmp1_;
18314 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18315 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18316 			g_propagate_error (error, _inner_error0_);
18317 			return NULL;
18318 		} else {
18319 			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);
18320 			g_clear_error (&_inner_error0_);
18321 			return NULL;
18322 		}
18323 	}
18324 	_tmp2_ = sym;
18325 	_tmp3_ = vala_symbol_get_name ((ValaSymbol*) _tmp2_);
18326 	_tmp4_ = _tmp3_;
18327 	_tmp5_ = begin;
18328 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
18329 	_tmp7_ = _tmp6_;
18330 	_tmp8_ = self->priv->comment;
18331 	_tmp9_ = vala_enum_new (_tmp4_, _tmp7_, _tmp8_);
18332 	_tmp10_ = _tmp9_;
18333 	_vala_source_reference_unref0 (_tmp7_);
18334 	en = _tmp10_;
18335 	_tmp11_ = flags;
18336 	if ((_tmp11_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
18337 		ValaEnum* _tmp12_;
18338 		_tmp12_ = en;
18339 		vala_symbol_set_access ((ValaSymbol*) _tmp12_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
18340 	} else {
18341 		ValaGenieParserModifierFlags _tmp13_;
18342 		_tmp13_ = flags;
18343 		if ((_tmp13_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
18344 			ValaEnum* _tmp14_;
18345 			_tmp14_ = en;
18346 			vala_symbol_set_access ((ValaSymbol*) _tmp14_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
18347 		} else {
18348 			ValaEnum* _tmp15_;
18349 			ValaUnresolvedSymbol* _tmp16_;
18350 			const gchar* _tmp17_;
18351 			const gchar* _tmp18_;
18352 			_tmp15_ = en;
18353 			_tmp16_ = sym;
18354 			_tmp17_ = vala_symbol_get_name ((ValaSymbol*) _tmp16_);
18355 			_tmp18_ = _tmp17_;
18356 			vala_symbol_set_access ((ValaSymbol*) _tmp15_, vala_genie_parser_get_default_accessibility (self, _tmp18_));
18357 		}
18358 	}
18359 	_tmp19_ = flags;
18360 	if ((_tmp19_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) == VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) {
18361 		ValaEnum* _tmp20_;
18362 		_tmp20_ = en;
18363 		vala_symbol_set_is_extern ((ValaSymbol*) _tmp20_, TRUE);
18364 	}
18365 	_tmp21_ = en;
18366 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp21_, attrs);
18367 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
18368 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18369 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18370 			g_propagate_error (error, _inner_error0_);
18371 			_vala_code_node_unref0 (en);
18372 			_vala_code_node_unref0 (sym);
18373 			return NULL;
18374 		} else {
18375 			_vala_code_node_unref0 (en);
18376 			_vala_code_node_unref0 (sym);
18377 			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);
18378 			g_clear_error (&_inner_error0_);
18379 			return NULL;
18380 		}
18381 	}
18382 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INDENT, &_inner_error0_);
18383 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18384 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18385 			g_propagate_error (error, _inner_error0_);
18386 			_vala_code_node_unref0 (en);
18387 			_vala_code_node_unref0 (sym);
18388 			return NULL;
18389 		} else {
18390 			_vala_code_node_unref0 (en);
18391 			_vala_code_node_unref0 (sym);
18392 			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);
18393 			g_clear_error (&_inner_error0_);
18394 			return NULL;
18395 		}
18396 	}
18397 	while (TRUE) {
18398 		gboolean _tmp22_ = FALSE;
18399 		ValaList* value_attrs = NULL;
18400 		ValaList* _tmp27_;
18401 		ValaSourceLocation value_begin = {0};
18402 		ValaSourceLocation _tmp28_ = {0};
18403 		gchar* id = NULL;
18404 		gchar* _tmp29_;
18405 		ValaGenieScanner* _tmp30_;
18406 		ValaComment* _tmp31_;
18407 		ValaExpression* value = NULL;
18408 		ValaEnumValue* ev = NULL;
18409 		const gchar* _tmp35_;
18410 		ValaExpression* _tmp36_;
18411 		ValaSourceLocation _tmp37_;
18412 		ValaSourceReference* _tmp38_;
18413 		ValaSourceReference* _tmp39_;
18414 		ValaComment* _tmp40_;
18415 		ValaEnumValue* _tmp41_;
18416 		ValaEnumValue* _tmp42_;
18417 		ValaEnumValue* _tmp43_;
18418 		ValaEnumValue* _tmp44_;
18419 		ValaList* _tmp45_;
18420 		ValaEnum* _tmp46_;
18421 		ValaEnumValue* _tmp47_;
18422 		gboolean _tmp48_ = FALSE;
18423 		if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_DEDENT) {
18424 			ValaEnum* _tmp23_;
18425 			ValaList* _tmp24_;
18426 			gint _tmp25_;
18427 			gint _tmp26_;
18428 			_tmp23_ = en;
18429 			_tmp24_ = vala_enum_get_values (_tmp23_);
18430 			_tmp25_ = vala_collection_get_size ((ValaCollection*) _tmp24_);
18431 			_tmp26_ = _tmp25_;
18432 			_tmp22_ = _tmp26_ > 0;
18433 		} else {
18434 			_tmp22_ = FALSE;
18435 		}
18436 		if (_tmp22_) {
18437 			break;
18438 		}
18439 		_tmp27_ = vala_genie_parser_parse_attributes (self, FALSE, &_inner_error0_);
18440 		value_attrs = _tmp27_;
18441 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
18442 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18443 				g_propagate_error (error, _inner_error0_);
18444 				_vala_code_node_unref0 (en);
18445 				_vala_code_node_unref0 (sym);
18446 				return NULL;
18447 			} else {
18448 				_vala_code_node_unref0 (en);
18449 				_vala_code_node_unref0 (sym);
18450 				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);
18451 				g_clear_error (&_inner_error0_);
18452 				return NULL;
18453 			}
18454 		}
18455 		vala_genie_parser_get_location (self, &_tmp28_);
18456 		value_begin = _tmp28_;
18457 		_tmp29_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
18458 		id = _tmp29_;
18459 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
18460 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18461 				g_propagate_error (error, _inner_error0_);
18462 				_vala_iterable_unref0 (value_attrs);
18463 				_vala_code_node_unref0 (en);
18464 				_vala_code_node_unref0 (sym);
18465 				return NULL;
18466 			} else {
18467 				_vala_iterable_unref0 (value_attrs);
18468 				_vala_code_node_unref0 (en);
18469 				_vala_code_node_unref0 (sym);
18470 				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);
18471 				g_clear_error (&_inner_error0_);
18472 				return NULL;
18473 			}
18474 		}
18475 		_tmp30_ = self->priv->scanner;
18476 		_tmp31_ = vala_genie_scanner_pop_comment (_tmp30_);
18477 		_vala_comment_unref0 (self->priv->comment);
18478 		self->priv->comment = _tmp31_;
18479 		value = NULL;
18480 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
18481 			ValaExpression* _tmp32_ = NULL;
18482 			ValaExpression* _tmp33_;
18483 			ValaExpression* _tmp34_;
18484 			_tmp33_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
18485 			_tmp32_ = _tmp33_;
18486 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
18487 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18488 					g_propagate_error (error, _inner_error0_);
18489 					_vala_code_node_unref0 (value);
18490 					_g_free0 (id);
18491 					_vala_iterable_unref0 (value_attrs);
18492 					_vala_code_node_unref0 (en);
18493 					_vala_code_node_unref0 (sym);
18494 					return NULL;
18495 				} else {
18496 					_vala_code_node_unref0 (value);
18497 					_g_free0 (id);
18498 					_vala_iterable_unref0 (value_attrs);
18499 					_vala_code_node_unref0 (en);
18500 					_vala_code_node_unref0 (sym);
18501 					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);
18502 					g_clear_error (&_inner_error0_);
18503 					return NULL;
18504 				}
18505 			}
18506 			_tmp34_ = _tmp32_;
18507 			_tmp32_ = NULL;
18508 			_vala_code_node_unref0 (value);
18509 			value = _tmp34_;
18510 			_vala_code_node_unref0 (_tmp32_);
18511 		}
18512 		_tmp35_ = id;
18513 		_tmp36_ = value;
18514 		_tmp37_ = value_begin;
18515 		_tmp38_ = vala_genie_parser_get_src (self, &_tmp37_);
18516 		_tmp39_ = _tmp38_;
18517 		_tmp40_ = self->priv->comment;
18518 		_tmp41_ = vala_enum_value_new (_tmp35_, _tmp36_, _tmp39_, _tmp40_);
18519 		_tmp42_ = _tmp41_;
18520 		_vala_source_reference_unref0 (_tmp39_);
18521 		ev = _tmp42_;
18522 		_tmp43_ = ev;
18523 		vala_symbol_set_access ((ValaSymbol*) _tmp43_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
18524 		_tmp44_ = ev;
18525 		_tmp45_ = value_attrs;
18526 		vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp44_, _tmp45_);
18527 		_tmp46_ = en;
18528 		_tmp47_ = ev;
18529 		vala_enum_add_value (_tmp46_, _tmp47_);
18530 		_tmp48_ = vala_genie_parser_expect_separator (self, &_inner_error0_);
18531 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
18532 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18533 				g_propagate_error (error, _inner_error0_);
18534 				_vala_code_node_unref0 (ev);
18535 				_vala_code_node_unref0 (value);
18536 				_g_free0 (id);
18537 				_vala_iterable_unref0 (value_attrs);
18538 				_vala_code_node_unref0 (en);
18539 				_vala_code_node_unref0 (sym);
18540 				return NULL;
18541 			} else {
18542 				_vala_code_node_unref0 (ev);
18543 				_vala_code_node_unref0 (value);
18544 				_g_free0 (id);
18545 				_vala_iterable_unref0 (value_attrs);
18546 				_vala_code_node_unref0 (en);
18547 				_vala_code_node_unref0 (sym);
18548 				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);
18549 				g_clear_error (&_inner_error0_);
18550 				return NULL;
18551 			}
18552 		}
18553 		if (_tmp48_) {
18554 			vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL);
18555 		}
18556 		_vala_code_node_unref0 (ev);
18557 		_vala_code_node_unref0 (value);
18558 		_g_free0 (id);
18559 		_vala_iterable_unref0 (value_attrs);
18560 	}
18561 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
18562 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18563 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18564 			g_propagate_error (error, _inner_error0_);
18565 			_vala_code_node_unref0 (en);
18566 			_vala_code_node_unref0 (sym);
18567 			return NULL;
18568 		} else {
18569 			_vala_code_node_unref0 (en);
18570 			_vala_code_node_unref0 (sym);
18571 			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);
18572 			g_clear_error (&_inner_error0_);
18573 			return NULL;
18574 		}
18575 	}
18576 	_tmp49_ = en;
18577 	_tmp50_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp49_);
18578 	_result_ = _tmp50_;
18579 	while (TRUE) {
18580 		ValaUnresolvedSymbol* _tmp51_;
18581 		ValaUnresolvedSymbol* _tmp52_;
18582 		ValaUnresolvedSymbol* _tmp53_;
18583 		ValaUnresolvedSymbol* _tmp54_;
18584 		ValaUnresolvedSymbol* _tmp55_;
18585 		ValaUnresolvedSymbol* _tmp56_;
18586 		ValaUnresolvedSymbol* _tmp57_;
18587 		ValaNamespace* ns = NULL;
18588 		ValaUnresolvedSymbol* _tmp58_;
18589 		const gchar* _tmp59_;
18590 		const gchar* _tmp60_;
18591 		ValaEnum* _tmp61_;
18592 		ValaSourceReference* _tmp62_;
18593 		ValaSourceReference* _tmp63_;
18594 		ValaNamespace* _tmp64_;
18595 		ValaSymbol* _tmp65_;
18596 		ValaNamespace* _tmp70_;
18597 		ValaSymbol* _tmp71_;
18598 		_tmp51_ = sym;
18599 		_tmp52_ = vala_unresolved_symbol_get_inner (_tmp51_);
18600 		_tmp53_ = _tmp52_;
18601 		if (!(_tmp53_ != NULL)) {
18602 			break;
18603 		}
18604 		_tmp54_ = sym;
18605 		_tmp55_ = vala_unresolved_symbol_get_inner (_tmp54_);
18606 		_tmp56_ = _tmp55_;
18607 		_tmp57_ = _vala_code_node_ref0 (_tmp56_);
18608 		_vala_code_node_unref0 (sym);
18609 		sym = _tmp57_;
18610 		_tmp58_ = sym;
18611 		_tmp59_ = vala_symbol_get_name ((ValaSymbol*) _tmp58_);
18612 		_tmp60_ = _tmp59_;
18613 		_tmp61_ = en;
18614 		_tmp62_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp61_);
18615 		_tmp63_ = _tmp62_;
18616 		_tmp64_ = vala_namespace_new (_tmp60_, _tmp63_);
18617 		ns = _tmp64_;
18618 		_tmp65_ = _result_;
18619 		if (VALA_IS_NAMESPACE (_tmp65_)) {
18620 			ValaNamespace* _tmp66_;
18621 			ValaSymbol* _tmp67_;
18622 			_tmp66_ = ns;
18623 			_tmp67_ = _result_;
18624 			vala_symbol_add_namespace ((ValaSymbol*) _tmp66_, G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, VALA_TYPE_NAMESPACE, ValaNamespace));
18625 		} else {
18626 			ValaNamespace* _tmp68_;
18627 			ValaSymbol* _tmp69_;
18628 			_tmp68_ = ns;
18629 			_tmp69_ = _result_;
18630 			vala_symbol_add_enum ((ValaSymbol*) _tmp68_, G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_ENUM, ValaEnum));
18631 		}
18632 		_tmp70_ = ns;
18633 		_tmp71_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp70_);
18634 		_vala_code_node_unref0 (_result_);
18635 		_result_ = _tmp71_;
18636 		_vala_code_node_unref0 (ns);
18637 	}
18638 	result = _result_;
18639 	_vala_code_node_unref0 (en);
18640 	_vala_code_node_unref0 (sym);
18641 	return result;
18642 }
18643 
18644 static ValaSymbol*
vala_genie_parser_parse_errordomain_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)18645 vala_genie_parser_parse_errordomain_declaration (ValaGenieParser* self,
18646                                                  ValaList* attrs,
18647                                                  GError** error)
18648 {
18649 	ValaSourceLocation begin = {0};
18650 	ValaSourceLocation _tmp0_ = {0};
18651 	ValaGenieParserModifierFlags flags = 0;
18652 	ValaUnresolvedSymbol* sym = NULL;
18653 	ValaUnresolvedSymbol* _tmp1_;
18654 	ValaErrorDomain* ed = NULL;
18655 	ValaUnresolvedSymbol* _tmp2_;
18656 	const gchar* _tmp3_;
18657 	const gchar* _tmp4_;
18658 	ValaSourceLocation _tmp5_;
18659 	ValaSourceReference* _tmp6_;
18660 	ValaSourceReference* _tmp7_;
18661 	ValaComment* _tmp8_;
18662 	ValaErrorDomain* _tmp9_;
18663 	ValaErrorDomain* _tmp10_;
18664 	ValaGenieParserModifierFlags _tmp11_;
18665 	ValaErrorDomain* _tmp19_;
18666 	ValaSymbol* _result_ = NULL;
18667 	ValaErrorDomain* _tmp44_;
18668 	ValaSymbol* _tmp45_;
18669 	GError* _inner_error0_ = NULL;
18670 	ValaSymbol* result = NULL;
18671 	g_return_val_if_fail (self != NULL, NULL);
18672 	vala_genie_parser_get_location (self, &_tmp0_);
18673 	begin = _tmp0_;
18674 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_ERRORDOMAIN, &_inner_error0_);
18675 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18676 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18677 			g_propagate_error (error, _inner_error0_);
18678 			return NULL;
18679 		} else {
18680 			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);
18681 			g_clear_error (&_inner_error0_);
18682 			return NULL;
18683 		}
18684 	}
18685 	flags = vala_genie_parser_parse_type_declaration_modifiers (self);
18686 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
18687 	sym = _tmp1_;
18688 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18689 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18690 			g_propagate_error (error, _inner_error0_);
18691 			return NULL;
18692 		} else {
18693 			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);
18694 			g_clear_error (&_inner_error0_);
18695 			return NULL;
18696 		}
18697 	}
18698 	_tmp2_ = sym;
18699 	_tmp3_ = vala_symbol_get_name ((ValaSymbol*) _tmp2_);
18700 	_tmp4_ = _tmp3_;
18701 	_tmp5_ = begin;
18702 	_tmp6_ = vala_genie_parser_get_src (self, &_tmp5_);
18703 	_tmp7_ = _tmp6_;
18704 	_tmp8_ = self->priv->comment;
18705 	_tmp9_ = vala_error_domain_new (_tmp4_, _tmp7_, _tmp8_);
18706 	_tmp10_ = _tmp9_;
18707 	_vala_source_reference_unref0 (_tmp7_);
18708 	ed = _tmp10_;
18709 	_tmp11_ = flags;
18710 	if ((_tmp11_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
18711 		ValaErrorDomain* _tmp12_;
18712 		_tmp12_ = ed;
18713 		vala_symbol_set_access ((ValaSymbol*) _tmp12_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
18714 	} else {
18715 		ValaGenieParserModifierFlags _tmp13_;
18716 		_tmp13_ = flags;
18717 		if ((_tmp13_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
18718 			ValaErrorDomain* _tmp14_;
18719 			_tmp14_ = ed;
18720 			vala_symbol_set_access ((ValaSymbol*) _tmp14_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
18721 		} else {
18722 			ValaErrorDomain* _tmp15_;
18723 			ValaUnresolvedSymbol* _tmp16_;
18724 			const gchar* _tmp17_;
18725 			const gchar* _tmp18_;
18726 			_tmp15_ = ed;
18727 			_tmp16_ = sym;
18728 			_tmp17_ = vala_symbol_get_name ((ValaSymbol*) _tmp16_);
18729 			_tmp18_ = _tmp17_;
18730 			vala_symbol_set_access ((ValaSymbol*) _tmp15_, vala_genie_parser_get_default_accessibility (self, _tmp18_));
18731 		}
18732 	}
18733 	_tmp19_ = ed;
18734 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp19_, attrs);
18735 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_EOL, &_inner_error0_);
18736 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18737 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18738 			g_propagate_error (error, _inner_error0_);
18739 			_vala_code_node_unref0 (ed);
18740 			_vala_code_node_unref0 (sym);
18741 			return NULL;
18742 		} else {
18743 			_vala_code_node_unref0 (ed);
18744 			_vala_code_node_unref0 (sym);
18745 			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);
18746 			g_clear_error (&_inner_error0_);
18747 			return NULL;
18748 		}
18749 	}
18750 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_INDENT, &_inner_error0_);
18751 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18752 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18753 			g_propagate_error (error, _inner_error0_);
18754 			_vala_code_node_unref0 (ed);
18755 			_vala_code_node_unref0 (sym);
18756 			return NULL;
18757 		} else {
18758 			_vala_code_node_unref0 (ed);
18759 			_vala_code_node_unref0 (sym);
18760 			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);
18761 			g_clear_error (&_inner_error0_);
18762 			return NULL;
18763 		}
18764 	}
18765 	while (TRUE) {
18766 		gboolean _tmp20_ = FALSE;
18767 		ValaList* code_attrs = NULL;
18768 		ValaList* _tmp25_;
18769 		ValaSourceLocation code_begin = {0};
18770 		ValaSourceLocation _tmp26_ = {0};
18771 		gchar* id = NULL;
18772 		gchar* _tmp27_;
18773 		ValaGenieScanner* _tmp28_;
18774 		ValaComment* _tmp29_;
18775 		ValaErrorCode* ec = NULL;
18776 		const gchar* _tmp30_;
18777 		ValaSourceLocation _tmp31_;
18778 		ValaSourceReference* _tmp32_;
18779 		ValaSourceReference* _tmp33_;
18780 		ValaComment* _tmp34_;
18781 		ValaErrorCode* _tmp35_;
18782 		ValaErrorCode* _tmp36_;
18783 		ValaErrorCode* _tmp37_;
18784 		ValaList* _tmp38_;
18785 		ValaErrorDomain* _tmp42_;
18786 		ValaErrorCode* _tmp43_;
18787 		if (vala_genie_parser_current (self) == VALA_GENIE_TOKEN_TYPE_DEDENT) {
18788 			ValaErrorDomain* _tmp21_;
18789 			ValaList* _tmp22_;
18790 			gint _tmp23_;
18791 			gint _tmp24_;
18792 			_tmp21_ = ed;
18793 			_tmp22_ = vala_error_domain_get_codes (_tmp21_);
18794 			_tmp23_ = vala_collection_get_size ((ValaCollection*) _tmp22_);
18795 			_tmp24_ = _tmp23_;
18796 			_tmp20_ = _tmp24_ > 0;
18797 		} else {
18798 			_tmp20_ = FALSE;
18799 		}
18800 		if (_tmp20_) {
18801 			break;
18802 		}
18803 		_tmp25_ = vala_genie_parser_parse_attributes (self, FALSE, &_inner_error0_);
18804 		code_attrs = _tmp25_;
18805 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
18806 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18807 				g_propagate_error (error, _inner_error0_);
18808 				_vala_code_node_unref0 (ed);
18809 				_vala_code_node_unref0 (sym);
18810 				return NULL;
18811 			} else {
18812 				_vala_code_node_unref0 (ed);
18813 				_vala_code_node_unref0 (sym);
18814 				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);
18815 				g_clear_error (&_inner_error0_);
18816 				return NULL;
18817 			}
18818 		}
18819 		vala_genie_parser_get_location (self, &_tmp26_);
18820 		code_begin = _tmp26_;
18821 		_tmp27_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
18822 		id = _tmp27_;
18823 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
18824 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18825 				g_propagate_error (error, _inner_error0_);
18826 				_vala_iterable_unref0 (code_attrs);
18827 				_vala_code_node_unref0 (ed);
18828 				_vala_code_node_unref0 (sym);
18829 				return NULL;
18830 			} else {
18831 				_vala_iterable_unref0 (code_attrs);
18832 				_vala_code_node_unref0 (ed);
18833 				_vala_code_node_unref0 (sym);
18834 				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);
18835 				g_clear_error (&_inner_error0_);
18836 				return NULL;
18837 			}
18838 		}
18839 		_tmp28_ = self->priv->scanner;
18840 		_tmp29_ = vala_genie_scanner_pop_comment (_tmp28_);
18841 		_vala_comment_unref0 (self->priv->comment);
18842 		self->priv->comment = _tmp29_;
18843 		_tmp30_ = id;
18844 		_tmp31_ = code_begin;
18845 		_tmp32_ = vala_genie_parser_get_src (self, &_tmp31_);
18846 		_tmp33_ = _tmp32_;
18847 		_tmp34_ = self->priv->comment;
18848 		_tmp35_ = vala_error_code_new (_tmp30_, _tmp33_, _tmp34_);
18849 		_tmp36_ = _tmp35_;
18850 		_vala_source_reference_unref0 (_tmp33_);
18851 		ec = _tmp36_;
18852 		_tmp37_ = ec;
18853 		_tmp38_ = code_attrs;
18854 		vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp37_, _tmp38_);
18855 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
18856 			ValaExpression* _tmp39_ = NULL;
18857 			ValaExpression* _tmp40_;
18858 			ValaErrorCode* _tmp41_;
18859 			_tmp40_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
18860 			_tmp39_ = _tmp40_;
18861 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
18862 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18863 					g_propagate_error (error, _inner_error0_);
18864 					_vala_code_node_unref0 (ec);
18865 					_g_free0 (id);
18866 					_vala_iterable_unref0 (code_attrs);
18867 					_vala_code_node_unref0 (ed);
18868 					_vala_code_node_unref0 (sym);
18869 					return NULL;
18870 				} else {
18871 					_vala_code_node_unref0 (ec);
18872 					_g_free0 (id);
18873 					_vala_iterable_unref0 (code_attrs);
18874 					_vala_code_node_unref0 (ed);
18875 					_vala_code_node_unref0 (sym);
18876 					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);
18877 					g_clear_error (&_inner_error0_);
18878 					return NULL;
18879 				}
18880 			}
18881 			_tmp41_ = ec;
18882 			vala_error_code_set_value (_tmp41_, _tmp39_);
18883 			_vala_code_node_unref0 (_tmp39_);
18884 		}
18885 		_tmp42_ = ed;
18886 		_tmp43_ = ec;
18887 		vala_error_domain_add_code (_tmp42_, _tmp43_);
18888 		vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_EOL);
18889 		_vala_code_node_unref0 (ec);
18890 		_g_free0 (id);
18891 		_vala_iterable_unref0 (code_attrs);
18892 	}
18893 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DEDENT, &_inner_error0_);
18894 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
18895 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
18896 			g_propagate_error (error, _inner_error0_);
18897 			_vala_code_node_unref0 (ed);
18898 			_vala_code_node_unref0 (sym);
18899 			return NULL;
18900 		} else {
18901 			_vala_code_node_unref0 (ed);
18902 			_vala_code_node_unref0 (sym);
18903 			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);
18904 			g_clear_error (&_inner_error0_);
18905 			return NULL;
18906 		}
18907 	}
18908 	_tmp44_ = ed;
18909 	_tmp45_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp44_);
18910 	_result_ = _tmp45_;
18911 	while (TRUE) {
18912 		ValaUnresolvedSymbol* _tmp46_;
18913 		ValaUnresolvedSymbol* _tmp47_;
18914 		ValaUnresolvedSymbol* _tmp48_;
18915 		ValaUnresolvedSymbol* _tmp49_;
18916 		ValaUnresolvedSymbol* _tmp50_;
18917 		ValaUnresolvedSymbol* _tmp51_;
18918 		ValaUnresolvedSymbol* _tmp52_;
18919 		ValaNamespace* ns = NULL;
18920 		ValaUnresolvedSymbol* _tmp53_;
18921 		const gchar* _tmp54_;
18922 		const gchar* _tmp55_;
18923 		ValaErrorDomain* _tmp56_;
18924 		ValaSourceReference* _tmp57_;
18925 		ValaSourceReference* _tmp58_;
18926 		ValaNamespace* _tmp59_;
18927 		ValaSymbol* _tmp60_;
18928 		ValaNamespace* _tmp65_;
18929 		ValaSymbol* _tmp66_;
18930 		_tmp46_ = sym;
18931 		_tmp47_ = vala_unresolved_symbol_get_inner (_tmp46_);
18932 		_tmp48_ = _tmp47_;
18933 		if (!(_tmp48_ != NULL)) {
18934 			break;
18935 		}
18936 		_tmp49_ = sym;
18937 		_tmp50_ = vala_unresolved_symbol_get_inner (_tmp49_);
18938 		_tmp51_ = _tmp50_;
18939 		_tmp52_ = _vala_code_node_ref0 (_tmp51_);
18940 		_vala_code_node_unref0 (sym);
18941 		sym = _tmp52_;
18942 		_tmp53_ = sym;
18943 		_tmp54_ = vala_symbol_get_name ((ValaSymbol*) _tmp53_);
18944 		_tmp55_ = _tmp54_;
18945 		_tmp56_ = ed;
18946 		_tmp57_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp56_);
18947 		_tmp58_ = _tmp57_;
18948 		_tmp59_ = vala_namespace_new (_tmp55_, _tmp58_);
18949 		ns = _tmp59_;
18950 		_tmp60_ = _result_;
18951 		if (VALA_IS_NAMESPACE (_tmp60_)) {
18952 			ValaNamespace* _tmp61_;
18953 			ValaSymbol* _tmp62_;
18954 			_tmp61_ = ns;
18955 			_tmp62_ = _result_;
18956 			vala_symbol_add_namespace ((ValaSymbol*) _tmp61_, G_TYPE_CHECK_INSTANCE_CAST (_tmp62_, VALA_TYPE_NAMESPACE, ValaNamespace));
18957 		} else {
18958 			ValaNamespace* _tmp63_;
18959 			ValaSymbol* _tmp64_;
18960 			_tmp63_ = ns;
18961 			_tmp64_ = _result_;
18962 			vala_symbol_add_error_domain ((ValaSymbol*) _tmp63_, G_TYPE_CHECK_INSTANCE_CAST (_tmp64_, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain));
18963 		}
18964 		_tmp65_ = ns;
18965 		_tmp66_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp65_);
18966 		_vala_code_node_unref0 (_result_);
18967 		_result_ = _tmp66_;
18968 		_vala_code_node_unref0 (ns);
18969 	}
18970 	result = _result_;
18971 	_vala_code_node_unref0 (ed);
18972 	_vala_code_node_unref0 (sym);
18973 	return result;
18974 }
18975 
18976 static ValaGenieParserModifierFlags
vala_genie_parser_parse_type_declaration_modifiers(ValaGenieParser * self)18977 vala_genie_parser_parse_type_declaration_modifiers (ValaGenieParser* self)
18978 {
18979 	ValaGenieParserModifierFlags flags = 0;
18980 	ValaGenieParserModifierFlags result = 0;
18981 	g_return_val_if_fail (self != NULL, 0);
18982 	flags = 0;
18983 	while (TRUE) {
18984 		switch (vala_genie_parser_current (self)) {
18985 			case VALA_GENIE_TOKEN_TYPE_ABSTRACT:
18986 			{
18987 				ValaGenieParserModifierFlags _tmp0_;
18988 				vala_genie_parser_next (self);
18989 				_tmp0_ = flags;
18990 				flags = _tmp0_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT;
18991 				break;
18992 			}
18993 			case VALA_GENIE_TOKEN_TYPE_EXTERN:
18994 			{
18995 				ValaGenieParserModifierFlags _tmp1_;
18996 				vala_genie_parser_next (self);
18997 				_tmp1_ = flags;
18998 				flags = _tmp1_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN;
18999 				break;
19000 			}
19001 			case VALA_GENIE_TOKEN_TYPE_STATIC:
19002 			{
19003 				ValaGenieParserModifierFlags _tmp2_;
19004 				vala_genie_parser_next (self);
19005 				_tmp2_ = flags;
19006 				flags = _tmp2_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC;
19007 				break;
19008 			}
19009 			case VALA_GENIE_TOKEN_TYPE_PRIVATE:
19010 			{
19011 				ValaGenieParserModifierFlags _tmp3_;
19012 				vala_genie_parser_next (self);
19013 				_tmp3_ = flags;
19014 				flags = _tmp3_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE;
19015 				break;
19016 			}
19017 			case VALA_GENIE_TOKEN_TYPE_PUBLIC:
19018 			{
19019 				ValaGenieParserModifierFlags _tmp4_;
19020 				vala_genie_parser_next (self);
19021 				_tmp4_ = flags;
19022 				flags = _tmp4_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_PUBLIC;
19023 				break;
19024 			}
19025 			case VALA_GENIE_TOKEN_TYPE_PROTECTED:
19026 			{
19027 				ValaGenieParserModifierFlags _tmp5_;
19028 				vala_genie_parser_next (self);
19029 				_tmp5_ = flags;
19030 				flags = _tmp5_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED;
19031 				break;
19032 			}
19033 			default:
19034 			{
19035 				result = flags;
19036 				return result;
19037 			}
19038 		}
19039 	}
19040 }
19041 
19042 static ValaGenieParserModifierFlags
vala_genie_parser_parse_member_declaration_modifiers(ValaGenieParser * self)19043 vala_genie_parser_parse_member_declaration_modifiers (ValaGenieParser* self)
19044 {
19045 	ValaGenieParserModifierFlags flags = 0;
19046 	ValaGenieParserModifierFlags result = 0;
19047 	g_return_val_if_fail (self != NULL, 0);
19048 	flags = 0;
19049 	while (TRUE) {
19050 		switch (vala_genie_parser_current (self)) {
19051 			case VALA_GENIE_TOKEN_TYPE_ABSTRACT:
19052 			{
19053 				ValaGenieParserModifierFlags _tmp0_;
19054 				vala_genie_parser_next (self);
19055 				_tmp0_ = flags;
19056 				flags = _tmp0_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_ABSTRACT;
19057 				break;
19058 			}
19059 			case VALA_GENIE_TOKEN_TYPE_ASYNC:
19060 			{
19061 				ValaGenieParserModifierFlags _tmp1_;
19062 				vala_genie_parser_next (self);
19063 				_tmp1_ = flags;
19064 				flags = _tmp1_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_ASYNC;
19065 				break;
19066 			}
19067 			case VALA_GENIE_TOKEN_TYPE_CLASS:
19068 			{
19069 				ValaGenieParserModifierFlags _tmp2_;
19070 				vala_genie_parser_next (self);
19071 				_tmp2_ = flags;
19072 				flags = _tmp2_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_CLASS;
19073 				break;
19074 			}
19075 			case VALA_GENIE_TOKEN_TYPE_EXTERN:
19076 			{
19077 				ValaGenieParserModifierFlags _tmp3_;
19078 				vala_genie_parser_next (self);
19079 				_tmp3_ = flags;
19080 				flags = _tmp3_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN;
19081 				break;
19082 			}
19083 			case VALA_GENIE_TOKEN_TYPE_INLINE:
19084 			{
19085 				ValaGenieParserModifierFlags _tmp4_;
19086 				vala_genie_parser_next (self);
19087 				_tmp4_ = flags;
19088 				flags = _tmp4_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_INLINE;
19089 				break;
19090 			}
19091 			case VALA_GENIE_TOKEN_TYPE_NEW:
19092 			{
19093 				ValaGenieParserModifierFlags _tmp5_;
19094 				vala_genie_parser_next (self);
19095 				_tmp5_ = flags;
19096 				flags = _tmp5_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW;
19097 				break;
19098 			}
19099 			case VALA_GENIE_TOKEN_TYPE_OVERRIDE:
19100 			{
19101 				ValaGenieParserModifierFlags _tmp6_;
19102 				vala_genie_parser_next (self);
19103 				_tmp6_ = flags;
19104 				flags = _tmp6_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_OVERRIDE;
19105 				break;
19106 			}
19107 			case VALA_GENIE_TOKEN_TYPE_SEALED:
19108 			{
19109 				ValaGenieParserModifierFlags _tmp7_;
19110 				vala_genie_parser_next (self);
19111 				_tmp7_ = flags;
19112 				flags = _tmp7_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_SEALED;
19113 				break;
19114 			}
19115 			case VALA_GENIE_TOKEN_TYPE_STATIC:
19116 			{
19117 				ValaGenieParserModifierFlags _tmp8_;
19118 				vala_genie_parser_next (self);
19119 				_tmp8_ = flags;
19120 				flags = _tmp8_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC;
19121 				break;
19122 			}
19123 			case VALA_GENIE_TOKEN_TYPE_VIRTUAL:
19124 			{
19125 				ValaGenieParserModifierFlags _tmp9_;
19126 				vala_genie_parser_next (self);
19127 				_tmp9_ = flags;
19128 				flags = _tmp9_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_VIRTUAL;
19129 				break;
19130 			}
19131 			case VALA_GENIE_TOKEN_TYPE_PRIVATE:
19132 			{
19133 				ValaGenieParserModifierFlags _tmp10_;
19134 				vala_genie_parser_next (self);
19135 				_tmp10_ = flags;
19136 				flags = _tmp10_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE;
19137 				break;
19138 			}
19139 			case VALA_GENIE_TOKEN_TYPE_PUBLIC:
19140 			{
19141 				ValaGenieParserModifierFlags _tmp11_;
19142 				vala_genie_parser_next (self);
19143 				_tmp11_ = flags;
19144 				flags = _tmp11_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_PUBLIC;
19145 				break;
19146 			}
19147 			case VALA_GENIE_TOKEN_TYPE_PROTECTED:
19148 			{
19149 				ValaGenieParserModifierFlags _tmp12_;
19150 				vala_genie_parser_next (self);
19151 				_tmp12_ = flags;
19152 				flags = _tmp12_ | VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED;
19153 				break;
19154 			}
19155 			default:
19156 			{
19157 				result = flags;
19158 				return result;
19159 			}
19160 		}
19161 	}
19162 }
19163 
19164 static ValaParameter*
vala_genie_parser_parse_parameter(ValaGenieParser * self,GError ** error)19165 vala_genie_parser_parse_parameter (ValaGenieParser* self,
19166                                    GError** error)
19167 {
19168 	ValaList* attrs = NULL;
19169 	ValaList* _tmp0_;
19170 	ValaSourceLocation begin = {0};
19171 	ValaSourceLocation _tmp1_ = {0};
19172 	gboolean params_array = FALSE;
19173 	ValaParameterDirection direction = 0;
19174 	gchar* id = NULL;
19175 	gchar* _tmp7_;
19176 	ValaDataType* type = NULL;
19177 	ValaParameterDirection _tmp8_;
19178 	ValaParameter* param = NULL;
19179 	const gchar* _tmp19_;
19180 	ValaDataType* _tmp20_;
19181 	ValaSourceLocation _tmp21_;
19182 	ValaSourceReference* _tmp22_;
19183 	ValaSourceReference* _tmp23_;
19184 	ValaParameter* _tmp24_;
19185 	ValaParameter* _tmp25_;
19186 	ValaParameter* _tmp26_;
19187 	ValaList* _tmp27_;
19188 	ValaParameter* _tmp28_;
19189 	ValaParameterDirection _tmp29_;
19190 	ValaParameter* _tmp30_;
19191 	GError* _inner_error0_ = NULL;
19192 	ValaParameter* result = NULL;
19193 	g_return_val_if_fail (self != NULL, NULL);
19194 	_tmp0_ = vala_genie_parser_parse_attributes (self, TRUE, &_inner_error0_);
19195 	attrs = _tmp0_;
19196 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19197 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19198 			g_propagate_error (error, _inner_error0_);
19199 			return NULL;
19200 		} else {
19201 			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);
19202 			g_clear_error (&_inner_error0_);
19203 			return NULL;
19204 		}
19205 	}
19206 	vala_genie_parser_get_location (self, &_tmp1_);
19207 	begin = _tmp1_;
19208 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ELLIPSIS)) {
19209 		ValaSourceLocation _tmp2_;
19210 		ValaSourceReference* _tmp3_;
19211 		ValaSourceReference* _tmp4_;
19212 		ValaParameter* _tmp5_;
19213 		ValaParameter* _tmp6_;
19214 		_tmp2_ = begin;
19215 		_tmp3_ = vala_genie_parser_get_src (self, &_tmp2_);
19216 		_tmp4_ = _tmp3_;
19217 		_tmp5_ = vala_parameter_new_with_ellipsis (_tmp4_);
19218 		_tmp6_ = _tmp5_;
19219 		_vala_source_reference_unref0 (_tmp4_);
19220 		result = _tmp6_;
19221 		_vala_iterable_unref0 (attrs);
19222 		return result;
19223 	}
19224 	params_array = vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_PARAMS);
19225 	direction = VALA_PARAMETER_DIRECTION_IN;
19226 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OUT)) {
19227 		direction = VALA_PARAMETER_DIRECTION_OUT;
19228 	} else {
19229 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_REF)) {
19230 			direction = VALA_PARAMETER_DIRECTION_REF;
19231 		}
19232 	}
19233 	_tmp7_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
19234 	id = _tmp7_;
19235 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19236 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19237 			g_propagate_error (error, _inner_error0_);
19238 			_vala_iterable_unref0 (attrs);
19239 			return NULL;
19240 		} else {
19241 			_vala_iterable_unref0 (attrs);
19242 			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);
19243 			g_clear_error (&_inner_error0_);
19244 			return NULL;
19245 		}
19246 	}
19247 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_COLON, &_inner_error0_);
19248 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19249 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19250 			g_propagate_error (error, _inner_error0_);
19251 			_g_free0 (id);
19252 			_vala_iterable_unref0 (attrs);
19253 			return NULL;
19254 		} else {
19255 			_g_free0 (id);
19256 			_vala_iterable_unref0 (attrs);
19257 			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);
19258 			g_clear_error (&_inner_error0_);
19259 			return NULL;
19260 		}
19261 	}
19262 	_tmp8_ = direction;
19263 	if (_tmp8_ == VALA_PARAMETER_DIRECTION_IN) {
19264 		ValaDataType* _tmp9_ = NULL;
19265 		ValaDataType* _tmp10_;
19266 		ValaDataType* _tmp11_;
19267 		_tmp10_ = vala_genie_parser_parse_type (self, FALSE, FALSE, &_inner_error0_);
19268 		_tmp9_ = _tmp10_;
19269 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
19270 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19271 				g_propagate_error (error, _inner_error0_);
19272 				_vala_code_node_unref0 (type);
19273 				_g_free0 (id);
19274 				_vala_iterable_unref0 (attrs);
19275 				return NULL;
19276 			} else {
19277 				_vala_code_node_unref0 (type);
19278 				_g_free0 (id);
19279 				_vala_iterable_unref0 (attrs);
19280 				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);
19281 				g_clear_error (&_inner_error0_);
19282 				return NULL;
19283 			}
19284 		}
19285 		_tmp11_ = _tmp9_;
19286 		_tmp9_ = NULL;
19287 		_vala_code_node_unref0 (type);
19288 		type = _tmp11_;
19289 		_vala_code_node_unref0 (_tmp9_);
19290 	} else {
19291 		ValaParameterDirection _tmp12_;
19292 		_tmp12_ = direction;
19293 		if (_tmp12_ == VALA_PARAMETER_DIRECTION_REF) {
19294 			ValaDataType* _tmp13_ = NULL;
19295 			ValaDataType* _tmp14_;
19296 			ValaDataType* _tmp15_;
19297 			_tmp14_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
19298 			_tmp13_ = _tmp14_;
19299 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
19300 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19301 					g_propagate_error (error, _inner_error0_);
19302 					_vala_code_node_unref0 (type);
19303 					_g_free0 (id);
19304 					_vala_iterable_unref0 (attrs);
19305 					return NULL;
19306 				} else {
19307 					_vala_code_node_unref0 (type);
19308 					_g_free0 (id);
19309 					_vala_iterable_unref0 (attrs);
19310 					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);
19311 					g_clear_error (&_inner_error0_);
19312 					return NULL;
19313 				}
19314 			}
19315 			_tmp15_ = _tmp13_;
19316 			_tmp13_ = NULL;
19317 			_vala_code_node_unref0 (type);
19318 			type = _tmp15_;
19319 			_vala_code_node_unref0 (_tmp13_);
19320 		} else {
19321 			ValaDataType* _tmp16_ = NULL;
19322 			ValaDataType* _tmp17_;
19323 			ValaDataType* _tmp18_;
19324 			_tmp17_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
19325 			_tmp16_ = _tmp17_;
19326 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
19327 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19328 					g_propagate_error (error, _inner_error0_);
19329 					_vala_code_node_unref0 (type);
19330 					_g_free0 (id);
19331 					_vala_iterable_unref0 (attrs);
19332 					return NULL;
19333 				} else {
19334 					_vala_code_node_unref0 (type);
19335 					_g_free0 (id);
19336 					_vala_iterable_unref0 (attrs);
19337 					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);
19338 					g_clear_error (&_inner_error0_);
19339 					return NULL;
19340 				}
19341 			}
19342 			_tmp18_ = _tmp16_;
19343 			_tmp16_ = NULL;
19344 			_vala_code_node_unref0 (type);
19345 			type = _tmp18_;
19346 			_vala_code_node_unref0 (_tmp16_);
19347 		}
19348 	}
19349 	_tmp19_ = id;
19350 	_tmp20_ = type;
19351 	_tmp21_ = begin;
19352 	_tmp22_ = vala_genie_parser_get_src (self, &_tmp21_);
19353 	_tmp23_ = _tmp22_;
19354 	_tmp24_ = vala_parameter_new (_tmp19_, _tmp20_, _tmp23_);
19355 	_tmp25_ = _tmp24_;
19356 	_vala_source_reference_unref0 (_tmp23_);
19357 	param = _tmp25_;
19358 	_tmp26_ = param;
19359 	_tmp27_ = attrs;
19360 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp26_, _tmp27_);
19361 	_tmp28_ = param;
19362 	_tmp29_ = direction;
19363 	vala_parameter_set_direction (_tmp28_, _tmp29_);
19364 	_tmp30_ = param;
19365 	vala_parameter_set_params_array (_tmp30_, params_array);
19366 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_ASSIGN)) {
19367 		ValaExpression* _tmp31_ = NULL;
19368 		ValaExpression* _tmp32_;
19369 		ValaParameter* _tmp33_;
19370 		_tmp32_ = vala_genie_parser_parse_expression (self, &_inner_error0_);
19371 		_tmp31_ = _tmp32_;
19372 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
19373 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19374 				g_propagate_error (error, _inner_error0_);
19375 				_vala_code_node_unref0 (param);
19376 				_vala_code_node_unref0 (type);
19377 				_g_free0 (id);
19378 				_vala_iterable_unref0 (attrs);
19379 				return NULL;
19380 			} else {
19381 				_vala_code_node_unref0 (param);
19382 				_vala_code_node_unref0 (type);
19383 				_g_free0 (id);
19384 				_vala_iterable_unref0 (attrs);
19385 				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);
19386 				g_clear_error (&_inner_error0_);
19387 				return NULL;
19388 			}
19389 		}
19390 		_tmp33_ = param;
19391 		vala_variable_set_initializer ((ValaVariable*) _tmp33_, _tmp31_);
19392 		_vala_code_node_unref0 (_tmp31_);
19393 	}
19394 	result = param;
19395 	_vala_code_node_unref0 (type);
19396 	_g_free0 (id);
19397 	_vala_iterable_unref0 (attrs);
19398 	return result;
19399 }
19400 
19401 static ValaCreationMethod*
vala_genie_parser_parse_creation_method_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)19402 vala_genie_parser_parse_creation_method_declaration (ValaGenieParser* self,
19403                                                      ValaList* attrs,
19404                                                      GError** error)
19405 {
19406 	ValaSourceLocation begin = {0};
19407 	ValaSourceLocation _tmp0_ = {0};
19408 	ValaCreationMethod* method = NULL;
19409 	ValaCreationMethod* _tmp53_;
19410 	ValaCreationMethod* _tmp54_;
19411 	GError* _inner_error0_ = NULL;
19412 	ValaCreationMethod* result = NULL;
19413 	g_return_val_if_fail (self != NULL, NULL);
19414 	vala_genie_parser_get_location (self, &_tmp0_);
19415 	begin = _tmp0_;
19416 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CONSTRUCT, &_inner_error0_);
19417 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19418 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19419 			g_propagate_error (error, _inner_error0_);
19420 			_vala_code_node_unref0 (method);
19421 			return NULL;
19422 		} else {
19423 			_vala_code_node_unref0 (method);
19424 			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);
19425 			g_clear_error (&_inner_error0_);
19426 			return NULL;
19427 		}
19428 	}
19429 	vala_genie_parser_parse_member_declaration_modifiers (self);
19430 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS)) {
19431 		const gchar* _tmp1_;
19432 		ValaSourceLocation _tmp2_;
19433 		ValaSourceReference* _tmp3_;
19434 		ValaSourceReference* _tmp4_;
19435 		ValaComment* _tmp5_;
19436 		ValaCreationMethod* _tmp6_;
19437 		_tmp1_ = self->priv->class_name;
19438 		_tmp2_ = begin;
19439 		_tmp3_ = vala_genie_parser_get_src (self, &_tmp2_);
19440 		_tmp4_ = _tmp3_;
19441 		_tmp5_ = self->priv->comment;
19442 		_tmp6_ = vala_creation_method_new (_tmp1_, NULL, _tmp4_, _tmp5_);
19443 		_vala_code_node_unref0 (method);
19444 		method = _tmp6_;
19445 		_vala_source_reference_unref0 (_tmp4_);
19446 	} else {
19447 		ValaUnresolvedSymbol* sym = NULL;
19448 		ValaUnresolvedSymbol* _tmp7_;
19449 		ValaUnresolvedSymbol* _tmp8_;
19450 		ValaUnresolvedSymbol* _tmp9_;
19451 		ValaUnresolvedSymbol* _tmp10_;
19452 		_tmp7_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
19453 		sym = _tmp7_;
19454 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
19455 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19456 				g_propagate_error (error, _inner_error0_);
19457 				_vala_code_node_unref0 (method);
19458 				return NULL;
19459 			} else {
19460 				_vala_code_node_unref0 (method);
19461 				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);
19462 				g_clear_error (&_inner_error0_);
19463 				return NULL;
19464 			}
19465 		}
19466 		_tmp8_ = sym;
19467 		_tmp9_ = vala_unresolved_symbol_get_inner (_tmp8_);
19468 		_tmp10_ = _tmp9_;
19469 		if (_tmp10_ == NULL) {
19470 			ValaUnresolvedSymbol* _tmp11_;
19471 			const gchar* _tmp12_;
19472 			const gchar* _tmp13_;
19473 			const gchar* _tmp14_;
19474 			_tmp11_ = sym;
19475 			_tmp12_ = vala_symbol_get_name ((ValaSymbol*) _tmp11_);
19476 			_tmp13_ = _tmp12_;
19477 			_tmp14_ = self->priv->class_name;
19478 			if (g_strcmp0 (_tmp13_, _tmp14_) != 0) {
19479 				const gchar* _tmp15_;
19480 				ValaUnresolvedSymbol* _tmp16_;
19481 				const gchar* _tmp17_;
19482 				const gchar* _tmp18_;
19483 				ValaSourceLocation _tmp19_;
19484 				ValaSourceReference* _tmp20_;
19485 				ValaSourceReference* _tmp21_;
19486 				ValaComment* _tmp22_;
19487 				ValaCreationMethod* _tmp23_;
19488 				_tmp15_ = self->priv->class_name;
19489 				_tmp16_ = sym;
19490 				_tmp17_ = vala_symbol_get_name ((ValaSymbol*) _tmp16_);
19491 				_tmp18_ = _tmp17_;
19492 				_tmp19_ = begin;
19493 				_tmp20_ = vala_genie_parser_get_src (self, &_tmp19_);
19494 				_tmp21_ = _tmp20_;
19495 				_tmp22_ = self->priv->comment;
19496 				_tmp23_ = vala_creation_method_new (_tmp15_, _tmp18_, _tmp21_, _tmp22_);
19497 				_vala_code_node_unref0 (method);
19498 				method = _tmp23_;
19499 				_vala_source_reference_unref0 (_tmp21_);
19500 			} else {
19501 				ValaUnresolvedSymbol* _tmp24_;
19502 				const gchar* _tmp25_;
19503 				const gchar* _tmp26_;
19504 				ValaSourceLocation _tmp27_;
19505 				ValaSourceReference* _tmp28_;
19506 				ValaSourceReference* _tmp29_;
19507 				ValaComment* _tmp30_;
19508 				ValaCreationMethod* _tmp31_;
19509 				_tmp24_ = sym;
19510 				_tmp25_ = vala_symbol_get_name ((ValaSymbol*) _tmp24_);
19511 				_tmp26_ = _tmp25_;
19512 				_tmp27_ = begin;
19513 				_tmp28_ = vala_genie_parser_get_src (self, &_tmp27_);
19514 				_tmp29_ = _tmp28_;
19515 				_tmp30_ = self->priv->comment;
19516 				_tmp31_ = vala_creation_method_new (_tmp26_, NULL, _tmp29_, _tmp30_);
19517 				_vala_code_node_unref0 (method);
19518 				method = _tmp31_;
19519 				_vala_source_reference_unref0 (_tmp29_);
19520 			}
19521 		} else {
19522 			ValaUnresolvedSymbol* _tmp32_;
19523 			ValaUnresolvedSymbol* _tmp33_;
19524 			ValaUnresolvedSymbol* _tmp34_;
19525 			const gchar* _tmp35_;
19526 			const gchar* _tmp36_;
19527 			ValaUnresolvedSymbol* _tmp37_;
19528 			const gchar* _tmp38_;
19529 			const gchar* _tmp39_;
19530 			ValaSourceLocation _tmp40_;
19531 			ValaSourceReference* _tmp41_;
19532 			ValaSourceReference* _tmp42_;
19533 			ValaComment* _tmp43_;
19534 			ValaCreationMethod* _tmp44_;
19535 			_tmp32_ = sym;
19536 			_tmp33_ = vala_unresolved_symbol_get_inner (_tmp32_);
19537 			_tmp34_ = _tmp33_;
19538 			_tmp35_ = vala_symbol_get_name ((ValaSymbol*) _tmp34_);
19539 			_tmp36_ = _tmp35_;
19540 			_tmp37_ = sym;
19541 			_tmp38_ = vala_symbol_get_name ((ValaSymbol*) _tmp37_);
19542 			_tmp39_ = _tmp38_;
19543 			_tmp40_ = begin;
19544 			_tmp41_ = vala_genie_parser_get_src (self, &_tmp40_);
19545 			_tmp42_ = _tmp41_;
19546 			_tmp43_ = self->priv->comment;
19547 			_tmp44_ = vala_creation_method_new (_tmp36_, _tmp39_, _tmp42_, _tmp43_);
19548 			_vala_code_node_unref0 (method);
19549 			method = _tmp44_;
19550 			_vala_source_reference_unref0 (_tmp42_);
19551 		}
19552 		vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
19553 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
19554 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19555 				g_propagate_error (error, _inner_error0_);
19556 				_vala_code_node_unref0 (sym);
19557 				_vala_code_node_unref0 (method);
19558 				return NULL;
19559 			} else {
19560 				_vala_code_node_unref0 (sym);
19561 				_vala_code_node_unref0 (method);
19562 				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);
19563 				g_clear_error (&_inner_error0_);
19564 				return NULL;
19565 			}
19566 		}
19567 		_vala_code_node_unref0 (sym);
19568 	}
19569 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
19570 		{
19571 			gboolean _tmp45_ = FALSE;
19572 			_tmp45_ = TRUE;
19573 			while (TRUE) {
19574 				ValaParameter* param = NULL;
19575 				ValaParameter* _tmp46_;
19576 				ValaCreationMethod* _tmp47_;
19577 				ValaParameter* _tmp48_;
19578 				if (!_tmp45_) {
19579 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
19580 						break;
19581 					}
19582 				}
19583 				_tmp45_ = FALSE;
19584 				_tmp46_ = vala_genie_parser_parse_parameter (self, &_inner_error0_);
19585 				param = _tmp46_;
19586 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
19587 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19588 						g_propagate_error (error, _inner_error0_);
19589 						_vala_code_node_unref0 (method);
19590 						return NULL;
19591 					} else {
19592 						_vala_code_node_unref0 (method);
19593 						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);
19594 						g_clear_error (&_inner_error0_);
19595 						return NULL;
19596 					}
19597 				}
19598 				_tmp47_ = method;
19599 				_tmp48_ = param;
19600 				vala_callable_add_parameter ((ValaCallable*) _tmp47_, _tmp48_);
19601 				_vala_code_node_unref0 (param);
19602 			}
19603 		}
19604 	}
19605 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
19606 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19607 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19608 			g_propagate_error (error, _inner_error0_);
19609 			_vala_code_node_unref0 (method);
19610 			return NULL;
19611 		} else {
19612 			_vala_code_node_unref0 (method);
19613 			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);
19614 			g_clear_error (&_inner_error0_);
19615 			return NULL;
19616 		}
19617 	}
19618 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_RAISES)) {
19619 		{
19620 			gboolean _tmp49_ = FALSE;
19621 			_tmp49_ = TRUE;
19622 			while (TRUE) {
19623 				ValaDataType* _tmp50_ = NULL;
19624 				ValaDataType* _tmp51_;
19625 				ValaCreationMethod* _tmp52_;
19626 				if (!_tmp49_) {
19627 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
19628 						break;
19629 					}
19630 				}
19631 				_tmp49_ = FALSE;
19632 				_tmp51_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
19633 				_tmp50_ = _tmp51_;
19634 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
19635 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19636 						g_propagate_error (error, _inner_error0_);
19637 						_vala_code_node_unref0 (method);
19638 						return NULL;
19639 					} else {
19640 						_vala_code_node_unref0 (method);
19641 						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);
19642 						g_clear_error (&_inner_error0_);
19643 						return NULL;
19644 					}
19645 				}
19646 				_tmp52_ = method;
19647 				vala_method_add_error_type ((ValaMethod*) _tmp52_, _tmp50_);
19648 				_vala_code_node_unref0 (_tmp50_);
19649 			}
19650 		}
19651 	}
19652 	_tmp53_ = method;
19653 	vala_symbol_set_access ((ValaSymbol*) _tmp53_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
19654 	_tmp54_ = method;
19655 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp54_, attrs);
19656 	if (vala_genie_parser_accept_block (self)) {
19657 		ValaBlock* _tmp55_ = NULL;
19658 		ValaBlock* _tmp56_;
19659 		ValaCreationMethod* _tmp57_;
19660 		ValaCreationMethod* _tmp58_;
19661 		_tmp56_ = vala_genie_parser_parse_block (self, &_inner_error0_);
19662 		_tmp55_ = _tmp56_;
19663 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
19664 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19665 				g_propagate_error (error, _inner_error0_);
19666 				_vala_code_node_unref0 (method);
19667 				return NULL;
19668 			} else {
19669 				_vala_code_node_unref0 (method);
19670 				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);
19671 				g_clear_error (&_inner_error0_);
19672 				return NULL;
19673 			}
19674 		}
19675 		_tmp57_ = method;
19676 		vala_subroutine_set_body ((ValaSubroutine*) _tmp57_, _tmp55_);
19677 		_tmp58_ = method;
19678 		vala_symbol_set_external ((ValaSymbol*) _tmp58_, FALSE);
19679 		_vala_code_node_unref0 (_tmp55_);
19680 	}
19681 	result = method;
19682 	return result;
19683 }
19684 
19685 static ValaSymbol*
vala_genie_parser_parse_delegate_declaration(ValaGenieParser * self,ValaList * attrs,GError ** error)19686 vala_genie_parser_parse_delegate_declaration (ValaGenieParser* self,
19687                                               ValaList* attrs,
19688                                               GError** error)
19689 {
19690 	ValaSourceLocation begin = {0};
19691 	ValaSourceLocation _tmp0_ = {0};
19692 	ValaDataType* type = NULL;
19693 	ValaGenieParserModifierFlags flags = 0;
19694 	ValaUnresolvedSymbol* sym = NULL;
19695 	ValaUnresolvedSymbol* _tmp1_;
19696 	ValaList* type_param_list = NULL;
19697 	ValaList* _tmp2_;
19698 	ValaGenieParserModifierFlags _tmp3_;
19699 	ValaArrayList* params = NULL;
19700 	GEqualFunc _tmp5_;
19701 	ValaArrayList* _tmp6_;
19702 	ValaDelegate* d = NULL;
19703 	ValaUnresolvedSymbol* _tmp15_;
19704 	const gchar* _tmp16_;
19705 	const gchar* _tmp17_;
19706 	ValaDataType* _tmp18_;
19707 	ValaSourceLocation _tmp19_;
19708 	ValaSourceReference* _tmp20_;
19709 	ValaSourceReference* _tmp21_;
19710 	ValaComment* _tmp22_;
19711 	ValaDelegate* _tmp23_;
19712 	ValaDelegate* _tmp24_;
19713 	ValaGenieParserModifierFlags _tmp29_;
19714 	ValaGenieParserModifierFlags _tmp37_;
19715 	ValaGenieParserModifierFlags _tmp39_;
19716 	ValaDelegate* _tmp41_;
19717 	ValaSymbol* _result_ = NULL;
19718 	ValaDelegate* _tmp64_;
19719 	ValaSymbol* _tmp65_;
19720 	GError* _inner_error0_ = NULL;
19721 	ValaSymbol* result = NULL;
19722 	g_return_val_if_fail (self != NULL, NULL);
19723 	vala_genie_parser_get_location (self, &_tmp0_);
19724 	begin = _tmp0_;
19725 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_DELEGATE, &_inner_error0_);
19726 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19727 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19728 			g_propagate_error (error, _inner_error0_);
19729 			_vala_code_node_unref0 (type);
19730 			return NULL;
19731 		} else {
19732 			_vala_code_node_unref0 (type);
19733 			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);
19734 			g_clear_error (&_inner_error0_);
19735 			return NULL;
19736 		}
19737 	}
19738 	flags = vala_genie_parser_parse_member_declaration_modifiers (self);
19739 	_tmp1_ = vala_genie_parser_parse_symbol_name (self, &_inner_error0_);
19740 	sym = _tmp1_;
19741 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19742 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19743 			g_propagate_error (error, _inner_error0_);
19744 			_vala_code_node_unref0 (type);
19745 			return NULL;
19746 		} else {
19747 			_vala_code_node_unref0 (type);
19748 			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);
19749 			g_clear_error (&_inner_error0_);
19750 			return NULL;
19751 		}
19752 	}
19753 	_tmp2_ = vala_genie_parser_parse_type_parameter_list (self, &_inner_error0_);
19754 	type_param_list = _tmp2_;
19755 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19756 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19757 			g_propagate_error (error, _inner_error0_);
19758 			_vala_code_node_unref0 (sym);
19759 			_vala_code_node_unref0 (type);
19760 			return NULL;
19761 		} else {
19762 			_vala_code_node_unref0 (sym);
19763 			_vala_code_node_unref0 (type);
19764 			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);
19765 			g_clear_error (&_inner_error0_);
19766 			return NULL;
19767 		}
19768 	}
19769 	_tmp3_ = flags;
19770 	if ((_tmp3_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) == VALA_GENIE_PARSER_MODIFIER_FLAGS_NEW) {
19771 		GError* _tmp4_;
19772 		_tmp4_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, "`new' modifier not allowed on delegates");
19773 		_inner_error0_ = _tmp4_;
19774 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19775 			g_propagate_error (error, _inner_error0_);
19776 			_vala_iterable_unref0 (type_param_list);
19777 			_vala_code_node_unref0 (sym);
19778 			_vala_code_node_unref0 (type);
19779 			return NULL;
19780 		} else {
19781 			_vala_iterable_unref0 (type_param_list);
19782 			_vala_code_node_unref0 (sym);
19783 			_vala_code_node_unref0 (type);
19784 			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);
19785 			g_clear_error (&_inner_error0_);
19786 			return NULL;
19787 		}
19788 	}
19789 	_tmp5_ = g_direct_equal;
19790 	_tmp6_ = vala_array_list_new (VALA_TYPE_PARAMETER, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp5_);
19791 	params = _tmp6_;
19792 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS, &_inner_error0_);
19793 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19794 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19795 			g_propagate_error (error, _inner_error0_);
19796 			_vala_iterable_unref0 (params);
19797 			_vala_iterable_unref0 (type_param_list);
19798 			_vala_code_node_unref0 (sym);
19799 			_vala_code_node_unref0 (type);
19800 			return NULL;
19801 		} else {
19802 			_vala_iterable_unref0 (params);
19803 			_vala_iterable_unref0 (type_param_list);
19804 			_vala_code_node_unref0 (sym);
19805 			_vala_code_node_unref0 (type);
19806 			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);
19807 			g_clear_error (&_inner_error0_);
19808 			return NULL;
19809 		}
19810 	}
19811 	if (vala_genie_parser_current (self) != VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS) {
19812 		{
19813 			gboolean _tmp7_ = FALSE;
19814 			_tmp7_ = TRUE;
19815 			while (TRUE) {
19816 				ValaParameter* param = NULL;
19817 				ValaParameter* _tmp8_;
19818 				ValaArrayList* _tmp9_;
19819 				ValaParameter* _tmp10_;
19820 				if (!_tmp7_) {
19821 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
19822 						break;
19823 					}
19824 				}
19825 				_tmp7_ = FALSE;
19826 				_tmp8_ = vala_genie_parser_parse_parameter (self, &_inner_error0_);
19827 				param = _tmp8_;
19828 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
19829 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19830 						g_propagate_error (error, _inner_error0_);
19831 						_vala_iterable_unref0 (params);
19832 						_vala_iterable_unref0 (type_param_list);
19833 						_vala_code_node_unref0 (sym);
19834 						_vala_code_node_unref0 (type);
19835 						return NULL;
19836 					} else {
19837 						_vala_iterable_unref0 (params);
19838 						_vala_iterable_unref0 (type_param_list);
19839 						_vala_code_node_unref0 (sym);
19840 						_vala_code_node_unref0 (type);
19841 						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);
19842 						g_clear_error (&_inner_error0_);
19843 						return NULL;
19844 					}
19845 				}
19846 				_tmp9_ = params;
19847 				_tmp10_ = param;
19848 				vala_collection_add ((ValaCollection*) _tmp9_, _tmp10_);
19849 				_vala_code_node_unref0 (param);
19850 			}
19851 		}
19852 	}
19853 	vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
19854 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19855 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19856 			g_propagate_error (error, _inner_error0_);
19857 			_vala_iterable_unref0 (params);
19858 			_vala_iterable_unref0 (type_param_list);
19859 			_vala_code_node_unref0 (sym);
19860 			_vala_code_node_unref0 (type);
19861 			return NULL;
19862 		} else {
19863 			_vala_iterable_unref0 (params);
19864 			_vala_iterable_unref0 (type_param_list);
19865 			_vala_code_node_unref0 (sym);
19866 			_vala_code_node_unref0 (type);
19867 			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);
19868 			g_clear_error (&_inner_error0_);
19869 			return NULL;
19870 		}
19871 	}
19872 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COLON)) {
19873 		ValaDataType* _tmp11_ = NULL;
19874 		ValaDataType* _tmp12_;
19875 		ValaDataType* _tmp13_;
19876 		_tmp12_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
19877 		_tmp11_ = _tmp12_;
19878 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
19879 			if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19880 				g_propagate_error (error, _inner_error0_);
19881 				_vala_iterable_unref0 (params);
19882 				_vala_iterable_unref0 (type_param_list);
19883 				_vala_code_node_unref0 (sym);
19884 				_vala_code_node_unref0 (type);
19885 				return NULL;
19886 			} else {
19887 				_vala_iterable_unref0 (params);
19888 				_vala_iterable_unref0 (type_param_list);
19889 				_vala_code_node_unref0 (sym);
19890 				_vala_code_node_unref0 (type);
19891 				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);
19892 				g_clear_error (&_inner_error0_);
19893 				return NULL;
19894 			}
19895 		}
19896 		_tmp13_ = _tmp11_;
19897 		_tmp11_ = NULL;
19898 		_vala_code_node_unref0 (type);
19899 		type = _tmp13_;
19900 		_vala_code_node_unref0 (_tmp11_);
19901 	} else {
19902 		ValaVoidType* _tmp14_;
19903 		_tmp14_ = vala_void_type_new (NULL);
19904 		_vala_code_node_unref0 (type);
19905 		type = (ValaDataType*) _tmp14_;
19906 	}
19907 	_tmp15_ = sym;
19908 	_tmp16_ = vala_symbol_get_name ((ValaSymbol*) _tmp15_);
19909 	_tmp17_ = _tmp16_;
19910 	_tmp18_ = type;
19911 	_tmp19_ = begin;
19912 	_tmp20_ = vala_genie_parser_get_src (self, &_tmp19_);
19913 	_tmp21_ = _tmp20_;
19914 	_tmp22_ = self->priv->comment;
19915 	_tmp23_ = vala_delegate_new (_tmp17_, _tmp18_, _tmp21_, _tmp22_);
19916 	_tmp24_ = _tmp23_;
19917 	_vala_source_reference_unref0 (_tmp21_);
19918 	d = _tmp24_;
19919 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_RAISES)) {
19920 		{
19921 			gboolean _tmp25_ = FALSE;
19922 			_tmp25_ = TRUE;
19923 			while (TRUE) {
19924 				ValaDataType* _tmp26_ = NULL;
19925 				ValaDataType* _tmp27_;
19926 				ValaDelegate* _tmp28_;
19927 				if (!_tmp25_) {
19928 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
19929 						break;
19930 					}
19931 				}
19932 				_tmp25_ = FALSE;
19933 				_tmp27_ = vala_genie_parser_parse_type (self, TRUE, FALSE, &_inner_error0_);
19934 				_tmp26_ = _tmp27_;
19935 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
19936 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19937 						g_propagate_error (error, _inner_error0_);
19938 						_vala_code_node_unref0 (d);
19939 						_vala_iterable_unref0 (params);
19940 						_vala_iterable_unref0 (type_param_list);
19941 						_vala_code_node_unref0 (sym);
19942 						_vala_code_node_unref0 (type);
19943 						return NULL;
19944 					} else {
19945 						_vala_code_node_unref0 (d);
19946 						_vala_iterable_unref0 (params);
19947 						_vala_iterable_unref0 (type_param_list);
19948 						_vala_code_node_unref0 (sym);
19949 						_vala_code_node_unref0 (type);
19950 						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);
19951 						g_clear_error (&_inner_error0_);
19952 						return NULL;
19953 					}
19954 				}
19955 				_tmp28_ = d;
19956 				vala_delegate_add_error_type (_tmp28_, _tmp26_);
19957 				_vala_code_node_unref0 (_tmp26_);
19958 			}
19959 		}
19960 	}
19961 	vala_genie_parser_expect_terminator (self, &_inner_error0_);
19962 	if (G_UNLIKELY (_inner_error0_ != NULL)) {
19963 		if (_inner_error0_->domain == VALA_PARSE_ERROR) {
19964 			g_propagate_error (error, _inner_error0_);
19965 			_vala_code_node_unref0 (d);
19966 			_vala_iterable_unref0 (params);
19967 			_vala_iterable_unref0 (type_param_list);
19968 			_vala_code_node_unref0 (sym);
19969 			_vala_code_node_unref0 (type);
19970 			return NULL;
19971 		} else {
19972 			_vala_code_node_unref0 (d);
19973 			_vala_iterable_unref0 (params);
19974 			_vala_iterable_unref0 (type_param_list);
19975 			_vala_code_node_unref0 (sym);
19976 			_vala_code_node_unref0 (type);
19977 			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);
19978 			g_clear_error (&_inner_error0_);
19979 			return NULL;
19980 		}
19981 	}
19982 	_tmp29_ = flags;
19983 	if ((_tmp29_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PRIVATE) {
19984 		ValaDelegate* _tmp30_;
19985 		_tmp30_ = d;
19986 		vala_symbol_set_access ((ValaSymbol*) _tmp30_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
19987 	} else {
19988 		ValaGenieParserModifierFlags _tmp31_;
19989 		_tmp31_ = flags;
19990 		if ((_tmp31_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) == VALA_GENIE_PARSER_MODIFIER_FLAGS_PROTECTED) {
19991 			ValaDelegate* _tmp32_;
19992 			_tmp32_ = d;
19993 			vala_symbol_set_access ((ValaSymbol*) _tmp32_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
19994 		} else {
19995 			ValaDelegate* _tmp33_;
19996 			ValaUnresolvedSymbol* _tmp34_;
19997 			const gchar* _tmp35_;
19998 			const gchar* _tmp36_;
19999 			_tmp33_ = d;
20000 			_tmp34_ = sym;
20001 			_tmp35_ = vala_symbol_get_name ((ValaSymbol*) _tmp34_);
20002 			_tmp36_ = _tmp35_;
20003 			vala_symbol_set_access ((ValaSymbol*) _tmp33_, vala_genie_parser_get_default_accessibility (self, _tmp36_));
20004 		}
20005 	}
20006 	_tmp37_ = flags;
20007 	if ((_tmp37_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) == VALA_GENIE_PARSER_MODIFIER_FLAGS_STATIC) {
20008 		ValaDelegate* _tmp38_;
20009 		_tmp38_ = d;
20010 		vala_delegate_set_has_target (_tmp38_, FALSE);
20011 	}
20012 	_tmp39_ = flags;
20013 	if ((_tmp39_ & VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) == VALA_GENIE_PARSER_MODIFIER_FLAGS_EXTERN) {
20014 		ValaDelegate* _tmp40_;
20015 		_tmp40_ = d;
20016 		vala_symbol_set_is_extern ((ValaSymbol*) _tmp40_, TRUE);
20017 	}
20018 	_tmp41_ = d;
20019 	vala_genie_parser_set_attributes (self, (ValaCodeNode*) _tmp41_, attrs);
20020 	{
20021 		ValaList* _type_param_list = NULL;
20022 		ValaList* _tmp42_;
20023 		ValaList* _tmp43_;
20024 		gint _type_param_size = 0;
20025 		ValaList* _tmp44_;
20026 		gint _tmp45_;
20027 		gint _tmp46_;
20028 		gint _type_param_index = 0;
20029 		_tmp42_ = type_param_list;
20030 		_tmp43_ = _vala_iterable_ref0 (_tmp42_);
20031 		_type_param_list = _tmp43_;
20032 		_tmp44_ = _type_param_list;
20033 		_tmp45_ = vala_collection_get_size ((ValaCollection*) _tmp44_);
20034 		_tmp46_ = _tmp45_;
20035 		_type_param_size = _tmp46_;
20036 		_type_param_index = -1;
20037 		while (TRUE) {
20038 			gint _tmp47_;
20039 			gint _tmp48_;
20040 			ValaTypeParameter* type_param = NULL;
20041 			ValaList* _tmp49_;
20042 			gpointer _tmp50_;
20043 			ValaDelegate* _tmp51_;
20044 			ValaTypeParameter* _tmp52_;
20045 			_type_param_index = _type_param_index + 1;
20046 			_tmp47_ = _type_param_index;
20047 			_tmp48_ = _type_param_size;
20048 			if (!(_tmp47_ < _tmp48_)) {
20049 				break;
20050 			}
20051 			_tmp49_ = _type_param_list;
20052 			_tmp50_ = vala_list_get (_tmp49_, _type_param_index);
20053 			type_param = (ValaTypeParameter*) _tmp50_;
20054 			_tmp51_ = d;
20055 			_tmp52_ = type_param;
20056 			vala_delegate_add_type_parameter (_tmp51_, _tmp52_);
20057 			_vala_code_node_unref0 (type_param);
20058 		}
20059 		_vala_iterable_unref0 (_type_param_list);
20060 	}
20061 	{
20062 		ValaArrayList* _formal_param_list = NULL;
20063 		ValaArrayList* _tmp53_;
20064 		ValaArrayList* _tmp54_;
20065 		gint _formal_param_size = 0;
20066 		ValaArrayList* _tmp55_;
20067 		gint _tmp56_;
20068 		gint _tmp57_;
20069 		gint _formal_param_index = 0;
20070 		_tmp53_ = params;
20071 		_tmp54_ = _vala_iterable_ref0 (_tmp53_);
20072 		_formal_param_list = _tmp54_;
20073 		_tmp55_ = _formal_param_list;
20074 		_tmp56_ = vala_collection_get_size ((ValaCollection*) _tmp55_);
20075 		_tmp57_ = _tmp56_;
20076 		_formal_param_size = _tmp57_;
20077 		_formal_param_index = -1;
20078 		while (TRUE) {
20079 			gint _tmp58_;
20080 			gint _tmp59_;
20081 			ValaParameter* formal_param = NULL;
20082 			ValaArrayList* _tmp60_;
20083 			gpointer _tmp61_;
20084 			ValaDelegate* _tmp62_;
20085 			ValaParameter* _tmp63_;
20086 			_formal_param_index = _formal_param_index + 1;
20087 			_tmp58_ = _formal_param_index;
20088 			_tmp59_ = _formal_param_size;
20089 			if (!(_tmp58_ < _tmp59_)) {
20090 				break;
20091 			}
20092 			_tmp60_ = _formal_param_list;
20093 			_tmp61_ = vala_list_get ((ValaList*) _tmp60_, _formal_param_index);
20094 			formal_param = (ValaParameter*) _tmp61_;
20095 			_tmp62_ = d;
20096 			_tmp63_ = formal_param;
20097 			vala_callable_add_parameter ((ValaCallable*) _tmp62_, _tmp63_);
20098 			_vala_code_node_unref0 (formal_param);
20099 		}
20100 		_vala_iterable_unref0 (_formal_param_list);
20101 	}
20102 	_tmp64_ = d;
20103 	_tmp65_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp64_);
20104 	_result_ = _tmp65_;
20105 	while (TRUE) {
20106 		ValaUnresolvedSymbol* _tmp66_;
20107 		ValaUnresolvedSymbol* _tmp67_;
20108 		ValaUnresolvedSymbol* _tmp68_;
20109 		ValaUnresolvedSymbol* _tmp69_;
20110 		ValaUnresolvedSymbol* _tmp70_;
20111 		ValaUnresolvedSymbol* _tmp71_;
20112 		ValaUnresolvedSymbol* _tmp72_;
20113 		ValaNamespace* ns = NULL;
20114 		ValaUnresolvedSymbol* _tmp73_;
20115 		const gchar* _tmp74_;
20116 		const gchar* _tmp75_;
20117 		ValaDelegate* _tmp76_;
20118 		ValaSourceReference* _tmp77_;
20119 		ValaSourceReference* _tmp78_;
20120 		ValaNamespace* _tmp79_;
20121 		ValaSymbol* _tmp80_;
20122 		ValaNamespace* _tmp85_;
20123 		ValaSymbol* _tmp86_;
20124 		_tmp66_ = sym;
20125 		_tmp67_ = vala_unresolved_symbol_get_inner (_tmp66_);
20126 		_tmp68_ = _tmp67_;
20127 		if (!(_tmp68_ != NULL)) {
20128 			break;
20129 		}
20130 		_tmp69_ = sym;
20131 		_tmp70_ = vala_unresolved_symbol_get_inner (_tmp69_);
20132 		_tmp71_ = _tmp70_;
20133 		_tmp72_ = _vala_code_node_ref0 (_tmp71_);
20134 		_vala_code_node_unref0 (sym);
20135 		sym = _tmp72_;
20136 		_tmp73_ = sym;
20137 		_tmp74_ = vala_symbol_get_name ((ValaSymbol*) _tmp73_);
20138 		_tmp75_ = _tmp74_;
20139 		_tmp76_ = d;
20140 		_tmp77_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp76_);
20141 		_tmp78_ = _tmp77_;
20142 		_tmp79_ = vala_namespace_new (_tmp75_, _tmp78_);
20143 		ns = _tmp79_;
20144 		_tmp80_ = _result_;
20145 		if (VALA_IS_NAMESPACE (_tmp80_)) {
20146 			ValaNamespace* _tmp81_;
20147 			ValaSymbol* _tmp82_;
20148 			_tmp81_ = ns;
20149 			_tmp82_ = _result_;
20150 			vala_symbol_add_namespace ((ValaSymbol*) _tmp81_, G_TYPE_CHECK_INSTANCE_CAST (_tmp82_, VALA_TYPE_NAMESPACE, ValaNamespace));
20151 		} else {
20152 			ValaNamespace* _tmp83_;
20153 			ValaSymbol* _tmp84_;
20154 			_tmp83_ = ns;
20155 			_tmp84_ = _result_;
20156 			vala_symbol_add_delegate ((ValaSymbol*) _tmp83_, G_TYPE_CHECK_INSTANCE_CAST (_tmp84_, VALA_TYPE_DELEGATE, ValaDelegate));
20157 		}
20158 		_tmp85_ = ns;
20159 		_tmp86_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp85_);
20160 		_vala_code_node_unref0 (_result_);
20161 		_result_ = _tmp86_;
20162 		_vala_code_node_unref0 (ns);
20163 	}
20164 	result = _result_;
20165 	_vala_code_node_unref0 (d);
20166 	_vala_iterable_unref0 (params);
20167 	_vala_iterable_unref0 (type_param_list);
20168 	_vala_code_node_unref0 (sym);
20169 	_vala_code_node_unref0 (type);
20170 	return result;
20171 }
20172 
20173 static ValaList*
vala_genie_parser_parse_type_parameter_list(ValaGenieParser * self,GError ** error)20174 vala_genie_parser_parse_type_parameter_list (ValaGenieParser* self,
20175                                              GError** error)
20176 {
20177 	GError* _inner_error0_ = NULL;
20178 	ValaList* result = NULL;
20179 	g_return_val_if_fail (self != NULL, NULL);
20180 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OF)) {
20181 		ValaArrayList* list = NULL;
20182 		GEqualFunc _tmp0_;
20183 		ValaArrayList* _tmp1_;
20184 		_tmp0_ = g_direct_equal;
20185 		_tmp1_ = vala_array_list_new (VALA_TYPE_TYPEPARAMETER, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
20186 		list = _tmp1_;
20187 		{
20188 			gboolean _tmp2_ = FALSE;
20189 			_tmp2_ = TRUE;
20190 			while (TRUE) {
20191 				ValaSourceLocation begin = {0};
20192 				ValaSourceLocation _tmp3_ = {0};
20193 				gchar* id = NULL;
20194 				gchar* _tmp4_;
20195 				ValaArrayList* _tmp5_;
20196 				const gchar* _tmp6_;
20197 				ValaSourceLocation _tmp7_;
20198 				ValaSourceReference* _tmp8_;
20199 				ValaSourceReference* _tmp9_;
20200 				ValaTypeParameter* _tmp10_;
20201 				ValaTypeParameter* _tmp11_;
20202 				if (!_tmp2_) {
20203 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
20204 						break;
20205 					}
20206 				}
20207 				_tmp2_ = FALSE;
20208 				vala_genie_parser_get_location (self, &_tmp3_);
20209 				begin = _tmp3_;
20210 				_tmp4_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
20211 				id = _tmp4_;
20212 				if (G_UNLIKELY (_inner_error0_ != NULL)) {
20213 					if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20214 						g_propagate_error (error, _inner_error0_);
20215 						_vala_iterable_unref0 (list);
20216 						return NULL;
20217 					} else {
20218 						_vala_iterable_unref0 (list);
20219 						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);
20220 						g_clear_error (&_inner_error0_);
20221 						return NULL;
20222 					}
20223 				}
20224 				_tmp5_ = list;
20225 				_tmp6_ = id;
20226 				_tmp7_ = begin;
20227 				_tmp8_ = vala_genie_parser_get_src (self, &_tmp7_);
20228 				_tmp9_ = _tmp8_;
20229 				_tmp10_ = vala_typeparameter_new (_tmp6_, _tmp9_);
20230 				_tmp11_ = _tmp10_;
20231 				vala_collection_add ((ValaCollection*) _tmp5_, _tmp11_);
20232 				_vala_code_node_unref0 (_tmp11_);
20233 				_vala_source_reference_unref0 (_tmp9_);
20234 				_g_free0 (id);
20235 			}
20236 		}
20237 		result = (ValaList*) list;
20238 		return result;
20239 	} else {
20240 		ValaList* _tmp12_;
20241 		ValaList* _tmp15_;
20242 		ValaList* _tmp16_;
20243 		_tmp12_ = vala_genie_parser__empty_type_parameter_list;
20244 		if (_tmp12_ == NULL) {
20245 			GEqualFunc _tmp13_;
20246 			ValaArrayList* _tmp14_;
20247 			_tmp13_ = g_direct_equal;
20248 			_tmp14_ = vala_array_list_new (VALA_TYPE_TYPEPARAMETER, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp13_);
20249 			_vala_iterable_unref0 (vala_genie_parser__empty_type_parameter_list);
20250 			vala_genie_parser__empty_type_parameter_list = (ValaList*) _tmp14_;
20251 		}
20252 		_tmp15_ = vala_genie_parser__empty_type_parameter_list;
20253 		_tmp16_ = _vala_iterable_ref0 (_tmp15_);
20254 		result = _tmp16_;
20255 		return result;
20256 	}
20257 }
20258 
20259 static void
vala_genie_parser_skip_type_argument_list(ValaGenieParser * self,GError ** error)20260 vala_genie_parser_skip_type_argument_list (ValaGenieParser* self,
20261                                            GError** error)
20262 {
20263 	GError* _inner_error0_ = NULL;
20264 	g_return_if_fail (self != NULL);
20265 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OF)) {
20266 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS)) {
20267 			{
20268 				gboolean _tmp0_ = FALSE;
20269 				_tmp0_ = TRUE;
20270 				while (TRUE) {
20271 					if (!_tmp0_) {
20272 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
20273 							break;
20274 						}
20275 					}
20276 					_tmp0_ = FALSE;
20277 					vala_genie_parser_skip_type (self, &_inner_error0_);
20278 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
20279 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20280 							g_propagate_error (error, _inner_error0_);
20281 							return;
20282 						} else {
20283 							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);
20284 							g_clear_error (&_inner_error0_);
20285 							return;
20286 						}
20287 					}
20288 				}
20289 			}
20290 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
20291 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
20292 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20293 					g_propagate_error (error, _inner_error0_);
20294 					return;
20295 				} else {
20296 					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);
20297 					g_clear_error (&_inner_error0_);
20298 					return;
20299 				}
20300 			}
20301 		} else {
20302 			{
20303 				gboolean _tmp1_ = FALSE;
20304 				_tmp1_ = TRUE;
20305 				while (TRUE) {
20306 					if (!_tmp1_) {
20307 						if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
20308 							break;
20309 						}
20310 					}
20311 					_tmp1_ = FALSE;
20312 					vala_genie_parser_skip_type (self, &_inner_error0_);
20313 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
20314 						if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20315 							g_propagate_error (error, _inner_error0_);
20316 							return;
20317 						} else {
20318 							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);
20319 							g_clear_error (&_inner_error0_);
20320 							return;
20321 						}
20322 					}
20323 				}
20324 			}
20325 		}
20326 	}
20327 }
20328 
20329 static ValaList*
vala_genie_parser_parse_type_argument_list(ValaGenieParser * self,gboolean maybe_expression,GError ** error)20330 vala_genie_parser_parse_type_argument_list (ValaGenieParser* self,
20331                                             gboolean maybe_expression,
20332                                             GError** error)
20333 {
20334 	ValaSourceLocation begin = {0};
20335 	ValaSourceLocation _tmp0_ = {0};
20336 	GError* _inner_error0_ = NULL;
20337 	ValaList* result = NULL;
20338 	g_return_val_if_fail (self != NULL, NULL);
20339 	vala_genie_parser_get_location (self, &_tmp0_);
20340 	begin = _tmp0_;
20341 	if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OF)) {
20342 		ValaArrayList* list = NULL;
20343 		GEqualFunc _tmp1_;
20344 		ValaArrayList* _tmp2_;
20345 		gboolean inParens = FALSE;
20346 		_tmp1_ = g_direct_equal;
20347 		_tmp2_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp1_);
20348 		list = _tmp2_;
20349 		inParens = FALSE;
20350 		if (vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_OPEN_PARENS)) {
20351 			inParens = TRUE;
20352 		}
20353 		{
20354 			gboolean _tmp3_ = FALSE;
20355 			_tmp3_ = TRUE;
20356 			while (TRUE) {
20357 				if (!_tmp3_) {
20358 					if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_COMMA)) {
20359 						break;
20360 					}
20361 				}
20362 				_tmp3_ = FALSE;
20363 				switch (vala_genie_parser_current (self)) {
20364 					case VALA_GENIE_TOKEN_TYPE_VOID:
20365 					case VALA_GENIE_TOKEN_TYPE_DYNAMIC:
20366 					case VALA_GENIE_TOKEN_TYPE_UNOWNED:
20367 					case VALA_GENIE_TOKEN_TYPE_WEAK:
20368 					case VALA_GENIE_TOKEN_TYPE_IDENTIFIER:
20369 					{
20370 						ValaDataType* type = NULL;
20371 						ValaDataType* _tmp4_;
20372 						ValaArrayList* _tmp5_;
20373 						ValaDataType* _tmp6_;
20374 						_tmp4_ = vala_genie_parser_parse_type (self, TRUE, TRUE, &_inner_error0_);
20375 						type = _tmp4_;
20376 						if (G_UNLIKELY (_inner_error0_ != NULL)) {
20377 							if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20378 								g_propagate_error (error, _inner_error0_);
20379 								_vala_iterable_unref0 (list);
20380 								return NULL;
20381 							} else {
20382 								_vala_iterable_unref0 (list);
20383 								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);
20384 								g_clear_error (&_inner_error0_);
20385 								return NULL;
20386 							}
20387 						}
20388 						_tmp5_ = list;
20389 						_tmp6_ = type;
20390 						vala_collection_add ((ValaCollection*) _tmp5_, _tmp6_);
20391 						_vala_code_node_unref0 (type);
20392 						break;
20393 					}
20394 					default:
20395 					{
20396 						ValaSourceLocation _tmp7_;
20397 						_tmp7_ = begin;
20398 						vala_genie_parser_rollback (self, &_tmp7_);
20399 						result = NULL;
20400 						_vala_iterable_unref0 (list);
20401 						return result;
20402 					}
20403 				}
20404 			}
20405 		}
20406 		if (inParens) {
20407 			vala_genie_parser_expect (self, VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS, &_inner_error0_);
20408 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
20409 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20410 					g_propagate_error (error, _inner_error0_);
20411 					_vala_iterable_unref0 (list);
20412 					return NULL;
20413 				} else {
20414 					_vala_iterable_unref0 (list);
20415 					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);
20416 					g_clear_error (&_inner_error0_);
20417 					return NULL;
20418 				}
20419 			}
20420 		}
20421 		result = (ValaList*) list;
20422 		return result;
20423 	}
20424 	result = NULL;
20425 	return result;
20426 }
20427 
20428 static ValaMemberAccess*
vala_genie_parser_parse_member_name(ValaGenieParser * self,ValaExpression * base_expr,GError ** error)20429 vala_genie_parser_parse_member_name (ValaGenieParser* self,
20430                                      ValaExpression* base_expr,
20431                                      GError** error)
20432 {
20433 	ValaSourceLocation begin = {0};
20434 	ValaSourceLocation _tmp0_ = {0};
20435 	ValaMemberAccess* expr = NULL;
20436 	GError* _inner_error0_ = NULL;
20437 	ValaMemberAccess* result = NULL;
20438 	g_return_val_if_fail (self != NULL, NULL);
20439 	vala_genie_parser_get_location (self, &_tmp0_);
20440 	begin = _tmp0_;
20441 	expr = NULL;
20442 	{
20443 		gboolean _tmp1_ = FALSE;
20444 		_tmp1_ = TRUE;
20445 		while (TRUE) {
20446 			gchar* id = NULL;
20447 			gchar* _tmp2_;
20448 			ValaList* type_arg_list = NULL;
20449 			ValaList* _tmp3_;
20450 			ValaExpression* _tmp4_ = NULL;
20451 			ValaMemberAccess* _tmp5_;
20452 			const gchar* _tmp7_;
20453 			ValaSourceLocation _tmp8_;
20454 			ValaSourceReference* _tmp9_;
20455 			ValaSourceReference* _tmp10_;
20456 			ValaMemberAccess* _tmp11_;
20457 			ValaList* _tmp12_;
20458 			if (!_tmp1_) {
20459 				if (!vala_genie_parser_accept (self, VALA_GENIE_TOKEN_TYPE_DOT)) {
20460 					break;
20461 				}
20462 			}
20463 			_tmp1_ = FALSE;
20464 			_tmp2_ = vala_genie_parser_parse_identifier (self, &_inner_error0_);
20465 			id = _tmp2_;
20466 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
20467 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20468 					g_propagate_error (error, _inner_error0_);
20469 					_vala_code_node_unref0 (expr);
20470 					return NULL;
20471 				} else {
20472 					_vala_code_node_unref0 (expr);
20473 					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);
20474 					g_clear_error (&_inner_error0_);
20475 					return NULL;
20476 				}
20477 			}
20478 			_tmp3_ = vala_genie_parser_parse_type_argument_list (self, FALSE, &_inner_error0_);
20479 			type_arg_list = _tmp3_;
20480 			if (G_UNLIKELY (_inner_error0_ != NULL)) {
20481 				if (_inner_error0_->domain == VALA_PARSE_ERROR) {
20482 					g_propagate_error (error, _inner_error0_);
20483 					_g_free0 (id);
20484 					_vala_code_node_unref0 (expr);
20485 					return NULL;
20486 				} else {
20487 					_g_free0 (id);
20488 					_vala_code_node_unref0 (expr);
20489 					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);
20490 					g_clear_error (&_inner_error0_);
20491 					return NULL;
20492 				}
20493 			}
20494 			_tmp5_ = expr;
20495 			if (_tmp5_ != NULL) {
20496 				ValaMemberAccess* _tmp6_;
20497 				_tmp6_ = expr;
20498 				_tmp4_ = (ValaExpression*) _tmp6_;
20499 			} else {
20500 				_tmp4_ = base_expr;
20501 			}
20502 			_tmp7_ = id;
20503 			_tmp8_ = begin;
20504 			_tmp9_ = vala_genie_parser_get_src (self, &_tmp8_);
20505 			_tmp10_ = _tmp9_;
20506 			_tmp11_ = vala_member_access_new (_tmp4_, _tmp7_, _tmp10_);
20507 			_vala_code_node_unref0 (expr);
20508 			expr = _tmp11_;
20509 			_vala_source_reference_unref0 (_tmp10_);
20510 			_tmp12_ = type_arg_list;
20511 			if (_tmp12_ != NULL) {
20512 				{
20513 					ValaList* _type_arg_list = NULL;
20514 					ValaList* _tmp13_;
20515 					ValaList* _tmp14_;
20516 					gint _type_arg_size = 0;
20517 					ValaList* _tmp15_;
20518 					gint _tmp16_;
20519 					gint _tmp17_;
20520 					gint _type_arg_index = 0;
20521 					_tmp13_ = type_arg_list;
20522 					_tmp14_ = _vala_iterable_ref0 (_tmp13_);
20523 					_type_arg_list = _tmp14_;
20524 					_tmp15_ = _type_arg_list;
20525 					_tmp16_ = vala_collection_get_size ((ValaCollection*) _tmp15_);
20526 					_tmp17_ = _tmp16_;
20527 					_type_arg_size = _tmp17_;
20528 					_type_arg_index = -1;
20529 					while (TRUE) {
20530 						gint _tmp18_;
20531 						gint _tmp19_;
20532 						ValaDataType* type_arg = NULL;
20533 						ValaList* _tmp20_;
20534 						gpointer _tmp21_;
20535 						ValaMemberAccess* _tmp22_;
20536 						ValaDataType* _tmp23_;
20537 						_type_arg_index = _type_arg_index + 1;
20538 						_tmp18_ = _type_arg_index;
20539 						_tmp19_ = _type_arg_size;
20540 						if (!(_tmp18_ < _tmp19_)) {
20541 							break;
20542 						}
20543 						_tmp20_ = _type_arg_list;
20544 						_tmp21_ = vala_list_get (_tmp20_, _type_arg_index);
20545 						type_arg = (ValaDataType*) _tmp21_;
20546 						_tmp22_ = expr;
20547 						_tmp23_ = type_arg;
20548 						vala_member_access_add_type_argument (_tmp22_, _tmp23_);
20549 						_vala_code_node_unref0 (type_arg);
20550 					}
20551 					_vala_iterable_unref0 (_type_arg_list);
20552 				}
20553 			}
20554 			_vala_iterable_unref0 (type_arg_list);
20555 			_g_free0 (id);
20556 		}
20557 	}
20558 	result = expr;
20559 	return result;
20560 }
20561 
20562 static ValaGenieParserTokenInfo*
vala_genie_parser_token_info_dup(const ValaGenieParserTokenInfo * self)20563 vala_genie_parser_token_info_dup (const ValaGenieParserTokenInfo* self)
20564 {
20565 	ValaGenieParserTokenInfo* dup;
20566 	dup = g_new0 (ValaGenieParserTokenInfo, 1);
20567 	memcpy (dup, self, sizeof (ValaGenieParserTokenInfo));
20568 	return dup;
20569 }
20570 
20571 static void
vala_genie_parser_token_info_free(ValaGenieParserTokenInfo * self)20572 vala_genie_parser_token_info_free (ValaGenieParserTokenInfo* self)
20573 {
20574 	g_free (self);
20575 }
20576 
20577 static GType
vala_genie_parser_token_info_get_type_once(void)20578 vala_genie_parser_token_info_get_type_once (void)
20579 {
20580 	GType vala_genie_parser_token_info_type_id;
20581 	vala_genie_parser_token_info_type_id = g_boxed_type_register_static ("ValaGenieParserTokenInfo", (GBoxedCopyFunc) vala_genie_parser_token_info_dup, (GBoxedFreeFunc) vala_genie_parser_token_info_free);
20582 	return vala_genie_parser_token_info_type_id;
20583 }
20584 
20585 static GType
vala_genie_parser_token_info_get_type(void)20586 vala_genie_parser_token_info_get_type (void)
20587 {
20588 	static volatile gsize vala_genie_parser_token_info_type_id__volatile = 0;
20589 	if (g_once_init_enter (&vala_genie_parser_token_info_type_id__volatile)) {
20590 		GType vala_genie_parser_token_info_type_id;
20591 		vala_genie_parser_token_info_type_id = vala_genie_parser_token_info_get_type_once ();
20592 		g_once_init_leave (&vala_genie_parser_token_info_type_id__volatile, vala_genie_parser_token_info_type_id);
20593 	}
20594 	return vala_genie_parser_token_info_type_id__volatile;
20595 }
20596 
20597 static void
vala_genie_parser_class_init(ValaGenieParserClass * klass,gpointer klass_data)20598 vala_genie_parser_class_init (ValaGenieParserClass * klass,
20599                               gpointer klass_data)
20600 {
20601 	vala_genie_parser_parent_class = g_type_class_peek_parent (klass);
20602 	((ValaCodeVisitorClass *) klass)->finalize = vala_genie_parser_finalize;
20603 	g_type_class_adjust_private_offset (klass, &ValaGenieParser_private_offset);
20604 	((ValaCodeVisitorClass *) klass)->visit_source_file = (void (*) (ValaCodeVisitor*, ValaSourceFile*)) vala_genie_parser_real_visit_source_file;
20605 }
20606 
20607 static void
vala_genie_parser_instance_init(ValaGenieParser * self,gpointer klass)20608 vala_genie_parser_instance_init (ValaGenieParser * self,
20609                                  gpointer klass)
20610 {
20611 	self->priv = vala_genie_parser_get_instance_private (self);
20612 }
20613 
20614 static void
vala_genie_parser_finalize(ValaCodeVisitor * obj)20615 vala_genie_parser_finalize (ValaCodeVisitor * obj)
20616 {
20617 	ValaGenieParser * self;
20618 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_GENIE_TYPE_PARSER, ValaGenieParser);
20619 	_vala_genie_scanner_unref0 (self->priv->scanner);
20620 	_vala_code_context_unref0 (self->priv->context);
20621 	self->priv->tokens = (g_free (self->priv->tokens), NULL);
20622 	_vala_comment_unref0 (self->priv->comment);
20623 	_g_free0 (self->priv->class_name);
20624 	VALA_CODE_VISITOR_CLASS (vala_genie_parser_parent_class)->finalize (obj);
20625 }
20626 
20627 /**
20628  * Code visitor parsing all Genie source files.
20629  */
20630 static GType
vala_genie_parser_get_type_once(void)20631 vala_genie_parser_get_type_once (void)
20632 {
20633 	static const GTypeInfo g_define_type_info = { sizeof (ValaGenieParserClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_genie_parser_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGenieParser), 0, (GInstanceInitFunc) vala_genie_parser_instance_init, NULL };
20634 	GType vala_genie_parser_type_id;
20635 	vala_genie_parser_type_id = g_type_register_static (VALA_TYPE_CODE_VISITOR, "ValaGenieParser", &g_define_type_info, 0);
20636 	ValaGenieParser_private_offset = g_type_add_instance_private (vala_genie_parser_type_id, sizeof (ValaGenieParserPrivate));
20637 	return vala_genie_parser_type_id;
20638 }
20639 
20640 GType
vala_genie_parser_get_type(void)20641 vala_genie_parser_get_type (void)
20642 {
20643 	static volatile gsize vala_genie_parser_type_id__volatile = 0;
20644 	if (g_once_init_enter (&vala_genie_parser_type_id__volatile)) {
20645 		GType vala_genie_parser_type_id;
20646 		vala_genie_parser_type_id = vala_genie_parser_get_type_once ();
20647 		g_once_init_leave (&vala_genie_parser_type_id__volatile, vala_genie_parser_type_id);
20648 	}
20649 	return vala_genie_parser_type_id__volatile;
20650 }
20651 
20652