From a5a2e327554365adedfffb2cc3a3b58505f8cab6 Mon Sep 17 00:00:00 2001 From: Fabio Anderegg Date: Wed, 7 Sep 2022 17:04:29 +0100 Subject: [PATCH] call by value: handle cctors with default parameters --- src/Generator/Generators/CSharp/CSharpMarshal.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Generator/Generators/CSharp/CSharpMarshal.cs b/src/Generator/Generators/CSharp/CSharpMarshal.cs index 6e841fca..21d7279c 100644 --- a/src/Generator/Generators/CSharp/CSharpMarshal.cs +++ b/src/Generator/Generators/CSharp/CSharpMarshal.cs @@ -777,10 +777,18 @@ namespace CppSharp.Generators.CSharp Context.Parameter.Name}"", ""Cannot be null because it is passed by value."");"); var nativeClass = typePrinter.PrintNative(@class); + var cctorName = CSharpSources.GetFunctionNativeIdentifier(Context.Context, cctor); + + var defaultValue = ""; + var TypePrinter = new CSharpTypePrinter(Context.Context); + var ExpressionPrinter = new CSharpExpressionPrinter(TypePrinter); + if (cctor.Parameters.Count > 1) + defaultValue = $", {ExpressionPrinter.VisitParameter(cctor.Parameters.Last())}"; + Context.Before.WriteLine($"byte* __{Context.Parameter.Name}Memory = stackalloc byte[sizeof({nativeClass})];"); Context.Before.WriteLine($"__IntPtr __{Context.Parameter.Name}Ptr = (__IntPtr)__{Context.Parameter.Name}Memory;"); - Context.Before.WriteLine($"{nativeClass}.{cctorName}(__{Context.Parameter.Name}Ptr, {Context.Parameter.Name}.__Instance);"); + Context.Before.WriteLine($"{nativeClass}.{cctorName}(__{Context.Parameter.Name}Ptr, {Context.Parameter.Name}.__Instance{defaultValue});"); Context.Return.Write($"__{Context.Parameter.Name}Ptr"); if (Context.Context.ParserOptions.IsItaniumLikeAbi && @class.HasNonTrivialDestructor)