Browse Source

Re-organize the class marshaling code a bit to make it easier to follow.

pull/1/head
triton 13 years ago
parent
commit
f75d16456e
  1. 44
      src/Generator/Generators/CLI/CLIMarshal.cs

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

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

Loading…
Cancel
Save