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
[TypeMap("FnPtr3")] [TypeMap("FnPtr3")]
public class CLITypePrinterTypeMap : TypeMap public class CLITypePrinterTypeMap : TypeMap
{ {
public override string CLISignature() { return "TypedefFn3"; } public override string CLISignature(CLITypePrinterContext ctx)
{
return "TypedefFn3";
}
} }
[TestFixture] [TestFixture]

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

@ -271,7 +271,7 @@ namespace Cxxi.Generators.CLI
var typeNames = template.Parameters.Select( var typeNames = template.Parameters.Select(
param => "typename " + param.Name).ToList(); param => "typename " + param.Name).ToList();
var typeCtx = new TypePrinterContext() var typeCtx = new CLITypePrinterContext()
{ {
Kind = TypePrinterContextKind.Template, Kind = TypePrinterContextKind.Template,
Declaration = template Declaration = template

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

@ -191,7 +191,7 @@ namespace Cxxi.Generators.CLI
var typeNames = template.Parameters.Select( var typeNames = template.Parameters.Select(
param => "typename " + param.Name).ToList(); param => "typename " + param.Name).ToList();
var typeCtx = new TypePrinterContext() var typeCtx = new CLITypePrinterContext()
{ {
Kind = TypePrinterContextKind.Template, Kind = TypePrinterContextKind.Template,
Declaration = template Declaration = template

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

@ -5,51 +5,23 @@ using Cxxi.Types;
namespace Cxxi.Generators.CLI namespace Cxxi.Generators.CLI
{ {
public enum TypePrinterContextKind public class CLITypePrinterContext : TypePrinterContext
{ {
Normal, public CLITypePrinterContext()
Template
}
public class TypePrinterContext
{
public TypePrinterContext()
{ {
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 class CLITypePrinter : ITypePrinter, IDeclVisitor<string>
{ {
public Library Library { get; set; } public Library Library { get; set; }
public TypePrinterContext Context { get; set; } public CLITypePrinterContext Context { get; set; }
readonly ITypeMapDatabase TypeMapDatabase; readonly ITypeMapDatabase TypeMapDatabase;
readonly DriverOptions Options; readonly DriverOptions Options;
@ -59,10 +31,10 @@ namespace Cxxi.Generators.CLI
Library = driver.Library; Library = driver.Library;
TypeMapDatabase = driver.TypeDatabase; TypeMapDatabase = driver.TypeDatabase;
Options = driver.Options; Options = driver.Options;
Context = new TypePrinterContext(); Context = new CLITypePrinterContext();
} }
public CLITypePrinter(Driver driver, TypePrinterContext context) public CLITypePrinter(Driver driver, CLITypePrinterContext context)
: this(driver) : this(driver)
{ {
Context = context; Context = context;

47
src/Generator/Types/ITypePrinter.cs

@ -1,7 +1,54 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Cxxi.Types 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> public interface ITypePrinter : ITypeVisitor<string>
{ {
string VisitParameters(IEnumerable<Parameter> @params, bool hasNames); string VisitParameters(IEnumerable<Parameter> @params, bool hasNames);

4
src/Generator/Types/TypeMap.cs

@ -1,6 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using Cxxi.Generators;
using Cxxi.Generators.CLI; using Cxxi.Generators.CLI;
namespace Cxxi.Types namespace Cxxi.Types
@ -57,7 +57,7 @@ namespace Cxxi.Types
#region C++/CLI backend #region C++/CLI backend
public virtual string CLISignature(TypePrinterContext ctx) public virtual string CLISignature(CLITypePrinterContext ctx)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }

Loading…
Cancel
Save