Browse Source

Recursive Marshaling of value class fields

pull/1/head
marcos henrich 13 years ago
parent
commit
874ea01b0e
  1. 31
      src/Generator/Generators/CLI/CLIMarshal.cs

31
src/Generator/Generators/CLI/CLIMarshal.cs

@ -541,7 +541,32 @@ namespace Cxxi.Generators.CLI @@ -541,7 +541,32 @@ namespace Cxxi.Generators.CLI
@class.QualifiedOriginalName);
SupportBefore.PushIndent();
MarshalValueClassFields(@class, marshalVar);
Return.Write(marshalVar);
if (Context.Parameter.Type.IsPointer())
ArgumentPrefix.Write("&");
}
private void MarshalValueClassFields(Class @class, string marshalVar)
{
foreach (var @base in @class.Bases)
{
if (!@base.IsClass || @base.Class.Ignore)
continue;
var baseClass = @base.Class;
MarshalValueClassFields(baseClass, marshalVar);
}
foreach (var field in @class.Fields)
{
MarshalValueClassField(field, marshalVar);
}
}
private void MarshalValueClassField(Field field, string marshalVar)
{
var fieldRef = string.Format("{0}.{1}", Context.Parameter.Name,
field.Name);
@ -565,12 +590,6 @@ namespace Cxxi.Generators.CLI @@ -565,12 +590,6 @@ namespace Cxxi.Generators.CLI
marshal.Return);
}
Return.Write(marshalVar);
if (Context.Parameter.Type.IsPointer())
ArgumentPrefix.Write("&");
}
public bool VisitFieldDecl(Field field)
{
Context.Parameter = new Parameter

Loading…
Cancel
Save