in SharpGen/Generator/FunctionCodeGenerator.cs [14:77]
public IEnumerable<MemberDeclarationSyntax> GenerateCode(CsFunction csElement)
{
foreach (var member in Generators.Callable.GenerateCode(csElement))
{
yield return member;
}
foreach (var sig in csElement.InteropSignatures)
{
yield return MethodDeclaration(ParseTypeName(sig.Value.ReturnType.TypeName), $"{csElement.CppElementName}{GeneratorHelpers.GetPlatformSpecificSuffix(sig.Key)}")
.WithModifiers(
TokenList(
Token(SyntaxKind.PrivateKeyword),
Token(SyntaxKind.UnsafeKeyword),
Token(SyntaxKind.StaticKeyword),
Token(SyntaxKind.ExternKeyword)))
.WithAttributeLists(SingletonList(AttributeList(SingletonSeparatedList(
Attribute(
QualifiedName(
QualifiedName(
QualifiedName(
IdentifierName("System"),
IdentifierName("Runtime")),
IdentifierName("InteropServices")),
IdentifierName("DllImportAttribute")))
.WithArgumentList(
AttributeArgumentList(
SeparatedList(
new[]
{
AttributeArgument(
IdentifierName(csElement.DllName)),
AttributeArgument(
LiteralExpression(
SyntaxKind.StringLiteralExpression,
Literal(csElement.CppElementName)))
.WithNameEquals(
NameEquals(
IdentifierName("EntryPoint"))),
AttributeArgument(
MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
IdentifierName("System"),
IdentifierName("Runtime")),
IdentifierName("InteropServices")),
IdentifierName("CallingConvention")),
IdentifierName(csElement.CppCallingConvention.ToManagedCallingConventionName())))
.WithNameEquals(
NameEquals(
IdentifierName("CallingConvention")))
})))))))
.WithParameterList(ParameterList(SeparatedList(
sig.Value.ParameterTypes.Select(param =>
Parameter(Identifier(param.Name))
.WithType(param.InteropTypeSyntax)))))
.WithSemicolonToken(Token(SyntaxKind.SemicolonToken));
}
}