From 8f29c406ba0d651cdf3db7164148405f5cb157d7 Mon Sep 17 00:00:00 2001 From: triton Date: Fri, 18 Jan 2013 16:43:14 +0000 Subject: [PATCH] Added generation of include needed to break dependencies on forward references. --- .../Generators/CLI/CLIHeadersTemplate.cs | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs index 2887bf5a..e7c2f501 100644 --- a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs +++ b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.IO; namespace Cxxi.Generators.CLI { @@ -15,6 +17,8 @@ namespace Cxxi.Generators.CLI NewLine(); WriteLine("#include <{0}>", Module.IncludePath); + GenerateIncludeForwardRefs(); + NewLine(); WriteLine("namespace {0}", SafeIdentifier(Library.Name)); @@ -23,15 +27,40 @@ namespace Cxxi.Generators.CLI WriteLine("}"); } + private CLIForwardRefeferencePrinter forwardRefsPrinter; + + public void GenerateIncludeForwardRefs() + { + forwardRefsPrinter = new CLIForwardRefeferencePrinter(); + + foreach (var forwardRef in Module.ForwardReferences) + forwardRef.Visit(forwardRefsPrinter); + + var includes = new HashSet(); + + foreach (var include in forwardRefsPrinter.Includes) + { + if (string.IsNullOrWhiteSpace(include)) + continue; + + if (include == Path.GetFileNameWithoutExtension(Module.FileName)) + continue; + + includes.Add(string.Format("#include \"{0}.h\"", include)); + } + + foreach (var include in includes) + WriteLine(include); + } + public void GenerateForwardRefs() { // Use a set to remove duplicate entries. var forwardRefs = new HashSet(); - foreach (var forwardRef in Module.ForwardReferences) + foreach (var forwardRef in forwardRefsPrinter.Refs) { - var printer = new CLIForwardRefeferencePrinter(); - forwardRefs.Add(forwardRef.Visit(printer)); + forwardRefs.Add(forwardRef); } foreach (var forwardRef in forwardRefs)