Browse Source

Resolve overloads with typedef-ed mapped params

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1632/head
Dimitar Dobrev 4 years ago
parent
commit
0255eb732d
  1. 10
      src/Generator/Passes/CheckAmbiguousFunctions.cs
  2. 1
      tests/CSharp/CSharp.Tests.cs
  3. 8
      tests/CSharp/CSharp.cpp
  4. 3
      tests/CSharp/CSharp.h

10
src/Generator/Passes/CheckAmbiguousFunctions.cs

@ -80,15 +80,17 @@ namespace CppSharp.Passes
var i = 0; var i = 0;
for (; i < commonParameters; ++i) for (; i < commonParameters; ++i)
{ {
AST.Type funcType = functionParams[i].Type.GetMappedType( AST.Type funcOriginalType = functionParams[i].Type.Desugar();
AST.Type funcType = funcOriginalType.GetMappedType(
TypeMaps, Options.GeneratorKind); TypeMaps, Options.GeneratorKind);
AST.Type overloadType = overloadParams[i].Type.GetMappedType( AST.Type overloadOriginalType = overloadParams[i].Type.Desugar();
AST.Type overloadType = overloadOriginalType.GetMappedType(
TypeMaps, Options.GeneratorKind); TypeMaps, Options.GeneratorKind);
if (!funcType.Equals(functionParams[i].Type.Desugar())) if (!funcType.Equals(funcOriginalType))
functionMappedParams++; functionMappedParams++;
if (!overloadType.Equals(overloadParams[i].Type.Desugar())) if (!overloadType.Equals(overloadOriginalType))
overloadMappedParams++; overloadMappedParams++;
AST.Type funcPointee = funcType.GetFinalPointee() ?? funcType; AST.Type funcPointee = funcType.GetFinalPointee() ?? funcType;

1
tests/CSharp/CSharp.Tests.cs

@ -86,6 +86,7 @@ public unsafe class CSharpTests
} }
CSharp.CSharp.FunctionInsideInlineNamespace(); CSharp.CSharp.FunctionInsideInlineNamespace();
CSharp.CSharp.TakeMappedEnum(TestFlag.Flag1);
using (CSharpTemplates.SpecialiseReturnOnly()) using (CSharpTemplates.SpecialiseReturnOnly())
{ {
} }

8
tests/CSharp/CSharp.cpp

@ -1860,6 +1860,14 @@ const Foo*& takeReturnReferenceToPointer(const Foo*& foo)
return foo; return foo;
} }
void takeMappedEnum(TestFlag value)
{
}
void takeMappedEnum(TestFlags value)
{
}
boolean_t takeTypemapTypedefParam(boolean_t b) boolean_t takeTypemapTypedefParam(boolean_t b)
{ {
return b; return b;

3
tests/CSharp/CSharp.h

@ -1442,6 +1442,9 @@ DLL_API char* takeConstCharRef(const char& c);
DLL_API const char*& takeConstCharStarRef(const char*& c); DLL_API const char*& takeConstCharStarRef(const char*& c);
DLL_API const void*& rValueReferenceToPointer(void*&& v); DLL_API const void*& rValueReferenceToPointer(void*&& v);
DLL_API const Foo*& takeReturnReferenceToPointer(const Foo*& foo); DLL_API const Foo*& takeReturnReferenceToPointer(const Foo*& foo);
typedef QFlags<TestFlag> TestFlags;
DLL_API void takeMappedEnum(TestFlag value);
DLL_API void takeMappedEnum(TestFlags value);
struct { struct {
struct { struct {

Loading…
Cancel
Save