Browse Source

Clean up template declarations visiting behavior.

pull/1138/head
Joao Matos 9 years ago
parent
commit
8d16e46c38
  1. 24
      src/AST/ASTVisitor.cs
  2. 7
      src/AST/Declaration.cs
  3. 5
      src/AST/Template.cs

24
src/AST/ASTVisitor.cs

@ -311,11 +311,6 @@ namespace CppSharp.AST
return true; return true;
} }
public virtual bool VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return VisitClassDecl(specialization);
}
public virtual bool VisitFieldDecl(Field field) public virtual bool VisitFieldDecl(Field field)
{ {
if (!VisitDeclaration(field)) if (!VisitDeclaration(field))
@ -440,9 +435,16 @@ namespace CppSharp.AST
foreach (var specialization in template.Specializations) foreach (var specialization in template.Specializations)
specialization.Visit(this); specialization.Visit(this);
template.TemplatedClass.Visit(this);
return true; return true;
} }
public virtual bool VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return VisitClassDecl(specialization);
}
public virtual bool VisitFunctionTemplateDecl(FunctionTemplate template) public virtual bool VisitFunctionTemplateDecl(FunctionTemplate template)
{ {
if (!VisitDeclaration(template)) if (!VisitDeclaration(template))
@ -451,7 +453,17 @@ namespace CppSharp.AST
foreach (var templateParameter in template.Parameters) foreach (var templateParameter in template.Parameters)
templateParameter.Visit(this); templateParameter.Visit(this);
return template.TemplatedFunction.Visit(this); foreach (var specialization in template.Specializations)
specialization.Visit(this);
template.TemplatedFunction.Visit(this);
return true;
}
public virtual bool VisitFunctionTemplateSpecializationDecl(FunctionTemplateSpecialization specialization)
{
return specialization.SpecializedFunction.Visit(this);
} }
public virtual bool VisitMacroDefinition(MacroDefinition macro) public virtual bool VisitMacroDefinition(MacroDefinition macro)

7
src/AST/Declaration.cs

@ -401,7 +401,6 @@ namespace CppSharp.AST
{ {
T VisitDeclaration(Declaration decl); T VisitDeclaration(Declaration decl);
T VisitClassDecl(Class @class); T VisitClassDecl(Class @class);
T VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization);
T VisitFieldDecl(Field field); T VisitFieldDecl(Field field);
T VisitFunctionDecl(Function function); T VisitFunctionDecl(Function function);
T VisitMethodDecl(Method method); T VisitMethodDecl(Method method);
@ -411,13 +410,15 @@ namespace CppSharp.AST
T VisitEnumDecl(Enumeration @enum); T VisitEnumDecl(Enumeration @enum);
T VisitEnumItemDecl(Enumeration.Item item); T VisitEnumItemDecl(Enumeration.Item item);
T VisitVariableDecl(Variable variable); T VisitVariableDecl(Variable variable);
T VisitClassTemplateDecl(ClassTemplate template);
T VisitFunctionTemplateDecl(FunctionTemplate template);
T VisitMacroDefinition(MacroDefinition macro); T VisitMacroDefinition(MacroDefinition macro);
T VisitNamespace(Namespace @namespace); T VisitNamespace(Namespace @namespace);
T VisitEvent(Event @event); T VisitEvent(Event @event);
T VisitProperty(Property @property); T VisitProperty(Property @property);
T VisitFriend(Friend friend); T VisitFriend(Friend friend);
T VisitClassTemplateDecl(ClassTemplate template);
T VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization);
T VisitFunctionTemplateDecl(FunctionTemplate template);
T VisitFunctionTemplateSpecializationDecl(FunctionTemplateSpecialization specialization);
T VisitTemplateTemplateParameterDecl(TemplateTemplateParameter templateTemplateParameter); T VisitTemplateTemplateParameterDecl(TemplateTemplateParameter templateTemplateParameter);
T VisitTemplateParameterDecl(TypeTemplateParameter templateParameter); T VisitTemplateParameterDecl(TypeTemplateParameter templateParameter);
T VisitNonTypeTemplateParameterDecl(NonTypeTemplateParameter nonTypeTemplateParameter); T VisitNonTypeTemplateParameterDecl(NonTypeTemplateParameter nonTypeTemplateParameter);

5
src/AST/Template.cs

@ -372,5 +372,10 @@ namespace CppSharp.AST
SpecializedFunction = fts.SpecializedFunction; SpecializedFunction = fts.SpecializedFunction;
SpecializationKind = fts.SpecializationKind; SpecializationKind = fts.SpecializationKind;
} }
public T Visit<T>(IDeclVisitor<T> visitor)
{
return visitor.VisitFunctionTemplateSpecializationDecl(this);
}
} }
} }

Loading…
Cancel
Save