diff --git a/src/Generator.Tests/TestCLITypePrinter.cs b/src/Generator.Tests/TestCLITypePrinter.cs index 11536ac0..4ee22231 100644 --- a/src/Generator.Tests/TestCLITypePrinter.cs +++ b/src/Generator.Tests/TestCLITypePrinter.cs @@ -8,7 +8,10 @@ namespace Generator.Tests [TypeMap("FnPtr3")] public class CLITypePrinterTypeMap : TypeMap { - public override string CLISignature() { return "TypedefFn3"; } + public override string CLISignature(CLITypePrinterContext ctx) + { + return "TypedefFn3"; + } } [TestFixture] diff --git a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs index 43847c58..850974fb 100644 --- a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs +++ b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs @@ -271,7 +271,7 @@ namespace Cxxi.Generators.CLI var typeNames = template.Parameters.Select( param => "typename " + param.Name).ToList(); - var typeCtx = new TypePrinterContext() + var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, Declaration = template diff --git a/src/Generator/Generators/CLI/CLISourcesTemplate.cs b/src/Generator/Generators/CLI/CLISourcesTemplate.cs index 604ba376..e7f6e636 100644 --- a/src/Generator/Generators/CLI/CLISourcesTemplate.cs +++ b/src/Generator/Generators/CLI/CLISourcesTemplate.cs @@ -191,7 +191,7 @@ namespace Cxxi.Generators.CLI var typeNames = template.Parameters.Select( param => "typename " + param.Name).ToList(); - var typeCtx = new TypePrinterContext() + var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, Declaration = template diff --git a/src/Generator/Generators/CLI/CLITypePrinter.cs b/src/Generator/Generators/CLI/CLITypePrinter.cs index 19f669a7..894f9032 100644 --- a/src/Generator/Generators/CLI/CLITypePrinter.cs +++ b/src/Generator/Generators/CLI/CLITypePrinter.cs @@ -5,51 +5,23 @@ using Cxxi.Types; namespace Cxxi.Generators.CLI { - public enum TypePrinterContextKind + public class CLITypePrinterContext : TypePrinterContext { - Normal, - Template - } - - public class TypePrinterContext - { - public TypePrinterContext() + public CLITypePrinterContext() { - Kind = TypePrinterContextKind.Normal; + } - public string GetTemplateParameterList() + public CLITypePrinterContext(TypePrinterContextKind kind) + : base(kind) { - var paramsList = new List(); - if (Kind == TypePrinterContextKind.Template) - { - var template = Declaration as Template; - paramsList = template.Parameters.Select(param => param.Name) - .ToList(); - } - else - { - var type = Type.Desugar() as TemplateSpecializationType; - foreach (var arg in type.Arguments) - { - if (arg.Kind != TemplateArgument.ArgumentKind.Type) - continue; - paramsList.Add(arg.Type.ToString()); - } - } - - return string.Join(", ", paramsList); } - - public TypePrinterContextKind Kind; - public Declaration Declaration; - public Type Type; } public class CLITypePrinter : ITypePrinter, IDeclVisitor { public Library Library { get; set; } - public TypePrinterContext Context { get; set; } + public CLITypePrinterContext Context { get; set; } readonly ITypeMapDatabase TypeMapDatabase; readonly DriverOptions Options; @@ -59,10 +31,10 @@ namespace Cxxi.Generators.CLI Library = driver.Library; TypeMapDatabase = driver.TypeDatabase; Options = driver.Options; - Context = new TypePrinterContext(); + Context = new CLITypePrinterContext(); } - public CLITypePrinter(Driver driver, TypePrinterContext context) + public CLITypePrinter(Driver driver, CLITypePrinterContext context) : this(driver) { Context = context; diff --git a/src/Generator/Types/ITypePrinter.cs b/src/Generator/Types/ITypePrinter.cs index 87221f92..b40fce80 100644 --- a/src/Generator/Types/ITypePrinter.cs +++ b/src/Generator/Types/ITypePrinter.cs @@ -1,7 +1,54 @@ using System.Collections.Generic; +using System.Linq; namespace Cxxi.Types { + public enum TypePrinterContextKind + { + Normal, + Template + } + + public abstract class TypePrinterContext + { + protected TypePrinterContext() + { + Kind = TypePrinterContextKind.Normal; + } + + protected TypePrinterContext(TypePrinterContextKind kind) + { + Kind = kind; + } + + public string GetTemplateParameterList() + { + var paramsList = new List(); + if (Kind == TypePrinterContextKind.Template) + { + var template = Declaration as Template; + paramsList = template.Parameters.Select(param => param.Name) + .ToList(); + } + else + { + var type = Type.Desugar() as TemplateSpecializationType; + foreach (var arg in type.Arguments) + { + if (arg.Kind != TemplateArgument.ArgumentKind.Type) + continue; + paramsList.Add(arg.Type.ToString()); + } + } + + return string.Join(", ", paramsList); + } + + public TypePrinterContextKind Kind; + public Declaration Declaration; + public Type Type; + } + public interface ITypePrinter : ITypeVisitor { string VisitParameters(IEnumerable @params, bool hasNames); diff --git a/src/Generator/Types/TypeMap.cs b/src/Generator/Types/TypeMap.cs index e10f01eb..41aca89c 100644 --- a/src/Generator/Types/TypeMap.cs +++ b/src/Generator/Types/TypeMap.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Reflection; +using Cxxi.Generators; using Cxxi.Generators.CLI; namespace Cxxi.Types @@ -57,7 +57,7 @@ namespace Cxxi.Types #region C++/CLI backend - public virtual string CLISignature(TypePrinterContext ctx) + public virtual string CLISignature(CLITypePrinterContext ctx) { throw new NotImplementedException(); }