From: Luca Bruno Date: Wed, 24 Mar 2010 13:05:44 +0000 (+0100) Subject: Add support for generic array duplication X-Git-Tag: 0.8.0~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=976a7362b1e730c82990663301c777e658f33115;p=thirdparty%2Fvala.git Add support for generic array duplication Fixes bug 613745. --- diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala index df8ee4d49..093605db8 100644 --- a/codegen/valaccodearraymodule.vala +++ b/codegen/valaccodearraymodule.vala @@ -775,6 +775,11 @@ internal class Vala.CCodeArrayModule : CCodeMethodCallModule { function.add_parameter (new CCodeFormalParameter ("self", array_type.get_cname ())); // total length over all dimensions function.add_parameter (new CCodeFormalParameter ("length", "int")); + if (array_type.element_type is GenericType) { + // dup function array elements + string func_name = "%s_dup_func".printf (array_type.element_type.type_parameter.name.down ()); + function.add_parameter (new CCodeFormalParameter (func_name, "GBoxedCopyFunc")); + } // definition diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index c937531ea..1e7175d42 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -2333,7 +2333,7 @@ internal class Vala.CCodeBaseModule : CCodeModule { } bool is_in_generic_type (DataType type) { - if (type.type_parameter.parent_symbol is TypeSymbol + if (current_symbol != null && type.type_parameter.parent_symbol is TypeSymbol && (current_method == null || current_method.binding == MemberBinding.INSTANCE)) { return true; } else { @@ -3832,6 +3832,14 @@ internal class Vala.CCodeBaseModule : CCodeModule { } ccall.add_argument (csizeexpr); + + if (array_type.element_type is GenericType) { + var elem_dupexpr = get_dup_func_expression (array_type.element_type, node.source_reference); + if (elem_dupexpr == null) { + elem_dupexpr = new CCodeConstant ("NULL"); + } + ccall.add_argument (elem_dupexpr); + } } var ccomma = new CCodeCommaExpression ();