Browse Source

Pass the parameter information to the marshal context so that we can correctly treat function conversions.

pull/1/head
triton 13 years ago
parent
commit
f426f6af2f
  1. 26
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  2. 2
      src/Generator/Types/TypeMap.cs

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

@ -270,6 +270,16 @@ namespace Cxxi.Generators.CLI
} }
} }
private static bool IsInstanceFunction(Function function)
{
var isInstanceFunction = false;
var method = function as Method;
if (method != null)
isInstanceFunction = method.Conversion == MethodConversionType.None;
return isInstanceFunction;
}
public struct ParamMarshal public struct ParamMarshal
{ {
public string Name; public string Name;
@ -280,6 +290,8 @@ namespace Cxxi.Generators.CLI
{ {
var @params = new List<ParamMarshal>(); var @params = new List<ParamMarshal>();
var method = function as Method;
// Do marshaling of parameters // Do marshaling of parameters
for (var i = 0; i < function.Parameters.Count; ++i) for (var i = 0; i < function.Parameters.Count; ++i)
{ {
@ -292,8 +304,18 @@ namespace Cxxi.Generators.CLI
else else
{ {
var argName = "arg" + i.ToString(CultureInfo.InvariantCulture); var argName = "arg" + i.ToString(CultureInfo.InvariantCulture);
var ctx = new MarshalContext() { Parameter = param, ArgName = argName };
var marshal = new CLIMarshalManagedToNativePrinter(Generator, ctx); var ctx = new MarshalContext()
{
Parameter = param,
ParameterIndex = i,
ArgName = argName,
Function = function
};
var marshal = new CLIMarshalManagedToNativePrinter(Generator.TypeMapDatabase,
ctx);
param.Visit(marshal); param.Visit(marshal);
if (string.IsNullOrEmpty(marshal.Return)) if (string.IsNullOrEmpty(marshal.Return))

2
src/Generator/Types/TypeMap.cs

@ -10,6 +10,8 @@ namespace Cxxi.Types
public string ReturnVarName { get; set; } public string ReturnVarName { get; set; }
public Type ReturnType { get; set; } public Type ReturnType { get; set; }
public Parameter Parameter { get; set; } public Parameter Parameter { get; set; }
public int ParameterIndex { get; set; }
public Function Function { get; set; }
} }
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]

Loading…
Cancel
Save