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