Browse Source

Fixed the generation for parameters of type void**.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1168/head
Dimitar Dobrev 6 years ago
parent
commit
5df67cd0c7
  1. 3
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  2. 3
      tests/Common/Common.Tests.cs
  3. 4
      tests/Common/Common.cpp
  4. 1
      tests/Common/Common.h

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

@ -546,7 +546,8 @@ namespace CppSharp.Generators.CSharp @@ -546,7 +546,8 @@ namespace CppSharp.Generators.CSharp
}
pointer.QualifiedPointee.Visit(this);
bool isVoid = primitive == PrimitiveType.Void && pointee.IsAddress();
bool isVoid = primitive == PrimitiveType.Void &&
pointee.IsAddress() && pointer.IsReference();
if (pointer.Pointee.Desugar(false) is TemplateParameterSubstitutionType ||
isVoid)
{

3
tests/Common/Common.Tests.cs

@ -9,7 +9,7 @@ using Enum = CommonTest.Enum; @@ -9,7 +9,7 @@ using Enum = CommonTest.Enum;
public class CommonTests : GeneratorTestFixture
{
[Test]
public void TestCodeGeneration()
public unsafe void TestCodeGeneration()
{
#pragma warning disable 0168 // warning CS0168: The variable `foo' is declared but never used
#pragma warning disable 0219 // warning CS0219: The variable `foo' is assigned but its value is never used
@ -58,6 +58,7 @@ public class CommonTests : GeneratorTestFixture @@ -58,6 +58,7 @@ public class CommonTests : GeneratorTestFixture
Common.SMallFollowedByCapital();
Common.IntegerOverload(0);
Common.IntegerOverload((uint) 0);
Common.TakeVoidStarStar(null);
using (new DerivedFromSecondaryBaseWithIgnoredVirtualMethod()) { }
#pragma warning restore 0168

4
tests/Common/Common.cpp

@ -1010,3 +1010,7 @@ void integerOverload(unsigned long i) @@ -1010,3 +1010,7 @@ void integerOverload(unsigned long i)
void takeReferenceToVoidStar(const void*& p)
{
}
void takeVoidStarStar(void** p)
{
}

1
tests/Common/Common.h

@ -1481,3 +1481,4 @@ DLL_API void integerOverload(unsigned int i); @@ -1481,3 +1481,4 @@ DLL_API void integerOverload(unsigned int i);
DLL_API void integerOverload(long i);
DLL_API void integerOverload(unsigned long i);
DLL_API void takeReferenceToVoidStar(const void*& p);
DLL_API void takeVoidStarStar(void** p);

Loading…
Cancel
Save