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