Fixes bug 653861.
if (is_in_generic_type (type) && !is_chainup && !in_creation_method) {
return new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (get_result_cexpression ("self"), "priv"), var_name);
} else {
- return new CCodeIdentifier (var_name);
+ return get_variable_cexpression (var_name);
}
} else {
string type_id = type.get_type_id ();
if (is_in_generic_type (type) && !is_chainup && !in_creation_method) {
return new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (get_result_cexpression ("self"), "priv"), func_name);
} else {
- return new CCodeIdentifier (func_name);
+ return get_variable_cexpression (func_name);
}
} else if (type is PointerType) {
var pointer_type = (PointerType) type;
if (is_in_generic_type (type) && !is_chainup && !in_creation_method) {
return new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (get_result_cexpression ("self"), "priv"), func_name);
} else {
- return new CCodeIdentifier (func_name);
+ return get_variable_cexpression (func_name);
}
} else if (type is ArrayType) {
if (context.profile == Profile.POSIX) {
}
}
+ foreach (var type_param in m.get_type_parameters ()) {
+ data.add_field ("GType", "%s_type".printf (type_param.name.down ()));
+ data.add_field ("GBoxedCopyFunc", "%s_dup_func".printf (type_param.name.down ()));
+ data.add_field ("GDestroyNotify", "%s_destroy_func".printf (type_param.name.down ()));
+ }
+
if (!(m.return_type is VoidType)) {
data.add_field (m.return_type.get_cname (), "result");
if (m.return_type is ArrayType) {
}
emit_context.pop_symbol ();
+ foreach (var type_param in m.get_type_parameters ()) {
+ var type = "%s_type".printf (type_param.name.down ());
+ var dup_func = "%s_dup_func".printf (type_param.name.down ());
+ var destroy_func = "%s_destroy_func".printf (type_param.name.down ());
+ ccode.add_assignment (new CCodeMemberAccess.pointer (data_var, type), new CCodeIdentifier (type));
+ ccode.add_assignment (new CCodeMemberAccess.pointer (data_var, dup_func), new CCodeIdentifier (dup_func));
+ ccode.add_assignment (new CCodeMemberAccess.pointer (data_var, destroy_func), new CCodeIdentifier (destroy_func));
+ }
+
var ccall = new CCodeFunctionCall (new CCodeIdentifier (m.get_real_cname () + "_co"));
ccall.add_argument (data_var);
ccode.add_expression (ccall);
asynchronous/bug641182.vala \
asynchronous/bug646945.vala \
asynchronous/bug652252.vala \
+ asynchronous/bug653861.vala \
asynchronous/closures.vala \
dbus/basic-types.test \
dbus/arrays.test \
--- /dev/null
+class Foo {
+ public async void bar<G> (G arg, Type t) {
+ assert (typeof (G) == t);
+ }
+}
+
+void main () {
+ var foo = new Foo ();
+ foo.bar<string> ("foo", typeof (string));
+}