1 /* valaobjecttype.c generated by valac, the Vala compiler
2  * generated from valaobjecttype.vala, do not modify */
3 
4 /* valaobjecttype.vala
5  *
6  * Copyright (C) 2007-2010  Jürg Billeter
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  */
25 
26 #include "vala.h"
27 #include <glib.h>
28 #include <valagee.h>
29 #include <glib-object.h>
30 
31 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
32 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
33 
34 static gpointer vala_object_type_parent_class = NULL;
35 
36 static ValaDataType* vala_object_type_real_copy (ValaDataType* base);
37 static gboolean vala_object_type_real_stricter (ValaDataType* base,
38                                          ValaDataType* target_type);
39 static gboolean vala_object_type_real_is_invokable (ValaDataType* base);
40 static ValaDataType* vala_object_type_real_get_return_type (ValaDataType* base);
41 static ValaList* vala_object_type_real_get_parameters (ValaDataType* base);
42 static gboolean vala_object_type_real_check (ValaCodeNode* base,
43                                       ValaCodeContext* context);
44 static GType vala_object_type_get_type_once (void);
45 
46 ValaObjectTypeSymbol*
vala_object_type_get_object_type_symbol(ValaObjectType * self)47 vala_object_type_get_object_type_symbol (ValaObjectType* self)
48 {
49 	ValaObjectTypeSymbol* result;
50 	ValaSymbol* _tmp0_;
51 	ValaSymbol* _tmp1_;
52 	g_return_val_if_fail (self != NULL, NULL);
53 	_tmp0_ = vala_data_type_get_symbol ((ValaDataType*) self);
54 	_tmp1_ = _tmp0_;
55 	result = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol);
56 	return result;
57 }
58 
59 ValaObjectType*
vala_object_type_construct(GType object_type,ValaObjectTypeSymbol * type_symbol)60 vala_object_type_construct (GType object_type,
61                             ValaObjectTypeSymbol* type_symbol)
62 {
63 	ValaObjectType* self = NULL;
64 	g_return_val_if_fail (type_symbol != NULL, NULL);
65 	self = (ValaObjectType*) vala_reference_type_construct (object_type, (ValaSymbol*) type_symbol);
66 	return self;
67 }
68 
69 ValaObjectType*
vala_object_type_new(ValaObjectTypeSymbol * type_symbol)70 vala_object_type_new (ValaObjectTypeSymbol* type_symbol)
71 {
72 	return vala_object_type_construct (VALA_TYPE_OBJECT_TYPE, type_symbol);
73 }
74 
75 static gpointer
_vala_iterable_ref0(gpointer self)76 _vala_iterable_ref0 (gpointer self)
77 {
78 	return self ? vala_iterable_ref (self) : NULL;
79 }
80 
81 static ValaDataType*
vala_object_type_real_copy(ValaDataType * base)82 vala_object_type_real_copy (ValaDataType* base)
83 {
84 	ValaObjectType * self;
85 	ValaObjectType* _result_ = NULL;
86 	ValaObjectTypeSymbol* _tmp0_;
87 	ValaObjectTypeSymbol* _tmp1_;
88 	ValaObjectType* _tmp2_;
89 	ValaObjectType* _tmp3_;
90 	ValaSourceReference* _tmp4_;
91 	ValaSourceReference* _tmp5_;
92 	ValaObjectType* _tmp6_;
93 	gboolean _tmp7_;
94 	gboolean _tmp8_;
95 	ValaObjectType* _tmp9_;
96 	gboolean _tmp10_;
97 	gboolean _tmp11_;
98 	ValaObjectType* _tmp12_;
99 	gboolean _tmp13_;
100 	gboolean _tmp14_;
101 	ValaObjectType* _tmp15_;
102 	gboolean _tmp16_;
103 	gboolean _tmp17_;
104 	ValaDataType* result = NULL;
105 	self = (ValaObjectType*) base;
106 	_tmp0_ = vala_object_type_get_object_type_symbol (self);
107 	_tmp1_ = _tmp0_;
108 	_tmp2_ = vala_object_type_new (_tmp1_);
109 	_result_ = _tmp2_;
110 	_tmp3_ = _result_;
111 	_tmp4_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
112 	_tmp5_ = _tmp4_;
113 	vala_code_node_set_source_reference ((ValaCodeNode*) _tmp3_, _tmp5_);
114 	_tmp6_ = _result_;
115 	_tmp7_ = vala_data_type_get_value_owned ((ValaDataType*) self);
116 	_tmp8_ = _tmp7_;
117 	vala_data_type_set_value_owned ((ValaDataType*) _tmp6_, _tmp8_);
118 	_tmp9_ = _result_;
119 	_tmp10_ = vala_data_type_get_nullable ((ValaDataType*) self);
120 	_tmp11_ = _tmp10_;
121 	vala_data_type_set_nullable ((ValaDataType*) _tmp9_, _tmp11_);
122 	_tmp12_ = _result_;
123 	_tmp13_ = vala_data_type_get_is_dynamic ((ValaDataType*) self);
124 	_tmp14_ = _tmp13_;
125 	vala_data_type_set_is_dynamic ((ValaDataType*) _tmp12_, _tmp14_);
126 	_tmp15_ = _result_;
127 	_tmp16_ = vala_data_type_get_floating_reference ((ValaDataType*) self);
128 	_tmp17_ = _tmp16_;
129 	vala_data_type_set_floating_reference ((ValaDataType*) _tmp15_, _tmp17_);
130 	{
131 		ValaList* _arg_list = NULL;
132 		ValaList* _tmp18_;
133 		ValaList* _tmp19_;
134 		gint _arg_size = 0;
135 		ValaList* _tmp20_;
136 		gint _tmp21_;
137 		gint _tmp22_;
138 		gint _arg_index = 0;
139 		_tmp18_ = vala_data_type_get_type_arguments ((ValaDataType*) self);
140 		_tmp19_ = _vala_iterable_ref0 (_tmp18_);
141 		_arg_list = _tmp19_;
142 		_tmp20_ = _arg_list;
143 		_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
144 		_tmp22_ = _tmp21_;
145 		_arg_size = _tmp22_;
146 		_arg_index = -1;
147 		while (TRUE) {
148 			gint _tmp23_;
149 			gint _tmp24_;
150 			ValaDataType* arg = NULL;
151 			ValaList* _tmp25_;
152 			gpointer _tmp26_;
153 			ValaObjectType* _tmp27_;
154 			ValaDataType* _tmp28_;
155 			ValaDataType* _tmp29_;
156 			ValaDataType* _tmp30_;
157 			_arg_index = _arg_index + 1;
158 			_tmp23_ = _arg_index;
159 			_tmp24_ = _arg_size;
160 			if (!(_tmp23_ < _tmp24_)) {
161 				break;
162 			}
163 			_tmp25_ = _arg_list;
164 			_tmp26_ = vala_list_get (_tmp25_, _arg_index);
165 			arg = (ValaDataType*) _tmp26_;
166 			_tmp27_ = _result_;
167 			_tmp28_ = arg;
168 			_tmp29_ = vala_data_type_copy (_tmp28_);
169 			_tmp30_ = _tmp29_;
170 			vala_data_type_add_type_argument ((ValaDataType*) _tmp27_, _tmp30_);
171 			_vala_code_node_unref0 (_tmp30_);
172 			_vala_code_node_unref0 (arg);
173 		}
174 		_vala_iterable_unref0 (_arg_list);
175 	}
176 	result = (ValaDataType*) _result_;
177 	return result;
178 }
179 
180 static gboolean
vala_object_type_real_stricter(ValaDataType * base,ValaDataType * target_type)181 vala_object_type_real_stricter (ValaDataType* base,
182                                 ValaDataType* target_type)
183 {
184 	ValaObjectType * self;
185 	ValaObjectType* obj_target_type = NULL;
186 	ValaObjectType* _tmp0_;
187 	gboolean _tmp1_;
188 	gboolean _tmp2_;
189 	gboolean _tmp3_;
190 	gboolean _tmp4_;
191 	gboolean _tmp5_ = FALSE;
192 	gboolean _tmp6_;
193 	gboolean _tmp7_;
194 	ValaTypeSymbol* _tmp10_;
195 	ValaTypeSymbol* _tmp11_;
196 	ValaObjectType* _tmp12_;
197 	ValaTypeSymbol* _tmp13_;
198 	ValaTypeSymbol* _tmp14_;
199 	gboolean result = FALSE;
200 	self = (ValaObjectType*) base;
201 	g_return_val_if_fail (target_type != NULL, FALSE);
202 	obj_target_type = VALA_IS_OBJECT_TYPE (target_type) ? ((ValaObjectType*) target_type) : NULL;
203 	_tmp0_ = obj_target_type;
204 	if (_tmp0_ == NULL) {
205 		result = FALSE;
206 		return result;
207 	}
208 	_tmp1_ = vala_data_type_get_value_owned ((ValaDataType*) self);
209 	_tmp2_ = _tmp1_;
210 	_tmp3_ = vala_data_type_get_value_owned (target_type);
211 	_tmp4_ = _tmp3_;
212 	if (_tmp2_ != _tmp4_) {
213 		result = FALSE;
214 		return result;
215 	}
216 	_tmp6_ = vala_data_type_get_nullable ((ValaDataType*) self);
217 	_tmp7_ = _tmp6_;
218 	if (_tmp7_) {
219 		gboolean _tmp8_;
220 		gboolean _tmp9_;
221 		_tmp8_ = vala_data_type_get_nullable (target_type);
222 		_tmp9_ = _tmp8_;
223 		_tmp5_ = !_tmp9_;
224 	} else {
225 		_tmp5_ = FALSE;
226 	}
227 	if (_tmp5_) {
228 		result = FALSE;
229 		return result;
230 	}
231 	_tmp10_ = vala_data_type_get_type_symbol ((ValaDataType*) self);
232 	_tmp11_ = _tmp10_;
233 	_tmp12_ = obj_target_type;
234 	_tmp13_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp12_);
235 	_tmp14_ = _tmp13_;
236 	result = vala_typesymbol_is_subtype_of (_tmp11_, _tmp14_);
237 	return result;
238 }
239 
240 static gboolean
vala_object_type_real_is_invokable(ValaDataType * base)241 vala_object_type_real_is_invokable (ValaDataType* base)
242 {
243 	ValaObjectType * self;
244 	ValaClass* cl = NULL;
245 	ValaTypeSymbol* _tmp0_;
246 	ValaTypeSymbol* _tmp1_;
247 	gboolean _tmp2_ = FALSE;
248 	ValaClass* _tmp3_;
249 	gboolean result = FALSE;
250 	self = (ValaObjectType*) base;
251 	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) self);
252 	_tmp1_ = _tmp0_;
253 	cl = VALA_IS_CLASS (_tmp1_) ? ((ValaClass*) _tmp1_) : NULL;
254 	_tmp3_ = cl;
255 	if (_tmp3_ != NULL) {
256 		ValaClass* _tmp4_;
257 		ValaCreationMethod* _tmp5_;
258 		ValaCreationMethod* _tmp6_;
259 		_tmp4_ = cl;
260 		_tmp5_ = vala_class_get_default_construction_method (_tmp4_);
261 		_tmp6_ = _tmp5_;
262 		_tmp2_ = _tmp6_ != NULL;
263 	} else {
264 		_tmp2_ = FALSE;
265 	}
266 	if (_tmp2_) {
267 		result = TRUE;
268 		return result;
269 	} else {
270 		result = FALSE;
271 		return result;
272 	}
273 }
274 
275 static ValaDataType*
vala_object_type_real_get_return_type(ValaDataType * base)276 vala_object_type_real_get_return_type (ValaDataType* base)
277 {
278 	ValaObjectType * self;
279 	ValaClass* cl = NULL;
280 	ValaTypeSymbol* _tmp0_;
281 	ValaTypeSymbol* _tmp1_;
282 	gboolean _tmp2_ = FALSE;
283 	ValaClass* _tmp3_;
284 	ValaDataType* result = NULL;
285 	self = (ValaObjectType*) base;
286 	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) self);
287 	_tmp1_ = _tmp0_;
288 	cl = VALA_IS_CLASS (_tmp1_) ? ((ValaClass*) _tmp1_) : NULL;
289 	_tmp3_ = cl;
290 	if (_tmp3_ != NULL) {
291 		ValaClass* _tmp4_;
292 		ValaCreationMethod* _tmp5_;
293 		ValaCreationMethod* _tmp6_;
294 		_tmp4_ = cl;
295 		_tmp5_ = vala_class_get_default_construction_method (_tmp4_);
296 		_tmp6_ = _tmp5_;
297 		_tmp2_ = _tmp6_ != NULL;
298 	} else {
299 		_tmp2_ = FALSE;
300 	}
301 	if (_tmp2_) {
302 		ValaClass* _tmp7_;
303 		ValaCreationMethod* _tmp8_;
304 		ValaCreationMethod* _tmp9_;
305 		ValaDataType* _tmp10_;
306 		ValaDataType* _tmp11_;
307 		_tmp7_ = cl;
308 		_tmp8_ = vala_class_get_default_construction_method (_tmp7_);
309 		_tmp9_ = _tmp8_;
310 		_tmp10_ = vala_callable_get_return_type ((ValaCallable*) _tmp9_);
311 		_tmp11_ = _tmp10_;
312 		result = _tmp11_;
313 		return result;
314 	} else {
315 		result = NULL;
316 		return result;
317 	}
318 }
319 
320 static ValaList*
vala_object_type_real_get_parameters(ValaDataType * base)321 vala_object_type_real_get_parameters (ValaDataType* base)
322 {
323 	ValaObjectType * self;
324 	ValaClass* cl = NULL;
325 	ValaTypeSymbol* _tmp0_;
326 	ValaTypeSymbol* _tmp1_;
327 	gboolean _tmp2_ = FALSE;
328 	ValaClass* _tmp3_;
329 	ValaList* result = NULL;
330 	self = (ValaObjectType*) base;
331 	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) self);
332 	_tmp1_ = _tmp0_;
333 	cl = VALA_IS_CLASS (_tmp1_) ? ((ValaClass*) _tmp1_) : NULL;
334 	_tmp3_ = cl;
335 	if (_tmp3_ != NULL) {
336 		ValaClass* _tmp4_;
337 		ValaCreationMethod* _tmp5_;
338 		ValaCreationMethod* _tmp6_;
339 		_tmp4_ = cl;
340 		_tmp5_ = vala_class_get_default_construction_method (_tmp4_);
341 		_tmp6_ = _tmp5_;
342 		_tmp2_ = _tmp6_ != NULL;
343 	} else {
344 		_tmp2_ = FALSE;
345 	}
346 	if (_tmp2_) {
347 		ValaClass* _tmp7_;
348 		ValaCreationMethod* _tmp8_;
349 		ValaCreationMethod* _tmp9_;
350 		ValaList* _tmp10_;
351 		_tmp7_ = cl;
352 		_tmp8_ = vala_class_get_default_construction_method (_tmp7_);
353 		_tmp9_ = _tmp8_;
354 		_tmp10_ = vala_callable_get_parameters ((ValaCallable*) _tmp9_);
355 		result = _tmp10_;
356 		return result;
357 	} else {
358 		result = NULL;
359 		return result;
360 	}
361 }
362 
363 static gboolean
vala_object_type_real_check(ValaCodeNode * base,ValaCodeContext * context)364 vala_object_type_real_check (ValaCodeNode* base,
365                              ValaCodeContext* context)
366 {
367 	ValaObjectType * self;
368 	ValaTypeSymbol* _tmp0_;
369 	ValaTypeSymbol* _tmp1_;
370 	gboolean result = FALSE;
371 	self = (ValaObjectType*) base;
372 	g_return_val_if_fail (context != NULL, FALSE);
373 	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) self);
374 	_tmp1_ = _tmp0_;
375 	if (!vala_code_node_check ((ValaCodeNode*) _tmp1_, context)) {
376 		result = FALSE;
377 		return result;
378 	}
379 	if (!vala_data_type_check_type_arguments ((ValaDataType*) self, context, TRUE)) {
380 		result = FALSE;
381 		return result;
382 	}
383 	result = TRUE;
384 	return result;
385 }
386 
387 static void
vala_object_type_class_init(ValaObjectTypeClass * klass,gpointer klass_data)388 vala_object_type_class_init (ValaObjectTypeClass * klass,
389                              gpointer klass_data)
390 {
391 	vala_object_type_parent_class = g_type_class_peek_parent (klass);
392 	((ValaDataTypeClass *) klass)->copy = (ValaDataType* (*) (ValaDataType*)) vala_object_type_real_copy;
393 	((ValaDataTypeClass *) klass)->stricter = (gboolean (*) (ValaDataType*, ValaDataType*)) vala_object_type_real_stricter;
394 	((ValaDataTypeClass *) klass)->is_invokable = (gboolean (*) (ValaDataType*)) vala_object_type_real_is_invokable;
395 	((ValaDataTypeClass *) klass)->get_return_type = (ValaDataType* (*) (ValaDataType*)) vala_object_type_real_get_return_type;
396 	((ValaDataTypeClass *) klass)->get_parameters = (ValaList* (*) (ValaDataType*)) vala_object_type_real_get_parameters;
397 	((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_object_type_real_check;
398 }
399 
400 static void
vala_object_type_instance_init(ValaObjectType * self,gpointer klass)401 vala_object_type_instance_init (ValaObjectType * self,
402                                 gpointer klass)
403 {
404 }
405 
406 /**
407  * A class type.
408  */
409 static GType
vala_object_type_get_type_once(void)410 vala_object_type_get_type_once (void)
411 {
412 	static const GTypeInfo g_define_type_info = { sizeof (ValaObjectTypeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_object_type_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaObjectType), 0, (GInstanceInitFunc) vala_object_type_instance_init, NULL };
413 	GType vala_object_type_type_id;
414 	vala_object_type_type_id = g_type_register_static (VALA_TYPE_REFERENCE_TYPE, "ValaObjectType", &g_define_type_info, 0);
415 	return vala_object_type_type_id;
416 }
417 
418 GType
vala_object_type_get_type(void)419 vala_object_type_get_type (void)
420 {
421 	static volatile gsize vala_object_type_type_id__volatile = 0;
422 	if (g_once_init_enter (&vala_object_type_type_id__volatile)) {
423 		GType vala_object_type_type_id;
424 		vala_object_type_type_id = vala_object_type_get_type_once ();
425 		g_once_init_leave (&vala_object_type_type_id__volatile, vala_object_type_type_id);
426 	}
427 	return vala_object_type_type_id__volatile;
428 }
429 
430