Browse Source

TypePrinterContext is now an abstract class and created a new CLITypePrinterContext class for the CLI backend.

pull/1/head
triton 13 years ago
parent
commit
91d32df4e7
  1. 5
      src/Generator.Tests/TestCLITypePrinter.cs
  2. 2
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  3. 2
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  4. 44
      src/Generator/Generators/CLI/CLITypePrinter.cs
  5. 47
      src/Generator/Types/ITypePrinter.cs
  6. 4
      src/Generator/Types/TypeMap.cs

5
src/Generator.Tests/TestCLITypePrinter.cs

@ -8,7 +8,10 @@ namespace Generator.Tests @@ -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]

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

@ -271,7 +271,7 @@ namespace Cxxi.Generators.CLI @@ -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

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

@ -191,7 +191,7 @@ namespace Cxxi.Generators.CLI @@ -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

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

@ -5,51 +5,23 @@ using Cxxi.Types; @@ -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<string>();
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<string>
{
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 @@ -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;

47
src/Generator/Types/ITypePrinter.cs

@ -1,7 +1,54 @@ @@ -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<string>();
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>
{
string VisitParameters(IEnumerable<Parameter> @params, bool hasNames);

4
src/Generator/Types/TypeMap.cs

@ -1,6 +1,6 @@ @@ -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 @@ -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();
}

Loading…
Cancel
Save