diff --git a/src/Generator/Passes/CheckAbiParameters.cs b/src/Generator/Passes/CheckAbiParameters.cs index b5fda0bc..c8e0e0bc 100644 --- a/src/Generator/Passes/CheckAbiParameters.cs +++ b/src/Generator/Passes/CheckAbiParameters.cs @@ -29,7 +29,7 @@ namespace CppSharp.Passes public override bool VisitFunctionDecl(Function function) { - if (AlreadyVisited(function)) + if (!VisitDeclaration(function)) return false; if (function.IsReturnIndirect) diff --git a/src/Generator/Passes/CheckAmbiguousFunctions.cs b/src/Generator/Passes/CheckAmbiguousFunctions.cs index 0ac1e226..0c44baf5 100644 --- a/src/Generator/Passes/CheckAmbiguousFunctions.cs +++ b/src/Generator/Passes/CheckAmbiguousFunctions.cs @@ -25,7 +25,7 @@ namespace CppSharp.Passes { public override bool VisitFunctionDecl(AST.Function function) { - if (AlreadyVisited(function)) + if (!VisitDeclaration(function)) return false; if (function.IsAmbiguous) diff --git a/src/Generator/Passes/CheckDuplicatedNamesPass.cs b/src/Generator/Passes/CheckDuplicatedNamesPass.cs index 88748b79..c82a5df3 100644 --- a/src/Generator/Passes/CheckDuplicatedNamesPass.cs +++ b/src/Generator/Passes/CheckDuplicatedNamesPass.cs @@ -94,18 +94,22 @@ namespace CppSharp.Passes public override bool VisitFieldDecl(Field decl) { - if (ASTUtils.CheckIgnoreField(decl)) + if (!VisitDeclaration(decl)) return false; - if(!AlreadyVisited(decl)) - CheckDuplicate(decl); + if (ASTUtils.CheckIgnoreField(decl)) + return false; + CheckDuplicate(decl); return false; } public override bool VisitProperty(Property decl) { - if(!AlreadyVisited(decl) && decl.ExplicitInterfaceImpl == null) + if (!VisitDeclaration(decl)) + return false; + + if (decl.ExplicitInterfaceImpl == null) CheckDuplicate(decl); return false; @@ -113,10 +117,13 @@ namespace CppSharp.Passes public override bool VisitMethodDecl(Method decl) { + if (!VisitDeclaration(decl)) + return false; + if (ASTUtils.CheckIgnoreMethod(decl)) return false; - if (!AlreadyVisited(decl) && decl.ExplicitInterfaceImpl == null) + if (decl.ExplicitInterfaceImpl == null) CheckDuplicate(decl); return false; @@ -124,7 +131,10 @@ namespace CppSharp.Passes public override bool VisitClassDecl(Class @class) { - if (AlreadyVisited(@class) || @class.IsIncomplete) + if (!VisitDeclaration(@class)) + return false; + + if (@class.IsIncomplete) return false; // DeclarationName should always process methods first, diff --git a/src/Generator/Passes/CheckIgnoredDecls.cs b/src/Generator/Passes/CheckIgnoredDecls.cs index 4a739047..e65a0863 100644 --- a/src/Generator/Passes/CheckIgnoredDecls.cs +++ b/src/Generator/Passes/CheckIgnoredDecls.cs @@ -108,9 +108,6 @@ namespace CppSharp.Passes public override bool VisitMethodDecl(Method method) { - if (!VisitDeclaration(method)) - return false; - if (!CheckIgnoredBaseOverridenMethod(method)) return false; diff --git a/src/Generator/Passes/CheckOperatorsOverloads.cs b/src/Generator/Passes/CheckOperatorsOverloads.cs index 024245f6..1648fcdd 100644 --- a/src/Generator/Passes/CheckOperatorsOverloads.cs +++ b/src/Generator/Passes/CheckOperatorsOverloads.cs @@ -14,12 +14,6 @@ namespace CppSharp.Passes if (@class.CompleteDeclaration != null) return VisitClassDecl(@class.CompleteDeclaration as Class); - if (!VisitDeclaration(@class)) - return false; - - if (AlreadyVisited(@class)) - return false; - if (!VisitDeclarationContext(@class)) return false; diff --git a/src/Generator/Passes/CheckVTableComponentsPass.cs b/src/Generator/Passes/CheckVTableComponentsPass.cs index eac5278e..07988fbb 100644 --- a/src/Generator/Passes/CheckVTableComponentsPass.cs +++ b/src/Generator/Passes/CheckVTableComponentsPass.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Linq; +using System.Linq; using CppSharp.AST; using CppSharp.Utils; @@ -13,9 +12,6 @@ namespace CppSharp.Passes { public override bool VisitClassDecl(AST.Class @class) { - if (AlreadyVisited(@class)) - return false; - foreach (var vfptr in @class.Layout.VFTables) { var uniqueEntries = new OrderedSet(); diff --git a/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs b/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs index e10627b5..aa0f8a89 100644 --- a/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs +++ b/src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs @@ -247,7 +247,7 @@ namespace CppSharp.Passes { public override bool VisitMethodDecl(AST.Method method) { - if (AlreadyVisited(method)) + if (!VisitDeclaration(method)) return false; if (!method.IsOverride) diff --git a/src/Generator/Passes/FieldToPropertyPass.cs b/src/Generator/Passes/FieldToPropertyPass.cs index 86457f92..b483f5dd 100644 --- a/src/Generator/Passes/FieldToPropertyPass.cs +++ b/src/Generator/Passes/FieldToPropertyPass.cs @@ -7,7 +7,7 @@ namespace CppSharp.Passes { public override bool VisitFieldDecl(Field field) { - if (AlreadyVisited(field)) + if (!VisitDeclaration(field)) return false; var @class = field.Namespace as Class; diff --git a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs index b96504c0..203c0172 100644 --- a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs +++ b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs @@ -33,7 +33,7 @@ namespace CppSharp.Passes if (@class.CompleteDeclaration != null) return VisitClassDecl(@class.CompleteDeclaration as Class); - if (!VisitDeclaration(@class) || AlreadyVisited(@class)) + if (!VisitDeclaration(@class)) return false; if (@class.IsAbstract) diff --git a/src/Generator/Passes/GetterSetterToPropertyPass.cs b/src/Generator/Passes/GetterSetterToPropertyPass.cs index 14951afa..aa440ef1 100644 --- a/src/Generator/Passes/GetterSetterToPropertyPass.cs +++ b/src/Generator/Passes/GetterSetterToPropertyPass.cs @@ -73,7 +73,7 @@ namespace CppSharp.Passes public override bool VisitMethodDecl(Method method) { - if (AlreadyVisited(method)) + if (!VisitDeclaration(method)) return false; if (ASTUtils.CheckIgnoreMethod(method)) diff --git a/src/Generator/Passes/MoveFunctionToClassPass.cs b/src/Generator/Passes/MoveFunctionToClassPass.cs index e09d6a70..54ec0f9d 100644 --- a/src/Generator/Passes/MoveFunctionToClassPass.cs +++ b/src/Generator/Passes/MoveFunctionToClassPass.cs @@ -10,20 +10,22 @@ namespace CppSharp.Passes { public override bool VisitFunctionDecl(Function function) { - if (AlreadyVisited(function) || function.Ignore || function.Namespace is Class) - return base.VisitFunctionDecl(function); + if (!VisitDeclaration(function)) + return false; - Class @class = FindClassToMoveFunctionTo(function.Namespace); + if (function.Ignore || function.Namespace is Class) + return false; + + var @class = FindClassToMoveFunctionTo(function.Namespace); if (@class != null) - { MoveFunction(function, @class); - } - return base.VisitFunctionDecl(function); + + return true; } private Class FindClassToMoveFunctionTo(INamedDecl @namespace) { - TranslationUnit unit = @namespace as TranslationUnit; + var unit = @namespace as TranslationUnit; if (unit == null) { return Driver.ASTContext.FindClass( diff --git a/src/Generator/Passes/ObjectOverridesPass.cs b/src/Generator/Passes/ObjectOverridesPass.cs index 0c308825..ab1f3081 100644 --- a/src/Generator/Passes/ObjectOverridesPass.cs +++ b/src/Generator/Passes/ObjectOverridesPass.cs @@ -67,9 +67,6 @@ namespace CppSharp if (!VisitDeclaration(@class)) return false; - if (AlreadyVisited(@class)) - return true; - if (@class.IsValueType) return false; diff --git a/src/Generator/Passes/ResolveIncompleteDeclsPass.cs b/src/Generator/Passes/ResolveIncompleteDeclsPass.cs index 59ae158e..97f9f42b 100644 --- a/src/Generator/Passes/ResolveIncompleteDeclsPass.cs +++ b/src/Generator/Passes/ResolveIncompleteDeclsPass.cs @@ -1,5 +1,4 @@ -using System; -using CppSharp.AST; +using CppSharp.AST; namespace CppSharp.Passes { @@ -18,9 +17,6 @@ namespace CppSharp.Passes public override bool VisitClassDecl(Class @class) { - if (!VisitDeclaration(@class)) - return false; - if (!@class.IsIncomplete) goto Out; diff --git a/src/Generator/Types/Types.cs b/src/Generator/Types/Types.cs index 602f3637..0925814b 100644 --- a/src/Generator/Types/Types.cs +++ b/src/Generator/Types/Types.cs @@ -16,6 +16,9 @@ namespace CppSharp public override bool VisitDeclaration(Declaration decl) { + if (AlreadyVisited(decl)) + return false; + if (decl.CompleteDeclaration != null) return true; @@ -45,6 +48,9 @@ namespace CppSharp public override bool VisitDeclaration(Declaration decl) { + if (AlreadyVisited(decl)) + return false; + if (decl.CompleteDeclaration != null) return VisitDeclaration(decl.CompleteDeclaration); @@ -103,6 +109,7 @@ namespace CppSharp Ignore(); return false; } + return base.VisitMemberPointerType(member, quals); }