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

Loading…
Cancel
Save