From aef1acb43f6bb7cfbb8cc2bdfa1bccf0b373e52c Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Wed, 24 Oct 2018 00:21:21 +0300 Subject: [PATCH] Fixed the generated C# for default arguments of type pointer to a function. Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/HandleDefaultParamValuesPass.cs | 10 ++-------- tests/CSharp/CSharp.Tests.cs | 1 + tests/CSharp/CSharp.cpp | 4 ++++ tests/CSharp/CSharp.h | 1 + 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Generator/Passes/HandleDefaultParamValuesPass.cs b/src/Generator/Passes/HandleDefaultParamValuesPass.cs index 58281a54..4795b3e1 100644 --- a/src/Generator/Passes/HandleDefaultParamValuesPass.cs +++ b/src/Generator/Passes/HandleDefaultParamValuesPass.cs @@ -69,7 +69,8 @@ namespace CppSharp.Passes if (!desugared.IsPrimitiveTypeConvertibleToRef() && (expression.String == "0" || expression.String == "nullptr")) { - result = $"default({desugared})"; + result = desugared.GetPointee()?.Desugar() is FunctionType ? + "null" : $"default({desugared})"; return true; } @@ -122,13 +123,6 @@ namespace CppSharp.Passes if (!desugared.IsPointer()) return false; - // IntPtr.Zero is not a constant - if (desugared.IsPointerToPrimitiveType(PrimitiveType.Void)) - { - result = "new global::System.IntPtr()"; - return true; - } - if (desugared.IsPrimitiveTypeConvertibleToRef()) return false; diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index 65fc3efc..6a761ede 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -215,6 +215,7 @@ public unsafe class CSharpTests : GeneratorTestFixture { methodsWithDefaultValues.DefaultPointer(); methodsWithDefaultValues.DefaultVoidStar(); + methodsWithDefaultValues.DefaultFunctionPointer(); methodsWithDefaultValues.DefaultValueType(); methodsWithDefaultValues.DefaultChar(); methodsWithDefaultValues.DefaultEmptyChar(); diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index 0871b268..12d5995e 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -556,6 +556,10 @@ void MethodsWithDefaultValues::defaultVoidStar(void* ptr) { } +void MethodsWithDefaultValues::defaultFunctionPointer(void(*functionPtr)(int p)) +{ +} + void MethodsWithDefaultValues::defaultValueType(QGenericArgument valueType) { } diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index 6dc36f4d..9e321cb4 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -393,6 +393,7 @@ public: ~MethodsWithDefaultValues(); void defaultPointer(Foo* ptr1 = 0, Foo* ptr2 = nullptr); void defaultVoidStar(void* ptr = 0); + void defaultFunctionPointer(void(*functionPtr)(int p) = nullptr); void defaultValueType(QGenericArgument valueType = QGenericArgument()); void defaultChar(char c = 'a'); void defaultEmptyChar(char c = 0);