1 /* valasourcereference.c generated by valac, the Vala compiler
2  * generated from valasourcereference.vala, do not modify */
3 
4 /* valasourcereference.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  */
25 
26 #include "vala.h"
27 #include <valagee.h>
28 #include <glib-object.h>
29 #include <glib.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <gobject/gvaluecollector.h>
33 
34 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
35 #define _g_free0(var) (var = (g_free (var), NULL))
36 typedef struct _ValaParamSpecSourceReference ValaParamSpecSourceReference;
37 
38 struct _ValaSourceReferencePrivate {
39 	ValaSourceFile* _file;
40 	ValaSourceLocation _begin;
41 	ValaSourceLocation _end;
42 	ValaList* _using_directives;
43 };
44 
45 struct _ValaParamSpecSourceReference {
46 	GParamSpec parent_instance;
47 };
48 
49 static gint ValaSourceReference_private_offset;
50 static gpointer vala_source_reference_parent_class = NULL;
51 
52 static void vala_source_reference_set_using_directives (ValaSourceReference* self,
53                                                  ValaList* value);
54 static void vala_source_reference_finalize (ValaSourceReference * obj);
55 static GType vala_source_reference_get_type_once (void);
56 
57 static inline gpointer
vala_source_reference_get_instance_private(ValaSourceReference * self)58 vala_source_reference_get_instance_private (ValaSourceReference* self)
59 {
60 	return G_STRUCT_MEMBER_P (self, ValaSourceReference_private_offset);
61 }
62 
63 ValaSourceFile*
vala_source_reference_get_file(ValaSourceReference * self)64 vala_source_reference_get_file (ValaSourceReference* self)
65 {
66 	ValaSourceFile* result;
67 	ValaSourceFile* _tmp0_;
68 	g_return_val_if_fail (self != NULL, NULL);
69 	_tmp0_ = self->priv->_file;
70 	result = _tmp0_;
71 	return result;
72 }
73 
74 void
vala_source_reference_set_file(ValaSourceReference * self,ValaSourceFile * value)75 vala_source_reference_set_file (ValaSourceReference* self,
76                                 ValaSourceFile* value)
77 {
78 	g_return_if_fail (self != NULL);
79 	self->priv->_file = value;
80 }
81 
82 void
vala_source_reference_get_begin(ValaSourceReference * self,ValaSourceLocation * result)83 vala_source_reference_get_begin (ValaSourceReference* self,
84                                  ValaSourceLocation * result)
85 {
86 	ValaSourceLocation _tmp0_;
87 	g_return_if_fail (self != NULL);
88 	_tmp0_ = self->priv->_begin;
89 	*result = _tmp0_;
90 	return;
91 }
92 
93 void
vala_source_reference_set_begin(ValaSourceReference * self,ValaSourceLocation * value)94 vala_source_reference_set_begin (ValaSourceReference* self,
95                                  ValaSourceLocation * value)
96 {
97 	ValaSourceLocation _tmp0_;
98 	g_return_if_fail (self != NULL);
99 	_tmp0_ = *value;
100 	self->priv->_begin = _tmp0_;
101 }
102 
103 void
vala_source_reference_get_end(ValaSourceReference * self,ValaSourceLocation * result)104 vala_source_reference_get_end (ValaSourceReference* self,
105                                ValaSourceLocation * result)
106 {
107 	ValaSourceLocation _tmp0_;
108 	g_return_if_fail (self != NULL);
109 	_tmp0_ = self->priv->_end;
110 	*result = _tmp0_;
111 	return;
112 }
113 
114 void
vala_source_reference_set_end(ValaSourceReference * self,ValaSourceLocation * value)115 vala_source_reference_set_end (ValaSourceReference* self,
116                                ValaSourceLocation * value)
117 {
118 	ValaSourceLocation _tmp0_;
119 	g_return_if_fail (self != NULL);
120 	_tmp0_ = *value;
121 	self->priv->_end = _tmp0_;
122 }
123 
124 ValaList*
vala_source_reference_get_using_directives(ValaSourceReference * self)125 vala_source_reference_get_using_directives (ValaSourceReference* self)
126 {
127 	ValaList* result;
128 	ValaList* _tmp0_;
129 	g_return_val_if_fail (self != NULL, NULL);
130 	_tmp0_ = self->priv->_using_directives;
131 	result = _tmp0_;
132 	return result;
133 }
134 
135 static gpointer
_vala_iterable_ref0(gpointer self)136 _vala_iterable_ref0 (gpointer self)
137 {
138 	return self ? vala_iterable_ref (self) : NULL;
139 }
140 
141 static void
vala_source_reference_set_using_directives(ValaSourceReference * self,ValaList * value)142 vala_source_reference_set_using_directives (ValaSourceReference* self,
143                                             ValaList* value)
144 {
145 	ValaList* _tmp0_;
146 	g_return_if_fail (self != NULL);
147 	_tmp0_ = _vala_iterable_ref0 (value);
148 	_vala_iterable_unref0 (self->priv->_using_directives);
149 	self->priv->_using_directives = _tmp0_;
150 }
151 
152 /**
153  * Creates a new source reference.
154  *
155  * @param _file        a source file
156  * @param begin        the begin of the referenced source code
157  * @param end          the end of the referenced source code
158  * @return             newly created source reference
159  */
160 ValaSourceReference*
vala_source_reference_construct(GType object_type,ValaSourceFile * _file,ValaSourceLocation * begin,ValaSourceLocation * end)161 vala_source_reference_construct (GType object_type,
162                                  ValaSourceFile* _file,
163                                  ValaSourceLocation* begin,
164                                  ValaSourceLocation* end)
165 {
166 	ValaSourceReference* self = NULL;
167 	ValaSourceLocation _tmp0_;
168 	ValaSourceLocation _tmp1_;
169 	ValaSourceFile* _tmp2_;
170 	ValaList* _tmp3_;
171 	ValaList* _tmp4_;
172 	g_return_val_if_fail (_file != NULL, NULL);
173 	g_return_val_if_fail (begin != NULL, NULL);
174 	g_return_val_if_fail (end != NULL, NULL);
175 	self = (ValaSourceReference*) g_type_create_instance (object_type);
176 	vala_source_reference_set_file (self, _file);
177 	_tmp0_ = *begin;
178 	vala_source_reference_set_begin (self, &_tmp0_);
179 	_tmp1_ = *end;
180 	vala_source_reference_set_end (self, &_tmp1_);
181 	_tmp2_ = self->priv->_file;
182 	_tmp3_ = vala_source_file_get_current_using_directives (_tmp2_);
183 	_tmp4_ = _tmp3_;
184 	vala_source_reference_set_using_directives (self, _tmp4_);
185 	return self;
186 }
187 
188 ValaSourceReference*
vala_source_reference_new(ValaSourceFile * _file,ValaSourceLocation * begin,ValaSourceLocation * end)189 vala_source_reference_new (ValaSourceFile* _file,
190                            ValaSourceLocation* begin,
191                            ValaSourceLocation* end)
192 {
193 	return vala_source_reference_construct (VALA_TYPE_SOURCE_REFERENCE, _file, begin, end);
194 }
195 
196 /**
197  * Checks if given source location is part of this source reference.
198  *
199  * @param location     a source location
200  * @return             whether this source location is part of this
201  */
202 gboolean
vala_source_reference_contains(ValaSourceReference * self,ValaSourceLocation * location)203 vala_source_reference_contains (ValaSourceReference* self,
204                                 ValaSourceLocation* location)
205 {
206 	gboolean _tmp0_ = FALSE;
207 	ValaSourceLocation _tmp1_;
208 	ValaSourceLocation _tmp2_;
209 	gboolean result = FALSE;
210 	g_return_val_if_fail (self != NULL, FALSE);
211 	g_return_val_if_fail (location != NULL, FALSE);
212 	_tmp1_ = *location;
213 	_tmp2_ = self->priv->_begin;
214 	if (_tmp1_.line > _tmp2_.line) {
215 		ValaSourceLocation _tmp3_;
216 		ValaSourceLocation _tmp4_;
217 		_tmp3_ = *location;
218 		_tmp4_ = self->priv->_end;
219 		_tmp0_ = _tmp3_.line < _tmp4_.line;
220 	} else {
221 		_tmp0_ = FALSE;
222 	}
223 	if (_tmp0_) {
224 		result = TRUE;
225 		return result;
226 	} else {
227 		gboolean _tmp5_ = FALSE;
228 		ValaSourceLocation _tmp6_;
229 		ValaSourceLocation _tmp7_;
230 		_tmp6_ = *location;
231 		_tmp7_ = self->priv->_begin;
232 		if (_tmp6_.line == _tmp7_.line) {
233 			ValaSourceLocation _tmp8_;
234 			ValaSourceLocation _tmp9_;
235 			_tmp8_ = *location;
236 			_tmp9_ = self->priv->_end;
237 			_tmp5_ = _tmp8_.line == _tmp9_.line;
238 		} else {
239 			_tmp5_ = FALSE;
240 		}
241 		if (_tmp5_) {
242 			gboolean _tmp10_ = FALSE;
243 			ValaSourceLocation _tmp11_;
244 			ValaSourceLocation _tmp12_;
245 			_tmp11_ = *location;
246 			_tmp12_ = self->priv->_begin;
247 			if (_tmp11_.column >= _tmp12_.column) {
248 				ValaSourceLocation _tmp13_;
249 				ValaSourceLocation _tmp14_;
250 				_tmp13_ = *location;
251 				_tmp14_ = self->priv->_end;
252 				_tmp10_ = _tmp13_.column <= _tmp14_.column;
253 			} else {
254 				_tmp10_ = FALSE;
255 			}
256 			result = _tmp10_;
257 			return result;
258 		} else {
259 			ValaSourceLocation _tmp15_;
260 			ValaSourceLocation _tmp16_;
261 			_tmp15_ = *location;
262 			_tmp16_ = self->priv->_begin;
263 			if (_tmp15_.line == _tmp16_.line) {
264 				ValaSourceLocation _tmp17_;
265 				ValaSourceLocation _tmp18_;
266 				_tmp17_ = *location;
267 				_tmp18_ = self->priv->_begin;
268 				result = _tmp17_.column >= _tmp18_.column;
269 				return result;
270 			} else {
271 				ValaSourceLocation _tmp19_;
272 				ValaSourceLocation _tmp20_;
273 				_tmp19_ = *location;
274 				_tmp20_ = self->priv->_end;
275 				if (_tmp19_.line == _tmp20_.line) {
276 					ValaSourceLocation _tmp21_;
277 					ValaSourceLocation _tmp22_;
278 					_tmp21_ = *location;
279 					_tmp22_ = self->priv->_end;
280 					result = _tmp21_.column <= _tmp22_.column;
281 					return result;
282 				} else {
283 					result = FALSE;
284 					return result;
285 				}
286 			}
287 		}
288 	}
289 }
290 
291 /**
292  * Returns a string representation of this source reference.
293  *
294  * @return human-readable string
295  */
296 gchar*
vala_source_reference_to_string(ValaSourceReference * self)297 vala_source_reference_to_string (ValaSourceReference* self)
298 {
299 	ValaSourceFile* _tmp0_;
300 	gchar* _tmp1_;
301 	gchar* _tmp2_;
302 	ValaSourceLocation _tmp3_;
303 	ValaSourceLocation _tmp4_;
304 	ValaSourceLocation _tmp5_;
305 	ValaSourceLocation _tmp6_;
306 	gchar* _tmp7_;
307 	gchar* _tmp8_;
308 	gchar* result = NULL;
309 	g_return_val_if_fail (self != NULL, NULL);
310 	_tmp0_ = self->priv->_file;
311 	_tmp1_ = vala_source_file_get_relative_filename (_tmp0_);
312 	_tmp2_ = _tmp1_;
313 	_tmp3_ = self->priv->_begin;
314 	_tmp4_ = self->priv->_begin;
315 	_tmp5_ = self->priv->_end;
316 	_tmp6_ = self->priv->_end;
317 	_tmp7_ = g_strdup_printf ("%s:%d.%d-%d.%d", _tmp2_, _tmp3_.line, _tmp4_.column, _tmp5_.line, _tmp6_.column);
318 	_tmp8_ = _tmp7_;
319 	_g_free0 (_tmp2_);
320 	result = _tmp8_;
321 	return result;
322 }
323 
324 static void
vala_value_source_reference_init(GValue * value)325 vala_value_source_reference_init (GValue* value)
326 {
327 	value->data[0].v_pointer = NULL;
328 }
329 
330 static void
vala_value_source_reference_free_value(GValue * value)331 vala_value_source_reference_free_value (GValue* value)
332 {
333 	if (value->data[0].v_pointer) {
334 		vala_source_reference_unref (value->data[0].v_pointer);
335 	}
336 }
337 
338 static void
vala_value_source_reference_copy_value(const GValue * src_value,GValue * dest_value)339 vala_value_source_reference_copy_value (const GValue* src_value,
340                                         GValue* dest_value)
341 {
342 	if (src_value->data[0].v_pointer) {
343 		dest_value->data[0].v_pointer = vala_source_reference_ref (src_value->data[0].v_pointer);
344 	} else {
345 		dest_value->data[0].v_pointer = NULL;
346 	}
347 }
348 
349 static gpointer
vala_value_source_reference_peek_pointer(const GValue * value)350 vala_value_source_reference_peek_pointer (const GValue* value)
351 {
352 	return value->data[0].v_pointer;
353 }
354 
355 static gchar*
vala_value_source_reference_collect_value(GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)356 vala_value_source_reference_collect_value (GValue* value,
357                                            guint n_collect_values,
358                                            GTypeCValue* collect_values,
359                                            guint collect_flags)
360 {
361 	if (collect_values[0].v_pointer) {
362 		ValaSourceReference * object;
363 		object = collect_values[0].v_pointer;
364 		if (object->parent_instance.g_class == NULL) {
365 			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
366 		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
367 			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
368 		}
369 		value->data[0].v_pointer = vala_source_reference_ref (object);
370 	} else {
371 		value->data[0].v_pointer = NULL;
372 	}
373 	return NULL;
374 }
375 
376 static gchar*
vala_value_source_reference_lcopy_value(const GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)377 vala_value_source_reference_lcopy_value (const GValue* value,
378                                          guint n_collect_values,
379                                          GTypeCValue* collect_values,
380                                          guint collect_flags)
381 {
382 	ValaSourceReference ** object_p;
383 	object_p = collect_values[0].v_pointer;
384 	if (!object_p) {
385 		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
386 	}
387 	if (!value->data[0].v_pointer) {
388 		*object_p = NULL;
389 	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
390 		*object_p = value->data[0].v_pointer;
391 	} else {
392 		*object_p = vala_source_reference_ref (value->data[0].v_pointer);
393 	}
394 	return NULL;
395 }
396 
397 GParamSpec*
vala_param_spec_source_reference(const gchar * name,const gchar * nick,const gchar * blurb,GType object_type,GParamFlags flags)398 vala_param_spec_source_reference (const gchar* name,
399                                   const gchar* nick,
400                                   const gchar* blurb,
401                                   GType object_type,
402                                   GParamFlags flags)
403 {
404 	ValaParamSpecSourceReference* spec;
405 	g_return_val_if_fail (g_type_is_a (object_type, VALA_TYPE_SOURCE_REFERENCE), NULL);
406 	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
407 	G_PARAM_SPEC (spec)->value_type = object_type;
408 	return G_PARAM_SPEC (spec);
409 }
410 
411 gpointer
vala_value_get_source_reference(const GValue * value)412 vala_value_get_source_reference (const GValue* value)
413 {
414 	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_SOURCE_REFERENCE), NULL);
415 	return value->data[0].v_pointer;
416 }
417 
418 void
vala_value_set_source_reference(GValue * value,gpointer v_object)419 vala_value_set_source_reference (GValue* value,
420                                  gpointer v_object)
421 {
422 	ValaSourceReference * old;
423 	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_SOURCE_REFERENCE));
424 	old = value->data[0].v_pointer;
425 	if (v_object) {
426 		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_SOURCE_REFERENCE));
427 		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
428 		value->data[0].v_pointer = v_object;
429 		vala_source_reference_ref (value->data[0].v_pointer);
430 	} else {
431 		value->data[0].v_pointer = NULL;
432 	}
433 	if (old) {
434 		vala_source_reference_unref (old);
435 	}
436 }
437 
438 void
vala_value_take_source_reference(GValue * value,gpointer v_object)439 vala_value_take_source_reference (GValue* value,
440                                   gpointer v_object)
441 {
442 	ValaSourceReference * old;
443 	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_SOURCE_REFERENCE));
444 	old = value->data[0].v_pointer;
445 	if (v_object) {
446 		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_SOURCE_REFERENCE));
447 		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
448 		value->data[0].v_pointer = v_object;
449 	} else {
450 		value->data[0].v_pointer = NULL;
451 	}
452 	if (old) {
453 		vala_source_reference_unref (old);
454 	}
455 }
456 
457 static void
vala_source_reference_class_init(ValaSourceReferenceClass * klass,gpointer klass_data)458 vala_source_reference_class_init (ValaSourceReferenceClass * klass,
459                                   gpointer klass_data)
460 {
461 	vala_source_reference_parent_class = g_type_class_peek_parent (klass);
462 	((ValaSourceReferenceClass *) klass)->finalize = vala_source_reference_finalize;
463 	g_type_class_adjust_private_offset (klass, &ValaSourceReference_private_offset);
464 }
465 
466 static void
vala_source_reference_instance_init(ValaSourceReference * self,gpointer klass)467 vala_source_reference_instance_init (ValaSourceReference * self,
468                                      gpointer klass)
469 {
470 	self->priv = vala_source_reference_get_instance_private (self);
471 	self->ref_count = 1;
472 }
473 
474 static void
vala_source_reference_finalize(ValaSourceReference * obj)475 vala_source_reference_finalize (ValaSourceReference * obj)
476 {
477 	ValaSourceReference * self;
478 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_SOURCE_REFERENCE, ValaSourceReference);
479 	g_signal_handlers_destroy (self);
480 	_vala_iterable_unref0 (self->priv->_using_directives);
481 }
482 
483 /**
484  * Represents a reference to a location in a source file.
485  */
486 static GType
vala_source_reference_get_type_once(void)487 vala_source_reference_get_type_once (void)
488 {
489 	static const GTypeValueTable g_define_type_value_table = { vala_value_source_reference_init, vala_value_source_reference_free_value, vala_value_source_reference_copy_value, vala_value_source_reference_peek_pointer, "p", vala_value_source_reference_collect_value, "p", vala_value_source_reference_lcopy_value };
490 	static const GTypeInfo g_define_type_info = { sizeof (ValaSourceReferenceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_source_reference_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaSourceReference), 0, (GInstanceInitFunc) vala_source_reference_instance_init, &g_define_type_value_table };
491 	static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
492 	GType vala_source_reference_type_id;
493 	vala_source_reference_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaSourceReference", &g_define_type_info, &g_define_type_fundamental_info, 0);
494 	ValaSourceReference_private_offset = g_type_add_instance_private (vala_source_reference_type_id, sizeof (ValaSourceReferencePrivate));
495 	return vala_source_reference_type_id;
496 }
497 
498 GType
vala_source_reference_get_type(void)499 vala_source_reference_get_type (void)
500 {
501 	static volatile gsize vala_source_reference_type_id__volatile = 0;
502 	if (g_once_init_enter (&vala_source_reference_type_id__volatile)) {
503 		GType vala_source_reference_type_id;
504 		vala_source_reference_type_id = vala_source_reference_get_type_once ();
505 		g_once_init_leave (&vala_source_reference_type_id__volatile, vala_source_reference_type_id);
506 	}
507 	return vala_source_reference_type_id__volatile;
508 }
509 
510 gpointer
vala_source_reference_ref(gpointer instance)511 vala_source_reference_ref (gpointer instance)
512 {
513 	ValaSourceReference * self;
514 	self = instance;
515 	g_atomic_int_inc (&self->ref_count);
516 	return instance;
517 }
518 
519 void
vala_source_reference_unref(gpointer instance)520 vala_source_reference_unref (gpointer instance)
521 {
522 	ValaSourceReference * self;
523 	self = instance;
524 	if (g_atomic_int_dec_and_test (&self->ref_count)) {
525 		VALA_SOURCE_REFERENCE_GET_CLASS (self)->finalize (self);
526 		g_type_free_instance ((GTypeInstance *) self);
527 	}
528 }
529 
530