Browse Source

Extract the checking logic for const char strings in its own helper method.

pull/1/head
triton 12 years ago
parent
commit
c430340c4c
  1. 36
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs

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

@ -97,6 +97,32 @@ namespace Cxxi.Generators.CSharp @@ -97,6 +97,32 @@ namespace Cxxi.Generators.CSharp
return string.Format("Func<{0}{1}>", returnType.Visit(this), args);
}
public static bool IsConstCharString(PointerType pointer)
{
var pointee = pointer.Pointee.Desugar();
if (pointee.IsPrimitiveType(PrimitiveType.Void) ||
pointee.IsPrimitiveType(PrimitiveType.UInt8))
return true;
if (pointee.IsPrimitiveType(PrimitiveType.Char) &&
pointer.QualifiedPointee.Qualifiers.IsConst)
return true;
return false;
}
public static bool IsConstCharString(QualifiedType qualType)
{
var desugared = qualType.Type.Desugar();
if (!(desugared is PointerType))
return false;
var pointer = desugared as PointerType;
return IsConstCharString(pointer);
}
public string VisitPointerType(PointerType pointer, TypeQualifiers quals)
{
var pointee = pointer.Pointee;
@ -109,16 +135,8 @@ namespace Cxxi.Generators.CSharp @@ -109,16 +135,8 @@ namespace Cxxi.Generators.CSharp
var isManagedContext = ContextKind == CSharpTypePrinterContextKind.Managed;
if (pointee.Desugar().IsPrimitiveType(PrimitiveType.Void) ||
pointee.Desugar().IsPrimitiveType(PrimitiveType.UInt8))
{
return isManagedContext ? "string" : "System.IntPtr";
}
if (pointee.IsPrimitiveType(PrimitiveType.Char) && quals.IsConst)
{
if (IsConstCharString(pointer))
return isManagedContext ? "string" : "System.IntPtr";
}
Class @class;
if (pointee.IsTagDecl(out @class)

Loading…
Cancel
Save