diff --git a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs index 2d754b39..b1bc3840 100644 --- a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs +++ b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs @@ -58,8 +58,7 @@ namespace Cxxi.Passes public override bool ProcessDeclaration(Declaration decl) { - decl.Visit(typeRefs); - + typeRefs.Process(decl); decl.Name = CheckName(decl.Name); StringHelpers.CleanupText(ref decl.DebugText); diff --git a/src/Generator/Types/Types.cs b/src/Generator/Types/Types.cs index 3460020d..b3c1d3c5 100644 --- a/src/Generator/Types/Types.cs +++ b/src/Generator/Types/Types.cs @@ -139,6 +139,13 @@ namespace Cxxi { public ISet ForwardReferences; public ISet Bases; + private Class mainClass; + + public TypeRefsVisitor() + { + ForwardReferences = new HashSet(); + Bases = new HashSet(); + } public void Collect(Declaration declaration) { @@ -151,10 +158,15 @@ namespace Cxxi ForwardReferences.Add(declaration); } - public TypeRefsVisitor() + public void Process(Declaration declaration) { - ForwardReferences = new HashSet(); - Bases = new HashSet(); + if (declaration is Class) + { + mainClass = declaration as Class; + Visited.Remove(mainClass); + } + + declaration.Visit(this); } public override bool VisitClassDecl(Class @class) @@ -162,6 +174,9 @@ namespace Cxxi if (AlreadyVisited(@class)) return true; + if (@class.Ignore) + return true; + Collect(@class); // If the class is incomplete, then we cannot process the record @@ -170,6 +185,9 @@ namespace Cxxi if (@class.IsIncomplete) return true; + if (@class != mainClass) + return true; + foreach (var field in @class.Fields) VisitFieldDecl(field);