Skip to content

Commit 0f23d87

Browse files
committed
Fix marshaling of C++ references in C++ marshaler.
1 parent 7acd580 commit 0f23d87

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/Generator/Generators/C/CppMarshal.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -586,9 +586,15 @@ private void MarshalRefClass(Class @class)
586586
}
587587

588588
var paramType = Context.Parameter.Type.Desugar();
589-
var deref = paramType.SkipPointerRefs().IsPointer() ? "->" : ".";
590-
Context.Return.Write($"(::{@class.QualifiedOriginalName}*)");
591-
Context.Return.Write($"{Context.Parameter.Name}{deref}{Helpers.InstanceIdentifier}");
589+
var isPointer = paramType.SkipPointerRefs().IsPointer();
590+
var deref = isPointer ? "->" : ".";
591+
var instance = $"(::{@class.QualifiedOriginalName}*)" +
592+
$"{Context.Parameter.Name}{deref}{Helpers.InstanceIdentifier}";
593+
594+
if (isPointer)
595+
Context.Return.Write($"{Context.Parameter.Name} ? {instance} : nullptr");
596+
else
597+
Context.Return.Write($"{instance}");
592598
}
593599

594600
private void MarshalValueClass(Class @class)

0 commit comments

Comments
 (0)