Browse Source

Added a way to exclude certain passes from being run over declarations.

pull/1/head
triton 12 years ago
parent
commit
abcdd4361d
  1. 6
      src/Bridge/Declaration.cs
  2. 10
      src/Bridge/Library.cs
  3. 21
      src/Generator/Transforms/Transform.cs

6
src/Bridge/Declaration.cs

@ -132,15 +132,19 @@ namespace Cxxi
// Tracks the original declaration definition order. // Tracks the original declaration definition order.
public uint DefinitionOrder; public uint DefinitionOrder;
// Passes that should not be run on this declaration.
public ISet<System.Type> ExcludeFromPasses;
protected Declaration() protected Declaration()
{ {
IgnoreFlags = IgnoreFlags.None; IgnoreFlags = IgnoreFlags.None;
ExcludeFromPasses = new HashSet<System.Type>();
} }
protected Declaration(string name) protected Declaration(string name)
: this()
{ {
Name = name; Name = name;
IgnoreFlags = IgnoreFlags.None;
} }
public override string ToString() public override string ToString()

10
src/Bridge/Library.cs

@ -161,8 +161,6 @@ namespace Cxxi
else if (module.FindFunction(name) as T != null) else if (module.FindFunction(name) as T != null)
yield return module.FindFunction(name) as T; yield return module.FindFunction(name) as T;
} }
yield return null;
} }
public void SetEnumAsFlags(string name) public void SetEnumAsFlags(string name)
@ -171,5 +169,13 @@ namespace Cxxi
foreach(var @enum in enums) foreach(var @enum in enums)
@enum.SetFlags(); @enum.SetFlags();
} }
public void ExcludeFromPass(string name, System.Type type)
{
var decls = FindDecl<Declaration>(name);
foreach (var decl in decls)
decl.ExcludeFromPasses.Add(type);
}
} }
} }

21
src/Generator/Transforms/Transform.cs

@ -64,7 +64,10 @@ namespace Cxxi.Passes
void TransformDeclaration(Declaration decl) void TransformDeclaration(Declaration decl)
{ {
foreach (var pass in Passes.Passes) foreach (var pass in Passes.Passes)
{
if (IsPassExcluded(decl, pass)) continue;
pass.ProcessDeclaration(decl); pass.ProcessDeclaration(decl);
}
} }
void TransformTypedef(TypedefDecl typedef) void TransformTypedef(TypedefDecl typedef)
@ -78,20 +81,29 @@ namespace Cxxi.Passes
void TransformClass(Class @class) void TransformClass(Class @class)
{ {
foreach (var pass in Passes.Passes) foreach (var pass in Passes.Passes)
{
if (IsPassExcluded(@class, pass)) continue;
pass.ProcessClass(@class); pass.ProcessClass(@class);
}
TransformDeclaration(@class); TransformDeclaration(@class);
foreach (var method in @class.Methods) foreach (var method in @class.Methods)
{ {
foreach (var pass in Passes.Passes) foreach (var pass in Passes.Passes)
{
if (IsPassExcluded(method, pass)) continue;
pass.ProcessMethod(method); pass.ProcessMethod(method);
}
} }
foreach (var field in @class.Fields) foreach (var field in @class.Fields)
{ {
foreach (var pass in Passes.Passes) foreach (var pass in Passes.Passes)
{
if (IsPassExcluded(field, pass)) continue;
pass.ProcessField(field); pass.ProcessField(field);
}
TransformDeclaration(field); TransformDeclaration(field);
} }
@ -100,7 +112,10 @@ namespace Cxxi.Passes
void TransformFunction(Function function) void TransformFunction(Function function)
{ {
foreach (var pass in Passes.Passes) foreach (var pass in Passes.Passes)
{
if (IsPassExcluded(function, pass)) continue;
pass.ProcessFunction(function); pass.ProcessFunction(function);
}
TransformDeclaration(function); TransformDeclaration(function);
@ -118,5 +133,11 @@ namespace Cxxi.Passes
pass.ProcessEnumItem(item); pass.ProcessEnumItem(item);
} }
} }
static bool IsPassExcluded(Declaration decl, TranslationUnitPass pass)
{
var type = pass.GetType();
return decl.ExcludeFromPasses.Contains(type);
}
} }
} }
Loading…
Cancel
Save