Browse Source

Verified that unused STD types are removed.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/986/head
Dimitar Dobrev 8 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 @@ -387,12 +387,11 @@ namespace CppSharp.AST
public Enumeration FindEnumWithItem(string name)
{
var result = Enums.Find(e => e.ItemsByName.ContainsKey(name));
if (result == null)
result = Namespaces.Select(ns => ns.FindEnumWithItem(name)).FirstOrDefault();
if (result == null)
result = Classes.Select(c => c.FindEnumWithItem(name)).FirstOrDefault();
return result;
return Enums.Find(e => e.ItemsByName.ContainsKey(name)) ??
(from declContext in Namespaces.Union<DeclarationContext>(Classes)
let @enum = declContext.FindEnumWithItem(name)
where @enum != null
select @enum).FirstOrDefault();
}
public virtual IEnumerable<Function> FindOperator(CXXOperatorKind kind)

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

@ -231,5 +231,31 @@ namespace CppSharp.Generator.Tests.Passes @@ -231,5 +231,31 @@ namespace CppSharp.Generator.Tests.Passes
var @class = AstContext.FindDecl<Class>("ClassWithAbstractOperator").First();
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 @@ -77,28 +77,22 @@ namespace CppSharp
public static Enumeration GetEnumWithMatchingItem(this ASTContext context, string pattern)
{
foreach (var module in context.TranslationUnits)
{
Enumeration @enum = module.FindEnumWithItem(pattern);
if (@enum == null) continue;
return @enum;
}
return null;
return (from unit in context.TranslationUnits
let @enum = unit.FindEnumWithItem(pattern)
where @enum != null
select @enum).FirstOrDefault();
}
public static Enumeration.Item GenerateEnumItemFromMacro(this Enumeration @enum,
MacroDefinition macro)
{
var item = new Enumeration.Item
{
Name = macro.Name,
Expression = macro.Expression,
Value = ParseMacroExpression(macro.Expression),
Namespace = @enum
};
return item;
return new Enumeration.Item
{
Name = macro.Name,
Expression = macro.Expression,
Value = ParseMacroExpression(macro.Expression),
Namespace = @enum
};
}
static bool ParseToNumber(string num, out long val)

2
tests/Native/Passes.h

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

Loading…
Cancel
Save