Browse Source

Move CLIGenerator to its own file.

pull/1/head
triton 13 years ago
parent
commit
04fa54d077
  1. 43
      src/Generator/Generators/CLI/CLIGenerator.cs
  2. 63
      src/Generator/Generators/CLI/CLIHelpers.cs

43
src/Generator/Generators/CLI/CLIGenerator.cs

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
using System;
using System.IO;
using Cxxi.Passes;
using Cxxi.Types;
namespace Cxxi.Generators.CLI
{
public class CLIGenerator : Generator
{
private readonly ITypePrinter typePrinter;
public CLIGenerator(Driver driver) : base(driver)
{
typePrinter = new CLITypePrinter(driver.TypeDatabase, driver.Library);
Type.TypePrinter = typePrinter;
}
void WriteTemplate(TextTemplate template)
{
var file = Path.GetFileNameWithoutExtension(template.unit.FileName)
+ Driver.Options.WrapperSuffix + "."
+ template.FileExtension;
var path = Path.Combine(Driver.Options.OutputDir, file);
template.Generate();
Console.WriteLine(" Generated '" + file + "'.");
File.WriteAllText(Path.GetFullPath(path), template.ToString());
}
public override bool Generate(TranslationUnit unit)
{
var header = new CLIHeadersTemplate(Driver, unit);
WriteTemplate(header);
var source = new CLISourcesTemplate(Driver, unit);
WriteTemplate(source);
return true;
}
}
}

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

@ -1,63 +0,0 @@ @@ -1,63 +0,0 @@
using System;
using System.IO;
using Cxxi.Types;
namespace Cxxi.Generators.CLI
{
public class CLIGenerator : ILanguageGenerator
{
public DriverOptions Options { get; set; }
public Library Library { get; set; }
public ILibrary Transform { get; set; }
public ITypeMapDatabase TypeMapDatabase { get; set; }
public Generator Generator { get; set; }
private readonly ITypePrinter typePrinter;
public CLIGenerator(Generator generator)
{
Generator = generator;
typePrinter = new CLITypePrinter(TypeMapDatabase, Library);
Type.TypePrinter = typePrinter;
}
T CreateTemplate<T>(TranslationUnit unit) where T : CLITextTemplate, new()
{
var template = new T
{
Generator = Generator,
DriverOptions = Options,
Library = Library,
Transform = Transform,
Module = unit,
TypePrinter = typePrinter
};
return template;
}
public static String WrapperSuffix = "_wrapper";
void WriteTemplate(TextTemplate template)
{
var file = Path.GetFileNameWithoutExtension(template.Module.FileName) + WrapperSuffix + "."
+ template.FileExtension;
var path = Path.Combine(Options.OutputDir, file);
Console.WriteLine(" Generated '" + file + "'.");
File.WriteAllText(Path.GetFullPath(path), template.ToString());
}
public bool Generate(TranslationUnit unit)
{
var header = CreateTemplate<CLIHeadersTemplate>(unit);
WriteTemplate(header);
var source = CreateTemplate<CLISourcesTemplate>(unit);
WriteTemplate(source);
return true;
}
}
}
Loading…
Cancel
Save