From 47b178160389cf2ff748d38f8d2aedf19189be9d Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Wed, 9 Dec 2015 04:32:27 +0200 Subject: [PATCH] Removed the writing of code to disk when auto-compiling. Signed-off-by: Dimitar Dobrev --- src/Generator/Driver.cs | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index f6ce2a47..6e6e4144 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -14,6 +14,7 @@ using CppSharp.Passes; using CppSharp.Types; using Microsoft.CSharp; using CppSharp.Parser; +using System.CodeDom; namespace CppSharp { @@ -337,14 +338,24 @@ namespace CppSharp if (Options.GenerateName != null) fileBase = Options.GenerateName(output.TranslationUnit); - foreach (var template in output.Templates) + if (Options.IsCSharpGenerator && Options.CompileCode) { - var fileRelativePath = string.Format("{0}.{1}", fileBase, template.FileExtension); - Diagnostics.Message("Generated '{0}'", fileRelativePath); - - var file = Path.Combine(outputPath, fileRelativePath); - File.WriteAllText(file, template.Generate()); - Options.CodeFiles.Add(file); + compileUnits.AddRange( + output.Templates.Select(t => new CodeSnippetCompileUnit(t.Generate()))); + compileUnits.AddRange( + Options.CodeFiles.Select(c => new CodeSnippetCompileUnit(File.ReadAllText(c)))); + } + else + { + foreach (var template in output.Templates) + { + var fileRelativePath = string.Format("{0}.{1}", fileBase, template.FileExtension); + Diagnostics.Message("Generated '{0}'", fileRelativePath); + + var file = Path.Combine(outputPath, fileRelativePath); + File.WriteAllText(file, template.Generate()); + Options.CodeFiles.Add(file); + } } } } @@ -387,10 +398,13 @@ namespace CppSharp !compilerParameters.ReferencedAssemblies.Contains(libraryMappings[d])) .Select(l => libraryMappings[l])).ToArray()); - var codeProvider = new CSharpCodeProvider( - new Dictionary {{"CompilerVersion", "v4.0"}}); - var compilerResults = codeProvider.CompileAssemblyFromFile( - compilerParameters, Options.CodeFiles.ToArray()); + CompilerResults compilerResults; + using (var codeProvider = new CSharpCodeProvider( + new Dictionary { { "CompilerVersion", "v4.0" } })) + { + compilerResults = codeProvider.CompileAssemblyFromDom( + compilerParameters, compileUnits.ToArray()); + } var errors = compilerResults.Errors.Cast(); foreach (var error in errors.Where(error => !error.IsWarning)) @@ -413,6 +427,8 @@ namespace CppSharp { GeneratorOutputPasses.AddPass(pass); } + + private List compileUnits = new List(); } public static class ConsoleDriver