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