1 /* valamemberinitializer.c generated by valac, the Vala compiler
2  * generated from valamemberinitializer.vala, do not modify */
3 
4 /* valamemberinitializer.vala
5  *
6  * Copyright (C) 2007-2010  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 #include <valagee.h>
31 #include <glib-object.h>
32 
33 #define _g_free0(var) (var = (g_free (var), NULL))
34 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
35 
36 struct _ValaMemberInitializerPrivate {
37 	gchar* _name;
38 	ValaSymbol* _symbol_reference;
39 	ValaExpression* _initializer;
40 };
41 
42 static gint ValaMemberInitializer_private_offset;
43 static gpointer vala_member_initializer_parent_class = NULL;
44 
45 static void vala_member_initializer_real_accept (ValaCodeNode* base,
46                                           ValaCodeVisitor* visitor);
47 static gboolean vala_member_initializer_real_check (ValaCodeNode* base,
48                                              ValaCodeContext* context);
49 static void vala_member_initializer_real_emit (ValaCodeNode* base,
50                                         ValaCodeGenerator* codegen);
51 static void vala_member_initializer_real_get_used_variables (ValaCodeNode* base,
52                                                       ValaCollection* collection);
53 static void vala_member_initializer_real_replace_expression (ValaCodeNode* base,
54                                                       ValaExpression* old_node,
55                                                       ValaExpression* new_node);
56 static void vala_member_initializer_finalize (ValaCodeNode * obj);
57 static GType vala_member_initializer_get_type_once (void);
58 
59 static inline gpointer
vala_member_initializer_get_instance_private(ValaMemberInitializer * self)60 vala_member_initializer_get_instance_private (ValaMemberInitializer* self)
61 {
62 	return G_STRUCT_MEMBER_P (self, ValaMemberInitializer_private_offset);
63 }
64 
65 const gchar*
vala_member_initializer_get_name(ValaMemberInitializer * self)66 vala_member_initializer_get_name (ValaMemberInitializer* self)
67 {
68 	const gchar* result;
69 	const gchar* _tmp0_;
70 	g_return_val_if_fail (self != NULL, NULL);
71 	_tmp0_ = self->priv->_name;
72 	result = _tmp0_;
73 	return result;
74 }
75 
76 void
vala_member_initializer_set_name(ValaMemberInitializer * self,const gchar * value)77 vala_member_initializer_set_name (ValaMemberInitializer* self,
78                                   const gchar* value)
79 {
80 	gchar* _tmp0_;
81 	g_return_if_fail (self != NULL);
82 	_tmp0_ = g_strdup (value);
83 	_g_free0 (self->priv->_name);
84 	self->priv->_name = _tmp0_;
85 }
86 
87 ValaExpression*
vala_member_initializer_get_initializer(ValaMemberInitializer * self)88 vala_member_initializer_get_initializer (ValaMemberInitializer* self)
89 {
90 	ValaExpression* result;
91 	ValaExpression* _tmp0_;
92 	g_return_val_if_fail (self != NULL, NULL);
93 	_tmp0_ = self->priv->_initializer;
94 	result = _tmp0_;
95 	return result;
96 }
97 
98 static gpointer
_vala_code_node_ref0(gpointer self)99 _vala_code_node_ref0 (gpointer self)
100 {
101 	return self ? vala_code_node_ref (self) : NULL;
102 }
103 
104 void
vala_member_initializer_set_initializer(ValaMemberInitializer * self,ValaExpression * value)105 vala_member_initializer_set_initializer (ValaMemberInitializer* self,
106                                          ValaExpression* value)
107 {
108 	ValaExpression* _tmp0_;
109 	ValaExpression* _tmp1_;
110 	g_return_if_fail (self != NULL);
111 	_tmp0_ = _vala_code_node_ref0 (value);
112 	_vala_code_node_unref0 (self->priv->_initializer);
113 	self->priv->_initializer = _tmp0_;
114 	_tmp1_ = self->priv->_initializer;
115 	vala_code_node_set_parent_node ((ValaCodeNode*) _tmp1_, (ValaCodeNode*) self);
116 }
117 
118 ValaSymbol*
vala_member_initializer_get_symbol_reference(ValaMemberInitializer * self)119 vala_member_initializer_get_symbol_reference (ValaMemberInitializer* self)
120 {
121 	ValaSymbol* result;
122 	ValaSymbol* _tmp0_;
123 	g_return_val_if_fail (self != NULL, NULL);
124 	_tmp0_ = self->priv->_symbol_reference;
125 	result = _tmp0_;
126 	return result;
127 }
128 
129 void
vala_member_initializer_set_symbol_reference(ValaMemberInitializer * self,ValaSymbol * value)130 vala_member_initializer_set_symbol_reference (ValaMemberInitializer* self,
131                                               ValaSymbol* value)
132 {
133 	g_return_if_fail (self != NULL);
134 	self->priv->_symbol_reference = value;
135 }
136 
137 /**
138  * Creates a new member initializer.
139  *
140  * @param name             member name
141  * @param initializer      initializer expression
142  * @param source_reference reference to source code
143  * @return                 newly created member initializer
144  */
145 ValaMemberInitializer*
vala_member_initializer_construct(GType object_type,const gchar * name,ValaExpression * initializer,ValaSourceReference * source_reference)146 vala_member_initializer_construct (GType object_type,
147                                    const gchar* name,
148                                    ValaExpression* initializer,
149                                    ValaSourceReference* source_reference)
150 {
151 	ValaMemberInitializer* self = NULL;
152 	g_return_val_if_fail (name != NULL, NULL);
153 	g_return_val_if_fail (initializer != NULL, NULL);
154 	self = (ValaMemberInitializer*) vala_code_node_construct (object_type);
155 	vala_member_initializer_set_initializer (self, initializer);
156 	vala_code_node_set_source_reference ((ValaCodeNode*) self, source_reference);
157 	vala_member_initializer_set_name (self, name);
158 	return self;
159 }
160 
161 ValaMemberInitializer*
vala_member_initializer_new(const gchar * name,ValaExpression * initializer,ValaSourceReference * source_reference)162 vala_member_initializer_new (const gchar* name,
163                              ValaExpression* initializer,
164                              ValaSourceReference* source_reference)
165 {
166 	return vala_member_initializer_construct (VALA_TYPE_MEMBER_INITIALIZER, name, initializer, source_reference);
167 }
168 
169 static void
vala_member_initializer_real_accept(ValaCodeNode * base,ValaCodeVisitor * visitor)170 vala_member_initializer_real_accept (ValaCodeNode* base,
171                                      ValaCodeVisitor* visitor)
172 {
173 	ValaMemberInitializer * self;
174 	ValaExpression* _tmp0_;
175 	ValaExpression* _tmp1_;
176 	self = (ValaMemberInitializer*) base;
177 	g_return_if_fail (visitor != NULL);
178 	_tmp0_ = vala_member_initializer_get_initializer (self);
179 	_tmp1_ = _tmp0_;
180 	vala_code_node_accept ((ValaCodeNode*) _tmp1_, visitor);
181 }
182 
183 static gboolean
vala_member_initializer_real_check(ValaCodeNode * base,ValaCodeContext * context)184 vala_member_initializer_real_check (ValaCodeNode* base,
185                                     ValaCodeContext* context)
186 {
187 	ValaMemberInitializer * self;
188 	ValaExpression* _tmp0_;
189 	ValaExpression* _tmp1_;
190 	gboolean result = FALSE;
191 	self = (ValaMemberInitializer*) base;
192 	g_return_val_if_fail (context != NULL, FALSE);
193 	_tmp0_ = vala_member_initializer_get_initializer (self);
194 	_tmp1_ = _tmp0_;
195 	result = vala_code_node_check ((ValaCodeNode*) _tmp1_, context);
196 	return result;
197 }
198 
199 static void
vala_member_initializer_real_emit(ValaCodeNode * base,ValaCodeGenerator * codegen)200 vala_member_initializer_real_emit (ValaCodeNode* base,
201                                    ValaCodeGenerator* codegen)
202 {
203 	ValaMemberInitializer * self;
204 	ValaExpression* _tmp0_;
205 	ValaExpression* _tmp1_;
206 	self = (ValaMemberInitializer*) base;
207 	g_return_if_fail (codegen != NULL);
208 	_tmp0_ = vala_member_initializer_get_initializer (self);
209 	_tmp1_ = _tmp0_;
210 	vala_code_node_emit ((ValaCodeNode*) _tmp1_, codegen);
211 }
212 
213 static void
vala_member_initializer_real_get_used_variables(ValaCodeNode * base,ValaCollection * collection)214 vala_member_initializer_real_get_used_variables (ValaCodeNode* base,
215                                                  ValaCollection* collection)
216 {
217 	ValaMemberInitializer * self;
218 	ValaExpression* _tmp0_;
219 	ValaExpression* _tmp1_;
220 	self = (ValaMemberInitializer*) base;
221 	g_return_if_fail (collection != NULL);
222 	_tmp0_ = vala_member_initializer_get_initializer (self);
223 	_tmp1_ = _tmp0_;
224 	vala_code_node_get_used_variables ((ValaCodeNode*) _tmp1_, collection);
225 }
226 
227 static void
vala_member_initializer_real_replace_expression(ValaCodeNode * base,ValaExpression * old_node,ValaExpression * new_node)228 vala_member_initializer_real_replace_expression (ValaCodeNode* base,
229                                                  ValaExpression* old_node,
230                                                  ValaExpression* new_node)
231 {
232 	ValaMemberInitializer * self;
233 	ValaExpression* _tmp0_;
234 	ValaExpression* _tmp1_;
235 	self = (ValaMemberInitializer*) base;
236 	g_return_if_fail (old_node != NULL);
237 	g_return_if_fail (new_node != NULL);
238 	_tmp0_ = vala_member_initializer_get_initializer (self);
239 	_tmp1_ = _tmp0_;
240 	if (_tmp1_ == old_node) {
241 		vala_member_initializer_set_initializer (self, new_node);
242 	}
243 }
244 
245 static void
vala_member_initializer_class_init(ValaMemberInitializerClass * klass,gpointer klass_data)246 vala_member_initializer_class_init (ValaMemberInitializerClass * klass,
247                                     gpointer klass_data)
248 {
249 	vala_member_initializer_parent_class = g_type_class_peek_parent (klass);
250 	((ValaCodeNodeClass *) klass)->finalize = vala_member_initializer_finalize;
251 	g_type_class_adjust_private_offset (klass, &ValaMemberInitializer_private_offset);
252 	((ValaCodeNodeClass *) klass)->accept = (void (*) (ValaCodeNode*, ValaCodeVisitor*)) vala_member_initializer_real_accept;
253 	((ValaCodeNodeClass *) klass)->check = (gboolean (*) (ValaCodeNode*, ValaCodeContext*)) vala_member_initializer_real_check;
254 	((ValaCodeNodeClass *) klass)->emit = (void (*) (ValaCodeNode*, ValaCodeGenerator*)) vala_member_initializer_real_emit;
255 	((ValaCodeNodeClass *) klass)->get_used_variables = (void (*) (ValaCodeNode*, ValaCollection*)) vala_member_initializer_real_get_used_variables;
256 	((ValaCodeNodeClass *) klass)->replace_expression = (void (*) (ValaCodeNode*, ValaExpression*, ValaExpression*)) vala_member_initializer_real_replace_expression;
257 }
258 
259 static void
vala_member_initializer_instance_init(ValaMemberInitializer * self,gpointer klass)260 vala_member_initializer_instance_init (ValaMemberInitializer * self,
261                                        gpointer klass)
262 {
263 	self->priv = vala_member_initializer_get_instance_private (self);
264 }
265 
266 static void
vala_member_initializer_finalize(ValaCodeNode * obj)267 vala_member_initializer_finalize (ValaCodeNode * obj)
268 {
269 	ValaMemberInitializer * self;
270 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_MEMBER_INITIALIZER, ValaMemberInitializer);
271 	_g_free0 (self->priv->_name);
272 	_vala_code_node_unref0 (self->priv->_initializer);
273 	VALA_CODE_NODE_CLASS (vala_member_initializer_parent_class)->finalize (obj);
274 }
275 
276 /**
277  * Represents a member initializer, i.e. an element of an object initializer, in
278  * the source code.
279  */
280 static GType
vala_member_initializer_get_type_once(void)281 vala_member_initializer_get_type_once (void)
282 {
283 	static const GTypeInfo g_define_type_info = { sizeof (ValaMemberInitializerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_member_initializer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaMemberInitializer), 0, (GInstanceInitFunc) vala_member_initializer_instance_init, NULL };
284 	GType vala_member_initializer_type_id;
285 	vala_member_initializer_type_id = g_type_register_static (VALA_TYPE_CODE_NODE, "ValaMemberInitializer", &g_define_type_info, 0);
286 	ValaMemberInitializer_private_offset = g_type_add_instance_private (vala_member_initializer_type_id, sizeof (ValaMemberInitializerPrivate));
287 	return vala_member_initializer_type_id;
288 }
289 
290 GType
vala_member_initializer_get_type(void)291 vala_member_initializer_get_type (void)
292 {
293 	static volatile gsize vala_member_initializer_type_id__volatile = 0;
294 	if (g_once_init_enter (&vala_member_initializer_type_id__volatile)) {
295 		GType vala_member_initializer_type_id;
296 		vala_member_initializer_type_id = vala_member_initializer_get_type_once ();
297 		g_once_init_leave (&vala_member_initializer_type_id__volatile, vala_member_initializer_type_id);
298 	}
299 	return vala_member_initializer_type_id__volatile;
300 }
301 
302