Browse Source

Added an interface to represent type printing.

pull/1/head
triton 13 years ago
parent
commit
ce4de80e10
  1. 9
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  2. 6
      src/Generator/Generators/CLI/CLIHelpers.cs
  3. 2
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  4. 7
      src/Generator/Generators/CLI/CLITypePrinter.cs
  5. 11
      src/Generator/Types/ITypePrinter.cs

9
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -344,7 +344,7 @@ namespace Cxxi.Generators.CLI
if (typedef.Type.IsPointerTo<FunctionType>(out function)) if (typedef.Type.IsPointerTo<FunctionType>(out function))
{ {
WriteLine("public {0};", WriteLine("public {0};",
string.Format(TypeSig.ToDelegateString(function), string.Format(TypePrinter.ToDelegateString(function),
SafeIdentifier(typedef.Name))); SafeIdentifier(typedef.Name)));
return true; return true;
} }
@ -371,7 +371,7 @@ namespace Cxxi.Generators.CLI
for (int i = 0; i < function.Parameters.Count; ++i) for (int i = 0; i < function.Parameters.Count; ++i)
{ {
var param = function.Parameters[i]; var param = function.Parameters[i];
Write("{0}", TypeSig.GetArgumentString(param)); Write("{0}", TypePrinter.GetArgumentString(param));
if (i < function.Parameters.Count - 1) if (i < function.Parameters.Count - 1)
Write(", "); Write(", ");
} }
@ -397,8 +397,11 @@ namespace Cxxi.Generators.CLI
Write("public enum struct {0}", SafeIdentifier(@enum.Name)); Write("public enum struct {0}", SafeIdentifier(@enum.Name));
var typeName = TypePrinter.VisitPrimitiveType(@enum.BuiltinType.Type,
new TypeQualifiers());
if (@enum.BuiltinType.Type != PrimitiveType.Int32) if (@enum.BuiltinType.Type != PrimitiveType.Int32)
WriteLine(" : {0}", TypeSig.VisitPrimitiveType(@enum.BuiltinType.Type)); WriteLine(" : {0}", typeName);
else else
NewLine(); NewLine();

6
src/Generator/Generators/CLI/CLIHelpers.cs

@ -12,7 +12,7 @@ namespace Cxxi.Generators.CLI
public ITypeMapDatabase TypeMapDatabase { get; set; } public ITypeMapDatabase TypeMapDatabase { get; set; }
public Generator Generator { get; set; } public Generator Generator { get; set; }
private readonly CLITypePrinter typePrinter; private readonly ITypePrinter typePrinter;
public CLIGenerator(Generator generator) public CLIGenerator(Generator generator)
{ {
@ -30,7 +30,7 @@ namespace Cxxi.Generators.CLI
Library = Library, Library = Library,
Transform = Transform, Transform = Transform,
Module = unit, Module = unit,
TypeSig = typePrinter TypePrinter = typePrinter
}; };
return template; return template;
@ -51,8 +51,6 @@ namespace Cxxi.Generators.CLI
public bool Generate(TranslationUnit unit) public bool Generate(TranslationUnit unit)
{ {
typePrinter.Library = Library;
var header = CreateTemplate<CLIHeadersTemplate>(unit); var header = CreateTemplate<CLIHeadersTemplate>(unit);
WriteTemplate(header); WriteTemplate(header);

2
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -202,7 +202,7 @@ namespace Cxxi.Generators.CLI
for (var i = 0; i < function.Parameters.Count; ++i) for (var i = 0; i < function.Parameters.Count; ++i)
{ {
var param = function.Parameters[i]; var param = function.Parameters[i];
Write("{0}", TypeSig.GetArgumentString(param)); Write("{0}", TypePrinter.GetArgumentString(param));
if (i < function.Parameters.Count - 1) if (i < function.Parameters.Count - 1)
Write(", "); Write(", ");
} }

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

@ -3,7 +3,7 @@ using Cxxi.Types;
namespace Cxxi.Generators.CLI namespace Cxxi.Generators.CLI
{ {
public class CLITypePrinter : ITypeVisitor<string>, IDeclVisitor<string> public class CLITypePrinter : ITypePrinter, IDeclVisitor<string>
{ {
public Library Library { get; set; } public Library Library { get; set; }
private readonly ITypeMapDatabase TypeMapDatabase; private readonly ITypeMapDatabase TypeMapDatabase;
@ -183,6 +183,11 @@ namespace Cxxi.Generators.CLI
return decl.Name; return decl.Name;
} }
public string VisitPrimitiveType(PrimitiveType type, TypeQualifiers quals)
{
throw new NotImplementedException();
}
public string VisitDeclaration(Declaration decl, TypeQualifiers quals) public string VisitDeclaration(Declaration decl, TypeQualifiers quals)
{ {
return VisitDeclaration(decl); return VisitDeclaration(decl);

11
src/Generator/Types/ITypePrinter.cs

@ -0,0 +1,11 @@
namespace Cxxi.Types
{
public interface ITypePrinter : ITypeVisitor<string>
{
Library Library { get; set; }
string GetArgumentsString(FunctionType function, bool hasNames);
string GetArgumentString(Parameter arg, bool hasName = true);
string ToDelegateString(FunctionType function);
}
}
Loading…
Cancel
Save