|
|
|
@ -15,6 +15,20 @@ namespace Cxxi |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class AstVisitorOptions |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
public bool VisitClassBases = true; |
|
|
|
|
|
|
|
public bool VisitClassFields = true; |
|
|
|
|
|
|
|
public bool VisitClassProperties = true; |
|
|
|
|
|
|
|
public bool VisitClassMethods = true; |
|
|
|
|
|
|
|
public bool VisitClassEvents = true; |
|
|
|
|
|
|
|
public bool VisitClassVariables = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public bool VisitNamespaceEnums = true; |
|
|
|
|
|
|
|
public bool VisitNamespaceTemplates = true; |
|
|
|
|
|
|
|
public bool VisitNamespaceTypedefs = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
/// Base class for AST visitors.
|
|
|
|
/// Base class for AST visitors.
|
|
|
|
/// You can override the methods to customize the behaviour, by default
|
|
|
|
/// You can override the methods to customize the behaviour, by default
|
|
|
|
@ -24,10 +38,12 @@ namespace Cxxi |
|
|
|
public abstract class AstVisitor : IAstVisitor<bool>, IAstVisited |
|
|
|
public abstract class AstVisitor : IAstVisitor<bool>, IAstVisited |
|
|
|
{ |
|
|
|
{ |
|
|
|
public ISet<object> Visited { get; private set; } |
|
|
|
public ISet<object> Visited { get; private set; } |
|
|
|
|
|
|
|
public AstVisitorOptions Options { get; private set; } |
|
|
|
|
|
|
|
|
|
|
|
protected AstVisitor() |
|
|
|
protected AstVisitor() |
|
|
|
{ |
|
|
|
{ |
|
|
|
Visited = new HashSet<object>(); |
|
|
|
Visited = new HashSet<object>(); |
|
|
|
|
|
|
|
Options = new AstVisitorOptions(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public bool AlreadyVisited(Type type) |
|
|
|
public bool AlreadyVisited(Type type) |
|
|
|
@ -141,24 +157,30 @@ namespace Cxxi |
|
|
|
if (!VisitDeclaration(@class)) |
|
|
|
if (!VisitDeclaration(@class)) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
foreach (var baseClass in @class.Bases) |
|
|
|
if (Options.VisitClassBases) |
|
|
|
if (baseClass.IsClass) |
|
|
|
foreach (var baseClass in @class.Bases) |
|
|
|
baseClass.Class.Visit(this); |
|
|
|
if (baseClass.IsClass) |
|
|
|
|
|
|
|
VisitClassDecl(baseClass.Class); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var field in @class.Fields) |
|
|
|
if (Options.VisitClassFields) |
|
|
|
VisitFieldDecl(field); |
|
|
|
foreach (var field in @class.Fields) |
|
|
|
|
|
|
|
VisitFieldDecl(field); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var property in @class.Properties) |
|
|
|
if (Options.VisitClassProperties) |
|
|
|
VisitProperty(property); |
|
|
|
foreach (var property in @class.Properties) |
|
|
|
|
|
|
|
VisitProperty(property); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var method in @class.Methods) |
|
|
|
if (Options.VisitClassMethods) |
|
|
|
VisitMethodDecl(method); |
|
|
|
foreach (var method in @class.Methods) |
|
|
|
|
|
|
|
VisitMethodDecl(method); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Options.VisitClassEvents) |
|
|
|
foreach (var @event in @class.Events) |
|
|
|
foreach (var @event in @class.Events) |
|
|
|
VisitEvent(@event); |
|
|
|
VisitEvent(@event); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var variable in @class.Variables) |
|
|
|
if (Options.VisitClassVariables) |
|
|
|
VisitVariableDecl(variable); |
|
|
|
foreach (var variable in @class.Variables) |
|
|
|
|
|
|
|
VisitVariableDecl(variable); |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -270,14 +292,17 @@ namespace Cxxi |
|
|
|
foreach (var decl in @namespace.Functions) |
|
|
|
foreach (var decl in @namespace.Functions) |
|
|
|
decl.Visit(this); |
|
|
|
decl.Visit(this); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var decl in @namespace.Enums) |
|
|
|
if (Options.VisitNamespaceEnums) |
|
|
|
decl.Visit(this); |
|
|
|
foreach (var decl in @namespace.Enums) |
|
|
|
|
|
|
|
decl.Visit(this); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var decl in @namespace.Templates) |
|
|
|
if (Options.VisitNamespaceTemplates) |
|
|
|
decl.Visit(this); |
|
|
|
foreach (var decl in @namespace.Templates) |
|
|
|
|
|
|
|
decl.Visit(this); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var decl in @namespace.Typedefs) |
|
|
|
if (Options.VisitNamespaceTypedefs) |
|
|
|
decl.Visit(this); |
|
|
|
foreach (var decl in @namespace.Typedefs) |
|
|
|
|
|
|
|
decl.Visit(this); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var decl in @namespace.Namespaces) |
|
|
|
foreach (var decl in @namespace.Namespaces) |
|
|
|
decl.Visit(this); |
|
|
|
decl.Visit(this); |
|
|
|
|