vfunc.block = new CCodeBlock ();
vfunc.add_parameter (new CCodeFormalParameter ("this", "%s *".printf (((ObjectTypeSymbol) m.parent_symbol).get_cname ())));
+ foreach (TypeParameter type_param in m.get_type_parameters ()) {
+ vfunc.add_parameter (new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType*"));
+ }
foreach (FormalParameter param in m.get_parameters ()) {
string ctypename = param.parameter_type.get_cname ();
if (param.direction != ParameterDirection.IN) {
var vcall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, m.vfunc_name));
vcall.add_argument (new CCodeIdentifier ("this"));
+ foreach (TypeParameter type_param in m.get_type_parameters ()) {
+ vcall.add_argument (new CCodeIdentifier ("%s_type".printf (type_param.name.down ())));
+ }
foreach (FormalParameter param in m.get_parameters ()) {
vcall.add_argument (new CCodeIdentifier (param.name));
}
vfunc.add_parameter (new CCodeFormalParameter ("base_type", "DovaType *"));
vfunc.add_parameter (new CCodeFormalParameter ("this", "%s *".printf (((ObjectTypeSymbol) m.parent_symbol).get_cname ())));
+ foreach (TypeParameter type_param in m.get_type_parameters ()) {
+ vfunc.add_parameter (new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType*"));
+ }
foreach (FormalParameter param in m.get_parameters ()) {
string ctypename = param.parameter_type.get_cname ();
if (param.direction != ParameterDirection.IN) {
vcall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, m.vfunc_name));
vcall.add_argument (new CCodeIdentifier ("this"));
+ foreach (TypeParameter type_param in m.get_type_parameters ()) {
+ vcall.add_argument (new CCodeIdentifier ("%s_type".printf (type_param.name.down ())));
+ }
foreach (FormalParameter param in m.get_parameters ()) {
vcall.add_argument (new CCodeIdentifier (param.name));
}
generate_class_declaration ((Class) type_class, decl_space);
if (m.parent_symbol is Class) {
- int type_param_index = 0;
var cl = (Class) m.parent_symbol;
foreach (TypeParameter type_param in cl.get_type_parameters ()) {
var cparam = new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType*");
if (vcall != null) {
func.add_parameter (cparam);
}
- type_param_index++;
}
}
} else {
- int type_param_index = 0;
foreach (TypeParameter type_param in m.get_type_parameters ()) {
var cparam = new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType*");
func.add_parameter (cparam);
if (vcall != null) {
vcall.add_argument (new CCodeIdentifier ("%s_type".printf (type_param.name.down ())));
}
- type_param_index++;
}
}