diff options
-rw-r--r-- | codegen/valaccodeattribute.vala | 17 | ||||
-rw-r--r-- | codegen/valaccodebasemodule.vala | 6 |
2 files changed, 18 insertions, 5 deletions
diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala index d3a97d520..815ec1104 100644 --- a/codegen/valaccodeattribute.vala +++ b/codegen/valaccodeattribute.vala @@ -222,6 +222,21 @@ public class Vala.CCodeAttribute : AttributeCache { } } + public string dup_function { + get { + if (!dup_function_set) { + if (ccode != null) { + _dup_function = ccode.get_string ("dup_function"); + } + if (_dup_function == null && !sym.external_package && sym is Struct) { + _dup_function = "%sdup".printf (lower_case_prefix); + } + dup_function_set = true; + } + return _dup_function; + } + } + public string free_function { get { if (!free_function_set) { @@ -541,6 +556,8 @@ public class Vala.CCodeAttribute : AttributeCache { private bool copy_function_set; private string? _destroy_function; private bool destroy_function_set; + private string? _dup_function; + private bool dup_function_set; private string? _free_function; private bool free_function_set; private bool? _free_function_address_of; diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 1d0610cb4..cd5ae3d21 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -6240,11 +6240,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { public static string? get_ccode_dup_function (TypeSymbol sym) { if (sym is Struct) { - if (sym.external_package) { - return null; - } else { - return get_ccode_lower_case_prefix (sym) + "dup"; - } + return get_ccode_attribute (sym).dup_function; } return get_ccode_copy_function (sym); } |