Browse Source

Fixed the generation of C# for Virtual function with std::string params (#878)

Fixes #877
pull/881/head
Mohit Mohta 8 years ago committed by Dimitar Dobrev
parent
commit
65d5037a72
  1. 9
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 10
      tests/Common/Common.Tests.cs
  3. 25
      tests/Common/Common.cpp
  4. 17
      tests/Common/Common.h

9
src/Generator/Generators/CSharp/CSharpSources.cs

@ -1492,6 +1492,7 @@ namespace CppSharp.Generators.CSharp @@ -1492,6 +1492,7 @@ namespace CppSharp.Generators.CSharp
}
var marshals = new List<string>();
var numBlocks = 0;
for (int i = 0; i < method.Parameters.Count; i++)
{
var param = method.Parameters[i];
@ -1515,6 +1516,11 @@ namespace CppSharp.Generators.CSharp @@ -1515,6 +1516,11 @@ namespace CppSharp.Generators.CSharp
Write(marshal.Context.Before);
marshals.Add(marshal.Context.Return);
if (ctx.HasCodeBlock)
{
PushIndent();
numBlocks++;
}
}
var hasReturn = !method.OriginalReturnType.Type.IsPrimitiveType(PrimitiveType.Void);
@ -1568,6 +1574,9 @@ namespace CppSharp.Generators.CSharp @@ -1568,6 +1574,9 @@ namespace CppSharp.Generators.CSharp
WriteLine("return {0};", marshal.Context.Return);
}
}
for (var i = 0; i < numBlocks; ++i)
WriteCloseBraceIndent();
}
private void InvokeProperty(Declaration method, IEnumerable<string> marshals)

10
tests/Common/Common.Tests.cs

@ -765,4 +765,14 @@ This is a very long string. This is a very long string. This is a very long stri @@ -765,4 +765,14 @@ This is a very long string. This is a very long string. This is a very long stri
var v = Common.FuncUnion(ut);
Assert.AreEqual(20, v);
}
[Test]
public void TestVirtualFuncWithStringParams()
{
using (var VirtFuncWithStringParam = new ImplementsVirtualFunctionsWithStringParams())
{
VirtFuncWithStringParam.PureVirtualFunctionWithStringParams("anyRandomString");
Assert.That(VirtFuncWithStringParam.VirtualFunctionWithStringParam("anyRandomString").Equals(5));
}
}
}

25
tests/Common/Common.cpp

@ -756,3 +756,28 @@ int HasCopyAndMoveConstructor::getField() @@ -756,3 +756,28 @@ int HasCopyAndMoveConstructor::getField()
{
return field;
}
HasVirtualFunctionsWithStringParams::HasVirtualFunctionsWithStringParams()
{
}
HasVirtualFunctionsWithStringParams::~HasVirtualFunctionsWithStringParams()
{
}
ImplementsVirtualFunctionsWithStringParams::ImplementsVirtualFunctionsWithStringParams()
{
}
ImplementsVirtualFunctionsWithStringParams::~ImplementsVirtualFunctionsWithStringParams()
{
}
void ImplementsVirtualFunctionsWithStringParams::PureVirtualFunctionWithStringParams(std::string testString)
{
}
int HasVirtualFunctionsWithStringParams::VirtualFunctionWithStringParam(std::string testString)
{
return 5;
}

17
tests/Common/Common.h

@ -1281,3 +1281,20 @@ public: @@ -1281,3 +1281,20 @@ public:
private:
int field;
};
class DLL_API HasVirtualFunctionsWithStringParams
{
public:
HasVirtualFunctionsWithStringParams();
~HasVirtualFunctionsWithStringParams();
virtual void PureVirtualFunctionWithStringParams(std::string testString) = 0;
virtual int VirtualFunctionWithStringParam(std::string testString);
};
class DLL_API ImplementsVirtualFunctionsWithStringParams : public HasVirtualFunctionsWithStringParams
{
public:
ImplementsVirtualFunctionsWithStringParams();
~ImplementsVirtualFunctionsWithStringParams();
virtual void PureVirtualFunctionWithStringParams(std::string testString);
};
Loading…
Cancel
Save