Skip to content

Commit f8b518c

Browse files
author
Fabio Anderegg
committed
call by value: handle cctors with default parameters
1 parent 57f6046 commit f8b518c

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/Generator/Generators/CSharp/CSharpMarshal.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,10 +776,18 @@ private void MarshalRefClass(Class @class)
776776
Context.Parameter.Name}"", ""Cannot be null because it is passed by value."");");
777777

778778
var nativeClass = typePrinter.PrintNative(@class);
779+
779780
var cctorName = CSharpSources.GetFunctionNativeIdentifier(Context.Context, cctor);
781+
782+
var defaultValue = "";
783+
var TypePrinter = new CSharpTypePrinter(Context.Context);
784+
var ExpressionPrinter = new CSharpExpressionPrinter(TypePrinter);
785+
if (cctor.Parameters.Count > 1)
786+
defaultValue = $", {ExpressionPrinter.VisitParameter(cctor.Parameters.Last())}";
787+
780788
Context.Before.WriteLine($"byte* __{Context.Parameter.Name}Memory = stackalloc byte[sizeof({nativeClass})];");
781789
Context.Before.WriteLine($"__IntPtr __{Context.Parameter.Name}Ptr = (__IntPtr)__{Context.Parameter.Name}Memory;");
782-
Context.Before.WriteLine($"{nativeClass}.{cctorName}(__{Context.Parameter.Name}Ptr, {Context.Parameter.Name}.__Instance);");
790+
Context.Before.WriteLine($"{nativeClass}.{cctorName}(__{Context.Parameter.Name}Ptr, {Context.Parameter.Name}.__Instance{defaultValue});");
783791
Context.Return.Write($"__{Context.Parameter.Name}Ptr");
784792

785793
if (Context.Context.ParserOptions.IsItaniumLikeAbi && @class.HasNonTrivialDestructor)

0 commit comments

Comments
 (0)