Skip to content

Commit 8815307

Browse files
committed
Destroy returned by value std::strings
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 17cc96b commit 8815307

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/Generator/Types/Std/Stdlib.cs

+14-3
Original file line numberDiff line numberDiff line change
@@ -378,13 +378,24 @@ public override void CSharpMarshalToManaged(CSharpMarshalContext ctx)
378378
var typePrinter = new CSharpTypePrinter(ctx.Context);
379379
string qualifiedBasicString = GetQualifiedBasicString(basicString);
380380
string varBasicString = $"__basicStringRet{ctx.ParameterIndex}";
381-
bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField;
381+
bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField ||
382+
ctx.MarshalKind == MarshalKind.ReturnVariableArray;
382383
ctx.Before.WriteLine($@"var {varBasicString} = {
383384
basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({
384385
(usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{
385386
ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});");
386-
ctx.Return.Write($@"{qualifiedBasicString}Extensions.{data.Name}({
387-
varBasicString})");
387+
string @string = $"{qualifiedBasicString}Extensions.{data.Name}({varBasicString})";
388+
if (usePointer)
389+
{
390+
ctx.Return.Write(@string);
391+
}
392+
else
393+
{
394+
string retString = $"{Generator.GeneratedIdentifier("retString")}{ctx.ParameterIndex}";
395+
ctx.Before.WriteLine($"var {retString} = {@string};");
396+
ctx.Before.WriteLine($"{varBasicString}.Dispose();");
397+
ctx.Return.Write(retString);
398+
}
388399
}
389400

390401
private static string GetQualifiedBasicString(ClassTemplateSpecialization basicString)

0 commit comments

Comments
 (0)