Browse Source

Split the creation of internal parameters from their string representation.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/256/merge
Dimitar Dobrev 10 years ago
parent
commit
3cb44dcef0
  1. 73
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs

73
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -597,51 +597,82 @@ namespace CppSharp.Generators.CSharp
return functions; return functions;
} }
private List<string> GatherInternalParams(Function function, out CSharpTypePrinterResult retType) private IEnumerable<Parameter> GatherInternalParams(Function function, bool useOriginalParamNames = true)
{ {
var @params = new List<string>(); var @params = new List<Parameter>();
TypePrinter.PushContext(CSharpTypePrinterContextKind.Native);
var retParam = new Parameter { QualifiedType = function.ReturnType };
retType = retParam.CSharpType(TypePrinter);
var method = function as Method; var method = function as Method;
var isInstanceMethod = method != null && !method.IsStatic; var isInstanceMethod = method != null && !method.IsStatic;
var pointer = new QualifiedType(new PointerType(new QualifiedType(new BuiltinType(PrimitiveType.Void))));
if (isInstanceMethod && Options.IsMicrosoftAbi) if (isInstanceMethod && Options.IsMicrosoftAbi)
{ {
@params.Add("global::System.IntPtr instance"); @params.Add(new Parameter
{
if (method.IsConstructor) QualifiedType = pointer,
retType = "global::System.IntPtr"; Name = "instance"
});
} }
if (!function.HasIndirectReturnTypeParameter && if (!function.HasIndirectReturnTypeParameter &&
isInstanceMethod && Options.IsItaniumLikeAbi) isInstanceMethod && Options.IsItaniumLikeAbi)
@params.Add("global::System.IntPtr instance");
foreach (var param in function.Parameters)
{ {
if (param.Kind == ParameterKind.OperatorParameter) @params.Add(new Parameter
continue; {
QualifiedType = pointer,
var typeName = param.CSharpType(TypePrinter); Name = "instance"
});
}
@params.Add(string.Format("{0} {1}", typeName, param.Name)); var i = 0;
foreach (var param in function.Parameters.Where(p => p.Kind != ParameterKind.OperatorParameter))
{
@params.Add(new Parameter
{
QualifiedType = param.QualifiedType,
Kind = param.Kind,
Usage = param.Usage,
Name = useOriginalParamNames ? param.Name : "arg" + ++i
});
if (param.Kind == ParameterKind.IndirectReturnType && if (param.Kind == ParameterKind.IndirectReturnType &&
isInstanceMethod && Options.IsItaniumLikeAbi) isInstanceMethod && Options.IsItaniumLikeAbi)
@params.Add("global::System.IntPtr instance"); {
@params.Add(new Parameter
{
QualifiedType = pointer,
Name = "instance"
});
}
} }
if (method != null && method.IsConstructor) if (method != null && method.IsConstructor)
{ {
var @class = (Class) method.Namespace; var @class = (Class) method.Namespace;
if (Options.IsMicrosoftAbi && @class.Layout.HasVirtualBases) if (Options.IsMicrosoftAbi && @class.Layout.HasVirtualBases)
@params.Add("int " + GeneratedIdentifier("forBases")); {
@params.Add(new Parameter
{
QualifiedType = new QualifiedType(new BuiltinType(PrimitiveType.Int)),
Name = GeneratedIdentifier("forBases")
});
}
} }
return @params;
}
private IEnumerable<string> GatherInternalParams(Function function, out CSharpTypePrinterResult retType)
{
TypePrinter.PushContext(CSharpTypePrinterContextKind.Native);
var retParam = new Parameter { QualifiedType = function.ReturnType };
retType = retParam.CSharpType(TypePrinter);
var @params = GatherInternalParams(function).Select(p =>
string.Format("{0} {1}", p.CSharpType(TypePrinter), p.Name)).ToList();
TypePrinter.PopContext(); TypePrinter.PopContext();
return @params; return @params;

Loading…
Cancel
Save