|
|
|
@ -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 |
|
|
|
|