Skip to content
This repository has been archived by the owner on Mar 11, 2021. It is now read-only.

Commit

Permalink
PassBuilder is now generic. Driver Passes is now called TranslationUn…
Browse files Browse the repository at this point in the history
…itPasses. Added to driver GeneratorOutputPasses. Removed most of the PassBuilder Extensions.
  • Loading branch information
esdrubal committed Aug 2, 2013
1 parent cc29233 commit 0cf8c03
Show file tree
Hide file tree
Showing 22 changed files with 94 additions and 166 deletions.
12 changes: 6 additions & 6 deletions examples/SDL/SDL.cs
Expand Up @@ -14,13 +14,13 @@ public void Setup(Driver driver)
options.OutputDir = "SDL";
}

public void SetupPasses(Driver driver, PassBuilder passes)
public void SetupPasses(Driver driver)
{
passes.RemovePrefix("SDL_");
passes.RemovePrefix("SCANCODE_");
passes.RemovePrefix("SDLK_");
passes.RemovePrefix("KMOD_");
passes.RemovePrefix("LOG_CATEGORY_");
driver.TranslationUnitPasses.RemovePrefix("SDL_");
driver.TranslationUnitPasses.RemovePrefix("SCANCODE_");
driver.TranslationUnitPasses.RemovePrefix("SDLK_");
driver.TranslationUnitPasses.RemovePrefix("KMOD_");
driver.TranslationUnitPasses.RemovePrefix("LOG_CATEGORY_");
}

public void Preprocess(Driver driver, Library lib)
Expand Down
27 changes: 16 additions & 11 deletions src/Generator.Tests/Passes/TestPasses.cs
Expand Up @@ -7,7 +7,7 @@ namespace Generator.Tests.Passes
[TestFixture]
public class TestPasses : HeaderTestFixture
{
private PassBuilder passBuilder;
private PassBuilder<TranslationUnitPass> passBuilder;

[TestFixtureSetUp]
public void Init()
Expand All @@ -18,7 +18,7 @@ public void Init()
public void Setup()
{
ParseLibrary("Passes.h");
passBuilder = new PassBuilder(Driver);
passBuilder = new PassBuilder<TranslationUnitPass>(Driver);
}

[Test]
Expand All @@ -30,8 +30,9 @@ public void TestCheckFlagEnumsPass()
var @enum2 = Library.Enum("FlagEnum2");
Assert.IsFalse(@enum2.IsFlags);

passBuilder.CheckFlagEnums();
passBuilder.RunPasses();
passBuilder.AddPass(new CheckFlagEnumsPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);

Assert.IsTrue(@enum.IsFlags);
Assert.IsFalse(@enum2.IsFlags);
Expand All @@ -44,8 +45,9 @@ public void TestFunctionToInstancePass()

Assert.IsNull(c.Method("Start"));

passBuilder.FunctionToInstanceMethod();
passBuilder.RunPasses();
passBuilder.AddPass( new FunctionToInstanceMethodPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);

Assert.IsNotNull(c.Method("Start"));
}
Expand All @@ -58,8 +60,9 @@ public void TestFunctionToStaticPass()
Assert.IsFalse(Library.Function("FooStart").ExplicityIgnored);
Assert.IsNull(c.Method("Start"));

passBuilder.FunctionToStaticMethod();
passBuilder.RunPasses();
passBuilder.AddPass(new FunctionToStaticMethodPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);

Assert.IsTrue(Library.Function("FooStart").ExplicityIgnored);
Assert.IsNotNull(c.Method("Start"));
Expand All @@ -74,7 +77,8 @@ public void TestCaseRenamePass()
var field = c.Field("lowerCaseField");

passBuilder.RenameDeclsUpperCase(RenameTargets.Any);
passBuilder.RunPasses();
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);

Assert.That(method.Name, Is.EqualTo("LowerCaseMethod"));
Assert.That(field.Name, Is.EqualTo("LowerCaseField"));
Expand All @@ -89,8 +93,9 @@ public void TestCleanEnumItemNames()
Assert.IsNotNull(@enum);

passBuilder.RemovePrefix("TEST_ENUM_ITEM_NAME_", RenameTargets.EnumItem);
passBuilder.CleanInvalidDeclNames();
passBuilder.RunPasses();
passBuilder.AddPass(new CleanInvalidDeclNamesPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);

Assert.That(@enum.Items[0].Name, Is.EqualTo("_0"));
}
Expand Down
61 changes: 41 additions & 20 deletions src/Generator/Driver.cs
Expand Up @@ -30,7 +30,8 @@ static Driver()
public IDiagnosticConsumer Diagnostics { get; private set; }
public Parser Parser { get; private set; }
public TypeMapDatabase TypeDatabase { get; private set; }
public PassBuilder Passes { get; private set; }
public PassBuilder<TranslationUnitPass> TranslationUnitPasses { get; private set; }
public PassBuilder<GeneratorOutputPass> GeneratorOutputPasses { get; private set; }
public Generator Generator { get; private set; }

public Library Library { get; private set; }
Expand All @@ -44,7 +45,8 @@ public Driver(DriverOptions options, IDiagnosticConsumer diagnostics)
Parser.OnHeaderParsed += OnFileParsed;
Parser.OnLibraryParsed += OnFileParsed;
TypeDatabase = new TypeMapDatabase();
Passes = new PassBuilder(this);
TranslationUnitPasses = new PassBuilder<TranslationUnitPass>(this);
GeneratorOutputPasses = new PassBuilder<GeneratorOutputPass>(this);
}

static void ValidateOptions(DriverOptions options)
Expand Down Expand Up @@ -120,27 +122,28 @@ public bool ParseLibraries()
return true;
}

public void AddPrePasses()
{
Passes.CleanUnit(Options);
Passes.SortDeclarations();
Passes.ResolveIncompleteDecls();
Passes.CheckIgnoredDecls();
}
public void SetupPasses(ILibrary library)
{
TranslationUnitPasses.AddPass(new CleanUnitPass(Options));
TranslationUnitPasses.AddPass(new SortDeclarationsPass());
TranslationUnitPasses.AddPass(new ResolveIncompleteDeclsPass());
TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass());

public void AddPostPasses()
{
Passes.CleanInvalidDeclNames();
Passes.CheckIgnoredDecls();
Passes.CheckFlagEnums();
Passes.CheckDuplicateNames();
Generator.SetupPasses(Passes);
library.SetupPasses(this);

TranslationUnitPasses.AddPass(new CleanInvalidDeclNamesPass());
TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass());
TranslationUnitPasses.AddPass(new CheckFlagEnumsPass());
TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass());
}

public void ProcessCode()
{
foreach (var pass in Passes.Passes)
foreach (var pass in TranslationUnitPasses.Passes)
{
pass.Driver = this;
pass.VisitLibrary(Library);
}

Generator.Process();
}
Expand Down Expand Up @@ -174,6 +177,16 @@ public void WriteCode(List<GeneratorOutput> outputs)
}
}
}

public void AddTranslationUnitPass(TranslationUnitPass pass)
{
TranslationUnitPasses.AddPass(pass);
}

public void AddGeneratorOutputPass(GeneratorOutputPass pass)
{
GeneratorOutputPasses.AddPass(pass);
}
}

public class DriverOptions
Expand Down Expand Up @@ -273,15 +286,23 @@ public static void Run(ILibrary library)
Console.WriteLine("Processing code...");
library.Preprocess(driver, driver.Library);

driver.AddPrePasses();
library.SetupPasses(driver, driver.Passes);
driver.AddPostPasses();
driver.SetupPasses(library);

driver.ProcessCode();
library.Postprocess(driver.Library);

Console.WriteLine("Generating code...");
var outputs = driver.GenerateCode();

foreach (var output in outputs)
{
foreach (var pass in driver.GeneratorOutputPasses.Passes)
{
pass.Driver = driver;
pass.VisitGeneratorOutput(output);
}
}

driver.WriteCode(outputs);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/Generator/Generators/CLI/CLIGenerator.cs
Expand Up @@ -30,7 +30,7 @@ public override List<Template> Generate(TranslationUnit unit)
return outputs;
}

public override bool SetupPasses(PassBuilder builder)
public override bool SetupPasses()
{
return true;
}
Expand Down
6 changes: 3 additions & 3 deletions src/Generator/Generators/CSharp/CSharpGenerator.cs
Expand Up @@ -26,10 +26,10 @@ public override List<Template> Generate(TranslationUnit unit)
return outputs;
}

public override bool SetupPasses(PassBuilder builder)
public override bool SetupPasses()
{
builder.CheckAbiParameters(Driver.Options);
builder.CheckOperatorOverloads();
Driver.AddTranslationUnitPass(new CheckAbiParameters(Driver.Options));
Driver.AddTranslationUnitPass(new CheckOperatorsOverloadsPass());

return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/Generator/Generators/Generator.cs
Expand Up @@ -49,7 +49,7 @@ protected Generator(Driver driver)
/// <summary>
/// Setup any generator-specific passes here.
/// </summary>
public abstract bool SetupPasses(PassBuilder builder);
public abstract bool SetupPasses();

/// <summary>
/// Setup any generator-specific processing here.
Expand Down
3 changes: 1 addition & 2 deletions src/Generator/Library.cs
Expand Up @@ -31,8 +31,7 @@ public interface ILibrary
/// Setup your passes here.
/// </summary>
/// <param name="driver"></param>
/// <param name="passes"></param>
void SetupPasses(Driver driver, PassBuilder passes);
void SetupPasses(Driver driver);
}

public static class LibraryHelpers
Expand Down
10 changes: 0 additions & 10 deletions src/Generator/Passes/CheckAbiParameters.cs
Expand Up @@ -49,14 +49,4 @@ public static bool NeedsHiddenStructParameterReturn(Method method, DriverOptions
return needsMSHiddenPtr || options.IsItaniumAbi;
}
}

public static class CheckAbiParametersExtensions
{
public static void CheckAbiParameters(this PassBuilder builder,
DriverOptions options)
{
var pass = new CheckAbiParameters(options);
builder.AddPass(pass);
}
}
}
9 changes: 0 additions & 9 deletions src/Generator/Passes/CheckDuplicatedNamesPass.cs
Expand Up @@ -137,13 +137,4 @@ void CheckDuplicate(Declaration decl)
Driver.Diagnostics.EmitWarning("Duplicate name {0}, renamed to {1}", fullName, decl.Name);
}
}

public static class CheckDuplicateNamesExtensions
{
public static void CheckDuplicateNames(this PassBuilder builder)
{
var pass = new CheckDuplicatedNamesPass();
builder.AddPass(pass);
}
}
}
9 changes: 0 additions & 9 deletions src/Generator/Passes/CheckFlagEnumsPass.cs
Expand Up @@ -43,13 +43,4 @@ public override bool VisitEnumDecl(Enumeration @enum)
return base.VisitEnumDecl(@enum);
}
}

public static class CheckFlagEnumsExtensions
{
public static void CheckFlagEnums(this PassBuilder builder)
{
var pass = new CheckFlagEnumsPass();
builder.AddPass(pass);
}
}
}
9 changes: 0 additions & 9 deletions src/Generator/Passes/CheckIgnoredDecls.cs
Expand Up @@ -285,13 +285,4 @@ bool IsDeclIgnored(Declaration decl)

#endregion
}

public static class CheckIgnoredDeclsPassExtensions
{
public static void CheckIgnoredDecls(this PassBuilder builder)
{
var pass = new CheckIgnoredDeclsPass();
builder.AddPass(pass);
}
}
}
9 changes: 0 additions & 9 deletions src/Generator/Passes/CheckOperatorsOverloads.cs
Expand Up @@ -198,13 +198,4 @@ static bool IsValidOperatorOverload(CXXOperatorKind kind)
}
}
}

public static class CheckOperatorsOverloadsExtensions
{
public static void CheckOperatorOverloads(this PassBuilder builder)
{
var pass = new CheckOperatorsOverloadsPass();
builder.AddPass(pass);
}
}
}
9 changes: 0 additions & 9 deletions src/Generator/Passes/CleanInvalidDeclNamesPass.cs
Expand Up @@ -93,14 +93,5 @@ public override bool VisitEnumItem(Enumeration.Item item)
return base.VisitEnumItem(item);
}
}

public static class CleanInvalidDeclNamesExtensions
{
public static void CleanInvalidDeclNames(this PassBuilder builder)
{
var pass = new CleanInvalidDeclNamesPass();
builder.AddPass(pass);
}
}
}

10 changes: 0 additions & 10 deletions src/Generator/Passes/CleanUnitPass.cs
Expand Up @@ -5,7 +5,6 @@ namespace CppSharp.Passes
public class CleanUnitPass : TranslationUnitPass
{
public DriverOptions DriverOptions;
public PassBuilder Passes;

public CleanUnitPass(DriverOptions options)
{
Expand Down Expand Up @@ -43,13 +42,4 @@ string GetIncludePath(string filePath)
return includePath.Replace('\\', '/');
}
}

public static class CleanUnitPassExtensions
{
public static void CleanUnit(this PassBuilder builder, DriverOptions options)
{
var pass = new CleanUnitPass(options);
builder.AddPass(pass);
}
}
}
9 changes: 0 additions & 9 deletions src/Generator/Passes/FunctionToInstanceMethodPass.cs
Expand Up @@ -85,13 +85,4 @@ private static bool GetClassParameter(Parameter classParam, out Class @class)
return false;
}
}

public static class FunctionToInstanceMethodExtensions
{
public static void FunctionToInstanceMethod(this PassBuilder builder)
{
var pass = new FunctionToInstanceMethodPass();
builder.AddPass(pass);
}
}
}
9 changes: 0 additions & 9 deletions src/Generator/Passes/FunctionToStaticMethodPass.cs
Expand Up @@ -57,13 +57,4 @@ public override bool VisitFunctionDecl(Function function)
return true;
}
}

public static class FunctionToStaticMethodExtensions
{
public static void FunctionToStaticMethod(this PassBuilder builder)
{
var pass = new FunctionToStaticMethodPass();
builder.AddPass(pass);
}
}
}

0 comments on commit 0cf8c03

Please sign in to comment.