Browse Source

Fixed the generation of parameters in the C# printer.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/804/head
Dimitar Dobrev 9 years ago
parent
commit
42facd9df1
  1. 22
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 35
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs

22
src/Generator/Generators/CSharp/CSharpSources.cs

@ -2896,29 +2896,9 @@ namespace CppSharp.Generators.CSharp
return paramMarshal; return paramMarshal;
} }
static string GetParameterUsage(ParameterUsage usage)
{
switch (usage)
{
case ParameterUsage.Out:
return "out ";
case ParameterUsage.InOut:
return "ref ";
default:
return string.Empty;
}
}
private string FormatMethodParameters(IEnumerable<Parameter> @params) private string FormatMethodParameters(IEnumerable<Parameter> @params)
{ {
return string.Join(", ", return TypePrinter.VisitParameters(@params, true).Type;
from param in @params
where param.Kind != ParameterKind.IndirectReturnType && !param.Ignore
let typeName = param.CSharpType(TypePrinter)
select string.Format("{0}{1} {2}", GetParameterUsage(param.Usage),
typeName, param.Name +
(param.DefaultArgument == null || !Options.GenerateDefaultValuesForArguments ?
string.Empty : " = " + ExpressionPrinter.VisitParameter(param))));
} }
#endregion #endregion

35
src/Generator/Generators/CSharp/CSharpTypePrinter.cs

@ -692,7 +692,9 @@ namespace CppSharp.Generators.CSharp
{ {
var args = new List<string>(); var args = new List<string>();
foreach (var param in @params) foreach (var param in @params.Where(
p => ContextKind == TypePrinterContextKind.Native ||
(p.Kind != ParameterKind.IndirectReturnType && !p.Ignore)))
{ {
TypePrinterContext.Parameter = param; TypePrinterContext.Parameter = param;
args.Add(VisitParameter(param, hasNames).Type); args.Add(VisitParameter(param, hasNames).Type);
@ -702,15 +704,15 @@ namespace CppSharp.Generators.CSharp
return string.Join(", ", args); return string.Join(", ", args);
} }
public override TypePrinterResult VisitParameter(Parameter arg, bool hasName) public override TypePrinterResult VisitParameter(Parameter param, bool hasName)
{ {
var type = arg.Type.Visit(this, arg.QualifiedType.Qualifiers); var usage = ContextKind == TypePrinterContextKind.Native ?
var name = arg.Name; string.Empty : GetParameterUsage(param.Usage);
var type = param.Type.Visit(this, param.QualifiedType.Qualifiers);
if (hasName && !string.IsNullOrEmpty(name)) var name = param.Name;
return string.Format("{0} {1}", type, name); if (param.DefaultArgument == null || !Options.GenerateDefaultValuesForArguments)
return $"{usage}{type} {name}";
return type; return $"{usage}{type} {name} = {expressionPrinter.VisitParameter(param)}";
} }
public override TypePrinterResult VisitDelegate(FunctionType function) public override TypePrinterResult VisitDelegate(FunctionType function)
@ -756,6 +758,21 @@ namespace CppSharp.Generators.CSharp
{ {
return vectorType.ElementType.Visit(this); return vectorType.ElementType.Visit(this);
} }
private static string GetParameterUsage(ParameterUsage usage)
{
switch (usage)
{
case ParameterUsage.Out:
return "out ";
case ParameterUsage.InOut:
return "ref ";
default:
return string.Empty;
}
}
private CSharpExpressionPrinter expressionPrinter => new CSharpExpressionPrinter(this);
} }
public static class CSharpTypePrinterExtensions public static class CSharpTypePrinterExtensions

Loading…
Cancel
Save