1 /* valaarraycreationexpression.c generated by valac, the Vala compiler
2  * generated from valaarraycreationexpression.vala, do not modify */
3 
4 /* valaarraycreationexpression.vala
5  *
6  * Copyright (C) 2006-2010  Jürg Billeter
7  * Copyright (C) 2006-2008  Raffaele Sandrini
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  * 	Raffaele Sandrini <raffaele@sandrini.ch>
25  * 	Jürg Billeter <j@bitron.ch>
26  */
27 
28 #include "vala.h"
29 #include <glib.h>
30 #include <valagee.h>
31 #include <glib-object.h>
32 #include <stdlib.h>
33 #include <string.h>
34 
35 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
36 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
37 #define _g_free0(var) (var = (g_free (var), NULL))
38 #define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
39 
40 struct _ValaArrayCreationExpressionPrivate {
41 	gint _rank;
42 	ValaList* sizes;
43 	ValaDataType* _element_type;
44 	ValaDataType* _length_type;
45 	ValaInitializerList* _initializer_list;
46 };
47 
48 static gint ValaArrayCreationExpression_private_offset;
49 static gpointer vala_array_creation_expression_parent_class = NULL;
50 
51 static void vala_array_creation_expression_real_accept_children (ValaCodeNode* base,
52                                                           ValaCodeVisitor* visitor);
53 static void vala_array_creation_expression_real_accept (ValaCodeNode* base,
54                                                  ValaCodeVisitor* visitor);
55 static gboolean vala_array_creation_expression_real_is_pure (ValaExpression* base);
56 static gboolean vala_array_creation_expression_real_is_accessible (ValaExpression* base,
57                                                             ValaSymbol* sym);
58 static gchar* vala_array_creation_expression_real_to_string (ValaCodeNode* base);
59 static void vala_array_creation_expression_real_replace_expression (ValaCodeNode* base,
60                                                              ValaExpression* old_node,
61                                                              ValaExpression* new_node);
62 static void vala_array_creation_expression_real_replace_type (ValaCodeNode* base,
63                                                        ValaDataType* old_type,
64                                                        ValaDataType* new_type);
65 static gint vala_array_creation_expression_create_sizes_from_initializer_list (ValaArrayCreationExpression* self,
66                                                                         ValaCodeContext* context,
67                                                                         ValaInitializerList* il,
68                                                                         gint rank,
69                                                                         ValaList* sl);
70 static gboolean vala_array_creation_expression_real_check (ValaCodeNode* base,
71                                                     ValaCodeContext* context);
72 static void vala_array_creation_expression_real_emit (ValaCodeNode* base,
73                                                ValaCodeGenerator* codegen);
74 static void vala_array_creation_expression_real_get_used_variables (ValaCodeNode* base,
75                                                              ValaCollection* collection);
76 static void vala_array_creation_expression_finalize (ValaCodeNode * obj);
77 static GType vala_array_creation_expression_get_type_once (void);
78 
79 static inline gpointer
vala_array_creation_expression_get_instance_private(ValaArrayCreationExpression * self)80 vala_array_creation_expression_get_instance_private (ValaArrayCreationExpression* self)
81 {
82 	return G_STRUCT_MEMBER_P (self, ValaArrayCreationExpression_private_offset);
83 }
84 
85 ValaDataType*
vala_array_creation_expression_get_element_type(ValaArrayCreationExpression * self)86 vala_array_creation_expression_get_element_type (ValaArrayCreationExpression* self)
87 {
88 	ValaDataType* result;
89 	ValaDataType* _tmp0_;
90 	g_return_val_if_fail (self != NULL, NULL);
91 	_tmp0_ = self->priv->_element_type;
92 	result = _tmp0_;
93 	return result;
94 }
95 
96 static gpointer
_vala_code_node_ref0(gpointer self)97 _vala_code_node_ref0 (gpointer self)
98 {
99 	return self ? vala_code_node_ref (self) : NULL;
100 }
101 
102 void
vala_array_creation_expression_set_element_type(ValaArrayCreationExpression * self,ValaDataType * value)103 vala_array_creation_expression_set_element_type (ValaArrayCreationExpression* self,
104                                                  ValaDataType* value)
105 {
106 	ValaDataType* _tmp0_;
107 	ValaDataType* _tmp1_;
108 	g_return_if_fail (self != NULL);
109 	_tmp0_ = _vala_code_node_ref0 (value);
110 	_vala_code_node_unref0 (self->priv->_element_type);
111 	self->priv->_element_type = _tmp0_;
112 	_tmp1_ = self->priv->_element_type;
113 	vala_code_node_set_parent_node ((ValaCodeNode*) _tmp1_, (ValaCodeNode*) self);
114 }
115 
116 ValaDataType*
vala_array_creation_expression_get_length_type(ValaArrayCreationExpression * self)117 vala_array_creation_expression_get_length_type (ValaArrayCreationExpression* self)
118 {
119 	ValaDataType* result;
120 	ValaDataType* _tmp0_;
121 	g_return_val_if_fail (self != NULL, NULL);
122 	_tmp0_ = self->priv->_length_type;
123 	result = _tmp0_;
124 	return result;
125 }
126 
127 void
vala_array_creation_expression_set_length_type(ValaArrayCreationExpression * self,ValaDataType * value)128 vala_array_creation_expression_set_length_type (ValaArrayCreationExpression* self,
129                                                 ValaDataType* value)
130 {
131 	ValaDataType* _tmp0_;
132 	ValaDataType* _tmp1_;
133 	g_return_if_fail (self != NULL);
134 	_tmp0_ = _vala_code_node_ref0 (value);
135 	_vala_code_node_unref0 (self->priv->_length_type);
136 	self->priv->_length_type = _tmp0_;
137 	_tmp1_ = self->priv->_length_type;
138 	if (_tmp1_ != NULL) {
139 		ValaDataType* _tmp2_;
140 		_tmp2_ = self->priv->_length_type;
141 		vala_code_node_set_parent_node ((ValaCodeNode*) _tmp2_, (ValaCodeNode*) self);
142 	}
143 }
144 
145 gint
vala_array_creation_expression_get_rank(ValaArrayCreationExpression * self)146 vala_array_creation_expression_get_rank (ValaArrayCreationExpression* self)
147 {
148 	gint result;
149 	g_return_val_if_fail (self != NULL, 0);
150 	result = self->priv->_rank;
151 	return result;
152 }
153 
154 void
vala_array_creation_expression_set_rank(ValaArrayCreationExpression * self,gint value)155 vala_array_creation_expression_set_rank (ValaArrayCreationExpression* self,
156                                          gint value)
157 {
158 	g_return_if_fail (self != NULL);
159 	self->priv->_rank = value;
160 }
161 
162 ValaInitializerList*
vala_array_creation_expression_get_initializer_list(ValaArrayCreationExpression * self)163 vala_array_creation_expression_get_initializer_list (ValaArrayCreationExpression* self)
164 {
165 	ValaInitializerList* result;
166 	ValaInitializerList* _tmp0_;
167 	g_return_val_if_fail (self != NULL, NULL);
168 	_tmp0_ = self->priv->_initializer_list;
169 	result = _tmp0_;
170 	return result;
171 }
172 
173 void
vala_array_creation_expression_set_initializer_list(ValaArrayCreationExpression * self,ValaInitializerList * value)174 vala_array_creation_expression_set_initializer_list (ValaArrayCreationExpression* self,
175                                                      ValaInitializerList* value)
176 {
177 	ValaInitializerList* _tmp0_;
178 	ValaInitializerList* _tmp1_;
179 	g_return_if_fail (self != NULL);
180 	_tmp0_ = _vala_code_node_ref0 (value);
181 	_vala_code_node_unref0 (self->priv->_initializer_list);
182 	self->priv->_initializer_list = _tmp0_;
183 	_tmp1_ = self->priv->_initializer_list;
184 	if (_tmp1_ != NULL) {
185 		ValaInitializerList* _tmp2_;
186 		_tmp2_ = self->priv->_initializer_list;
187 		vala_code_node_set_parent_node ((ValaCodeNode*) _tmp2_, (ValaCodeNode*) self);
188 	}
189 }
190 
191 /**
192  * Add a size expression.
193  */
194 void
vala_array_creation_expression_append_size(ValaArrayCreationExpression * self,ValaExpression * size)195 vala_array_creation_expression_append_size (ValaArrayCreationExpression* self,
196                                             ValaExpression* size)
197 {
198 	ValaList* _tmp0_;
199 	g_return_if_fail (self != NULL);
200 	g_return_if_fail (size != NULL);
201 	_tmp0_ = self->priv->sizes;
202 	vala_collection_add ((ValaCollection*) _tmp0_, size);
203 	if (size != NULL) {
204 		vala_code_node_set_parent_node ((ValaCodeNode*) size, (ValaCodeNode*) self);
205 	}
206 }
207 
208 /**
209  * Get the sizes for all dimensions ascending from left to right.
210  */
211 ValaList*
vala_array_creation_expression_get_sizes(ValaArrayCreationExpression * self)212 vala_array_creation_expression_get_sizes (ValaArrayCreationExpression* self)
213 {
214 	ValaList* _tmp0_;
215 	ValaList* result = NULL;
216 	g_return_val_if_fail (self != NULL, NULL);
217 	_tmp0_ = self->priv->sizes;
218 	result = _tmp0_;
219 	return result;
220 }
221 
222 ValaArrayCreationExpression*
vala_array_creation_expression_construct(GType object_type,ValaDataType * element_type,gint rank,ValaInitializerList * initializer_list,ValaSourceReference * source_reference)223 vala_array_creation_expression_construct (GType object_type,
224                                           ValaDataType* element_type,
225                                           gint rank,
226                                           ValaInitializerList* initializer_list,
227                                           ValaSourceReference* source_reference)
228 {
229 	ValaArrayCreationExpression* self = NULL;
230 	g_return_val_if_fail (element_type != NULL, NULL);
231 	self = (ValaArrayCreationExpression*) vala_expression_construct (object_type);
232 	vala_array_creation_expression_set_element_type (self, element_type);
233 	vala_array_creation_expression_set_rank (self, rank);
234 	vala_array_creation_expression_set_initializer_list (self, initializer_list);
235 	vala_code_node_set_source_reference ((ValaCodeNode*) self, source_reference);
236 	return self;
237 }
238 
239 ValaArrayCreationExpression*
vala_array_creation_expression_new(ValaDataType * element_type,gint rank,ValaInitializerList * initializer_list,ValaSourceReference * source_reference)240 vala_array_creation_expression_new (ValaDataType* element_type,
241                                     gint rank,
242                                     ValaInitializerList* initializer_list,
243                                     ValaSourceReference* source_reference)
244 {
245 	return vala_array_creation_expression_construct (VALA_TYPE_ARRAY_CREATION_EXPRESSION, element_type, rank, initializer_list, source_reference);
246 }
247 
248 static gpointer
_vala_iterable_ref0(gpointer self)249 _vala_iterable_ref0 (gpointer self)
250 {
251 	return self ? vala_iterable_ref (self) : NULL;
252 }
253 
254 static void
vala_array_creation_expression_real_accept_children(ValaCodeNode * base,ValaCodeVisitor * visitor)255 vala_array_creation_expression_real_accept_children (ValaCodeNode* base,
256                                                      ValaCodeVisitor* visitor)
257 {
258 	ValaArrayCreationExpression * self;
259 	ValaDataType* _tmp0_;
260 	ValaDataType* _tmp1_;
261 	ValaDataType* _tmp4_;
262 	ValaDataType* _tmp5_;
263 	ValaInitializerList* _tmp18_;
264 	ValaInitializerList* _tmp19_;
265 	self = (ValaArrayCreationExpression*) base;
266 	g_return_if_fail (visitor != NULL);
267 	_tmp0_ = vala_array_creation_expression_get_element_type (self);
268 	_tmp1_ = _tmp0_;
269 	if (_tmp1_ != NULL) {
270 		ValaDataType* _tmp2_;
271 		ValaDataType* _tmp3_;
272 		_tmp2_ = vala_array_creation_expression_get_element_type (self);
273 		_tmp3_ = _tmp2_;
274 		vala_code_node_accept ((ValaCodeNode*) _tmp3_, visitor);
275 	}
276 	_tmp4_ = vala_array_creation_expression_get_length_type (self);
277 	_tmp5_ = _tmp4_;
278 	if (_tmp5_ != NULL) {
279 		ValaDataType* _tmp6_;
280 		ValaDataType* _tmp7_;
281 		_tmp6_ = vala_array_creation_expression_get_length_type (self);
282 		_tmp7_ = _tmp6_;
283 		vala_code_node_accept ((ValaCodeNode*) _tmp7_, visitor);
284 	}
285 	{
286 		ValaList* _e_list = NULL;
287 		ValaList* _tmp8_;
288 		ValaList* _tmp9_;
289 		gint _e_size = 0;
290 		ValaList* _tmp10_;
291 		gint _tmp11_;
292 		gint _tmp12_;
293 		gint _e_index = 0;
294 		_tmp8_ = self->priv->sizes;
295 		_tmp9_ = _vala_iterable_ref0 (_tmp8_);
296 		_e_list = _tmp9_;
297 		_tmp10_ = _e_list;
298 		_tmp11_ = vala_collection_get_size ((ValaCollection*) _tmp10_);
299 		_tmp12_ = _tmp11_;
300 		_e_size = _tmp12_;
301 		_e_index = -1;
302 		while (TRUE) {
303 			gint _tmp13_;
304 			gint _tmp14_;
305 			ValaExpression* e = NULL;
306 			ValaList* _tmp15_;
307 			gpointer _tmp16_;
308 			ValaExpression* _tmp17_;
309 			_e_index = _e_index + 1;
310 			_tmp13_ = _e_index;
311 			_tmp14_ = _e_size;
312 			if (!(_tmp13_ < _tmp14_)) {
313 				break;
314 			}
315 			_tmp15_ = _e_list;
316 			_tmp16_ = vala_list_get (_tmp15_, _e_index);
317 			e = (ValaExpression*) _tmp16_;
318 			_tmp17_ = e;
319 			vala_code_node_accept ((ValaCodeNode*) _tmp17_, visitor);
320 			_vala_code_node_unref0 (e);
321 		}
322 		_vala_iterable_unref0 (_e_list);
323 	}
324 	_tmp18_ = vala_array_creation_expression_get_initializer_list (self);
325 	_tmp19_ = _tmp18_;
326 	if (_tmp19_ != NULL) {
327 		ValaInitializerList* _tmp20_;
328 		ValaInitializerList* _tmp21_;
329 		_tmp20_ = vala_array_creation_expression_get_initializer_list (self);
330 		_tmp21_ = _tmp20_;
331 		vala_code_node_accept ((ValaCodeNode*) _tmp21_, visitor);
332 	}
333 }
334 
335 static void
vala_array_creation_expression_real_accept(ValaCodeNode * base,ValaCodeVisitor * visitor)336 vala_array_creation_expression_real_accept (ValaCodeNode* base,
337                                             ValaCodeVisitor* visitor)
338 {
339 	ValaArrayCreationExpression * self;
340 	self = (ValaArrayCreationExpression*) base;
341 	g_return_if_fail (visitor != NULL);
342 	vala_code_visitor_visit_array_creation_expression (visitor, self);
343 	vala_code_visitor_visit_expression (visitor, (ValaExpression*) self);
344 }
345 
346 static gboolean
vala_array_creation_expression_real_is_pure(ValaExpression * base)347 vala_array_creation_expression_real_is_pure (ValaExpression* base)
348 {
349 	ValaArrayCreationExpression * self;
350 	gboolean result = FALSE;
351 	self = (ValaArrayCreationExpression*) base;
352 	result = FALSE;
353 	return result;
354 }
355 
356 static gboolean
vala_array_creation_expression_real_is_accessible(ValaExpression * base,ValaSymbol * sym)357 vala_array_creation_expression_real_is_accessible (ValaExpression* base,
358                                                    ValaSymbol* sym)
359 {
360 	ValaArrayCreationExpression * self;
361 	gboolean _tmp0_ = FALSE;
362 	ValaDataType* _tmp1_;
363 	ValaDataType* _tmp2_;
364 	gboolean _tmp5_ = FALSE;
365 	ValaDataType* _tmp6_;
366 	ValaDataType* _tmp7_;
367 	ValaInitializerList* _tmp20_;
368 	ValaInitializerList* _tmp21_;
369 	gboolean result = FALSE;
370 	self = (ValaArrayCreationExpression*) base;
371 	g_return_val_if_fail (sym != NULL, FALSE);
372 	_tmp1_ = vala_array_creation_expression_get_element_type (self);
373 	_tmp2_ = _tmp1_;
374 	if (_tmp2_ != NULL) {
375 		ValaDataType* _tmp3_;
376 		ValaDataType* _tmp4_;
377 		_tmp3_ = vala_array_creation_expression_get_element_type (self);
378 		_tmp4_ = _tmp3_;
379 		_tmp0_ = !vala_data_type_is_accessible (_tmp4_, sym);
380 	} else {
381 		_tmp0_ = FALSE;
382 	}
383 	if (_tmp0_) {
384 		result = FALSE;
385 		return result;
386 	}
387 	_tmp6_ = vala_array_creation_expression_get_length_type (self);
388 	_tmp7_ = _tmp6_;
389 	if (_tmp7_ != NULL) {
390 		ValaDataType* _tmp8_;
391 		ValaDataType* _tmp9_;
392 		_tmp8_ = vala_array_creation_expression_get_length_type (self);
393 		_tmp9_ = _tmp8_;
394 		_tmp5_ = !vala_data_type_is_accessible (_tmp9_, sym);
395 	} else {
396 		_tmp5_ = FALSE;
397 	}
398 	if (_tmp5_) {
399 		result = FALSE;
400 		return result;
401 	}
402 	{
403 		ValaList* _e_list = NULL;
404 		ValaList* _tmp10_;
405 		ValaList* _tmp11_;
406 		gint _e_size = 0;
407 		ValaList* _tmp12_;
408 		gint _tmp13_;
409 		gint _tmp14_;
410 		gint _e_index = 0;
411 		_tmp10_ = self->priv->sizes;
412 		_tmp11_ = _vala_iterable_ref0 (_tmp10_);
413 		_e_list = _tmp11_;
414 		_tmp12_ = _e_list;
415 		_tmp13_ = vala_collection_get_size ((ValaCollection*) _tmp12_);
416 		_tmp14_ = _tmp13_;
417 		_e_size = _tmp14_;
418 		_e_index = -1;
419 		while (TRUE) {
420 			gint _tmp15_;
421 			gint _tmp16_;
422 			ValaExpression* e = NULL;
423 			ValaList* _tmp17_;
424 			gpointer _tmp18_;
425 			ValaExpression* _tmp19_;
426 			_e_index = _e_index + 1;
427 			_tmp15_ = _e_index;
428 			_tmp16_ = _e_size;
429 			if (!(_tmp15_ < _tmp16_)) {
430 				break;
431 			}
432 			_tmp17_ = _e_list;
433 			_tmp18_ = vala_list_get (_tmp17_, _e_index);
434 			e = (ValaExpression*) _tmp18_;
435 			_tmp19_ = e;
436 			if (!vala_expression_is_accessible (_tmp19_, sym)) {
437 				result = FALSE;
438 				_vala_code_node_unref0 (e);
439 				_vala_iterable_unref0 (_e_list);
440 				return result;
441 			}
442 			_vala_code_node_unref0 (e);
443 		}
444 		_vala_iterable_unref0 (_e_list);
445 	}
446 	_tmp20_ = vala_array_creation_expression_get_initializer_list (self);
447 	_tmp21_ = _tmp20_;
448 	if (_tmp21_ != NULL) {
449 		ValaInitializerList* _tmp22_;
450 		ValaInitializerList* _tmp23_;
451 		_tmp22_ = vala_array_creation_expression_get_initializer_list (self);
452 		_tmp23_ = _tmp22_;
453 		result = vala_expression_is_accessible ((ValaExpression*) _tmp23_, sym);
454 		return result;
455 	}
456 	result = TRUE;
457 	return result;
458 }
459 
460 static gchar*
vala_array_creation_expression_real_to_string(ValaCodeNode * base)461 vala_array_creation_expression_real_to_string (ValaCodeNode* base)
462 {
463 	ValaArrayCreationExpression * self;
464 	GString* builder = NULL;
465 	GString* _tmp0_;
466 	GString* _tmp1_;
467 	ValaDataType* _tmp2_;
468 	ValaDataType* _tmp3_;
469 	gchar* _tmp4_;
470 	gchar* _tmp5_;
471 	gboolean first = FALSE;
472 	GString* _tmp23_;
473 	ValaInitializerList* _tmp24_;
474 	ValaInitializerList* _tmp25_;
475 	GString* _tmp31_;
476 	const gchar* _tmp32_;
477 	gchar* _tmp33_;
478 	gchar* result = NULL;
479 	self = (ValaArrayCreationExpression*) base;
480 	_tmp0_ = g_string_new ("new ");
481 	builder = _tmp0_;
482 	_tmp1_ = builder;
483 	_tmp2_ = vala_array_creation_expression_get_element_type (self);
484 	_tmp3_ = _tmp2_;
485 	_tmp4_ = vala_code_node_to_string ((ValaCodeNode*) _tmp3_);
486 	_tmp5_ = _tmp4_;
487 	g_string_append_printf (_tmp1_, "%s[", _tmp5_);
488 	_g_free0 (_tmp5_);
489 	first = TRUE;
490 	{
491 		ValaList* _size_list = NULL;
492 		ValaList* _tmp6_;
493 		ValaList* _tmp7_;
494 		gint _size_size = 0;
495 		ValaList* _tmp8_;
496 		gint _tmp9_;
497 		gint _tmp10_;
498 		gint _size_index = 0;
499 		_tmp6_ = self->priv->sizes;
500 		_tmp7_ = _vala_iterable_ref0 (_tmp6_);
501 		_size_list = _tmp7_;
502 		_tmp8_ = _size_list;
503 		_tmp9_ = vala_collection_get_size ((ValaCollection*) _tmp8_);
504 		_tmp10_ = _tmp9_;
505 		_size_size = _tmp10_;
506 		_size_index = -1;
507 		while (TRUE) {
508 			gint _tmp11_;
509 			gint _tmp12_;
510 			ValaExpression* size = NULL;
511 			ValaList* _tmp13_;
512 			gpointer _tmp14_;
513 			_size_index = _size_index + 1;
514 			_tmp11_ = _size_index;
515 			_tmp12_ = _size_size;
516 			if (!(_tmp11_ < _tmp12_)) {
517 				break;
518 			}
519 			_tmp13_ = _size_list;
520 			_tmp14_ = vala_list_get (_tmp13_, _size_index);
521 			size = (ValaExpression*) _tmp14_;
522 			if (first) {
523 				GString* _tmp15_;
524 				ValaExpression* _tmp16_;
525 				gchar* _tmp17_;
526 				gchar* _tmp18_;
527 				_tmp15_ = builder;
528 				_tmp16_ = size;
529 				_tmp17_ = vala_code_node_to_string ((ValaCodeNode*) _tmp16_);
530 				_tmp18_ = _tmp17_;
531 				g_string_append (_tmp15_, _tmp18_);
532 				_g_free0 (_tmp18_);
533 				first = FALSE;
534 			} else {
535 				GString* _tmp19_;
536 				ValaExpression* _tmp20_;
537 				gchar* _tmp21_;
538 				gchar* _tmp22_;
539 				_tmp19_ = builder;
540 				_tmp20_ = size;
541 				_tmp21_ = vala_code_node_to_string ((ValaCodeNode*) _tmp20_);
542 				_tmp22_ = _tmp21_;
543 				g_string_append_printf (_tmp19_, ", %s", _tmp22_);
544 				_g_free0 (_tmp22_);
545 			}
546 			_vala_code_node_unref0 (size);
547 		}
548 		_vala_iterable_unref0 (_size_list);
549 	}
550 	_tmp23_ = builder;
551 	g_string_append_c (_tmp23_, ']');
552 	_tmp24_ = vala_array_creation_expression_get_initializer_list (self);
553 	_tmp25_ = _tmp24_;
554 	if (_tmp25_ != NULL) {
555 		GString* _tmp26_;
556 		ValaInitializerList* _tmp27_;
557 		ValaInitializerList* _tmp28_;
558 		gchar* _tmp29_;
559 		gchar* _tmp30_;
560 		_tmp26_ = builder;
561 		_tmp27_ = vala_array_creation_expression_get_initializer_list (self);
562 		_tmp28_ = _tmp27_;
563 		_tmp29_ = vala_code_node_to_string ((ValaCodeNode*) _tmp28_);
564 		_tmp30_ = _tmp29_;
565 		g_string_append (_tmp26_, _tmp30_);
566 		_g_free0 (_tmp30_);
567 	}
568 	_tmp31_ = builder;
569 	_tmp32_ = _tmp31_->str;
570 	_tmp33_ = g_strdup (_tmp32_);
571 	result = _tmp33_;
572 	_g_string_free0 (builder);
573 	return result;
574 }
575 
576 static void
vala_array_creation_expression_real_replace_expression(ValaCodeNode * base,ValaExpression * old_node,ValaExpression * new_node)577 vala_array_creation_expression_real_replace_expression (ValaCodeNode* base,
578                                                         ValaExpression* old_node,
579                                                         ValaExpression* new_node)
580 {
581 	ValaArrayCreationExpression * self;
582 	self = (ValaArrayCreationExpression*) base;
583 	g_return_if_fail (old_node != NULL);
584 	g_return_if_fail (new_node != NULL);
585 	{
586 		gint i = 0;
587 		i = 0;
588 		{
589 			gboolean _tmp0_ = FALSE;
590 			_tmp0_ = TRUE;
591 			while (TRUE) {
592 				ValaList* _tmp2_;
593 				gint _tmp3_;
594 				gint _tmp4_;
595 				ValaList* _tmp5_;
596 				gpointer _tmp6_;
597 				ValaExpression* _tmp7_;
598 				gboolean _tmp8_;
599 				if (!_tmp0_) {
600 					gint _tmp1_;
601 					_tmp1_ = i;
602 					i = _tmp1_ + 1;
603 				}
604 				_tmp0_ = FALSE;
605 				_tmp2_ = self->priv->sizes;
606 				_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
607 				_tmp4_ = _tmp3_;
608 				if (!(i < _tmp4_)) {
609 					break;
610 				}
611 				_tmp5_ = self->priv->sizes;
612 				_tmp6_ = vala_list_get (_tmp5_, i);
613 				_tmp7_ = (ValaExpression*) _tmp6_;
614 				_tmp8_ = _tmp7_ == old_node;
615 				_vala_code_node_unref0 (_tmp7_);
616 				if (_tmp8_) {
617 					ValaList* _tmp9_;
618 					_tmp9_ = self->priv->sizes;
619 					vala_list_set (_tmp9_, i, new_node);
620 					vala_code_node_set_parent_node ((ValaCodeNode*) new_node, (ValaCodeNode*) self);
621 					return;
622 				}
623 			}
624 		}
625 	}
626 }
627 
628 static void
vala_array_creation_expression_real_replace_type(ValaCodeNode * base,ValaDataType * old_type,ValaDataType * new_type)629 vala_array_creation_expression_real_replace_type (ValaCodeNode* base,
630                                                   ValaDataType* old_type,
631                                                   ValaDataType* new_type)
632 {
633 	ValaArrayCreationExpression * self;
634 	ValaDataType* _tmp0_;
635 	ValaDataType* _tmp1_;
636 	ValaDataType* _tmp2_;
637 	ValaDataType* _tmp3_;
638 	self = (ValaArrayCreationExpression*) base;
639 	g_return_if_fail (old_type != NULL);
640 	g_return_if_fail (new_type != NULL);
641 	_tmp0_ = vala_array_creation_expression_get_element_type (self);
642 	_tmp1_ = _tmp0_;
643 	if (_tmp1_ == old_type) {
644 		vala_array_creation_expression_set_element_type (self, new_type);
645 	}
646 	_tmp2_ = vala_array_creation_expression_get_length_type (self);
647 	_tmp3_ = _tmp2_;
648 	if (_tmp3_ == old_type) {
649 		vala_array_creation_expression_set_length_type (self, new_type);
650 	}
651 }
652 
653 static gint
vala_array_creation_expression_create_sizes_from_initializer_list(ValaArrayCreationExpression * self,ValaCodeContext * context,ValaInitializerList * il,gint rank,ValaList * sl)654 vala_array_creation_expression_create_sizes_from_initializer_list (ValaArrayCreationExpression* self,
655                                                                    ValaCodeContext* context,
656                                                                    ValaInitializerList* il,
657                                                                    gint rank,
658                                                                    ValaList* sl)
659 {
660 	gint _tmp0_;
661 	gint _tmp1_;
662 	gint _tmp2_;
663 	gint subsize = 0;
664 	gint _tmp41_;
665 	gint _tmp42_;
666 	gint result = 0;
667 	g_return_val_if_fail (self != NULL, 0);
668 	g_return_val_if_fail (context != NULL, 0);
669 	g_return_val_if_fail (il != NULL, 0);
670 	g_return_val_if_fail (sl != NULL, 0);
671 	_tmp0_ = vala_collection_get_size ((ValaCollection*) sl);
672 	_tmp1_ = _tmp0_;
673 	_tmp2_ = self->priv->_rank;
674 	if (_tmp1_ == (_tmp2_ - rank)) {
675 		ValaIntegerLiteral* init = NULL;
676 		gint _tmp3_;
677 		gint _tmp4_;
678 		gchar* _tmp5_;
679 		gchar* _tmp6_;
680 		ValaSourceReference* _tmp7_;
681 		ValaSourceReference* _tmp8_;
682 		ValaIntegerLiteral* _tmp9_;
683 		ValaIntegerLiteral* _tmp10_;
684 		ValaIntegerLiteral* _tmp11_;
685 		ValaIntegerLiteral* _tmp12_;
686 		_tmp3_ = vala_initializer_list_get_size (il);
687 		_tmp4_ = _tmp3_;
688 		_tmp5_ = g_strdup_printf ("%i", _tmp4_);
689 		_tmp6_ = _tmp5_;
690 		_tmp7_ = vala_code_node_get_source_reference ((ValaCodeNode*) il);
691 		_tmp8_ = _tmp7_;
692 		_tmp9_ = vala_integer_literal_new (_tmp6_, _tmp8_);
693 		_tmp10_ = _tmp9_;
694 		_g_free0 (_tmp6_);
695 		init = _tmp10_;
696 		_tmp11_ = init;
697 		vala_code_node_check ((ValaCodeNode*) _tmp11_, context);
698 		_tmp12_ = init;
699 		vala_collection_add ((ValaCollection*) sl, (ValaLiteral*) _tmp12_);
700 		_vala_code_node_unref0 (init);
701 	}
702 	subsize = -1;
703 	{
704 		ValaList* _e_list = NULL;
705 		ValaList* _tmp13_;
706 		ValaList* _tmp14_;
707 		gint _e_size = 0;
708 		ValaList* _tmp15_;
709 		gint _tmp16_;
710 		gint _tmp17_;
711 		gint _e_index = 0;
712 		_tmp13_ = vala_initializer_list_get_initializers (il);
713 		_tmp14_ = _vala_iterable_ref0 (_tmp13_);
714 		_e_list = _tmp14_;
715 		_tmp15_ = _e_list;
716 		_tmp16_ = vala_collection_get_size ((ValaCollection*) _tmp15_);
717 		_tmp17_ = _tmp16_;
718 		_e_size = _tmp17_;
719 		_e_index = -1;
720 		while (TRUE) {
721 			gint _tmp18_;
722 			gint _tmp19_;
723 			ValaExpression* e = NULL;
724 			ValaList* _tmp20_;
725 			gpointer _tmp21_;
726 			gboolean _tmp22_ = FALSE;
727 			ValaExpression* _tmp23_;
728 			_e_index = _e_index + 1;
729 			_tmp18_ = _e_index;
730 			_tmp19_ = _e_size;
731 			if (!(_tmp18_ < _tmp19_)) {
732 				break;
733 			}
734 			_tmp20_ = _e_list;
735 			_tmp21_ = vala_list_get (_tmp20_, _e_index);
736 			e = (ValaExpression*) _tmp21_;
737 			_tmp23_ = e;
738 			if (VALA_IS_INITIALIZER_LIST (_tmp23_)) {
739 				ValaExpression* _tmp24_;
740 				ValaDataType* _tmp25_;
741 				ValaDataType* _tmp26_;
742 				_tmp24_ = e;
743 				_tmp25_ = vala_expression_get_target_type (_tmp24_);
744 				_tmp26_ = _tmp25_;
745 				_tmp22_ = VALA_IS_ARRAY_TYPE (_tmp26_);
746 			} else {
747 				_tmp22_ = FALSE;
748 			}
749 			if (_tmp22_) {
750 				gint size = 0;
751 				ValaExpression* _tmp31_;
752 				gboolean _tmp32_ = FALSE;
753 				if (rank == 1) {
754 					ValaExpression* _tmp27_;
755 					ValaExpression* _tmp28_;
756 					ValaSourceReference* _tmp29_;
757 					ValaSourceReference* _tmp30_;
758 					vala_code_node_set_error ((ValaCodeNode*) il, TRUE);
759 					_tmp27_ = e;
760 					vala_code_node_set_error ((ValaCodeNode*) _tmp27_, TRUE);
761 					_tmp28_ = e;
762 					_tmp29_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp28_);
763 					_tmp30_ = _tmp29_;
764 					vala_report_error (_tmp30_, "Expected array element, got array initializer list");
765 					result = -1;
766 					_vala_code_node_unref0 (e);
767 					_vala_iterable_unref0 (_e_list);
768 					return result;
769 				}
770 				_tmp31_ = e;
771 				size = vala_array_creation_expression_create_sizes_from_initializer_list (self, context, G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, VALA_TYPE_INITIALIZER_LIST, ValaInitializerList), rank - 1, sl);
772 				if (size == -1) {
773 					result = -1;
774 					_vala_code_node_unref0 (e);
775 					_vala_iterable_unref0 (_e_list);
776 					return result;
777 				}
778 				if (subsize >= 0) {
779 					_tmp32_ = subsize != size;
780 				} else {
781 					_tmp32_ = FALSE;
782 				}
783 				if (_tmp32_) {
784 					ValaSourceReference* _tmp33_;
785 					ValaSourceReference* _tmp34_;
786 					gchar* _tmp35_;
787 					gchar* _tmp36_;
788 					vala_code_node_set_error ((ValaCodeNode*) il, TRUE);
789 					_tmp33_ = vala_code_node_get_source_reference ((ValaCodeNode*) il);
790 					_tmp34_ = _tmp33_;
791 					_tmp35_ = g_strdup_printf ("Expected initializer list of size %d, got size %d", subsize, size);
792 					_tmp36_ = _tmp35_;
793 					vala_report_error (_tmp34_, _tmp36_);
794 					_g_free0 (_tmp36_);
795 					result = -1;
796 					_vala_code_node_unref0 (e);
797 					_vala_iterable_unref0 (_e_list);
798 					return result;
799 				} else {
800 					subsize = size;
801 				}
802 			} else {
803 				if (rank != 1) {
804 					ValaExpression* _tmp37_;
805 					ValaExpression* _tmp38_;
806 					ValaSourceReference* _tmp39_;
807 					ValaSourceReference* _tmp40_;
808 					vala_code_node_set_error ((ValaCodeNode*) il, TRUE);
809 					_tmp37_ = e;
810 					vala_code_node_set_error ((ValaCodeNode*) _tmp37_, TRUE);
811 					_tmp38_ = e;
812 					_tmp39_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp38_);
813 					_tmp40_ = _tmp39_;
814 					vala_report_error (_tmp40_, "Expected array initializer list, got array element");
815 					result = -1;
816 					_vala_code_node_unref0 (e);
817 					_vala_iterable_unref0 (_e_list);
818 					return result;
819 				}
820 			}
821 			_vala_code_node_unref0 (e);
822 		}
823 		_vala_iterable_unref0 (_e_list);
824 	}
825 	_tmp41_ = vala_initializer_list_get_size (il);
826 	_tmp42_ = _tmp41_;
827 	result = _tmp42_;
828 	return result;
829 }
830 
831 static gboolean
vala_array_creation_expression_real_check(ValaCodeNode * base,ValaCodeContext * context)832 vala_array_creation_expression_real_check (ValaCodeNode* base,
833                                            ValaCodeContext* context)
834 {
835 	ValaArrayCreationExpression * self;
836 	gboolean _tmp0_;
837 	gboolean _tmp1_;
838 	ValaList* sizes = NULL;
839 	ValaList* _tmp4_;
840 	ValaList* _tmp5_;
841 	ValaInitializerList* initlist = NULL;
842 	ValaInitializerList* _tmp6_;
843 	ValaInitializerList* _tmp7_;
844 	ValaInitializerList* _tmp8_;
845 	ValaDataType* _tmp9_;
846 	ValaDataType* _tmp10_;
847 	ValaDataType* _tmp15_;
848 	ValaDataType* _tmp16_;
849 	ValaArrayList* calc_sizes = NULL;
850 	GEqualFunc _tmp45_;
851 	ValaArrayList* _tmp46_;
852 	ValaInitializerList* _tmp47_;
853 	ValaList* _tmp94_;
854 	gint _tmp95_;
855 	gint _tmp96_;
856 	gboolean _tmp132_;
857 	gboolean _tmp133_;
858 	gboolean _tmp134_ = FALSE;
859 	ValaInitializerList* _tmp135_;
860 	ValaInitializerList* _tmp136_;
861 	ValaDataType* _tmp141_;
862 	ValaDataType* _tmp142_;
863 	ValaDataType* _tmp145_;
864 	ValaDataType* _tmp146_;
865 	gint _tmp147_;
866 	ValaSourceReference* _tmp148_;
867 	ValaSourceReference* _tmp149_;
868 	ValaArrayType* _tmp150_;
869 	ValaArrayType* _tmp151_;
870 	ValaDataType* _tmp152_;
871 	ValaDataType* _tmp153_;
872 	ValaDataType* _tmp154_;
873 	ValaDataType* _tmp155_;
874 	ValaDataType* _tmp156_;
875 	ValaDataType* _tmp157_;
876 	ValaDataType* _tmp158_;
877 	ValaDataType* _tmp159_;
878 	ValaDataType* _tmp172_;
879 	ValaDataType* _tmp173_;
880 	ValaDataType* _tmp174_;
881 	ValaDataType* _tmp175_;
882 	gboolean _tmp176_;
883 	gboolean _tmp177_;
884 	gboolean result = FALSE;
885 	self = (ValaArrayCreationExpression*) base;
886 	g_return_val_if_fail (context != NULL, FALSE);
887 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
888 	_tmp1_ = _tmp0_;
889 	if (_tmp1_) {
890 		gboolean _tmp2_;
891 		gboolean _tmp3_;
892 		_tmp2_ = vala_code_node_get_error ((ValaCodeNode*) self);
893 		_tmp3_ = _tmp2_;
894 		result = !_tmp3_;
895 		return result;
896 	}
897 	vala_code_node_set_checked ((ValaCodeNode*) self, TRUE);
898 	_tmp4_ = vala_array_creation_expression_get_sizes (self);
899 	_tmp5_ = _vala_iterable_ref0 (_tmp4_);
900 	sizes = _tmp5_;
901 	_tmp6_ = vala_array_creation_expression_get_initializer_list (self);
902 	_tmp7_ = _tmp6_;
903 	_tmp8_ = _vala_code_node_ref0 (_tmp7_);
904 	initlist = _tmp8_;
905 	_tmp9_ = vala_array_creation_expression_get_element_type (self);
906 	_tmp10_ = _tmp9_;
907 	if (_tmp10_ != NULL) {
908 		ValaDataType* _tmp11_;
909 		ValaDataType* _tmp12_;
910 		ValaDataType* _tmp13_;
911 		ValaDataType* _tmp14_;
912 		_tmp11_ = vala_array_creation_expression_get_element_type (self);
913 		_tmp12_ = _tmp11_;
914 		vala_code_node_check ((ValaCodeNode*) _tmp12_, context);
915 		_tmp13_ = vala_array_creation_expression_get_element_type (self);
916 		_tmp14_ = _tmp13_;
917 		if (!vala_data_type_check_type_arguments (_tmp14_, context, TRUE)) {
918 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
919 			result = FALSE;
920 			_vala_code_node_unref0 (initlist);
921 			_vala_iterable_unref0 (sizes);
922 			return result;
923 		}
924 	}
925 	_tmp15_ = vala_array_creation_expression_get_length_type (self);
926 	_tmp16_ = _tmp15_;
927 	if (_tmp16_ == NULL) {
928 		ValaSemanticAnalyzer* _tmp17_;
929 		ValaSemanticAnalyzer* _tmp18_;
930 		ValaDataType* _tmp19_;
931 		ValaDataType* _tmp20_;
932 		ValaDataType* _tmp21_;
933 		_tmp17_ = vala_code_context_get_analyzer (context);
934 		_tmp18_ = _tmp17_;
935 		_tmp19_ = _tmp18_->int_type;
936 		_tmp20_ = vala_data_type_copy (_tmp19_);
937 		_tmp21_ = _tmp20_;
938 		vala_array_creation_expression_set_length_type (self, _tmp21_);
939 		_vala_code_node_unref0 (_tmp21_);
940 	} else {
941 		ValaDataType* _tmp22_;
942 		ValaDataType* _tmp23_;
943 		gboolean _tmp24_ = FALSE;
944 		ValaDataType* _tmp25_;
945 		ValaDataType* _tmp26_;
946 		_tmp22_ = vala_array_creation_expression_get_length_type (self);
947 		_tmp23_ = _tmp22_;
948 		vala_code_node_check ((ValaCodeNode*) _tmp23_, context);
949 		_tmp25_ = vala_array_creation_expression_get_length_type (self);
950 		_tmp26_ = _tmp25_;
951 		if (!VALA_IS_INTEGER_TYPE (_tmp26_)) {
952 			_tmp24_ = TRUE;
953 		} else {
954 			ValaDataType* _tmp27_;
955 			ValaDataType* _tmp28_;
956 			gboolean _tmp29_;
957 			gboolean _tmp30_;
958 			_tmp27_ = vala_array_creation_expression_get_length_type (self);
959 			_tmp28_ = _tmp27_;
960 			_tmp29_ = vala_data_type_get_nullable (_tmp28_);
961 			_tmp30_ = _tmp29_;
962 			_tmp24_ = _tmp30_;
963 		}
964 		if (_tmp24_) {
965 			ValaDataType* _tmp31_;
966 			ValaDataType* _tmp32_;
967 			ValaSourceReference* _tmp33_;
968 			ValaSourceReference* _tmp34_;
969 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
970 			_tmp31_ = vala_array_creation_expression_get_length_type (self);
971 			_tmp32_ = _tmp31_;
972 			_tmp33_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp32_);
973 			_tmp34_ = _tmp33_;
974 			vala_report_error (_tmp34_, "Expected integer type as length type of array");
975 		}
976 	}
977 	{
978 		ValaList* _e_list = NULL;
979 		ValaList* _tmp35_;
980 		ValaList* _tmp36_;
981 		gint _e_size = 0;
982 		ValaList* _tmp37_;
983 		gint _tmp38_;
984 		gint _tmp39_;
985 		gint _e_index = 0;
986 		_tmp35_ = sizes;
987 		_tmp36_ = _vala_iterable_ref0 (_tmp35_);
988 		_e_list = _tmp36_;
989 		_tmp37_ = _e_list;
990 		_tmp38_ = vala_collection_get_size ((ValaCollection*) _tmp37_);
991 		_tmp39_ = _tmp38_;
992 		_e_size = _tmp39_;
993 		_e_index = -1;
994 		while (TRUE) {
995 			gint _tmp40_;
996 			gint _tmp41_;
997 			ValaExpression* e = NULL;
998 			ValaList* _tmp42_;
999 			gpointer _tmp43_;
1000 			ValaExpression* _tmp44_;
1001 			_e_index = _e_index + 1;
1002 			_tmp40_ = _e_index;
1003 			_tmp41_ = _e_size;
1004 			if (!(_tmp40_ < _tmp41_)) {
1005 				break;
1006 			}
1007 			_tmp42_ = _e_list;
1008 			_tmp43_ = vala_list_get (_tmp42_, _e_index);
1009 			e = (ValaExpression*) _tmp43_;
1010 			_tmp44_ = e;
1011 			vala_code_node_check ((ValaCodeNode*) _tmp44_, context);
1012 			_vala_code_node_unref0 (e);
1013 		}
1014 		_vala_iterable_unref0 (_e_list);
1015 	}
1016 	_tmp45_ = g_direct_equal;
1017 	_tmp46_ = vala_array_list_new (VALA_TYPE_LITERAL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp45_);
1018 	calc_sizes = _tmp46_;
1019 	_tmp47_ = initlist;
1020 	if (_tmp47_ != NULL) {
1021 		ValaInitializerList* _tmp48_;
1022 		ValaDataType* _tmp49_;
1023 		ValaDataType* _tmp50_;
1024 		gint _tmp51_;
1025 		ValaSourceReference* _tmp52_;
1026 		ValaSourceReference* _tmp53_;
1027 		ValaArrayType* _tmp54_;
1028 		ValaArrayType* _tmp55_;
1029 		ValaInitializerList* _tmp56_;
1030 		ValaDataType* _tmp57_;
1031 		ValaDataType* _tmp58_;
1032 		ValaDataType* _tmp59_;
1033 		ValaDataType* _tmp60_;
1034 		ValaDataType* _tmp61_;
1035 		ValaDataType* _tmp62_;
1036 		ValaInitializerList* _tmp63_;
1037 		gint ret = 0;
1038 		ValaInitializerList* _tmp64_;
1039 		gint _tmp65_;
1040 		ValaArrayList* _tmp66_;
1041 		ValaArrayList* _tmp67_;
1042 		gint _tmp68_;
1043 		gint _tmp69_;
1044 		gint _tmp70_;
1045 		_tmp48_ = initlist;
1046 		_tmp49_ = vala_array_creation_expression_get_element_type (self);
1047 		_tmp50_ = _tmp49_;
1048 		_tmp51_ = self->priv->_rank;
1049 		_tmp52_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1050 		_tmp53_ = _tmp52_;
1051 		_tmp54_ = vala_array_type_new (_tmp50_, _tmp51_, _tmp53_);
1052 		_tmp55_ = _tmp54_;
1053 		vala_expression_set_target_type ((ValaExpression*) _tmp48_, (ValaDataType*) _tmp55_);
1054 		_vala_code_node_unref0 (_tmp55_);
1055 		_tmp56_ = initlist;
1056 		_tmp57_ = vala_expression_get_target_type ((ValaExpression*) _tmp56_);
1057 		_tmp58_ = _tmp57_;
1058 		_tmp59_ = vala_array_creation_expression_get_length_type (self);
1059 		_tmp60_ = _tmp59_;
1060 		_tmp61_ = vala_data_type_copy (_tmp60_);
1061 		_tmp62_ = _tmp61_;
1062 		vala_array_type_set_length_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp58_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), _tmp62_);
1063 		_vala_code_node_unref0 (_tmp62_);
1064 		_tmp63_ = initlist;
1065 		if (!vala_code_node_check ((ValaCodeNode*) _tmp63_, context)) {
1066 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1067 		}
1068 		_tmp64_ = initlist;
1069 		_tmp65_ = self->priv->_rank;
1070 		_tmp66_ = calc_sizes;
1071 		ret = vala_array_creation_expression_create_sizes_from_initializer_list (self, context, _tmp64_, _tmp65_, (ValaList*) _tmp66_);
1072 		if (ret == -1) {
1073 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1074 		}
1075 		_tmp67_ = calc_sizes;
1076 		_tmp68_ = vala_collection_get_size ((ValaCollection*) _tmp67_);
1077 		_tmp69_ = _tmp68_;
1078 		_tmp70_ = self->priv->_rank;
1079 		if (_tmp69_ != _tmp70_) {
1080 			ValaArrayType* actual_type = NULL;
1081 			ValaDataType* _tmp71_;
1082 			ValaDataType* _tmp72_;
1083 			ValaArrayList* _tmp73_;
1084 			gint _tmp74_;
1085 			gint _tmp75_;
1086 			ValaSourceReference* _tmp76_;
1087 			ValaSourceReference* _tmp77_;
1088 			ValaArrayType* _tmp78_;
1089 			ValaArrayType* _tmp79_;
1090 			ValaDataType* _tmp80_;
1091 			ValaDataType* _tmp81_;
1092 			ValaInitializerList* _tmp82_;
1093 			ValaSourceReference* _tmp83_;
1094 			ValaSourceReference* _tmp84_;
1095 			ValaDataType* _tmp85_;
1096 			ValaDataType* _tmp86_;
1097 			gchar* _tmp87_;
1098 			gchar* _tmp88_;
1099 			ValaArrayType* _tmp89_;
1100 			gchar* _tmp90_;
1101 			gchar* _tmp91_;
1102 			gchar* _tmp92_;
1103 			gchar* _tmp93_;
1104 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1105 			_tmp71_ = vala_array_creation_expression_get_element_type (self);
1106 			_tmp72_ = _tmp71_;
1107 			_tmp73_ = calc_sizes;
1108 			_tmp74_ = vala_collection_get_size ((ValaCollection*) _tmp73_);
1109 			_tmp75_ = _tmp74_;
1110 			_tmp76_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1111 			_tmp77_ = _tmp76_;
1112 			_tmp78_ = vala_array_type_new (_tmp72_, _tmp75_, _tmp77_);
1113 			actual_type = _tmp78_;
1114 			_tmp79_ = actual_type;
1115 			_tmp80_ = vala_array_creation_expression_get_length_type (self);
1116 			_tmp81_ = _tmp80_;
1117 			vala_array_type_set_length_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp79_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), _tmp81_);
1118 			_tmp82_ = initlist;
1119 			_tmp83_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp82_);
1120 			_tmp84_ = _tmp83_;
1121 			_tmp85_ = vala_expression_get_target_type ((ValaExpression*) self);
1122 			_tmp86_ = _tmp85_;
1123 			_tmp87_ = vala_code_node_to_string ((ValaCodeNode*) _tmp86_);
1124 			_tmp88_ = _tmp87_;
1125 			_tmp89_ = actual_type;
1126 			_tmp90_ = vala_code_node_to_string ((ValaCodeNode*) _tmp89_);
1127 			_tmp91_ = _tmp90_;
1128 			_tmp92_ = g_strdup_printf ("Expected initializer for `%s' but got `%s'", _tmp88_, _tmp91_);
1129 			_tmp93_ = _tmp92_;
1130 			vala_report_error (_tmp84_, _tmp93_);
1131 			_g_free0 (_tmp93_);
1132 			_g_free0 (_tmp91_);
1133 			_g_free0 (_tmp88_);
1134 			_vala_code_node_unref0 (actual_type);
1135 		}
1136 	}
1137 	_tmp94_ = sizes;
1138 	_tmp95_ = vala_collection_get_size ((ValaCollection*) _tmp94_);
1139 	_tmp96_ = _tmp95_;
1140 	if (_tmp96_ > 0) {
1141 		{
1142 			ValaList* _e_list = NULL;
1143 			ValaList* _tmp97_;
1144 			ValaList* _tmp98_;
1145 			gint _e_size = 0;
1146 			ValaList* _tmp99_;
1147 			gint _tmp100_;
1148 			gint _tmp101_;
1149 			gint _e_index = 0;
1150 			_tmp97_ = sizes;
1151 			_tmp98_ = _vala_iterable_ref0 (_tmp97_);
1152 			_e_list = _tmp98_;
1153 			_tmp99_ = _e_list;
1154 			_tmp100_ = vala_collection_get_size ((ValaCollection*) _tmp99_);
1155 			_tmp101_ = _tmp100_;
1156 			_e_size = _tmp101_;
1157 			_e_index = -1;
1158 			while (TRUE) {
1159 				gint _tmp102_;
1160 				gint _tmp103_;
1161 				ValaExpression* e = NULL;
1162 				ValaList* _tmp104_;
1163 				gpointer _tmp105_;
1164 				ValaExpression* _tmp106_;
1165 				ValaDataType* _tmp107_;
1166 				ValaDataType* _tmp108_;
1167 				_e_index = _e_index + 1;
1168 				_tmp102_ = _e_index;
1169 				_tmp103_ = _e_size;
1170 				if (!(_tmp102_ < _tmp103_)) {
1171 					break;
1172 				}
1173 				_tmp104_ = _e_list;
1174 				_tmp105_ = vala_list_get (_tmp104_, _e_index);
1175 				e = (ValaExpression*) _tmp105_;
1176 				_tmp106_ = e;
1177 				_tmp107_ = vala_expression_get_value_type (_tmp106_);
1178 				_tmp108_ = _tmp107_;
1179 				if (_tmp108_ == NULL) {
1180 					result = FALSE;
1181 					_vala_code_node_unref0 (e);
1182 					_vala_iterable_unref0 (_e_list);
1183 					_vala_iterable_unref0 (calc_sizes);
1184 					_vala_code_node_unref0 (initlist);
1185 					_vala_iterable_unref0 (sizes);
1186 					return result;
1187 				} else {
1188 					gboolean _tmp109_ = FALSE;
1189 					ValaExpression* _tmp110_;
1190 					ValaDataType* _tmp111_;
1191 					ValaDataType* _tmp112_;
1192 					_tmp110_ = e;
1193 					_tmp111_ = vala_expression_get_value_type (_tmp110_);
1194 					_tmp112_ = _tmp111_;
1195 					if (VALA_IS_INTEGER_TYPE (_tmp112_)) {
1196 						_tmp109_ = TRUE;
1197 					} else {
1198 						ValaExpression* _tmp113_;
1199 						ValaDataType* _tmp114_;
1200 						ValaDataType* _tmp115_;
1201 						_tmp113_ = e;
1202 						_tmp114_ = vala_expression_get_value_type (_tmp113_);
1203 						_tmp115_ = _tmp114_;
1204 						_tmp109_ = VALA_IS_ENUM_VALUE_TYPE (_tmp115_);
1205 					}
1206 					if (!_tmp109_) {
1207 						ValaExpression* _tmp116_;
1208 						ValaSourceReference* _tmp117_;
1209 						ValaSourceReference* _tmp118_;
1210 						vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1211 						_tmp116_ = e;
1212 						_tmp117_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp116_);
1213 						_tmp118_ = _tmp117_;
1214 						vala_report_error (_tmp118_, "Expression of integer type expected");
1215 					}
1216 				}
1217 				_vala_code_node_unref0 (e);
1218 			}
1219 			_vala_iterable_unref0 (_e_list);
1220 		}
1221 	} else {
1222 		ValaInitializerList* _tmp119_;
1223 		_tmp119_ = initlist;
1224 		if (_tmp119_ == NULL) {
1225 			ValaSourceReference* _tmp120_;
1226 			ValaSourceReference* _tmp121_;
1227 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1228 			_tmp120_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1229 			_tmp121_ = _tmp120_;
1230 			vala_report_error (_tmp121_, "internal error: initializer list expected");
1231 		} else {
1232 			{
1233 				ValaArrayList* _size_list = NULL;
1234 				ValaArrayList* _tmp122_;
1235 				ValaArrayList* _tmp123_;
1236 				gint _size_size = 0;
1237 				ValaArrayList* _tmp124_;
1238 				gint _tmp125_;
1239 				gint _tmp126_;
1240 				gint _size_index = 0;
1241 				_tmp122_ = calc_sizes;
1242 				_tmp123_ = _vala_iterable_ref0 (_tmp122_);
1243 				_size_list = _tmp123_;
1244 				_tmp124_ = _size_list;
1245 				_tmp125_ = vala_collection_get_size ((ValaCollection*) _tmp124_);
1246 				_tmp126_ = _tmp125_;
1247 				_size_size = _tmp126_;
1248 				_size_index = -1;
1249 				while (TRUE) {
1250 					gint _tmp127_;
1251 					gint _tmp128_;
1252 					ValaExpression* size = NULL;
1253 					ValaArrayList* _tmp129_;
1254 					gpointer _tmp130_;
1255 					ValaExpression* _tmp131_;
1256 					_size_index = _size_index + 1;
1257 					_tmp127_ = _size_index;
1258 					_tmp128_ = _size_size;
1259 					if (!(_tmp127_ < _tmp128_)) {
1260 						break;
1261 					}
1262 					_tmp129_ = _size_list;
1263 					_tmp130_ = vala_list_get ((ValaList*) _tmp129_, _size_index);
1264 					size = (ValaExpression*) ((ValaLiteral*) _tmp130_);
1265 					_tmp131_ = size;
1266 					vala_array_creation_expression_append_size (self, _tmp131_);
1267 					_vala_code_node_unref0 (size);
1268 				}
1269 				_vala_iterable_unref0 (_size_list);
1270 			}
1271 		}
1272 	}
1273 	_tmp132_ = vala_code_node_get_error ((ValaCodeNode*) self);
1274 	_tmp133_ = _tmp132_;
1275 	if (_tmp133_) {
1276 		result = FALSE;
1277 		_vala_iterable_unref0 (calc_sizes);
1278 		_vala_code_node_unref0 (initlist);
1279 		_vala_iterable_unref0 (sizes);
1280 		return result;
1281 	}
1282 	_tmp135_ = vala_array_creation_expression_get_initializer_list (self);
1283 	_tmp136_ = _tmp135_;
1284 	if (_tmp136_ != NULL) {
1285 		ValaInitializerList* _tmp137_;
1286 		ValaInitializerList* _tmp138_;
1287 		ValaDataType* _tmp139_;
1288 		ValaDataType* _tmp140_;
1289 		_tmp137_ = vala_array_creation_expression_get_initializer_list (self);
1290 		_tmp138_ = _tmp137_;
1291 		_tmp139_ = vala_expression_get_value_type ((ValaExpression*) _tmp138_);
1292 		_tmp140_ = _tmp139_;
1293 		_tmp134_ = _tmp140_ == NULL;
1294 	} else {
1295 		_tmp134_ = FALSE;
1296 	}
1297 	if (_tmp134_) {
1298 		result = FALSE;
1299 		_vala_iterable_unref0 (calc_sizes);
1300 		_vala_code_node_unref0 (initlist);
1301 		_vala_iterable_unref0 (sizes);
1302 		return result;
1303 	}
1304 	_tmp141_ = vala_array_creation_expression_get_element_type (self);
1305 	_tmp142_ = _tmp141_;
1306 	if (_tmp142_ == NULL) {
1307 		ValaSourceReference* _tmp143_;
1308 		ValaSourceReference* _tmp144_;
1309 		vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1310 		_tmp143_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1311 		_tmp144_ = _tmp143_;
1312 		vala_report_error (_tmp144_, "Cannot determine the element type of the created array");
1313 		result = FALSE;
1314 		_vala_iterable_unref0 (calc_sizes);
1315 		_vala_code_node_unref0 (initlist);
1316 		_vala_iterable_unref0 (sizes);
1317 		return result;
1318 	}
1319 	_tmp145_ = vala_array_creation_expression_get_element_type (self);
1320 	_tmp146_ = _tmp145_;
1321 	_tmp147_ = self->priv->_rank;
1322 	_tmp148_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1323 	_tmp149_ = _tmp148_;
1324 	_tmp150_ = vala_array_type_new (_tmp146_, _tmp147_, _tmp149_);
1325 	_tmp151_ = _tmp150_;
1326 	vala_expression_set_value_type ((ValaExpression*) self, (ValaDataType*) _tmp151_);
1327 	_vala_code_node_unref0 (_tmp151_);
1328 	_tmp152_ = vala_expression_get_value_type ((ValaExpression*) self);
1329 	_tmp153_ = _tmp152_;
1330 	_tmp154_ = vala_array_creation_expression_get_length_type (self);
1331 	_tmp155_ = _tmp154_;
1332 	_tmp156_ = vala_data_type_copy (_tmp155_);
1333 	_tmp157_ = _tmp156_;
1334 	vala_array_type_set_length_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp153_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), _tmp157_);
1335 	_vala_code_node_unref0 (_tmp157_);
1336 	_tmp158_ = vala_expression_get_formal_target_type ((ValaExpression*) self);
1337 	_tmp159_ = _tmp158_;
1338 	if (VALA_IS_ARRAY_TYPE (_tmp159_)) {
1339 		ValaDataType* _tmp160_;
1340 		ValaDataType* _tmp161_;
1341 		ValaDataType* _tmp162_;
1342 		ValaDataType* _tmp163_;
1343 		gboolean _tmp164_;
1344 		gboolean _tmp165_;
1345 		ValaDataType* _tmp166_;
1346 		ValaDataType* _tmp167_;
1347 		ValaDataType* _tmp168_;
1348 		ValaDataType* _tmp169_;
1349 		gboolean _tmp170_;
1350 		gboolean _tmp171_;
1351 		_tmp160_ = vala_expression_get_value_type ((ValaExpression*) self);
1352 		_tmp161_ = _tmp160_;
1353 		_tmp162_ = vala_expression_get_formal_target_type ((ValaExpression*) self);
1354 		_tmp163_ = _tmp162_;
1355 		_tmp164_ = vala_array_type_get_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp163_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
1356 		_tmp165_ = _tmp164_;
1357 		vala_array_type_set_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp161_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), _tmp165_);
1358 		_tmp166_ = vala_expression_get_value_type ((ValaExpression*) self);
1359 		_tmp167_ = _tmp166_;
1360 		_tmp168_ = vala_expression_get_formal_target_type ((ValaExpression*) self);
1361 		_tmp169_ = _tmp168_;
1362 		_tmp170_ = vala_array_type_get_inline_allocated (G_TYPE_CHECK_INSTANCE_CAST (_tmp169_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
1363 		_tmp171_ = _tmp170_;
1364 		vala_array_type_set_inline_allocated (G_TYPE_CHECK_INSTANCE_CAST (_tmp167_, VALA_TYPE_ARRAY_TYPE, ValaArrayType), _tmp171_);
1365 	}
1366 	_tmp172_ = vala_expression_get_value_type ((ValaExpression*) self);
1367 	_tmp173_ = _tmp172_;
1368 	vala_data_type_set_value_owned (_tmp173_, TRUE);
1369 	_tmp174_ = vala_expression_get_value_type ((ValaExpression*) self);
1370 	_tmp175_ = _tmp174_;
1371 	if (!vala_code_node_check ((ValaCodeNode*) _tmp175_, context)) {
1372 		result = FALSE;
1373 		_vala_iterable_unref0 (calc_sizes);
1374 		_vala_code_node_unref0 (initlist);
1375 		_vala_iterable_unref0 (sizes);
1376 		return result;
1377 	}
1378 	_tmp176_ = vala_code_node_get_error ((ValaCodeNode*) self);
1379 	_tmp177_ = _tmp176_;
1380 	result = !_tmp177_;
1381 	_vala_iterable_unref0 (calc_sizes);
1382 	_vala_code_node_unref0 (initlist);
1383 	_vala_iterable_unref0 (sizes);
1384 	return result;
1385 }
1386 
1387 static void
vala_array_creation_expression_real_emit(ValaCodeNode * base,ValaCodeGenerator * codegen)1388 vala_array_creation_expression_real_emit (ValaCodeNode* base,
1389                                           ValaCodeGenerator* codegen)
1390 {
1391 	ValaArrayCreationExpression * self;
1392 	ValaInitializerList* _tmp10_;
1393 	ValaInitializerList* _tmp11_;
1394 	self = (ValaArrayCreationExpression*) base;
1395 	g_return_if_fail (codegen != NULL);
1396 	{
1397 		ValaList* _e_list = NULL;
1398 		ValaList* _tmp0_;
1399 		ValaList* _tmp1_;
1400 		gint _e_size = 0;
1401 		ValaList* _tmp2_;
1402 		gint _tmp3_;
1403 		gint _tmp4_;
1404 		gint _e_index = 0;
1405 		_tmp0_ = self->priv->sizes;
1406 		_tmp1_ = _vala_iterable_ref0 (_tmp0_);
1407 		_e_list = _tmp1_;
1408 		_tmp2_ = _e_list;
1409 		_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
1410 		_tmp4_ = _tmp3_;
1411 		_e_size = _tmp4_;
1412 		_e_index = -1;
1413 		while (TRUE) {
1414 			gint _tmp5_;
1415 			gint _tmp6_;
1416 			ValaExpression* e = NULL;
1417 			ValaList* _tmp7_;
1418 			gpointer _tmp8_;
1419 			ValaExpression* _tmp9_;
1420 			_e_index = _e_index + 1;
1421 			_tmp5_ = _e_index;
1422 			_tmp6_ = _e_size;
1423 			if (!(_tmp5_ < _tmp6_)) {
1424 				break;
1425 			}
1426 			_tmp7_ = _e_list;
1427 			_tmp8_ = vala_list_get (_tmp7_, _e_index);
1428 			e = (ValaExpression*) _tmp8_;
1429 			_tmp9_ = e;
1430 			vala_code_node_emit ((ValaCodeNode*) _tmp9_, codegen);
1431 			_vala_code_node_unref0 (e);
1432 		}
1433 		_vala_iterable_unref0 (_e_list);
1434 	}
1435 	_tmp10_ = vala_array_creation_expression_get_initializer_list (self);
1436 	_tmp11_ = _tmp10_;
1437 	if (_tmp11_ != NULL) {
1438 		ValaInitializerList* _tmp12_;
1439 		ValaInitializerList* _tmp13_;
1440 		_tmp12_ = vala_array_creation_expression_get_initializer_list (self);
1441 		_tmp13_ = _tmp12_;
1442 		vala_code_node_emit ((ValaCodeNode*) _tmp13_, codegen);
1443 	}
1444 	vala_code_visitor_visit_array_creation_expression ((ValaCodeVisitor*) codegen, self);
1445 	vala_code_visitor_visit_expression ((ValaCodeVisitor*) codegen, (ValaExpression*) self);
1446 }
1447 
1448 static void
vala_array_creation_expression_real_get_used_variables(ValaCodeNode * base,ValaCollection * collection)1449 vala_array_creation_expression_real_get_used_variables (ValaCodeNode* base,
1450                                                         ValaCollection* collection)
1451 {
1452 	ValaArrayCreationExpression * self;
1453 	ValaInitializerList* _tmp10_;
1454 	ValaInitializerList* _tmp11_;
1455 	self = (ValaArrayCreationExpression*) base;
1456 	g_return_if_fail (collection != NULL);
1457 	{
1458 		ValaList* _e_list = NULL;
1459 		ValaList* _tmp0_;
1460 		ValaList* _tmp1_;
1461 		gint _e_size = 0;
1462 		ValaList* _tmp2_;
1463 		gint _tmp3_;
1464 		gint _tmp4_;
1465 		gint _e_index = 0;
1466 		_tmp0_ = self->priv->sizes;
1467 		_tmp1_ = _vala_iterable_ref0 (_tmp0_);
1468 		_e_list = _tmp1_;
1469 		_tmp2_ = _e_list;
1470 		_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
1471 		_tmp4_ = _tmp3_;
1472 		_e_size = _tmp4_;
1473 		_e_index = -1;
1474 		while (TRUE) {
1475 			gint _tmp5_;
1476 			gint _tmp6_;
1477 			ValaExpression* e = NULL;
1478 			ValaList* _tmp7_;
1479 			gpointer _tmp8_;
1480 			ValaExpression* _tmp9_;
1481 			_e_index = _e_index + 1;
1482 			_tmp5_ = _e_index;
1483 			_tmp6_ = _e_size;
1484 			if (!(_tmp5_ < _tmp6_)) {
1485 				break;
1486 			}
1487 			_tmp7_ = _e_list;
1488 			_tmp8_ = vala_list_get (_tmp7_, _e_index);
1489 			e = (ValaExpression*) _tmp8_;
1490 			_tmp9_ = e;
1491 			vala_code_node_get_used_variables ((ValaCodeNode*) _tmp9_, collection);
1492 			_vala_code_node_unref0 (e);
1493 		}
1494 		_vala_iterable_unref0 (_e_list);
1495 	}
1496 	_tmp10_ = vala_array_creation_expression_get_initializer_list (self);
1497 	_tmp11_ = _tmp10_;
1498 	if (_tmp11_ != NULL) {
1499 		ValaInitializerList* _tmp12_;
1500 		ValaInitializerList* _tmp13_;
1501 		_tmp12_ = vala_array_creation_expression_get_initializer_list (self);
1502 		_tmp13_ = _tmp12_;
1503 		vala_code_node_get_used_variables ((ValaCodeNode*) _tmp13_, collection);
1504 	}
1505 }
1506 
1507 static void
vala_array_creation_expression_class_init(ValaArrayCreationExpressionClass * klass,gpointer klass_data)1508 vala_array_creation_expression_class_init (ValaArrayCreationExpressionClass * klass,
1509                                            gpointer klass_data)
1510 {
1511 	vala_array_creation_expression_parent_class = g_type_class_peek_parent (klass);
1512 	((ValaCodeNodeClass *) klass)->finalize = vala_array_creation_expression_finalize;
1513 	g_type_class_adjust_private_offset (klass, &ValaArrayCreationExpression_private_offset);
1514 	((ValaCodeNodeClass *) klass)->accept_children = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_array_creation_expression_real_accept_children;
1515 	((ValaCodeNodeClass *) klass)->accept = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_array_creation_expression_real_accept;
1516 	((ValaExpressionClass *) klass)->is_pure = (gboolean (*) (ValaExpression*)) vala_array_creation_expression_real_is_pure;
1517 	((ValaExpressionClass *) klass)->is_accessible = (gboolean (*) (ValaExpression*, ValaSymbol*)) vala_array_creation_expression_real_is_accessible;
1518 	((ValaCodeNodeClass *) klass)->to_string = (gchar* (*) (ValaCodeNode*)) vala_array_creation_expression_real_to_string;
1519 	((ValaCodeNodeClass *) klass)->replace_expression = (void (*) (ValaCodeNode*, ValaExpression*, ValaExpression*)) vala_array_creation_expression_real_replace_expression;
1520 	((ValaCodeNodeClass *) klass)->replace_type = (void (*) (ValaCodeNode*, ValaDataType*, ValaDataType*)) vala_array_creation_expression_real_replace_type;
1521 	((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_array_creation_expression_real_check;
1522 	((ValaCodeNodeClass *) klass)->emit = (void (*) (ValaCodeNode*, ValaCodeGenerator*)) vala_array_creation_expression_real_emit;
1523 	((ValaCodeNodeClass *) klass)->get_used_variables = (void (*) (ValaCodeNode*, ValaCollection*)) vala_array_creation_expression_real_get_used_variables;
1524 }
1525 
1526 static void
vala_array_creation_expression_instance_init(ValaArrayCreationExpression * self,gpointer klass)1527 vala_array_creation_expression_instance_init (ValaArrayCreationExpression * self,
1528                                               gpointer klass)
1529 {
1530 	GEqualFunc _tmp0_;
1531 	ValaArrayList* _tmp1_;
1532 	self->priv = vala_array_creation_expression_get_instance_private (self);
1533 	_tmp0_ = g_direct_equal;
1534 	_tmp1_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
1535 	self->priv->sizes = (ValaList*) _tmp1_;
1536 }
1537 
1538 static void
vala_array_creation_expression_finalize(ValaCodeNode * obj)1539 vala_array_creation_expression_finalize (ValaCodeNode * obj)
1540 {
1541 	ValaArrayCreationExpression * self;
1542 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_ARRAY_CREATION_EXPRESSION, ValaArrayCreationExpression);
1543 	_vala_iterable_unref0 (self->priv->sizes);
1544 	_vala_code_node_unref0 (self->priv->_element_type);
1545 	_vala_code_node_unref0 (self->priv->_length_type);
1546 	_vala_code_node_unref0 (self->priv->_initializer_list);
1547 	VALA_CODE_NODE_CLASS (vala_array_creation_expression_parent_class)->finalize (obj);
1548 }
1549 
1550 /**
1551  * Represents an array creation expression.
1552  *
1553  * {{{ new int[] { 1, 2, 3 } }}}
1554  */
1555 static GType
vala_array_creation_expression_get_type_once(void)1556 vala_array_creation_expression_get_type_once (void)
1557 {
1558 	static const GTypeInfo g_define_type_info = { sizeof (ValaArrayCreationExpressionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_array_creation_expression_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaArrayCreationExpression), 0, (GInstanceInitFunc) vala_array_creation_expression_instance_init, NULL };
1559 	GType vala_array_creation_expression_type_id;
1560 	vala_array_creation_expression_type_id = g_type_register_static (VALA_TYPE_EXPRESSION, "ValaArrayCreationExpression", &g_define_type_info, 0);
1561 	ValaArrayCreationExpression_private_offset = g_type_add_instance_private (vala_array_creation_expression_type_id, sizeof (ValaArrayCreationExpressionPrivate));
1562 	return vala_array_creation_expression_type_id;
1563 }
1564 
1565 GType
vala_array_creation_expression_get_type(void)1566 vala_array_creation_expression_get_type (void)
1567 {
1568 	static volatile gsize vala_array_creation_expression_type_id__volatile = 0;
1569 	if (g_once_init_enter (&vala_array_creation_expression_type_id__volatile)) {
1570 		GType vala_array_creation_expression_type_id;
1571 		vala_array_creation_expression_type_id = vala_array_creation_expression_get_type_once ();
1572 		g_once_init_leave (&vala_array_creation_expression_type_id__volatile, vala_array_creation_expression_type_id);
1573 	}
1574 	return vala_array_creation_expression_type_id__volatile;
1575 }
1576 
1577