Browse Source

Destroy returned by value std::strings

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1241/head
Dimitar Dobrev 6 years ago
parent
commit
881530793c
  1. 17
      src/Generator/Types/Std/Stdlib.cs

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

@ -378,13 +378,24 @@ namespace CppSharp.Types.Std
var typePrinter = new CSharpTypePrinter(ctx.Context); var typePrinter = new CSharpTypePrinter(ctx.Context);
string qualifiedBasicString = GetQualifiedBasicString(basicString); string qualifiedBasicString = GetQualifiedBasicString(basicString);
string varBasicString = $"__basicStringRet{ctx.ParameterIndex}"; string varBasicString = $"__basicStringRet{ctx.ParameterIndex}";
bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField; bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField ||
ctx.MarshalKind == MarshalKind.ReturnVariableArray;
ctx.Before.WriteLine($@"var {varBasicString} = { ctx.Before.WriteLine($@"var {varBasicString} = {
basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({ basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({
(usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{ (usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{
ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});"); ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});");
ctx.Return.Write($@"{qualifiedBasicString}Extensions.{data.Name}({ string @string = $"{qualifiedBasicString}Extensions.{data.Name}({varBasicString})";
varBasicString})"); if (usePointer)
{
ctx.Return.Write(@string);
}
else
{
string retString = $"{Generator.GeneratedIdentifier("retString")}{ctx.ParameterIndex}";
ctx.Before.WriteLine($"var {retString} = {@string};");
ctx.Before.WriteLine($"{varBasicString}.Dispose();");
ctx.Return.Write(retString);
}
} }
private static string GetQualifiedBasicString(ClassTemplateSpecialization basicString) private static string GetQualifiedBasicString(ClassTemplateSpecialization basicString)

Loading…
Cancel
Save