public virtual void add_simple_check (CodeNode node, bool always_fails = false) {
}
+ public virtual string generate_ready_function (Method m) {
+ return "";
+ }
+
public CCodeExpression? get_cvalue (Expression expr) {
if (expr.target_value == null) {
return null;
if (m != null && m.coroutine) {
if (expr.is_yield_expression) {
// asynchronous call
- in_arg_map.set (get_param_pos (-1), new CCodeIdentifier (current_method.get_cname () + "_ready"));
+ in_arg_map.set (get_param_pos (-1), new CCodeIdentifier (generate_ready_function (current_method)));
in_arg_map.set (get_param_pos (-0.9), new CCodeIdentifier ("data"));
}
}
append_function (generate_free_function (m));
generate_async_function (m);
generate_finish_function (m);
- append_function (generate_ready_function (m));
// append the _co function
base.visit_method (m);
pop_context ();
}
- CCodeFunction generate_ready_function (Method m) {
+ public override string generate_ready_function (Method m) {
// generate ready callback handler
+
var dataname = Symbol.lower_case_to_camel_case (m.get_cname ()) + "Data";
var readyfunc = new CCodeFunction (m.get_cname () + "_ready", "void");
+ if (!add_wrapper (readyfunc.name)) {
+ // wrapper already defined
+ return readyfunc.name;
+ }
+
readyfunc.add_parameter (new CCodeParameter ("source_object", "GObject*"));
readyfunc.add_parameter (new CCodeParameter ("_res_", "GAsyncResult*"));
readyfunc.add_parameter (new CCodeParameter ("_user_data_", "gpointer"));
readyfunc.block = readyblock;
- return readyfunc;
+ append_function (readyfunc);
+
+ return readyfunc.name;
}
public override void generate_virtual_method_declaration (Method m, CCodeFile decl_space, CCodeStruct type_struct) {
if (bus_get_proxy_async || conn_get_proxy_async) {
if (expr.is_yield_expression) {
// asynchronous call
- ccall.add_argument (new CCodeIdentifier (current_method.get_cname () + "_ready"));
+ ccall.add_argument (new CCodeIdentifier (generate_ready_function (current_method)));
ccall.add_argument (new CCodeIdentifier ("data"));
}
} else {