Browse Source

Fixed the generation of symbols to check all base classes up the chain.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/913/head
Dimitar Dobrev 9 years ago
parent
commit
27acdd262e
  1. 21
      src/Generator/Passes/GenerateSymbolsPass.cs

21
src/Generator/Passes/GenerateSymbolsPass.cs

@ -50,7 +50,7 @@ namespace CppSharp.Passes @@ -50,7 +50,7 @@ namespace CppSharp.Passes
symbolsCodeGenerator.NewLine();
foreach (var specialization in specializations[module])
foreach (var method in specialization.Methods.Where(
m => m.IsGenerated && !m.IsDependent && !m.IsImplicit))
m => m.IsGenerated && !m.IsDependent && !m.IsImplicit && !m.IsDeleted))
symbolsCodeGenerator.VisitMethodDecl(method);
}
@ -79,12 +79,7 @@ namespace CppSharp.Passes @@ -79,12 +79,7 @@ namespace CppSharp.Passes
s => s.IsExplicitlyGenerated))
specialization.Visit(this);
else
foreach (var @base in @class.Bases.Where(b => b.IsClass))
{
var specialization = @base.Class as ClassTemplateSpecialization;
if (specialization != null && !specialization.IsExplicitlyGenerated)
Add(specialization);
}
CheckBasesForSpecialization(@class);
return true;
}
@ -195,6 +190,18 @@ namespace CppSharp.Passes @@ -195,6 +190,18 @@ namespace CppSharp.Passes
}
}
private void CheckBasesForSpecialization(Class @class)
{
foreach (var @base in @class.Bases.Where(b => b.IsClass))
{
var specialization = @base.Class as ClassTemplateSpecialization;
if (specialization != null && !specialization.IsExplicitlyGenerated &&
specialization.SpecializationKind != TemplateSpecializationKind.ExplicitSpecialization)
Add(specialization);
CheckBasesForSpecialization(@base.Class);
}
}
private void Add(ClassTemplateSpecialization specialization)
{
ICollection<ClassTemplateSpecialization> specs;

Loading…
Cancel
Save