Browse Source

Improved class checking in the type references visitor.

pull/1/head
triton 13 years ago
parent
commit
d53f313121
  1. 3
      src/Generator/Passes/CleanInvalidDeclNamesPass.cs
  2. 24
      src/Generator/Types/Types.cs

3
src/Generator/Passes/CleanInvalidDeclNamesPass.cs

@ -58,8 +58,7 @@ namespace Cxxi.Passes
public override bool ProcessDeclaration(Declaration decl) public override bool ProcessDeclaration(Declaration decl)
{ {
decl.Visit(typeRefs); typeRefs.Process(decl);
decl.Name = CheckName(decl.Name); decl.Name = CheckName(decl.Name);
StringHelpers.CleanupText(ref decl.DebugText); StringHelpers.CleanupText(ref decl.DebugText);

24
src/Generator/Types/Types.cs

@ -139,6 +139,13 @@ namespace Cxxi
{ {
public ISet<Declaration> ForwardReferences; public ISet<Declaration> ForwardReferences;
public ISet<Class> Bases; public ISet<Class> Bases;
private Class mainClass;
public TypeRefsVisitor()
{
ForwardReferences = new HashSet<Declaration>();
Bases = new HashSet<Class>();
}
public void Collect(Declaration declaration) public void Collect(Declaration declaration)
{ {
@ -151,10 +158,15 @@ namespace Cxxi
ForwardReferences.Add(declaration); ForwardReferences.Add(declaration);
} }
public TypeRefsVisitor() public void Process(Declaration declaration)
{ {
ForwardReferences = new HashSet<Declaration>(); if (declaration is Class)
Bases = new HashSet<Class>(); {
mainClass = declaration as Class;
Visited.Remove(mainClass);
}
declaration.Visit(this);
} }
public override bool VisitClassDecl(Class @class) public override bool VisitClassDecl(Class @class)
@ -162,6 +174,9 @@ namespace Cxxi
if (AlreadyVisited(@class)) if (AlreadyVisited(@class))
return true; return true;
if (@class.Ignore)
return true;
Collect(@class); Collect(@class);
// If the class is incomplete, then we cannot process the record // If the class is incomplete, then we cannot process the record
@ -170,6 +185,9 @@ namespace Cxxi
if (@class.IsIncomplete) if (@class.IsIncomplete)
return true; return true;
if (@class != mainClass)
return true;
foreach (var field in @class.Fields) foreach (var field in @class.Fields)
VisitFieldDecl(field); VisitFieldDecl(field);

Loading…
Cancel
Save