From 6dc4f120cbc0f4272727e4daf67b171902142f87 Mon Sep 17 00:00:00 2001 From: triton Date: Sun, 14 Jul 2013 04:26:21 +0100 Subject: [PATCH] Simplified the generators interface. --- src/Generator/Generators/CLI/CLIGenerator.cs | 16 ++--- .../Generators/CSharp/CSharpGenerator.cs | 13 ++-- src/Generator/Generators/Generator.cs | 68 ++++++++++--------- 3 files changed, 50 insertions(+), 47 deletions(-) diff --git a/src/Generator/Generators/CLI/CLIGenerator.cs b/src/Generator/Generators/CLI/CLIGenerator.cs index e259efc4..d52e2909 100644 --- a/src/Generator/Generators/CLI/CLIGenerator.cs +++ b/src/Generator/Generators/CLI/CLIGenerator.cs @@ -1,6 +1,4 @@ using System.Collections.Generic; -using System.IO; -using CppSharp.Types.Std; namespace CppSharp.Generators.CLI { @@ -18,19 +16,17 @@ namespace CppSharp.Generators.CLI Type.TypePrinterDelegate += type => type.Visit(typePrinter); } - /// - /// Generates the code for a given translation unit. - /// - public override bool Generate(TranslationUnit unit, - List outputs) + public override List Generate(TranslationUnit unit) { + var outputs = new List(); + var header = new CLIHeadersTemplate(Driver, unit); - outputs.Add(GenerateTemplateOutput(header)); + outputs.Add(header); var source = new CLISourcesTemplate(Driver, unit); - outputs.Add(GenerateTemplateOutput(source)); + outputs.Add(source); - return true; + return outputs; } public override bool SetupPasses(PassBuilder builder) diff --git a/src/Generator/Generators/CSharp/CSharpGenerator.cs b/src/Generator/Generators/CSharp/CSharpGenerator.cs index a05f67d0..b178e149 100644 --- a/src/Generator/Generators/CSharp/CSharpGenerator.cs +++ b/src/Generator/Generators/CSharp/CSharpGenerator.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using System.IO; +using System; +using System.Collections.Generic; using CppSharp.Passes; namespace CppSharp.Generators.CSharp @@ -14,13 +14,14 @@ namespace CppSharp.Generators.CSharp Type.TypePrinterDelegate += type => type.Visit(typePrinter).Type; } - public override bool Generate(TranslationUnit unit, - List outputs) + public override List Generate(TranslationUnit unit) { + var outputs = new List(); + var template = new CSharpTextTemplate(Driver, unit, typePrinter); - outputs.Add(GenerateTemplateOutput(template)); + outputs.Add(template); - return true; + return outputs; } public override bool SetupPasses(PassBuilder builder) diff --git a/src/Generator/Generators/Generator.cs b/src/Generator/Generators/Generator.cs index 33342d54..e18ae651 100644 --- a/src/Generator/Generators/Generator.cs +++ b/src/Generator/Generators/Generator.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using System.IO; +using System; +using System.Collections.Generic; namespace CppSharp.Generators { @@ -23,14 +23,9 @@ namespace CppSharp.Generators public TranslationUnit TranslationUnit; /// - /// Text template with generated output. + /// Text templates with generated output. /// - public TextTemplate Template; - - /// - /// Output path of the generated output. - /// - public string OutputPath; + public List Templates; } /// @@ -46,42 +41,53 @@ namespace CppSharp.Generators } /// - /// Generates the code for a given translation unit. + /// Called when a translation unit is generated. /// - public abstract bool Generate(TranslationUnit unit, - List outputs); + public Action OnUnitGenerated = delegate { }; /// /// Setup any generator-specific passes here. /// public abstract bool SetupPasses(PassBuilder builder); - protected string GetOutputPath(TranslationUnit unit) + + /// + /// Generates the outputs. + /// + public virtual List Generate() { - var file = unit.FileNameWithoutExtension; + var outputs = new List(); + + foreach (var unit in Driver.Library.TranslationUnits) + { + if (unit.Ignore || !unit.HasDeclarations) + continue; - if (Driver.Options.GenerateName != null) - file = Driver.Options.GenerateName(unit); + if (unit.IsSystemHeader) + continue; - var path = Path.Combine(Driver.Options.OutputDir, file); - return Path.GetFullPath(path); - } + var templates = Generate(unit); + if (templates.Count == 0) + continue; - protected GeneratorOutput GenerateTemplateOutput(TextTemplate template) - { - var path = GetOutputPath(template.TranslationUnit) - + "." + template.FileExtension; + foreach (var template in templates) + template.GenerateBlocks(); - template.Generate(); + var output = new GeneratorOutput + { + TranslationUnit = unit, + Templates = templates + }; - var output = new GeneratorOutput() - { - OutputPath = path, - Template = template, - TranslationUnit = template.TranslationUnit - }; + OnUnitGenerated(output); + } - return output; + return outputs; } + + /// + /// Generates the outputs for a given translation unit. + /// + public abstract List Generate(TranslationUnit unit); } } \ No newline at end of file