1 /* valaexpression.c generated by valac, the Vala compiler
2  * generated from valaexpression.vala, do not modify */
3 
4 /* valaexpression.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 
29 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
30 #define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))
31 
32 struct _ValaExpressionPrivate {
33 	ValaDataType* _value_type;
34 	ValaDataType* _formal_value_type;
35 	ValaDataType* _target_type;
36 	ValaDataType* _formal_target_type;
37 	ValaSymbol* _symbol_reference;
38 	gboolean _lvalue;
39 	ValaTargetValue* _target_value;
40 };
41 
42 static gint ValaExpression_private_offset;
43 static gpointer vala_expression_parent_class = NULL;
44 
45 static gboolean vala_expression_real_is_constant (ValaExpression* self);
46 static gboolean vala_expression_real_is_pure (ValaExpression* self);
47 static gboolean vala_expression_real_is_non_null (ValaExpression* self);
48 static gboolean vala_expression_real_is_accessible (ValaExpression* self,
49                                              ValaSymbol* sym);
50 static void vala_expression_finalize (ValaCodeNode * obj);
51 static GType vala_expression_get_type_once (void);
52 
53 static inline gpointer
vala_expression_get_instance_private(ValaExpression * self)54 vala_expression_get_instance_private (ValaExpression* self)
55 {
56 	return G_STRUCT_MEMBER_P (self, ValaExpression_private_offset);
57 }
58 
59 ValaDataType*
vala_expression_get_value_type(ValaExpression * self)60 vala_expression_get_value_type (ValaExpression* self)
61 {
62 	ValaDataType* result;
63 	ValaDataType* _tmp0_;
64 	g_return_val_if_fail (self != NULL, NULL);
65 	_tmp0_ = self->priv->_value_type;
66 	result = _tmp0_;
67 	return result;
68 }
69 
70 static gpointer
_vala_code_node_ref0(gpointer self)71 _vala_code_node_ref0 (gpointer self)
72 {
73 	return self ? vala_code_node_ref (self) : NULL;
74 }
75 
76 void
vala_expression_set_value_type(ValaExpression * self,ValaDataType * value)77 vala_expression_set_value_type (ValaExpression* self,
78                                 ValaDataType* value)
79 {
80 	ValaDataType* _tmp0_;
81 	g_return_if_fail (self != NULL);
82 	_tmp0_ = _vala_code_node_ref0 (value);
83 	_vala_code_node_unref0 (self->priv->_value_type);
84 	self->priv->_value_type = _tmp0_;
85 }
86 
87 ValaDataType*
vala_expression_get_formal_value_type(ValaExpression * self)88 vala_expression_get_formal_value_type (ValaExpression* self)
89 {
90 	ValaDataType* result;
91 	ValaDataType* _tmp0_;
92 	g_return_val_if_fail (self != NULL, NULL);
93 	_tmp0_ = self->priv->_formal_value_type;
94 	result = _tmp0_;
95 	return result;
96 }
97 
98 void
vala_expression_set_formal_value_type(ValaExpression * self,ValaDataType * value)99 vala_expression_set_formal_value_type (ValaExpression* self,
100                                        ValaDataType* value)
101 {
102 	ValaDataType* _tmp0_;
103 	g_return_if_fail (self != NULL);
104 	_tmp0_ = _vala_code_node_ref0 (value);
105 	_vala_code_node_unref0 (self->priv->_formal_value_type);
106 	self->priv->_formal_value_type = _tmp0_;
107 }
108 
109 ValaDataType*
vala_expression_get_target_type(ValaExpression * self)110 vala_expression_get_target_type (ValaExpression* self)
111 {
112 	ValaDataType* result;
113 	ValaDataType* _tmp0_;
114 	g_return_val_if_fail (self != NULL, NULL);
115 	_tmp0_ = self->priv->_target_type;
116 	result = _tmp0_;
117 	return result;
118 }
119 
120 void
vala_expression_set_target_type(ValaExpression * self,ValaDataType * value)121 vala_expression_set_target_type (ValaExpression* self,
122                                  ValaDataType* value)
123 {
124 	ValaDataType* _tmp0_;
125 	g_return_if_fail (self != NULL);
126 	_tmp0_ = _vala_code_node_ref0 (value);
127 	_vala_code_node_unref0 (self->priv->_target_type);
128 	self->priv->_target_type = _tmp0_;
129 }
130 
131 ValaDataType*
vala_expression_get_formal_target_type(ValaExpression * self)132 vala_expression_get_formal_target_type (ValaExpression* self)
133 {
134 	ValaDataType* result;
135 	ValaDataType* _tmp0_;
136 	g_return_val_if_fail (self != NULL, NULL);
137 	_tmp0_ = self->priv->_formal_target_type;
138 	result = _tmp0_;
139 	return result;
140 }
141 
142 void
vala_expression_set_formal_target_type(ValaExpression * self,ValaDataType * value)143 vala_expression_set_formal_target_type (ValaExpression* self,
144                                         ValaDataType* value)
145 {
146 	ValaDataType* _tmp0_;
147 	g_return_if_fail (self != NULL);
148 	_tmp0_ = _vala_code_node_ref0 (value);
149 	_vala_code_node_unref0 (self->priv->_formal_target_type);
150 	self->priv->_formal_target_type = _tmp0_;
151 }
152 
153 ValaSymbol*
vala_expression_get_symbol_reference(ValaExpression * self)154 vala_expression_get_symbol_reference (ValaExpression* self)
155 {
156 	ValaSymbol* result;
157 	ValaSymbol* _tmp0_;
158 	g_return_val_if_fail (self != NULL, NULL);
159 	_tmp0_ = self->priv->_symbol_reference;
160 	result = _tmp0_;
161 	return result;
162 }
163 
164 void
vala_expression_set_symbol_reference(ValaExpression * self,ValaSymbol * value)165 vala_expression_set_symbol_reference (ValaExpression* self,
166                                       ValaSymbol* value)
167 {
168 	g_return_if_fail (self != NULL);
169 	self->priv->_symbol_reference = value;
170 }
171 
172 gboolean
vala_expression_get_lvalue(ValaExpression * self)173 vala_expression_get_lvalue (ValaExpression* self)
174 {
175 	gboolean result;
176 	g_return_val_if_fail (self != NULL, FALSE);
177 	result = self->priv->_lvalue;
178 	return result;
179 }
180 
181 void
vala_expression_set_lvalue(ValaExpression * self,gboolean value)182 vala_expression_set_lvalue (ValaExpression* self,
183                             gboolean value)
184 {
185 	g_return_if_fail (self != NULL);
186 	self->priv->_lvalue = value;
187 }
188 
189 ValaTargetValue*
vala_expression_get_target_value(ValaExpression * self)190 vala_expression_get_target_value (ValaExpression* self)
191 {
192 	ValaTargetValue* result;
193 	ValaTargetValue* _tmp0_;
194 	g_return_val_if_fail (self != NULL, NULL);
195 	_tmp0_ = self->priv->_target_value;
196 	result = _tmp0_;
197 	return result;
198 }
199 
200 static gpointer
_vala_target_value_ref0(gpointer self)201 _vala_target_value_ref0 (gpointer self)
202 {
203 	return self ? vala_target_value_ref (self) : NULL;
204 }
205 
206 void
vala_expression_set_target_value(ValaExpression * self,ValaTargetValue * value)207 vala_expression_set_target_value (ValaExpression* self,
208                                   ValaTargetValue* value)
209 {
210 	ValaTargetValue* _tmp0_;
211 	g_return_if_fail (self != NULL);
212 	_tmp0_ = _vala_target_value_ref0 (value);
213 	_vala_target_value_unref0 (self->priv->_target_value);
214 	self->priv->_target_value = _tmp0_;
215 }
216 
217 /**
218  * Returns whether this expression is constant, i.e. whether this
219  * expression only consists of literals and other constants.
220  */
221 static gboolean
vala_expression_real_is_constant(ValaExpression * self)222 vala_expression_real_is_constant (ValaExpression* self)
223 {
224 	gboolean result = FALSE;
225 	result = FALSE;
226 	return result;
227 }
228 
229 gboolean
vala_expression_is_constant(ValaExpression * self)230 vala_expression_is_constant (ValaExpression* self)
231 {
232 	g_return_val_if_fail (self != NULL, FALSE);
233 	return VALA_EXPRESSION_GET_CLASS (self)->is_constant (self);
234 }
235 
236 /**
237  * Returns whether this expression is pure, i.e. whether this expression
238  * is free of side-effects.
239  */
240 static gboolean
vala_expression_real_is_pure(ValaExpression * self)241 vala_expression_real_is_pure (ValaExpression* self)
242 {
243 	gboolean _tmp0_ = FALSE;
244 	g_critical ("Type `%s' does not implement abstract method `vala_expression_is_pure'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
245 	return _tmp0_;
246 }
247 
248 gboolean
vala_expression_is_pure(ValaExpression * self)249 vala_expression_is_pure (ValaExpression* self)
250 {
251 	g_return_val_if_fail (self != NULL, FALSE);
252 	return VALA_EXPRESSION_GET_CLASS (self)->is_pure (self);
253 }
254 
255 /**
256  * Returns whether this expression is guaranteed to be non-null.
257  */
258 static gboolean
vala_expression_real_is_non_null(ValaExpression * self)259 vala_expression_real_is_non_null (ValaExpression* self)
260 {
261 	gboolean result = FALSE;
262 	result = FALSE;
263 	return result;
264 }
265 
266 gboolean
vala_expression_is_non_null(ValaExpression * self)267 vala_expression_is_non_null (ValaExpression* self)
268 {
269 	g_return_val_if_fail (self != NULL, FALSE);
270 	return VALA_EXPRESSION_GET_CLASS (self)->is_non_null (self);
271 }
272 
273 /**
274  * Check whether symbol_references in this expression are at least
275  * as accessible as the specified symbol.
276  */
277 static gboolean
vala_expression_real_is_accessible(ValaExpression * self,ValaSymbol * sym)278 vala_expression_real_is_accessible (ValaExpression* self,
279                                     ValaSymbol* sym)
280 {
281 	gboolean result = FALSE;
282 	g_return_val_if_fail (sym != NULL, FALSE);
283 	result = TRUE;
284 	return result;
285 }
286 
287 gboolean
vala_expression_is_accessible(ValaExpression * self,ValaSymbol * sym)288 vala_expression_is_accessible (ValaExpression* self,
289                                ValaSymbol* sym)
290 {
291 	g_return_val_if_fail (self != NULL, FALSE);
292 	return VALA_EXPRESSION_GET_CLASS (self)->is_accessible (self, sym);
293 }
294 
295 ValaStatement*
vala_expression_get_parent_statement(ValaExpression * self)296 vala_expression_get_parent_statement (ValaExpression* self)
297 {
298 	ValaStatement* result;
299 	ValaExpression* expr = NULL;
300 	ValaCodeNode* _tmp0_;
301 	ValaCodeNode* _tmp1_;
302 	ValaStatement* stmt = NULL;
303 	ValaCodeNode* _tmp2_;
304 	ValaCodeNode* _tmp3_;
305 	ValaLocalVariable* local = NULL;
306 	ValaCodeNode* _tmp4_;
307 	ValaCodeNode* _tmp5_;
308 	ValaMemberInitializer* initializer = NULL;
309 	ValaCodeNode* _tmp6_;
310 	ValaCodeNode* _tmp7_;
311 	ValaStatement* _tmp8_;
312 	g_return_val_if_fail (self != NULL, NULL);
313 	_tmp0_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
314 	_tmp1_ = _tmp0_;
315 	expr = VALA_IS_EXPRESSION (_tmp1_) ? ((ValaExpression*) _tmp1_) : NULL;
316 	_tmp2_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
317 	_tmp3_ = _tmp2_;
318 	stmt = VALA_IS_STATEMENT (_tmp3_) ? ((ValaStatement*) _tmp3_) : NULL;
319 	_tmp4_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
320 	_tmp5_ = _tmp4_;
321 	local = VALA_IS_LOCAL_VARIABLE (_tmp5_) ? ((ValaLocalVariable*) _tmp5_) : NULL;
322 	_tmp6_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
323 	_tmp7_ = _tmp6_;
324 	initializer = VALA_IS_MEMBER_INITIALIZER (_tmp7_) ? ((ValaMemberInitializer*) _tmp7_) : NULL;
325 	_tmp8_ = stmt;
326 	if (_tmp8_ != NULL) {
327 		ValaCodeNode* _tmp9_;
328 		ValaCodeNode* _tmp10_;
329 		_tmp9_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
330 		_tmp10_ = _tmp9_;
331 		result = G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_STATEMENT, ValaStatement);
332 		return result;
333 	} else {
334 		ValaExpression* _tmp11_;
335 		_tmp11_ = expr;
336 		if (_tmp11_ != NULL) {
337 			ValaExpression* _tmp12_;
338 			ValaStatement* _tmp13_;
339 			ValaStatement* _tmp14_;
340 			_tmp12_ = expr;
341 			_tmp13_ = vala_expression_get_parent_statement (_tmp12_);
342 			_tmp14_ = _tmp13_;
343 			result = _tmp14_;
344 			return result;
345 		} else {
346 			ValaLocalVariable* _tmp15_;
347 			_tmp15_ = local;
348 			if (_tmp15_ != NULL) {
349 				ValaLocalVariable* _tmp16_;
350 				ValaCodeNode* _tmp17_;
351 				ValaCodeNode* _tmp18_;
352 				_tmp16_ = local;
353 				_tmp17_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp16_);
354 				_tmp18_ = _tmp17_;
355 				result = G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_STATEMENT, ValaStatement);
356 				return result;
357 			} else {
358 				ValaMemberInitializer* _tmp19_;
359 				_tmp19_ = initializer;
360 				if (_tmp19_ != NULL) {
361 					ValaMemberInitializer* _tmp20_;
362 					ValaCodeNode* _tmp21_;
363 					ValaCodeNode* _tmp22_;
364 					ValaStatement* _tmp23_;
365 					ValaStatement* _tmp24_;
366 					_tmp20_ = initializer;
367 					_tmp21_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp20_);
368 					_tmp22_ = _tmp21_;
369 					_tmp23_ = vala_expression_get_parent_statement (G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, VALA_TYPE_EXPRESSION, ValaExpression));
370 					_tmp24_ = _tmp23_;
371 					result = _tmp24_;
372 					return result;
373 				} else {
374 					result = NULL;
375 					return result;
376 				}
377 			}
378 		}
379 	}
380 }
381 
382 void
vala_expression_insert_statement(ValaExpression * self,ValaBlock * block,ValaStatement * stmt)383 vala_expression_insert_statement (ValaExpression* self,
384                                   ValaBlock* block,
385                                   ValaStatement* stmt)
386 {
387 	ValaStatement* _tmp0_;
388 	ValaStatement* _tmp1_;
389 	g_return_if_fail (self != NULL);
390 	g_return_if_fail (block != NULL);
391 	g_return_if_fail (stmt != NULL);
392 	_tmp0_ = vala_expression_get_parent_statement (self);
393 	_tmp1_ = _tmp0_;
394 	vala_block_insert_before (block, _tmp1_, stmt);
395 }
396 
397 ValaExpression*
vala_expression_construct(GType object_type)398 vala_expression_construct (GType object_type)
399 {
400 	ValaExpression* self = NULL;
401 	self = (ValaExpression*) vala_code_node_construct (object_type);
402 	return self;
403 }
404 
405 static void
vala_expression_class_init(ValaExpressionClass * klass,gpointer klass_data)406 vala_expression_class_init (ValaExpressionClass * klass,
407                             gpointer klass_data)
408 {
409 	vala_expression_parent_class = g_type_class_peek_parent (klass);
410 	((ValaCodeNodeClass *) klass)->finalize = vala_expression_finalize;
411 	g_type_class_adjust_private_offset (klass, &ValaExpression_private_offset);
412 	((ValaExpressionClass *) klass)->is_constant = (gboolean (*) (ValaExpression*)) vala_expression_real_is_constant;
413 	((ValaExpressionClass *) klass)->is_pure = (gboolean (*) (ValaExpression*)) vala_expression_real_is_pure;
414 	((ValaExpressionClass *) klass)->is_non_null = (gboolean (*) (ValaExpression*)) vala_expression_real_is_non_null;
415 	((ValaExpressionClass *) klass)->is_accessible = (gboolean (*) (ValaExpression*, ValaSymbol*)) vala_expression_real_is_accessible;
416 }
417 
418 static void
vala_expression_instance_init(ValaExpression * self,gpointer klass)419 vala_expression_instance_init (ValaExpression * self,
420                                gpointer klass)
421 {
422 	self->priv = vala_expression_get_instance_private (self);
423 }
424 
425 static void
vala_expression_finalize(ValaCodeNode * obj)426 vala_expression_finalize (ValaCodeNode * obj)
427 {
428 	ValaExpression * self;
429 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_EXPRESSION, ValaExpression);
430 	_vala_code_node_unref0 (self->priv->_value_type);
431 	_vala_code_node_unref0 (self->priv->_formal_value_type);
432 	_vala_code_node_unref0 (self->priv->_target_type);
433 	_vala_code_node_unref0 (self->priv->_formal_target_type);
434 	_vala_target_value_unref0 (self->priv->_target_value);
435 	VALA_CODE_NODE_CLASS (vala_expression_parent_class)->finalize (obj);
436 }
437 
438 /**
439  * Base class for all code nodes that might be used as an expression.
440  */
441 static GType
vala_expression_get_type_once(void)442 vala_expression_get_type_once (void)
443 {
444 	static const GTypeInfo g_define_type_info = { sizeof (ValaExpressionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_expression_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaExpression), 0, (GInstanceInitFunc) vala_expression_instance_init, NULL };
445 	GType vala_expression_type_id;
446 	vala_expression_type_id = g_type_register_static (VALA_TYPE_CODE_NODE, "ValaExpression", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
447 	ValaExpression_private_offset = g_type_add_instance_private (vala_expression_type_id, sizeof (ValaExpressionPrivate));
448 	return vala_expression_type_id;
449 }
450 
451 GType
vala_expression_get_type(void)452 vala_expression_get_type (void)
453 {
454 	static volatile gsize vala_expression_type_id__volatile = 0;
455 	if (g_once_init_enter (&vala_expression_type_id__volatile)) {
456 		GType vala_expression_type_id;
457 		vala_expression_type_id = vala_expression_get_type_once ();
458 		g_once_init_leave (&vala_expression_type_id__volatile, vala_expression_type_id);
459 	}
460 	return vala_expression_type_id__volatile;
461 }
462 
463