|
|
|
|
@ -348,45 +348,48 @@ namespace Cxxi.Generators.CLI
@@ -348,45 +348,48 @@ namespace Cxxi.Generators.CLI
|
|
|
|
|
for (var i = 0; i < function.Parameters.Count; ++i) |
|
|
|
|
{ |
|
|
|
|
var param = function.Parameters[i]; |
|
|
|
|
|
|
|
|
|
if (param.Type is BuiltinType) |
|
|
|
|
{ |
|
|
|
|
@params.Add(new ParamMarshal {Name = param.Name, Param = param}); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
var argName = "arg" + i.ToString(CultureInfo.InvariantCulture); |
|
|
|
|
GenerateFunctionParamMarshal(function, param, @params, i); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var ctx = new MarshalContext() |
|
|
|
|
{ |
|
|
|
|
Parameter = param, |
|
|
|
|
ParameterIndex = i, |
|
|
|
|
ArgName = argName, |
|
|
|
|
Function = function |
|
|
|
|
}; |
|
|
|
|
return @params; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var marshal = new CLIMarshalManagedToNativePrinter(Driver.TypeDatabase, |
|
|
|
|
ctx); |
|
|
|
|
private void GenerateFunctionParamMarshal(Function function, Parameter param, List<ParamMarshal> @params, int i) |
|
|
|
|
{ |
|
|
|
|
if (param.Type is BuiltinType) |
|
|
|
|
{ |
|
|
|
|
@params.Add(new ParamMarshal {Name = param.Name, Param = param}); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
param.Visit(marshal); |
|
|
|
|
var argName = "arg" + i.ToString(CultureInfo.InvariantCulture); |
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(marshal.Return)) |
|
|
|
|
throw new Exception("Cannot marshal argument of function"); |
|
|
|
|
var ctx = new MarshalContext() |
|
|
|
|
{ |
|
|
|
|
Parameter = param, |
|
|
|
|
ParameterIndex = i, |
|
|
|
|
ArgName = argName, |
|
|
|
|
Function = function |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(marshal.SupportBefore)) |
|
|
|
|
WriteLine(marshal.SupportBefore); |
|
|
|
|
var marshal = new CLIMarshalManagedToNativePrinter(Driver.TypeDatabase, |
|
|
|
|
ctx); |
|
|
|
|
|
|
|
|
|
WriteLine("auto {0} = {1};", argName, marshal.Return); |
|
|
|
|
param.Visit(marshal); |
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(marshal.SupportAfter)) |
|
|
|
|
WriteLine(marshal.SupportAfter); |
|
|
|
|
if (string.IsNullOrEmpty(marshal.Return)) |
|
|
|
|
throw new Exception("Cannot marshal argument of function"); |
|
|
|
|
|
|
|
|
|
var argText = marshal.ArgumentPrefix + argName; |
|
|
|
|
@params.Add(new ParamMarshal { Name = argText, Param = param }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!string.IsNullOrWhiteSpace(marshal.SupportBefore)) |
|
|
|
|
WriteLine(marshal.SupportBefore); |
|
|
|
|
|
|
|
|
|
return @params; |
|
|
|
|
WriteLine("auto {0} = {1};", argName, marshal.Return); |
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(marshal.SupportAfter)) |
|
|
|
|
WriteLine(marshal.SupportAfter); |
|
|
|
|
|
|
|
|
|
var argText = marshal.ArgumentPrefix + argName; |
|
|
|
|
@params.Add(new ParamMarshal {Name = argText, Param = param}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void GenerateFunctionParams(Function function, List<ParamMarshal> @params) |
|
|
|
|
|