Browse Source

Fixed the printing of class template specializations.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/661/head
Dimitar Dobrev 9 years ago
parent
commit
62beaddf63
  1. 5
      src/AST/ASTVisitor.cs
  2. 1
      src/AST/Declaration.cs
  3. 5
      src/AST/Template.cs
  4. 5
      src/Generator.Tests/AST/TestAST.cs
  5. 5
      src/Generator/Generators/CLI/CLITypePrinter.cs
  6. 5
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs
  7. 5
      src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs
  8. 18
      src/Generator/Types/CppTypePrinter.cs

5
src/AST/ASTVisitor.cs

@ -281,6 +281,11 @@ namespace CppSharp.AST @@ -281,6 +281,11 @@ namespace CppSharp.AST
return true;
}
public virtual bool VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return VisitClassDecl(specialization);
}
public virtual bool VisitFieldDecl(Field field)
{
if (!VisitDeclaration(field))

1
src/AST/Declaration.cs

@ -391,6 +391,7 @@ namespace CppSharp.AST @@ -391,6 +391,7 @@ namespace CppSharp.AST
{
T VisitDeclaration(Declaration decl);
T VisitClassDecl(Class @class);
T VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization);
T VisitFieldDecl(Field field);
T VisitFunctionDecl(Function function);
T VisitMethodDecl(Method method);

5
src/AST/Template.cs

@ -301,6 +301,11 @@ namespace CppSharp.AST @@ -301,6 +301,11 @@ namespace CppSharp.AST
{
Arguments = new List<TemplateArgument>();
}
public override T Visit<T>(IDeclVisitor<T> visitor)
{
return visitor.VisitClassTemplateSpecializationDecl(this);
}
}
/// <summary>

5
src/Generator.Tests/AST/TestAST.cs

@ -81,6 +81,11 @@ namespace CppSharp.Generator.Tests.AST @@ -81,6 +81,11 @@ namespace CppSharp.Generator.Tests.AST
throw new System.NotImplementedException();
}
public bool VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
throw new NotImplementedException();
}
public bool VisitFieldDecl(Field field)
{
throw new System.NotImplementedException();

5
src/Generator/Generators/CLI/CLITypePrinter.cs

@ -356,6 +356,11 @@ namespace CppSharp.Generators.CLI @@ -356,6 +356,11 @@ namespace CppSharp.Generators.CLI
: string.Empty);
}
public string VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return VisitClassDecl(specialization);
}
public string VisitFieldDecl(Field field)
{
throw new NotImplementedException();

5
src/Generator/Generators/CSharp/CSharpTypePrinter.cs

@ -585,6 +585,11 @@ namespace CppSharp.Generators.CSharp @@ -585,6 +585,11 @@ namespace CppSharp.Generators.CSharp
return GetNestedQualifiedName(@class);
}
public CSharpTypePrinterResult VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return VisitClassDecl(specialization);
}
public CSharpTypePrinterResult VisitFieldDecl(Field field)
{
throw new NotImplementedException();

5
src/Generator/Passes/CheckVirtualOverrideReturnCovariance.cs

@ -88,6 +88,11 @@ namespace CppSharp.Passes @@ -88,6 +88,11 @@ namespace CppSharp.Passes
#region Dummy implementations
public bool VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return false;
}
public bool VisitFunctionType(FunctionType function, TypeQualifiers quals)
{
return false;

18
src/Generator/Types/CppTypePrinter.cs

@ -151,14 +151,11 @@ namespace CppSharp.Types @@ -151,14 +151,11 @@ namespace CppSharp.Types
public string VisitTemplateSpecializationType(TemplateSpecializationType template, TypeQualifiers quals)
{
if (template.Template.TemplatedDecl == null)
var specialization = template.GetClassTemplateSpecialization();
if (specialization == null)
return string.Empty;
return string.Format("{0}<{1}>", template.Template.TemplatedDecl.Visit(this),
string.Join(", ",
template.Arguments.Where(
a => a.Type.Type != null &&
!(a.Type.Type is DependentNameType)).Select(a => a.Type.Visit(this))));
return VisitClassTemplateSpecializationDecl(specialization);
}
public string VisitTemplateParameterType(TemplateParameterType param, TypeQualifiers quals)
@ -272,6 +269,15 @@ namespace CppSharp.Types @@ -272,6 +269,15 @@ namespace CppSharp.Types
return VisitDeclaration(@class);
}
public string VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return string.Format("{0}<{1}>", specialization.TemplatedDecl.Visit(this),
string.Join(", ",
specialization.Arguments.Where(
a => a.Type.Type != null &&
!(a.Type.Type is DependentNameType)).Select(a => a.Type.Visit(this))));
}
public string VisitFieldDecl(Field field)
{
return VisitDeclaration(field);

Loading…
Cancel
Save