Browse Source

Fixed type map support for typedef types.

Fixes https://github.com/mono/CppSharp/issues/1205.
pull/1187/merge
Joao Matos 6 years ago
parent
commit
53816286bc
  1. 6
      src/AST/Type.cs
  2. 2
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs
  3. 2
      src/Generator/Types/TypeMapDatabase.cs
  4. 6
      tests/CSharp/CSharp.Tests.cs
  5. 5
      tests/CSharp/CSharp.cpp
  6. 18
      tests/CSharp/CSharp.cs
  7. 4
      tests/CSharp/CSharp.h

6
src/AST/Type.cs

@ -438,7 +438,11 @@ namespace CppSharp.AST @@ -438,7 +438,11 @@ namespace CppSharp.AST
public override bool Equals(object obj)
{
var typedef = obj as TypedefType;
return Declaration.Type.Equals(typedef == null ? obj : typedef.Declaration.Type);
if (typedef == null)
return false;
return Declaration.OriginalName == typedef.Declaration.OriginalName &&
Declaration.Type.Equals(typedef.Declaration.Type);
}
public override int GetHashCode() =>

2
src/Generator/Generators/CSharp/CSharpTypePrinter.cs

@ -253,7 +253,7 @@ namespace CppSharp.Generators.CSharp @@ -253,7 +253,7 @@ namespace CppSharp.Generators.CSharp
var decl = typedef.Declaration;
TypeMap typeMap;
if (TypeMapDatabase.FindTypeMap(decl.Type, out typeMap))
if (TypeMapDatabase.FindTypeMap(typedef, out typeMap))
{
typeMap.Type = typedef;

2
src/Generator/Types/TypeMapDatabase.cs

@ -93,7 +93,7 @@ namespace CppSharp.Types @@ -93,7 +93,7 @@ namespace CppSharp.Types
PrintLogicalNames = true
};
foreach (var resolveTypeDefs in new[] { true, false })
foreach (var resolveTypeDefs in new[] { false, true })
{
foreach (var typePrintScopeKind in
new[] { TypePrintScopeKind.Local, TypePrintScopeKind.Qualified })

6
tests/CSharp/CSharp.Tests.cs

@ -1285,4 +1285,10 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -1285,4 +1285,10 @@ public unsafe class CSharpTests : GeneratorTestFixture
{
public override int Function() => 10;
}
[Test]
public void TestTypemapTypedefParam()
{
Assert.That(CSharp.CSharp.TakeTypemapTypedefParam(false), Is.False);
}
}

5
tests/CSharp/CSharp.cpp

@ -1564,3 +1564,8 @@ const char*& takeConstCharStarRef(const char*& c) @@ -1564,3 +1564,8 @@ const char*& takeConstCharStarRef(const char*& c)
{
return c;
}
boolean_t takeTypemapTypedefParam(boolean_t b)
{
return b;
}

18
tests/CSharp/CSharp.cs

@ -95,6 +95,24 @@ namespace CppSharp.Tests @@ -95,6 +95,24 @@ namespace CppSharp.Tests
}
#region Type Maps
[TypeMap("boolean_t")]
public class BooleanTypeMap : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx)
{
return new BuiltinType(PrimitiveType.Bool);
}
public override void CSharpMarshalToNative(CSharpMarshalContext ctx)
{
ctx.Return.Write(ctx.Parameter.Name);
}
public override void CSharpMarshalToManaged(CSharpMarshalContext ctx)
{
ctx.Return.Write(ctx.ReturnVarName);
}
}
[TypeMap("QFlags")]
public class QFlags : TypeMap

4
tests/CSharp/CSharp.h

@ -1321,3 +1321,7 @@ struct { @@ -1321,3 +1321,7 @@ struct {
} example;
} root;
} kotlin;
typedef int boolean_t;
DLL_API boolean_t takeTypemapTypedefParam(boolean_t b);

Loading…
Cancel
Save