1 /* valaccodeifstatement.c generated by valac, the Vala compiler
2  * generated from valaccodeifstatement.vala, do not modify */
3 
4 /* valaccodeifstatement.vala
5  *
6  * Copyright (C) 2006-2008  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 "valaccode.h"
27 #include <glib.h>
28 
29 #define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
30 
31 struct _ValaCCodeIfStatementPrivate {
32 	ValaCCodeExpression* _condition;
33 	ValaCCodeStatement* _true_statement;
34 	ValaCCodeStatement* _false_statement;
35 	gboolean _else_if;
36 };
37 
38 static gint ValaCCodeIfStatement_private_offset;
39 static gpointer vala_ccode_if_statement_parent_class = NULL;
40 
41 static void vala_ccode_if_statement_real_write (ValaCCodeNode* base,
42                                          ValaCCodeWriter* writer);
43 static void vala_ccode_if_statement_finalize (ValaCCodeNode * obj);
44 static GType vala_ccode_if_statement_get_type_once (void);
45 
46 static inline gpointer
vala_ccode_if_statement_get_instance_private(ValaCCodeIfStatement * self)47 vala_ccode_if_statement_get_instance_private (ValaCCodeIfStatement* self)
48 {
49 	return G_STRUCT_MEMBER_P (self, ValaCCodeIfStatement_private_offset);
50 }
51 
52 ValaCCodeExpression*
vala_ccode_if_statement_get_condition(ValaCCodeIfStatement * self)53 vala_ccode_if_statement_get_condition (ValaCCodeIfStatement* self)
54 {
55 	ValaCCodeExpression* result;
56 	ValaCCodeExpression* _tmp0_;
57 	g_return_val_if_fail (self != NULL, NULL);
58 	_tmp0_ = self->priv->_condition;
59 	result = _tmp0_;
60 	return result;
61 }
62 
63 static gpointer
_vala_ccode_node_ref0(gpointer self)64 _vala_ccode_node_ref0 (gpointer self)
65 {
66 	return self ? vala_ccode_node_ref (self) : NULL;
67 }
68 
69 void
vala_ccode_if_statement_set_condition(ValaCCodeIfStatement * self,ValaCCodeExpression * value)70 vala_ccode_if_statement_set_condition (ValaCCodeIfStatement* self,
71                                        ValaCCodeExpression* value)
72 {
73 	ValaCCodeExpression* _tmp0_;
74 	g_return_if_fail (self != NULL);
75 	_tmp0_ = _vala_ccode_node_ref0 (value);
76 	_vala_ccode_node_unref0 (self->priv->_condition);
77 	self->priv->_condition = _tmp0_;
78 }
79 
80 ValaCCodeStatement*
vala_ccode_if_statement_get_true_statement(ValaCCodeIfStatement * self)81 vala_ccode_if_statement_get_true_statement (ValaCCodeIfStatement* self)
82 {
83 	ValaCCodeStatement* result;
84 	ValaCCodeStatement* _tmp0_;
85 	g_return_val_if_fail (self != NULL, NULL);
86 	_tmp0_ = self->priv->_true_statement;
87 	result = _tmp0_;
88 	return result;
89 }
90 
91 void
vala_ccode_if_statement_set_true_statement(ValaCCodeIfStatement * self,ValaCCodeStatement * value)92 vala_ccode_if_statement_set_true_statement (ValaCCodeIfStatement* self,
93                                             ValaCCodeStatement* value)
94 {
95 	ValaCCodeStatement* _tmp0_;
96 	g_return_if_fail (self != NULL);
97 	_tmp0_ = _vala_ccode_node_ref0 (value);
98 	_vala_ccode_node_unref0 (self->priv->_true_statement);
99 	self->priv->_true_statement = _tmp0_;
100 }
101 
102 ValaCCodeStatement*
vala_ccode_if_statement_get_false_statement(ValaCCodeIfStatement * self)103 vala_ccode_if_statement_get_false_statement (ValaCCodeIfStatement* self)
104 {
105 	ValaCCodeStatement* result;
106 	ValaCCodeStatement* _tmp0_;
107 	g_return_val_if_fail (self != NULL, NULL);
108 	_tmp0_ = self->priv->_false_statement;
109 	result = _tmp0_;
110 	return result;
111 }
112 
113 void
vala_ccode_if_statement_set_false_statement(ValaCCodeIfStatement * self,ValaCCodeStatement * value)114 vala_ccode_if_statement_set_false_statement (ValaCCodeIfStatement* self,
115                                              ValaCCodeStatement* value)
116 {
117 	ValaCCodeStatement* _tmp0_;
118 	g_return_if_fail (self != NULL);
119 	_tmp0_ = _vala_ccode_node_ref0 (value);
120 	_vala_ccode_node_unref0 (self->priv->_false_statement);
121 	self->priv->_false_statement = _tmp0_;
122 }
123 
124 ValaCCodeIfStatement*
vala_ccode_if_statement_construct(GType object_type,ValaCCodeExpression * cond,ValaCCodeStatement * true_stmt,ValaCCodeStatement * false_stmt)125 vala_ccode_if_statement_construct (GType object_type,
126                                    ValaCCodeExpression* cond,
127                                    ValaCCodeStatement* true_stmt,
128                                    ValaCCodeStatement* false_stmt)
129 {
130 	ValaCCodeIfStatement* self = NULL;
131 	g_return_val_if_fail (cond != NULL, NULL);
132 	g_return_val_if_fail (true_stmt != NULL, NULL);
133 	self = (ValaCCodeIfStatement*) vala_ccode_statement_construct (object_type);
134 	vala_ccode_if_statement_set_condition (self, cond);
135 	vala_ccode_if_statement_set_true_statement (self, true_stmt);
136 	vala_ccode_if_statement_set_false_statement (self, false_stmt);
137 	return self;
138 }
139 
140 ValaCCodeIfStatement*
vala_ccode_if_statement_new(ValaCCodeExpression * cond,ValaCCodeStatement * true_stmt,ValaCCodeStatement * false_stmt)141 vala_ccode_if_statement_new (ValaCCodeExpression* cond,
142                              ValaCCodeStatement* true_stmt,
143                              ValaCCodeStatement* false_stmt)
144 {
145 	return vala_ccode_if_statement_construct (VALA_TYPE_CCODE_IF_STATEMENT, cond, true_stmt, false_stmt);
146 }
147 
148 gboolean
vala_ccode_if_statement_get_else_if(ValaCCodeIfStatement * self)149 vala_ccode_if_statement_get_else_if (ValaCCodeIfStatement* self)
150 {
151 	gboolean result;
152 	g_return_val_if_fail (self != NULL, FALSE);
153 	result = self->priv->_else_if;
154 	return result;
155 }
156 
157 void
vala_ccode_if_statement_set_else_if(ValaCCodeIfStatement * self,gboolean value)158 vala_ccode_if_statement_set_else_if (ValaCCodeIfStatement* self,
159                                      gboolean value)
160 {
161 	g_return_if_fail (self != NULL);
162 	self->priv->_else_if = value;
163 }
164 
165 static void
vala_ccode_if_statement_real_write(ValaCCodeNode * base,ValaCCodeWriter * writer)166 vala_ccode_if_statement_real_write (ValaCCodeNode* base,
167                                     ValaCCodeWriter* writer)
168 {
169 	ValaCCodeIfStatement * self;
170 	gboolean _tmp0_;
171 	ValaCCodeExpression* _tmp3_;
172 	gboolean _tmp5_ = FALSE;
173 	ValaCCodeStatement* _tmp6_;
174 	ValaCCodeStatement* _tmp11_;
175 	ValaCCodeStatement* _tmp12_;
176 	self = (ValaCCodeIfStatement*) base;
177 	g_return_if_fail (writer != NULL);
178 	_tmp0_ = self->priv->_else_if;
179 	if (!_tmp0_) {
180 		ValaCCodeLineDirective* _tmp1_;
181 		ValaCCodeLineDirective* _tmp2_;
182 		_tmp1_ = vala_ccode_node_get_line ((ValaCCodeNode*) self);
183 		_tmp2_ = _tmp1_;
184 		vala_ccode_writer_write_indent (writer, _tmp2_);
185 	} else {
186 		vala_ccode_writer_write_string (writer, " ");
187 	}
188 	vala_ccode_writer_write_string (writer, "if (");
189 	_tmp3_ = self->priv->_condition;
190 	if (_tmp3_ != NULL) {
191 		ValaCCodeExpression* _tmp4_;
192 		_tmp4_ = self->priv->_condition;
193 		vala_ccode_node_write ((ValaCCodeNode*) _tmp4_, writer);
194 	}
195 	vala_ccode_writer_write_string (writer, ")");
196 	_tmp6_ = self->priv->_false_statement;
197 	if (_tmp6_ != NULL) {
198 		ValaCCodeStatement* _tmp7_;
199 		_tmp7_ = self->priv->_true_statement;
200 		_tmp5_ = VALA_IS_CCODE_BLOCK (_tmp7_);
201 	} else {
202 		_tmp5_ = FALSE;
203 	}
204 	if (_tmp5_) {
205 		ValaCCodeBlock* cblock = NULL;
206 		ValaCCodeStatement* _tmp8_;
207 		ValaCCodeBlock* _tmp9_;
208 		ValaCCodeBlock* _tmp10_;
209 		_tmp8_ = self->priv->_true_statement;
210 		_tmp9_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_CCODE_BLOCK, ValaCCodeBlock));
211 		cblock = _tmp9_;
212 		_tmp10_ = cblock;
213 		vala_ccode_block_set_suppress_newline (_tmp10_, TRUE);
214 		_vala_ccode_node_unref0 (cblock);
215 	}
216 	_tmp11_ = self->priv->_true_statement;
217 	vala_ccode_node_write ((ValaCCodeNode*) _tmp11_, writer);
218 	_tmp12_ = self->priv->_false_statement;
219 	if (_tmp12_ != NULL) {
220 		gboolean _tmp13_;
221 		gboolean _tmp14_;
222 		ValaCCodeStatement* _tmp15_;
223 		ValaCCodeStatement* _tmp19_;
224 		_tmp13_ = vala_ccode_writer_get_bol (writer);
225 		_tmp14_ = _tmp13_;
226 		if (_tmp14_) {
227 			vala_ccode_writer_write_indent (writer, NULL);
228 			vala_ccode_writer_write_string (writer, "else");
229 		} else {
230 			vala_ccode_writer_write_string (writer, " else");
231 		}
232 		_tmp15_ = self->priv->_false_statement;
233 		if (VALA_IS_CCODE_IF_STATEMENT (_tmp15_)) {
234 			ValaCCodeIfStatement* cif = NULL;
235 			ValaCCodeStatement* _tmp16_;
236 			ValaCCodeIfStatement* _tmp17_;
237 			ValaCCodeIfStatement* _tmp18_;
238 			_tmp16_ = self->priv->_false_statement;
239 			_tmp17_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, VALA_TYPE_CCODE_IF_STATEMENT, ValaCCodeIfStatement));
240 			cif = _tmp17_;
241 			_tmp18_ = cif;
242 			vala_ccode_if_statement_set_else_if (_tmp18_, TRUE);
243 			_vala_ccode_node_unref0 (cif);
244 		}
245 		_tmp19_ = self->priv->_false_statement;
246 		vala_ccode_node_write ((ValaCCodeNode*) _tmp19_, writer);
247 	}
248 }
249 
250 static void
vala_ccode_if_statement_class_init(ValaCCodeIfStatementClass * klass,gpointer klass_data)251 vala_ccode_if_statement_class_init (ValaCCodeIfStatementClass * klass,
252                                     gpointer klass_data)
253 {
254 	vala_ccode_if_statement_parent_class = g_type_class_peek_parent (klass);
255 	((ValaCCodeNodeClass *) klass)->finalize = vala_ccode_if_statement_finalize;
256 	g_type_class_adjust_private_offset (klass, &ValaCCodeIfStatement_private_offset);
257 	((ValaCCodeNodeClass *) klass)->write = (void (*) (ValaCCodeNode*, ValaCCodeWriter*)) vala_ccode_if_statement_real_write;
258 }
259 
260 static void
vala_ccode_if_statement_instance_init(ValaCCodeIfStatement * self,gpointer klass)261 vala_ccode_if_statement_instance_init (ValaCCodeIfStatement * self,
262                                        gpointer klass)
263 {
264 	self->priv = vala_ccode_if_statement_get_instance_private (self);
265 }
266 
267 static void
vala_ccode_if_statement_finalize(ValaCCodeNode * obj)268 vala_ccode_if_statement_finalize (ValaCCodeNode * obj)
269 {
270 	ValaCCodeIfStatement * self;
271 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_CCODE_IF_STATEMENT, ValaCCodeIfStatement);
272 	_vala_ccode_node_unref0 (self->priv->_condition);
273 	_vala_ccode_node_unref0 (self->priv->_true_statement);
274 	_vala_ccode_node_unref0 (self->priv->_false_statement);
275 	VALA_CCODE_NODE_CLASS (vala_ccode_if_statement_parent_class)->finalize (obj);
276 }
277 
278 /**
279  * Represents an if selection statement in the C code.
280  */
281 static GType
vala_ccode_if_statement_get_type_once(void)282 vala_ccode_if_statement_get_type_once (void)
283 {
284 	static const GTypeInfo g_define_type_info = { sizeof (ValaCCodeIfStatementClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_ccode_if_statement_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaCCodeIfStatement), 0, (GInstanceInitFunc) vala_ccode_if_statement_instance_init, NULL };
285 	GType vala_ccode_if_statement_type_id;
286 	vala_ccode_if_statement_type_id = g_type_register_static (VALA_TYPE_CCODE_STATEMENT, "ValaCCodeIfStatement", &g_define_type_info, 0);
287 	ValaCCodeIfStatement_private_offset = g_type_add_instance_private (vala_ccode_if_statement_type_id, sizeof (ValaCCodeIfStatementPrivate));
288 	return vala_ccode_if_statement_type_id;
289 }
290 
291 GType
vala_ccode_if_statement_get_type(void)292 vala_ccode_if_statement_get_type (void)
293 {
294 	static volatile gsize vala_ccode_if_statement_type_id__volatile = 0;
295 	if (g_once_init_enter (&vala_ccode_if_statement_type_id__volatile)) {
296 		GType vala_ccode_if_statement_type_id;
297 		vala_ccode_if_statement_type_id = vala_ccode_if_statement_get_type_once ();
298 		g_once_init_leave (&vala_ccode_if_statement_type_id__volatile, vala_ccode_if_statement_type_id);
299 	}
300 	return vala_ccode_if_statement_type_id__volatile;
301 }
302 
303