Browse Source

Re-use common C++ declaration type printing code in CLITypePrinter.

pull/1300/head
João Matos 5 years ago committed by João Matos
parent
commit
ae47fd73bc
  1. 7
      src/Generator/Generators/C/CCodeGenerator.cs
  2. 16
      src/Generator/Generators/C/CppTypePrinter.cs
  3. 4
      src/Generator/Generators/CLI/CLIGenerator.cs
  4. 10
      src/Generator/Generators/CLI/CLIHeaders.cs
  5. 4
      src/Generator/Generators/CLI/CLISources.cs
  6. 10
      src/Generator/Generators/CLI/CLITemplate.cs
  7. 21
      src/Generator/Generators/CLI/CLITypePrinter.cs

7
src/Generator/Generators/C/CCodeGenerator.cs

@ -27,8 +27,9 @@ namespace CppSharp.Generators.C @@ -27,8 +27,9 @@ namespace CppSharp.Generators.C
public abstract class CCodeGenerator : CodeGenerator
{
public CCodeGenerator(BindingContext context)
: base(context)
public CCodeGenerator(BindingContext context,
IEnumerable<TranslationUnit> units = null)
: base(context, units)
{
VisitOptions.VisitPropertyAccessors = true;
}
@ -41,7 +42,7 @@ namespace CppSharp.Generators.C @@ -41,7 +42,7 @@ namespace CppSharp.Generators.C
return decl.QualifiedName;
}
private CppTypePrinter typePrinter = new CppTypePrinter();
protected CppTypePrinter typePrinter = new CppTypePrinter();
public virtual CppTypePrinter CTypePrinter => typePrinter;
public virtual void WriteHeaders() { }

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

@ -91,7 +91,13 @@ namespace CppSharp.Generators.C @@ -91,7 +91,13 @@ namespace CppSharp.Generators.C
return $"{qual}{VisitPrimitiveType(builtin.Type)}";
}
public TypePrinterResult VisitPrimitiveType(PrimitiveType primitive)
public override TypePrinterResult VisitPrimitiveType(PrimitiveType primitive, TypeQualifiers quals)
{
var qual = GetStringQuals(quals);
return $"{qual}{VisitPrimitiveType(primitive)}";
}
public virtual TypePrinterResult VisitPrimitiveType(PrimitiveType primitive)
{
switch (primitive)
{
@ -153,12 +159,6 @@ namespace CppSharp.Generators.C @@ -153,12 +159,6 @@ namespace CppSharp.Generators.C
throw new NotSupportedException();
}
public override TypePrinterResult VisitPrimitiveType(PrimitiveType primitive, TypeQualifiers quals)
{
var qual = GetStringQuals(quals);
return $"{qual}{VisitPrimitiveType(primitive)}";
}
public override TypePrinterResult VisitTypedefType(TypedefType typedef, TypeQualifiers quals)
{
FunctionType func;
@ -284,7 +284,7 @@ namespace CppSharp.Generators.C @@ -284,7 +284,7 @@ namespace CppSharp.Generators.C
public override TypePrinterResult VisitDeclaration(Declaration decl, TypeQualifiers quals)
{
throw new NotImplementedException();
return VisitDeclaration(decl);
}
public override TypePrinterResult VisitFunctionType(FunctionType function, TypeQualifiers quals)

4
src/Generator/Generators/CLI/CLIGenerator.cs

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
using System.Collections.Generic;
using CppSharp.AST;
using CppSharp.Generators.C;
namespace CppSharp.Generators.CLI
{
@ -9,7 +10,7 @@ namespace CppSharp.Generators.CLI @@ -9,7 +10,7 @@ namespace CppSharp.Generators.CLI
/// </summary>
public class CLIGenerator : Generator
{
private readonly CLITypePrinter typePrinter;
private readonly CppTypePrinter typePrinter;
public CLIGenerator(BindingContext context) : base(context)
{
@ -35,6 +36,7 @@ namespace CppSharp.Generators.CLI @@ -35,6 +36,7 @@ namespace CppSharp.Generators.CLI
{
if (@class.IsStatic)
return false;
return @class.IsRefType && (!@class.HasBase || !@class.HasRefBase());
}

10
src/Generator/Generators/CLI/CLIHeaders.cs

@ -628,10 +628,10 @@ namespace CppSharp.Generators.CLI @@ -628,10 +628,10 @@ namespace CppSharp.Generators.CLI
public void GenerateIndexer(Property property)
{
var type = property.QualifiedType.Visit(TypePrinter);
var type = property.QualifiedType.Visit(CTypePrinter);
var getter = property.GetMethod;
var indexParameter = getter.Parameters[0];
var indexParameterType = indexParameter.QualifiedType.Visit(TypePrinter);
var indexParameterType = indexParameter.QualifiedType.Visit(CTypePrinter);
WriteLine("property {0} default[{1}]", type, indexParameterType);
WriteOpenBraceAndIndent();
@ -651,7 +651,7 @@ namespace CppSharp.Generators.CLI @@ -651,7 +651,7 @@ namespace CppSharp.Generators.CLI
return;
PushBlock(BlockKind.Property, property);
var type = property.QualifiedType.Visit(TypePrinter);
var type = property.QualifiedType.Visit(CTypePrinter);
if (property.IsStatic)
Write("static ");
@ -763,7 +763,7 @@ namespace CppSharp.Generators.CLI @@ -763,7 +763,7 @@ namespace CppSharp.Generators.CLI
WriteLine("{0}{1};",
!insideClass ? "public " : "",
string.Format(TypePrinter.VisitDelegate(functionType).ToString(),
string.Format(CTypePrinter.VisitDelegate(functionType).ToString(),
typedef.Name));
PopBlock(NewLineKind.BeforeNextBlock);
@ -825,7 +825,7 @@ namespace CppSharp.Generators.CLI @@ -825,7 +825,7 @@ namespace CppSharp.Generators.CLI
Write("enum struct {0}", @enum.Name);
var typeName = TypePrinter.VisitPrimitiveType(@enum.BuiltinType.Type,
var typeName = CTypePrinter.VisitPrimitiveType(@enum.BuiltinType.Type,
new TypeQualifiers());
if (@enum.BuiltinType.Type != PrimitiveType.Int &&

4
src/Generator/Generators/CLI/CLISources.cs

@ -898,7 +898,7 @@ namespace CppSharp.Generators.CLI @@ -898,7 +898,7 @@ namespace CppSharp.Generators.CLI
for (var i = 0; i < function.Parameters.Count; ++i)
{
var param = function.Parameters[i];
Write("{0}", TypePrinter.VisitParameter(param));
Write("{0}", CTypePrinter.VisitParameter(param));
if (i < function.Parameters.Count - 1)
Write(", ");
}
@ -1040,7 +1040,7 @@ namespace CppSharp.Generators.CLI @@ -1040,7 +1040,7 @@ namespace CppSharp.Generators.CLI
if (needsReturn)
{
var retTypeName = retType.Visit(TypePrinter).ToString();
var retTypeName = retType.Visit(CTypePrinter).ToString();
var isIntPtr = retTypeName.Contains("IntPtr");
if (retType.Type.IsPointer() && (isIntPtr || retTypeName.EndsWith("^", StringComparison.Ordinal)))

10
src/Generator/Generators/CLI/CLITemplate.cs

@ -10,16 +10,14 @@ namespace CppSharp.Generators.CLI @@ -10,16 +10,14 @@ namespace CppSharp.Generators.CLI
/// for source (CLISources) and header (CLIHeaders)
/// files.
/// </summary>
public abstract class CLITemplate : CodeGenerator
public abstract class CLITemplate : CCodeGenerator
{
public CLITypePrinter TypePrinter { get; set; }
public ISet<CInclude> Includes;
protected CLITemplate(BindingContext context, IEnumerable<TranslationUnit> units)
: base(context, units)
{
TypePrinter = new CLITypePrinter(context);
typePrinter = new CLITypePrinter(context);
Includes = new HashSet<CInclude>();
}
@ -66,7 +64,7 @@ namespace CppSharp.Generators.CLI @@ -66,7 +64,7 @@ namespace CppSharp.Generators.CLI
continue;
var param = method.Parameters[i];
Write("{0}", TypePrinter.VisitParameter(param));
Write("{0}", CTypePrinter.VisitParameter(param));
if (i < method.Parameters.Count - 1)
Write(", ");
}
@ -76,7 +74,7 @@ namespace CppSharp.Generators.CLI @@ -76,7 +74,7 @@ namespace CppSharp.Generators.CLI
{
var types = new List<string>();
foreach (var param in parameters)
types.Add(TypePrinter.VisitParameter(param).ToString());
types.Add(CTypePrinter.VisitParameter(param).ToString());
return string.Join(", ", types);
}

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

@ -2,13 +2,14 @@ @@ -2,13 +2,14 @@
using System.Collections.Generic;
using CppSharp.AST;
using CppSharp.AST.Extensions;
using CppSharp.Generators.C;
using CppSharp.Generators.CSharp;
using CppSharp.Types;
using Type = CppSharp.AST.Type;
namespace CppSharp.Generators.CLI
{
public class CLITypePrinter : TypePrinter
public class CLITypePrinter : CppTypePrinter
{
public BindingContext Context { get; private set; }
@ -164,8 +165,17 @@ namespace CppSharp.Generators.CLI @@ -164,8 +165,17 @@ namespace CppSharp.Generators.CLI
return pointer.QualifiedPointee.Visit(this);
}
public override TypePrinterResult VisitPrimitiveType(PrimitiveType primitive,
TypeQualifiers quals)
public override TypePrinterResult VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals)
{
return VisitPrimitiveType(builtin.Type);
}
public override TypePrinterResult VisitPrimitiveType(PrimitiveType primitive, TypeQualifiers quals)
{
return VisitPrimitiveType(primitive);
}
public override TypePrinterResult VisitPrimitiveType(PrimitiveType primitive)
{
switch (primitive)
{
@ -335,6 +345,11 @@ namespace CppSharp.Generators.CLI @@ -335,6 +345,11 @@ namespace CppSharp.Generators.CLI
return $"{@class.Name}{(@class.IsRefType ? "^" : string.Empty)}";
}
public override TypePrinterResult VisitClassTemplateDecl(ClassTemplate template)
{
return template.Name;
}
public override TypePrinterResult VisitTypedefDecl(TypedefDecl typedef)
{
return typedef.Name;

Loading…
Cancel
Save