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
@class.QualifiedOriginalName); @class.QualifiedOriginalName);
SupportBefore.PushIndent(); 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) 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, var fieldRef = string.Format("{0}.{1}", Context.Parameter.Name,
field.Name); field.Name);
@ -565,12 +590,6 @@ namespace Cxxi.Generators.CLI
marshal.Return); marshal.Return);
} }
Return.Write(marshalVar);
if (Context.Parameter.Type.IsPointer())
ArgumentPrefix.Write("&");
}
public bool VisitFieldDecl(Field field) public bool VisitFieldDecl(Field field)
{ {
Context.Parameter = new Parameter Context.Parameter = new Parameter

Loading…
Cancel
Save