Browse Source

Fixed the generated C# for templates with fields other templates not used anywhere else.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1011/head
Dimitar Dobrev 8 years ago
parent
commit
4eb8ee83da
  1. 31
      src/Generator/Passes/TrimSpecializationsPass.cs
  2. 1
      tests/CSharp/CSharpTemplates.h

31
src/Generator/Passes/TrimSpecializationsPass.cs

@ -63,17 +63,11 @@ namespace CppSharp.Passes @@ -63,17 +63,11 @@ namespace CppSharp.Passes
if (function.IsGenerated)
{
Action<ClassTemplateSpecialization> 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 @@ -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 @@ -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);
}
}

1
tests/CSharp/CSharpTemplates.h

@ -344,6 +344,7 @@ private: @@ -344,6 +344,7 @@ private:
T t[1];
HasDefaultTemplateArgument<char> h;
InternalWithExtension<char> i;
HasDefaultTemplateArgument<T, double> specializationAsFieldOfAnother;
};
template <typename T>

Loading…
Cancel
Save