Skip to content

Commit 2555a49

Browse files
Fabio AndereggJordanL8
authored andcommitted
call by value: handle cctors with default parameters
1 parent 60aaf56 commit 2555a49

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
@@ -777,10 +777,18 @@ private void MarshalRefClass(Class @class)
777777
Context.Parameter.Name}"", ""Cannot be null because it is passed by value."");");
778778

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

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

0 commit comments

Comments
 (0)