1 /* valaunresolvedtype.c generated by valac, the Vala compiler
2  * generated from valaunresolvedtype.vala, do not modify */
3 
4 /* valaunresolvedtype.vala
5  *
6  * Copyright (C) 2006-2008  Jürg Billeter, Raffaele Sandrini
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12 
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17 
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
21  *
22  * Author:
23  * 	Jürg Billeter <j@bitron.ch>
24  *	Raffaele Sandrini <raffaele@sandrini.ch>
25  */
26 
27 #include "vala.h"
28 #include <stdlib.h>
29 #include <string.h>
30 #include <glib.h>
31 #include <valagee.h>
32 #include <glib-object.h>
33 
34 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
35 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
36 #define _g_free0(var) (var = (g_free (var), NULL))
37 
38 struct _ValaUnresolvedTypePrivate {
39 	ValaUnresolvedSymbol* _unresolved_symbol;
40 };
41 
42 static gint ValaUnresolvedType_private_offset;
43 static gpointer vala_unresolved_type_parent_class = NULL;
44 
45 static ValaDataType* vala_unresolved_type_real_copy (ValaDataType* base);
46 static gchar* vala_unresolved_type_real_to_qualified_string (ValaDataType* base,
47                                                       ValaScope* scope);
48 static gboolean vala_unresolved_type_real_is_disposable (ValaDataType* base);
49 static void vala_unresolved_type_finalize (ValaCodeNode * obj);
50 static GType vala_unresolved_type_get_type_once (void);
51 
52 static inline gpointer
vala_unresolved_type_get_instance_private(ValaUnresolvedType * self)53 vala_unresolved_type_get_instance_private (ValaUnresolvedType* self)
54 {
55 	return G_STRUCT_MEMBER_P (self, ValaUnresolvedType_private_offset);
56 }
57 
58 ValaUnresolvedSymbol*
vala_unresolved_type_get_unresolved_symbol(ValaUnresolvedType * self)59 vala_unresolved_type_get_unresolved_symbol (ValaUnresolvedType* self)
60 {
61 	ValaUnresolvedSymbol* result;
62 	ValaUnresolvedSymbol* _tmp0_;
63 	g_return_val_if_fail (self != NULL, NULL);
64 	_tmp0_ = self->priv->_unresolved_symbol;
65 	result = _tmp0_;
66 	return result;
67 }
68 
69 static gpointer
_vala_code_node_ref0(gpointer self)70 _vala_code_node_ref0 (gpointer self)
71 {
72 	return self ? vala_code_node_ref (self) : NULL;
73 }
74 
75 void
vala_unresolved_type_set_unresolved_symbol(ValaUnresolvedType * self,ValaUnresolvedSymbol * value)76 vala_unresolved_type_set_unresolved_symbol (ValaUnresolvedType* self,
77                                             ValaUnresolvedSymbol* value)
78 {
79 	ValaUnresolvedSymbol* _tmp0_;
80 	g_return_if_fail (self != NULL);
81 	_tmp0_ = _vala_code_node_ref0 (value);
82 	_vala_code_node_unref0 (self->priv->_unresolved_symbol);
83 	self->priv->_unresolved_symbol = _tmp0_;
84 }
85 
86 ValaUnresolvedType*
vala_unresolved_type_construct(GType object_type)87 vala_unresolved_type_construct (GType object_type)
88 {
89 	ValaUnresolvedType* self = NULL;
90 	self = (ValaUnresolvedType*) vala_data_type_construct (object_type);
91 	return self;
92 }
93 
94 ValaUnresolvedType*
vala_unresolved_type_new(void)95 vala_unresolved_type_new (void)
96 {
97 	return vala_unresolved_type_construct (VALA_TYPE_UNRESOLVED_TYPE);
98 }
99 
100 /**
101  * Creates a new type reference.
102  *
103  * @param symbol    unresolved type symbol
104  * @param source    reference to source code
105  * @return          newly created type reference
106  */
107 ValaUnresolvedType*
vala_unresolved_type_construct_from_symbol(GType object_type,ValaUnresolvedSymbol * symbol,ValaSourceReference * source)108 vala_unresolved_type_construct_from_symbol (GType object_type,
109                                             ValaUnresolvedSymbol* symbol,
110                                             ValaSourceReference* source)
111 {
112 	ValaUnresolvedType* self = NULL;
113 	g_return_val_if_fail (symbol != NULL, NULL);
114 	self = (ValaUnresolvedType*) vala_data_type_construct (object_type);
115 	vala_unresolved_type_set_unresolved_symbol (self, symbol);
116 	vala_code_node_set_source_reference ((ValaCodeNode*) self, source);
117 	return self;
118 }
119 
120 ValaUnresolvedType*
vala_unresolved_type_new_from_symbol(ValaUnresolvedSymbol * symbol,ValaSourceReference * source)121 vala_unresolved_type_new_from_symbol (ValaUnresolvedSymbol* symbol,
122                                       ValaSourceReference* source)
123 {
124 	return vala_unresolved_type_construct_from_symbol (VALA_TYPE_UNRESOLVED_TYPE, symbol, source);
125 }
126 
127 /**
128  * Creates a new type reference from a code expression.
129  *
130  * @param expr   member access expression
131  * @return       newly created type reference
132  */
133 static gpointer
_vala_iterable_ref0(gpointer self)134 _vala_iterable_ref0 (gpointer self)
135 {
136 	return self ? vala_iterable_ref (self) : NULL;
137 }
138 
139 ValaUnresolvedType*
vala_unresolved_type_new_from_expression(ValaExpression * expr)140 vala_unresolved_type_new_from_expression (ValaExpression* expr)
141 {
142 	ValaUnresolvedSymbol* sym = NULL;
143 	ValaUnresolvedSymbol* _tmp0_;
144 	ValaUnresolvedSymbol* _tmp1_;
145 	ValaUnresolvedType* result = NULL;
146 	g_return_val_if_fail (expr != NULL, NULL);
147 	_tmp0_ = vala_unresolved_symbol_new_from_expression (expr);
148 	sym = _tmp0_;
149 	_tmp1_ = sym;
150 	if (_tmp1_ != NULL) {
151 		ValaUnresolvedType* type_ref = NULL;
152 		ValaUnresolvedSymbol* _tmp2_;
153 		ValaSourceReference* _tmp3_;
154 		ValaSourceReference* _tmp4_;
155 		ValaUnresolvedType* _tmp5_;
156 		ValaUnresolvedType* _tmp6_;
157 		ValaMemberAccess* ma = NULL;
158 		ValaMemberAccess* _tmp7_;
159 		_tmp2_ = sym;
160 		_tmp3_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
161 		_tmp4_ = _tmp3_;
162 		_tmp5_ = vala_unresolved_type_new_from_symbol (_tmp2_, _tmp4_);
163 		type_ref = _tmp5_;
164 		_tmp6_ = type_ref;
165 		vala_data_type_set_value_owned ((ValaDataType*) _tmp6_, TRUE);
166 		_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
167 		ma = _tmp7_;
168 		{
169 			ValaList* _arg_list = NULL;
170 			ValaMemberAccess* _tmp8_;
171 			ValaList* _tmp9_;
172 			ValaList* _tmp10_;
173 			gint _arg_size = 0;
174 			ValaList* _tmp11_;
175 			gint _tmp12_;
176 			gint _tmp13_;
177 			gint _arg_index = 0;
178 			_tmp8_ = ma;
179 			_tmp9_ = vala_member_access_get_type_arguments (_tmp8_);
180 			_tmp10_ = _vala_iterable_ref0 (_tmp9_);
181 			_arg_list = _tmp10_;
182 			_tmp11_ = _arg_list;
183 			_tmp12_ = vala_collection_get_size ((ValaCollection*) _tmp11_);
184 			_tmp13_ = _tmp12_;
185 			_arg_size = _tmp13_;
186 			_arg_index = -1;
187 			while (TRUE) {
188 				gint _tmp14_;
189 				gint _tmp15_;
190 				ValaDataType* arg = NULL;
191 				ValaList* _tmp16_;
192 				gpointer _tmp17_;
193 				ValaUnresolvedType* _tmp18_;
194 				ValaDataType* _tmp19_;
195 				_arg_index = _arg_index + 1;
196 				_tmp14_ = _arg_index;
197 				_tmp15_ = _arg_size;
198 				if (!(_tmp14_ < _tmp15_)) {
199 					break;
200 				}
201 				_tmp16_ = _arg_list;
202 				_tmp17_ = vala_list_get (_tmp16_, _arg_index);
203 				arg = (ValaDataType*) _tmp17_;
204 				_tmp18_ = type_ref;
205 				_tmp19_ = arg;
206 				vala_data_type_add_type_argument ((ValaDataType*) _tmp18_, _tmp19_);
207 				_vala_code_node_unref0 (arg);
208 			}
209 			_vala_iterable_unref0 (_arg_list);
210 		}
211 		result = type_ref;
212 		_vala_code_node_unref0 (ma);
213 		_vala_code_node_unref0 (sym);
214 		return result;
215 	}
216 	result = NULL;
217 	_vala_code_node_unref0 (sym);
218 	return result;
219 }
220 
221 static ValaDataType*
vala_unresolved_type_real_copy(ValaDataType * base)222 vala_unresolved_type_real_copy (ValaDataType* base)
223 {
224 	ValaUnresolvedType * self;
225 	ValaUnresolvedType* _result_ = NULL;
226 	ValaUnresolvedType* _tmp0_;
227 	ValaUnresolvedType* _tmp1_;
228 	ValaSourceReference* _tmp2_;
229 	ValaSourceReference* _tmp3_;
230 	ValaUnresolvedType* _tmp4_;
231 	gboolean _tmp5_;
232 	gboolean _tmp6_;
233 	ValaUnresolvedType* _tmp7_;
234 	gboolean _tmp8_;
235 	gboolean _tmp9_;
236 	ValaUnresolvedType* _tmp10_;
237 	gboolean _tmp11_;
238 	gboolean _tmp12_;
239 	ValaUnresolvedType* _tmp13_;
240 	ValaUnresolvedSymbol* _tmp14_;
241 	ValaUnresolvedSymbol* _tmp15_;
242 	ValaUnresolvedSymbol* _tmp16_;
243 	ValaDataType* result = NULL;
244 	self = (ValaUnresolvedType*) base;
245 	_tmp0_ = vala_unresolved_type_new ();
246 	_result_ = _tmp0_;
247 	_tmp1_ = _result_;
248 	_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
249 	_tmp3_ = _tmp2_;
250 	vala_code_node_set_source_reference ((ValaCodeNode*) _tmp1_, _tmp3_);
251 	_tmp4_ = _result_;
252 	_tmp5_ = vala_data_type_get_value_owned ((ValaDataType*) self);
253 	_tmp6_ = _tmp5_;
254 	vala_data_type_set_value_owned ((ValaDataType*) _tmp4_, _tmp6_);
255 	_tmp7_ = _result_;
256 	_tmp8_ = vala_data_type_get_nullable ((ValaDataType*) self);
257 	_tmp9_ = _tmp8_;
258 	vala_data_type_set_nullable ((ValaDataType*) _tmp7_, _tmp9_);
259 	_tmp10_ = _result_;
260 	_tmp11_ = vala_data_type_get_is_dynamic ((ValaDataType*) self);
261 	_tmp12_ = _tmp11_;
262 	vala_data_type_set_is_dynamic ((ValaDataType*) _tmp10_, _tmp12_);
263 	_tmp13_ = _result_;
264 	_tmp14_ = self->priv->_unresolved_symbol;
265 	_tmp15_ = vala_unresolved_symbol_copy (_tmp14_);
266 	_tmp16_ = _tmp15_;
267 	vala_unresolved_type_set_unresolved_symbol (_tmp13_, _tmp16_);
268 	_vala_code_node_unref0 (_tmp16_);
269 	{
270 		ValaList* _arg_list = NULL;
271 		ValaList* _tmp17_;
272 		ValaList* _tmp18_;
273 		gint _arg_size = 0;
274 		ValaList* _tmp19_;
275 		gint _tmp20_;
276 		gint _tmp21_;
277 		gint _arg_index = 0;
278 		_tmp17_ = vala_data_type_get_type_arguments ((ValaDataType*) self);
279 		_tmp18_ = _vala_iterable_ref0 (_tmp17_);
280 		_arg_list = _tmp18_;
281 		_tmp19_ = _arg_list;
282 		_tmp20_ = vala_collection_get_size ((ValaCollection*) _tmp19_);
283 		_tmp21_ = _tmp20_;
284 		_arg_size = _tmp21_;
285 		_arg_index = -1;
286 		while (TRUE) {
287 			gint _tmp22_;
288 			gint _tmp23_;
289 			ValaDataType* arg = NULL;
290 			ValaList* _tmp24_;
291 			gpointer _tmp25_;
292 			ValaUnresolvedType* _tmp26_;
293 			ValaDataType* _tmp27_;
294 			ValaDataType* _tmp28_;
295 			ValaDataType* _tmp29_;
296 			_arg_index = _arg_index + 1;
297 			_tmp22_ = _arg_index;
298 			_tmp23_ = _arg_size;
299 			if (!(_tmp22_ < _tmp23_)) {
300 				break;
301 			}
302 			_tmp24_ = _arg_list;
303 			_tmp25_ = vala_list_get (_tmp24_, _arg_index);
304 			arg = (ValaDataType*) _tmp25_;
305 			_tmp26_ = _result_;
306 			_tmp27_ = arg;
307 			_tmp28_ = vala_data_type_copy (_tmp27_);
308 			_tmp29_ = _tmp28_;
309 			vala_data_type_add_type_argument ((ValaDataType*) _tmp26_, _tmp29_);
310 			_vala_code_node_unref0 (_tmp29_);
311 			_vala_code_node_unref0 (arg);
312 		}
313 		_vala_iterable_unref0 (_arg_list);
314 	}
315 	result = (ValaDataType*) _result_;
316 	return result;
317 }
318 
319 static gchar*
vala_unresolved_type_real_to_qualified_string(ValaDataType * base,ValaScope * scope)320 vala_unresolved_type_real_to_qualified_string (ValaDataType* base,
321                                                ValaScope* scope)
322 {
323 	ValaUnresolvedType * self;
324 	gchar* s = NULL;
325 	ValaUnresolvedSymbol* _tmp0_;
326 	gchar* _tmp1_;
327 	ValaList* type_args = NULL;
328 	ValaList* _tmp2_;
329 	ValaList* _tmp3_;
330 	ValaList* _tmp4_;
331 	gint _tmp5_;
332 	gint _tmp6_;
333 	gboolean _tmp30_;
334 	gboolean _tmp31_;
335 	gchar* result = NULL;
336 	self = (ValaUnresolvedType*) base;
337 	_tmp0_ = self->priv->_unresolved_symbol;
338 	_tmp1_ = vala_code_node_to_string ((ValaCodeNode*) _tmp0_);
339 	s = _tmp1_;
340 	_tmp2_ = vala_data_type_get_type_arguments ((ValaDataType*) self);
341 	_tmp3_ = _vala_iterable_ref0 (_tmp2_);
342 	type_args = _tmp3_;
343 	_tmp4_ = type_args;
344 	_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
345 	_tmp6_ = _tmp5_;
346 	if (_tmp6_ > 0) {
347 		const gchar* _tmp7_;
348 		gchar* _tmp8_;
349 		gboolean first = FALSE;
350 		const gchar* _tmp28_;
351 		gchar* _tmp29_;
352 		_tmp7_ = s;
353 		_tmp8_ = g_strconcat (_tmp7_, "<", NULL);
354 		_g_free0 (s);
355 		s = _tmp8_;
356 		first = TRUE;
357 		{
358 			ValaList* _type_arg_list = NULL;
359 			ValaList* _tmp9_;
360 			ValaList* _tmp10_;
361 			gint _type_arg_size = 0;
362 			ValaList* _tmp11_;
363 			gint _tmp12_;
364 			gint _tmp13_;
365 			gint _type_arg_index = 0;
366 			_tmp9_ = type_args;
367 			_tmp10_ = _vala_iterable_ref0 (_tmp9_);
368 			_type_arg_list = _tmp10_;
369 			_tmp11_ = _type_arg_list;
370 			_tmp12_ = vala_collection_get_size ((ValaCollection*) _tmp11_);
371 			_tmp13_ = _tmp12_;
372 			_type_arg_size = _tmp13_;
373 			_type_arg_index = -1;
374 			while (TRUE) {
375 				gint _tmp14_;
376 				gint _tmp15_;
377 				ValaDataType* type_arg = NULL;
378 				ValaList* _tmp16_;
379 				gpointer _tmp17_;
380 				ValaDataType* _tmp20_;
381 				const gchar* _tmp23_;
382 				ValaDataType* _tmp24_;
383 				gchar* _tmp25_;
384 				gchar* _tmp26_;
385 				gchar* _tmp27_;
386 				_type_arg_index = _type_arg_index + 1;
387 				_tmp14_ = _type_arg_index;
388 				_tmp15_ = _type_arg_size;
389 				if (!(_tmp14_ < _tmp15_)) {
390 					break;
391 				}
392 				_tmp16_ = _type_arg_list;
393 				_tmp17_ = vala_list_get (_tmp16_, _type_arg_index);
394 				type_arg = (ValaDataType*) _tmp17_;
395 				if (!first) {
396 					const gchar* _tmp18_;
397 					gchar* _tmp19_;
398 					_tmp18_ = s;
399 					_tmp19_ = g_strconcat (_tmp18_, ",", NULL);
400 					_g_free0 (s);
401 					s = _tmp19_;
402 				} else {
403 					first = FALSE;
404 				}
405 				_tmp20_ = type_arg;
406 				if (vala_data_type_is_weak (_tmp20_)) {
407 					const gchar* _tmp21_;
408 					gchar* _tmp22_;
409 					_tmp21_ = s;
410 					_tmp22_ = g_strconcat (_tmp21_, "weak ", NULL);
411 					_g_free0 (s);
412 					s = _tmp22_;
413 				}
414 				_tmp23_ = s;
415 				_tmp24_ = type_arg;
416 				_tmp25_ = vala_data_type_to_qualified_string (_tmp24_, scope);
417 				_tmp26_ = _tmp25_;
418 				_tmp27_ = g_strconcat (_tmp23_, _tmp26_, NULL);
419 				_g_free0 (s);
420 				s = _tmp27_;
421 				_g_free0 (_tmp26_);
422 				_vala_code_node_unref0 (type_arg);
423 			}
424 			_vala_iterable_unref0 (_type_arg_list);
425 		}
426 		_tmp28_ = s;
427 		_tmp29_ = g_strconcat (_tmp28_, ">", NULL);
428 		_g_free0 (s);
429 		s = _tmp29_;
430 	}
431 	_tmp30_ = vala_data_type_get_nullable ((ValaDataType*) self);
432 	_tmp31_ = _tmp30_;
433 	if (_tmp31_) {
434 		const gchar* _tmp32_;
435 		gchar* _tmp33_;
436 		_tmp32_ = s;
437 		_tmp33_ = g_strconcat (_tmp32_, "?", NULL);
438 		_g_free0 (s);
439 		s = _tmp33_;
440 	}
441 	result = s;
442 	_vala_iterable_unref0 (type_args);
443 	return result;
444 }
445 
446 static gboolean
vala_unresolved_type_real_is_disposable(ValaDataType * base)447 vala_unresolved_type_real_is_disposable (ValaDataType* base)
448 {
449 	ValaUnresolvedType * self;
450 	gboolean _tmp0_;
451 	gboolean _tmp1_;
452 	gboolean result = FALSE;
453 	self = (ValaUnresolvedType*) base;
454 	_tmp0_ = vala_data_type_get_value_owned ((ValaDataType*) self);
455 	_tmp1_ = _tmp0_;
456 	result = _tmp1_;
457 	return result;
458 }
459 
460 static void
vala_unresolved_type_class_init(ValaUnresolvedTypeClass * klass,gpointer klass_data)461 vala_unresolved_type_class_init (ValaUnresolvedTypeClass * klass,
462                                  gpointer klass_data)
463 {
464 	vala_unresolved_type_parent_class = g_type_class_peek_parent (klass);
465 	((ValaCodeNodeClass *) klass)->finalize = vala_unresolved_type_finalize;
466 	g_type_class_adjust_private_offset (klass, &ValaUnresolvedType_private_offset);
467 	((ValaDataTypeClass *) klass)->copy = (ValaDataType* (*) (ValaDataType*)) vala_unresolved_type_real_copy;
468 	((ValaDataTypeClass *) klass)->to_qualified_string = (gchar* (*) (ValaDataType*, ValaScope*)) vala_unresolved_type_real_to_qualified_string;
469 	((ValaDataTypeClass *) klass)->is_disposable = (gboolean (*) (ValaDataType*)) vala_unresolved_type_real_is_disposable;
470 }
471 
472 static void
vala_unresolved_type_instance_init(ValaUnresolvedType * self,gpointer klass)473 vala_unresolved_type_instance_init (ValaUnresolvedType * self,
474                                     gpointer klass)
475 {
476 	self->priv = vala_unresolved_type_get_instance_private (self);
477 }
478 
479 static void
vala_unresolved_type_finalize(ValaCodeNode * obj)480 vala_unresolved_type_finalize (ValaCodeNode * obj)
481 {
482 	ValaUnresolvedType * self;
483 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_UNRESOLVED_TYPE, ValaUnresolvedType);
484 	_vala_code_node_unref0 (self->priv->_unresolved_symbol);
485 	VALA_CODE_NODE_CLASS (vala_unresolved_type_parent_class)->finalize (obj);
486 }
487 
488 /**
489  * An unresolved reference to a data type.
490  */
491 static GType
vala_unresolved_type_get_type_once(void)492 vala_unresolved_type_get_type_once (void)
493 {
494 	static const GTypeInfo g_define_type_info = { sizeof (ValaUnresolvedTypeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_unresolved_type_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaUnresolvedType), 0, (GInstanceInitFunc) vala_unresolved_type_instance_init, NULL };
495 	GType vala_unresolved_type_type_id;
496 	vala_unresolved_type_type_id = g_type_register_static (VALA_TYPE_DATA_TYPE, "ValaUnresolvedType", &g_define_type_info, 0);
497 	ValaUnresolvedType_private_offset = g_type_add_instance_private (vala_unresolved_type_type_id, sizeof (ValaUnresolvedTypePrivate));
498 	return vala_unresolved_type_type_id;
499 }
500 
501 GType
vala_unresolved_type_get_type(void)502 vala_unresolved_type_get_type (void)
503 {
504 	static volatile gsize vala_unresolved_type_type_id__volatile = 0;
505 	if (g_once_init_enter (&vala_unresolved_type_type_id__volatile)) {
506 		GType vala_unresolved_type_type_id;
507 		vala_unresolved_type_type_id = vala_unresolved_type_get_type_once ();
508 		g_once_init_leave (&vala_unresolved_type_type_id__volatile, vala_unresolved_type_type_id);
509 	}
510 	return vala_unresolved_type_type_id__volatile;
511 }
512 
513