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