|
|
|
@ -417,13 +417,13 @@ namespace Cxxi.Generators.CLI
@@ -417,13 +417,13 @@ namespace Cxxi.Generators.CLI
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (MarshalRefClass()) return true; |
|
|
|
|
MarshalRefClass(@class); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private bool MarshalRefClass() |
|
|
|
|
private void MarshalRefClass(Class @class) |
|
|
|
|
{ |
|
|
|
|
if (!Context.Parameter.Type.IsPointer()) |
|
|
|
|
Return.Write("*"); |
|
|
|
@ -434,11 +434,10 @@ namespace Cxxi.Generators.CLI
@@ -434,11 +434,10 @@ namespace Cxxi.Generators.CLI
|
|
|
|
|
&& Context.ParameterIndex == 0) |
|
|
|
|
{ |
|
|
|
|
Return.Write("NativePtr"); |
|
|
|
|
return true; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Return.Write("{0}->NativePtr", Context.Parameter.Name); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void MarshalValueClass(Class @class) |
|
|
|
@ -450,32 +449,31 @@ namespace Cxxi.Generators.CLI
@@ -450,32 +449,31 @@ namespace Cxxi.Generators.CLI
|
|
|
|
|
argName, @class.OriginalName, |
|
|
|
|
Context.Parameter.Name); |
|
|
|
|
Return.Write("*{0}", argName); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
SupportAfter.PushIndent(); |
|
|
|
|
|
|
|
|
|
foreach (var field in @class.Fields) |
|
|
|
|
{ |
|
|
|
|
SupportAfter.Write("{0}.{1} = ", Context.ArgName, |
|
|
|
|
field.OriginalName); |
|
|
|
|
SupportAfter.PushIndent(); |
|
|
|
|
|
|
|
|
|
var fieldRef = string.Format("{0}.{1}", Context.Parameter.Name, |
|
|
|
|
field.Name); |
|
|
|
|
|
|
|
|
|
var marshalCtx = new MarshalContext() {ArgName = fieldRef}; |
|
|
|
|
var marshal = new CLIMarshalManagedToNativePrinter(TypeMapDatabase, |
|
|
|
|
marshalCtx); |
|
|
|
|
field.Visit(marshal); |
|
|
|
|
foreach (var field in @class.Fields) |
|
|
|
|
{ |
|
|
|
|
SupportAfter.Write("{0}.{1} = ", Context.ArgName, |
|
|
|
|
field.OriginalName); |
|
|
|
|
|
|
|
|
|
SupportAfter.WriteLine("{0};", marshal.Return); |
|
|
|
|
} |
|
|
|
|
var fieldRef = string.Format("{0}.{1}", Context.Parameter.Name, |
|
|
|
|
field.Name); |
|
|
|
|
|
|
|
|
|
Return.Write("::{0}()", @class.QualifiedOriginalName); |
|
|
|
|
var marshalCtx = new MarshalContext() {ArgName = fieldRef}; |
|
|
|
|
var marshal = new CLIMarshalManagedToNativePrinter(TypeMapDatabase, |
|
|
|
|
marshalCtx); |
|
|
|
|
field.Visit(marshal); |
|
|
|
|
|
|
|
|
|
if (Context.Parameter.Type.IsPointer()) |
|
|
|
|
ArgumentPrefix.Write("&"); |
|
|
|
|
SupportAfter.WriteLine("{0};", marshal.Return); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Return.Write("::{0}()", @class.QualifiedOriginalName); |
|
|
|
|
|
|
|
|
|
if (Context.Parameter.Type.IsPointer()) |
|
|
|
|
ArgumentPrefix.Write("&"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public bool VisitFieldDecl(Field field) |
|
|
|
|