diff --git a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs index 43579ba5..fc38a2af 100644 --- a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs +++ b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs @@ -56,6 +56,9 @@ namespace Cxxi.Generators.CLI includes.Add(string.Format("#include \"{0}.h\"", include)); } + foreach (var include in Includes) + includes.Add(include.ToString()); + foreach (var include in includes) WriteLine(include); } diff --git a/src/Generator/Generators/CLI/CLISourcesTemplate.cs b/src/Generator/Generators/CLI/CLISourcesTemplate.cs index 3b8a1d02..f7f2e44e 100644 --- a/src/Generator/Generators/CLI/CLISourcesTemplate.cs +++ b/src/Generator/Generators/CLI/CLISourcesTemplate.cs @@ -62,13 +62,14 @@ namespace Cxxi.Generators.CLI if (includeName == Path.GetFileNameWithoutExtension(((TextTemplate) this).unit.FileName)) continue; - includes.Add(includeName); + includes.Add(string.Format("#include \"{0}.h\"", includeName)); } + foreach (var include in Includes) + includes.Add(include.ToString()); + foreach (var include in includes) - { - WriteLine("#include \"{0}.h\"", include); - } + WriteLine(include); } public void GenerateDeclarations() diff --git a/src/Generator/Generators/CLI/CLITextTemplate.cs b/src/Generator/Generators/CLI/CLITextTemplate.cs index df68f546..3b1df24d 100644 --- a/src/Generator/Generators/CLI/CLITextTemplate.cs +++ b/src/Generator/Generators/CLI/CLITextTemplate.cs @@ -4,17 +4,38 @@ using Cxxi.Types; namespace Cxxi.Generators.CLI { - public abstract class CLITextTemplate : TextTemplate + public struct Include + { + public enum IncludeKind + { + Angled, + Quoted + } + + public string File; + public IncludeKind Kind; + + public override string ToString() + { + return string.Format(Kind == IncludeKind.Angled ? + "#include <{0}>" : "#include \"{0}\"", File); + } + } + +public abstract class CLITextTemplate : TextTemplate { protected const string DefaultIndent = " "; protected const uint MaxIndent = 80; public ITypePrinter TypePrinter { get; set; } + public ISet Includes; + protected CLITextTemplate(Driver driver, TranslationUnit unit) : base(driver, unit) { TypePrinter = new CLITypePrinter(driver.TypeDatabase, driver.Library); + Includes = new HashSet(); } public static string SafeIdentifier(string proposedName)