diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 391de153..202a04dd 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -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 GenerateCode() + { + var outputs = Generator.Generate(); + return outputs; } - public void GenerateCode() + public void WriteCode(List 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(); - 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 library.Postprocess(driver.Library); Console.WriteLine("Generating code..."); - driver.GenerateCode(); + var outputs = driver.GenerateCode(); + driver.WriteCode(outputs); } } } \ No newline at end of file diff --git a/src/Generator/Passes/PassBuilder.cs b/src/Generator/Passes/PassBuilder.cs index e9c9e765..4dd09579 100644 --- a/src/Generator/Passes/PassBuilder.cs +++ b/src/Generator/Passes/PassBuilder.cs @@ -26,14 +26,6 @@ namespace CppSharp Passes.Add(pass); } - public void RunPasses() - { - foreach (var pass in Passes) - { - pass.VisitLibrary(Driver.Library); - } - } - /// /// Finds a previously-added pass of the given type. ///