1 /* valadestructor.c generated by valac, the Vala compiler
2  * generated from valadestructor.vala, do not modify */
3 
4 /* valadestructor.vala
5  *
6  * Copyright (C) 2006-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 #include <stdlib.h>
31 #include <string.h>
32 
33 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
34 #define _g_free0(var) (var = (g_free (var), NULL))
35 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
36 
37 struct _ValaDestructorPrivate {
38 	ValaParameter* _this_parameter;
39 	ValaMemberBinding _binding;
40 };
41 
42 static gint ValaDestructor_private_offset;
43 static gpointer vala_destructor_parent_class = NULL;
44 
45 static void vala_destructor_real_accept (ValaCodeNode* base,
46                                   ValaCodeVisitor* visitor);
47 static void vala_destructor_real_accept_children (ValaCodeNode* base,
48                                            ValaCodeVisitor* visitor);
49 static gboolean vala_destructor_real_check (ValaCodeNode* base,
50                                      ValaCodeContext* context);
51 static void vala_destructor_finalize (ValaCodeNode * obj);
52 static GType vala_destructor_get_type_once (void);
53 
54 static inline gpointer
vala_destructor_get_instance_private(ValaDestructor * self)55 vala_destructor_get_instance_private (ValaDestructor* self)
56 {
57 	return G_STRUCT_MEMBER_P (self, ValaDestructor_private_offset);
58 }
59 
60 ValaParameter*
vala_destructor_get_this_parameter(ValaDestructor * self)61 vala_destructor_get_this_parameter (ValaDestructor* self)
62 {
63 	ValaParameter* result;
64 	ValaParameter* _tmp0_;
65 	g_return_val_if_fail (self != NULL, NULL);
66 	_tmp0_ = self->priv->_this_parameter;
67 	result = _tmp0_;
68 	return result;
69 }
70 
71 static gpointer
_vala_code_node_ref0(gpointer self)72 _vala_code_node_ref0 (gpointer self)
73 {
74 	return self ? vala_code_node_ref (self) : NULL;
75 }
76 
77 void
vala_destructor_set_this_parameter(ValaDestructor * self,ValaParameter * value)78 vala_destructor_set_this_parameter (ValaDestructor* self,
79                                     ValaParameter* value)
80 {
81 	ValaParameter* _tmp0_;
82 	g_return_if_fail (self != NULL);
83 	_tmp0_ = _vala_code_node_ref0 (value);
84 	_vala_code_node_unref0 (self->priv->_this_parameter);
85 	self->priv->_this_parameter = _tmp0_;
86 }
87 
88 ValaMemberBinding
vala_destructor_get_binding(ValaDestructor * self)89 vala_destructor_get_binding (ValaDestructor* self)
90 {
91 	ValaMemberBinding result;
92 	ValaMemberBinding _tmp0_;
93 	g_return_val_if_fail (self != NULL, 0);
94 	_tmp0_ = self->priv->_binding;
95 	result = _tmp0_;
96 	return result;
97 }
98 
99 void
vala_destructor_set_binding(ValaDestructor * self,ValaMemberBinding value)100 vala_destructor_set_binding (ValaDestructor* self,
101                              ValaMemberBinding value)
102 {
103 	g_return_if_fail (self != NULL);
104 	self->priv->_binding = value;
105 }
106 
107 static gboolean
vala_destructor_real_get_has_result(ValaSubroutine * base)108 vala_destructor_real_get_has_result (ValaSubroutine* base)
109 {
110 	gboolean result;
111 	ValaDestructor* self;
112 	self = (ValaDestructor*) base;
113 	result = FALSE;
114 	return result;
115 }
116 
117 /**
118  * Creates a new destructor.
119  *
120  * @param source_reference reference to source code
121  * @return                 newly created destructor
122  */
123 ValaDestructor*
vala_destructor_construct(GType object_type,ValaSourceReference * source_reference)124 vala_destructor_construct (GType object_type,
125                            ValaSourceReference* source_reference)
126 {
127 	ValaDestructor* self = NULL;
128 	self = (ValaDestructor*) vala_subroutine_construct (object_type, NULL, source_reference, NULL);
129 	return self;
130 }
131 
132 ValaDestructor*
vala_destructor_new(ValaSourceReference * source_reference)133 vala_destructor_new (ValaSourceReference* source_reference)
134 {
135 	return vala_destructor_construct (VALA_TYPE_DESTRUCTOR, source_reference);
136 }
137 
138 static void
vala_destructor_real_accept(ValaCodeNode * base,ValaCodeVisitor * visitor)139 vala_destructor_real_accept (ValaCodeNode* base,
140                              ValaCodeVisitor* visitor)
141 {
142 	ValaDestructor * self;
143 	self = (ValaDestructor*) base;
144 	g_return_if_fail (visitor != NULL);
145 	vala_code_visitor_visit_destructor (visitor, self);
146 }
147 
148 static void
vala_destructor_real_accept_children(ValaCodeNode * base,ValaCodeVisitor * visitor)149 vala_destructor_real_accept_children (ValaCodeNode* base,
150                                       ValaCodeVisitor* visitor)
151 {
152 	ValaDestructor * self;
153 	ValaBlock* _tmp0_;
154 	ValaBlock* _tmp1_;
155 	self = (ValaDestructor*) base;
156 	g_return_if_fail (visitor != NULL);
157 	_tmp0_ = vala_subroutine_get_body ((ValaSubroutine*) self);
158 	_tmp1_ = _tmp0_;
159 	if (_tmp1_ != NULL) {
160 		ValaBlock* _tmp2_;
161 		ValaBlock* _tmp3_;
162 		_tmp2_ = vala_subroutine_get_body ((ValaSubroutine*) self);
163 		_tmp3_ = _tmp2_;
164 		vala_code_node_accept ((ValaCodeNode*) _tmp3_, visitor);
165 	}
166 }
167 
168 static gpointer
_vala_iterable_ref0(gpointer self)169 _vala_iterable_ref0 (gpointer self)
170 {
171 	return self ? vala_iterable_ref (self) : NULL;
172 }
173 
174 static gboolean
vala_destructor_real_check(ValaCodeNode * base,ValaCodeContext * context)175 vala_destructor_real_check (ValaCodeNode* base,
176                             ValaCodeContext* context)
177 {
178 	ValaDestructor * self;
179 	gboolean _tmp0_;
180 	gboolean _tmp1_;
181 	ValaParameter* _tmp4_;
182 	ValaSemanticAnalyzer* _tmp6_;
183 	ValaSemanticAnalyzer* _tmp7_;
184 	ValaBlock* _tmp8_;
185 	ValaBlock* _tmp9_;
186 	gboolean _tmp12_ = FALSE;
187 	ValaBlock* _tmp13_;
188 	ValaBlock* _tmp14_;
189 	ValaSemanticAnalyzer* _tmp44_;
190 	ValaSemanticAnalyzer* _tmp45_;
191 	ValaSymbol* _tmp46_;
192 	ValaSymbol* _tmp47_;
193 	gboolean _tmp48_;
194 	gboolean _tmp49_;
195 	gboolean result = FALSE;
196 	self = (ValaDestructor*) base;
197 	g_return_val_if_fail (context != NULL, FALSE);
198 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
199 	_tmp1_ = _tmp0_;
200 	if (_tmp1_) {
201 		gboolean _tmp2_;
202 		gboolean _tmp3_;
203 		_tmp2_ = vala_code_node_get_error ((ValaCodeNode*) self);
204 		_tmp3_ = _tmp2_;
205 		result = !_tmp3_;
206 		return result;
207 	}
208 	vala_code_node_set_checked ((ValaCodeNode*) self, TRUE);
209 	_tmp4_ = self->priv->_this_parameter;
210 	if (_tmp4_ != NULL) {
211 		ValaParameter* _tmp5_;
212 		_tmp5_ = self->priv->_this_parameter;
213 		vala_code_node_check ((ValaCodeNode*) _tmp5_, context);
214 	}
215 	_tmp6_ = vala_code_context_get_analyzer (context);
216 	_tmp7_ = _tmp6_;
217 	vala_semantic_analyzer_set_current_symbol (_tmp7_, (ValaSymbol*) self);
218 	_tmp8_ = vala_subroutine_get_body ((ValaSubroutine*) self);
219 	_tmp9_ = _tmp8_;
220 	if (_tmp9_ != NULL) {
221 		ValaBlock* _tmp10_;
222 		ValaBlock* _tmp11_;
223 		_tmp10_ = vala_subroutine_get_body ((ValaSubroutine*) self);
224 		_tmp11_ = _tmp10_;
225 		vala_code_node_check ((ValaCodeNode*) _tmp11_, context);
226 	}
227 	_tmp13_ = vala_subroutine_get_body ((ValaSubroutine*) self);
228 	_tmp14_ = _tmp13_;
229 	if (_tmp14_ != NULL) {
230 		ValaBlock* _tmp15_;
231 		ValaBlock* _tmp16_;
232 		gboolean _tmp17_;
233 		gboolean _tmp18_;
234 		_tmp15_ = vala_subroutine_get_body ((ValaSubroutine*) self);
235 		_tmp16_ = _tmp15_;
236 		_tmp17_ = vala_code_node_get_error ((ValaCodeNode*) _tmp16_);
237 		_tmp18_ = _tmp17_;
238 		_tmp12_ = !_tmp18_;
239 	} else {
240 		_tmp12_ = FALSE;
241 	}
242 	if (_tmp12_) {
243 		ValaArrayList* body_errors = NULL;
244 		GEqualFunc _tmp19_;
245 		ValaArrayList* _tmp20_;
246 		ValaBlock* _tmp21_;
247 		ValaBlock* _tmp22_;
248 		ValaArrayList* _tmp23_;
249 		_tmp19_ = g_direct_equal;
250 		_tmp20_ = vala_array_list_new (VALA_TYPE_DATA_TYPE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp19_);
251 		body_errors = _tmp20_;
252 		_tmp21_ = vala_subroutine_get_body ((ValaSubroutine*) self);
253 		_tmp22_ = _tmp21_;
254 		_tmp23_ = body_errors;
255 		vala_code_node_get_error_types ((ValaCodeNode*) _tmp22_, (ValaCollection*) _tmp23_, NULL);
256 		{
257 			ValaArrayList* _body_error_type_list = NULL;
258 			ValaArrayList* _tmp24_;
259 			ValaArrayList* _tmp25_;
260 			gint _body_error_type_size = 0;
261 			ValaArrayList* _tmp26_;
262 			gint _tmp27_;
263 			gint _tmp28_;
264 			gint _body_error_type_index = 0;
265 			_tmp24_ = body_errors;
266 			_tmp25_ = _vala_iterable_ref0 (_tmp24_);
267 			_body_error_type_list = _tmp25_;
268 			_tmp26_ = _body_error_type_list;
269 			_tmp27_ = vala_collection_get_size ((ValaCollection*) _tmp26_);
270 			_tmp28_ = _tmp27_;
271 			_body_error_type_size = _tmp28_;
272 			_body_error_type_index = -1;
273 			while (TRUE) {
274 				gint _tmp29_;
275 				gint _tmp30_;
276 				ValaDataType* body_error_type = NULL;
277 				ValaArrayList* _tmp31_;
278 				gpointer _tmp32_;
279 				ValaDataType* _tmp33_;
280 				gboolean _tmp34_;
281 				gboolean _tmp35_;
282 				_body_error_type_index = _body_error_type_index + 1;
283 				_tmp29_ = _body_error_type_index;
284 				_tmp30_ = _body_error_type_size;
285 				if (!(_tmp29_ < _tmp30_)) {
286 					break;
287 				}
288 				_tmp31_ = _body_error_type_list;
289 				_tmp32_ = vala_list_get ((ValaList*) _tmp31_, _body_error_type_index);
290 				body_error_type = (ValaDataType*) _tmp32_;
291 				_tmp33_ = body_error_type;
292 				_tmp34_ = vala_error_type_get_dynamic_error (G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, VALA_TYPE_ERROR_TYPE, ValaErrorType));
293 				_tmp35_ = _tmp34_;
294 				if (!_tmp35_) {
295 					ValaDataType* _tmp36_;
296 					ValaSourceReference* _tmp37_;
297 					ValaSourceReference* _tmp38_;
298 					ValaDataType* _tmp39_;
299 					gchar* _tmp40_;
300 					gchar* _tmp41_;
301 					gchar* _tmp42_;
302 					gchar* _tmp43_;
303 					_tmp36_ = body_error_type;
304 					_tmp37_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp36_);
305 					_tmp38_ = _tmp37_;
306 					_tmp39_ = body_error_type;
307 					_tmp40_ = vala_code_node_to_string ((ValaCodeNode*) _tmp39_);
308 					_tmp41_ = _tmp40_;
309 					_tmp42_ = g_strdup_printf ("unhandled error `%s'", _tmp41_);
310 					_tmp43_ = _tmp42_;
311 					vala_report_warning (_tmp38_, _tmp43_);
312 					_g_free0 (_tmp43_);
313 					_g_free0 (_tmp41_);
314 				}
315 				_vala_code_node_unref0 (body_error_type);
316 			}
317 			_vala_iterable_unref0 (_body_error_type_list);
318 		}
319 		_vala_iterable_unref0 (body_errors);
320 	}
321 	_tmp44_ = vala_code_context_get_analyzer (context);
322 	_tmp45_ = _tmp44_;
323 	_tmp46_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
324 	_tmp47_ = _tmp46_;
325 	vala_semantic_analyzer_set_current_symbol (_tmp45_, _tmp47_);
326 	_tmp48_ = vala_code_node_get_error ((ValaCodeNode*) self);
327 	_tmp49_ = _tmp48_;
328 	result = !_tmp49_;
329 	return result;
330 }
331 
332 static void
vala_destructor_class_init(ValaDestructorClass * klass,gpointer klass_data)333 vala_destructor_class_init (ValaDestructorClass * klass,
334                             gpointer klass_data)
335 {
336 	vala_destructor_parent_class = g_type_class_peek_parent (klass);
337 	((ValaCodeNodeClass *) klass)->finalize = vala_destructor_finalize;
338 	g_type_class_adjust_private_offset (klass, &ValaDestructor_private_offset);
339 	((ValaCodeNodeClass *) klass)->accept = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_destructor_real_accept;
340 	((ValaCodeNodeClass *) klass)->accept_children = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_destructor_real_accept_children;
341 	((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_destructor_real_check;
342 	VALA_SUBROUTINE_CLASS (klass)->get_has_result = vala_destructor_real_get_has_result;
343 }
344 
345 static void
vala_destructor_instance_init(ValaDestructor * self,gpointer klass)346 vala_destructor_instance_init (ValaDestructor * self,
347                                gpointer klass)
348 {
349 	self->priv = vala_destructor_get_instance_private (self);
350 	self->priv->_binding = VALA_MEMBER_BINDING_INSTANCE;
351 }
352 
353 static void
vala_destructor_finalize(ValaCodeNode * obj)354 vala_destructor_finalize (ValaCodeNode * obj)
355 {
356 	ValaDestructor * self;
357 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_DESTRUCTOR, ValaDestructor);
358 	_vala_code_node_unref0 (self->priv->_this_parameter);
359 	VALA_CODE_NODE_CLASS (vala_destructor_parent_class)->finalize (obj);
360 }
361 
362 /**
363  * Represents a class or instance destructor.
364  */
365 static GType
vala_destructor_get_type_once(void)366 vala_destructor_get_type_once (void)
367 {
368 	static const GTypeInfo g_define_type_info = { sizeof (ValaDestructorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_destructor_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaDestructor), 0, (GInstanceInitFunc) vala_destructor_instance_init, NULL };
369 	GType vala_destructor_type_id;
370 	vala_destructor_type_id = g_type_register_static (VALA_TYPE_SUBROUTINE, "ValaDestructor", &g_define_type_info, 0);
371 	ValaDestructor_private_offset = g_type_add_instance_private (vala_destructor_type_id, sizeof (ValaDestructorPrivate));
372 	return vala_destructor_type_id;
373 }
374 
375 GType
vala_destructor_get_type(void)376 vala_destructor_get_type (void)
377 {
378 	static volatile gsize vala_destructor_type_id__volatile = 0;
379 	if (g_once_init_enter (&vala_destructor_type_id__volatile)) {
380 		GType vala_destructor_type_id;
381 		vala_destructor_type_id = vala_destructor_get_type_once ();
382 		g_once_init_leave (&vala_destructor_type_id__volatile, vala_destructor_type_id);
383 	}
384 	return vala_destructor_type_id__volatile;
385 }
386 
387