Browse Source

Fixed the mapping of std::string not to destroy values when a reference (&) is returned.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/719/head 0.7.11
Dimitar Dobrev 9 years ago
parent
commit
5f0840d117
  1. 4
      src/Generator/Types/Std/Stdlib.cs
  2. 2
      tests/Common/Common.Tests.cs
  3. 5
      tests/Common/Common.cpp
  4. 1
      tests/Common/Common.h

4
src/Generator/Types/Std/Stdlib.cs

@ -92,13 +92,13 @@ namespace CppSharp.Types.Std @@ -92,13 +92,13 @@ namespace CppSharp.Types.Std
public override void CSharpMarshalToManaged(CSharpMarshalContext ctx)
{
var type = ctx.ReturnType.Type;
var type = ctx.ReturnType.Type.Desugar();
ClassTemplateSpecialization basicString = GetBasicString(type);
Declaration c_str = basicString.Methods.FirstOrDefault(m => m.OriginalName == "c_str");
if (!c_str.IsGenerated)
c_str = basicString.Properties.First(p => p.OriginalName == "c_str");
var typePrinter = new CSharpTypePrinter(ctx.Context);
if (type.IsPointer() || ctx.Declaration is Field)
if (type.IsAddress() || ctx.Declaration is Field)
{
ctx.Return.Write("{0}.{1}({2}).{3}{4}",
basicString.Visit(typePrinter), Helpers.CreateInstanceIdentifier,

2
tests/Common/Common.Tests.cs

@ -665,6 +665,8 @@ This is a very long string. This is a very long string. This is a very long stri @@ -665,6 +665,8 @@ This is a very long string. This is a very long string. This is a very long stri
Assert.That(hasStdString.testStdString(t), Is.EqualTo(t + "_test"));
hasStdString.s = t;
Assert.That(hasStdString.s, Is.EqualTo(t));
Assert.That(hasStdString.stdString, Is.EqualTo(t));
Assert.That(hasStdString.stdString, Is.EqualTo(t));
}
}

5
tests/Common/Common.cpp

@ -430,6 +430,11 @@ std::string HasStdString::testStdString(std::string s) @@ -430,6 +430,11 @@ std::string HasStdString::testStdString(std::string s)
return s + "_test";
}
std::string& HasStdString::getStdString()
{
return s;
}
TypeMappedIndex::TypeMappedIndex()
{
}

1
tests/Common/Common.h

@ -759,6 +759,7 @@ class DLL_API HasStdString @@ -759,6 +759,7 @@ class DLL_API HasStdString
public:
std::string testStdString(std::string s);
std::string s;
std::string& getStdString();
};
class DLL_API InternalCtorAmbiguity

Loading…
Cancel
Save