1 /* valaexpressionstatement.c generated by valac, the Vala compiler
2  * generated from valaexpressionstatement.vala, do not modify */
3 
4 /* valaexpressionstatement.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 
31 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
32 
33 struct _ValaExpressionStatementPrivate {
34 	ValaExpression* _expression;
35 };
36 
37 static gint ValaExpressionStatement_private_offset;
38 static gpointer vala_expression_statement_parent_class = NULL;
39 static ValaStatementIface * vala_expression_statement_vala_statement_parent_iface = NULL;
40 
41 static void vala_expression_statement_real_accept (ValaCodeNode* base,
42                                             ValaCodeVisitor* visitor);
43 static void vala_expression_statement_real_accept_children (ValaCodeNode* base,
44                                                      ValaCodeVisitor* visitor);
45 static void vala_expression_statement_real_replace_expression (ValaCodeNode* base,
46                                                         ValaExpression* old_node,
47                                                         ValaExpression* new_node);
48 static gboolean vala_expression_statement_real_check (ValaCodeNode* base,
49                                                ValaCodeContext* context);
50 static void vala_expression_statement_real_get_error_types (ValaCodeNode* base,
51                                                      ValaCollection* collection,
52                                                      ValaSourceReference* source_reference);
53 static void vala_expression_statement_real_emit (ValaCodeNode* base,
54                                           ValaCodeGenerator* codegen);
55 static void vala_expression_statement_real_get_defined_variables (ValaCodeNode* base,
56                                                            ValaCollection* collection);
57 static void vala_expression_statement_real_get_used_variables (ValaCodeNode* base,
58                                                         ValaCollection* collection);
59 static void vala_expression_statement_finalize (ValaCodeNode * obj);
60 static GType vala_expression_statement_get_type_once (void);
61 
62 static inline gpointer
vala_expression_statement_get_instance_private(ValaExpressionStatement * self)63 vala_expression_statement_get_instance_private (ValaExpressionStatement* self)
64 {
65 	return G_STRUCT_MEMBER_P (self, ValaExpressionStatement_private_offset);
66 }
67 
68 ValaExpression*
vala_expression_statement_get_expression(ValaExpressionStatement * self)69 vala_expression_statement_get_expression (ValaExpressionStatement* self)
70 {
71 	ValaExpression* result;
72 	ValaExpression* _tmp0_;
73 	g_return_val_if_fail (self != NULL, NULL);
74 	_tmp0_ = self->priv->_expression;
75 	result = _tmp0_;
76 	return result;
77 }
78 
79 static gpointer
_vala_code_node_ref0(gpointer self)80 _vala_code_node_ref0 (gpointer self)
81 {
82 	return self ? vala_code_node_ref (self) : NULL;
83 }
84 
85 void
vala_expression_statement_set_expression(ValaExpressionStatement * self,ValaExpression * value)86 vala_expression_statement_set_expression (ValaExpressionStatement* self,
87                                           ValaExpression* value)
88 {
89 	ValaExpression* _tmp0_;
90 	ValaExpression* _tmp1_;
91 	g_return_if_fail (self != NULL);
92 	_tmp0_ = _vala_code_node_ref0 (value);
93 	_vala_code_node_unref0 (self->priv->_expression);
94 	self->priv->_expression = _tmp0_;
95 	_tmp1_ = self->priv->_expression;
96 	vala_code_node_set_parent_node ((ValaCodeNode*) _tmp1_, (ValaCodeNode*) self);
97 }
98 
99 /**
100  * Creates a new expression statement.
101  *
102  * @param expression        expression to evaluate
103  * @param source_reference  reference to source code
104  * @return                  newly created expression statement
105  */
106 ValaExpressionStatement*
vala_expression_statement_construct(GType object_type,ValaExpression * expression,ValaSourceReference * source_reference)107 vala_expression_statement_construct (GType object_type,
108                                      ValaExpression* expression,
109                                      ValaSourceReference* source_reference)
110 {
111 	ValaExpressionStatement* self = NULL;
112 	g_return_val_if_fail (expression != NULL, NULL);
113 	self = (ValaExpressionStatement*) vala_code_node_construct (object_type);
114 	vala_code_node_set_source_reference ((ValaCodeNode*) self, source_reference);
115 	vala_expression_statement_set_expression (self, expression);
116 	return self;
117 }
118 
119 ValaExpressionStatement*
vala_expression_statement_new(ValaExpression * expression,ValaSourceReference * source_reference)120 vala_expression_statement_new (ValaExpression* expression,
121                                ValaSourceReference* source_reference)
122 {
123 	return vala_expression_statement_construct (VALA_TYPE_EXPRESSION_STATEMENT, expression, source_reference);
124 }
125 
126 static void
vala_expression_statement_real_accept(ValaCodeNode * base,ValaCodeVisitor * visitor)127 vala_expression_statement_real_accept (ValaCodeNode* base,
128                                        ValaCodeVisitor* visitor)
129 {
130 	ValaExpressionStatement * self;
131 	self = (ValaExpressionStatement*) base;
132 	g_return_if_fail (visitor != NULL);
133 	vala_code_visitor_visit_expression_statement (visitor, self);
134 }
135 
136 static void
vala_expression_statement_real_accept_children(ValaCodeNode * base,ValaCodeVisitor * visitor)137 vala_expression_statement_real_accept_children (ValaCodeNode* base,
138                                                 ValaCodeVisitor* visitor)
139 {
140 	ValaExpressionStatement * self;
141 	ValaExpression* _tmp0_;
142 	ValaExpression* _tmp1_;
143 	self = (ValaExpressionStatement*) base;
144 	g_return_if_fail (visitor != NULL);
145 	_tmp0_ = vala_expression_statement_get_expression (self);
146 	_tmp1_ = _tmp0_;
147 	vala_code_node_accept ((ValaCodeNode*) _tmp1_, visitor);
148 }
149 
150 static void
vala_expression_statement_real_replace_expression(ValaCodeNode * base,ValaExpression * old_node,ValaExpression * new_node)151 vala_expression_statement_real_replace_expression (ValaCodeNode* base,
152                                                    ValaExpression* old_node,
153                                                    ValaExpression* new_node)
154 {
155 	ValaExpressionStatement * self;
156 	ValaExpression* _tmp0_;
157 	ValaExpression* _tmp1_;
158 	self = (ValaExpressionStatement*) base;
159 	g_return_if_fail (old_node != NULL);
160 	g_return_if_fail (new_node != NULL);
161 	_tmp0_ = vala_expression_statement_get_expression (self);
162 	_tmp1_ = _tmp0_;
163 	if (_tmp1_ == old_node) {
164 		vala_expression_statement_set_expression (self, new_node);
165 	}
166 }
167 
168 static gboolean
vala_expression_statement_real_check(ValaCodeNode * base,ValaCodeContext * context)169 vala_expression_statement_real_check (ValaCodeNode* base,
170                                       ValaCodeContext* context)
171 {
172 	ValaExpressionStatement * self;
173 	gboolean _tmp0_;
174 	gboolean _tmp1_;
175 	ValaExpression* _tmp4_;
176 	ValaExpression* _tmp5_;
177 	gboolean _tmp10_;
178 	gboolean _tmp11_;
179 	gboolean result = FALSE;
180 	self = (ValaExpressionStatement*) base;
181 	g_return_val_if_fail (context != NULL, FALSE);
182 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
183 	_tmp1_ = _tmp0_;
184 	if (_tmp1_) {
185 		gboolean _tmp2_;
186 		gboolean _tmp3_;
187 		_tmp2_ = vala_code_node_get_error ((ValaCodeNode*) self);
188 		_tmp3_ = _tmp2_;
189 		result = !_tmp3_;
190 		return result;
191 	}
192 	vala_code_node_set_checked ((ValaCodeNode*) self, TRUE);
193 	_tmp4_ = vala_expression_statement_get_expression (self);
194 	_tmp5_ = _tmp4_;
195 	if (!vala_code_node_check ((ValaCodeNode*) _tmp5_, context)) {
196 		vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
197 		result = FALSE;
198 		return result;
199 	} else {
200 		ValaExpression* _tmp6_;
201 		ValaExpression* _tmp7_;
202 		_tmp6_ = vala_expression_statement_get_expression (self);
203 		_tmp7_ = _tmp6_;
204 		if (VALA_IS_LITERAL (_tmp7_)) {
205 			ValaSourceReference* _tmp8_;
206 			ValaSourceReference* _tmp9_;
207 			_tmp8_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
208 			_tmp9_ = _tmp8_;
209 			vala_report_error (_tmp9_, "Literal expression not allowed as statement");
210 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
211 			result = FALSE;
212 			return result;
213 		}
214 	}
215 	_tmp10_ = vala_code_node_get_error ((ValaCodeNode*) self);
216 	_tmp11_ = _tmp10_;
217 	result = !_tmp11_;
218 	return result;
219 }
220 
221 static void
vala_expression_statement_real_get_error_types(ValaCodeNode * base,ValaCollection * collection,ValaSourceReference * source_reference)222 vala_expression_statement_real_get_error_types (ValaCodeNode* base,
223                                                 ValaCollection* collection,
224                                                 ValaSourceReference* source_reference)
225 {
226 	ValaExpressionStatement * self;
227 	ValaExpression* _tmp0_;
228 	ValaExpression* _tmp1_;
229 	self = (ValaExpressionStatement*) base;
230 	g_return_if_fail (collection != NULL);
231 	_tmp0_ = vala_expression_statement_get_expression (self);
232 	_tmp1_ = _tmp0_;
233 	vala_code_node_get_error_types ((ValaCodeNode*) _tmp1_, collection, source_reference);
234 }
235 
236 static void
vala_expression_statement_real_emit(ValaCodeNode * base,ValaCodeGenerator * codegen)237 vala_expression_statement_real_emit (ValaCodeNode* base,
238                                      ValaCodeGenerator* codegen)
239 {
240 	ValaExpressionStatement * self;
241 	ValaExpression* _tmp0_;
242 	ValaExpression* _tmp1_;
243 	self = (ValaExpressionStatement*) base;
244 	g_return_if_fail (codegen != NULL);
245 	_tmp0_ = vala_expression_statement_get_expression (self);
246 	_tmp1_ = _tmp0_;
247 	vala_code_node_emit ((ValaCodeNode*) _tmp1_, codegen);
248 	vala_code_visitor_visit_expression_statement ((ValaCodeVisitor*) codegen, self);
249 }
250 
251 static void
vala_expression_statement_real_get_defined_variables(ValaCodeNode * base,ValaCollection * collection)252 vala_expression_statement_real_get_defined_variables (ValaCodeNode* base,
253                                                       ValaCollection* collection)
254 {
255 	ValaExpressionStatement * self;
256 	ValaExpression* _tmp0_;
257 	ValaExpression* _tmp1_;
258 	self = (ValaExpressionStatement*) base;
259 	g_return_if_fail (collection != NULL);
260 	_tmp0_ = vala_expression_statement_get_expression (self);
261 	_tmp1_ = _tmp0_;
262 	vala_code_node_get_defined_variables ((ValaCodeNode*) _tmp1_, collection);
263 }
264 
265 static void
vala_expression_statement_real_get_used_variables(ValaCodeNode * base,ValaCollection * collection)266 vala_expression_statement_real_get_used_variables (ValaCodeNode* base,
267                                                    ValaCollection* collection)
268 {
269 	ValaExpressionStatement * self;
270 	ValaExpression* _tmp0_;
271 	ValaExpression* _tmp1_;
272 	self = (ValaExpressionStatement*) base;
273 	g_return_if_fail (collection != NULL);
274 	_tmp0_ = vala_expression_statement_get_expression (self);
275 	_tmp1_ = _tmp0_;
276 	vala_code_node_get_used_variables ((ValaCodeNode*) _tmp1_, collection);
277 }
278 
279 static void
vala_expression_statement_class_init(ValaExpressionStatementClass * klass,gpointer klass_data)280 vala_expression_statement_class_init (ValaExpressionStatementClass * klass,
281                                       gpointer klass_data)
282 {
283 	vala_expression_statement_parent_class = g_type_class_peek_parent (klass);
284 	((ValaCodeNodeClass *) klass)->finalize = vala_expression_statement_finalize;
285 	g_type_class_adjust_private_offset (klass, &ValaExpressionStatement_private_offset);
286 	((ValaCodeNodeClass *) klass)->accept = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_expression_statement_real_accept;
287 	((ValaCodeNodeClass *) klass)->accept_children = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_expression_statement_real_accept_children;
288 	((ValaCodeNodeClass *) klass)->replace_expression = (void (*) (ValaCodeNode*, ValaExpression*, ValaExpression*)) vala_expression_statement_real_replace_expression;
289 	((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_expression_statement_real_check;
290 	((ValaCodeNodeClass *) klass)->get_error_types = (void (*) (ValaCodeNode*, ValaCollection*, ValaSourceReference*)) vala_expression_statement_real_get_error_types;
291 	((ValaCodeNodeClass *) klass)->emit = (void (*) (ValaCodeNode*, ValaCodeGenerator*)) vala_expression_statement_real_emit;
292 	((ValaCodeNodeClass *) klass)->get_defined_variables = (void (*) (ValaCodeNode*, ValaCollection*)) vala_expression_statement_real_get_defined_variables;
293 	((ValaCodeNodeClass *) klass)->get_used_variables = (void (*) (ValaCodeNode*, ValaCollection*)) vala_expression_statement_real_get_used_variables;
294 }
295 
296 static void
vala_expression_statement_vala_statement_interface_init(ValaStatementIface * iface,gpointer iface_data)297 vala_expression_statement_vala_statement_interface_init (ValaStatementIface * iface,
298                                                          gpointer iface_data)
299 {
300 	vala_expression_statement_vala_statement_parent_iface = g_type_interface_peek_parent (iface);
301 }
302 
303 static void
vala_expression_statement_instance_init(ValaExpressionStatement * self,gpointer klass)304 vala_expression_statement_instance_init (ValaExpressionStatement * self,
305                                          gpointer klass)
306 {
307 	self->priv = vala_expression_statement_get_instance_private (self);
308 }
309 
310 static void
vala_expression_statement_finalize(ValaCodeNode * obj)311 vala_expression_statement_finalize (ValaCodeNode * obj)
312 {
313 	ValaExpressionStatement * self;
314 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_EXPRESSION_STATEMENT, ValaExpressionStatement);
315 	_vala_code_node_unref0 (self->priv->_expression);
316 	VALA_CODE_NODE_CLASS (vala_expression_statement_parent_class)->finalize (obj);
317 }
318 
319 /**
320  * A code statement that evaluates a given expression. The value computed by the
321  * expression, if any, is discarded.
322  */
323 static GType
vala_expression_statement_get_type_once(void)324 vala_expression_statement_get_type_once (void)
325 {
326 	static const GTypeInfo g_define_type_info = { sizeof (ValaExpressionStatementClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_expression_statement_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaExpressionStatement), 0, (GInstanceInitFunc) vala_expression_statement_instance_init, NULL };
327 	static const GInterfaceInfo vala_statement_info = { (GInterfaceInitFunc) vala_expression_statement_vala_statement_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
328 	GType vala_expression_statement_type_id;
329 	vala_expression_statement_type_id = g_type_register_static (VALA_TYPE_CODE_NODE, "ValaExpressionStatement", &g_define_type_info, 0);
330 	g_type_add_interface_static (vala_expression_statement_type_id, VALA_TYPE_STATEMENT, &vala_statement_info);
331 	ValaExpressionStatement_private_offset = g_type_add_instance_private (vala_expression_statement_type_id, sizeof (ValaExpressionStatementPrivate));
332 	return vala_expression_statement_type_id;
333 }
334 
335 GType
vala_expression_statement_get_type(void)336 vala_expression_statement_get_type (void)
337 {
338 	static volatile gsize vala_expression_statement_type_id__volatile = 0;
339 	if (g_once_init_enter (&vala_expression_statement_type_id__volatile)) {
340 		GType vala_expression_statement_type_id;
341 		vala_expression_statement_type_id = vala_expression_statement_get_type_once ();
342 		g_once_init_leave (&vala_expression_statement_type_id__volatile, vala_expression_statement_type_id);
343 	}
344 	return vala_expression_statement_type_id__volatile;
345 }
346 
347