1 /* valapostfixexpression.c generated by valac, the Vala compiler
2  * generated from valapostfixexpression.vala, do not modify */
3 
4 /* valapostfixexpression.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 
36 struct _ValaPostfixExpressionPrivate {
37 	gboolean _increment;
38 	ValaExpression* _inner;
39 };
40 
41 static gint ValaPostfixExpression_private_offset;
42 static gpointer vala_postfix_expression_parent_class = NULL;
43 
44 static void vala_postfix_expression_real_accept (ValaCodeNode* base,
45                                           ValaCodeVisitor* visitor);
46 static void vala_postfix_expression_real_accept_children (ValaCodeNode* base,
47                                                    ValaCodeVisitor* visitor);
48 static gboolean vala_postfix_expression_real_is_pure (ValaExpression* base);
49 static gboolean vala_postfix_expression_real_is_accessible (ValaExpression* base,
50                                                      ValaSymbol* sym);
51 static void vala_postfix_expression_real_get_defined_variables (ValaCodeNode* base,
52                                                          ValaCollection* collection);
53 static void vala_postfix_expression_real_get_used_variables (ValaCodeNode* base,
54                                                       ValaCollection* collection);
55 static void vala_postfix_expression_real_replace_expression (ValaCodeNode* base,
56                                                       ValaExpression* old_node,
57                                                       ValaExpression* new_node);
58 static gboolean vala_postfix_expression_real_check (ValaCodeNode* base,
59                                              ValaCodeContext* context);
60 static void vala_postfix_expression_real_emit (ValaCodeNode* base,
61                                         ValaCodeGenerator* codegen);
62 static gchar* vala_postfix_expression_real_to_string (ValaCodeNode* base);
63 static void vala_postfix_expression_finalize (ValaCodeNode * obj);
64 static GType vala_postfix_expression_get_type_once (void);
65 
66 static inline gpointer
vala_postfix_expression_get_instance_private(ValaPostfixExpression * self)67 vala_postfix_expression_get_instance_private (ValaPostfixExpression* self)
68 {
69 	return G_STRUCT_MEMBER_P (self, ValaPostfixExpression_private_offset);
70 }
71 
72 ValaExpression*
vala_postfix_expression_get_inner(ValaPostfixExpression * self)73 vala_postfix_expression_get_inner (ValaPostfixExpression* self)
74 {
75 	ValaExpression* result;
76 	ValaExpression* _tmp0_;
77 	g_return_val_if_fail (self != NULL, NULL);
78 	_tmp0_ = self->priv->_inner;
79 	result = _tmp0_;
80 	return result;
81 }
82 
83 static gpointer
_vala_code_node_ref0(gpointer self)84 _vala_code_node_ref0 (gpointer self)
85 {
86 	return self ? vala_code_node_ref (self) : NULL;
87 }
88 
89 void
vala_postfix_expression_set_inner(ValaPostfixExpression * self,ValaExpression * value)90 vala_postfix_expression_set_inner (ValaPostfixExpression* self,
91                                    ValaExpression* value)
92 {
93 	ValaExpression* _tmp0_;
94 	ValaExpression* _tmp1_;
95 	g_return_if_fail (self != NULL);
96 	_tmp0_ = _vala_code_node_ref0 (value);
97 	_vala_code_node_unref0 (self->priv->_inner);
98 	self->priv->_inner = _tmp0_;
99 	_tmp1_ = self->priv->_inner;
100 	vala_code_node_set_parent_node ((ValaCodeNode*) _tmp1_, (ValaCodeNode*) self);
101 }
102 
103 gboolean
vala_postfix_expression_get_increment(ValaPostfixExpression * self)104 vala_postfix_expression_get_increment (ValaPostfixExpression* self)
105 {
106 	gboolean result;
107 	g_return_val_if_fail (self != NULL, FALSE);
108 	result = self->priv->_increment;
109 	return result;
110 }
111 
112 void
vala_postfix_expression_set_increment(ValaPostfixExpression * self,gboolean value)113 vala_postfix_expression_set_increment (ValaPostfixExpression* self,
114                                        gboolean value)
115 {
116 	g_return_if_fail (self != NULL);
117 	self->priv->_increment = value;
118 }
119 
120 /**
121  * Creates a new postfix expression.
122  *
123  * @param _inner  operand expression
124  * @param inc     true for increment, false for decrement
125  * @param source  reference to source code
126  * @return newly  created postfix expression
127  */
128 ValaPostfixExpression*
vala_postfix_expression_construct(GType object_type,ValaExpression * _inner,gboolean inc,ValaSourceReference * source)129 vala_postfix_expression_construct (GType object_type,
130                                    ValaExpression* _inner,
131                                    gboolean inc,
132                                    ValaSourceReference* source)
133 {
134 	ValaPostfixExpression* self = NULL;
135 	g_return_val_if_fail (_inner != NULL, NULL);
136 	self = (ValaPostfixExpression*) vala_expression_construct (object_type);
137 	vala_postfix_expression_set_inner (self, _inner);
138 	vala_postfix_expression_set_increment (self, inc);
139 	vala_code_node_set_source_reference ((ValaCodeNode*) self, source);
140 	return self;
141 }
142 
143 ValaPostfixExpression*
vala_postfix_expression_new(ValaExpression * _inner,gboolean inc,ValaSourceReference * source)144 vala_postfix_expression_new (ValaExpression* _inner,
145                              gboolean inc,
146                              ValaSourceReference* source)
147 {
148 	return vala_postfix_expression_construct (VALA_TYPE_POSTFIX_EXPRESSION, _inner, inc, source);
149 }
150 
151 static void
vala_postfix_expression_real_accept(ValaCodeNode * base,ValaCodeVisitor * visitor)152 vala_postfix_expression_real_accept (ValaCodeNode* base,
153                                      ValaCodeVisitor* visitor)
154 {
155 	ValaPostfixExpression * self;
156 	self = (ValaPostfixExpression*) base;
157 	g_return_if_fail (visitor != NULL);
158 	vala_code_visitor_visit_postfix_expression (visitor, self);
159 	vala_code_visitor_visit_expression (visitor, (ValaExpression*) self);
160 }
161 
162 static void
vala_postfix_expression_real_accept_children(ValaCodeNode * base,ValaCodeVisitor * visitor)163 vala_postfix_expression_real_accept_children (ValaCodeNode* base,
164                                               ValaCodeVisitor* visitor)
165 {
166 	ValaPostfixExpression * self;
167 	ValaExpression* _tmp0_;
168 	ValaExpression* _tmp1_;
169 	self = (ValaPostfixExpression*) base;
170 	g_return_if_fail (visitor != NULL);
171 	_tmp0_ = vala_postfix_expression_get_inner (self);
172 	_tmp1_ = _tmp0_;
173 	vala_code_node_accept ((ValaCodeNode*) _tmp1_, visitor);
174 }
175 
176 static gboolean
vala_postfix_expression_real_is_pure(ValaExpression * base)177 vala_postfix_expression_real_is_pure (ValaExpression* base)
178 {
179 	ValaPostfixExpression * self;
180 	gboolean result = FALSE;
181 	self = (ValaPostfixExpression*) base;
182 	result = FALSE;
183 	return result;
184 }
185 
186 static gboolean
vala_postfix_expression_real_is_accessible(ValaExpression * base,ValaSymbol * sym)187 vala_postfix_expression_real_is_accessible (ValaExpression* base,
188                                             ValaSymbol* sym)
189 {
190 	ValaPostfixExpression * self;
191 	ValaExpression* _tmp0_;
192 	ValaExpression* _tmp1_;
193 	gboolean result = FALSE;
194 	self = (ValaPostfixExpression*) base;
195 	g_return_val_if_fail (sym != NULL, FALSE);
196 	_tmp0_ = vala_postfix_expression_get_inner (self);
197 	_tmp1_ = _tmp0_;
198 	result = vala_expression_is_accessible (_tmp1_, sym);
199 	return result;
200 }
201 
202 static void
vala_postfix_expression_real_get_defined_variables(ValaCodeNode * base,ValaCollection * collection)203 vala_postfix_expression_real_get_defined_variables (ValaCodeNode* base,
204                                                     ValaCollection* collection)
205 {
206 	ValaPostfixExpression * self;
207 	ValaExpression* _tmp0_;
208 	ValaExpression* _tmp1_;
209 	ValaLocalVariable* local = NULL;
210 	ValaExpression* _tmp2_;
211 	ValaExpression* _tmp3_;
212 	ValaSymbol* _tmp4_;
213 	ValaSymbol* _tmp5_;
214 	ValaParameter* param = NULL;
215 	ValaExpression* _tmp6_;
216 	ValaExpression* _tmp7_;
217 	ValaSymbol* _tmp8_;
218 	ValaSymbol* _tmp9_;
219 	ValaLocalVariable* _tmp10_;
220 	self = (ValaPostfixExpression*) base;
221 	g_return_if_fail (collection != NULL);
222 	_tmp0_ = vala_postfix_expression_get_inner (self);
223 	_tmp1_ = _tmp0_;
224 	vala_code_node_get_defined_variables ((ValaCodeNode*) _tmp1_, collection);
225 	_tmp2_ = vala_postfix_expression_get_inner (self);
226 	_tmp3_ = _tmp2_;
227 	_tmp4_ = vala_expression_get_symbol_reference (_tmp3_);
228 	_tmp5_ = _tmp4_;
229 	local = VALA_IS_LOCAL_VARIABLE (_tmp5_) ? ((ValaLocalVariable*) _tmp5_) : NULL;
230 	_tmp6_ = vala_postfix_expression_get_inner (self);
231 	_tmp7_ = _tmp6_;
232 	_tmp8_ = vala_expression_get_symbol_reference (_tmp7_);
233 	_tmp9_ = _tmp8_;
234 	param = VALA_IS_PARAMETER (_tmp9_) ? ((ValaParameter*) _tmp9_) : NULL;
235 	_tmp10_ = local;
236 	if (_tmp10_ != NULL) {
237 		ValaLocalVariable* _tmp11_;
238 		_tmp11_ = local;
239 		vala_collection_add (collection, (ValaVariable*) _tmp11_);
240 	} else {
241 		gboolean _tmp12_ = FALSE;
242 		ValaParameter* _tmp13_;
243 		_tmp13_ = param;
244 		if (_tmp13_ != NULL) {
245 			ValaParameter* _tmp14_;
246 			ValaParameterDirection _tmp15_;
247 			ValaParameterDirection _tmp16_;
248 			_tmp14_ = param;
249 			_tmp15_ = vala_parameter_get_direction (_tmp14_);
250 			_tmp16_ = _tmp15_;
251 			_tmp12_ = _tmp16_ == VALA_PARAMETER_DIRECTION_OUT;
252 		} else {
253 			_tmp12_ = FALSE;
254 		}
255 		if (_tmp12_) {
256 			ValaParameter* _tmp17_;
257 			_tmp17_ = param;
258 			vala_collection_add (collection, (ValaVariable*) _tmp17_);
259 		}
260 	}
261 }
262 
263 static void
vala_postfix_expression_real_get_used_variables(ValaCodeNode * base,ValaCollection * collection)264 vala_postfix_expression_real_get_used_variables (ValaCodeNode* base,
265                                                  ValaCollection* collection)
266 {
267 	ValaPostfixExpression * self;
268 	ValaExpression* _tmp0_;
269 	ValaExpression* _tmp1_;
270 	self = (ValaPostfixExpression*) base;
271 	g_return_if_fail (collection != NULL);
272 	_tmp0_ = vala_postfix_expression_get_inner (self);
273 	_tmp1_ = _tmp0_;
274 	vala_code_node_get_used_variables ((ValaCodeNode*) _tmp1_, collection);
275 }
276 
277 static void
vala_postfix_expression_real_replace_expression(ValaCodeNode * base,ValaExpression * old_node,ValaExpression * new_node)278 vala_postfix_expression_real_replace_expression (ValaCodeNode* base,
279                                                  ValaExpression* old_node,
280                                                  ValaExpression* new_node)
281 {
282 	ValaPostfixExpression * self;
283 	ValaExpression* _tmp0_;
284 	ValaExpression* _tmp1_;
285 	self = (ValaPostfixExpression*) base;
286 	g_return_if_fail (old_node != NULL);
287 	g_return_if_fail (new_node != NULL);
288 	_tmp0_ = vala_postfix_expression_get_inner (self);
289 	_tmp1_ = _tmp0_;
290 	if (_tmp1_ == old_node) {
291 		vala_postfix_expression_set_inner (self, new_node);
292 	}
293 }
294 
295 static gboolean
vala_postfix_expression_real_check(ValaCodeNode * base,ValaCodeContext * context)296 vala_postfix_expression_real_check (ValaCodeNode* base,
297                                     ValaCodeContext* context)
298 {
299 	ValaPostfixExpression * self;
300 	gboolean _tmp0_;
301 	gboolean _tmp1_;
302 	ValaExpression* _tmp4_;
303 	ValaExpression* _tmp5_;
304 	ValaExpression* _tmp6_;
305 	ValaExpression* _tmp7_;
306 	gboolean _tmp8_ = FALSE;
307 	gboolean _tmp9_ = FALSE;
308 	ValaExpression* _tmp10_;
309 	ValaExpression* _tmp11_;
310 	ValaDataType* _tmp12_;
311 	ValaDataType* _tmp13_;
312 	ValaExpression* _tmp24_;
313 	ValaExpression* _tmp25_;
314 	ValaExpression* _tmp60_;
315 	ValaExpression* _tmp61_;
316 	ValaExpression* _tmp88_;
317 	ValaExpression* _tmp89_;
318 	ValaDataType* _tmp90_;
319 	ValaDataType* _tmp91_;
320 	gboolean _tmp92_;
321 	gboolean _tmp93_;
322 	gboolean result = FALSE;
323 	self = (ValaPostfixExpression*) base;
324 	g_return_val_if_fail (context != NULL, FALSE);
325 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
326 	_tmp1_ = _tmp0_;
327 	if (_tmp1_) {
328 		gboolean _tmp2_;
329 		gboolean _tmp3_;
330 		_tmp2_ = vala_code_node_get_error ((ValaCodeNode*) self);
331 		_tmp3_ = _tmp2_;
332 		result = !_tmp3_;
333 		return result;
334 	}
335 	vala_code_node_set_checked ((ValaCodeNode*) self, TRUE);
336 	_tmp4_ = vala_postfix_expression_get_inner (self);
337 	_tmp5_ = _tmp4_;
338 	vala_expression_set_lvalue (_tmp5_, TRUE);
339 	_tmp6_ = vala_postfix_expression_get_inner (self);
340 	_tmp7_ = _tmp6_;
341 	if (!vala_code_node_check ((ValaCodeNode*) _tmp7_, context)) {
342 		vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
343 		result = FALSE;
344 		return result;
345 	}
346 	_tmp10_ = vala_postfix_expression_get_inner (self);
347 	_tmp11_ = _tmp10_;
348 	_tmp12_ = vala_expression_get_value_type (_tmp11_);
349 	_tmp13_ = _tmp12_;
350 	if (!VALA_IS_INTEGER_TYPE (_tmp13_)) {
351 		ValaExpression* _tmp14_;
352 		ValaExpression* _tmp15_;
353 		ValaDataType* _tmp16_;
354 		ValaDataType* _tmp17_;
355 		_tmp14_ = vala_postfix_expression_get_inner (self);
356 		_tmp15_ = _tmp14_;
357 		_tmp16_ = vala_expression_get_value_type (_tmp15_);
358 		_tmp17_ = _tmp16_;
359 		_tmp9_ = !VALA_IS_FLOATING_TYPE (_tmp17_);
360 	} else {
361 		_tmp9_ = FALSE;
362 	}
363 	if (_tmp9_) {
364 		ValaExpression* _tmp18_;
365 		ValaExpression* _tmp19_;
366 		ValaDataType* _tmp20_;
367 		ValaDataType* _tmp21_;
368 		_tmp18_ = vala_postfix_expression_get_inner (self);
369 		_tmp19_ = _tmp18_;
370 		_tmp20_ = vala_expression_get_value_type (_tmp19_);
371 		_tmp21_ = _tmp20_;
372 		_tmp8_ = !VALA_IS_POINTER_TYPE (_tmp21_);
373 	} else {
374 		_tmp8_ = FALSE;
375 	}
376 	if (_tmp8_) {
377 		ValaSourceReference* _tmp22_;
378 		ValaSourceReference* _tmp23_;
379 		vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
380 		_tmp22_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
381 		_tmp23_ = _tmp22_;
382 		vala_report_error (_tmp23_, "unsupported lvalue in postfix expression");
383 		result = FALSE;
384 		return result;
385 	}
386 	_tmp24_ = vala_postfix_expression_get_inner (self);
387 	_tmp25_ = _tmp24_;
388 	if (VALA_IS_MEMBER_ACCESS (_tmp25_)) {
389 		ValaMemberAccess* ma = NULL;
390 		ValaExpression* _tmp26_;
391 		ValaExpression* _tmp27_;
392 		ValaMemberAccess* _tmp28_;
393 		gboolean _tmp29_;
394 		gboolean _tmp30_;
395 		gboolean _tmp40_ = FALSE;
396 		ValaMemberAccess* _tmp41_;
397 		gboolean _tmp42_;
398 		gboolean _tmp43_;
399 		_tmp26_ = vala_postfix_expression_get_inner (self);
400 		_tmp27_ = _tmp26_;
401 		ma = G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess);
402 		_tmp28_ = ma;
403 		_tmp29_ = vala_member_access_get_prototype_access (_tmp28_);
404 		_tmp30_ = _tmp29_;
405 		if (_tmp30_) {
406 			ValaSourceReference* _tmp31_;
407 			ValaSourceReference* _tmp32_;
408 			ValaMemberAccess* _tmp33_;
409 			ValaSymbol* _tmp34_;
410 			ValaSymbol* _tmp35_;
411 			gchar* _tmp36_;
412 			gchar* _tmp37_;
413 			gchar* _tmp38_;
414 			gchar* _tmp39_;
415 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
416 			_tmp31_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
417 			_tmp32_ = _tmp31_;
418 			_tmp33_ = ma;
419 			_tmp34_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp33_);
420 			_tmp35_ = _tmp34_;
421 			_tmp36_ = vala_symbol_get_full_name (_tmp35_);
422 			_tmp37_ = _tmp36_;
423 			_tmp38_ = g_strdup_printf ("Access to instance member `%s' denied", _tmp37_);
424 			_tmp39_ = _tmp38_;
425 			vala_report_error (_tmp32_, _tmp39_);
426 			_g_free0 (_tmp39_);
427 			_g_free0 (_tmp37_);
428 			result = FALSE;
429 			return result;
430 		}
431 		_tmp41_ = ma;
432 		_tmp42_ = vala_code_node_get_error ((ValaCodeNode*) _tmp41_);
433 		_tmp43_ = _tmp42_;
434 		if (_tmp43_) {
435 			_tmp40_ = TRUE;
436 		} else {
437 			ValaMemberAccess* _tmp44_;
438 			ValaSymbol* _tmp45_;
439 			ValaSymbol* _tmp46_;
440 			_tmp44_ = ma;
441 			_tmp45_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp44_);
442 			_tmp46_ = _tmp45_;
443 			_tmp40_ = _tmp46_ == NULL;
444 		}
445 		if (_tmp40_) {
446 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
447 			result = FALSE;
448 			return result;
449 		}
450 	} else {
451 		ValaExpression* _tmp47_;
452 		ValaExpression* _tmp48_;
453 		_tmp47_ = vala_postfix_expression_get_inner (self);
454 		_tmp48_ = _tmp47_;
455 		if (VALA_IS_ELEMENT_ACCESS (_tmp48_)) {
456 			ValaElementAccess* ea = NULL;
457 			ValaExpression* _tmp49_;
458 			ValaExpression* _tmp50_;
459 			ValaElementAccess* _tmp51_;
460 			ValaExpression* _tmp52_;
461 			ValaExpression* _tmp53_;
462 			ValaDataType* _tmp54_;
463 			ValaDataType* _tmp55_;
464 			_tmp49_ = vala_postfix_expression_get_inner (self);
465 			_tmp50_ = _tmp49_;
466 			ea = G_TYPE_CHECK_INSTANCE_CAST (_tmp50_, VALA_TYPE_ELEMENT_ACCESS, ValaElementAccess);
467 			_tmp51_ = ea;
468 			_tmp52_ = vala_element_access_get_container (_tmp51_);
469 			_tmp53_ = _tmp52_;
470 			_tmp54_ = vala_expression_get_value_type (_tmp53_);
471 			_tmp55_ = _tmp54_;
472 			if (!VALA_IS_ARRAY_TYPE (_tmp55_)) {
473 				ValaSourceReference* _tmp56_;
474 				ValaSourceReference* _tmp57_;
475 				vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
476 				_tmp56_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
477 				_tmp57_ = _tmp56_;
478 				vala_report_error (_tmp57_, "unsupported lvalue in postfix expression");
479 				result = FALSE;
480 				return result;
481 			}
482 		} else {
483 			ValaSourceReference* _tmp58_;
484 			ValaSourceReference* _tmp59_;
485 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
486 			_tmp58_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
487 			_tmp59_ = _tmp58_;
488 			vala_report_error (_tmp59_, "unsupported lvalue in postfix expression");
489 			result = FALSE;
490 			return result;
491 		}
492 	}
493 	_tmp60_ = vala_postfix_expression_get_inner (self);
494 	_tmp61_ = _tmp60_;
495 	if (VALA_IS_MEMBER_ACCESS (_tmp61_)) {
496 		ValaMemberAccess* ma = NULL;
497 		ValaExpression* _tmp62_;
498 		ValaExpression* _tmp63_;
499 		ValaMemberAccess* _tmp64_;
500 		ValaSymbol* _tmp65_;
501 		ValaSymbol* _tmp66_;
502 		_tmp62_ = vala_postfix_expression_get_inner (self);
503 		_tmp63_ = _tmp62_;
504 		ma = G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess);
505 		_tmp64_ = ma;
506 		_tmp65_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp64_);
507 		_tmp66_ = _tmp65_;
508 		if (VALA_IS_PROPERTY (_tmp66_)) {
509 			ValaProperty* prop = NULL;
510 			ValaMemberAccess* _tmp67_;
511 			ValaSymbol* _tmp68_;
512 			ValaSymbol* _tmp69_;
513 			gboolean _tmp70_ = FALSE;
514 			ValaProperty* _tmp71_;
515 			ValaPropertyAccessor* _tmp72_;
516 			ValaPropertyAccessor* _tmp73_;
517 			_tmp67_ = ma;
518 			_tmp68_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp67_);
519 			_tmp69_ = _tmp68_;
520 			prop = G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_PROPERTY, ValaProperty);
521 			_tmp71_ = prop;
522 			_tmp72_ = vala_property_get_set_accessor (_tmp71_);
523 			_tmp73_ = _tmp72_;
524 			if (_tmp73_ == NULL) {
525 				_tmp70_ = TRUE;
526 			} else {
527 				ValaProperty* _tmp74_;
528 				ValaPropertyAccessor* _tmp75_;
529 				ValaPropertyAccessor* _tmp76_;
530 				gboolean _tmp77_;
531 				gboolean _tmp78_;
532 				_tmp74_ = prop;
533 				_tmp75_ = vala_property_get_set_accessor (_tmp74_);
534 				_tmp76_ = _tmp75_;
535 				_tmp77_ = vala_property_accessor_get_writable (_tmp76_);
536 				_tmp78_ = _tmp77_;
537 				_tmp70_ = !_tmp78_;
538 			}
539 			if (_tmp70_) {
540 				ValaMemberAccess* _tmp79_;
541 				ValaMemberAccess* _tmp80_;
542 				ValaSourceReference* _tmp81_;
543 				ValaSourceReference* _tmp82_;
544 				ValaProperty* _tmp83_;
545 				gchar* _tmp84_;
546 				gchar* _tmp85_;
547 				gchar* _tmp86_;
548 				gchar* _tmp87_;
549 				_tmp79_ = ma;
550 				vala_code_node_set_error ((ValaCodeNode*) _tmp79_, TRUE);
551 				_tmp80_ = ma;
552 				_tmp81_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp80_);
553 				_tmp82_ = _tmp81_;
554 				_tmp83_ = prop;
555 				_tmp84_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp83_);
556 				_tmp85_ = _tmp84_;
557 				_tmp86_ = g_strdup_printf ("Property `%s' is read-only", _tmp85_);
558 				_tmp87_ = _tmp86_;
559 				vala_report_error (_tmp82_, _tmp87_);
560 				_g_free0 (_tmp87_);
561 				_g_free0 (_tmp85_);
562 				result = FALSE;
563 				return result;
564 			}
565 		}
566 	}
567 	_tmp88_ = vala_postfix_expression_get_inner (self);
568 	_tmp89_ = _tmp88_;
569 	_tmp90_ = vala_expression_get_value_type (_tmp89_);
570 	_tmp91_ = _tmp90_;
571 	vala_expression_set_value_type ((ValaExpression*) self, _tmp91_);
572 	_tmp92_ = vala_code_node_get_error ((ValaCodeNode*) self);
573 	_tmp93_ = _tmp92_;
574 	result = !_tmp93_;
575 	return result;
576 }
577 
578 static void
vala_postfix_expression_real_emit(ValaCodeNode * base,ValaCodeGenerator * codegen)579 vala_postfix_expression_real_emit (ValaCodeNode* base,
580                                    ValaCodeGenerator* codegen)
581 {
582 	ValaPostfixExpression * self;
583 	ValaExpression* _tmp0_;
584 	ValaExpression* _tmp1_;
585 	self = (ValaPostfixExpression*) base;
586 	g_return_if_fail (codegen != NULL);
587 	_tmp0_ = vala_postfix_expression_get_inner (self);
588 	_tmp1_ = _tmp0_;
589 	vala_code_node_emit ((ValaCodeNode*) _tmp1_, codegen);
590 	vala_code_visitor_visit_postfix_expression ((ValaCodeVisitor*) codegen, self);
591 	vala_code_visitor_visit_expression ((ValaCodeVisitor*) codegen, (ValaExpression*) self);
592 }
593 
594 static gchar*
vala_postfix_expression_real_to_string(ValaCodeNode * base)595 vala_postfix_expression_real_to_string (ValaCodeNode* base)
596 {
597 	ValaPostfixExpression * self;
598 	const gchar* _tmp0_ = NULL;
599 	gboolean _tmp1_;
600 	ValaExpression* _tmp2_;
601 	ValaExpression* _tmp3_;
602 	gchar* _tmp4_;
603 	gchar* _tmp5_;
604 	gchar* _tmp6_;
605 	gchar* _tmp7_;
606 	gchar* result = NULL;
607 	self = (ValaPostfixExpression*) base;
608 	_tmp1_ = self->priv->_increment;
609 	if (_tmp1_) {
610 		_tmp0_ = "++";
611 	} else {
612 		_tmp0_ = "--";
613 	}
614 	_tmp2_ = vala_postfix_expression_get_inner (self);
615 	_tmp3_ = _tmp2_;
616 	_tmp4_ = vala_code_node_to_string ((ValaCodeNode*) _tmp3_);
617 	_tmp5_ = _tmp4_;
618 	_tmp6_ = g_strdup_printf ("(%s%s)", _tmp5_, _tmp0_);
619 	_tmp7_ = _tmp6_;
620 	_g_free0 (_tmp5_);
621 	result = _tmp7_;
622 	return result;
623 }
624 
625 static void
vala_postfix_expression_class_init(ValaPostfixExpressionClass * klass,gpointer klass_data)626 vala_postfix_expression_class_init (ValaPostfixExpressionClass * klass,
627                                     gpointer klass_data)
628 {
629 	vala_postfix_expression_parent_class = g_type_class_peek_parent (klass);
630 	((ValaCodeNodeClass *) klass)->finalize = vala_postfix_expression_finalize;
631 	g_type_class_adjust_private_offset (klass, &ValaPostfixExpression_private_offset);
632 	((ValaCodeNodeClass *) klass)->accept = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_postfix_expression_real_accept;
633 	((ValaCodeNodeClass *) klass)->accept_children = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_postfix_expression_real_accept_children;
634 	((ValaExpressionClass *) klass)->is_pure = (gboolean (*) (ValaExpression*)) vala_postfix_expression_real_is_pure;
635 	((ValaExpressionClass *) klass)->is_accessible = (gboolean (*) (ValaExpression*, ValaSymbol*)) vala_postfix_expression_real_is_accessible;
636 	((ValaCodeNodeClass *) klass)->get_defined_variables = (void (*) (ValaCodeNode*, ValaCollection*)) vala_postfix_expression_real_get_defined_variables;
637 	((ValaCodeNodeClass *) klass)->get_used_variables = (void (*) (ValaCodeNode*, ValaCollection*)) vala_postfix_expression_real_get_used_variables;
638 	((ValaCodeNodeClass *) klass)->replace_expression = (void (*) (ValaCodeNode*, ValaExpression*, ValaExpression*)) vala_postfix_expression_real_replace_expression;
639 	((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_postfix_expression_real_check;
640 	((ValaCodeNodeClass *) klass)->emit = (void (*) (ValaCodeNode*, ValaCodeGenerator*)) vala_postfix_expression_real_emit;
641 	((ValaCodeNodeClass *) klass)->to_string = (gchar* (*) (ValaCodeNode*)) vala_postfix_expression_real_to_string;
642 }
643 
644 static void
vala_postfix_expression_instance_init(ValaPostfixExpression * self,gpointer klass)645 vala_postfix_expression_instance_init (ValaPostfixExpression * self,
646                                        gpointer klass)
647 {
648 	self->priv = vala_postfix_expression_get_instance_private (self);
649 }
650 
651 static void
vala_postfix_expression_finalize(ValaCodeNode * obj)652 vala_postfix_expression_finalize (ValaCodeNode * obj)
653 {
654 	ValaPostfixExpression * self;
655 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_POSTFIX_EXPRESSION, ValaPostfixExpression);
656 	_vala_code_node_unref0 (self->priv->_inner);
657 	VALA_CODE_NODE_CLASS (vala_postfix_expression_parent_class)->finalize (obj);
658 }
659 
660 /**
661  * Represents a postfix increment or decrement expression.
662  */
663 static GType
vala_postfix_expression_get_type_once(void)664 vala_postfix_expression_get_type_once (void)
665 {
666 	static const GTypeInfo g_define_type_info = { sizeof (ValaPostfixExpressionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_postfix_expression_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaPostfixExpression), 0, (GInstanceInitFunc) vala_postfix_expression_instance_init, NULL };
667 	GType vala_postfix_expression_type_id;
668 	vala_postfix_expression_type_id = g_type_register_static (VALA_TYPE_EXPRESSION, "ValaPostfixExpression", &g_define_type_info, 0);
669 	ValaPostfixExpression_private_offset = g_type_add_instance_private (vala_postfix_expression_type_id, sizeof (ValaPostfixExpressionPrivate));
670 	return vala_postfix_expression_type_id;
671 }
672 
673 GType
vala_postfix_expression_get_type(void)674 vala_postfix_expression_get_type (void)
675 {
676 	static volatile gsize vala_postfix_expression_type_id__volatile = 0;
677 	if (g_once_init_enter (&vala_postfix_expression_type_id__volatile)) {
678 		GType vala_postfix_expression_type_id;
679 		vala_postfix_expression_type_id = vala_postfix_expression_get_type_once ();
680 		g_once_init_leave (&vala_postfix_expression_type_id__volatile, vala_postfix_expression_type_id);
681 	}
682 	return vala_postfix_expression_type_id__volatile;
683 }
684 
685