Browse Source

Fixed the generation for parameters of type void**.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1168/head
Dimitar Dobrev 7 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
} }
pointer.QualifiedPointee.Visit(this); 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 || if (pointer.Pointee.Desugar(false) is TemplateParameterSubstitutionType ||
isVoid) isVoid)
{ {

3
tests/Common/Common.Tests.cs

@ -9,7 +9,7 @@ using Enum = CommonTest.Enum;
public class CommonTests : GeneratorTestFixture public class CommonTests : GeneratorTestFixture
{ {
[Test] [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 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 #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
Common.SMallFollowedByCapital(); Common.SMallFollowedByCapital();
Common.IntegerOverload(0); Common.IntegerOverload(0);
Common.IntegerOverload((uint) 0); Common.IntegerOverload((uint) 0);
Common.TakeVoidStarStar(null);
using (new DerivedFromSecondaryBaseWithIgnoredVirtualMethod()) { } using (new DerivedFromSecondaryBaseWithIgnoredVirtualMethod()) { }
#pragma warning restore 0168 #pragma warning restore 0168

4
tests/Common/Common.cpp

@ -1010,3 +1010,7 @@ void integerOverload(unsigned long i)
void takeReferenceToVoidStar(const void*& p) 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);
DLL_API void integerOverload(long i); DLL_API void integerOverload(long i);
DLL_API void integerOverload(unsigned long i); DLL_API void integerOverload(unsigned long i);
DLL_API void takeReferenceToVoidStar(const void*& p); DLL_API void takeReferenceToVoidStar(const void*& p);
DLL_API void takeVoidStarStar(void** p);

Loading…
Cancel
Save