diff --git a/src/Generator/Passes/TrimSpecializationsPass.cs b/src/Generator/Passes/TrimSpecializationsPass.cs index 2c1586e9..1569f47f 100644 --- a/src/Generator/Passes/TrimSpecializationsPass.cs +++ b/src/Generator/Passes/TrimSpecializationsPass.cs @@ -63,17 +63,11 @@ namespace CppSharp.Passes if (function.IsGenerated) { - Action add = - s => - { - internalSpecializations.Remove(s); - specializations.Add(s); - }; ASTUtils.CheckTypeForSpecialization(function.OriginalReturnType.Type, - function, add, Context.TypeMaps); + function, AddSpecialization, Context.TypeMaps); foreach (var parameter in function.Parameters) ASTUtils.CheckTypeForSpecialization(parameter.Type, function, - add, Context.TypeMaps); + AddSpecialization, Context.TypeMaps); } return true; @@ -88,6 +82,18 @@ namespace CppSharp.Passes return true; } + private void AddSpecialization(ClassTemplateSpecialization specialization) + { + if (specializations.Contains(specialization)) + return; + internalSpecializations.Remove(specialization); + specializations.Add(specialization); + foreach (var field in specialization.Fields) + field.Visit(this); + foreach (var method in specialization.Methods) + method.Visit(this); + } + private void CleanSpecializations(Class template) { template.Specializations.RemoveAll(s => @@ -187,14 +193,7 @@ namespace CppSharp.Passes { var specialization = @base.Class as ClassTemplateSpecialization; if (specialization != null) - { - internalSpecializations.Remove(specialization); - specializations.Add(specialization); - foreach (var field in specialization.Fields) - field.Visit(this); - foreach (var method in specialization.Methods) - method.Visit(this); - } + AddSpecialization(specialization); CheckBasesForSpecialization(@base.Class); } } diff --git a/tests/CSharp/CSharpTemplates.h b/tests/CSharp/CSharpTemplates.h index 2320bc97..2cfbed03 100644 --- a/tests/CSharp/CSharpTemplates.h +++ b/tests/CSharp/CSharpTemplates.h @@ -344,6 +344,7 @@ private: T t[1]; HasDefaultTemplateArgument h; InternalWithExtension i; + HasDefaultTemplateArgument specializationAsFieldOfAnother; }; template