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 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
namespace Cxxi.Generators.CLI namespace Cxxi.Generators.CLI
{ {
@ -15,6 +17,8 @@ namespace Cxxi.Generators.CLI
NewLine(); NewLine();
WriteLine("#include <{0}>", Module.IncludePath); WriteLine("#include <{0}>", Module.IncludePath);
GenerateIncludeForwardRefs();
NewLine(); NewLine();
WriteLine("namespace {0}", SafeIdentifier(Library.Name)); WriteLine("namespace {0}", SafeIdentifier(Library.Name));
@ -23,15 +27,40 @@ namespace Cxxi.Generators.CLI
WriteLine("}"); 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() public void GenerateForwardRefs()
{ {
// Use a set to remove duplicate entries. // Use a set to remove duplicate entries.
var forwardRefs = new HashSet<string>(); var forwardRefs = new HashSet<string>();
foreach (var forwardRef in Module.ForwardReferences) foreach (var forwardRef in forwardRefsPrinter.Refs)
{ {
var printer = new CLIForwardRefeferencePrinter(); forwardRefs.Add(forwardRef);
forwardRefs.Add(forwardRef.Visit(printer));
} }
foreach (var forwardRef in forwardRefs) foreach (var forwardRef in forwardRefs)

Loading…
Cancel
Save