1 /* valaloop.c generated by valac, the Vala compiler
2  * generated from valaloop.vala, do not modify */
3 
4 /* valaloop.vala
5  *
6  * Copyright (C) 2009-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 <valagee.h>
28 #include <glib-object.h>
29 #include <glib.h>
30 
31 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
32 
33 struct _ValaLoopPrivate {
34 	ValaBlock* _body;
35 };
36 
37 static gint ValaLoop_private_offset;
38 static gpointer vala_loop_parent_class = NULL;
39 static ValaStatementIface * vala_loop_vala_statement_parent_iface = NULL;
40 
41 static void vala_loop_real_accept (ValaCodeNode* base,
42                             ValaCodeVisitor* visitor);
43 static void vala_loop_real_accept_children (ValaCodeNode* base,
44                                      ValaCodeVisitor* visitor);
45 static void vala_loop_real_get_error_types (ValaCodeNode* base,
46                                      ValaCollection* collection,
47                                      ValaSourceReference* source_reference);
48 static gboolean vala_loop_real_check (ValaCodeNode* base,
49                                ValaCodeContext* context);
50 static void vala_loop_real_emit (ValaCodeNode* base,
51                           ValaCodeGenerator* codegen);
52 static void vala_loop_finalize (ValaCodeNode * obj);
53 static GType vala_loop_get_type_once (void);
54 
55 static inline gpointer
vala_loop_get_instance_private(ValaLoop * self)56 vala_loop_get_instance_private (ValaLoop* self)
57 {
58 	return G_STRUCT_MEMBER_P (self, ValaLoop_private_offset);
59 }
60 
61 ValaBlock*
vala_loop_get_body(ValaLoop * self)62 vala_loop_get_body (ValaLoop* self)
63 {
64 	ValaBlock* result;
65 	ValaBlock* _tmp0_;
66 	g_return_val_if_fail (self != NULL, NULL);
67 	_tmp0_ = self->priv->_body;
68 	result = _tmp0_;
69 	return result;
70 }
71 
72 static gpointer
_vala_code_node_ref0(gpointer self)73 _vala_code_node_ref0 (gpointer self)
74 {
75 	return self ? vala_code_node_ref (self) : NULL;
76 }
77 
78 void
vala_loop_set_body(ValaLoop * self,ValaBlock * value)79 vala_loop_set_body (ValaLoop* self,
80                     ValaBlock* value)
81 {
82 	ValaBlock* _tmp0_;
83 	ValaBlock* _tmp1_;
84 	g_return_if_fail (self != NULL);
85 	_tmp0_ = _vala_code_node_ref0 (value);
86 	_vala_code_node_unref0 (self->priv->_body);
87 	self->priv->_body = _tmp0_;
88 	_tmp1_ = self->priv->_body;
89 	vala_code_node_set_parent_node ((ValaCodeNode*) _tmp1_, (ValaCodeNode*) self);
90 }
91 
92 /**
93  * Creates a new loop.
94  *
95  * @param body             loop body
96  * @param source_reference reference to source code
97  * @return                 newly created while statement
98  */
99 ValaLoop*
vala_loop_construct(GType object_type,ValaBlock * body,ValaSourceReference * source_reference)100 vala_loop_construct (GType object_type,
101                      ValaBlock* body,
102                      ValaSourceReference* source_reference)
103 {
104 	ValaLoop* self = NULL;
105 	g_return_val_if_fail (body != NULL, NULL);
106 	self = (ValaLoop*) vala_code_node_construct (object_type);
107 	vala_loop_set_body (self, body);
108 	vala_code_node_set_source_reference ((ValaCodeNode*) self, source_reference);
109 	return self;
110 }
111 
112 ValaLoop*
vala_loop_new(ValaBlock * body,ValaSourceReference * source_reference)113 vala_loop_new (ValaBlock* body,
114                ValaSourceReference* source_reference)
115 {
116 	return vala_loop_construct (VALA_TYPE_LOOP, body, source_reference);
117 }
118 
119 static void
vala_loop_real_accept(ValaCodeNode * base,ValaCodeVisitor * visitor)120 vala_loop_real_accept (ValaCodeNode* base,
121                        ValaCodeVisitor* visitor)
122 {
123 	ValaLoop * self;
124 	self = (ValaLoop*) base;
125 	g_return_if_fail (visitor != NULL);
126 	vala_code_visitor_visit_loop (visitor, self);
127 }
128 
129 static void
vala_loop_real_accept_children(ValaCodeNode * base,ValaCodeVisitor * visitor)130 vala_loop_real_accept_children (ValaCodeNode* base,
131                                 ValaCodeVisitor* visitor)
132 {
133 	ValaLoop * self;
134 	ValaBlock* _tmp0_;
135 	ValaBlock* _tmp1_;
136 	self = (ValaLoop*) base;
137 	g_return_if_fail (visitor != NULL);
138 	_tmp0_ = vala_loop_get_body (self);
139 	_tmp1_ = _tmp0_;
140 	vala_code_node_accept ((ValaCodeNode*) _tmp1_, visitor);
141 }
142 
143 static void
vala_loop_real_get_error_types(ValaCodeNode * base,ValaCollection * collection,ValaSourceReference * source_reference)144 vala_loop_real_get_error_types (ValaCodeNode* base,
145                                 ValaCollection* collection,
146                                 ValaSourceReference* source_reference)
147 {
148 	ValaLoop * self;
149 	ValaBlock* _tmp0_;
150 	ValaBlock* _tmp1_;
151 	self = (ValaLoop*) base;
152 	g_return_if_fail (collection != NULL);
153 	_tmp0_ = vala_loop_get_body (self);
154 	_tmp1_ = _tmp0_;
155 	vala_code_node_get_error_types ((ValaCodeNode*) _tmp1_, collection, source_reference);
156 }
157 
158 static gboolean
vala_loop_real_check(ValaCodeNode * base,ValaCodeContext * context)159 vala_loop_real_check (ValaCodeNode* base,
160                       ValaCodeContext* context)
161 {
162 	ValaLoop * self;
163 	gboolean _tmp0_;
164 	gboolean _tmp1_;
165 	ValaBlock* _tmp4_;
166 	ValaBlock* _tmp5_;
167 	gboolean _tmp6_;
168 	gboolean _tmp7_;
169 	gboolean result = FALSE;
170 	self = (ValaLoop*) base;
171 	g_return_val_if_fail (context != NULL, FALSE);
172 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
173 	_tmp1_ = _tmp0_;
174 	if (_tmp1_) {
175 		gboolean _tmp2_;
176 		gboolean _tmp3_;
177 		_tmp2_ = vala_code_node_get_error ((ValaCodeNode*) self);
178 		_tmp3_ = _tmp2_;
179 		result = !_tmp3_;
180 		return result;
181 	}
182 	vala_code_node_set_checked ((ValaCodeNode*) self, TRUE);
183 	_tmp4_ = vala_loop_get_body (self);
184 	_tmp5_ = _tmp4_;
185 	vala_code_node_check ((ValaCodeNode*) _tmp5_, context);
186 	_tmp6_ = vala_code_node_get_error ((ValaCodeNode*) self);
187 	_tmp7_ = _tmp6_;
188 	result = !_tmp7_;
189 	return result;
190 }
191 
192 static void
vala_loop_real_emit(ValaCodeNode * base,ValaCodeGenerator * codegen)193 vala_loop_real_emit (ValaCodeNode* base,
194                      ValaCodeGenerator* codegen)
195 {
196 	ValaLoop * self;
197 	self = (ValaLoop*) base;
198 	g_return_if_fail (codegen != NULL);
199 	vala_code_visitor_visit_loop ((ValaCodeVisitor*) codegen, self);
200 }
201 
202 static void
vala_loop_class_init(ValaLoopClass * klass,gpointer klass_data)203 vala_loop_class_init (ValaLoopClass * klass,
204                       gpointer klass_data)
205 {
206 	vala_loop_parent_class = g_type_class_peek_parent (klass);
207 	((ValaCodeNodeClass *) klass)->finalize = vala_loop_finalize;
208 	g_type_class_adjust_private_offset (klass, &ValaLoop_private_offset);
209 	((ValaCodeNodeClass *) klass)->accept = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_loop_real_accept;
210 	((ValaCodeNodeClass *) klass)->accept_children = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_loop_real_accept_children;
211 	((ValaCodeNodeClass *) klass)->get_error_types = (void (*) (ValaCodeNode*, ValaCollection*, ValaSourceReference*)) vala_loop_real_get_error_types;
212 	((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_loop_real_check;
213 	((ValaCodeNodeClass *) klass)->emit = (void (*) (ValaCodeNode*, ValaCodeGenerator*)) vala_loop_real_emit;
214 }
215 
216 static void
vala_loop_vala_statement_interface_init(ValaStatementIface * iface,gpointer iface_data)217 vala_loop_vala_statement_interface_init (ValaStatementIface * iface,
218                                          gpointer iface_data)
219 {
220 	vala_loop_vala_statement_parent_iface = g_type_interface_peek_parent (iface);
221 }
222 
223 static void
vala_loop_instance_init(ValaLoop * self,gpointer klass)224 vala_loop_instance_init (ValaLoop * self,
225                          gpointer klass)
226 {
227 	self->priv = vala_loop_get_instance_private (self);
228 }
229 
230 static void
vala_loop_finalize(ValaCodeNode * obj)231 vala_loop_finalize (ValaCodeNode * obj)
232 {
233 	ValaLoop * self;
234 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_LOOP, ValaLoop);
235 	_vala_code_node_unref0 (self->priv->_body);
236 	VALA_CODE_NODE_CLASS (vala_loop_parent_class)->finalize (obj);
237 }
238 
239 /**
240  * Represents an endless loop.
241  */
242 static GType
vala_loop_get_type_once(void)243 vala_loop_get_type_once (void)
244 {
245 	static const GTypeInfo g_define_type_info = { sizeof (ValaLoopClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_loop_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaLoop), 0, (GInstanceInitFunc) vala_loop_instance_init, NULL };
246 	static const GInterfaceInfo vala_statement_info = { (GInterfaceInitFunc) vala_loop_vala_statement_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
247 	GType vala_loop_type_id;
248 	vala_loop_type_id = g_type_register_static (VALA_TYPE_CODE_NODE, "ValaLoop", &g_define_type_info, 0);
249 	g_type_add_interface_static (vala_loop_type_id, VALA_TYPE_STATEMENT, &vala_statement_info);
250 	ValaLoop_private_offset = g_type_add_instance_private (vala_loop_type_id, sizeof (ValaLoopPrivate));
251 	return vala_loop_type_id;
252 }
253 
254 GType
vala_loop_get_type(void)255 vala_loop_get_type (void)
256 {
257 	static volatile gsize vala_loop_type_id__volatile = 0;
258 	if (g_once_init_enter (&vala_loop_type_id__volatile)) {
259 		GType vala_loop_type_id;
260 		vala_loop_type_id = vala_loop_get_type_once ();
261 		g_once_init_leave (&vala_loop_type_id__volatile, vala_loop_type_id);
262 	}
263 	return vala_loop_type_id__volatile;
264 }
265 
266