Browse Source

Added a pass to clean translation units.

pull/1/head
triton 13 years ago
parent
commit
f7887333e7
  1. 1
      src/Generator/Driver.cs
  2. 45
      src/Generator/Passes/CleanUnitPass.cs

1
src/Generator/Driver.cs

@ -85,6 +85,7 @@ namespace Cxxi @@ -85,6 +85,7 @@ namespace Cxxi
Transform.Preprocess(Library);
var passes = new PassBuilder(Library);
passes.CleanUnit();
passes.SortDeclarations();
passes.ResolveIncompleteDecls(TypeDatabase);
passes.CheckFlagEnums();

45
src/Generator/Passes/CleanUnitPass.cs

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
namespace Cxxi.Passes
{
public class CleanUnitPass : TranslationUnitPass
{
public DriverOptions Options;
public PassBuilder Passes;
public override bool VisitTranslationUnit(TranslationUnit unit)
{
// Try to get an include path that works from the original include
// directories paths.
unit.IncludePath = GetIncludePath(unit.FilePath);
return true;
}
string GetIncludePath(string filePath)
{
var includePath = filePath;
var shortestIncludePath = filePath;
foreach (var path in Options.IncludeDirs)
{
int idx = filePath.IndexOf(path, System.StringComparison.Ordinal);
if (idx == -1) continue;
string inc = filePath.Substring(path.Length);
if (inc.Length < includePath.Length && inc.Length < shortestIncludePath.Length)
shortestIncludePath = inc;
}
return Options.IncludePrefix + shortestIncludePath.TrimStart(new char[] { '\\', '/' });
}
}
public static class CleanUnitPassExtensions
{
public static void CleanUnit(this PassBuilder builder)
{
var pass = new CleanUnitPass();
builder.AddPass(pass);
}
}
}
Loading…
Cancel
Save