Browse Source

Extract the function parameter marshal logic into its own method.

pull/1/head
triton 13 years ago
parent
commit
901c0a6832
  1. 61
      src/Generator/Generators/CLI/CLISourcesTemplate.cs

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

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

Loading…
Cancel
Save