1 /* valaintegertype.c generated by valac, the Vala compiler
2  * generated from valaintegertype.vala, do not modify */
3 
4 /* valaintegertype.vala
5  *
6  * Copyright (C) 2008-2009  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 <stdlib.h>
28 #include <string.h>
29 #include <glib.h>
30 
31 #define _g_free0(var) (var = (g_free (var), NULL))
32 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
33 
34 struct _ValaIntegerTypePrivate {
35 	gchar* literal_value;
36 	gchar* literal_type_name;
37 };
38 
39 static gint ValaIntegerType_private_offset;
40 static gpointer vala_integer_type_parent_class = NULL;
41 
42 static ValaDataType* vala_integer_type_real_copy (ValaDataType* base);
43 static gboolean vala_integer_type_real_compatible (ValaDataType* base,
44                                             ValaDataType* target_type);
45 static void vala_integer_type_finalize (ValaCodeNode * obj);
46 static GType vala_integer_type_get_type_once (void);
47 
48 static inline gpointer
vala_integer_type_get_instance_private(ValaIntegerType * self)49 vala_integer_type_get_instance_private (ValaIntegerType* self)
50 {
51 	return G_STRUCT_MEMBER_P (self, ValaIntegerType_private_offset);
52 }
53 
54 ValaIntegerType*
vala_integer_type_construct(GType object_type,ValaStruct * type_symbol,const gchar * literal_value,const gchar * literal_type_name)55 vala_integer_type_construct (GType object_type,
56                              ValaStruct* type_symbol,
57                              const gchar* literal_value,
58                              const gchar* literal_type_name)
59 {
60 	ValaIntegerType* self = NULL;
61 	gchar* _tmp0_;
62 	gchar* _tmp1_;
63 	g_return_val_if_fail (type_symbol != NULL, NULL);
64 	self = (ValaIntegerType*) vala_value_type_construct (object_type, (ValaTypeSymbol*) type_symbol);
65 	_tmp0_ = g_strdup (literal_value);
66 	_g_free0 (self->priv->literal_value);
67 	self->priv->literal_value = _tmp0_;
68 	_tmp1_ = g_strdup (literal_type_name);
69 	_g_free0 (self->priv->literal_type_name);
70 	self->priv->literal_type_name = _tmp1_;
71 	return self;
72 }
73 
74 ValaIntegerType*
vala_integer_type_new(ValaStruct * type_symbol,const gchar * literal_value,const gchar * literal_type_name)75 vala_integer_type_new (ValaStruct* type_symbol,
76                        const gchar* literal_value,
77                        const gchar* literal_type_name)
78 {
79 	return vala_integer_type_construct (VALA_TYPE_INTEGER_TYPE, type_symbol, literal_value, literal_type_name);
80 }
81 
82 static ValaDataType*
vala_integer_type_real_copy(ValaDataType * base)83 vala_integer_type_real_copy (ValaDataType* base)
84 {
85 	ValaIntegerType * self;
86 	ValaIntegerType* _result_ = NULL;
87 	ValaTypeSymbol* _tmp0_;
88 	ValaTypeSymbol* _tmp1_;
89 	const gchar* _tmp2_;
90 	const gchar* _tmp3_;
91 	ValaIntegerType* _tmp4_;
92 	ValaSourceReference* _tmp5_;
93 	ValaSourceReference* _tmp6_;
94 	gboolean _tmp7_;
95 	gboolean _tmp8_;
96 	gboolean _tmp9_;
97 	gboolean _tmp10_;
98 	ValaDataType* result = NULL;
99 	self = (ValaIntegerType*) base;
100 	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) self);
101 	_tmp1_ = _tmp0_;
102 	_tmp2_ = self->priv->literal_value;
103 	_tmp3_ = self->priv->literal_type_name;
104 	_tmp4_ = vala_integer_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_STRUCT, ValaStruct), _tmp2_, _tmp3_);
105 	_result_ = _tmp4_;
106 	_tmp5_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
107 	_tmp6_ = _tmp5_;
108 	vala_code_node_set_source_reference ((ValaCodeNode*) _result_, _tmp6_);
109 	_tmp7_ = vala_data_type_get_value_owned ((ValaDataType*) self);
110 	_tmp8_ = _tmp7_;
111 	vala_data_type_set_value_owned ((ValaDataType*) _result_, _tmp8_);
112 	_tmp9_ = vala_data_type_get_nullable ((ValaDataType*) self);
113 	_tmp10_ = _tmp9_;
114 	vala_data_type_set_nullable ((ValaDataType*) _result_, _tmp10_);
115 	result = (ValaDataType*) _result_;
116 	return result;
117 }
118 
119 static gpointer
_vala_code_node_ref0(gpointer self)120 _vala_code_node_ref0 (gpointer self)
121 {
122 	return self ? vala_code_node_ref (self) : NULL;
123 }
124 
125 static gboolean
vala_integer_type_real_compatible(ValaDataType * base,ValaDataType * target_type)126 vala_integer_type_real_compatible (ValaDataType* base,
127                                    ValaDataType* target_type)
128 {
129 	ValaIntegerType * self;
130 	gboolean _tmp0_ = FALSE;
131 	ValaTypeSymbol* _tmp1_;
132 	ValaTypeSymbol* _tmp2_;
133 	gboolean result = FALSE;
134 	self = (ValaIntegerType*) base;
135 	g_return_val_if_fail (target_type != NULL, FALSE);
136 	_tmp1_ = vala_data_type_get_type_symbol (target_type);
137 	_tmp2_ = _tmp1_;
138 	if (VALA_IS_STRUCT (_tmp2_)) {
139 		const gchar* _tmp3_;
140 		_tmp3_ = self->priv->literal_type_name;
141 		_tmp0_ = g_strcmp0 (_tmp3_, "int") == 0;
142 	} else {
143 		_tmp0_ = FALSE;
144 	}
145 	if (_tmp0_) {
146 		ValaStruct* target_st = NULL;
147 		ValaTypeSymbol* _tmp4_;
148 		ValaTypeSymbol* _tmp5_;
149 		ValaStruct* _tmp6_;
150 		ValaStruct* _tmp7_;
151 		_tmp4_ = vala_data_type_get_type_symbol (target_type);
152 		_tmp5_ = _tmp4_;
153 		_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, VALA_TYPE_STRUCT, ValaStruct));
154 		target_st = _tmp6_;
155 		_tmp7_ = target_st;
156 		if (vala_struct_is_integer_type (_tmp7_)) {
157 			ValaAttribute* int_attr = NULL;
158 			ValaStruct* _tmp8_;
159 			ValaAttribute* _tmp9_;
160 			ValaAttribute* _tmp10_;
161 			gboolean _tmp11_ = FALSE;
162 			gboolean _tmp12_ = FALSE;
163 			ValaAttribute* _tmp13_;
164 			_tmp8_ = target_st;
165 			_tmp9_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp8_, "IntegerType");
166 			_tmp10_ = _vala_code_node_ref0 (_tmp9_);
167 			int_attr = _tmp10_;
168 			_tmp13_ = int_attr;
169 			if (_tmp13_ != NULL) {
170 				ValaAttribute* _tmp14_;
171 				_tmp14_ = int_attr;
172 				_tmp12_ = vala_attribute_has_argument (_tmp14_, "min");
173 			} else {
174 				_tmp12_ = FALSE;
175 			}
176 			if (_tmp12_) {
177 				ValaAttribute* _tmp15_;
178 				_tmp15_ = int_attr;
179 				_tmp11_ = vala_attribute_has_argument (_tmp15_, "max");
180 			} else {
181 				_tmp11_ = FALSE;
182 			}
183 			if (_tmp11_) {
184 				gint val = 0;
185 				const gchar* _tmp16_;
186 				gboolean _tmp17_ = FALSE;
187 				ValaAttribute* _tmp18_;
188 				_tmp16_ = self->priv->literal_value;
189 				val = atoi (_tmp16_);
190 				_tmp18_ = int_attr;
191 				if (val >= vala_attribute_get_integer (_tmp18_, "min", 0)) {
192 					ValaAttribute* _tmp19_;
193 					_tmp19_ = int_attr;
194 					_tmp17_ = val <= vala_attribute_get_integer (_tmp19_, "max", 0);
195 				} else {
196 					_tmp17_ = FALSE;
197 				}
198 				result = _tmp17_;
199 				_vala_code_node_unref0 (int_attr);
200 				_vala_code_node_unref0 (target_st);
201 				return result;
202 			} else {
203 				result = TRUE;
204 				_vala_code_node_unref0 (int_attr);
205 				_vala_code_node_unref0 (target_st);
206 				return result;
207 			}
208 			_vala_code_node_unref0 (int_attr);
209 		}
210 		_vala_code_node_unref0 (target_st);
211 	} else {
212 		gboolean _tmp20_ = FALSE;
213 		ValaTypeSymbol* _tmp21_;
214 		ValaTypeSymbol* _tmp22_;
215 		_tmp21_ = vala_data_type_get_type_symbol (target_type);
216 		_tmp22_ = _tmp21_;
217 		if (VALA_IS_ENUM (_tmp22_)) {
218 			gboolean _tmp23_ = FALSE;
219 			const gchar* _tmp24_;
220 			_tmp24_ = self->priv->literal_type_name;
221 			if (g_strcmp0 (_tmp24_, "int") == 0) {
222 				_tmp23_ = TRUE;
223 			} else {
224 				const gchar* _tmp25_;
225 				_tmp25_ = self->priv->literal_type_name;
226 				_tmp23_ = g_strcmp0 (_tmp25_, "uint") == 0;
227 			}
228 			_tmp20_ = _tmp23_;
229 		} else {
230 			_tmp20_ = FALSE;
231 		}
232 		if (_tmp20_) {
233 			const gchar* _tmp26_;
234 			_tmp26_ = self->priv->literal_value;
235 			if (atoi (_tmp26_) == 0) {
236 				result = TRUE;
237 				return result;
238 			}
239 		}
240 	}
241 	result = VALA_DATA_TYPE_CLASS (vala_integer_type_parent_class)->compatible ((ValaDataType*) G_TYPE_CHECK_INSTANCE_CAST (self, VALA_TYPE_VALUE_TYPE, ValaValueType), target_type);
242 	return result;
243 }
244 
245 static void
vala_integer_type_class_init(ValaIntegerTypeClass * klass,gpointer klass_data)246 vala_integer_type_class_init (ValaIntegerTypeClass * klass,
247                               gpointer klass_data)
248 {
249 	vala_integer_type_parent_class = g_type_class_peek_parent (klass);
250 	((ValaCodeNodeClass *) klass)->finalize = vala_integer_type_finalize;
251 	g_type_class_adjust_private_offset (klass, &ValaIntegerType_private_offset);
252 	((ValaDataTypeClass *) klass)->copy = (ValaDataType* (*) (ValaDataType*)) vala_integer_type_real_copy;
253 	((ValaDataTypeClass *) klass)->compatible = (gboolean (*) (ValaDataType*, ValaDataType*)) vala_integer_type_real_compatible;
254 }
255 
256 static void
vala_integer_type_instance_init(ValaIntegerType * self,gpointer klass)257 vala_integer_type_instance_init (ValaIntegerType * self,
258                                  gpointer klass)
259 {
260 	self->priv = vala_integer_type_get_instance_private (self);
261 }
262 
263 static void
vala_integer_type_finalize(ValaCodeNode * obj)264 vala_integer_type_finalize (ValaCodeNode * obj)
265 {
266 	ValaIntegerType * self;
267 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_INTEGER_TYPE, ValaIntegerType);
268 	_g_free0 (self->priv->literal_value);
269 	_g_free0 (self->priv->literal_type_name);
270 	VALA_CODE_NODE_CLASS (vala_integer_type_parent_class)->finalize (obj);
271 }
272 
273 /**
274  * An integer type.
275  */
276 static GType
vala_integer_type_get_type_once(void)277 vala_integer_type_get_type_once (void)
278 {
279 	static const GTypeInfo g_define_type_info = { sizeof (ValaIntegerTypeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_integer_type_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaIntegerType), 0, (GInstanceInitFunc) vala_integer_type_instance_init, NULL };
280 	GType vala_integer_type_type_id;
281 	vala_integer_type_type_id = g_type_register_static (VALA_TYPE_VALUE_TYPE, "ValaIntegerType", &g_define_type_info, 0);
282 	ValaIntegerType_private_offset = g_type_add_instance_private (vala_integer_type_type_id, sizeof (ValaIntegerTypePrivate));
283 	return vala_integer_type_type_id;
284 }
285 
286 GType
vala_integer_type_get_type(void)287 vala_integer_type_get_type (void)
288 {
289 	static volatile gsize vala_integer_type_type_id__volatile = 0;
290 	if (g_once_init_enter (&vala_integer_type_type_id__volatile)) {
291 		GType vala_integer_type_type_id;
292 		vala_integer_type_type_id = vala_integer_type_get_type_once ();
293 		g_once_init_leave (&vala_integer_type_type_id__volatile, vala_integer_type_type_id);
294 	}
295 	return vala_integer_type_type_id__volatile;
296 }
297 
298