Browse Source

Refactor some methods to be more re-usable.

pull/1/head
triton 13 years ago
parent
commit
c060a1bdf0
  1. 45
      src/Generator/Generators/CLI/CLISourcesTemplate.cs

45
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using Cxxi.Types;
namespace Cxxi.Generators.CLI
@ -234,9 +235,9 @@ namespace Cxxi.Generators.CLI @@ -234,9 +235,9 @@ namespace Cxxi.Generators.CLI
{
if (!@class.IsAbstract)
{
var @params = GenerateFunctionParamsMarshal(method);
var @params = GenerateFunctionParamsMarshal(method.Parameters, method);
Write("NativePtr = new ::{0}(", method.QualifiedOriginalName);
GenerateFunctionParams(method, @params);
GenerateFunctionParams(@params);
WriteLine(");");
}
}
@ -291,7 +292,7 @@ namespace Cxxi.Generators.CLI @@ -291,7 +292,7 @@ namespace Cxxi.Generators.CLI
WriteLine("auto this0 = (::{0}*) 0;", @class.QualifiedOriginalName);
}
var @params = GenerateFunctionParamsMarshal(function);
var @params = GenerateFunctionParamsMarshal(function.Parameters, function);
if (needsReturn)
Write("auto ret = ");
@ -304,9 +305,6 @@ namespace Cxxi.Generators.CLI @@ -304,9 +305,6 @@ namespace Cxxi.Generators.CLI
if (isValueType)
{
Write("this0->");
Write("{0}(", function.QualifiedOriginalName);
GenerateFunctionParams(function, @params);
WriteLine(");");
}
else
{
@ -318,11 +316,11 @@ namespace Cxxi.Generators.CLI @@ -318,11 +316,11 @@ namespace Cxxi.Generators.CLI
{
Write("::");
}
}
Write("{0}(", function.QualifiedOriginalName);
GenerateFunctionParams(function, @params);
GenerateFunctionParams(@params);
WriteLine(");");
}
if (needsReturn)
{
@ -358,36 +356,35 @@ namespace Cxxi.Generators.CLI @@ -358,36 +356,35 @@ namespace Cxxi.Generators.CLI
public Parameter Param;
}
public List<ParamMarshal> GenerateFunctionParamsMarshal(Function function)
public List<ParamMarshal> GenerateFunctionParamsMarshal(IEnumerable<Parameter> @params,
Function function = null)
{
var @params = new List<ParamMarshal>();
var marshals = new List<ParamMarshal>();
var method = function as Method;
// Do marshaling of parameters
for (var i = 0; i < function.Parameters.Count; ++i)
var paramIndex = 0;
foreach (var param in @params)
{
var param = function.Parameters[i];
GenerateFunctionParamMarshal(function, param, @params, i);
marshals.Add(GenerateFunctionParamMarshal(param, paramIndex, function));
paramIndex++;
}
return @params;
return marshals;
}
private void GenerateFunctionParamMarshal(Function function, Parameter param, List<ParamMarshal> @params, int i)
private ParamMarshal GenerateFunctionParamMarshal(Parameter param, int paramIndex,
Function function = null)
{
if (param.Type is BuiltinType)
{
@params.Add(new ParamMarshal {Name = param.Name, Param = param});
return;
return new ParamMarshal {Name = param.Name, Param = param};
}
var argName = "arg" + i.ToString(CultureInfo.InvariantCulture);
var argName = "arg" + paramIndex.ToString(CultureInfo.InvariantCulture);
var ctx = new MarshalContext()
{
Parameter = param,
ParameterIndex = i,
ParameterIndex = paramIndex,
ArgName = argName,
Function = function
};
@ -409,10 +406,10 @@ namespace Cxxi.Generators.CLI @@ -409,10 +406,10 @@ namespace Cxxi.Generators.CLI
WriteLine(marshal.SupportAfter);
var argText = marshal.ArgumentPrefix + argName;
@params.Add(new ParamMarshal {Name = argText, Param = param});
return new ParamMarshal {Name = argText, Param = param};
}
public void GenerateFunctionParams(Function function, List<ParamMarshal> @params)
public void GenerateFunctionParams(List<ParamMarshal> @params)
{
for (var i = 0; i < @params.Count; ++i)
{

Loading…
Cancel
Save