From ce4de80e105524e4ecab8138926f16cc6cbe555d Mon Sep 17 00:00:00 2001 From: triton Date: Mon, 4 Feb 2013 23:36:09 +0000 Subject: [PATCH] Added an interface to represent type printing. --- src/Generator/Generators/CLI/CLIHeadersTemplate.cs | 9 ++++++--- src/Generator/Generators/CLI/CLIHelpers.cs | 6 ++---- src/Generator/Generators/CLI/CLISourcesTemplate.cs | 2 +- src/Generator/Generators/CLI/CLITypePrinter.cs | 7 ++++++- src/Generator/Types/ITypePrinter.cs | 11 +++++++++++ 5 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 src/Generator/Types/ITypePrinter.cs diff --git a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs index fa1b4d45..5449af24 100644 --- a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs +++ b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs @@ -344,7 +344,7 @@ namespace Cxxi.Generators.CLI if (typedef.Type.IsPointerTo(out function)) { WriteLine("public {0};", - string.Format(TypeSig.ToDelegateString(function), + string.Format(TypePrinter.ToDelegateString(function), SafeIdentifier(typedef.Name))); return true; } @@ -371,7 +371,7 @@ namespace Cxxi.Generators.CLI for (int i = 0; i < function.Parameters.Count; ++i) { var param = function.Parameters[i]; - Write("{0}", TypeSig.GetArgumentString(param)); + Write("{0}", TypePrinter.GetArgumentString(param)); if (i < function.Parameters.Count - 1) Write(", "); } @@ -397,8 +397,11 @@ namespace Cxxi.Generators.CLI Write("public enum struct {0}", SafeIdentifier(@enum.Name)); + var typeName = TypePrinter.VisitPrimitiveType(@enum.BuiltinType.Type, + new TypeQualifiers()); + if (@enum.BuiltinType.Type != PrimitiveType.Int32) - WriteLine(" : {0}", TypeSig.VisitPrimitiveType(@enum.BuiltinType.Type)); + WriteLine(" : {0}", typeName); else NewLine(); diff --git a/src/Generator/Generators/CLI/CLIHelpers.cs b/src/Generator/Generators/CLI/CLIHelpers.cs index bdbf694a..eec7ecd9 100644 --- a/src/Generator/Generators/CLI/CLIHelpers.cs +++ b/src/Generator/Generators/CLI/CLIHelpers.cs @@ -12,7 +12,7 @@ namespace Cxxi.Generators.CLI public ITypeMapDatabase TypeMapDatabase { get; set; } public Generator Generator { get; set; } - private readonly CLITypePrinter typePrinter; + private readonly ITypePrinter typePrinter; public CLIGenerator(Generator generator) { @@ -30,7 +30,7 @@ namespace Cxxi.Generators.CLI Library = Library, Transform = Transform, Module = unit, - TypeSig = typePrinter + TypePrinter = typePrinter }; return template; @@ -51,8 +51,6 @@ namespace Cxxi.Generators.CLI public bool Generate(TranslationUnit unit) { - typePrinter.Library = Library; - var header = CreateTemplate(unit); WriteTemplate(header); diff --git a/src/Generator/Generators/CLI/CLISourcesTemplate.cs b/src/Generator/Generators/CLI/CLISourcesTemplate.cs index 5b4c3fef..08c70fbd 100644 --- a/src/Generator/Generators/CLI/CLISourcesTemplate.cs +++ b/src/Generator/Generators/CLI/CLISourcesTemplate.cs @@ -202,7 +202,7 @@ namespace Cxxi.Generators.CLI for (var i = 0; i < function.Parameters.Count; ++i) { var param = function.Parameters[i]; - Write("{0}", TypeSig.GetArgumentString(param)); + Write("{0}", TypePrinter.GetArgumentString(param)); if (i < function.Parameters.Count - 1) Write(", "); } diff --git a/src/Generator/Generators/CLI/CLITypePrinter.cs b/src/Generator/Generators/CLI/CLITypePrinter.cs index df17c0e9..4ac715b7 100644 --- a/src/Generator/Generators/CLI/CLITypePrinter.cs +++ b/src/Generator/Generators/CLI/CLITypePrinter.cs @@ -3,7 +3,7 @@ using Cxxi.Types; namespace Cxxi.Generators.CLI { - public class CLITypePrinter : ITypeVisitor, IDeclVisitor + public class CLITypePrinter : ITypePrinter, IDeclVisitor { public Library Library { get; set; } private readonly ITypeMapDatabase TypeMapDatabase; @@ -183,6 +183,11 @@ namespace Cxxi.Generators.CLI return decl.Name; } + public string VisitPrimitiveType(PrimitiveType type, TypeQualifiers quals) + { + throw new NotImplementedException(); + } + public string VisitDeclaration(Declaration decl, TypeQualifiers quals) { return VisitDeclaration(decl); diff --git a/src/Generator/Types/ITypePrinter.cs b/src/Generator/Types/ITypePrinter.cs new file mode 100644 index 00000000..8fae8a9e --- /dev/null +++ b/src/Generator/Types/ITypePrinter.cs @@ -0,0 +1,11 @@ +namespace Cxxi.Types +{ + public interface ITypePrinter : ITypeVisitor + { + Library Library { get; set; } + + string GetArgumentsString(FunctionType function, bool hasNames); + string GetArgumentString(Parameter arg, bool hasName = true); + string ToDelegateString(FunctionType function); + } +}