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