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