~ubuntu-branches/ubuntu/raring/vala-0.16/raring

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
/* valadovamethodmodule.c generated by valac, the Vala compiler
 * generated from valadovamethodmodule.vala, do not modify */

/* valadovamethodmodule.vala
 *
 * Copyright (C) 2007-2009  Jürg Billeter
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 * Author:
 * 	Jürg Billeter <j@bitron.ch>
 */

#include <glib.h>
#include <glib-object.h>
#include <vala.h>
#include <valaccode.h>
#include <stdlib.h>
#include <string.h>
#include <valagee.h>


#define VALA_TYPE_DOVA_BASE_MODULE (vala_dova_base_module_get_type ())
#define VALA_DOVA_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModule))
#define VALA_DOVA_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModuleClass))
#define VALA_IS_DOVA_BASE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_BASE_MODULE))
#define VALA_IS_DOVA_BASE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_BASE_MODULE))
#define VALA_DOVA_BASE_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_BASE_MODULE, ValaDovaBaseModuleClass))

typedef struct _ValaDovaBaseModule ValaDovaBaseModule;
typedef struct _ValaDovaBaseModuleClass ValaDovaBaseModuleClass;
typedef struct _ValaDovaBaseModulePrivate ValaDovaBaseModulePrivate;

#define VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT (vala_dova_base_module_emit_context_get_type ())
#define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContext))
#define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContextClass))
#define VALA_DOVA_BASE_MODULE_IS_EMIT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT))
#define VALA_DOVA_BASE_MODULE_IS_EMIT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT))
#define VALA_DOVA_BASE_MODULE_EMIT_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_DOVA_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaDovaBaseModuleEmitContextClass))

typedef struct _ValaDovaBaseModuleEmitContext ValaDovaBaseModuleEmitContext;
typedef struct _ValaDovaBaseModuleEmitContextClass ValaDovaBaseModuleEmitContextClass;

#define VALA_TYPE_DOVA_STRUCT_MODULE (vala_dova_struct_module_get_type ())
#define VALA_DOVA_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModule))
#define VALA_DOVA_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModuleClass))
#define VALA_IS_DOVA_STRUCT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_STRUCT_MODULE))
#define VALA_IS_DOVA_STRUCT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_STRUCT_MODULE))
#define VALA_DOVA_STRUCT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_STRUCT_MODULE, ValaDovaStructModuleClass))

typedef struct _ValaDovaStructModule ValaDovaStructModule;
typedef struct _ValaDovaStructModuleClass ValaDovaStructModuleClass;
typedef struct _ValaDovaStructModulePrivate ValaDovaStructModulePrivate;

#define VALA_TYPE_DOVA_METHOD_MODULE (vala_dova_method_module_get_type ())
#define VALA_DOVA_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModule))
#define VALA_DOVA_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModuleClass))
#define VALA_IS_DOVA_METHOD_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DOVA_METHOD_MODULE))
#define VALA_IS_DOVA_METHOD_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DOVA_METHOD_MODULE))
#define VALA_DOVA_METHOD_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DOVA_METHOD_MODULE, ValaDovaMethodModuleClass))

typedef struct _ValaDovaMethodModule ValaDovaMethodModule;
typedef struct _ValaDovaMethodModuleClass ValaDovaMethodModuleClass;
typedef struct _ValaDovaMethodModulePrivate ValaDovaMethodModulePrivate;
#define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))

struct _ValaDovaBaseModule {
	ValaCodeGenerator parent_instance;
	ValaDovaBaseModulePrivate * priv;
	ValaSymbol* root_symbol;
	ValaDovaBaseModuleEmitContext* emit_context;
	ValaCCodeFile* header_file;
	ValaCCodeFile* cfile;
	ValaList* static_fields;
	gint next_wrapper_id;
	ValaDataType* void_type;
	ValaDataType* bool_type;
	ValaDataType* char_type;
	ValaDataType* int_type;
	ValaDataType* uint_type;
	ValaDataType* string_type;
	ValaClass* object_class;
	ValaClass* type_class;
	ValaClass* value_class;
	ValaClass* string_class;
	ValaStruct* array_struct;
	ValaClass* delegate_class;
	ValaClass* error_class;
};

struct _ValaDovaBaseModuleClass {
	ValaCodeGeneratorClass parent_class;
	void (*generate_struct_declaration) (ValaDovaBaseModule* self, ValaStruct* st, ValaCCodeFile* decl_space);
	void (*generate_delegate_declaration) (ValaDovaBaseModule* self, ValaDelegate* d, ValaCCodeFile* decl_space);
	void (*generate_cparameters) (ValaDovaBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaCCodeFunctionCall* vcall);
	void (*generate_property_accessor_declaration) (ValaDovaBaseModule* self, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space);
	ValaCCodeExpression* (*get_dup_func_expression) (ValaDovaBaseModule* self, ValaDataType* type, ValaSourceReference* source_reference, gboolean is_chainup);
	void (*append_local_free) (ValaDovaBaseModule* self, ValaSymbol* sym, gboolean stop_at_loop, ValaCodeNode* stop_at);
	ValaCCodeExpression* (*get_ref_cexpression) (ValaDovaBaseModule* self, ValaDataType* expression_type, ValaCCodeExpression* cexpr, ValaExpression* expr, ValaCodeNode* node);
	void (*generate_class_declaration) (ValaDovaBaseModule* self, ValaClass* cl, ValaCCodeFile* decl_space);
	void (*generate_interface_declaration) (ValaDovaBaseModule* self, ValaInterface* iface, ValaCCodeFile* decl_space);
	void (*generate_method_declaration) (ValaDovaBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space);
	ValaCCodeExpression* (*get_implicit_cast_expression) (ValaDovaBaseModule* self, ValaCCodeExpression* source_cexpr, ValaDataType* expression_type, ValaDataType* target_type, ValaExpression* expr);
	gchar* (*get_custom_creturn_type) (ValaDovaBaseModule* self, ValaMethod* m);
	gboolean (*method_has_wrapper) (ValaDovaBaseModule* self, ValaMethod* method);
	void (*add_simple_check) (ValaDovaBaseModule* self, ValaCodeNode* node, gboolean always_fails);
};

struct _ValaDovaStructModule {
	ValaDovaBaseModule parent_instance;
	ValaDovaStructModulePrivate * priv;
};

struct _ValaDovaStructModuleClass {
	ValaDovaBaseModuleClass parent_class;
};

struct _ValaDovaMethodModule {
	ValaDovaStructModule parent_instance;
	ValaDovaMethodModulePrivate * priv;
};

struct _ValaDovaMethodModuleClass {
	ValaDovaStructModuleClass parent_class;
};


static gpointer vala_dova_method_module_parent_class = NULL;

GType vala_dova_base_module_get_type (void) G_GNUC_CONST;
gpointer vala_dova_base_module_emit_context_ref (gpointer instance);
void vala_dova_base_module_emit_context_unref (gpointer instance);
GParamSpec* vala_dova_base_module_param_spec_emit_context (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void vala_dova_base_module_value_set_emit_context (GValue* value, gpointer v_object);
void vala_dova_base_module_value_take_emit_context (GValue* value, gpointer v_object);
gpointer vala_dova_base_module_value_get_emit_context (const GValue* value);
GType vala_dova_base_module_emit_context_get_type (void) G_GNUC_CONST;
GType vala_dova_struct_module_get_type (void) G_GNUC_CONST;
GType vala_dova_method_module_get_type (void) G_GNUC_CONST;
enum  {
	VALA_DOVA_METHOD_MODULE_DUMMY_PROPERTY
};
static gboolean vala_dova_method_module_real_method_has_wrapper (ValaDovaBaseModule* base, ValaMethod* method);
static gchar* vala_dova_method_module_real_get_custom_creturn_type (ValaDovaBaseModule* base, ValaMethod* m);
ValaDovaMethodModule* vala_dova_method_module_construct (GType object_type);
ValaDovaStructModule* vala_dova_struct_module_construct (GType object_type);


static gboolean vala_dova_method_module_real_method_has_wrapper (ValaDovaBaseModule* base, ValaMethod* method) {
	ValaDovaMethodModule * self;
	gboolean result = FALSE;
	ValaMethod* _tmp0_;
	ValaAttribute* _tmp1_ = NULL;
	ValaAttribute* _tmp2_;
	gboolean _tmp3_;
	self = (ValaDovaMethodModule*) base;
	g_return_val_if_fail (method != NULL, FALSE);
	_tmp0_ = method;
	_tmp1_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp0_, "NoWrapper");
	_tmp2_ = _tmp1_;
	_tmp3_ = _tmp2_ == NULL;
	_vala_code_node_unref0 (_tmp2_);
	result = _tmp3_;
	return result;
}


static gchar* vala_dova_method_module_real_get_custom_creturn_type (ValaDovaBaseModule* base, ValaMethod* m) {
	ValaDovaMethodModule * self;
	gchar* result = NULL;
	ValaMethod* _tmp0_;
	ValaAttribute* _tmp1_ = NULL;
	ValaAttribute* attr;
	ValaAttribute* _tmp2_;
	self = (ValaDovaMethodModule*) base;
	g_return_val_if_fail (m != NULL, NULL);
	_tmp0_ = m;
	_tmp1_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp0_, "CCode");
	attr = _tmp1_;
	_tmp2_ = attr;
	if (_tmp2_ != NULL) {
		ValaAttribute* _tmp3_;
		gchar* _tmp4_ = NULL;
		gchar* type;
		const gchar* _tmp5_;
		_tmp3_ = attr;
		_tmp4_ = vala_attribute_get_string (_tmp3_, "type");
		type = _tmp4_;
		_tmp5_ = type;
		if (_tmp5_ != NULL) {
			result = type;
			_vala_code_node_unref0 (attr);
			return result;
		}
		_g_free0 (type);
	}
	result = NULL;
	_vala_code_node_unref0 (attr);
	return result;
}


ValaDovaMethodModule* vala_dova_method_module_construct (GType object_type) {
	ValaDovaMethodModule* self = NULL;
	self = (ValaDovaMethodModule*) vala_dova_struct_module_construct (object_type);
	return self;
}


static void vala_dova_method_module_class_init (ValaDovaMethodModuleClass * klass) {
	vala_dova_method_module_parent_class = g_type_class_peek_parent (klass);
	VALA_DOVA_BASE_MODULE_CLASS (klass)->method_has_wrapper = vala_dova_method_module_real_method_has_wrapper;
	VALA_DOVA_BASE_MODULE_CLASS (klass)->get_custom_creturn_type = vala_dova_method_module_real_get_custom_creturn_type;
}


static void vala_dova_method_module_instance_init (ValaDovaMethodModule * self) {
}


/**
 * The link between a method and generated code.
 */
GType vala_dova_method_module_get_type (void) {
	static volatile gsize vala_dova_method_module_type_id__volatile = 0;
	if (g_once_init_enter (&vala_dova_method_module_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (ValaDovaMethodModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_dova_method_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaDovaMethodModule), 0, (GInstanceInitFunc) vala_dova_method_module_instance_init, NULL };
		GType vala_dova_method_module_type_id;
		vala_dova_method_module_type_id = g_type_register_static (VALA_TYPE_DOVA_STRUCT_MODULE, "ValaDovaMethodModule", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
		g_once_init_leave (&vala_dova_method_module_type_id__volatile, vala_dova_method_module_type_id);
	}
	return vala_dova_method_module_type_id__volatile;
}