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
if (!desugared.IsPrimitiveTypeConvertibleToRef() && if (!desugared.IsPrimitiveTypeConvertibleToRef() &&
(expression.String == "0" || expression.String == "nullptr")) (expression.String == "0" || expression.String == "nullptr"))
{ {
result = $"default({desugared})"; result = desugared.GetPointee()?.Desugar() is FunctionType ?
"null" : $"default({desugared})";
return true; return true;
} }
@ -122,13 +123,6 @@ namespace CppSharp.Passes
if (!desugared.IsPointer()) if (!desugared.IsPointer())
return false; return false;
// IntPtr.Zero is not a constant
if (desugared.IsPointerToPrimitiveType(PrimitiveType.Void))
{
result = "new global::System.IntPtr()";
return true;
}
if (desugared.IsPrimitiveTypeConvertibleToRef()) if (desugared.IsPrimitiveTypeConvertibleToRef())
return false; return false;

1
tests/CSharp/CSharp.Tests.cs

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

4
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) void MethodsWithDefaultValues::defaultValueType(QGenericArgument valueType)
{ {
} }

1
tests/CSharp/CSharp.h

@ -393,6 +393,7 @@ public:
~MethodsWithDefaultValues(); ~MethodsWithDefaultValues();
void defaultPointer(Foo* ptr1 = 0, Foo* ptr2 = nullptr); void defaultPointer(Foo* ptr1 = 0, Foo* ptr2 = nullptr);
void defaultVoidStar(void* ptr = 0); void defaultVoidStar(void* ptr = 0);
void defaultFunctionPointer(void(*functionPtr)(int p) = nullptr);
void defaultValueType(QGenericArgument valueType = QGenericArgument()); void defaultValueType(QGenericArgument valueType = QGenericArgument());
void defaultChar(char c = 'a'); void defaultChar(char c = 'a');
void defaultEmptyChar(char c = 0); void defaultEmptyChar(char c = 0);

Loading…
Cancel
Save