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
symbolsCodeGenerator.NewLine(); symbolsCodeGenerator.NewLine();
foreach (var specialization in specializations[module]) foreach (var specialization in specializations[module])
foreach (var method in specialization.Methods.Where( 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); symbolsCodeGenerator.VisitMethodDecl(method);
} }
@ -79,12 +79,7 @@ namespace CppSharp.Passes
s => s.IsExplicitlyGenerated)) s => s.IsExplicitlyGenerated))
specialization.Visit(this); specialization.Visit(this);
else else
foreach (var @base in @class.Bases.Where(b => b.IsClass)) CheckBasesForSpecialization(@class);
{
var specialization = @base.Class as ClassTemplateSpecialization;
if (specialization != null && !specialization.IsExplicitlyGenerated)
Add(specialization);
}
return true; return true;
} }
@ -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) private void Add(ClassTemplateSpecialization specialization)
{ {
ICollection<ClassTemplateSpecialization> specs; ICollection<ClassTemplateSpecialization> specs;

Loading…
Cancel
Save