Browse Source

Added RunPasses to PassBuilder and change existing code to use it.

pull/45/merge
triton 13 years ago
parent
commit
6b0cb59f8a
  1. 15
      src/Generator.Tests/Passes/TestPasses.cs
  2. 7
      src/Generator/Driver.cs
  3. 12
      src/Generator/Passes/PassBuilder.cs

15
src/Generator.Tests/Passes/TestPasses.cs

@ -31,8 +31,7 @@ namespace Generator.Tests.Passes @@ -31,8 +31,7 @@ namespace Generator.Tests.Passes
Assert.IsFalse(@enum2.IsFlags);
passBuilder.AddPass(new CheckFlagEnumsPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);
passBuilder.RunPasses(pass => pass.VisitLibrary(Library));
Assert.IsTrue(@enum.IsFlags);
Assert.IsFalse(@enum2.IsFlags);
@ -46,8 +45,7 @@ namespace Generator.Tests.Passes @@ -46,8 +45,7 @@ namespace Generator.Tests.Passes
Assert.IsNull(c.Method("Start"));
passBuilder.AddPass( new FunctionToInstanceMethodPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);
passBuilder.RunPasses(pass => pass.VisitLibrary(Library));
Assert.IsNotNull(c.Method("Start"));
}
@ -61,8 +59,7 @@ namespace Generator.Tests.Passes @@ -61,8 +59,7 @@ namespace Generator.Tests.Passes
Assert.IsNull(c.Method("Start"));
passBuilder.AddPass(new FunctionToStaticMethodPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);
passBuilder.RunPasses(pass => pass.VisitLibrary(Library));
Assert.IsTrue(Library.Function("FooStart").ExplicityIgnored);
Assert.IsNotNull(c.Method("Start"));
@ -77,8 +74,7 @@ namespace Generator.Tests.Passes @@ -77,8 +74,7 @@ namespace Generator.Tests.Passes
var field = c.Field("lowerCaseField");
passBuilder.RenameDeclsUpperCase(RenameTargets.Any);
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);
passBuilder.RunPasses(pass => pass.VisitLibrary(Library));
Assert.That(method.Name, Is.EqualTo("LowerCaseMethod"));
Assert.That(field.Name, Is.EqualTo("LowerCaseField"));
@ -94,8 +90,7 @@ namespace Generator.Tests.Passes @@ -94,8 +90,7 @@ namespace Generator.Tests.Passes
passBuilder.RemovePrefix("TEST_ENUM_ITEM_NAME_", RenameTargets.EnumItem);
passBuilder.AddPass(new CleanInvalidDeclNamesPass());
foreach (var pass in passBuilder.Passes)
pass.VisitLibrary(Library);
passBuilder.RunPasses(pass => pass.VisitLibrary(Library));
Assert.That(@enum.Items[0].Name, Is.EqualTo("_0"));
}

7
src/Generator/Driver.cs

@ -147,12 +147,7 @@ namespace CppSharp @@ -147,12 +147,7 @@ namespace CppSharp
public void ProcessCode()
{
foreach (var pass in TranslationUnitPasses.Passes)
{
pass.Driver = this;
pass.VisitLibrary(Library);
}
TranslationUnitPasses.RunPasses(pass => pass.VisitLibrary(Library));
Generator.Process();
}

12
src/Generator/Passes/PassBuilder.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using CppSharp.Passes;
@ -34,5 +35,14 @@ namespace CppSharp @@ -34,5 +35,14 @@ namespace CppSharp
{
return Passes.OfType<U>().Select(pass => pass as U).FirstOrDefault();
}
/// <summary>
/// Adds a new pass to the builder.
/// </summary>
public void RunPasses(Action<T> action)
{
foreach (var pass in Passes)
action(pass);
}
}
}

Loading…
Cancel
Save