From c66d14d150ab7d03c991bed4a2111e8234e0a58a Mon Sep 17 00:00:00 2001 From: triton Date: Sat, 18 May 2013 15:25:53 +0100 Subject: [PATCH] ASTVisitor type visitors now try to visit a common VisitType first. --- src/Bridge/ASTVisitor.cs | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Bridge/ASTVisitor.cs b/src/Bridge/ASTVisitor.cs index a384ec9c..d0776d8f 100644 --- a/src/Bridge/ASTVisitor.cs +++ b/src/Bridge/ASTVisitor.cs @@ -58,18 +58,32 @@ namespace CppSharp #region Type Visitors + public virtual bool VisitType(Type type, TypeQualifiers quals) + { + return true; + } + public virtual bool VisitTagType(TagType tag, TypeQualifiers quals) { + if (!VisitType(tag, quals)) + return false; + return tag.Declaration.Visit(this); } public virtual bool VisitArrayType(ArrayType array, TypeQualifiers quals) { + if (!VisitType(array, quals)) + return false; + return array.Type.Visit(this, quals); } public virtual bool VisitFunctionType(FunctionType function, TypeQualifiers quals) { + if (!VisitType(function, quals)) + return false; + if (function.ReturnType != null) function.ReturnType.Visit(this); @@ -81,6 +95,9 @@ namespace CppSharp public virtual bool VisitPointerType(PointerType pointer, TypeQualifiers quals) { + if (!VisitType(pointer, quals)) + return false; + if (pointer.Pointee == null) return false; @@ -90,16 +107,25 @@ namespace CppSharp public virtual bool VisitMemberPointerType(MemberPointerType member, TypeQualifiers quals) { + if (!VisitType(member, quals)) + return false; + return member.Pointee.Visit(this, quals); } public virtual bool VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals) { - return true; + if (!VisitType(builtin, quals)) + return false; + + return VisitPrimitiveType(builtin.Type, quals); } public virtual bool VisitTypedefType(TypedefType typedef, TypeQualifiers quals) { + if (!VisitType(typedef, quals)) + return false; + return typedef.Declaration.Visit(this); } @@ -127,22 +153,34 @@ namespace CppSharp public virtual bool VisitTemplateParameterType(TemplateParameterType param, TypeQualifiers quals) { + if (!VisitType(param, quals)) + return false; + return true; } public bool VisitTemplateParameterSubstitutionType(TemplateParameterSubstitutionType param, TypeQualifiers quals) { + if (!VisitType(param, quals)) + return false; + return param.Replacement.Type.Visit(this, quals); } public bool VisitInjectedClassNameType(InjectedClassNameType injected, TypeQualifiers quals) { + if (!VisitType(injected, quals)) + return false; + return true; } public bool VisitDependentNameType(DependentNameType dependent, TypeQualifiers quals) { + if (!VisitType(dependent, quals)) + return false; + return true; }