Browse Source

Simplified generated code dealing with hidden structure parameters.

pull/45/merge
triton 12 years ago
parent
commit
62078d449e
  1. 39
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs

39
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -1628,16 +1628,15 @@ namespace CppSharp.Generators.CSharp
var needsFixedThis = needsInstance && isValueType; var needsFixedThis = needsInstance && isValueType;
var @params = GenerateFunctionParamsMarshal(parameters, function); var @params = GenerateFunctionParamsMarshal(parameters, function);
Class retClass = null;
if (function.HasHiddenStructParameter) if (function.HasHiddenStructParameter)
{ {
var hiddenParam = function.Parameters[0]; var hiddenParam = function.Parameters[0];
if (hiddenParam.Kind != ParameterKind.HiddenStructureReturn) if (hiddenParam.Kind != ParameterKind.HiddenStructureReturn)
throw new NotSupportedException("Expected hidden structure parameter kind"); throw new NotSupportedException("Expected hidden structure parameter kind");
Class retClass = null;
hiddenParam.Type.Desugar().IsTagDecl(out retClass); hiddenParam.Type.Desugar().IsTagDecl(out retClass);
WriteLine("var {0} = new {1}.Internal();", GeneratedIdentifier("udt"), WriteLine("var ret = new {0}.Internal();", retClass.OriginalName);
retClass.OriginalName);
} }
var names = new List<string>(); var names = new List<string>();
@ -1654,7 +1653,7 @@ namespace CppSharp.Generators.CSharp
if (function.HasHiddenStructParameter) if (function.HasHiddenStructParameter)
{ {
var name = string.Format("new IntPtr(&{0})", GeneratedIdentifier("udt")); var name = string.Format("new IntPtr(&ret)");
names.Insert(0, name); names.Insert(0, name);
} }
@ -1702,30 +1701,20 @@ namespace CppSharp.Generators.CSharp
if (needsReturn) if (needsReturn)
{ {
if (function.HasHiddenStructParameter) var ctx = new CSharpMarshalContext(Driver)
{
WriteLine("var ret = new {0}({1});", retClass.Name,
GeneratedIdentifier("udt"));
WriteLine("return ret;");
}
else
{ {
var ctx = new CSharpMarshalContext(Driver) ArgName = "ret",
{ ReturnVarName = "ret",
ArgName = "ret", ReturnType = retType
ReturnVarName = "ret", };
ReturnType = retType
};
var marshal = new CSharpMarshalNativeToManagedPrinter(ctx); var marshal = new CSharpMarshalNativeToManagedPrinter(ctx);
function.ReturnType.CSharpMarshalToManaged(marshal); retType.CSharpMarshalToManaged(marshal);
if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore)) if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore))
Write(marshal.Context.SupportBefore); Write(marshal.Context.SupportBefore);
WriteLine("return {0};", marshal.Context.Return); WriteLine("return {0};", marshal.Context.Return);
}
} }
} }
@ -2146,7 +2135,7 @@ namespace CppSharp.Generators.CSharp
} }
WriteLine("public static extern {0} {1}({2});", retType, WriteLine("public static extern {0} {1}({2});", retType,
GetFunctionIdentifier(function), GetFunctionNativeIdentifier(function),
string.Join(", ", @params)); string.Join(", ", @params));
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);

Loading…
Cancel
Save