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