Browse Source

Added generation of include needed to break dependencies on forward references.

pull/1/head
triton 13 years ago
parent
commit
8f29c406ba
  1. 35
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs

35
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -1,5 +1,7 @@ @@ -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 @@ -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 @@ -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<string>();
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<string>();
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)

Loading…
Cancel
Save