Browse Source

Fixed the generated C# when setting a field which is an array of complex objects (#841)

Fixes #717
pull/842/head
Mohit Mohta 9 years ago committed by Dimitar Dobrev
parent
commit
efbc8fe90e
  1. 2
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  2. 104
      tests/CSharp/CSharp.Tests.cs
  3. 14
      tests/CSharp/CSharp.h

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

@ -434,7 +434,7 @@ namespace CppSharp.Generators.CSharp @@ -434,7 +434,7 @@ namespace CppSharp.Generators.CSharp
if (@class != null && @class.IsRefType)
{
supportBefore.WriteLineIndent(
"{0}[i * sizeof({1}.{2})] = *((byte*)({1}.{2}*){3}[i].{4});",
"*({1}.{2}*) &{0}[i * sizeof({1}.{2})] = *({1}.{2}*){3}[i].{4};",
Context.ReturnVarName, array.Type, Helpers.InternalStruct,
Context.ArgName, Helpers.InstanceIdentifier);
}

104
tests/CSharp/CSharp.Tests.cs

@ -730,4 +730,108 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -730,4 +730,108 @@ public unsafe class CSharpTests : GeneratorTestFixture
var b = (MyMacroTestEnum)'2';
Assert.IsTrue(a == MyMacroTestEnum.MY_MACRO_TEST_1 && b == MyMacroTestEnum.MY_MACRO_TEST_2);
}
[Test]
public void TestGenerationOfArraySetter()
{
var complexArrayElements = new ComplexArrayElement[10];
complexArrayElements[0] = new ComplexArrayElement();
complexArrayElements[1] = new ComplexArrayElement();
complexArrayElements[2] = new ComplexArrayElement();
complexArrayElements[3] = new ComplexArrayElement();
complexArrayElements[4] = new ComplexArrayElement();
complexArrayElements[5] = new ComplexArrayElement();
complexArrayElements[6] = new ComplexArrayElement();
complexArrayElements[7] = new ComplexArrayElement();
complexArrayElements[8] = new ComplexArrayElement();
complexArrayElements[9] = new ComplexArrayElement();
complexArrayElements[0].BoolField = true;
complexArrayElements[0].IntField = 2450;
complexArrayElements[0].FloatField = -40;
complexArrayElements[1].BoolField = false;
complexArrayElements[1].IntField = 2451;
complexArrayElements[1].FloatField = -41;
complexArrayElements[2].BoolField = true;
complexArrayElements[2].IntField = 2452;
complexArrayElements[2].FloatField = -42;
complexArrayElements[3].BoolField = true;
complexArrayElements[3].IntField = 2453;
complexArrayElements[3].FloatField = -43;
complexArrayElements[4].BoolField = false;
complexArrayElements[4].IntField = 2454;
complexArrayElements[4].FloatField = -44;
complexArrayElements[5].BoolField = true;
complexArrayElements[5].IntField = 2455;
complexArrayElements[5].FloatField = -45;
complexArrayElements[6].BoolField = true;
complexArrayElements[6].IntField = 2456;
complexArrayElements[6].FloatField = -46;
complexArrayElements[7].BoolField = true;
complexArrayElements[7].IntField = 2457;
complexArrayElements[7].FloatField = -47;
complexArrayElements[8].BoolField = false;
complexArrayElements[8].IntField = 2458;
complexArrayElements[8].FloatField = -48;
complexArrayElements[9].BoolField = true;
complexArrayElements[9].IntField = 2459;
complexArrayElements[9].FloatField = -49;
using (HasComplexArray tests = new HasComplexArray { ComplexArray = complexArrayElements })
{
Assert.AreEqual(tests.ComplexArray[0].BoolField, true);
Assert.AreEqual(tests.ComplexArray[0].IntField, 2450);
Assert.AreEqual(tests.ComplexArray[0].FloatField, -40);
Assert.AreEqual(tests.ComplexArray[1].BoolField, false);
Assert.AreEqual(tests.ComplexArray[1].IntField, 2451);
Assert.AreEqual(tests.ComplexArray[1].FloatField, -41);
Assert.AreEqual(tests.ComplexArray[2].BoolField, true);
Assert.AreEqual(tests.ComplexArray[2].IntField, 2452);
Assert.AreEqual(tests.ComplexArray[2].FloatField, -42);
Assert.AreEqual(tests.ComplexArray[3].BoolField, true);
Assert.AreEqual(tests.ComplexArray[3].IntField, 2453);
Assert.AreEqual(tests.ComplexArray[3].FloatField, -43);
Assert.AreEqual(tests.ComplexArray[4].BoolField, false);
Assert.AreEqual(tests.ComplexArray[4].IntField, 2454);
Assert.AreEqual(tests.ComplexArray[4].FloatField, -44);
Assert.AreEqual(tests.ComplexArray[5].BoolField, true);
Assert.AreEqual(tests.ComplexArray[5].IntField, 2455);
Assert.AreEqual(tests.ComplexArray[5].FloatField, -45);
Assert.AreEqual(tests.ComplexArray[6].BoolField, true);
Assert.AreEqual(tests.ComplexArray[6].IntField, 2456);
Assert.AreEqual(tests.ComplexArray[6].FloatField, -46);
Assert.AreEqual(tests.ComplexArray[7].BoolField, true);
Assert.AreEqual(tests.ComplexArray[7].IntField, 2457);
Assert.AreEqual(tests.ComplexArray[7].FloatField, -47);
Assert.AreEqual(tests.ComplexArray[8].BoolField, false);
Assert.AreEqual(tests.ComplexArray[8].IntField, 2458);
Assert.AreEqual(tests.ComplexArray[8].FloatField, -48);
Assert.AreEqual(tests.ComplexArray[9].BoolField, true);
Assert.AreEqual(tests.ComplexArray[9].IntField, 2459);
Assert.AreEqual(tests.ComplexArray[9].FloatField, -49);
}
foreach (var complexArrayElement in complexArrayElements)
{
complexArrayElement.Dispose();
}
}
}

14
tests/CSharp/CSharp.h

@ -1179,3 +1179,17 @@ struct StructTestArrayTypeFromTypedef @@ -1179,3 +1179,17 @@ struct StructTestArrayTypeFromTypedef
#define MY_MACRO_TEST_1 '1'
#define MY_MACRO_TEST_2 '2'
struct ComplexArrayElement
{
bool BoolField;
uint32_t IntField;
float FloatField;
};
#define ARRAY_LENGTH_MACRO 10
struct HasComplexArray
{
ComplexArrayElement complexArray[ARRAY_LENGTH_MACRO];
};

Loading…
Cancel
Save