Browse Source

Implement more accurate managed type printing in C++ type printer.

pull/1360/head
João Matos 6 years ago committed by João Matos
parent
commit
6a9d829698
  1. 21
      src/Generator/Generators/C/CppTypePrinter.cs

21
src/Generator/Generators/C/CppTypePrinter.cs

@ -22,7 +22,7 @@ namespace CppSharp.Generators.C
public bool PrintTypeModifiers { get; set; } public bool PrintTypeModifiers { get; set; }
public bool PrintVariableArrayAsPointers { get; set; } public bool PrintVariableArrayAsPointers { get; set; }
public CppTypePrinter(BindingContext context) : base(TypePrinterContextKind.Managed) public CppTypePrinter(BindingContext context) : base(TypePrinterContextKind.Native)
{ {
Context = context; Context = context;
PrintFlavorKind = CppTypePrintFlavorKind.Cpp; PrintFlavorKind = CppTypePrintFlavorKind.Cpp;
@ -436,11 +436,25 @@ namespace CppSharp.Generators.C
{ {
case TypePrintScopeKind.Local: case TypePrintScopeKind.Local:
{ {
if (ContextKind == TypePrinterContextKind.Managed)
{
return PrintLogicalNames ? declaration.LogicalName : declaration.Name;
}
return PrintLogicalNames ? declaration.LogicalOriginalName return PrintLogicalNames ? declaration.LogicalOriginalName
: declaration.OriginalName; : declaration.OriginalName;
} }
case TypePrintScopeKind.Qualified: case TypePrintScopeKind.Qualified:
{ {
if (ContextKind == TypePrinterContextKind.Managed)
{
var outputNamespace = declaration.TranslationUnit?.Module?.OutputNamespace;
if (!string.IsNullOrEmpty(outputNamespace))
return $"{outputNamespace}::{declaration.QualifiedName}";
return declaration.QualifiedName;
}
if (declaration.Namespace is Class) if (declaration.Namespace is Class)
return $"{declaration.Namespace.Visit(this)}::{declaration.OriginalName}"; return $"{declaration.Namespace.Visit(this)}::{declaration.OriginalName}";
@ -449,8 +463,11 @@ namespace CppSharp.Generators.C
} }
case TypePrintScopeKind.GlobalQualified: case TypePrintScopeKind.GlobalQualified:
{ {
var name = (ContextKind == TypePrinterContextKind.Managed) ?
declaration.Name : declaration.OriginalName;
if (declaration.Namespace is Class) if (declaration.Namespace is Class)
return $"{declaration.Namespace.Visit(this)}::{declaration.OriginalName}"; return $"{declaration.Namespace.Visit(this)}::{name}";
var qualifier = PrintFlavorKind == CppTypePrintFlavorKind.Cpp ? "::" : string.Empty; var qualifier = PrintFlavorKind == CppTypePrintFlavorKind.Cpp ? "::" : string.Empty;
return qualifier + GetDeclName(declaration, TypePrintScopeKind.Qualified); return qualifier + GetDeclName(declaration, TypePrintScopeKind.Qualified);

Loading…
Cancel
Save