in SharpGen/Generator/Marshallers/BoolToIntArrayMarshaller.cs [60:108]
public override StatementSyntax GenerateNativeToManaged(CsMarshalBase csElement, bool singleStackFrame)
{
var marshalStorage = GetMarshalStorageLocation(csElement);
StatementSyntax value;
if (singleStackFrame)
{
value = EmitConvertToBoolArray(marshalStorage);
}
else if (csElement is CsField)
{
marshalStorage = PrefixUnaryExpression(SyntaxKind.AddressOfExpression, marshalStorage);
value = FixedStatement(
VariableDeclaration(
GetMarshalTypeSyntax(csElement),
SingletonSeparatedList(
VariableDeclarator(PtrIdentifier, default, EqualsValueClause(marshalStorage))
)
),
EmitConvertToBoolArray(PtrIdentifierName)
);
}
else // Reverse-callbacks
{
value = EmitConvertToBoolArray(marshalStorage);
}
return GenerateNullCheckIfNeeded(csElement, value);
ExpressionStatementSyntax EmitConvertToBoolArray(ExpressionSyntax storage) => ExpressionStatement(
InvocationExpression(
MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
GlobalNamespace.GetTypeNameSyntax(WellKnownName.BooleanHelpers),
IdentifierName("ConvertToBoolArray")
),
ArgumentList(
SeparatedList(
new[]
{
Argument(storage),
Argument(IdentifierName(csElement.Name))
}
)
)
)
);
}