From 0255eb732dbca4a14707e662d186300a55862d36 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Fri, 27 Aug 2021 02:58:25 +0300 Subject: [PATCH] Resolve overloads with typedef-ed mapped params Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/CheckAmbiguousFunctions.cs | 10 ++++++---- tests/CSharp/CSharp.Tests.cs | 1 + tests/CSharp/CSharp.cpp | 10 +++++++++- tests/CSharp/CSharp.h | 3 +++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/Generator/Passes/CheckAmbiguousFunctions.cs b/src/Generator/Passes/CheckAmbiguousFunctions.cs index b8058034..02481b27 100644 --- a/src/Generator/Passes/CheckAmbiguousFunctions.cs +++ b/src/Generator/Passes/CheckAmbiguousFunctions.cs @@ -80,15 +80,17 @@ namespace CppSharp.Passes var i = 0; 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); - AST.Type overloadType = overloadParams[i].Type.GetMappedType( + AST.Type overloadOriginalType = overloadParams[i].Type.Desugar(); + AST.Type overloadType = overloadOriginalType.GetMappedType( TypeMaps, Options.GeneratorKind); - if (!funcType.Equals(functionParams[i].Type.Desugar())) + if (!funcType.Equals(funcOriginalType)) functionMappedParams++; - if (!overloadType.Equals(overloadParams[i].Type.Desugar())) + if (!overloadType.Equals(overloadOriginalType)) overloadMappedParams++; AST.Type funcPointee = funcType.GetFinalPointee() ?? funcType; diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index f2011bc3..fc206f72 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -86,6 +86,7 @@ public unsafe class CSharpTests } CSharp.CSharp.FunctionInsideInlineNamespace(); + CSharp.CSharp.TakeMappedEnum(TestFlag.Flag1); using (CSharpTemplates.SpecialiseReturnOnly()) { } diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index 580d2021..94f6ea6a 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -1860,6 +1860,14 @@ const Foo*& takeReturnReferenceToPointer(const Foo*& foo) return foo; } +void takeMappedEnum(TestFlag value) +{ +} + +void takeMappedEnum(TestFlags value) +{ +} + boolean_t takeTypemapTypedefParam(boolean_t b) { return b; @@ -1931,4 +1939,4 @@ const unsigned StructWithEmbeddedArrayOfStructObjectAlignmentOffsets[2] { offsetof(StructWithEmbeddedArrayOfStructObjectAlignment, boolean), offsetof(StructWithEmbeddedArrayOfStructObjectAlignment, embedded_struct), -}; \ No newline at end of file +}; diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index e2d89723..022ceb3b 100644 --- a/tests/CSharp/CSharp.h +++ b/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 void*& rValueReferenceToPointer(void*&& v); DLL_API const Foo*& takeReturnReferenceToPointer(const Foo*& foo); +typedef QFlags TestFlags; +DLL_API void takeMappedEnum(TestFlag value); +DLL_API void takeMappedEnum(TestFlags value); struct { struct {