Exemple #1
0
 /// <summary>
 /// Gets the return type for the unmanaged signature that represents the provided <paramref name="info"/>.
 /// </summary>
 /// <param name="generator">The marshalling generator for this <paramref name="info"/></param>
 /// <param name="info">Object to marshal</param>
 public static TypeSyntax AsReturnType(this IMarshallingGenerator generator, TypePositionInfo info)
 {
     return(generator.GetNativeSignatureBehavior(info) switch
     {
         SignatureBehavior.ManagedTypeAndAttributes => info.ManagedType.Syntax,
         SignatureBehavior.NativeType => generator.AsNativeType(info),
         SignatureBehavior.PointerToNativeType => PointerType(generator.AsNativeType(info)),
         _ => throw new InvalidOperationException()
     });
Exemple #2
0
        /// <summary>
        /// Gets any attributes that should be applied to the return type for this <paramref name="info"/>.
        /// </summary>
        /// <param name="generator">The marshalling generator for this <paramref name="info"/></param>
        /// <param name="info">Object to marshal</param>
        /// <returns>Attributes for the return type for this <paramref name="info"/>, or <c>null</c> if no attributes should be added.</returns>
        public static AttributeListSyntax? GenerateAttributesForReturnType(this IMarshallingGenerator generator, TypePositionInfo info)
        {
            if (generator.GetNativeSignatureBehavior(info) != SignatureBehavior.ManagedTypeAndAttributes)
            {
                return null;
            }

            if (!TryRehydrateMarshalAsAttribute(info, out AttributeSyntax marshalAsAttribute))
            {
                return null;
            }
            return AttributeList(SingletonSeparatedList(marshalAsAttribute));
        }
Exemple #3
0
 /// <summary>
 /// Gets a parameter for the unmanaged signature that represents the provided <paramref name="info"/>.
 /// </summary>
 /// <param name="generator">The marshalling generator for this <paramref name="info"/></param>
 /// <param name="info">Object to marshal</param>
 public static ParameterSyntax AsParameter(this IMarshallingGenerator generator, TypePositionInfo info)
 {
     SignatureBehavior behavior = generator.GetNativeSignatureBehavior(info);
     if (behavior == SignatureBehavior.ManagedTypeAndAttributes)
     {
         return GenerateForwardingParameter(info);
     }
     return Parameter(Identifier(info.InstanceIdentifier))
         .WithType(behavior switch
         {
             SignatureBehavior.NativeType => generator.AsNativeType(info),
             SignatureBehavior.PointerToNativeType => PointerType(generator.AsNativeType(info)),
             _ => throw new InvalidOperationException()
         });
Exemple #4
0
 public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info)
 {
     return(_manualMarshallingGenerator.GetNativeSignatureBehavior(info));
 }
Exemple #5
0
 public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => _inner.GetNativeSignatureBehavior(info);