Browse Source

Split the generation and writing of bindings.

pull/12/merge
triton 12 years ago
parent
commit
c3ac9e7efc
  1. 64
      src/Generator/Driver.cs
  2. 8
      src/Generator/Passes/PassBuilder.cs

64
src/Generator/Driver.cs

@ -113,54 +113,39 @@ namespace CppSharp @@ -113,54 +113,39 @@ namespace CppSharp
public void ProcessCode()
{
TypeDatabase.SetupTypeMaps();
var passes = new PassBuilder(this);
passes.CleanUnit(Options);
passes.SortDeclarations();
passes.ResolveIncompleteDecls();
if (Transform != null)
Transform.SetupPasses(this, passes);
passes.CleanInvalidDeclNames();
passes.CheckIgnoredDecls();
passes.CheckTypeReferences();
passes.CheckFlagEnums();
passes.CheckAmbiguousOverloads();
Generator.SetupPasses(passes);
passes.RunPasses();
foreach (var pass in Passes.Passes)
pass.VisitLibrary(Library);
}
if (Transform != null)
Transform.Postprocess(Library);
public List<GeneratorOutput> GenerateCode()
{
var outputs = Generator.Generate();
return outputs;
}
public void GenerateCode()
public void WriteCode(List<GeneratorOutput> outputs)
{
if (Library.TranslationUnits.Count <= 0)
return;
var outputPath = Options.OutputDir ?? Directory.GetCurrentDirectory();
foreach (var unit in Library.TranslationUnits)
{
if (unit.Ignore || !unit.HasDeclarations)
continue;
if (!Directory.Exists(outputPath))
Directory.CreateDirectory(outputPath);
if (unit.IsSystemHeader)
continue;
foreach (var output in outputs)
{
var fileBase = output.TranslationUnit.FileNameWithoutExtension;
var outputs = new List<GeneratorOutput>();
if (!Generator.Generate(unit, outputs))
continue;
if (Options.GenerateName != null)
fileBase = Options.GenerateName(output.TranslationUnit);
foreach (var output in outputs)
foreach (var template in output.Templates)
{
Diagnostics.EmitMessage(DiagnosticId.FileGenerated,
"Generated '{0}'", Path.GetFileName(output.OutputPath));
var fileName = string.Format("{0}.{1}", fileBase, template.FileExtension);
Diagnostics.EmitMessage(DiagnosticId.FileGenerated, "Generated '{0}'", fileName);
var filePath = Path.Combine(outputPath, fileName);
var text = output.Template.ToString();
File.WriteAllText(output.OutputPath, text);
var text = template.GenerateText();
File.WriteAllText(Path.GetFullPath(filePath), text);
}
}
}
@ -296,7 +281,8 @@ namespace CppSharp @@ -296,7 +281,8 @@ namespace CppSharp
library.Postprocess(driver.Library);
Console.WriteLine("Generating code...");
driver.GenerateCode();
var outputs = driver.GenerateCode();
driver.WriteCode(outputs);
}
}
}

8
src/Generator/Passes/PassBuilder.cs

@ -26,14 +26,6 @@ namespace CppSharp @@ -26,14 +26,6 @@ namespace CppSharp
Passes.Add(pass);
}
public void RunPasses()
{
foreach (var pass in Passes)
{
pass.VisitLibrary(Driver.Library);
}
}
/// <summary>
/// Finds a previously-added pass of the given type.
/// </summary>

Loading…
Cancel
Save