13 instantiations of TypePositionInfo
Microsoft.Interop.ComInterfaceGenerator (4)
ComInterfaceGenerator.cs (1)
315new TypePositionInfo(SpecialTypeInfo.Int32, new ManagedHResultExceptionMarshallingInfo())
ManagedToNativeVTableMethodGenerator.cs (1)
56newArgTypes.Add(new TypePositionInfo(new PointerTypeInfo("void*", "void*", false), NoMarshallingInfo.Instance)
VirtualMethodPointerStubGenerator.cs (2)
116elements.Add(new TypePositionInfo(methodStub.TypeKeyOwner, methodStub.ManagedThisMarshallingInfo) 132new TypePositionInfo(
Microsoft.Interop.SourceGeneration (9)
BoundGenerators.cs (1)
25BoundGenerator defaultBoundGenerator = new BoundGenerator(new TypePositionInfo(SpecialTypeInfo.Void, NoMarshallingInfo.Instance), fallbackGenerator);
Marshalling\AttributedMarshallingModelGeneratorResolver.cs (1)
308var elementInfo = new TypePositionInfo(marshallerData.CollectionElementType, marshallerData.CollectionElementMarshallingInfo)
Marshalling\StatefulMarshallingStrategy.cs (1)
441new TypePositionInfo(SpecialTypeInfo.Int32, NoMarshallingInfo.Instance)
Marshalling\StatelessMarshallingStrategy.cs (1)
453new TypePositionInfo(SpecialTypeInfo.Int32, NoMarshallingInfo.Instance)
MarshallingInfoParser.cs (2)
316info = new TypePositionInfo(SpecialTypeInfo.Void, NoMarshallingInfo.Instance); 345info = new TypePositionInfo(SpecialTypeInfo.Void, NoMarshallingInfo.Instance);
MethodSignatureElementInfoProvider.cs (1)
33info = new TypePositionInfo(
SignatureContext.cs (1)
122TypePositionInfo retTypeInfo = new(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(method.ReturnType), marshallingInfoParser.ParseMarshallingInfo(method.ReturnType, method.GetReturnTypeAttributes()));
TypePositionInfo.cs (1)
87var typeInfo = new TypePositionInfo(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(paramSymbol.Type), marshallingInfo)
498 references to TypePositionInfo
Microsoft.Interop.ComInterfaceGenerator (59)
Analyzers\ConvertComImportToGeneratedComInterfaceAnalyzer.cs (4)
175private static bool HasUnsupportedMarshalAsInfo(TypePositionInfo info) 191private readonly Func<TypePositionInfo, StubCodeContext, ResolvedGenerator> _func; 193public CallbackGeneratorResolver(Func<TypePositionInfo, StubCodeContext, ResolvedGenerator> func) 198public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) => _func(info, context);
ComInterfaceGenerator.cs (6)
277ImmutableArray<TypePositionInfo> returnSwappedSignatureElements = signatureContext.ElementTypeInformation; 298var managedSignatureAsNativeOut = returnSwappedSignatureElements[i] with 301ManagedIndex = TypePositionInfo.ReturnIndex, 317NativeIndex = TypePositionInfo.ReturnIndex 326TypePositionInfo? managedReturnInfo = signatureContext.ElementTypeInformation.FirstOrDefault(e => e.IsManagedReturnPosition); 342foreach (TypePositionInfo parameter in signatureContext.ManagedParameters)
ManagedToNativeVTableMethodGenerator.cs (6)
46ImmutableArray<TypePositionInfo> argTypes, 55ImmutableArray<TypePositionInfo>.Builder newArgTypes = ImmutableArray.CreateBuilder<TypePositionInfo>(argTypes.Length + 1); 61foreach (var arg in argTypes) 67TypePositionInfo.UnsetIndex or TypePositionInfo.ReturnIndex => arg.NativeIndex,
Marshallers\ComInterfaceDispatchMarshallingResolver.cs (7)
19public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 24public ManagedTypeInfo AsNativeType(TypePositionInfo info) => 29public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 54public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; 55public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.NativeIdentifier; 56public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 58public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true;
Marshallers\ManagedHResultExceptionGeneratorResolver.cs (13)
29public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 48public ManagedTypeInfo AsNativeType(TypePositionInfo info) => info.ManagedType; 49public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 67public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; 68public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier; 69public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 71public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => false; 76public ManagedTypeInfo AsNativeType(TypePositionInfo info) => info.ManagedType; 77public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 104public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; 105public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier; 106public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 108public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => false;
Marshallers\ObjectUnwrapperResolver.cs (7)
17public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 22public ManagedTypeInfo AsNativeType(TypePositionInfo info) => new PointerTypeInfo("void*", "void*", false); 23public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 49public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.NativeType; 50public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.NativeIdentifier; 51public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 53public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true;
Marshallers\StructAsHResultMarshallerFactory.cs (7)
17public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 30public ManagedTypeInfo AsNativeType(TypePositionInfo info) => SpecialTypeInfo.Int32; 32public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 79public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 84public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 94public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 97public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true;
UnmanagedToManagedStubGenerator.cs (1)
23ImmutableArray<TypePositionInfo> argTypes,
VirtualMethodPointerStubGenerator.cs (8)
70ImmutableArray<TypePositionInfo> elements = AddImplicitElementInfos(methodStub); 110private static ImmutableArray<TypePositionInfo> AddImplicitElementInfos(IncrementalMethodStubGenerationContext methodStub) 112ImmutableArray<TypePositionInfo> originalElements = methodStub.SignatureContext.ElementTypeInformation; 114var elements = ImmutableArray.CreateBuilder<TypePositionInfo>(originalElements.Length + 2); 121foreach (TypePositionInfo element in originalElements) 125NativeIndex = TypePositionInfo.IncrementIndex(element.NativeIndex) 137ManagedIndex = TypePositionInfo.ExceptionIndex, 138NativeIndex = TypePositionInfo.ReturnIndex
Microsoft.Interop.JavaScript.JSImportGenerator (31)
JSExportCodeGenerator.cs (1)
23ImmutableArray<TypePositionInfo> argTypes,
JSGeneratorFactory.cs (3)
16public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 36bool isToJs = info.ManagedIndex != TypePositionInfo.ReturnIndex ^ context is JSExportCodeContext; 96internal static ResolvedGenerator Create(TypePositionInfo info, bool isToJs, KnownManagedType marshaledType, KnownManagedType[] argumentTypes, JSTypeFlags jsType, JSTypeFlags[] jsTypeArguments, Func<string, ResolvedGenerator> failWithReason)
JSImportCodeGenerator.cs (1)
30ImmutableArray<TypePositionInfo> argTypes,
JSSignatureContext.cs (1)
53foreach (var param in sigContext.ElementTypeInformation)
JSStubCodeContext.cs (1)
15public override (string managed, string native) GetIdentifiers(TypePositionInfo info)
Marshaling\ArrayJSGenerator.cs (1)
22public override IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context)
Marshaling\ArraySegmentJSGenerator.cs (1)
21public override IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context)
Marshaling\BaseJSGenerator.cs (7)
24public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _inner.AsNativeType(info); 25public virtual bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _inner.UsesNativeIdentifier(info, context); 26public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => _inner.GetNativeSignatureBehavior(info); 27public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => _inner.GetValueBoundaryBehavior(info, context); 28public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 31public virtual IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context) 36public virtual IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context)
Marshaling\EmptyJSGenerator.cs (7)
12public ManagedTypeInfo AsNativeType(TypePositionInfo info) => info.ManagedType; 13public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 14public IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context) => Array.Empty<ExpressionSyntax>(); 15public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => SignatureBehavior.ManagedTypeAndAttributes; 16public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier; 17public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 19public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => false;
Marshaling\FuncJSGenerator.cs (2)
26public override IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context) 32public override IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context)
Marshaling\IJSMarshallingGenerator.cs (1)
11IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context);
Marshaling\NullableJSGenerator.cs (1)
18public override IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context)
Marshaling\PrimitiveJSGenerator.cs (1)
25public override IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context)
Marshaling\SpanJSGenerator.cs (1)
21public override IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context)
Marshaling\TaskJSGenerator.cs (2)
22public override IEnumerable<ExpressionSyntax> GenerateBind(TypePositionInfo info, StubCodeContext context) 36public override IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context)
Microsoft.Interop.LibraryImportGenerator (7)
Analyzers\ConvertToLibraryImportAnalyzer.cs (4)
186private static bool HasUnsupportedMarshalAsInfo(TypePositionInfo info) 217private readonly Func<TypePositionInfo, StubCodeContext, ResolvedGenerator> _func; 219public CallbackGeneratorResolver(Func<TypePositionInfo, StubCodeContext, ResolvedGenerator> func) 224public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) => _func(info, context);
ForwarderResolver.cs (1)
14public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) => ResolvedGenerator.Resolved(s_forwarder);
LibraryImportGenerator.cs (1)
333foreach (TypePositionInfo typeInfo in pinvokeStub.SignatureContext.ElementTypeInformation)
PInvokeStubCodeGenerator.cs (1)
49ImmutableArray<TypePositionInfo> argTypes,
Microsoft.Interop.SourceGeneration (401)
BoundGenerators.cs (12)
17public readonly record struct BoundGenerator(TypePositionInfo TypeInfo, IMarshallingGenerator Generator); 23public static BoundGenerators Create(ImmutableArray<TypePositionInfo> elementTypeInfo, IMarshallingGeneratorResolver generatorResolver, StubCodeContext context, IMarshallingGenerator fallbackGenerator, out ImmutableArray<GeneratorDiagnostic> generatorBindingDiagnostics) 35TypePositionInfo? managedExceptionInfo = null; 37foreach (TypePositionInfo argType in elementTypeInfo) 61if (!TypePositionInfo.IsSpecialIndex(argType.ManagedIndex)) 65if (!TypePositionInfo.IsSpecialIndex(argType.NativeIndex)) 132static IEnumerable<(bool IsManagedIndex, int Index)> GetInfoDependencies(TypePositionInfo info) 135if (info.ManagedIndex == TypePositionInfo.UnsetIndex) 143static (bool IsManagedIndex, int Index) GetInfoIndex(TypePositionInfo info) 149if (info.ManagedIndex != TypePositionInfo.UnsetIndex) 156IMarshallingGenerator CreateGenerator(TypePositionInfo p, IMarshallingGeneratorResolver factory) 206public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context)
GeneratorDiagnosticsBag.cs (1)
29/// <param name="locations">A provider of locations for diagnostics on <see cref="TypePositionInfo"/>s.</param>
LinearCollectionElementMarshallingCodeContext.cs (2)
46public override (string managed, string native) GetIdentifiers(TypePositionInfo info) 54public override string GetAdditionalIdentifier(TypePositionInfo info, string name)
ManagedToNativeStubCodeContext.cs (2)
27public override (string managed, string native) GetIdentifiers(TypePositionInfo info) 47Debug.Assert(info.ManagedIndex == TypePositionInfo.UnsetIndex);
MarshalAsParser.cs (1)
143if (!elementInfoProvider.TryGetInfoForParamIndex(attributeData, (short)sizeParamIndexArg.Value!, marshallingInfoCallback, out TypePositionInfo paramIndexInfo))
Marshalling\AttributedMarshallingModelGeneratorResolver.cs (15)
46public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 88private ExpressionOrNotSupported GetNumElementsExpressionFromMarshallingInfo(TypePositionInfo info, CountInfo count, StubCodeContext context) 96case SizeAndParamIndexInfo(SizeAndParamIndexInfo.UnspecifiedConstSize, TypePositionInfo param): 105case SizeAndParamIndexInfo(int size, TypePositionInfo param): 116case CountElementCountInfo(TypePositionInfo elementInfo): 137ExpressionOrNotSupported GetExpressionForParam(TypePositionInfo paramInfo, out bool isIntType) 182static ExpressionSyntax GetIndexedNumElementsExpression(StubCodeContext context, TypePositionInfo numElementsInfo, out int numIndirectionLevels) 227private CustomTypeMarshallerData GetMarshallerDataForTypePositionInfo(CustomTypeMarshallers marshallers, TypePositionInfo info, StubCodeContext context) 240private ResolvedGenerator CreateCustomNativeTypeMarshaller(TypePositionInfo info, StubCodeContext context, NativeMarshallingAttributeInfo marshalInfo) 303TypePositionInfo info, 308var elementInfo = new TypePositionInfo(marshallerData.CollectionElementType, marshallerData.CollectionElementMarshallingInfo) 461private static FreeStrategy GetFreeStrategy(TypePositionInfo info, StubCodeContext context) 487private static ElementsMarshalling CreateElementsMarshalling(CustomTypeMarshallerData marshallerData, TypePositionInfo elementInfo, IMarshallingGenerator elementMarshaller, TypeSyntax unmanagedElementType, IElementsMarshallingCollectionSource collectionSource) 504private static bool ElementTypeIsSometimesNonBlittable(TypePositionInfo elementInfo) 522private GeneratorDiagnostic.NotSupported? ValidateCustomNativeTypeMarshallingSupported(TypePositionInfo info, StubCodeContext context, NativeMarshallingAttributeInfo marshalInfo)
Marshalling\BlittableMarshaller.cs (6)
14public ManagedTypeInfo AsNativeType(TypePositionInfo info) 19public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 24public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 37public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 97public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) 102public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\BoolMarshaller.cs (6)
29public ManagedTypeInfo AsNativeType(TypePositionInfo info) 35public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 40public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 50public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 98public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; 100public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\BreakingChangeDetector.cs (1)
17public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context)
Marshalling\ByValueContentsMarshalKindValidator.cs (4)
9/// An <see cref="IMarshallingGeneratorResolver"/> implementation that wraps an inner <see cref="IMarshallingGeneratorResolver"/> instance and validates that the <see cref="TypePositionInfo.ByValueContentsMarshalKind"/> on the provided <see cref="TypePositionInfo"/> is valid in the current marshalling scenario. 22public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 28private static ResolvedGenerator ValidateByValueMarshalKind(TypePositionInfo info, StubCodeContext context, ResolvedGenerator generator)
Marshalling\ByValueMarshalKindSupportDescriptor.cs (4)
12public ByValueMarshalKindSupport GetSupport(TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 43/// Provides an implementation of <see cref="IMarshallingGenerator.SupportsByValueMarshalKind(ByValueContentsMarshalKind, TypePositionInfo, StubCodeContext, out GeneratorDiagnostic?)"/> through <see cref="GetSupport(ByValueContentsMarshalKind, TypePositionInfo, StubCodeContext, out GeneratorDiagnostic?)"/> 72public ByValueMarshalKindSupport GetSupport(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\CharMarshaller.cs (7)
18public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 36public ManagedTypeInfo AsNativeType(TypePositionInfo info) 42public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 47public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 123public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) 129private static bool IsPinningPathSupported(TypePositionInfo info, StubCodeContext context) 137public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\CharMarshallingGeneratorResolver.cs (2)
24public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) 34private ResolvedGenerator CreateCharMarshaller(TypePositionInfo info, StubCodeContext context)
Marshalling\CompositeMarshallingGeneratorResolver.cs (1)
26public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context)
Marshalling\CustomTypeMarshallingGenerator.cs (7)
26public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 31public ManagedTypeInfo AsNativeType(TypePositionInfo info) 36public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 41public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 106private bool ShouldGenerateByValueOutMarshalling(TypePositionInfo info, StubCodeContext context) 115public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) 120public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\DelegateMarshaller.cs (6)
15public ManagedTypeInfo AsNativeType(TypePositionInfo info) 20public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 25public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 30public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 93public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; 95public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\ElementsMarshalling.cs (36)
17InvocationExpressionSyntax GetUnmanagedValuesDestination(TypePositionInfo info, StubCodeContext context); 18InvocationExpressionSyntax GetManagedValuesSource(TypePositionInfo info, StubCodeContext context); 19InvocationExpressionSyntax GetUnmanagedValuesSource(TypePositionInfo info, StubCodeContext context); 20InvocationExpressionSyntax GetManagedValuesDestination(TypePositionInfo info, StubCodeContext context); 37public StatementSyntax GenerateClearUnmanagedDestination(TypePositionInfo info, StubCodeContext context) 50public StatementSyntax GenerateClearManagedValuesDestination(TypePositionInfo info, StubCodeContext context) 58public abstract StatementSyntax GenerateSetupStatement(TypePositionInfo info, StubCodeContext context); 59public abstract StatementSyntax GenerateUnmanagedToManagedByValueOutMarshalStatement(TypePositionInfo info, StubCodeContext context); 60public abstract StatementSyntax GenerateMarshalStatement(TypePositionInfo info, StubCodeContext context); 61public abstract StatementSyntax GenerateManagedToUnmanagedByValueOutUnmarshalStatement(TypePositionInfo info, StubCodeContext context); 63public abstract StatementSyntax GenerateUnmarshalStatement(TypePositionInfo info, StubCodeContext context); 64public abstract StatementSyntax GenerateElementCleanupStatement(TypePositionInfo info, StubCodeContext context); 71public static StatementSyntax GetNumElementsAssignmentFromManagedValuesSource(this IElementsMarshallingCollectionSource source, TypePositionInfo info, StubCodeContext context) 85public static StatementSyntax GetNumElementsAssignmentFromManagedValuesDestination(this IElementsMarshallingCollectionSource source, TypePositionInfo info, StubCodeContext context) 115public override StatementSyntax GenerateUnmanagedToManagedByValueOutMarshalStatement(TypePositionInfo info, StubCodeContext context) 139public override StatementSyntax GenerateMarshalStatement(TypePositionInfo info, StubCodeContext context) 150public override StatementSyntax GenerateManagedToUnmanagedByValueOutUnmarshalStatement(TypePositionInfo info, StubCodeContext context) 179public override StatementSyntax GenerateUnmarshalStatement(TypePositionInfo info, StubCodeContext context) 209public override StatementSyntax GenerateElementCleanupStatement(TypePositionInfo info, StubCodeContext context) => EmptyStatement(); 210public override StatementSyntax GenerateSetupStatement(TypePositionInfo info, StubCodeContext context) => EmptyStatement(); 220private readonly TypePositionInfo _elementInfo; 225TypePositionInfo elementInfo, 234public override StatementSyntax GenerateMarshalStatement(TypePositionInfo info, StubCodeContext context) 272public override StatementSyntax GenerateUnmarshalStatement(TypePositionInfo info, StubCodeContext context) 298public override StatementSyntax GenerateManagedToUnmanagedByValueOutUnmarshalStatement(TypePositionInfo info, StubCodeContext context) 344public override StatementSyntax GenerateElementCleanupStatement(TypePositionInfo info, StubCodeContext context) 387public override StatementSyntax GenerateUnmanagedToManagedByValueOutMarshalStatement(TypePositionInfo info, StubCodeContext context) 453TypePositionInfo info, 456TypePositionInfo elementInfo, 458out TypePositionInfo localElementInfo, 487TypePositionInfo info, 490TypePositionInfo elementInfo, 494var elementStatements = GenerateElementStages(info, context, elementMarshaller, elementInfo, out var elementSetupSubContext, out var localElementInfo, stagesToGeneratePerElement); 524private static bool UsesLastIndexMarshalled(TypePositionInfo info, StubCodeContext context) 539private static bool ShouldCleanUpAllElements(TypePositionInfo info, StubCodeContext context) 548public override StatementSyntax GenerateSetupStatement(TypePositionInfo info, StubCodeContext context)
Marshalling\Forwarder.cs (6)
12public ManagedTypeInfo AsNativeType(TypePositionInfo info) 17public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 22public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 27public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 32public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => false; 34public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\GeneratorDiagnostic.cs (5)
13private GeneratorDiagnostic(TypePositionInfo typePositionInfo, StubCodeContext stubCodeContext, bool isFatal) 24public TypePositionInfo TypePositionInfo { get; } 30public sealed record NotSupported(TypePositionInfo TypePositionInfo, StubCodeContext Context) : GeneratorDiagnostic(TypePositionInfo, Context, isFatal: true) 47public sealed record UnnecessaryData(TypePositionInfo TypePositionInfo, StubCodeContext StubCodeContext, ImmutableArray<Location> UnnecessaryDataLocations) : GeneratorDiagnostic(TypePositionInfo, StubCodeContext, isFatal: false) 66public sealed record NotRecommended(TypePositionInfo TypePositionInfo, StubCodeContext StubCodeContext) : GeneratorDiagnostic(TypePositionInfo, StubCodeContext, isFatal: false)
Marshalling\ICustomTypeMarshallingStrategy.cs (12)
14ManagedTypeInfo AsNativeType(TypePositionInfo info); 16IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context); 18IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context); 20IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context); 22IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context); 24IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context); 26IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context); 28IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context); 30IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context); 32IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context); 34IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context); 36bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context);
Marshalling\IMarshallingGeneratorResolver.cs (1)
17TypePositionInfo info,
Marshalling\MarshalAsMarshallingGeneratorResolver.cs (1)
35TypePositionInfo info,
Marshalling\MarshallerHelpers.cs (25)
64public static string GetMarshallerIdentifier(TypePositionInfo info, StubCodeContext context) 69public static string GetManagedSpanIdentifier(TypePositionInfo info, StubCodeContext context) 74public static string GetNativeSpanIdentifier(TypePositionInfo info, StubCodeContext context) 79public static string GetNumElementsIdentifier(TypePositionInfo info, StubCodeContext context) 84public static string GetLastIndexMarshalledIdentifier(TypePositionInfo info, StubCodeContext context) 89internal static bool CanUseCallerAllocatedBuffer(TypePositionInfo info, StubCodeContext context) 216public static IEnumerable<TypePositionInfo> GetDependentElementsOfMarshallingInfo( 221if (nestedCollection.ElementCountInfo is CountElementCountInfo { ElementInfo: TypePositionInfo nestedCountElement }) 225if (nestedCountElement.ManagedIndex != TypePositionInfo.UnsetIndex || nestedCountElement.NativeIndex != TypePositionInfo.UnsetIndex) 232foreach (TypePositionInfo nestedElement in GetDependentElementsOfMarshallingInfo(mode.Value.CollectionElementMarshallingInfo)) 234if (nestedElement.ManagedIndex != TypePositionInfo.UnsetIndex || nestedElement.NativeIndex != TypePositionInfo.UnsetIndex) 244public static StatementSyntax SkipInitOrDefaultInit(TypePositionInfo info, StubCodeContext context) 266public static StatementSyntax DefaultInit(TypePositionInfo info, StubCodeContext context) 275/// Get the marshalling direction for a given <see cref="TypePositionInfo"/> in a given <see cref="StubCodeContext"/>. 282public static MarshalDirection GetMarshalDirection(TypePositionInfo info, StubCodeContext context) 337public static StubCodeContext.Stage GetCleanupStage(TypePositionInfo info, StubCodeContext context) 359public static void ValidateCountInfoAvailableAtCall(MarshalDirection stubDirection, TypePositionInfo info, GeneratorDiagnosticsBag generatorDiagnostics, IMethodSymbol symbol, DiagnosticDescriptor outParamDescriptor, DiagnosticDescriptor returnValueDescriptor) 367|| info.ManagedIndex is TypePositionInfo.ReturnIndex) 373Location location = TypePositionInfo.GetLocation(info, symbol); 381else if (countInfo.ElementInfo.ManagedIndex is TypePositionInfo.ReturnIndex) 383Location location = TypePositionInfo.GetLocation(info, symbol); 394public static SyntaxTokenList GetManagedParameterModifiers(TypePositionInfo typeInfo) 437public static SyntaxToken GetManagedArgumentRefKindKeyword(TypePositionInfo typeInfo)
Marshalling\MarshallingGenerator.cs (13)
11/// An enumeration describing how a <see cref="TypePositionInfo"/> should be represented in its corresponding native signature element (parameter, field, or return value). 21/// The native signature should be the type returned by <see cref="IMarshallingGenerator.AsNativeType(TypePositionInfo)"/> passed by value. 26/// The native signature should be a pointer to the type returned by <see cref="IMarshallingGenerator.AsNativeType(TypePositionInfo)"/> passed by value. 32/// An enumeration describing how a <see cref="TypePositionInfo"/> should be represented in its corresponding native signature element (parameter, field, or return value). 42/// The native identifier provided by <see cref="StubCodeContext.GetIdentifiers(TypePositionInfo)"/> should be passed by value. 47/// The address of the native identifier provided by <see cref="StubCodeContext.GetIdentifiers(TypePositionInfo)"/> should be passed by value. 52/// The native identifier provided by <see cref="StubCodeContext.GetIdentifiers(TypePositionInfo)"/> should be cast to the native type. 90ManagedTypeInfo AsNativeType(TypePositionInfo info); 97SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info); 105ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context); 119IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context); 131bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context); 145ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic);
Marshalling\MarshallingGeneratorExtensions.cs (7)
20public static TypeSyntax AsReturnType(this IMarshallingGenerator generator, TypePositionInfo info) 36public static AttributeListSyntax? GenerateAttributesForReturnType(this IMarshallingGenerator generator, TypePositionInfo info) 60public static ParameterSyntax AsParameter(this IMarshallingGenerator generator, TypePositionInfo info, StubCodeContext context) 105private static ParameterSyntax GenerateForwardingParameter(TypePositionInfo info, string identifier) 140public static ArgumentSyntax AsArgument(this IMarshallingGenerator generator, TypePositionInfo info, StubCodeContext context) 154public static ArgumentSyntax AsManagedArgument(this IMarshallingGenerator generator, TypePositionInfo info, StubCodeContext context) 164public static ExpressionSyntax GenerateNativeByRefInitialization(this IMarshallingGenerator generator, TypePositionInfo info, StubCodeContext context)
Marshalling\NoMarshallingInfoErrorResolver.cs (1)
15TypePositionInfo info,
Marshalling\NotSupportedResolver.cs (1)
8public ResolvedGenerator Create(TypePositionInfo info, StubCodeContext context) =>
Marshalling\StatefulMarshallingStrategy.cs (53)
27public ManagedTypeInfo AsNativeType(TypePositionInfo info) 32public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; 34public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 48public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 62public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 77public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 91public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) 106public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 121public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) 135public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) 157public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) 173public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) 184public static string GetMarshallerIdentifier(TypePositionInfo info, StubCodeContext context) 206public ManagedTypeInfo AsNativeType(TypePositionInfo info) 211public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 216public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 221public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 249public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) 254public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) 259public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) 264public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) 269public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 274public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) 279public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateGuaranteedUnmarshalStatements(info, context); 280public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateNotifyForSuccessfulInvokeStatements(info, context); 285public InvocationExpressionSyntax GetUnmanagedValuesDestination(TypePositionInfo info, StubCodeContext context) 295public InvocationExpressionSyntax GetManagedValuesSource(TypePositionInfo info, StubCodeContext context) 305public InvocationExpressionSyntax GetUnmanagedValuesSource(TypePositionInfo info, StubCodeContext context) 317public InvocationExpressionSyntax GetManagedValuesDestination(TypePositionInfo info, StubCodeContext context) 355public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _innerMarshaller.AsNativeType(info); 357public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 371public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 385public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateGuaranteedUnmarshalStatements(info, context); 387public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 416public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateNotifyForSuccessfulInvokeStatements(info, context); 417public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinnedMarshalStatements(info, context); 418public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinStatements(info, context); 419public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) 447public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 483public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalCaptureStatements(info, context); 485public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; 500public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _innerMarshaller.AsNativeType(info); 502public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 519public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 535public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateGuaranteedUnmarshalStatements(info, context); 537public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateMarshalStatements(info, context); 539public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateNotifyForSuccessfulInvokeStatements(info, context); 540public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinnedMarshalStatements(info, context); 541public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinStatements(info, context); 542public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateSetupStatements(info, context); 544public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalStatements(info, context); 546public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalCaptureStatements(info, context); 548public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.UsesNativeIdentifier(info, context);
Marshalling\StatelessMarshallingStrategy.cs (64)
29public ManagedTypeInfo AsNativeType(TypePositionInfo info) 34public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; 36public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 38public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 40public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 60public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 99public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) 104public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 124public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) 129public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) 134public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) 139public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) 163public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _innerMarshaller.AsNativeType(info); 164public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateCleanupCallerAllocatedResourcesStatements(info, context); 165public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateCleanupCalleeAllocatedResourcesStatements(info, context); 166public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateGuaranteedUnmarshalStatements(info, context); 168public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 249public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinnedMarshalStatements(info, context); 250public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinStatements(info, context); 251public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateSetupStatements(info, context); 252public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalCaptureStatements(info, context); 253public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalStatements(info, context); 254public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.UsesNativeIdentifier(info, context); 256public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateNotifyForSuccessfulInvokeStatements(info, context); 270public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _innerMarshaller.AsNativeType(info); 272public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 291public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 310public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateGuaranteedUnmarshalStatements(info, context); 311public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateMarshalStatements(info, context); 312public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateNotifyForSuccessfulInvokeStatements(info, context); 313public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinnedMarshalStatements(info, context); 314public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinStatements(info, context); 315public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateSetupStatements(info, context); 316public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalCaptureStatements(info, context); 317public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalStatements(info, context); 318public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.UsesNativeIdentifier(info, context); 339public ManagedTypeInfo AsNativeType(TypePositionInfo info) 344public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 358public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 378public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 408public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 438public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 439public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 440public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 441public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) 459public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 461public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 496public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true; 508public InvocationExpressionSyntax GetUnmanagedValuesDestination(TypePositionInfo info, StubCodeContext context) 526public InvocationExpressionSyntax GetManagedValuesSource(TypePositionInfo info, StubCodeContext context) 539public InvocationExpressionSyntax GetUnmanagedValuesSource(TypePositionInfo info, StubCodeContext context) 557public InvocationExpressionSyntax GetManagedValuesDestination(TypePositionInfo info, StubCodeContext context) 599public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _unmanagedType; 601public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 635public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 668public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _spaceMarshallingStrategy.GenerateGuaranteedUnmarshalStatements(info, context); 670public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 700public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _spaceMarshallingStrategy.GenerateNotifyForSuccessfulInvokeStatements(info, context); 701public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => _spaceMarshallingStrategy.GeneratePinnedMarshalStatements(info, context); 702public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => _spaceMarshallingStrategy.GeneratePinStatements(info, context); 704public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) 715public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => Array.Empty<StatementSyntax>(); 717public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) 754public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => true;
Marshalling\StaticPinnableManagedValueMarshaller.cs (8)
24public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) 42public ManagedTypeInfo AsNativeType(TypePositionInfo info) 47public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) 52public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 62public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) 71private static bool IsPinningPathSupported(TypePositionInfo info, StubCodeContext context) 76private IEnumerable<StatementSyntax> GeneratePinningPath(TypePositionInfo info, StubCodeContext context) 103public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic)
Marshalling\UnmanagedToManagedOwnershipTrackingStrategy.cs (35)
13/// Marshalling strategy that introduces a variable to hold the initial value of the provided <see cref="TypePositionInfo"/> and a variable to track if the original value has been replaced. 25public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _innerMarshaller.AsNativeType(info); 27public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateCleanupCallerAllocatedResourcesStatements(info, context); 28public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateCleanupCalleeAllocatedResourcesStatements(info, context); 30public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateGuaranteedUnmarshalStatements(info, context); 31public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) 48public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateNotifyForSuccessfulInvokeStatements(info, context); 49public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinnedMarshalStatements(info, context); 51public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinStatements(info, context); 52public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) 73public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalCaptureStatements(info, context); 75public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalStatements(info, context); 76public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.UsesNativeIdentifier(info, context); 92public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _innerMarshaller.AsNativeType(info); 94public IEnumerable<StatementSyntax> GenerateCleanupCallerAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 107public IEnumerable<StatementSyntax> GenerateCleanupCalleeAllocatedResourcesStatements(TypePositionInfo info, StubCodeContext context) 120public IEnumerable<StatementSyntax> GenerateGuaranteedUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateGuaranteedUnmarshalStatements(info, context); 121public IEnumerable<StatementSyntax> GenerateMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateMarshalStatements(info, context); 123public IEnumerable<StatementSyntax> GenerateNotifyForSuccessfulInvokeStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateNotifyForSuccessfulInvokeStatements(info, context); 124public IEnumerable<StatementSyntax> GeneratePinnedMarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinnedMarshalStatements(info, context); 126public IEnumerable<StatementSyntax> GeneratePinStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GeneratePinStatements(info, context); 127public IEnumerable<StatementSyntax> GenerateSetupStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateSetupStatements(info, context); 129public IEnumerable<StatementSyntax> GenerateUnmarshalCaptureStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalCaptureStatements(info, context); 131public IEnumerable<StatementSyntax> GenerateUnmarshalStatements(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.GenerateUnmarshalStatements(info, context); 132public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _innerMarshaller.UsesNativeIdentifier(info, context); 136/// Marshalling strategy to cache the initial value of a given <see cref="TypePositionInfo"/> in a local variable and cleanup that value in the cleanup stage. 148public ManagedTypeInfo AsNativeType(TypePositionInfo info) => _inner.AsNativeType(info); 149public IEnumerable<StatementSyntax> Generate(TypePositionInfo info, StubCodeContext context) 179public SignatureBehavior GetNativeSignatureBehavior(TypePositionInfo info) => _inner.GetNativeSignatureBehavior(info); 180public ValueBoundaryBehavior GetValueBoundaryBehavior(TypePositionInfo info, StubCodeContext context) => _inner.GetValueBoundaryBehavior(info, context); 181public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind, TypePositionInfo info, StubCodeContext context, out GeneratorDiagnostic? diagnostic) 183public bool UsesNativeIdentifier(TypePositionInfo info, StubCodeContext context) => _inner.UsesNativeIdentifier(info, context); 203public override (string managed, string native) GetIdentifiers(TypePositionInfo info) 209public override string GetAdditionalIdentifier(TypePositionInfo info, string name) => _innerContext.GetAdditionalIdentifier(info, name); 219public static StatementSyntax DeclareOriginalValueIdentifier(TypePositionInfo info, StubCodeContext context, ManagedTypeInfo nativeType)
MarshallingAttributeInfo.cs (3)
100public sealed record CountElementCountInfo(TypePositionInfo ElementInfo) : CountInfo 105public sealed record SizeAndParamIndexInfo(int ConstSize, TypePositionInfo? ParamAtIndex) : CountInfo 109public const TypePositionInfo UnspecifiedParam = null;
MarshallingInfoParser.cs (22)
109/// Get a <see cref="TypePositionInfo"/> instance for the given element name. 112/// <param name="elementName">The element name to retrieve a <see cref="TypePositionInfo"/> instance for.</param> 113/// <param name="marshallingInfoCallback">A callback to retrieve marshalling info to put into the <see cref="TypePositionInfo"/>.</param> 116/// <returns><c>true</c> if a <see cref="TypePositionInfo"/> instance could be created for the type; otherwise <c>false</c></returns> 117bool TryGetInfoForElementName(AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out TypePositionInfo info); 119/// Get a <see cref="TypePositionInfo"/> instance for the given element index. 122/// <param name="paramIndex">The element index to retrieve a <see cref="TypePositionInfo"/> instance for.</param> 123/// <param name="marshallingInfoCallback">A callback to retrieve marshalling info to put into the <see cref="TypePositionInfo"/>.</param> 126/// <returns><c>true</c> if a <see cref="TypePositionInfo"/> instance could be created for the type; otherwise <c>false</c></returns> 127bool TryGetInfoForParamIndex(AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out TypePositionInfo info); 136/// Get a <see cref="TypePositionInfo"/> instance for the given element name. 139/// <param name="elementName">The element name to retrieve a <see cref="TypePositionInfo"/> instance for.</param> 140/// <param name="marshallingInfoCallback">A callback to retrieve marshalling info to put into the <see cref="TypePositionInfo"/>.</param> 142/// <returns><c>true</c> if a <see cref="TypePositionInfo"/> instance could be created for the type; otherwise <c>false</c></returns> 143public static bool TryGetInfoForElementName(this IElementInfoProvider provider, AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, out TypePositionInfo info) 149/// Get a <see cref="TypePositionInfo"/> instance for the given element index. 152/// <param name="paramIndex">The element index to retrieve a <see cref="TypePositionInfo"/> instance for.</param> 153/// <param name="marshallingInfoCallback">A callback to retrieve marshalling info to put into the <see cref="TypePositionInfo"/>.</param> 155/// <returns><c>true</c> if a <see cref="TypePositionInfo"/> instance could be created for the type; otherwise <c>false</c></returns> 156public static bool TryGetInfoForParamIndex(this IElementInfoProvider provider, AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, out TypePositionInfo info) 298public bool TryGetInfoForElementName(AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, [NotNullWhen(true)] out TypePositionInfo? info) 325public bool TryGetInfoForParamIndex(AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, [NotNullWhen(true)] out TypePositionInfo? info)
MarshalUsingAttributeParser.cs (1)
103if (!elementInfoProvider.TryGetInfoForElementName(attributeData, elementName, marshallingInfoCallback, out TypePositionInfo elementInfo))
MethodSignatureElementInfoProvider.cs (5)
29public bool TryGetInfoForElementName(AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out TypePositionInfo info) 37ManagedIndex = TypePositionInfo.ReturnIndex 47info = TypePositionInfo.CreateForParameter( 60public bool TryGetInfoForParamIndex(AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out TypePositionInfo info) 69info = TypePositionInfo.CreateForParameter(
NativeToManagedStubCodeContext.cs (1)
30public override (string managed, string native) GetIdentifiers(TypePositionInfo info)
SignatureContext.cs (15)
30public ImmutableArray<TypePositionInfo> ElementTypeInformation { get; init; } 32public IEnumerable<TypePositionInfo> ManagedParameters => ElementTypeInformation.Where(tpi => !TypePositionInfo.IsSpecialIndex(tpi.ManagedIndex)); 40foreach (TypePositionInfo typeInfo in ElementTypeInformation) 42if (typeInfo.ManagedIndex != TypePositionInfo.UnsetIndex 43&& typeInfo.ManagedIndex != TypePositionInfo.ReturnIndex) 62ImmutableArray<TypePositionInfo> typeInfos = GenerateTypeInformation(method, marshallingInfoParser, env); 101private static ImmutableArray<TypePositionInfo> GenerateTypeInformation( 108ImmutableArray<TypePositionInfo>.Builder typeInfos = ImmutableArray.CreateBuilder<TypePositionInfo>(); 113var typeInfo = TypePositionInfo.CreateForParameter(param, marshallingInfo, env.Compilation); 122TypePositionInfo retTypeInfo = new(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(method.ReturnType), marshallingInfoParser.ParseMarshallingInfo(method.ReturnType, method.GetReturnTypeAttributes())); 125ManagedIndex = TypePositionInfo.ReturnIndex, 126NativeIndex = TypePositionInfo.ReturnIndex,
StubCodeContext.cs (4)
45/// <see cref="IMarshallingGenerator.AsArgument(TypePositionInfo)"/> should provide the 127public virtual (string managed, string native) GetIdentifiers(TypePositionInfo info) 138public virtual string GetAdditionalIdentifier(TypePositionInfo info, string name) 148public bool IsInStubReturnPosition(TypePositionInfo info)
TypePositionInfo.cs (3)
83public static TypePositionInfo CreateForParameter(IParameterSymbol paramSymbol, MarshallingInfo marshallingInfo, Compilation compilation) 87var typeInfo = new TypePositionInfo(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(paramSymbol.Type), marshallingInfo) 100public static Location GetLocation(TypePositionInfo info, IMethodSymbol methodSymbol)
VariableDeclarations.cs (2)
23TypePositionInfo info = marshaller.TypeInfo; 86TypePositionInfo info = marshaller.TypeInfo;