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

7
src/Generator/Driver.cs

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

12
src/Generator/Passes/PassBuilder.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using CppSharp.Passes; using CppSharp.Passes;
@ -34,5 +35,14 @@ namespace CppSharp
{ {
return Passes.OfType<U>().Select(pass => pass as U).FirstOrDefault(); 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