Browse Source

Fixed the generated C# for default arguments of type pointer to a function.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1139/head
Dimitar Dobrev 7 years ago
parent
commit
aef1acb43f
  1. 10
      src/Generator/Passes/HandleDefaultParamValuesPass.cs
  2. 1
      tests/CSharp/CSharp.Tests.cs
  3. 4
      tests/CSharp/CSharp.cpp
  4. 1
      tests/CSharp/CSharp.h

10
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -69,7 +69,8 @@ namespace CppSharp.Passes @@ -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 @@ -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;

1
tests/CSharp/CSharp.Tests.cs

@ -215,6 +215,7 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -215,6 +215,7 @@ public unsafe class CSharpTests : GeneratorTestFixture
{
methodsWithDefaultValues.DefaultPointer();
methodsWithDefaultValues.DefaultVoidStar();
methodsWithDefaultValues.DefaultFunctionPointer();
methodsWithDefaultValues.DefaultValueType();
methodsWithDefaultValues.DefaultChar();
methodsWithDefaultValues.DefaultEmptyChar();

4
tests/CSharp/CSharp.cpp

@ -556,6 +556,10 @@ void MethodsWithDefaultValues::defaultVoidStar(void* ptr) @@ -556,6 +556,10 @@ void MethodsWithDefaultValues::defaultVoidStar(void* ptr)
{
}
void MethodsWithDefaultValues::defaultFunctionPointer(void(*functionPtr)(int p))
{
}
void MethodsWithDefaultValues::defaultValueType(QGenericArgument valueType)
{
}

1
tests/CSharp/CSharp.h

@ -393,6 +393,7 @@ public: @@ -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);

Loading…
Cancel
Save