Skip to content

Commit 0e38947

Browse files
committed
Convert the visiting options to an enum
Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
1 parent ea05350 commit 0e38947

32 files changed

+130
-350
lines changed

src/AST/ASTVisitor.cs

Lines changed: 64 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34

45
namespace CppSharp.AST
@@ -17,25 +18,68 @@ public interface IAstVisitor<out T> : ITypeVisitor<T>,
1718
AstVisitorOptions VisitOptions { get; }
1819
}
1920

21+
[Flags]
22+
public enum VisitFlags
23+
{
24+
/// <summary>
25+
/// We always visit classes, functions and declaration contexts.
26+
/// </summary>
27+
Default = 0,
28+
29+
ClassBases = 1 << 0,
30+
ClassFields = 1 << 1,
31+
ClassProperties = 1 << 2,
32+
ClassMethods = 1 << 3,
33+
ClassTemplateSpecializations = 1 << 4,
34+
PropertyAccessors = 1 << 5,
35+
36+
NamespaceEnums = 1 << 6,
37+
NamespaceTemplates = 1 << 7,
38+
NamespaceTypedefs = 1 << 8,
39+
NamespaceEvents = 1 << 9,
40+
NamespaceVariables = 1 << 10,
41+
42+
FunctionReturnType = 1 << 11,
43+
FunctionParameters = 1 << 12,
44+
EventParameters = 1 << 13,
45+
TemplateArguments = 1 << 14,
46+
47+
Any = ClassBases | ClassFields | ClassProperties | ClassMethods |
48+
ClassTemplateSpecializations | PropertyAccessors |
49+
NamespaceEnums | NamespaceTemplates | NamespaceTypedefs |
50+
NamespaceEvents | NamespaceVariables |
51+
FunctionReturnType | FunctionParameters |
52+
EventParameters | TemplateArguments
53+
}
54+
2055
public class AstVisitorOptions
2156
{
22-
public bool VisitClassBases = true;
23-
public bool VisitClassFields = true;
24-
public bool VisitClassProperties = true;
25-
public bool VisitClassMethods = true;
26-
public bool VisitClassTemplateSpecializations { get; set; } = true;
27-
public bool VisitPropertyAccessors = false;
28-
29-
public bool VisitNamespaceEnums = true;
30-
public bool VisitNamespaceTemplates = true;
31-
public bool VisitNamespaceTypedefs = true;
32-
public bool VisitNamespaceEvents = true;
33-
public bool VisitNamespaceVariables = true;
34-
35-
public bool VisitFunctionReturnType = true;
36-
public bool VisitFunctionParameters = true;
37-
public bool VisitEventParameters = true;
38-
public bool VisitTemplateArguments = true;
57+
public AstVisitorOptions(VisitFlags flags)
58+
=> this.flags = flags;
59+
60+
public bool VisitClassBases => (flags & VisitFlags.ClassBases) != 0;
61+
public bool VisitClassFields => (flags & VisitFlags.ClassFields) != 0;
62+
public bool VisitClassProperties => (flags & VisitFlags.ClassProperties) != 0;
63+
public bool VisitClassMethods => (flags & VisitFlags.ClassMethods) != 0;
64+
public bool VisitClassTemplateSpecializations => (flags & VisitFlags.ClassTemplateSpecializations) != 0;
65+
public bool VisitPropertyAccessors => (flags & VisitFlags.PropertyAccessors) != 0;
66+
67+
public bool VisitNamespaceEnums => (flags & VisitFlags.NamespaceEnums) != 0;
68+
public bool VisitNamespaceTemplates => (flags & VisitFlags.NamespaceTemplates) != 0;
69+
public bool VisitNamespaceTypedefs => (flags & VisitFlags.NamespaceTypedefs) != 0;
70+
public bool VisitNamespaceEvents => (flags & VisitFlags.NamespaceEvents) != 0;
71+
public bool VisitNamespaceVariables => (flags & VisitFlags.NamespaceVariables) != 0;
72+
73+
public bool VisitFunctionReturnType => (flags & VisitFlags.FunctionReturnType) != 0;
74+
public bool VisitFunctionParameters => (flags & VisitFlags.FunctionParameters) != 0;
75+
public bool VisitEventParameters => (flags & VisitFlags.EventParameters) != 0;
76+
public bool VisitTemplateArguments => (flags & VisitFlags.TemplateArguments) != 0;
77+
78+
public void SetFlags(VisitFlags flags) => this.flags |= flags;
79+
public void ResetFlags(VisitFlags flags) => this.flags = flags;
80+
public void ClearFlags(VisitFlags flags) => this.flags &= ~flags;
81+
82+
private VisitFlags flags;
3983
}
4084

4185
/// <summary>
@@ -46,14 +90,9 @@ public class AstVisitorOptions
4690
/// </summary>
4791
public abstract partial class AstVisitor : IAstVisitor<bool>, IAstVisited
4892
{
49-
public ISet<object> Visited { get; private set; }
93+
public ISet<object> Visited { get; private set; } = new HashSet<object>();
5094
public AstVisitorOptions VisitOptions { get; private set; }
51-
52-
protected AstVisitor()
53-
{
54-
Visited = new HashSet<object>();
55-
VisitOptions = new AstVisitorOptions();
56-
}
95+
= new AstVisitorOptions(VisitFlags.Any & ~VisitFlags.PropertyAccessors);
5796

5897
public bool AlreadyVisited(Type type)
5998
{

src/Generator/Generators/C/CCodeGenerator.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using CppSharp.AST;
2-
using CppSharp.AST.Extensions;
32
using System.Collections.Generic;
43
using System.Linq;
54

@@ -32,7 +31,7 @@ public CCodeGenerator(BindingContext context,
3231
IEnumerable<TranslationUnit> units = null)
3332
: base(context, units)
3433
{
35-
VisitOptions.VisitPropertyAccessors = true;
34+
VisitOptions.SetFlags(VisitFlags.PropertyAccessors);
3635
typePrinter = new CppTypePrinter(context);
3736
}
3837

src/Generator/Generators/CSharp/CSharpMarshal.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
21
using System.Linq;
3-
using System.Text;
42
using CppSharp.AST;
53
using CppSharp.AST.Extensions;
64
using CppSharp.Generators.C;
@@ -28,8 +26,8 @@ public abstract class CSharpMarshalPrinter : MarshalPrinter<CSharpMarshalContext
2826
protected CSharpMarshalPrinter(CSharpMarshalContext context)
2927
: base(context)
3028
{
31-
VisitOptions.VisitFunctionParameters = false;
32-
VisitOptions.VisitTemplateArguments = false;
29+
VisitOptions.ClearFlags(VisitFlags.FunctionParameters |
30+
VisitFlags.TemplateArguments);
3331
}
3432

3533
public override bool VisitMemberPointerType(MemberPointerType member,

src/Generator/Generators/CodeGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public virtual CommentKind CommentKind
4545
public virtual CommentKind DocumentationCommentKind => CommentKind.BCPLSlash;
4646

4747
public ISet<object> Visited { get; } = new HashSet<object>();
48-
49-
public AstVisitorOptions VisitOptions { get; } = new AstVisitorOptions();
48+
public AstVisitorOptions VisitOptions { get; }
49+
= new AstVisitorOptions(VisitFlags.Any & ~VisitFlags.PropertyAccessors);
5050

5151
protected CodeGenerator(BindingContext context)
5252
{

src/Generator/Passes/CheckFlagEnumsPass.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,9 @@ namespace CppSharp.Passes
99
public class CheckFlagEnumsPass : TranslationUnitPass
1010
{
1111
public CheckFlagEnumsPass()
12-
{
13-
VisitOptions.VisitClassBases = false;
14-
VisitOptions.VisitClassProperties = false;
15-
VisitOptions.VisitEventParameters = false;
16-
VisitOptions.VisitFunctionParameters = false;
17-
VisitOptions.VisitFunctionReturnType = false;
18-
VisitOptions.VisitNamespaceEvents = false;
19-
VisitOptions.VisitNamespaceTemplates = false;
20-
VisitOptions.VisitNamespaceTypedefs = false;
21-
VisitOptions.VisitNamespaceVariables = false;
22-
VisitOptions.VisitTemplateArguments = false;
23-
}
12+
=> VisitOptions.ResetFlags(VisitFlags.NamespaceEnums);
2413

25-
static bool IsFlagEnum(Enumeration @enum)
14+
private static bool IsFlagEnum(Enumeration @enum)
2615
{
2716
// If the enumeration only has power of two values, assume it's
2817
// a flags enum.

src/Generator/Passes/CheckOperatorsOverloads.cs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,9 @@ namespace CppSharp.Passes
1010
/// </summary>
1111
public class CheckOperatorsOverloadsPass : TranslationUnitPass
1212
{
13-
public CheckOperatorsOverloadsPass() =>
14-
VisitOptions.VisitClassBases =
15-
VisitOptions.VisitClassFields =
16-
VisitOptions.VisitEventParameters =
17-
VisitOptions.VisitFunctionParameters =
18-
VisitOptions.VisitFunctionReturnType =
19-
VisitOptions.VisitClassMethods =
20-
VisitOptions.VisitNamespaceEnums =
21-
VisitOptions.VisitNamespaceEvents =
22-
VisitOptions.VisitNamespaceTemplates =
23-
VisitOptions.VisitNamespaceTypedefs =
24-
VisitOptions.VisitNamespaceVariables =
25-
VisitOptions.VisitPropertyAccessors =
26-
VisitOptions.VisitTemplateArguments = false;
13+
public CheckOperatorsOverloadsPass() => VisitOptions.ResetFlags(
14+
VisitFlags.ClassMethods | VisitFlags.ClassProperties |
15+
VisitFlags.ClassTemplateSpecializations);
2716

2817
public override bool VisitClassDecl(Class @class)
2918
{

src/Generator/Passes/CheckStaticClass.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ namespace CppSharp.Passes
1010
public class CheckStaticClass : TranslationUnitPass
1111
{
1212
public CheckStaticClass()
13-
{
14-
VisitOptions.VisitClassBases = false;
15-
}
13+
=> VisitOptions.ResetFlags(VisitFlags.ClassMethods);
1614

1715
public override bool VisitDeclaration(Declaration decl)
1816
{

src/Generator/Passes/CleanCommentsPass.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,9 @@ namespace CppSharp.Passes
77
{
88
public class CleanCommentsPass : TranslationUnitPass, ICommentVisitor<bool>
99
{
10-
public CleanCommentsPass()
11-
{
12-
VisitOptions.VisitClassBases = false;
13-
VisitOptions.VisitFunctionReturnType = false;
14-
VisitOptions.VisitTemplateArguments = false;
15-
}
10+
public CleanCommentsPass() => VisitOptions.ResetFlags(
11+
VisitFlags.ClassBases | VisitFlags.FunctionReturnType |
12+
VisitFlags.TemplateArguments);
1613

1714
public bool VisitBlockCommand(BlockCommandComment comment) => true;
1815

src/Generator/Passes/CleanInvalidDeclNamesPass.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,9 @@ namespace CppSharp.Passes
99
{
1010
public class CleanInvalidDeclNamesPass : TranslationUnitPass
1111
{
12-
public CleanInvalidDeclNamesPass()
13-
{
14-
VisitOptions.VisitClassBases = false;
15-
VisitOptions.VisitEventParameters = false;
16-
VisitOptions.VisitFunctionReturnType = false;
17-
VisitOptions.VisitTemplateArguments = false;
18-
}
12+
public CleanInvalidDeclNamesPass() => VisitOptions.ClearFlags(
13+
VisitFlags.ClassBases | VisitFlags.EventParameters |
14+
VisitFlags.FunctionReturnType | VisitFlags.TemplateArguments);
1915

2016
public override bool VisitClassDecl(Class @class)
2117
{

src/Generator/Passes/DelegatesPass.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,10 @@ namespace CppSharp.Passes
99
{
1010
public class DelegatesPass : TranslationUnitPass
1111
{
12-
public DelegatesPass()
13-
{
14-
VisitOptions.VisitClassBases = false;
15-
VisitOptions.VisitFunctionReturnType = false;
16-
VisitOptions.VisitNamespaceEnums = false;
17-
VisitOptions.VisitNamespaceTemplates = false;
18-
VisitOptions.VisitTemplateArguments = false;
19-
}
12+
public DelegatesPass() => VisitOptions.ClearFlags(
13+
VisitFlags.ClassBases | VisitFlags.FunctionReturnType |
14+
VisitFlags.NamespaceEnums | VisitFlags.NamespaceTemplates |
15+
VisitFlags.TemplateArguments);
2016

2117
public override bool VisitASTContext(ASTContext context)
2218
{

0 commit comments

Comments
 (0)