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);