Browse Source

Verified that unused STD types are removed.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/986/head
Dimitar Dobrev 9 years ago
parent
commit
b5c17d98bd
  1. 11
      src/AST/Namespace.cs
  2. 26
      src/Generator.Tests/Passes/TestPasses.cs
  3. 28
      src/Generator/Library.cs
  4. 2
      tests/Native/Passes.h

11
src/AST/Namespace.cs

@ -387,12 +387,11 @@ namespace CppSharp.AST
public Enumeration FindEnumWithItem(string name) public Enumeration FindEnumWithItem(string name)
{ {
var result = Enums.Find(e => e.ItemsByName.ContainsKey(name)); return Enums.Find(e => e.ItemsByName.ContainsKey(name)) ??
if (result == null) (from declContext in Namespaces.Union<DeclarationContext>(Classes)
result = Namespaces.Select(ns => ns.FindEnumWithItem(name)).FirstOrDefault(); let @enum = declContext.FindEnumWithItem(name)
if (result == null) where @enum != null
result = Classes.Select(c => c.FindEnumWithItem(name)).FirstOrDefault(); select @enum).FirstOrDefault();
return result;
} }
public virtual IEnumerable<Function> FindOperator(CXXOperatorKind kind) public virtual IEnumerable<Function> FindOperator(CXXOperatorKind kind)

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

@ -231,5 +231,31 @@ namespace CppSharp.Generator.Tests.Passes
var @class = AstContext.FindDecl<Class>("ClassWithAbstractOperator").First(); var @class = AstContext.FindDecl<Class>("ClassWithAbstractOperator").First();
Assert.AreEqual(@class.Operators.First().GenerationKind, GenerationKind.None); Assert.AreEqual(@class.Operators.First().GenerationKind, GenerationKind.None);
} }
[Test]
public void TestRemovalOfUnusedStdTypes()
{
passBuilder.AddPass(new IgnoreSystemDeclarationsPass());
passBuilder.RunPasses(pass => pass.VisitASTContext(AstContext));
if (Platform.IsWindows)
{
Assert.That(AstContext.GetEnumWithMatchingItem("_ALLOC_MASK").Ignore, Is.True);
Assert.That(AstContext.FindClass("_Ctypevec").First().Ignore, Is.True);
return;
}
if (Platform.IsLinux)
{
Assert.That(AstContext.GetEnumWithMatchingItem("PTHREAD_RWLOCK_PREFER_READER_NP").Ignore, Is.True);
Assert.That(AstContext.FindClass("pthread_mutex_t").First().Ignore, Is.True);
return;
}
if (Platform.IsMacOS)
{
Assert.That(AstContext.GetEnumWithMatchingItem("__n_words").Ignore, Is.True);
Assert.That(AstContext.FindClass("__darwin_fp_control").First().Ignore, Is.True);
return;
}
}
} }
} }

28
src/Generator/Library.cs

@ -77,28 +77,22 @@ namespace CppSharp
public static Enumeration GetEnumWithMatchingItem(this ASTContext context, string pattern) public static Enumeration GetEnumWithMatchingItem(this ASTContext context, string pattern)
{ {
foreach (var module in context.TranslationUnits) return (from unit in context.TranslationUnits
{ let @enum = unit.FindEnumWithItem(pattern)
Enumeration @enum = module.FindEnumWithItem(pattern); where @enum != null
if (@enum == null) continue; select @enum).FirstOrDefault();
return @enum;
}
return null;
} }
public static Enumeration.Item GenerateEnumItemFromMacro(this Enumeration @enum, public static Enumeration.Item GenerateEnumItemFromMacro(this Enumeration @enum,
MacroDefinition macro) MacroDefinition macro)
{ {
var item = new Enumeration.Item return new Enumeration.Item
{ {
Name = macro.Name, Name = macro.Name,
Expression = macro.Expression, Expression = macro.Expression,
Value = ParseMacroExpression(macro.Expression), Value = ParseMacroExpression(macro.Expression),
Namespace = @enum Namespace = @enum
}; };
return item;
} }
static bool ParseToNumber(string num, out long val) static bool ParseToNumber(string num, out long val)

2
tests/Native/Passes.h

@ -1,3 +1,5 @@
#include <string>
enum FlagEnum enum FlagEnum
{ {
A = 1 << 0, A = 1 << 0,

Loading…
Cancel
Save