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