1 /* valaproperty.c generated by valac, the Vala compiler
2 * generated from valaproperty.vala, do not modify */
3
4 /* valaproperty.vala
5 *
6 * Copyright (C) 2006-2012 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 * Raffaele Sandrini <raffaele@sandrini.ch>
25 */
26
27 #include "vala.h"
28 #include <glib.h>
29 #include <stdlib.h>
30 #include <string.h>
31 #include <valagee.h>
32 #include <glib-object.h>
33
34 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
35 #define _g_free0(var) (var = (g_free (var), NULL))
36 #define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
37 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
38 #define _vala_source_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_file_unref (var), NULL)))
39
40 struct _ValaPropertyPrivate {
41 ValaParameter* _this_parameter;
42 gboolean _interface_only;
43 gboolean _is_abstract;
44 gboolean _is_virtual;
45 gboolean _overrides;
46 ValaMemberBinding _binding;
47 gboolean _lock_used;
48 ValaExpression* _initializer;
49 ValaDataType* _data_type;
50 ValaProperty* _base_property;
51 ValaProperty* _base_interface_property;
52 gboolean base_properties_valid;
53 ValaPropertyAccessor* _get_accessor;
54 ValaPropertyAccessor* _set_accessor;
55 gchar* _nick;
56 gchar* _blurb;
57 gboolean* _notify;
58 ValaField* _field;
59 gboolean _field_checked;
60 };
61
62 static gint ValaProperty_private_offset;
63 static gpointer vala_property_parent_class = NULL;
64 static ValaLockableIface * vala_property_vala_lockable_parent_iface = NULL;
65
66 static gboolean* _bool_dup (gboolean* self);
67 static void vala_property_find_base_properties (ValaProperty* self);
68 static void vala_property_real_accept (ValaCodeNode* base,
69 ValaCodeVisitor* visitor);
70 static void vala_property_real_accept_children (ValaCodeNode* base,
71 ValaCodeVisitor* visitor);
72 static void vala_property_real_replace_type (ValaCodeNode* base,
73 ValaDataType* old_type,
74 ValaDataType* new_type);
75 static void vala_property_real_replace_expression (ValaCodeNode* base,
76 ValaExpression* old_node,
77 ValaExpression* new_node);
78 static void vala_property_find_base_interface_property (ValaProperty* self,
79 ValaClass* cl);
80 static void vala_property_find_base_class_property (ValaProperty* self,
81 ValaClass* cl);
82 static gboolean vala_property_real_check (ValaCodeNode* base,
83 ValaCodeContext* context);
84 static void vala_property_finalize (ValaCodeNode * obj);
85 static GType vala_property_get_type_once (void);
86
87 static inline gpointer
vala_property_get_instance_private(ValaProperty * self)88 vala_property_get_instance_private (ValaProperty* self)
89 {
90 return G_STRUCT_MEMBER_P (self, ValaProperty_private_offset);
91 }
92
93 ValaDataType*
vala_property_get_property_type(ValaProperty * self)94 vala_property_get_property_type (ValaProperty* self)
95 {
96 ValaDataType* result;
97 ValaDataType* _tmp0_;
98 g_return_val_if_fail (self != NULL, NULL);
99 _tmp0_ = self->priv->_data_type;
100 result = _tmp0_;
101 return result;
102 }
103
104 static gpointer
_vala_code_node_ref0(gpointer self)105 _vala_code_node_ref0 (gpointer self)
106 {
107 return self ? vala_code_node_ref (self) : NULL;
108 }
109
110 void
vala_property_set_property_type(ValaProperty * self,ValaDataType * value)111 vala_property_set_property_type (ValaProperty* self,
112 ValaDataType* value)
113 {
114 ValaDataType* _tmp0_;
115 g_return_if_fail (self != NULL);
116 _tmp0_ = _vala_code_node_ref0 (value);
117 _vala_code_node_unref0 (self->priv->_data_type);
118 self->priv->_data_type = _tmp0_;
119 if (value != NULL) {
120 ValaDataType* _tmp1_;
121 _tmp1_ = self->priv->_data_type;
122 vala_code_node_set_parent_node ((ValaCodeNode*) _tmp1_, (ValaCodeNode*) self);
123 }
124 }
125
126 ValaPropertyAccessor*
vala_property_get_get_accessor(ValaProperty * self)127 vala_property_get_get_accessor (ValaProperty* self)
128 {
129 ValaPropertyAccessor* result;
130 ValaPropertyAccessor* _tmp0_;
131 g_return_val_if_fail (self != NULL, NULL);
132 _tmp0_ = self->priv->_get_accessor;
133 result = _tmp0_;
134 return result;
135 }
136
137 void
vala_property_set_get_accessor(ValaProperty * self,ValaPropertyAccessor * value)138 vala_property_set_get_accessor (ValaProperty* self,
139 ValaPropertyAccessor* value)
140 {
141 ValaPropertyAccessor* _tmp0_;
142 g_return_if_fail (self != NULL);
143 _tmp0_ = _vala_code_node_ref0 (value);
144 _vala_code_node_unref0 (self->priv->_get_accessor);
145 self->priv->_get_accessor = _tmp0_;
146 if (value != NULL) {
147 ValaScope* _tmp1_;
148 ValaScope* _tmp2_;
149 _tmp1_ = vala_symbol_get_scope ((ValaSymbol*) self);
150 _tmp2_ = _tmp1_;
151 vala_symbol_set_owner ((ValaSymbol*) value, _tmp2_);
152 }
153 }
154
155 ValaPropertyAccessor*
vala_property_get_set_accessor(ValaProperty * self)156 vala_property_get_set_accessor (ValaProperty* self)
157 {
158 ValaPropertyAccessor* result;
159 ValaPropertyAccessor* _tmp0_;
160 g_return_val_if_fail (self != NULL, NULL);
161 _tmp0_ = self->priv->_set_accessor;
162 result = _tmp0_;
163 return result;
164 }
165
166 void
vala_property_set_set_accessor(ValaProperty * self,ValaPropertyAccessor * value)167 vala_property_set_set_accessor (ValaProperty* self,
168 ValaPropertyAccessor* value)
169 {
170 ValaPropertyAccessor* _tmp0_;
171 g_return_if_fail (self != NULL);
172 _tmp0_ = _vala_code_node_ref0 (value);
173 _vala_code_node_unref0 (self->priv->_set_accessor);
174 self->priv->_set_accessor = _tmp0_;
175 if (value != NULL) {
176 ValaScope* _tmp1_;
177 ValaScope* _tmp2_;
178 _tmp1_ = vala_symbol_get_scope ((ValaSymbol*) self);
179 _tmp2_ = _tmp1_;
180 vala_symbol_set_owner ((ValaSymbol*) value, _tmp2_);
181 }
182 }
183
184 ValaParameter*
vala_property_get_this_parameter(ValaProperty * self)185 vala_property_get_this_parameter (ValaProperty* self)
186 {
187 ValaParameter* result;
188 ValaParameter* _tmp0_;
189 g_return_val_if_fail (self != NULL, NULL);
190 _tmp0_ = self->priv->_this_parameter;
191 result = _tmp0_;
192 return result;
193 }
194
195 void
vala_property_set_this_parameter(ValaProperty * self,ValaParameter * value)196 vala_property_set_this_parameter (ValaProperty* self,
197 ValaParameter* value)
198 {
199 ValaParameter* _tmp0_;
200 g_return_if_fail (self != NULL);
201 _tmp0_ = _vala_code_node_ref0 (value);
202 _vala_code_node_unref0 (self->priv->_this_parameter);
203 self->priv->_this_parameter = _tmp0_;
204 }
205
206 gboolean
vala_property_get_interface_only(ValaProperty * self)207 vala_property_get_interface_only (ValaProperty* self)
208 {
209 gboolean result;
210 g_return_val_if_fail (self != NULL, FALSE);
211 result = self->priv->_interface_only;
212 return result;
213 }
214
215 void
vala_property_set_interface_only(ValaProperty * self,gboolean value)216 vala_property_set_interface_only (ValaProperty* self,
217 gboolean value)
218 {
219 g_return_if_fail (self != NULL);
220 self->priv->_interface_only = value;
221 }
222
223 gboolean
vala_property_get_is_abstract(ValaProperty * self)224 vala_property_get_is_abstract (ValaProperty* self)
225 {
226 gboolean result;
227 g_return_val_if_fail (self != NULL, FALSE);
228 result = self->priv->_is_abstract;
229 return result;
230 }
231
232 void
vala_property_set_is_abstract(ValaProperty * self,gboolean value)233 vala_property_set_is_abstract (ValaProperty* self,
234 gboolean value)
235 {
236 g_return_if_fail (self != NULL);
237 self->priv->_is_abstract = value;
238 }
239
240 gboolean
vala_property_get_is_virtual(ValaProperty * self)241 vala_property_get_is_virtual (ValaProperty* self)
242 {
243 gboolean result;
244 g_return_val_if_fail (self != NULL, FALSE);
245 result = self->priv->_is_virtual;
246 return result;
247 }
248
249 void
vala_property_set_is_virtual(ValaProperty * self,gboolean value)250 vala_property_set_is_virtual (ValaProperty* self,
251 gboolean value)
252 {
253 g_return_if_fail (self != NULL);
254 self->priv->_is_virtual = value;
255 }
256
257 gboolean
vala_property_get_overrides(ValaProperty * self)258 vala_property_get_overrides (ValaProperty* self)
259 {
260 gboolean result;
261 g_return_val_if_fail (self != NULL, FALSE);
262 result = self->priv->_overrides;
263 return result;
264 }
265
266 void
vala_property_set_overrides(ValaProperty * self,gboolean value)267 vala_property_set_overrides (ValaProperty* self,
268 gboolean value)
269 {
270 g_return_if_fail (self != NULL);
271 self->priv->_overrides = value;
272 }
273
274 ValaField*
vala_property_get_field(ValaProperty * self)275 vala_property_get_field (ValaProperty* self)
276 {
277 ValaField* result;
278 ValaField* _tmp50_;
279 g_return_val_if_fail (self != NULL, NULL);
280 if (!self->priv->_field_checked) {
281 gboolean _tmp0_ = FALSE;
282 gboolean _tmp1_;
283 _tmp1_ = self->priv->_is_abstract;
284 if (!_tmp1_) {
285 ValaSourceFileType _tmp2_;
286 ValaSourceFileType _tmp3_;
287 _tmp2_ = vala_symbol_get_source_type ((ValaSymbol*) self);
288 _tmp3_ = _tmp2_;
289 _tmp0_ = _tmp3_ == VALA_SOURCE_FILE_TYPE_SOURCE;
290 } else {
291 _tmp0_ = FALSE;
292 }
293 if (_tmp0_) {
294 gboolean has_get = FALSE;
295 ValaPropertyAccessor* _tmp4_;
296 ValaPropertyAccessor* _tmp5_;
297 gboolean _tmp6_ = FALSE;
298 gboolean get_has_body = FALSE;
299 gboolean has_set = FALSE;
300 ValaPropertyAccessor* _tmp11_;
301 ValaPropertyAccessor* _tmp12_;
302 gboolean _tmp13_ = FALSE;
303 gboolean set_has_body = FALSE;
304 gboolean _tmp18_ = FALSE;
305 gboolean _tmp22_ = FALSE;
306 gboolean _tmp26_ = FALSE;
307 _tmp4_ = vala_property_get_get_accessor (self);
308 _tmp5_ = _tmp4_;
309 has_get = _tmp5_ != NULL;
310 if (has_get) {
311 ValaPropertyAccessor* _tmp7_;
312 ValaPropertyAccessor* _tmp8_;
313 ValaBlock* _tmp9_;
314 ValaBlock* _tmp10_;
315 _tmp7_ = vala_property_get_get_accessor (self);
316 _tmp8_ = _tmp7_;
317 _tmp9_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp8_);
318 _tmp10_ = _tmp9_;
319 _tmp6_ = _tmp10_ != NULL;
320 } else {
321 _tmp6_ = FALSE;
322 }
323 get_has_body = _tmp6_;
324 _tmp11_ = vala_property_get_set_accessor (self);
325 _tmp12_ = _tmp11_;
326 has_set = _tmp12_ != NULL;
327 if (has_set) {
328 ValaPropertyAccessor* _tmp14_;
329 ValaPropertyAccessor* _tmp15_;
330 ValaBlock* _tmp16_;
331 ValaBlock* _tmp17_;
332 _tmp14_ = vala_property_get_set_accessor (self);
333 _tmp15_ = _tmp14_;
334 _tmp16_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp15_);
335 _tmp17_ = _tmp16_;
336 _tmp13_ = _tmp17_ != NULL;
337 } else {
338 _tmp13_ = FALSE;
339 }
340 set_has_body = _tmp13_;
341 if (set_has_body) {
342 gboolean _tmp19_ = FALSE;
343 if (has_get) {
344 _tmp19_ = !get_has_body;
345 } else {
346 _tmp19_ = FALSE;
347 }
348 _tmp18_ = _tmp19_;
349 } else {
350 _tmp18_ = FALSE;
351 }
352 if (_tmp18_) {
353 ValaSourceReference* _tmp20_;
354 ValaSourceReference* _tmp21_;
355 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
356 _tmp20_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
357 _tmp21_ = _tmp20_;
358 vala_report_error (_tmp21_, "Property getter must have a body");
359 }
360 if (get_has_body) {
361 gboolean _tmp23_ = FALSE;
362 if (has_set) {
363 _tmp23_ = !set_has_body;
364 } else {
365 _tmp23_ = FALSE;
366 }
367 _tmp22_ = _tmp23_;
368 } else {
369 _tmp22_ = FALSE;
370 }
371 if (_tmp22_) {
372 ValaSourceReference* _tmp24_;
373 ValaSourceReference* _tmp25_;
374 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
375 _tmp24_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
376 _tmp25_ = _tmp24_;
377 vala_report_error (_tmp25_, "Property setter must have a body");
378 }
379 if (!get_has_body) {
380 _tmp26_ = !set_has_body;
381 } else {
382 _tmp26_ = FALSE;
383 }
384 if (_tmp26_) {
385 const gchar* _tmp27_;
386 const gchar* _tmp28_;
387 gchar* _tmp29_;
388 gchar* _tmp30_;
389 ValaDataType* _tmp31_;
390 ValaDataType* _tmp32_;
391 ValaDataType* _tmp33_;
392 ValaDataType* _tmp34_;
393 ValaExpression* _tmp35_;
394 ValaExpression* _tmp36_;
395 ValaSourceReference* _tmp37_;
396 ValaSourceReference* _tmp38_;
397 ValaField* _tmp39_;
398 ValaField* _tmp40_;
399 ValaField* _tmp41_;
400 ValaMemberBinding _tmp42_;
401 ValaAttribute* _tmp43_;
402 _tmp27_ = vala_symbol_get_name ((ValaSymbol*) self);
403 _tmp28_ = _tmp27_;
404 _tmp29_ = g_strdup_printf ("_%s", _tmp28_);
405 _tmp30_ = _tmp29_;
406 _tmp31_ = vala_property_get_property_type (self);
407 _tmp32_ = _tmp31_;
408 _tmp33_ = vala_data_type_copy (_tmp32_);
409 _tmp34_ = _tmp33_;
410 _tmp35_ = vala_property_get_initializer (self);
411 _tmp36_ = _tmp35_;
412 _tmp37_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
413 _tmp38_ = _tmp37_;
414 _tmp39_ = vala_field_new (_tmp30_, _tmp34_, _tmp36_, _tmp38_, NULL);
415 _vala_code_node_unref0 (self->priv->_field);
416 self->priv->_field = _tmp39_;
417 _vala_code_node_unref0 (_tmp34_);
418 _g_free0 (_tmp30_);
419 _tmp40_ = self->priv->_field;
420 vala_symbol_set_access ((ValaSymbol*) _tmp40_, VALA_SYMBOL_ACCESSIBILITY_PRIVATE);
421 _tmp41_ = self->priv->_field;
422 _tmp42_ = self->priv->_binding;
423 vala_field_set_binding (_tmp41_, _tmp42_);
424 _tmp43_ = vala_code_node_get_attribute ((ValaCodeNode*) self, "GtkChild");
425 if (_tmp43_ != NULL) {
426 ValaField* _tmp44_;
427 const gchar* _tmp45_;
428 const gchar* _tmp46_;
429 gchar* _tmp47_;
430 gchar* _tmp48_;
431 ValaField* _tmp49_;
432 _tmp44_ = self->priv->_field;
433 _tmp45_ = vala_symbol_get_name ((ValaSymbol*) self);
434 _tmp46_ = _tmp45_;
435 _tmp47_ = vala_code_node_get_attribute_string ((ValaCodeNode*) self, "GtkChild", "name", _tmp46_);
436 _tmp48_ = _tmp47_;
437 vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp44_, "GtkChild", "name", _tmp48_, NULL);
438 _g_free0 (_tmp48_);
439 _tmp49_ = self->priv->_field;
440 vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp49_, "GtkChild", "internal", vala_code_node_get_attribute_bool ((ValaCodeNode*) self, "GtkChild", "internal", FALSE), NULL);
441 }
442 }
443 }
444 self->priv->_field_checked = TRUE;
445 }
446 _tmp50_ = self->priv->_field;
447 result = _tmp50_;
448 return result;
449 }
450
451 ValaMemberBinding
vala_property_get_binding(ValaProperty * self)452 vala_property_get_binding (ValaProperty* self)
453 {
454 ValaMemberBinding result;
455 ValaMemberBinding _tmp0_;
456 g_return_val_if_fail (self != NULL, 0);
457 _tmp0_ = self->priv->_binding;
458 result = _tmp0_;
459 return result;
460 }
461
462 void
vala_property_set_binding(ValaProperty * self,ValaMemberBinding value)463 vala_property_set_binding (ValaProperty* self,
464 ValaMemberBinding value)
465 {
466 g_return_if_fail (self != NULL);
467 self->priv->_binding = value;
468 }
469
470 static gchar*
string_replace(const gchar * self,const gchar * old,const gchar * replacement)471 string_replace (const gchar* self,
472 const gchar* old,
473 const gchar* replacement)
474 {
475 gboolean _tmp0_ = FALSE;
476 gboolean _tmp1_ = FALSE;
477 GError* _inner_error0_ = NULL;
478 gchar* result = NULL;
479 g_return_val_if_fail (self != NULL, NULL);
480 g_return_val_if_fail (old != NULL, NULL);
481 g_return_val_if_fail (replacement != NULL, NULL);
482 if ((*((gchar*) self)) == '\0') {
483 _tmp1_ = TRUE;
484 } else {
485 _tmp1_ = (*((gchar*) old)) == '\0';
486 }
487 if (_tmp1_) {
488 _tmp0_ = TRUE;
489 } else {
490 _tmp0_ = g_strcmp0 (old, replacement) == 0;
491 }
492 if (_tmp0_) {
493 gchar* _tmp2_;
494 _tmp2_ = g_strdup (self);
495 result = _tmp2_;
496 return result;
497 }
498 {
499 GRegex* regex = NULL;
500 gchar* _tmp3_;
501 gchar* _tmp4_;
502 GRegex* _tmp5_;
503 GRegex* _tmp6_;
504 gchar* _tmp7_ = NULL;
505 GRegex* _tmp8_;
506 gchar* _tmp9_;
507 gchar* _tmp10_;
508 _tmp3_ = g_regex_escape_string (old, -1);
509 _tmp4_ = _tmp3_;
510 _tmp5_ = g_regex_new (_tmp4_, 0, 0, &_inner_error0_);
511 _tmp6_ = _tmp5_;
512 _g_free0 (_tmp4_);
513 regex = _tmp6_;
514 if (G_UNLIKELY (_inner_error0_ != NULL)) {
515 _g_free0 (_tmp7_);
516 _g_regex_unref0 (regex);
517 if (_inner_error0_->domain == G_REGEX_ERROR) {
518 goto __catch0_g_regex_error;
519 }
520 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
521 g_clear_error (&_inner_error0_);
522 return NULL;
523 }
524 _tmp8_ = regex;
525 _tmp9_ = g_regex_replace_literal (_tmp8_, self, (gssize) -1, 0, replacement, 0, &_inner_error0_);
526 _tmp7_ = _tmp9_;
527 if (G_UNLIKELY (_inner_error0_ != NULL)) {
528 _g_free0 (_tmp7_);
529 _g_regex_unref0 (regex);
530 if (_inner_error0_->domain == G_REGEX_ERROR) {
531 goto __catch0_g_regex_error;
532 }
533 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
534 g_clear_error (&_inner_error0_);
535 return NULL;
536 }
537 _tmp10_ = _tmp7_;
538 _tmp7_ = NULL;
539 result = _tmp10_;
540 _g_free0 (_tmp7_);
541 _g_regex_unref0 (regex);
542 return result;
543 }
544 goto __finally0;
545 __catch0_g_regex_error:
546 {
547 g_clear_error (&_inner_error0_);
548 g_assert_not_reached ();
549 }
550 __finally0:
551 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
552 g_clear_error (&_inner_error0_);
553 return NULL;
554 }
555
556 const gchar*
vala_property_get_nick(ValaProperty * self)557 vala_property_get_nick (ValaProperty* self)
558 {
559 const gchar* result;
560 const gchar* _tmp0_;
561 const gchar* _tmp6_;
562 g_return_val_if_fail (self != NULL, NULL);
563 _tmp0_ = self->priv->_nick;
564 if (_tmp0_ == NULL) {
565 gchar* _tmp1_;
566 const gchar* _tmp2_;
567 _tmp1_ = vala_code_node_get_attribute_string ((ValaCodeNode*) self, "Description", "nick", NULL);
568 _g_free0 (self->priv->_nick);
569 self->priv->_nick = _tmp1_;
570 _tmp2_ = self->priv->_nick;
571 if (_tmp2_ == NULL) {
572 const gchar* _tmp3_;
573 const gchar* _tmp4_;
574 gchar* _tmp5_;
575 _tmp3_ = vala_symbol_get_name ((ValaSymbol*) self);
576 _tmp4_ = _tmp3_;
577 _tmp5_ = string_replace (_tmp4_, "_", "-");
578 _g_free0 (self->priv->_nick);
579 self->priv->_nick = _tmp5_;
580 }
581 }
582 _tmp6_ = self->priv->_nick;
583 result = _tmp6_;
584 return result;
585 }
586
587 const gchar*
vala_property_get_blurb(ValaProperty * self)588 vala_property_get_blurb (ValaProperty* self)
589 {
590 const gchar* result;
591 const gchar* _tmp0_;
592 const gchar* _tmp6_;
593 g_return_val_if_fail (self != NULL, NULL);
594 _tmp0_ = self->priv->_blurb;
595 if (_tmp0_ == NULL) {
596 gchar* _tmp1_;
597 const gchar* _tmp2_;
598 _tmp1_ = vala_code_node_get_attribute_string ((ValaCodeNode*) self, "Description", "blurb", NULL);
599 _g_free0 (self->priv->_blurb);
600 self->priv->_blurb = _tmp1_;
601 _tmp2_ = self->priv->_blurb;
602 if (_tmp2_ == NULL) {
603 const gchar* _tmp3_;
604 const gchar* _tmp4_;
605 gchar* _tmp5_;
606 _tmp3_ = vala_symbol_get_name ((ValaSymbol*) self);
607 _tmp4_ = _tmp3_;
608 _tmp5_ = string_replace (_tmp4_, "_", "-");
609 _g_free0 (self->priv->_blurb);
610 self->priv->_blurb = _tmp5_;
611 }
612 }
613 _tmp6_ = self->priv->_blurb;
614 result = _tmp6_;
615 return result;
616 }
617
618 static gboolean*
_bool_dup(gboolean * self)619 _bool_dup (gboolean* self)
620 {
621 gboolean* dup;
622 dup = g_new0 (gboolean, 1);
623 memcpy (dup, self, sizeof (gboolean));
624 return dup;
625 }
626
627 static gpointer
__bool_dup0(gpointer self)628 __bool_dup0 (gpointer self)
629 {
630 return self ? _bool_dup (self) : NULL;
631 }
632
633 gboolean
vala_property_get_notify(ValaProperty * self)634 vala_property_get_notify (ValaProperty* self)
635 {
636 gboolean result;
637 gboolean* _tmp0_;
638 gboolean* _tmp3_;
639 g_return_val_if_fail (self != NULL, FALSE);
640 _tmp0_ = self->priv->_notify;
641 if (_tmp0_ == NULL) {
642 gboolean _tmp1_;
643 gboolean* _tmp2_;
644 _tmp1_ = vala_code_node_get_attribute_bool ((ValaCodeNode*) self, "CCode", "notify", TRUE);
645 _tmp2_ = __bool_dup0 (&_tmp1_);
646 _g_free0 (self->priv->_notify);
647 self->priv->_notify = _tmp2_;
648 }
649 _tmp3_ = self->priv->_notify;
650 result = *_tmp3_;
651 return result;
652 }
653
654 ValaProperty*
vala_property_get_base_property(ValaProperty * self)655 vala_property_get_base_property (ValaProperty* self)
656 {
657 ValaProperty* result;
658 ValaProperty* _tmp0_;
659 g_return_val_if_fail (self != NULL, NULL);
660 vala_property_find_base_properties (self);
661 _tmp0_ = self->priv->_base_property;
662 result = _tmp0_;
663 return result;
664 }
665
666 ValaProperty*
vala_property_get_base_interface_property(ValaProperty * self)667 vala_property_get_base_interface_property (ValaProperty* self)
668 {
669 ValaProperty* result;
670 ValaProperty* _tmp0_;
671 g_return_val_if_fail (self != NULL, NULL);
672 vala_property_find_base_properties (self);
673 _tmp0_ = self->priv->_base_interface_property;
674 result = _tmp0_;
675 return result;
676 }
677
678 ValaExpression*
vala_property_get_initializer(ValaProperty * self)679 vala_property_get_initializer (ValaProperty* self)
680 {
681 ValaExpression* result;
682 ValaExpression* _tmp0_;
683 g_return_val_if_fail (self != NULL, NULL);
684 _tmp0_ = self->priv->_initializer;
685 result = _tmp0_;
686 return result;
687 }
688
689 void
vala_property_set_initializer(ValaProperty * self,ValaExpression * value)690 vala_property_set_initializer (ValaProperty* self,
691 ValaExpression* value)
692 {
693 ValaExpression* _tmp0_;
694 ValaExpression* _tmp1_;
695 g_return_if_fail (self != NULL);
696 _tmp0_ = _vala_code_node_ref0 (value);
697 _vala_code_node_unref0 (self->priv->_initializer);
698 self->priv->_initializer = _tmp0_;
699 _tmp1_ = self->priv->_initializer;
700 vala_code_node_set_parent_node ((ValaCodeNode*) _tmp1_, (ValaCodeNode*) self);
701 }
702
703 static gboolean
vala_property_real_get_lock_used(ValaLockable * base)704 vala_property_real_get_lock_used (ValaLockable* base)
705 {
706 gboolean result;
707 ValaProperty* self;
708 self = (ValaProperty*) base;
709 result = self->priv->_lock_used;
710 return result;
711 }
712
713 static void
vala_property_real_set_lock_used(ValaLockable * base,gboolean value)714 vala_property_real_set_lock_used (ValaLockable* base,
715 gboolean value)
716 {
717 ValaProperty* self;
718 self = (ValaProperty*) base;
719 self->priv->_lock_used = value;
720 }
721
722 /**
723 * Creates a new property.
724 *
725 * @param name property name
726 * @param property_type property type
727 * @param get_accessor get accessor
728 * @param set_accessor set/construct accessor
729 * @param source_reference reference to source code
730 * @return newly created property
731 */
732 ValaProperty*
vala_property_construct(GType object_type,const gchar * name,ValaDataType * property_type,ValaPropertyAccessor * get_accessor,ValaPropertyAccessor * set_accessor,ValaSourceReference * source_reference,ValaComment * comment)733 vala_property_construct (GType object_type,
734 const gchar* name,
735 ValaDataType* property_type,
736 ValaPropertyAccessor* get_accessor,
737 ValaPropertyAccessor* set_accessor,
738 ValaSourceReference* source_reference,
739 ValaComment* comment)
740 {
741 ValaProperty* self = NULL;
742 g_return_val_if_fail (name != NULL, NULL);
743 self = (ValaProperty*) vala_symbol_construct (object_type, name, source_reference, comment);
744 vala_property_set_property_type (self, property_type);
745 vala_property_set_get_accessor (self, get_accessor);
746 vala_property_set_set_accessor (self, set_accessor);
747 return self;
748 }
749
750 ValaProperty*
vala_property_new(const gchar * name,ValaDataType * property_type,ValaPropertyAccessor * get_accessor,ValaPropertyAccessor * set_accessor,ValaSourceReference * source_reference,ValaComment * comment)751 vala_property_new (const gchar* name,
752 ValaDataType* property_type,
753 ValaPropertyAccessor* get_accessor,
754 ValaPropertyAccessor* set_accessor,
755 ValaSourceReference* source_reference,
756 ValaComment* comment)
757 {
758 return vala_property_construct (VALA_TYPE_PROPERTY, name, property_type, get_accessor, set_accessor, source_reference, comment);
759 }
760
761 static void
vala_property_real_accept(ValaCodeNode * base,ValaCodeVisitor * visitor)762 vala_property_real_accept (ValaCodeNode* base,
763 ValaCodeVisitor* visitor)
764 {
765 ValaProperty * self;
766 self = (ValaProperty*) base;
767 g_return_if_fail (visitor != NULL);
768 vala_code_visitor_visit_property (visitor, self);
769 }
770
771 static void
vala_property_real_accept_children(ValaCodeNode * base,ValaCodeVisitor * visitor)772 vala_property_real_accept_children (ValaCodeNode* base,
773 ValaCodeVisitor* visitor)
774 {
775 ValaProperty * self;
776 ValaDataType* _tmp0_;
777 ValaDataType* _tmp1_;
778 ValaPropertyAccessor* _tmp2_;
779 ValaPropertyAccessor* _tmp3_;
780 ValaPropertyAccessor* _tmp6_;
781 ValaPropertyAccessor* _tmp7_;
782 ValaExpression* _tmp10_;
783 ValaExpression* _tmp11_;
784 self = (ValaProperty*) base;
785 g_return_if_fail (visitor != NULL);
786 _tmp0_ = vala_property_get_property_type (self);
787 _tmp1_ = _tmp0_;
788 vala_code_node_accept ((ValaCodeNode*) _tmp1_, visitor);
789 _tmp2_ = vala_property_get_get_accessor (self);
790 _tmp3_ = _tmp2_;
791 if (_tmp3_ != NULL) {
792 ValaPropertyAccessor* _tmp4_;
793 ValaPropertyAccessor* _tmp5_;
794 _tmp4_ = vala_property_get_get_accessor (self);
795 _tmp5_ = _tmp4_;
796 vala_code_node_accept ((ValaCodeNode*) _tmp5_, visitor);
797 }
798 _tmp6_ = vala_property_get_set_accessor (self);
799 _tmp7_ = _tmp6_;
800 if (_tmp7_ != NULL) {
801 ValaPropertyAccessor* _tmp8_;
802 ValaPropertyAccessor* _tmp9_;
803 _tmp8_ = vala_property_get_set_accessor (self);
804 _tmp9_ = _tmp8_;
805 vala_code_node_accept ((ValaCodeNode*) _tmp9_, visitor);
806 }
807 _tmp10_ = vala_property_get_initializer (self);
808 _tmp11_ = _tmp10_;
809 if (_tmp11_ != NULL) {
810 ValaExpression* _tmp12_;
811 ValaExpression* _tmp13_;
812 _tmp12_ = vala_property_get_initializer (self);
813 _tmp13_ = _tmp12_;
814 vala_code_node_accept ((ValaCodeNode*) _tmp13_, visitor);
815 }
816 }
817
818 /**
819 * Checks whether the accessors of this property are compatible
820 * with the specified base property.
821 *
822 * @param base_property a property
823 * @param invalid_match error string about which check failed
824 * @return true if the specified property is compatible to this property
825 */
826 gboolean
vala_property_compatible(ValaProperty * self,ValaProperty * base_property,gchar ** invalid_match)827 vala_property_compatible (ValaProperty* self,
828 ValaProperty* base_property,
829 gchar* * invalid_match)
830 {
831 gchar* _vala_invalid_match = NULL;
832 gboolean _tmp0_ = FALSE;
833 gboolean _tmp1_ = FALSE;
834 ValaPropertyAccessor* _tmp2_;
835 ValaPropertyAccessor* _tmp3_;
836 gboolean _tmp12_ = FALSE;
837 gboolean _tmp13_ = FALSE;
838 ValaPropertyAccessor* _tmp14_;
839 ValaPropertyAccessor* _tmp15_;
840 ValaDataType* object_type = NULL;
841 ValaSymbol* _tmp24_;
842 ValaSymbol* _tmp25_;
843 ValaDataType* _tmp26_;
844 ValaPropertyAccessor* _tmp27_;
845 ValaPropertyAccessor* _tmp28_;
846 ValaPropertyAccessor* _tmp41_;
847 ValaPropertyAccessor* _tmp42_;
848 gboolean result = FALSE;
849 g_return_val_if_fail (self != NULL, FALSE);
850 g_return_val_if_fail (base_property != NULL, FALSE);
851 _tmp2_ = vala_property_get_get_accessor (self);
852 _tmp3_ = _tmp2_;
853 if (_tmp3_ == NULL) {
854 ValaPropertyAccessor* _tmp4_;
855 ValaPropertyAccessor* _tmp5_;
856 _tmp4_ = vala_property_get_get_accessor (base_property);
857 _tmp5_ = _tmp4_;
858 _tmp1_ = _tmp5_ != NULL;
859 } else {
860 _tmp1_ = FALSE;
861 }
862 if (_tmp1_) {
863 _tmp0_ = TRUE;
864 } else {
865 gboolean _tmp6_ = FALSE;
866 ValaPropertyAccessor* _tmp7_;
867 ValaPropertyAccessor* _tmp8_;
868 _tmp7_ = vala_property_get_get_accessor (self);
869 _tmp8_ = _tmp7_;
870 if (_tmp8_ != NULL) {
871 ValaPropertyAccessor* _tmp9_;
872 ValaPropertyAccessor* _tmp10_;
873 _tmp9_ = vala_property_get_get_accessor (base_property);
874 _tmp10_ = _tmp9_;
875 _tmp6_ = _tmp10_ == NULL;
876 } else {
877 _tmp6_ = FALSE;
878 }
879 _tmp0_ = _tmp6_;
880 }
881 if (_tmp0_) {
882 gchar* _tmp11_;
883 _tmp11_ = g_strdup ("incompatible get accessor");
884 _g_free0 (_vala_invalid_match);
885 _vala_invalid_match = _tmp11_;
886 result = FALSE;
887 if (invalid_match) {
888 *invalid_match = _vala_invalid_match;
889 } else {
890 _g_free0 (_vala_invalid_match);
891 }
892 return result;
893 }
894 _tmp14_ = vala_property_get_set_accessor (self);
895 _tmp15_ = _tmp14_;
896 if (_tmp15_ == NULL) {
897 ValaPropertyAccessor* _tmp16_;
898 ValaPropertyAccessor* _tmp17_;
899 _tmp16_ = vala_property_get_set_accessor (base_property);
900 _tmp17_ = _tmp16_;
901 _tmp13_ = _tmp17_ != NULL;
902 } else {
903 _tmp13_ = FALSE;
904 }
905 if (_tmp13_) {
906 _tmp12_ = TRUE;
907 } else {
908 gboolean _tmp18_ = FALSE;
909 ValaPropertyAccessor* _tmp19_;
910 ValaPropertyAccessor* _tmp20_;
911 _tmp19_ = vala_property_get_set_accessor (self);
912 _tmp20_ = _tmp19_;
913 if (_tmp20_ != NULL) {
914 ValaPropertyAccessor* _tmp21_;
915 ValaPropertyAccessor* _tmp22_;
916 _tmp21_ = vala_property_get_set_accessor (base_property);
917 _tmp22_ = _tmp21_;
918 _tmp18_ = _tmp22_ == NULL;
919 } else {
920 _tmp18_ = FALSE;
921 }
922 _tmp12_ = _tmp18_;
923 }
924 if (_tmp12_) {
925 gchar* _tmp23_;
926 _tmp23_ = g_strdup ("incompatible set accessor");
927 _g_free0 (_vala_invalid_match);
928 _vala_invalid_match = _tmp23_;
929 result = FALSE;
930 if (invalid_match) {
931 *invalid_match = _vala_invalid_match;
932 } else {
933 _g_free0 (_vala_invalid_match);
934 }
935 return result;
936 }
937 _tmp24_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
938 _tmp25_ = _tmp24_;
939 _tmp26_ = vala_semantic_analyzer_get_data_type_for_symbol (_tmp25_);
940 object_type = _tmp26_;
941 _tmp27_ = vala_property_get_get_accessor (self);
942 _tmp28_ = _tmp27_;
943 if (_tmp28_ != NULL) {
944 ValaDataType* actual_base_type = NULL;
945 ValaPropertyAccessor* _tmp29_;
946 ValaPropertyAccessor* _tmp30_;
947 ValaDataType* _tmp31_;
948 ValaDataType* _tmp32_;
949 ValaDataType* _tmp33_;
950 ValaDataType* _tmp34_;
951 ValaDataType* _tmp35_;
952 ValaPropertyAccessor* _tmp36_;
953 ValaPropertyAccessor* _tmp37_;
954 ValaDataType* _tmp38_;
955 ValaDataType* _tmp39_;
956 _tmp29_ = vala_property_get_get_accessor (base_property);
957 _tmp30_ = _tmp29_;
958 _tmp31_ = vala_property_accessor_get_value_type (_tmp30_);
959 _tmp32_ = _tmp31_;
960 _tmp33_ = object_type;
961 _tmp34_ = vala_data_type_get_actual_type (_tmp32_, _tmp33_, NULL, (ValaCodeNode*) self);
962 actual_base_type = _tmp34_;
963 _tmp35_ = actual_base_type;
964 _tmp36_ = vala_property_get_get_accessor (self);
965 _tmp37_ = _tmp36_;
966 _tmp38_ = vala_property_accessor_get_value_type (_tmp37_);
967 _tmp39_ = _tmp38_;
968 if (!vala_data_type_equals (_tmp35_, _tmp39_)) {
969 gchar* _tmp40_;
970 _tmp40_ = g_strdup ("incompatible get accessor type");
971 _g_free0 (_vala_invalid_match);
972 _vala_invalid_match = _tmp40_;
973 result = FALSE;
974 _vala_code_node_unref0 (actual_base_type);
975 _vala_code_node_unref0 (object_type);
976 if (invalid_match) {
977 *invalid_match = _vala_invalid_match;
978 } else {
979 _g_free0 (_vala_invalid_match);
980 }
981 return result;
982 }
983 _vala_code_node_unref0 (actual_base_type);
984 }
985 _tmp41_ = vala_property_get_set_accessor (self);
986 _tmp42_ = _tmp41_;
987 if (_tmp42_ != NULL) {
988 ValaDataType* actual_base_type = NULL;
989 ValaPropertyAccessor* _tmp43_;
990 ValaPropertyAccessor* _tmp44_;
991 ValaDataType* _tmp45_;
992 ValaDataType* _tmp46_;
993 ValaDataType* _tmp47_;
994 ValaDataType* _tmp48_;
995 ValaDataType* _tmp49_;
996 ValaPropertyAccessor* _tmp50_;
997 ValaPropertyAccessor* _tmp51_;
998 ValaDataType* _tmp52_;
999 ValaDataType* _tmp53_;
1000 ValaPropertyAccessor* _tmp55_;
1001 ValaPropertyAccessor* _tmp56_;
1002 gboolean _tmp57_;
1003 gboolean _tmp58_;
1004 ValaPropertyAccessor* _tmp59_;
1005 ValaPropertyAccessor* _tmp60_;
1006 gboolean _tmp61_;
1007 gboolean _tmp62_;
1008 ValaPropertyAccessor* _tmp64_;
1009 ValaPropertyAccessor* _tmp65_;
1010 gboolean _tmp66_;
1011 gboolean _tmp67_;
1012 ValaPropertyAccessor* _tmp68_;
1013 ValaPropertyAccessor* _tmp69_;
1014 gboolean _tmp70_;
1015 gboolean _tmp71_;
1016 _tmp43_ = vala_property_get_set_accessor (base_property);
1017 _tmp44_ = _tmp43_;
1018 _tmp45_ = vala_property_accessor_get_value_type (_tmp44_);
1019 _tmp46_ = _tmp45_;
1020 _tmp47_ = object_type;
1021 _tmp48_ = vala_data_type_get_actual_type (_tmp46_, _tmp47_, NULL, (ValaCodeNode*) self);
1022 actual_base_type = _tmp48_;
1023 _tmp49_ = actual_base_type;
1024 _tmp50_ = vala_property_get_set_accessor (self);
1025 _tmp51_ = _tmp50_;
1026 _tmp52_ = vala_property_accessor_get_value_type (_tmp51_);
1027 _tmp53_ = _tmp52_;
1028 if (!vala_data_type_equals (_tmp49_, _tmp53_)) {
1029 gchar* _tmp54_;
1030 _tmp54_ = g_strdup ("incompatible set accessor type");
1031 _g_free0 (_vala_invalid_match);
1032 _vala_invalid_match = _tmp54_;
1033 result = FALSE;
1034 _vala_code_node_unref0 (actual_base_type);
1035 _vala_code_node_unref0 (object_type);
1036 if (invalid_match) {
1037 *invalid_match = _vala_invalid_match;
1038 } else {
1039 _g_free0 (_vala_invalid_match);
1040 }
1041 return result;
1042 }
1043 _tmp55_ = vala_property_get_set_accessor (self);
1044 _tmp56_ = _tmp55_;
1045 _tmp57_ = vala_property_accessor_get_writable (_tmp56_);
1046 _tmp58_ = _tmp57_;
1047 _tmp59_ = vala_property_get_set_accessor (base_property);
1048 _tmp60_ = _tmp59_;
1049 _tmp61_ = vala_property_accessor_get_writable (_tmp60_);
1050 _tmp62_ = _tmp61_;
1051 if (_tmp58_ != _tmp62_) {
1052 gchar* _tmp63_;
1053 _tmp63_ = g_strdup ("incompatible set accessor");
1054 _g_free0 (_vala_invalid_match);
1055 _vala_invalid_match = _tmp63_;
1056 result = FALSE;
1057 _vala_code_node_unref0 (actual_base_type);
1058 _vala_code_node_unref0 (object_type);
1059 if (invalid_match) {
1060 *invalid_match = _vala_invalid_match;
1061 } else {
1062 _g_free0 (_vala_invalid_match);
1063 }
1064 return result;
1065 }
1066 _tmp64_ = vala_property_get_set_accessor (self);
1067 _tmp65_ = _tmp64_;
1068 _tmp66_ = vala_property_accessor_get_construction (_tmp65_);
1069 _tmp67_ = _tmp66_;
1070 _tmp68_ = vala_property_get_set_accessor (base_property);
1071 _tmp69_ = _tmp68_;
1072 _tmp70_ = vala_property_accessor_get_construction (_tmp69_);
1073 _tmp71_ = _tmp70_;
1074 if (_tmp67_ != _tmp71_) {
1075 gchar* _tmp72_;
1076 _tmp72_ = g_strdup ("incompatible set accessor");
1077 _g_free0 (_vala_invalid_match);
1078 _vala_invalid_match = _tmp72_;
1079 result = FALSE;
1080 _vala_code_node_unref0 (actual_base_type);
1081 _vala_code_node_unref0 (object_type);
1082 if (invalid_match) {
1083 *invalid_match = _vala_invalid_match;
1084 } else {
1085 _g_free0 (_vala_invalid_match);
1086 }
1087 return result;
1088 }
1089 _vala_code_node_unref0 (actual_base_type);
1090 }
1091 _g_free0 (_vala_invalid_match);
1092 _vala_invalid_match = NULL;
1093 result = TRUE;
1094 _vala_code_node_unref0 (object_type);
1095 if (invalid_match) {
1096 *invalid_match = _vala_invalid_match;
1097 } else {
1098 _g_free0 (_vala_invalid_match);
1099 }
1100 return result;
1101 }
1102
1103 static void
vala_property_real_replace_type(ValaCodeNode * base,ValaDataType * old_type,ValaDataType * new_type)1104 vala_property_real_replace_type (ValaCodeNode* base,
1105 ValaDataType* old_type,
1106 ValaDataType* new_type)
1107 {
1108 ValaProperty * self;
1109 ValaDataType* _tmp0_;
1110 ValaDataType* _tmp1_;
1111 self = (ValaProperty*) base;
1112 g_return_if_fail (old_type != NULL);
1113 g_return_if_fail (new_type != NULL);
1114 _tmp0_ = vala_property_get_property_type (self);
1115 _tmp1_ = _tmp0_;
1116 if (_tmp1_ == old_type) {
1117 vala_property_set_property_type (self, new_type);
1118 }
1119 }
1120
1121 static void
vala_property_real_replace_expression(ValaCodeNode * base,ValaExpression * old_node,ValaExpression * new_node)1122 vala_property_real_replace_expression (ValaCodeNode* base,
1123 ValaExpression* old_node,
1124 ValaExpression* new_node)
1125 {
1126 ValaProperty * self;
1127 ValaExpression* _tmp0_;
1128 ValaExpression* _tmp1_;
1129 self = (ValaProperty*) base;
1130 g_return_if_fail (old_node != NULL);
1131 g_return_if_fail (new_node != NULL);
1132 _tmp0_ = vala_property_get_initializer (self);
1133 _tmp1_ = _tmp0_;
1134 if (_tmp1_ == old_node) {
1135 vala_property_set_initializer (self, new_node);
1136 }
1137 }
1138
1139 static void
vala_property_find_base_properties(ValaProperty * self)1140 vala_property_find_base_properties (ValaProperty* self)
1141 {
1142 ValaSymbol* _tmp0_;
1143 ValaSymbol* _tmp1_;
1144 g_return_if_fail (self != NULL);
1145 if (self->priv->base_properties_valid) {
1146 return;
1147 }
1148 _tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1149 _tmp1_ = _tmp0_;
1150 if (VALA_IS_CLASS (_tmp1_)) {
1151 ValaSymbol* _tmp2_;
1152 ValaSymbol* _tmp3_;
1153 gboolean _tmp4_ = FALSE;
1154 gboolean _tmp5_;
1155 _tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1156 _tmp3_ = _tmp2_;
1157 vala_property_find_base_interface_property (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_CLASS, ValaClass));
1158 _tmp5_ = self->priv->_is_virtual;
1159 if (_tmp5_) {
1160 _tmp4_ = TRUE;
1161 } else {
1162 gboolean _tmp6_;
1163 _tmp6_ = self->priv->_overrides;
1164 _tmp4_ = _tmp6_;
1165 }
1166 if (_tmp4_) {
1167 ValaSymbol* _tmp7_;
1168 ValaSymbol* _tmp8_;
1169 _tmp7_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1170 _tmp8_ = _tmp7_;
1171 vala_property_find_base_class_property (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_CLASS, ValaClass));
1172 }
1173 } else {
1174 ValaSymbol* _tmp9_;
1175 ValaSymbol* _tmp10_;
1176 _tmp9_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1177 _tmp10_ = _tmp9_;
1178 if (VALA_IS_INTERFACE (_tmp10_)) {
1179 gboolean _tmp11_ = FALSE;
1180 gboolean _tmp12_;
1181 _tmp12_ = self->priv->_is_virtual;
1182 if (_tmp12_) {
1183 _tmp11_ = TRUE;
1184 } else {
1185 gboolean _tmp13_;
1186 _tmp13_ = self->priv->_is_abstract;
1187 _tmp11_ = _tmp13_;
1188 }
1189 if (_tmp11_) {
1190 self->priv->_base_interface_property = self;
1191 }
1192 }
1193 }
1194 self->priv->base_properties_valid = TRUE;
1195 }
1196
1197 static void
vala_property_find_base_class_property(ValaProperty * self,ValaClass * cl)1198 vala_property_find_base_class_property (ValaProperty* self,
1199 ValaClass* cl)
1200 {
1201 ValaSymbol* sym = NULL;
1202 ValaScope* _tmp0_;
1203 ValaScope* _tmp1_;
1204 const gchar* _tmp2_;
1205 const gchar* _tmp3_;
1206 ValaSymbol* _tmp4_;
1207 ValaSymbol* _tmp5_;
1208 ValaClass* _tmp27_;
1209 ValaClass* _tmp28_;
1210 g_return_if_fail (self != NULL);
1211 g_return_if_fail (cl != NULL);
1212 _tmp0_ = vala_symbol_get_scope ((ValaSymbol*) cl);
1213 _tmp1_ = _tmp0_;
1214 _tmp2_ = vala_symbol_get_name ((ValaSymbol*) self);
1215 _tmp3_ = _tmp2_;
1216 _tmp4_ = vala_scope_lookup (_tmp1_, _tmp3_);
1217 sym = _tmp4_;
1218 _tmp5_ = sym;
1219 if (VALA_IS_PROPERTY (_tmp5_)) {
1220 ValaProperty* base_property = NULL;
1221 ValaSymbol* _tmp6_;
1222 ValaProperty* _tmp7_;
1223 gboolean _tmp8_ = FALSE;
1224 ValaProperty* _tmp9_;
1225 gboolean _tmp10_;
1226 _tmp6_ = sym;
1227 _tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_PROPERTY, ValaProperty));
1228 base_property = _tmp7_;
1229 _tmp9_ = base_property;
1230 _tmp10_ = _tmp9_->priv->_is_abstract;
1231 if (_tmp10_) {
1232 _tmp8_ = TRUE;
1233 } else {
1234 ValaProperty* _tmp11_;
1235 gboolean _tmp12_;
1236 _tmp11_ = base_property;
1237 _tmp12_ = _tmp11_->priv->_is_virtual;
1238 _tmp8_ = _tmp12_;
1239 }
1240 if (_tmp8_) {
1241 gchar* invalid_match = NULL;
1242 ValaProperty* _tmp13_;
1243 gchar* _tmp14_ = NULL;
1244 gboolean _tmp15_;
1245 ValaProperty* _tmp26_;
1246 _tmp13_ = base_property;
1247 _tmp15_ = vala_property_compatible (self, _tmp13_, &_tmp14_);
1248 _g_free0 (invalid_match);
1249 invalid_match = _tmp14_;
1250 if (!_tmp15_) {
1251 ValaSourceReference* _tmp16_;
1252 ValaSourceReference* _tmp17_;
1253 gchar* _tmp18_;
1254 gchar* _tmp19_;
1255 ValaProperty* _tmp20_;
1256 gchar* _tmp21_;
1257 gchar* _tmp22_;
1258 const gchar* _tmp23_;
1259 gchar* _tmp24_;
1260 gchar* _tmp25_;
1261 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1262 _tmp16_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1263 _tmp17_ = _tmp16_;
1264 _tmp18_ = vala_symbol_get_full_name ((ValaSymbol*) self);
1265 _tmp19_ = _tmp18_;
1266 _tmp20_ = base_property;
1267 _tmp21_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp20_);
1268 _tmp22_ = _tmp21_;
1269 _tmp23_ = invalid_match;
1270 _tmp24_ = g_strdup_printf ("Type and/or accessors of overriding property `%s' do not match overrid" \
1271 "den property `%s': %s.", _tmp19_, _tmp22_, _tmp23_);
1272 _tmp25_ = _tmp24_;
1273 vala_report_error (_tmp17_, _tmp25_);
1274 _g_free0 (_tmp25_);
1275 _g_free0 (_tmp22_);
1276 _g_free0 (_tmp19_);
1277 _g_free0 (invalid_match);
1278 _vala_code_node_unref0 (base_property);
1279 _vala_code_node_unref0 (sym);
1280 return;
1281 }
1282 _tmp26_ = base_property;
1283 self->priv->_base_property = _tmp26_;
1284 _g_free0 (invalid_match);
1285 _vala_code_node_unref0 (base_property);
1286 _vala_code_node_unref0 (sym);
1287 return;
1288 }
1289 _vala_code_node_unref0 (base_property);
1290 }
1291 _tmp27_ = vala_class_get_base_class (cl);
1292 _tmp28_ = _tmp27_;
1293 if (_tmp28_ != NULL) {
1294 ValaClass* _tmp29_;
1295 ValaClass* _tmp30_;
1296 _tmp29_ = vala_class_get_base_class (cl);
1297 _tmp30_ = _tmp29_;
1298 vala_property_find_base_class_property (self, _tmp30_);
1299 }
1300 _vala_code_node_unref0 (sym);
1301 }
1302
1303 static gpointer
_vala_iterable_ref0(gpointer self)1304 _vala_iterable_ref0 (gpointer self)
1305 {
1306 return self ? vala_iterable_ref (self) : NULL;
1307 }
1308
1309 static void
vala_property_find_base_interface_property(ValaProperty * self,ValaClass * cl)1310 vala_property_find_base_interface_property (ValaProperty* self,
1311 ValaClass* cl)
1312 {
1313 g_return_if_fail (self != NULL);
1314 g_return_if_fail (cl != NULL);
1315 {
1316 ValaList* _type_list = NULL;
1317 ValaList* _tmp0_;
1318 ValaList* _tmp1_;
1319 gint _type_size = 0;
1320 ValaList* _tmp2_;
1321 gint _tmp3_;
1322 gint _tmp4_;
1323 gint _type_index = 0;
1324 _tmp0_ = vala_class_get_base_types (cl);
1325 _tmp1_ = _vala_iterable_ref0 (_tmp0_);
1326 _type_list = _tmp1_;
1327 _tmp2_ = _type_list;
1328 _tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
1329 _tmp4_ = _tmp3_;
1330 _type_size = _tmp4_;
1331 _type_index = -1;
1332 while (TRUE) {
1333 gint _tmp5_;
1334 gint _tmp6_;
1335 ValaDataType* type = NULL;
1336 ValaList* _tmp7_;
1337 gpointer _tmp8_;
1338 ValaDataType* _tmp9_;
1339 ValaTypeSymbol* _tmp10_;
1340 ValaTypeSymbol* _tmp11_;
1341 _type_index = _type_index + 1;
1342 _tmp5_ = _type_index;
1343 _tmp6_ = _type_size;
1344 if (!(_tmp5_ < _tmp6_)) {
1345 break;
1346 }
1347 _tmp7_ = _type_list;
1348 _tmp8_ = vala_list_get (_tmp7_, _type_index);
1349 type = (ValaDataType*) _tmp8_;
1350 _tmp9_ = type;
1351 _tmp10_ = vala_data_type_get_type_symbol (_tmp9_);
1352 _tmp11_ = _tmp10_;
1353 if (VALA_IS_INTERFACE (_tmp11_)) {
1354 ValaSymbol* sym = NULL;
1355 ValaDataType* _tmp12_;
1356 ValaTypeSymbol* _tmp13_;
1357 ValaTypeSymbol* _tmp14_;
1358 ValaScope* _tmp15_;
1359 ValaScope* _tmp16_;
1360 const gchar* _tmp17_;
1361 const gchar* _tmp18_;
1362 ValaSymbol* _tmp19_;
1363 ValaSymbol* _tmp20_;
1364 _tmp12_ = type;
1365 _tmp13_ = vala_data_type_get_type_symbol (_tmp12_);
1366 _tmp14_ = _tmp13_;
1367 _tmp15_ = vala_symbol_get_scope ((ValaSymbol*) _tmp14_);
1368 _tmp16_ = _tmp15_;
1369 _tmp17_ = vala_symbol_get_name ((ValaSymbol*) self);
1370 _tmp18_ = _tmp17_;
1371 _tmp19_ = vala_scope_lookup (_tmp16_, _tmp18_);
1372 sym = _tmp19_;
1373 _tmp20_ = sym;
1374 if (VALA_IS_PROPERTY (_tmp20_)) {
1375 ValaProperty* base_property = NULL;
1376 ValaSymbol* _tmp21_;
1377 ValaProperty* _tmp22_;
1378 gboolean _tmp23_ = FALSE;
1379 ValaProperty* _tmp24_;
1380 gboolean _tmp25_;
1381 _tmp21_ = sym;
1382 _tmp22_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_PROPERTY, ValaProperty));
1383 base_property = _tmp22_;
1384 _tmp24_ = base_property;
1385 _tmp25_ = _tmp24_->priv->_is_abstract;
1386 if (_tmp25_) {
1387 _tmp23_ = TRUE;
1388 } else {
1389 ValaProperty* _tmp26_;
1390 gboolean _tmp27_;
1391 _tmp26_ = base_property;
1392 _tmp27_ = _tmp26_->priv->_is_virtual;
1393 _tmp23_ = _tmp27_;
1394 }
1395 if (_tmp23_) {
1396 gchar* invalid_match = NULL;
1397 ValaProperty* _tmp28_;
1398 gchar* _tmp29_ = NULL;
1399 gboolean _tmp30_;
1400 ValaProperty* _tmp41_;
1401 _tmp28_ = base_property;
1402 _tmp30_ = vala_property_compatible (self, _tmp28_, &_tmp29_);
1403 _g_free0 (invalid_match);
1404 invalid_match = _tmp29_;
1405 if (!_tmp30_) {
1406 ValaSourceReference* _tmp31_;
1407 ValaSourceReference* _tmp32_;
1408 gchar* _tmp33_;
1409 gchar* _tmp34_;
1410 ValaProperty* _tmp35_;
1411 gchar* _tmp36_;
1412 gchar* _tmp37_;
1413 const gchar* _tmp38_;
1414 gchar* _tmp39_;
1415 gchar* _tmp40_;
1416 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1417 _tmp31_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1418 _tmp32_ = _tmp31_;
1419 _tmp33_ = vala_symbol_get_full_name ((ValaSymbol*) self);
1420 _tmp34_ = _tmp33_;
1421 _tmp35_ = base_property;
1422 _tmp36_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp35_);
1423 _tmp37_ = _tmp36_;
1424 _tmp38_ = invalid_match;
1425 _tmp39_ = g_strdup_printf ("Type and/or accessors of overriding property `%s' do not match overrid" \
1426 "den property `%s': %s.", _tmp34_, _tmp37_, _tmp38_);
1427 _tmp40_ = _tmp39_;
1428 vala_report_error (_tmp32_, _tmp40_);
1429 _g_free0 (_tmp40_);
1430 _g_free0 (_tmp37_);
1431 _g_free0 (_tmp34_);
1432 _g_free0 (invalid_match);
1433 _vala_code_node_unref0 (base_property);
1434 _vala_code_node_unref0 (sym);
1435 _vala_code_node_unref0 (type);
1436 _vala_iterable_unref0 (_type_list);
1437 return;
1438 }
1439 _tmp41_ = base_property;
1440 self->priv->_base_interface_property = _tmp41_;
1441 _g_free0 (invalid_match);
1442 _vala_code_node_unref0 (base_property);
1443 _vala_code_node_unref0 (sym);
1444 _vala_code_node_unref0 (type);
1445 _vala_iterable_unref0 (_type_list);
1446 return;
1447 }
1448 _vala_code_node_unref0 (base_property);
1449 }
1450 _vala_code_node_unref0 (sym);
1451 }
1452 _vala_code_node_unref0 (type);
1453 }
1454 _vala_iterable_unref0 (_type_list);
1455 }
1456 }
1457
1458 static gpointer
_vala_source_file_ref0(gpointer self)1459 _vala_source_file_ref0 (gpointer self)
1460 {
1461 return self ? vala_source_file_ref (self) : NULL;
1462 }
1463
1464 static gboolean
vala_property_real_check(ValaCodeNode * base,ValaCodeContext * context)1465 vala_property_real_check (ValaCodeNode* base,
1466 ValaCodeContext* context)
1467 {
1468 ValaProperty * self;
1469 gboolean _tmp0_;
1470 gboolean _tmp1_;
1471 ValaParameter* _tmp4_;
1472 gboolean _tmp6_ = FALSE;
1473 ValaSymbol* _tmp7_;
1474 ValaSymbol* _tmp8_;
1475 gboolean _tmp24_;
1476 ValaSourceFile* old_source_file = NULL;
1477 ValaSemanticAnalyzer* _tmp61_;
1478 ValaSemanticAnalyzer* _tmp62_;
1479 ValaSourceFile* _tmp63_;
1480 ValaSourceFile* _tmp64_;
1481 ValaSourceFile* _tmp65_;
1482 ValaSymbol* old_symbol = NULL;
1483 ValaSemanticAnalyzer* _tmp66_;
1484 ValaSemanticAnalyzer* _tmp67_;
1485 ValaSymbol* _tmp68_;
1486 ValaSymbol* _tmp69_;
1487 ValaSymbol* _tmp70_;
1488 ValaSourceReference* _tmp71_;
1489 ValaSourceReference* _tmp72_;
1490 ValaSemanticAnalyzer* _tmp79_;
1491 ValaSemanticAnalyzer* _tmp80_;
1492 ValaDataType* _tmp81_;
1493 ValaDataType* _tmp82_;
1494 ValaDataType* _tmp85_;
1495 ValaDataType* _tmp86_;
1496 gboolean _tmp87_;
1497 gboolean _tmp88_;
1498 gboolean _tmp93_ = FALSE;
1499 ValaPropertyAccessor* _tmp94_;
1500 ValaPropertyAccessor* _tmp95_;
1501 ValaPropertyAccessor* _tmp104_;
1502 ValaPropertyAccessor* _tmp105_;
1503 ValaPropertyAccessor* _tmp108_;
1504 ValaPropertyAccessor* _tmp109_;
1505 gboolean _tmp112_ = FALSE;
1506 gboolean _tmp113_ = FALSE;
1507 ValaExpression* _tmp114_;
1508 ValaExpression* _tmp115_;
1509 ValaExpression* _tmp125_;
1510 ValaExpression* _tmp126_;
1511 ValaSemanticAnalyzer* _tmp129_;
1512 ValaSemanticAnalyzer* _tmp130_;
1513 ValaDataType* _tmp131_;
1514 ValaDataType* _tmp132_;
1515 gboolean _tmp143_ = FALSE;
1516 gboolean _tmp144_ = FALSE;
1517 gboolean _tmp145_;
1518 gboolean _tmp156_ = FALSE;
1519 gboolean _tmp157_ = FALSE;
1520 gboolean _tmp158_ = FALSE;
1521 gboolean _tmp159_;
1522 gboolean _tmp160_;
1523 gboolean _tmp176_ = FALSE;
1524 ValaPropertyAccessor* _tmp177_;
1525 ValaPropertyAccessor* _tmp178_;
1526 gboolean _tmp191_ = FALSE;
1527 gboolean _tmp192_ = FALSE;
1528 gboolean _tmp193_ = FALSE;
1529 ValaExpression* _tmp194_;
1530 ValaExpression* _tmp195_;
1531 ValaSemanticAnalyzer* _tmp226_;
1532 ValaSemanticAnalyzer* _tmp227_;
1533 ValaSourceFile* _tmp228_;
1534 ValaSemanticAnalyzer* _tmp229_;
1535 ValaSemanticAnalyzer* _tmp230_;
1536 ValaSymbol* _tmp231_;
1537 gboolean _tmp232_;
1538 gboolean _tmp233_;
1539 gboolean result = FALSE;
1540 self = (ValaProperty*) base;
1541 g_return_val_if_fail (context != NULL, FALSE);
1542 _tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
1543 _tmp1_ = _tmp0_;
1544 if (_tmp1_) {
1545 gboolean _tmp2_;
1546 gboolean _tmp3_;
1547 _tmp2_ = vala_code_node_get_error ((ValaCodeNode*) self);
1548 _tmp3_ = _tmp2_;
1549 result = !_tmp3_;
1550 return result;
1551 }
1552 vala_code_node_set_checked ((ValaCodeNode*) self, TRUE);
1553 _tmp4_ = self->priv->_this_parameter;
1554 if (_tmp4_ != NULL) {
1555 ValaParameter* _tmp5_;
1556 _tmp5_ = self->priv->_this_parameter;
1557 vala_code_node_check ((ValaCodeNode*) _tmp5_, context);
1558 }
1559 _tmp7_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1560 _tmp8_ = _tmp7_;
1561 if (VALA_IS_CLASS (_tmp8_)) {
1562 gboolean _tmp9_ = FALSE;
1563 gboolean _tmp10_;
1564 _tmp10_ = self->priv->_is_abstract;
1565 if (_tmp10_) {
1566 _tmp9_ = TRUE;
1567 } else {
1568 gboolean _tmp11_;
1569 _tmp11_ = self->priv->_is_virtual;
1570 _tmp9_ = _tmp11_;
1571 }
1572 _tmp6_ = _tmp9_;
1573 } else {
1574 _tmp6_ = FALSE;
1575 }
1576 if (_tmp6_) {
1577 ValaClass* cl = NULL;
1578 ValaSymbol* _tmp12_;
1579 ValaSymbol* _tmp13_;
1580 ValaClass* _tmp14_;
1581 gboolean _tmp15_ = FALSE;
1582 ValaClass* _tmp16_;
1583 gboolean _tmp17_;
1584 gboolean _tmp18_;
1585 _tmp12_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1586 _tmp13_ = _tmp12_;
1587 _tmp14_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, VALA_TYPE_CLASS, ValaClass));
1588 cl = _tmp14_;
1589 _tmp16_ = cl;
1590 _tmp17_ = vala_class_get_is_compact (_tmp16_);
1591 _tmp18_ = _tmp17_;
1592 if (_tmp18_) {
1593 ValaClass* _tmp19_;
1594 ValaClass* _tmp20_;
1595 ValaClass* _tmp21_;
1596 _tmp19_ = cl;
1597 _tmp20_ = vala_class_get_base_class (_tmp19_);
1598 _tmp21_ = _tmp20_;
1599 _tmp15_ = _tmp21_ != NULL;
1600 } else {
1601 _tmp15_ = FALSE;
1602 }
1603 if (_tmp15_) {
1604 ValaSourceReference* _tmp22_;
1605 ValaSourceReference* _tmp23_;
1606 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1607 _tmp22_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1608 _tmp23_ = _tmp22_;
1609 vala_report_error (_tmp23_, "Abstract and virtual properties may not be declared in derived compact" \
1610 " classes");
1611 result = FALSE;
1612 _vala_code_node_unref0 (cl);
1613 return result;
1614 }
1615 _vala_code_node_unref0 (cl);
1616 }
1617 _tmp24_ = self->priv->_is_abstract;
1618 if (_tmp24_) {
1619 ValaSymbol* _tmp25_;
1620 ValaSymbol* _tmp26_;
1621 _tmp25_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1622 _tmp26_ = _tmp25_;
1623 if (VALA_IS_CLASS (_tmp26_)) {
1624 ValaClass* cl = NULL;
1625 ValaSymbol* _tmp27_;
1626 ValaSymbol* _tmp28_;
1627 ValaClass* _tmp29_;
1628 ValaClass* _tmp30_;
1629 gboolean _tmp31_;
1630 gboolean _tmp32_;
1631 _tmp27_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1632 _tmp28_ = _tmp27_;
1633 _tmp29_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_CLASS, ValaClass));
1634 cl = _tmp29_;
1635 _tmp30_ = cl;
1636 _tmp31_ = vala_class_get_is_abstract (_tmp30_);
1637 _tmp32_ = _tmp31_;
1638 if (!_tmp32_) {
1639 ValaSourceReference* _tmp33_;
1640 ValaSourceReference* _tmp34_;
1641 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1642 _tmp33_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1643 _tmp34_ = _tmp33_;
1644 vala_report_error (_tmp34_, "Abstract properties may not be declared in non-abstract classes");
1645 result = FALSE;
1646 _vala_code_node_unref0 (cl);
1647 return result;
1648 }
1649 _vala_code_node_unref0 (cl);
1650 } else {
1651 ValaSymbol* _tmp35_;
1652 ValaSymbol* _tmp36_;
1653 _tmp35_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1654 _tmp36_ = _tmp35_;
1655 if (!VALA_IS_INTERFACE (_tmp36_)) {
1656 ValaSourceReference* _tmp37_;
1657 ValaSourceReference* _tmp38_;
1658 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1659 _tmp37_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1660 _tmp38_ = _tmp37_;
1661 vala_report_error (_tmp38_, "Abstract properties may not be declared outside of classes and interfa" \
1662 "ces");
1663 result = FALSE;
1664 return result;
1665 }
1666 }
1667 } else {
1668 gboolean _tmp39_;
1669 _tmp39_ = self->priv->_is_virtual;
1670 if (_tmp39_) {
1671 gboolean _tmp40_ = FALSE;
1672 ValaSymbol* _tmp41_;
1673 ValaSymbol* _tmp42_;
1674 _tmp41_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1675 _tmp42_ = _tmp41_;
1676 if (!VALA_IS_CLASS (_tmp42_)) {
1677 ValaSymbol* _tmp43_;
1678 ValaSymbol* _tmp44_;
1679 _tmp43_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1680 _tmp44_ = _tmp43_;
1681 _tmp40_ = !VALA_IS_INTERFACE (_tmp44_);
1682 } else {
1683 _tmp40_ = FALSE;
1684 }
1685 if (_tmp40_) {
1686 ValaSourceReference* _tmp45_;
1687 ValaSourceReference* _tmp46_;
1688 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1689 _tmp45_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1690 _tmp46_ = _tmp45_;
1691 vala_report_error (_tmp46_, "Virtual properties may not be declared outside of classes and interfac" \
1692 "es");
1693 result = FALSE;
1694 return result;
1695 }
1696 } else {
1697 gboolean _tmp47_;
1698 _tmp47_ = self->priv->_overrides;
1699 if (_tmp47_) {
1700 ValaSymbol* _tmp48_;
1701 ValaSymbol* _tmp49_;
1702 _tmp48_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1703 _tmp49_ = _tmp48_;
1704 if (!VALA_IS_CLASS (_tmp49_)) {
1705 ValaSourceReference* _tmp50_;
1706 ValaSourceReference* _tmp51_;
1707 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1708 _tmp50_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1709 _tmp51_ = _tmp50_;
1710 vala_report_error (_tmp51_, "Properties may not be overridden outside of classes");
1711 result = FALSE;
1712 return result;
1713 }
1714 } else {
1715 ValaSymbolAccessibility _tmp52_;
1716 ValaSymbolAccessibility _tmp53_;
1717 _tmp52_ = vala_symbol_get_access ((ValaSymbol*) self);
1718 _tmp53_ = _tmp52_;
1719 if (_tmp53_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED) {
1720 gboolean _tmp54_ = FALSE;
1721 ValaSymbol* _tmp55_;
1722 ValaSymbol* _tmp56_;
1723 _tmp55_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1724 _tmp56_ = _tmp55_;
1725 if (!VALA_IS_CLASS (_tmp56_)) {
1726 ValaSymbol* _tmp57_;
1727 ValaSymbol* _tmp58_;
1728 _tmp57_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
1729 _tmp58_ = _tmp57_;
1730 _tmp54_ = !VALA_IS_INTERFACE (_tmp58_);
1731 } else {
1732 _tmp54_ = FALSE;
1733 }
1734 if (_tmp54_) {
1735 ValaSourceReference* _tmp59_;
1736 ValaSourceReference* _tmp60_;
1737 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1738 _tmp59_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1739 _tmp60_ = _tmp59_;
1740 vala_report_error (_tmp60_, "Protected properties may not be declared outside of classes and interf" \
1741 "aces");
1742 result = FALSE;
1743 return result;
1744 }
1745 }
1746 }
1747 }
1748 }
1749 _tmp61_ = vala_code_context_get_analyzer (context);
1750 _tmp62_ = _tmp61_;
1751 _tmp63_ = vala_semantic_analyzer_get_current_source_file (_tmp62_);
1752 _tmp64_ = _tmp63_;
1753 _tmp65_ = _vala_source_file_ref0 (_tmp64_);
1754 old_source_file = _tmp65_;
1755 _tmp66_ = vala_code_context_get_analyzer (context);
1756 _tmp67_ = _tmp66_;
1757 _tmp68_ = vala_semantic_analyzer_get_current_symbol (_tmp67_);
1758 _tmp69_ = _tmp68_;
1759 _tmp70_ = _vala_code_node_ref0 (_tmp69_);
1760 old_symbol = _tmp70_;
1761 _tmp71_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1762 _tmp72_ = _tmp71_;
1763 if (_tmp72_ != NULL) {
1764 ValaSemanticAnalyzer* _tmp73_;
1765 ValaSemanticAnalyzer* _tmp74_;
1766 ValaSourceReference* _tmp75_;
1767 ValaSourceReference* _tmp76_;
1768 ValaSourceFile* _tmp77_;
1769 ValaSourceFile* _tmp78_;
1770 _tmp73_ = vala_code_context_get_analyzer (context);
1771 _tmp74_ = _tmp73_;
1772 _tmp75_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1773 _tmp76_ = _tmp75_;
1774 _tmp77_ = vala_source_reference_get_file (_tmp76_);
1775 _tmp78_ = _tmp77_;
1776 vala_semantic_analyzer_set_current_source_file (_tmp74_, _tmp78_);
1777 }
1778 _tmp79_ = vala_code_context_get_analyzer (context);
1779 _tmp80_ = _tmp79_;
1780 vala_semantic_analyzer_set_current_symbol (_tmp80_, (ValaSymbol*) self);
1781 _tmp81_ = vala_property_get_property_type (self);
1782 _tmp82_ = _tmp81_;
1783 if (VALA_IS_VOID_TYPE (_tmp82_)) {
1784 ValaSourceReference* _tmp83_;
1785 ValaSourceReference* _tmp84_;
1786 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1787 _tmp83_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1788 _tmp84_ = _tmp83_;
1789 vala_report_error (_tmp84_, "'void' not supported as property type");
1790 result = FALSE;
1791 _vala_code_node_unref0 (old_symbol);
1792 _vala_source_file_unref0 (old_source_file);
1793 return result;
1794 }
1795 _tmp85_ = vala_property_get_property_type (self);
1796 _tmp86_ = _tmp85_;
1797 vala_code_node_check ((ValaCodeNode*) _tmp86_, context);
1798 _tmp87_ = vala_symbol_get_external_package ((ValaSymbol*) self);
1799 _tmp88_ = _tmp87_;
1800 if (!_tmp88_) {
1801 ValaSemanticAnalyzer* _tmp89_;
1802 ValaSemanticAnalyzer* _tmp90_;
1803 ValaDataType* _tmp91_;
1804 ValaDataType* _tmp92_;
1805 _tmp89_ = vala_code_context_get_analyzer (context);
1806 _tmp90_ = _tmp89_;
1807 _tmp91_ = vala_property_get_property_type (self);
1808 _tmp92_ = _tmp91_;
1809 vala_semantic_analyzer_check_type (_tmp90_, _tmp92_);
1810 }
1811 _tmp94_ = vala_property_get_get_accessor (self);
1812 _tmp95_ = _tmp94_;
1813 if (_tmp95_ == NULL) {
1814 ValaPropertyAccessor* _tmp96_;
1815 ValaPropertyAccessor* _tmp97_;
1816 _tmp96_ = vala_property_get_set_accessor (self);
1817 _tmp97_ = _tmp96_;
1818 _tmp93_ = _tmp97_ == NULL;
1819 } else {
1820 _tmp93_ = FALSE;
1821 }
1822 if (_tmp93_) {
1823 ValaSourceReference* _tmp98_;
1824 ValaSourceReference* _tmp99_;
1825 gchar* _tmp100_;
1826 gchar* _tmp101_;
1827 gchar* _tmp102_;
1828 gchar* _tmp103_;
1829 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1830 _tmp98_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1831 _tmp99_ = _tmp98_;
1832 _tmp100_ = vala_symbol_get_full_name ((ValaSymbol*) self);
1833 _tmp101_ = _tmp100_;
1834 _tmp102_ = g_strdup_printf ("Property `%s' must have a `get' accessor and/or a `set' mutator", _tmp101_);
1835 _tmp103_ = _tmp102_;
1836 vala_report_error (_tmp99_, _tmp103_);
1837 _g_free0 (_tmp103_);
1838 _g_free0 (_tmp101_);
1839 result = FALSE;
1840 _vala_code_node_unref0 (old_symbol);
1841 _vala_source_file_unref0 (old_source_file);
1842 return result;
1843 }
1844 _tmp104_ = vala_property_get_get_accessor (self);
1845 _tmp105_ = _tmp104_;
1846 if (_tmp105_ != NULL) {
1847 ValaPropertyAccessor* _tmp106_;
1848 ValaPropertyAccessor* _tmp107_;
1849 _tmp106_ = vala_property_get_get_accessor (self);
1850 _tmp107_ = _tmp106_;
1851 vala_code_node_check ((ValaCodeNode*) _tmp107_, context);
1852 }
1853 _tmp108_ = vala_property_get_set_accessor (self);
1854 _tmp109_ = _tmp108_;
1855 if (_tmp109_ != NULL) {
1856 ValaPropertyAccessor* _tmp110_;
1857 ValaPropertyAccessor* _tmp111_;
1858 _tmp110_ = vala_property_get_set_accessor (self);
1859 _tmp111_ = _tmp110_;
1860 vala_code_node_check ((ValaCodeNode*) _tmp111_, context);
1861 }
1862 _tmp114_ = vala_property_get_initializer (self);
1863 _tmp115_ = _tmp114_;
1864 if (_tmp115_ != NULL) {
1865 ValaField* _tmp116_;
1866 ValaField* _tmp117_;
1867 _tmp116_ = vala_property_get_field (self);
1868 _tmp117_ = _tmp116_;
1869 _tmp113_ = _tmp117_ == NULL;
1870 } else {
1871 _tmp113_ = FALSE;
1872 }
1873 if (_tmp113_) {
1874 gboolean _tmp118_;
1875 _tmp118_ = self->priv->_is_abstract;
1876 _tmp112_ = !_tmp118_;
1877 } else {
1878 _tmp112_ = FALSE;
1879 }
1880 if (_tmp112_) {
1881 ValaSourceReference* _tmp119_;
1882 ValaSourceReference* _tmp120_;
1883 gchar* _tmp121_;
1884 gchar* _tmp122_;
1885 gchar* _tmp123_;
1886 gchar* _tmp124_;
1887 _tmp119_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1888 _tmp120_ = _tmp119_;
1889 _tmp121_ = vala_symbol_get_full_name ((ValaSymbol*) self);
1890 _tmp122_ = _tmp121_;
1891 _tmp123_ = g_strdup_printf ("Property `%s' with custom `get' accessor and/or `set' mutator cannot h" \
1892 "ave `default' value", _tmp122_);
1893 _tmp124_ = _tmp123_;
1894 vala_report_error (_tmp120_, _tmp124_);
1895 _g_free0 (_tmp124_);
1896 _g_free0 (_tmp122_);
1897 }
1898 _tmp125_ = vala_property_get_initializer (self);
1899 _tmp126_ = _tmp125_;
1900 if (_tmp126_ != NULL) {
1901 ValaExpression* _tmp127_;
1902 ValaExpression* _tmp128_;
1903 _tmp127_ = vala_property_get_initializer (self);
1904 _tmp128_ = _tmp127_;
1905 vala_code_node_check ((ValaCodeNode*) _tmp128_, context);
1906 }
1907 _tmp129_ = vala_code_context_get_analyzer (context);
1908 _tmp130_ = _tmp129_;
1909 _tmp131_ = vala_property_get_property_type (self);
1910 _tmp132_ = _tmp131_;
1911 if (!vala_semantic_analyzer_is_type_accessible (_tmp130_, (ValaSymbol*) self, _tmp132_)) {
1912 ValaSourceReference* _tmp133_;
1913 ValaSourceReference* _tmp134_;
1914 ValaDataType* _tmp135_;
1915 ValaDataType* _tmp136_;
1916 gchar* _tmp137_;
1917 gchar* _tmp138_;
1918 gchar* _tmp139_;
1919 gchar* _tmp140_;
1920 gchar* _tmp141_;
1921 gchar* _tmp142_;
1922 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
1923 _tmp133_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1924 _tmp134_ = _tmp133_;
1925 _tmp135_ = vala_property_get_property_type (self);
1926 _tmp136_ = _tmp135_;
1927 _tmp137_ = vala_code_node_to_string ((ValaCodeNode*) _tmp136_);
1928 _tmp138_ = _tmp137_;
1929 _tmp139_ = vala_symbol_get_full_name ((ValaSymbol*) self);
1930 _tmp140_ = _tmp139_;
1931 _tmp141_ = g_strdup_printf ("property type `%s' is less accessible than property `%s'", _tmp138_, _tmp140_);
1932 _tmp142_ = _tmp141_;
1933 vala_report_error (_tmp134_, _tmp142_);
1934 _g_free0 (_tmp142_);
1935 _g_free0 (_tmp140_);
1936 _g_free0 (_tmp138_);
1937 }
1938 _tmp145_ = self->priv->_overrides;
1939 if (_tmp145_) {
1940 ValaProperty* _tmp146_;
1941 ValaProperty* _tmp147_;
1942 _tmp146_ = vala_property_get_base_property (self);
1943 _tmp147_ = _tmp146_;
1944 _tmp144_ = _tmp147_ == NULL;
1945 } else {
1946 _tmp144_ = FALSE;
1947 }
1948 if (_tmp144_) {
1949 ValaProperty* _tmp148_;
1950 ValaProperty* _tmp149_;
1951 _tmp148_ = vala_property_get_base_interface_property (self);
1952 _tmp149_ = _tmp148_;
1953 _tmp143_ = _tmp149_ == NULL;
1954 } else {
1955 _tmp143_ = FALSE;
1956 }
1957 if (_tmp143_) {
1958 ValaSourceReference* _tmp150_;
1959 ValaSourceReference* _tmp151_;
1960 gchar* _tmp152_;
1961 gchar* _tmp153_;
1962 gchar* _tmp154_;
1963 gchar* _tmp155_;
1964 _tmp150_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
1965 _tmp151_ = _tmp150_;
1966 _tmp152_ = vala_symbol_get_full_name ((ValaSymbol*) self);
1967 _tmp153_ = _tmp152_;
1968 _tmp154_ = g_strdup_printf ("%s: no suitable property found to override", _tmp153_);
1969 _tmp155_ = _tmp154_;
1970 vala_report_error (_tmp151_, _tmp155_);
1971 _g_free0 (_tmp155_);
1972 _g_free0 (_tmp153_);
1973 }
1974 _tmp159_ = vala_symbol_get_external_package ((ValaSymbol*) self);
1975 _tmp160_ = _tmp159_;
1976 if (!_tmp160_) {
1977 gboolean _tmp161_;
1978 _tmp161_ = self->priv->_overrides;
1979 _tmp158_ = !_tmp161_;
1980 } else {
1981 _tmp158_ = FALSE;
1982 }
1983 if (_tmp158_) {
1984 gboolean _tmp162_;
1985 gboolean _tmp163_;
1986 _tmp162_ = vala_symbol_get_hides ((ValaSymbol*) self);
1987 _tmp163_ = _tmp162_;
1988 _tmp157_ = !_tmp163_;
1989 } else {
1990 _tmp157_ = FALSE;
1991 }
1992 if (_tmp157_) {
1993 ValaSymbol* _tmp164_;
1994 ValaSymbol* _tmp165_;
1995 _tmp164_ = vala_symbol_get_hidden_member ((ValaSymbol*) self);
1996 _tmp165_ = _tmp164_;
1997 _tmp156_ = _tmp165_ != NULL;
1998 _vala_code_node_unref0 (_tmp165_);
1999 } else {
2000 _tmp156_ = FALSE;
2001 }
2002 if (_tmp156_) {
2003 ValaSourceReference* _tmp166_;
2004 ValaSourceReference* _tmp167_;
2005 gchar* _tmp168_;
2006 gchar* _tmp169_;
2007 ValaSymbol* _tmp170_;
2008 ValaSymbol* _tmp171_;
2009 gchar* _tmp172_;
2010 gchar* _tmp173_;
2011 gchar* _tmp174_;
2012 gchar* _tmp175_;
2013 _tmp166_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
2014 _tmp167_ = _tmp166_;
2015 _tmp168_ = vala_symbol_get_full_name ((ValaSymbol*) self);
2016 _tmp169_ = _tmp168_;
2017 _tmp170_ = vala_symbol_get_hidden_member ((ValaSymbol*) self);
2018 _tmp171_ = _tmp170_;
2019 _tmp172_ = vala_symbol_get_full_name (_tmp171_);
2020 _tmp173_ = _tmp172_;
2021 _tmp174_ = g_strdup_printf ("%s hides inherited property `%s'. Use the `new' keyword if hiding was " \
2022 "intentional", _tmp169_, _tmp173_);
2023 _tmp175_ = _tmp174_;
2024 vala_report_warning (_tmp167_, _tmp175_);
2025 _g_free0 (_tmp175_);
2026 _g_free0 (_tmp173_);
2027 _vala_code_node_unref0 (_tmp171_);
2028 _g_free0 (_tmp169_);
2029 }
2030 _tmp177_ = vala_property_get_set_accessor (self);
2031 _tmp178_ = _tmp177_;
2032 if (_tmp178_ != NULL) {
2033 ValaPropertyAccessor* _tmp179_;
2034 ValaPropertyAccessor* _tmp180_;
2035 gboolean _tmp181_;
2036 gboolean _tmp182_;
2037 _tmp179_ = vala_property_get_set_accessor (self);
2038 _tmp180_ = _tmp179_;
2039 _tmp181_ = vala_property_accessor_get_construction (_tmp180_);
2040 _tmp182_ = _tmp181_;
2041 _tmp176_ = _tmp182_;
2042 } else {
2043 _tmp176_ = FALSE;
2044 }
2045 if (_tmp176_) {
2046 ValaSymbolAccessibility _tmp183_;
2047 ValaSymbolAccessibility _tmp184_;
2048 _tmp183_ = vala_symbol_get_access ((ValaSymbol*) self);
2049 _tmp184_ = _tmp183_;
2050 if (_tmp184_ != VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
2051 ValaSourceReference* _tmp185_;
2052 ValaSourceReference* _tmp186_;
2053 gchar* _tmp187_;
2054 gchar* _tmp188_;
2055 gchar* _tmp189_;
2056 gchar* _tmp190_;
2057 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2058 _tmp185_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
2059 _tmp186_ = _tmp185_;
2060 _tmp187_ = vala_symbol_get_full_name ((ValaSymbol*) self);
2061 _tmp188_ = _tmp187_;
2062 _tmp189_ = g_strdup_printf ("%s: construct properties must be public", _tmp188_);
2063 _tmp190_ = _tmp189_;
2064 vala_report_error (_tmp186_, _tmp190_);
2065 _g_free0 (_tmp190_);
2066 _g_free0 (_tmp188_);
2067 }
2068 }
2069 _tmp194_ = vala_property_get_initializer (self);
2070 _tmp195_ = _tmp194_;
2071 if (_tmp195_ != NULL) {
2072 ValaExpression* _tmp196_;
2073 ValaExpression* _tmp197_;
2074 gboolean _tmp198_;
2075 gboolean _tmp199_;
2076 _tmp196_ = vala_property_get_initializer (self);
2077 _tmp197_ = _tmp196_;
2078 _tmp198_ = vala_code_node_get_error ((ValaCodeNode*) _tmp197_);
2079 _tmp199_ = _tmp198_;
2080 _tmp193_ = !_tmp199_;
2081 } else {
2082 _tmp193_ = FALSE;
2083 }
2084 if (_tmp193_) {
2085 ValaExpression* _tmp200_;
2086 ValaExpression* _tmp201_;
2087 ValaDataType* _tmp202_;
2088 ValaDataType* _tmp203_;
2089 _tmp200_ = vala_property_get_initializer (self);
2090 _tmp201_ = _tmp200_;
2091 _tmp202_ = vala_expression_get_value_type (_tmp201_);
2092 _tmp203_ = _tmp202_;
2093 _tmp192_ = _tmp203_ != NULL;
2094 } else {
2095 _tmp192_ = FALSE;
2096 }
2097 if (_tmp192_) {
2098 ValaExpression* _tmp204_;
2099 ValaExpression* _tmp205_;
2100 ValaDataType* _tmp206_;
2101 ValaDataType* _tmp207_;
2102 ValaDataType* _tmp208_;
2103 ValaDataType* _tmp209_;
2104 _tmp204_ = vala_property_get_initializer (self);
2105 _tmp205_ = _tmp204_;
2106 _tmp206_ = vala_expression_get_value_type (_tmp205_);
2107 _tmp207_ = _tmp206_;
2108 _tmp208_ = vala_property_get_property_type (self);
2109 _tmp209_ = _tmp208_;
2110 _tmp191_ = !vala_data_type_compatible (_tmp207_, _tmp209_);
2111 } else {
2112 _tmp191_ = FALSE;
2113 }
2114 if (_tmp191_) {
2115 ValaExpression* _tmp210_;
2116 ValaExpression* _tmp211_;
2117 ValaSourceReference* _tmp212_;
2118 ValaSourceReference* _tmp213_;
2119 ValaDataType* _tmp214_;
2120 ValaDataType* _tmp215_;
2121 gchar* _tmp216_;
2122 gchar* _tmp217_;
2123 ValaExpression* _tmp218_;
2124 ValaExpression* _tmp219_;
2125 ValaDataType* _tmp220_;
2126 ValaDataType* _tmp221_;
2127 gchar* _tmp222_;
2128 gchar* _tmp223_;
2129 gchar* _tmp224_;
2130 gchar* _tmp225_;
2131 vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
2132 _tmp210_ = vala_property_get_initializer (self);
2133 _tmp211_ = _tmp210_;
2134 _tmp212_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp211_);
2135 _tmp213_ = _tmp212_;
2136 _tmp214_ = vala_property_get_property_type (self);
2137 _tmp215_ = _tmp214_;
2138 _tmp216_ = vala_code_node_to_string ((ValaCodeNode*) _tmp215_);
2139 _tmp217_ = _tmp216_;
2140 _tmp218_ = vala_property_get_initializer (self);
2141 _tmp219_ = _tmp218_;
2142 _tmp220_ = vala_expression_get_value_type (_tmp219_);
2143 _tmp221_ = _tmp220_;
2144 _tmp222_ = vala_code_node_to_string ((ValaCodeNode*) _tmp221_);
2145 _tmp223_ = _tmp222_;
2146 _tmp224_ = g_strdup_printf ("Expected initializer of type `%s' but got `%s'", _tmp217_, _tmp223_);
2147 _tmp225_ = _tmp224_;
2148 vala_report_error (_tmp213_, _tmp225_);
2149 _g_free0 (_tmp225_);
2150 _g_free0 (_tmp223_);
2151 _g_free0 (_tmp217_);
2152 }
2153 _tmp226_ = vala_code_context_get_analyzer (context);
2154 _tmp227_ = _tmp226_;
2155 _tmp228_ = old_source_file;
2156 vala_semantic_analyzer_set_current_source_file (_tmp227_, _tmp228_);
2157 _tmp229_ = vala_code_context_get_analyzer (context);
2158 _tmp230_ = _tmp229_;
2159 _tmp231_ = old_symbol;
2160 vala_semantic_analyzer_set_current_symbol (_tmp230_, _tmp231_);
2161 _tmp232_ = vala_code_node_get_error ((ValaCodeNode*) self);
2162 _tmp233_ = _tmp232_;
2163 result = !_tmp233_;
2164 _vala_code_node_unref0 (old_symbol);
2165 _vala_source_file_unref0 (old_source_file);
2166 return result;
2167 }
2168
2169 static void
vala_property_class_init(ValaPropertyClass * klass,gpointer klass_data)2170 vala_property_class_init (ValaPropertyClass * klass,
2171 gpointer klass_data)
2172 {
2173 vala_property_parent_class = g_type_class_peek_parent (klass);
2174 ((ValaCodeNodeClass *) klass)->finalize = vala_property_finalize;
2175 g_type_class_adjust_private_offset (klass, &ValaProperty_private_offset);
2176 ((ValaCodeNodeClass *) klass)->accept = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_property_real_accept;
2177 ((ValaCodeNodeClass *) klass)->accept_children = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_property_real_accept_children;
2178 ((ValaCodeNodeClass *) klass)->replace_type = (void (*) (ValaCodeNode*, ValaDataType*, ValaDataType*)) vala_property_real_replace_type;
2179 ((ValaCodeNodeClass *) klass)->replace_expression = (void (*) (ValaCodeNode*, ValaExpression*, ValaExpression*)) vala_property_real_replace_expression;
2180 ((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_property_real_check;
2181 }
2182
2183 static void
vala_property_vala_lockable_interface_init(ValaLockableIface * iface,gpointer iface_data)2184 vala_property_vala_lockable_interface_init (ValaLockableIface * iface,
2185 gpointer iface_data)
2186 {
2187 vala_property_vala_lockable_parent_iface = g_type_interface_peek_parent (iface);
2188 iface->get_lock_used = vala_property_real_get_lock_used;
2189 iface->set_lock_used = vala_property_real_set_lock_used;
2190 }
2191
2192 static void
vala_property_instance_init(ValaProperty * self,gpointer klass)2193 vala_property_instance_init (ValaProperty * self,
2194 gpointer klass)
2195 {
2196 self->priv = vala_property_get_instance_private (self);
2197 self->priv->_binding = VALA_MEMBER_BINDING_INSTANCE;
2198 }
2199
2200 static void
vala_property_finalize(ValaCodeNode * obj)2201 vala_property_finalize (ValaCodeNode * obj)
2202 {
2203 ValaProperty * self;
2204 self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_PROPERTY, ValaProperty);
2205 _vala_code_node_unref0 (self->priv->_this_parameter);
2206 _vala_code_node_unref0 (self->priv->_initializer);
2207 _vala_code_node_unref0 (self->priv->_data_type);
2208 _vala_code_node_unref0 (self->priv->_get_accessor);
2209 _vala_code_node_unref0 (self->priv->_set_accessor);
2210 _g_free0 (self->priv->_nick);
2211 _g_free0 (self->priv->_blurb);
2212 _g_free0 (self->priv->_notify);
2213 _vala_code_node_unref0 (self->priv->_field);
2214 VALA_CODE_NODE_CLASS (vala_property_parent_class)->finalize (obj);
2215 }
2216
2217 /**
2218 * Represents a property declaration in the source code.
2219 */
2220 static GType
vala_property_get_type_once(void)2221 vala_property_get_type_once (void)
2222 {
2223 static const GTypeInfo g_define_type_info = { sizeof (ValaPropertyClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_property_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaProperty), 0, (GInstanceInitFunc) vala_property_instance_init, NULL };
2224 static const GInterfaceInfo vala_lockable_info = { (GInterfaceInitFunc) vala_property_vala_lockable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
2225 GType vala_property_type_id;
2226 vala_property_type_id = g_type_register_static (VALA_TYPE_SYMBOL, "ValaProperty", &g_define_type_info, 0);
2227 g_type_add_interface_static (vala_property_type_id, VALA_TYPE_LOCKABLE, &vala_lockable_info);
2228 ValaProperty_private_offset = g_type_add_instance_private (vala_property_type_id, sizeof (ValaPropertyPrivate));
2229 return vala_property_type_id;
2230 }
2231
2232 GType
vala_property_get_type(void)2233 vala_property_get_type (void)
2234 {
2235 static volatile gsize vala_property_type_id__volatile = 0;
2236 if (g_once_init_enter (&vala_property_type_id__volatile)) {
2237 GType vala_property_type_id;
2238 vala_property_type_id = vala_property_get_type_once ();
2239 g_once_init_leave (&vala_property_type_id__volatile, vala_property_type_id);
2240 }
2241 return vala_property_type_id__volatile;
2242 }
2243
2244