Browse Source

Fixed C/C++ type printing of const pointers with const types.

pull/705/head
Joao Matos 9 years ago
parent
commit
4d277afa69
  1. 10
      src/AST/CppTypePrinter.cs
  2. 12
      src/Generator.Tests/AST/TestAST.cs

10
src/AST/CppTypePrinter.cs

@ -92,11 +92,10 @@ namespace CppSharp.AST
return string.Format("{0} (*)({1})", returnType.Visit(this), args); return string.Format("{0} (*)({1})", returnType.Visit(this), args);
} }
var qual = PrintTypeQualifiers && var qual = PrintTypeQualifiers && quals.IsConst ? " const" : string.Empty;
pointer.GetFinalQualifiedPointee().Qualifiers.IsConst ? "const " : string.Empty; var pointeeType = pointee.Visit(this, pointer.QualifiedPointee.Qualifiers);
var pointeeType = pointee.Visit(this, quals);
var mod = PrintTypeModifiers ? ConvertModifierToString(pointer.Modifier) : string.Empty; var mod = PrintTypeModifiers ? ConvertModifierToString(pointer.Modifier) : string.Empty;
return string.Format("{0}{1}{2}", qual, pointeeType, mod); return string.Format("{0}{1}{2}", pointeeType, mod, qual);
} }
public virtual string VisitMemberPointerType(MemberPointerType member, TypeQualifiers quals) public virtual string VisitMemberPointerType(MemberPointerType member, TypeQualifiers quals)
@ -106,7 +105,8 @@ namespace CppSharp.AST
public virtual string VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals) public virtual string VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals)
{ {
return VisitPrimitiveType(builtin.Type); var qual = PrintTypeQualifiers && quals.IsConst ? "const " : string.Empty;
return string.Format("{0}{1}", qual, VisitPrimitiveType(builtin.Type));
} }
public virtual string VisitPrimitiveType(PrimitiveType primitive) public virtual string VisitPrimitiveType(PrimitiveType primitive)

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

@ -409,6 +409,18 @@ namespace CppSharp.Generator.Tests.AST
Is.Not.EqualTo(template.Specializations[1].Constructors.First().QualifiedName)); Is.Not.EqualTo(template.Specializations[1].Constructors.First().QualifiedName));
} }
[Test]
public void TestPrintingConstPointerWithConstType()
{
var template = AstContext.FindDecl<ClassTemplate>("TestSpecializationArguments").First();
var cppTypePrinter = new CppTypePrinter { PrintScopeKind = CppTypePrintScopeKind.Qualified };
var builtin = new BuiltinType(PrimitiveType.Char);
var pointee = new QualifiedType(builtin, new TypeQualifiers { IsConst = true });
var pointer = new QualifiedType(new PointerType(pointee), new TypeQualifiers { IsConst = true });
var type = pointer.Visit(cppTypePrinter);
Assert.AreEqual(type, "const char* const");
}
[Test] [Test]
public void TestPrintingSpecializationWithConstValue() public void TestPrintingSpecializationWithConstValue()
{ {

Loading…
Cancel
Save