Browse Source

Generate valid C# for r-values to void pointers

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1213/head
Dimitar Dobrev 7 years ago
parent
commit
43c17f9946
  1. 3
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  2. 1
      tests/CSharp/CSharp.Tests.cs
  3. 4
      tests/CSharp/CSharp.cpp
  4. 1
      tests/CSharp/CSharp.h

3
src/Generator/Generators/CSharp/CSharpMarshal.cs

@ -556,7 +556,8 @@ namespace CppSharp.Generators.CSharp @@ -556,7 +556,8 @@ namespace CppSharp.Generators.CSharp
Context.ArgumentPrefix.Write("&");
bool isVoid = primitive == PrimitiveType.Void &&
pointee.IsAddress() && pointer.IsReference();
pointee.IsAddress() && pointer.IsReference() &&
pointer.GetFinalQualifiedPointee().Qualifiers.IsConst;
if (pointer.Pointee.Desugar(false) is TemplateParameterSubstitutionType ||
isVoid)
{

1
tests/CSharp/CSharp.Tests.cs

@ -95,6 +95,7 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -95,6 +95,7 @@ public unsafe class CSharpTests : GeneratorTestFixture
}
CSharp.CSharp.ReturnCharPointer();
CSharp.CSharp.RValueReferenceToPointer(null);
#pragma warning restore 0168
#pragma warning restore 0219

4
tests/CSharp/CSharp.cpp

@ -1565,6 +1565,10 @@ const char*& takeConstCharStarRef(const char*& c) @@ -1565,6 +1565,10 @@ const char*& takeConstCharStarRef(const char*& c)
return c;
}
void rValueReferenceToPointer(void*&& v)
{
}
boolean_t takeTypemapTypedefParam(boolean_t b)
{
return b;

1
tests/CSharp/CSharp.h

@ -1307,6 +1307,7 @@ public: @@ -1307,6 +1307,7 @@ public:
DLL_API void va_listFunction(va_list v);
DLL_API char* returnCharPointer();
DLL_API const char*& takeConstCharStarRef(const char*& c);
DLL_API void rValueReferenceToPointer(void*&& v);
struct {
struct {

Loading…
Cancel
Save