Browse Source

Simplified the generators interface.

pull/12/merge
triton 13 years ago
parent
commit
6dc4f120cb
  1. 16
      src/Generator/Generators/CLI/CLIGenerator.cs
  2. 13
      src/Generator/Generators/CSharp/CSharpGenerator.cs
  3. 64
      src/Generator/Generators/Generator.cs

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

@ -1,6 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using CppSharp.Types.Std;
namespace CppSharp.Generators.CLI namespace CppSharp.Generators.CLI
{ {
@ -18,19 +16,17 @@ namespace CppSharp.Generators.CLI
Type.TypePrinterDelegate += type => type.Visit(typePrinter); Type.TypePrinterDelegate += type => type.Visit(typePrinter);
} }
/// <summary> public override List<TextTemplate> Generate(TranslationUnit unit)
/// Generates the code for a given translation unit.
/// </summary>
public override bool Generate(TranslationUnit unit,
List<GeneratorOutput> outputs)
{ {
var outputs = new List<TextTemplate>();
var header = new CLIHeadersTemplate(Driver, unit); var header = new CLIHeadersTemplate(Driver, unit);
outputs.Add(GenerateTemplateOutput(header)); outputs.Add(header);
var source = new CLISourcesTemplate(Driver, unit); var source = new CLISourcesTemplate(Driver, unit);
outputs.Add(GenerateTemplateOutput(source)); outputs.Add(source);
return true; return outputs;
} }
public override bool SetupPasses(PassBuilder builder) public override bool SetupPasses(PassBuilder builder)

13
src/Generator/Generators/CSharp/CSharpGenerator.cs

@ -1,5 +1,5 @@
using System.Collections.Generic; using System;
using System.IO; using System.Collections.Generic;
using CppSharp.Passes; using CppSharp.Passes;
namespace CppSharp.Generators.CSharp namespace CppSharp.Generators.CSharp
@ -14,13 +14,14 @@ namespace CppSharp.Generators.CSharp
Type.TypePrinterDelegate += type => type.Visit(typePrinter).Type; Type.TypePrinterDelegate += type => type.Visit(typePrinter).Type;
} }
public override bool Generate(TranslationUnit unit, public override List<TextTemplate> Generate(TranslationUnit unit)
List<GeneratorOutput> outputs)
{ {
var outputs = new List<TextTemplate>();
var template = new CSharpTextTemplate(Driver, unit, typePrinter); var template = new CSharpTextTemplate(Driver, unit, typePrinter);
outputs.Add(GenerateTemplateOutput(template)); outputs.Add(template);
return true; return outputs;
} }
public override bool SetupPasses(PassBuilder builder) public override bool SetupPasses(PassBuilder builder)

64
src/Generator/Generators/Generator.cs

@ -1,5 +1,5 @@
using System.Collections.Generic; using System;
using System.IO; using System.Collections.Generic;
namespace CppSharp.Generators namespace CppSharp.Generators
{ {
@ -23,14 +23,9 @@ namespace CppSharp.Generators
public TranslationUnit TranslationUnit; public TranslationUnit TranslationUnit;
/// <summary> /// <summary>
/// Text template with generated output. /// Text templates with generated output.
/// </summary> /// </summary>
public TextTemplate Template; public List<TextTemplate> Templates;
/// <summary>
/// Output path of the generated output.
/// </summary>
public string OutputPath;
} }
/// <summary> /// <summary>
@ -46,42 +41,53 @@ namespace CppSharp.Generators
} }
/// <summary> /// <summary>
/// Generates the code for a given translation unit. /// Called when a translation unit is generated.
/// </summary> /// </summary>
public abstract bool Generate(TranslationUnit unit, public Action<GeneratorOutput> OnUnitGenerated = delegate { };
List<GeneratorOutput> outputs);
/// <summary> /// <summary>
/// Setup any generator-specific passes here. /// Setup any generator-specific passes here.
/// </summary> /// </summary>
public abstract bool SetupPasses(PassBuilder builder); public abstract bool SetupPasses(PassBuilder builder);
protected string GetOutputPath(TranslationUnit unit)
/// <summary>
/// Generates the outputs.
/// </summary>
public virtual List<GeneratorOutput> Generate()
{ {
var file = unit.FileNameWithoutExtension; var outputs = new List<GeneratorOutput>();
if (Driver.Options.GenerateName != null) foreach (var unit in Driver.Library.TranslationUnits)
file = Driver.Options.GenerateName(unit); {
if (unit.Ignore || !unit.HasDeclarations)
continue;
var path = Path.Combine(Driver.Options.OutputDir, file); if (unit.IsSystemHeader)
return Path.GetFullPath(path); continue;
}
protected GeneratorOutput GenerateTemplateOutput(TextTemplate template) var templates = Generate(unit);
{ if (templates.Count == 0)
var path = GetOutputPath(template.TranslationUnit) continue;
+ "." + template.FileExtension;
template.Generate(); foreach (var template in templates)
template.GenerateBlocks();
var output = new GeneratorOutput() var output = new GeneratorOutput
{ {
OutputPath = path, TranslationUnit = unit,
Template = template, Templates = templates
TranslationUnit = template.TranslationUnit
}; };
return output; OnUnitGenerated(output);
}
return outputs;
} }
/// <summary>
/// Generates the outputs for a given translation unit.
/// </summary>
public abstract List<TextTemplate> Generate(TranslationUnit unit);
} }
} }
Loading…
Cancel
Save